@mx-space/cli 0.14.1 → 0.14.2

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 (52) hide show
  1. package/dist/{Lexical.dev-DTxuYHmG.mjs → Lexical.dev-CtGmYDoh.mjs} +770 -271
  2. package/dist/{Lexical.node-BlCLnfA6.mjs → Lexical.node-8sRFmq2X.mjs} +15 -5
  3. package/dist/Lexical.prod-D-VfeKDz.mjs +7200 -0
  4. package/dist/{LexicalClipboard.dev-CdFkLR_D.mjs → LexicalClipboard.dev-CzQ15z6E.mjs} +6 -6
  5. package/dist/{LexicalClipboard.node-ktUajxsv.mjs → LexicalClipboard.node-D4gMGws6.mjs} +2 -2
  6. package/dist/{LexicalClipboard.prod-DliyLofW.mjs → LexicalClipboard.prod-CltkQpzS.mjs} +10 -8
  7. package/dist/{LexicalCodeCore.dev-CL9tHWJX.mjs → LexicalCodeCore.dev-DkYBZRGB.mjs} +11 -9
  8. package/dist/{LexicalCodeCore.prod-BoMSJc29.mjs → LexicalCodeCore.prod-COc3_QL8.mjs} +178 -167
  9. package/dist/{LexicalDragon.dev-CqW7Aq5H.mjs → LexicalDragon.dev-Dv5_WUae.mjs} +3 -3
  10. package/dist/{LexicalDragon.node-DLXctJyy.mjs → LexicalDragon.node-DgjrmWkd.mjs} +2 -2
  11. package/dist/{LexicalDragon.prod-DHI3T6n5.mjs → LexicalDragon.prod-DnpbDe-_.mjs} +5 -4
  12. package/dist/{LexicalExtension.dev-BP-18zns.mjs → LexicalExtension.dev-JMH_6-OZ.mjs} +73 -52
  13. package/dist/{LexicalExtension.node-BWH6xbzG.mjs → LexicalExtension.node-BUozzx4t.mjs} +4 -2
  14. package/dist/{LexicalExtension.prod-Cs6OgrDn.mjs → LexicalExtension.prod-UiyDgmou.mjs} +370 -347
  15. package/dist/{LexicalHeadless.dev-DJp__UcP.mjs → LexicalHeadless.dev-BfLGciiX.mjs} +2 -2
  16. package/dist/{LexicalHeadless.prod-o0v9cIu5.mjs → LexicalHeadless.prod-CWF7edmQ.mjs} +2 -2
  17. package/dist/{LexicalHtml.dev-DoymwFpG.mjs → LexicalHtml.dev-D5EF5PGW.mjs} +13 -11
  18. package/dist/{LexicalHtml.node-CVkbWtUA.mjs → LexicalHtml.node-BYbzHNVe.mjs} +4 -4
  19. package/dist/{LexicalHtml.prod-C2b3z99k.mjs → LexicalHtml.prod-D_FfkvVD.mjs} +330 -299
  20. package/dist/{LexicalLink.dev-7cgLOLIe.mjs → LexicalLink.dev-D3Pgh6ik.mjs} +53 -23
  21. package/dist/{LexicalLink.prod-DWFgoXHR.mjs → LexicalLink.prod-XZoAYVYD.mjs} +217 -198
  22. package/dist/{LexicalList.dev-Ci2iOxFx.mjs → LexicalList.dev-B5d3ObhB.mjs} +49 -44
  23. package/dist/LexicalList.prod-OQDpVAEb.mjs +967 -0
  24. package/dist/{LexicalMarkdown.dev-C0ZYCyuR.mjs → LexicalMarkdown.dev-BkM8G3DG.mjs} +61 -42
  25. package/dist/{LexicalMarkdown.prod-0M-Nc-rh.mjs → LexicalMarkdown.prod-DcVXCex6.mjs} +254 -202
  26. package/dist/{LexicalRichText.dev-Cnr1kDym.mjs → LexicalRichText.dev-DppD7IrA.mjs} +337 -52
  27. package/dist/{LexicalRichText.node-BUJZAiap.mjs → LexicalRichText.node-CPSn7dkg.mjs} +12 -8
  28. package/dist/LexicalRichText.prod-h7JPxFNp.mjs +718 -0
  29. package/dist/{LexicalSelection.dev-C4L7l8OB.mjs → LexicalSelection.dev-CD0SLbxP.mjs} +48 -17
  30. package/dist/{LexicalSelection.node-CLKroUMQ.mjs → LexicalSelection.node-CGlJgUlZ.mjs} +5 -4
  31. package/dist/{LexicalSelection.prod-DzFqpTlw.mjs → LexicalSelection.prod-DbVZN5AV.mjs} +101 -92
  32. package/dist/{LexicalTable.dev-Cc9-zqKa.mjs → LexicalTable.dev-D0HU14UV.mjs} +340 -138
  33. package/dist/LexicalTable.prod-BcPNSrxP.mjs +2468 -0
  34. package/dist/{LexicalUtils.dev-BRgK0L6G.mjs → LexicalUtils.dev-iKy_TrRT.mjs} +15 -19
  35. package/dist/{LexicalUtils.node-BVAwOkL4.mjs → LexicalUtils.node-CIgMS8cG.mjs} +6 -6
  36. package/dist/{LexicalUtils.prod-C1gtvVDP.mjs → LexicalUtils.prod-DIAsKJzu.mjs} +155 -159
  37. package/dist/bin/mxs.mjs +1 -1
  38. package/dist/esm-CH7CrOvh.mjs +2 -0
  39. package/dist/{esm-BNu4sUWV.mjs → esm-CwXl1N0a.mjs} +1801 -6013
  40. package/dist/index.d.mts +57 -62
  41. package/dist/index.mjs +1 -1
  42. package/dist/{mxs-CMX2yklg.mjs → mxs-iW9DgqSZ.mjs} +14930 -9234
  43. package/dist/rolldown-runtime-JspESFgx.mjs +35 -0
  44. package/dist/vendor/litexml/cli.mjs +6693 -5762
  45. package/dist/vendor/litexml/litexml-html-preview-client.js +11912 -8698
  46. package/package.json +31 -30
  47. package/LICENSE +0 -33
  48. package/dist/Lexical.prod-CeB9UQuo.mjs +0 -6816
  49. package/dist/LexicalList.prod-D0xX5d3G.mjs +0 -944
  50. package/dist/LexicalRichText.prod-BfbMQ9uM.mjs +0 -538
  51. package/dist/LexicalTable.prod-BgO4nCxy.mjs +0 -2336
  52. package/dist/esm-jbwcVZth.mjs +0 -2
