@lexical/table 0.2.5 → 0.2.8
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 +20 -23
- package/LexicalTable.prod.js +5 -5
- package/package.json +3 -3
package/LexicalTable.d.ts
CHANGED
@@ -18,9 +18,9 @@ import type {
|
|
18
18
|
TextFormatType,
|
19
19
|
LexicalCommand,
|
20
20
|
} from 'lexical';
|
21
|
-
import {
|
21
|
+
import {$Values} from 'utility-types';
|
22
22
|
|
23
|
-
export enum
|
23
|
+
export enum TableCellHeaderStates {
|
24
24
|
NO_STATUS = 0,
|
25
25
|
ROW = 1,
|
26
26
|
COLUMN = 2,
|
@@ -31,24 +31,16 @@ export enum TableCellHeaderState {
|
|
31
31
|
* LexicalTableCellNode
|
32
32
|
*/
|
33
33
|
|
34
|
-
export const TableCellHeaderStates = {
|
35
|
-
NO_STATUS: 0,
|
36
|
-
ROW: 1,
|
37
|
-
COLUMN: 2,
|
38
|
-
BOTH: 3,
|
39
|
-
};
|
40
|
-
|
41
|
-
export type TableCellHeaderState = $Values<typeof TableCellHeaderStates>;
|
42
|
-
|
43
34
|
export declare class TableCellNode extends ElementNode {
|
44
35
|
static getType(): string;
|
45
36
|
static clone(node: TableCellNode): TableCellNode;
|
46
37
|
constructor(
|
47
|
-
headerState?:
|
38
|
+
headerState?: TableCellHeaderStates,
|
48
39
|
colSpan?: number,
|
49
|
-
width?:
|
40
|
+
width?: number | null | undefined,
|
50
41
|
key?: NodeKey,
|
51
42
|
);
|
43
|
+
__headerState: TableCellHeaderStates;
|
52
44
|
createDOM(config: EditorConfig): HTMLElement;
|
53
45
|
updateDOM(prevNode: TableCellNode, dom: HTMLElement): boolean;
|
54
46
|
insertNewAfter(
|
@@ -56,17 +48,22 @@ export declare class TableCellNode extends ElementNode {
|
|
56
48
|
): null | ParagraphNode | TableCellNode;
|
57
49
|
collapseAtStart(): true;
|
58
50
|
getTag(): string;
|
59
|
-
setHeaderState(headerState:
|
60
|
-
getHeaderState():
|
61
|
-
toggleHeaderState(headerState:
|
51
|
+
setHeaderState(headerState: TableCellHeaderStates): TableCellHeaderStates;
|
52
|
+
getHeaderState(): TableCellHeaderStates;
|
53
|
+
toggleHeaderState(headerState: TableCellHeaderStates): TableCellNode;
|
62
54
|
hasHeader(): boolean;
|
63
|
-
setWidth(width: number):
|
64
|
-
getWidth():
|
55
|
+
setWidth(width: number): number | null | undefined;
|
56
|
+
getWidth(): number | null | undefined;
|
57
|
+
toggleHeaderStyle(headerState: TableCellHeaderStates): TableCellNode;
|
65
58
|
updateDOM(prevNode: TableCellNode): boolean;
|
66
59
|
collapseAtStart(): true;
|
67
60
|
canBeEmpty(): false;
|
68
61
|
}
|
69
|
-
|
62
|
+
declare function $createTableCellNode(
|
63
|
+
headerState: TableCellHeaderStates,
|
64
|
+
colSpan?: number,
|
65
|
+
width?: number | null | undefined,
|
66
|
+
): TableCellNode;
|
70
67
|
export declare function $isTableCellNode(
|
71
68
|
node?: LexicalNode,
|
72
69
|
): node is TableCellNode;
|
@@ -84,7 +81,7 @@ export declare class TableNode extends ElementNode {
|
|
84
81
|
insertNewAfter(selection: RangeSelection): null | ParagraphNode | TableNode;
|
85
82
|
collapseAtStart(): true;
|
86
83
|
getCordsFromCellNode(tableCellNode: TableCellNode): {x: number; y: number};
|
87
|
-
getCellFromCords(x: number, y: number, grid: Grid):
|
84
|
+
getCellFromCords(x: number, y: number, grid: Grid): Cell | null | undefined;
|
88
85
|
getCellFromCordsOrThrow(x: number, y: number, grid: Grid): Cell;
|
89
86
|
getCellNodeFromCords(x: number, y: number): TableCellNode | null;
|
90
87
|
getCellNodeFromCordsOrThrow(x: number, y: number): TableCellNode;
|
@@ -102,14 +99,14 @@ declare function $isTableNode(node?: LexicalNode): node is TableNode;
|
|
102
99
|
declare class TableRowNode extends ElementNode {
|
103
100
|
static getType(): string;
|
104
101
|
static clone(node: TableRowNode): TableRowNode;
|
105
|
-
constructor(key?: NodeKey, height?:
|
102
|
+
constructor(key?: NodeKey, height?: number | null | undefined);
|
106
103
|
createDOM(config: EditorConfig): HTMLElement;
|
107
104
|
updateDOM(prevNode: TableRowNode, dom: HTMLElement): boolean;
|
108
105
|
insertNewAfter(
|
109
106
|
selection: RangeSelection,
|
110
107
|
): null | ParagraphNode | TableRowNode;
|
111
|
-
setHeight(height: number):
|
112
|
-
getHeight():
|
108
|
+
setHeight(height: number): number | null | undefined;
|
109
|
+
getHeight(): number | null | undefined;
|
113
110
|
collapseAtStart(): true;
|
114
111
|
}
|
115
112
|
declare function $createTableRowNode(): TableRowNode;
|
package/LexicalTable.prod.js
CHANGED
@@ -21,8 +21,8 @@ f.$getNodeByKey(this.tableNodeKey);if(!G(a))throw Error("Expected TableNode.");a
|
|
21
21
|
!0;this.disableHighlightStyle();const b=this.editor.getElementByKey(a.anchor.key);a=this.editor.getElementByKey(a.focus.key);b&&a&&window.getSelection().setBaseAndExtent(b,0,a,0);H(this.grid,this.gridSelection)}else this.clearHighlight()}adjustFocusCellForSelection(a,b=!1){this.editor.update(()=>{var d=f.$getNodeByKey(this.tableNodeKey);if(!G(d))throw Error("Expected TableNode.");if(!this.editor.getElementByKey(this.tableNodeKey))throw Error("Expected to find TableElement in DOM");d=a.x;const h=a.y;
|
22
22
|
this.focusCell=a;const c=window.getSelection();null!==this.anchorCell&&c.setBaseAndExtent(this.anchorCell.elem,0,a.elem,0);if(!this.isHighlightingCells&&(this.startX!==d||this.startY!==h||b))this.isHighlightingCells=!0,this.disableHighlightStyle();else if(d===this.currentX&&h===this.currentY)return;this.currentX=d;this.currentY=h;this.isHighlightingCells&&(d=f.$getNearestNodeFromDOMNode(a.elem),null!=this.gridSelection&&null!=this.anchorCellNodeKey&&y(d)&&(d=d.getKey(),this.gridSelection=f.$createGridSelection(),
|
23
23
|
this.focusCellNodeKey=d,this.gridSelection.set(this.tableNodeKey,this.anchorCellNodeKey,this.focusCellNodeKey),f.$setSelection(this.gridSelection),this.editor.dispatchCommand(f.SELECTION_CHANGE_COMMAND),H(this.grid,this.gridSelection)))})}setAnchorCellForSelection(a){this.editor.update(()=>{this.anchorCell=a;this.startX=a.x;this.startY=a.y;window.getSelection().setBaseAndExtent(a.elem,0,a.elem,0);var b=f.$getNearestNodeFromDOMNode(a.elem);y(b)&&(b=b.getKey(),this.gridSelection=f.$createGridSelection(),
|
24
|
-
this.anchorCellNodeKey=b)})}formatCells(a){this.editor.update(()=>{const b=f.$getSelection();f.$isGridSelection(b)||z(
|
25
|
-
var b=f.$getSelection();f.$isGridSelection(b)||z(
|
24
|
+
this.anchorCellNodeKey=b)})}formatCells(a){this.editor.update(()=>{const b=f.$getSelection();f.$isGridSelection(b)||z(14);const d=f.$createRangeSelection(),h=d.anchor,c=d.focus;b.getNodes().forEach(k=>{y(k)&&0!==k.getTextContentSize()&&(h.set(k.getKey(),0,"element"),c.set(k.getKey(),k.getChildrenSize(),"element"),d.formatText(a))});f.$setSelection(b);this.editor.dispatchCommand(f.SELECTION_CHANGE_COMMAND)})}clearText(){this.editor.update(()=>{const a=f.$getNodeByKey(this.tableNodeKey);if(!G(a))throw Error("Expected TableNode.");
|
25
|
+
var b=f.$getSelection();f.$isGridSelection(b)||z(14);b=b.getNodes().filter(y);b.length===this.grid.columns*this.grid.rows?(a.selectPrevious(),a.remove(),this.clearHighlight()):(b.forEach(d=>{if(f.$isElementNode(d)){const h=f.$createParagraphNode(),c=f.$createTextNode();h.append(c);d.append(h);d.getChildren().forEach(k=>{k!==h&&k.remove()})}}),H(this.grid,null),f.$setSelection(null),this.editor.dispatchCommand(f.SELECTION_CHANGE_COMMAND))})}}
|
26
26
|
function I(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}
|
27
27
|
function F(a){const b=[],d={cells:b,columns:0,rows:0};var h=a.firstChild;let c=a=0;for(b.length=0;null!=h;){var k=h.nodeName;if("TD"===k||"TH"===k)k={elem:h,highlighted:!1,x:a,y:c},h._cell=k,void 0===b[c]&&(b[c]=[]),b[c][a]=k;else if(k=h.firstChild,null!=k){h=k;continue}k=h.nextSibling;if(null!=k)a++,h=k;else if(k=h.parentNode,null!=k){h=k.nextSibling;if(null==h)break;c++;a=0}}d.columns=a+1;d.rows=c+1;return d}
|
28
28
|
function H(a,b){const d=[],h=new Set(b?b.getNodes():[]);J(a,(c,k)=>{const n=c.elem;h.has(k)?(c.highlighted=!0,n.style.setProperty("background-color","rgb(172, 206, 247)"),n.style.setProperty("caret-color","transparent"),d.push(c)):(c.highlighted=!1,n.style.removeProperty("background-color"),n.style.removeProperty("caret-color"),n.getAttribute("style")||n.removeAttribute("style"))});return d}
|
@@ -32,14 +32,14 @@ const Q=(a,b,d,h,c)=>{switch(c){case "backward":case "forward":return c="forward
|
|
32
32
|
R=(a,b,d,h,c)=>{switch(c){case "backward":case "forward":return c="forward"===c,d!==(c?a.grid.columns-1:0)&&a.adjustFocusCellForSelection(b.getCellFromCordsOrThrow(d+(c?1:-1),h,a.grid)),!0;case "up":if(0!==h)return a.adjustFocusCellForSelection(b.getCellFromCordsOrThrow(d,h-1,a.grid)),!0;break;case "down":if(h!==a.grid.rows-1)return a.adjustFocusCellForSelection(b.getCellFromCordsOrThrow(d,h+1,a.grid)),!0}return!1};
|
33
33
|
function S(a,b){if(f.$isRangeSelection(a)||f.$isGridSelection(a)){const d=b.isParentOf(a.anchor.getNode());a=b.isParentOf(a.focus.getNode());return d&&a}return!1}function P(a){const b=a.getChildren().find(d=>f.$isParagraphNode(d));f.$isParagraphNode(b)?b.selectEnd():a.selectEnd()}
|
34
34
|
class T extends f.GridNode{static getType(){return"table"}static clone(a){return new T(a.__key)}static importDOM(){return{table:()=>({conversion:U,priority:0})}}constructor(a){super(a)}createDOM(a){const b=document.createElement("table");p.addClassNamesToElement(b,a.theme.table);return b}updateDOM(){return!1}exportDOM(a){return{...super.exportDOM(a),after:b=>{if(b){const d=b.cloneNode(),h=document.createElement("colgroup"),c=document.createElement("tbody");c.append(...b.children);b=this.getFirstChildOrThrow();
|
35
|
-
if(!D(b))throw Error("Expected to find row node.");b=b.getChildrenSize();for(let k=0;k<b;k++){const n=document.createElement("col");h.append(n)}d.replaceChildren(h,c);return d}}}}canExtractContents(){return!1}canBeEmpty(){return!1}getCordsFromCellNode(a,b){b||z(
|
36
|
-
b,d){d||z(
|
35
|
+
if(!D(b))throw Error("Expected to find row node.");b=b.getChildrenSize();for(let k=0;k<b;k++){const n=document.createElement("col");h.append(n)}d.replaceChildren(h,c);return d}}}}canExtractContents(){return!1}canBeEmpty(){return!1}getCordsFromCellNode(a,b){b||z(13);const {rows:d,cells:h}=b;for(b=0;b<d;b++){var c=h[b];if(null==c)throw Error(`Row not found at y:${b}`);c=c.findIndex(({elem:k})=>f.$getNearestNodeFromDOMNode(k)===a);if(-1!==c)return{x:c,y:b}}throw Error("Cell not found in table.");}getCellFromCords(a,
|
36
|
+
b,d){d||z(13);({cells:d}=d);b=d[b];if(null==b)return null;a=b[a];return null==a?null:a}getCellFromCordsOrThrow(a,b,d){a=this.getCellFromCords(a,b,d);if(!a)throw Error("Cell not found at cords.");return a}getCellNodeFromCords(a,b,d){a=this.getCellFromCords(a,b,d);if(null==a)return null;a=f.$getNearestNodeFromDOMNode(a.elem);return y(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}canIndent(){return!1}}
|
37
37
|
function U(){return{node:V()}}function V(){return new T}function G(a){return a instanceof T}function W(a){a=p.$findMatchingParent(a,b=>D(b));if(D(a))return a;throw Error("Expected table cell to be inside of table row.");}function X(a){a=p.$findMatchingParent(a,b=>G(b));if(G(a))return a;throw Error("Expected table cell to be inside of table.");}const Y=f.createCommand();exports.$createTableCellNode=x;exports.$createTableNode=V;
|
38
38
|
exports.$createTableNodeWithDimensions=function(a,b,d=!0){const h=V();for(let k=0;k<a;k++){const n=C();for(let r=0;r<b;r++){var c=q.NO_STATUS;d&&(0===k&&(c|=q.ROW),0===r&&(c|=q.COLUMN));c=x(c);const v=f.$createParagraphNode();v.append(f.$createTextNode());c.append(v);n.append(c)}h.append(n)}return h};exports.$createTableRowNode=C;
|
39
39
|
exports.$deleteTableColumn=function(a,b){const d=a.getChildren();for(let c=0;c<d.length;c++){var h=d[c];if(D(h)){h=h.getChildren();if(b>=h.length||0>b)throw Error("Table column target index out of range");h[b].remove()}}return a};exports.$getElementGridForTableNode=function(a,b){a=a.getElementByKey(b.getKey());if(null==a)throw Error("Table Element Not Found");return F(a)};exports.$getTableCellNodeFromLexicalNode=function(a){a=p.$findMatchingParent(a,b=>y(b));return y(a)?a:null};
|
40
40
|
exports.$getTableColumnIndexFromTableCellNode=function(a){return W(a).getChildren().findIndex(b=>b.is(a))};exports.$getTableNodeFromLexicalNodeOrThrow=X;exports.$getTableRowIndexFromTableCellNode=function(a){const b=W(a);return X(b).getChildren().findIndex(d=>d.is(b))};exports.$getTableRowNodeFromTableCellNodeOrThrow=W;
|
41
41
|
exports.$insertTableColumn=function(a,b,d=!0,h){const c=a.getChildren();for(let r=0;r<c.length;r++){const v=c[r];if(D(v))for(let g=0;g<h;g++){var k=q.NO_STATUS;0===r&&(k|=q.ROW);k=x(k);k.append(f.$createParagraphNode());var n=v.getChildren();if(b>=n.length||0>b)throw Error("Table column target index out of range");n=n[b];d?n.insertAfter(k):n.insertBefore(k)}}return a};
|
42
|
-
exports.$insertTableRow=function(a,b,d=!0,h,c){var k=a.getChildren();if(b>=k.length||0>b)throw Error("Table row target index out of range");b=k[b];if(D(b))for(k=0;k<h;k++){const v=b.getChildren(),g=v.length,e=C();for(let l=0;l<g;l++){var n=v[l];y(n)||z(
|
42
|
+
exports.$insertTableRow=function(a,b,d=!0,h,c){var k=a.getChildren();if(b>=k.length||0>b)throw Error("Table row target index out of range");b=k[b];if(D(b))for(k=0;k<h;k++){const v=b.getChildren(),g=v.length,e=C();for(let l=0;l<g;l++){var n=v[l];y(n)||z(12);var r=c;const m=X(n),{x:u,y:L}=m.getCordsFromCellNode(n,r);n={above:m.getCellNodeFromCords(u,L-1,r),below:m.getCellNodeFromCords(u,L+1,r),left:m.getCellNodeFromCords(u-1,L,r),right:m.getCellNodeFromCords(u+1,L,r)};const {above:M,below:N}=n;n=q.NO_STATUS;
|
43
43
|
r=M&&M.getWidth()||N&&N.getWidth()||null;if(M&&M.hasHeaderState(q.COLUMN)||N&&N.hasHeaderState(q.COLUMN))n|=q.COLUMN;n=x(n,1,r);n.append(f.$createParagraphNode());e.append(n)}d?b.insertAfter(e):b.insertBefore(e)}else throw Error("Row before insertion index does not exist.");return a};exports.$isTableCellNode=y;exports.$isTableNode=G;exports.$isTableRowNode=D;
|
44
44
|
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.INSERT_TABLE_COMMAND=Y;exports.TableCellHeaderStates=q;exports.TableCellNode=t;exports.TableNode=T;exports.TableRowNode=A;exports.TableSelection=E;
|
45
45
|
exports.applyTableHandlers=function(a,b,d){const h=d.getRootElement();if(null===h)throw Error("No root element.");const c=new E(d,a.getKey());b.__lexicalTableSelection=c;let k=!1,n=!1;b.addEventListener("dblclick",g=>{const e=I(g.target);null!==e&&(g.preventDefault(),g.stopImmediatePropagation(),g.stopPropagation(),c.setAnchorCellForSelection(e),c.adjustFocusCellForSelection(e,!0),k=!1)});b.addEventListener("mousedown",g=>{setTimeout(()=>{if(0===g.button){var e=I(g.target);null!==e&&(c.setAnchorCellForSelection(e),
|
package/package.json
CHANGED
@@ -8,13 +8,13 @@
|
|
8
8
|
"table"
|
9
9
|
],
|
10
10
|
"license": "MIT",
|
11
|
-
"version": "0.2.
|
11
|
+
"version": "0.2.8",
|
12
12
|
"main": "LexicalTable.js",
|
13
13
|
"peerDependencies": {
|
14
|
-
"lexical": "0.2.
|
14
|
+
"lexical": "0.2.8"
|
15
15
|
},
|
16
16
|
"dependencies": {
|
17
|
-
"@lexical/utils": "0.2.
|
17
|
+
"@lexical/utils": "0.2.8"
|
18
18
|
},
|
19
19
|
"repository": {
|
20
20
|
"type": "git",
|