roosterjs-content-model-plugins 9.25.0 → 9.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,8 +18,9 @@ function handleTabOnTable(model, rawEvent) {
18
18
  }
19
19
  exports.handleTabOnTable = handleTabOnTable;
20
20
  function isWholeTableSelected(tableModel) {
21
- var _a, _b, _c, _d;
22
- return (((_b = (_a = tableModel.rows[0]) === null || _a === void 0 ? void 0 : _a.cells[0]) === null || _b === void 0 ? void 0 : _b.isSelected) &&
23
- ((_d = (_c = tableModel.rows[tableModel.rows.length - 1]) === null || _c === void 0 ? void 0 : _c.cells[tableModel.widths.length - 1]) === null || _d === void 0 ? void 0 : _d.isSelected));
21
+ var _a, _b;
22
+ var lastRow = tableModel.rows[tableModel.rows.length - 1];
23
+ var lastCell = lastRow === null || lastRow === void 0 ? void 0 : lastRow.cells[lastRow.cells.length - 1];
24
+ return ((_b = (_a = tableModel.rows[0]) === null || _a === void 0 ? void 0 : _a.cells[0]) === null || _b === void 0 ? void 0 : _b.isSelected) && (lastCell === null || lastCell === void 0 ? void 0 : lastCell.isSelected);
24
25
  }
25
26
  //# sourceMappingURL=handleTabOnTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handleTabOnTable.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTable.ts"],"names":[],"mappings":";;;AAAA,2EAAoE;AACpE,2EAAkE;AAMlE;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,KAAmC,EAAE,QAAuB;IACzF,IAAM,UAAU,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,IAAI,UAAU,IAAI,oBAAoB,CAAC,UAAU,CAAC,EAAE;QAChD,IAAA,iDAAmB,EAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACrE,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;KACf;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AARD,4CAQC;AAED,SAAS,oBAAoB,CAAC,UAAqC;;IAC/D,OAAO,CACH,CAAA,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,CAAC,0CAAE,UAAU;SACxC,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,UAAU,CAAA,CAC/F,CAAC;AACN,CAAC","sourcesContent":["import { getFirstSelectedTable } from 'roosterjs-content-model-dom';\nimport { setModelIndentation } from 'roosterjs-content-model-api';\nimport type {\n ReadonlyContentModelDocument,\n ReadonlyContentModelTable,\n} from 'roosterjs-content-model-types';\n\n/**\n * When the whole table is selected, indent or outdent the whole table with setModelIndentation.\n * @internal\n */\nexport function handleTabOnTable(model: ReadonlyContentModelDocument, rawEvent: KeyboardEvent) {\n const tableModel = getFirstSelectedTable(model)[0];\n if (tableModel && isWholeTableSelected(tableModel)) {\n setModelIndentation(model, rawEvent.shiftKey ? 'outdent' : 'indent');\n rawEvent.preventDefault();\n return true;\n }\n return false;\n}\n\nfunction isWholeTableSelected(tableModel: ReadonlyContentModelTable) {\n return (\n tableModel.rows[0]?.cells[0]?.isSelected &&\n tableModel.rows[tableModel.rows.length - 1]?.cells[tableModel.widths.length - 1]?.isSelected\n );\n}\n"]}
1
+ {"version":3,"file":"handleTabOnTable.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTable.ts"],"names":[],"mappings":";;;AAAA,2EAAoE;AACpE,2EAAkE;AAMlE;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,KAAmC,EAAE,QAAuB;IACzF,IAAM,UAAU,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,IAAI,UAAU,IAAI,oBAAoB,CAAC,UAAU,CAAC,EAAE;QAChD,IAAA,iDAAmB,EAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACrE,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;KACf;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AARD,4CAQC;AAED,SAAS,oBAAoB,CAAC,UAAqC;;IAC/D,IAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5D,IAAM,QAAQ,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE1D,OAAO,CAAA,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,CAAC,0CAAE,UAAU,MAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,CAAA,CAAC;AAC5E,CAAC","sourcesContent":["import { getFirstSelectedTable } from 'roosterjs-content-model-dom';\nimport { setModelIndentation } from 'roosterjs-content-model-api';\nimport type {\n ReadonlyContentModelDocument,\n ReadonlyContentModelTable,\n} from 'roosterjs-content-model-types';\n\n/**\n * When the whole table is selected, indent or outdent the whole table with setModelIndentation.\n * @internal\n */\nexport function handleTabOnTable(model: ReadonlyContentModelDocument, rawEvent: KeyboardEvent) {\n const tableModel = getFirstSelectedTable(model)[0];\n if (tableModel && isWholeTableSelected(tableModel)) {\n setModelIndentation(model, rawEvent.shiftKey ? 'outdent' : 'indent');\n rawEvent.preventDefault();\n return true;\n }\n return false;\n}\n\nfunction isWholeTableSelected(tableModel: ReadonlyContentModelTable) {\n const lastRow = tableModel.rows[tableModel.rows.length - 1];\n const lastCell = lastRow?.cells[lastRow.cells.length - 1];\n\n return tableModel.rows[0]?.cells[0]?.isSelected && lastCell?.isSelected;\n}\n"]}
@@ -8,32 +8,35 @@ var roosterjs_content_model_dom_1 = require("roosterjs-content-model-dom");
8
8
  * @internal
9
9
  */
