@mx-space/cli 0.14.0 → 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.
- package/dist/{Lexical.dev-DTxuYHmG.mjs → Lexical.dev-CtGmYDoh.mjs} +770 -271
- package/dist/{Lexical.node-BlCLnfA6.mjs → Lexical.node-8sRFmq2X.mjs} +15 -5
- package/dist/Lexical.prod-D-VfeKDz.mjs +7200 -0
- package/dist/{LexicalClipboard.dev-CdFkLR_D.mjs → LexicalClipboard.dev-CzQ15z6E.mjs} +6 -6
- package/dist/{LexicalClipboard.node-ktUajxsv.mjs → LexicalClipboard.node-D4gMGws6.mjs} +2 -2
- package/dist/{LexicalClipboard.prod-DliyLofW.mjs → LexicalClipboard.prod-CltkQpzS.mjs} +10 -8
- package/dist/{LexicalCodeCore.dev-CL9tHWJX.mjs → LexicalCodeCore.dev-DkYBZRGB.mjs} +11 -9
- package/dist/{LexicalCodeCore.prod-BoMSJc29.mjs → LexicalCodeCore.prod-COc3_QL8.mjs} +178 -167
- package/dist/{LexicalDragon.dev-CqW7Aq5H.mjs → LexicalDragon.dev-Dv5_WUae.mjs} +3 -3
- package/dist/{LexicalDragon.node-DLXctJyy.mjs → LexicalDragon.node-DgjrmWkd.mjs} +2 -2
- package/dist/{LexicalDragon.prod-DHI3T6n5.mjs → LexicalDragon.prod-DnpbDe-_.mjs} +5 -4
- package/dist/{LexicalExtension.dev-BP-18zns.mjs → LexicalExtension.dev-JMH_6-OZ.mjs} +73 -52
- package/dist/{LexicalExtension.node-BWH6xbzG.mjs → LexicalExtension.node-BUozzx4t.mjs} +4 -2
- package/dist/{LexicalExtension.prod-Cs6OgrDn.mjs → LexicalExtension.prod-UiyDgmou.mjs} +370 -347
- package/dist/{LexicalHeadless.dev-DJp__UcP.mjs → LexicalHeadless.dev-BfLGciiX.mjs} +2 -2
- package/dist/{LexicalHeadless.prod-o0v9cIu5.mjs → LexicalHeadless.prod-CWF7edmQ.mjs} +2 -2
- package/dist/{LexicalHtml.dev-DoymwFpG.mjs → LexicalHtml.dev-D5EF5PGW.mjs} +13 -11
- package/dist/{LexicalHtml.node-CVkbWtUA.mjs → LexicalHtml.node-BYbzHNVe.mjs} +4 -4
- package/dist/{LexicalHtml.prod-C2b3z99k.mjs → LexicalHtml.prod-D_FfkvVD.mjs} +330 -299
- package/dist/{LexicalLink.dev-7cgLOLIe.mjs → LexicalLink.dev-D3Pgh6ik.mjs} +53 -23
- package/dist/{LexicalLink.prod-DWFgoXHR.mjs → LexicalLink.prod-XZoAYVYD.mjs} +217 -198
- package/dist/{LexicalList.dev-Ci2iOxFx.mjs → LexicalList.dev-B5d3ObhB.mjs} +49 -44
- package/dist/LexicalList.prod-OQDpVAEb.mjs +967 -0
- package/dist/{LexicalMarkdown.dev-C0ZYCyuR.mjs → LexicalMarkdown.dev-BkM8G3DG.mjs} +61 -42
- package/dist/{LexicalMarkdown.prod-0M-Nc-rh.mjs → LexicalMarkdown.prod-DcVXCex6.mjs} +254 -202
- package/dist/{LexicalRichText.dev-Cnr1kDym.mjs → LexicalRichText.dev-DppD7IrA.mjs} +337 -52
- package/dist/{LexicalRichText.node-BUJZAiap.mjs → LexicalRichText.node-CPSn7dkg.mjs} +12 -8
- package/dist/LexicalRichText.prod-h7JPxFNp.mjs +718 -0
- package/dist/{LexicalSelection.dev-C4L7l8OB.mjs → LexicalSelection.dev-CD0SLbxP.mjs} +48 -17
- package/dist/{LexicalSelection.node-CLKroUMQ.mjs → LexicalSelection.node-CGlJgUlZ.mjs} +5 -4
- package/dist/{LexicalSelection.prod-DzFqpTlw.mjs → LexicalSelection.prod-DbVZN5AV.mjs} +101 -92
- package/dist/{LexicalTable.dev-Cc9-zqKa.mjs → LexicalTable.dev-D0HU14UV.mjs} +340 -138
- package/dist/LexicalTable.prod-BcPNSrxP.mjs +2468 -0
- package/dist/{LexicalUtils.dev-BRgK0L6G.mjs → LexicalUtils.dev-iKy_TrRT.mjs} +15 -19
- package/dist/{LexicalUtils.node-BVAwOkL4.mjs → LexicalUtils.node-CIgMS8cG.mjs} +6 -6
- package/dist/{LexicalUtils.prod-C1gtvVDP.mjs → LexicalUtils.prod-DIAsKJzu.mjs} +155 -159
- package/dist/bin/mxs.mjs +1 -1
- package/dist/esm-CH7CrOvh.mjs +2 -0
- package/dist/{esm-BNu4sUWV.mjs → esm-CwXl1N0a.mjs} +1801 -6013
- package/dist/index.d.mts +57 -62
- package/dist/index.mjs +1 -1
- package/dist/{mxs-BUqt-N3N.mjs → mxs-iW9DgqSZ.mjs} +14960 -9235
- package/dist/rolldown-runtime-JspESFgx.mjs +35 -0
- package/dist/vendor/litexml/cli.mjs +6693 -5762
- package/dist/vendor/litexml/litexml-html-preview-client.js +11912 -8698
- package/package.json +31 -30
- package/LICENSE +0 -33
- package/dist/Lexical.prod-CeB9UQuo.mjs +0 -6816
- package/dist/LexicalList.prod-D0xX5d3G.mjs +0 -944
- package/dist/LexicalRichText.prod-BfbMQ9uM.mjs +0 -538
- package/dist/LexicalTable.prod-BgO4nCxy.mjs +0 -2336
- 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-
|
|
2
|
-
import { $t as
|
|
3
|
-
import { c as
|
|
4
|
-
import { d as $unwrapAndFilterDescendants,
|
|
5
|
-
import { o as copyToClipboard, t as $getClipboardDataFromSelection } from "./LexicalClipboard.node-
|
|
6
|
-
//#region ../../node_modules/.pnpm/@lexical+table@0.
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1774
|
-
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
3051
|
+
const tableElement = $getDocument().createElement("table");
|
|
2780
3052
|
if (this.__style) setDOMStyleFromCSS(tableElement.style, this.__style);
|
|
2781
|
-
const 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 =
|
|
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 =
|
|
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) || $
|
|
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 };
|