You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					322 lines
				
				8.3 KiB
			
		
		
			
		
	
	
					322 lines
				
				8.3 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								// Type definitions for prosemirror-tables 0.8
							 | 
						||
| 
								 | 
							
								// Project: https://github.com/ProseMirror/prosemirror-tables
							 | 
						||
| 
								 | 
							
								// Definitions by: Oscar Wallhult <https://github.com/superchu>
							 | 
						||
| 
								 | 
							
								//                 Eduard Shvedai <https://github.com/eshvedai>
							 | 
						||
| 
								 | 
							
								//                 Patrick Simmelbauer <https://github.com/patsimm>
							 | 
						||
| 
								 | 
							
								// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
							 | 
						||
| 
								 | 
							
								// TypeScript Version: 2.3
							 | 
						||
| 
								 | 
							
								import {
							 | 
						||
| 
								 | 
							
								  EditorState,
							 | 
						||
| 
								 | 
							
								  Plugin,
							 | 
						||
| 
								 | 
							
								  SelectionRange,
							 | 
						||
| 
								 | 
							
								  Transaction,
							 | 
						||
| 
								 | 
							
								  PluginKey,
							 | 
						||
| 
								 | 
							
								  Selection,
							 | 
						||
| 
								 | 
							
								} from 'prosemirror-state';
							 | 
						||
| 
								 | 
							
								import {
							 | 
						||
| 
								 | 
							
								  Node as ProsemirrorNode,
							 | 
						||
| 
								 | 
							
								  NodeSpec,
							 | 
						||
| 
								 | 
							
								  Slice,
							 | 
						||
| 
								 | 
							
								  ResolvedPos,
							 | 
						||
| 
								 | 
							
								  Schema,
							 | 
						||
| 
								 | 
							
								  NodeType,
							 | 
						||
| 
								 | 
							
								} from 'prosemirror-model';
							 | 
						||
| 
								 | 
							
								import { Mappable } from 'prosemirror-transform';
							 | 
						||
