@lexical/table 0.1.12 → 0.1.15
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.d.ts +221 -0
- package/LexicalTable.dev.js +674 -460
- package/LexicalTable.prod.js +32 -24
- package/package.json +5 -2
package/LexicalTable.prod.js
CHANGED
@@ -4,27 +4,35 @@
|
|
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
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
this.
|
16
|
-
if(
|
17
|
-
|
18
|
-
function
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
exports.$
|
27
|
-
exports.$deleteTableColumn=function(a,b){const
|
28
|
-
exports.$
|
29
|
-
exports.$
|
30
|
-
exports.$
|
7
|
+
var k=require("@lexical/utils"),n=require("lexical");const r={NO_STATUS:0,ROW:1,COLUMN:2,BOTH:3};
|
8
|
+
class u extends n.GridCellNode{static getType(){return"tablecell"}static clone(a){return new u(a.__headerState,a.__colSpan,a.__width,a.__key)}constructor(a=r.NO_STATUS,b=1,d,f){super(b,f);this.__headerState=a;this.__width=d}createDOM(a){const b=document.createElement(this.getTag());this.__width&&(b.style.width=`${this.__width}px`);k.addClassNamesToElement(b,a.theme.tableCell,this.hasHeader()&&a.theme.tableCellHeader);return b}getTag(){return this.hasHeader()?"th":"td"}setHeaderStyles(a){this.getWritable().__headerState=
|
9
|
+
a;return this.__headerState}getHeaderStyles(){return this.getLatest().__headerState}setWidth(a){this.getWritable().__width=a;return this.__width}getWidth(){return this.getLatest().__width}toggleHeaderStyle(a){const b=this.getWritable();b.__headerState=(b.__headerState&a)===a?b.__headerState-a:b.__headerState+a;b.__headerState=b.__headerState;return b}hasHeaderState(a){return(this.getHeaderStyles()&a)===a}hasHeader(){return this.getLatest().__headerState!==r.NO_STATUS}updateDOM(a){return a.__headerState!==
|
10
|
+
this.__headerState||a.__width!==this.__width}collapseAtStart(){return!0}canBeEmpty(){return!1}}function v(a,b=1,d){return new u(a,b,d)}function w(a){return a instanceof u}function y(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.");}const z=document.createElement("style");z.appendChild(document.createTextNode("::selection{background-color: transparent}"));
|
11
|
+
class A{constructor(a,b){this.isHighlightingCells=this.isMouseDown=!1;this.currentY=this.currentX=this.startY=this.startX=-1;this.listenersToRemove=new Set;this.tableNodeKey=b;this.editor=a;this.grid={cells:[],columns:0,rows:0};this.focusCellNodeKey=this.anchorCellNodeKey=this.gridSelection=null;this.trackTableGrid()}getGrid(){return this.grid}removeListeners(){Array.from(this.listenersToRemove).forEach(a=>a())}trackTableGrid(){const a=new MutationObserver(b=>{this.editor.update(()=>{var d=!1;for(let f=
|
12
|
+
0;f<b.length;f++){const c=b[f].target.nodeName;if("TABLE"===c||"TR"===c){d=!0;break}}if(d){d=this.editor.getElementByKey(this.tableNodeKey);if(!d)throw Error("Expected to find TableElement in DOM");this.grid=B(d)}})});this.editor.update(()=>{const b=this.editor.getElementByKey(this.tableNodeKey);if(!b)throw Error("Expected to find TableElement in DOM");this.grid=B(b);a.observe(b,{childList:!0,subtree:!0})})}clearHighlight(){this.editor.update(()=>{var a=n.$getNodeByKey(this.tableNodeKey);if(!C(a))throw Error("Expected TableNode.");
|
13
|
+
a=this.editor.getElementByKey(this.tableNodeKey);if(!a)throw Error("Expected to find TableElement in DOM");a=B(a);this.isMouseDown=this.isHighlightingCells=!1;this.currentY=this.currentX=this.startY=this.startX=-1;D(a,null);this.gridSelection=null;n.$setSelection(null);a=z.parentNode;null!=a&&a.removeChild(z)})}adjustFocusCellForSelection(a,b=!1){this.editor.update(()=>{this.isMouseDown=!0;var d=n.$getNodeByKey(this.tableNodeKey);if(!C(d))throw Error("Expected TableNode.");if(!this.editor.getElementByKey(this.tableNodeKey))throw Error("Expected to find TableElement in DOM");
|
14
|
+
d=a.x;const f=a.y;if(!this.isHighlightingCells&&(this.startX!==d||this.startY!==f||b)){const c=window.getSelection(),g=c.anchorNode;null!==g&&c.setBaseAndExtent(g,0,g,0);this.isHighlightingCells=!0;document.body&&document.body.appendChild(z)}else if(d===this.currentX&&f===this.currentY)return;this.currentX=d;this.currentY=f;this.isHighlightingCells&&(d=n.$getNearestNodeFromDOMNode(a.elem),null!=this.gridSelection&&null!=this.anchorCellNodeKey&&w(d)&&(d=d.getKey(),this.gridSelection=n.$createGridSelection(),
|
15
|
+
this.focusCellNodeKey=d,this.gridSelection.set(this.tableNodeKey,this.anchorCellNodeKey,this.focusCellNodeKey),n.$setSelection(this.gridSelection),D(this.grid,this.gridSelection)))})}setAnchorCellForSelection(a){this.editor.update(()=>{this.startX=a.x;this.startY=a.y;this.isMouseDown=!0;var b=n.$getNearestNodeFromDOMNode(a.elem);w(b)&&(b=b.getKey(),this.gridSelection=n.$createGridSelection(),this.anchorCellNodeKey=b)});document.addEventListener("mouseup",()=>{this.isMouseDown=!1},{capture:!0,once:!0})}formatCells(a){this.editor.update(()=>
|
16
|
+
{const b=n.$getSelection();if(!n.$isGridSelection(b))throw Error("Expected grid selection");const d=n.$createRangeSelection(),f=d.anchor,c=d.focus;b.getNodes().forEach(g=>{n.$isElementNode(g)&&0!==g.getTextContentSize()&&(f.set(g.getKey(),0,"element"),c.set(g.getKey(),g.getChildrenSize(),"element"),d.formatText(a))});n.$setSelection(b)})}clearText(){this.editor.update(()=>{const a=n.$getNodeByKey(this.tableNodeKey);if(!C(a))throw Error("Expected TableNode.");var b=n.$getSelection();if(!n.$isGridSelection(b))throw Error("Expected grid selection");
|
17
|
+
b=b.getNodes();b.length===this.grid.columns*this.grid.rows?(a.selectPrevious(),a.remove(),this.clearHighlight()):(b.forEach(d=>{if(n.$isElementNode(d)){const f=n.$createParagraphNode(),c=n.$createTextNode();f.append(c);d.append(f);d.getChildren().forEach(g=>{g!==f&&g.remove()})}}),D(this.grid,null),n.$setSelection(null))})}}function E(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}
|
18
|
+
function B(a){const b=[],d={cells:b,columns:0,rows:0};var f=a.firstChild;let c=a=0;for(b.length=0;null!=f;){var g=f.nodeName;if("TD"===g||"TH"===g)g={elem:f,highlighted:!1,x:a,y:c},f._cell=g,void 0===b[c]&&(b[c]=[]),b[c][a]=g;else if(g=f.firstChild,null!=g){f=g;continue}g=f.nextSibling;if(null!=g)a++,f=g;else if(g=f.parentNode,null!=g){f=g.nextSibling;if(null==f)break;c++;a=0}}d.columns=a+1;d.rows=c+1;return d}
|
19
|
+
function D(a,b){const d=[];({cells:a}=a);b=new Set(b?b.getNodes():[]);for(let f=0;f<a.length;f++){const c=a[f];for(let g=0;g<c.length;g++){const e=c[g],h=e.elem.style,l=n.$getNearestNodeFromDOMNode(e.elem);l&&b.has(l)?(e.highlighted=!0,h.setProperty("background-color","rgb(163, 187, 255)"),h.setProperty("caret-color","transparent"),d.push(e)):(e.highlighted=!1,h.removeProperty("background-color"),h.removeProperty("caret-color"),e.elem.getAttribute("style")||e.elem.removeAttribute("style"))}}return d}
|
20
|
+
const J=(a,b,d,f,c)=>{switch(c){case "backward":case "forward":return c="forward"===c,d!==(c?a.grid.columns-1:0)?F(b.getCellNodeFromCordsOrThrow(d+(c?1:-1),f,a.grid)):f!==(c?a.grid.rows-1:0)?F(b.getCellNodeFromCordsOrThrow(c?0:a.grid.columns-1,f+(c?1:-1),a.grid)):c?b.selectNext():b.selectPrevious(),!0;case "up":return 0!==f?F(b.getCellNodeFromCordsOrThrow(d,f-1,a.grid)):b.selectPrevious(),!0;case "down":return f!==a.grid.rows-1?F(b.getCellNodeFromCordsOrThrow(d,f+1,a.grid)):b.selectNext(),!0}return!1};
|
21
|
+
function F(a){const b=a.getChildren().find(d=>n.$isParagraphNode(d));n.$isParagraphNode(b)?b.selectEnd():a.selectEnd()}
|
22
|
+
class K extends n.GridNode{static getType(){return"table"}static clone(a){return new K(a.__key)}constructor(a){super(a)}createDOM(a){const b=document.createElement("table");k.addClassNamesToElement(b,a.theme.table);return b}updateDOM(){return!1}canExtractContents(){return!1}canBeEmpty(){return!1}getCordsFromCellNode(a,b){b||y(55);const {rows:d,cells:f}=b;for(b=0;b<d;b++){var c=f[b];if(null==c)throw Error(`Row not found at y:${b}`);c=c.findIndex(({elem:g})=>n.$getNearestNodeFromDOMNode(g)===a);if(-1!==
|
23
|
+
c)return{x:c,y:b}}throw Error("Cell not found in table.");}getCellNodeFromCords(a,b,d){d||y(55);({cells:d}=d);b=d[b];if(null==b)return null;a=b[a];if(null==a)return null;a=n.$getNearestNodeFromDOMNode(a.elem);return w(a)?a:null}getCellNodeFromCordsOrThrow(a,b,d){a=this.getCellNodeFromCords(a,b,d);if(!a)throw Error("Node at cords not TableCellNode.");return a}canSelectBefore(){return!0}}function L(){return new K}function C(a){return a instanceof K}
|
24
|
+
class M extends n.GridRowNode{static getType(){return"tablerow"}static clone(a){return new M(a.__height,a.__key)}constructor(a,b){super(b);this.__height=a}createDOM(a){const b=document.createElement("tr");this.__height&&(b.style.height=`${this.__height}px`);k.addClassNamesToElement(b,a.theme.tableRow);return b}setHeight(a){this.getWritable().__height=a;return this.__height}getHeight(){return this.getLatest().__height}updateDOM(a){return a.__height!==this.__height}canBeEmpty(){return!1}}
|
25
|
+
function N(a){return new M(a)}function O(a){return a instanceof M}function P(a){a=k.$findMatchingParent(a,b=>O(b));if(O(a))return a;throw Error("Expected table cell to be inside of table row.");}function Q(a){a=k.$findMatchingParent(a,b=>C(b));if(C(a))return a;throw Error("Expected table cell to be inside of table.");}exports.$createTableCellNode=v;exports.$createTableNode=L;
|
26
|
+
exports.$createTableNodeWithDimensions=function(a,b,d=!0){const f=L();for(let g=0;g<a;g++){const e=N();for(let h=0;h<b;h++){var c=r.NO_STATUS;d&&(0===g&&(c|=r.ROW),0===h&&(c|=r.COLUMN));c=v(c);const l=n.$createParagraphNode();l.append(n.$createTextNode());c.append(l);e.append(c)}f.append(e)}return f};exports.$createTableRowNode=N;
|
27
|
+
exports.$deleteTableColumn=function(a,b){const d=a.getChildren();for(let c=0;c<d.length;c++){var f=d[c];if(O(f)){f=f.getChildren();if(b>=f.length||0>b)throw Error("Table column target index out of range");f[b].remove()}}return a};exports.$getElementGridForTableNode=function(a,b){a=a.getElementByKey(b.getKey());if(null==a)throw Error("Table Element Not Found");return B(a)};exports.$getTableCellNodeFromLexicalNode=function(a){a=k.$findMatchingParent(a,b=>w(b));return w(a)?a:null};
|
28
|
+
exports.$getTableColumnIndexFromTableCellNode=function(a){return P(a).getChildren().findIndex(b=>b.is(a))};exports.$getTableNodeFromLexicalNodeOrThrow=Q;exports.$getTableRowIndexFromTableCellNode=function(a){const b=P(a);return Q(b).getChildren().findIndex(d=>d.is(b))};exports.$getTableRowNodeFromTableCellNodeOrThrow=P;
|
29
|
+
exports.$insertTableColumn=function(a,b,d=!0,f){const c=a.getChildren();for(let h=0;h<c.length;h++){const l=c[h];if(O(l))for(let m=0;m<f;m++){var g=r.NO_STATUS;0===h&&(g|=r.ROW);g=v(g);g.append(n.$createParagraphNode());var e=l.getChildren();if(b>=e.length||0>b)throw Error("Table column target index out of range");e=e[b];d?e.insertAfter(g):e.insertBefore(g)}}return a};
|
30
|
+
exports.$insertTableRow=function(a,b,d=!0,f,c){var g=a.getChildren();if(b>=g.length||0>b)throw Error("Table row target index out of range");b=g[b];if(O(b))for(g=0;g<f;g++){const l=b.getChildren(),m=l.length,q=N();for(let t=0;t<m;t++){var e=l[t];if(!w(e))throw Error("Expected table cell");var h=c;const p=Q(e),{x,y:G}=p.getCordsFromCellNode(e,h);e={above:p.getCellNodeFromCords(x,G-1,h),below:p.getCellNodeFromCords(x,G+1,h),left:p.getCellNodeFromCords(x-1,G,h),right:p.getCellNodeFromCords(x+1,G,h)};
|
31
|
+
const {above:H,below:I}=e;e=r.NO_STATUS;h=H&&H.getWidth()||I&&I.getWidth()||null;if(H&&H.hasHeaderState(r.COLUMN)||I&&I.hasHeaderState(r.COLUMN))e|=r.COLUMN;e=v(e,1,h);e.append(n.$createParagraphNode());q.append(e)}d?b.insertAfter(q):b.insertBefore(q)}else throw Error("Row before insertion index does not exist.");return a};exports.$isTableCellNode=w;exports.$isTableNode=C;exports.$isTableRowNode=O;
|
32
|
+
exports.$removeTableRowAtIndex=function(a,b){const d=a.getChildren();if(b>=d.length||0>b)throw Error("Expected table cell to be inside of table row.");d[b].remove();return a};exports.TableCellHeaderStates=r;exports.TableCellNode=u;exports.TableNode=K;exports.TableRowNode=M;exports.TableSelection=A;
|
33
|
+
exports.applyTableHandlers=function(a,b,d){const f=d.getRootElement();if(null===f)throw Error("No root element.");const c=new A(d,a.getKey());b.__lexicalTableSelection=c;b.addEventListener("dblclick",e=>{const h=E(e.target);null!==h&&(e.preventDefault(),e.stopImmediatePropagation(),e.stopPropagation(),c.setAnchorCellForSelection(h),c.adjustFocusCellForSelection(h,!0),c.isMouseDown=!1)});b.addEventListener("mousedown",e=>{setTimeout(()=>{const h=E(e.target);null!==h&&c.setAnchorCellForSelection(h)},
|
34
|
+
0)});b.addEventListener("mousemove",e=>{if(c.isMouseDown){const h=E(e.target);if(null!==h){const l=h.x,m=h.y;c.isMouseDown&&(c.startX!==l||c.startY!==m||c.isHighlightingCells)&&(e.preventDefault(),c.adjustFocusCellForSelection(h))}}});b.addEventListener("mouseup",()=>{c.isMouseDown&&(c.isMouseDown=!1)});b.addEventListener("mouseleave",()=>{});const g=e=>{d.update(()=>{const h=n.$getSelection();if(n.$isGridSelection(h)&&h.gridKey===c.tableNodeKey&&f.contains(e.target))return c.clearHighlight()})};
|
35
|
+
window.addEventListener("mousedown",g);c.listenersToRemove.add(()=>window.removeEventListener(g));c.listenersToRemove.add(d.addListener("command",(e,h)=>{var l=n.$getSelection();if(n.$isGridSelection(l)){if("deleteCharacter"===e||"keyBackspace"===e)return h.preventDefault(),h.stopPropagation(),c.clearText(),!0;if("formatText"===e)return c.formatCells(h),!0;"insertText"===e&&c.clearHighlight()}else if(n.$isRangeSelection(l)){var m=k.$findMatchingParent(l.anchor.getNode(),p=>w(p));if(!w(m))return!1;
|
36
|
+
if("deleteCharacter"===e&&l.isCollapsed()&&0===l.anchor.offset&&0===l.anchor.getNode().getPreviousSiblings().length)return!0;if("keyTab"===e&&l.isCollapsed())return l=a.getCordsFromCellNode(m,c.grid),h.preventDefault(),J(c,a,l.x,l.y,h.shiftKey||"keyTab"!==e?"backward":"forward"),!0;if(("keyArrowDown"===e||"keyArrowUp"===e||"keyArrowLeft"===e||"keyArrowRight"===e)&&l.isCollapsed()){const p=a.getCordsFromCellNode(m,c.grid);var q=k.$findMatchingParent(l.anchor.getNode(),x=>n.$isElementNode(x));if(null==
|
37
|
+
q)throw Error("Expected BlockNode Parent");var t=m.getFirstChild();m=m.getLastChild();t=t&&q.isParentOf(t)||q===t;q=m&&q.isParentOf(m)||q===m;if("keyArrowUp"===e&&t||"keyArrowDown"===e&&q)return h.preventDefault(),h.stopImmediatePropagation(),h.stopPropagation(),J(c,a,p.x,p.y,"keyArrowUp"===e?"up":"down"),!0;if("keyArrowLeft"===e&&0===l.anchor.offset||"keyArrowRight"===e&&l.anchor.offset===l.anchor.getNode().getTextContentSize())return h.preventDefault(),h.stopImmediatePropagation(),h.stopPropagation(),
|
38
|
+
J(c,a,p.x,p.y,"keyArrowLeft"===e?"backward":"forward"),!0}}return!1},4));return c};exports.getCellFromTarget=E;exports.getTableSelectionFromTableElement=function(a){return a.__lexicalTableSelection};
|
package/package.json
CHANGED
@@ -12,10 +12,13 @@
|
|
12
12
|
"table"
|
13
13
|
],
|
14
14
|
"license": "MIT",
|
15
|
-
"version": "0.1.
|
15
|
+
"version": "0.1.15",
|
16
16
|
"main": "LexicalTable.js",
|
17
17
|
"peerDependencies": {
|
18
|
-
"lexical": "0.1.
|
18
|
+
"lexical": "0.1.15"
|
19
|
+
},
|
20
|
+
"dependencies": {
|
21
|
+
"@lexical/utils": "0.1.15"
|
19
22
|
},
|
20
23
|
"repository": {
|
21
24
|
"type": "git",
|