roosterjs 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.
@@ -1,4 +1,4 @@
1
- // Type definitions for roosterjs (Version 9.25.0)
1
+ // Type definitions for roosterjs (Version 9.26.0)
2
2
  // Generated by dts tool from roosterjs
3
3
  // Project: https://github.com/Microsoft/roosterjs
4
4
 
@@ -2827,7 +2827,7 @@ export interface EditorContext {
2827
2827
  /**
2828
2828
  * When set to true, size of table will be recalculated when converting from DOM to Content Model.
2829
2829
  */
2830
- recalculateTableSize?: boolean;
2830
+ recalculateTableSize?: boolean | 'all' | 'selected' | 'none';
2831
2831
  }
2832
2832
 
2833
2833
  /**
@@ -3086,7 +3086,16 @@ export interface DomToModelOptionForCreateModel extends DomToModelOption {
3086
3086
  /**
3087
3087
  * When set to true, it will try to reuse cached content model if any
3088
3088
  */
3089
- tryGetFromCache: boolean;
3089
+ tryGetFromCache?: boolean;
3090
+ /**
3091
+ * Whether recalculate table size when parse table
3092
+ * 'all' or true means recalculate all tables in the model
3093
+ * 'selected' means recalculate only selected tables in the model
3094
+ * 'none' or false means do not recalculate any table in the model
3095
+ *
3096
+ * When this option is passed, "tryGetFromCache" will be ignored.
3097
+ */
3098
+ recalculateTableSize?: boolean | 'all' | 'selected' | 'none';
3090
3099
  }
3091
3100
 
