@lexical/table 0.1.11 → 0.1.14
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.
- package/LexicalTable.dev.js +133 -33
- package/LexicalTable.prod.js +26 -23
- package/package.json +2 -2
package/LexicalTable.dev.js
CHANGED
@@ -38,26 +38,56 @@ class TableCellNode extends lexical.GridCellNode {
|
|
38
38
|
}
|
39
39
|
|
40
40
|
static clone(node) {
|
41
|
-
return new TableCellNode(
|
41
|
+
return new TableCellNode(new Set(node.__headerStyles), node.__colSpan, node.__key);
|
42
42
|
}
|
43
43
|
|
44
|
-
constructor(
|
44
|
+
constructor(headerStyles, colSpan = 1, key) {
|
45
45
|
super(colSpan, key);
|
46
|
-
this.
|
47
|
-
}
|
48
|
-
|
49
|
-
getTag() {
|
50
|
-
return this.__isHeader ? 'th' : 'td';
|
46
|
+
this.__headerStyles = headerStyles || new Set();
|
51
47
|
}
|
52
48
|
|
53
49
|
createDOM(config) {
|
54
50
|
const element = document.createElement(this.getTag());
|
55
|
-
addClassNamesToElement(element, config.theme.tableCell, this.
|
51
|
+
addClassNamesToElement(element, config.theme.tableCell, this.hasHeader() && config.theme.TableCellHeaderStyles);
|
56
52
|
return element;
|
57
53
|
}
|
58
54
|
|
59
|
-
|
60
|
-
return
|
55
|
+
getTag() {
|
56
|
+
return this.hasHeader() ? 'th' : 'td';
|
57
|
+
}
|
58
|
+
|
59
|
+
setHeaderStyles(headerStyles) {
|
60
|
+
const self = this.getWritable();
|
61
|
+
self.__headerStyles = new Set(headerStyles);
|
62
|
+
return this.__headerStyles;
|
63
|
+
}
|
64
|
+
|
65
|
+
getHeaderStyles() {
|
66
|
+
return this.getLatest().__headerStyles;
|
67
|
+
}
|
68
|
+
|
69
|
+
toggleHeaderStyle(key) {
|
70
|
+
const self = this.getWritable();
|
71
|
+
const newHeaderValue = self.getHeaderStyles();
|
72
|
+
|
73
|
+
if (newHeaderValue.has(key)) {
|
74
|
+
newHeaderValue.delete(key);
|
75
|
+
} else {
|
76
|
+
newHeaderValue.add(key);
|
77
|
+
}
|
78
|
+
|
79
|
+
self.__headerStyles = new Set(newHeaderValue);
|
80
|
+
return self;
|
81
|
+
}
|
82
|
+
|
83
|
+
hasHeader() {
|
84
|
+
const headerStyles = this.getLatest().__headerStyles;
|
85
|
+
|
86
|
+
return headerStyles.size > 0;
|
87
|
+
}
|
88
|
+
|
89
|
+
updateDOM(prevNode) {
|
90
|
+
return prevNode.__headerStyles.size !== this.__headerStyles.size;
|
61
91
|
}
|
62
92
|
|
63
93
|
collapseAtStart() {
|
@@ -69,8 +99,8 @@ class TableCellNode extends lexical.GridCellNode {
|
|
69
99
|
}
|
70
100
|
|
71
101
|
}
|
72
|
-
function $createTableCellNode(
|
73
|
-
return new TableCellNode(
|
102
|
+
function $createTableCellNode(headerStyles) {
|
103
|
+
return new TableCellNode(headerStyles);
|
74
104
|
}
|
75
105
|
function $isTableCellNode(node) {
|
76
106
|
return node instanceof TableCellNode;
|
@@ -98,6 +128,18 @@ function $findMatchingParent(startingNode, findFn) {
|
|
98
128
|
return null;
|
99
129
|
}
|
100
130
|
|
131
|
+
/**
|
132
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
133
|
+
*
|
134
|
+
* This source code is licensed under the MIT license found in the
|
135
|
+
* LICENSE file in the root directory of this source tree.
|
136
|
+
*
|
137
|
+
*
|
138
|
+
*/
|
139
|
+
const getSelection = () => window.getSelection();
|
140
|
+
|
141
|
+
var getDOMSelection = getSelection;
|
142
|
+
|
101
143
|
/**
|
102
144
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
103
145
|
*
|
@@ -298,9 +340,14 @@ function $applyCustomTableHandlers(tableNode, tableElement, editor) {
|
|
298
340
|
|
299
341
|
if (!isHighlightingCells && (startX !== cellX || startY !== cellY)) {
|
300
342
|
event.preventDefault();
|
301
|
-
const
|
343
|
+
const domSelection = getDOMSelection();
|
344
|
+
const anchorNode = domSelection.anchorNode;
|
345
|
+
|
346
|
+
if (anchorNode !== null) {
|
347
|
+
// Collapse the selection
|
348
|
+
domSelection.setBaseAndExtent(anchorNode, 0, anchorNode, 0);
|
349
|
+
}
|
302
350
|
|
303
|
-
windowSelection.setBaseAndExtent(windowSelection.anchorNode, 0, windowSelection.anchorNode, 0);
|
304
351
|
isHighlightingCells = true;
|
305
352
|
|
306
353
|
if (document.body) {
|
@@ -480,10 +527,10 @@ function $applyCustomTableHandlers(tableNode, tableElement, editor) {
|
|
480
527
|
const isForward = direction === 'forward';
|
481
528
|
|
482
529
|
if (x !== (isForward ? grid.columns - 1 : 0)) {
|
483
|
-
tableNode.
|
530
|
+
tableNode.getCellNodeFromCordsOrThrow(x + (isForward ? 1 : -1), y).select();
|
484
531
|
} else {
|
485
532
|
if (y !== (isForward ? grid.rows - 1 : 0)) {
|
486
|
-
tableNode.
|
533
|
+
tableNode.getCellNodeFromCordsOrThrow(isForward ? 0 : grid.columns - 1, y + (isForward ? 1 : -1)).select();
|
487
534
|
} else if (!isForward) {
|
488
535
|
tableNode.selectPrevious();
|
489
536
|
} else {
|
@@ -497,7 +544,7 @@ function $applyCustomTableHandlers(tableNode, tableElement, editor) {
|
|
497
544
|
case 'up':
|
498
545
|
{
|
499
546
|
if (y !== 0) {
|
500
|
-
tableNode.
|
547
|
+
tableNode.getCellNodeFromCordsOrThrow(x, y - 1).select();
|
501
548
|
} else {
|
502
549
|
tableNode.selectPrevious();
|
503
550
|
}
|
@@ -508,7 +555,7 @@ function $applyCustomTableHandlers(tableNode, tableElement, editor) {
|
|
508
555
|
case 'down':
|
509
556
|
{
|
510
557
|
if (y !== grid.rows - 1) {
|
511
|
-
tableNode.
|
558
|
+
tableNode.getCellNodeFromCordsOrThrow(x, y + 1).select();
|
512
559
|
} else {
|
513
560
|
tableNode.selectNext();
|
514
561
|
}
|
@@ -588,10 +635,10 @@ class TableNode extends lexical.GridNode {
|
|
588
635
|
static clone(node, selectionShape, grid) {
|
589
636
|
// TODO: selectionShape and grid aren't being deeply cloned?
|
590
637
|
// They shouldn't really be on the table node IMO.
|
591
|
-
return new TableNode(node.
|
638
|
+
return new TableNode(node.__selectionShape, node.__grid, node.__key);
|
592
639
|
}
|
593
640
|
|
594
|
-
constructor(
|
641
|
+
constructor(selectionShape, grid, key) {
|
595
642
|
super(key);
|
596
643
|
this.__selectionShape = selectionShape;
|
597
644
|
this.__grid = grid;
|
@@ -682,13 +729,13 @@ class TableNode extends lexical.GridNode {
|
|
682
729
|
const row = cells[y];
|
683
730
|
|
684
731
|
if (row == null) {
|
685
|
-
|
732
|
+
return null;
|
686
733
|
}
|
687
734
|
|
688
735
|
const cell = row[x];
|
689
736
|
|
690
737
|
if (cell == null) {
|
691
|
-
|
738
|
+
return null;
|
692
739
|
}
|
693
740
|
|
694
741
|
const node = lexical.$getNearestNodeFromDOMNode(cell.elem);
|
@@ -697,7 +744,17 @@ class TableNode extends lexical.GridNode {
|
|
697
744
|
return node;
|
698
745
|
}
|
699
746
|
|
700
|
-
|
747
|
+
return null;
|
748
|
+
}
|
749
|
+
|
750
|
+
getCellNodeFromCordsOrThrow(x, y) {
|
751
|
+
const node = this.getCellNodeFromCords(x, y);
|
752
|
+
|
753
|
+
if (!node) {
|
754
|
+
throw new Error('Node at cords not TableCellNode.');
|
755
|
+
}
|
756
|
+
|
757
|
+
return node;
|
701
758
|
}
|
702
759
|
|
703
760
|
setGrid(grid) {
|
@@ -773,14 +830,21 @@ function $isTableRowNode(node) {
|
|
773
830
|
*
|
774
831
|
*
|
775
832
|
*/
|
776
|
-
function $createTableNodeWithDimensions(rowCount, columnCount,
|
833
|
+
function $createTableNodeWithDimensions(rowCount, columnCount, includeHeaders = true) {
|
777
834
|
const tableNode = $createTableNode();
|
778
835
|
|
779
836
|
for (let iRow = 0; iRow < rowCount; iRow++) {
|
780
837
|
const tableRowNode = $createTableRowNode();
|
781
838
|
|
782
839
|
for (let iColumn = 0; iColumn < columnCount; iColumn++) {
|
783
|
-
const
|
840
|
+
const headerStyles = new Set();
|
841
|
+
|
842
|
+
if (includeHeaders) {
|
843
|
+
if (iRow === 0) headerStyles.add('row');
|
844
|
+
if (iColumn === 0) headerStyles.add('column');
|
845
|
+
}
|
846
|
+
|
847
|
+
const tableCellNode = $createTableCellNode(headerStyles);
|
784
848
|
const paragraphNode = lexical.$createParagraphNode();
|
785
849
|
paragraphNode.append(lexical.$createTextNode());
|
786
850
|
tableCellNode.append(paragraphNode);
|
@@ -828,6 +892,19 @@ function $getTableColumnIndexFromTableCellNode(tableCellNode) {
|
|
828
892
|
const tableRowNode = $getTableRowNodeFromTableCellNodeOrThrow(tableCellNode);
|
829
893
|
return tableRowNode.getChildren().findIndex(n => n.is(tableCellNode));
|
830
894
|
}
|
895
|
+
function $getTableCellSiblingsFromTableCellNode(tableCellNode) {
|
896
|
+
const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);
|
897
|
+
const {
|
898
|
+
x,
|
899
|
+
y
|
900
|
+
} = tableNode.getCordsFromCellNode(tableCellNode);
|
901
|
+
return {
|
902
|
+
above: tableNode.getCellNodeFromCords(x, y - 1),
|
903
|
+
below: tableNode.getCellNodeFromCords(x, y + 1),
|
904
|
+
left: tableNode.getCellNodeFromCords(x - 1, y),
|
905
|
+
right: tableNode.getCellNodeFromCords(x + 1, y)
|
906
|
+
};
|
907
|
+
}
|
831
908
|
function $removeTableRowAtIndex(tableNode, indexToDelete) {
|
832
909
|
const tableRows = tableNode.getChildren();
|
833
910
|
|
@@ -849,12 +926,29 @@ function $insertTableRow(tableNode, targetIndex, shouldInsertAfter = true, rowCo
|
|
849
926
|
const targetRowNode = tableRows[targetIndex];
|
850
927
|
|
851
928
|
if ($isTableRowNode(targetRowNode)) {
|
852
|
-
for (let
|
853
|
-
const
|
929
|
+
for (let r = 0; r < rowCount; r++) {
|
930
|
+
const tableRowCells = targetRowNode.getChildren();
|
931
|
+
const tableColumnCount = tableRowCells.length;
|
854
932
|
const newTableRowNode = $createTableRowNode();
|
855
933
|
|
856
|
-
for (let
|
857
|
-
const
|
934
|
+
for (let c = 0; c < tableColumnCount; c++) {
|
935
|
+
const tableCellFromTargetRow = tableRowCells[c];
|
936
|
+
|
937
|
+
if (!$isTableCellNode(tableCellFromTargetRow)) {
|
938
|
+
throw Error(`Expected table cell`);
|
939
|
+
}
|
940
|
+
|
941
|
+
const {
|
942
|
+
above,
|
943
|
+
below
|
944
|
+
} = $getTableCellSiblingsFromTableCellNode(tableCellFromTargetRow);
|
945
|
+
const headerStyles = new Set();
|
946
|
+
|
947
|
+
if (above && above.getHeaderStyles().has('column') || below && below.getHeaderStyles().has('column')) {
|
948
|
+
headerStyles.add('column');
|
949
|
+
}
|
950
|
+
|
951
|
+
const tableCellNode = $createTableCellNode(headerStyles);
|
858
952
|
tableCellNode.append(lexical.$createParagraphNode());
|
859
953
|
newTableRowNode.append(tableCellNode);
|
860
954
|
}
|
@@ -874,12 +968,18 @@ function $insertTableRow(tableNode, targetIndex, shouldInsertAfter = true, rowCo
|
|
874
968
|
function $insertTableColumn(tableNode, targetIndex, shouldInsertAfter = true, columnCount) {
|
875
969
|
const tableRows = tableNode.getChildren();
|
876
970
|
|
877
|
-
for (let
|
878
|
-
const currentTableRowNode = tableRows[
|
971
|
+
for (let r = 0; r < tableRows.length; r++) {
|
972
|
+
const currentTableRowNode = tableRows[r];
|
879
973
|
|
880
974
|
if ($isTableRowNode(currentTableRowNode)) {
|
881
|
-
for (let
|
882
|
-
const
|
975
|
+
for (let c = 0; c < columnCount; c++) {
|
976
|
+
const headerStyles = new Set();
|
977
|
+
|
978
|
+
if (r === 0) {
|
979
|
+
headerStyles.add('row');
|
980
|
+
}
|
981
|
+
|
982
|
+
const newTableCell = $createTableCellNode(headerStyles);
|
883
983
|
newTableCell.append(lexical.$createParagraphNode());
|
884
984
|
const tableRowChildren = currentTableRowNode.getChildren();
|
885
985
|
|
package/LexicalTable.prod.js
CHANGED
@@ -4,27 +4,30 @@
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*/
|
7
|
-
var
|
8
|
-
class
|
9
|
-
function D(a,b){for(;a!==
|
10
|
-
function
|
11
|
-
|
12
|
-
|
7
|
+
var q=require("lexical");function z(a,...b){b.forEach(c=>{null!=c&&"string"===typeof c&&a.classList.add(...c.split(" "))})}
|
8
|
+
class C extends q.GridCellNode{static getType(){return"tablecell"}static clone(a){return new C(new Set(a.__headerStyles),a.__colSpan,a.__key)}constructor(a,b=1,c){super(b,c);this.__headerStyles=a||new Set}createDOM(a){const b=document.createElement(this.getTag());z(b,a.theme.tableCell,this.hasHeader()&&a.theme.TableCellHeaderStyles);return b}getTag(){return this.hasHeader()?"th":"td"}setHeaderStyles(a){this.getWritable().__headerStyles=new Set(a);return this.__headerStyles}getHeaderStyles(){return this.getLatest().__headerStyles}toggleHeaderStyle(a){const b=
|
9
|
+
this.getWritable(),c=b.getHeaderStyles();c.has(a)?c.delete(a):c.add(a);b.__headerStyles=new Set(c);return b}hasHeader(){return 0<this.getLatest().__headerStyles.size}updateDOM(a){return a.__headerStyles.size!==this.__headerStyles.size}collapseAtStart(){return!0}canBeEmpty(){return!1}}function D(a){return new C(a)}function E(a){return a instanceof C}function F(a,b){for(;a!==q.$getRoot()&&null!=a;){if(b(a))return a;a=a.getParent()}return null}const G=document.createElement("style");G.appendChild(document.createTextNode("::selection{background-color: transparent}"));
|
10
|
+
function H(a){for(;null!=a;){const b=a.nodeName;if("TD"===b||"TH"===b){a=a._cell;if(void 0===a)break;return a}a=a.parentNode}return null}
|
11
|
+
function I(a,b,c){const p=[],d={cells:p,columns:0,rows:0},h=()=>{var e=b.firstChild;let n=0,k=0;for(p.length=0;null!=e;){var f=e.nodeName;if("TD"===f||"TH"===f)f={elem:e,highlighted:!1,x:n,y:k},e._cell=f,void 0===p[k]&&(p[k]=[]),p[k][n]=f;else if(f=e.firstChild,null!=f){e=f;continue}f=e.nextSibling;if(null!=f)n++,e=f;else if(f=e.parentNode,null!=f){e=f.nextSibling;if(null==e)break;k++;n=0}}d.columns=n+1;d.rows=k+1;a.setGrid(d)};(new MutationObserver(e=>{c.update(()=>{let n=!1;for(let k=0;k<e.length;k++){const f=
|
12
|
+
e[k].target.nodeName;if("TABLE"===f||"TR"===f){n=!0;break}}n&&h()})})).observe(b,{childList:!0,subtree:!0});h();return d}
|
13
|
+
function J(a,b,c,p,d){const h=[];for(let e=0;e<d.length;e++){const n=d[e];for(let k=0;k<n.length;k++){const f=n[k],r=f.elem.style;k>=a&&k<=b&&e>=c&&e<=p?(f.highlighted||(f.highlighted=!0,r.setProperty("background-color","rgb(163, 187, 255)"),r.setProperty("caret-color","transparent")),h.push(f)):f.highlighted&&(f.highlighted=!1,r.removeProperty("background-color"),r.removeProperty("caret-color"),f.elem.getAttribute("style")||f.elem.removeAttribute("style"))}}return h}
|
13
14
|
function K(a){throw Error(`Minified Lexical error #${a}; see codes.json for the full message or `+"use the non-minified dev environment for full errors and additional helpful warnings.");}
|
14
|
-
class L extends
|
15
|
-
this.getGrid();b||K(55);const {rows:c,cells:
|
16
|
-
if(
|
17
|
-
class
|
18
|
-
function
|
19
|
-
exports.$applyCustomTableHandlers=function(a,b,c){const
|
20
|
-
null===x&&(x=c.addListener("command",(
|
21
|
-
g
|
22
|
-
|
23
|
-
!1},{capture:!0,once:!0}))},0)});window.addEventListener("click",
|
24
|
-
|
25
|
-
"keyTab"!==
|
26
|
-
exports.$createTableNode=M;exports.$createTableNodeWithDimensions=function(a,b,c=!0){const
|
27
|
-
exports.$deleteTableColumn=function(a,b){const c=a.getChildren();for(let
|
28
|
-
exports.$getTableRowIndexFromTableCellNode=function(a){const b=
|
29
|
-
exports.$
|
30
|
-
exports.$
|
15
|
+
class L extends q.GridNode{static getType(){return"table"}static clone(a){return new L(a.__selectionShape,a.__grid,a.__key)}constructor(a,b,c){super(c);this.__selectionShape=a;this.__grid=b}createDOM(a){const b=document.createElement("table");z(b,a.theme.table);return b}updateDOM(){return!1}canExtractContents(){return!1}canBeEmpty(){return!1}setSelectionState(a){this.getWritable().__selectionShape=a;const b=this.getGrid();return null==b?[]:a?J(a.fromX,a.toX,a.fromY,a.toY,b.cells):J(-1,-1,-1,-1,b.cells)}getSelectionState(){return this.getLatest().__selectionShape}getCordsFromCellNode(a){var b=
|
16
|
+
this.getGrid();b||K(55);const {rows:c,cells:p}=b;for(b=0;b<c;b++){var d=p[b];if(null==d)throw Error(`Row not found at y:${b}`);d=d.findIndex(({elem:h})=>q.$getNearestNodeFromDOMNode(h)===a);if(-1!==d)return{x:d,y:b}}throw Error("Cell not found in table.");}getCellNodeFromCords(a,b){var c=this.getGrid();c||K(55);({cells:c}=c);b=c[b];if(null==b)return null;a=b[a];if(null==a)return null;a=q.$getNearestNodeFromDOMNode(a.elem);return E(a)?a:null}getCellNodeFromCordsOrThrow(a,b){a=this.getCellNodeFromCords(a,
|
17
|
+
b);if(!a)throw Error("Node at cords not TableCellNode.");return a}setGrid(a){const b=this.getWritable();b.__grid=a;return b}getGrid(){return this.getLatest().__grid}canSelectBefore(){return!0}}function M(){return new L}function N(a){return a instanceof L}
|
18
|
+
class P extends q.GridRowNode{static getType(){return"tablerow"}static clone(a){return new P(a.__key)}constructor(a){super(a)}createDOM(a){const b=document.createElement("tr");z(b,a.theme.tableRow);return b}updateDOM(){return!1}canBeEmpty(){return!1}}function Q(){return new P}function R(a){return a instanceof P}function S(a){a=F(a,b=>R(b));if(R(a))return a;throw Error("Expected table cell to be inside of table row.");}
|
19
|
+
function V(a){a=F(a,b=>N(b));if(N(a))return a;throw Error("Expected table cell to be inside of table.");}
|
20
|
+
exports.$applyCustomTableHandlers=function(a,b,c){const p=c.getRootElement();if(null===p)throw Error("No root element.");I(a,b,c);const d=a.getGrid();let h=!1,e=!1,n=-1,k=-1,f=-1,r=-1,u=[];const y=new Set;let x=null;if(null==d)throw Error("Table grid not found.");b.addEventListener("mousemove",l=>{if(h){var g=H(l.target);if(null!==g){const m=g.x;g=g.y;if(!e&&(n!==m||k!==g)){l.preventDefault();l=window.getSelection();const t=l.anchorNode;null!==t&&l.setBaseAndExtent(t,0,t,0);e=!0;document.body&&document.body.appendChild(G);
|
21
|
+
null===x&&(x=c.addListener("command",(w,v)=>{if("deleteCharacter"===w){if(u.length===d.columns*d.rows)return a.selectPrevious(),a.remove(),A(),!0;u.forEach(({elem:B})=>{B=q.$getNearestNodeFromDOMNode(B);if(q.$isElementNode(B)){const O=q.$createParagraphNode(),W=q.$createTextNode();O.append(W);B.append(O);B.getChildren().forEach(T=>{T!==O&&T.remove()})}});a.setSelectionState(null);q.$setSelection(null);return!0}if("formatText"===w)return X(v),!0;"insertText"===w&&A();return!1},1),y.add(x))}else if(m===
|
22
|
+
f&&g===r)return;f=m;r=g;if(e){const t=Math.min(n,f),w=Math.max(n,f),v=Math.min(k,r),B=Math.max(k,r);c.update(()=>{u=a.setSelectionState({fromX:t,fromY:v,toX:w,toY:B})})}}}});const A=()=>{c.update(()=>{h=e=!1;r=f=k=n=-1;c.update(()=>{a.setSelectionState(null)});u=[];null!==x&&(x(),x=null,y.delete(x));const l=G.parentNode;null!=l&&l.removeChild(G)})};b.addEventListener("mouseleave",()=>{});const X=l=>{let g=q.$getSelection();q.$isRangeSelection(g)||(g=q.$createRangeSelection());const m=g,t=m.anchor,
|
23
|
+
w=m.focus;u.forEach(v=>{v=q.$getNearestNodeFromDOMNode(v.elem);q.$isElementNode(v)&&0!==v.getTextContentSize()&&(t.set(v.getKey(),0,"element"),w.set(v.getKey(),v.getChildrenSize(),"element"),m.formatText(l))});g.anchor.set(g.anchor.key,g.anchor.offset,g.anchor.type);g.focus.set(g.anchor.key,g.anchor.offset,g.anchor.type);q.$setSelection(g)};b.addEventListener("mousedown",l=>{h?e&&A():setTimeout(()=>{e&&A();const g=H(l.target);null!==g&&(h=!0,n=g.x,k=g.y,document.addEventListener("mouseup",()=>{h=
|
24
|
+
!1},{capture:!0,once:!0}))},0)});window.addEventListener("click",l=>{0<u.length&&!b.contains(l.target)&&p.contains(l.target)&&c.update(()=>{a.setSelectionState(null)})});const U=(l,g,m)=>{switch(m){case "backward":case "forward":return m="forward"===m,l!==(m?d.columns-1:0)?a.getCellNodeFromCordsOrThrow(l+(m?1:-1),g).select():g!==(m?d.rows-1:0)?a.getCellNodeFromCordsOrThrow(m?0:d.columns-1,g+(m?1:-1)).select():m?a.selectNext():a.selectPrevious(),!0;case "up":return 0!==g?a.getCellNodeFromCordsOrThrow(l,
|
25
|
+
g-1).select():a.selectPrevious(),!0;case "down":return g!==d.rows-1?a.getCellNodeFromCordsOrThrow(l,g+1).select():a.selectNext(),!0}return!1},Y=c.addListener("command",(l,g)=>{var m=q.$getSelection();if(!q.$isRangeSelection(m))return!1;var t=F(m.anchor.getNode(),w=>E(w));if(!E(t))return!1;if("deleteCharacter"===l&&0===u.length&&m.isCollapsed()&&0===m.anchor.offset&&0===m.anchor.getNode().getPreviousSiblings().length)return!0;if("keyTab"===l&&m.isCollapsed()&&0===u.length)return t=a.getCordsFromCellNode(t),
|
26
|
+
g.preventDefault(),U(t.x,t.y,g.shiftKey||"keyTab"!==l?"backward":"forward"),!0;if(("keyArrowDown"===l||"keyArrowUp"===l)&&m.isCollapsed()&&0===u.length){const w=a.getCordsFromCellNode(t);m=F(m.anchor.getNode(),v=>q.$isElementNode(v));if("keyArrowUp"===l&&m===t.getFirstChild()||"keyArrowDown"===l&&m===t.getLastChild())return g.preventDefault(),g.stopImmediatePropagation(),U(w.x,w.y,"keyArrowUp"===l?"up":"down"),!0}return!1},4);y.add(Y);return()=>Array.from(y).forEach(l=>l?l():null)};
|
27
|
+
exports.$createTableCellNode=D;exports.$createTableNode=M;exports.$createTableNodeWithDimensions=function(a,b,c=!0){const p=M();for(let h=0;h<a;h++){const e=Q();for(let n=0;n<b;n++){var d=new Set;c&&(0===h&&d.add("row"),0===n&&d.add("column"));d=D(d);const k=q.$createParagraphNode();k.append(q.$createTextNode());d.append(k);e.append(d)}p.append(e)}return p};exports.$createTableRowNode=Q;
|
28
|
+
exports.$deleteTableColumn=function(a,b){const c=a.getChildren();for(let d=0;d<c.length;d++){var p=c[d];if(R(p)){p=p.getChildren();if(b>=p.length||0>b)throw Error("Table column target index out of range");p[b].remove()}}return a};exports.$getTableCellNodeFromLexicalNode=function(a){a=F(a,b=>E(b));return E(a)?a:null};exports.$getTableColumnIndexFromTableCellNode=function(a){return S(a).getChildren().findIndex(b=>b.is(a))};exports.$getTableNodeFromLexicalNodeOrThrow=V;
|
29
|
+
exports.$getTableRowIndexFromTableCellNode=function(a){const b=S(a);return V(b).getChildren().findIndex(c=>c.is(b))};exports.$getTableRowNodeFromTableCellNodeOrThrow=S;
|
30
|
+
exports.$insertTableColumn=function(a,b,c=!0,p){const d=a.getChildren();for(let n=0;n<d.length;n++){const k=d[n];if(R(k))for(let f=0;f<p;f++){var h=new Set;0===n&&h.add("row");h=D(h);h.append(q.$createParagraphNode());var e=k.getChildren();if(b>=e.length||0>b)throw Error("Table column target index out of range");e=e[b];c?e.insertAfter(h):e.insertBefore(h)}}return a};
|
31
|
+
exports.$insertTableRow=function(a,b,c=!0,p){var d=a.getChildren();if(b>=d.length||0>b)throw Error("Table row target index out of range");b=d[b];if(R(b))for(d=0;d<p;d++){const e=b.getChildren(),n=e.length,k=Q();for(let f=0;f<n;f++){var h=e[f];if(!E(h))throw Error("Expected table cell");const r=V(h),{x:u,y}=r.getCordsFromCellNode(h);h={above:r.getCellNodeFromCords(u,y-1),below:r.getCellNodeFromCords(u,y+1),left:r.getCellNodeFromCords(u-1,y),right:r.getCellNodeFromCords(u+1,y)};const {above:x,below:A}=
|
32
|
+
h;h=new Set;(x&&x.getHeaderStyles().has("column")||A&&A.getHeaderStyles().has("column"))&&h.add("column");h=D(h);h.append(q.$createParagraphNode());k.append(h)}c?b.insertAfter(k):b.insertBefore(k)}else throw Error("Row before insertion index does not exist.");return a};exports.$isTableCellNode=E;exports.$isTableNode=N;exports.$isTableRowNode=R;
|
33
|
+
exports.$removeTableRowAtIndex=function(a,b){const c=a.getChildren();if(b>=c.length||0>b)throw Error("Expected table cell to be inside of table row.");c[b].remove();return a};exports.TableCellNode=C;exports.TableNode=L;exports.TableRowNode=P;
|
package/package.json
CHANGED