@lexical/table 0.44.1-nightly.20260519.0 → 0.45.1-dev.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.
Files changed (37) hide show
  1. package/{LexicalTable.dev.js → dist/LexicalTable.dev.js} +268 -33
  2. package/{LexicalTable.dev.mjs → dist/LexicalTable.dev.mjs} +264 -33
  3. package/{LexicalTable.mjs → dist/LexicalTable.mjs} +4 -0
  4. package/{LexicalTable.node.mjs → dist/LexicalTable.node.mjs} +4 -0
  5. package/dist/LexicalTable.prod.js +9 -0
  6. package/dist/LexicalTable.prod.mjs +9 -0
  7. package/dist/TableImportExtension.d.ts +41 -0
  8. package/{index.d.ts → dist/index.d.ts} +1 -0
  9. package/package.json +34 -18
  10. package/src/LexicalTableCellNode.ts +479 -0
  11. package/src/LexicalTableCommands.ts +27 -0
  12. package/src/LexicalTableExtension.ts +104 -0
  13. package/src/LexicalTableNode.ts +678 -0
  14. package/src/LexicalTableObserver.ts +575 -0
  15. package/src/LexicalTablePluginHelpers.ts +694 -0
  16. package/src/LexicalTableRowNode.ts +154 -0
  17. package/src/LexicalTableSelection.ts +460 -0
  18. package/src/LexicalTableSelectionHelpers.ts +2409 -0
  19. package/src/LexicalTableUtils.ts +1386 -0
  20. package/src/TableImportExtension.ts +324 -0
  21. package/src/constants.ts +13 -0
  22. package/src/index.ts +97 -0
  23. package/LexicalTable.prod.js +0 -9
  24. package/LexicalTable.prod.mjs +0 -9
  25. /package/{LexicalTable.js → dist/LexicalTable.js} +0 -0
  26. /package/{LexicalTable.js.flow → dist/LexicalTable.js.flow} +0 -0
  27. /package/{LexicalTableCellNode.d.ts → dist/LexicalTableCellNode.d.ts} +0 -0
  28. /package/{LexicalTableCommands.d.ts → dist/LexicalTableCommands.d.ts} +0 -0
  29. /package/{LexicalTableExtension.d.ts → dist/LexicalTableExtension.d.ts} +0 -0
  30. /package/{LexicalTableNode.d.ts → dist/LexicalTableNode.d.ts} +0 -0
  31. /package/{LexicalTableObserver.d.ts → dist/LexicalTableObserver.d.ts} +0 -0
  32. /package/{LexicalTablePluginHelpers.d.ts → dist/LexicalTablePluginHelpers.d.ts} +0 -0
  33. /package/{LexicalTableRowNode.d.ts → dist/LexicalTableRowNode.d.ts} +0 -0
  34. /package/{LexicalTableSelection.d.ts → dist/LexicalTableSelection.d.ts} +0 -0
  35. /package/{LexicalTableSelectionHelpers.d.ts → dist/LexicalTableSelectionHelpers.d.ts} +0 -0
  36. /package/{LexicalTableUtils.d.ts → dist/LexicalTableUtils.d.ts} +0 -0
  37. /package/{constants.d.ts → dist/constants.d.ts} +0 -0
