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.
		
		
		
		
		
			
		
			
				
					549 lines
				
				15 KiB
			
		
		
			
		
	
	
					549 lines
				
				15 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								import { PluginKey, EditorState, Transaction, Selection, Plugin, Command } from 'prosemirror-state';
							 | 
						||
| 
								 | 
							
								import { Slice, Node, Attrs, ResolvedPos, NodeType, Fragment, NodeSpec, Schema } from 'prosemirror-model';
							 | 
						||
| 
								 | 
							
								import { EditorView, NodeView } from 'prosemirror-view';
							 | 
						||
| 
								 | 
							
								import { Mappable } from 'prosemirror-transform';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare const fixTablesKey: PluginKey<{
							 | 
						||
| 
								 | 
							
								    fixTables: boolean;
							 | 
						||
| 
								 | 
							
								}>;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Inspect all tables in the given state's document and return a
							 | 
						||
| 
								 | 
							
								 * transaction that fixes them, if necessary. If `oldState` was
							 | 
						||
| 
								 | 
							
								 * provided, that is assumed to hold a previous, known-good state,
							 | 
						||
| 
								 | 
							
								 * which will be used to avoid re-scanning unchanged parts of the
							 | 
						||
| 
								 | 
							
								 * document.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function fixTables(state: EditorState, oldState?: EditorState): Transaction | undefined;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								type Direction = -1 | 1;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function handlePaste(view: EditorView, _: ClipboardEvent, slice: Slice): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								type ColWidths = (number | null)[];
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								type Problem = {
							 | 
						||
| 
								 | 
							
								    type: 'missing' | 'overlong_rowspan' | 'collision' | 'colwidth mismatch';
							 | 
						||
| 
								 | 
							
								    pos?: number;
							 | 
						||
| 
								 | 
							
								    row?: number;
							 | 
						||
| 
								 | 
							
								    n?: number;
							 | 
						||
| 
								 | 
							
								    colwidth?: ColWidths;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								type Rect = {
							 | 
						||
| 
								 | 
							
								    left: number;
							 | 
						||
| 
								 | 
							
								    top: number;
							 | 
						||
| 
								 | 
							
								    right: number;
							 | 
						||
| 
								 | 
							
								    bottom: number;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * A table map describes the structure of a given table. To avoid
							 | 
						||
| 
								 | 
							
								 * recomputing them all the time, they are cached per table node. To
							 | 
						||
| 
								 | 
							
								 * be able to do that, positions saved in the map are relative to the
							 | 
						||
| 
								 | 
							
								 * start of the table, rather than the start of the document.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare class TableMap {
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * The width of the table
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    width: number;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * The table's height
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    height: number;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * A width * height array with the start position of
							 | 
						||
| 
								 | 
							
								     * the cell covering that part of the table in each slot
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    map: number[];
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * An optional array of problems (cell overlap or non-rectangular
							 | 
						||
| 
								 | 
							
								     * shape) for the table, used by the table normalizer.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    problems: Problem[] | null;
							 | 
						||
| 
								 | 
							
								    constructor(
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * The width of the table
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    width: number, 
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * The table's height
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    height: number, 
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * A width * height array with the start position of
							 | 
						||
| 
								 | 
							
								     * the cell covering that part of the table in each slot
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    map: number[], 
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * An optional array of problems (cell overlap or non-rectangular
							 | 
						||
| 
								 | 
							
								     * shape) for the table, used by the table normalizer.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    problems: Problem[] | null);
							 | 
						||
| 
								 | 
							
								    findCell(pos: number): Rect;
							 | 
						||
| 
								 | 
							
								    colCount(pos: number): number;
							 | 
						||
| 
								 | 
							
								    nextCell(pos: number, axis: string, dir: number): null | number;
							 | 
						||
| 
								 | 
							
								    rectBetween(a: number, b: number): Rect;
							 | 
						||
| 
								 | 
							
								    cellsInRect(rect: Rect): number[];
							 | 
						||
| 
								 | 
							
								    positionAt(row: number, col: number, table: Node): number;
							 | 
						||
| 
								 | 
							
								    static get(table: Node): TableMap;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								type MutableAttrs = {
							 | 
						||
| 
								 | 
							
								    -readonly [P in keyof Attrs]: Attrs[P];
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare const tableEditingKey: PluginKey<number>;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function cellAround($pos: ResolvedPos): ResolvedPos | null;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function isInTable(state: EditorState): boolean;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function selectionCell(state: EditorState): ResolvedPos | null | undefined;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function pointsAtCell($pos: ResolvedPos): boolean;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function moveCellForward($pos: ResolvedPos): ResolvedPos;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function inSameTable($a: ResolvedPos, $b: ResolvedPos): boolean;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function findCell($pos: ResolvedPos): Rect;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function colCount($pos: ResolvedPos): number;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function nextCell($pos: ResolvedPos, axis: string, dir: number): null | ResolvedPos;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function removeColSpan(attrs: Attrs, pos: number, n?: number): Attrs;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function addColSpan(attrs: Attrs, pos: number, n?: number): Attrs;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function columnIsHeader(map: TableMap, table: Node, col: number): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								interface CellSelectionJSON {
							 | 
						||
| 
								 | 
							
								    type: string;
							 | 
						||
| 
								 | 
							
								    anchor: number;
							 | 
						||
| 
								 | 
							
								    head: number;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * A [`Selection`](http://prosemirror.net/docs/ref/#state.Selection)
							 | 
						||
| 
								 | 
							
								 * subclass that represents a cell selection spanning part of a table.
							 | 
						||
| 
								 | 
							
								 * With the plugin enabled, these will be created when the user
							 | 
						||
| 
								 | 
							
								 * selects across cells, and will be drawn by giving selected cells a
							 | 
						||
| 
								 | 
							
								 * `selectedCell` CSS class.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare class CellSelection extends Selection {
							 | 
						||
| 
								 | 
							
								    $anchorCell: ResolvedPos;
							 | 
						||
| 
								 | 
							
								    $headCell: ResolvedPos;
							 | 
						||
| 
								 | 
							
								    constructor($anchorCell: ResolvedPos, $headCell?: ResolvedPos);
							 | 
						||
| 
								 | 
							
								    map(doc: Node, mapping: Mappable): CellSelection | Selection;
							 | 
						||
| 
								 | 
							
								    content(): Slice;
							 | 
						||
| 
								 | 
							
								    replace(tr: Transaction, content?: Slice): void;
							 | 
						||
| 
								 | 
							
								    replaceWith(tr: Transaction, node: Node): void;
							 | 
						||
| 
								 | 
							
								    forEachCell(f: (node: Node, pos: number) => void): void;
							 | 
						||
| 
								 | 
							
								    isColSelection(): boolean;
							 | 
						||
| 
								 | 
							
								    static colSelection($anchorCell: ResolvedPos, $headCell?: ResolvedPos | null): CellSelection;
							 | 
						||
| 
								 | 
							
								    isRowSelection(): boolean;
							 | 
						||
| 
								 | 
							
								    eq(other: unknown): boolean;
							 | 
						||
| 
								 | 
							
								    static rowSelection($anchorCell: ResolvedPos, $headCell?: ResolvedPos | null): CellSelection;
							 | 
						||
| 
								 | 
							
								    toJSON(): CellSelectionJSON;
							 | 
						||
| 
								 | 
							
								    static fromJSON(doc: Node, json: CellSelectionJSON): CellSelection;
							 | 
						||
| 
								 | 
							
								    static create(doc: Node, anchorCell: number, headCell?: number | null): CellSelection;
							 | 
						||
| 
								 | 
							
								    getBookmark(): CellBookmark;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare class CellBookmark {
							 | 
						||
| 
								 | 
							
								    anchor: number;
							 | 
						||
| 
								 | 
							
								    head: number;
							 | 
						||
| 
								 | 
							
								    constructor(anchor: number, head: number);
							 | 
						||
| 
								 | 
							
								    map(mapping: Mappable): CellBookmark;
							 | 
						||
| 
								 | 
							
								    resolve(doc: Node): CellSelection | Selection;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare const columnResizingPluginKey: PluginKey<ResizeState>;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								type ColumnResizingOptions = {
							 | 
						||
| 
								 | 
							
								    handleWidth?: number;
							 | 
						||
| 
								 | 
							
								    cellMinWidth?: number;
							 | 
						||
| 
								 | 
							
								    lastColumnResizable?: boolean;
							 | 
						||
| 
								 | 
							
								    View?: new (node: Node, cellMinWidth: number, view: EditorView) => NodeView;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								type Dragging = {
							 | 
						||
| 
								 | 
							
								    startX: number;
							 | 
						||
| 
								 | 
							
								    startWidth: number;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function columnResizing({ handleWidth, cellMinWidth, View, lastColumnResizable, }?: ColumnResizingOptions): Plugin;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare class ResizeState {
							 | 
						||
| 
								 | 
							
								    activeHandle: number;
							 | 
						||
| 
								 | 
							
								    dragging: Dragging | false;
							 | 
						||
| 
								 | 
							
								    constructor(activeHandle: number, dragging: Dragging | false);
							 | 
						||
| 
								 | 
							
								    apply(tr: any): ResizeState;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								type TableRect = Rect & {
							 | 
						||
| 
								 | 
							
								    tableStart: number;
							 | 
						||
| 
								 | 
							
								    map: TableMap;
							 | 
						||
| 
								 | 
							
								    table: Node;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Helper to get the selected rectangle in a table, if any. Adds table
							 | 
						||
| 
								 | 
							
								 * map, table node, and table start offset to the object for
							 | 
						||
| 
								 | 
							
								 * convenience.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function selectedRect(state: EditorState): TableRect;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Add a column at the given position in a table.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function addColumn(tr: Transaction, { map, tableStart, table }: TableRect, col: number): Transaction;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Command to add a column before the column with the selection.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function addColumnBefore(state: EditorState, dispatch?: (tr: Transaction) => void): boolean;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Command to add a column after the column with the selection.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function addColumnAfter(state: EditorState, dispatch?: (tr: Transaction) => void): boolean;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function removeColumn(tr: Transaction, { map, table, tableStart }: TableRect, col: number): void;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Command function that removes the selected columns from a table.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function deleteColumn(state: EditorState, dispatch?: (tr: Transaction) => void): boolean;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function rowIsHeader(map: TableMap, table: Node, row: number): boolean;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function addRow(tr: Transaction, { map, tableStart, table }: TableRect, row: number): Transaction;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Add a table row before the selection.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function addRowBefore(state: EditorState, dispatch?: (tr: Transaction) => void): boolean;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Add a table row after the selection.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function addRowAfter(state: EditorState, dispatch?: (tr: Transaction) => void): boolean;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function removeRow(tr: Transaction, { map, table, tableStart }: TableRect, row: number): void;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Remove the selected rows from a table.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function deleteRow(state: EditorState, dispatch?: (tr: Transaction) => void): boolean;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Merge the selected cells into a single cell. Only available when
							 | 
						||
| 
								 | 
							
								 * the selected cells' outline forms a rectangle.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function mergeCells(state: EditorState, dispatch?: (tr: Transaction) => void): boolean;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Split a selected cell, whose rowpan or colspan is greater than one,
							 | 
						||
| 
								 | 
							
								 * into smaller cells. Use the first cell type for the new cells.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function splitCell(state: EditorState, dispatch?: (tr: Transaction) => void): boolean;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								interface GetCellTypeOptions {
							 | 
						||
| 
								 | 
							
								    node: Node;
							 | 
						||
| 
								 | 
							
								    row: number;
							 | 
						||
| 
								 | 
							
								    col: number;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Split a selected cell, whose rowpan or colspan is greater than one,
							 | 
						||
| 
								 | 
							
								 * into smaller cells with the cell type (th, td) returned by getType function.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function splitCellWithType(getCellType: (options: GetCellTypeOptions) => NodeType): Command;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns a command that sets the given attribute to the given value,
							 | 
						||
| 
								 | 
							
								 * and is only available when the currently selected cell doesn't
							 | 
						||
| 
								 | 
							
								 * already have that attribute set to that value.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function setCellAttr(name: string, value: unknown): Command;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								type ToggleHeaderType = 'column' | 'row' | 'cell';
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Toggles between row/column header and normal cells (Only applies to first row/column).
							 | 
						||
| 
								 | 
							
								 * For deprecated behavior pass `useDeprecatedLogic` in options with true.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function toggleHeader(type: ToggleHeaderType, options?: {
							 | 
						||
| 
								 | 
							
								    useDeprecatedLogic: boolean;
							 | 
						||
| 
								 | 
							
								} | undefined): Command;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Toggles whether the selected row contains header cells.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare const toggleHeaderRow: Command;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Toggles whether the selected column contains header cells.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare const toggleHeaderColumn: Command;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Toggles whether the selected cells are header cells.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare const toggleHeaderCell: Command;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns a command for selecting the next (direction=1) or previous
							 | 
						||
| 
								 | 
							
								 * (direction=-1) cell in a table.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function goToNextCell(direction: Direction): Command;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Deletes the table around the selection, if any.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function deleteTable(state: EditorState, dispatch?: (tr: Transaction) => void): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @internal
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								type Area = {
							 | 
						||
| 
								 | 
							
								    width: number;
							 | 
						||
| 
								 | 
							
								    height: number;
							 | 
						||
| 
								 | 
							
								    rows: Fragment[];
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Get a rectangular area of cells from a slice, or null if the outer
							 | 
						||
| 
								 | 
							
								 * nodes of the slice aren't table cells or rows.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @internal
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function pastedCells(slice: Slice): Area | undefined;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Clip or extend (repeat) the given set of cells to cover the given
							 | 
						||
| 
								 | 
							
								 * width and height. Will clip rowspan/colspan cells at the edges when
							 | 
						||
| 
								 | 
							
								 * they stick out.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @internal
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function clipCells({ width, height, rows }: Area, newWidth: number, newHeight: number): Area;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Insert the given set of cells (as returned by `pastedCells`) into a
							 | 
						||
| 
								 | 
							
								 * table, at the position pointed at by rect.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @internal
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function insertCells(state: EditorState, dispatch: (tr: Transaction) => void, tableStart: number, rect: Rect, cells: Area): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								type getFromDOM = (dom: HTMLElement) => any;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								type setDOMAttr = (value: any, attrs: MutableAttrs) => void;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								interface CellAttributes {
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * The attribute's default value.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    default: any;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * A function to read the attribute's value from a DOM node.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    getFromDOM?: getFromDOM;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * A function to add the attribute's value to an attribute
							 | 
						||
| 
								 | 
							
								     * object that's used to render the cell's DOM.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    setDOMAttr?: setDOMAttr;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								interface TableNodesOptions {
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * A group name (something like `"block"`) to add to the table
							 | 
						||
| 
								 | 
							
								     * node type.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    tableGroup?: string;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * The content expression for table cells.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    cellContent: string;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Additional attributes to add to cells. Maps attribute names to
							 | 
						||
| 
								 | 
							
								     * objects with the following properties:
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    cellAttributes: {
							 | 
						||
| 
								 | 
							
								        [key: string]: CellAttributes;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								type TableNodes = Record<'table' | 'table_row' | 'table_cell' | 'table_header', NodeSpec>;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * This function creates a set of [node
							 | 
						||
| 
								 | 
							
								 * specs](http://prosemirror.net/docs/ref/#model.SchemaSpec.nodes) for
							 | 
						||
| 
								 | 
							
								 * `table`, `table_row`, and `table_cell` nodes types as used by this
							 | 
						||
| 
								 | 
							
								 * module. The result can then be added to the set of nodes when
							 | 
						||
| 
								 | 
							
								 * creating a schema.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function tableNodes(options: TableNodesOptions): TableNodes;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								type TableRoles = 'table' | 'row' | 'cell' | 'header_cell';
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function tableNodeTypes(schema: Schema): Record<TableRoles, NodeType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare class TableView implements NodeView {
							 | 
						||
| 
								 | 
							
								    node: Node;
							 | 
						||
| 
								 | 
							
								    cellMinWidth: number;
							 | 
						||
| 
								 | 
							
								    dom: HTMLDivElement;
							 | 
						||
| 
								 | 
							
								    table: HTMLTableElement;
							 | 
						||
| 
								 | 
							
								    colgroup: HTMLTableColElement;
							 | 
						||
| 
								 | 
							
								    contentDOM: HTMLTableSectionElement;
							 | 
						||
| 
								 | 
							
								    constructor(node: Node, cellMinWidth: number);
							 | 
						||
| 
								 | 
							
								    update(node: Node): boolean;
							 | 
						||
| 
								 | 
							
								    ignoreMutation(record: MutationRecord): boolean;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function updateColumnsOnResize(node: Node, colgroup: HTMLTableColElement, table: HTMLTableElement, cellMinWidth: number, overrideCol?: number, overrideValue?: number): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								type TableEditingOptions = {
							 | 
						||
| 
								 | 
							
								    allowTableNodeSelection?: boolean;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Creates a [plugin](http://prosemirror.net/docs/ref/#state.Plugin)
							 | 
						||
| 
								 | 
							
								 * that, when added to an editor, enables cell-selection, handles
							 | 
						||
| 
								 | 
							
								 * cell-based copy/paste, and makes sure tables stay well-formed (each
							 | 
						||
| 
								 | 
							
								 * row has the same width, and cells don't overlap).
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * You should probably put this plugin near the end of your array of
							 | 
						||
| 
								 | 
							
								 * plugins, since it handles mouse and arrow key events in tables
							 | 
						||
| 
								 | 
							
								 * rather broadly, and other plugins, like the gap cursor or the
							 | 
						||
| 
								 | 
							
								 * column-width dragging plugin, might want to get a turn first to
							 | 
						||
| 
								 | 
							
								 * perform more specific behavior.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								declare function tableEditing({ allowTableNodeSelection, }?: TableEditingOptions): Plugin;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export { CellAttributes, CellBookmark, CellSelection, CellSelectionJSON, ColWidths, ColumnResizingOptions, Direction, Dragging, GetCellTypeOptions, MutableAttrs, Problem, Rect, ResizeState, TableEditingOptions, TableMap, TableNodes, TableNodesOptions, TableRect, TableRoles, TableView, ToggleHeaderType, Area as __Area, clipCells as __clipCells, insertCells as __insertCells, pastedCells as __pastedCells, addColSpan, addColumn, addColumnAfter, addColumnBefore, addRow, addRowAfter, addRowBefore, cellAround, colCount, columnIsHeader, columnResizing, columnResizingPluginKey, deleteColumn, deleteRow, deleteTable, findCell, fixTables, fixTablesKey, getFromDOM, goToNextCell, handlePaste, inSameTable, isInTable, mergeCells, moveCellForward, nextCell, pointsAtCell, removeColSpan, removeColumn, removeRow, rowIsHeader, selectedRect, selectionCell, setCellAttr, setDOMAttr, splitCell, splitCellWithType, tableEditing, tableEditingKey, tableNodeTypes, tableNodes, toggleHeader, toggleHeaderCell, toggleHeaderColumn, toggleHeaderRow, updateColumnsOnResize };
							 |