| 
								 | 
							
								import { NodeView } from 'prosemirror-view';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export interface TableEditingOptions {
							 | 
						||
| 
								 | 
							
								  allowTableNodeSelection?: boolean;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export interface TableNodesOptions {
							 | 
						||
| 
								 | 
							
								  tableGroup?: string;
							 | 
						||
| 
								 | 
							
								  cellContent: string;
							 | 
						||
| 
								 | 
							
								  cellAttributes: { [key: string]: CellAttributes };
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export type getFromDOM = (dom: Element) => any;
							 | 
						||
| 
								 | 
							
								export type setDOMAttr = (value: any, attrs: any) => any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export interface CellAttributes {
							 | 
						||
| 
								 | 
							
								  default: any;
							 | 
						||
| 
								 | 
							
								  getFromDOM?: getFromDOM;
							 | 
						||
| 
								 | 
							
								  setDOMAttr?: setDOMAttr;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export interface TableNodes {
							 | 
						||
| 
								 | 
							
								  table: NodeSpec;
							 | 
						||
| 
								 | 
							
								  table_row: NodeSpec;
							 | 
						||
| 
								 | 
							
								  table_cell: NodeSpec;
							 | 
						||
| 
								 | 
							
								  table_header: NodeSpec;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function tableNodes(options: TableNodesOptions): TableNodes;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export interface CellSelectionJSON {
							 | 
						||
| 
								 | 
							
								  type: string;
							 | 
						||
| 
								 | 
							
								  anchor: number;
							 | 
						||
| 
								 | 
							
								  head: number;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export class CellSelection<S extends Schema = any> {
							 | 
						||
| 
								 | 
							
								  constructor($anchorCell: ResolvedPos<S>, $headCell?: ResolvedPos<S>);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  from: number;
							 | 
						||
| 
								 | 
							
								  to: number;
							 | 
						||
| 
								 | 
							
								  $from: ResolvedPos<S>;
							 | 
						||
| 
								 | 
							
								  $to: ResolvedPos<S>;
							 | 
						||
| 
								 | 
							
								  anchor: number;
							 | 
						||
| 
								 | 
							
								  head: number;
							 | 
						||
| 
								 | 
							
								  $anchor: ResolvedPos<S>;
							 | 
						||
| 
								 | 
							
								  $head: ResolvedPos<S>;
							 | 
						||
| 
								 | 
							
								  $anchorCell: ResolvedPos<S>;
							 | 
						||
| 
								 | 
							
								  $headCell: ResolvedPos<S>;
							 | 
						||
| 
								 | 
							
								  empty: boolean;
							 | 
						||
| 
								 | 
							
								  ranges: Array<SelectionRange<S>>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  map(doc: ProsemirrorNode<S>, mapping: Mappable): any;
							 | 
						||
| 
								 | 
							
								  content(): Slice<S>;
							 | 
						||
| 
								 | 
							
								  replace(tr: Transaction<S>, content: Slice<S>): void;
							 | 
						||
| 
								 | 
							
								  replaceWith(tr: Transaction<S>, node: ProsemirrorNode<S>): void;
							 | 
						||
| 
								 | 
							
								  forEachCell(f: (node: ProsemirrorNode<S>, pos: number) => void): void;
							 | 
						||
| 
								 | 
							
								  isRowSelection(): boolean;
							 | 
						||
| 
								 | 
							
								  isColSelection(): boolean;
							 | 
						||
| 
								 | 
							
								  eq(other: Selection<S>): boolean;
							 | 
						||
| 
								 | 
							
								  toJSON(): CellSelectionJSON;
							 | 
						||
| 
								 | 
							
								  getBookmark(): { anchor: number; head: number };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  static colSelection<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								    anchorCell: ResolvedPos<S>,
							 | 
						||
| 
								 | 
							
								    headCell?: ResolvedPos<S>,
							 | 
						||
| 
								 | 
							
								  ): CellSelection<S>;
							 | 
						||
| 
								 | 
							
								  static rowSelection<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								    anchorCell: ResolvedPos<S>,
							 | 
						||
| 
								 | 
							
								    headCell?: ResolvedPos<S>,
							 | 
						||
| 
								 | 
							
								  ): CellSelection<S>;
							 | 
						||
| 
								 | 
							
								  static create<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								    doc: ProsemirrorNode<S>,
							 | 
						||
| 
								 | 
							
								    anchorCell: number,
							 | 
						||
| 
								 | 
							
								    headCell?: number,
							 | 
						||
| 
								 | 
							
								  ): CellSelection<S>;
							 | 
						||
| 
								 | 
							
								  static fromJSON<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								    doc: ProsemirrorNode<S>,
							 | 
						||
| 
								 | 
							
								    json: CellSelectionJSON,
							 | 
						||
| 
								 | 
							
								  ): CellSelection<S>;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export interface Rect {
							 | 
						||
| 
								 | 
							
								  left: number;
							 | 
						||
| 
								 | 
							
								  top: number;
							 | 
						||
| 
								 | 
							
								  right: number;
							 | 
						||
| 
								 | 
							
								  bottom: number;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export interface TableRect extends Rect {
							 | 
						||
| 
								 | 
							
								  tableStart: number;
							 | 
						||
| 
								 | 
							
								  map: TableMap;
							 | 
						||
| 
								 | 
							
								  table: ProsemirrorNode;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export class TableMap {
							 | 
						||
| 
								 | 
							
								  width: number;
							 | 
						||
| 
								 | 
							
								  height: number;
							 | 
						||
| 
								 | 
							
								  map: number[];
							 | 
						||
| 
								 | 
							
								  problems?: object[];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  findCell(pos: number): Rect;
							 | 
						||
| 
								 | 
							
								  colCount(pos: number): number;
							 | 
						||
| 
								 | 
							
								  nextCell(pos: number, axis: string, dir: number): number;
							 | 
						||
| 
								 | 
							
								  rectBetween(a: number, b: number): Rect;
							 | 
						||
| 
								 | 
							
								  cellsInRect(rect: Rect): number[];
							 | 
						||
| 
								 | 
							
								  positionAt(row: number, col: number, table: ProsemirrorNode): number;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  static get(table: ProsemirrorNode): TableMap;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function tableEditing(options?: TableEditingOptions): Plugin;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function deleteTable<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  state: EditorState<S>,
							 | 
						||
| 
								 | 
							
								  dispatch?: (tr: Transaction<S>) => void,
							 | 
						||
| 
								 | 
							
								): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function goToNextCell<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  direction: number,
							 | 
						||
| 
								 | 
							
								): (state: EditorState<S>, dispatch?: (tr: Transaction<S>) => void) => boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function toggleHeaderCell<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  state: EditorState<S>,
							 | 
						||
| 
								 | 
							
								  dispatch?: (tr: Transaction<S>) => void,
							 | 
						||
| 
								 | 
							
								): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function toggleHeaderColumn<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  state: EditorState<S>,
							 | 
						||
| 
								 | 
							
								  dispatch?: (tr: Transaction<S>) => void,
							 | 
						||
| 
								 | 
							
								): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function toggleHeaderRow<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  state: EditorState<S>,
							 | 
						||
| 
								 | 
							
								  dispatch?: (tr: Transaction<S>) => void,
							 | 
						||
| 
								 | 
							
								): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Toggles between row/column header and normal cells (Only applies to first row/column).
							 | 
						||