10
10
  function handleTabOnTableCell(model, cell, rawEvent) {
11
- var _a, _b, _c;
11
+ var _a, _b;
12
12
  var readonlyTableModel = (0, roosterjs_content_model_dom_1.getFirstSelectedTable)(model)[0];
13
- // Check if cursor is on last cell of the table
14
- if (!rawEvent.shiftKey &&
15
- readonlyTableModel &&
16
- ((_a = readonlyTableModel.rows[readonlyTableModel.rows.length - 1]) === null || _a === void 0 ? void 0 : _a.cells[readonlyTableModel.widths.length - 1]) === cell) {
17
- var tableModel = (0, roosterjs_content_model_dom_1.mutateBlock)(readonlyTableModel);
18
- (0, roosterjs_content_model_api_1.insertTableRow)(tableModel, 'insertBelow');
19
- // Clear Table selection
20
- (0, roosterjs_content_model_api_1.clearSelectedCells)(tableModel, {
21
- firstRow: tableModel.rows.length - 1,
22
- firstColumn: 0,
23
- lastRow: tableModel.rows.length - 1,
24
- lastColumn: tableModel.widths.length - 1,
25
- });
26
- (0, roosterjs_content_model_dom_1.normalizeTable)(tableModel, model.format);
27
- // Add selection marker to the first cell of the new row
28
- var markerParagraph = (_c = (_b = tableModel.rows[tableModel.rows.length - 1]) === null || _b === void 0 ? void 0 : _b.cells[0]) === null || _c === void 0 ? void 0 : _c.blocks[0];
29
- if (markerParagraph.blockType == 'Paragraph') {
30
- var marker = (0, roosterjs_content_model_dom_1.createSelectionMarker)(model.format);
31
- (0, roosterjs_content_model_dom_1.mutateBlock)(markerParagraph).segments.unshift(marker);
32
- (0, roosterjs_content_model_dom_1.setParagraphNotImplicit)(markerParagraph);
33
- (0, roosterjs_content_model_dom_1.setSelection)(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);
13
+ if (readonlyTableModel) {
14
+ // Check if cursor is on last cell of the table
15
+ var lastRow = readonlyTableModel.rows[readonlyTableModel.rows.length - 1];
16
+ var lastColumn = lastRow ? lastRow.cells.length - 1 : -1;
17
+ var lastCell = lastRow === null || lastRow === void 0 ? void 0 : lastRow.cells[lastColumn];
18
+ if (!rawEvent.shiftKey && lastCell && lastCell === cell) {
19
+ var tableModel = (0, roosterjs_content_model_dom_1.mutateBlock)(readonlyTableModel);
20
+ (0, roosterjs_content_model_api_1.insertTableRow)(tableModel, 'insertBelow');
21
+ // Clear Table selection
22
+ (0, roosterjs_content_model_api_1.clearSelectedCells)(tableModel, {
23
+ firstRow: tableModel.rows.length - 1,
24
+ firstColumn: 0,
25
+ lastRow: tableModel.rows.length - 1,
26
+ lastColumn: lastColumn,
27
+ });
28
+ (0, roosterjs_content_model_dom_1.normalizeTable)(tableModel, model.format);
29
+ // Add selection marker to the first cell of the new row
30
+ var markerParagraph = (_b = (_a = tableModel.rows[tableModel.rows.length - 1]) === null || _a === void 0 ? void 0 : _a.cells[0]) === null || _b === void 0 ? void 0 : _b.blocks[0];
31
+ if (markerParagraph.blockType == 'Paragraph') {
32
+ var marker = (0, roosterjs_content_model_dom_1.createSelectionMarker)(model.format);
33
+ (0, roosterjs_content_model_dom_1.mutateBlock)(markerParagraph).segments.unshift(marker);
34
+ (0, roosterjs_content_model_dom_1.setParagraphNotImplicit)(markerParagraph);
35
+ (0, roosterjs_content_model_dom_1.setSelection)(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);
36
+ }
37
+ rawEvent.preventDefault();
38
+ return true;
34
39
  }
35
- rawEvent.preventDefault();
36
- return true;
37
40
  }
38
41
  return false;
39
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"handleTabOnTableCell.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTableCell.ts"],"names":[],"mappings":";;;AAAA,2EAAiF;AACjF,2EAOqC;AAMrC;;;GAGG;AACH,SAAgB,oBAAoB,CAChC,KAAmC,EACnC,IAAmC,EACnC,QAAuB;;IAEvB,IAAM,kBAAkB,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,+CAA+C;IAC/C,IACI,CAAC,QAAQ,CAAC,QAAQ;QAClB,kBAAkB;QAClB,CAAA,MAAA,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAC9D,kBAAkB,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CACvC,MAAK,IAAI,EACZ;QACE,IAAM,UAAU,GAAG,IAAA,yCAAW,EAAC,kBAAkB,CAAC,CAAC;QACnD,IAAA,4CAAc,EAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAE1C,wBAAwB;QACxB,IAAA,gDAAkB,EAAC,UAAU,EAAE;YAC3B,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YACpC,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YACnC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;SAC3C,CAAC,CAAC;QACH,IAAA,4CAAc,EAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAEzC,wDAAwD;QACxD,IAAM,eAAe,GAAG,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QACzF,IAAI,eAAe,CAAC,SAAS,IAAI,WAAW,EAAE;YAC1C,IAAM,MAAM,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEnD,IAAA,yCAAW,EAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACtD,IAAA,qDAAuB,EAAC,eAAe,CAAC,CAAC;YACzC,IAAA,0CAAY,EAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;SAC9E;QAED,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;KACf;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AA1CD,oDA0CC","sourcesContent":["import { clearSelectedCells, insertTableRow } from 'roosterjs-content-model-api';\nimport {\n createSelectionMarker,\n getFirstSelectedTable,\n mutateBlock,\n normalizeTable,\n setParagraphNotImplicit,\n setSelection,\n} from 'roosterjs-content-model-dom';\nimport type {\n ReadonlyContentModelDocument,\n ReadonlyContentModelTableCell,\n} from 'roosterjs-content-model-types';\n\n/**\n * When the cursor is on the last cell of a table, add new row and focus first new cell.\n * @internal\n */\nexport function handleTabOnTableCell(\n model: ReadonlyContentModelDocument,\n cell: ReadonlyContentModelTableCell,\n rawEvent: KeyboardEvent\n) {\n const readonlyTableModel = getFirstSelectedTable(model)[0];\n\n // Check if cursor is on last cell of the table\n if (\n !rawEvent.shiftKey &&\n readonlyTableModel &&\n readonlyTableModel.rows[readonlyTableModel.rows.length - 1]?.cells[\n readonlyTableModel.widths.length - 1\n ] === cell\n ) {\n const tableModel = mutateBlock(readonlyTableModel);\n insertTableRow(tableModel, 'insertBelow');\n\n // Clear Table selection\n clearSelectedCells(tableModel, {\n firstRow: tableModel.rows.length - 1,\n firstColumn: 0,\n lastRow: tableModel.rows.length - 1,\n lastColumn: tableModel.widths.length - 1,\n });\n normalizeTable(tableModel, model.format);\n\n // Add selection marker to the first cell of the new row\n const markerParagraph = tableModel.rows[tableModel.rows.length - 1]?.cells[0]?.blocks[0];\n if (markerParagraph.blockType == 'Paragraph') {\n const marker = createSelectionMarker(model.format);\n\n mutateBlock(markerParagraph).segments.unshift(marker);\n setParagraphNotImplicit(markerParagraph);\n setSelection(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);\n }\n\n rawEvent.preventDefault();\n return true;\n }\n\n return false;\n}\n"]}
1
+ {"version":3,"file":"handleTabOnTableCell.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTableCell.ts"],"names":[],"mappings":";;;AAAA,2EAAiF;AACjF,2EAOqC;AAMrC;;;GAGG;AACH,SAAgB,oBAAoB,CAChC,KAAmC,EACnC,IAAmC,EACnC,QAAuB;;IAEvB,IAAM,kBAAkB,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,IAAI,kBAAkB,EAAE;QACpB,+CAA+C;QAC/C,IAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5E,IAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAM,QAAQ,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAE5C,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE;YACrD,IAAM,UAAU,GAAG,IAAA,yCAAW,EAAC,kBAAkB,CAAC,CAAC;YACnD,IAAA,4CAAc,EAAC,UAAU,EAAE,aAAa,CAAC,CAAC;YAE1C,wBAAwB;YACxB,IAAA,gDAAkB,EAAC,UAAU,EAAE;gBAC3B,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBACpC,WAAW,EAAE,CAAC;gBACd,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBACnC,UAAU,EAAE,UAAU;aACzB,CAAC,CAAC;YACH,IAAA,4CAAc,EAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAEzC,wDAAwD;YACxD,IAAM,eAAe,GACjB,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACrE,IAAI,eAAe,CAAC,SAAS,IAAI,WAAW,EAAE;gBAC1C,IAAM,MAAM,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAEnD,IAAA,yCAAW,EAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACtD,IAAA,qDAAuB,EAAC,eAAe,CAAC,CAAC;gBACzC,IAAA,0CAAY,EAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;aAC9E;YAED,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;SACf;KACJ;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AA3CD,oDA2CC","sourcesContent":["import { clearSelectedCells, insertTableRow } from 'roosterjs-content-model-api';\nimport {\n createSelectionMarker,\n getFirstSelectedTable,\n mutateBlock,\n normalizeTable,\n setParagraphNotImplicit,\n setSelection,\n} from 'roosterjs-content-model-dom';\nimport type {\n ReadonlyContentModelDocument,\n ReadonlyContentModelTableCell,\n} from 'roosterjs-content-model-types';\n\n/**\n * When the cursor is on the last cell of a table, add new row and focus first new cell.\n * @internal\n */\nexport function handleTabOnTableCell(\n model: ReadonlyContentModelDocument,\n cell: ReadonlyContentModelTableCell,\n rawEvent: KeyboardEvent\n) {\n const readonlyTableModel = getFirstSelectedTable(model)[0];\n\n if (readonlyTableModel) {\n // Check if cursor is on last cell of the table\n const lastRow = readonlyTableModel.rows[readonlyTableModel.rows.length - 1];\n const lastColumn = lastRow ? lastRow.cells.length - 1 : -1;\n const lastCell = lastRow?.cells[lastColumn];\n\n if (!rawEvent.shiftKey && lastCell && lastCell === cell) {\n const tableModel = mutateBlock(readonlyTableModel);\n insertTableRow(tableModel, 'insertBelow');\n\n // Clear Table selection\n clearSelectedCells(tableModel, {\n firstRow: tableModel.rows.length - 1,\n firstColumn: 0,\n lastRow: tableModel.rows.length - 1,\n lastColumn: lastColumn,\n });\n normalizeTable(tableModel, model.format);\n\n // Add selection marker to the first cell of the new row\n const markerParagraph =\n tableModel.rows[tableModel.rows.length - 1]?.cells[0]?.blocks[0];\n if (markerParagraph.blockType == 'Paragraph') {\n const marker = createSelectionMarker(model.format);\n\n mutateBlock(markerParagraph).segments.unshift(marker);\n setParagraphNotImplicit(markerParagraph);\n setSelection(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);\n }\n\n rawEvent.preventDefault();\n return true;\n }\n }\n\n return false;\n}\n"]}
@@ -17,9 +17,10 @@ define(["require", "exports", "roosterjs-content-model-dom", "roosterjs-content-
17
17
  }
18
18
  exports.handleTabOnTable = handleTabOnTable;
19
19
  function isWholeTableSelected(tableModel) {
20
- var _a, _b, _c, _d;
21
- return (((_b = (_a = tableModel.rows[0]) === null || _a === void 0 ? void 0 : _a.cells[0]) === null || _b === void 0 ? void 0 : _b.isSelected) &&
22
- ((_d = (_c = tableModel.rows[tableModel.rows.length - 1]) === null || _c === void 0 ? void 0 : _c.cells[tableModel.widths.length - 1]) === null || _d === void 0 ? void 0 : _d.isSelected));
20
+ var _a, _b;
21
+ var lastRow = tableModel.rows[tableModel.rows.length - 1];
22
+ var lastCell = lastRow === null || lastRow === void 0 ? void 0 : lastRow.cells[lastRow.cells.length - 1];
23
+ return ((_b = (_a = tableModel.rows[0]) === null || _a === void 0 ? void 0 : _a.cells[0]) === null || _b === void 0 ? void 0 : _b.isSelected) && (lastCell === null || lastCell === void 0 ? void 0 : lastCell.isSelected);
23
24
  }
24
25
  });
