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