@@ -1,9 +1,9 @@
1
- import { f as namedSignals, l as effect, p as signal } from "./LexicalExtension.node-BWH6xbzG.mjs";
2
- import { $t as CONTROLLED_TEXT_INSERTION_COMMAND, A as $getChildCaret, An as IS_FIREFOX, B as $getNodeByKeyOrThrow, Bn as KEY_ARROW_LEFT_COMMAND, Br as isDOMDocumentNode, C as $getAdjacentChildCaret, Ct as $normalizeCaret, Dn as IS_BOLD, Dr as getDOMSelectionRange, Er as getDOMSelectionPoints, Fn as IS_STRIKETHROUGH, G as $getSiblingCaret, H as $getPreviousSelection, Hn as KEY_ARROW_UP_COMMAND, Hr as isDOMShadowRoot, Ht as CLICK_COMMAND, I as $getEditor, Jn as KEY_TAB_COMMAND, Jr as isHTMLTableRowElement, Jt as COMMAND_PRIORITY_HIGH, Kn as KEY_ESCAPE_COMMAND, Mt as $setSelection, Nn as IS_ITALIC, R as $getNearestNodeFromDOMNode, Rn as IS_UNDERLINE, Tr as getDOMSelection, U as $getRoot, Un as KEY_BACKSPACE_COMMAND, Vn as KEY_ARROW_RIGHT_COMMAND, Vr as isDOMNode, W as $getSelection, Wn as KEY_DELETE_COMMAND, Yt as COMMAND_PRIORITY_LOW, _t as $isSiblingCaret, ai as safeCast, an as DELETE_LINE_COMMAND, ar as SELECTION_INSERT_CLIPBOARD_NODES_COMMAND, at as $isElementNode, b as $findMatchingParent, bn as INSERT_PARAGRAPH_COMMAND, br as defineExtension, bt as $isTextNode, dn as ElementNode, fn as FOCUS_COMMAND, ft as $isParagraphNode, g as $createRangeSelectionFromDom, gr as createCommand, h as $createRangeSelection, hr as configExtension, ht as $isRootOrShadowRoot, i as $caretFromPoint, ii as removeClassNamesFromElement, in as DELETE_CHARACTER_COMMAND, ir as SELECTION_CHANGE_COMMAND, jt as $setPointFromCaret, m as $createPoint, mn as FORMAT_TEXT_COMMAND, mt as $isRootNode, n as $applyNodeReplacement, ni as mergeRegister, nt as $isChildCaret, oi as setDOMStyleFromCSS, on as DELETE_WORD_COMMAND, or as SELECT_ALL_COMMAND, ot as $isExtendableTextPointCaret, p as $createParagraphNode, pn as FORMAT_ELEMENT_COMMAND, pr as addClassNamesToElement, pt as $isRangeSelection, qr as isHTMLElement, qt as COMMAND_PRIORITY_EDITOR, si as setDOMUnmanaged, st as $isInlineElementOrDecoratorNode, tn as CUT_COMMAND, ur as TEXT_TYPE_TO_FORMAT, ut as $isLineBreakNode, v as $createTextNode, wr as getComposedEventTarget, wt as $normalizeSelection__EXPERIMENTAL, x as $fullReconcile, y as $extendCaretToRange, z as $getNodeByKey, zn as KEY_ARROW_DOWN_COMMAND, zr as isCurrentlyReadOnlyMode } from "./Lexical.node-BlCLnfA6.mjs";
3
- import { c as DOMImportExtension, f as ImportTextFormat, h as defineImportRule, m as contextValue, o as $propagateTextAlignToBlockChildren, p as ImportTextStyle, s as CoreImportExtension, v as sel } from "./LexicalHtml.node-CVkbWtUA.mjs";
4
- import { d as $unwrapAndFilterDescendants, h as objectKlassEquals, n as $dfsWithSlots, o as $insertFirst$1, s as $insertNodeToNearestRoot, t as $descendantsMatching } from "./LexicalUtils.node-BVAwOkL4.mjs";
5
- import { o as copyToClipboard, t as $getClipboardDataFromSelection } from "./LexicalClipboard.node-ktUajxsv.mjs";
6
- //#region ../../node_modules/.pnpm/@lexical+table@0.46.0_typescript@6.0.3/node_modules/@lexical/table/dist/LexicalTable.dev.mjs
1
+ import { f as namedSignals, l as effect, p as signal } from "./LexicalExtension.node-BUozzx4t.mjs";
2
+ import { $r as isHTMLElement, $t as COMMAND_PRIORITY_LOW, A as $getChildCaret, Ar as getComposedEventTarget, B as $getNodeByKey, Dt as $normalizeSelection__EXPERIMENTAL, Et as $normalizeCaret, Ft as $setSelection, G as $getSelection, Gn as KEY_ARROW_RIGHT_COMMAND, Gr as isCurrentlyReadOnlyMode, Hn as IS_UNDERLINE, I as $getDocument, Jn as KEY_DELETE_COMMAND, Jr as isDOMShadowRoot, K as $getSiblingCaret, Kn as KEY_ARROW_UP_COMMAND, Kr as isDOMDocumentNode, Kt as CLICK_COMMAND, L as $getEditor, Ln as IS_ITALIC, Mr as getDOMSelectionPoints, Nr as getDOMSelectionRange, Or as getActiveElement, Pn as IS_FIREFOX, Pt as $setPointFromCaret, Qn as KEY_TAB_COMMAND, Qt as COMMAND_PRIORITY_HIGH, S as $fullReconcile, St as $isTextNode, Tr as defineExtension, U as $getPreviousSelection, Un as KEY_ARROW_DOWN_COMMAND, V as $getNodeByKeyOrThrow, W as $getRoot, Wn as KEY_ARROW_LEFT_COMMAND, Xn as KEY_ESCAPE_COMMAND, Zt as COMMAND_PRIORITY_EDITOR, _n as FORMAT_ELEMENT_COMMAND, an as CUT_COMMAND, b as $findMatchingParent, br as configExtension, ci as mergeRegister, cn as DELETE_CHARACTER_COMMAND, cr as SELECTION_CHANGE_COMMAND, ct as $isInlineElementOrDecoratorNode, dt as $isLineBreakNode, ei as isHTMLTableRowElement, fi as removeClassNamesFromElement, g as $createRangeSelectionFromDom, gn as FOCUS_COMMAND, gt as $isRootOrShadowRoot, h as $createRangeSelection, hi as setDOMUnmanaged, hn as ElementNode, hr as TEXT_TYPE_TO_FORMAT, ht as $isRootNode, i as $caretFromPoint, in as COPY_COMMAND, jn as IS_BOLD, jr as getDOMSelection, ln as DELETE_LINE_COMMAND, lr as SELECTION_INSERT_CLIPBOARD_NODES_COMMAND, m as $createPoint, mi as setDOMStyleFromCSS, mt as $isRangeSelection, n as $applyNodeReplacement, ot as $isElementNode, p as $createParagraphNode, pi as safeCast, pt as $isParagraphNode, qn as KEY_BACKSPACE_COMMAND, qr as isDOMNode, rn as CONTROLLED_TEXT_INSERTION_COMMAND, rr as PASTE_COMMAND, rt as $isChildCaret, st as $isExtendableTextPointCaret, ui as registerEventListener, un as DELETE_WORD_COMMAND, ur as SELECT_ALL_COMMAND, v as $createTextNode, vn as FORMAT_TEXT_COMMAND, vr as addClassNamesToElement, w as $getAdjacentChildCaret, wn as INSERT_PARAGRAPH_COMMAND, xr as createCommand, y as $extendCaretToRange, yt as $isSiblingCaret, z as $getNearestNodeFromDOMNode, zn as IS_STRIKETHROUGH } from "./Lexical.node-8sRFmq2X.mjs";
3
+ import { c as CoreImportExtension, g as defineImportRule, h as contextValue, l as DOMImportExtension, m as ImportTextStyle, o as $propagateTextAlignToBlockChildren, p as ImportTextFormat, y as sel } from "./LexicalHtml.node-BYbzHNVe.mjs";
4
+ import { d as $unwrapAndFilterDescendants, m as objectKlassEquals, n as $dfs, o as $insertFirst$1, s as $insertNodeToNearestRoot, t as $descendantsMatching } from "./LexicalUtils.node-CIgMS8cG.mjs";
5
+ import { o as copyToClipboard, t as $getClipboardDataFromSelection } from "./LexicalClipboard.node-D4gMGws6.mjs";
6
+ //#region ../../node_modules/.pnpm/@lexical+table@0.48.0_typescript@6.0.3/node_modules/@lexical/table/dist/LexicalTable.dev.mjs
7
7
  /**
8
8
  * Copyright (c) Meta Platforms, Inc. and affiliates.
9
9
  *
@@ -90,7 +90,7 @@ var TableCellNode = class TableCellNode extends ElementNode {
90
90
  this.__verticalAlign = void 0;
91
91
  }
92
92
  createDOM(config) {
93
- const element = document.createElement(this.getTag());
93
+ const element = $getDocument().createElement(this.getTag());
94
94
  if (this.__width) element.style.width = `${this.__width}px`;
95
95
  if (this.__colSpan > 1) element.colSpan = this.__colSpan;
96
96
  if (this.__rowSpan > 1) element.rowSpan = this.__rowSpan;
@@ -346,7 +346,7 @@ var TableRowNode = class TableRowNode extends ElementNode {
346
346
  };
347
347
  }
348
348
  createDOM(config) {
349
- const element = document.createElement("tr");
349
+ const element = $getDocument().createElement("tr");
350
350
  if (this.__height) element.style.height = `${this.__height}px`;
351
351
  addClassNamesToElement(element, config.theme.tableRow);
352
352
  return element;
@@ -860,6 +860,13 @@ function $unmergeCell() {
860
860
  if (!$isTableCellNode(cellNode)) formatDevErrorMessage(`Expected to find a parent TableCellNode`);
861
861
  return $unmergeCellNode(cellNode);
862
862
  }
863
+ /**
864
+ * Unmerges the given cell, splitting it back into individual cells.
865
+ * Unlike {@link $unmergeCell}, this does not depend on the current
866
+ * selection. No-op if the cell is not merged.
867
+ *
868
+ * @param cellNode The merged cell to split.
869
+ */
863
870
  function $unmergeCellNode(cellNode) {
864
871
  const [cell, row, grid] = $getNodeTriplet(cellNode);
865
872
  const colSpan = cell.__colSpan;
@@ -1077,6 +1084,24 @@ function $moveTableColumn(tableNode, originColumn, targetColumn) {
1077
1084
  tableNode.setColWidths(newWidths);
1078
1085
  }
1079
1086
  }