@@ -0,0 +1,9 @@
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
+
9
+ import{addClassNamesToElement as e,$descendantsMatching as t,$findMatchingParent as n,removeClassNamesFromElement as o,objectKlassEquals as r,isHTMLElement as l,$insertFirst as s,mergeRegister as i,$insertNodeToNearestRoot as c,$dfs as a,$unwrapAndFilterDescendants as u}from"@lexical/utils";import{ElementNode as h,isHTMLElement as d,$isInlineElementOrDecoratorNode as f,$isTextNode as g,$isLineBreakNode as m,$createParagraphNode as p,$applyNodeReplacement as C,createCommand as _,$createTextNode as S,$getSelection as b,$isRangeSelection as w,$isParagraphNode as y,$createPoint as N,$getNodeByKey as v,$isElementNode as x,$normalizeSelection__EXPERIMENTAL as T,isCurrentlyReadOnlyMode as F,TEXT_TYPE_TO_FORMAT as R,$getEditor as O,$setSelection as A,SELECTION_CHANGE_COMMAND as K,getDOMSelection as E,$createRangeSelection as k,$isRootNode as M,INSERT_PARAGRAPH_COMMAND as $,KEY_ARROW_DOWN_COMMAND as W,KEY_ARROW_UP_COMMAND as z,KEY_ARROW_LEFT_COMMAND as L,KEY_ARROW_RIGHT_COMMAND as H,COMMAND_PRIORITY_HIGH as B,KEY_ESCAPE_COMMAND as P,DELETE_WORD_COMMAND as D,DELETE_LINE_COMMAND as I,DELETE_CHARACTER_COMMAND as U,KEY_BACKSPACE_COMMAND as J,KEY_DELETE_COMMAND as X,CUT_COMMAND as Y,FORMAT_TEXT_COMMAND as q,FORMAT_ELEMENT_COMMAND as j,CONTROLLED_TEXT_INSERTION_COMMAND as V,KEY_TAB_COMMAND as G,FOCUS_COMMAND as Q,$getNearestNodeFromDOMNode as Z,isDOMNode as ee,$isRootOrShadowRoot as te,$getPreviousSelection as ne,$getNodeByKeyOrThrow as oe,$caretFromPoint as re,$isExtendableTextPointCaret as le,$extendCaretToRange as se,$isSiblingCaret as ie,$getSiblingCaret as ce,$setPointFromCaret as ae,$normalizeCaret as ue,$createRangeSelectionFromDom as he,$isChildCaret as de,$getChildCaret as fe,$getAdjacentChildCaret as ge,IS_FIREFOX as me,setDOMStyleFromCSS as pe,setDOMUnmanaged as Ce,COMMAND_PRIORITY_EDITOR as _e,SELECTION_INSERT_CLIPBOARD_NODES_COMMAND as Se,SELECT_ALL_COMMAND as be,COMMAND_PRIORITY_LOW as we,CLICK_COMMAND as ye,$getRoot as Ne,defineExtension as ve,$fullReconcile as xe,safeCast as Te,configExtension as Fe,isHTMLTableRowElement as Re,IS_BOLD as Oe,IS_ITALIC as Ae,IS_UNDERLINE as Ke,IS_STRIKETHROUGH as Ee}from"lexical";import{signal as ke,effect as Me,namedSignals as $e}from"@lexical/extension";import{copyToClipboard as We,$getClipboardDataFromSelection as ze}from"@lexical/clipboard";import{DOMImportExtension as Le,defineImportRule as He,sel as Be,ImportTextFormat as Pe,ImportTextStyle as De,contextValue as Ie,$propagateTextAlignToBlockChildren as Ue}from"@lexical/html";const Je=/^(\d+(?:\.\d+)?)px$/,Xe={BOTH:3,COLUMN:2,NO_STATUS:0,ROW:1};class Ye extends h{__colSpan;__rowSpan;__headerState;__width;__backgroundColor;__verticalAlign;static getType(){return"tablecell"}static clone(e){return new Ye(e.__headerState,e.__colSpan,e.__width,e.__key)}afterCloneFrom(e){super.afterCloneFrom(e),this.__rowSpan=e.__rowSpan,this.__backgroundColor=e.__backgroundColor,this.__verticalAlign=e.__verticalAlign,this.__colSpan=e.__colSpan,this.__headerState=e.__headerState,this.__width=e.__width}static importDOM(){return{td:e=>({conversion:je,priority:0}),th:e=>({conversion:je,priority:0})}}static importJSON(e){return Ve().updateFromJSON(e)}updateFromJSON(e){return super.updateFromJSON(e).setHeaderStyles(e.headerState).setColSpan(e.colSpan||1).setRowSpan(e.rowSpan||1).setWidth(e.width||void 0).setBackgroundColor(e.backgroundColor||null).setVerticalAlign(e.verticalAlign||void 0)}constructor(e=Xe.NO_STATUS,t=1,n,o){super(o),this.__colSpan=t,this.__rowSpan=1,this.__headerState=e,this.__width=n,this.__backgroundColor=null,this.__verticalAlign=void 0}createDOM(t){const n=document.createElement(this.getTag());return this.__width&&(n.style.width=`${this.__width}px`),this.__colSpan>1&&(n.colSpan=this.__colSpan),this.__rowSpan>1&&(n.rowSpan=this.__rowSpan),null!==this.__backgroundColor&&(n.style.backgroundColor=this.__backgroundColor),qe(this.__verticalAlign)&&(n.style.verticalAlign=this.__verticalAlign),e(n,t.theme.tableCell,this.hasHeader()&&t.theme.tableCellHeader),n}exportDOM(e){const t=super.exportDOM(e);if(d(t.element)){const e=t.element;e.setAttribute("data-temporary-table-cell-lexical-key",this.getKey()),e.style.border="1px solid black",this.__colSpan>1&&(e.colSpan=this.__colSpan),this.__rowSpan>1&&(e.rowSpan=this.__rowSpan),e.style.width=`${this.getWidth()||75}px`,e.style.verticalAlign=this.getVerticalAlign()||"top",e.style.textAlign="start",null===this.__backgroundColor&&this.hasHeader()&&(e.style.backgroundColor="#f2f3f5")}return t}exportJSON(){return{...super.exportJSON(),...qe(this.__verticalAlign)&&{verticalAlign:this.__verticalAlign},backgroundColor:this.getBackgroundColor(),colSpan:this.__colSpan,headerState:this.__headerState,rowSpan:this.__rowSpan,width:this.getWidth()}}getColSpan(){return this.getLatest().__colSpan}setColSpan(e){const t=this.getWritable();return t.__colSpan=e,t}getRowSpan(){return this.getLatest().__rowSpan}setRowSpan(e){const t=this.getWritable();return t.__rowSpan=e,t}getTag(){return this.hasHeader()?"th":"td"}setHeaderStyles(e,t=Xe.BOTH){const n=this.getWritable();return n.__headerState=e&t|n.__headerState&~t,n}getHeaderStyles(){return this.getLatest().__headerState}setWidth(e){const t=this.getWritable();return t.__width=e,t}getWidth(){return this.getLatest().__width}getBackgroundColor(){return this.getLatest().__backgroundColor}setBackgroundColor(e){const t=this.getWritable();return t.__backgroundColor=e,t}getVerticalAlign(){return this.getLatest().__verticalAlign}setVerticalAlign(e){const t=this.getWritable();return t.__verticalAlign=e||void 0,t}toggleHeaderStyle(e){const t=this.getWritable();return(t.__headerState&e)===e?t.__headerState-=e:t.__headerState+=e,t}hasHeaderState(e){return(this.getHeaderStyles()&e)===e}hasHeader(){return this.getLatest().__headerState!==Xe.NO_STATUS}updateDOM(e){return e.__headerState!==this.__headerState||e.__width!==this.__width||e.__colSpan!==this.__colSpan||e.__rowSpan!==this.__rowSpan||e.__backgroundColor!==this.__backgroundColor||e.__verticalAlign!==this.__verticalAlign}isShadowRoot(){return!0}collapseAtStart(){return!0}canBeEmpty(){return!1}canIndent(){return!1}}function qe(e){return"middle"===e||"bottom"===e}function je(e){const t=e,n=e.nodeName.toLowerCase();let o;Je.test(t.style.width)&&(o=parseFloat(t.style.width));let r=Xe.NO_STATUS;if("th"===n){const e=t.getAttribute("scope");if("col"===e)r=Xe.COLUMN;else if("row"===e)r=Xe.ROW;else{const e=t.parentElement,n=d(e)&&"tr"===e.nodeName.toLowerCase()&&d(e.parentElement)&&("thead"===e.parentElement.nodeName.toLowerCase()||0===e.rowIndex),o=0===t.cellIndex;n&&(r|=Xe.ROW),o&&(r|=Xe.COLUMN),r===Xe.NO_STATUS&&(r=Xe.ROW)}}const l=Ve(r,t.colSpan,o);l.__rowSpan=t.rowSpan;const s=t.style.backgroundColor;""!==s&&(l.__backgroundColor=s);const i=t.style.verticalAlign;qe(i)&&(l.__verticalAlign=i);const c=t.style,a=(c&&c.textDecoration||"").split(" "),u="700"===c.fontWeight||"bold"===c.fontWeight,h=a.includes("line-through"),C="italic"===c.fontStyle,_=a.includes("underline"),S=c.color;return{after:e=>{const t=[];let n=null;const o=()=>{if(n){const e=n.getFirstChild();m(e)&&1===n.getChildrenSize()&&e.remove()}};for(const r of e)if(f(r)||g(r)||m(r)){if(g(r)&&(u&&r.toggleFormat("bold"),h&&r.toggleFormat("strikethrough"),C&&r.toggleFormat("italic"),_&&r.toggleFormat("underline"),S)){const e=r.getStyle();e.includes("color:")||r.setStyle(e+`color: ${S};`)}n?n.append(r):(n=p().append(r),t.push(n))}else t.push(r),o(),n=null;return o(),0===t.length&&t.push(p()),t},node:l}}function Ve(e=Xe.NO_STATUS,t=1,n){return C(new Ye(e,t,n))}function Ge(e){return e instanceof Ye}const Qe=_("INSERT_TABLE_COMMAND");function Ze(e,...t){const n=new URL("https://lexical.dev/docs/error"),o=new URLSearchParams;o.append("code",e);for(const e of t)o.append("v",e);throw n.search=o.toString(),Error(`Minified Lexical error #${e}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}class et extends h{__height;static getType(){return"tablerow"}static clone(e){return new et(e.__height,e.__key)}afterCloneFrom(e){super.afterCloneFrom(e),this.__height=e.__height}static importDOM(){return{tr:e=>({conversion:tt,priority:0})}}static importJSON(e){return nt().updateFromJSON(e)}updateFromJSON(e){return super.updateFromJSON(e).setHeight(e.height)}constructor(e,t){super(t),this.__height=e}exportJSON(){const e=this.getHeight();return{...super.exportJSON(),...void 0===e?void 0:{height:e}}}createDOM(t){const n=document.createElement("tr");return this.__height&&(n.style.height=`${this.__height}px`),e(n,t.theme.tableRow),n}extractWithChild(e,t,n){return"html"===n}isShadowRoot(){return!0}setHeight(e){const t=this.getWritable();return t.__height=e,t}getHeight(){return this.getLatest().__height}updateDOM(e){return e.__height!==this.__height}canBeEmpty(){return!1}canIndent(){return!1}}function tt(e){const n=e;let o;return Je.test(n.style.height)&&(o=parseFloat(n.style.height)),{after:e=>t(e,Ge),node:nt(o)}}function nt(e){return C(new et(e))}function ot(e){return e instanceof et}function rt(e,t,n=!0){const o=Hn();for(let r=0;r<e;r++){const e=nt();for(let o=0;o<t;o++){let t=Xe.NO_STATUS;"object"==typeof n?(0===r&&n.rows&&(t|=Xe.ROW),0===o&&n.columns&&(t|=Xe.COLUMN)):n&&(0===r&&(t|=Xe.ROW),0===o&&(t|=Xe.COLUMN));const l=Ve(t),s=p();s.append(S()),l.append(s),e.append(l)}o.append(e)}return o}function lt(e){const t=n(e,e=>Ge(e));return Ge(t)?t:null}function st(e){const t=n(e,e=>ot(e));if(ot(t))return t;throw new Error("Expected table cell to be inside of table row.")}function it(e){const t=n(e,e=>Bn(e));if(Bn(t))return t;throw new Error("Expected table cell to be inside of table.")}function ct(e){const t=st(e);return it(t).getChildren().findIndex(e=>e.is(t))}function at(e){return st(e).getChildren().findIndex(t=>t.is(e))}function ut(e,t){const n=it(e),{x:o,y:r}=n.getCordsFromCellNode(e,t);return{above:n.getCellNodeFromCords(o,r-1,t),below:n.getCellNodeFromCords(o,r+1,t),left:n.getCellNodeFromCords(o-1,r,t),right:n.getCellNodeFromCords(o+1,r,t)}}function ht(e,t){const n=e.getChildren();if(t>=n.length||t<0)throw new Error("Expected table cell to be inside of table row.");return n[t].remove(),e}function dt(e,t,n=!0,o,r){const l=e.getChildren();if(t>=l.length||t<0)throw new Error("Table row target index out of range");const s=l[t];if(!ot(s))throw new Error("Row before insertion index does not exist.");for(let e=0;e<o;e++){const e=s.getChildren(),t=e.length,o=nt();for(let n=0;n<t;n++){const t=e[n];Ge(t)||Ze(12);const{above:l,below:s}=ut(t,r);let i=Xe.NO_STATUS;const c=l&&l.getWidth()||s&&s.getWidth()||void 0;(l&&l.hasHeaderState(Xe.COLUMN)||s&&s.hasHeaderState(Xe.COLUMN))&&(i|=Xe.COLUMN);const a=Ve(i,1,c);a.append(p()),o.append(a)}n?s.insertAfter(o):s.insertBefore(o)}return e}const ft=(e,t)=>e===Xe.BOTH||e===t?t:Xe.NO_STATUS;function gt(e=!0){const t=b();w(t)||Pt(t)||Ze(188);const n=t.anchor.getNode(),o=t.focus.getNode(),[r]=Mt(n),[l,,s]=Mt(o),[,i,c]=Et(s,l,r),{startRow:a}=c,{startRow:u}=i;return e?pt(a+r.__rowSpan>u+l.__rowSpan?r:l,!0):pt(u<a?l:r,!1)}const mt=gt;function pt(e,t=!0){const[,,n]=Mt(e),[o,r]=Et(n,e,e),l=o[0].length,{startRow:s}=r;let i=null;if(t){const t=s+e.__rowSpan-1,r=o[t],c=nt();for(let e=0;e<l;e++){const{cell:n,startRow:o}=r[e];if(o+n.__rowSpan-1<=t){const t=r[e].cell.__headerState,n=ft(t,Xe.COLUMN);c.append(Ve(n).append(p()))}else n.setRowSpan(n.__rowSpan+1)}const a=n.getChildAtIndex(t);ot(a)||Ze(256),a.insertAfter(c),i=c}else{const e=s,t=o[e],r=nt();for(let n=0;n<l;n++){const{cell:o,startRow:l}=t[n];if(l===e){const e=t[n].cell.__headerState,o=ft(e,Xe.COLUMN);r.append(Ve(o).append(p()))}else o.setRowSpan(o.__rowSpan+1)}const c=n.getChildAtIndex(e);ot(c)||Ze(257),c.insertBefore(r),i=r}return i}function Ct(e,t,n=!0,o,r){const l=e.getChildren(),s=[];for(let e=0;e<l.length;e++){const n=l[e];if(ot(n))for(let e=0;e<o;e++){const e=n.getChildren();if(t>=e.length||t<0)throw new Error("Table column target index out of range");const o=e[t];Ge(o)||Ze(12);const{left:l,right:i}=ut(o,r);let c=Xe.NO_STATUS;(l&&l.hasHeaderState(Xe.ROW)||i&&i.hasHeaderState(Xe.ROW))&&(c|=Xe.ROW);const a=Ve(c);a.append(p()),s.push({newTableCell:a,targetCell:o})}}return s.forEach(({newTableCell:e,targetCell:t})=>{n?t.insertAfter(e):t.insertBefore(e)}),e}function _t(e=!0){const t=b();w(t)||Pt(t)||Ze(188);const n=t.anchor.getNode(),o=t.focus.getNode(),[r]=Mt(n),[l,,s]=Mt(o),[,i,c]=Et(s,l,r),{startColumn:a}=c,{startColumn:u}=i;return e?bt(a+r.__colSpan>u+l.__colSpan?r:l,!0):bt(u<a?l:r,!1)}const St=_t;function bt(e,t=!0,n=!0){const[,,o]=Mt(e),[r,l]=Et(o,e,e),s=r.length,{startColumn:i}=l,c=t?i+e.__colSpan-1:i-1,a=o.getFirstChild();ot(a)||Ze(120);let u=null;function h(e=Xe.NO_STATUS){const t=Ve(e).append(p());return null===u&&(u=t),t}let d=a;e:for(let e=0;e<s;e++){if(0!==e){const e=d.getNextSibling();ot(e)||Ze(121),d=e}const t=r[e],n=t[c<0?0:c].cell.__headerState,o=ft(n,Xe.ROW);if(c<0){Ft(d,h(o));continue}const{cell:l,startColumn:s,startRow:i}=t[c];if(s+l.__colSpan-1<=c){let n=l,r=i,s=c;for(;r!==e&&n.__rowSpan>1;){if(s-=l.__colSpan,!(s>=0)){d.append(h(o));continue e}{const{cell:e,startRow:o}=t[s];n=e,r=o}}n.insertAfter(h(o))}else l.setColSpan(l.__colSpan+1)}null!==u&&n&&Tt(u);const f=o.getColWidths();if(f){const e=[...f],t=c<0?0:c,n=e[t];e.splice(t,0,n),o.setColWidths(e)}return u}function wt(e,t){const n=e.getChildren();for(let e=0;e<n.length;e++){const o=n[e];if(ot(o)){const e=o.getChildren();if(t>=e.length||t<0)throw new Error("Table column target index out of range");e[t].remove()}}return e}function yt(){const e=b();w(e)||Pt(e)||Ze(188);const[t,n]=e.isBackward()?[e.focus.getNode(),e.anchor.getNode()]:[e.anchor.getNode(),e.focus.getNode()],[o,,r]=Mt(t),[l]=Mt(n),[s,i,c]=Et(r,o,l),{startRow:a}=i,{startRow:u}=c,h=u+l.__rowSpan-1;if(s.length===h-a+1)return void r.remove();const d=s[0].length,f=s[h+1],g=r.getChildAtIndex(h+1);for(let e=h;e>=a;e--){for(let t=d-1;t>=0;t--){const{cell:n,startRow:o,startColumn:r}=s[e][t];if(r===t){if(o<a||o+n.__rowSpan-1>h){const e=Math.max(o,a),t=Math.min(n.__rowSpan+o-1,h),r=e<=t?t-e+1:0;n.setRowSpan(n.__rowSpan-r)}if(o>=a&&o+n.__rowSpan-1>h&&e===h){null===g&&Ze(122);let o=null;for(let n=0;n<t;n++){const t=f[n],r=t.cell;t.startRow===e+1&&(o=r),r.__colSpan>1&&(n+=r.__colSpan-1)}null===o?Ft(g,n):o.insertAfter(n)}}}const t=r.getChildAtIndex(e);ot(t)||Ze(206,String(e)),t.remove()}if(void 0!==f){const{cell:e}=f[0];Tt(e)}else{const e=s[a-1],{cell:t}=e[0];Tt(t)}}const Nt=yt;function vt(){const e=b();w(e)||Pt(e)||Ze(188);const t=e.anchor.getNode(),n=e.focus.getNode(),[o,,r]=Mt(t),[l]=Mt(n),[s,i,c]=Et(r,o,l),{startColumn:a}=i,{startRow:u,startColumn:h}=c,d=Math.min(a,h),f=Math.max(a+o.__colSpan-1,h+l.__colSpan-1),g=f-d+1;if(s[0].length===f-d+1)return r.selectPrevious(),void r.remove();const m=s.length;for(let e=0;e<m;e++)for(let t=d;t<=f;t++){const{cell:n,startColumn:o}=s[e][t];if(o<d){if(t===d){const e=d-o;n.setColSpan(n.__colSpan-Math.min(g,n.__colSpan-e))}}else if(o+n.__colSpan-1>f){if(t===f){const e=f-o+1;n.setColSpan(n.__colSpan-e)}}else n.remove()}const p=s[u],C=a>h?p[a+o.__colSpan]:p[h+l.__colSpan];if(void 0!==C){const{cell:e}=C;Tt(e)}else{const e=h<a?p[h-1]:p[a-1],{cell:t}=e;Tt(t)}const _=r.getColWidths();if(_){const e=[..._];e.splice(d,g),r.setColWidths(e)}}const xt=vt;function Tt(e){const t=e.getFirstDescendant();null==t?e.selectStart():t.getParentOrThrow().selectStart()}function Ft(e,t){const n=e.getFirstChild();null!==n?n.insertBefore(t):e.append(t)}function Rt(e){if(0===e.length)return null;const t=it(e[0]),[n]=kt(t,null,null);let o=1/0,r=-1/0,l=1/0,s=-1/0;const i=new Set;for(const t of n)for(const n of t){if(!n||!n.cell)continue;const t=n.cell.getKey();if(!i.has(t)&&e.some(e=>e.is(n.cell))){i.add(t);const e=n.startRow,c=n.startColumn,a=n.cell.__rowSpan||1,u=n.cell.__colSpan||1;o=Math.min(o,e),r=Math.max(r,e+a-1),l=Math.min(l,c),s=Math.max(s,c+u-1)}}if(o===1/0||l===1/0)return null;const c=r-o+1,a=s-l+1,u=n[o][l];if(!u.cell)return null;const h=u.cell;h.setColSpan(a),h.setRowSpan(c);const d=new Set([h.getKey()]);for(let e=o;e<=r;e++)for(let t=l;t<=s;t++){const o=n[e][t];if(!o.cell)continue;const r=o.cell,l=r.getKey();if(!d.has(l)){d.add(l);Ot(r)||h.append(...r.getChildren()),r.remove()}}return 0===h.getChildrenSize()&&h.append(p()),h}function Ot(e){if(1!==e.getChildrenSize())return!1;const t=e.getFirstChildOrThrow();return!(!y(t)||!t.isEmpty())}function At(){const e=b();w(e)||Pt(e)||Ze(188);const t=e.anchor.getNode(),o=n(t,Ge);return Ge(o)||Ze(148),Kt(o)}function Kt(e){const[t,n,o]=Mt(e),r=t.__colSpan,l=t.__rowSpan;if(1===r&&1===l)return;const[s,i]=Et(o,t,t),{startColumn:c,startRow:a}=i,u=t.__headerState&Xe.COLUMN,h=Array.from({length:r},(e,t)=>{let n=u;for(let e=0;0!==n&&e<s.length;e++)n&=s[e][t+c].cell.__headerState;return n}),d=t.__headerState&Xe.ROW,f=Array.from({length:l},(e,t)=>{let n=d;for(let e=0;0!==n&&e<s[0].length;e++)n&=s[t+a][e].cell.__headerState;return n});if(r>1){for(let e=1;e<r;e++)t.insertAfter(Ve(h[e]|f[0]).append(p()));t.setColSpan(1)}if(l>1){let e;for(let t=1;t<l;t++){const o=a+t,l=s[o];e=(e||n).getNextSibling(),ot(e)||Ze(125);let i=null;for(let e=0;e<c;e++){const t=l[e],n=t.cell;t.startRow===o&&(i=n),n.__colSpan>1&&(e+=n.__colSpan-1)}if(null===i)for(let n=r-1;n>=0;n--)Ft(e,Ve(h[n]|f[t]).append(p()));else for(let e=r-1;e>=0;e--)i.insertAfter(Ve(h[e]|f[t]).append(p()))}t.setRowSpan(1)}}function Et(e,t,n){const[o,r,l]=kt(e,t,n);return null===r&&Ze(207),null===l&&Ze(208),[o,r,l]}function kt(e,t,n){const o=[];let r=null,l=null;function s(e){let t=o[e];return void 0===t&&(o[e]=t=[]),t}const i=e.getChildren();for(let e=0;e<i.length;e++){const o=i[e];ot(o)||Ze(209);const c=s(e);for(let a=o.getFirstChild(),u=0;null!=a;a=a.getNextSibling()){for(Ge(a)||Ze(147);void 0!==c[u];)u++;const o={cell:a,startColumn:u,startRow:e},{__rowSpan:h,__colSpan:d}=a;for(let t=0;t<h&&!(e+t>=i.length);t++){const n=s(e+t);for(let e=0;e<d;e++)n[u+e]=o}null!==t&&null===r&&t.is(a)&&(r=o),null!==n&&null===l&&n.is(a)&&(l=o)}}return[o,r,l]}function Mt(e){let t;if(e instanceof Ye)t=e;else if("__type"in e){const o=n(e,Ge);Ge(o)||Ze(148),t=o}else{const o=n(e.getNode(),Ge);Ge(o)||Ze(148),t=o}const o=t.getParent();ot(o)||Ze(149);const r=o.getParent();return Bn(r)||Ze(210),[t,o,r]}function $t(e,t,n){let o,r=Math.min(t.startColumn,n.startColumn),l=Math.min(t.startRow,n.startRow),s=Math.max(t.startColumn+t.cell.__colSpan-1,n.startColumn+n.cell.__colSpan-1),i=Math.max(t.startRow+t.cell.__rowSpan-1,n.startRow+n.cell.__rowSpan-1);do{o=!1;for(let t=0;t<e.length;t++)for(let n=0;n<e[0].length;n++){const c=e[t][n];if(!c)continue;const a=c.startColumn+c.cell.__colSpan-1,u=c.startRow+c.cell.__rowSpan-1,h=c.startColumn<=s&&a>=r,d=c.startRow<=i&&u>=l;if(h&&d){const e=Math.min(r,c.startColumn),t=Math.max(s,a),n=Math.min(l,c.startRow),h=Math.max(i,u);e===r&&t===s&&n===l&&h===i||(r=e,s=t,l=n,i=h,o=!0)}}}while(o);return{maxColumn:s,maxRow:i,minColumn:r,minRow:l}}function Wt(e){const t=e.getChildren();let n=null;for(const e of t){if(!ot(e))return!1;if(null===n&&(n=e.getChildrenSize()),e.getChildrenSize()!==n)return!1;const t=e.getChildren();for(const e of t)if(!Ge(e)||1!==e.getRowSpan()||1!==e.getColSpan())return!1}return(n||0)>0}function zt(e,t,n){if(t===n)return;const o=e.getColumnCount();if(t<0||t>=o||n<0||n>=o)return;if(!Wt(e))return;e.getChildren().filter(ot).forEach(e=>{const o=e.getChildren(),[r]=o.splice(t,1);o.splice(n,0,r),e.splice(0,o.length,o)});const r=e.getColWidths();if(r&&r.length===o){const o=[...r],[l]=o.splice(t,1);o.splice(n,0,l),e.setColWidths(o)}}function Lt(e){const[t,,n]=Mt(e),o=n.getChildren(),r=o.length,l=o[0].getChildren().length,s=new Array(r);for(let e=0;e<r;e++)s[e]=new Array(l);for(let e=0;e<r;e++){const n=o[e].getChildren();let r=0;for(let o=0;o<n.length;o++){for(;s[e][r];)r++;const l=n[o],i=l.__rowSpan||1,c=l.__colSpan||1;for(let t=0;t<i;t++)for(let n=0;n<c;n++)s[e+t][r+n]=l;if(t===l)return{colSpan:c,columnIndex:r,rowIndex:e,rowSpan:i};r+=c}}return null}function Ht(e){const[[t,o,r,l],[s,i,c,a]]=["anchor","focus"].map(t=>{const o=e[t].getNode(),r=n(o,Ge);Ge(r)||Ze(238,t,o.getKey(),o.getType());const l=r.getParent();ot(l)||Ze(239,t);const s=l.getParent();return Bn(s)||Ze(240,t),[o,r,l,s]});return l.is(a)||Ze(241),{anchorCell:o,anchorNode:t,anchorRow:r,anchorTable:l,focusCell:i,focusNode:s,focusRow:c,focusTable:a}}class Bt{tableKey;anchor;focus;_cachedNodes;dirty;constructor(e,t,n){this.anchor=t,this.focus=n,t._selection=this,n._selection=this,this._cachedNodes=null,this.dirty=!1,this.tableKey=e}getStartEndPoints(){return[this.anchor,this.focus]}isValid(){if("root"===this.tableKey||"root"===this.anchor.key||"element"!==this.anchor.type||"root"===this.focus.key||"element"!==this.focus.type)return!1;const e=v(this.tableKey),t=v(this.anchor.key),n=v(this.focus.key);return null!==e&&null!==t&&null!==n}isBackward(){return this.focus.isBefore(this.anchor)}getCachedNodes(){return this._cachedNodes}setCachedNodes(e){this._cachedNodes=e}is(e){return Pt(e)&&this.tableKey===e.tableKey&&this.anchor.is(e.anchor)&&this.focus.is(e.focus)}set(e,t,n){this.dirty=this.dirty||e!==this.tableKey||t!==this.anchor.key||n!==this.focus.key,this.tableKey=e,this.anchor.key=t,this.focus.key=n,this._cachedNodes=null}clone(){return new Bt(this.tableKey,N(this.anchor.key,this.anchor.offset,this.anchor.type),N(this.focus.key,this.focus.offset,this.focus.type))}isCollapsed(){return!1}extract(){return this.getNodes()}insertRawText(e){}insertText(){}hasFormat(e){let t=0;this.getNodes().filter(Ge).forEach(e=>{const n=e.getFirstChild();y(n)&&(t|=n.getTextFormat())});const n=R[e];return 0!==(t&n)}insertNodes(e){const t=this.focus.getNode();x(t)||Ze(151);T(t.select(0,t.getChildrenSize())).insertNodes(e)}getShape(){const{anchorCell:e,focusCell:t}=Ht(this),n=Lt(e);null===n&&Ze(153);const o=Lt(t);null===o&&Ze(155);const r=Math.min(n.columnIndex,o.columnIndex),l=Math.max(n.columnIndex+n.colSpan-1,o.columnIndex+o.colSpan-1),s=Math.min(n.rowIndex,o.rowIndex),i=Math.max(n.rowIndex+n.rowSpan-1,o.rowIndex+o.rowSpan-1);return{fromX:Math.min(r,l),fromY:Math.min(s,i),toX:Math.max(r,l),toY:Math.max(s,i)}}getNodes(){if(!this.isValid())return[];const e=this._cachedNodes;if(null!==e)return e;const{anchorTable:t,anchorCell:n,focusCell:o}=Ht(this),r=o.getParents()[1];if(r!==t){if(t.isParentOf(o)){const e=r.getParent();null==e&&Ze(159),this.set(this.tableKey,o.getKey(),e.getKey())}else{const e=t.getParent();null==e&&Ze(158),this.set(this.tableKey,e.getKey(),o.getKey())}return this.getNodes()}const[l,s,i]=Et(t,n,o),{minColumn:c,maxColumn:a,minRow:u,maxRow:h}=$t(l,s,i),d=new Map([[t.getKey(),t]]);let f=null;for(let e=u;e<=h;e++)for(let t=c;t<=a;t++){const{cell:n}=l[e][t],o=n.getParent();ot(o)||Ze(160),o!==f&&(d.set(o.getKey(),o),f=o),d.has(n.getKey())||Ut(n,e=>{d.set(e.getKey(),e)})}const g=Array.from(d.values());return F()||(this._cachedNodes=g),g}getTextContent(){const e=this.getNodes().filter(e=>Ge(e));let t="";for(let n=0;n<e.length;n++){const o=e[n],r=o.__parent,l=(e[n+1]||{}).__parent;t+=o.getTextContent()+(l!==r?"\n":"\t")}return t}}function Pt(e){return e instanceof Bt}function Dt(){const e=N("root",0,"element"),t=N("root",0,"element");return new Bt("root",e,t)}function It(e,t,n){e.getKey(),t.getKey(),n.getKey();const o=b(),r=Pt(o)?o.clone():Dt();return r.set(e.getKey(),t.getKey(),n.getKey()),r}function Ut(e,t){const n=[[e]];for(let e=n.at(-1);void 0!==e&&n.length>0;e=n.at(-1)){const o=e.pop();void 0===o?n.pop():!1!==t(o)&&x(o)&&n.push(o.getChildren())}}function Jt(e,t=O()){const n=v(e);Bn(n)||Ze(231,e);const o=Vt(n,t.getElementByKey(e));return null===o&&Ze(232,e),{tableElement:o,tableNode:n}}class Xt{observers;nextFocus;shouldCheckSelectionForTable;constructor(){this.observers=new Map,this.nextFocus=null,this.shouldCheckSelectionForTable=null}setNextFocus(e){this.nextFocus=e}getAndClearNextFocus(){const{nextFocus:e}=this;return null!==e&&(this.nextFocus=null),e}setShouldCheckSelectionForTable(e){this.shouldCheckSelectionForTable=e}getAndClearShouldCheckSelectionForTable(){const{shouldCheckSelectionForTable:e}=this;return e?(this.shouldCheckSelectionForTable=null,e):null}}class Yt{focusX;focusY;listenersToRemove;table;isHighlightingCells;anchorX;anchorY;tableNodeKey;anchorCell;focusCell;anchorCellNodeKey;focusCellNodeKey;editor;tableSelection;hasHijackedSelectionStyles;isSelecting;pointerType;abortController;listenerOptions;constructor(e,t){this.isHighlightingCells=!1,this.anchorX=-1,this.anchorY=-1,this.focusX=-1,this.focusY=-1,this.listenersToRemove=new Set,this.tableNodeKey=t,this.editor=e,this.table={columns:0,domRows:[],rows:0},this.tableSelection=null,this.anchorCellNodeKey=null,this.focusCellNodeKey=null,this.anchorCell=null,this.focusCell=null,this.hasHijackedSelectionStyles=!1,this.isSelecting=!1,this.pointerType=null,this.abortController=new AbortController,this.listenerOptions={signal:this.abortController.signal},this.trackTable()}getTable(){return this.table}removeListeners(){this.abortController.abort("removeListeners"),Array.from(this.listenersToRemove).forEach(e=>e()),this.listenersToRemove.clear()}$lookup(){return Jt(this.tableNodeKey,this.editor)}trackTable(){const e=new MutationObserver(e=>{this.editor.getEditorState().read(()=>{let t=!1;for(let n=0;n<e.length;n++){const o=e[n].target.nodeName;if("TABLE"===o||"TBODY"===o||"THEAD"===o||"TR"===o){t=!0;break}}if(!t)return;const{tableNode:n,tableElement:o}=this.$lookup();this.table=un(n,o)},{editor:this.editor})});this.editor.getEditorState().read(()=>{const{tableNode:t,tableElement:n}=this.$lookup();this.table=un(t,n),e.observe(n,{attributes:!0,childList:!0,subtree:!0})},{editor:this.editor})}$clearHighlight(e=!0){const t=this.editor;this.isHighlightingCells=!1,this.anchorX=-1,this.anchorY=-1,this.focusX=-1,this.focusY=-1,this.tableSelection=null,this.anchorCellNodeKey=null,this.focusCellNodeKey=null,this.anchorCell=null,this.focusCell=null,this.hasHijackedSelectionStyles=!1,this.$enableHighlightStyle();const{tableNode:n,tableElement:o}=this.$lookup();hn(t,un(n,o),null),e&&null!==b()&&(A(null),t.dispatchCommand(K,void 0))}$enableHighlightStyle(){const e=this.editor,{tableElement:t}=this.$lookup();o(t,e._config.theme.tableSelection),t.classList.remove("disable-selection"),this.hasHijackedSelectionStyles=!1}$disableHighlightStyle(){const{tableElement:t}=this.$lookup();e(t,this.editor._config.theme.tableSelection),this.hasHijackedSelectionStyles=!0}$updateTableTableSelection(e){if(null!==e){e.tableKey!==this.tableNodeKey&&Ze(233,e.tableKey,this.tableNodeKey);const t=this.editor;this.tableSelection=e,this.isHighlightingCells=!0,this.$disableHighlightStyle(),this.updateDOMSelection(),hn(t,this.table,this.tableSelection)}else this.$clearHighlight()}updateDOMSelection(){if(null!==this.anchorCell&&null!==this.focusCell){const e=E(this.editor._window);e&&e.rangeCount>0&&e.removeAllRanges()}}$setFocusCellForSelection(e,t=!1){const n=this.editor,{tableNode:o}=this.$lookup(),r=e.x,l=e.y;if(this.focusCell=e,!this.isHighlightingCells){(t||this.anchorX!==r||this.anchorY!==l||null!=this.tableSelection&&null!=this.anchorCellNodeKey)&&(this.isHighlightingCells=!0,this.$disableHighlightStyle())}if(-1!==this.focusX&&-1!==this.focusY&&r===this.focusX&&l===this.focusY)return!1;if(this.focusX=r,this.focusY=l,this.isHighlightingCells){const s=An(o,e.elem);if(null!=this.tableSelection&&null!=this.anchorCellNodeKey){let e=s;if(null===e&&t&&(e=o.getCellNodeFromCords(r,l,this.table)),null!==e){const t=this.$getAnchorTableCellOrThrow();return this.focusCellNodeKey=e.getKey(),this.tableSelection=It(o,t,e),A(this.tableSelection),n.dispatchCommand(K,void 0),hn(n,this.table,this.tableSelection),!0}}}return!1}$getAnchorTableCell(){return this.anchorCellNodeKey?v(this.anchorCellNodeKey):null}$getAnchorTableCellOrThrow(){const e=this.$getAnchorTableCell();return null===e&&Ze(234),e}$getFocusTableCell(){return this.focusCellNodeKey?v(this.focusCellNodeKey):null}$getFocusTableCellOrThrow(){const e=this.$getFocusTableCell();return null===e&&Ze(235),e}$setAnchorCellForSelection(e){this.isHighlightingCells=!1,this.anchorCell=e,this.anchorX=e.x,this.anchorY=e.y,this.focusX=-1,this.focusY=-1,this.focusCell=null,this.focusCellNodeKey=null;const{tableNode:t}=this.$lookup(),n=An(t,e.elem);if(null!==n){const e=n.getKey();null!=this.tableSelection?(this.tableSelection=this.tableSelection.clone(),this.tableSelection.set(t.getKey(),e,e)):this.tableSelection=It(t,n,n),this.anchorCellNodeKey=e}}$formatCells(e){const t=b();Pt(t)||Ze(236);const n=k(),o=n.anchor,r=n.focus,l=t.getNodes().filter(Ge);l.length>0||Ze(237);const s=l[0].getFirstChild(),i=y(s)?s.getFormatFlags(e,null):null;l.forEach(t=>{o.set(t.getKey(),0,"element"),r.set(t.getKey(),t.getChildrenSize(),"element"),n.formatText(e,i)}),A(t),this.editor.dispatchCommand(K,void 0)}$clearText(){const{editor:e}=this,t=v(this.tableNodeKey);if(!Bn(t))throw new Error("Expected TableNode.");const n=b();Pt(n)||Ze(253);const o=n.getNodes().filter(Ge),r=t.getFirstChild(),l=t.getLastChild();if(o.length>0&&null!==r&&null!==l&&ot(r)&&ot(l)&&o[0]===r.getFirstChild()&&o[o.length-1]===l.getLastChild()){t.selectPrevious();const n=t.getParent();return t.remove(),void(M(n)&&n.isEmpty()&&e.dispatchCommand($,void 0))}o.forEach(e=>{if(x(e)){const t=p(),n=S();t.append(n),e.append(t),e.getChildren().forEach(e=>{e!==t&&e.remove()})}}),hn(e,this.table,null),A(null),e.dispatchCommand(K,void 0)}}const qt="__lexicalTableSelection";function jt(e){return d(e)&&"TABLE"===e.nodeName}function Vt(e,t){if(!t)return t;const n=jt(t)?t:t.querySelector("table");return jt(n)||Ze(341,e.constructor.name,e.getType(),e.getKey(),t.nodeName),n}function Gt(e){return e._window}function Qt(e,t){for(let n=t,o=null;null!==n;n=n.getParent()){if(e.is(n))return o;Ge(n)&&(o=n)}return null}const Zt=[[W,"down"],[z,"up"],[L,"backward"],[H,"forward"]],en=[D,I,U],tn=[J,X];function nn(e,t){return e.registerRootListener(n=>{if(null===n)return;const o=e._window;if(null===o)return;const r=o=>{const r=o.target;if(0!==o.button||!ee(r)||!n.contains(r))return;const l=function(e){const t=cn(e);if(null===t)return null;let n=t.elem;for(;null!=n;){if("TABLE"===n.nodeName&&qt in n&&n[qt])return{cellElement:t,tableElement:n,tableObserver:n[qt]};n=n.parentNode}return null}(r);e.update(()=>{if(Pt(b())){for(const[e]of t.observers.values())e.$clearHighlight(!1);A(null),e.dispatchCommand(K,void 0)}if(!l)return;const{tableObserver:n,tableElement:r,cellElement:s}=l;!function(e,t,n,o,r,l){const s=e._window;if(!s)return;const i=t=>{if(r.isSelecting)return;r.isSelecting=!0,null!==t&&null===r.anchorCell&&e.update(()=>{r.$setAnchorCellForSelection(t)});const n=()=>{r.isSelecting=!1,s.removeEventListener("pointerup",n),s.removeEventListener("pointermove",i)},i=t=>{if(!(e=>!(1&~e.buttons))(t)&&r.isSelecting)return r.isSelecting=!1,s.removeEventListener("pointerup",n),void s.removeEventListener("pointermove",i);if(!ee(t.target))return;let c=null;const a=!(me||o.contains(t.target));if(a)c=an(o,t.target);else for(const e of document.elementsFromPoint(t.clientX,t.clientY))if(c=an(o,e),c)break;if(c){const t=c;null===r.anchorCell&&e.update(()=>{r.$setAnchorCellForSelection(t)}),null!==r.focusCell&&c.elem===r.focusCell.elem||(l.setNextFocus({focusCell:c,override:a,tableKey:r.tableNodeKey}),e.dispatchCommand(K,void 0))}};s.addEventListener("pointerup",n,r.listenerOptions),s.addEventListener("pointermove",i,r.listenerOptions)};r.pointerType=t.pointerType;const c=oe(r.tableNodeKey),a=ne();if(me&&t.shiftKey&&_n(a,c)&&(w(a)||Pt(a))){const e=a.anchor.getNode(),o=Qt(c,a.anchor.getNode());if(o)r.$setAnchorCellForSelection(On(r,o)),r.$setFocusCellForSelection(n),Tn(t);else{(c.isBefore(e)?c.selectStart():c.selectEnd()).anchor.set(a.anchor.key,a.anchor.offset,a.anchor.type)}}else"touch"!==t.pointerType&&r.$setAnchorCellForSelection(n);i(n)}(e,o,s,r,n,t)})};return o.addEventListener("pointerdown",r),()=>{o.removeEventListener("pointerdown",r)}})}function on(e,t,o,l,s){const i=o.getRootElement(),c=Gt(o);null!==i&&null!==c||Ze(246);const a=new Yt(o,e.getKey()),u=Vt(e,t);!function(e,t){null!==sn(e)&&Ze(205);e[qt]=t}(u,a),a.listenersToRemove.add(()=>function(e,t){sn(e)===t&&delete e[qt]}(u,a));const h=e=>{if(e.detail>=3&&ee(e.target)){null!==cn(e.target)&&e.preventDefault()}};u.addEventListener("mousedown",h,a.listenerOptions),a.listenersToRemove.add(()=>{u.removeEventListener("mousedown",h)});for(const[t,n]of Zt)a.listenersToRemove.add(o.registerCommand(t,t=>xn(o,t,n,e,a,s),B));a.listenersToRemove.add(o.registerCommand(P,t=>{const n=b();if(Pt(n)){const o=Qt(e,n.focus.getNode());if(null!==o)return Tn(t),o.selectEnd(),!0}return!1},B));const d=t=>()=>{const o=b();if(!_n(o,e))return!1;if(Pt(o))return a.$clearText(),!0;if(w(o)){if(!Ge(Qt(e,o.anchor.getNode())))return!1;const r=o.anchor.getNode(),l=o.focus.getNode(),s=e.isParentOf(r),i=e.isParentOf(l);if(s&&!i||i&&!s)return a.$clearText(),!0;const c=n(o.anchor.getNode(),e=>x(e)),u=c&&n(c,e=>x(e)&&Ge(e.getParent()));if(!x(u)||!x(c))return!1;if(t===I&&null===u.getPreviousSibling())return!0}return!1};for(const e of en)a.listenersToRemove.add(o.registerCommand(e,d(e),B));const f=t=>{const n=b();if(!Pt(n)&&!w(n))return!1;const o=e.isParentOf(n.anchor.getNode());if(o!==e.isParentOf(n.focus.getNode())){const t=o?"anchor":"focus",r=o?"focus":"anchor",{key:l,offset:s,type:i}=n[r];return e[n[t].isBefore(n[r])?"selectPrevious":"selectNext"]()[r].set(l,s,i),!1}return!!_n(n,e)&&(!!Pt(n)&&(t&&(t.preventDefault(),t.stopPropagation()),a.$clearText(),!0))};for(const e of tn)a.listenersToRemove.add(o.registerCommand(e,f,B));return a.listenersToRemove.add(o.registerCommand(Y,e=>{const t=b();if(t){if(!Pt(t)&&!w(t))return!1;We(o,r(e,ClipboardEvent)?e:null,ze(t));const n=f(e);return w(t)?(t.removeText(),!0):n}return!1},B)),a.listenersToRemove.add(o.registerCommand(q,t=>{const o=b();if(!_n(o,e))return!1;if(Pt(o))return a.$formatCells(t),!0;if(w(o)){const e=n(o.anchor.getNode(),e=>Ge(e));if(!Ge(e))return!1}return!1},B)),a.listenersToRemove.add(o.registerCommand(j,t=>{const n=b();if(!Pt(n)||!_n(n,e))return!1;const o=n.anchor.getNode(),r=n.focus.getNode();if(!Ge(o)||!Ge(r))return!1;if(function(e,t){if(Pt(e)){const n=e.anchor.getNode(),o=e.focus.getNode();if(t&&n&&o){const[e]=Et(t,n,o);return n.getKey()===e[0][0].cell.getKey()&&o.getKey()===e[e.length-1].at(-1).cell.getKey()}}return!1}(n,e))return e.setFormat(t),!0;const[l,s,i]=Et(e,o,r),c=Math.max(s.startRow+s.cell.__rowSpan-1,i.startRow+i.cell.__rowSpan-1),a=Math.max(s.startColumn+s.cell.__colSpan-1,i.startColumn+i.cell.__colSpan-1),u=Math.min(s.startRow,i.startRow),h=Math.min(s.startColumn,i.startColumn),d=new Set;for(let e=u;e<=c;e++)for(let n=h;n<=a;n++){const o=l[e][n].cell;if(d.has(o))continue;d.add(o),o.setFormat(t);const r=o.getChildren();for(let e=0;e<r.length;e++){const n=r[e];x(n)&&!n.isInline()&&n.setFormat(t)}}return!0},B)),a.listenersToRemove.add(o.registerCommand(V,t=>{const r=b();if(!_n(r,e))return!1;if(Pt(r))return a.$clearHighlight(),!1;if(w(r)){const l=n(r.anchor.getNode(),e=>Ge(e));if(!Ge(l))return!1;if("string"==typeof t){const n=Rn(o,r,e);if(n)return Fn(n,e,[S(t)]),!0}}return!1},B)),l&&a.listenersToRemove.add(o.registerCommand(G,t=>{const o=b();if(!w(o)||!o.isCollapsed()||!_n(o,e))return!1;const r=yn(o.anchor.getNode());return!(null===r||!e.is(Nn(r)))&&(Tn(t),function(e,t){const o="next"===t?"getNextSibling":"getPreviousSibling",r="next"===t?"getFirstChild":"getLastChild",l=e[o]();if(x(l))return l.selectEnd();const s=n(e,ot);null===s&&Ze(247);for(let e=s[o]();ot(e);e=e[o]()){const t=e[r]();if(x(t))return t.selectEnd()}const i=n(s,Bn);null===i&&Ze(248);"next"===t?i.selectNext():i.selectPrevious()}(r,t.shiftKey?"previous":"next"),!0)},B)),a.listenersToRemove.add(o.registerCommand(Q,t=>e.isSelected(),B)),a.listenersToRemove.add(o.registerCommand($,()=>{const t=b();if(!w(t)||!t.isCollapsed()||!_n(t,e))return!1;const n=Rn(o,t,e);return!!n&&(Fn(n,e),!0)},B)),a}function rn(e,t){const o=b(),r=ne(),l=e.getAndClearNextFocus();if(null!==l){const{tableKey:t,focusCell:n}=l,r=e.observers.get(t);r||Ze(335,t);const[s]=r;if(Pt(o)&&o.tableKey===s.tableNodeKey)return(n.x!==s.focusX||n.y!==s.focusY)&&(s.$setFocusCellForSelection(n),!0);if(null!==s.anchorCell&&null!==s.anchorCellNodeKey&&n.elem!==s.anchorCell.elem&&null!==s.tableSelection)return s.$setFocusCellForSelection(n,!0),!0}const s=e.getAndClearShouldCheckSelectionForTable();if(s&&w(r)&&w(o)&&o.isCollapsed()){const e=oe(s),t=o.anchor.getNode(),r=e.getFirstChild(),l=yn(t);if(null!==l&&ot(r)){const t=r.getFirstChild();if(Ge(t)&&e.is(n(l,n=>n.is(e)||n.is(t))))return t.selectStart(),!0}}Pt(o)&&function(e,t){const n=Gt(e),o=ne();if(!t.is(o))return;const r=oe(t.tableKey),l=E(n);if(l&&l.anchorNode&&l.focusNode){const n=Z(l.focusNode),o=n&&!r.isParentOf(n),s=Z(l.anchorNode),i=s&&r.isParentOf(s);if(o&&i&&l.rangeCount>0){const n=he(l,e);n&&(n.anchor.set(r.getKey(),t.isBackward()?r.getChildrenSize():0,"element"),l.removeAllRanges(),A(n))}}}(t,o),w(o)&&function(e,t){const n=ne(),{anchor:o,focus:r}=e,l=o.getNode(),s=r.getNode(),i=yn(l),c=yn(s),a=i?Nn(i):null,u=c?Nn(c):null,h=e.isBackward(),d=i&&c&&a&&u&&a.is(u),f=u&&(!a||a.isParentOf(u)),g=a&&(!u||u.isParentOf(a));if(f){const t=e.clone(),[n]=Et(u,c,c),o=n[0][0].cell,r=n[n.length-1].at(-1).cell;t.focus.set(h?o.getKey():r.getKey(),h?0:r.getChildrenSize(),"element"),A(t)}else if(g){const t=e.clone(),[n]=Et(a,i,i),o=n[0][0].cell,r=n[n.length-1].at(-1).cell;t.anchor.set(h?r.getKey():o.getKey(),h?r.getChildrenSize():0,"element"),A(t)}else if(d){const o=t.observers.get(a.getKey());o||Ze(335,a.getKey());const[r]=o;if(i.is(c)||(r.$setAnchorCellForSelection(On(r,i)),r.$setFocusCellForSelection(On(r,c),!0)),"touch"===r.pointerType&&r.isSelecting&&e.isCollapsed()&&w(n)&&n.isCollapsed()){const e=yn(n.anchor.getNode());e&&!e.is(c)&&(r.$setAnchorCellForSelection(On(r,e)),r.$setFocusCellForSelection(On(r,c),!0),r.pointerType=null)}}}(o,e);const i=Array.from(e.observers.entries()).map(([e,[t]])=>({tableNode:oe(e),tableObserver:t}));for(const{tableNode:e,tableObserver:n}of i)ln(t,e,n);return!1}function ln(e,t,n){const o=b(),r=ne();o&&!o.is(r)&&(Pt(o)||Pt(r))&&n.tableSelection&&!n.tableSelection.is(r)&&(Pt(o)&&o.tableKey===n.tableNodeKey?n.$updateTableTableSelection(o):!Pt(o)&&Pt(r)&&r.tableKey===n.tableNodeKey&&n.$updateTableTableSelection(null)),n.hasHijackedSelectionStyles&&!t.isSelected()?function(e,t){t.$enableHighlightStyle(),dn(t.table,t=>{const n=t.elem;t.highlighted=!1,wn(e,t),n.getAttribute("style")||n.removeAttribute("style")})}(e,n):!n.hasHijackedSelectionStyles&&t.isSelected()&&function(e,t){t.$disableHighlightStyle(),dn(t.table,t=>{t.highlighted=!0,bn(e,t)})}(e,n)}function sn(e){return e[qt]||null}function cn(e){let t=e;for(;null!=t;){const e=t.nodeName;if("TD"===e||"TH"===e){const e=t._cell;return void 0===e?null:e}t=t.parentNode}return null}function an(e,t){if(!e.contains(t))return null;let n=null;for(let o=t;null!=o;o=o.parentNode){if(o===e)return n;const t=o.nodeName;"TD"!==t&&"TH"!==t||(n=o._cell||null)}return null}function un(e,t){const n=[],o={columns:0,domRows:n,rows:0};let r=Vt(e,t).querySelector("tr"),l=0,s=0;for(n.length=0;null!=r;){const e=r.nodeName;if("TD"===e||"TH"===e){const e={elem:r,hasBackgroundColor:""!==r.style.backgroundColor,highlighted:!1,x:l,y:s};r._cell=e;let t=n[s];void 0===t&&(t=n[s]=[]),t[l]=e}else{const e=r.firstChild;if(null!=e){r=e;continue}}const t=r.nextSibling;if(null!=t){l++,r=t;continue}const o=r.parentNode;if(null!=o){const e=o.nextSibling;if(null==e)break;s++,l=0,r=e}}return o.columns=l+1,o.rows=s+1,o}function hn(e,t,n){const o=new Set(n?n.getNodes():[]);dn(t,(t,n)=>{const r=t.elem;o.has(n)?(t.highlighted=!0,bn(e,t)):(t.highlighted=!1,wn(e,t),r.getAttribute("style")||r.removeAttribute("style"))})}function dn(e,t){const{domRows:n}=e;for(let e=0;e<n.length;e++){const o=n[e];if(o)for(let n=0;n<o.length;n++){const r=o[n];if(!r)continue;const l=Z(r.elem);null!==l&&t(r,l,{x:n,y:e})}}}const fn=(e,t,n,o,r)=>{const l="forward"===r;switch(r){case"backward":case"forward":return n!==(l?e.table.columns-1:0)?Sn(t.getCellNodeFromCordsOrThrow(n+(l?1:-1),o,e.table),l):o!==(l?e.table.rows-1:0)?Sn(t.getCellNodeFromCordsOrThrow(l?0:e.table.columns-1,o+(l?1:-1),e.table),l):l?t.selectNext():t.selectPrevious(),!0;case"up":return 0!==o?Sn(t.getCellNodeFromCordsOrThrow(n,o-1,e.table),!1):t.selectPrevious(),!0;case"down":return o!==e.table.rows-1?Sn(t.getCellNodeFromCordsOrThrow(n,o+1,e.table),!0):t.selectNext(),!0;default:return!1}};function gn(e,t){let n,o;if(t.startColumn===e.minColumn)n="minColumn";else{if(t.startColumn+t.cell.__colSpan-1!==e.maxColumn)return null;n="maxColumn"}if(t.startRow===e.minRow)o="minRow";else{if(t.startRow+t.cell.__rowSpan-1!==e.maxRow)return null;o="maxRow"}return[n,o]}function mn([e,t]){return["minColumn"===e?"maxColumn":"minColumn","minRow"===t?"maxRow":"minRow"]}function pn(e,t,[n,o]){const r=t[o],l=e[r];void 0===l&&Ze(250,o,String(r));const s=t[n],i=l[s];return void 0===i&&Ze(250,n,String(s)),i}function Cn(e,t,n,o,r){const l=$t(t,n,o),s=function(e,t){const{minColumn:n,maxColumn:o,minRow:r,maxRow:l}=t;let s=1,i=1,c=1,a=1;const u=e[r],h=e[l];for(let e=n;e<=o;e++)s=Math.max(s,u[e].cell.__rowSpan),a=Math.max(a,h[e].cell.__rowSpan);for(let t=r;t<=l;t++)i=Math.max(i,e[t][n].cell.__colSpan),c=Math.max(c,e[t][o].cell.__colSpan);return{bottomSpan:a,leftSpan:i,rightSpan:c,topSpan:s}}(t,l),{topSpan:i,leftSpan:c,bottomSpan:a,rightSpan:u}=s,h=function(e,t){const n=gn(e,t);return null===n&&Ze(249,t.cell.getKey()),n}(l,n),[d,f]=mn(h);let g=l[d],m=l[f];"forward"===r?g+="maxColumn"===d?1:c:"backward"===r?g-="minColumn"===d?1:u:"down"===r?m+="maxRow"===f?1:i:"up"===r&&(m-="minRow"===f?1:a);const p=t[m];if(void 0===p)return!1;const C=p[g];if(void 0===C)return!1;const[_,S]=function(e,t,n){const o=$t(e,t,n),r=gn(o,t);if(r)return[pn(e,o,r),pn(e,o,mn(r))];const l=gn(o,n);if(l)return[pn(e,o,mn(l)),pn(e,o,l)];const s=["minColumn","minRow"];return[pn(e,o,s),pn(e,o,mn(s))]}(t,n,C),b=On(e,_.cell),w=On(e,S.cell);return e.$setAnchorCellForSelection(b),e.$setFocusCellForSelection(w,!0),!0}function _n(e,t){if(w(e)||Pt(e)){const n=t.isParentOf(e.anchor.getNode()),o=t.isParentOf(e.focus.getNode());return n&&o}return!1}function Sn(e,t){t?e.selectStart():e.selectEnd()}function bn(t,n){const o=n.elem,r=t._config.theme;Ge(Z(o))||Ze(131),e(o,r.tableCellSelected)}function wn(e,t){const n=t.elem;Ge(Z(n))||Ze(131);const r=e._config.theme;o(n,r.tableCellSelected)}function yn(e){const t=n(e,Ge);return Ge(t)?t:null}function Nn(e){const t=n(e,Bn);return Bn(t)?t:null}function vn(e,t,o,r,l,s,i){const c=re(o.focus,l?"previous":"next");if(le(c))return!1;let a=c;for(const e of se(c).iterNodeCarets("shadowRoot")){if(!ie(e)||!x(e.origin))return!1;a=e}const u=a.getParentAtCaret();if(!Ge(u))return!1;const h=u,d=function(e){for(const t of se(e).iterNodeCarets("root")){const{origin:n}=t;if(Ge(n)){if(de(t))return fe(n,e.direction)}else if(!ot(n))break}return null}(ce(h,a.direction)),f=n(h,Bn);if(!f||!f.is(s))return!1;const g=e.getElementByKey(h.getKey()),m=cn(g);if(!g||!m)return!1;const p=zn(e,f);if(i.table=p,d)if("extend"===r){const t=cn(e.getElementByKey(d.origin.getKey()));if(!t)return!1;i.$setAnchorCellForSelection(m),i.$setFocusCellForSelection(t,!0)}else{const e=ue(d);ae(o.anchor,e),ae(o.focus,e)}else if("extend"===r)i.$setAnchorCellForSelection(m),i.$setFocusCellForSelection(m,!0);else{const e=function(e){const t=ge(e);return de(t)?ue(t):e}(ce(f,c.direction));ae(o.anchor,e),ae(o.focus,e)}return Tn(t),!0}function xn(e,t,o,r,l,s){if(("up"===o||"down"===o)&&function(e){const t=e.getRootElement();if(!t)return!1;return t.hasAttribute("aria-controls")&&"typeahead-menu"===t.getAttribute("aria-controls")}(e))return!1;const i=b();if(!_n(i,r)){if(w(i)){if("backward"===o){if(i.focus.offset>0)return!1;const e=function(e){for(let t=e,n=e;null!==n;t=n,n=n.getParent())if(x(n)){if(n!==t&&n.getFirstChild()!==t)return null;if(!n.isInline())return n}return null}(i.focus.getNode());if(!e)return!1;const n=e.getPreviousSibling();return!!Bn(n)&&(Tn(t),t.shiftKey?i.focus.set(n.getParentOrThrow().getKey(),n.getIndexWithinParent(),"element"):n.selectEnd(),!0)}if(t.shiftKey&&("up"===o||"down"===o)){const e=i.focus.getNode();if(!i.isCollapsed()&&("up"===o&&!i.isBackward()||"down"===o&&i.isBackward())){let l=n(e,e=>Bn(e));if(Ge(l)&&(l=n(l,Bn)),l!==r)return!1;if(!l)return!1;const s="down"===o?l.getNextSibling():l.getPreviousSibling();if(!s)return!1;let c=0;"up"===o&&x(s)&&(c=s.getChildrenSize());let a=s;if("up"===o&&x(s)){const e=s.getLastChild();a=e||s,c=g(a)?a.getTextContentSize():0}const u=i.clone();return u.focus.set(a.getKey(),c,g(a)?"text":"element"),A(u),Tn(t),!0}if(te(e)){const e="up"===o?i.getNodes()[i.getNodes().length-1]:i.getNodes()[0];if(e){if(null!==Qt(r,e)){const e=r.getFirstDescendant(),t=r.getLastDescendant();if(!e||!t)return!1;const[n]=Mt(e),[o]=Mt(t),s=r.getCordsFromCellNode(n,l.table),i=r.getCordsFromCellNode(o,l.table),c=r.getDOMCellFromCordsOrThrow(s.x,s.y,l.table),a=r.getDOMCellFromCordsOrThrow(i.x,i.y,l.table);return l.$setAnchorCellForSelection(c),l.$setFocusCellForSelection(a,!0),!0}}return!1}{let r=n(e,e=>x(e)&&!e.isInline());if(Ge(r)&&(r=n(r,Bn)),!r)return!1;const s="down"===o?r.getNextSibling():r.getPreviousSibling();if(Bn(s)&&l.tableNodeKey===s.getKey()){const e=s.getFirstDescendant(),n=s.getLastDescendant();if(!e||!n)return!1;const[r]=Mt(e),[l]=Mt(n),c=i.clone();return c.focus.set(("up"===o?r:l).getKey(),"up"===o?0:l.getChildrenSize(),"element"),Tn(t),A(c),!0}}}}return"down"===o&&Mn(e)&&s.setShouldCheckSelectionForTable(r.getKey()),!1}if(w(i)){if("backward"===o||"forward"===o){return vn(e,t,i,t.shiftKey?"extend":"move","backward"===o,r,l)}if(i.isCollapsed()){const{anchor:c,focus:a}=i,u=n(c.getNode(),Ge),h=n(a.getNode(),Ge);if(!Ge(u)||!u.is(h))return!1;const d=Nn(u);if(d!==r&&null!=d){const n=Vt(d,e.getElementByKey(d.getKey()));if(null!=n)return l.table=un(d,n),xn(e,t,o,d,l,s)}const f=e.getElementByKey(u.__key),g=e.getElementByKey(c.key);if(null==g||null==f)return!1;let m;if("element"===c.type)m=g.getBoundingClientRect();else{const t=E(Gt(e));if(null===t||0===t.rangeCount)return!1;m=t.getRangeAt(0).getBoundingClientRect()}const p="up"===o?u.getFirstChild():u.getLastChild();if(null==p)return!1;const C=e.getElementByKey(p.__key);if(null==C)return!1;const _=C.getBoundingClientRect();if("up"===o?_.top>m.top-m.height:m.bottom+m.height>_.bottom){Tn(t);const e=r.getCordsFromCellNode(u,l.table);if(!t.shiftKey)return fn(l,r,e.x,e.y,o);{const t=r.getDOMCellFromCordsOrThrow(e.x,e.y,l.table);l.$setAnchorCellForSelection(t),l.$setFocusCellForSelection(t,!0)}return!0}}}else if(Pt(i)){const{anchor:s,focus:c,tableKey:a}=i;if(a!==r.getKey())return!1;const u=n(s.getNode(),Ge),h=n(c.getNode(),Ge),[d]=i.getNodes();Bn(d)||Ze(251);const f=Vt(d,e.getElementByKey(d.getKey()));if(!Ge(u)||!Ge(h)||!Bn(d)||null==f)return!1;l.$updateTableTableSelection(i);const g=un(d,f),m=r.getCordsFromCellNode(u,g),p=r.getDOMCellFromCordsOrThrow(m.x,m.y,g);if(l.$setAnchorCellForSelection(p),Tn(t),t.shiftKey){const[e,t,n]=Et(r,u,h);return Cn(l,e,t,n,o)}return h.selectEnd(),!0}return!1}function Tn(e){e.preventDefault(),e.stopImmediatePropagation(),e.stopPropagation()}function Fn(e,t,n){const o=p();"first"===e?t.insertBefore(o):t.insertAfter(o),o.append(...n||[]),o.selectEnd()}function Rn(e,t,o){const r=o.getParent();if(!r)return;const l=E(Gt(e));if(!l)return;const s=l.anchorNode,i=e.getElementByKey(r.getKey()),c=Vt(o,e.getElementByKey(o.getKey()));if(!s||!i||!c||!i.contains(s)||c.contains(s))return;const a=n(t.anchor.getNode(),e=>Ge(e));if(!a)return;const u=n(a,e=>Bn(e));if(!Bn(u)||!u.is(o))return;const[h,d]=Et(o,a,a),f=h[0][0],g=h[h.length-1][h[0].length-1],{startRow:m,startColumn:p}=d,C=m===f.startRow&&p===f.startColumn,_=m===g.startRow&&p===g.startColumn;return C?"first":_?"last":void 0}function On(e,t){const{tableNode:n}=e.$lookup(),o=n.getCordsFromCellNode(t,e.table);return n.getDOMCellFromCordsOrThrow(o.x,o.y,e.table)}function An(e,t,n){return Qt(e,Z(t,n))}function Kn(e,t,n){const o=e.querySelector("colgroup");if(!o)return;const r=[];for(let e=0;e<t;e++){const t=document.createElement("col"),o=n&&n[e];o&&(t.style.width=`${o}px`),r.push(t)}o.replaceChildren(...r)}function En(t,n,r){if(!n.theme.tableAlignment)return;const l=[],s=[];for(const e of["center","right"]){const t=n.theme.tableAlignment[e];t&&(e===r?s:l).push(t)}o(t,...l),e(t,...s)}const kn=new WeakSet;function Mn(e=O()){return kn.has(e)}function $n(e,t){t?kn.add(e):kn.delete(e)}class Wn extends h{__rowStriping;__frozenColumnCount;__frozenRowCount;__colWidths;static getType(){return"table"}getColWidths(){return this.getLatest().__colWidths}setColWidths(e){const t=this.getWritable();return t.__colWidths=e,t}static clone(e){return new Wn(e.__key)}afterCloneFrom(e){super.afterCloneFrom(e),this.__colWidths=e.__colWidths,this.__rowStriping=e.__rowStriping,this.__frozenColumnCount=e.__frozenColumnCount,this.__frozenRowCount=e.__frozenRowCount}static importDOM(){return{table:e=>({conversion:Ln,priority:1})}}static importJSON(e){return Hn().updateFromJSON(e)}updateFromJSON(e){return super.updateFromJSON(e).setRowStriping(e.rowStriping||!1).setFrozenColumns(e.frozenColumnCount||0).setFrozenRows(e.frozenRowCount||0).setColWidths(e.colWidths)}constructor(e){super(e),this.__rowStriping=!1,this.__frozenColumnCount=0,this.__frozenRowCount=0,this.__colWidths=void 0}exportJSON(){return{...super.exportJSON(),colWidths:this.getColWidths(),frozenColumnCount:this.__frozenColumnCount?this.__frozenColumnCount:void 0,frozenRowCount:this.__frozenRowCount?this.__frozenRowCount:void 0,rowStriping:this.__rowStriping?this.__rowStriping:void 0}}extractWithChild(e,t,n){return"html"===n}getDOMSlot(e){const t=jt(e)?e:e.querySelector("table");return jt(t)||Ze(229),super.getDOMSlot(e).withElement(t).withAfter(t.querySelector("colgroup"))}createDOM(t,n){const o=document.createElement("table");this.__style&&pe(o.style,this.__style);const r=document.createElement("colgroup");if(o.appendChild(r),Ce(r),e(o,t.theme.table),this.updateTableElement(null,o,t),Mn(n)){const n=document.createElement("div"),r=t.theme.tableScrollableWrapper;return r?e(n,r):n.style.overflowX="auto",n.appendChild(o),this.updateTableWrapper(null,n,o,t),n}return o}updateTableWrapper(t,n,r,l){this.__frozenColumnCount!==(t?t.__frozenColumnCount:0)&&function(t,n,r,l){l>0?(e(t,r.theme.tableFrozenColumn),n.setAttribute("data-lexical-frozen-column","true")):(o(t,r.theme.tableFrozenColumn),n.removeAttribute("data-lexical-frozen-column"))}(n,r,l,this.__frozenColumnCount),this.__frozenRowCount!==(t?t.__frozenRowCount:0)&&function(t,n,r,l){l>0?(e(t,r.theme.tableFrozenRow),n.setAttribute("data-lexical-frozen-row","true")):(o(t,r.theme.tableFrozenRow),n.removeAttribute("data-lexical-frozen-row"))}(n,r,l,this.__frozenRowCount)}updateTableElement(t,n,r){this.__style!==(t?t.__style:"")&&pe(n.style,this.__style,t?t.__style:""),this.__rowStriping!==(!!t&&t.__rowStriping)&&function(t,n,r){r?(e(t,n.theme.tableRowStriping),t.setAttribute("data-lexical-row-striping","true")):(o(t,n.theme.tableRowStriping),t.removeAttribute("data-lexical-row-striping"))}(n,r,this.__rowStriping);const l=t?t.getColumnCount():0,s=t?t.__colWidths:void 0;this.getColumnCount()===l&&this.getColWidths()===s||Kn(n,this.getColumnCount(),this.getColWidths()),En(n,r,this.getFormatType())}updateDOM(e,t,n){const o=Vt(this,t);return t===o===Mn()||(l(r=t)&&"DIV"===r.nodeName&&this.updateTableWrapper(e,t,o,n),this.updateTableElement(e,o,n),!1);var r}scaleDOMColWidths(e,t){const n=this.getColWidths();if(!n)return;Kn(Vt(this,e),this.getColumnCount(),n.map(e=>e*t))}exportDOM(e){const t=super.exportDOM(e),{element:n}=t;return{after:n=>{if(t.after&&(n=t.after(n)),!jt(n)&&l(n)&&(n=n.querySelector("table")),!jt(n))return null;En(n,e._config,this.getFormatType());const[o]=kt(this,null,null),r=new Map;for(const e of o)for(const t of e){const e=t.cell.getKey();r.has(e)||r.set(e,{colSpan:t.cell.getColSpan(),startColumn:t.startColumn})}const s=new Set;for(const e of n.querySelectorAll(":scope > tr > [data-temporary-table-cell-lexical-key]")){const t=e.getAttribute("data-temporary-table-cell-lexical-key");if(t){const n=r.get(t);if(e.removeAttribute("data-temporary-table-cell-lexical-key"),n){r.delete(t);for(let e=0;e<n.colSpan;e++)s.add(e+n.startColumn)}}}const i=n.querySelector(":scope > colgroup");if(i){const e=Array.from(n.querySelectorAll(":scope > colgroup > col")).filter((e,t)=>s.has(t));i.replaceChildren(...e)}const c=n.querySelectorAll(":scope > tr");if(c.length>0){const e=document.createElement("tbody");for(const t of c)e.appendChild(t);n.append(e)}return n},element:!jt(n)&&l(n)?n.querySelector("table"):n}}canBeEmpty(){return!1}isShadowRoot(){return!0}getCordsFromCellNode(e,t){const{rows:n,domRows:o}=t;for(let t=0;t<n;t++){const n=o[t];if(null!=n)for(let o=0;o<n.length;o++){const r=n[o];if(null==r)continue;const{elem:l}=r,s=An(this,l);if(null!==s&&e.is(s))return{x:o,y:t}}}throw new Error("Cell not found in table.")}getDOMCellFromCords(e,t,n){const{domRows:o}=n,r=o[t];if(null==r)return null;const l=r[e<r.length?e:r.length-1];return null==l?null:l}getDOMCellFromCordsOrThrow(e,t,n){const o=this.getDOMCellFromCords(e,t,n);if(!o)throw new Error("Cell not found at cords.");return o}getCellNodeFromCords(e,t,n){const o=this.getDOMCellFromCords(e,t,n);if(null==o)return null;const r=Z(o.elem);return Ge(r)?r:null}getCellNodeFromCordsOrThrow(e,t,n){const o=this.getCellNodeFromCords(e,t,n);if(!o)throw new Error("Node at cords not TableCellNode.");return o}getRowStriping(){return Boolean(this.getLatest().__rowStriping)}setRowStriping(e){const t=this.getWritable();return t.__rowStriping=e,t}setFrozenColumns(e){const t=this.getWritable();return t.__frozenColumnCount=e,t}getFrozenColumns(){return this.getLatest().__frozenColumnCount}setFrozenRows(e){const t=this.getWritable();return t.__frozenRowCount=e,t}getFrozenRows(){return this.getLatest().__frozenRowCount}canSelectBefore(){return!0}canIndent(){return!1}getColumnCount(){const e=this.getFirstChild();if(!e)return 0;let t=0;return e.getChildren().forEach(e=>{Ge(e)&&(t+=e.getColSpan())}),t}}function zn(e,t){const n=e.getElementByKey(t.getKey());return null===n&&Ze(230),un(t,n)}function Ln(e){const n=Hn();e.hasAttribute("data-lexical-row-striping")&&n.setRowStriping(!0),e.hasAttribute("data-lexical-frozen-column")&&n.setFrozenColumns(1),e.hasAttribute("data-lexical-frozen-row")&&n.setFrozenRows(1);const o=e.querySelector(":scope > colgroup");if(o){let e=[];for(const t of o.querySelectorAll(":scope > col")){let n=t.style.width||"";if(!Je.test(n)&&(n=t.getAttribute("width")||"",!/^\d+$/.test(n))){e=void 0;break}e.push(parseFloat(n))}e&&n.setColWidths(e)}return{after:e=>t(e,ot),node:n}}function Hn(){return C(new Wn)}function Bn(e){return e instanceof Wn}function Pn(e){ot(e.getParent())?e.isEmpty()&&e.append(p()):e.remove()}function Dn(e){Bn(e.getParent())?u(e,Ge):e.remove()}function In(e){u(e,ot);const[t]=kt(e,null,null),n=t.reduce((e,t)=>Math.max(e,t.length),0),o=e.getChildren();for(let e=0;e<t.length;++e){const r=o[e];if(!r)continue;ot(r)||Ze(254,r.constructor.name,r.getType());const l=t[e].reduce((e,t)=>t?1+e:e,0);if(l!==n)for(let e=l;e<n;++e){const e=Ve();e.append(p()),r.append(e)}}const r=e.getColWidths(),l=e.getColumnCount();if(r&&r.length!==l){let t;if(l<r.length)t=r.slice(0,l);else if(r.length>0){const e=r[r.length-1];t=[...r,...Array(l-r.length).fill(e)]}e.setColWidths(t)}}function Un(e){if(e.detail<3||!ee(e.target))return!1;const t=Z(e.target);if(null===t)return!1;const o=n(t,e=>x(e)&&!e.isInline());if(null===o)return!1;return!!Ge(o.getParent())&&(o.select(0),!0)}function Jn(){const e=b();if(!w(e))return!1;const t=Nn(e.anchor.getNode());if(null===t)return!1;const n=Ne();if(!n.is(t.getParent())||1!==n.getChildrenSize())return!1;const[o]=kt(t,null,null);if(0===o.length||0===o[0].length)return!1;const r=o[0][0];if(!r||!r.cell)return!1;const l=o[o.length-1],s=l[l.length-1];if(!s||!s.cell)return!1;const i=It(t,r.cell,s.cell);return A(i),!0}function Xn(e){return e.registerNodeTransform(Ye,e=>{if(e.getColSpan()>1||e.getRowSpan()>1){const[,,t]=Mt(e),[n]=Et(t,e,e),o=n.length,r=n[0].length;let l=t.getFirstChild();ot(l)||Ze(175);const i=[];for(let e=0;e<o;e++){0!==e&&(l=l.getNextSibling(),ot(l)||Ze(175));let t=null;for(let o=0;o<r;o++){const r=n[e][o],c=r.cell;if(r.startRow===e&&r.startColumn===o)t=c,i.push(c);else if(c.getColSpan()>1||c.getRowSpan()>1){Ge(c)||Ze(176);const e=Ve(c.__headerState);null!==t?t.insertAfter(e):s(l,e)}}}for(const e of i)e.setColSpan(1),e.setRowSpan(1)}})}function Yn(e,t=!0){const n=new Xt,o=(o,r,l)=>{const s=Vt(o,l),i=on(o,s,e,t,n);n.observers.set(r,[i,s])};return i(nn(e,n),e.registerCommand(K,()=>rn(n,e),B),e.registerMutationListener(Wn,t=>{e.getEditorState().read(()=>{for(const[e,r]of t){const t=n.observers.get(e);if("created"===r||"updated"===r){const{tableNode:r,tableElement:l}=Jt(e);void 0===t?o(r,e,l):l!==t[1]&&(t[0].removeListeners(),n.observers.delete(e),o(r,e,l))}else"destroyed"===r&&void 0!==t&&(t[0].removeListeners(),n.observers.delete(e))}},{editor:e})},{skipInitialization:!1}),()=>{for(const[,[e]]of n.observers)e.removeListeners()})}function qn(e,t){e.hasNodes([Wn])||Ze(255);const{hasNestedTables:o=ke(!1)}=t??{};return i(e.registerCommand(Qe,e=>function({rows:e,columns:t,includeHeaders:n},o){const r=b()||ne();if(!r||!w(r))return!1;if(!o&&Nn(r.anchor.getNode()))return!1;const l=rt(Number(e),Number(t),n);c(l);const s=l.getFirstDescendant();return g(s)&&s.select(),!0}(e,o.peek()),_e),e.registerCommand(Se,(t,r)=>e===r&&function(e,t){const{nodes:o,selection:r}=e;if(!o.some(e=>Bn(e)||a(e).some(e=>Bn(e.node))))return!1;const l=Pt(r),s=w(r);if(!(s&&null!==n(r.anchor.getNode(),e=>Ge(e))&&null!==n(r.focus.getNode(),e=>Ge(e))||l))return!1;if(1===o.length&&Bn(o[0]))return function(e,t){const o=t.getStartEndPoints(),r=Pt(t);if(null===o)return!1;const[l,s]=o,[i,c,a]=Mt(l),u=n(s.getNode(),e=>Ge(e));if(!(Ge(i)&&Ge(u)&&ot(c)&&Bn(a)))return!1;const[h,d,f]=Et(a,i,u),[m]=kt(e,null,null),C=h.length,_=C>0?h[0].length:0;let S=d.startRow,b=d.startColumn,w=m.length,y=w>0?m[0].length:0;if(r){const e=$t(h,d,f),t=e.maxRow-e.minRow+1,n=e.maxColumn-e.minColumn+1;S=e.minRow,b=e.minColumn,w=Math.min(w,t),y=Math.min(y,n)}let N=!1;const v=Math.min(C,S+w)-1,x=Math.min(_,b+y)-1,T=new Set;for(let e=S;e<=v;e++)for(let t=b;t<=x;t++){const n=h[e][t];T.has(n.cell.getKey())||(1===n.cell.__rowSpan&&1===n.cell.__colSpan||(Kt(n.cell),T.add(n.cell.getKey()),N=!0))}let[F]=kt(a.getWritable(),null,null);const R=w-C+S;for(let e=0;e<R;e++){pt(F[C-1][0].cell)}const O=y-_+b;for(let e=0;e<O;e++){bt(F[0][_-1].cell,!0,!1)}[F]=kt(a.getWritable(),null,null);for(let e=S;e<S+w;e++)for(let t=b;t<b+y;t++){const n=e-S,o=t-b,r=m[n][o];if(r.startRow!==n||r.startColumn!==o)continue;const l=r.cell;if(1!==l.__rowSpan||1!==l.__colSpan){const n=[],o=Math.min(e+l.__rowSpan,S+w)-1,r=Math.min(t+l.__colSpan,b+y)-1;for(let l=e;l<=o;l++)for(let e=t;e<=r;e++){const t=F[l][e];n.push(t.cell)}Rt(n),N=!0}const{cell:s}=F[e][t],i=l.getBackgroundColor();null!=i&&s.setBackgroundColor(i);const c=s.getChildren();l.getChildren().forEach(e=>{if(g(e)){p().append(e),s.append(e)}else s.append(e)}),c.forEach(e=>e.remove())}if(r&&N){const[e]=kt(a.getWritable(),null,null);e[d.startRow][d.startColumn].cell.selectEnd()}return!0}(o[0],r);if(s&&t.peek()&&!function(e){if(Pt(e)&&!e.focus.getNode().is(e.anchor.getNode()))return!0;if(w(e)&&Ge(e.anchor.getNode())&&!e.anchor.getNode().is(e.focus.getNode()))return!0;return!1}(r))return!1;return!0}(t,o),_e),e.registerCommand(be,Jn,we),e.registerCommand(ye,Un,_e),e.registerNodeTransform(Wn,In),e.registerNodeTransform(et,Dn),e.registerNodeTransform(Ye,Pn))}const jn=ve({build:(e,t,n)=>$e(t),config:Te({hasCellBackgroundColor:!0,hasCellMerge:!0,hasHorizontalScroll:!0,hasNestedTables:!1,hasTabHandler:!0}),name:"@lexical/table/Table",nodes:()=>[Wn,et,Ye],register(e,t,n){const o=n.getOutput();return i(Me(()=>{const t=o.hasHorizontalScroll.value;Mn(e)!==t&&($n(e,t),e.update(xe))}),qn(e,o),Me(()=>Yn(e,o.hasTabHandler.value)),Me(()=>o.hasCellMerge.value?void 0:Xn(e)),Me(()=>o.hasCellBackgroundColor.value?void 0:e.registerNodeTransform(Ye,e=>{null!==e.getBackgroundColor()&&e.setBackgroundColor(null)})))}});const Vn={$accepts:ot,$packageRun:e=>e.every(Ge)?[nt().splice(0,0,e)]:[],name:"TableSchema"},Gn={$accepts:Ge,name:"TableRowSchema"},Qn=[He({$import:(e,n)=>{const o=Hn();n.hasAttribute("data-lexical-row-striping")&&o.setRowStriping(!0),n.hasAttribute("data-lexical-frozen-column")&&o.setFrozenColumns(1),n.hasAttribute("data-lexical-frozen-row")&&o.setFrozenRows(1);const r=n.querySelector(":scope > colgroup");if(r){let e=[];for(const t of r.querySelectorAll(":scope > col")){let n=t.style.width||"";if(!Je.test(n)&&(n=t.getAttribute("width")||"",!/^\d+$/.test(n))){e=void 0;break}e.push(parseFloat(n))}e&&o.setColWidths(e)}return[o.splice(0,0,t(e.$importChildren(n),ot))]},match:Be.tag("table"),name:"@lexical/table/table"}),He({$import:(e,n)=>[nt(Je.test(n.style.height)?parseFloat(n.style.height):void 0).splice(0,0,t(e.$importChildren(n),Ge))],match:Be.tag("tr"),name:"@lexical/table/tr"}),He({$import:(e,t)=>{const n="TH"===t.nodeName,o=Je.test(t.style.width)?parseFloat(t.style.width):void 0;let r=Xe.NO_STATUS;if(n){const e=t.getAttribute("scope");if("col"===e)r=Xe.COLUMN;else if("row"===e)r=Xe.ROW;else{const e=t.parentElement,n=Re(e)&&(e.parentElement&&"THEAD"===e.parentElement.nodeName||0===e.rowIndex),o=0===t.cellIndex;n&&(r|=Xe.ROW),o&&(r|=Xe.COLUMN),r===Xe.NO_STATUS&&(r=Xe.ROW)}}const l=Ve(r,t.colSpan,o);l.__rowSpan=t.rowSpan;const s=t.style.backgroundColor;""!==s&&(l.__backgroundColor=s);const i=t.style.verticalAlign;(function(e){return"middle"===e||"bottom"===e})(i)&&(l.__verticalAlign=i);const c=e.get(Pe),a=c|function(e){let t=0;const n=e.fontWeight;"700"!==n&&"bold"!==n||(t|=Oe),"italic"===e.fontStyle&&(t|=Ae);const o=(e.textDecoration||"").split(" ");return o.includes("underline")&&(t|=Ke),o.includes("line-through")&&(t|=Ee),t}(t.style),u=e.get(De),h=t.style.color,d=h?{...u,color:h}:u,C=[];a!==c&&C.push(Ie(Pe,a)),d!==u&&C.push(Ie(De,d));const _=function(e){const t=[];let n=null;const o=()=>{if(null!==n){const e=n.getFirstChild();m(e)&&1===n.getChildrenSize()&&e.remove()}};for(const r of e)f(r)||g(r)||m(r)?null!==n?n.append(r):(n=p().append(r),t.push(n)):(o(),n=null,t.push(r));return o(),0===t.length&&t.push(p()),t}(e.$importChildren(t,{context:C})),S=n?_:Ue(_,t);return[l.splice(0,0,S)]},match:Be.tag("td","th"),name:"@lexical/table/cell"})],Zn=ve({dependencies:[jn,Fe(Le,{rules:Qn})],name:"@lexical/table/Import"});export{Et as $computeTableMap,kt as $computeTableMapSkipCellCheck,Ve as $createTableCellNode,Hn as $createTableNode,rt as $createTableNodeWithDimensions,nt as $createTableRowNode,Dt as $createTableSelection,It as $createTableSelectionFrom,wt as $deleteTableColumn,vt as $deleteTableColumnAtSelection,xt as $deleteTableColumn__EXPERIMENTAL,yt as $deleteTableRowAtSelection,Nt as $deleteTableRow__EXPERIMENTAL,yn as $findCellNode,Nn as $findTableNode,zn as $getElementForTableNode,Mt as $getNodeTriplet,Jt as $getTableAndElementByKey,lt as $getTableCellNodeFromLexicalNode,Lt as $getTableCellNodeRect,at as $getTableColumnIndexFromTableCellNode,it as $getTableNodeFromLexicalNodeOrThrow,ct as $getTableRowIndexFromTableCellNode,st as $getTableRowNodeFromTableCellNodeOrThrow,Ct as $insertTableColumn,_t as $insertTableColumnAtSelection,St as $insertTableColumn__EXPERIMENTAL,dt as $insertTableRow,gt as $insertTableRowAtSelection,mt as $insertTableRow__EXPERIMENTAL,Mn as $isScrollableTablesActive,Wt as $isSimpleTable,Ge as $isTableCellNode,Bn as $isTableNode,ot as $isTableRowNode,Pt as $isTableSelection,Rt as $mergeCells,zt as $moveTableColumn,ht as $removeTableRowAtIndex,At as $unmergeCell,Qe as INSERT_TABLE_COMMAND,Xe as TableCellHeaderStates,Ye as TableCellNode,jn as TableExtension,Zn as TableImportExtension,Qn as TableImportRules,Wn as TableNode,Yt as TableObserver,et as TableRowNode,Gn as TableRowSchema,Vn as TableSchema,on as applyTableHandlers,cn as getDOMCellFromTarget,Vt as getTableElement,sn as getTableObserverFromTableElement,Xn as registerTableCellUnmergeTransform,qn as registerTablePlugin,Yn as registerTableSelectionObserver,$n as setScrollableTablesActive};
@@ -0,0 +1,41 @@
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 { ChildSchema } from '@lexical/html';
9
+ /**
10
+ * A {@link ChildSchema} that enforces TableNode invariants: only
11
+ * `TableRowNode` children are accepted; orphan `TableCellNode` runs are
12
+ * wrapped in a synthesized row.
13
+ *
14
+ * @experimental
15
+ */
16
+ export declare const TableSchema: ChildSchema;
17
+ /**
18
+ * A {@link ChildSchema} that enforces TableRowNode invariants: only
19
+ * `TableCellNode` children are accepted; non-cell children are dropped
20
+ * (the legacy converter does the same via `$descendantsMatching`).
21
+ *
22
+ * @experimental
23
+ */
24
+ export declare const TableRowSchema: ChildSchema;
25
+ /**
26
+ * Import rules for {@link TableNode}, {@link TableRowNode}, and
27
+ * {@link TableCellNode}.
28
+ *
29
+ * @experimental
30
+ */
31
+ export declare const TableImportRules: (import("@lexical/html").DOMImportRule<import("@lexical/html").ElementSelectorBuilder<HTMLTableElement, Record<string, never>>> | import("@lexical/html").DOMImportRule<import("@lexical/html").ElementSelectorBuilder<HTMLTableCellElement, Record<string, never>>> | import("@lexical/html").DOMImportRule<import("@lexical/html").ElementSelectorBuilder<HTMLTableRowElement, Record<string, never>>>)[];
32
+ /**
33
+ * Bundles {@link TableImportRules} together with the runtime
34
+ * {@link TableExtension}. The application is expected to already have
35
+ * `CoreImportExtension` (or some equivalent) in its dependency graph —
36
+ * the core/text/paragraph/inline-format rules are a shared baseline,
37
+ * not something this leaf importer should re-declare.
38
+ *
39
+ * @experimental
40
+ */
41
+ export declare const TableImportExtension: import("lexical").LexicalExtension<import("lexical").ExtensionConfigBase, "@lexical/table/Import", unknown, unknown>;
@@ -22,3 +22,4 @@ export { $createTableSelection, $createTableSelectionFrom, $isTableSelection, }
22
22
  export type { HTMLTableElementWithWithTableSelectionState } from './LexicalTableSelectionHelpers';
23
23
  export { $findCellNode, $findTableNode, applyTableHandlers, getDOMCellFromTarget, getTableElement, getTableObserverFromTableElement, } from './LexicalTableSelectionHelpers';
24
24
  export { $computeTableMap, $computeTableMapSkipCellCheck, $createTableNodeWithDimensions, $deleteTableColumn, $deleteTableColumn__EXPERIMENTAL, $deleteTableColumnAtSelection, $deleteTableRow__EXPERIMENTAL, $deleteTableRowAtSelection, $getNodeTriplet, $getTableCellNodeFromLexicalNode, $getTableCellNodeRect, $getTableColumnIndexFromTableCellNode, $getTableNodeFromLexicalNodeOrThrow, $getTableRowIndexFromTableCellNode, $getTableRowNodeFromTableCellNodeOrThrow, $insertTableColumn, $insertTableColumn__EXPERIMENTAL, $insertTableColumnAtSelection, $insertTableRow, $insertTableRow__EXPERIMENTAL, $insertTableRowAtSelection, $isSimpleTable, $mergeCells, $moveTableColumn, $removeTableRowAtIndex, $unmergeCell, } from './LexicalTableUtils';
25
+ export { TableImportExtension, TableImportRules, TableRowSchema, TableSchema, } from './TableImportExtension';
package/package.json CHANGED
@@ -8,37 +8,53 @@
8
8
  "table"
9
9
  ],
10
10
  "license": "MIT",
11
- "version": "0.44.1-nightly.20260519.0",
12
- "main": "LexicalTable.js",
13
- "types": "index.d.ts",
11
+ "version": "0.45.1-dev.0",
12
+ "main": "./dist/LexicalTable.js",
13
+ "types": "./dist/index.d.ts",
14
14
  "dependencies": {
15
- "@lexical/clipboard": "0.44.1-nightly.20260519.0",
16
- "@lexical/extension": "0.44.1-nightly.20260519.0",
17
- "@lexical/utils": "0.44.1-nightly.20260519.0",
18
- "lexical": "0.44.1-nightly.20260519.0"
15
+ "@lexical/clipboard": "0.45.1-dev.0",
16
+ "@lexical/extension": "0.45.1-dev.0",
17
+ "@lexical/html": "0.45.1-dev.0",
18
+ "@lexical/internal": "0.45.1-dev.0",
19
+ "@lexical/utils": "0.45.1-dev.0",
20
+ "lexical": "0.45.1-dev.0"
19
21
  },
20
22
  "repository": {
21
23
  "type": "git",
22
24
  "url": "git+https://github.com/facebook/lexical.git",
23
25
  "directory": "packages/lexical-table"
24
26
  },
25
- "module": "LexicalTable.mjs",
27
+ "module": "./dist/LexicalTable.mjs",
26
28
  "sideEffects": false,
27
29
  "exports": {
28
30
  ".": {
31
+ "source": "./src/index.ts",
29
32
  "import": {
30
- "types": "./index.d.ts",
31
- "development": "./LexicalTable.dev.mjs",
32
- "production": "./LexicalTable.prod.mjs",
33
- "node": "./LexicalTable.node.mjs",
34
- "default": "./LexicalTable.mjs"
33
+ "types": "./dist/index.d.ts",
34
+ "development": "./dist/LexicalTable.dev.mjs",
35
+ "production": "./dist/LexicalTable.prod.mjs",
36
+ "node": "./dist/LexicalTable.node.mjs",
37
+ "default": "./dist/LexicalTable.mjs"
35
38
  },
36
39
  "require": {
37
- "types": "./index.d.ts",
38
- "development": "./LexicalTable.dev.js",
39
- "production": "./LexicalTable.prod.js",
40
- "default": "./LexicalTable.js"
40
+ "types": "./dist/index.d.ts",
41
+ "development": "./dist/LexicalTable.dev.js",
42
+ "production": "./dist/LexicalTable.prod.js",
43
+ "default": "./dist/LexicalTable.js"
41
44
  }
42
45
  }
43
- }
46
+ },
47
+ "files": [
48
+ "dist",
49
+ "src",
50
+ "!src/__tests__",
51
+ "!src/__bench__",
52
+ "!src/__mocks__",
53
+ "!src/**/*.test.ts",
54
+ "!src/**/*.test.tsx",
55
+ "!src/**/*.bench.ts",
56
+ "!src/**/*.bench.tsx",
57
+ "README.md",
58
+ "LICENSE"
59
+ ]
44
60
  }