@ekz/lexical-table 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,473 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict
8
+ */
9
+
10
+ import type {
11
+ BaseSelection,
12
+ EditorConfig,
13
+ LexicalNode,
14
+ NodeKey,
15
+ ParagraphNode,
16
+ PointType,
17
+ RangeSelection,
18
+ LexicalEditor,
19
+ TextFormatType,
20
+ LexicalCommand,
21
+ ElementDOMSlot,
22
+ SerializedElementNode,
23
+ LexicalExtension,
24
+ } from '@ekz/lexical';
25
+ import type {NamedSignalsOutput} from '@ekz/lexical-extension';
26
+
27
+ import {
28
+ ElementNode,
29
+ } from '@ekz/lexical';
30
+
31
+ /**
32
+ * LexicalTableCellNode
33
+ */
34
+
35
+ export const TableCellHeaderStates = {
36
+ NO_STATUS: 0,
37
+ ROW: 1,
38
+ COLUMN: 2,
39
+ BOTH: 3,
40
+ };
41
+
42
+ export type TableCellHeaderState = $Values<typeof TableCellHeaderStates>;
43
+
44
+ declare export class TableCellNode extends ElementNode {
45
+ __colSpan: number;
46
+ __rowSpan: number;
47
+ __headerState: TableCellHeaderState;
48
+ __width?: number;
49
+ __backgroundColor: null | string;
50
+ static getType(): string;
51
+ static clone(node: TableCellNode): TableCellNode;
52
+ constructor(
53
+ headerState?: TableCellHeaderState,
54
+ colSpan?: number,
55
+ width?: ?number,
56
+ key?: NodeKey,
57
+ ): void;
58
+ createDOM(config: EditorConfig): HTMLElement;
59
+ insertNewAfter(
60
+ selection: RangeSelection,
61
+ ): null | ParagraphNode | TableCellNode;
62
+ collapseAtStart(): true;
63
+ getColSpan(): number;
64
+ setColSpan(colSpan: number): this;
65
+ getRowSpan(): number;
66
+ setRowSpan(rowSpan: number): this;
67
+ getTag(): string;
68
+ setHeaderStyles(headerState: TableCellHeaderState, mask?: TableCellHeaderState): TableCellNode;
69
+ getHeaderStyles(): TableCellHeaderState;
70
+ setWidth(width: number): TableCellNode;
71
+ getWidth(): ?number;
72
+ getBackgroundColor(): null | string;
73
+ setBackgroundColor(newBackgroundColor: null | string): TableCellNode;
74
+ toggleHeaderStyle(headerState: TableCellHeaderState): TableCellNode;
75
+ hasHeader(): boolean;
76
+ collapseAtStart(): true;
77
+ canBeEmpty(): false;
78
+ }
79
+ declare export function $createTableCellNode(
80
+ headerState?: TableCellHeaderState,
81
+ colSpan?: number,
82
+ width?: ?number,
83
+ ): TableCellNode;
84
+ declare export function $isTableCellNode(
85
+ node: ?LexicalNode,
86
+ ): node is TableCellNode;
87
+
88
+ /**
89
+ * LexicalTableNode
90
+ */
91
+
92
+ export type TableMapValueType = {
93
+ cell: TableCellNode,
94
+ startRow: number,
95
+ startColumn: number,
96
+ };
97
+ export type TableMapType = Array<Array<TableMapValueType>>;
98
+
99
+ declare export class TableNode extends ElementNode {
100
+ static getType(): string;
101
+ static clone(node: TableNode): TableNode;
102
+ constructor(key?: NodeKey): void;
103
+ createDOM(config: EditorConfig): HTMLElement;
104
+ insertNewAfter(selection: RangeSelection): null | ParagraphNode | TableNode;
105
+ collapseAtStart(): true;
106
+ getCordsFromCellNode(
107
+ tableCellNode: TableCellNode,
108
+ table: TableDOMTable,
109
+ ): {x: number, y: number};
110
+ getDOMCellFromCords(x: number, y: number, table: TableDOMTable): ?TableDOMCell;
111
+ getDOMCellFromCordsOrThrow(x: number, y: number, table: TableDOMTable): TableDOMCell;
112
+ getCellNodeFromCords(x: number, y: number, table: TableDOMTable): ?TableCellNode;
113
+ getCellNodeFromCordsOrThrow(x: number, y: number, table: TableDOMTable): TableCellNode;
114
+ canSelectBefore(): true;
115
+ getDOMSlot(element: HTMLElement): ElementDOMSlot<HTMLTableElement>;
116
+ }
117
+ declare export function $createTableNode(): TableNode;
118
+ declare export function $isTableNode(
119
+ node: ?LexicalNode,
120
+ ): node is TableNode;
121
+
122
+ declare export function $isScrollableTablesActive(
123
+ editor?: LexicalEditor
124
+ ): boolean;
125
+ declare export function setScrollableTablesActive(
126
+ editor: LexicalEditor,
127
+ active: boolean,
128
+ ): void;
129
+ declare export function $getTableAndElementByKey(
130
+ tableNodeKey: NodeKey,
131
+ editor?: LexicalEditor,
132
+ ): {
133
+ tableNode: TableNode;
134
+ tableElement: HTMLTableElementWithWithTableSelectionState;
135
+ };
136
+
137
+ /**
138
+ * LexicalTableRowNode
139
+ */
140
+
141
+ declare export class TableRowNode extends ElementNode {
142
+ static getType(): string;
143
+ static clone(node: TableRowNode): TableRowNode;
144
+ constructor(height?: ?number, key?: NodeKey): void;
145
+ createDOM(config: EditorConfig): HTMLElement;
146
+ setHeight(height: number): ?number;
147
+ getHeight(): ?number;
148
+ insertNewAfter(
149
+ selection: RangeSelection,
150
+ ): null | ParagraphNode | TableRowNode;
151
+ collapseAtStart(): true;
152
+ }
153
+ declare export function $createTableRowNode(): TableRowNode;
154
+ declare export function $isTableRowNode(
155
+ node: ?LexicalNode,
156
+ ): node is TableRowNode;
157
+
158
+ /**
159
+ * LexicalTableSelectionHelpers
160
+ */
161
+
162
+ export const LEXICAL_ELEMENT_KEY = '__lexicalTableSelection';
163
+
164
+ export type TableDOMCell = {
165
+ elem: HTMLElement,
166
+ highlighted: boolean,
167
+ x: number,
168
+ y: number,
169
+ };
170
+
171
+ export type TableDOMRows = Array<Array<TableDOMCell>>;
172
+
173
+ export type TableDOMTable = {
174
+ cells: TableDOMRows,
175
+ columns: number,
176
+ rows: number,
177
+ };
178
+
179
+ export type HTMLTableElementWithWithTableSelectionState = HTMLTableElement & Partial<{
180
+ [typeof LEXICAL_ELEMENT_KEY]: TableObserver | void;
181
+ }>;
182
+
183
+ declare export function applyTableHandlers(
184
+ tableNode: TableNode,
185
+ tableElement: HTMLElement,
186
+ editor: LexicalEditor,
187
+ hasTabHandler: boolean,
188
+ ): TableObserver;
189
+
190
+ declare export function $getElementForTableNode(
191
+ editor: LexicalEditor,
192
+ tableNode: TableNode,
193
+ ): TableDOMTable;
194
+
195
+ declare export function getTableObserverFromTableElement(
196
+ tableElement: HTMLElement,
197
+ ): null | TableObserver;
198
+
199
+ declare export function getDOMCellFromTarget(node: Node): null | TableDOMCell;
200
+
201
+ declare export function $findTableNode(node: LexicalNode): null | TableNode;
202
+
203
+ declare export function $findCellNode(node: LexicalNode): null | TableCellNode;
204
+
205
+ declare export function getTableElement<T: HTMLElement | null>(
206
+ tableNode: TableNode,
207
+ dom: T,
208
+ ): HTMLTableElementWithWithTableSelectionState | (T & null);
209
+
210
+ /**
211
+ * LexicalTableUtils
212
+ */
213
+
214
+ declare export function $createTableNodeWithDimensions(
215
+ rowCount: number,
216
+ columnCount: number,
217
+ includeHeaders?: boolean,
218
+ ): TableNode;
219
+
220
+ declare export function $getTableCellNodeFromLexicalNode(
221
+ startingNode: LexicalNode,
222
+ ): TableCellNode | null;
223
+
224
+ declare export function $getTableRowNodeFromTableCellNodeOrThrow(
225
+ startingNode: LexicalNode,
226
+ ): TableRowNode;
227
+
228
+ declare export function $getTableNodeFromLexicalNodeOrThrow(
229
+ startingNode: LexicalNode,
230
+ ): TableNode;
231
+
232
+ declare export function $getTableRowIndexFromTableCellNode(
233
+ tableCellNode: TableCellNode,
234
+ ): number;
235
+
236
+ declare export function $getTableColumnIndexFromTableCellNode(
237
+ tableCellNode: TableCellNode,
238
+ ): number;
239
+
240
+ declare export function $removeTableRowAtIndex(
241
+ tableNode: TableNode,
242
+ indexToDelete: number,
243
+ ): TableNode;
244
+
245
+ /** @deprecated This function does not support merged cells. Use {@link $insertTableRowAtSelection} or {@link $insertTableRowAtNode} instead. */
246
+ declare export function $insertTableRow(
247
+ tableNode: TableNode,
248
+ targetIndex: number,
249
+ shouldInsertAfter?: boolean,
250
+ rowCount: number,
251
+ table: TableDOMTable,
252
+ ): TableNode;
253
+
254
+ /** @deprecated This function does not support merged cells. Use {@link $insertTableColumnAtSelection} or {@link $insertTableColumnAtNode} instead. */
255
+ declare export function $insertTableColumn(
256
+ tableNode: TableNode,
257
+ targetIndex: number,
258
+ shouldInsertAfter?: boolean,
259
+ columnCount: number,
260
+ table: TableDOMTable,
261
+ ): TableNode;
262
+
263
+ /** @deprecated This function does not support merged cells. Use {@link $deleteTableColumnAtSelection} instead. */
264
+ declare export function $deleteTableColumn(
265
+ tableNode: TableNode,
266
+ targetIndex: number,
267
+ ): TableNode;
268
+
269
+ declare export function $insertTableRowAtSelection(
270
+ insertAfter?: boolean,
271
+ ): TableRowNode | null;
272
+
273
+ declare export function $insertTableRowAtNode(
274
+ cellNode: TableCellNode,
275
+ insertAfter?: boolean,
276
+ ): TableRowNode | null;
277
+
278
+ declare export function $insertTableColumnAtSelection(
279
+ insertAfter?: boolean,
280
+ ): TableCellNode | null;
281
+
282
+ declare export function $insertTableColumnAtNode(
283
+ cellNode: TableCellNode,
284
+ insertAfter?: boolean,
285
+ shouldSetSelection?: boolean,
286
+ ): TableCellNode | null
287
+
288
+ declare export function $deleteTableRowAtSelection(): void;
289
+
290
+ declare export function $deleteTableColumnAtSelection(): void;
291
+
292
+ /** @deprecated renamed to {@link $insertTableRowAtSelection} */
293
+ declare export function $insertTableRow__EXPERIMENTAL(
294
+ insertAfter: boolean,
295
+ ): TableRowNode | null;
296
+
297
+ /** @deprecated renamed to {@link $insertTableColumnAtSelection} */
298
+ declare export function $insertTableColumn__EXPERIMENTAL(
299
+ insertAfter: boolean,
300
+ ): TableCellNode | null;
301
+
302
+ /** @deprecated renamed to {@link $deleteTableRowAtSelection} */
303
+ declare export function $deleteTableRow__EXPERIMENTAL(): void;
304
+
305
+ /** @deprecated renamed to {@link $deleteTableColumnAtSelection} */
306
+ declare export function $deleteTableColumn__EXPERIMENTAL(): void;
307
+
308
+ declare export function $unmergeCell(): void;
309
+
310
+ declare export function $computeTableMap(
311
+ table: TableNode,
312
+ cellA: TableCellNode,
313
+ cellB: TableCellNode,
314
+ ): [TableMapType, TableMapValueType, TableMapValueType];
315
+
316
+ declare export function $getNodeTriplet(
317
+ source: PointType | LexicalNode | TableCellNode,
318
+ ): [TableCellNode, TableRowNode, TableNode];
319
+
320
+ declare export function $getTableCellNodeRect(tableCellNode: TableCellNode): {
321
+ rowIndex: number;
322
+ columnIndex: number;
323
+ rowSpan: number;
324
+ colSpan: number;
325
+ } | null;
326
+
327
+ declare export function $computeTableMapSkipCellCheck(
328
+ tableNode: TableNode,
329
+ cellA: null | TableCellNode,
330
+ cellB: null | TableCellNode,
331
+ ): [
332
+ tableMap: TableMapType,
333
+ cellAValue: TableMapValueType | null,
334
+ cellBValue: TableMapValueType | null,
335
+ ];
336
+
337
+ /**
338
+ * LexicalTableObserver.js
339
+ */
340
+
341
+ declare export class TableObserver {
342
+ currentX: number;
343
+ currentY: number;
344
+ listenersToRemove: Set<() => void>;
345
+ table: TableDOMTable;
346
+ isHighlightingCells: boolean;
347
+ isMouseDown: boolean;
348
+ startX: number;
349
+ startY: number;
350
+ nodeKey: string;
351
+ editor: LexicalEditor;
352
+ constructor(editor: LexicalEditor, nodeKey: string): void;
353
+ getTable(): TableDOMTable;
354
+ removeListeners(): void;
355
+ trackTable(): void;
356
+ $clearHighlight(): void;
357
+ $setFocusCellForSelection(cell: TableDOMCell, ignoreStart?: boolean): void;
358
+ $setAnchorCellForSelection(cell: TableDOMCell): void;
359
+ $formatCells(type: TextFormatType): void;
360
+ $clearText(): void;
361
+ }
362
+
363
+ /**
364
+ * LexicalTableSelection.ts
365
+ */
366
+
367
+ export type TableSelectionShape = {
368
+ fromX: number,
369
+ fromY: number,
370
+ toX: number,
371
+ toY: number,
372
+ };
373
+ declare export class TableSelection implements BaseSelection {
374
+ tableKey: NodeKey;
375
+ anchor: PointType;
376
+ focus: PointType;
377
+ dirty: boolean;
378
+ constructor(tableKey: NodeKey, anchor: PointType, focus: PointType): void;
379
+ is(selection: null | BaseSelection): boolean;
380
+ set(tableKey: NodeKey, anchorCellKey: NodeKey, focusCellKey: NodeKey): void;
381
+ clone(): TableSelection;
382
+ getCharacterOffsets(): [number, number];
383
+ extract(): Array<LexicalNode>;
384
+ insertRawText(): void;
385
+ insertText(): void;
386
+ isCollapsed(): false;
387
+ isBackward(): boolean;
388
+ getShape(): TableSelectionShape;
389
+ getNodes(): Array<LexicalNode>;
390
+ getTextContent(): string;
391
+ insertNodes(nodes: Array<LexicalNode>): void;
392
+ getStartEndPoints(): [PointType, PointType];
393
+ getCachedNodes(): null | Array<LexicalNode>;
394
+ setCachedNodes(nodes: null | Array<LexicalNode>): void;
395
+ }
396
+
397
+ declare export function $isTableSelection(
398
+ x: ?mixed,
399
+ ): x is TableSelection;
400
+
401
+ declare export function $createTableSelection(): TableSelection;
402
+
403
+ declare export function $createTableSelectionFrom(
404
+ tableNode: TableNode,
405
+ anchorCell: TableCellNode,
406
+ focusCell: TableCellNode,
407
+ ): TableSelection;
408
+
409
+ /**
410
+ * LexicalTableCommands
411
+ */
412
+
413
+ export type InsertTableCommandPayloadHeaders =
414
+ | $ReadOnly<{
415
+ rows: boolean;
416
+ columns: boolean;
417
+ }>
418
+ | boolean;
419
+
420
+ export type InsertTableCommandPayload = $ReadOnly<{
421
+ columns: string;
422
+ rows: string;
423
+ includeHeaders?: InsertTableCommandPayloadHeaders;
424
+ }>;
425
+
426
+ declare export var INSERT_TABLE_COMMAND: LexicalCommand<InsertTableCommandPayload>;
427
+
428
+ /**
429
+ * LexicalTablePluginHelpers
430
+ */
431
+
432
+ declare export function registerTableCellUnmergeTransform(editor: LexicalEditor): () => void;
433
+
434
+ declare export function registerTablePlugin(editor: LexicalEditor): () => void;
435
+
436
+ declare export function registerTableSelectionObserver(editor: LexicalEditor, hasTabHandler?: boolean): () => void;
437
+
438
+
439
+ export type SerializedTableCellNode = {
440
+ ...SerializedElementNode;
441
+ colSpan?: number;
442
+ rowSpan?: number;
443
+ headerState: TableCellHeaderState;
444
+ width?: number;
445
+ backgroundColor?: null | string;
446
+ verticalAlign?: string;
447
+ ...
448
+ };
449
+ export type SerializedTableNode = {
450
+ ...SerializedElementNode,
451
+ colWidths?: $ReadOnlyArray<number>;
452
+ rowStriping?: boolean;
453
+ frozenColumnCount?: number;
454
+ frozenRowCount?: number;
455
+ ...
456
+ };
457
+ export type SerializedTableRowNode = {
458
+ ...SerializedElementNode;
459
+ height?: number;
460
+ ...
461
+ };
462
+
463
+ export type TableConfig = {
464
+ hasCellMerge: boolean;
465
+ hasCellBackgroundColor: boolean;
466
+ hasTabHandler: boolean;
467
+ hasHorizontalScroll: boolean;
468
+ };
469
+
470
+
471
+ declare export var TableExtension: LexicalExtension<TableConfig, "@ekz/lexical-table/Table", NamedSignalsOutput<TableConfig>, void>;
472
+
473
+ declare export function $mergeCells(cellNodes: TableCellNode[]): TableCellNode | null;
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ import type { DOMConversionMap, DOMConversionOutput, DOMExportOutput, EditorConfig, LexicalEditor, LexicalNode, LexicalUpdateJSON, NodeKey, SerializedElementNode, Spread } from '@ekz/lexical';
9
+ import { ElementNode } from '@ekz/lexical';
10
+ export declare const TableCellHeaderStates: {
11
+ BOTH: number;
12
+ COLUMN: number;
13
+ NO_STATUS: number;
14
+ ROW: number;
15
+ };
16
+ export type TableCellHeaderState = (typeof TableCellHeaderStates)[keyof typeof TableCellHeaderStates];
17
+ export type SerializedTableCellNode = Spread<{
18
+ colSpan?: number;
19
+ rowSpan?: number;
20
+ headerState: TableCellHeaderState;
21
+ width?: number;
22
+ backgroundColor?: null | string;
23
+ verticalAlign?: string;
24
+ }, SerializedElementNode>;
25
+ /** @noInheritDoc */
26
+ export declare class TableCellNode extends ElementNode {
27
+ /** @internal */
28
+ __colSpan: number;
29
+ /** @internal */
30
+ __rowSpan: number;
31
+ /** @internal */
32
+ __headerState: TableCellHeaderState;
33
+ /** @internal */
34
+ __width?: number | undefined;
35
+ /** @internal */
36
+ __backgroundColor: null | string;
37
+ /** @internal */
38
+ __verticalAlign?: undefined | string;
39
+ static getType(): string;
40
+ static clone(node: TableCellNode): TableCellNode;
41
+ afterCloneFrom(node: this): void;
42
+ static importDOM(): DOMConversionMap | null;
43
+ static importJSON(serializedNode: SerializedTableCellNode): TableCellNode;
44
+ updateFromJSON(serializedNode: LexicalUpdateJSON<SerializedTableCellNode>): this;
45
+ constructor(headerState?: number, colSpan?: number, width?: number, key?: NodeKey);
46
+ createDOM(config: EditorConfig): HTMLTableCellElement;
47
+ exportDOM(editor: LexicalEditor): DOMExportOutput;
48
+ exportJSON(): SerializedTableCellNode;
49
+ getColSpan(): number;
50
+ setColSpan(colSpan: number): this;
51
+ getRowSpan(): number;
52
+ setRowSpan(rowSpan: number): this;
53
+ getTag(): 'th' | 'td';
54
+ setHeaderStyles(headerState: TableCellHeaderState, mask?: TableCellHeaderState): this;
55
+ getHeaderStyles(): TableCellHeaderState;
56
+ setWidth(width: number | undefined): this;
57
+ getWidth(): number | undefined;
58
+ getBackgroundColor(): null | string;
59
+ setBackgroundColor(newBackgroundColor: null | string): this;
60
+ getVerticalAlign(): undefined | string;
61
+ setVerticalAlign(newVerticalAlign: null | undefined | string): this;
62
+ toggleHeaderStyle(headerStateToToggle: TableCellHeaderState): this;
63
+ hasHeaderState(headerState: TableCellHeaderState): boolean;
64
+ hasHeader(): boolean;
65
+ updateDOM(prevNode: this): boolean;
66
+ isShadowRoot(): boolean;
67
+ collapseAtStart(): true;
68
+ canBeEmpty(): false;
69
+ canIndent(): false;
70
+ }
71
+ export declare function $convertTableCellNodeElement(domNode: Node): DOMConversionOutput;
72
+ export declare function $createTableCellNode(headerState?: TableCellHeaderState, colSpan?: number, width?: number): TableCellNode;
73
+ export declare function $isTableCellNode(node: LexicalNode | null | undefined): node is TableCellNode;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ import type { LexicalCommand } from '@ekz/lexical';
9
+ export type InsertTableCommandPayloadHeaders = Readonly<{
10
+ rows: boolean;
11
+ columns: boolean;
12
+ }> | boolean;
13
+ export type InsertTableCommandPayload = Readonly<{
14
+ columns: string;
15
+ rows: string;
16
+ includeHeaders?: InsertTableCommandPayloadHeaders;
17
+ }>;
18
+ export declare const INSERT_TABLE_COMMAND: LexicalCommand<InsertTableCommandPayload>;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ export interface TableConfig {
9
+ /**
10
+ * When `false` (default `true`), merged cell support (colspan and rowspan) will be disabled and all
11
+ * tables will be forced into a regular grid with 1x1 table cells.
12
+ */
13
+ hasCellMerge: boolean;
14
+ /**
15
+ * When `false` (default `true`), the background color of TableCellNode will always be removed.
16
+ */
17
+ hasCellBackgroundColor: boolean;
18
+ /**
19
+ * When `true` (default `true`), the tab key can be used to navigate table cells.
20
+ */
21
+ hasTabHandler: boolean;
22
+ /**
23
+ * When `true` (default `true`), tables will be wrapped in a `<div>` to enable horizontal scrolling
24
+ */
25
+ hasHorizontalScroll: boolean;
26
+ /**
27
+ * When `true` (default `false`), nested tables will be allowed.
28
+ *
29
+ * @experimental Nested tables are not officially supported.
30
+ */
31
+ hasNestedTables: boolean;
32
+ }
33
+ /**
34
+ * Configures {@link TableNode}, {@link TableRowNode}, {@link TableCellNode} and
35
+ * registers table behaviors (see {@link TableConfig})
36
+ */
37
+ export declare const TableExtension: import("@ekz/lexical").LexicalExtension<TableConfig, "@ekz/lexical-table/Table", import("@ekz/lexical-extension").NamedSignalsOutput<TableConfig>, unknown>;
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ import { BaseSelection, DOMConversionMap, DOMConversionOutput, DOMExportOutput, EditorConfig, ElementDOMSlot, ElementNode, LexicalEditor, LexicalNode, LexicalUpdateJSON, NodeKey, SerializedElementNode, Spread } from '@ekz/lexical';
9
+ import { type TableCellNode } from './LexicalTableCellNode';
10
+ import { TableDOMCell, TableDOMTable } from './LexicalTableObserver';
11
+ export type SerializedTableNode = Spread<{
12
+ colWidths?: readonly number[];
13
+ rowStriping?: boolean;
14
+ frozenColumnCount?: number;
15
+ frozenRowCount?: number;
16
+ }, SerializedElementNode>;
17
+ export declare function $isScrollableTablesActive(editor?: LexicalEditor): boolean;
18
+ export declare function setScrollableTablesActive(editor: LexicalEditor, active: boolean): void;
19
+ /** @noInheritDoc */
20
+ export declare class TableNode extends ElementNode {
21
+ /** @internal */
22
+ __rowStriping: boolean;
23
+ __frozenColumnCount: number;
24
+ __frozenRowCount: number;
25
+ __colWidths?: readonly number[];
26
+ static getType(): string;
27
+ getColWidths(): readonly number[] | undefined;
28
+ setColWidths(colWidths: readonly number[] | undefined): this;
29
+ static clone(node: TableNode): TableNode;
30
+ afterCloneFrom(prevNode: this): void;
31
+ static importDOM(): DOMConversionMap | null;
32
+ static importJSON(serializedNode: SerializedTableNode): TableNode;
33
+ updateFromJSON(serializedNode: LexicalUpdateJSON<SerializedTableNode>): this;
34
+ constructor(key?: NodeKey);
35
+ exportJSON(): SerializedTableNode;
36
+ extractWithChild(child: LexicalNode, selection: BaseSelection | null, destination: 'clone' | 'html'): boolean;
37
+ getDOMSlot(element: HTMLElement): ElementDOMSlot<HTMLTableElement>;
38
+ createDOM(config: EditorConfig, editor?: LexicalEditor): HTMLElement;
39
+ updateTableWrapper(prevNode: this | null, tableWrapper: HTMLDivElement, tableElement: HTMLTableElement, config: EditorConfig): void;
40
+ updateTableElement(prevNode: this | null, tableElement: HTMLTableElement, config: EditorConfig): void;
41
+ updateDOM(prevNode: this, dom: HTMLElement, config: EditorConfig): boolean;
42
+ exportDOM(editor: LexicalEditor): DOMExportOutput;
43
+ canBeEmpty(): false;
44
+ isShadowRoot(): boolean;
45
+ getCordsFromCellNode(tableCellNode: TableCellNode, table: TableDOMTable): {
46
+ x: number;
47
+ y: number;
48
+ };
49
+ getDOMCellFromCords(x: number, y: number, table: TableDOMTable): null | TableDOMCell;
50
+ getDOMCellFromCordsOrThrow(x: number, y: number, table: TableDOMTable): TableDOMCell;
51
+ getCellNodeFromCords(x: number, y: number, table: TableDOMTable): null | TableCellNode;
52
+ getCellNodeFromCordsOrThrow(x: number, y: number, table: TableDOMTable): TableCellNode;
53
+ getRowStriping(): boolean;
54
+ setRowStriping(newRowStriping: boolean): this;
55
+ setFrozenColumns(columnCount: number): this;
56
+ getFrozenColumns(): number;
57
+ setFrozenRows(rowCount: number): this;
58
+ getFrozenRows(): number;
59
+ canSelectBefore(): true;
60
+ canIndent(): false;
61
+ getColumnCount(): number;
62
+ }
63
+ export declare function $getElementForTableNode(editor: LexicalEditor, tableNode: TableNode): TableDOMTable;
64
+ export declare function $convertTableElement(domNode: HTMLElement): DOMConversionOutput;
65
+ export declare function $createTableNode(): TableNode;
66
+ export declare function $isTableNode(node: LexicalNode | null | undefined): node is TableNode;