| 
								 | 
							
								 * For deprecated behavior pass useDeprecatedLogic in options with true.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								export function toggleHeader<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  type: 'column' | 'row',
							 | 
						||
| 
								 | 
							
								  options?: { useDeprecatedLogic?: boolean },
							 | 
						||
| 
								 | 
							
								): (state: EditorState<S>, dispatch?: (tr: Transaction<S>) => void) => boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function setCellAttr<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  name: string,
							 | 
						||
| 
								 | 
							
								  value: any,
							 | 
						||
| 
								 | 
							
								): (state: EditorState<S>, dispatch?: (tr: Transaction<S>) => void) => boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function splitCell<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  state: EditorState<S>,
							 | 
						||
| 
								 | 
							
								  dispatch?: (tr: Transaction<S>) => void,
							 | 
						||
| 
								 | 
							
								): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export interface GetCellTypeOptions {
							 | 
						||
| 
								 | 
							
								  node: ProsemirrorNode;
							 | 
						||
| 
								 | 
							
								  row: number;
							 | 
						||
| 
								 | 
							
								  col: number;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function splitCellWithType<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  getCellType: (options: GetCellTypeOptions) => NodeType<S>,
							 | 
						||
| 
								 | 
							
								): (state: EditorState<S>, dispatch?: (tr: Transaction<S>) => void) => boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function mergeCells<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  state: EditorState<S>,
							 | 
						||
| 
								 | 
							
								  dispatch?: (tr: Transaction<S>) => void,
							 | 
						||
| 
								 | 
							
								): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function deleteRow<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  state: EditorState<S>,
							 | 
						||
| 
								 | 
							
								  dispatch?: (tr: Transaction<S>) => void,
							 | 
						||
| 
								 | 
							
								): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function selectedRect<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  state: EditorState<S>,
							 | 
						||
| 
								 | 
							
								): TableRect;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function rowIsHeader<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  map: TableMap,
							 | 
						||
| 
								 | 
							
								  table: ProsemirrorNode<S>,
							 | 
						||
| 
								 | 
							
								  row: number,
							 | 
						||
| 
								 | 
							
								): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function addRowAfter<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  state: EditorState<S>,
							 | 
						||
| 
								 | 
							
								  dispatch?: (tr: Transaction<S>) => void,
							 | 
						||
| 
								 | 
							
								): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function addRowBefore<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  state: EditorState<S>,
							 | 
						||
| 
								 | 
							
								  dispatch?: (tr: Transaction<S>) => void,
							 | 
						||
| 
								 | 
							
								): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function addRow<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  transaction: Transaction<S>,
							 | 
						||
| 
								 | 
							
								  rect: TableRect,
							 | 
						||
| 
								 | 
							
								  row: number,
							 | 
						||
| 
								 | 
							
								): Transaction<S>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function deleteColumn<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  state: EditorState<S>,
							 | 
						||
| 
								 | 
							
								  dispatch?: (tr: Transaction<S>) => void,
							 | 
						||
| 
								 | 
							
								): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function addColumnAfter<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  state: EditorState<S>,
							 | 
						||