25
26
  //# sourceMappingURL=handleTabOnTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handleTabOnTable.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTable.ts"],"names":[],"mappings":";;;;IAOA;;;OAGG;IACH,SAAgB,gBAAgB,CAAC,KAAmC,EAAE,QAAuB;QACzF,IAAM,UAAU,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,UAAU,IAAI,oBAAoB,CAAC,UAAU,CAAC,EAAE;YAChD,IAAA,iDAAmB,EAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACrE,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IARD,4CAQC;IAED,SAAS,oBAAoB,CAAC,UAAqC;;QAC/D,OAAO,CACH,CAAA,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,CAAC,0CAAE,UAAU;aACxC,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,UAAU,CAAA,CAC/F,CAAC;IACN,CAAC","sourcesContent":["import { getFirstSelectedTable } from 'roosterjs-content-model-dom';\nimport { setModelIndentation } from 'roosterjs-content-model-api';\nimport type {\n ReadonlyContentModelDocument,\n ReadonlyContentModelTable,\n} from 'roosterjs-content-model-types';\n\n/**\n * When the whole table is selected, indent or outdent the whole table with setModelIndentation.\n * @internal\n */\nexport function handleTabOnTable(model: ReadonlyContentModelDocument, rawEvent: KeyboardEvent) {\n const tableModel = getFirstSelectedTable(model)[0];\n if (tableModel && isWholeTableSelected(tableModel)) {\n setModelIndentation(model, rawEvent.shiftKey ? 'outdent' : 'indent');\n rawEvent.preventDefault();\n return true;\n }\n return false;\n}\n\nfunction isWholeTableSelected(tableModel: ReadonlyContentModelTable) {\n return (\n tableModel.rows[0]?.cells[0]?.isSelected &&\n tableModel.rows[tableModel.rows.length - 1]?.cells[tableModel.widths.length - 1]?.isSelected\n );\n}\n"]}
