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
// 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>;
|