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