1087
+ /**
1088
+ * Moves a row from one position to another within a simple (non-merged) table.
1089
+ *
1090
+ * @param tableNode The table node to modify.
1091
+ * @param originRow The index of the row to move.
1092
+ * @param targetRow The index to move the row to.
1093
+ */
1094
+ function $moveTableRow(tableNode, originRow, targetRow) {
1095
+ if (originRow === targetRow) return;
1096
+ const rows = tableNode.getChildren().filter($isTableRowNode);
1097
+ const rowCount = rows.length;
1098
+ if (originRow < 0 || originRow >= rowCount || targetRow < 0 || targetRow >= rowCount) return;
1099
+ if (!$isSimpleTable(tableNode)) return;
1100
+ const originRowNode = rows[originRow];
1101
+ const targetRowNode = rows[targetRow];
1102
+ if (targetRow > originRow) targetRowNode.insertAfter(originRowNode);
1103
+ else targetRowNode.insertBefore(originRowNode);
1104
+ }
1080
1105
  function $getTableCellNodeRect(tableCellNode) {
1081
1106
  const [cellNode, , gridNode] = $getNodeTriplet(tableCellNode);
1082
1107
  const rows = gridNode.getChildren().filter($isTableRowNode);
@@ -1104,6 +1129,119 @@ function $getTableCellNodeRect(tableCellNode) {
1104
1129
  }
1105
1130
  return null;
1106
1131
  }