1
+ {"version":3,"file":"handleTabOnTable.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTable.ts"],"names":[],"mappings":";;;;IAOA;;;OAGG;IACH,SAAgB,gBAAgB,CAAC,KAAmC,EAAE,QAAuB;QACzF,IAAM,UAAU,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,UAAU,IAAI,oBAAoB,CAAC,UAAU,CAAC,EAAE;YAChD,IAAA,iDAAmB,EAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACrE,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IARD,4CAQC;IAED,SAAS,oBAAoB,CAAC,UAAqC;;QAC/D,IAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5D,IAAM,QAAQ,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE1D,OAAO,CAAA,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,CAAC,0CAAE,UAAU,MAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,CAAA,CAAC;IAC5E,CAAC","sourcesContent":["import { getFirstSelectedTable } from 'roosterjs-content-model-dom';\nimport { setModelIndentation } from 'roosterjs-content-model-api';\nimport type {\n ReadonlyContentModelDocument,\n ReadonlyContentModelTable,\n} from 'roosterjs-content-model-types';\n\n/**\n * When the whole table is selected, indent or outdent the whole table with setModelIndentation.\n * @internal\n */\nexport function handleTabOnTable(model: ReadonlyContentModelDocument, rawEvent: KeyboardEvent) {\n const tableModel = getFirstSelectedTable(model)[0];\n if (tableModel && isWholeTableSelected(tableModel)) {\n setModelIndentation(model, rawEvent.shiftKey ? 'outdent' : 'indent');\n rawEvent.preventDefault();\n return true;\n }\n return false;\n}\n\nfunction isWholeTableSelected(tableModel: ReadonlyContentModelTable) {\n const lastRow = tableModel.rows[tableModel.rows.length - 1];\n const lastCell = lastRow?.cells[lastRow.cells.length - 1];\n\n return tableModel.rows[0]?.cells[0]?.isSelected && lastCell?.isSelected;\n}\n"]}
@@ -7,32 +7,35 @@ define(["require", "exports", "roosterjs-content-model-api", "roosterjs-content-
7
7
  * @internal
8
8
  */
9
9
  function handleTabOnTableCell(model, cell, rawEvent) {
10
- var _a, _b, _c;
10
+ var _a, _b;
11
11
  var readonlyTableModel = (0, roosterjs_content_model_dom_1.getFirstSelectedTable)(model)[0];
12
- // Check if cursor is on last cell of the table
13
- if (!rawEvent.shiftKey &&
14
- readonlyTableModel &&
15
- ((_a = readonlyTableModel.rows[readonlyTableModel.rows.length - 1]) === null || _a === void 0 ? void 0 : _a.cells[readonlyTableModel.widths.length - 1]) === cell) {
16
- var tableModel = (0, roosterjs_content_model_dom_1.mutateBlock)(readonlyTableModel);
17
- (0, roosterjs_content_model_api_1.insertTableRow)(tableModel, 'insertBelow');
18
- // Clear Table selection
19
- (0, roosterjs_content_model_api_1.clearSelectedCells)(tableModel, {
20
- firstRow: tableModel.rows.length - 1,
21
- firstColumn: 0,
22
- lastRow: tableModel.rows.length - 1,
23
- lastColumn: tableModel.widths.length - 1,
24
- });
25
- (0, roosterjs_content_model_dom_1.normalizeTable)(tableModel, model.format);
26
- // Add selection marker to the first cell of the new row
27
- var markerParagraph = (_c = (_b = tableModel.rows[tableModel.rows.length - 1]) === null || _b === void 0 ? void 0 : _b.cells[0]) === null || _c === void 0 ? void 0 : _c.blocks[0];
28
- if (markerParagraph.blockType == 'Paragraph') {
29
- var marker = (0, roosterjs_content_model_dom_1.createSelectionMarker)(model.format);
30
- (0, roosterjs_content_model_dom_1.mutateBlock)(markerParagraph).segments.unshift(marker);
31
- (0, roosterjs_content_model_dom_1.setParagraphNotImplicit)(markerParagraph);
32
- (0, roosterjs_content_model_dom_1.setSelection)(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);
12
+ if (readonlyTableModel) {
13
+ // Check if cursor is on last cell of the table
14
+ var lastRow = readonlyTableModel.rows[readonlyTableModel.rows.length - 1];
15
+ var lastColumn = lastRow ? lastRow.cells.length - 1 : -1;
16
+ var lastCell = lastRow === null || lastRow === void 0 ? void 0 : lastRow.cells[lastColumn];
17
+ if (!rawEvent.shiftKey && lastCell && lastCell === cell) {
18
+ var tableModel = (0, roosterjs_content_model_dom_1.mutateBlock)(readonlyTableModel);
19
+ (0, roosterjs_content_model_api_1.insertTableRow)(tableModel, 'insertBelow');
20
+ // Clear Table selection
21
+ (0, roosterjs_content_model_api_1.clearSelectedCells)(tableModel, {
22
+ firstRow: tableModel.rows.length - 1,
23
+ firstColumn: 0,
24
+ lastRow: tableModel.rows.length - 1,
25
+ lastColumn: lastColumn,
26
+ });
27
+ (0, roosterjs_content_model_dom_1.normalizeTable)(tableModel, model.format);
28
+ // Add selection marker to the first cell of the new row
29
+ var markerParagraph = (_b = (_a = tableModel.rows[tableModel.rows.length - 1]) === null || _a === void 0 ? void 0 : _a.cells[0]) === null || _b === void 0 ? void 0 : _b.blocks[0];
30
+ if (markerParagraph.blockType == 'Paragraph') {
31
+ var marker = (0, roosterjs_content_model_dom_1.createSelectionMarker)(model.format);
32
+ (0, roosterjs_content_model_dom_1.mutateBlock)(markerParagraph).segments.unshift(marker);
33
+ (0, roosterjs_content_model_dom_1.setParagraphNotImplicit)(markerParagraph);
34
+ (0, roosterjs_content_model_dom_1.setSelection)(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);
35
+ }
36
+ rawEvent.preventDefault();
37
+ return true;
33
38
  }
34
- rawEvent.preventDefault();
35
- return true;
36
39
  }
37
40
  return false;
38
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"handleTabOnTableCell.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTableCell.ts"],"names":[],"mappings":";;;;IAcA;;;OAGG;IACH,SAAgB,oBAAoB,CAChC,KAAmC,EACnC,IAAmC,EACnC,QAAuB;;QAEvB,IAAM,kBAAkB,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3D,+CAA+C;QAC/C,IACI,CAAC,QAAQ,CAAC,QAAQ;YAClB,kBAAkB;YAClB,CAAA,MAAA,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAC9D,kBAAkB,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CACvC,MAAK,IAAI,EACZ;YACE,IAAM,UAAU,GAAG,IAAA,yCAAW,EAAC,kBAAkB,CAAC,CAAC;YACnD,IAAA,4CAAc,EAAC,UAAU,EAAE,aAAa,CAAC,CAAC;YAE1C,wBAAwB;YACxB,IAAA,gDAAkB,EAAC,UAAU,EAAE;gBAC3B,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBACpC,WAAW,EAAE,CAAC;gBACd,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBACnC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;aAC3C,CAAC,CAAC;YACH,IAAA,4CAAc,EAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAEzC,wDAAwD;YACxD,IAAM,eAAe,GAAG,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACzF,IAAI,eAAe,CAAC,SAAS,IAAI,WAAW,EAAE;gBAC1C,IAAM,MAAM,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAEnD,IAAA,yCAAW,EAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACtD,IAAA,qDAAuB,EAAC,eAAe,CAAC,CAAC;gBACzC,IAAA,0CAAY,EAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;aAC9E;YAED,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IA1CD,oDA0CC","sourcesContent":["import { clearSelectedCells, insertTableRow } from 'roosterjs-content-model-api';\nimport {\n createSelectionMarker,\n getFirstSelectedTable,\n mutateBlock,\n normalizeTable,\n setParagraphNotImplicit,\n setSelection,\n} from 'roosterjs-content-model-dom';\nimport type {\n ReadonlyContentModelDocument,\n ReadonlyContentModelTableCell,\n} from 'roosterjs-content-model-types';\n\n/**\n * When the cursor is on the last cell of a table, add new row and focus first new cell.\n * @internal\n */\nexport function handleTabOnTableCell(\n model: ReadonlyContentModelDocument,\n cell: ReadonlyContentModelTableCell,\n rawEvent: KeyboardEvent\n) {\n const readonlyTableModel = getFirstSelectedTable(model)[0];\n\n // Check if cursor is on last cell of the table\n if (\n !rawEvent.shiftKey &&\n readonlyTableModel &&\n readonlyTableModel.rows[readonlyTableModel.rows.length - 1]?.cells[\n readonlyTableModel.widths.length - 1\n ] === cell\n ) {\n const tableModel = mutateBlock(readonlyTableModel);\n insertTableRow(tableModel, 'insertBelow');\n\n // Clear Table selection\n clearSelectedCells(tableModel, {\n firstRow: tableModel.rows.length - 1,\n firstColumn: 0,\n lastRow: tableModel.rows.length - 1,\n lastColumn: tableModel.widths.length - 1,\n });\n normalizeTable(tableModel, model.format);\n\n // Add selection marker to the first cell of the new row\n const markerParagraph = tableModel.rows[tableModel.rows.length - 1]?.cells[0]?.blocks[0];\n if (markerParagraph.blockType == 'Paragraph') {\n const marker = createSelectionMarker(model.format);\n\n mutateBlock(markerParagraph).segments.unshift(marker);\n setParagraphNotImplicit(markerParagraph);\n setSelection(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);\n }\n\n rawEvent.preventDefault();\n return true;\n }\n\n return false;\n}\n"]}
1
+ {"version":3,"file":"handleTabOnTableCell.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTableCell.ts"],"names":[],"mappings":";;;;IAcA;;;OAGG;IACH,SAAgB,oBAAoB,CAChC,KAAmC,EACnC,IAAmC,EACnC,QAAuB;;QAEvB,IAAM,kBAAkB,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3D,IAAI,kBAAkB,EAAE;YACpB,+CAA+C;YAC/C,IAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC5E,IAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,IAAM,QAAQ,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YAE5C,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE;gBACrD,IAAM,UAAU,GAAG,IAAA,yCAAW,EAAC,kBAAkB,CAAC,CAAC;gBACnD,IAAA,4CAAc,EAAC,UAAU,EAAE,aAAa,CAAC,CAAC;gBAE1C,wBAAwB;gBACxB,IAAA,gDAAkB,EAAC,UAAU,EAAE;oBAC3B,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;oBACpC,WAAW,EAAE,CAAC;oBACd,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;oBACnC,UAAU,EAAE,UAAU;iBACzB,CAAC,CAAC;gBACH,IAAA,4CAAc,EAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAEzC,wDAAwD;gBACxD,IAAM,eAAe,GACjB,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gBACrE,IAAI,eAAe,CAAC,SAAS,IAAI,WAAW,EAAE;oBAC1C,IAAM,MAAM,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAEnD,IAAA,yCAAW,EAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBACtD,IAAA,qDAAuB,EAAC,eAAe,CAAC,CAAC;oBACzC,IAAA,0CAAY,EAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;iBAC9E;gBAED,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC;aACf;SACJ;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IA3CD,oDA2CC","sourcesContent":["import { clearSelectedCells, insertTableRow } from 'roosterjs-content-model-api';\nimport {\n createSelectionMarker,\n getFirstSelectedTable,\n mutateBlock,\n normalizeTable,\n setParagraphNotImplicit,\n setSelection,\n} from 'roosterjs-content-model-dom';\nimport type {\n ReadonlyContentModelDocument,\n ReadonlyContentModelTableCell,\n} from 'roosterjs-content-model-types';\n\n/**\n * When the cursor is on the last cell of a table, add new row and focus first new cell.\n * @internal\n */\nexport function handleTabOnTableCell(\n model: ReadonlyContentModelDocument,\n cell: ReadonlyContentModelTableCell,\n rawEvent: KeyboardEvent\n) {\n const readonlyTableModel = getFirstSelectedTable(model)[0];\n\n if (readonlyTableModel) {\n // Check if cursor is on last cell of the table\n const lastRow = readonlyTableModel.rows[readonlyTableModel.rows.length - 1];\n const lastColumn = lastRow ? lastRow.cells.length - 1 : -1;\n const lastCell = lastRow?.cells[lastColumn];\n\n if (!rawEvent.shiftKey && lastCell && lastCell === cell) {\n const tableModel = mutateBlock(readonlyTableModel);\n insertTableRow(tableModel, 'insertBelow');\n\n // Clear Table selection\n clearSelectedCells(tableModel, {\n firstRow: tableModel.rows.length - 1,\n firstColumn: 0,\n lastRow: tableModel.rows.length - 1,\n lastColumn: lastColumn,\n });\n normalizeTable(tableModel, model.format);\n\n // Add selection marker to the first cell of the new row\n const markerParagraph =\n tableModel.rows[tableModel.rows.length - 1]?.cells[0]?.blocks[0];\n if (markerParagraph.blockType == 'Paragraph') {\n const marker = createSelectionMarker(model.format);\n\n mutateBlock(markerParagraph).segments.unshift(marker);\n setParagraphNotImplicit(markerParagraph);\n setSelection(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);\n }\n\n rawEvent.preventDefault();\n return true;\n }\n }\n\n return false;\n}\n"]}
@@ -14,8 +14,9 @@ export function handleTabOnTable(model, rawEvent) {
14
14
  return false;
15
15
  }
16
16
  function isWholeTableSelected(tableModel) {
17
- var _a, _b, _c, _d;
18
- return (((_b = (_a = tableModel.rows[0]) === null || _a === void 0 ? void 0 : _a.cells[0]) === null || _b === void 0 ? void 0 : _b.isSelected) &&
19
- ((_d = (_c = tableModel.rows[tableModel.rows.length - 1]) === null || _c === void 0 ? void 0 : _c.cells[tableModel.widths.length - 1]) === null || _d === void 0 ? void 0 : _d.isSelected));
17
+ var _a, _b;
18
+ var lastRow = tableModel.rows[tableModel.rows.length - 1];
19
+ var lastCell = lastRow === null || lastRow === void 0 ? void 0 : lastRow.cells[lastRow.cells.length - 1];
20
+ return ((_b = (_a = tableModel.rows[0]) === null || _a === void 0 ? void 0 : _a.cells[0]) === null || _b === void 0 ? void 0 : _b.isSelected) && (lastCell === null || lastCell === void 0 ? void 0 : lastCell.isSelected);
20
21
  }
21
22
  //# sourceMappingURL=handleTabOnTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handleTabOnTable.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAMlE;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAmC,EAAE,QAAuB;IACzF,IAAM,UAAU,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,IAAI,UAAU,IAAI,oBAAoB,CAAC,UAAU,CAAC,EAAE;QAChD,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACrE,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;KACf;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,oBAAoB,CAAC,UAAqC;;IAC/D,OAAO,CACH,CAAA,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,CAAC,0CAAE,UAAU;SACxC,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,UAAU,CAAA,CAC/F,CAAC;AACN,CAAC","sourcesContent":["import { getFirstSelectedTable } from 'roosterjs-content-model-dom';\nimport { setModelIndentation } from 'roosterjs-content-model-api';\nimport type {\n ReadonlyContentModelDocument,\n ReadonlyContentModelTable,\n} from 'roosterjs-content-model-types';\n\n/**\n * When the whole table is selected, indent or outdent the whole table with setModelIndentation.\n * @internal\n */\nexport function handleTabOnTable(model: ReadonlyContentModelDocument, rawEvent: KeyboardEvent) {\n const tableModel = getFirstSelectedTable(model)[0];\n if (tableModel && isWholeTableSelected(tableModel)) {\n setModelIndentation(model, rawEvent.shiftKey ? 'outdent' : 'indent');\n rawEvent.preventDefault();\n return true;\n }\n return false;\n}\n\nfunction isWholeTableSelected(tableModel: ReadonlyContentModelTable) {\n return (\n tableModel.rows[0]?.cells[0]?.isSelected &&\n tableModel.rows[tableModel.rows.length - 1]?.cells[tableModel.widths.length - 1]?.isSelected\n );\n}\n"]}
1
+ {"version":3,"file":"handleTabOnTable.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAMlE;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAmC,EAAE,QAAuB;IACzF,IAAM,UAAU,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,IAAI,UAAU,IAAI,oBAAoB,CAAC,UAAU,CAAC,EAAE;QAChD,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACrE,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;KACf;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,oBAAoB,CAAC,UAAqC;;IAC/D,IAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5D,IAAM,QAAQ,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE1D,OAAO,CAAA,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,CAAC,0CAAE,UAAU,MAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,CAAA,CAAC;AAC5E,CAAC","sourcesContent":["import { getFirstSelectedTable } from 'roosterjs-content-model-dom';\nimport { setModelIndentation } from 'roosterjs-content-model-api';\nimport type {\n ReadonlyContentModelDocument,\n ReadonlyContentModelTable,\n} from 'roosterjs-content-model-types';\n\n/**\n * When the whole table is selected, indent or outdent the whole table with setModelIndentation.\n * @internal\n */\nexport function handleTabOnTable(model: ReadonlyContentModelDocument, rawEvent: KeyboardEvent) {\n const tableModel = getFirstSelectedTable(model)[0];\n if (tableModel && isWholeTableSelected(tableModel)) {\n setModelIndentation(model, rawEvent.shiftKey ? 'outdent' : 'indent');\n rawEvent.preventDefault();\n return true;\n }\n return false;\n}\n\nfunction isWholeTableSelected(tableModel: ReadonlyContentModelTable) {\n const lastRow = tableModel.rows[tableModel.rows.length - 1];\n const lastCell = lastRow?.cells[lastRow.cells.length - 1];\n\n return tableModel.rows[0]?.cells[0]?.isSelected && lastCell?.isSelected;\n}\n"]}
@@ -5,32 +5,35 @@ import { createSelectionMarker, getFirstSelectedTable, mutateBlock, normalizeTab
5
5
  * @internal
6
6
  */
7
7
  export function handleTabOnTableCell(model, cell, rawEvent) {
8
- var _a, _b, _c;
8
+ var _a, _b;
9
9
  var readonlyTableModel = getFirstSelectedTable(model)[0];
10
- // Check if cursor is on last cell of the table
11
- if (!rawEvent.shiftKey &&
12
- readonlyTableModel &&
13
- ((_a = readonlyTableModel.rows[readonlyTableModel.rows.length - 1]) === null || _a === void 0 ? void 0 : _a.cells[readonlyTableModel.widths.length - 1]) === cell) {
14
- var tableModel = mutateBlock(readonlyTableModel);
15
- insertTableRow(tableModel, 'insertBelow');
16
- // Clear Table selection
17
- clearSelectedCells(tableModel, {
18
- firstRow: tableModel.rows.length - 1,
19
- firstColumn: 0,
20
- lastRow: tableModel.rows.length - 1,
21
- lastColumn: tableModel.widths.length - 1,
22
- });
23
- normalizeTable(tableModel, model.format);
24
- // Add selection marker to the first cell of the new row
25
- var markerParagraph = (_c = (_b = tableModel.rows[tableModel.rows.length - 1]) === null || _b === void 0 ? void 0 : _b.cells[0]) === null || _c === void 0 ? void 0 : _c.blocks[0];
26
- if (markerParagraph.blockType == 'Paragraph') {
27
- var marker = createSelectionMarker(model.format);
28
- mutateBlock(markerParagraph).segments.unshift(marker);
29
- setParagraphNotImplicit(markerParagraph);
30
- setSelection(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);
10
+ if (readonlyTableModel) {
11
+ // Check if cursor is on last cell of the table
12
+ var lastRow = readonlyTableModel.rows[readonlyTableModel.rows.length - 1];
13
+ var lastColumn = lastRow ? lastRow.cells.length - 1 : -1;
14
+ var lastCell = lastRow === null || lastRow === void 0 ? void 0 : lastRow.cells[lastColumn];
15
+ if (!rawEvent.shiftKey && lastCell && lastCell === cell) {
16
+ var tableModel = mutateBlock(readonlyTableModel);
17
+ insertTableRow(tableModel, 'insertBelow');
18
+ // Clear Table selection
19
+ clearSelectedCells(tableModel, {
20
+ firstRow: tableModel.rows.length - 1,
21
+ firstColumn: 0,
22
+ lastRow: tableModel.rows.length - 1,
23
+ lastColumn: lastColumn,
24
+ });
25
+ normalizeTable(tableModel, model.format);
26
+ // Add selection marker to the first cell of the new row
27
+ var markerParagraph = (_b = (_a = tableModel.rows[tableModel.rows.length - 1]) === null || _a === void 0 ? void 0 : _a.cells[0]) === null || _b === void 0 ? void 0 : _b.blocks[0];
28
+ if (markerParagraph.blockType == 'Paragraph') {
29
+ var marker = createSelectionMarker(model.format);
30
+ mutateBlock(markerParagraph).segments.unshift(marker);
31
+ setParagraphNotImplicit(markerParagraph);
32
+ setSelection(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);
33
+ }
34
+ rawEvent.preventDefault();
35
+ return true;
31
36
  }
32
- rawEvent.preventDefault();
33
- return true;
34
37
  }
35
38
  return false;
36
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"handleTabOnTableCell.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTableCell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EACH,qBAAqB,EACrB,qBAAqB,EACrB,WAAW,EACX,cAAc,EACd,uBAAuB,EACvB,YAAY,GACf,MAAM,6BAA6B,CAAC;AAMrC;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAChC,KAAmC,EACnC,IAAmC,EACnC,QAAuB;;IAEvB,IAAM,kBAAkB,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,+CAA+C;IAC/C,IACI,CAAC,QAAQ,CAAC,QAAQ;QAClB,kBAAkB;QAClB,CAAA,MAAA,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAC9D,kBAAkB,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CACvC,MAAK,IAAI,EACZ;QACE,IAAM,UAAU,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC;QACnD,cAAc,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAE1C,wBAAwB;QACxB,kBAAkB,CAAC,UAAU,EAAE;YAC3B,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YACpC,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YACnC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;SAC3C,CAAC,CAAC;QACH,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAEzC,wDAAwD;QACxD,IAAM,eAAe,GAAG,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QACzF,IAAI,eAAe,CAAC,SAAS,IAAI,WAAW,EAAE;YAC1C,IAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEnD,WAAW,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACtD,uBAAuB,CAAC,eAAe,CAAC,CAAC;YACzC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;SAC9E;QAED,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;KACf;IAED,OAAO,KAAK,CAAC;AACjB,CAAC","sourcesContent":["import { clearSelectedCells, insertTableRow } from 'roosterjs-content-model-api';\nimport {\n createSelectionMarker,\n getFirstSelectedTable,\n mutateBlock,\n normalizeTable,\n setParagraphNotImplicit,\n setSelection,\n} from 'roosterjs-content-model-dom';\nimport type {\n ReadonlyContentModelDocument,\n ReadonlyContentModelTableCell,\n} from 'roosterjs-content-model-types';\n\n/**\n * When the cursor is on the last cell of a table, add new row and focus first new cell.\n * @internal\n */\nexport function handleTabOnTableCell(\n model: ReadonlyContentModelDocument,\n cell: ReadonlyContentModelTableCell,\n rawEvent: KeyboardEvent\n) {\n const readonlyTableModel = getFirstSelectedTable(model)[0];\n\n // Check if cursor is on last cell of the table\n if (\n !rawEvent.shiftKey &&\n readonlyTableModel &&\n readonlyTableModel.rows[readonlyTableModel.rows.length - 1]?.cells[\n readonlyTableModel.widths.length - 1\n ] === cell\n ) {\n const tableModel = mutateBlock(readonlyTableModel);\n insertTableRow(tableModel, 'insertBelow');\n\n // Clear Table selection\n clearSelectedCells(tableModel, {\n firstRow: tableModel.rows.length - 1,\n firstColumn: 0,\n lastRow: tableModel.rows.length - 1,\n lastColumn: tableModel.widths.length - 1,\n });\n normalizeTable(tableModel, model.format);\n\n // Add selection marker to the first cell of the new row\n const markerParagraph = tableModel.rows[tableModel.rows.length - 1]?.cells[0]?.blocks[0];\n if (markerParagraph.blockType == 'Paragraph') {\n const marker = createSelectionMarker(model.format);\n\n mutateBlock(markerParagraph).segments.unshift(marker);\n setParagraphNotImplicit(markerParagraph);\n setSelection(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);\n }\n\n rawEvent.preventDefault();\n return true;\n }\n\n return false;\n}\n"]}
1
+ {"version":3,"file":"handleTabOnTableCell.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTableCell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EACH,qBAAqB,EACrB,qBAAqB,EACrB,WAAW,EACX,cAAc,EACd,uBAAuB,EACvB,YAAY,GACf,MAAM,6BAA6B,CAAC;AAMrC;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAChC,KAAmC,EACnC,IAAmC,EACnC,QAAuB;;IAEvB,IAAM,kBAAkB,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,IAAI,kBAAkB,EAAE;QACpB,+CAA+C;QAC/C,IAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5E,IAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAM,QAAQ,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAE5C,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE;YACrD,IAAM,UAAU,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC;YACnD,cAAc,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;YAE1C,wBAAwB;YACxB,kBAAkB,CAAC,UAAU,EAAE;gBAC3B,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBACpC,WAAW,EAAE,CAAC;gBACd,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBACnC,UAAU,EAAE,UAAU;aACzB,CAAC,CAAC;YACH,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAEzC,wDAAwD;YACxD,IAAM,eAAe,GACjB,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACrE,IAAI,eAAe,CAAC,SAAS,IAAI,WAAW,EAAE;gBAC1C,IAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAEnD,WAAW,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACtD,uBAAuB,CAAC,eAAe,CAAC,CAAC;gBACzC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;aAC9E;YAED,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;SACf;KACJ;IAED,OAAO,KAAK,CAAC;AACjB,CAAC","sourcesContent":["import { clearSelectedCells, insertTableRow } from 'roosterjs-content-model-api';\nimport {\n createSelectionMarker,\n getFirstSelectedTable,\n mutateBlock,\n normalizeTable,\n setParagraphNotImplicit,\n setSelection,\n} from 'roosterjs-content-model-dom';\nimport type {\n ReadonlyContentModelDocument,\n ReadonlyContentModelTableCell,\n} from 'roosterjs-content-model-types';\n\n/**\n * When the cursor is on the last cell of a table, add new row and focus first new cell.\n * @internal\n */\nexport function handleTabOnTableCell(\n model: ReadonlyContentModelDocument,\n cell: ReadonlyContentModelTableCell,\n rawEvent: KeyboardEvent\n) {\n const readonlyTableModel = getFirstSelectedTable(model)[0];\n\n if (readonlyTableModel) {\n // Check if cursor is on last cell of the table\n const lastRow = readonlyTableModel.rows[readonlyTableModel.rows.length - 1];\n const lastColumn = lastRow ? lastRow.cells.length - 1 : -1;\n const lastCell = lastRow?.cells[lastColumn];\n\n if (!rawEvent.shiftKey && lastCell && lastCell === cell) {\n const tableModel = mutateBlock(readonlyTableModel);\n insertTableRow(tableModel, 'insertBelow');\n\n // Clear Table selection\n clearSelectedCells(tableModel, {\n firstRow: tableModel.rows.length - 1,\n firstColumn: 0,\n lastRow: tableModel.rows.length - 1,\n lastColumn: lastColumn,\n });\n normalizeTable(tableModel, model.format);\n\n // Add selection marker to the first cell of the new row\n const markerParagraph =\n tableModel.rows[tableModel.rows.length - 1]?.cells[0]?.blocks[0];\n if (markerParagraph.blockType == 'Paragraph') {\n const marker = createSelectionMarker(model.format);\n\n mutateBlock(markerParagraph).segments.unshift(marker);\n setParagraphNotImplicit(markerParagraph);\n setSelection(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);\n }\n\n rawEvent.preventDefault();\n return true;\n }\n }\n\n return false;\n}\n"]}
package/package.json CHANGED
@@ -3,12 +3,12 @@
3
3
  "description": "Plugins for roosterjs",
4
4
  "dependencies": {
5
5
  "tslib": "^2.3.1",
6
- "roosterjs-content-model-core": "^9.25.0",
7
- "roosterjs-content-model-dom": "^9.25.0",
8
- "roosterjs-content-model-types": "^9.25.0",
9
- "roosterjs-content-model-api": "^9.25.0"
6
+ "roosterjs-content-model-core": "^9.26.0",
7
+ "roosterjs-content-model-dom": "^9.26.0",
8
+ "roosterjs-content-model-types": "^9.26.0",
9
+ "roosterjs-content-model-api": "^9.26.0"
10
10
  },
11
- "version": "9.25.0",
11
+ "version": "9.26.0",
12
12
  "main": "./lib/index.js",
13
13
  "typings": "./lib/index.d.ts",
14
14
  "module": "./lib-mjs/index.js",