roosterjs 9.24.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.
package/dist/rooster.js CHANGED
@@ -4302,16 +4302,18 @@ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-mo
4302
4302
  function clearSelectedCells(table, sel) {
4303
4303
  if (sel.firstColumn >= 0 &&
4304
4304
  sel.firstRow >= 0 &&
4305
- sel.lastColumn < table.widths.length &&
4306
- sel.lastRow < table.rows.length) {
4305
+ sel.lastRow < table.rows.length &&
4306
+ sel.lastColumn < table.rows[sel.lastRow].cells.length) {
4307
4307
  for (var i = sel.firstRow; i <= sel.lastRow; i++) {
4308
4308
  var row = table.rows[i];
4309
4309
  for (var j = sel.firstColumn; j <= sel.lastColumn; j++) {
4310
4310
  var cell = row.cells[j];
4311
- if (cell.isSelected) {
4312
- (0, roosterjs_content_model_dom_1.mutateBlock)(cell).isSelected = false;
4311
+ if (cell) {
4312
+ if (cell.isSelected) {
4313
+ (0, roosterjs_content_model_dom_1.mutateBlock)(cell).isSelected = false;
4314
+ }
4315
+ (0, roosterjs_content_model_dom_1.setSelection)(cell);
4313
4316
  }
4314
- (0, roosterjs_content_model_dom_1.setSelection)(cell);
4315
4317
  }
4316
4318
  }
4317
4319
  }
@@ -4753,7 +4755,9 @@ function splitTableCellHorizontally(table) {
4753
4755
  table.rows.forEach(function (row, rowIndex) {
4754
4756
  var cell = row.cells[colIndex];
4755
4757
  if (cell) {
4756
- var newCell = (0, roosterjs_content_model_dom_1.createTableCell)(cell.spanLeft, cell.spanAbove, cell.isHeader, cell.format);
4758
+ var mutableCell = (0, roosterjs_content_model_dom_1.mutateBlock)(cell);
4759
+ delete mutableCell.format.width;
4760
+ var newCell = (0, roosterjs_content_model_dom_1.createTableCell)(cell.spanLeft, cell.spanAbove, cell.isHeader, mutableCell.format);
4757
4761
  newCell.dataset = (0, tslib_1.__assign)({}, cell.dataset);
4758
4762
  if (rowIndex < sel.firstRow || rowIndex > sel.lastRow) {
4759
4763
  newCell.spanLeft = true;
@@ -4819,7 +4823,9 @@ function splitTableCellVertically(table) {
4819
4823
  format: (0, tslib_1.__assign)({}, row.format),
4820
4824
  height: newHeight,
4821
4825
  cells: row.cells.map(function (cell, colIndex) {
4822
- var newCell = (0, roosterjs_content_model_dom_1.createTableCell)(cell.spanLeft, cell.spanAbove, cell.isHeader, cell.format);
4826
+ var mutableCell = (0, roosterjs_content_model_dom_1.mutateBlock)(cell);
4827
+ delete mutableCell.format.height;
4828
+ var newCell = (0, roosterjs_content_model_dom_1.createTableCell)(cell.spanLeft, cell.spanAbove, cell.isHeader, mutableCell.format);
4823
4829
  newCell.dataset = (0, tslib_1.__assign)({}, cell.dataset);
4824
4830
  if (colIndex < sel.firstColumn || colIndex > sel.lastColumn) {
4825
4831
  newCell.spanAbove = true;
@@ -5268,7 +5274,7 @@ function getFormatState(editor, conflictSolution) {
5268
5274
  isDarkMode: editor.isDarkMode(),
5269
5275
  };
5270
5276
  editor.formatContentModel(function (model) {
5271
- (0, roosterjs_content_model_dom_1.retrieveModelFormatState)(model, pendingFormat, result, conflictSolution);
5277
+ (0, roosterjs_content_model_dom_1.retrieveModelFormatState)(model, pendingFormat, result, conflictSolution, editor.getDOMHelper());
5272
5278
  return false;
5273
5279
  }, undefined /*options*/, {
5274
5280
  processorOverride: {
@@ -7384,6 +7390,8 @@ function formatTableWithContentModel(editor, apiName, callback, selectionOverrid
7384
7390
  }, {
7385
7391
  apiName: apiName,
7386
7392
  selectionOverride: selectionOverride,
7393
+ }, {
7394
+ recalculateTableSize: 'selected',
7387
7395
  });
7388
7396
  }
7389
7397
  exports.formatTableWithContentModel = formatTableWithContentModel;
@@ -8892,7 +8900,8 @@ var createContentModel = function (core, option, selectionOverride) {
8892
8900
  var _a;
8893
8901
  // Flush all mutations if any, so that we can get an up-to-date Content Model
8894
8902
  (_a = core.cache.textMutationObserver) === null || _a === void 0 ? void 0 : _a.flushMutations();
8895
- if (!selectionOverride && (!option || option.tryGetFromCache)) {
8903
+ var tryGetFromCache = !option || (option.tryGetFromCache && typeof option.recalculateTableSize === 'undefined');
8904
+ if (!selectionOverride && tryGetFromCache) {
8896
8905
  var cachedModel = core.cache.cachedModel;
8897
8906
  if (cachedModel) {
8898
8907
  // When in shadow edit, use a cloned model so we won't pollute the cached one
@@ -8906,6 +8915,7 @@ var createContentModel = function (core, option, selectionOverride) {
8906
8915
  : selectionOverride || core.api.getDOMSelection(core) || undefined;
8907
8916
  var saveIndex = !option && !selectionOverride;
8908
8917
  var editorContext = core.api.createEditorContext(core, saveIndex);
8918
+ editorContext.recalculateTableSize = option === null || option === void 0 ? void 0 : option.recalculateTableSize;
8909
8919
  var settings = core.environment.domToModelSettings;
8910
8920
  var domToModelContext = option
8911
8921
  ? (0, roosterjs_content_model_dom_1.createDomToModelContext)(editorContext, settings.builtIn, settings.customized, option)
@@ -9817,13 +9827,12 @@ var areSameSelections_1 = __webpack_require__(/*! ../../corePlugin/cache/areSame
9817
9827
  var ensureUniqueId_1 = __webpack_require__(/*! ../setEditorStyle/ensureUniqueId */ "./packages/roosterjs-content-model-core/lib/coreApi/setEditorStyle/ensureUniqueId.ts");
9818
9828
  var findLastedCoInMergedCell_1 = __webpack_require__(/*! ./findLastedCoInMergedCell */ "./packages/roosterjs-content-model-core/lib/coreApi/setDOMSelection/findLastedCoInMergedCell.ts");
9819
9829
  var findTableCellElement_1 = __webpack_require__(/*! ./findTableCellElement */ "./packages/roosterjs-content-model-core/lib/coreApi/setDOMSelection/findTableCellElement.ts");
9830
+ var toggleCaret_1 = __webpack_require__(/*! ./toggleCaret */ "./packages/roosterjs-content-model-core/lib/coreApi/setDOMSelection/toggleCaret.ts");
9820
9831
  var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
9821
9832
  var DOM_SELECTION_CSS_KEY = '_DOMSelection';
9822
- var HIDE_CURSOR_CSS_KEY = '_DOMSelectionHideCursor';
9823
9833
  var HIDE_SELECTION_CSS_KEY = '_DOMSelectionHideSelection';
9824
9834
  var IMAGE_ID = 'image';
9825
9835
  var TABLE_ID = 'table';
9826
- var CARET_CSS_RULE = 'caret-color: transparent';
9827
9836
  var TRANSPARENT_SELECTION_CSS_RULE = 'background-color: transparent !important;';
9828
9837
  var SELECTION_SELECTOR = '*::selection';
9829
9838
  var DEFAULT_SELECTION_BORDER_COLOR = '#DB626C';
@@ -9843,8 +9852,8 @@ var setDOMSelection = function (core, selection, skipSelectionChangedEvent) {
9843
9852
  var isDarkMode = core.lifecycle.isDarkMode;
9844
9853
  core.selection.skipReselectOnFocus = true;
9845
9854
  core.api.setEditorStyle(core, DOM_SELECTION_CSS_KEY, null /*cssRule*/);
9846
- core.api.setEditorStyle(core, HIDE_CURSOR_CSS_KEY, null /*cssRule*/);
9847
9855
  core.api.setEditorStyle(core, HIDE_SELECTION_CSS_KEY, null /*cssRule*/);
9856
+ (0, toggleCaret_1.toggleCaret)(core, false /* hide */);
9848
9857
  try {
9849
9858
  switch (selection === null || selection === void 0 ? void 0 : selection.type) {
9850
9859
  case 'image':
@@ -9898,8 +9907,8 @@ var setDOMSelection = function (core, selection, skipSelectionChangedEvent) {
9898
9907
  ? core.selection.tableCellSelectionBackgroundColorDark
9899
9908
  : core.selection.tableCellSelectionBackgroundColor;
9900
9909
  core.api.setEditorStyle(core, DOM_SELECTION_CSS_KEY, "background-color:" + tableSelectionColor + "!important;", tableSelectors);
9901
- core.api.setEditorStyle(core, HIDE_CURSOR_CSS_KEY, CARET_CSS_RULE);
9902
9910
  core.api.setEditorStyle(core, HIDE_SELECTION_CSS_KEY, TRANSPARENT_SELECTION_CSS_RULE, [SELECTION_SELECTOR]);
9911
+ (0, toggleCaret_1.toggleCaret)(core, true /* hide */);
9903
9912
  var nodeToSelect = ((_c = firstCell.cell) === null || _c === void 0 ? void 0 : _c.firstElementChild) || firstCell.cell;
9904
9913
  if (nodeToSelect) {
9905
9914
  setRangeSelection(doc, nodeToSelect || undefined, true /* collapse */);
@@ -9991,6 +10000,31 @@ function setRangeSelection(doc, element, collapse) {
9991
10000
  }
9992
10001
 
9993
10002
 
10003
+ /***/ }),
10004
+
10005
+ /***/ "./packages/roosterjs-content-model-core/lib/coreApi/setDOMSelection/toggleCaret.ts":
10006
+ /*!******************************************************************************************!*\
10007
+ !*** ./packages/roosterjs-content-model-core/lib/coreApi/setDOMSelection/toggleCaret.ts ***!
10008
+ \******************************************************************************************/
10009
+ /***/ ((__unused_webpack_module, exports) => {
10010
+
10011
+ "use strict";
10012
+
10013
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
10014
+ exports.toggleCaret = void 0;
10015
+ var CARET_CSS_RULE = 'caret-color: transparent';
10016
+ var HIDE_CURSOR_CSS_KEY = '_DOMSelectionHideCursor';
10017
+ /**
10018
+ * @internal Show/Hide caret in editor
10019
+ * @param core The editor core
10020
+ * @param isHiding True to hide caret, false to show caret
10021
+ */
10022
+ function toggleCaret(core, isHiding) {
10023
+ core.api.setEditorStyle(core, HIDE_CURSOR_CSS_KEY, isHiding ? CARET_CSS_RULE : null);
10024
+ }
10025
+ exports.toggleCaret = toggleCaret;
10026
+
10027
+
9994
10028
  /***/ }),
9995
10029
 
9996
10030
  /***/ "./packages/roosterjs-content-model-core/lib/coreApi/setEditorStyle/ensureUniqueId.ts":
@@ -10151,6 +10185,7 @@ exports.setLogicalRoot = setLogicalRoot;
10151
10185
  Object.defineProperty(exports, "__esModule", ({ value: true }));
10152
10186
  exports.switchShadowEdit = void 0;
10153
10187
  var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
10188
+ var toggleCaret_1 = __webpack_require__(/*! ../setDOMSelection/toggleCaret */ "./packages/roosterjs-content-model-core/lib/coreApi/setDOMSelection/toggleCaret.ts");
10154
10189
  /**
10155
10190
  * @internal
10156
10191
  * Switch the Shadow Edit mode of editor On/Off
@@ -10173,10 +10208,12 @@ var switchShadowEdit = function (editorCore, isOn) {
10173
10208
  if (!core.cache.cachedModel && model) {
10174
10209
  core.cache.cachedModel = model;
10175
10210
  }
10211
+ (0, toggleCaret_1.toggleCaret)(core, true /* hide */);
10176
10212
  core.lifecycle.shadowEditFragment = fragment;
10177
10213
  }
10178
10214
  else {
10179
10215
  core.lifecycle.shadowEditFragment = null;
10216
+ (0, toggleCaret_1.toggleCaret)(core, false /* hide */);
10180
10217
  core.api.triggerEvent(core, {
10181
10218
  eventType: 'leavingShadowEdit',
10182
10219
  }, false /*broadcast*/);
@@ -12567,8 +12604,13 @@ function handleInputOnDelimiter(editor, range, focusedNode, rawEvent) {
12567
12604
  }
12568
12605
  else {
12569
12606
  if (isEnter) {
12570
- rawEvent.preventDefault();
12571
- editor.formatContentModel(exports.handleEnterInlineEntity);
12607
+ editor.formatContentModel(function (model, context) {
12608
+ var result = (0, exports.handleEnterInlineEntity)(model, context);
12609
+ if (result) {
12610
+ rawEvent.preventDefault();
12611
+ }
12612
+ return result;
12613
+ });
12572
12614
  }
12573
12615
  else {
12574
12616
  editor.takeSnapshot();
@@ -12612,9 +12654,13 @@ var handleEnterInlineEntity = function (model) {
12612
12654
  (0, roosterjs_content_model_dom_1.iterateSelections)(model, function (path, _tableContext, block) {
12613
12655
  if ((block === null || block === void 0 ? void 0 : block.blockType) == 'Paragraph') {
12614
12656
  readonlySelectionBlock = block;
12615
- selectionBlockParent = path[path.length - 1];
12657
+ selectionBlockParent = path[0];
12616
12658
  }
12617
12659
  });
12660
+ if ((selectionBlockParent === null || selectionBlockParent === void 0 ? void 0 : selectionBlockParent.blockGroupType) == 'ListItem') {
12661
+ // No need to handle list item since it will be handled by common enter handler code
12662
+ return false;
12663
+ }
12618
12664
  if (readonlySelectionBlock && selectionBlockParent) {
12619
12665
  var markerIndex = readonlySelectionBlock.segments.findIndex(function (segment) { return segment.segmentType == 'SelectionMarker'; });
12620
12666
  if (markerIndex >= 0) {
@@ -14730,6 +14776,29 @@ var DOMHelperImpl = /** @class */ (function () {
14730
14776
  DOMHelperImpl.prototype.getClonedRoot = function () {
14731
14777
  return this.contentDiv.cloneNode(true /*deep*/);
14732
14778
  };
14779
+ /**
14780
+ * Get format of the container element
14781
+ */
14782
+ DOMHelperImpl.prototype.getContainerFormat = function () {
14783
+ var _a, _b;
14784
+ var window = this.contentDiv.ownerDocument.defaultView;
14785
+ var style = window === null || window === void 0 ? void 0 : window.getComputedStyle(this.contentDiv);
14786
+ return style
14787
+ ? {
14788
+ fontSize: style.fontSize,
14789
+ fontFamily: style.fontFamily,
14790
+ fontWeight: style.fontWeight,
14791
+ textColor: style.color,
14792
+ backgroundColor: style.backgroundColor,
14793
+ italic: style.fontStyle == 'italic',
14794
+ letterSpacing: style.letterSpacing,
14795
+ lineHeight: style.lineHeight,
14796
+ strikethrough: (_a = style.textDecoration) === null || _a === void 0 ? void 0 : _a.includes('line-through'),
14797
+ superOrSubScriptSequence: style.verticalAlign,
14798
+ underline: (_b = style.textDecoration) === null || _b === void 0 ? void 0 : _b.includes('underline'),
14799
+ }
14800
+ : {};
14801
+ };
14733
14802
  return DOMHelperImpl;
14734
14803
  }());
14735
14804
  /**
@@ -17197,6 +17266,7 @@ var addBlock_1 = __webpack_require__(/*! ../../modelApi/common/addBlock */ "./pa
17197
17266
  var createTable_1 = __webpack_require__(/*! ../../modelApi/creators/createTable */ "./packages/roosterjs-content-model-dom/lib/modelApi/creators/createTable.ts");
17198
17267
  var createTableCell_1 = __webpack_require__(/*! ../../modelApi/creators/createTableCell */ "./packages/roosterjs-content-model-dom/lib/modelApi/creators/createTableCell.ts");
17199
17268
  var getBoundingClientRect_1 = __webpack_require__(/*! ../utils/getBoundingClientRect */ "./packages/roosterjs-content-model-dom/lib/domToModel/utils/getBoundingClientRect.ts");
17269
+ var getSelectionRootNode_1 = __webpack_require__(/*! ../../domUtils/selection/getSelectionRootNode */ "./packages/roosterjs-content-model-dom/lib/domUtils/selection/getSelectionRootNode.ts");
17200
17270
  var isElementOfType_1 = __webpack_require__(/*! ../../domUtils/isElementOfType */ "./packages/roosterjs-content-model-dom/lib/domUtils/isElementOfType.ts");
17201
17271
  var isNodeOfType_1 = __webpack_require__(/*! ../../domUtils/isNodeOfType */ "./packages/roosterjs-content-model-dom/lib/domUtils/isNodeOfType.ts");
17202
17272
  var parseFormat_1 = __webpack_require__(/*! ../utils/parseFormat */ "./packages/roosterjs-content-model-dom/lib/domToModel/utils/parseFormat.ts");
@@ -17227,6 +17297,7 @@ var tableProcessor = function (group, tableElement, context) {
17227
17297
  var tableSelection = ((_a = context.selection) === null || _a === void 0 ? void 0 : _a.type) == 'table' ? context.selection : null;
17228
17298
  var selectedTable = tableSelection === null || tableSelection === void 0 ? void 0 : tableSelection.table;
17229
17299
  var hasTableSelection = selectedTable == tableElement;
17300
+ var recalculateTableSize = shouldRecalculateTableSize(tableElement, context);
17230
17301
  if (context.allowCacheElement) {
17231
17302
  table.cachedElement = tableElement;
17232
17303
  }
@@ -17269,21 +17340,24 @@ var tableProcessor = function (group, tableElement, context) {
17269
17340
  for (; tableRow.cells[targetCol]; targetCol++) { }
17270
17341
  var td = tr.cells[sourceCol];
17271
17342
  var hasSelectionBeforeCell = context.isInSelection;
17272
- var colEnd = targetCol + td.colSpan;
17273
- var rowEnd = row + td.rowSpan;
17274
- var needCalcWidth = columnPositions[colEnd] === undefined;
17275
- var needCalcHeight = rowPositions[rowEnd] === undefined;
17276
- if (needCalcWidth || needCalcHeight) {
17277
- var rect = (0, getBoundingClientRect_1.getBoundingClientRect)(td);
17278
- if (rect.width > 0 || rect.height > 0) {
17279
- if (needCalcWidth) {
17280
- var pos = columnPositions[targetCol];
17281
- columnPositions[colEnd] =
17282
- (typeof pos == 'number' ? pos : 0) + rect.width / zoomScale;
17283
- }
17284
- if (needCalcHeight) {
17285
- rowPositions[rowEnd] =
17286
- rowPositions[row] + rect.height / zoomScale;
17343
+ if (recalculateTableSize) {
17344
+ var colEnd = targetCol + td.colSpan;
17345
+ var rowEnd = row + td.rowSpan;
17346
+ var needCalcWidth = columnPositions[colEnd] === undefined;
17347
+ var needCalcHeight = rowPositions[rowEnd] === undefined;
17348
+ if (needCalcWidth || needCalcHeight) {
17349
+ var rect = (0, getBoundingClientRect_1.getBoundingClientRect)(td);
17350
+ if (rect.width > 0 || rect.height > 0) {
17351
+ if (needCalcWidth) {
17352
+ var pos = columnPositions[targetCol];
17353
+ columnPositions[colEnd] =
17354
+ (typeof pos == 'number' ? pos : 0) +
17355
+ rect.width / zoomScale;
17356
+ }
17357
+ if (needCalcHeight) {
17358
+ rowPositions[rowEnd] =
17359
+ rowPositions[row] + rect.height / zoomScale;
17360
+ }
17287
17361
  }
17288
17362
  }
17289
17363
  }
@@ -17410,6 +17484,21 @@ function processColGroup(table, context, result) {
17410
17484
  }
17411
17485
  return hasColGroup;
17412
17486
  }
17487
+ function shouldRecalculateTableSize(table, context) {
17488
+ switch (context.recalculateTableSize) {
17489
+ case true:
17490
+ case 'all':
17491
+ return true;
17492
+ case 'selected':
17493
+ var selectionRoot = (0, getSelectionRootNode_1.getSelectionRootNode)(context.selection);
17494
+ return (!!selectionRoot &&
17495
+ (selectionRoot == table ||
17496
+ table.contains(selectionRoot) ||
17497
+ selectionRoot.contains(table)));
17498
+ default:
17499
+ return false;
17500
+ }
17501
+ }
17413
17502
 
17414
17503
 
17415
17504
  /***/ }),
@@ -18550,15 +18639,20 @@ exports.readFile = void 0;
18550
18639
  * If fail to read, dataUrl will be null
18551
18640
  */
18552
18641
  function readFile(file, callback) {
18553
- if (file) {
18554
- var reader_1 = new FileReader();
18555
- reader_1.onload = function () {
18556
- callback(reader_1.result);
18557
- };
18558
- reader_1.onerror = function () {
18559
- callback(null);
18560
- };
18561
- reader_1.readAsDataURL(file);
18642
+ try {
18643
+ if (file) {
18644
+ var reader_1 = new FileReader();
18645
+ reader_1.onload = function () {
18646
+ callback(reader_1.result);
18647
+ };
18648
+ reader_1.onerror = function () {
18649
+ callback(null);
18650
+ };
18651
+ reader_1.readAsDataURL(file);
18652
+ }
18653
+ }
18654
+ catch (_a) {
18655
+ callback(null);
18562
18656
  }
18563
18657
  }
18564
18658
  exports.readFile = readFile;
@@ -24371,13 +24465,18 @@ var parseValueWithUnit_1 = __webpack_require__(/*! ../../formatHandlers/utils/pa
24371
24465
  * @param formatState Existing format state object, used for receiving the result
24372
24466
  * @param conflictSolution The strategy for handling format conflicts
24373
24467
  */
24374
- function retrieveModelFormatState(model, pendingFormat, formatState, conflictSolution) {
24468
+ function retrieveModelFormatState(model, pendingFormat, formatState, conflictSolution, domHelper) {
24375
24469
  if (conflictSolution === void 0) { conflictSolution = 'remove'; }
24376
24470
  var firstTableContext;
24377
24471
  var firstBlock;
24378
24472
  var isFirst = true;
24379
24473
  var isFirstImage = true;
24380
24474
  var isFirstSegment = true;
24475
+ var containerFormat = undefined;
24476
+ var modelFormat = (0, tslib_1.__assign)({}, model.format);
24477
+ delete modelFormat.italic;
24478
+ delete modelFormat.underline;
24479
+ delete modelFormat.fontWeight;
24381
24480
  (0, iterateSelections_1.iterateSelections)(model, function (path, tableContext, block, segments) {
24382
24481
  // Structure formats
24383
24482
  retrieveStructureFormat(formatState, path, isFirst, conflictSolution);
@@ -24395,13 +24494,19 @@ function retrieveModelFormatState(model, pendingFormat, formatState, conflictSol
24395
24494
  retrieveParagraphFormat(formatState, block, isFirst, conflictSolution);
24396
24495
  // Segment formats
24397
24496
  segments === null || segments === void 0 ? void 0 : segments.forEach(function (segment) {
24398
- var _a, _b, _c;
24497
+ var _a, _b, _c, _d;
24399
24498
  if (isFirstSegment || segment.segmentType != 'SelectionMarker') {
24400
- var modelFormat = (0, tslib_1.__assign)({}, model.format);
24401
- delete modelFormat.italic;
24402
- delete modelFormat.underline;
24403
- delete modelFormat.fontWeight;
24404
- retrieveSegmentFormat(formatState, isFirst, Object.assign({}, modelFormat, block.format, (_a = block.decorator) === null || _a === void 0 ? void 0 : _a.format, segment.format, (_b = segment.code) === null || _b === void 0 ? void 0 : _b.format, (_c = segment.link) === null || _c === void 0 ? void 0 : _c.format, pendingFormat), conflictSolution);
24499
+ var currentFormat = Object.assign({}, block.format, (_a = block.decorator) === null || _a === void 0 ? void 0 : _a.format, segment.format, (_b = segment.code) === null || _b === void 0 ? void 0 : _b.format, (_c = segment.link) === null || _c === void 0 ? void 0 : _c.format, pendingFormat);
24500
+ // Sometimes the content may not specify all required format but just leverage the container format to do so.
24501
+ // In this case, we need to merge the container format into the current format
24502
+ // to make sure the current format contains all required format.
24503
+ if (!hasAllRequiredFormat(currentFormat)) {
24504
+ if (!containerFormat) {
24505
+ containerFormat = (_d = domHelper === null || domHelper === void 0 ? void 0 : domHelper.getContainerFormat()) !== null && _d !== void 0 ? _d : modelFormat;
24506
+ }
24507
+ currentFormat = Object.assign({}, containerFormat, currentFormat);
24508
+ }
24509
+ retrieveSegmentFormat(formatState, isFirst, currentFormat, conflictSolution);
24405
24510
  mergeValue(formatState, 'isCodeInline', !!(segment === null || segment === void 0 ? void 0 : segment.code), isFirst, conflictSolution);
24406
24511
  }
24407
24512
  // We only care the format of selection marker when it is the first selected segment. This is because when selection marker
@@ -24545,13 +24650,19 @@ function mergeValue(format, key, newValue, isFirst, conflictSolution, parseFn) {
24545
24650
  }
24546
24651
  }
24547
24652
  function px2Pt(px) {
24548
- if (px && px.indexOf('px') == px.length - 2) {
24549
- // Edge may not handle the floating computing well which causes the calculated value is a little less than actual value
24550
- // So add 0.05 to fix it
24551
- return Math.round(parseFloat(px) * 75 + 0.05) / 100 + 'pt';
24653
+ if (px) {
24654
+ var index = px.indexOf('px');
24655
+ if (index !== -1 && index === px.length - 2) {
24656
+ // Edge may not handle the floating computing well which causes the calculated value to be a little less than the actual value
24657
+ // So add 0.05 to fix it
24658
+ return Math.round(parseFloat(px) * 75 + 0.05) / 100 + 'pt';
24659
+ }
24552
24660
  }
24553
24661
  return px;
24554
24662
  }
24663
+ function hasAllRequiredFormat(format) {
24664
+ return !!format.fontFamily && !!format.fontSize && !!format.textColor;
24665
+ }
24555
24666
 
24556
24667
 
24557
24668
  /***/ }),
@@ -26713,7 +26824,7 @@ var applyMetadata_1 = __webpack_require__(/*! ../utils/applyMetadata */ "./packa
26713
26824
  * @internal
26714
26825
  */
26715
26826
  var handleList = function (doc, parent, listItem, context, refNode) {
26716
- var _a, _b;
26827
+ var _a, _b, _c;
26717
26828
  var layer = 0;
26718
26829
  var nodeStack = context.listFormat.nodeStack;
26719
26830
  if (nodeStack.length == 0) {
@@ -26727,7 +26838,10 @@ var handleList = function (doc, parent, listItem, context, refNode) {
26727
26838
  var itemLevel = listItem.levels[layer];
26728
26839
  if (stackLevel.listType != itemLevel.listType ||
26729
26840
  ((_a = stackLevel.dataset) === null || _a === void 0 ? void 0 : _a.editingInfo) != itemLevel.dataset.editingInfo ||
26730
- (itemLevel.listType == 'OL' && typeof itemLevel.format.startNumberOverride === 'number')) {
26841
+ (itemLevel.listType == 'OL' &&
26842
+ typeof itemLevel.format.startNumberOverride === 'number') ||
26843
+ (itemLevel.listType == 'UL' &&
26844
+ itemLevel.format.listStyleType != ((_b = stackLevel.format) === null || _b === void 0 ? void 0 : _b.listStyleType))) {
26731
26845
  break;
26732
26846
  }
26733
26847
  }
@@ -26746,7 +26860,7 @@ var handleList = function (doc, parent, listItem, context, refNode) {
26746
26860
  // Need to apply listItemElement formats after applying metadata since the list numbers value relies on the result of metadata handling
26747
26861
  (0, applyFormat_1.applyFormat)(newList, context.formatAppliers.listLevel, level.format, context);
26748
26862
  (0, applyFormat_1.applyFormat)(newList, context.formatAppliers.dataset, level.dataset, context);
26749
- (_b = context.onNodeCreated) === null || _b === void 0 ? void 0 : _b.call(context, level, newList);
26863
+ (_c = context.onNodeCreated) === null || _c === void 0 ? void 0 : _c.call(context, level, newList);
26750
26864
  }
26751
26865
  return refNode;
26752
26866
  };
@@ -27544,6 +27658,1245 @@ function contentModelToTextArray(group, textArray, callbacks) {
27544
27658
  }
27545
27659
 
27546
27660
 
27661
+ /***/ }),
27662
+
27663
+ /***/ "./packages/roosterjs-content-model-markdown/lib/constants/headings.ts":
27664
+ /*!*****************************************************************************!*\
27665
+ !*** ./packages/roosterjs-content-model-markdown/lib/constants/headings.ts ***!
27666
+ \*****************************************************************************/
27667
+ /***/ ((__unused_webpack_module, exports) => {
27668
+
27669
+ "use strict";
27670
+
27671
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
27672
+ exports.MarkdownHeadings = exports.headingLevels = void 0;
27673
+ var HeaderFontSizes = {
27674
+ h1: '2em',
27675
+ h2: '1.5em',
27676
+ h3: '1.17em',
27677
+ h4: '1em',
27678
+ h5: '0.83em',
27679
+ h6: '0.67em',
27680
+ };
27681
+ /**
27682
+ * @internal
27683
+ */
27684
+ exports.headingLevels = [
27685
+ { prefix: '# ', tagName: 'h1', fontSize: HeaderFontSizes.h1 },
27686
+ { prefix: '## ', tagName: 'h2', fontSize: HeaderFontSizes.h2 },
27687
+ { prefix: '### ', tagName: 'h3', fontSize: HeaderFontSizes.h3 },
27688
+ { prefix: '#### ', tagName: 'h4', fontSize: HeaderFontSizes.h4 },
27689
+ { prefix: '##### ', tagName: 'h5', fontSize: HeaderFontSizes.h5 },
27690
+ { prefix: '###### ', tagName: 'h6', fontSize: HeaderFontSizes.h6 },
27691
+ ];
27692
+ /**
27693
+ * @internal
27694
+ */
27695
+ exports.MarkdownHeadings = {
27696
+ h1: '# ',
27697
+ h2: '## ',
27698
+ h3: '### ',
27699
+ h4: '#### ',
27700
+ h5: '##### ',
27701
+ h6: '###### ',
27702
+ };
27703
+
27704
+
27705
+ /***/ }),
27706
+
27707
+ /***/ "./packages/roosterjs-content-model-markdown/lib/index.ts":
27708
+ /*!****************************************************************!*\
27709
+ !*** ./packages/roosterjs-content-model-markdown/lib/index.ts ***!
27710
+ \****************************************************************/
27711
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
27712
+
27713
+ "use strict";
27714
+
27715
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
27716
+ exports.convertContentModelToMarkdown = exports.convertMarkdownToContentModel = void 0;
27717
+ var convertMarkdownToContentModel_1 = __webpack_require__(/*! ./markdownToModel/convertMarkdownToContentModel */ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/convertMarkdownToContentModel.ts");
27718
+ Object.defineProperty(exports, "convertMarkdownToContentModel", ({ enumerable: true, get: function () { return convertMarkdownToContentModel_1.convertMarkdownToContentModel; } }));
27719
+ var convertContentModelToMarkdown_1 = __webpack_require__(/*! ./modelToMarkdown/convertContentModelToMarkdown */ "./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/convertContentModelToMarkdown.ts");
27720
+ Object.defineProperty(exports, "convertContentModelToMarkdown", ({ enumerable: true, get: function () { return convertContentModelToMarkdown_1.convertContentModelToMarkdown; } }));
27721
+
27722
+
27723
+ /***/ }),
27724
+
27725
+ /***/ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/appliers/applyLink.ts":
27726
+ /*!*********************************************************************************************!*\
27727
+ !*** ./packages/roosterjs-content-model-markdown/lib/markdownToModel/appliers/applyLink.ts ***!
27728
+ \*********************************************************************************************/
27729
+ /***/ ((__unused_webpack_module, exports) => {
27730
+
27731
+ "use strict";
27732
+
27733
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
27734
+ exports.applyLink = void 0;
27735
+ /**
27736
+ * @internal
27737
+ */
27738
+ function applyLink(textSegment, text, url) {
27739
+ textSegment.text = text;
27740
+ textSegment.link = {
27741
+ dataset: {},
27742
+ format: {
27743
+ href: url,
27744
+ underline: true,
27745
+ },
27746
+ };
27747
+ return textSegment;
27748
+ }
27749
+ exports.applyLink = applyLink;
27750
+
27751
+
27752
+ /***/ }),
27753
+
27754
+ /***/ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/appliers/applySegmentFormatting.ts":
27755
+ /*!**********************************************************************************************************!*\
27756
+ !*** ./packages/roosterjs-content-model-markdown/lib/markdownToModel/appliers/applySegmentFormatting.ts ***!
27757
+ \**********************************************************************************************************/
27758
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
27759
+
27760
+ "use strict";
27761
+
27762
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
27763
+ exports.applySegmentFormatting = void 0;
27764
+ var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
27765
+ var adjustHeading_1 = __webpack_require__(/*! ../utils/adjustHeading */ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/utils/adjustHeading.ts");
27766
+ var applyLink_1 = __webpack_require__(/*! ./applyLink */ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/appliers/applyLink.ts");
27767
+ var applyTextFormatting_1 = __webpack_require__(/*! ./applyTextFormatting */ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/appliers/applyTextFormatting.ts");
27768
+ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
27769
+ var createImageSegment_1 = __webpack_require__(/*! ../creators/createImageSegment */ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createImageSegment.ts");
27770
+ var splitParagraphSegments_1 = __webpack_require__(/*! ../utils/splitParagraphSegments */ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/utils/splitParagraphSegments.ts");
27771
+ /**
27772
+ * @internal
27773
+ */
27774
+ function applySegmentFormatting(text, paragraph, decorator) {
27775
+ var e_1, _a, _b;
27776
+ if (text.length === 0) {
27777
+ var br = (0, roosterjs_content_model_dom_1.createBr)();
27778
+ paragraph.segments.push(br);
27779
+ }
27780
+ else {
27781
+ var textSegments = (0, splitParagraphSegments_1.splitParagraphSegments)(text);
27782
+ try {
27783
+ for (var textSegments_1 = (0, tslib_1.__values)(textSegments), textSegments_1_1 = textSegments_1.next(); !textSegments_1_1.done; textSegments_1_1 = textSegments_1.next()) {
27784
+ var segment = textSegments_1_1.value;
27785
+ var formattedSegment = (0, roosterjs_content_model_dom_1.createText)(segment.text);
27786
+ if (segment.type === 'image') {
27787
+ var image = (0, createImageSegment_1.createImageSegment)(segment.text, segment.url);
27788
+ paragraph.segments.push(image);
27789
+ }
27790
+ else {
27791
+ if (segment.type === 'link') {
27792
+ (0, applyLink_1.applyLink)(formattedSegment, segment.text, segment.url);
27793
+ }
27794
+ (0, adjustHeading_1.adjustHeading)(formattedSegment, decorator);
27795
+ var formattedSegments = (0, applyTextFormatting_1.applyTextFormatting)(formattedSegment);
27796
+ (_b = paragraph.segments).push.apply(_b, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(formattedSegments), false));
27797
+ }
27798
+ }
27799
+ }
27800
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
27801
+ finally {
27802
+ try {
27803
+ if (textSegments_1_1 && !textSegments_1_1.done && (_a = textSegments_1.return)) _a.call(textSegments_1);
27804
+ }
27805
+ finally { if (e_1) throw e_1.error; }
27806
+ }
27807
+ }
27808
+ return paragraph;
27809
+ }
27810
+ exports.applySegmentFormatting = applySegmentFormatting;
27811
+
27812
+
27813
+ /***/ }),
27814
+
27815
+ /***/ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/appliers/applyTextFormatting.ts":
27816
+ /*!*******************************************************************************************************!*\
27817
+ !*** ./packages/roosterjs-content-model-markdown/lib/markdownToModel/appliers/applyTextFormatting.ts ***!
27818
+ \*******************************************************************************************************/
27819
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
27820
+
27821
+ "use strict";
27822
+
27823
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
27824
+ exports.applyTextFormatting = void 0;
27825
+ var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
27826
+ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
27827
+ var SPLIT_PATTERN = /(\*\*\*.*?\*\*\*|\*\*.*?\*\*|\*.*?\*)/;
27828
+ /**
27829
+ * @internal
27830
+ */
27831
+ function applyTextFormatting(textSegment) {
27832
+ var e_1, _a;
27833
+ var texts = splitSegments(textSegment.text);
27834
+ var textSegments = [];
27835
+ try {
27836
+ for (var texts_1 = (0, tslib_1.__values)(texts), texts_1_1 = texts_1.next(); !texts_1_1.done; texts_1_1 = texts_1.next()) {
27837
+ var text = texts_1_1.value;
27838
+ textSegments.push(createFormattedSegment(text, textSegment.format, textSegment.link));
27839
+ }
27840
+ }
27841
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
27842
+ finally {
27843
+ try {
27844
+ if (texts_1_1 && !texts_1_1.done && (_a = texts_1.return)) _a.call(texts_1);
27845
+ }
27846
+ finally { if (e_1) throw e_1.error; }
27847
+ }
27848
+ return textSegments;
27849
+ }
27850
+ exports.applyTextFormatting = applyTextFormatting;
27851
+ function splitSegments(text) {
27852
+ return text.split(SPLIT_PATTERN).filter(function (s) { return s.trim().length > 0; });
27853
+ }
27854
+ function createFormattedSegment(text, format, link) {
27855
+ if (text.startsWith('***') && text.endsWith('***')) {
27856
+ format = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, format), { fontWeight: 'bold', italic: true });
27857
+ text = text.replace(/\*\*\*/g, '');
27858
+ text = text + ' ';
27859
+ }
27860
+ else if (text.startsWith('**') && text.endsWith('**')) {
27861
+ format = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, format), { fontWeight: 'bold' });
27862
+ text = text.replace(/\*\*/g, '');
27863
+ text = text + ' ';
27864
+ }
27865
+ else if (text.startsWith('*') && text.endsWith('*')) {
27866
+ format = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, format), { italic: true });
27867
+ text = text.replace(/\*/g, '');
27868
+ text = text + ' ';
27869
+ }
27870
+ return (0, roosterjs_content_model_dom_1.createText)(text, format, link);
27871
+ }
27872
+
27873
+
27874
+ /***/ }),
27875
+
27876
+ /***/ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/convertMarkdownToContentModel.ts":
27877
+ /*!********************************************************************************************************!*\
27878
+ !*** ./packages/roosterjs-content-model-markdown/lib/markdownToModel/convertMarkdownToContentModel.ts ***!
27879
+ \********************************************************************************************************/
27880
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
27881
+
27882
+ "use strict";
27883
+
27884
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
27885
+ exports.convertMarkdownToContentModel = void 0;
27886
+ var markdownProcessor_1 = __webpack_require__(/*! ./processor/markdownProcessor */ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/processor/markdownProcessor.ts");
27887
+ /**
27888
+ * Convert the whole content to ContentModel with the given plain text
27889
+ * @param editor The editor instance
27890
+ * @param text The markdown text
27891
+ * @param splitLinesPattern The pattern to split lines. Default is /\r\n|\r|\\n|\n/
27892
+ * @returns The ContentModelDocument
27893
+ */
27894
+ function convertMarkdownToContentModel(text, splitLinesPattern) {
27895
+ var pattern = splitLinesPattern || /\r\n|\r|\\n|\n/;
27896
+ return (0, markdownProcessor_1.markdownProcessor)(text, pattern);
27897
+ }
27898
+ exports.convertMarkdownToContentModel = convertMarkdownToContentModel;
27899
+
27900
+
27901
+ /***/ }),
27902
+
27903
+ /***/ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createBlockGroupFromMarkdown.ts":
27904
+ /*!****************************************************************************************************************!*\
27905
+ !*** ./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createBlockGroupFromMarkdown.ts ***!
27906
+ \****************************************************************************************************************/
27907
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
27908
+
27909
+ "use strict";
27910
+
27911
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
27912
+ exports.createBlockGroupFromMarkdown = void 0;
27913
+ var createBlockQuoteFromMarkdown_1 = __webpack_require__(/*! ./createBlockQuoteFromMarkdown */ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createBlockQuoteFromMarkdown.ts");
27914
+ var createListFromMarkdown_1 = __webpack_require__(/*! ./createListFromMarkdown */ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createListFromMarkdown.ts");
27915
+ var MarkdownBlockGroupType = {
27916
+ unordered_list: 'ListItem',
27917
+ ordered_list: 'ListItem',
27918
+ blockquote: 'FormatContainer',
27919
+ };
27920
+ /**
27921
+ * @internal
27922
+ */
27923
+ function createBlockGroupFromMarkdown(text, patternName, group) {
27924
+ if (MarkdownBlockGroupType[patternName] === 'ListItem') {
27925
+ return (0, createListFromMarkdown_1.createListFromMarkdown)(text, patternName === 'ordered_list' ? 'OL' : 'UL');
27926
+ }
27927
+ else {
27928
+ return (0, createBlockQuoteFromMarkdown_1.createBlockQuoteFromMarkdown)(text, group);
27929
+ }
27930
+ }
27931
+ exports.createBlockGroupFromMarkdown = createBlockGroupFromMarkdown;
27932
+
27933
+
27934
+ /***/ }),
27935
+
27936
+ /***/ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createBlockQuoteFromMarkdown.ts":
27937
+ /*!****************************************************************************************************************!*\
27938
+ !*** ./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createBlockQuoteFromMarkdown.ts ***!
27939
+ \****************************************************************************************************************/
27940
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
27941
+
27942
+ "use strict";
27943
+
27944
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
27945
+ exports.createBlockQuoteFromMarkdown = void 0;
27946
+ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
27947
+ var createParagraphFromMarkdown_1 = __webpack_require__(/*! ./createParagraphFromMarkdown */ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createParagraphFromMarkdown.ts");
27948
+ var QuoteFormat = {
27949
+ borderLeft: '3px solid rgb(200, 200, 200)',
27950
+ textColor: 'rgb(102, 102, 102)',
27951
+ marginTop: '1em',
27952
+ marginBottom: '1em',
27953
+ marginLeft: '40px',
27954
+ marginRight: '40px',
27955
+ paddingLeft: '10px',
27956
+ };
27957
+ /**
27958
+ * @internal
27959
+ */
27960
+ function createBlockQuoteFromMarkdown(text, blockquote) {
27961
+ text = text.replace('>', '');
27962
+ var paragraph = (0, createParagraphFromMarkdown_1.createParagraphFromMarkdown)(text);
27963
+ var quote = blockquote || (0, roosterjs_content_model_dom_1.createFormatContainer)('blockquote', QuoteFormat);
27964
+ quote.blocks.push(paragraph);
27965
+ return quote;
27966
+ }
27967
+ exports.createBlockQuoteFromMarkdown = createBlockQuoteFromMarkdown;
27968
+
27969
+
27970
+ /***/ }),
27971
+
27972
+ /***/ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createImageSegment.ts":
27973
+ /*!******************************************************************************************************!*\
27974
+ !*** ./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createImageSegment.ts ***!
27975
+ \******************************************************************************************************/
27976
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
27977
+
27978
+ "use strict";
27979
+
27980
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
27981
+ exports.createImageSegment = void 0;
27982
+ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
27983
+ /**
27984
+ * @internal
27985
+ */
27986
+ function createImageSegment(text, url) {
27987
+ var image = (0, roosterjs_content_model_dom_1.createImage)(url);
27988
+ image.alt = text;
27989
+ return image;
27990
+ }
27991
+ exports.createImageSegment = createImageSegment;
27992
+
27993
+
27994
+ /***/ }),
27995
+
27996
+ /***/ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createListFromMarkdown.ts":
27997
+ /*!**********************************************************************************************************!*\
27998
+ !*** ./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createListFromMarkdown.ts ***!
27999
+ \**********************************************************************************************************/
28000
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
28001
+
28002
+ "use strict";
28003
+
28004
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
28005
+ exports.createListFromMarkdown = void 0;
28006
+ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
28007
+ var createParagraphFromMarkdown_1 = __webpack_require__(/*! ./createParagraphFromMarkdown */ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createParagraphFromMarkdown.ts");
28008
+ /**
28009
+ * @internal
28010
+ */
28011
+ function createListFromMarkdown(text, listType) {
28012
+ var marker = text.trim().split(' ')[0];
28013
+ var isDummy = isDummyListItem(marker);
28014
+ var itemText = isDummy ? text : text.trim().substring(marker.length);
28015
+ var paragraph = (0, createParagraphFromMarkdown_1.createParagraphFromMarkdown)(itemText.trim());
28016
+ var levels = createLevels(text, listType, isDummy);
28017
+ var listModel = (0, roosterjs_content_model_dom_1.createListItem)(levels);
28018
+ listModel.blocks.push(paragraph);
28019
+ return listModel;
28020
+ }
28021
+ exports.createListFromMarkdown = createListFromMarkdown;
28022
+ function createLevels(text, listType, isDummy) {
28023
+ var level = (0, roosterjs_content_model_dom_1.createListLevel)(listType);
28024
+ if (isDummy) {
28025
+ level.format.displayForDummyItem = 'block';
28026
+ }
28027
+ var levels = [level];
28028
+ if (isSubListItem(text)) {
28029
+ levels.push(level);
28030
+ }
28031
+ return levels;
28032
+ }
28033
+ function isSubListItem(item) {
28034
+ return item.startsWith(' ');
28035
+ }
28036
+ var isDummyListItem = function (item) {
28037
+ return item != '-' && item != '+' && item != '*' && !item.endsWith('.');
28038
+ };
28039
+
28040
+
28041
+ /***/ }),
28042
+
28043
+ /***/ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createParagraphFromMarkdown.ts":
28044
+ /*!***************************************************************************************************************!*\
28045
+ !*** ./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createParagraphFromMarkdown.ts ***!
28046
+ \***************************************************************************************************************/
28047
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
28048
+
28049
+ "use strict";
28050
+
28051
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
28052
+ exports.createParagraphFromMarkdown = void 0;
28053
+ var applySegmentFormatting_1 = __webpack_require__(/*! ../appliers/applySegmentFormatting */ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/appliers/applySegmentFormatting.ts");
28054
+ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
28055
+ var getHeadingDecorator_1 = __webpack_require__(/*! ../utils/getHeadingDecorator */ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/utils/getHeadingDecorator.ts");
28056
+ /**
28057
+ * @internal
28058
+ */
28059
+ function createParagraphFromMarkdown(text) {
28060
+ var paragraph = (0, roosterjs_content_model_dom_1.createParagraph)();
28061
+ var headingType = (0, getHeadingDecorator_1.getHeadingDecorator)(text);
28062
+ if (headingType) {
28063
+ paragraph.decorator = headingType;
28064
+ }
28065
+ (0, applySegmentFormatting_1.applySegmentFormatting)(text, paragraph, headingType);
28066
+ return paragraph;
28067
+ }
28068
+ exports.createParagraphFromMarkdown = createParagraphFromMarkdown;
28069
+
28070
+
28071
+ /***/ }),
28072
+
28073
+ /***/ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createTableFromMarkdown.ts":
28074
+ /*!***********************************************************************************************************!*\
28075
+ !*** ./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createTableFromMarkdown.ts ***!
28076
+ \***********************************************************************************************************/
28077
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
28078
+
28079
+ "use strict";
28080
+
28081
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
28082
+ exports.createTableFromMarkdown = void 0;
28083
+ var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
28084
+ var createParagraphFromMarkdown_1 = __webpack_require__(/*! ./createParagraphFromMarkdown */ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createParagraphFromMarkdown.ts");
28085
+ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
28086
+ /**
28087
+ * @internal
28088
+ */
28089
+ function createTableFromMarkdown(tableLines) {
28090
+ var e_1, _a;
28091
+ var tableDivider = tableLines[1].split('|').filter(function (content) { return content.trim() !== ''; });
28092
+ tableLines.splice(1, 1);
28093
+ var table = (0, roosterjs_content_model_dom_1.createTable)(0, { borderCollapse: true });
28094
+ try {
28095
+ for (var tableLines_1 = (0, tslib_1.__values)(tableLines), tableLines_1_1 = tableLines_1.next(); !tableLines_1_1.done; tableLines_1_1 = tableLines_1.next()) {
28096
+ var line = tableLines_1_1.value;
28097
+ createTableModel(line, table, tableDivider);
28098
+ }
28099
+ }
28100
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
28101
+ finally {
28102
+ try {
28103
+ if (tableLines_1_1 && !tableLines_1_1.done && (_a = tableLines_1.return)) _a.call(tableLines_1);
28104
+ }
28105
+ finally { if (e_1) throw e_1.error; }
28106
+ }
28107
+ (0, roosterjs_content_model_dom_1.applyTableFormat)(table, {
28108
+ hasHeaderRow: true,
28109
+ });
28110
+ return table;
28111
+ }
28112
+ exports.createTableFromMarkdown = createTableFromMarkdown;
28113
+ function createTableModel(markdown, table, tableDivider) {
28114
+ var contents = markdown.split('|');
28115
+ if (contents[0].trim() === '') {
28116
+ contents.shift();
28117
+ }
28118
+ if (contents[contents.length - 1].trim() === '') {
28119
+ contents.pop();
28120
+ }
28121
+ addTableRow(table, contents, tableDivider);
28122
+ }
28123
+ function addTableRow(table, contents, tableDivider) {
28124
+ var e_2, _a;
28125
+ var row = (0, roosterjs_content_model_dom_1.createTableRow)();
28126
+ var index = 0;
28127
+ try {
28128
+ for (var contents_1 = (0, tslib_1.__values)(contents), contents_1_1 = contents_1.next(); !contents_1_1.done; contents_1_1 = contents_1.next()) {
28129
+ var content = contents_1_1.value;
28130
+ var paragraph = (0, createParagraphFromMarkdown_1.createParagraphFromMarkdown)(content);
28131
+ var cell = (0, roosterjs_content_model_dom_1.createTableCell)();
28132
+ cell.blocks.push(paragraph);
28133
+ if (tableDivider[index]) {
28134
+ cell.format.textAlign = getCellAlignment(tableDivider[index]);
28135
+ }
28136
+ row.cells.push(cell);
28137
+ index++;
28138
+ }
28139
+ }
28140
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
28141
+ finally {
28142
+ try {
28143
+ if (contents_1_1 && !contents_1_1.done && (_a = contents_1.return)) _a.call(contents_1);
28144
+ }
28145
+ finally { if (e_2) throw e_2.error; }
28146
+ }
28147
+ table.rows.push(row);
28148
+ }
28149
+ function getCellAlignment(content) {
28150
+ if (content.startsWith(':') && content.endsWith(':')) {
28151
+ return 'center';
28152
+ }
28153
+ if (content.endsWith(':')) {
28154
+ return 'end';
28155
+ }
28156
+ return 'start';
28157
+ }
28158
+
28159
+
28160
+ /***/ }),
28161
+
28162
+ /***/ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/processor/markdownProcessor.ts":
28163
+ /*!******************************************************************************************************!*\
28164
+ !*** ./packages/roosterjs-content-model-markdown/lib/markdownToModel/processor/markdownProcessor.ts ***!
28165
+ \******************************************************************************************************/
28166
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
28167
+
28168
+ "use strict";
28169
+
28170
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
28171
+ exports.markdownProcessor = void 0;
28172
+ var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
28173
+ var createBlockGroupFromMarkdown_1 = __webpack_require__(/*! ../creators/createBlockGroupFromMarkdown */ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createBlockGroupFromMarkdown.ts");
28174
+ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
28175
+ var createParagraphFromMarkdown_1 = __webpack_require__(/*! ../creators/createParagraphFromMarkdown */ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createParagraphFromMarkdown.ts");
28176
+ var createTableFromMarkdown_1 = __webpack_require__(/*! ../creators/createTableFromMarkdown */ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/creators/createTableFromMarkdown.ts");
28177
+ var isMarkdownTable_1 = __webpack_require__(/*! ../utils/isMarkdownTable */ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/utils/isMarkdownTable.ts");
28178
+ var MarkdownPattern = {
28179
+ heading: /^#{1,6} .*/,
28180
+ horizontal_line: /^---$/,
28181
+ table: /^\|.*\|\s*$/,
28182
+ blockquote: /^>\s.*$/,
28183
+ unordered_list: /^\s*[\*\-\+] .*/,
28184
+ ordered_list: /^\s*\d+\. .*/,
28185
+ space: /^\s*$/,
28186
+ paragraph: /^[^#\-\*\d\|].*/,
28187
+ };
28188
+ var MarkdownBlockType = {
28189
+ heading: 'Paragraph',
28190
+ horizontal_line: 'Divider',
28191
+ paragraph: 'Paragraph',
28192
+ unordered_list: 'BlockGroup',
28193
+ ordered_list: 'BlockGroup',
28194
+ table: 'Table',
28195
+ blockquote: 'BlockGroup',
28196
+ space: 'Paragraph',
28197
+ };
28198
+ /**
28199
+ * @internal
28200
+ * Process markdown text and convert it to ContentModelDocument
28201
+ * @param text The markdown text
28202
+ * @param splitLinesPattern The pattern to split lines. Default is /\r\n|\r|\\n|\n/
28203
+ * @returns The ContentModelDocument
28204
+ */
28205
+ function markdownProcessor(text, splitLinesPattern) {
28206
+ var markdownText = text.split(splitLinesPattern);
28207
+ markdownText.push(''); // Add an empty line to make sure the last block is processed
28208
+ var doc = (0, roosterjs_content_model_dom_1.createContentModelDocument)();
28209
+ return convertMarkdownText(doc, markdownText);
28210
+ }
28211
+ exports.markdownProcessor = markdownProcessor;
28212
+ function addMarkdownBlockToModel(model, blockType, markdown, patternName, markdownContext) {
28213
+ var e_1, _a;
28214
+ if (blockType !== 'Table' &&
28215
+ markdownContext.tableLines &&
28216
+ markdownContext.tableLines.length > 0) {
28217
+ if (markdownContext.tableLines.length > 2 &&
28218
+ markdownContext.tableLines[1].trim().length > 0 &&
28219
+ (0, isMarkdownTable_1.isMarkdownTable)(markdownContext.tableLines[1]) &&
28220
+ markdownContext.tableLines.length > 1) {
28221
+ var tableModel = (0, createTableFromMarkdown_1.createTableFromMarkdown)(markdownContext.tableLines);
28222
+ model.blocks.push(tableModel);
28223
+ }
28224
+ else {
28225
+ try {
28226
+ for (var _b = (0, tslib_1.__values)(markdownContext.tableLines), _c = _b.next(); !_c.done; _c = _b.next()) {
28227
+ var line = _c.value;
28228
+ var paragraph = (0, createParagraphFromMarkdown_1.createParagraphFromMarkdown)(line);
28229
+ model.blocks.push(paragraph);
28230
+ }
28231
+ }
28232
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
28233
+ finally {
28234
+ try {
28235
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
28236
+ }
28237
+ finally { if (e_1) throw e_1.error; }
28238
+ }
28239
+ }
28240
+ markdownContext.tableLines.length = 0;
28241
+ }
28242
+ if (patternName == 'space') {
28243
+ markdownContext.tableLines = [];
28244
+ markdownContext.lastQuote = undefined;
28245
+ markdownContext.lastList = undefined;
28246
+ return;
28247
+ }
28248
+ if (blockType == 'Paragraph' && (markdownContext.lastList || markdownContext.lastQuote)) {
28249
+ blockType = 'BlockGroup';
28250
+ patternName = markdownContext.lastList
28251
+ ? markdownContext.lastList.levels[0].listType == 'OL'
28252
+ ? 'ordered_list'
28253
+ : 'unordered_list'
28254
+ : 'blockquote';
28255
+ }
28256
+ switch (blockType) {
28257
+ case 'Paragraph':
28258
+ var paragraph = (0, createParagraphFromMarkdown_1.createParagraphFromMarkdown)(markdown);
28259
+ model.blocks.push(paragraph);
28260
+ break;
28261
+ case 'Divider':
28262
+ var divider = (0, roosterjs_content_model_dom_1.createDivider)('hr');
28263
+ model.blocks.push(divider);
28264
+ break;
28265
+ case 'BlockGroup':
28266
+ var blockGroup = (0, createBlockGroupFromMarkdown_1.createBlockGroupFromMarkdown)(markdown, patternName, markdownContext.lastQuote);
28267
+ if (!markdownContext.lastQuote) {
28268
+ model.blocks.push(blockGroup);
28269
+ }
28270
+ markdownContext.lastQuote =
28271
+ blockGroup.blockGroupType == 'FormatContainer' ? blockGroup : undefined;
28272
+ markdownContext.lastList =
28273
+ blockGroup.blockGroupType == 'ListItem' ? blockGroup : undefined;
28274
+ break;
28275
+ case 'Table':
28276
+ markdownContext.tableLines = markdownContext.tableLines || [];
28277
+ markdownContext.tableLines.push(markdown);
28278
+ break;
28279
+ }
28280
+ if (blockType !== 'BlockGroup') {
28281
+ markdownContext.lastQuote = undefined;
28282
+ markdownContext.lastList = undefined;
28283
+ }
28284
+ }
28285
+ function convertMarkdownText(model, lines) {
28286
+ var e_2, _a;
28287
+ var markdownContext = {
28288
+ lastQuote: undefined,
28289
+ lastList: undefined,
28290
+ tableLines: [],
28291
+ };
28292
+ try {
28293
+ for (var lines_1 = (0, tslib_1.__values)(lines), lines_1_1 = lines_1.next(); !lines_1_1.done; lines_1_1 = lines_1.next()) {
28294
+ var line = lines_1_1.value;
28295
+ var matched = false;
28296
+ for (var patternName in MarkdownPattern) {
28297
+ if (MarkdownPattern.hasOwnProperty(patternName)) {
28298
+ var pattern = MarkdownPattern[patternName];
28299
+ if (pattern.test(line)) {
28300
+ addMarkdownBlockToModel(model, MarkdownBlockType[patternName], line, patternName, markdownContext);
28301
+ matched = true;
28302
+ break;
28303
+ }
28304
+ }
28305
+ }
28306
+ if (!matched) {
28307
+ addMarkdownBlockToModel(model, 'Paragraph', line, 'paragraph', markdownContext);
28308
+ }
28309
+ }
28310
+ }
28311
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
28312
+ finally {
28313
+ try {
28314
+ if (lines_1_1 && !lines_1_1.done && (_a = lines_1.return)) _a.call(lines_1);
28315
+ }
28316
+ finally { if (e_2) throw e_2.error; }
28317
+ }
28318
+ return model;
28319
+ }
28320
+
28321
+
28322
+ /***/ }),
28323
+
28324
+ /***/ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/utils/adjustHeading.ts":
28325
+ /*!**********************************************************************************************!*\
28326
+ !*** ./packages/roosterjs-content-model-markdown/lib/markdownToModel/utils/adjustHeading.ts ***!
28327
+ \**********************************************************************************************/
28328
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
28329
+
28330
+ "use strict";
28331
+
28332
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
28333
+ exports.adjustHeading = void 0;
28334
+ var headings_1 = __webpack_require__(/*! ../../constants/headings */ "./packages/roosterjs-content-model-markdown/lib/constants/headings.ts");
28335
+ /**
28336
+ * @internal
28337
+ */
28338
+ function adjustHeading(textSegment, decorator) {
28339
+ var markdownToBeRemoved = headings_1.MarkdownHeadings[(decorator === null || decorator === void 0 ? void 0 : decorator.tagName) || ''];
28340
+ if (markdownToBeRemoved) {
28341
+ textSegment.text = textSegment.text.replace(markdownToBeRemoved, '');
28342
+ }
28343
+ return textSegment;
28344
+ }
28345
+ exports.adjustHeading = adjustHeading;
28346
+
28347
+
28348
+ /***/ }),
28349
+
28350
+ /***/ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/utils/getHeadingDecorator.ts":
28351
+ /*!****************************************************************************************************!*\
28352
+ !*** ./packages/roosterjs-content-model-markdown/lib/markdownToModel/utils/getHeadingDecorator.ts ***!
28353
+ \****************************************************************************************************/
28354
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
28355
+
28356
+ "use strict";
28357
+
28358
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
28359
+ exports.getHeadingDecorator = void 0;
28360
+ var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
28361
+ var headings_1 = __webpack_require__(/*! ../../constants/headings */ "./packages/roosterjs-content-model-markdown/lib/constants/headings.ts");
28362
+ /**
28363
+ * @internal
28364
+ */
28365
+ function getHeadingDecorator(text) {
28366
+ var e_1, _a;
28367
+ try {
28368
+ for (var headingLevels_1 = (0, tslib_1.__values)(headings_1.headingLevels), headingLevels_1_1 = headingLevels_1.next(); !headingLevels_1_1.done; headingLevels_1_1 = headingLevels_1.next()) {
28369
+ var level = headingLevels_1_1.value;
28370
+ if (text.startsWith(level.prefix)) {
28371
+ return {
28372
+ tagName: level.tagName,
28373
+ format: {
28374
+ fontWeight: 'bold',
28375
+ fontSize: level.fontSize,
28376
+ },
28377
+ };
28378
+ }
28379
+ }
28380
+ }
28381
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
28382
+ finally {
28383
+ try {
28384
+ if (headingLevels_1_1 && !headingLevels_1_1.done && (_a = headingLevels_1.return)) _a.call(headingLevels_1);
28385
+ }
28386
+ finally { if (e_1) throw e_1.error; }
28387
+ }
28388
+ return undefined;
28389
+ }
28390
+ exports.getHeadingDecorator = getHeadingDecorator;
28391
+
28392
+
28393
+ /***/ }),
28394
+
28395
+ /***/ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/utils/isMarkdownTable.ts":
28396
+ /*!************************************************************************************************!*\
28397
+ !*** ./packages/roosterjs-content-model-markdown/lib/markdownToModel/utils/isMarkdownTable.ts ***!
28398
+ \************************************************************************************************/
28399
+ /***/ ((__unused_webpack_module, exports) => {
28400
+
28401
+ "use strict";
28402
+
28403
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
28404
+ exports.isMarkdownTable = void 0;
28405
+ /**
28406
+ * @internal
28407
+ */
28408
+ function isMarkdownTable(text) {
28409
+ var columns = text.split('|').filter(function (s) { return s !== ''; });
28410
+ var pattern = /^:?-+:?$/;
28411
+ return columns.length > 0 && columns.every(function (c) { return pattern.test(c.trim()); });
28412
+ }
28413
+ exports.isMarkdownTable = isMarkdownTable;
28414
+
28415
+
28416
+ /***/ }),
28417
+
28418
+ /***/ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/utils/splitParagraphSegments.ts":
28419
+ /*!*******************************************************************************************************!*\
28420
+ !*** ./packages/roosterjs-content-model-markdown/lib/markdownToModel/utils/splitParagraphSegments.ts ***!
28421
+ \*******************************************************************************************************/
28422
+ /***/ ((__unused_webpack_module, exports) => {
28423
+
28424
+ "use strict";
28425
+
28426
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
28427
+ exports.splitParagraphSegments = void 0;
28428
+ var linkRegex = /(\[([^\[]+)\]\((https?:\/\/[^\)]+)\))|(\!\[([^\[]+)\]\((https?:\/\/[^\)]+)\))/g;
28429
+ var isValidUrl = function (url) {
28430
+ try {
28431
+ new URL(url);
28432
+ return true;
28433
+ }
28434
+ catch (_) {
28435
+ return false;
28436
+ }
28437
+ };
28438
+ /**
28439
+ * @internal
28440
+ */
28441
+ function splitParagraphSegments(text) {
28442
+ var result = [];
28443
+ var lastIndex = 0;
28444
+ var match = null;
28445
+ while ((match = linkRegex.exec(text)) !== null) {
28446
+ if (match.index > lastIndex) {
28447
+ result.push({ type: 'text', text: text.slice(lastIndex, match.index), url: '' });
28448
+ }
28449
+ if (match[2] && match[3]) {
28450
+ result.push(isValidUrl(match[3])
28451
+ ? { type: 'link', text: match[2], url: match[3] }
28452
+ : { type: 'text', text: match[0], url: '' });
28453
+ }
28454
+ else if (match[5] && match[6]) {
28455
+ result.push(isValidUrl(match[6])
28456
+ ? { type: 'image', text: match[5], url: match[6] }
28457
+ : { type: 'text', text: match[0], url: '' });
28458
+ }
28459
+ lastIndex = linkRegex.lastIndex;
28460
+ }
28461
+ if (lastIndex < text.length) {
28462
+ result.push({ type: 'text', text: text.slice(lastIndex), url: '' });
28463
+ }
28464
+ return result;
28465
+ }
28466
+ exports.splitParagraphSegments = splitParagraphSegments;
28467
+
28468
+
28469
+ /***/ }),
28470
+
28471
+ /***/ "./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/convertContentModelToMarkdown.ts":
28472
+ /*!********************************************************************************************************!*\
28473
+ !*** ./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/convertContentModelToMarkdown.ts ***!
28474
+ \********************************************************************************************************/
28475
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
28476
+
28477
+ "use strict";
28478
+
28479
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
28480
+ exports.convertContentModelToMarkdown = void 0;
28481
+ var modelProcessor_1 = __webpack_require__(/*! ./processor/modelProcessor */ "./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/processor/modelProcessor.ts");
28482
+ /**
28483
+ * Export content model document to markdown
28484
+ * @param selection The editor selection
28485
+ * @param newLine The new line string to use. Default is '\n\n'
28486
+ * @returns The markdown string
28487
+ */
28488
+ function convertContentModelToMarkdown(model, newLine) {
28489
+ return (0, modelProcessor_1.modelProcessor)(model, newLine);
28490
+ }
28491
+ exports.convertContentModelToMarkdown = convertContentModelToMarkdown;
28492
+
28493
+
28494
+ /***/ }),
28495
+
28496
+ /***/ "./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/creators/createMarkdownBlock.ts":
28497
+ /*!*******************************************************************************************************!*\
28498
+ !*** ./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/creators/createMarkdownBlock.ts ***!
28499
+ \*******************************************************************************************************/
28500
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
28501
+
28502
+ "use strict";
28503
+
28504
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
28505
+ exports.createMarkdownBlock = void 0;
28506
+ var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
28507
+ var createMarkdownBlockGroup_1 = __webpack_require__(/*! ./createMarkdownBlockGroup */ "./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/creators/createMarkdownBlockGroup.ts");
28508
+ var createMarkdownParagraph_1 = __webpack_require__(/*! ./createMarkdownParagraph */ "./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/creators/createMarkdownParagraph.ts");
28509
+ var createMarkdownTable_1 = __webpack_require__(/*! ./createMarkdownTable */ "./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/creators/createMarkdownTable.ts");
28510
+ var DEFAULT_NEW_LINE = {
28511
+ table: '',
28512
+ paragraph: '',
28513
+ divider: '\n\n',
28514
+ };
28515
+ /**
28516
+ * @internal
28517
+ */
28518
+ function createMarkdownBlock(block, newLinePattern, listCounter, newLines, paragraphContext) {
28519
+ var markdownString = '';
28520
+ var lines = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, DEFAULT_NEW_LINE), newLines);
28521
+ switch (block.blockType) {
28522
+ case 'Paragraph':
28523
+ markdownString += (0, createMarkdownParagraph_1.createMarkdownParagraph)(block, paragraphContext) + lines.paragraph;
28524
+ break;
28525
+ case 'BlockGroup':
28526
+ markdownString += (0, createMarkdownBlockGroup_1.createMarkdownBlockGroup)(block, newLinePattern, listCounter);
28527
+ break;
28528
+ case 'Table':
28529
+ markdownString += (0, createMarkdownTable_1.createMarkdownTable)(block, newLinePattern, listCounter) + lines.table;
28530
+ break;
28531
+ case 'Divider':
28532
+ if (!(paragraphContext === null || paragraphContext === void 0 ? void 0 : paragraphContext.ignoreLineBreaks)) {
28533
+ markdownString += '---' + lines.divider;
28534
+ }
28535
+ break;
28536
+ case 'Entity':
28537
+ break;
28538
+ default:
28539
+ break;
28540
+ }
28541
+ return markdownString;
28542
+ }
28543
+ exports.createMarkdownBlock = createMarkdownBlock;
28544
+
28545
+
28546
+ /***/ }),
28547
+
28548
+ /***/ "./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/creators/createMarkdownBlockGroup.ts":
28549
+ /*!************************************************************************************************************!*\
28550
+ !*** ./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/creators/createMarkdownBlockGroup.ts ***!
28551
+ \************************************************************************************************************/
28552
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
28553
+
28554
+ "use strict";
28555
+
28556
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
28557
+ exports.createMarkdownBlockGroup = void 0;
28558
+ var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
28559
+ var createMarkdownBlock_1 = __webpack_require__(/*! ./createMarkdownBlock */ "./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/creators/createMarkdownBlock.ts");
28560
+ /**
28561
+ * @internal
28562
+ */
28563
+ function createMarkdownBlockGroup(blockGroup, newLinePattern, listCounter) {
28564
+ var e_1, _a;
28565
+ var markdownString = '';
28566
+ switch (blockGroup.blockGroupType) {
28567
+ case 'ListItem':
28568
+ if (listCounter) {
28569
+ markdownString += createMarkdownListItem(blockGroup, newLinePattern, listCounter);
28570
+ }
28571
+ break;
28572
+ case 'FormatContainer':
28573
+ markdownString += createMarkdownBlockQuote(blockGroup, newLinePattern, listCounter);
28574
+ break;
28575
+ default:
28576
+ var blocks = blockGroup.blocks;
28577
+ try {
28578
+ for (var blocks_1 = (0, tslib_1.__values)(blocks), blocks_1_1 = blocks_1.next(); !blocks_1_1.done; blocks_1_1 = blocks_1.next()) {
28579
+ var block = blocks_1_1.value;
28580
+ markdownString += (0, createMarkdownBlock_1.createMarkdownBlock)(block, newLinePattern, listCounter);
28581
+ }
28582
+ }
28583
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
28584
+ finally {
28585
+ try {
28586
+ if (blocks_1_1 && !blocks_1_1.done && (_a = blocks_1.return)) _a.call(blocks_1);
28587
+ }
28588
+ finally { if (e_1) throw e_1.error; }
28589
+ }
28590
+ break;
28591
+ }
28592
+ return markdownString;
28593
+ }
28594
+ exports.createMarkdownBlockGroup = createMarkdownBlockGroup;
28595
+ function createMarkdownListItem(listItem, newLinePattern, listCounter) {
28596
+ var e_2, _a;
28597
+ var markdownString = '';
28598
+ var blocks = listItem.blocks;
28599
+ try {
28600
+ for (var blocks_2 = (0, tslib_1.__values)(blocks), blocks_2_1 = blocks_2.next(); !blocks_2_1.done; blocks_2_1 = blocks_2.next()) {
28601
+ var block = blocks_2_1.value;
28602
+ markdownString += (0, createMarkdownBlock_1.createMarkdownBlock)(block, newLinePattern, listCounter, undefined /* newLines */, {
28603
+ ignoreLineBreaks: true,
28604
+ });
28605
+ }
28606
+ }
28607
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
28608
+ finally {
28609
+ try {
28610
+ if (blocks_2_1 && !blocks_2_1.done && (_a = blocks_2.return)) _a.call(blocks_2);
28611
+ }
28612
+ finally { if (e_2) throw e_2.error; }
28613
+ }
28614
+ var lastIndex = listItem.levels.length - 1;
28615
+ var isSubList = lastIndex + 1 > 1;
28616
+ var dummyFormat = listItem.levels[lastIndex].format.displayForDummyItem;
28617
+ if (dummyFormat && dummyFormat !== 'listItem') {
28618
+ return (markdownString = " " + markdownString);
28619
+ }
28620
+ if (isSubList) {
28621
+ listCounter.subListItemCount++;
28622
+ if (listItem.levels[lastIndex].listType == 'OL') {
28623
+ markdownString = " " + listCounter.subListItemCount + ". " + markdownString;
28624
+ }
28625
+ else {
28626
+ markdownString = " - " + markdownString;
28627
+ }
28628
+ }
28629
+ else {
28630
+ listCounter.listItemCount++;
28631
+ if (listItem.levels[lastIndex].listType == 'OL') {
28632
+ markdownString = listCounter.listItemCount + ". " + markdownString;
28633
+ }
28634
+ else {
28635
+ markdownString = "- " + markdownString;
28636
+ }
28637
+ }
28638
+ return markdownString + newLinePattern.newLine;
28639
+ }
28640
+ function createMarkdownBlockQuote(blockquote, newLinePattern, listCounter) {
28641
+ var e_3, _a;
28642
+ var markdownString = '';
28643
+ if (blockquote.tagName == 'blockquote') {
28644
+ var blocks = blockquote.blocks;
28645
+ try {
28646
+ for (var blocks_3 = (0, tslib_1.__values)(blocks), blocks_3_1 = blocks_3.next(); !blocks_3_1.done; blocks_3_1 = blocks_3.next()) {
28647
+ var block = blocks_3_1.value;
28648
+ markdownString +=
28649
+ '> ' +
28650
+ (0, createMarkdownBlock_1.createMarkdownBlock)(block, newLinePattern, listCounter, undefined /* newLines */, {
28651
+ ignoreLineBreaks: true,
28652
+ }) +
28653
+ newLinePattern.newLine;
28654
+ }
28655
+ }
28656
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
28657
+ finally {
28658
+ try {
28659
+ if (blocks_3_1 && !blocks_3_1.done && (_a = blocks_3.return)) _a.call(blocks_3);
28660
+ }
28661
+ finally { if (e_3) throw e_3.error; }
28662
+ }
28663
+ }
28664
+ return markdownString + "\n";
28665
+ }
28666
+
28667
+
28668
+ /***/ }),
28669
+
28670
+ /***/ "./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/creators/createMarkdownParagraph.ts":
28671
+ /*!***********************************************************************************************************!*\
28672
+ !*** ./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/creators/createMarkdownParagraph.ts ***!
28673
+ \***********************************************************************************************************/
28674
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
28675
+
28676
+ "use strict";
28677
+
28678
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
28679
+ exports.createMarkdownParagraph = void 0;
28680
+ var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
28681
+ var headings_1 = __webpack_require__(/*! ../../constants/headings */ "./packages/roosterjs-content-model-markdown/lib/constants/headings.ts");
28682
+ /**
28683
+ * @internal
28684
+ */
28685
+ function createMarkdownParagraph(paragraph, context) {
28686
+ var e_1, _a;
28687
+ var segments = paragraph.segments;
28688
+ var markdownString = '';
28689
+ try {
28690
+ for (var segments_1 = (0, tslib_1.__values)(segments), segments_1_1 = segments_1.next(); !segments_1_1.done; segments_1_1 = segments_1.next()) {
28691
+ var segment = segments_1_1.value;
28692
+ switch (segment.segmentType) {
28693
+ case 'Text':
28694
+ markdownString += textProcessor(segment);
28695
+ break;
28696
+ case 'Image':
28697
+ markdownString += "![" + segment.alt + "](" + segment.src + ")";
28698
+ break;
28699
+ case 'Br':
28700
+ if (!(context === null || context === void 0 ? void 0 : context.ignoreLineBreaks)) {
28701
+ markdownString += '\n';
28702
+ }
28703
+ break;
28704
+ default:
28705
+ break;
28706
+ }
28707
+ }
28708
+ }
28709
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
28710
+ finally {
28711
+ try {
28712
+ if (segments_1_1 && !segments_1_1.done && (_a = segments_1.return)) _a.call(segments_1);
28713
+ }
28714
+ finally { if (e_1) throw e_1.error; }
28715
+ }
28716
+ if (paragraph.decorator) {
28717
+ var tagName = paragraph.decorator.tagName;
28718
+ var prefix = headings_1.MarkdownHeadings[tagName];
28719
+ markdownString = "" + prefix + markdownString;
28720
+ }
28721
+ return markdownString;
28722
+ }
28723
+ exports.createMarkdownParagraph = createMarkdownParagraph;
28724
+ function textProcessor(text) {
28725
+ var markdownString = text.text;
28726
+ if (text.link) {
28727
+ markdownString = "[" + text.text + "](" + text.link.format.href + ")";
28728
+ }
28729
+ if (text.format.fontWeight == 'bold') {
28730
+ markdownString = "**" + markdownString + "**";
28731
+ }
28732
+ if (text.format.italic) {
28733
+ markdownString = "*" + markdownString + "*";
28734
+ }
28735
+ return markdownString;
28736
+ }
28737
+
28738
+
28739
+ /***/ }),
28740
+
28741
+ /***/ "./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/creators/createMarkdownTable.ts":
28742
+ /*!*******************************************************************************************************!*\
28743
+ !*** ./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/creators/createMarkdownTable.ts ***!
28744
+ \*******************************************************************************************************/
28745
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
28746
+
28747
+ "use strict";
28748
+
28749
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
28750
+ exports.createMarkdownTable = void 0;
28751
+ var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
28752
+ var createMarkdownBlock_1 = __webpack_require__(/*! ./createMarkdownBlock */ "./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/creators/createMarkdownBlock.ts");
28753
+ /**
28754
+ * @internal
28755
+ */
28756
+ function createMarkdownTable(table, newLinePattern, listCounter) {
28757
+ var e_1, _a, e_2, _b, e_3, _c;
28758
+ var markdownString = '';
28759
+ var rows = table.rows;
28760
+ var firstRow = true;
28761
+ try {
28762
+ for (var rows_1 = (0, tslib_1.__values)(rows), rows_1_1 = rows_1.next(); !rows_1_1.done; rows_1_1 = rows_1.next()) {
28763
+ var row = rows_1_1.value;
28764
+ markdownString += '|';
28765
+ try {
28766
+ for (var _d = (e_2 = void 0, (0, tslib_1.__values)(row.cells)), _e = _d.next(); !_e.done; _e = _d.next()) {
28767
+ var cell = _e.value;
28768
+ try {
28769
+ for (var _f = (e_3 = void 0, (0, tslib_1.__values)(cell.blocks)), _g = _f.next(); !_g.done; _g = _f.next()) {
28770
+ var block = _g.value;
28771
+ markdownString += (0, createMarkdownBlock_1.createMarkdownBlock)(block, newLinePattern, listCounter, {
28772
+ divider: '',
28773
+ }, {
28774
+ ignoreLineBreaks: true,
28775
+ });
28776
+ }
28777
+ }
28778
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
28779
+ finally {
28780
+ try {
28781
+ if (_g && !_g.done && (_c = _f.return)) _c.call(_f);
28782
+ }
28783
+ finally { if (e_3) throw e_3.error; }
28784
+ }
28785
+ markdownString += '|';
28786
+ }
28787
+ }
28788
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
28789
+ finally {
28790
+ try {
28791
+ if (_e && !_e.done && (_b = _d.return)) _b.call(_d);
28792
+ }
28793
+ finally { if (e_2) throw e_2.error; }
28794
+ }
28795
+ markdownString += newLinePattern.newLine;
28796
+ if (firstRow) {
28797
+ markdownString += addTableDivider(row);
28798
+ firstRow = false;
28799
+ }
28800
+ }
28801
+ }
28802
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
28803
+ finally {
28804
+ try {
28805
+ if (rows_1_1 && !rows_1_1.done && (_a = rows_1.return)) _a.call(rows_1);
28806
+ }
28807
+ finally { if (e_1) throw e_1.error; }
28808
+ }
28809
+ return markdownString;
28810
+ }
28811
+ exports.createMarkdownTable = createMarkdownTable;
28812
+ function addTableDivider(headerRow) {
28813
+ var e_4, _a;
28814
+ var divider = '|';
28815
+ var cells = headerRow.cells;
28816
+ try {
28817
+ for (var cells_1 = (0, tslib_1.__values)(cells), cells_1_1 = cells_1.next(); !cells_1_1.done; cells_1_1 = cells_1.next()) {
28818
+ var cell = cells_1_1.value;
28819
+ switch (cell.format.textAlign) {
28820
+ case 'center':
28821
+ divider += ':----:|';
28822
+ break;
28823
+ case 'end':
28824
+ divider += '----:|';
28825
+ break;
28826
+ default:
28827
+ divider += '----|';
28828
+ break;
28829
+ }
28830
+ }
28831
+ }
28832
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
28833
+ finally {
28834
+ try {
28835
+ if (cells_1_1 && !cells_1_1.done && (_a = cells_1.return)) _a.call(cells_1);
28836
+ }
28837
+ finally { if (e_4) throw e_4.error; }
28838
+ }
28839
+ return divider + '\n';
28840
+ }
28841
+
28842
+
28843
+ /***/ }),
28844
+
28845
+ /***/ "./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/processor/modelProcessor.ts":
28846
+ /*!***************************************************************************************************!*\
28847
+ !*** ./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/processor/modelProcessor.ts ***!
28848
+ \***************************************************************************************************/
28849
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
28850
+
28851
+ "use strict";
28852
+
28853
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
28854
+ exports.modelProcessor = void 0;
28855
+ var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
28856
+ var createMarkdownBlock_1 = __webpack_require__(/*! ../creators/createMarkdownBlock */ "./packages/roosterjs-content-model-markdown/lib/modelToMarkdown/creators/createMarkdownBlock.ts");
28857
+ var DEFAULT_NEW_LINE = {
28858
+ lineBreak: '\n\n',
28859
+ newLine: '\n',
28860
+ };
28861
+ /**
28862
+ * @internal
28863
+ */
28864
+ function modelProcessor(model, newLine) {
28865
+ var e_1, _a;
28866
+ if (newLine === void 0) { newLine = DEFAULT_NEW_LINE; }
28867
+ var markdown = '';
28868
+ var listCounter = {
28869
+ listItemCount: 0,
28870
+ subListItemCount: 0,
28871
+ };
28872
+ try {
28873
+ for (var _b = (0, tslib_1.__values)(model.blocks), _c = _b.next(); !_c.done; _c = _b.next()) {
28874
+ var block = _c.value;
28875
+ var isListItem = block.blockType === 'BlockGroup' && block.blockGroupType === 'ListItem';
28876
+ if (!isListItem && (listCounter.listItemCount > 0 || listCounter.subListItemCount > 0)) {
28877
+ listCounter.listItemCount = 0;
28878
+ listCounter.subListItemCount = 0;
28879
+ markdown += newLine.newLine;
28880
+ }
28881
+ markdown += (0, createMarkdownBlock_1.createMarkdownBlock)(block, newLine, listCounter, {
28882
+ table: newLine.newLine,
28883
+ paragraph: newLine.lineBreak,
28884
+ divider: newLine.lineBreak,
28885
+ });
28886
+ }
28887
+ }
28888
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
28889
+ finally {
28890
+ try {
28891
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
28892
+ }
28893
+ finally { if (e_1) throw e_1.error; }
28894
+ }
28895
+ return markdown;
28896
+ }
28897
+ exports.modelProcessor = modelProcessor;
28898
+
28899
+
27547
28900
  /***/ }),
27548
28901
 
27549
28902
  /***/ "./packages/roosterjs-content-model-plugins/lib/autoFormat/AutoFormatPlugin.ts":
@@ -30160,9 +31513,10 @@ function handleTabOnTable(model, rawEvent) {
30160
31513
  }
30161
31514
  exports.handleTabOnTable = handleTabOnTable;
30162
31515
  function isWholeTableSelected(tableModel) {
30163
- var _a, _b, _c, _d;
30164
- return (((_b = (_a = tableModel.rows[0]) === null || _a === void 0 ? void 0 : _a.cells[0]) === null || _b === void 0 ? void 0 : _b.isSelected) &&
30165
- ((_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));
31516
+ var _a, _b;
31517
+ var lastRow = tableModel.rows[tableModel.rows.length - 1];
31518
+ var lastCell = lastRow === null || lastRow === void 0 ? void 0 : lastRow.cells[lastRow.cells.length - 1];
31519
+ 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);
30166
31520
  }
30167
31521
 
30168
31522
 
@@ -30185,32 +31539,35 @@ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-mo
30185
31539
  * @internal
30186
31540
  */
30187
31541
  function handleTabOnTableCell(model, cell, rawEvent) {
30188
- var _a, _b, _c;
31542
+ var _a, _b;
30189
31543
  var readonlyTableModel = (0, roosterjs_content_model_dom_1.getFirstSelectedTable)(model)[0];
30190
- // Check if cursor is on last cell of the table
30191
- if (!rawEvent.shiftKey &&
30192
- readonlyTableModel &&
30193
- ((_a = readonlyTableModel.rows[readonlyTableModel.rows.length - 1]) === null || _a === void 0 ? void 0 : _a.cells[readonlyTableModel.widths.length - 1]) === cell) {
30194
- var tableModel = (0, roosterjs_content_model_dom_1.mutateBlock)(readonlyTableModel);
30195
- (0, roosterjs_content_model_api_1.insertTableRow)(tableModel, 'insertBelow');
30196
- // Clear Table selection
30197
- (0, roosterjs_content_model_api_1.clearSelectedCells)(tableModel, {
30198
- firstRow: tableModel.rows.length - 1,
30199
- firstColumn: 0,
30200
- lastRow: tableModel.rows.length - 1,
30201
- lastColumn: tableModel.widths.length - 1,
30202
- });
30203
- (0, roosterjs_content_model_dom_1.normalizeTable)(tableModel, model.format);
30204
- // Add selection marker to the first cell of the new row
30205
- 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];
30206
- if (markerParagraph.blockType == 'Paragraph') {
30207
- var marker = (0, roosterjs_content_model_dom_1.createSelectionMarker)(model.format);
30208
- (0, roosterjs_content_model_dom_1.mutateBlock)(markerParagraph).segments.unshift(marker);
30209
- (0, roosterjs_content_model_dom_1.setParagraphNotImplicit)(markerParagraph);
30210
- (0, roosterjs_content_model_dom_1.setSelection)(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);
31544
+ if (readonlyTableModel) {
31545
+ // Check if cursor is on last cell of the table
31546
+ var lastRow = readonlyTableModel.rows[readonlyTableModel.rows.length - 1];
31547
+ var lastColumn = lastRow ? lastRow.cells.length - 1 : -1;
31548
+ var lastCell = lastRow === null || lastRow === void 0 ? void 0 : lastRow.cells[lastColumn];
31549
+ if (!rawEvent.shiftKey && lastCell && lastCell === cell) {
31550
+ var tableModel = (0, roosterjs_content_model_dom_1.mutateBlock)(readonlyTableModel);
31551
+ (0, roosterjs_content_model_api_1.insertTableRow)(tableModel, 'insertBelow');
31552
+ // Clear Table selection
31553
+ (0, roosterjs_content_model_api_1.clearSelectedCells)(tableModel, {
31554
+ firstRow: tableModel.rows.length - 1,
31555
+ firstColumn: 0,
31556
+ lastRow: tableModel.rows.length - 1,
31557
+ lastColumn: lastColumn,
31558
+ });
31559
+ (0, roosterjs_content_model_dom_1.normalizeTable)(tableModel, model.format);
31560
+ // Add selection marker to the first cell of the new row
31561
+ 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];
31562
+ if (markerParagraph.blockType == 'Paragraph') {
31563
+ var marker = (0, roosterjs_content_model_dom_1.createSelectionMarker)(model.format);
31564
+ (0, roosterjs_content_model_dom_1.mutateBlock)(markerParagraph).segments.unshift(marker);
31565
+ (0, roosterjs_content_model_dom_1.setParagraphNotImplicit)(markerParagraph);
31566
+ (0, roosterjs_content_model_dom_1.setSelection)(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);
31567
+ }
31568
+ rawEvent.preventDefault();
31569
+ return true;
30211
31570
  }
30212
- rawEvent.preventDefault();
30213
- return true;
30214
31571
  }
30215
31572
  return false;
30216
31573
  }
@@ -30873,7 +32230,7 @@ var ImageEditPlugin = /** @class */ (function () {
30873
32230
  this.disposer = editor.attachDomEvent({
30874
32231
  blur: {
30875
32232
  beforeDispatch: function () {
30876
- if (_this.editor) {
32233
+ if (_this.isEditing && _this.editor && !_this.editor.isDisposed()) {
30877
32234
  _this.applyFormatWithContentModel(_this.editor, _this.isCropMode, true /* shouldSelectImage */);
30878
32235
  }
30879
32236
  },
@@ -30906,13 +32263,13 @@ var ImageEditPlugin = /** @class */ (function () {
30906
32263
  * called, plugin should not call to any editor method since it will result in error.
30907
32264
  */
30908
32265
  ImageEditPlugin.prototype.dispose = function () {
30909
- this.editor = null;
30910
- this.isEditing = false;
30911
- this.cleanInfo();
30912
32266
  if (this.disposer) {
30913
32267
  this.disposer();
30914
32268
  this.disposer = null;
30915
32269
  }
32270
+ this.isEditing = false;
32271
+ this.cleanInfo();
32272
+ this.editor = null;
30916
32273
  };
30917
32274
  /**
30918
32275
  * Core method for a plugin. Once an event happens in editor, editor will call this
@@ -30972,7 +32329,8 @@ var ImageEditPlugin = /** @class */ (function () {
30972
32329
  ImageEditPlugin.prototype.mouseDownHandler = function (editor, event) {
30973
32330
  if (this.isEditing &&
30974
32331
  this.isImageSelection(event.rawEvent.target) &&
30975
- event.rawEvent.button !== MouseRightButton) {
32332
+ event.rawEvent.button !== MouseRightButton &&
32333
+ !this.isCropMode) {
30976
32334
  this.applyFormatWithContentModel(editor, this.isCropMode, this.shadowSpan === event.rawEvent.target);
30977
32335
  }
30978
32336
  };
@@ -31008,6 +32366,9 @@ var ImageEditPlugin = /** @class */ (function () {
31008
32366
  this.cleanInfo();
31009
32367
  }
31010
32368
  else {
32369
+ if (event.rawEvent.key == 'Enter' && this.isCropMode) {
32370
+ event.rawEvent.preventDefault();
32371
+ }
31011
32372
  this.applyFormatWithContentModel(editor, this.isCropMode, true /** should selectImage */, false /* isApiOperation */);
31012
32373
  }
31013
32374
  }
@@ -32770,13 +34131,14 @@ function updateWrapper(editInfo, options, image, clonedImage, wrapper, resizers,
32770
34131
  if (croppers && croppers.length > 0) {
32771
34132
  var cropContainer = croppers[0];
32772
34133
  var cropOverlays = croppers.filter(function (cropper) { return cropper.className === ImageEditElementClass_1.ImageEditElementClass.CropOverlay; });
34134
+ var cropHandles = (0, roosterjs_content_model_dom_1.toArray)(cropContainer.querySelectorAll("." + ImageEditElementClass_1.ImageEditElementClass.CropHandle));
32773
34135
  (0, imageEditUtils_1.setSize)(cropContainer, cropLeftPx, cropTopPx, cropRightPx, cropBottomPx, undefined, undefined);
32774
34136
  (0, imageEditUtils_1.setSize)(cropOverlays[0], 0, 0, cropRightPx, undefined, undefined, cropTopPx);
32775
34137
  (0, imageEditUtils_1.setSize)(cropOverlays[1], undefined, 0, 0, cropBottomPx, cropRightPx, undefined);
32776
34138
  (0, imageEditUtils_1.setSize)(cropOverlays[2], cropLeftPx, undefined, 0, 0, undefined, cropBottomPx);
32777
34139
  (0, imageEditUtils_1.setSize)(cropOverlays[3], 0, cropTopPx, undefined, 0, cropLeftPx, undefined);
32778
34140
  if (angleRad !== undefined) {
32779
- (0, updateHandleCursor_1.updateHandleCursor)(croppers, angleRad);
34141
+ (0, updateHandleCursor_1.updateHandleCursor)(cropHandles, angleRad);
32780
34142
  }
32781
34143
  }
32782
34144
  if (resizers) {
@@ -33332,6 +34694,7 @@ var getPasteSource_1 = __webpack_require__(/*! ./pasteSourceValidations/getPaste
33332
34694
  var linkParser_1 = __webpack_require__(/*! ./utils/linkParser */ "./packages/roosterjs-content-model-plugins/lib/paste/utils/linkParser.ts");
33333
34695
  var constants_1 = __webpack_require__(/*! ./pasteSourceValidations/constants */ "./packages/roosterjs-content-model-plugins/lib/paste/pasteSourceValidations/constants.ts");
33334
34696
  var processPastedContentFromExcel_1 = __webpack_require__(/*! ./Excel/processPastedContentFromExcel */ "./packages/roosterjs-content-model-plugins/lib/paste/Excel/processPastedContentFromExcel.ts");
34697
+ var processPastedContentFromOneNote_1 = __webpack_require__(/*! ./oneNote/processPastedContentFromOneNote */ "./packages/roosterjs-content-model-plugins/lib/paste/oneNote/processPastedContentFromOneNote.ts");
33335
34698
  var processPastedContentFromPowerPoint_1 = __webpack_require__(/*! ./PowerPoint/processPastedContentFromPowerPoint */ "./packages/roosterjs-content-model-plugins/lib/paste/PowerPoint/processPastedContentFromPowerPoint.ts");
33336
34699
  var processPastedContentFromWordDesktop_1 = __webpack_require__(/*! ./WordDesktop/processPastedContentFromWordDesktop */ "./packages/roosterjs-content-model-plugins/lib/paste/WordDesktop/processPastedContentFromWordDesktop.ts");
33337
34700
  var processPastedContentWacComponents_1 = __webpack_require__(/*! ./WacComponents/processPastedContentWacComponents */ "./packages/roosterjs-content-model-plugins/lib/paste/WacComponents/processPastedContentWacComponents.ts");
@@ -33418,6 +34781,9 @@ var PastePlugin = /** @class */ (function () {
33418
34781
  case 'powerPointDesktop':
33419
34782
  (0, processPastedContentFromPowerPoint_1.processPastedContentFromPowerPoint)(event, this.editor.getDOMCreator());
33420
34783
  break;
34784
+ case 'oneNoteDesktop':
34785
+ (0, processPastedContentFromOneNote_1.processPastedContentFromOneNote)(event);
34786
+ break;
33421
34787
  }
33422
34788
  (0, addParser_1.addParser)(event.domToModelOption, 'link', linkParser_1.parseLink);
33423
34789
  (0, addParser_1.addParser)(event.domToModelOption, 'tableCell', deprecatedColorParser_1.deprecatedBorderColorParser);
@@ -34075,7 +35441,7 @@ function processAsListItem(listFormat, context, element, group, listMetadata) {
34075
35441
  var listItem = (0, roosterjs_content_model_dom_1.createListItem)(listFormat.levels, context.segmentFormat);
34076
35442
  (0, roosterjs_content_model_dom_1.parseFormat)(element, context.formatParsers.segmentOnBlock, context.segmentFormat, context);
34077
35443
  (0, roosterjs_content_model_dom_1.parseFormat)(element, context.formatParsers.listItemElement, listItem.format, context);
34078
- (0, roosterjs_content_model_dom_1.parseFormat)(element, [removeNegativeTextIndentParser_1.removeNegativeTextIndentParser], listItem.format, context);
35444
+ (0, roosterjs_content_model_dom_1.parseFormat)(element, [removeNegativeTextIndentParser_1.removeNegativeTextIndentParser, nonListElementParser], listItem.format, context);
34079
35445
  if (listType == 'OL') {
34080
35446
  setStartNumber(listItem, context, listMetadata);
34081
35447
  }
@@ -34163,6 +35529,19 @@ function getLastNotEmptyBlock(listParent) {
34163
35529
  }
34164
35530
  return undefined;
34165
35531
  }
35532
+ var nonListElementParser = function (format, element, _context, defaultStyle) {
35533
+ if (!(0, roosterjs_content_model_dom_1.isElementOfType)(element, 'li')) {
35534
+ Object.keys(defaultStyle).forEach(function (keyInput) {
35535
+ var key = keyInput;
35536
+ var formatKey = keyInput;
35537
+ if (key != 'display' &&
35538
+ format[formatKey] != undefined &&
35539
+ format[formatKey] == defaultStyle[key]) {
35540
+ delete format[formatKey];
35541
+ }
35542
+ });
35543
+ }
35544
+ };
34166
35545
 
34167
35546
 
34168
35547
  /***/ }),
@@ -34189,6 +35568,130 @@ var removeNegativeTextIndentParser = function (format, element) {
34189
35568
  exports.removeNegativeTextIndentParser = removeNegativeTextIndentParser;
34190
35569
 
34191
35570
 
35571
+ /***/ }),
35572
+
35573
+ /***/ "./packages/roosterjs-content-model-plugins/lib/paste/oneNote/processPastedContentFromOneNote.ts":
35574
+ /*!*******************************************************************************************************!*\
35575
+ !*** ./packages/roosterjs-content-model-plugins/lib/paste/oneNote/processPastedContentFromOneNote.ts ***!
35576
+ \*******************************************************************************************************/
35577
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
35578
+
35579
+ "use strict";
35580
+
35581
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
35582
+ exports.processListItem = exports.processUnorderedList = exports.processOrderedList = exports.processPastedContentFromOneNote = void 0;
35583
+ var setProcessor_1 = __webpack_require__(/*! ../utils/setProcessor */ "./packages/roosterjs-content-model-plugins/lib/paste/utils/setProcessor.ts");
35584
+ var OrderedListStyleMap = {
35585
+ 1: 'decimal',
35586
+ a: 'lower-alpha',
35587
+ A: 'upper-alpha',
35588
+ i: 'lower-roman',
35589
+ I: 'upper-roman',
35590
+ };
35591
+ var UnorderedListStyleMap = {
35592
+ disc: 'disc',
35593
+ circle: 'circle',
35594
+ square: 'square',
35595
+ };
35596
+ /**
35597
+ * @internal
35598
+ * Processes the content pasted from OneNote by setting up custom processors
35599
+ * for ordered lists (`<ol>`) and list items (`<li>`). These processors handle
35600
+ * specific list styles and numbering overrides that may be present in OneNote
35601
+ * content.
35602
+ *
35603
+ * @param event - The `BeforePasteEvent` containing the DOM-to-model options
35604
+ * and other context information for the paste operation.
35605
+ */
35606
+ function processPastedContentFromOneNote(event) {
35607
+ (0, setProcessor_1.setProcessor)(event.domToModelOption, 'ol', exports.processOrderedList);
35608
+ (0, setProcessor_1.setProcessor)(event.domToModelOption, 'ul', exports.processUnorderedList);
35609
+ (0, setProcessor_1.setProcessor)(event.domToModelOption, 'li', exports.processListItem);
35610
+ }
35611
+ exports.processPastedContentFromOneNote = processPastedContentFromOneNote;
35612
+ /**
35613
+ * @internal exported only for unit test
35614
+ * Content from OneNote may have ordered lists with specific styles and start numbers.
35615
+ * This function processes the `<ol>` elements, extracting the `type` and `start` custom attributes
35616
+ * to set the appropriate list style and starting number in the `oneNoteListContext` of the provided context.
35617
+ * Which is then used to format the list items within the list.
35618
+ */
35619
+ var processOrderedList = function (group, element, cmContext) {
35620
+ var _a, _b;
35621
+ var context = ensureOneNoteListContext(cmContext);
35622
+ if (context.oneNoteListContext) {
35623
+ var typeOfList = element.getAttribute('type');
35624
+ if (typeOfList) {
35625
+ var listStyle = OrderedListStyleMap[typeOfList];
35626
+ var startNumberOverride = parseInt(element.getAttribute('start') || '1') || 1;
35627
+ context.oneNoteListContext.listStyleType = listStyle;
35628
+ context.oneNoteListContext.startNumberOverride = startNumberOverride;
35629
+ }
35630
+ }
35631
+ (_b = (_a = context.defaultElementProcessors).ol) === null || _b === void 0 ? void 0 : _b.call(_a, group, element, context);
35632
+ };
35633
+ exports.processOrderedList = processOrderedList;
35634
+ /**
35635
+ * @internal exported only for unit test
35636
+ * Content from OneNote may have ordered lists with specific styles and start numbers.
35637
+ * This function processes the `<ul>` elements, extracting the `type` custom attribute
35638
+ * to set the appropriate list style in the `oneNoteListContext` of the provided context.
35639
+ * Which is then used to format the list items within the list.
35640
+ */
35641
+ var processUnorderedList = function (group, element, cmContext) {
35642
+ var _a, _b;
35643
+ var context = ensureOneNoteListContext(cmContext);
35644
+ if (context.oneNoteListContext) {
35645
+ var typeOfList = element.getAttribute('type');
35646
+ if (typeOfList) {
35647
+ var listStyle = UnorderedListStyleMap[typeOfList];
35648
+ context.oneNoteListContext.listStyleType = listStyle;
35649
+ }
35650
+ }
35651
+ (_b = (_a = context.defaultElementProcessors).ul) === null || _b === void 0 ? void 0 : _b.call(_a, group, element, context);
35652
+ };
35653
+ exports.processUnorderedList = processUnorderedList;
35654
+ /**
35655
+ * @internal exported only for unit test
35656
+ * Processes the `<li>` elements within a list. It checks if the `oneNoteListContext`
35657
+ * is present in the provided context. If so, it applies the list style type and
35658
+ * start number override to the last level of the list format.
35659
+ * This ensures that the list items are formatted correctly according to the
35660
+ * OneNote list context.
35661
+ */
35662
+ var processListItem = function (group, element, cmContext) {
35663
+ var _a, _b;
35664
+ var context = ensureOneNoteListContext(cmContext);
35665
+ var removeStartNumberOverride = false;
35666
+ if (context.oneNoteListContext) {
35667
+ var _c = context.oneNoteListContext, listStyleType = _c.listStyleType, startNumberOverride = _c.startNumberOverride;
35668
+ if (listStyleType) {
35669
+ var lastLevel = context.listFormat.levels[context.listFormat.levels.length - 1];
35670
+ lastLevel.format.listStyleType = listStyleType;
35671
+ if (startNumberOverride) {
35672
+ removeStartNumberOverride = true;
35673
+ lastLevel.format.startNumberOverride = startNumberOverride;
35674
+ delete context.oneNoteListContext.startNumberOverride;
35675
+ }
35676
+ delete context.oneNoteListContext.listStyleType;
35677
+ }
35678
+ }
35679
+ (_b = (_a = context.defaultElementProcessors).li) === null || _b === void 0 ? void 0 : _b.call(_a, group, element, context);
35680
+ if (removeStartNumberOverride) {
35681
+ delete context.listFormat.levels[context.listFormat.levels.length - 1].format
35682
+ .startNumberOverride;
35683
+ }
35684
+ };
35685
+ exports.processListItem = processListItem;
35686
+ function ensureOneNoteListContext(cmContext) {
35687
+ var context = cmContext;
35688
+ if (!context.oneNoteListContext) {
35689
+ context.oneNoteListContext = {};
35690
+ }
35691
+ return context;
35692
+ }
35693
+
35694
+
34192
35695
  /***/ }),
34193
35696
 
34194
35697
  /***/ "./packages/roosterjs-content-model-plugins/lib/paste/pasteSourceValidations/constants.ts":
@@ -34263,6 +35766,7 @@ var isExcelDesktopDocument_1 = __webpack_require__(/*! ./isExcelDesktopDocument
34263
35766
  var isExcelNonNativeEvent_1 = __webpack_require__(/*! ./isExcelNonNativeEvent */ "./packages/roosterjs-content-model-plugins/lib/paste/pasteSourceValidations/isExcelNonNativeEvent.ts");
34264
35767
  var isExcelOnlineDocument_1 = __webpack_require__(/*! ./isExcelOnlineDocument */ "./packages/roosterjs-content-model-plugins/lib/paste/pasteSourceValidations/isExcelOnlineDocument.ts");
34265
35768
  var isGoogleSheetDocument_1 = __webpack_require__(/*! ./isGoogleSheetDocument */ "./packages/roosterjs-content-model-plugins/lib/paste/pasteSourceValidations/isGoogleSheetDocument.ts");
35769
+ var isOneNoteDocument_1 = __webpack_require__(/*! ./isOneNoteDocument */ "./packages/roosterjs-content-model-plugins/lib/paste/pasteSourceValidations/isOneNoteDocument.ts");
34266
35770
  var isPowerPointDesktopDocument_1 = __webpack_require__(/*! ./isPowerPointDesktopDocument */ "./packages/roosterjs-content-model-plugins/lib/paste/pasteSourceValidations/isPowerPointDesktopDocument.ts");
34267
35771
  var isWordDesktopDocument_1 = __webpack_require__(/*! ./isWordDesktopDocument */ "./packages/roosterjs-content-model-plugins/lib/paste/pasteSourceValidations/isWordDesktopDocument.ts");
34268
35772
  var shouldConvertToSingleImage_1 = __webpack_require__(/*! ./shouldConvertToSingleImage */ "./packages/roosterjs-content-model-plugins/lib/paste/pasteSourceValidations/shouldConvertToSingleImage.ts");
@@ -34275,6 +35779,7 @@ var getSourceFunctions = new Map([
34275
35779
  ['googleSheets', isGoogleSheetDocument_1.isGoogleSheetDocument],
34276
35780
  ['singleImage', shouldConvertToSingleImage_1.shouldConvertToSingleImage],
34277
35781
  ['excelNonNativeEvent', isExcelNonNativeEvent_1.isExcelNotNativeEvent],
35782
+ ['oneNoteDesktop', isOneNoteDocument_1.isOneNoteDesktopDocument],
34278
35783
  ]);
34279
35784
  /**
34280
35785
  * @internal
@@ -34414,6 +35919,34 @@ var isGoogleSheetDocument = function (props) {
34414
35919
  exports.isGoogleSheetDocument = isGoogleSheetDocument;
34415
35920
 
34416
35921
 
35922
+ /***/ }),
35923
+
35924
+ /***/ "./packages/roosterjs-content-model-plugins/lib/paste/pasteSourceValidations/isOneNoteDocument.ts":
35925
+ /*!********************************************************************************************************!*\
35926
+ !*** ./packages/roosterjs-content-model-plugins/lib/paste/pasteSourceValidations/isOneNoteDocument.ts ***!
35927
+ \********************************************************************************************************/
35928
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
35929
+
35930
+ "use strict";
35931
+
35932
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
35933
+ exports.isOneNoteDesktopDocument = void 0;
35934
+ var constants_1 = __webpack_require__(/*! ./constants */ "./packages/roosterjs-content-model-plugins/lib/paste/pasteSourceValidations/constants.ts");
35935
+ var ONE_NOTE_ATTRIBUTE_VALUE = 'OneNote.File';
35936
+ /**
35937
+ * @internal
35938
+ * Checks whether the provided HTML attributes identify a OneNote Desktop document
35939
+ * @param props Properties related to the PasteEvent
35940
+ * @returns True if the document is identified as a OneNote Desktop document, otherwise false
35941
+ */
35942
+ var isOneNoteDesktopDocument = function (props) {
35943
+ var htmlAttributes = props.htmlAttributes;
35944
+ // The presence of this attribute confirms its origin from OneNote Desktop
35945
+ return htmlAttributes[constants_1.PastePropertyNames.PROG_ID_NAME] == ONE_NOTE_ATTRIBUTE_VALUE;
35946
+ };
35947
+ exports.isOneNoteDesktopDocument = isOneNoteDesktopDocument;
35948
+
35949
+
34417
35950
  /***/ }),
34418
35951
 
34419
35952
  /***/ "./packages/roosterjs-content-model-plugins/lib/paste/pasteSourceValidations/isPowerPointDesktopDocument.ts":
@@ -36327,6 +37860,7 @@ function onDraggingHorizontal(context, event, initValue, deltaX, deltaY) {
36327
37860
  for (var col = 0; col < tableRow.cells.length; col++) {
36328
37861
  var td = tableRow.cells[col];
36329
37862
  td.style.height = newHeight + 'px';
37863
+ td.style.boxSizing = 'border-box';
36330
37864
  }
36331
37865
  return true;
36332
37866
  }
@@ -36370,7 +37904,9 @@ function onDraggingVertical(context, event, initValue, deltaX) {
36370
37904
  for (var row = 0; row < table.rows.length; row++) {
36371
37905
  var tableRow = table.rows[row];
36372
37906
  for (var col = 0; col < tableRow.cells.length; col++) {
36373
- tableRow.cells[col].style.width = cmTable.widths[col] + 'px';
37907
+ var td = tableRow.cells[col];
37908
+ td.style.width = cmTable.widths[col] + 'px';
37909
+ td.style.boxSizing = 'border-box';
36374
37910
  }
36375
37911
  }
36376
37912
  if (context.originalWidth > 0) {
@@ -36795,7 +38331,7 @@ function onDragEnd(context, event, initValue) {
36795
38331
  if (ip && (initValue === null || initValue === void 0 ? void 0 : initValue.cmTable)) {
36796
38332
  // Insert new table
36797
38333
  var doc = (0, roosterjs_content_model_dom_1.createContentModelDocument)();
36798
- doc.blocks.push((0, roosterjs_content_model_dom_1.mutateBlock)(initValue.cmTable));
38334
+ doc.blocks.push(oldTable !== null && oldTable !== void 0 ? oldTable : (0, roosterjs_content_model_dom_1.mutateBlock)(initValue.cmTable));
36799
38335
  insertionSuccess_1 = !!(0, roosterjs_content_model_dom_1.mergeModel)(model, (0, roosterjs_content_model_dom_1.cloneModel)(doc), context, {
36800
38336
  mergeFormat: 'none',
36801
38337
  insertPosition: ip,
@@ -36805,13 +38341,13 @@ function onDragEnd(context, event, initValue) {
36805
38341
  var finalTable = (_a = (0, roosterjs_content_model_dom_1.getFirstSelectedTable)(model)[0]) !== null && _a !== void 0 ? _a : initValue.cmTable;
36806
38342
  if (finalTable) {
36807
38343
  // Add selection marker to the first cell of the table
36808
- var FirstCell = finalTable.rows[0].cells[0];
36809
- var markerParagraph = FirstCell === null || FirstCell === void 0 ? void 0 : FirstCell.blocks[0];
38344
+ var firstCell = finalTable.rows[0].cells[0];
38345
+ var markerParagraph = firstCell === null || firstCell === void 0 ? void 0 : firstCell.blocks[0];
36810
38346
  if ((markerParagraph === null || markerParagraph === void 0 ? void 0 : markerParagraph.blockType) == 'Paragraph') {
36811
38347
  var marker = (0, roosterjs_content_model_dom_1.createSelectionMarker)(model.format);
36812
38348
  (0, roosterjs_content_model_dom_1.mutateBlock)(markerParagraph).segments.unshift(marker);
36813
38349
  (0, roosterjs_content_model_dom_1.setParagraphNotImplicit)(markerParagraph);
36814
- (0, roosterjs_content_model_dom_1.setSelection)(FirstCell, marker);
38350
+ (0, roosterjs_content_model_dom_1.setSelection)(model, marker);
36815
38351
  }
36816
38352
  }
36817
38353
  }
@@ -36991,6 +38527,7 @@ function onDragging(context, event, initValue, deltaX, deltaY) {
36991
38527
  var newWidth = Math.max(cmTable.widths[col], roosterjs_content_model_dom_1.MIN_ALLOWED_TABLE_CELL_HEIGHT);
36992
38528
  td.style.width = newWidth + 'px';
36993
38529
  td.style.height = newHeight + 'px';
38530
+ td.style.boxSizing = 'border-box';
36994
38531
  }
36995
38532
  }
36996
38533
  return true;
@@ -37053,29 +38590,20 @@ function isTableBottomVisible(editor, rect, contentDiv) {
37053
38590
 
37054
38591
  Object.defineProperty(exports, "__esModule", ({ value: true }));
37055
38592
  exports.getCMTableFromTable = void 0;
37056
- var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
37057
38593
  var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
37058
38594
  /**
37059
38595
  * @internal
37060
38596
  * Get ContentModelTable from a table element if it is present in the content model
37061
38597
  */
37062
38598
  function getCMTableFromTable(editor, table) {
37063
- var cmTable;
37064
- editor.formatContentModel(function (model) {
37065
- var _a;
37066
- _a = (0, tslib_1.__read)((0, roosterjs_content_model_dom_1.getFirstSelectedTable)(model), 1), cmTable = _a[0];
37067
- return false;
37068
- }, {
37069
- selectionOverride: {
37070
- type: 'table',
37071
- firstColumn: 0,
37072
- firstRow: 0,
37073
- lastColumn: 0,
37074
- lastRow: 0,
37075
- table: table,
37076
- },
38599
+ var model = (0, roosterjs_content_model_dom_1.createContentModelDocument)();
38600
+ var context = (0, roosterjs_content_model_dom_1.createDomToModelContext)({
38601
+ zoomScale: editor.getDOMHelper().calculateZoomScale(),
38602
+ recalculateTableSize: true,
37077
38603
  });
37078
- return cmTable;
38604
+ context.elementProcessors.element(model, table, context);
38605
+ var firstBlock = model.blocks[0];
38606
+ return (firstBlock === null || firstBlock === void 0 ? void 0 : firstBlock.blockType) == 'Table' ? firstBlock : undefined;
37079
38607
  }
37080
38608
  exports.getCMTableFromTable = getCMTableFromTable;
37081
38609
 
@@ -37353,6 +38881,7 @@ Object.defineProperty(exports, "createEditor", ({ enumerable: true, get: functio
37353
38881
  (0, tslib_1.__exportStar)(__webpack_require__(/*! roosterjs-content-model-api */ "./packages/roosterjs-content-model-api/lib/index.ts"), exports);
37354
38882
  (0, tslib_1.__exportStar)(__webpack_require__(/*! roosterjs-content-model-plugins */ "./packages/roosterjs-content-model-plugins/lib/index.ts"), exports);
37355
38883
  (0, tslib_1.__exportStar)(__webpack_require__(/*! roosterjs-color-utils */ "./packages/roosterjs-color-utils/lib/index.ts"), exports);
38884
+ (0, tslib_1.__exportStar)(__webpack_require__(/*! roosterjs-content-model-markdown */ "./packages/roosterjs-content-model-markdown/lib/index.ts"), exports);
37356
38885
 
37357
38886
 
37358
38887
  /***/ }),