| 
								 | 
							
								  dispatch?: (tr: Transaction<S>) => void,
							 | 
						||
| 
								 | 
							
								): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function addColumnBefore<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  state: EditorState<S>,
							 | 
						||
| 
								 | 
							
								  dispatch?: (tr: Transaction<S>) => void,
							 | 
						||
| 
								 | 
							
								): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function addColumn<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  transaction: Transaction<S>,
							 | 
						||
| 
								 | 
							
								  rect: TableRect,
							 | 
						||
| 
								 | 
							
								  row: number,
							 | 
						||
| 
								 | 
							
								): Transaction<S>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function columnResizing<S extends Schema = any>(props: {
							 | 
						||
| 
								 | 
							
								  handleWidth?: number;
							 | 
						||
| 
								 | 
							
								  cellMinWidth?: number;
							 | 
						||
| 
								 | 
							
								  View?: NodeView<S>;
							 | 
						||
| 
								 | 
							
								}): Plugin<S>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export const columnResizingPluginKey: PluginKey;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export const tableEditingKey: PluginKey;
							 | 
						||
| 
								 | 
							
								export const fixTablesKey: PluginKey;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function updateColumnsOnResize(
							 | 
						||
| 
								 | 
							
								  node: ProsemirrorNode,
							 | 
						||
| 
								 | 
							
								  colgroup: Element,
							 | 
						||
| 
								 | 
							
								  table: Element,
							 | 
						||
| 
								 | 
							
								  cellMinWidth: number,
							 | 
						||
| 
								 | 
							
								  overrideCol?: number,
							 | 
						||
| 
								 | 
							
								  overrideValue?: number,
							 | 
						||
| 
								 | 
							
								): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function cellAround<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  pos: ResolvedPos<S>,
							 | 
						||
| 
								 | 
							
								): ResolvedPos<S> | null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function isInTable(state: EditorState): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function removeColSpan<T extends {}>(
							 | 
						||
| 
								 | 
							
								  attrs: T,
							 | 
						||
| 
								 | 
							
								  pos: number,
							 | 
						||
| 
								 | 
							
								  n?: number,
							 | 
						||
| 
								 | 
							
								): T;
							 | 
						||
| 
								 | 
							
								export function addColSpan<T extends {}>(attrs: T, pos: number, n?: number): T;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								type TableRoles = 'table' | 'row' | 'cell' | 'header_cell';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function columnIsHeader(
							 | 
						||
| 
								 | 
							
								  map: TableMap,
							 | 
						||
| 
								 | 
							
								  table: ProsemirrorNode,
							 | 
						||
| 
								 | 
							
								  col: number,
							 | 
						||
| 
								 | 
							
								): boolean;
							 | 
						||
| 
								 | 
							
								export function tableNodeTypes(schema: Schema): Record<TableRoles, NodeType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function selectionCell<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  state: EditorState<S>,
							 | 
						||
| 
								 | 
							
								): ResolvedPos<S> | null | undefined;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function moveCellForward<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  pos: ResolvedPos<S>,
							 | 
						||
| 
								 | 
							
								): ResolvedPos<S>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function inSameTable<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  $a: ResolvedPos<S>,
							 | 
						||
| 
								 | 
							
								  $b: ResolvedPos<S>,
							 | 
						||
| 
								 | 
							
								): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function findCell(pos: ResolvedPos): {
							 | 
						||
| 
								 | 
							
								  top: number;
							 | 
						||
| 
								 | 
							
								  left: number;
							 | 
						||
| 
								 | 
							
								  right: number;
							 | 
						||
| 
								 | 
							
								  bottom: number;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function colCount(pos: ResolvedPos): number;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function nextCell<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  pos: ResolvedPos<S>,
							 | 
						||
| 
								 | 
							
								  axis: string,
							 | 
						||
| 
								 | 
							
								  dir: number,
							 | 
						||
| 
								 | 
							
								): null | ResolvedPos<S>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function fixTables<S extends Schema = any>(
							 | 
						||
| 
								 | 
							
								  state: EditorState<S>,
							 | 
						||
| 
								 | 
							
								  oldState?: EditorState<S>,
							 | 
						||
| 
								 | 
							
								): null | Transaction<S>;
							 |