roosterjs 9.50.0 → 9.51.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.
@@ -7890,25 +7890,21 @@ exports.setTableCellShade = setTableCellShade;
7890
7890
  /*!******************************************************************************!*\
7891
7891
  !*** ./packages/roosterjs-content-model-api/lib/publicApi/utils/checkXss.ts ***!
7892
7892
  \******************************************************************************/
7893
- (__unused_webpack_module, exports, __webpack_require__) {
7893
+ (__unused_webpack_module, exports) {
7894
7894
 
7895
7895
  "use strict";
7896
7896
 
7897
7897
  Object.defineProperty(exports, "__esModule", ({ value: true }));
7898
7898
  exports.checkXss = void 0;
7899
- var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
7900
7899
  /**
7901
7900
  * @internal Check if there is XSS attack in the link
7902
7901
  * @param link The link to be checked
7903
- * @returns The safe link with invisible Unicode characters stripped, or empty string if there is XSS attack
7904
- * @remarks This function strips invisible Unicode characters (zero-width chars, Unicode Tags, etc.)
7905
- * and checks for patterns like s\nc\nr\ni\np\nt: to prevent XSS attacks. This may block some valid links,
7902
+ * @returns The safe link, or empty string if there is XSS attack
7903
+ * @remarks This function checks for patterns like s\nc\nr\ni\np\nt: to prevent XSS attacks. This may block some valid links,
7906
7904
  * but it is necessary for security reasons. We treat the word "script" as safe if there are "/" before it.
7907
7905
  */
7908
7906
  function checkXss(link) {
7909
- // Defense-in-depth: strip invisible Unicode even if already handled elsewhere
7910
- var sanitized = (0, roosterjs_content_model_dom_1.stripInvisibleUnicode)(link);
7911
- return sanitized.match(/^[^\/]*s\n*c\n*r\n*i\n*p\n*t\n*:/i) ? '' : sanitized;
7907
+ return link.match(/^[^\/]*s\n*c\n*r\n*i\n*p\n*t\n*:/i) ? '' : link;
7912
7908
  }
7913
7909
  exports.checkXss = checkXss;
7914
7910
 
@@ -9105,7 +9101,7 @@ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-mo
9105
9101
  // Here I didn't add 'HTMLFast' to ExportContentMode type because it will make this a breaking change and EditorAdapter will see build time error without bumping version
9106
9102
  // Once we are confident that 'HTMLFast' is stable, we can fully switch 'HTML' to use the 'HTMLFast' approach
9107
9103
  function exportContent(editor, mode, optionsOrCallbacks) {
9108
- if (mode === void 0) { mode = 'HTML'; }
9104
+ if (mode === void 0) { mode = 'HTMLFast'; }
9109
9105
  var model;
9110
9106
  switch (mode) {
9111
9107
  case 'PlainTextFast':
@@ -9114,6 +9110,7 @@ function exportContent(editor, mode, optionsOrCallbacks) {
9114
9110
  model = editor.getContentModelCopy('clean');
9115
9111
  return (0, roosterjs_content_model_dom_1.contentModelToText)(model, undefined /*separator*/, optionsOrCallbacks);
9116
9112
  case 'HTMLFast':
9113
+ default:
9117
9114
  var clonedRoot = editor.getDOMHelper().getClonedRoot();
9118
9115
  if (editor.isDarkMode()) {
9119
9116
  (0, roosterjs_content_model_dom_1.transformColor)(clonedRoot, false /*includeSelf*/, 'darkToLight', editor.getColorManager(), {
@@ -9122,7 +9119,6 @@ function exportContent(editor, mode, optionsOrCallbacks) {
9122
9119
  }
9123
9120
  return getHTMLFromDOM(editor, clonedRoot);
9124
9121
  case 'HTML':
9125
- default:
9126
9122
  model = editor.getContentModelCopy('clean');
9127
9123
  var doc = editor.getDocument();
9128
9124
  var div = doc.createElement('div');
@@ -10133,10 +10129,10 @@ var getRootComputedStyleForContext_1 = __webpack_require__(/*! ./getRootComputed
10133
10129
  * Create a EditorContext object used by ContentModel API
10134
10130
  */
10135
10131
  var createEditorContext = function (core, saveIndex) {
10136
- var _a, _b, _c;
10132
+ var _a, _b;
10137
10133
  var lifecycle = core.lifecycle, format = core.format, darkColorHandler = core.darkColorHandler, logicalRoot = core.logicalRoot, cache = core.cache, domHelper = core.domHelper;
10138
10134
  saveIndex = saveIndex && !core.lifecycle.shadowEditFragment;
10139
- var context = (0, tslib_1.__assign)({ isDarkMode: lifecycle.isDarkMode, defaultFormat: format.defaultFormat, pendingFormat: (_a = format.pendingFormat) !== null && _a !== void 0 ? _a : undefined, darkColorHandler: darkColorHandler, addDelimiterForEntity: true, allowCacheElement: true, allowCacheListItem: !!((_b = core.experimentalFeatures) === null || _b === void 0 ? void 0 : _b.includes('CacheList')), domIndexer: saveIndex ? cache.domIndexer : undefined, zoomScale: domHelper.calculateZoomScale(), experimentalFeatures: (_c = core.experimentalFeatures) !== null && _c !== void 0 ? _c : [], paragraphMap: core.cache.paragraphMap, editorViewWidth: domHelper.getClientWidth() }, (0, getRootComputedStyleForContext_1.getRootComputedStyleForContext)(logicalRoot.ownerDocument));
10135
+ var context = (0, tslib_1.__assign)({ isDarkMode: lifecycle.isDarkMode, defaultFormat: format.defaultFormat, pendingFormat: (_a = format.pendingFormat) !== null && _a !== void 0 ? _a : undefined, darkColorHandler: darkColorHandler, addDelimiterForEntity: true, allowCacheElement: true, domIndexer: saveIndex ? cache.domIndexer : undefined, zoomScale: domHelper.calculateZoomScale(), experimentalFeatures: (_b = core.experimentalFeatures) !== null && _b !== void 0 ? _b : [], paragraphMap: core.cache.paragraphMap, editorViewWidth: domHelper.getClientWidth() }, (0, getRootComputedStyleForContext_1.getRootComputedStyleForContext)(logicalRoot.ownerDocument));
10140
10136
  if (core.domHelper.isRightToLeft()) {
10141
10137
  context.isRootRtl = true;
10142
10138
  }
@@ -15633,7 +15629,6 @@ var Editor = /** @class */ (function () {
15633
15629
  };
15634
15630
  this.core = (0, createEditorCore_1.createEditorCore)(contentDiv, options);
15635
15631
  var initialModel = (_a = options.initialModel) !== null && _a !== void 0 ? _a : (0, roosterjs_content_model_dom_1.createEmptyModel)(this.core.format.defaultFormat);
15636
- (0, roosterjs_content_model_dom_1.sanitizeInvisibleUnicode)(initialModel);
15637
15632
  this.core.api.setContentModel(this.core, initialModel, { ignoreSelection: true }, undefined /*onNodeCreated*/, true /*isInitializing*/);
15638
15633
  this.core.plugins.forEach(function (plugin) { return plugin.initialize(_this); });
15639
15634
  }
@@ -15958,7 +15953,6 @@ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-mo
15958
15953
  var DOMHelperImpl = /** @class */ (function () {
15959
15954
  function DOMHelperImpl(contentDiv, options) {
15960
15955
  this.contentDiv = contentDiv;
15961
- this.options = options;
15962
15956
  }
15963
15957
  DOMHelperImpl.prototype.queryElements = function (selector) {
15964
15958
  return (0, roosterjs_content_model_dom_1.toArray)(this.contentDiv.querySelectorAll(selector));
@@ -16047,14 +16041,9 @@ var DOMHelperImpl = /** @class */ (function () {
16047
16041
  * Get a deep cloned root element
16048
16042
  */
16049
16043
  DOMHelperImpl.prototype.getClonedRoot = function () {
16050
- if (this.options.cloneIndependentRoot) {
16051
- var doc = this.contentDiv.ownerDocument.implementation.createHTMLDocument();
16052
- var clone = doc.importNode(this.contentDiv, true /*deep*/);
16053
- return clone;
16054
- }
16055
- else {
16056
- return this.contentDiv.cloneNode(true /*deep*/);
16057
- }
16044
+ var doc = this.contentDiv.ownerDocument.implementation.createHTMLDocument();
16045
+ var clone = doc.importNode(this.contentDiv, true /*deep*/);
16046
+ return clone;
16058
16047
  };
16059
16048
  /**
16060
16049
  * Get format of the container element
@@ -16192,7 +16181,7 @@ var createEditorCorePlugins_1 = __webpack_require__(/*! ../../corePlugin/createE
16192
16181
  * @param options Editor options
16193
16182
  */
16194
16183
  function createEditorCore(contentDiv, options) {
16195
- var _a, _b, _c;
16184
+ var _a, _b;
16196
16185
  var corePlugins = (0, createEditorCorePlugins_1.createEditorCorePlugins)(options, contentDiv);
16197
16186
  var domCreator = (0, domCreator_1.createDOMCreator)(options.trustedHTMLHandler);
16198
16187
  return (0, tslib_1.__assign)((0, tslib_1.__assign)({ physicalRoot: contentDiv, logicalRoot: contentDiv, api: (0, tslib_1.__assign)((0, tslib_1.__assign)({}, coreApiMap_1.coreApiMap), options.coreApiOverride), originalApi: (0, tslib_1.__assign)({}, coreApiMap_1.coreApiMap), plugins: (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([
@@ -16208,9 +16197,7 @@ function createEditorCore(contentDiv, options) {
16208
16197
  corePlugins.lifecycle,
16209
16198
  ], false), environment: createEditorEnvironment(contentDiv, options), darkColorHandler: (0, DarkColorHandlerImpl_1.createDarkColorHandler)(contentDiv, (_b = options.getDarkColor) !== null && _b !== void 0 ? _b : getDarkColorFallback, options.knownColors, options.generateColorKey), trustedHTMLHandler: options.trustedHTMLHandler && !(0, domCreator_1.isDOMCreator)(options.trustedHTMLHandler)
16210
16199
  ? options.trustedHTMLHandler
16211
- : (0, domCreator_1.createTrustedHTMLHandler)(domCreator), domCreator: domCreator, domHelper: (0, DOMHelperImpl_1.createDOMHelper)(contentDiv, {
16212
- cloneIndependentRoot: (_c = options.experimentalFeatures) === null || _c === void 0 ? void 0 : _c.includes('CloneIndependentRoot'),
16213
- }) }, getPluginState(corePlugins)), { disposeErrorHandler: options.disposeErrorHandler, onFixUpModel: options.onFixUpModel, experimentalFeatures: options.experimentalFeatures ? (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(options.experimentalFeatures), false) : [] });
16200
+ : (0, domCreator_1.createTrustedHTMLHandler)(domCreator), domCreator: domCreator, domHelper: (0, DOMHelperImpl_1.createDOMHelper)(contentDiv) }, getPluginState(corePlugins)), { disposeErrorHandler: options.disposeErrorHandler, onFixUpModel: options.onFixUpModel, experimentalFeatures: options.experimentalFeatures ? (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(options.experimentalFeatures), false) : [] });
16214
16201
  }
16215
16202
  exports.createEditorCore = createEditorCore;
16216
16203
  function createEditorEnvironment(contentDiv, options) {
@@ -18497,6 +18484,7 @@ exports.linkProcessor = linkProcessor;
18497
18484
  Object.defineProperty(exports, "__esModule", ({ value: true }));
18498
18485
  exports.listItemProcessor = void 0;
18499
18486
  var createListItem_1 = __webpack_require__(/*! ../../modelApi/creators/createListItem */ "./packages/roosterjs-content-model-dom/lib/modelApi/creators/createListItem.ts");
18487
+ var createListLevel_1 = __webpack_require__(/*! ../../modelApi/creators/createListLevel */ "./packages/roosterjs-content-model-dom/lib/modelApi/creators/createListLevel.ts");
18500
18488
  var parseFormat_1 = __webpack_require__(/*! ../utils/parseFormat */ "./packages/roosterjs-content-model-dom/lib/domToModel/utils/parseFormat.ts");
18501
18489
  var stackFormat_1 = __webpack_require__(/*! ../utils/stackFormat */ "./packages/roosterjs-content-model-dom/lib/domToModel/utils/stackFormat.ts");
18502
18490
  /**
@@ -18505,14 +18493,22 @@ var stackFormat_1 = __webpack_require__(/*! ../utils/stackFormat */ "./packages/
18505
18493
  var listItemProcessor = function (group, element, context) {
18506
18494
  var _a;
18507
18495
  var listFormat = context.listFormat;
18508
- if (listFormat.listParent && listFormat.levels.length > 0) {
18496
+ var originalListParent = listFormat.listParent;
18497
+ var shouldPopListLevel = false;
18498
+ try {
18499
+ listFormat.listParent = (_a = listFormat.listParent) !== null && _a !== void 0 ? _a : group;
18500
+ var listParent_1 = listFormat.listParent;
18501
+ if (listFormat.levels.length == 0) {
18502
+ listFormat.levels.push((0, createListLevel_1.createListLevel)(listFormat.potentialListType || 'UL', context.blockFormat));
18503
+ shouldPopListLevel = true;
18504
+ }
18509
18505
  (0, stackFormat_1.stackFormat)(context, {
18510
18506
  segment: 'shallowCloneForBlock',
18511
18507
  }, function () {
18512
18508
  (0, parseFormat_1.parseFormat)(element, context.formatParsers.segmentOnBlock, context.segmentFormat, context);
18513
18509
  var listItem = (0, createListItem_1.createListItem)(listFormat.levels, context.segmentFormat);
18514
18510
  (0, parseFormat_1.parseFormat)(element, context.formatParsers.listItemElement, listItem.format, context);
18515
- listFormat.listParent.blocks.push(listItem);
18511
+ listParent_1.blocks.push(listItem);
18516
18512
  (0, parseFormat_1.parseFormat)(element, context.formatParsers.listItemThread, listItem.levels[listItem.levels.length - 1].format, context);
18517
18513
  context.elementProcessors.child(listItem, element, context);
18518
18514
  var firstChild = listItem.blocks[0];
@@ -18524,10 +18520,11 @@ var listItemProcessor = function (group, element, context) {
18524
18520
  }
18525
18521
  });
18526
18522
  }
18527
- else {
18528
- var currentBlocks = (_a = listFormat.listParent) === null || _a === void 0 ? void 0 : _a.blocks;
18529
- var lastItem = currentBlocks === null || currentBlocks === void 0 ? void 0 : currentBlocks[(currentBlocks === null || currentBlocks === void 0 ? void 0 : currentBlocks.length) - 1];
18530
- context.elementProcessors['*']((lastItem === null || lastItem === void 0 ? void 0 : lastItem.blockType) == 'BlockGroup' ? lastItem : group, element, context);
18523
+ finally {
18524
+ if (shouldPopListLevel) {
18525
+ listFormat.levels.pop();
18526
+ }
18527
+ listFormat.listParent = originalListParent;
18531
18528
  }
18532
18529
  };
18533
18530
  exports.listItemProcessor = listItemProcessor;
@@ -18556,13 +18553,15 @@ var listProcessor = function (group, element, context) {
18556
18553
  segment: 'shallowCloneForBlock',
18557
18554
  paragraph: 'shallowCloneForGroup',
18558
18555
  }, function () {
18559
- var level = (0, createListLevel_1.createListLevel)(element.tagName, context.blockFormat);
18556
+ var tagName = element.tagName;
18557
+ var level = (0, createListLevel_1.createListLevel)(tagName, context.blockFormat);
18560
18558
  var listFormat = context.listFormat;
18561
18559
  (0, parseFormat_1.parseFormat)(element, context.formatParsers.dataset, level.dataset, context);
18562
18560
  (0, parseFormat_1.parseFormat)(element, context.formatParsers.listLevelThread, level.format, context);
18563
18561
  (0, parseFormat_1.parseFormat)(element, context.formatParsers.listLevel, level.format, context);
18564
18562
  (0, parseFormat_1.parseFormat)(element, context.formatParsers.segment, context.segmentFormat, context);
18565
18563
  var originalListParent = listFormat.listParent;
18564
+ listFormat.potentialListType = tagName;
18566
18565
  listFormat.listParent = listFormat.listParent || group;
18567
18566
  listFormat.levels.push(level);
18568
18567
  try {
@@ -20807,38 +20806,6 @@ function normalizeText(txt, isForward) {
20807
20806
  exports.normalizeText = normalizeText;
20808
20807
 
20809
20808
 
20810
- /***/ },
20811
-
20812
- /***/ "./packages/roosterjs-content-model-dom/lib/domUtils/stripInvisibleUnicode.ts"
20813
- /*!************************************************************************************!*\
20814
- !*** ./packages/roosterjs-content-model-dom/lib/domUtils/stripInvisibleUnicode.ts ***!
20815
- \************************************************************************************/
20816
- (__unused_webpack_module, exports) {
20817
-
20818
- "use strict";
20819
-
20820
- Object.defineProperty(exports, "__esModule", ({ value: true }));
20821
- exports.stripInvisibleUnicode = void 0;
20822
- var INVISIBLE_UNICODE_REGEX =
20823
- // eslint-disable-next-line no-misleading-character-class
20824
- /[\u00AD\u034F\u061C\u115F\u1160\u17B4\u17B5\u180B-\u180E\u200B-\u200F\u202A-\u202E\u2028\u2029\u2060-\u2064\u2066-\u2069\u3164\uFEFF\uFFA0\uFFF9-\uFFFB]|\uDB40[\uDC01-\uDCFF]/g;
20825
- /**
20826
- * Strip invisible Unicode characters from a string.
20827
- * This removes zero-width characters, bidirectional marks, Unicode Tags (U+E0001-U+E00FF),
20828
- * interlinear annotation anchors, Mongolian free variation selectors,
20829
- * and other invisible formatting characters that can be used to hide content in links.
20830
- *
20831
- * @remarks This function strips ZWJ (U+200D) which may affect emoji sequences.
20832
- * It should only be applied to href attributes, not to visible text content.
20833
- * @param value The string to strip invisible characters from
20834
- * @returns The string with invisible characters removed
20835
- */
20836
- function stripInvisibleUnicode(value) {
20837
- return value.replace(INVISIBLE_UNICODE_REGEX, '');
20838
- }
20839
- exports.stripInvisibleUnicode = stripInvisibleUnicode;
20840
-
20841
-
20842
20809
  /***/ },
20843
20810
 
20844
20811
  /***/ "./packages/roosterjs-content-model-dom/lib/domUtils/style/borderValues.ts"
@@ -23635,9 +23602,9 @@ exports.shouldSetValue = shouldSetValue;
23635
23602
 
23636
23603
  Object.defineProperty(exports, "__esModule", ({ value: true }));
23637
23604
  exports.createImage = exports.createText = exports.createTableCell = exports.createTable = exports.createSelectionMarker = exports.createParagraph = exports.createFormatContainer = exports.createListItem = exports.createBr = exports.isLinkUndeletable = exports.setLinkUndeletable = exports.scrollRectIntoView = exports.normalizeRect = exports.isWhiteSpacePreserved = exports.reuseCachedElement = exports.findClosestBlockEntityContainer = exports.isBlockEntityContainer = exports.isEntityDelimiter = exports.addDelimiters = exports.generateEntityClassNames = exports.parseEntityFormat = exports.getAllEntityWrappers = exports.findClosestEntityWrapper = exports.isEntityElement = exports.unwrap = exports.wrap = exports.wrapAllChildNodes = exports.moveChildNodes = exports.toArray = exports.getSafeIdSelector = exports.getObjectKeys = exports.isElementOfType = exports.isNodeOfType = exports.hasMetadata = exports.getMetadata = exports.updateMetadata = exports.buildSelectionMarker = exports.isBlockElement = exports.areSameFormats = exports.parseFormat = exports.getRegularSelectionOffsets = exports.formatContainerProcessor = exports.tableProcessor = exports.entityProcessor = exports.processChildNode = exports.handleRegularSelection = exports.childProcessor = exports.contentModelToText = exports.contentModelToDom = exports.domToContentModel = void 0;
23638
- exports.getDOMInsertPointRect = exports.getSelectionRootNode = exports.isBold = exports.createModelToDomConfig = exports.createModelToDomContextWithConfig = exports.createModelToDomContext = exports.createDomToModelConfig = exports.createDomToModelContextWithConfig = exports.createDomToModelContext = exports.defaultGenerateColorKey = exports.parseColor = exports.setColor = exports.getColor = exports.DeprecatedColors = exports.BorderKeys = exports.parseValueWithUnit = exports.getAutoListStyleType = exports.getOrderedListNumberStr = exports.ParagraphFormats = exports.ListFormatsToMove = exports.ListFormatsToKeep = exports.ListFormats = exports.copyFormat = exports.setParagraphNotImplicit = exports.normalizeSegmentFormat = exports.mergeTextSegments = exports.normalizeSingleSegment = exports.isEmpty = exports.addSegment = exports.unwrapBlock = exports.isGeneralSegment = exports.sanitizeInvisibleUnicode = exports.normalizeContentModel = exports.normalizeParagraph = exports.addTextSegment = exports.addLink = exports.addCode = exports.addBlock = exports.mutateSegment = exports.mutateSegments = exports.mutateBlock = exports.createTableRow = exports.createEmptyModel = exports.createListLevel = exports.createDivider = exports.createEntity = exports.createGeneralBlock = exports.createGeneralSegment = exports.createParagraphDecorator = exports.createContentModelDocument = void 0;
23639
- exports.getSegmentTextFormat = exports.getListStyleTypeFromString = exports.retrieveModelFormatState = exports.setTableCellBackgroundColor = exports.MIN_ALLOWED_TABLE_CELL_HEIGHT = exports.MIN_ALLOWED_TABLE_CELL_WIDTH = exports.normalizeTable = exports.setFirstColumnFormatBorders = exports.applyTableFormat = exports.deleteBlock = exports.deleteSegment = exports.deleteSelection = exports.mergeModel = exports.cloneModel = exports.setSelection = exports.hasSelectionInBlockGroup = exports.hasSelectionInSegment = exports.hasSelectionInBlock = exports.getSelectedCells = exports.getSelectedSegmentsAndParagraphs = exports.getSelectedSegments = exports.getSelectedParagraphs = exports.getOperationalBlocks = exports.getFirstSelectedTable = exports.getFirstSelectedListItem = exports.iterateSelections = exports.isBlockGroupOfType = exports.getRangesByText = exports.getImageState = exports.setImageState = exports.getParagraphMarker = exports.setParagraphMarker = exports.cacheGetEventData = exports.extractClipboardItems = exports.normalizeFontFamily = exports.transformColor = exports.retrieveDocumentMetadata = exports.readFile = exports.parseTableCells = exports.stripInvisibleUnicode = exports.normalizeText = exports.isSpace = exports.isPunctuation = exports.extractBorderValues = exports.combineBorderValue = exports.getNodePositionFromEvent = exports.isCursorMovingKey = exports.isModifierKey = exports.isCharacterValue = exports.trimModelForSelection = void 0;
23640
- exports.EmptySegmentFormat = exports.UnorderedListStyleMap = exports.OrderedListStyleMap = exports.TableBorderFormat = exports.NumberingListType = exports.BulletListType = exports.ChangeSource = exports.ListMetadataDefinition = exports.getListMetadata = exports.updateListMetadata = exports.getTableMetadata = exports.updateTableMetadata = exports.getTableCellMetadata = exports.updateTableCellMetadata = exports.getImageMetadata = exports.updateImageMetadata = exports.runEditSteps = exports.getClosestAncestorBlockGroupIndex = void 0;
23605
+ exports.trimModelForSelection = exports.getDOMInsertPointRect = exports.getSelectionRootNode = exports.isBold = exports.createModelToDomConfig = exports.createModelToDomContextWithConfig = exports.createModelToDomContext = exports.createDomToModelConfig = exports.createDomToModelContextWithConfig = exports.createDomToModelContext = exports.defaultGenerateColorKey = exports.parseColor = exports.setColor = exports.getColor = exports.DeprecatedColors = exports.BorderKeys = exports.parseValueWithUnit = exports.getAutoListStyleType = exports.getOrderedListNumberStr = exports.ParagraphFormats = exports.ListFormatsToMove = exports.ListFormatsToKeep = exports.ListFormats = exports.copyFormat = exports.setParagraphNotImplicit = exports.normalizeSegmentFormat = exports.mergeTextSegments = exports.normalizeSingleSegment = exports.isEmpty = exports.addSegment = exports.unwrapBlock = exports.isGeneralSegment = exports.normalizeContentModel = exports.normalizeParagraph = exports.addTextSegment = exports.addLink = exports.addCode = exports.addBlock = exports.mutateSegment = exports.mutateSegments = exports.mutateBlock = exports.createTableRow = exports.createEmptyModel = exports.createListLevel = exports.createDivider = exports.createEntity = exports.createGeneralBlock = exports.createGeneralSegment = exports.createParagraphDecorator = exports.createContentModelDocument = void 0;
23606
+ exports.runEditSteps = exports.getClosestAncestorBlockGroupIndex = exports.getSegmentTextFormat = exports.getListStyleTypeFromString = exports.retrieveModelFormatState = exports.setTableCellBackgroundColor = exports.MIN_ALLOWED_TABLE_CELL_HEIGHT = exports.MIN_ALLOWED_TABLE_CELL_WIDTH = exports.normalizeTable = exports.setFirstColumnFormatBorders = exports.applyTableFormat = exports.deleteBlock = exports.deleteSegment = exports.deleteSelection = exports.mergeModel = exports.cloneModel = exports.setSelection = exports.hasSelectionInBlockGroup = exports.hasSelectionInSegment = exports.hasSelectionInBlock = exports.getSelectedCells = exports.getSelectedSegmentsAndParagraphs = exports.getSelectedSegments = exports.getSelectedParagraphs = exports.getOperationalBlocks = exports.getFirstSelectedTable = exports.getFirstSelectedListItem = exports.iterateSelections = exports.isBlockGroupOfType = exports.getRangesByText = exports.getImageState = exports.setImageState = exports.getParagraphMarker = exports.setParagraphMarker = exports.cacheGetEventData = exports.extractClipboardItems = exports.normalizeFontFamily = exports.transformColor = exports.retrieveDocumentMetadata = exports.readFile = exports.parseTableCells = exports.normalizeText = exports.isSpace = exports.isPunctuation = exports.extractBorderValues = exports.combineBorderValue = exports.getNodePositionFromEvent = exports.isCursorMovingKey = exports.isModifierKey = exports.isCharacterValue = void 0;
23607
+ exports.EmptySegmentFormat = exports.UnorderedListStyleMap = exports.OrderedListStyleMap = exports.TableBorderFormat = exports.NumberingListType = exports.BulletListType = exports.ChangeSource = exports.ListMetadataDefinition = exports.getListMetadata = exports.updateListMetadata = exports.getTableMetadata = exports.updateTableMetadata = exports.getTableCellMetadata = exports.updateTableCellMetadata = exports.getImageMetadata = exports.updateImageMetadata = void 0;
23641
23608
  var domToContentModel_1 = __webpack_require__(/*! ./domToModel/domToContentModel */ "./packages/roosterjs-content-model-dom/lib/domToModel/domToContentModel.ts");
23642
23609
  Object.defineProperty(exports, "domToContentModel", ({ enumerable: true, get: function () { return domToContentModel_1.domToContentModel; } }));
23643
23610
  var contentModelToDom_1 = __webpack_require__(/*! ./modelToDom/contentModelToDom */ "./packages/roosterjs-content-model-dom/lib/modelToDom/contentModelToDom.ts");
@@ -23758,8 +23725,6 @@ var normalizeParagraph_1 = __webpack_require__(/*! ./modelApi/common/normalizePa
23758
23725
  Object.defineProperty(exports, "normalizeParagraph", ({ enumerable: true, get: function () { return normalizeParagraph_1.normalizeParagraph; } }));
23759
23726
  var normalizeContentModel_1 = __webpack_require__(/*! ./modelApi/common/normalizeContentModel */ "./packages/roosterjs-content-model-dom/lib/modelApi/common/normalizeContentModel.ts");
23760
23727
  Object.defineProperty(exports, "normalizeContentModel", ({ enumerable: true, get: function () { return normalizeContentModel_1.normalizeContentModel; } }));
23761
- var sanitizeInvisibleUnicode_1 = __webpack_require__(/*! ./modelApi/common/sanitizeInvisibleUnicode */ "./packages/roosterjs-content-model-dom/lib/modelApi/common/sanitizeInvisibleUnicode.ts");
23762
- Object.defineProperty(exports, "sanitizeInvisibleUnicode", ({ enumerable: true, get: function () { return sanitizeInvisibleUnicode_1.sanitizeInvisibleUnicode; } }));
23763
23728
  var isGeneralSegment_1 = __webpack_require__(/*! ./modelApi/typeCheck/isGeneralSegment */ "./packages/roosterjs-content-model-dom/lib/modelApi/typeCheck/isGeneralSegment.ts");
23764
23729
  Object.defineProperty(exports, "isGeneralSegment", ({ enumerable: true, get: function () { return isGeneralSegment_1.isGeneralSegment; } }));
23765
23730
  var unwrapBlock_1 = __webpack_require__(/*! ./modelApi/common/unwrapBlock */ "./packages/roosterjs-content-model-dom/lib/modelApi/common/unwrapBlock.ts");
@@ -23825,8 +23790,6 @@ var stringUtil_1 = __webpack_require__(/*! ./domUtils/stringUtil */ "./packages/
23825
23790
  Object.defineProperty(exports, "isPunctuation", ({ enumerable: true, get: function () { return stringUtil_1.isPunctuation; } }));
23826
23791
  Object.defineProperty(exports, "isSpace", ({ enumerable: true, get: function () { return stringUtil_1.isSpace; } }));
23827
23792
  Object.defineProperty(exports, "normalizeText", ({ enumerable: true, get: function () { return stringUtil_1.normalizeText; } }));
23828
- var stripInvisibleUnicode_1 = __webpack_require__(/*! ./domUtils/stripInvisibleUnicode */ "./packages/roosterjs-content-model-dom/lib/domUtils/stripInvisibleUnicode.ts");
23829
- Object.defineProperty(exports, "stripInvisibleUnicode", ({ enumerable: true, get: function () { return stripInvisibleUnicode_1.stripInvisibleUnicode; } }));
23830
23793
  var parseTableCells_1 = __webpack_require__(/*! ./domUtils/table/parseTableCells */ "./packages/roosterjs-content-model-dom/lib/domUtils/table/parseTableCells.ts");
23831
23794
  Object.defineProperty(exports, "parseTableCells", ({ enumerable: true, get: function () { return parseTableCells_1.parseTableCells; } }));
23832
23795
  var readFile_1 = __webpack_require__(/*! ./domUtils/readFile */ "./packages/roosterjs-content-model-dom/lib/domUtils/readFile.ts");
@@ -24825,134 +24788,6 @@ function normalizeSegmentFormat(format, environment) {
24825
24788
  exports.normalizeSegmentFormat = normalizeSegmentFormat;
24826
24789
 
24827
24790
 
24828
- /***/ },
24829
-
24830
- /***/ "./packages/roosterjs-content-model-dom/lib/modelApi/common/sanitizeInvisibleUnicode.ts"
24831
- /*!**********************************************************************************************!*\
24832
- !*** ./packages/roosterjs-content-model-dom/lib/modelApi/common/sanitizeInvisibleUnicode.ts ***!
24833
- \**********************************************************************************************/
24834
- (__unused_webpack_module, exports, __webpack_require__) {
24835
-
24836
- "use strict";
24837
-
24838
- Object.defineProperty(exports, "__esModule", ({ value: true }));
24839
- exports.sanitizeInvisibleUnicode = void 0;
24840
- var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
24841
- var stripInvisibleUnicode_1 = __webpack_require__(/*! ../../domUtils/stripInvisibleUnicode */ "./packages/roosterjs-content-model-dom/lib/domUtils/stripInvisibleUnicode.ts");
24842
- /**
24843
- * Strip invisible Unicode characters from all text and link hrefs in a content model.
24844
- * This sanitizes the model at initialization time to prevent hidden content in links
24845
- * or text (e.g. zero-width chars, bidirectional marks, Unicode Tags).
24846
- * For General segments, all Text nodes under the element are also sanitized.
24847
- * @param model The content model document to sanitize in-place
24848
- */
24849
- function sanitizeInvisibleUnicode(model) {
24850
- sanitizeBlockGroup(model);
24851
- }
24852
- exports.sanitizeInvisibleUnicode = sanitizeInvisibleUnicode;
24853
- function sanitizeBlockGroup(group) {
24854
- var e_1, _a;
24855
- try {
24856
- for (var _b = (0, tslib_1.__values)(group.blocks), _c = _b.next(); !_c.done; _c = _b.next()) {
24857
- var block = _c.value;
24858
- sanitizeBlock(block);
24859
- }
24860
- }
24861
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
24862
- finally {
24863
- try {
24864
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
24865
- }
24866
- finally { if (e_1) throw e_1.error; }
24867
- }
24868
- }
24869
- function sanitizeBlock(block) {
24870
- var e_2, _a, e_3, _b, e_4, _c;
24871
- switch (block.blockType) {
24872
- case 'Paragraph':
24873
- try {
24874
- for (var _d = (0, tslib_1.__values)(block.segments), _e = _d.next(); !_e.done; _e = _d.next()) {
24875
- var segment = _e.value;
24876
- sanitizeSegment(segment);
24877
- }
24878
- }
24879
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
24880
- finally {
24881
- try {
24882
- if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
24883
- }
24884
- finally { if (e_2) throw e_2.error; }
24885
- }
24886
- break;
24887
- case 'Table':
24888
- try {
24889
- for (var _f = (0, tslib_1.__values)(block.rows), _g = _f.next(); !_g.done; _g = _f.next()) {
24890
- var row = _g.value;
24891
- try {
24892
- for (var _h = (e_4 = void 0, (0, tslib_1.__values)(row.cells)), _j = _h.next(); !_j.done; _j = _h.next()) {
24893
- var cell = _j.value;
24894
- sanitizeBlockGroup(cell);
24895
- }
24896
- }
24897
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
24898
- finally {
24899
- try {
24900
- if (_j && !_j.done && (_c = _h.return)) _c.call(_h);
24901
- }
24902
- finally { if (e_4) throw e_4.error; }
24903
- }
24904
- }
24905
- }
24906
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
24907
- finally {
24908
- try {
24909
- if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
24910
- }
24911
- finally { if (e_3) throw e_3.error; }
24912
- }
24913
- break;
24914
- case 'BlockGroup':
24915
- sanitizeBlockGroup(block);
24916
- if (block.blockGroupType === 'General' && block.element) {
24917
- sanitizeTextNodes(block.element);
24918
- }
24919
- break;
24920
- case 'Entity':
24921
- case 'Divider':
24922
- break;
24923
- }
24924
- }
24925
- function sanitizeSegment(segment) {
24926
- var _a;
24927
- if ((_a = segment.link) === null || _a === void 0 ? void 0 : _a.format.href) {
24928
- segment.link.format.href = (0, stripInvisibleUnicode_1.stripInvisibleUnicode)(segment.link.format.href);
24929
- }
24930
- switch (segment.segmentType) {
24931
- case 'Text':
24932
- segment.text = (0, stripInvisibleUnicode_1.stripInvisibleUnicode)(segment.text);
24933
- break;
24934
- case 'General':
24935
- sanitizeTextNodes(segment.element);
24936
- sanitizeBlockGroup(segment);
24937
- break;
24938
- case 'Image':
24939
- case 'Entity':
24940
- case 'Br':
24941
- case 'SelectionMarker':
24942
- break;
24943
- }
24944
- }
24945
- function sanitizeTextNodes(element) {
24946
- var walker = element.ownerDocument.createTreeWalker(element, NodeFilter.SHOW_TEXT);
24947
- var node;
24948
- while ((node = walker.nextNode())) {
24949
- if (node.nodeValue) {
24950
- node.nodeValue = (0, stripInvisibleUnicode_1.stripInvisibleUnicode)(node.nodeValue);
24951
- }
24952
- }
24953
- }
24954
-
24955
-
24956
24791
  /***/ },
24957
24792
 
24958
24793
  /***/ "./packages/roosterjs-content-model-dom/lib/modelApi/common/unwrapBlock.ts"
@@ -29295,7 +29130,7 @@ var handleBlockGroupChildren = function (doc, parent, group, context) {
29295
29130
  exports.handleBlockGroupChildren = handleBlockGroupChildren;
29296
29131
  function cleanUpNodeStack(nodeStack, context) {
29297
29132
  var _a, _b;
29298
- if (context.allowCacheListItem && nodeStack.length > 0) {
29133
+ if (nodeStack.length > 0) {
29299
29134
  // Clear list stack, only run to nodeStack[1] because nodeStack[0] is the parent node
29300
29135
  for (var i = nodeStack.length - 1; i > 0; i--) {
29301
29136
  var node = (_b = (_a = nodeStack.pop()) === null || _a === void 0 ? void 0 : _a.refNode) !== null && _b !== void 0 ? _b : null;
@@ -29670,20 +29505,16 @@ var handleList = function (doc, parent, listItem, context, refNode) {
29670
29505
  // Apply metadata to list level to make sure list style is correct after rendering
29671
29506
  (0, applyMetadata_1.applyMetadata)(itemLevel, context.metadataAppliers.listLevel, itemLevel.format, context);
29672
29507
  }
29673
- if (context.allowCacheListItem &&
29674
- parentLevel.refNode &&
29675
- itemLevel.cachedElement == parentLevel.refNode) {
29508
+ if (parentLevel.refNode && itemLevel.cachedElement == parentLevel.refNode) {
29676
29509
  // Move refNode to next node since we are reusing this cached element
29677
29510
  parentLevel.refNode = parentLevel.refNode.nextSibling;
29678
29511
  }
29679
29512
  }
29680
29513
  // Cut off remained list levels that we can't reuse
29681
- if (context.allowCacheListItem) {
29682
- // Clean up all rest nodes in the reused list levels
29683
- for (var i = layer + 1; i < nodeStack.length; i++) {
29684
- var stackLevel = nodeStack[i];
29685
- (0, cleanUpRestNodes_1.cleanUpRestNodes)(stackLevel.refNode, context.rewriteFromModel);
29686
- }
29514
+ // Clean up all rest nodes in the reused list levels
29515
+ for (var i = layer + 1; i < nodeStack.length; i++) {
29516
+ var stackLevel = nodeStack[i];
29517
+ (0, cleanUpRestNodes_1.cleanUpRestNodes)(stackLevel.refNode, context.rewriteFromModel);
29687
29518
  }
29688
29519
  nodeStack.splice(layer + 1);
29689
29520
  // Create new list levels that are after reused ones
@@ -29694,7 +29525,7 @@ var handleList = function (doc, parent, listItem, context, refNode) {
29694
29525
  var isNewlyCreated = false;
29695
29526
  var levelRefNode = (_c = nodeStack[layer].refNode) !== null && _c !== void 0 ? _c : null;
29696
29527
  context.listFormat.currentLevel = layer;
29697
- if (context.allowCacheListItem && level.cachedElement) {
29528
+ if (level.cachedElement) {
29698
29529
  newList = level.cachedElement;
29699
29530
  nodeStack[layer].refNode = (0, reuseCachedElement_1.reuseCachedElement)(lastParent, level.cachedElement, levelRefNode, context.rewriteFromModel);
29700
29531
  nodeStack.push({
@@ -29716,9 +29547,7 @@ var handleList = function (doc, parent, listItem, context, refNode) {
29716
29547
  format: (0, tslib_1.__assign)({}, level.format),
29717
29548
  dataset: (0, tslib_1.__assign)({}, level.dataset),
29718
29549
  });
29719
- if (context.allowCacheListItem) {
29720
- level.cachedElement = newList;
29721
- }
29550
+ level.cachedElement = newList;
29722
29551
  }
29723
29552
  (0, applyFormat_1.applyFormat)(newList, context.formatAppliers.listLevelThread, level.format, context);
29724
29553
  // Need to apply metadata after applying list level format since the list numbers value relies on the result of list thread handling
@@ -29769,7 +29598,7 @@ var handleListItem = function (doc, parent, listItem, context, refNode) {
29769
29598
  var level = listItem.levels[listItem.levels.length - 1];
29770
29599
  var li;
29771
29600
  var isNewlyCreated = false;
29772
- if (context.allowCacheListItem && listItem.cachedElement) {
29601
+ if (listItem.cachedElement) {
29773
29602
  li = listItem.cachedElement;
29774
29603
  // Check if the cached LI is used as refNode under another list level,
29775
29604
  // since we know we are going to move it under the current listParent,
@@ -29788,9 +29617,7 @@ var handleListItem = function (doc, parent, listItem, context, refNode) {
29788
29617
  // This happens when outdent a list item to cause it has no list level
29789
29618
  listParent.insertBefore(li, (itemRefNode === null || itemRefNode === void 0 ? void 0 : itemRefNode.parentNode) == listParent ? itemRefNode : null);
29790
29619
  context.rewriteFromModel.addedBlockElements.push(li);
29791
- if (context.allowCacheListItem) {
29792
- listItem.cachedElement = li;
29793
- }
29620
+ listItem.cachedElement = li;
29794
29621
  }
29795
29622
  if (level) {
29796
29623
  (0, applyFormat_1.applyFormat)(li, context.formatAppliers.segment, listItem.formatHolder.format, context);
@@ -33680,7 +33507,6 @@ var EditPlugin = /** @class */ (function () {
33680
33507
  this.disposer = null;
33681
33508
  this.shouldHandleNextInputEvent = false;
33682
33509
  this.selectionAfterDelete = null;
33683
- this.handleNormalEnter = function () { return false; };
33684
33510
  var tabOptions = options.handleTabKey === false
33685
33511
  ? DisabledHandleTabOptions
33686
33512
  : options.handleTabKey === true || !options.handleTabKey
@@ -33688,19 +33514,6 @@ var EditPlugin = /** @class */ (function () {
33688
33514
  : (0, tslib_1.__assign)((0, tslib_1.__assign)({}, DefaultHandleTabOptions), options.handleTabKey);
33689
33515
  this.options = (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, DefaultOptions), options), { handleTabKey: tabOptions });
33690
33516
  }
33691
- EditPlugin.prototype.createNormalEnterChecker = function (result) {
33692
- return result ? function () { return true; } : function () { return false; };
33693
- };
33694
- EditPlugin.prototype.getHandleNormalEnter = function (editor) {
33695
- switch (typeof this.options.shouldHandleEnterKey) {
33696
- case 'function':
33697
- return this.options.shouldHandleEnterKey;
33698
- case 'boolean':
33699
- return this.createNormalEnterChecker(this.options.shouldHandleEnterKey);
33700
- default:
33701
- return this.createNormalEnterChecker(editor.isExperimentalFeatureEnabled('HandleEnterKey'));
33702
- }
33703
- };
33704
33517
  /**
33705
33518
  * Get name of this plugin
33706
33519
  */
@@ -33716,7 +33529,6 @@ var EditPlugin = /** @class */ (function () {
33716
33529
  EditPlugin.prototype.initialize = function (editor) {
33717
33530
  var _this = this;
33718
33531
  this.editor = editor;
33719
- this.handleNormalEnter = this.getHandleNormalEnter(editor);
33720
33532
  if (editor.getEnvironment().isAndroid) {
33721
33533
  this.disposer = this.editor.attachDomEvent({
33722
33534
  beforeinput: {
@@ -33820,7 +33632,7 @@ var EditPlugin = /** @class */ (function () {
33820
33632
  if (!hasCtrlOrMetaKey &&
33821
33633
  !event.rawEvent.isComposing &&
33822
33634
  event.rawEvent.keyCode !== DEAD_KEY) {
33823
- (0, keyboardEnter_1.keyboardEnter)(editor, rawEvent, this.handleNormalEnter(editor), this.options.formatsToPreserveOnMerge);
33635
+ (0, keyboardEnter_1.keyboardEnter)(editor, rawEvent, this.options.formatsToPreserveOnMerge);
33824
33636
  }
33825
33637
  break;
33826
33638
  default:
@@ -34815,11 +34627,11 @@ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-mo
34815
34627
  /**
34816
34628
  * @internal
34817
34629
  */
34818
- function keyboardEnter(editor, rawEvent, handleNormalEnter, formatsToPreserveOnMerge) {
34630
+ function keyboardEnter(editor, rawEvent, formatsToPreserveOnMerge) {
34819
34631
  if (formatsToPreserveOnMerge === void 0) { formatsToPreserveOnMerge = []; }
34820
34632
  var selection = editor.getDOMSelection();
34821
34633
  editor.formatContentModel(function (model, context) {
34822
- var _a, _b;
34634
+ var _a;
34823
34635
  // 1. delete the expanded selection if any, then merge paragraph
34824
34636
  var result = (0, roosterjs_content_model_dom_1.deleteSelection)(model, [], context);
34825
34637
  // 2. Add line break
@@ -34830,14 +34642,12 @@ function keyboardEnter(editor, rawEvent, handleNormalEnter, formatsToPreserveOnM
34830
34642
  var steps = rawEvent.shiftKey
34831
34643
  ? []
34832
34644
  : [handleAutoLink_1.handleAutoLink, handleEnterOnList_1.handleEnterOnList, deleteEmptyQuote_1.deleteEmptyQuote];
34833
- if (handleNormalEnter || handleEnterForEntity((_a = result.insertPoint) === null || _a === void 0 ? void 0 : _a.paragraph)) {
34834
- steps.push((0, handleEnterOnParagraph_1.handleEnterOnParagraph)(formatsToPreserveOnMerge));
34835
- }
34645
+ steps.push((0, handleEnterOnParagraph_1.handleEnterOnParagraph)(formatsToPreserveOnMerge));
34836
34646
  (0, roosterjs_content_model_dom_1.runEditSteps)(steps, result);
34837
34647
  }
34838
34648
  if (result.deleteResult == 'range') {
34839
34649
  // We have deleted something, next input should inherit the segment format from deleted content, so set pending format here
34840
- context.newPendingFormat = (_b = result.insertPoint) === null || _b === void 0 ? void 0 : _b.marker.format;
34650
+ context.newPendingFormat = (_a = result.insertPoint) === null || _a === void 0 ? void 0 : _a.marker.format;
34841
34651
  (0, roosterjs_content_model_dom_1.normalizeContentModel)(model);
34842
34652
  rawEvent.preventDefault();
34843
34653
  return true;
@@ -34854,10 +34664,6 @@ function keyboardEnter(editor, rawEvent, handleNormalEnter, formatsToPreserveOnM
34854
34664
  });
34855
34665
  }
34856
34666
  exports.keyboardEnter = keyboardEnter;
34857
- function handleEnterForEntity(paragraph) {
34858
- return (paragraph &&
34859
- (paragraph.isImplicit || paragraph.segments.some(function (x) { return x.segmentType == 'Entity'; })));
34860
- }
34861
34667
 
34862
34668
 
34863
34669
  /***/ },