@superdoc-dev/cli 0.2.0-next.35 → 0.2.0-next.37

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 (2) hide show
  1. package/dist/index.js +886 -489
  2. package/package.json +7 -7
package/dist/index.js CHANGED
@@ -101805,9 +101805,9 @@ var init_remark_gfm_CQ3Jg4PR_es = __esm(() => {
101805
101805
  init_remark_gfm_z_sDF4ss_es();
101806
101806
  });
101807
101807
 
101808
- // ../../packages/superdoc/dist/chunks/src-dG-lytW9.es.js
101809
- var exports_src_dG_lytW9_es = {};
101810
- __export(exports_src_dG_lytW9_es, {
101808
+ // ../../packages/superdoc/dist/chunks/src-D9teEfgS.es.js
101809
+ var exports_src_D9teEfgS_es = {};
101810
+ __export(exports_src_D9teEfgS_es, {
101811
101811
  zt: () => defineMark,
101812
101812
  z: () => cM,
101813
101813
  yt: () => removeAwarenessStates,
@@ -115653,201 +115653,6 @@ function toTableFailure(code$1, message, details) {
115653
115653
  }
115654
115654
  };
115655
115655
  }
115656
- function resolveTable2(tr, tablePos, tableNode) {
115657
- if (tableNode && tableNode.type && tableNode.type.name === "table")
115658
- return tableNode;
115659
- if (typeof tablePos === "number") {
115660
- const current = tr.doc.nodeAt(tablePos);
115661
- if (current && current.type.name === "table")
115662
- return current;
115663
- }
115664
- return null;
115665
- }
115666
- function pickTemplateRowForAppend(tableNode, schema) {
115667
- const RowType = schema.nodes.tableRow;
115668
- const rows = [];
115669
- tableNode.descendants((child) => {
115670
- if (child.type === RowType)
115671
- rows.push(child);
115672
- });
115673
- if (!rows.length)
115674
- return null;
115675
- for (let i$1 = rows.length - 1;i$1 >= 0; i$1--) {
115676
- const r$1 = rows[i$1];
115677
- if (r$1.content?.content?.some((c$3) => c$3.type.name === "tableCell"))
115678
- return r$1;
115679
- }
115680
- return rows[rows.length - 1];
115681
- }
115682
- function extractRowTemplateFormatting(cellNode, schema) {
115683
- const ParagraphType = schema.nodes.paragraph;
115684
- let blockType = ParagraphType;
115685
- let blockAttrs = null;
115686
- let textMarks = [];
115687
- const blocks2 = cellNode?.content?.content || [];
115688
- for (const block of blocks2) {
115689
- if (block.type === ParagraphType || block.type.name === "heading") {
115690
- blockType = block.type || ParagraphType;
115691
- blockAttrs = block.attrs || null;
115692
- }
115693
- let foundText = null;
115694
- block.descendants?.((n) => {
115695
- if (!foundText && n.isText)
115696
- foundText = n;
115697
- });
115698
- if (foundText) {
115699
- textMarks = foundText.marks ? Array.from(foundText.marks) : [];
115700
- break;
115701
- }
115702
- }
115703
- if (!blockType || !blockType.validContent)
115704
- blockType = ParagraphType;
115705
- return {
115706
- blockType,
115707
- blockAttrs,
115708
- textMarks
115709
- };
115710
- }
115711
- function buildFormattedCellBlock(schema, value, { blockType, blockAttrs, textMarks }, copyRowStyle = false) {
115712
- const text5 = typeof value === "string" ? value : value == null ? "" : String(value);
115713
- const type = blockType || schema.nodes.paragraph;
115714
- const marks = copyRowStyle ? textMarks || [] : [];
115715
- if (!text5) {
115716
- const content3 = marks.length > 0 ? schema.text(ZERO_WIDTH_SPACE, marks) : null;
115717
- return type.createAndFill(blockAttrs || null, content3);
115718
- }
115719
- const textNode = schema.text(text5, marks);
115720
- return type.createAndFill(blockAttrs || null, textNode);
115721
- }
115722
- function buildRowFromTemplateRow({ schema, tableNode, templateRow, values, copyRowStyle = false }) {
115723
- const RowType = schema.nodes.tableRow;
115724
- const CellType = schema.nodes.tableCell;
115725
- const HeaderType = schema.nodes.tableHeader;
115726
- const totalColumns = TableMap.get(tableNode).width;
115727
- const byColumns = Array.isArray(values) && values.length === totalColumns;
115728
- const newCells = [];
115729
- let columnCursor = 0;
115730
- templateRow.content.content.forEach((cellNode, cellIndex) => {
115731
- const isHeaderCell = cellNode.type === HeaderType;
115732
- const targetCellType = isHeaderCell ? CellType : cellNode.type;
115733
- const attrs = isHeaderCell ? normalizeHeaderAttrsForBodyCell({ ...cellNode.attrs }) : { ...cellNode.attrs };
115734
- const formatting = extractRowTemplateFormatting(cellNode, schema);
115735
- let cellValue = "";
115736
- if (byColumns) {
115737
- const span = Math.max(1, attrs.colspan || 1);
115738
- cellValue = values[columnCursor] ?? "";
115739
- columnCursor += span;
115740
- } else
115741
- cellValue = Array.isArray(values) ? values[cellIndex] ?? "" : "";
115742
- const content3 = buildFormattedCellBlock(schema, cellValue, formatting, copyRowStyle);
115743
- const newCell = targetCellType.createAndFill(attrs, content3);
115744
- if (newCell)
115745
- newCells.push(newCell);
115746
- });
115747
- return RowType.createAndFill(null, newCells);
115748
- }
115749
- function insertRowsAtTableEnd({ tr, tablePos, tableNode, rows }) {
115750
- if (!rows || !rows.length)
115751
- return;
115752
- const RowTypeName = "tableRow";
115753
- let lastRowRelPos = 0;
115754
- let lastRowNode = null;
115755
- tableNode.descendants((child, relPos) => {
115756
- if (child.type.name === RowTypeName) {
115757
- lastRowRelPos = relPos;
115758
- lastRowNode = child;
115759
- }
115760
- });
115761
- if (!lastRowNode)
115762
- return;
115763
- const lastRowAbsEnd = tablePos + 1 + lastRowRelPos + lastRowNode.nodeSize;
115764
- const frag = Fragment.fromArray(rows);
115765
- tr.insert(lastRowAbsEnd, frag);
115766
- }
115767
- function insertRowAtIndex({ tr, tablePos, tableNode, sourceRowIndex, insertIndex, schema }) {
115768
- const sourceRow = tableNode.child(sourceRowIndex);
115769
- if (!sourceRow)
115770
- return false;
115771
- const map$22 = TableMap.get(tableNode);
115772
- const { width, height } = map$22;
115773
- const newCells = [];
115774
- const cellsToExtend = [];
115775
- const RowType = schema.nodes.tableRow;
115776
- const CellType = schema.nodes.tableCell;
115777
- const sourceFormatting = extractRowTemplateFormatting(sourceRow.firstChild, schema);
115778
- for (let col = 0;col < width; ) {
115779
- if (insertIndex > 0 && insertIndex < height) {
115780
- const indexAbove = (insertIndex - 1) * width + col;
115781
- const indexAtInsert = insertIndex * width + col;
115782
- if (map$22.map[indexAbove] === map$22.map[indexAtInsert]) {
115783
- const cellPos = map$22.map[indexAbove];
115784
- const cell2 = tableNode.nodeAt(cellPos);
115785
- if (cell2) {
115786
- const attrs = cell2.attrs;
115787
- cellsToExtend.push({
115788
- pos: tablePos + 1 + cellPos,
115789
- attrs: {
115790
- ...attrs,
115791
- rowspan: (attrs.rowspan || 1) + 1
115792
- }
115793
- });
115794
- col += attrs.colspan || 1;
115795
- continue;
115796
- }
115797
- }
115798
- }
115799
- const sourceMapIndex = sourceRowIndex * width + col;
115800
- const sourceCellPos = map$22.map[sourceMapIndex];
115801
- const sourceCell = tableNode.nodeAt(sourceCellPos);
115802
- if (!sourceCell) {
115803
- const fallbackCell = sourceRow.firstChild;
115804
- const content$13 = buildFormattedCellBlock(schema, "", extractRowTemplateFormatting(fallbackCell, schema), true);
115805
- const newCell$1 = CellType.createAndFill({
115806
- rowspan: 1,
115807
- colspan: 1
115808
- }, content$13);
115809
- if (newCell$1)
115810
- newCells.push(newCell$1);
115811
- col += 1;
115812
- continue;
115813
- }
115814
- const colspan = sourceCell.attrs.colspan || 1;
115815
- const formatting = extractRowTemplateFormatting(sourceCell, schema);
115816
- const cellAttrs = {
115817
- ...sourceCell.attrs,
115818
- rowspan: 1
115819
- };
115820
- const content3 = buildFormattedCellBlock(schema, "", formatting, true);
115821
- const targetCellType = sourceCell.type.name === "tableHeader" ? CellType : sourceCell.type;
115822
- const normalizedCellAttrs = sourceCell.type.name === "tableHeader" ? normalizeHeaderAttrsForBodyCell(cellAttrs) : cellAttrs;
115823
- const newCell = targetCellType.createAndFill(normalizedCellAttrs, content3);
115824
- if (newCell)
115825
- newCells.push(newCell);
115826
- col += colspan;
115827
- }
115828
- for (const { pos, attrs } of cellsToExtend)
115829
- tr.setNodeMarkup(pos, null, attrs);
115830
- let insertPos = tablePos + 1;
115831
- for (let i$1 = 0;i$1 < insertIndex; i$1++)
115832
- insertPos += tableNode.child(i$1).nodeSize;
115833
- if (newCells.length > 0) {
115834
- const newRow = RowType.createAndFill(null, newCells);
115835
- if (newRow) {
115836
- tr.insert(insertPos, newRow);
115837
- const cursorPos = insertPos + ROW_START_TO_TEXT_OFFSET;
115838
- tr.setSelection(TextSelection2.create(tr.doc, cursorPos));
115839
- const firstTextNode = newCells[0].firstChild?.firstChild;
115840
- if (firstTextNode?.marks?.length)
115841
- tr.setStoredMarks(firstTextNode.marks);
115842
- else if (sourceFormatting.textMarks?.length)
115843
- tr.setStoredMarks(sourceFormatting.textMarks);
115844
- }
115845
- } else if (cellsToExtend.length > 0) {
115846
- const cursorPos = cellsToExtend[0].pos + CELL_TO_TEXT_OFFSET;
115847
- tr.setSelection(TextSelection2.create(tr.doc, cursorPos));
115848
- }
115849
- return true;
115850
- }
115851
115656
  function generateParaId() {
115852
115657
  return Array.from({ length: 8 }, () => Math.floor(Math.random() * 16).toString(16)).join("").toUpperCase();
115853
115658
  }
@@ -115979,6 +115784,47 @@ function removeGridColumnWidth(grid, deleteIndex) {
115979
115784
  columns: colWidths
115980
115785
  });
115981
115786
  }
115787
+ function normalizeCellAttrsForSingleCell(attrs) {
115788
+ const currentColwidth = Array.isArray(attrs.colwidth) ? attrs.colwidth : null;
115789
+ const tableCellProperties = { ...attrs.tableCellProperties ?? {} };
115790
+ delete tableCellProperties.gridSpan;
115791
+ delete tableCellProperties.vMerge;
115792
+ return {
115793
+ ...attrs,
115794
+ colspan: 1,
115795
+ rowspan: 1,
115796
+ colwidth: currentColwidth && currentColwidth.length > 0 ? [currentColwidth[0] ?? 0] : currentColwidth,
115797
+ tableCellProperties
115798
+ };
115799
+ }
115800
+ function normalizeClonedRowInsertCellAttrs(sourceAttrs, fromHeaderToBody) {
115801
+ const normalizedAttrs = {
115802
+ ...sourceAttrs,
115803
+ rowspan: 1
115804
+ };
115805
+ if (fromHeaderToBody && normalizedAttrs.borders == null)
115806
+ delete normalizedAttrs.borders;
115807
+ return normalizedAttrs;
115808
+ }
115809
+ function expandMergedCellIntoSingles({ tr, tablePos, tableNode, cellPos, cellNode, rowIndex, columnIndex, rowspan, colspan, schema }) {
115810
+ const tableStart = tablePos + 1;
115811
+ const map$22 = TableMap.get(tableNode);
115812
+ const resetCell = cellNode.type.create(normalizeCellAttrsForSingleCell(cellNode.attrs), cellNode.content);
115813
+ tr.replaceWith(cellPos, cellPos + cellNode.nodeSize, resetCell);
115814
+ const mapFrom = tr.mapping.maps.length;
115815
+ for (let row2 = rowIndex + rowspan - 1;row2 >= rowIndex; row2--)
115816
+ for (let col = columnIndex + colspan - 1;col >= columnIndex; col--) {
115817
+ if (row2 === rowIndex && col === columnIndex)
115818
+ continue;
115819
+ const newCell = schema.nodes.tableCell.createAndFill();
115820
+ let insertRelPos;
115821
+ if (row2 === rowIndex)
115822
+ insertRelPos = map$22.positionAt(rowIndex, columnIndex, tableNode) + resetCell.nodeSize;
115823
+ else
115824
+ insertRelPos = map$22.positionAt(row2, col, tableNode);
115825
+ tr.insert(tr.mapping.slice(mapFrom).map(tableStart + insertRelPos), newCell);
115826
+ }
115827
+ }
115982
115828
  function isBoundaryEdge(edge) {
115983
115829
  return edge === "top" || edge === "bottom" || edge === "left" || edge === "right" || edge === "insideH" || edge === "insideV";
115984
115830
  }