3092
3101
  /**
@@ -4301,16 +4301,18 @@ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-mo
4301
4301
  function clearSelectedCells(table, sel) {
4302
4302
  if (sel.firstColumn >= 0 &&
4303
4303
  sel.firstRow >= 0 &&
4304
- sel.lastColumn < table.widths.length &&
4305
- sel.lastRow < table.rows.length) {
4304
+ sel.lastRow < table.rows.length &&
4305
+ sel.lastColumn < table.rows[sel.lastRow].cells.length) {
4306
4306
  for (var i = sel.firstRow; i <= sel.lastRow; i++) {
4307
4307
  var row = table.rows[i];
4308
4308
  for (var j = sel.firstColumn; j <= sel.lastColumn; j++) {
4309
4309
  var cell = row.cells[j];
4310
- if (cell.isSelected) {
4311
- (0, roosterjs_content_model_dom_1.mutateBlock)(cell).isSelected = false;
4310
+ if (cell) {
4311
+ if (cell.isSelected) {
4312
+ (0, roosterjs_content_model_dom_1.mutateBlock)(cell).isSelected = false;
4313
+ }
4314
+ (0, roosterjs_content_model_dom_1.setSelection)(cell);
4312
4315
  }
4313
- (0, roosterjs_content_model_dom_1.setSelection)(cell);
4314
4316
  }
4315
4317
  }
4316
4318
  }
@@ -4752,7 +4754,9 @@ function splitTableCellHorizontally(table) {
4752
4754
  table.rows.forEach(function (row, rowIndex) {
4753
4755
  var cell = row.cells[colIndex];
4754
4756
  if (cell) {
4755
- var newCell = (0, roosterjs_content_model_dom_1.createTableCell)(cell.spanLeft, cell.spanAbove, cell.isHeader, cell.format);
4757
+ var mutableCell = (0, roosterjs_content_model_dom_1.mutateBlock)(cell);
4758
+ delete mutableCell.format.width;
4759
+ var newCell = (0, roosterjs_content_model_dom_1.createTableCell)(cell.spanLeft, cell.spanAbove, cell.isHeader, mutableCell.format);
4756
4760
  newCell.dataset = (0, tslib_1.__assign)({}, cell.dataset);
4757
4761
  if (rowIndex < sel.firstRow || rowIndex > sel.lastRow) {
4758
4762
  newCell.spanLeft = true;
@@ -4818,7 +4822,9 @@ function splitTableCellVertically(table) {
4818
4822
  format: (0, tslib_1.__assign)({}, row.format),
4819
4823
  height: newHeight,
4820
4824
  cells: row.cells.map(function (cell, colIndex) {
4821
- var newCell = (0, roosterjs_content_model_dom_1.createTableCell)(cell.spanLeft, cell.spanAbove, cell.isHeader, cell.format);
4825
+ var mutableCell = (0, roosterjs_content_model_dom_1.mutateBlock)(cell);
4826
+ delete mutableCell.format.height;
4827
+ var newCell = (0, roosterjs_content_model_dom_1.createTableCell)(cell.spanLeft, cell.spanAbove, cell.isHeader, mutableCell.format);
4822
4828
  newCell.dataset = (0, tslib_1.__assign)({}, cell.dataset);
4823
4829
  if (colIndex < sel.firstColumn || colIndex > sel.lastColumn) {
4824
4830
  newCell.spanAbove = true;
@@ -7383,6 +7389,8 @@ function formatTableWithContentModel(editor, apiName, callback, selectionOverrid
7383
7389
  }, {
7384
7390
  apiName: apiName,
7385
7391
  selectionOverride: selectionOverride,
7392
+ }, {
7393
+ recalculateTableSize: 'selected',
7386
7394
  });
7387
7395
  }
7388
7396
  exports.formatTableWithContentModel = formatTableWithContentModel;
@@ -8891,7 +8899,8 @@ var createContentModel = function (core, option, selectionOverride) {
8891
8899
  var _a;
8892
8900
  // Flush all mutations if any, so that we can get an up-to-date Content Model
8893
8901
  (_a = core.cache.textMutationObserver) === null || _a === void 0 ? void 0 : _a.flushMutations();
8894
- if (!selectionOverride && (!option || option.tryGetFromCache)) {
8902
+ var tryGetFromCache = !option || (option.tryGetFromCache && typeof option.recalculateTableSize === 'undefined');
8903
+ if (!selectionOverride && tryGetFromCache) {
8895
8904
  var cachedModel = core.cache.cachedModel;
8896
8905
  if (cachedModel) {
8897
8906
  // When in shadow edit, use a cloned model so we won't pollute the cached one
@@ -8905,6 +8914,7 @@ var createContentModel = function (core, option, selectionOverride) {
8905
8914
  : selectionOverride || core.api.getDOMSelection(core) || undefined;
8906
8915
  var saveIndex = !option && !selectionOverride;
8907
8916
  var editorContext = core.api.createEditorContext(core, saveIndex);
8917
+ editorContext.recalculateTableSize = option === null || option === void 0 ? void 0 : option.recalculateTableSize;
8908
8918
  var settings = core.environment.domToModelSettings;
8909
8919
  var domToModelContext = option
8910
8920
  ? (0, roosterjs_content_model_dom_1.createDomToModelContext)(editorContext, settings.builtIn, settings.customized, option)
@@ -17255,6 +17265,7 @@ var addBlock_1 = __webpack_require__(/*! ../../modelApi/common/addBlock */ "./pa
17255
17265
  var createTable_1 = __webpack_require__(/*! ../../modelApi/creators/createTable */ "./packages/roosterjs-content-model-dom/lib/modelApi/creators/createTable.ts");
17256
17266
  var createTableCell_1 = __webpack_require__(/*! ../../modelApi/creators/createTableCell */ "./packages/roosterjs-content-model-dom/lib/modelApi/creators/createTableCell.ts");
17257
17267
  var getBoundingClientRect_1 = __webpack_require__(/*! ../utils/getBoundingClientRect */ "./packages/roosterjs-content-model-dom/lib/domToModel/utils/getBoundingClientRect.ts");