1132
+ function $insertTableIntoGrid(tableNode, selection) {
1133
+ const anchorAndFocus = selection.getStartEndPoints();
1134
+ const isTableSel = $isTableSelection(selection);
1135
+ if (anchorAndFocus === null) return false;
1136
+ const [anchor, focus] = anchorAndFocus;
1137
+ const [anchorCellNode, anchorRowNode, gridNode] = $getNodeTriplet(anchor);
1138
+ const focusCellNode = $findMatchingParent(focus.getNode(), (n) => $isTableCellNode(n));
1139
+ if (!$isTableCellNode(anchorCellNode) || !$isTableCellNode(focusCellNode) || !$isTableRowNode(anchorRowNode) || !$isTableNode(gridNode)) return false;
1140
+ const [initialGridMap, anchorCellMap, focusCellMap] = $computeTableMap(gridNode, anchorCellNode, focusCellNode);
1141
+ const [templateGridMap] = $computeTableMapSkipCellCheck(tableNode, null, null);
1142
+ const initialRowCount = initialGridMap.length;
1143
+ const initialColCount = initialRowCount > 0 ? initialGridMap[0].length : 0;
1144
+ let startRow = anchorCellMap.startRow;
1145
+ let startCol = anchorCellMap.startColumn;
1146
+ let affectedRowCount = templateGridMap.length;
1147
+ let affectedColCount = affectedRowCount > 0 ? templateGridMap[0].length : 0;
1148
+ if (isTableSel) {
1149
+ const selectionBoundary = $computeTableCellRectBoundary(initialGridMap, anchorCellMap, focusCellMap);
1150
+ const selectionRowCount = selectionBoundary.maxRow - selectionBoundary.minRow + 1;
1151
+ const selectionColCount = selectionBoundary.maxColumn - selectionBoundary.minColumn + 1;
1152
+ startRow = selectionBoundary.minRow;
1153
+ startCol = selectionBoundary.minColumn;
1154
+ affectedRowCount = Math.min(affectedRowCount, selectionRowCount);
1155
+ affectedColCount = Math.min(affectedColCount, selectionColCount);
1156
+ }
1157
+ let didPerformMergeOperations = false;
1158
+ const lastRowForUnmerge = Math.min(initialRowCount, startRow + affectedRowCount) - 1;
1159
+ const lastColForUnmerge = Math.min(initialColCount, startCol + affectedColCount) - 1;
1160
+ const unmergedKeys = /* @__PURE__ */ new Set();
1161
+ for (let row = startRow; row <= lastRowForUnmerge; row++) for (let col = startCol; col <= lastColForUnmerge; col++) {
1162
+ const cellMap = initialGridMap[row][col];
1163
+ if (unmergedKeys.has(cellMap.cell.getKey())) continue;
1164
+ if (cellMap.cell.__rowSpan === 1 && cellMap.cell.__colSpan === 1) continue;
1165
+ $unmergeCellNode(cellMap.cell);
1166
+ unmergedKeys.add(cellMap.cell.getKey());
1167
+ didPerformMergeOperations = true;
1168
+ }
1169
+ let [interimGridMap] = $computeTableMapSkipCellCheck(gridNode.getWritable(), null, null);
1170
+ const rowsToInsert = affectedRowCount - initialRowCount + startRow;
1171
+ for (let i = 0; i < rowsToInsert; i++) {
1172
+ const cellMap = interimGridMap[initialRowCount - 1][0];
1173
+ $insertTableRowAtNode(cellMap.cell);
1174
+ }
1175
+ const colsToInsert = affectedColCount - initialColCount + startCol;
1176
+ for (let i = 0; i < colsToInsert; i++) {
1177
+ const cellMap = interimGridMap[0][initialColCount - 1];
1178
+ $insertTableColumnAtNode(cellMap.cell, true, false);
1179
+ }
1180
+ [interimGridMap] = $computeTableMapSkipCellCheck(gridNode.getWritable(), null, null);
1181
+ for (let row = startRow; row < startRow + affectedRowCount; row++) for (let col = startCol; col < startCol + affectedColCount; col++) {
1182
+ const templateRow = row - startRow;
1183
+ const templateCol = col - startCol;
1184
+ const templateCellMap = templateGridMap[templateRow][templateCol];
1185
+ if (templateCellMap.startRow !== templateRow || templateCellMap.startColumn !== templateCol) continue;
1186
+ const templateCell = templateCellMap.cell;
1187
+ if (templateCell.__rowSpan !== 1 || templateCell.__colSpan !== 1) {
1188
+ const cellsToMerge = [];
1189
+ const lastRowForMerge = Math.min(row + templateCell.__rowSpan, startRow + affectedRowCount) - 1;
1190
+ const lastColForMerge = Math.min(col + templateCell.__colSpan, startCol + affectedColCount) - 1;
1191
+ for (let r = row; r <= lastRowForMerge; r++) for (let c = col; c <= lastColForMerge; c++) {
1192
+ const cellMap = interimGridMap[r][c];
1193
+ cellsToMerge.push(cellMap.cell);
1194
+ }
1195
+ $mergeCells(cellsToMerge);
1196
+ didPerformMergeOperations = true;
1197
+ }
1198
+ const { cell } = interimGridMap[row][col];
1199
+ const backgroundColor = templateCell.getBackgroundColor();
1200
+ if (backgroundColor !== null && backgroundColor !== void 0) cell.setBackgroundColor(backgroundColor);
1201
+ const originalChildren = cell.getChildren();
1202
+ templateCell.getChildren().forEach((child) => {
1203
+ if ($isTextNode(child)) {
1204
+ $createParagraphNode().append(child);
1205
+ cell.append(child);
1206
+ } else cell.append(child);
1207
+ });
1208
+ originalChildren.forEach((n) => n.remove());
1209
+ }
1210
+ if (isTableSel && didPerformMergeOperations) {
1211
+ const [finalGridMap] = $computeTableMapSkipCellCheck(gridNode.getWritable(), null, null);
1212
+ finalGridMap[anchorCellMap.startRow][anchorCellMap.startColumn].cell.selectEnd();
1213
+ }
1214
+ return true;
1215
+ }
1216
+ function $setTableRowIsHeader(tableNode, rowIndex, isHeader) {
1217
+ const [gridMap] = $computeTableMapSkipCellCheck(tableNode, null, null);
1218
+ if (!(rowIndex >= 0 && rowIndex < gridMap.length)) formatDevErrorMessage(`Table row index ${String(rowIndex)} out of range`);
1219
+ const rowMap = gridMap[rowIndex];
1220
+ const headerState = isHeader ? TableCellHeaderStates.ROW : TableCellHeaderStates.NO_STATUS;
1221
+ const visited = /* @__PURE__ */ new Set();
1222
+ for (let col = 0; col < rowMap.length; col++) {
1223
+ const mapCell = rowMap[col];
1224
+ if (mapCell == null) continue;
1225
+ if (!visited.has(mapCell.cell)) {
1226
+ visited.add(mapCell.cell);
1227
+ mapCell.cell.setHeaderStyles(headerState, TableCellHeaderStates.ROW);
1228
+ }
1229
+ }
1230
+ }
1231
+ function $setTableColumnIsHeader(tableNode, columnIndex, isHeader) {
1232
+ const [gridMap] = $computeTableMapSkipCellCheck(tableNode, null, null);
1233
+ if (!(gridMap.length > 0 && columnIndex >= 0 && columnIndex < gridMap[0].length)) formatDevErrorMessage(`Table column index ${String(columnIndex)} out of range`);
1234
+ const headerState = isHeader ? TableCellHeaderStates.COLUMN : TableCellHeaderStates.NO_STATUS;
1235
+ const visited = /* @__PURE__ */ new Set();
1236
+ for (let row = 0; row < gridMap.length; row++) {
1237
+ const mapCell = gridMap[row][columnIndex];
1238
+ if (mapCell == null) continue;
1239
+ if (!visited.has(mapCell.cell)) {
1240
+ visited.add(mapCell.cell);
1241
+ mapCell.cell.setHeaderStyles(headerState, TableCellHeaderStates.COLUMN);
1242
+ }
1243
+ }
1244
+ }
1107
1245
  function $getCellNodes(tableSelection) {
1108
1246
  const [[anchorNode, anchorCell, anchorRow, anchorTable], [focusNode, focusCell, focusRow, focusTable]] = ["anchor", "focus"].map((k) => {
1109
1247
  const node = tableSelection[k].getNode();
@@ -1197,14 +1335,31 @@ var TableSelection = class TableSelection {
1197
1335
  extract() {
1198
1336
  return this.getNodes();
1199
1337
  }
1200
- insertRawText(text) {}
1338
+ insertRawText(text) {
1339
+ if (text === "") return;
1340
+ const tsvGrid = (text.endsWith("\n") ? text.slice(0, -1) : text).split("\n").map((line) => line.split(" "));
1341
+ const tableNode = $createTableNode();
1342
+ for (const row of tsvGrid) {
1343
+ const rowNode = $createTableRowNode();
1344
+ for (const cellText of row) {
1345
+ const cellNode = $createTableCellNode(TableCellHeaderStates.NO_STATUS);
1346
+ const paragraph = $createParagraphNode();
1347
+ if (cellText) paragraph.append($createTextNode(cellText));
1348
+ cellNode.append(paragraph);
1349
+ rowNode.append(cellNode);
1350
+ }
1351
+ tableNode.append(rowNode);
1352
+ }
1353
+ const { anchorCell } = $getCellNodes(this);
1354
+ $insertTableIntoGrid(tableNode, anchorCell.select(0, anchorCell.getChildrenSize()));
1355
+ }
1201
1356
  insertText() {}
1202
1357
  /**
1203
1358
  * Returns whether the provided TextFormatType is present on the Selection.
1204
1359
  * This will be true if any paragraph in table cells has the specified format.
1205
1360
  *
1206
1361
  * @param type the TextFormatType to check for.
1207
- * @returns true if the provided format is currently toggled on on the Selection, false otherwise.
1362
+ * @returns true if the provided format is currently toggled on the Selection, false otherwise.
1208
1363
  */
1209
1364
  hasFormat(type) {
1210
1365
  let format = 0;
@@ -1688,6 +1843,14 @@ function $getTableNodeByKeyOrThrow(key) {
1688
1843
  const isPointerDownOnEvent = (event) => {
1689
1844
  return (event.buttons & 1) === 1;
1690
1845
  };
1846
+ const AUTO_SCROLL_EDGE_ZONE = 40;
1847
+ const AUTO_SCROLL_MAX_STEP = 18;
1848
+ function autoScrollStep(pos, start, end) {
1849
+ const speed = (depth) => Math.max(1, Math.ceil(Math.min(AUTO_SCROLL_EDGE_ZONE, depth) / AUTO_SCROLL_EDGE_ZONE * AUTO_SCROLL_MAX_STEP));
1850
+ if (pos <= start + AUTO_SCROLL_EDGE_ZONE) return -speed(start + AUTO_SCROLL_EDGE_ZONE - pos);
1851
+ if (pos >= end - AUTO_SCROLL_EDGE_ZONE) return speed(pos - (end - AUTO_SCROLL_EDGE_ZONE));
1852
+ return 0;
1853
+ }
1691
1854
  function isHTMLTableElement(el) {
1692
1855
  return isHTMLElement(el) && el.nodeName === "TABLE";
1693
1856
  }
@@ -1737,10 +1900,7 @@ function registerTableWindowHandlers(editor, tableObservers) {
1737
1900
  $handleTableClick(editor, event, cellElement, tableElement, tableObserver, tableObservers);
1738
1901
  });
1739
1902
  };
1740
- editorWindow.addEventListener("pointerdown", pointerDownCallback);
1741
- return () => {
1742
- editorWindow.removeEventListener("pointerdown", pointerDownCallback);
1743
- };
1903
+ return registerEventListener(editorWindow, "pointerdown", pointerDownCallback);
1744
1904
  });
1745
1905
  }
1746
1906
  function $handleTableClick(editor, event, selectedDOMCell, tableElement, tableObserver, tableObservers) {
@@ -1752,45 +1912,137 @@ function $handleTableClick(editor, event, selectedDOMCell, tableElement, tableOb
1752
1912
  if (startingCell !== null && tableObserver.anchorCell === null) editor.update(() => {
1753
1913
  tableObserver.$setAnchorCellForSelection(startingCell);
1754
1914
  });
1755
- const onPointerUp = () => {
1915
+ let lastClientX = event.clientX;
1916
+ let lastClientY = event.clientY;
1917
+ let autoScrollRafId = null;
1918
+ const stopSelecting = () => {
1756
1919
  tableObserver.isSelecting = false;
1920
+ if (autoScrollRafId !== null) {
1921
+ editorWindow.cancelAnimationFrame(autoScrollRafId);
1922
+ autoScrollRafId = null;
1923
+ }
1757
1924
  editorWindow.removeEventListener("pointerup", onPointerUp);
1758
1925
  editorWindow.removeEventListener("pointermove", onPointerMove);
1759
1926
  };
1927
+ const resolveFocusCellFromPoint = (clientX, clientY) => {
1928
+ const tableRoot = tableElement.getRootNode();
1929
+ if (!isDOMDocumentNode(tableRoot) && !isDOMShadowRoot(tableRoot)) return null;
1930
+ for (const el of tableRoot.elementsFromPoint(clientX, clientY)) {
1931
+ const cell = getDOMCellInTableFromTarget(tableElement, el);
1932
+ if (cell) return cell;
1933
+ }
1934
+ return null;
1935
+ };
1936
+ const applyFocusCell = (focusCell, override) => {
1937
+ if (tableObserver.anchorCell === null) editor.update(() => {
1938
+ tableObserver.$setAnchorCellForSelection(focusCell);
1939
+ });
1940
+ if (tableObserver.focusCell === null || focusCell.elem !== tableObserver.focusCell.elem) {
1941
+ tableObservers.setNextFocus({
1942
+ focusCell,
1943
+ override,
1944
+ tableKey: tableObserver.tableNodeKey
1945
+ });
1946
+ editor.dispatchCommand(SELECTION_CHANGE_COMMAND, void 0);
1947
+ }
1948
+ };
1949
+ const findScrollContainer = (axis) => {
1950
+ for (let el = tableElement.parentElement; el; el = el.parentElement) if (axis === "x" ? el.scrollWidth > el.clientWidth : el.scrollHeight > el.clientHeight) {
1951
+ const style = editorWindow.getComputedStyle(el);
1952
+ const overflow = axis === "x" ? style.overflowX : style.overflowY;
1953
+ if (overflow === "auto" || overflow === "scroll") return el;
1954
+ }
1955
+ return null;
1956
+ };
1957
+ const scrollAxis = (container, pos, axis) => {
1958
+ let start;
1959
+ let end;
1960
+ if (container === null) {
1961
+ start = 0;
1962
+ end = axis === "x" ? editorWindow.innerWidth : editorWindow.innerHeight;
1963
+ } else {
1964
+ const rect = container.getBoundingClientRect();
1965
+ start = axis === "x" ? rect.left : rect.top;
1966
+ end = axis === "x" ? rect.right : rect.bottom;
1967
+ }
1968
+ const step = autoScrollStep(pos, start, end);
1969
+ if (step === 0) return false;
1970
+ if (container === null) {
1971
+ const before = axis === "x" ? editorWindow.scrollX : editorWindow.scrollY;
1972
+ editorWindow.scrollBy(axis === "x" ? step : 0, axis === "x" ? 0 : step);
1973
+ return (axis === "x" ? editorWindow.scrollX : editorWindow.scrollY) !== before;
1974
+ }
1975
+ if (axis === "x") {
1976
+ const before = container.scrollLeft;
1977
+ container.scrollLeft += step;
1978
+ return container.scrollLeft !== before;
1979
+ }
1980
+ const before = container.scrollTop;
1981
+ container.scrollTop += step;
1982
+ return container.scrollTop !== before;
1983
+ };
1984
+ const clampHitPoint = (hContainer, vContainer) => {
1985
+ let x = lastClientX;
1986
+ let y = lastClientY;
1987
+ if (hContainer === null) x = Math.min(Math.max(x, 1), editorWindow.innerWidth - 1);
1988
+ else {
1989
+ const rect = hContainer.getBoundingClientRect();
1990
+ x = Math.min(Math.max(x, rect.left + 1), rect.right - 1);
1991
+ }
1992
+ if (vContainer === null) y = Math.min(Math.max(y, 1), editorWindow.innerHeight - 1);
1993
+ else {
1994
+ const rect = vContainer.getBoundingClientRect();
1995
+ y = Math.min(Math.max(y, rect.top + 1), rect.bottom - 1);
1996
+ }
1997
+ return [x, y];
1998
+ };
1999
+ const isNearScrollEdge = () => {
2000
+ const hContainer = findScrollContainer("x");
2001
+ if (hContainer !== null) {
2002
+ const rect = hContainer.getBoundingClientRect();
2003
+ if (autoScrollStep(lastClientX, rect.left, rect.right) !== 0) return true;
2004
+ }
2005
+ const vContainer = findScrollContainer("y");
2006
+ const vStart = vContainer === null ? 0 : vContainer.getBoundingClientRect().top;
2007
+ const vEnd = vContainer === null ? editorWindow.innerHeight : vContainer.getBoundingClientRect().bottom;
2008
+ return autoScrollStep(lastClientY, vStart, vEnd) !== 0;
2009
+ };
2010
+ const tickAutoScroll = () => {
2011
+ autoScrollRafId = null;
2012
+ if (!tableObserver.isSelecting) return;
2013
+ const hContainer = findScrollContainer("x");
2014
+ const vContainer = findScrollContainer("y");
2015
+ const scrolledX = hContainer !== null && scrollAxis(hContainer, lastClientX, "x");
2016
+ const scrolledY = scrollAxis(vContainer, lastClientY, "y");
2017
+ if (scrolledX || scrolledY) {
2018
+ const [hitX, hitY] = clampHitPoint(hContainer, vContainer);
2019
+ const focusCell = resolveFocusCellFromPoint(hitX, hitY);
2020
+ if (focusCell) applyFocusCell(focusCell, false);
2021
+ autoScrollRafId = editorWindow.requestAnimationFrame(tickAutoScroll);
2022
+ }
2023
+ };
2024
+ const maybeStartAutoScroll = () => {
2025
+ if (autoScrollRafId !== null || tableObserver.pointerType === "touch" || !isNearScrollEdge()) return;
2026
+ autoScrollRafId = editorWindow.requestAnimationFrame(tickAutoScroll);
2027
+ };
2028
+ const onPointerUp = () => {
2029
+ stopSelecting();
2030
+ };
1760
2031
  const onPointerMove = (moveEvent) => {
1761
2032
  if (!isPointerDownOnEvent(moveEvent) && tableObserver.isSelecting) {
1762
- tableObserver.isSelecting = false;
1763
- editorWindow.removeEventListener("pointerup", onPointerUp);
1764
- editorWindow.removeEventListener("pointermove", onPointerMove);
2033
+ stopSelecting();
1765
2034
  return;
1766
2035
  }
1767
2036
  const moveTarget = getComposedEventTarget(moveEvent);
1768
2037
  if (!isDOMNode(moveTarget)) return;
2038
+ lastClientX = moveEvent.clientX;
2039
+ lastClientY = moveEvent.clientY;
1769
2040
  let focusCell = null;
1770
2041
  const override = !(IS_FIREFOX || tableElement.contains(moveTarget));
1771
2042
  if (override) focusCell = getDOMCellInTableFromTarget(tableElement, moveTarget);
1772
- else {
1773
- const tableRoot = tableElement.getRootNode();
1774
- if (!isDOMDocumentNode(tableRoot) && !isDOMShadowRoot(tableRoot)) return;
1775
- for (const el of tableRoot.elementsFromPoint(moveEvent.clientX, moveEvent.clientY)) {
1776
- focusCell = getDOMCellInTableFromTarget(tableElement, el);
1777
- if (focusCell) break;
1778
- }
1779
- }
1780
- if (focusCell) {
1781
- const anchorCell = focusCell;
1782
- if (tableObserver.anchorCell === null) editor.update(() => {
1783
- tableObserver.$setAnchorCellForSelection(anchorCell);
1784
- });
1785
- if (tableObserver.focusCell === null || focusCell.elem !== tableObserver.focusCell.elem) {
1786
- tableObservers.setNextFocus({
1787
- focusCell,
1788
- override,
1789
- tableKey: tableObserver.tableNodeKey
1790
- });
1791
- editor.dispatchCommand(SELECTION_CHANGE_COMMAND, void 0);
1792
- }
1793
- }
2043
+ else focusCell = resolveFocusCellFromPoint(moveEvent.clientX, moveEvent.clientY);
2044
+ if (focusCell) applyFocusCell(focusCell, override);
2045
+ maybeStartAutoScroll();
1794
2046
  };
1795
2047
  editorWindow.addEventListener("pointerup", onPointerUp, tableObserver.listenerOptions);
1796
2048
  editorWindow.addEventListener("pointermove", onPointerMove, tableObserver.listenerOptions);
@@ -1823,10 +2075,7 @@ function applyTableHandlers(tableNode, element, editor, hasTabHandler, tableObse
1823
2075
  if (getDOMCellFromTarget(target) !== null) event.preventDefault();
1824
2076
  }
1825
2077
  };
1826
- tableElement.addEventListener("mousedown", onTripleClick, tableObserver.listenerOptions);
1827
- tableObserver.listenersToRemove.add(() => {
1828
- tableElement.removeEventListener("mousedown", onTripleClick);
1829
- });
2078
+ tableObserver.listenersToRemove.add(registerEventListener(tableElement, "mousedown", onTripleClick, tableObserver.listenerOptions));
1830
2079
  for (const [command, direction] of ARROW_KEY_COMMANDS_WITH_DIRECTION) tableObserver.listenersToRemove.add(editor.registerCommand(command, (event) => $handleArrowKey(editor, event, direction, tableNode, tableObserver, tableObservers), COMMAND_PRIORITY_HIGH));
1831
2080
  tableObserver.listenersToRemove.add(editor.registerCommand(KEY_ESCAPE_COMMAND, (event) => {
1832
2081
  const selection = $getSelection();
@@ -1901,6 +2150,29 @@ function applyTableHandlers(tableNode, element, editor, hasTabHandler, tableObse
1901
2150
  }
1902
2151
  return false;
1903
2152
  }, COMMAND_PRIORITY_HIGH));
2153
+ const doc = rootElement.ownerDocument;
2154
+ tableObserver.listenersToRemove.add(registerEventListener(doc, "paste", (event) => {
2155
+ if (event.defaultPrevented) return;
2156
+ if (editor.read("latest", () => {
2157
+ const selection = $getSelection();
2158
+ return rootElement.contains(doc.activeElement) && $isTableSelection(selection) && $isSelectionInTable(selection, tableNode);
2159
+ })) {
2160
+ event.preventDefault();
2161
+ editor.dispatchCommand(PASTE_COMMAND, event);
2162
+ }
2163
+ }));
2164
+ tableObserver.listenersToRemove.add(registerEventListener(doc, "copy", (event) => {
2165
+ if (event.defaultPrevented) return;
2166
+ const target = getComposedEventTarget(event);
2167
+ if (target === rootElement || isDOMNode(target) && rootElement.contains(target)) return;
2168
+ if (editor.read("latest", () => {
2169
+ const selection = $getSelection();
2170
+ return rootElement.contains(getActiveElement(rootElement)) && $isTableSelection(selection) && $isSelectionInTable(selection, tableNode);
2171
+ })) {
2172
+ event.preventDefault();
2173
+ editor.dispatchCommand(COPY_COMMAND, event);
2174
+ }
2175
+ }));
1904
2176
  tableObserver.listenersToRemove.add(editor.registerCommand(FORMAT_TEXT_COMMAND, (payload) => {
1905
2177
  const selection = $getSelection();
1906
2178
  if (!$isSelectionInTable(selection, tableNode)) return false;
@@ -2650,12 +2922,12 @@ const __DEV__ = true;
2650
2922
  function isHTMLDivElement(element) {
2651
2923
  return isHTMLElement(element) && element.nodeName === "DIV";
2652
2924
  }
2653
- function updateColgroup(dom, colCount, colWidths) {
2925
+ function $updateColgroup(dom, colCount, colWidths) {
2654
2926
  const colGroup = dom.querySelector("colgroup");
2655
2927
  if (!colGroup) return;
2656
2928
  const cols = [];
2657
2929
  for (let i = 0; i < colCount; i++) {
2658
- const col = document.createElement("col");
2930
+ const col = $getDocument().createElement("col");
2659
2931
  const width = colWidths && colWidths[i];
2660
2932
  if (width) col.style.width = `${width}px`;
2661
2933
  cols.push(col);
@@ -2776,15 +3048,15 @@ var TableNode = class TableNode extends ElementNode {
2776
3048
  return super.getDOMSlot(element).withElement(tableElement).withAfter(tableElement.querySelector("colgroup"));
2777
3049
  }
2778
3050
  createDOM(config, editor) {
2779
- const tableElement = document.createElement("table");
3051
+ const tableElement = $getDocument().createElement("table");
2780
3052
  if (this.__style) setDOMStyleFromCSS(tableElement.style, this.__style);
2781
- const colGroup = document.createElement("colgroup");
3053
+ const colGroup = $getDocument().createElement("colgroup");
2782
3054
  tableElement.appendChild(colGroup);
2783
3055
  setDOMUnmanaged(colGroup);
2784
3056
  addClassNamesToElement(tableElement, config.theme.table);
2785
3057
  this.updateTableElement(null, tableElement, config);
2786
3058
  if ($isScrollableTablesActive(editor)) {
2787
- const wrapperElement = document.createElement("div");
3059
+ const wrapperElement = $getDocument().createElement("div");
2788
3060
  const classes = config.theme.tableScrollableWrapper;
2789
3061
  if (classes) addClassNamesToElement(wrapperElement, classes);
2790
3062
  else wrapperElement.style.overflowX = "auto";
@@ -2803,7 +3075,7 @@ var TableNode = class TableNode extends ElementNode {
2803
3075
  if (this.__rowStriping !== (prevNode ? prevNode.__rowStriping : false)) setRowStriping(tableElement, config, this.__rowStriping);
2804
3076
  const prevColCount = prevNode ? prevNode.getColumnCount() : 0;
2805
3077
  const prevColWidths = prevNode ? prevNode.__colWidths : void 0;
2806
- if (this.getColumnCount() !== prevColCount || this.getColWidths() !== prevColWidths) updateColgroup(tableElement, this.getColumnCount(), this.getColWidths());
3078
+ if (this.getColumnCount() !== prevColCount || this.getColWidths() !== prevColWidths) $updateColgroup(tableElement, this.getColumnCount(), this.getColWidths());
2807
3079
  alignTableElement(tableElement, config, this.getFormatType());
2808
3080
  }
2809
3081
  updateDOM(prevNode, dom, config) {
@@ -2816,7 +3088,7 @@ var TableNode = class TableNode extends ElementNode {
2816
3088
  scaleDOMColWidths(dom, scale) {
2817
3089
  const colWidths = this.getColWidths();
2818
3090
  if (!colWidths) return;
2819
- updateColgroup(getTableElement(this, dom), this.getColumnCount(), colWidths.map((width) => width * scale));
3091
+ $updateColgroup(getTableElement(this, dom), this.getColumnCount(), colWidths.map((width) => width * scale));
2820
3092
  }
2821
3093
  exportDOM(editor) {
2822
3094
  const superExport = super.exportDOM(editor);
@@ -2855,7 +3127,7 @@ var TableNode = class TableNode extends ElementNode {
2855
3127
  }
2856
3128
  const rows = tableElement.querySelectorAll(":scope > tr");
2857
3129
  if (rows.length > 0) {
2858
- const tBody = document.createElement("tbody");
3130
+ const tBody = $getDocument().createElement("tbody");
2859
3131
  for (const row of rows) tBody.appendChild(row);
2860
3132
  tableElement.append(tBody);
2861
3133
  }
@@ -3157,7 +3429,21 @@ function registerTablePlugin(editor, options) {
3157
3429
  }
3158
3430
  function $tableSelectionInsertClipboardNodesCommand(selectionPayload, hasNestedTables) {
3159
3431
  const { nodes, selection } = selectionPayload;
3160
- if (!nodes.some((n) => $isTableNode(n) || $dfsWithSlots(n).some((d) => $isTableNode(d.node)))) return false;
3432
+ if (!nodes.some((n) => $isTableNode(n) || $dfs(n).some((d) => $isTableNode(d.node)))) {
3433
+ if ($isTableSelection(selection)) {
3434
+ let text = "";
3435
+ let lastWasBlock = false;
3436
+ for (const node of nodes) {
3437
+ const isBlock = $isElementNode(node) && !node.isInline();
3438
+ if (text.length > 0 && (isBlock || lastWasBlock)) text += "\n";
3439
+ text += node.getTextContent();
3440
+ lastWasBlock = isBlock;
3441
+ }
3442
+ selection.insertRawText(text);
3443
+ return true;
3444
+ }
3445
+ return false;
3446
+ }
3161
3447
  const isTableSelection = $isTableSelection(selection);
3162
3448
  const isRangeSelection = $isRangeSelection(selection);
3163
3449
  if (!(isRangeSelection && $findMatchingParent(selection.anchor.getNode(), (n) => $isTableCellNode(n)) !== null && $findMatchingParent(selection.focus.getNode(), (n) => $isTableCellNode(n)) !== null || isTableSelection)) return false;
@@ -3165,90 +3451,6 @@ function $tableSelectionInsertClipboardNodesCommand(selectionPayload, hasNestedT
3165
3451
  if (isRangeSelection && hasNestedTables.peek() && !$isMultiCellTableSelection(selection)) return false;
3166
3452
  return true;
3167
3453
  }
3168
- function $insertTableIntoGrid(tableNode, selection) {
3169
- const anchorAndFocus = selection.getStartEndPoints();
3170
- const isTableSelection = $isTableSelection(selection);
3171
- if (anchorAndFocus === null) return false;
3172
- const [anchor, focus] = anchorAndFocus;
3173
- const [anchorCellNode, anchorRowNode, gridNode] = $getNodeTriplet(anchor);
3174
- const focusCellNode = $findMatchingParent(focus.getNode(), (n) => $isTableCellNode(n));
3175
- if (!$isTableCellNode(anchorCellNode) || !$isTableCellNode(focusCellNode) || !$isTableRowNode(anchorRowNode) || !$isTableNode(gridNode)) return false;
3176
- const [initialGridMap, anchorCellMap, focusCellMap] = $computeTableMap(gridNode, anchorCellNode, focusCellNode);
3177
- const [templateGridMap] = $computeTableMapSkipCellCheck(tableNode, null, null);
3178
- const initialRowCount = initialGridMap.length;
3179
- const initialColCount = initialRowCount > 0 ? initialGridMap[0].length : 0;
3180
- let startRow = anchorCellMap.startRow;
3181
- let startCol = anchorCellMap.startColumn;
3182
- let affectedRowCount = templateGridMap.length;
3183
- let affectedColCount = affectedRowCount > 0 ? templateGridMap[0].length : 0;
3184
- if (isTableSelection) {
3185
- const selectionBoundary = $computeTableCellRectBoundary(initialGridMap, anchorCellMap, focusCellMap);
3186
- const selectionRowCount = selectionBoundary.maxRow - selectionBoundary.minRow + 1;
3187
- const selectionColCount = selectionBoundary.maxColumn - selectionBoundary.minColumn + 1;
3188
- startRow = selectionBoundary.minRow;
3189
- startCol = selectionBoundary.minColumn;
3190
- affectedRowCount = Math.min(affectedRowCount, selectionRowCount);
3191
- affectedColCount = Math.min(affectedColCount, selectionColCount);
3192
- }
3193
- let didPerformMergeOperations = false;
3194
- const lastRowForUnmerge = Math.min(initialRowCount, startRow + affectedRowCount) - 1;
3195
- const lastColForUnmerge = Math.min(initialColCount, startCol + affectedColCount) - 1;
3196
- const unmergedKeys = /* @__PURE__ */ new Set();
3197
- for (let row = startRow; row <= lastRowForUnmerge; row++) for (let col = startCol; col <= lastColForUnmerge; col++) {
3198
- const cellMap = initialGridMap[row][col];
3199
- if (unmergedKeys.has(cellMap.cell.getKey())) continue;
3200
- if (cellMap.cell.__rowSpan === 1 && cellMap.cell.__colSpan === 1) continue;
3201
- $unmergeCellNode(cellMap.cell);
3202
- unmergedKeys.add(cellMap.cell.getKey());
3203
- didPerformMergeOperations = true;
3204
- }
3205
- let [interimGridMap] = $computeTableMapSkipCellCheck(gridNode.getWritable(), null, null);
3206
- const rowsToInsert = affectedRowCount - initialRowCount + startRow;
3207
- for (let i = 0; i < rowsToInsert; i++) {
3208
- const cellMap = interimGridMap[initialRowCount - 1][0];
3209
- $insertTableRowAtNode(cellMap.cell);
3210
- }
3211
- const colsToInsert = affectedColCount - initialColCount + startCol;
3212
- for (let i = 0; i < colsToInsert; i++) {
3213
- const cellMap = interimGridMap[0][initialColCount - 1];
3214
- $insertTableColumnAtNode(cellMap.cell, true, false);
3215
- }
3216
- [interimGridMap] = $computeTableMapSkipCellCheck(gridNode.getWritable(), null, null);
3217
- for (let row = startRow; row < startRow + affectedRowCount; row++) for (let col = startCol; col < startCol + affectedColCount; col++) {
3218
- const templateRow = row - startRow;
3219
- const templateCol = col - startCol;
3220
- const templateCellMap = templateGridMap[templateRow][templateCol];
3221
- if (templateCellMap.startRow !== templateRow || templateCellMap.startColumn !== templateCol) continue;
3222
- const templateCell = templateCellMap.cell;
3223
- if (templateCell.__rowSpan !== 1 || templateCell.__colSpan !== 1) {
3224
- const cellsToMerge = [];
3225
- const lastRowForMerge = Math.min(row + templateCell.__rowSpan, startRow + affectedRowCount) - 1;
3226
- const lastColForMerge = Math.min(col + templateCell.__colSpan, startCol + affectedColCount) - 1;
3227
- for (let r = row; r <= lastRowForMerge; r++) for (let c = col; c <= lastColForMerge; c++) {
3228
- const cellMap = interimGridMap[r][c];
3229
- cellsToMerge.push(cellMap.cell);
3230
- }
3231
- $mergeCells(cellsToMerge);
3232
- didPerformMergeOperations = true;
3233
- }
3234
- const { cell } = interimGridMap[row][col];
3235
- const backgroundColor = templateCell.getBackgroundColor();
3236
- if (backgroundColor !== null && backgroundColor !== void 0) cell.setBackgroundColor(backgroundColor);
3237
- const originalChildren = cell.getChildren();
3238
- templateCell.getChildren().forEach((child) => {
3239
- if ($isTextNode(child)) {
3240
- $createParagraphNode().append(child);
3241
- cell.append(child);
3242
- } else cell.append(child);
3243
- });
3244
- originalChildren.forEach((n) => n.remove());
3245
- }
3246
- if (isTableSelection && didPerformMergeOperations) {
3247
- const [finalGridMap] = $computeTableMapSkipCellCheck(gridNode.getWritable(), null, null);
3248
- finalGridMap[anchorCellMap.startRow][anchorCellMap.startColumn].cell.selectEnd();
3249
- }
3250
- return true;
3251
- }
3252
3454
  function $isMultiCellTableSelection(selection) {
3253
3455
  if ($isTableSelection(selection) && !selection.focus.getNode().is(selection.anchor.getNode())) return true;
3254
3456
  if ($isRangeSelection(selection) && $isTableCellNode(selection.anchor.getNode()) && !selection.anchor.getNode().is(selection.focus.getNode())) return true;
@@ -3484,4 +3686,4 @@ const TableImportExtension = /* @__PURE__ */ defineExtension({
3484
3686
  name: "@lexical/table/Import"
3485
3687
  });
3486
3688
  //#endregion
3487
- export { $computeTableMap, $computeTableMapSkipCellCheck, $createTableCellNode, $createTableNode, $createTableNodeWithDimensions, $createTableRowNode, $createTableSelection, $createTableSelectionFrom, $deleteTableColumn, $deleteTableColumnAtSelection, $deleteTableColumn__EXPERIMENTAL, $deleteTableRowAtSelection, $deleteTableRow__EXPERIMENTAL, $findCellNode, $findTableNode, $getElementForTableNode, $getNodeTriplet, $getTableAndElementByKey, $getTableCellNodeFromLexicalNode, $getTableCellNodeRect, $getTableColumnIndexFromTableCellNode, $getTableNodeFromLexicalNodeOrThrow, $getTableRowIndexFromTableCellNode, $getTableRowNodeFromTableCellNodeOrThrow, $insertTableColumn, $insertTableColumnAtSelection, $insertTableColumn__EXPERIMENTAL, $insertTableRow, $insertTableRowAtSelection, $insertTableRow__EXPERIMENTAL, $isScrollableTablesActive, $isSimpleTable, $isTableCellNode, $isTableNode, $isTableRowNode, $isTableSelection, $mergeCells, $moveTableColumn, $removeTableRowAtIndex, $unmergeCell, INSERT_TABLE_COMMAND, TableCellHeaderStates, TableCellNode, TableExtension, TableImportExtension, TableImportRules, TableNode, TableObserver, TableRowNode, TableRowSchema, TableSchema, applyTableHandlers, getDOMCellFromTarget, getTableElement, getTableObserverFromTableElement, registerTableCellUnmergeTransform, registerTablePlugin, registerTableSelectionObserver, setScrollableTablesActive };
3689
+ export { $computeTableMap, $computeTableMapSkipCellCheck, $createTableCellNode, $createTableNode, $createTableNodeWithDimensions, $createTableRowNode, $createTableSelection, $createTableSelectionFrom, $deleteTableColumn, $deleteTableColumnAtSelection, $deleteTableColumn__EXPERIMENTAL, $deleteTableRowAtSelection, $deleteTableRow__EXPERIMENTAL, $findCellNode, $findTableNode, $getElementForTableNode, $getNodeTriplet, $getTableAndElementByKey, $getTableCellNodeFromLexicalNode, $getTableCellNodeRect, $getTableColumnIndexFromTableCellNode, $getTableNodeFromLexicalNodeOrThrow, $getTableRowIndexFromTableCellNode, $getTableRowNodeFromTableCellNodeOrThrow, $insertTableColumn, $insertTableColumnAtNode, $insertTableColumnAtSelection, $insertTableColumn__EXPERIMENTAL, $insertTableRow, $insertTableRowAtNode, $insertTableRowAtSelection, $insertTableRow__EXPERIMENTAL, $isScrollableTablesActive, $isSimpleTable, $isTableCellNode, $isTableNode, $isTableRowNode, $isTableSelection, $mergeCells, $moveTableColumn, $moveTableRow, $removeTableRowAtIndex, $setTableColumnIsHeader, $setTableRowIsHeader, $unmergeCell, $unmergeCellNode, INSERT_TABLE_COMMAND, TableCellHeaderStates, TableCellNode, TableExtension, TableImportExtension, TableImportRules, TableNode, TableObserver, TableRowNode, TableRowSchema, TableSchema, applyTableHandlers, getDOMCellFromTarget, getTableElement, getTableObserverFromTableElement, registerTableCellUnmergeTransform, registerTablePlugin, registerTableSelectionObserver, setScrollableTablesActive };