@@ -116168,6 +116014,186 @@ function removeColumnFromTable(tr, tablePos, col) {
116168
116014
  row2 += rowspan;
116169
116015
  }
116170
116016
  }
116017
+ function insertRowInTable(tr, tablePos, sourceRowIndex, insertIndex, schema) {
116018
+ const tableNode = tr.doc.nodeAt(tablePos);
116019
+ if (!tableNode || tableNode.type.name !== "table")
116020
+ return false;
116021
+ const rowCount = tableNode.childCount;
116022
+ if (rowCount === 0)
116023
+ return false;
116024
+ const map$22 = TableMap.get(tableNode);
116025
+ const boundedInsertIndex = Math.max(0, Math.min(insertIndex, rowCount));
116026
+ const boundedSourceRowIndex = Math.max(0, Math.min(sourceRowIndex, rowCount - 1));
116027
+ const sourceRow = tableNode.child(boundedSourceRowIndex);
116028
+ if (!sourceRow)
116029
+ return false;
116030
+ const rowType = schema.nodes.tableRow;
116031
+ const defaultCellType = schema.nodes.tableCell;
116032
+ if (!rowType || !defaultCellType)
116033
+ return false;
116034
+ const newCells = [];
116035
+ const cellsToExtend = [];
116036
+ for (let col = 0;col < map$22.width; ) {
116037
+ if (boundedInsertIndex > 0 && boundedInsertIndex < map$22.height) {
116038
+ const indexAbove = (boundedInsertIndex - 1) * map$22.width + col;
116039
+ const indexAtInsert = boundedInsertIndex * map$22.width + col;
116040
+ if (map$22.map[indexAbove] === map$22.map[indexAtInsert]) {
116041
+ const spanningPos = map$22.map[indexAbove];
116042
+ const spanningCell = tableNode.nodeAt(spanningPos);
116043
+ if (spanningCell) {
116044
+ const spanningAttrs = spanningCell.attrs;
116045
+ const rowspan = spanningAttrs.rowspan || 1;
116046
+ const colspan$1 = spanningAttrs.colspan || 1;
116047
+ cellsToExtend.push({
116048
+ pos: tablePos + 1 + spanningPos,
116049
+ attrs: {
116050
+ ...spanningAttrs,
116051
+ rowspan: rowspan + 1
116052
+ }
116053
+ });
116054
+ col += colspan$1;
116055
+ continue;
116056
+ }
116057
+ }
116058
+ }
116059
+ const sourceMapIndex = boundedSourceRowIndex * map$22.width + col;
116060
+ const sourceCellPos = map$22.map[sourceMapIndex];
116061
+ const sourceCell = tableNode.nodeAt(sourceCellPos) ?? sourceRow.firstChild;
116062
+ if (!sourceCell) {
116063
+ col += 1;
116064
+ continue;
116065
+ }
116066
+ const colspan = sourceCell.attrs.colspan || 1;
116067
+ const fromHeaderToBody = sourceCell.type.name === "tableHeader";
116068
+ const newCell = (fromHeaderToBody ? defaultCellType : sourceCell.type).createAndFill(normalizeClonedRowInsertCellAttrs(sourceCell.attrs, fromHeaderToBody));
116069
+ if (newCell)
116070
+ newCells.push(newCell);
116071
+ col += colspan;
116072
+ }
116073
+ for (const { pos, attrs } of cellsToExtend)
116074
+ tr.setNodeMarkup(pos, null, attrs);
116075
+ if (newCells.length === 0)
116076
+ return true;
116077
+ const newRow = rowType.createAndFill(null, newCells);
116078
+ if (!newRow)
116079
+ return false;
116080
+ let insertPos = tablePos + 1;
116081
+ for (let row2 = 0;row2 < boundedInsertIndex; row2++)
116082
+ insertPos += tableNode.child(row2).nodeSize;
116083
+ tr.insert(insertPos, newRow);
116084
+ return true;
116085
+ }
116086
+ function addColumnToTableForSplit(tr, tablePos, col, splitRowStart, splitRowEnd) {
116087
+ const tableNode = tr.doc.nodeAt(tablePos);
116088
+ if (!tableNode || tableNode.type.name !== "table")
116089
+ return;
116090
+ const map$22 = TableMap.get(tableNode);
116091
+ const tableStart = tablePos + 1;
116092
+ const mapStart = tr.mapping.maps.length;
116093
+ const widenedOutsideSplit = /* @__PURE__ */ new Set;
116094
+ for (let row2 = 0;row2 < map$22.height; row2++) {
116095
+ const index2 = row2 * map$22.width + col;
116096
+ const pos = map$22.map[index2];
116097
+ const cell2 = tableNode.nodeAt(pos);
116098
+ if (!cell2)
116099
+ continue;
116100
+ if (!(row2 >= splitRowStart && row2 < splitRowEnd) && col > 0) {
116101
+ const leftPos = map$22.map[index2 - 1];
116102
+ const leftCell = tableNode.nodeAt(leftPos);
116103
+ if (leftCell && !widenedOutsideSplit.has(leftPos)) {
116104
+ tr.setNodeMarkup(tr.mapping.slice(mapStart).map(tableStart + leftPos), null, addColSpan(leftCell.attrs, col - map$22.colCount(leftPos)));
116105
+ widenedOutsideSplit.add(leftPos);
116106
+ }
116107
+ row2 += (cell2.attrs?.rowspan || 1) - 1;
116108
+ continue;
116109
+ }
116110
+ if (col > 0 && map$22.map[index2 - 1] === pos) {
116111
+ tr.setNodeMarkup(tr.mapping.slice(mapStart).map(tableStart + pos), null, addColSpan(cell2.attrs, col - map$22.colCount(pos)));
116112
+ row2 += (cell2.attrs.rowspan || 1) - 1;
116113
+ } else {
116114
+ const refType = col > 0 ? tableNode.nodeAt(map$22.map[index2 - 1])?.type ?? cell2.type : cell2.type;
116115
+ const cellPos = map$22.positionAt(row2, col, tableNode);
116116
+ tr.insert(tr.mapping.slice(mapStart).map(tableStart + cellPos), refType.createAndFill());
116117
+ row2 += (cell2.attrs?.rowspan || 1) - 1;
116118
+ }
116119
+ }
116120
+ }
116121
+ function insertRowInTableForSplit(tr, tablePos, sourceRowIndex, insertIndex, splitColStart, splitColEnd, schema) {
116122
+ const tableNode = tr.doc.nodeAt(tablePos);
116123
+ if (!tableNode || tableNode.type.name !== "table")
116124
+ return false;
116125
+ const rowCount = tableNode.childCount;
116126
+ if (rowCount === 0)
116127
+ return false;
116128
+ const map$22 = TableMap.get(tableNode);
116129
+ const boundedInsertIndex = Math.max(0, Math.min(insertIndex, rowCount));
116130
+ const boundedSourceRowIndex = Math.max(0, Math.min(sourceRowIndex, rowCount - 1));
116131
+ const sourceRow = tableNode.child(boundedSourceRowIndex);
116132
+ if (!sourceRow)
116133
+ return false;
116134
+ const rowType = schema.nodes.tableRow;
116135
+ const defaultCellType = schema.nodes.tableCell;
116136
+ if (!rowType || !defaultCellType)
116137
+ return false;
116138
+ const newCells = [];
116139
+ const cellsToExtend = /* @__PURE__ */ new Map;
116140
+ for (let col = 0;col < map$22.width; ) {
116141
+ if (boundedInsertIndex > 0 && boundedInsertIndex < map$22.height) {
116142
+ const indexAbove = (boundedInsertIndex - 1) * map$22.width + col;
116143
+ const indexAtInsert = boundedInsertIndex * map$22.width + col;
116144
+ if (map$22.map[indexAbove] === map$22.map[indexAtInsert]) {
116145
+ const spanningPos = map$22.map[indexAbove];
116146
+ const spanningCell = tableNode.nodeAt(spanningPos);
116147
+ if (spanningCell) {
116148
+ const spanningAttrs = spanningCell.attrs;
116149
+ const rowspan = spanningAttrs.rowspan || 1;
116150
+ const colspan$1 = spanningAttrs.colspan || 1;
116151
+ cellsToExtend.set(tablePos + 1 + spanningPos, {
116152
+ ...spanningAttrs,
116153
+ rowspan: rowspan + 1
116154
+ });
116155
+ col += colspan$1;
116156
+ continue;
116157
+ }
116158
+ }
116159
+ }
116160
+ const sourceMapIndex = boundedSourceRowIndex * map$22.width + col;
116161
+ const sourceCellPos = map$22.map[sourceMapIndex];
116162
+ const sourceCell = tableNode.nodeAt(sourceCellPos) ?? sourceRow.firstChild;
116163
+ if (!sourceCell) {
116164
+ col += 1;
116165
+ continue;
116166
+ }
116167
+ const sourceAttrs = sourceCell.attrs;
116168
+ const colspan = sourceAttrs.colspan || 1;
116169
+ if (!(col < splitColEnd && col + colspan > splitColStart)) {
116170
+ const sourceRowspan = sourceAttrs.rowspan || 1;
116171
+ cellsToExtend.set(tablePos + 1 + sourceCellPos, {
116172
+ ...sourceAttrs,
116173
+ rowspan: sourceRowspan + 1
116174
+ });
116175
+ col += colspan;
116176
+ continue;
116177
+ }
116178
+ const fromHeaderToBody = sourceCell.type.name === "tableHeader";
116179
+ const newCell = (fromHeaderToBody ? defaultCellType : sourceCell.type).createAndFill(normalizeClonedRowInsertCellAttrs(sourceAttrs, fromHeaderToBody));
116180
+ if (newCell)
116181
+ newCells.push(newCell);
116182
+ col += colspan;
116183
+ }
116184
+ for (const [pos, attrs] of cellsToExtend.entries())
116185
+ tr.setNodeMarkup(pos, null, attrs);
116186
+ if (newCells.length === 0)
116187
+ return true;
116188
+ const newRow = rowType.createAndFill(null, newCells);
116189
+ if (!newRow)
116190
+ return false;
116191
+ let insertPos = tablePos + 1;
116192
+ for (let row2 = 0;row2 < boundedInsertIndex; row2++)
116193
+ insertPos += tableNode.child(row2).nodeSize;
116194
+ tr.insert(insertPos, newRow);
116195
+ return true;
116196
+ }
116171
116197
  function tablesDeleteAdapter(editor, input2, options) {
116172
116198
  const mode = options?.changeMode ?? "direct";
116173
116199
  if (mode === "tracked")
@@ -116337,14 +116363,8 @@ function tablesInsertRowAdapter(editor, input2, options) {
116337
116363
  break;
116338
116364
  const insertIdx = input2.position === "above" ? rowIndex + i$1 : rowIndex + 1 + i$1;
116339
116365
  const sourceIdx = input2.position === "above" ? rowIndex + i$1 : rowIndex;
116340
- insertRowAtIndex({
116341
- tr,
116342
- tablePos,
116343
- tableNode: currentTableNode,
116344
- sourceRowIndex: Math.min(sourceIdx, currentTableNode.childCount - 1),
116345
- insertIndex: Math.min(insertIdx, currentTableNode.childCount),
116346
- schema
116347
- });
116366
+ if (!insertRowInTable(tr, tablePos, Math.min(sourceIdx, currentTableNode.childCount - 1), Math.min(insertIdx, currentTableNode.childCount), schema))
116367
+ return toTableFailure("INVALID_TARGET", "Row insertion could not be applied.");
116348
116368
  }
116349
116369
  if (mode === "tracked")
116350
116370
  applyTrackedMutationMeta(tr);
@@ -117156,35 +117176,21 @@ function tablesUnmergeCellsAdapter(editor, input2, options) {
117156
117176
  return buildTableSuccess(table2.address);
117157
117177
  try {
117158
117178
  const tr = editor.state.tr;
117159
- const tableStart = table2.candidate.pos + 1;
117179
+ const tablePos = table2.candidate.pos;
117160
117180
  const tableNode = table2.candidate.node;
117161
- const map$22 = TableMap.get(tableNode);
117162
117181
  const schema = editor.state.schema;
117163
- const currentColwidth = Array.isArray(attrs.colwidth) ? attrs.colwidth : null;
117164
- const tableCellProperties = { ...attrs.tableCellProperties ?? {} };
117165
- delete tableCellProperties.gridSpan;
117166
- delete tableCellProperties.vMerge;
117167
- const resetCell = cellNode.type.create({
117168
- ...attrs,
117169
- colspan: 1,
117170
- rowspan: 1,
117171
- colwidth: currentColwidth && currentColwidth.length > 0 ? [currentColwidth[0] ?? 0] : currentColwidth,
117172
- tableCellProperties
117173
- }, cellNode.content);
117174
- tr.replaceWith(cellPos, cellPos + cellNode.nodeSize, resetCell);
117175
- const mapFrom = tr.mapping.maps.length;
117176
- for (let row2 = rowIndex + rowspan - 1;row2 >= rowIndex; row2--)
117177
- for (let col = columnIndex + colspan - 1;col >= columnIndex; col--) {
117178
- if (row2 === rowIndex && col === columnIndex)
117179
- continue;
117180
- const newCell = schema.nodes.tableCell.createAndFill();
117181
- let insertRelPos;
117182
- if (row2 === rowIndex)
117183
- insertRelPos = map$22.positionAt(rowIndex, columnIndex, tableNode) + resetCell.nodeSize;
117184
- else
117185
- insertRelPos = map$22.positionAt(row2, col, tableNode);
117186
- tr.insert(tr.mapping.slice(mapFrom).map(tableStart + insertRelPos), newCell);
117187
- }
117182
+ expandMergedCellIntoSingles({
117183
+ tr,
117184
+ tablePos,
117185
+ tableNode,
117186
+ cellPos,
117187
+ cellNode,
117188
+ rowIndex,
117189
+ columnIndex,
117190
+ rowspan,
117191
+ colspan,
117192
+ schema
117193
+ });
117188
117194
  applyDirectMutationMeta(tr);
117189
117195
  editor.dispatch(tr);
117190
117196
  clearIndexCache(editor);
@@ -117201,37 +117207,74 @@ function tablesSplitCellAdapter(editor, input2, options) {
117201
117207
  const attrs = cellNode.attrs;
117202
117208
  const currentColspan = attrs.colspan || 1;
117203
117209
  const currentRowspan = attrs.rowspan || 1;
117204
- if ((currentColspan > 1 || currentRowspan > 1) && input2.rows === currentRowspan && input2.columns === currentColspan)
117205
- return tablesUnmergeCellsAdapter(editor, input2, options);
117206
117210
  if (input2.rows === 1 && input2.columns === 1 && currentColspan === 1 && currentRowspan === 1)
117207
117211
  return toTableFailure("NO_OP", "Cell is already a single cell and split target is 1×1.");
117208
117212
  if (options?.dryRun)
117209
117213
  return buildTableSuccess(table2.address);
117210
117214
  try {
117211
117215
  const tr = editor.state.tr;
117212
- const tableStart = table2.candidate.pos + 1;
117213
- const tableNode = table2.candidate.node;
117214
- const map$22 = TableMap.get(tableNode);
117216
+ const tablePos = table2.candidate.pos;
117215
117217
  const schema = editor.state.schema;
117216
- const targetColspan = Math.max(input2.columns, currentColspan);
117217
- const targetRowspan = Math.max(input2.rows, currentRowspan);
117218
- const splitAttrs = {
117219
- ...attrs,
117220
- colspan: 1,
117221
- rowspan: 1
117222
- };
117223
- tr.setNodeMarkup(cellPos, null, splitAttrs);
117224
- const mapFrom = tr.mapping.maps.length;
117225
- for (let row2 = rowIndex + targetRowspan - 1;row2 >= rowIndex; row2--)
117226
- for (let col = columnIndex + targetColspan - 1;col >= columnIndex; col--) {
117227
- if (row2 === rowIndex && col === columnIndex)
117228
- continue;
117229
- const newCell = schema.nodes.tableCell.createAndFill();
117230
- if (row2 < map$22.height && col < map$22.width) {
117231
- const insertPos = map$22.positionAt(row2, col, tableNode);
117232
- tr.insert(tr.mapping.slice(mapFrom).map(tableStart + insertPos), newCell);
117233
- }
117234
- }
117218
+ const targetColumns = Math.max(input2.columns, currentColspan);
117219
+ const targetRows = Math.max(input2.rows, currentRowspan);
117220
+ const additionalColumns = Math.max(0, targetColumns - currentColspan);
117221
+ const additionalRows = Math.max(0, targetRows - currentRowspan);
117222
+ let updatedGrid = table2.candidate.node.attrs.grid;
117223
+ if (currentColspan > 1 || currentRowspan > 1) {
117224
+ const currentTableNode = tr.doc.nodeAt(tablePos);
117225
+ if (!currentTableNode || currentTableNode.type.name !== "table")
117226
+ return toTableFailure("INVALID_TARGET", "Cell split target table is unavailable.");
117227
+ const currentCellPos = tr.mapping.map(cellPos, 1);
117228
+ const currentCellNode = tr.doc.nodeAt(currentCellPos);
117229
+ if (!currentCellNode || currentCellNode.type.name !== "tableCell" && currentCellNode.type.name !== "tableHeader")
117230
+ return toTableFailure("INVALID_TARGET", "Split target cell is unavailable.");
117231
+ expandMergedCellIntoSingles({
117232
+ tr,
117233
+ tablePos,
117234
+ tableNode: currentTableNode,
117235
+ cellPos: currentCellPos,
117236
+ cellNode: currentCellNode,
117237
+ rowIndex,
117238
+ columnIndex,
117239
+ rowspan: currentRowspan,
117240
+ colspan: currentColspan,
117241
+ schema
117242
+ });
117243
+ }
117244
+ for (let columnOffset = 0;columnOffset < additionalColumns; columnOffset++) {
117245
+ const insertColumnIndex = columnIndex + currentColspan + columnOffset;
117246
+ addColumnToTableForSplit(tr, tablePos, insertColumnIndex, rowIndex, rowIndex + targetRows);
117247
+ updatedGrid = insertGridColumnWidth(updatedGrid, insertColumnIndex) ?? updatedGrid;
117248
+ }
117249
+ for (let rowOffset = 0;rowOffset < additionalRows; rowOffset++) {
117250
+ const currentTableNode = tr.doc.nodeAt(tablePos);
117251
+ if (!currentTableNode || currentTableNode.type.name !== "table")
117252
+ return toTableFailure("INVALID_TARGET", "Cell split target table is unavailable.");
117253
+ const insertIndex = rowIndex + currentRowspan + rowOffset;
117254
+ const boundedInsertIndex = Math.max(0, Math.min(insertIndex, currentTableNode.childCount));
117255
+ if (!insertRowInTableForSplit(tr, tablePos, Math.max(0, Math.min(boundedInsertIndex - 1, currentTableNode.childCount - 1)), boundedInsertIndex, columnIndex, columnIndex + targetColumns, schema))
117256
+ return toTableFailure("INVALID_TARGET", "Cell split could not insert required rows.");
117257
+ }
117258
+ const finalTableNode = tr.doc.nodeAt(tablePos);
117259
+ if (!finalTableNode || finalTableNode.type.name !== "table")
117260
+ return toTableFailure("INVALID_TARGET", "Cell split target table is unavailable.");
117261
+ let finalTargetCellPos = tr.mapping.map(cellPos, 1);
117262
+ let finalTargetCell = tr.doc.nodeAt(finalTargetCellPos);
117263
+ if (!finalTargetCell || finalTargetCell.type.name !== "tableCell" && finalTargetCell.type.name !== "tableHeader") {
117264
+ finalTargetCellPos = tablePos + 1 + TableMap.get(finalTableNode).positionAt(rowIndex, columnIndex, finalTableNode);
117265
+ finalTargetCell = tr.doc.nodeAt(finalTargetCellPos);
117266
+ }
117267
+ if (!finalTargetCell || finalTargetCell.type.name !== "tableCell" && finalTargetCell.type.name !== "tableHeader")
117268
+ return toTableFailure("INVALID_TARGET", "Split target cell is unavailable.");
117269
+ tr.setNodeMarkup(finalTargetCellPos, null, normalizeCellAttrsForSingleCell(finalTargetCell.attrs));
117270
+ if (updatedGrid) {
117271
+ const currentTableAttrs = finalTableNode.attrs;
117272
+ tr.setNodeMarkup(tablePos, null, {
117273
+ ...currentTableAttrs,
117274
+ grid: updatedGrid,
117275
+ userEdited: true
117276
+ });
117277
+ }
117235
117278
  applyDirectMutationMeta(tr);
117236
117279
  editor.dispatch(tr);
117237
117280
  clearIndexCache(editor);
@@ -129117,7 +129160,8 @@ function computeSelectionRectsFromDom(options, from$12, to) {
129117
129160
  const sliceTo = Math.min(end$1, pagePmEnd);
129118
129161
  if (sliceFrom >= sliceTo)
129119
129162
  continue;
129120
- let sliceEntries = options.domPositionIndex.findEntriesInRange(sliceFrom, sliceTo);
129163
+ const rangeOpts = { boundaryInclusive: true };
129164
+ let sliceEntries = options.domPositionIndex.findEntriesInRange(sliceFrom, sliceTo, rangeOpts);
129121
129165
  if (sliceEntries.length === 0)
129122
129166
  continue;
129123
129167
  const filterPageEntries = (entries) => entries.filter((entry) => pageEl.contains(entry.el));
@@ -129125,7 +129169,7 @@ function computeSelectionRectsFromDom(options, from$12, to) {
129125
129169
  if (pageEntries.length === 0 && !rebuiltOnce) {
129126
129170
  options.rebuildDomPositionIndex();
129127
129171
  rebuiltOnce = true;
129128
- sliceEntries = options.domPositionIndex.findEntriesInRange(sliceFrom, sliceTo);
129172
+ sliceEntries = options.domPositionIndex.findEntriesInRange(sliceFrom, sliceTo, rangeOpts);
129129
129173
  pageEntries = filterPageEntries(sliceEntries);
129130
129174
  }
129131
129175
  if (pageEntries.length === 0)
@@ -129149,7 +129193,7 @@ function computeSelectionRectsFromDom(options, from$12, to) {
129149
129193
  if ((!startEntry?.el?.isConnected || !endEntry?.el?.isConnected) && !rebuiltOnce) {
129150
129194
  options.rebuildDomPositionIndex();
129151
129195
  rebuiltOnce = true;
129152
- sliceEntries = options.domPositionIndex.findEntriesInRange(sliceFrom, sliceTo);
129196
+ sliceEntries = options.domPositionIndex.findEntriesInRange(sliceFrom, sliceTo, rangeOpts);
129153
129197
  pageEntries = filterPageEntries(sliceEntries);
129154
129198
  if (pageEntries.length === 0)
129155
129199
  continue;
@@ -134634,7 +134678,7 @@ function clickToPosition(layout, blocks2, measures, containerPoint, domContainer
134634
134678
  }
134635
134679
  logClickStage("log", "geometry-attempt", { trying: "geometry-based mapping" });
134636
134680
  let pageHit = null;
134637
- let isContainerPointPageRelative = false;
134681
+ let domPageRelativeY;
134638
134682
  if (domContainer != null && clientX != null && clientY != null) {
134639
134683
  const pageEl = findPageElement(domContainer, clientX, clientY);
134640
134684
  if (pageEl) {
@@ -134644,7 +134688,11 @@ function clickToPosition(layout, blocks2, measures, containerPoint, domContainer
134644
134688
  pageIndex: domPageIndex,
134645
134689
  page: layout.pages[domPageIndex]
134646
134690
  };
134647
- isContainerPointPageRelative = true;
134691
+ const pageRect = pageEl.getBoundingClientRect();
134692
+ const layoutPageHeight = pageHit.page.size?.h ?? layout.pageSize.h;
134693
+ const domPageHeight = pageRect.height;
134694
+ const effectiveZoom = domPageHeight > 0 && layoutPageHeight > 0 ? domPageHeight / layoutPageHeight : 1;
134695
+ domPageRelativeY = (clientY - pageRect.top) / effectiveZoom;
134648
134696
  }
134649
134697
  }
134650
134698
  }
@@ -134654,16 +134702,11 @@ function clickToPosition(layout, blocks2, measures, containerPoint, domContainer
134654
134702
  logClickStage("warn", "no-page", { point: containerPoint });
134655
134703
  return null;
134656
134704
  }
134657
- let pageRelativePoint;
134658
- if (isContainerPointPageRelative)
134659
- pageRelativePoint = containerPoint;
134660
- else {
134661
- const pageTopY = geometryHelper ? geometryHelper.getPageTop(pageHit.pageIndex) : calculatePageTopFallback(layout, pageHit.pageIndex);
134662
- pageRelativePoint = {
134663
- x: containerPoint.x,
134664
- y: containerPoint.y - pageTopY
134665
- };
134666
- }
134705
+ const pageTopY = geometryHelper ? geometryHelper.getPageTop(pageHit.pageIndex) : calculatePageTopFallback(layout, pageHit.pageIndex);
134706
+ const pageRelativePoint = {
134707
+ x: containerPoint.x,
134708
+ y: domPageRelativeY ?? containerPoint.y - pageTopY
134709
+ };
134667
134710
  logClickStage("log", "page-hit", {
134668
134711
  pageIndex: pageHit.pageIndex,
134669
134712
  pageRelativePoint
@@ -138477,6 +138520,201 @@ function cellWrapping($pos) {
138477
138520
  }
138478
138521
  return null;
138479
138522
  }
138523
+ function resolveTable2(tr, tablePos, tableNode) {
138524
+ if (tableNode && tableNode.type && tableNode.type.name === "table")
138525
+ return tableNode;
138526
+ if (typeof tablePos === "number") {
138527
+ const current = tr.doc.nodeAt(tablePos);
138528
+ if (current && current.type.name === "table")
138529
+ return current;
138530
+ }
138531
+ return null;
138532
+ }
138533
+ function pickTemplateRowForAppend(tableNode, schema) {
138534
+ const RowType = schema.nodes.tableRow;
138535
+ const rows = [];
138536
+ tableNode.descendants((child) => {
138537
+ if (child.type === RowType)
138538
+ rows.push(child);
138539
+ });
138540
+ if (!rows.length)
138541
+ return null;
138542
+ for (let i$1 = rows.length - 1;i$1 >= 0; i$1--) {
138543
+ const r$1 = rows[i$1];
138544
+ if (r$1.content?.content?.some((c$3) => c$3.type.name === "tableCell"))
138545
+ return r$1;
138546
+ }
138547
+ return rows[rows.length - 1];
138548
+ }
138549
+ function extractRowTemplateFormatting(cellNode, schema) {
138550
+ const ParagraphType = schema.nodes.paragraph;
138551
+ let blockType = ParagraphType;
138552
+ let blockAttrs = null;
138553
+ let textMarks = [];
138554
+ const blocks2 = cellNode?.content?.content || [];
138555
+ for (const block of blocks2) {
138556
+ if (block.type === ParagraphType || block.type.name === "heading") {
138557
+ blockType = block.type || ParagraphType;
138558
+ blockAttrs = block.attrs || null;
138559
+ }
138560
+ let foundText = null;
138561
+ block.descendants?.((n) => {
138562
+ if (!foundText && n.isText)
138563
+ foundText = n;
138564
+ });
138565
+ if (foundText) {
138566
+ textMarks = foundText.marks ? Array.from(foundText.marks) : [];
138567
+ break;
138568
+ }
138569
+ }
138570
+ if (!blockType || !blockType.validContent)
138571
+ blockType = ParagraphType;
138572
+ return {
138573
+ blockType,
138574
+ blockAttrs,
138575
+ textMarks
138576
+ };
138577
+ }
138578
+ function buildFormattedCellBlock(schema, value, { blockType, blockAttrs, textMarks }, copyRowStyle = false) {
138579
+ const text5 = typeof value === "string" ? value : value == null ? "" : String(value);
138580
+ const type = blockType || schema.nodes.paragraph;
138581
+ const marks = copyRowStyle ? textMarks || [] : [];
138582
+ if (!text5) {
138583
+ const content3 = marks.length > 0 ? schema.text(ZERO_WIDTH_SPACE, marks) : null;
138584
+ return type.createAndFill(blockAttrs || null, content3);
138585
+ }
138586
+ const textNode = schema.text(text5, marks);
138587
+ return type.createAndFill(blockAttrs || null, textNode);
138588
+ }
138589
+ function buildRowFromTemplateRow({ schema, tableNode, templateRow, values, copyRowStyle = false }) {
138590
+ const RowType = schema.nodes.tableRow;
138591
+ const CellType = schema.nodes.tableCell;
138592
+ const HeaderType = schema.nodes.tableHeader;
138593
+ const totalColumns = TableMap.get(tableNode).width;
138594
+ const byColumns = Array.isArray(values) && values.length === totalColumns;
138595
+ const newCells = [];
138596
+ let columnCursor = 0;
138597
+ templateRow.content.content.forEach((cellNode, cellIndex) => {
138598
+ const isHeaderCell = cellNode.type === HeaderType;
138599
+ const targetCellType = isHeaderCell ? CellType : cellNode.type;
138600
+ const attrs = isHeaderCell ? normalizeHeaderAttrsForBodyCell({ ...cellNode.attrs }) : { ...cellNode.attrs };
138601
+ const formatting = extractRowTemplateFormatting(cellNode, schema);
138602
+ let cellValue = "";
138603
+ if (byColumns) {
138604
+ const span = Math.max(1, attrs.colspan || 1);
138605
+ cellValue = values[columnCursor] ?? "";
138606
+ columnCursor += span;
138607
+ } else
138608
+ cellValue = Array.isArray(values) ? values[cellIndex] ?? "" : "";
138609
+ const content3 = buildFormattedCellBlock(schema, cellValue, formatting, copyRowStyle);
138610
+ const newCell = targetCellType.createAndFill(attrs, content3);
138611
+ if (newCell)
138612
+ newCells.push(newCell);
138613
+ });
138614
+ return RowType.createAndFill(null, newCells);
138615
+ }
138616
+ function insertRowsAtTableEnd({ tr, tablePos, tableNode, rows }) {
138617
+ if (!rows || !rows.length)
138618
+ return;
138619
+ const RowTypeName = "tableRow";
138620
+ let lastRowRelPos = 0;
138621
+ let lastRowNode = null;
138622
+ tableNode.descendants((child, relPos) => {
138623
+ if (child.type.name === RowTypeName) {
138624
+ lastRowRelPos = relPos;
138625
+ lastRowNode = child;
138626
+ }
138627
+ });
138628
+ if (!lastRowNode)
138629
+ return;
138630
+ const lastRowAbsEnd = tablePos + 1 + lastRowRelPos + lastRowNode.nodeSize;
138631
+ const frag = Fragment.fromArray(rows);
138632
+ tr.insert(lastRowAbsEnd, frag);
138633
+ }
138634
+ function insertRowAtIndex({ tr, tablePos, tableNode, sourceRowIndex, insertIndex, schema }) {
138635
+ const sourceRow = tableNode.child(sourceRowIndex);
138636
+ if (!sourceRow)
138637
+ return false;
138638
+ const map$22 = TableMap.get(tableNode);
138639
+ const { width, height } = map$22;
138640
+ const newCells = [];
138641
+ const cellsToExtend = [];
138642
+ const RowType = schema.nodes.tableRow;
138643
+ const CellType = schema.nodes.tableCell;
138644
+ const sourceFormatting = extractRowTemplateFormatting(sourceRow.firstChild, schema);
138645
+ for (let col = 0;col < width; ) {
138646
+ if (insertIndex > 0 && insertIndex < height) {
138647
+ const indexAbove = (insertIndex - 1) * width + col;
138648
+ const indexAtInsert = insertIndex * width + col;
138649
+ if (map$22.map[indexAbove] === map$22.map[indexAtInsert]) {
138650
+ const cellPos = map$22.map[indexAbove];
138651
+ const cell2 = tableNode.nodeAt(cellPos);
138652
+ if (cell2) {
138653
+ const attrs = cell2.attrs;
138654
+ cellsToExtend.push({
138655
+ pos: tablePos + 1 + cellPos,
138656
+ attrs: {
138657
+ ...attrs,
138658
+ rowspan: (attrs.rowspan || 1) + 1
138659
+ }
138660
+ });
138661
+ col += attrs.colspan || 1;
138662
+ continue;
138663
+ }
138664
+ }
138665
+ }
138666
+ const sourceMapIndex = sourceRowIndex * width + col;
138667
+ const sourceCellPos = map$22.map[sourceMapIndex];
138668
+ const sourceCell = tableNode.nodeAt(sourceCellPos);
138669
+ if (!sourceCell) {
138670
+ const fallbackCell = sourceRow.firstChild;
138671
+ const content$13 = buildFormattedCellBlock(schema, "", extractRowTemplateFormatting(fallbackCell, schema), true);
138672
+ const newCell$1 = CellType.createAndFill({
138673
+ rowspan: 1,
138674
+ colspan: 1
138675
+ }, content$13);
138676
+ if (newCell$1)
138677
+ newCells.push(newCell$1);
138678
+ col += 1;
138679
+ continue;
138680
+ }
138681
+ const colspan = sourceCell.attrs.colspan || 1;
138682
+ const formatting = extractRowTemplateFormatting(sourceCell, schema);
138683
+ const cellAttrs = {
138684
+ ...sourceCell.attrs,
138685
+ rowspan: 1
138686
+ };
138687
+ const content3 = buildFormattedCellBlock(schema, "", formatting, true);
138688
+ const targetCellType = sourceCell.type.name === "tableHeader" ? CellType : sourceCell.type;
138689
+ const normalizedCellAttrs = sourceCell.type.name === "tableHeader" ? normalizeHeaderAttrsForBodyCell(cellAttrs) : cellAttrs;
138690
+ const newCell = targetCellType.createAndFill(normalizedCellAttrs, content3);
138691
+ if (newCell)
138692
+ newCells.push(newCell);
138693
+ col += colspan;
138694
+ }
138695
+ for (const { pos, attrs } of cellsToExtend)
138696
+ tr.setNodeMarkup(pos, null, attrs);
138697
+ let insertPos = tablePos + 1;
138698
+ for (let i$1 = 0;i$1 < insertIndex; i$1++)
138699
+ insertPos += tableNode.child(i$1).nodeSize;
138700
+ if (newCells.length > 0) {
138701
+ const newRow = RowType.createAndFill(null, newCells);
138702
+ if (newRow) {
138703
+ tr.insert(insertPos, newRow);
138704
+ const cursorPos = insertPos + ROW_START_TO_TEXT_OFFSET;
138705
+ tr.setSelection(TextSelection2.create(tr.doc, cursorPos));
138706
+ const firstTextNode = newCells[0].firstChild?.firstChild;
138707
+ if (firstTextNode?.marks?.length)
138708
+ tr.setStoredMarks(firstTextNode.marks);
138709
+ else if (sourceFormatting.textMarks?.length)
138710
+ tr.setStoredMarks(sourceFormatting.textMarks);
138711
+ }
138712
+ } else if (cellsToExtend.length > 0) {
138713
+ const cursorPos = cellsToExtend[0].pos + CELL_TO_TEXT_OFFSET;
138714
+ tr.setSelection(TextSelection2.create(tr.doc, cursorPos));
138715
+ }
138716
+ return true;
138717
+ }
138480
138718
  function getCellType({ node: node3, state }) {
138481
138719
  return tableNodeTypes(state.schema)[node3.type.spec.tableRole];
138482
138720
  }
@@ -154732,13 +154970,7 @@ var Node$13 = class Node$14 {
154732
154970
  console.warn("Failed to initialize developer tools:", error);
154733
154971
  }
154734
154972
  }
154735
- }, BLANK_DOCX_DATA_URI = `data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,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`, LINK_MARK_NAME = "link", COMMENT_MARK_NAME, SUPPORTED_INLINE_TYPES, DocumentApiAdapterError, ALIAS_ELIGIBLE_TYPES, cacheByEditor, DEFAULT_TOC_CONFIG, SWITCH_PATTERN, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, PlanError, revisionMap, subscribedEditors, everSyncedProviders, REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, REQUIRED_HELPERS, SUPPORTED_STEP_OPS, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, registry, TOGGLE_MARK_SPECS, CORE_MARK_NAMES, METADATA_MARK_NAMES, VALID_CREATE_POSITIONS, REF_HANDLERS, STEP_INTERACTION_MATRIX, MATRIX_EXEMPT_OPS, DEFAULT_INLINE_POLICY, CORE_SET_MARK_KEYS, BOOLEAN_INLINE_MARK_KEYS, TEXT_STYLE_KEYS, PRESERVE_RUN_PROPERTIES_META_KEY = "sdPreserveRunPropertiesKeys", OBJECT_REPLACEMENT_CHAR = "", STUB_WHERE, FALLBACK_STORE_KEY = "__documentApiComments", STYLES_PART = "word/styles.xml", PROPERTIES_KEY_BY_CHANNEL, XML_PATH_BY_CHANNEL, DERIVED_ID_LENGTH = 24, groupedCache, SUPPORTED_NODE_TYPES, REJECTED_NODE_TYPES, CSS_NAMED_COLORS, ZERO_WIDTH_SPACE = "​", ROW_START_TO_TEXT_OFFSET = 3, CELL_TO_TEXT_OFFSET = 2, normalizeHeaderAttrsForBodyCell = (attrs) => {
154736
- if (attrs?.borders !== null)
154737
- return attrs;
154738
- const nextAttrs = { ...attrs };
154739
- delete nextAttrs.borders;
154740
- return nextAttrs;
154741
- }, POINTS_TO_PIXELS, POINTS_TO_TWIPS = 20, PIXELS_TO_TWIPS, DEFAULT_TABLE_GRID_WIDTH_TWIPS = 1500, TABLE_ADAPTER_DISPATCH, ROW_OPS, TABLE_SCOPED_OPS, registered = false, SETTINGS_PART_PATH = "word/settings.xml", SectionType, DEFAULT_PARAGRAPH_SECTION_TYPE, DEFAULT_BODY_SECTION_TYPE, TWIPS_PER_INCH$2 = 1440, PX_PER_INCH$2 = 96, DEFAULT_COLUMN_GAP_INCHES = 0.5, DEFAULT_HEADER_FOOTER_MARGIN_PX = 0, LINE_NUMBER_RESTART_VALUES, PAGE_NUMBER_FORMAT_VALUES, SECTION_ORIENTATION_VALUES, SECTION_VERTICAL_ALIGN_VALUES, readSectPrHeaderFooterRefs, PIXELS_PER_INCH$2 = 96, DOCUMENT_RELS_PATH = "word/_rels/document.xml.rels", RELS_XMLNS2 = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", WORDPROCESSINGML_XMLNS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main", OFFICE_DOCUMENT_RELS_XMLNS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", RELATIONSHIP_ID_PATTERN, HEADER_FILE_PATTERN, FOOTER_FILE_PATTERN, NO_ENTRIES_PLACEHOLDER, empty_exports, init_empty, PIXELS_PER_INCH$1 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, Editor, ContextMenuPluginKey, MENU_OFFSET_X = 0, MENU_OFFSET_Y = 28, CONTEXT_MENU_OFFSET_X = 10, CONTEXT_MENU_OFFSET_Y = 10, SLASH_COOLDOWN_MS = 5000, ContextMenu, SearchQuery = class {
154973
+ }, BLANK_DOCX_DATA_URI = `data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,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`, LINK_MARK_NAME = "link", COMMENT_MARK_NAME, SUPPORTED_INLINE_TYPES, DocumentApiAdapterError, ALIAS_ELIGIBLE_TYPES, cacheByEditor, DEFAULT_TOC_CONFIG, SWITCH_PATTERN, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, PlanError, revisionMap, subscribedEditors, everSyncedProviders, REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, REQUIRED_HELPERS, SUPPORTED_STEP_OPS, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, registry, TOGGLE_MARK_SPECS, CORE_MARK_NAMES, METADATA_MARK_NAMES, VALID_CREATE_POSITIONS, REF_HANDLERS, STEP_INTERACTION_MATRIX, MATRIX_EXEMPT_OPS, DEFAULT_INLINE_POLICY, CORE_SET_MARK_KEYS, BOOLEAN_INLINE_MARK_KEYS, TEXT_STYLE_KEYS, PRESERVE_RUN_PROPERTIES_META_KEY = "sdPreserveRunPropertiesKeys", OBJECT_REPLACEMENT_CHAR = "", STUB_WHERE, FALLBACK_STORE_KEY = "__documentApiComments", STYLES_PART = "word/styles.xml", PROPERTIES_KEY_BY_CHANNEL, XML_PATH_BY_CHANNEL, DERIVED_ID_LENGTH = 24, groupedCache, SUPPORTED_NODE_TYPES, REJECTED_NODE_TYPES, CSS_NAMED_COLORS, POINTS_TO_PIXELS, POINTS_TO_TWIPS = 20, PIXELS_TO_TWIPS, DEFAULT_TABLE_GRID_WIDTH_TWIPS = 1500, TABLE_ADAPTER_DISPATCH, ROW_OPS, TABLE_SCOPED_OPS, registered = false, SETTINGS_PART_PATH = "word/settings.xml", SectionType, DEFAULT_PARAGRAPH_SECTION_TYPE, DEFAULT_BODY_SECTION_TYPE, TWIPS_PER_INCH$2 = 1440, PX_PER_INCH$2 = 96, DEFAULT_COLUMN_GAP_INCHES = 0.5, DEFAULT_HEADER_FOOTER_MARGIN_PX = 0, LINE_NUMBER_RESTART_VALUES, PAGE_NUMBER_FORMAT_VALUES, SECTION_ORIENTATION_VALUES, SECTION_VERTICAL_ALIGN_VALUES, readSectPrHeaderFooterRefs, PIXELS_PER_INCH$2 = 96, DOCUMENT_RELS_PATH = "word/_rels/document.xml.rels", RELS_XMLNS2 = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", WORDPROCESSINGML_XMLNS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main", OFFICE_DOCUMENT_RELS_XMLNS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", RELATIONSHIP_ID_PATTERN, HEADER_FILE_PATTERN, FOOTER_FILE_PATTERN, NO_ENTRIES_PLACEHOLDER, empty_exports, init_empty, PIXELS_PER_INCH$1 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, Editor, ContextMenuPluginKey, MENU_OFFSET_X = 0, MENU_OFFSET_Y = 28, CONTEXT_MENU_OFFSET_X = 10, CONTEXT_MENU_OFFSET_Y = 10, SLASH_COOLDOWN_MS = 5000, ContextMenu, SearchQuery = class {
154742
154974
  constructor(config2) {
154743
154975
  this.search = config2.search;
154744
154976
  this.caseSensitive = !!config2.caseSensitive;
@@ -159578,7 +159810,7 @@ var Node$13 = class Node$14 {
159578
159810
  findElementAtPosition(pos) {
159579
159811
  return this.findEntryAtPosition(pos)?.el ?? null;
159580
159812
  }
159581
- findEntriesInRange(from$12, to) {
159813
+ findEntriesInRange(from$12, to, options) {
159582
159814
  if (!Number.isFinite(from$12) || !Number.isFinite(to))
159583
159815
  return [];
159584
159816
  const start$1 = Math.min(from$12, to);
@@ -159588,6 +159820,7 @@ var Node$13 = class Node$14 {
159588
159820
  const entries = this.#entries;
159589
159821
  if (entries.length === 0)
159590
159822
  return [];
159823
+ const inclusive = options?.boundaryInclusive === true;
159591
159824
  let lo = 0;
159592
159825
  let hi = entries.length;
159593
159826
  while (lo < hi) {
@@ -159603,9 +159836,9 @@ var Node$13 = class Node$14 {
159603
159836
  const out = [];
159604
159837
  for (let i$1 = idx;i$1 < entries.length; i$1 += 1) {
159605
159838
  const entry = entries[i$1];
159606
- if (entry.pmStart >= end$1)
159839
+ if (inclusive ? entry.pmStart > end$1 : entry.pmStart >= end$1)
159607
159840
  break;
159608
- if (entry.pmEnd <= start$1)
159841
+ if (inclusive ? entry.pmEnd < start$1 : entry.pmEnd <= start$1)
159609
159842
  continue;
159610
159843
  out.push(entry);
159611
159844
  }
@@ -164331,6 +164564,26 @@ var Node$13 = class Node$14 {
164331
164564
  const layoutState = this.#deps?.getLayoutState();
164332
164565
  return calculateExtendedSelection(layoutState?.blocks ?? [], anchor, head, mode);
164333
164566
  }
164567
+ #clampHeadAtIsolatingBoundary(doc$2, anchor, head) {
164568
+ const forward = head >= anchor;
164569
+ try {
164570
+ const $head = doc$2.resolve(head);
164571
+ let isolatingDepth = -1;
164572
+ for (let d = $head.depth;d > 0; d--) {
164573
+ const node3 = $head.node(d);
164574
+ if (node3.type.spec.isolating || node3.type.spec.tableRole === "table")
164575
+ isolatingDepth = d;
164576
+ }
164577
+ if (isolatingDepth > 0) {
164578
+ const boundary = forward ? $head.before(isolatingDepth) : $head.after(isolatingDepth);
164579
+ const near = Selection.near(doc$2.resolve(boundary), forward ? -1 : 1);
164580
+ if (near instanceof TextSelection2)
164581
+ return near.head;
164582
+ return anchor;
164583
+ }
164584
+ } catch {}
164585
+ return head;
164586
+ }
164334
164587
  #shouldUseCellSelection(currentTableHit) {
164335
164588
  return shouldUseCellSelection(currentTableHit, this.#cellAnchor, this.#cellDragMode);
164336
164589
  }
@@ -164716,8 +164969,11 @@ var Node$13 = class Node$14 {
164716
164969
  const tableHit = this.#hitTestTable(x, y$1);
164717
164970
  if (tableHit) {
164718
164971
  const tablePos = this.#getTablePosFromHit(tableHit);
164719
- if (tablePos !== null)
164972
+ const hitIsInsideTable = tablePos !== null && doc$2 && hit.pos >= tablePos && hit.pos <= tablePos + (doc$2.nodeAt(tablePos)?.nodeSize ?? 0);
164973
+ if (tablePos !== null && hitIsInsideTable)
164720
164974
  this.#setCellAnchor(tableHit, tablePos);
164975
+ else
164976
+ this.#clearCellAnchor();
164721
164977
  } else
164722
164978
  this.#clearCellAnchor();
164723
164979
  } else
@@ -165264,7 +165520,9 @@ var Node$13 = class Node$14 {
165264
165520
  return;
165265
165521
  }
165266
165522
  const anchor = this.#dragAnchor;
165267
- const head = hit.pos;
165523
+ let head = hit.pos;
165524
+ if (!this.#cellAnchor)
165525
+ head = this.#clampHeadAtIsolatingBoundary(doc$2, anchor, head);
165268
165526
  const { selAnchor, selHead } = this.#calculateExtendedSelection(anchor, head, this.#dragExtensionMode);
165269
165527
  try {
165270
165528
  const tr = editor.state.tr.setSelection(TextSelection2.create(editor.state.doc, selAnchor, selHead));
@@ -168583,6 +168841,12 @@ var Node$13 = class Node$14 {
168583
168841
  return false;
168584
168842
  editor.commands.deleteTable();
168585
168843
  return true;
168844
+ }, ZERO_WIDTH_SPACE = "​", ROW_START_TO_TEXT_OFFSET = 3, CELL_TO_TEXT_OFFSET = 2, normalizeHeaderAttrsForBodyCell = (attrs) => {
168845
+ if (attrs?.borders !== null)
168846
+ return attrs;
168847
+ const nextAttrs = { ...attrs };
168848
+ delete nextAttrs.borders;
168849
+ return nextAttrs;
168586
168850
  }, IMPORT_CONTEXT_SELECTOR = '[data-superdoc-import="true"]', IMPORT_DEFAULT_TABLE_WIDTH_PCT = 5000, isImportedTableElement = (element3) => Boolean(element3?.closest?.(IMPORT_CONTEXT_SELECTOR)), Table, renderCellBorderStyle = (borders) => {
168587
168851
  if (!borders)
168588
168852
  return {};
@@ -173132,7 +173396,7 @@ var Node$13 = class Node$14 {
173132
173396
  trackedChanges: context.trackedChanges ?? []
173133
173397
  });
173134
173398
  }, _hoisted_1$6, _hoisted_2$1, _hoisted_3, _hoisted_4, ContextMenu_default, _hoisted_1$5, BasicUpload_default, _hoisted_1$4, MIN_WIDTH = 200, PPI = 96, alignment = "flex-end", Ruler_default, GenericPopover_default, _hoisted_1$3, RESIZE_HANDLE_WIDTH_PX = 9, RESIZE_HANDLE_OFFSET_PX = 4, DRAG_OVERLAY_EXTENSION_PX = 1000, MIN_DRAG_OVERLAY_WIDTH_PX = 2000, THROTTLE_INTERVAL_MS = 16, MIN_RESIZE_DELTA_PX = 1, TableResizeOverlay_default, _hoisted_1$2, OVERLAY_EXPANSION_PX = 2000, RESIZE_HANDLE_SIZE_PX = 12, MOUSE_MOVE_THROTTLE_MS = 16, DIMENSION_CHANGE_THRESHOLD_PX = 1, Z_INDEX_OVERLAY = 10, Z_INDEX_HANDLE = 15, Z_INDEX_GUIDELINE = 20, ImageResizeOverlay_default, LINK_CLICK_DEBOUNCE_MS = 300, CURSOR_UPDATE_TIMEOUT_MS = 10, LinkClickHandler_default, _hoisted_1$1, _hoisted_2, DOCX2 = "application/vnd.openxmlformats-officedocument.wordprocessingml.document", TABLE_RESIZE_HOVER_THRESHOLD = 8, TABLE_RESIZE_THROTTLE_MS = 16, SuperEditor_default, _hoisted_1, SuperInput_default, SlashMenu, Extensions;
173135
- var init_src_dG_lytW9_es = __esm(() => {
173399
+ var init_src_D9teEfgS_es = __esm(() => {
173136
173400
  init_rolldown_runtime_B2q5OVn9_es();
173137
173401
  init_SuperConverter_BSZgN87C_es();
173138
173402
  init_jszip_ChlR43oI_es();
@@ -193533,6 +193797,13 @@ function print() { __p += __j.call(arguments, '') }
193533
193797
  });
193534
193798
  return;
193535
193799
  }
193800
+ if (domRects.length === 0 && from$12 !== to && this.#editorInputManager?.isDragging) {
193801
+ debugLog("warn", "[drawSelection] zero rects for non-collapsed selection — preserving last overlay", {
193802
+ from: from$12,
193803
+ to
193804
+ });
193805
+ return;
193806
+ }
193536
193807
  try {
193537
193808
  this.#localSelectionLayer.innerHTML = "";
193538
193809
  const isFieldAnnotationSelection = selection instanceof NodeSelection && selection.node?.type?.name === "fieldAnnotation";
@@ -204025,8 +204296,8 @@ function print() { __p += __j.call(arguments, '') }
204025
204296
  return isObjectLike_default(value) && hasOwnProperty$8.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee");
204026
204297
  };
204027
204298
  stubFalse_default = stubFalse;
204028
- freeExports$2 = typeof exports_src_dG_lytW9_es == "object" && exports_src_dG_lytW9_es && !exports_src_dG_lytW9_es.nodeType && exports_src_dG_lytW9_es;
204029
- freeModule$2 = freeExports$2 && typeof module_src_dG_lytW9_es == "object" && module_src_dG_lytW9_es && !module_src_dG_lytW9_es.nodeType && module_src_dG_lytW9_es;
204299
+ freeExports$2 = typeof exports_src_D9teEfgS_es == "object" && exports_src_D9teEfgS_es && !exports_src_D9teEfgS_es.nodeType && exports_src_D9teEfgS_es;
204300
+ freeModule$2 = freeExports$2 && typeof module_src_D9teEfgS_es == "object" && module_src_D9teEfgS_es && !module_src_D9teEfgS_es.nodeType && module_src_D9teEfgS_es;
204030
204301
  Buffer$1 = freeModule$2 && freeModule$2.exports === freeExports$2 ? _root_default.Buffer : undefined;
204031
204302
  isBuffer_default = (Buffer$1 ? Buffer$1.isBuffer : undefined) || stubFalse_default;
204032
204303
  typedArrayTags = {};
@@ -204034,8 +204305,8 @@ function print() { __p += __j.call(arguments, '') }
204034
204305
  typedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = typedArrayTags[arrayBufferTag$1] = typedArrayTags[boolTag$1] = typedArrayTags[dataViewTag$2] = typedArrayTags[dateTag$1] = typedArrayTags[errorTag$1] = typedArrayTags[funcTag] = typedArrayTags[mapTag$2] = typedArrayTags[numberTag$1] = typedArrayTags[objectTag$3] = typedArrayTags[regexpTag$1] = typedArrayTags[setTag$2] = typedArrayTags[stringTag$1] = typedArrayTags[weakMapTag$1] = false;
204035
204306
  _baseIsTypedArray_default = baseIsTypedArray;
204036
204307
  _baseUnary_default = baseUnary;
204037
- freeExports$1 = typeof exports_src_dG_lytW9_es == "object" && exports_src_dG_lytW9_es && !exports_src_dG_lytW9_es.nodeType && exports_src_dG_lytW9_es;
204038
- freeModule$1 = freeExports$1 && typeof module_src_dG_lytW9_es == "object" && module_src_dG_lytW9_es && !module_src_dG_lytW9_es.nodeType && module_src_dG_lytW9_es;
204308
+ freeExports$1 = typeof exports_src_D9teEfgS_es == "object" && exports_src_D9teEfgS_es && !exports_src_D9teEfgS_es.nodeType && exports_src_D9teEfgS_es;
204309
+ freeModule$1 = freeExports$1 && typeof module_src_D9teEfgS_es == "object" && module_src_D9teEfgS_es && !module_src_D9teEfgS_es.nodeType && module_src_D9teEfgS_es;
204039
204310
  freeProcess = freeModule$1 && freeModule$1.exports === freeExports$1 && _freeGlobal_default.process;
204040
204311
  _nodeUtil_default = function() {
204041
204312
  try {
@@ -204140,8 +204411,8 @@ function print() { __p += __j.call(arguments, '') }
204140
204411
  Stack.prototype.has = _stackHas_default;
204141
204412
  Stack.prototype.set = _stackSet_default;
204142
204413
  _Stack_default = Stack;
204143
- freeExports = typeof exports_src_dG_lytW9_es == "object" && exports_src_dG_lytW9_es && !exports_src_dG_lytW9_es.nodeType && exports_src_dG_lytW9_es;
204144
- freeModule = freeExports && typeof module_src_dG_lytW9_es == "object" && module_src_dG_lytW9_es && !module_src_dG_lytW9_es.nodeType && module_src_dG_lytW9_es;
204414
+ freeExports = typeof exports_src_D9teEfgS_es == "object" && exports_src_D9teEfgS_es && !exports_src_D9teEfgS_es.nodeType && exports_src_D9teEfgS_es;
204415
+ freeModule = freeExports && typeof module_src_D9teEfgS_es == "object" && module_src_D9teEfgS_es && !module_src_D9teEfgS_es.nodeType && module_src_D9teEfgS_es;
204145
204416
  Buffer4 = freeModule && freeModule.exports === freeExports ? _root_default.Buffer : undefined;
204146
204417
  allocUnsafe = Buffer4 ? Buffer4.allocUnsafe : undefined;
204147
204418
  _cloneBuffer_default = cloneBuffer;
@@ -211793,7 +212064,7 @@ var init_zipper_Cnk_HjM2_es = __esm(() => {
211793
212064
 
211794
212065
  // ../../packages/superdoc/dist/super-editor.es.js
211795
212066
  var init_super_editor_es = __esm(() => {
211796
- init_src_dG_lytW9_es();
212067
+ init_src_D9teEfgS_es();
211797
212068
  init_SuperConverter_BSZgN87C_es();
211798
212069
  init_jszip_ChlR43oI_es();
211799
212070
  init_xml_js_DLE8mr0n_es();
@@ -271299,142 +271570,6 @@ var init_table_target_resolver = __esm(() => {
271299
271570
  init_errors3();
271300
271571
  });
271301
271572
 
271302
- // ../../packages/super-editor/src/extensions/table/tableHelpers/appendRows.js
271303
- function extractRowTemplateFormatting2(cellNode, schema) {
271304
- const ParagraphType = schema.nodes.paragraph;
271305
- let blockType = ParagraphType;
271306
- let blockAttrs = null;
271307
- let textMarks = [];
271308
- const blocks2 = cellNode?.content?.content || [];
271309
- for (const block of blocks2) {
271310
- const isParagraphish = block.type === ParagraphType || block.type.name === "heading";
271311
- if (isParagraphish) {
271312
- blockType = block.type || ParagraphType;
271313
- blockAttrs = block.attrs || null;
271314
- }
271315
- let foundText = null;
271316
- block.descendants?.((n) => {
271317
- if (!foundText && n.isText)
271318
- foundText = n;
271319
- });
271320
- if (foundText) {
271321
- textMarks = foundText.marks ? Array.from(foundText.marks) : [];
271322
- break;
271323
- }
271324
- }
271325
- if (!blockType || !blockType.validContent)
271326
- blockType = ParagraphType;
271327
- return { blockType, blockAttrs, textMarks };
271328
- }
271329
- function buildFormattedCellBlock2(schema, value, { blockType, blockAttrs, textMarks }, copyRowStyle = false) {
271330
- const text9 = typeof value === "string" ? value : value == null ? "" : String(value);
271331
- const type = blockType || schema.nodes.paragraph;
271332
- const marks = copyRowStyle ? textMarks || [] : [];
271333
- if (!text9) {
271334
- const content5 = marks.length > 0 ? schema.text(ZERO_WIDTH_SPACE2, marks) : null;
271335
- return type.createAndFill(blockAttrs || null, content5);
271336
- }
271337
- const textNode = schema.text(text9, marks);
271338
- return type.createAndFill(blockAttrs || null, textNode);
271339
- }
271340
- function insertRowAtIndex2({ tr, tablePos, tableNode, sourceRowIndex, insertIndex, schema }) {
271341
- const sourceRow = tableNode.child(sourceRowIndex);
271342
- if (!sourceRow)
271343
- return false;
271344
- const map8 = TableMap2.get(tableNode);
271345
- const { width, height } = map8;
271346
- const newCells = [];
271347
- const cellsToExtend = [];
271348
- const RowType = schema.nodes.tableRow;
271349
- const CellType = schema.nodes.tableCell;
271350
- const sourceFormatting = extractRowTemplateFormatting2(sourceRow.firstChild, schema);
271351
- for (let col = 0;col < width; ) {
271352
- if (insertIndex > 0 && insertIndex < height) {
271353
- const indexAbove = (insertIndex - 1) * width + col;
271354
- const indexAtInsert = insertIndex * width + col;
271355
- if (map8.map[indexAbove] === map8.map[indexAtInsert]) {
271356
- const cellPos = map8.map[indexAbove];
271357
- const cell2 = tableNode.nodeAt(cellPos);
271358
- if (cell2) {
271359
- const attrs = cell2.attrs;
271360
- cellsToExtend.push({
271361
- pos: tablePos + 1 + cellPos,
271362
- attrs: { ...attrs, rowspan: (attrs.rowspan || 1) + 1 }
271363
- });
271364
- col += attrs.colspan || 1;
271365
- continue;
271366
- }
271367
- }
271368
- }
271369
- const sourceMapIndex = sourceRowIndex * width + col;
271370
- const sourceCellPos = map8.map[sourceMapIndex];
271371
- const sourceCell = tableNode.nodeAt(sourceCellPos);
271372
- if (!sourceCell) {
271373
- const fallbackCell = sourceRow.firstChild;
271374
- const formatting2 = extractRowTemplateFormatting2(fallbackCell, schema);
271375
- const content6 = buildFormattedCellBlock2(schema, "", formatting2, true);
271376
- const newCell2 = CellType.createAndFill({ rowspan: 1, colspan: 1 }, content6);
271377
- if (newCell2)
271378
- newCells.push(newCell2);
271379
- col += 1;
271380
- continue;
271381
- }
271382
- const colspan = sourceCell.attrs.colspan || 1;
271383
- const formatting = extractRowTemplateFormatting2(sourceCell, schema);
271384
- const cellAttrs = {
271385
- ...sourceCell.attrs,
271386
- rowspan: 1
271387
- };
271388
- const content5 = buildFormattedCellBlock2(schema, "", formatting, true);
271389
- const targetCellType = sourceCell.type.name === "tableHeader" ? CellType : sourceCell.type;
271390
- const normalizedCellAttrs = sourceCell.type.name === "tableHeader" ? normalizeHeaderAttrsForBodyCell2(cellAttrs) : cellAttrs;
271391
- const newCell = targetCellType.createAndFill(normalizedCellAttrs, content5);
271392
- if (newCell)
271393
- newCells.push(newCell);
271394
- col += colspan;
271395
- }
271396
- for (const { pos, attrs } of cellsToExtend) {
271397
- tr.setNodeMarkup(pos, null, attrs);
271398
- }
271399
- let insertPos = tablePos + 1;
271400
- for (let i5 = 0;i5 < insertIndex; i5++) {
271401
- insertPos += tableNode.child(i5).nodeSize;
271402
- }
271403
- if (newCells.length > 0) {
271404
- const newRow = RowType.createAndFill(null, newCells);
271405
- if (newRow) {
271406
- tr.insert(insertPos, newRow);
271407
- const cursorPos = insertPos + ROW_START_TO_TEXT_OFFSET2;
271408
- tr.setSelection(TextSelection4.create(tr.doc, cursorPos));
271409
- const firstCellBlock = newCells[0].firstChild;
271410
- const firstTextNode = firstCellBlock?.firstChild;
271411
- if (firstTextNode?.marks?.length) {
271412
- tr.setStoredMarks(firstTextNode.marks);
271413
- } else if (sourceFormatting.textMarks?.length) {
271414
- tr.setStoredMarks(sourceFormatting.textMarks);
271415
- }
271416
- }
271417
- } else {
271418
- if (cellsToExtend.length > 0) {
271419
- const spanningCellPos = cellsToExtend[0].pos;
271420
- const cursorPos = spanningCellPos + CELL_TO_TEXT_OFFSET2;
271421
- tr.setSelection(TextSelection4.create(tr.doc, cursorPos));
271422
- }
271423
- }
271424
- return true;
271425
- }
271426
- var ZERO_WIDTH_SPACE2 = "​", ROW_START_TO_TEXT_OFFSET2 = 3, CELL_TO_TEXT_OFFSET2 = 2, normalizeHeaderAttrsForBodyCell2 = (attrs) => {
271427
- if (attrs?.borders !== null)
271428
- return attrs;
271429
- const nextAttrs = { ...attrs };
271430
- delete nextAttrs.borders;
271431
- return nextAttrs;
271432
- };
271433
- var init_appendRows = __esm(() => {
271434
- init_dist7();
271435
- init_dist4();
271436
- });
271437
-
271438
271573
  // ../../packages/super-editor/src/document-api-adapters/tables-adapter.ts
271439
271574
  function generateParaId2() {
271440
271575
  return Array.from({ length: 8 }, () => Math.floor(Math.random() * 16).toString(16)).join("").toUpperCase();
@@ -271550,6 +271685,64 @@ function removeGridColumnWidth2(grid, deleteIndex) {
271550
271685
  colWidths.splice(boundedIndex, 1);
271551
271686
  return serializeGridColumns2(grid, { ...normalized, columns: colWidths });
271552
271687
  }
271688
+ function normalizeCellAttrsForSingleCell2(attrs) {
271689
+ const currentColwidth = Array.isArray(attrs.colwidth) ? attrs.colwidth : null;
271690
+ const tableCellProperties = {
271691
+ ...attrs.tableCellProperties ?? {}
271692
+ };
271693
+ delete tableCellProperties.gridSpan;
271694
+ delete tableCellProperties.vMerge;
271695
+ return {
271696
+ ...attrs,
271697
+ colspan: 1,
271698
+ rowspan: 1,
271699
+ colwidth: currentColwidth && currentColwidth.length > 0 ? [currentColwidth[0] ?? 0] : currentColwidth,
271700
+ tableCellProperties
271701
+ };
271702
+ }
271703
+ function normalizeClonedRowInsertCellAttrs2(sourceAttrs, fromHeaderToBody) {
271704
+ const normalizedAttrs = {
271705
+ ...sourceAttrs,
271706
+ rowspan: 1
271707
+ };
271708
+ if (fromHeaderToBody && normalizedAttrs.borders == null) {
271709
+ delete normalizedAttrs.borders;
271710
+ }
271711
+ return normalizedAttrs;
271712
+ }
271713
+ function expandMergedCellIntoSingles2({
271714
+ tr,
271715
+ tablePos,
271716
+ tableNode,
271717
+ cellPos,
271718
+ cellNode,
271719
+ rowIndex,
271720
+ columnIndex,
271721
+ rowspan,
271722
+ colspan,
271723
+ schema
271724
+ }) {
271725
+ const tableStart = tablePos + 1;
271726
+ const map8 = TableMap2.get(tableNode);
271727
+ const resetCell = cellNode.type.create(normalizeCellAttrsForSingleCell2(cellNode.attrs), cellNode.content);
271728
+ tr.replaceWith(cellPos, cellPos + cellNode.nodeSize, resetCell);
271729
+ const mapFrom = tr.mapping.maps.length;
271730
+ for (let row2 = rowIndex + rowspan - 1;row2 >= rowIndex; row2--) {
271731
+ for (let col = columnIndex + colspan - 1;col >= columnIndex; col--) {
271732
+ if (row2 === rowIndex && col === columnIndex)
271733
+ continue;
271734
+ const newCell = schema.nodes.tableCell.createAndFill();
271735
+ let insertRelPos;
271736
+ if (row2 === rowIndex) {
271737
+ const baseRelPos = map8.positionAt(rowIndex, columnIndex, tableNode);
271738
+ insertRelPos = baseRelPos + resetCell.nodeSize;
271739
+ } else {
271740
+ insertRelPos = map8.positionAt(row2, col, tableNode);
271741
+ }
271742
+ tr.insert(tr.mapping.slice(mapFrom).map(tableStart + insertRelPos), newCell);
271743
+ }
271744
+ }
271745
+ }
271553
271746
  function isBoundaryEdge2(edge) {
271554
271747
  return edge === "top" || edge === "bottom" || edge === "left" || edge === "right" || edge === "insideH" || edge === "insideV";
271555
271748
  }
@@ -271729,6 +271922,185 @@ function removeColumnFromTable2(tr, tablePos, col) {
271729
271922
  row2 += rowspan;
271730
271923
  }
271731
271924
  }
271925
+ function insertRowInTable2(tr, tablePos, sourceRowIndex, insertIndex, schema) {
271926
+ const tableNode = tr.doc.nodeAt(tablePos);
271927
+ if (!tableNode || tableNode.type.name !== "table")
271928
+ return false;
271929
+ const rowCount = tableNode.childCount;
271930
+ if (rowCount === 0)
271931
+ return false;
271932
+ const map8 = TableMap2.get(tableNode);
271933
+ const boundedInsertIndex = Math.max(0, Math.min(insertIndex, rowCount));
271934
+ const boundedSourceRowIndex = Math.max(0, Math.min(sourceRowIndex, rowCount - 1));
271935
+ const sourceRow = tableNode.child(boundedSourceRowIndex);
271936
+ if (!sourceRow)
271937
+ return false;
271938
+ const rowType = schema.nodes.tableRow;
271939
+ const defaultCellType = schema.nodes.tableCell;
271940
+ if (!rowType || !defaultCellType)
271941
+ return false;
271942
+ const newCells = [];
271943
+ const cellsToExtend = [];
271944
+ for (let col = 0;col < map8.width; ) {
271945
+ if (boundedInsertIndex > 0 && boundedInsertIndex < map8.height) {
271946
+ const indexAbove = (boundedInsertIndex - 1) * map8.width + col;
271947
+ const indexAtInsert = boundedInsertIndex * map8.width + col;
271948
+ if (map8.map[indexAbove] === map8.map[indexAtInsert]) {
271949
+ const spanningPos = map8.map[indexAbove];
271950
+ const spanningCell = tableNode.nodeAt(spanningPos);
271951
+ if (spanningCell) {
271952
+ const spanningAttrs = spanningCell.attrs;
271953
+ const rowspan = spanningAttrs.rowspan || 1;
271954
+ const colspan2 = spanningAttrs.colspan || 1;
271955
+ cellsToExtend.push({
271956
+ pos: tablePos + 1 + spanningPos,
271957
+ attrs: { ...spanningAttrs, rowspan: rowspan + 1 }
271958
+ });
271959
+ col += colspan2;
271960
+ continue;
271961
+ }
271962
+ }
271963
+ }
271964
+ const sourceMapIndex = boundedSourceRowIndex * map8.width + col;
271965
+ const sourceCellPos = map8.map[sourceMapIndex];
271966
+ const sourceCell = tableNode.nodeAt(sourceCellPos) ?? sourceRow.firstChild;
271967
+ if (!sourceCell) {
271968
+ col += 1;
271969
+ continue;
271970
+ }
271971
+ const colspan = sourceCell.attrs.colspan || 1;
271972
+ const fromHeaderToBody = sourceCell.type.name === "tableHeader";
271973
+ const targetCellType = fromHeaderToBody ? defaultCellType : sourceCell.type;
271974
+ const newCell = targetCellType.createAndFill(normalizeClonedRowInsertCellAttrs2(sourceCell.attrs, fromHeaderToBody));
271975
+ if (newCell)
271976
+ newCells.push(newCell);
271977
+ col += colspan;
271978
+ }
271979
+ for (const { pos, attrs } of cellsToExtend) {
271980
+ tr.setNodeMarkup(pos, null, attrs);
271981
+ }
271982
+ if (newCells.length === 0)
271983
+ return true;
271984
+ const newRow = rowType.createAndFill(null, newCells);
271985
+ if (!newRow)
271986
+ return false;
271987
+ let insertPos = tablePos + 1;
271988
+ for (let row2 = 0;row2 < boundedInsertIndex; row2++) {
271989
+ insertPos += tableNode.child(row2).nodeSize;
271990
+ }
271991
+ tr.insert(insertPos, newRow);
271992
+ return true;
271993
+ }
271994
+ function addColumnToTableForSplit2(tr, tablePos, col, splitRowStart, splitRowEnd) {
271995
+ const tableNode = tr.doc.nodeAt(tablePos);
271996
+ if (!tableNode || tableNode.type.name !== "table")
271997
+ return;
271998
+ const map8 = TableMap2.get(tableNode);
271999
+ const tableStart = tablePos + 1;
272000
+ const mapStart = tr.mapping.maps.length;
272001
+ const widenedOutsideSplit = new Set;
272002
+ for (let row2 = 0;row2 < map8.height; row2++) {
272003
+ const index3 = row2 * map8.width + col;
272004
+ const pos = map8.map[index3];
272005
+ const cell2 = tableNode.nodeAt(pos);
272006
+ if (!cell2)
272007
+ continue;
272008
+ const inSplitRows = row2 >= splitRowStart && row2 < splitRowEnd;
272009
+ if (!inSplitRows && col > 0) {
272010
+ const leftPos = map8.map[index3 - 1];
272011
+ const leftCell = tableNode.nodeAt(leftPos);
272012
+ if (leftCell && !widenedOutsideSplit.has(leftPos)) {
272013
+ tr.setNodeMarkup(tr.mapping.slice(mapStart).map(tableStart + leftPos), null, addColSpan2(leftCell.attrs, col - map8.colCount(leftPos)));
272014
+ widenedOutsideSplit.add(leftPos);
272015
+ }
272016
+ row2 += (cell2.attrs?.rowspan || 1) - 1;
272017
+ continue;
272018
+ }
272019
+ if (col > 0 && map8.map[index3 - 1] === pos) {
272020
+ tr.setNodeMarkup(tr.mapping.slice(mapStart).map(tableStart + pos), null, addColSpan2(cell2.attrs, col - map8.colCount(pos)));
272021
+ row2 += (cell2.attrs.rowspan || 1) - 1;
272022
+ } else {
272023
+ const refType = col > 0 ? tableNode.nodeAt(map8.map[index3 - 1])?.type ?? cell2.type : cell2.type;
272024
+ const cellPos = map8.positionAt(row2, col, tableNode);
272025
+ tr.insert(tr.mapping.slice(mapStart).map(tableStart + cellPos), refType.createAndFill());
272026
+ row2 += (cell2.attrs?.rowspan || 1) - 1;
272027
+ }
272028
+ }
272029
+ }
272030
+ function insertRowInTableForSplit2(tr, tablePos, sourceRowIndex, insertIndex, splitColStart, splitColEnd, schema) {
272031
+ const tableNode = tr.doc.nodeAt(tablePos);
272032
+ if (!tableNode || tableNode.type.name !== "table")
272033
+ return false;
272034
+ const rowCount = tableNode.childCount;
272035
+ if (rowCount === 0)
272036
+ return false;
272037
+ const map8 = TableMap2.get(tableNode);
272038
+ const boundedInsertIndex = Math.max(0, Math.min(insertIndex, rowCount));
272039
+ const boundedSourceRowIndex = Math.max(0, Math.min(sourceRowIndex, rowCount - 1));
272040
+ const sourceRow = tableNode.child(boundedSourceRowIndex);
272041
+ if (!sourceRow)
272042
+ return false;
272043
+ const rowType = schema.nodes.tableRow;
272044
+ const defaultCellType = schema.nodes.tableCell;
272045
+ if (!rowType || !defaultCellType)
272046
+ return false;
272047
+ const newCells = [];
272048
+ const cellsToExtend = new Map;
272049
+ for (let col = 0;col < map8.width; ) {
272050
+ if (boundedInsertIndex > 0 && boundedInsertIndex < map8.height) {
272051
+ const indexAbove = (boundedInsertIndex - 1) * map8.width + col;
272052
+ const indexAtInsert = boundedInsertIndex * map8.width + col;
272053
+ if (map8.map[indexAbove] === map8.map[indexAtInsert]) {
272054
+ const spanningPos = map8.map[indexAbove];
272055
+ const spanningCell = tableNode.nodeAt(spanningPos);
272056
+ if (spanningCell) {
272057
+ const spanningAttrs = spanningCell.attrs;
272058
+ const rowspan = spanningAttrs.rowspan || 1;
272059
+ const colspan2 = spanningAttrs.colspan || 1;
272060
+ cellsToExtend.set(tablePos + 1 + spanningPos, { ...spanningAttrs, rowspan: rowspan + 1 });
272061
+ col += colspan2;
272062
+ continue;
272063
+ }
272064
+ }
272065
+ }
272066
+ const sourceMapIndex = boundedSourceRowIndex * map8.width + col;
272067
+ const sourceCellPos = map8.map[sourceMapIndex];
272068
+ const sourceCell = tableNode.nodeAt(sourceCellPos) ?? sourceRow.firstChild;
272069
+ if (!sourceCell) {
272070
+ col += 1;
272071
+ continue;
272072
+ }
272073
+ const sourceAttrs = sourceCell.attrs;
272074
+ const colspan = sourceAttrs.colspan || 1;
272075
+ const overlapsSplitRange = col < splitColEnd && col + colspan > splitColStart;
272076
+ if (!overlapsSplitRange) {
272077
+ const sourceRowspan = sourceAttrs.rowspan || 1;
272078
+ cellsToExtend.set(tablePos + 1 + sourceCellPos, { ...sourceAttrs, rowspan: sourceRowspan + 1 });
272079
+ col += colspan;
272080
+ continue;
272081
+ }
272082
+ const fromHeaderToBody = sourceCell.type.name === "tableHeader";
272083
+ const targetCellType = fromHeaderToBody ? defaultCellType : sourceCell.type;
272084
+ const newCell = targetCellType.createAndFill(normalizeClonedRowInsertCellAttrs2(sourceAttrs, fromHeaderToBody));
272085
+ if (newCell)
272086
+ newCells.push(newCell);
272087
+ col += colspan;
272088
+ }
272089
+ for (const [pos, attrs] of cellsToExtend.entries()) {
272090
+ tr.setNodeMarkup(pos, null, attrs);
272091
+ }
272092
+ if (newCells.length === 0)
272093
+ return true;
272094
+ const newRow = rowType.createAndFill(null, newCells);
272095
+ if (!newRow)
272096
+ return false;
272097
+ let insertPos = tablePos + 1;
272098
+ for (let row2 = 0;row2 < boundedInsertIndex; row2++) {
272099
+ insertPos += tableNode.child(row2).nodeSize;
272100
+ }
272101
+ tr.insert(insertPos, newRow);
272102
+ return true;
272103
+ }
271732
272104
  function tablesDeleteAdapter2(editor, input2, options) {
271733
272105
  const mode = options?.changeMode ?? "direct";
271734
272106
  if (mode === "tracked") {
@@ -271907,14 +272279,10 @@ function tablesInsertRowAdapter2(editor, input2, options) {
271907
272279
  break;
271908
272280
  const insertIdx = input2.position === "above" ? rowIndex + i5 : rowIndex + 1 + i5;
271909
272281
  const sourceIdx = input2.position === "above" ? rowIndex + i5 : rowIndex;
271910
- insertRowAtIndex2({
271911
- tr,
271912
- tablePos,
271913
- tableNode: currentTableNode,
271914
- sourceRowIndex: Math.min(sourceIdx, currentTableNode.childCount - 1),
271915
- insertIndex: Math.min(insertIdx, currentTableNode.childCount),
271916
- schema
271917
- });
272282
+ const didInsertRow = insertRowInTable2(tr, tablePos, Math.min(sourceIdx, currentTableNode.childCount - 1), Math.min(insertIdx, currentTableNode.childCount), schema);
272283
+ if (!didInsertRow) {
272284
+ return toTableFailure2("INVALID_TARGET", "Row insertion could not be applied.");
272285
+ }
271918
272286
  }
271919
272287
  if (mode === "tracked")
271920
272288
  applyTrackedMutationMeta2(tr);
@@ -272763,40 +273131,20 @@ function tablesUnmergeCellsAdapter2(editor, input2, options) {
272763
273131
  try {
272764
273132
  const tr = editor.state.tr;
272765
273133
  const tablePos = table2.candidate.pos;
272766
- const tableStart = tablePos + 1;
272767
273134
  const tableNode = table2.candidate.node;
272768
- const map8 = TableMap2.get(tableNode);
272769
273135
  const schema = editor.state.schema;
272770
- const currentColwidth = Array.isArray(attrs.colwidth) ? attrs.colwidth : null;
272771
- const tableCellProperties = {
272772
- ...attrs.tableCellProperties ?? {}
272773
- };
272774
- delete tableCellProperties.gridSpan;
272775
- delete tableCellProperties.vMerge;
272776
- const resetCell = cellNode.type.create({
272777
- ...attrs,
272778
- colspan: 1,
272779
- rowspan: 1,
272780
- colwidth: currentColwidth && currentColwidth.length > 0 ? [currentColwidth[0] ?? 0] : currentColwidth,
272781
- tableCellProperties
272782
- }, cellNode.content);
272783
- tr.replaceWith(cellPos, cellPos + cellNode.nodeSize, resetCell);
272784
- const mapFrom = tr.mapping.maps.length;
272785
- for (let row2 = rowIndex + rowspan - 1;row2 >= rowIndex; row2--) {
272786
- for (let col = columnIndex + colspan - 1;col >= columnIndex; col--) {
272787
- if (row2 === rowIndex && col === columnIndex)
272788
- continue;
272789
- const newCell = schema.nodes.tableCell.createAndFill();
272790
- let insertRelPos;
272791
- if (row2 === rowIndex) {
272792
- const baseRelPos = map8.positionAt(rowIndex, columnIndex, tableNode);
272793
- insertRelPos = baseRelPos + resetCell.nodeSize;
272794
- } else {
272795
- insertRelPos = map8.positionAt(row2, col, tableNode);
272796
- }
272797
- tr.insert(tr.mapping.slice(mapFrom).map(tableStart + insertRelPos), newCell);
272798
- }
272799
- }
273136
+ expandMergedCellIntoSingles2({
273137
+ tr,
273138
+ tablePos,
273139
+ tableNode,
273140
+ cellPos,
273141
+ cellNode,
273142
+ rowIndex,
273143
+ columnIndex,
273144
+ rowspan,
273145
+ colspan,
273146
+ schema
273147
+ });
272800
273148
  applyDirectMutationMeta2(tr);
272801
273149
  editor.dispatch(tr);
272802
273150
  clearIndexCache2(editor);
@@ -272815,9 +273163,6 @@ function tablesSplitCellAdapter2(editor, input2, options) {
272815
273163
  const attrs = cellNode.attrs;
272816
273164
  const currentColspan = attrs.colspan || 1;
272817
273165
  const currentRowspan = attrs.rowspan || 1;
272818
- if ((currentColspan > 1 || currentRowspan > 1) && input2.rows === currentRowspan && input2.columns === currentColspan) {
272819
- return tablesUnmergeCellsAdapter2(editor, input2, options);
272820
- }
272821
273166
  if (input2.rows === 1 && input2.columns === 1 && currentColspan === 1 && currentRowspan === 1) {
272822
273167
  return toTableFailure2("NO_OP", "Cell is already a single cell and split target is 1×1.");
272823
273168
  }
@@ -272827,25 +273172,78 @@ function tablesSplitCellAdapter2(editor, input2, options) {
272827
273172
  try {
272828
273173
  const tr = editor.state.tr;
272829
273174
  const tablePos = table2.candidate.pos;
272830
- const tableStart = tablePos + 1;
272831
- const tableNode = table2.candidate.node;
272832
- const map8 = TableMap2.get(tableNode);
272833
273175
  const schema = editor.state.schema;
272834
- const targetColspan = Math.max(input2.columns, currentColspan);
272835
- const targetRowspan = Math.max(input2.rows, currentRowspan);
272836
- const splitAttrs = { ...attrs, colspan: 1, rowspan: 1 };
272837
- tr.setNodeMarkup(cellPos, null, splitAttrs);
272838
- const mapFrom = tr.mapping.maps.length;
272839
- for (let row2 = rowIndex + targetRowspan - 1;row2 >= rowIndex; row2--) {
272840
- for (let col = columnIndex + targetColspan - 1;col >= columnIndex; col--) {
272841
- if (row2 === rowIndex && col === columnIndex)
272842
- continue;
272843
- const newCell = schema.nodes.tableCell.createAndFill();
272844
- if (row2 < map8.height && col < map8.width) {
272845
- const insertPos = map8.positionAt(row2, col, tableNode);
272846
- tr.insert(tr.mapping.slice(mapFrom).map(tableStart + insertPos), newCell);
272847
- }
273176
+ const targetColumns = Math.max(input2.columns, currentColspan);
273177
+ const targetRows = Math.max(input2.rows, currentRowspan);
273178
+ const additionalColumns = Math.max(0, targetColumns - currentColspan);
273179
+ const additionalRows = Math.max(0, targetRows - currentRowspan);
273180
+ let updatedGrid = table2.candidate.node.attrs.grid;
273181
+ if (currentColspan > 1 || currentRowspan > 1) {
273182
+ const currentTableNode = tr.doc.nodeAt(tablePos);
273183
+ if (!currentTableNode || currentTableNode.type.name !== "table") {
273184
+ return toTableFailure2("INVALID_TARGET", "Cell split target table is unavailable.");
272848
273185
  }
273186
+ const currentCellPos = tr.mapping.map(cellPos, 1);
273187
+ const currentCellNode = tr.doc.nodeAt(currentCellPos);
273188
+ if (!currentCellNode || currentCellNode.type.name !== "tableCell" && currentCellNode.type.name !== "tableHeader") {
273189
+ return toTableFailure2("INVALID_TARGET", "Split target cell is unavailable.");
273190
+ }
273191
+ expandMergedCellIntoSingles2({
273192
+ tr,
273193
+ tablePos,
273194
+ tableNode: currentTableNode,
273195
+ cellPos: currentCellPos,
273196
+ cellNode: currentCellNode,
273197
+ rowIndex,
273198
+ columnIndex,
273199
+ rowspan: currentRowspan,
273200
+ colspan: currentColspan,
273201
+ schema
273202
+ });
273203
+ }
273204
+ for (let columnOffset = 0;columnOffset < additionalColumns; columnOffset++) {
273205
+ const insertColumnIndex = columnIndex + currentColspan + columnOffset;
273206
+ addColumnToTableForSplit2(tr, tablePos, insertColumnIndex, rowIndex, rowIndex + targetRows);
273207
+ updatedGrid = insertGridColumnWidth2(updatedGrid, insertColumnIndex) ?? updatedGrid;
273208
+ }
273209
+ for (let rowOffset = 0;rowOffset < additionalRows; rowOffset++) {
273210
+ const currentTableNode = tr.doc.nodeAt(tablePos);
273211
+ if (!currentTableNode || currentTableNode.type.name !== "table") {
273212
+ return toTableFailure2("INVALID_TARGET", "Cell split target table is unavailable.");
273213
+ }
273214
+ const insertIndex = rowIndex + currentRowspan + rowOffset;
273215
+ const boundedInsertIndex = Math.max(0, Math.min(insertIndex, currentTableNode.childCount));
273216
+ const sourceRowIndex = Math.max(0, Math.min(boundedInsertIndex - 1, currentTableNode.childCount - 1));
273217
+ const didInsertRow = insertRowInTableForSplit2(tr, tablePos, sourceRowIndex, boundedInsertIndex, columnIndex, columnIndex + targetColumns, schema);
273218
+ if (!didInsertRow) {
273219
+ return toTableFailure2("INVALID_TARGET", "Cell split could not insert required rows.");
273220
+ }
273221
+ }
273222
+ const finalTableNode = tr.doc.nodeAt(tablePos);
273223
+ if (!finalTableNode || finalTableNode.type.name !== "table") {
273224
+ return toTableFailure2("INVALID_TARGET", "Cell split target table is unavailable.");
273225
+ }
273226
+ const mappedTargetCellPos = tr.mapping.map(cellPos, 1);
273227
+ let finalTargetCellPos = mappedTargetCellPos;
273228
+ let finalTargetCell = tr.doc.nodeAt(finalTargetCellPos);
273229
+ if (!finalTargetCell || finalTargetCell.type.name !== "tableCell" && finalTargetCell.type.name !== "tableHeader") {
273230
+ const tableStart = tablePos + 1;
273231
+ const finalMap = TableMap2.get(finalTableNode);
273232
+ const finalTargetRelPos = finalMap.positionAt(rowIndex, columnIndex, finalTableNode);
273233
+ finalTargetCellPos = tableStart + finalTargetRelPos;
273234
+ finalTargetCell = tr.doc.nodeAt(finalTargetCellPos);
273235
+ }
273236
+ if (!finalTargetCell || finalTargetCell.type.name !== "tableCell" && finalTargetCell.type.name !== "tableHeader") {
273237
+ return toTableFailure2("INVALID_TARGET", "Split target cell is unavailable.");
273238
+ }
273239
+ tr.setNodeMarkup(finalTargetCellPos, null, normalizeCellAttrsForSingleCell2(finalTargetCell.attrs));
273240
+ if (updatedGrid) {
273241
+ const currentTableAttrs = finalTableNode.attrs;
273242
+ tr.setNodeMarkup(tablePos, null, {
273243
+ ...currentTableAttrs,
273244
+ grid: updatedGrid,
273245
+ userEdited: true
273246
+ });
272849
273247
  }
272850
273248
  applyDirectMutationMeta2(tr);
272851
273249
  editor.dispatch(tr);
@@ -273647,7 +274045,6 @@ var init_tables_adapter = __esm(() => {
273647
274045
  init_tracked_change_refs();
273648
274046
  init_errors3();
273649
274047
  init_node_address_resolver();
273650
- init_appendRows();
273651
274048
  init_helpers();
273652
274049
  POINTS_TO_PIXELS2 = 96 / 72;
273653
274050
  PIXELS_TO_TWIPS2 = 1440 / 96;