17268
+ var getSelectionRootNode_1 = __webpack_require__(/*! ../../domUtils/selection/getSelectionRootNode */ "./packages/roosterjs-content-model-dom/lib/domUtils/selection/getSelectionRootNode.ts");
17258
17269
  var isElementOfType_1 = __webpack_require__(/*! ../../domUtils/isElementOfType */ "./packages/roosterjs-content-model-dom/lib/domUtils/isElementOfType.ts");
17259
17270
  var isNodeOfType_1 = __webpack_require__(/*! ../../domUtils/isNodeOfType */ "./packages/roosterjs-content-model-dom/lib/domUtils/isNodeOfType.ts");
17260
17271
  var parseFormat_1 = __webpack_require__(/*! ../utils/parseFormat */ "./packages/roosterjs-content-model-dom/lib/domToModel/utils/parseFormat.ts");
@@ -17285,6 +17296,7 @@ var tableProcessor = function (group, tableElement, context) {
17285
17296
  var tableSelection = ((_a = context.selection) === null || _a === void 0 ? void 0 : _a.type) == 'table' ? context.selection : null;
17286
17297
  var selectedTable = tableSelection === null || tableSelection === void 0 ? void 0 : tableSelection.table;
17287
17298
  var hasTableSelection = selectedTable == tableElement;
17299
+ var recalculateTableSize = shouldRecalculateTableSize(tableElement, context);
17288
17300
  if (context.allowCacheElement) {
17289
17301
  table.cachedElement = tableElement;
17290
17302
  }
@@ -17327,7 +17339,7 @@ var tableProcessor = function (group, tableElement, context) {
17327
17339
  for (; tableRow.cells[targetCol]; targetCol++) { }
17328
17340
  var td = tr.cells[sourceCol];
17329
17341
  var hasSelectionBeforeCell = context.isInSelection;
17330
- if (context.recalculateTableSize) {
17342
+ if (recalculateTableSize) {
17331
17343
  var colEnd = targetCol + td.colSpan;
17332
17344
  var rowEnd = row + td.rowSpan;
17333
17345
  var needCalcWidth = columnPositions[colEnd] === undefined;
@@ -17471,6 +17483,21 @@ function processColGroup(table, context, result) {
17471
17483
  }
17472
17484
  return hasColGroup;
17473
17485
  }
17486
+ function shouldRecalculateTableSize(table, context) {
17487
+ switch (context.recalculateTableSize) {
17488
+ case true:
17489
+ case 'all':
17490
+ return true;
17491
+ case 'selected':
17492
+ var selectionRoot = (0, getSelectionRootNode_1.getSelectionRootNode)(context.selection);
17493
+ return (!!selectionRoot &&
17494
+ (selectionRoot == table ||
17495
+ table.contains(selectionRoot) ||
17496
+ selectionRoot.contains(table)));
17497
+ default:
17498
+ return false;
17499
+ }
17500
+ }
17474
17501
 
17475
17502
 
17476
17503
  /***/ }),
@@ -31485,9 +31512,10 @@ function handleTabOnTable(model, rawEvent) {
31485
31512
  }
31486
31513
  exports.handleTabOnTable = handleTabOnTable;
31487
31514
  function isWholeTableSelected(tableModel) {
31488
- var _a, _b, _c, _d;
31489
- return (((_b = (_a = tableModel.rows[0]) === null || _a === void 0 ? void 0 : _a.cells[0]) === null || _b === void 0 ? void 0 : _b.isSelected) &&
31490
- ((_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));
31515
+ var _a, _b;
31516
+ var lastRow = tableModel.rows[tableModel.rows.length - 1];
31517
+ var lastCell = lastRow === null || lastRow === void 0 ? void 0 : lastRow.cells[lastRow.cells.length - 1];
31518
+ 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);
31491
31519
  }
31492
31520
 
31493
31521
 
@@ -31510,32 +31538,35 @@ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-mo
31510
31538
  * @internal
31511
31539
  */
31512
31540
  function handleTabOnTableCell(model, cell, rawEvent) {
31513
- var _a, _b, _c;
31541
+ var _a, _b;
31514
31542
  var readonlyTableModel = (0, roosterjs_content_model_dom_1.getFirstSelectedTable)(model)[0];
31515
- // Check if cursor is on last cell of the table
31516
- if (!rawEvent.shiftKey &&
31517
- readonlyTableModel &&
31518
- ((_a = readonlyTableModel.rows[readonlyTableModel.rows.length - 1]) === null || _a === void 0 ? void 0 : _a.cells[readonlyTableModel.widths.length - 1]) === cell) {
31519
- var tableModel = (0, roosterjs_content_model_dom_1.mutateBlock)(readonlyTableModel);
31520
- (0, roosterjs_content_model_api_1.insertTableRow)(tableModel, 'insertBelow');
31521
- // Clear Table selection
31522
- (0, roosterjs_content_model_api_1.clearSelectedCells)(tableModel, {
31523
- firstRow: tableModel.rows.length - 1,
31524
- firstColumn: 0,
31525
- lastRow: tableModel.rows.length - 1,
31526
- lastColumn: tableModel.widths.length - 1,
31527
- });
31528
- (0, roosterjs_content_model_dom_1.normalizeTable)(tableModel, model.format);
31529
- // Add selection marker to the first cell of the new row
31530
- 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];
31531
- if (markerParagraph.blockType == 'Paragraph') {
31532
- var marker = (0, roosterjs_content_model_dom_1.createSelectionMarker)(model.format);
31533
- (0, roosterjs_content_model_dom_1.mutateBlock)(markerParagraph).segments.unshift(marker);
31534
- (0, roosterjs_content_model_dom_1.setParagraphNotImplicit)(markerParagraph);
31535
- (0, roosterjs_content_model_dom_1.setSelection)(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);
31543
+ if (readonlyTableModel) {
31544
+ // Check if cursor is on last cell of the table
31545
+ var lastRow = readonlyTableModel.rows[readonlyTableModel.rows.length - 1];
31546
+ var lastColumn = lastRow ? lastRow.cells.length - 1 : -1;
31547
+ var lastCell = lastRow === null || lastRow === void 0 ? void 0 : lastRow.cells[lastColumn];
31548
+ if (!rawEvent.shiftKey && lastCell && lastCell === cell) {
31549
+ var tableModel = (0, roosterjs_content_model_dom_1.mutateBlock)(readonlyTableModel);
31550
+ (0, roosterjs_content_model_api_1.insertTableRow)(tableModel, 'insertBelow');
31551
+ // Clear Table selection
31552
+ (0, roosterjs_content_model_api_1.clearSelectedCells)(tableModel, {
31553
+ firstRow: tableModel.rows.length - 1,
31554
+ firstColumn: 0,
31555
+ lastRow: tableModel.rows.length - 1,
31556
+ lastColumn: lastColumn,
31557
+ });
31558
+ (0, roosterjs_content_model_dom_1.normalizeTable)(tableModel, model.format);
31559
+ // Add selection marker to the first cell of the new row
31560
+ 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];
31561
+ if (markerParagraph.blockType == 'Paragraph') {
31562
+ var marker = (0, roosterjs_content_model_dom_1.createSelectionMarker)(model.format);
31563
+ (0, roosterjs_content_model_dom_1.mutateBlock)(markerParagraph).segments.unshift(marker);
31564
+ (0, roosterjs_content_model_dom_1.setParagraphNotImplicit)(markerParagraph);
31565
+ (0, roosterjs_content_model_dom_1.setSelection)(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);
31566
+ }
31567
+ rawEvent.preventDefault();
31568
+ return true;
31536
31569
  }
31537
- rawEvent.preventDefault();
31538
- return true;
31539
31570
  }
31540
31571
  return false;
31541
31572
  }