roosterjs 8.23.0 → 8.25.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
@@ -2467,7 +2467,7 @@ function clearAttribute(element) {
2467
2467
  function updateStyles(element, callbackfn) {
2468
2468
  var styles = (0, roosterjs_editor_dom_1.getStyles)(element);
2469
2469
  var result = {};
2470
- Object.keys(styles).forEach(function (style) { return callbackfn(style, styles, result); });
2470
+ (0, roosterjs_editor_dom_1.getObjectKeys)(styles).forEach(function (style) { return callbackfn(style, styles, result); });
2471
2471
  (0, roosterjs_editor_dom_1.setStyles)(element, styles);
2472
2472
  return result;
2473
2473
  }
@@ -2520,7 +2520,7 @@ function clearBlockFormat(editor) {
2520
2520
  // If there are styles on table cell, wrap all its children and move down all non-border styles.
2521
2521
  // So that we can preserve styles for unselected blocks as well as border styles for table
2522
2522
  var nonborderStyles = removeNonBorderStyles(region.rootNode);
2523
- if (Object.keys(nonborderStyles).length > 0) {
2523
+ if ((0, roosterjs_editor_dom_1.getObjectKeys)(nonborderStyles).length > 0) {
2524
2524
  var wrapper = (0, roosterjs_editor_dom_1.wrap)((0, roosterjs_editor_dom_1.toArray)(region.rootNode.childNodes));
2525
2525
  (0, roosterjs_editor_dom_1.setStyles)(wrapper, nonborderStyles);
2526
2526
  }
@@ -2545,7 +2545,7 @@ function clearInlineFormat(editor) {
2545
2545
  }
2546
2546
  function setDefaultFormat(editor) {
2547
2547
  var defaultFormat = editor.getDefaultFormat();
2548
- var isDefaultFormatEmpty = Object.keys(defaultFormat).length === 0;
2548
+ var isDefaultFormatEmpty = (0, roosterjs_editor_dom_1.getObjectKeys)(defaultFormat).length === 0;
2549
2549
  editor.queryElements('[style]', 2 /* InSelection */, function (node) {
2550
2550
  var tag = (0, roosterjs_editor_dom_1.getTagOfNode)(node);
2551
2551
  if (TAGS_TO_STOP_UNWRAP.indexOf(tag) == -1) {
@@ -2948,7 +2948,7 @@ function insertImageWithSrc(editor, src, attributes) {
2948
2948
  var image = editor.getDocument().createElement('img');
2949
2949
  image.src = src;
2950
2950
  if (attributes) {
2951
- Object.keys(attributes).forEach(function (attribute) {
2951
+ (0, roosterjs_editor_dom_1.getObjectKeys)(attributes).forEach(function (attribute) {
2952
2952
  return image.setAttribute(attribute, attributes[attribute]);
2953
2953
  });
2954
2954
  }
@@ -3577,7 +3577,7 @@ var toggleListType_1 = __webpack_require__(/*! ../utils/toggleListType */ "./pac
3577
3577
  * @param listStyle (Optional) the style of the bullet list. If not defined, the style will be set to disc.
3578
3578
  */
3579
3579
  function toggleBullet(editor, listStyle) {
3580
- (0, toggleListType_1.default)(editor, 2 /* Unordered */, undefined /* startNumber */, false /* includeSiblingLists */, listStyle);
3580
+ (0, toggleListType_1.default)(editor, 2 /* Unordered */, undefined /* startNumber */, false /* includeSiblingLists */, undefined /** orderedStyle */, listStyle);
3581
3581
  }
3582
3582
  exports.default = toggleBullet;
3583
3583
 
@@ -4427,7 +4427,7 @@ function execCommand(editor, command) {
4427
4427
  editor.addUndoSnapshot();
4428
4428
  var formatState = editor.getPendableFormatState(false /* forceGetStateFromDom */);
4429
4429
  formatter();
4430
- var formatName = Object.keys(roosterjs_editor_dom_1.PendableFormatCommandMap).filter(function (x) { return roosterjs_editor_dom_1.PendableFormatCommandMap[x] == command; })[0];
4430
+ var formatName = (0, roosterjs_editor_dom_1.getObjectKeys)(roosterjs_editor_dom_1.PendableFormatCommandMap).filter(function (x) { return roosterjs_editor_dom_1.PendableFormatCommandMap[x] == command; })[0];
4431
4431
  if (formatName) {
4432
4432
  formatState[formatName] = !formatState[formatName];
4433
4433
  editor.triggerPluginEvent(13 /* PendingFormatStateChanged */, {
@@ -4484,9 +4484,10 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
4484
4484
  * @param listType The list type to toggle
4485
4485
  * @param startNumber (Optional) Start number of the list
4486
4486
  * @param includeSiblingLists Sets wether the operation should include Sibling Lists, by default true
4487
- * @param listStyle (Optional) the style of an ordered or unordered list. If If not defined, the style will be set to disc or decimal.
4487
+ * @param orderedStyle (Optional) the style of an ordered. If not defined, the style will be set to decimal.
4488
+ * @param unorderedStyle (Optional) the style of an unordered list. If not defined, the style will be set to disc.
4488
4489
  */
4489
- function toggleListType(editor, listType, startNumber, includeSiblingLists, listStyle) {
4490
+ function toggleListType(editor, listType, startNumber, includeSiblingLists, orderedStyle, unorderedStyle) {
4490
4491
  if (includeSiblingLists === void 0) { includeSiblingLists = true; }
4491
4492
  (0, blockFormat_1.default)(editor, function (region, start, end, chains) {
4492
4493
  var _a;
@@ -4496,8 +4497,8 @@ function toggleListType(editor, listType, startNumber, includeSiblingLists, list
4496
4497
  : (0, roosterjs_editor_dom_1.createVListFromRegion)(region, includeSiblingLists);
4497
4498
  if (vList) {
4498
4499
  vList.changeListType(start, end, listType);
4499
- if (listStyle && editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)) {
4500
- vList.setListStyleType(listStyle);
4500
+ if (editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)) {
4501
+ vList.setListStyleType(orderedStyle, unorderedStyle);
4501
4502
  }
4502
4503
  vList.writeBack();
4503
4504
  }
@@ -4607,6 +4608,7 @@ function addUndoSnapshotInternal(core, canUndoByBackspace) {
4607
4608
 
4608
4609
  Object.defineProperty(exports, "__esModule", { value: true });
4609
4610
  exports.attachDomEvent = void 0;
4611
+ var lib_1 = __webpack_require__(/*! roosterjs-editor-dom/lib */ "./packages/roosterjs-editor-dom/lib/index.ts");
4610
4612
  /**
4611
4613
  * @internal
4612
4614
  * Attach a DOM event to the editor content DIV
@@ -4616,7 +4618,7 @@ exports.attachDomEvent = void 0;
4616
4618
  * @param beforeDispatch Optional callback function to be invoked when the DOM event is triggered before trigger plugin event
4617
4619
  */
4618
4620
  var attachDomEvent = function (core, eventMap) {
4619
- var disposers = Object.keys(eventMap || {}).map(function (eventName) {
4621
+ var disposers = (0, lib_1.getObjectKeys)(eventMap || {}).map(function (eventName) {
4620
4622
  var _a = extractHandler(eventMap[eventName]), pluginEventType = _a.pluginEventType, beforeDispatch = _a.beforeDispatch;
4621
4623
  var onEvent = function (event) {
4622
4624
  if (beforeDispatch) {
@@ -4725,11 +4727,13 @@ exports.coreApiMap = {
4725
4727
  "use strict";
4726
4728
 
4727
4729
  Object.defineProperty(exports, "__esModule", { value: true });
4728
- exports.createPasteFragment = void 0;
4730
+ exports.transformTabCharacters = exports.createPasteFragment = void 0;
4729
4731
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
4730
4732
  var START_FRAGMENT = '<!--StartFragment-->';
4731
4733
  var END_FRAGMENT = '<!--EndFragment-->';
4732
4734
  var NBSP_HTML = '\u00A0';
4735
+ var ENSP_HTML = '\u2002';
4736
+ var TAB_SPACES = 6;
4733
4737
  /**
4734
4738
  * @internal
4735
4739
  * Create a DocumentFragment for paste from a ClipboardData
@@ -4820,6 +4824,9 @@ var createPasteFragment = function (core, clipboardData, position, pasteAsText,
4820
4824
  .replace(/^ /g, NBSP_HTML)
4821
4825
  .replace(/\r/g, '')
4822
4826
  .replace(/ {2}/g, ' ' + NBSP_HTML);
4827
+ if (line.includes('\t')) {
4828
+ line = transformTabCharacters(line, index === 0 ? position.offset : 0);
4829
+ }
4823
4830
  var textNode = document.createTextNode(line);
4824
4831
  // There are 3 scenarios:
4825
4832
  // 1. Single line: Paste as it is
@@ -4849,6 +4856,26 @@ var createPasteFragment = function (core, clipboardData, position, pasteAsText,
4849
4856
  return fragment;
4850
4857
  };
4851
4858
  exports.createPasteFragment = createPasteFragment;
4859
+ /**
4860
+ * @internal
4861
+ * Transform \t characters into EN SPACE characters
4862
+ * @param input string NOT containing \n characters
4863
+ * @example t("\thello", 2) => "&ensp;&ensp;&ensp;&ensp;hello"
4864
+ */
4865
+ function transformTabCharacters(input, initialOffset) {
4866
+ if (initialOffset === void 0) { initialOffset = 0; }
4867
+ var line = input;
4868
+ var tIndex;
4869
+ while ((tIndex = line.indexOf('\t')) != -1) {
4870
+ var lineBefore = line.slice(0, tIndex);
4871
+ var lineAfter = line.slice(tIndex + 1);
4872
+ var tabCount = TAB_SPACES - ((lineBefore.length + initialOffset) % TAB_SPACES);
4873
+ var tabStr = Array(tabCount).fill(ENSP_HTML).join('');
4874
+ line = lineBefore + tabStr + lineAfter;
4875
+ }
4876
+ return line;
4877
+ }
4878
+ exports.transformTabCharacters = transformTabCharacters;
4852
4879
  function getCurrentFormat(core, node) {
4853
4880
  var pendableFormat = core.api.getPendableFormatState(core, true /** forceGetStateFromDOM*/);
4854
4881
  var styleBasedFormat = core.api.getStyleBasedFormatState(core, node);
@@ -4910,6 +4937,10 @@ var ensureTypeInContainer = function (core, position, keyboardEvent) {
4910
4937
  var formatNode;
4911
4938
  if (block) {
4912
4939
  formatNode = block.collapseToSingleElement();
4940
+ if ((0, roosterjs_editor_dom_1.isNodeEmpty)(formatNode, false /* trimContent */, true /* shouldCountBrAsVisible */)) {
4941
+ var brEl = formatNode.ownerDocument.createElement('br');
4942
+ formatNode.append(brEl);
4943
+ }
4913
4944
  // if the block is empty, apply default format
4914
4945
  // Otherwise, leave it as it is as we don't want to change the style for existing data
4915
4946
  // unless the block was just created by the keyboard event (e.g. ctrl+a & start typing)
@@ -5153,7 +5184,7 @@ function queryCommandStateFromDOM(core, currentPosition) {
5153
5184
  var tag = (0, roosterjs_editor_dom_1.getTagOfNode)(node);
5154
5185
  var style = node.nodeType == 1 /* Element */ && node.style;
5155
5186
  if (tag && style) {
5156
- Object.keys(PendableStyleCheckers).forEach(function (key) {
5187
+ (0, roosterjs_editor_dom_1.getObjectKeys)(PendableStyleCheckers).forEach(function (key) {
5157
5188
  if (!(pendableKeys.indexOf(key) >= 0)) {
5158
5189
  formatState[key] = formatState[key] || PendableStyleCheckers[key](tag, style);
5159
5190
  if (CssFalsyCheckers[key](style)) {
@@ -5600,7 +5631,7 @@ function restorePendingFormatState(core) {
5600
5631
  if (pendingFormatState.pendableFormatState) {
5601
5632
  var document_1 = contentDiv.ownerDocument;
5602
5633
  var formatState_1 = (0, roosterjs_editor_dom_1.getPendableFormatState)(document_1);
5603
- Object.keys(roosterjs_editor_dom_1.PendableFormatCommandMap).forEach(function (key) {
5634
+ (0, roosterjs_editor_dom_1.getObjectKeys)(roosterjs_editor_dom_1.PendableFormatCommandMap).forEach(function (key) {
5604
5635
  if (!!pendingFormatState.pendableFormatState[key] != formatState_1[key]) {
5605
5636
  document_1.execCommand(roosterjs_editor_dom_1.PendableFormatCommandMap[key], false, null);
5606
5637
  }
@@ -6786,7 +6817,7 @@ var EntityPlugin = /** @class */ (function () {
6786
6817
  (0, roosterjs_editor_dom_1.commitEntity)(wrapper, type, isReadonly, entity.id); // Use entity.id here because it is newly updated
6787
6818
  _this.handleNewEntity(entity);
6788
6819
  });
6789
- Object.keys(this.state.shadowEntityCache).forEach(function (id) {
6820
+ (0, roosterjs_editor_dom_1.getObjectKeys)(this.state.shadowEntityCache).forEach(function (id) {
6790
6821
  _this.triggerEvent(_this.state.shadowEntityCache[id], 6 /* Overwrite */);
6791
6822
  delete _this.state.shadowEntityCache[id];
6792
6823
  });
@@ -7073,7 +7104,7 @@ var LifecyclePlugin = /** @class */ (function () {
7073
7104
  LifecyclePlugin.prototype.dispose = function () {
7074
7105
  var _this = this;
7075
7106
  this.editor.triggerPluginEvent(12 /* BeforeDispose */, {}, true /*broadcast*/);
7076
- Object.keys(this.state.customData).forEach(function (key) {
7107
+ (0, roosterjs_editor_dom_1.getObjectKeys)(this.state.customData).forEach(function (key) {
7077
7108
  var data = _this.state.customData[key];
7078
7109
  if (data && data.disposer) {
7079
7110
  data.disposer(data.value);
@@ -7108,7 +7139,7 @@ var LifecyclePlugin = /** @class */ (function () {
7108
7139
  };
7109
7140
  LifecyclePlugin.prototype.adjustBrowserBehavior = function () {
7110
7141
  var _this = this;
7111
- Object.keys(COMMANDS).forEach(function (command) {
7142
+ (0, roosterjs_editor_dom_1.getObjectKeys)(COMMANDS).forEach(function (command) {
7112
7143
  // Catch any possible exception since this should not block the initialization of editor
7113
7144
  try {
7114
7145
  _this.editor.getDocument().execCommand(command, false, COMMANDS[command]);
@@ -7126,7 +7157,7 @@ var LifecyclePlugin = /** @class */ (function () {
7126
7157
  baseFormat.textColors = DARK_MODE_DEFAULT_FORMAT.textColors;
7127
7158
  }
7128
7159
  }
7129
- if (baseFormat && Object.keys(baseFormat).length === 0) {
7160
+ if (baseFormat && (0, roosterjs_editor_dom_1.getObjectKeys)(baseFormat).length === 0) {
7130
7161
  return;
7131
7162
  }
7132
7163
  var _b = baseFormat || {}, fontFamily = _b.fontFamily, fontSize = _b.fontSize, textColor = _b.textColor, textColors = _b.textColors, backgroundColor = _b.backgroundColor, backgroundColors = _b.backgroundColors, bold = _b.bold, italic = _b.italic, underline = _b.underline;
@@ -7335,6 +7366,7 @@ exports.default = NormalizeTablePlugin;
7335
7366
  function normalizeTables(tables) {
7336
7367
  var isDOMChanged = false;
7337
7368
  tables.forEach(function (table) {
7369
+ var _a;
7338
7370
  var tbody = null;
7339
7371
  for (var child = table.firstChild; child; child = child.nextSibling) {
7340
7372
  var tag = (0, roosterjs_editor_dom_1.getTagOfNode)(child);
@@ -7351,7 +7383,7 @@ function normalizeTables(tables) {
7351
7383
  case 'TBODY':
7352
7384
  if (tbody) {
7353
7385
  (0, roosterjs_editor_dom_1.moveChildNodes)(tbody, child, true /*keepExistingChildren*/);
7354
- child.parentNode.removeChild(child);
7386
+ (_a = child.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(child);
7355
7387
  child = tbody;
7356
7388
  isDOMChanged = true;
7357
7389
  }
@@ -7359,16 +7391,20 @@ function normalizeTables(tables) {
7359
7391
  tbody = child;
7360
7392
  }
7361
7393
  break;
7362
- case 'COLGROUP':
7363
- if (table.tHead) {
7364
- table.tHead.prepend(child);
7365
- }
7366
- break;
7367
7394
  default:
7368
7395
  tbody = null;
7369
7396
  break;
7370
7397
  }
7371
7398
  }
7399
+ var colgroups = table.querySelectorAll('colgroup');
7400
+ var thead = table.querySelector('thead');
7401
+ if (thead) {
7402
+ colgroups.forEach(function (colgroup) {
7403
+ if (!thead.contains(colgroup)) {
7404
+ thead.appendChild(colgroup);
7405
+ }
7406
+ });
7407
+ }
7372
7408
  });
7373
7409
  return isDOMChanged;
7374
7410
  }
@@ -7839,8 +7875,8 @@ var __assign = (this && this.__assign) || function () {
7839
7875
  return __assign.apply(this, arguments);
7840
7876
  };
7841
7877
  Object.defineProperty(exports, "__esModule", { value: true });
7842
- var coreApiMap_1 = __webpack_require__(/*! ../coreApi/coreApiMap */ "./packages/roosterjs-editor-core/lib/coreApi/coreApiMap.ts");
7843
7878
  var createCorePlugins_1 = __webpack_require__(/*! ../corePlugins/createCorePlugins */ "./packages/roosterjs-editor-core/lib/corePlugins/createCorePlugins.ts");
7879
+ var coreApiMap_1 = __webpack_require__(/*! ../coreApi/coreApiMap */ "./packages/roosterjs-editor-core/lib/coreApi/coreApiMap.ts");
7844
7880
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
7845
7881
  /**
7846
7882
  * RoosterJs core editor class
@@ -7862,7 +7898,7 @@ var Editor = /** @class */ (function () {
7862
7898
  // 2. Store options values to local variables
7863
7899
  var corePlugins = (0, createCorePlugins_1.default)(contentDiv, options);
7864
7900
  var plugins = [];
7865
- Object.keys(corePlugins).forEach(function (name) {
7901
+ (0, roosterjs_editor_dom_1.getObjectKeys)(corePlugins).forEach(function (name) {
7866
7902
  if (name == '_placeholder') {
7867
7903
  (0, roosterjs_editor_dom_1.arrayPush)(plugins, options.plugins);
7868
7904
  }
@@ -8931,7 +8967,7 @@ exports.default = getFirstLastBlockElement;
8931
8967
  Object.defineProperty(exports, "__esModule", { value: true });
8932
8968
  var extractClipboardItems_1 = __webpack_require__(/*! ./extractClipboardItems */ "./packages/roosterjs-editor-dom/lib/clipboard/extractClipboardItems.ts");
8933
8969
  var extractClipboardItemsForIE_1 = __webpack_require__(/*! ./extractClipboardItemsForIE */ "./packages/roosterjs-editor-dom/lib/clipboard/extractClipboardItemsForIE.ts");
8934
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
8970
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
8935
8971
  /**
8936
8972
  * @deprecated Use extractClipboardItems and extractClipboardItemsForIE instead
8937
8973
  * Extract a Clipboard event
@@ -9119,7 +9155,7 @@ function getAllowedCustomType(type, allowedCustomPasteType) {
9119
9155
 
9120
9156
  Object.defineProperty(exports, "__esModule", { value: true });
9121
9157
  var readFile_1 = __webpack_require__(/*! ../utils/readFile */ "./packages/roosterjs-editor-dom/lib/utils/readFile.ts");
9122
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
9158
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
9123
9159
  /**
9124
9160
  * Extract clipboard items to be a ClipboardData object for IE
9125
9161
  * @param dataTransfer The clipboard items retrieve from a DataTransfer object
@@ -9912,7 +9948,7 @@ var Position_1 = __webpack_require__(/*! ../selection/Position */ "./packages/ro
9912
9948
  var PositionContentSearcher_1 = __webpack_require__(/*! ../contentTraverser/PositionContentSearcher */ "./packages/roosterjs-editor-dom/lib/contentTraverser/PositionContentSearcher.ts");
9913
9949
  var queryElements_1 = __webpack_require__(/*! ../utils/queryElements */ "./packages/roosterjs-editor-dom/lib/utils/queryElements.ts");
9914
9950
  var splitTextNode_1 = __webpack_require__(/*! ../utils/splitTextNode */ "./packages/roosterjs-editor-dom/lib/utils/splitTextNode.ts");
9915
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
9951
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
9916
9952
  var unwrap_1 = __webpack_require__(/*! ../utils/unwrap */ "./packages/roosterjs-editor-dom/lib/utils/unwrap.ts");
9917
9953
  var VTable_1 = __webpack_require__(/*! ../table/VTable */ "./packages/roosterjs-editor-dom/lib/table/VTable.ts");
9918
9954
  var wrap_1 = __webpack_require__(/*! ../utils/wrap */ "./packages/roosterjs-editor-dom/lib/utils/wrap.ts");
@@ -10095,7 +10131,7 @@ function safeRemove(node) {
10095
10131
  "use strict";
10096
10132
 
10097
10133
  Object.defineProperty(exports, "__esModule", { value: true });
10098
- var arrayPush_1 = __webpack_require__(/*! ../utils/arrayPush */ "./packages/roosterjs-editor-dom/lib/utils/arrayPush.ts");
10134
+ var arrayPush_1 = __webpack_require__(/*! ../jsUtils/arrayPush */ "./packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts");
10099
10135
  var collapseNodesInRegion_1 = __webpack_require__(/*! ../region/collapseNodesInRegion */ "./packages/roosterjs-editor-dom/lib/region/collapseNodesInRegion.ts");
10100
10136
  var getRegionsFromRange_1 = __webpack_require__(/*! ../region/getRegionsFromRange */ "./packages/roosterjs-editor-dom/lib/region/getRegionsFromRange.ts");
10101
10137
  var getSelectionRangeInRegion_1 = __webpack_require__(/*! ../region/getSelectionRangeInRegion */ "./packages/roosterjs-editor-dom/lib/region/getSelectionRangeInRegion.ts");
@@ -10488,12 +10524,13 @@ exports.default = isModifierKey;
10488
10524
  Object.defineProperty(exports, "__esModule", { value: true });
10489
10525
  var changeElementTag_1 = __webpack_require__(/*! ../utils/changeElementTag */ "./packages/roosterjs-editor-dom/lib/utils/changeElementTag.ts");
10490
10526
  var getInheritableStyles_1 = __webpack_require__(/*! ./getInheritableStyles */ "./packages/roosterjs-editor-dom/lib/htmlSanitizer/getInheritableStyles.ts");
10527
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
10491
10528
  var getPredefinedCssForElement_1 = __webpack_require__(/*! ./getPredefinedCssForElement */ "./packages/roosterjs-editor-dom/lib/htmlSanitizer/getPredefinedCssForElement.ts");
10492
10529
  var getStyles_1 = __webpack_require__(/*! ../style/getStyles */ "./packages/roosterjs-editor-dom/lib/style/getStyles.ts");
10493
10530
  var getTagOfNode_1 = __webpack_require__(/*! ../utils/getTagOfNode */ "./packages/roosterjs-editor-dom/lib/utils/getTagOfNode.ts");
10494
10531
  var safeInstanceOf_1 = __webpack_require__(/*! ../utils/safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
10495
10532
  var setStyles_1 = __webpack_require__(/*! ../style/setStyles */ "./packages/roosterjs-editor-dom/lib/style/setStyles.ts");
10496
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
10533
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
10497
10534
  var cloneObject_1 = __webpack_require__(/*! ./cloneObject */ "./packages/roosterjs-editor-dom/lib/htmlSanitizer/cloneObject.ts");
10498
10535
  var getAllowedValues_1 = __webpack_require__(/*! ./getAllowedValues */ "./packages/roosterjs-editor-dom/lib/htmlSanitizer/getAllowedValues.ts");
10499
10536
  /**
@@ -10700,7 +10737,7 @@ var HtmlSanitizer = /** @class */ (function () {
10700
10737
  HtmlSanitizer.prototype.preprocessCss = function (element, thisStyle) {
10701
10738
  var predefinedStyles = (0, getPredefinedCssForElement_1.default)(element, this.additionalPredefinedCssForElement);
10702
10739
  if (predefinedStyles) {
10703
- Object.keys(predefinedStyles).forEach(function (name) {
10740
+ (0, getObjectKeys_1.default)(predefinedStyles).forEach(function (name) {
10704
10741
  thisStyle[name] = predefinedStyles[name];
10705
10742
  });
10706
10743
  }
@@ -10708,7 +10745,7 @@ var HtmlSanitizer = /** @class */ (function () {
10708
10745
  HtmlSanitizer.prototype.processCss = function (element, thisStyle, context) {
10709
10746
  var _this = this;
10710
10747
  var styles = (0, getStyles_1.default)(element);
10711
- Object.keys(styles).forEach(function (name) {
10748
+ (0, getObjectKeys_1.default)(styles).forEach(function (name) {
10712
10749
  var value = styles[name];
10713
10750
  var callback = _this.styleCallbacks[name];
10714
10751
  var isInheritable = thisStyle[name] != undefined;
@@ -10823,13 +10860,14 @@ exports.default = chainSanitizerCallback;
10823
10860
 
10824
10861
  Object.defineProperty(exports, "__esModule", { value: true });
10825
10862
  exports.cloneObject = void 0;
10863
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
10826
10864
  function nativeClone(source, existingObj) {
10827
10865
  return Object.assign(existingObj || {}, source);
10828
10866
  }
10829
10867
  function customClone(source, existingObj) {
10830
10868
  var result = existingObj || {};
10831
10869
  if (source) {
10832
- for (var _i = 0, _a = Object.keys(source); _i < _a.length; _i++) {
10870
+ for (var _i = 0, _a = (0, getObjectKeys_1.default)(source); _i < _a.length; _i++) {
10833
10871
  var key = _a[_i];
10834
10872
  result[key] = source[key];
10835
10873
  }
@@ -10904,6 +10942,7 @@ var __assign = (this && this.__assign) || function () {
10904
10942
  };
10905
10943
  Object.defineProperty(exports, "__esModule", { value: true });
10906
10944
  exports.getStyleCallbacks = exports.getDefaultStyleValues = exports.getAllowedCssClassesRegex = exports.getAllowedAttributes = exports.getTagReplacement = void 0;
10945
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
10907
10946
  var cloneObject_1 = __webpack_require__(/*! ./cloneObject */ "./packages/roosterjs-editor-dom/lib/htmlSanitizer/cloneObject.ts");
10908
10947
  var HTML_TAG_REPLACEMENT = {
10909
10948
  // Allowed tags
@@ -11088,7 +11127,7 @@ var ALLOWED_CSS_CLASSES = [];
11088
11127
  function getTagReplacement(additionalReplacements) {
11089
11128
  var result = __assign({}, HTML_TAG_REPLACEMENT);
11090
11129
  var replacements = additionalReplacements || {};
11091
- Object.keys(replacements).forEach(function (key) {
11130
+ (0, getObjectKeys_1.default)(replacements).forEach(function (key) {
11092
11131
  if (key) {
11093
11132
  result[key.toLowerCase()] = replacements[key];
11094
11133
  }
@@ -11258,9 +11297,9 @@ exports.default = getPredefinedCssForElement;
11258
11297
  "use strict";
11259
11298
 
11260
11299
  Object.defineProperty(exports, "__esModule", { value: true });
11261
- exports.KnownCreateElementData = exports.createElement = exports.matchesSelector = exports.setColor = exports.getInnerHTML = exports.readFile = exports.safeInstanceOf = exports.toArray = exports.normalizeRect = exports.splitTextNode = exports.getLastLeafNode = exports.getFirstLeafNode = exports.getPreviousLeafSibling = exports.getNextLeafSibling = exports.wrap = exports.unwrap = exports.splitBalancedNodeRange = exports.splitParentNode = exports.queryElements = exports.matchLink = exports.isVoidHtmlElement = exports.isNodeEmpty = exports.isBlockElement = exports.getTagOfNode = exports.PendableFormatCommandMap = exports.getPendableFormatState = exports.getComputedStyle = exports.getComputedStyles = exports.fromHtml = exports.findClosestElementAncestor = exports.contains = exports.collapseNodes = exports.changeElementTag = exports.applyFormat = exports.getBrowserInfo = exports.Browser = exports.arrayPush = exports.extractClipboardItemsForIE = exports.extractClipboardItems = exports.extractClipboardEvent = exports.applyTextStyle = exports.PartialInlineElement = exports.NodeInlineElement = exports.LinkInlineElement = exports.ImageInlineElement = exports.getInlineElementAtNode = exports.PositionContentSearcher = exports.ContentTraverser = exports.getFirstLastBlockElement = exports.getBlockElementAtNode = void 0;
11262
- exports.validate = exports.getTextContent = exports.deleteSelectedContent = exports.adjustInsertPosition = exports.setStyles = exports.getStyles = exports.isCtrlOrMetaPressed = exports.isCharacterValue = exports.isModifierKey = exports.clearEventDataCache = exports.cacheGetEventData = exports.getEntitySelector = exports.getEntityFromElement = exports.commitEntity = exports.chainSanitizerCallback = exports.createDefaultHtmlSanitizerOptions = exports.getInheritableStyles = exports.HtmlSanitizer = exports.canUndoAutoComplete = exports.createSnapshots = exports.moveCurrentSnapsnot = exports.moveCurrentSnapshot = exports.clearProceedingSnapshotsV2 = exports.clearProceedingSnapshots = exports.canMoveCurrentSnapshot = exports.addSnapshotV2 = exports.addSnapshot = exports.addRangeToSelection = exports.setHtmlWithMetadata = exports.setHtmlWithSelectionPath = exports.getHtmlWithSelectionPath = exports.getSelectionPath = exports.isPositionAtBeginningOf = exports.getPositionRect = exports.createRange = exports.Position = exports.mergeBlocksInRegion = exports.getSelectionRangeInRegion = exports.isNodeInRegion = exports.collapseNodesInRegion = exports.getSelectedBlockElementsInRegion = exports.getRegionsFromRange = exports.setListItemStyle = exports.VListChain = exports.createVListFromRegion = exports.VListItem = exports.VList = exports.isWholeTableSelected = exports.VTable = exports.moveChildNodes = void 0;
11263
- exports.removeMetadata = exports.setMetadata = exports.getMetadata = exports.createObjectDefinition = exports.createArrayDefinition = exports.createStringDefinition = exports.createBooleanDefinition = exports.createNumberDefinition = void 0;
11300
+ exports.VTable = exports.moveChildNodes = exports.KnownCreateElementData = exports.createElement = exports.matchesSelector = exports.setColor = exports.getInnerHTML = exports.readFile = exports.safeInstanceOf = exports.normalizeRect = exports.splitTextNode = exports.getLastLeafNode = exports.getFirstLeafNode = exports.getPreviousLeafSibling = exports.getNextLeafSibling = exports.wrap = exports.unwrap = exports.splitBalancedNodeRange = exports.splitParentNode = exports.queryElements = exports.matchLink = exports.isVoidHtmlElement = exports.isNodeEmpty = exports.isBlockElement = exports.getTagOfNode = exports.PendableFormatCommandMap = exports.getPendableFormatState = exports.getComputedStyle = exports.getComputedStyles = exports.fromHtml = exports.findClosestElementAncestor = exports.contains = exports.collapseNodes = exports.changeElementTag = exports.applyFormat = exports.getBrowserInfo = exports.Browser = exports.extractClipboardItemsForIE = exports.extractClipboardItems = exports.extractClipboardEvent = exports.applyTextStyle = exports.PartialInlineElement = exports.NodeInlineElement = exports.LinkInlineElement = exports.ImageInlineElement = exports.getInlineElementAtNode = exports.PositionContentSearcher = exports.ContentTraverser = exports.getFirstLastBlockElement = exports.getBlockElementAtNode = void 0;
11301
+ exports.createBooleanDefinition = exports.createNumberDefinition = exports.validate = exports.getTextContent = exports.deleteSelectedContent = exports.adjustInsertPosition = exports.setStyles = exports.getStyles = exports.isCtrlOrMetaPressed = exports.isCharacterValue = exports.isModifierKey = exports.clearEventDataCache = exports.cacheGetEventData = exports.getEntitySelector = exports.getEntityFromElement = exports.commitEntity = exports.chainSanitizerCallback = exports.createDefaultHtmlSanitizerOptions = exports.getInheritableStyles = exports.HtmlSanitizer = exports.canUndoAutoComplete = exports.createSnapshots = exports.moveCurrentSnapsnot = exports.moveCurrentSnapshot = exports.clearProceedingSnapshotsV2 = exports.clearProceedingSnapshots = exports.canMoveCurrentSnapshot = exports.addSnapshotV2 = exports.addSnapshot = exports.addRangeToSelection = exports.setHtmlWithMetadata = exports.setHtmlWithSelectionPath = exports.getHtmlWithSelectionPath = exports.getSelectionPath = exports.isPositionAtBeginningOf = exports.getPositionRect = exports.createRange = exports.Position = exports.mergeBlocksInRegion = exports.getSelectionRangeInRegion = exports.isNodeInRegion = exports.collapseNodesInRegion = exports.getSelectedBlockElementsInRegion = exports.getRegionsFromRange = exports.setListItemStyle = exports.VListChain = exports.createVListFromRegion = exports.VListItem = exports.VList = exports.isWholeTableSelected = void 0;
11302
+ exports.toArray = exports.getObjectKeys = exports.arrayPush = exports.removeMetadata = exports.setMetadata = exports.getMetadata = exports.createObjectDefinition = exports.createArrayDefinition = exports.createStringDefinition = void 0;
11264
11303
  var getBlockElementAtNode_1 = __webpack_require__(/*! ./blockElements/getBlockElementAtNode */ "./packages/roosterjs-editor-dom/lib/blockElements/getBlockElementAtNode.ts");
11265
11304
  Object.defineProperty(exports, "getBlockElementAtNode", { enumerable: true, get: function () { return getBlockElementAtNode_1.default; } });
11266
11305
  var getFirstLastBlockElement_1 = __webpack_require__(/*! ./blockElements/getFirstLastBlockElement */ "./packages/roosterjs-editor-dom/lib/blockElements/getFirstLastBlockElement.ts");
@@ -11287,8 +11326,6 @@ var extractClipboardItems_1 = __webpack_require__(/*! ./clipboard/extractClipboa
11287
11326
  Object.defineProperty(exports, "extractClipboardItems", { enumerable: true, get: function () { return extractClipboardItems_1.default; } });
11288
11327
  var extractClipboardItemsForIE_1 = __webpack_require__(/*! ./clipboard/extractClipboardItemsForIE */ "./packages/roosterjs-editor-dom/lib/clipboard/extractClipboardItemsForIE.ts");
11289
11328
  Object.defineProperty(exports, "extractClipboardItemsForIE", { enumerable: true, get: function () { return extractClipboardItemsForIE_1.default; } });
11290
- var arrayPush_1 = __webpack_require__(/*! ./utils/arrayPush */ "./packages/roosterjs-editor-dom/lib/utils/arrayPush.ts");
11291
- Object.defineProperty(exports, "arrayPush", { enumerable: true, get: function () { return arrayPush_1.default; } });
11292
11329
  var Browser_1 = __webpack_require__(/*! ./utils/Browser */ "./packages/roosterjs-editor-dom/lib/utils/Browser.ts");
11293
11330
  Object.defineProperty(exports, "Browser", { enumerable: true, get: function () { return Browser_1.Browser; } });
11294
11331
  Object.defineProperty(exports, "getBrowserInfo", { enumerable: true, get: function () { return Browser_1.getBrowserInfo; } });
@@ -11339,8 +11376,6 @@ var splitTextNode_1 = __webpack_require__(/*! ./utils/splitTextNode */ "./packag
11339
11376
  Object.defineProperty(exports, "splitTextNode", { enumerable: true, get: function () { return splitTextNode_1.default; } });
11340
11377
  var normalizeRect_1 = __webpack_require__(/*! ./utils/normalizeRect */ "./packages/roosterjs-editor-dom/lib/utils/normalizeRect.ts");
11341
11378
  Object.defineProperty(exports, "normalizeRect", { enumerable: true, get: function () { return normalizeRect_1.default; } });
11342
- var toArray_1 = __webpack_require__(/*! ./utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
11343
- Object.defineProperty(exports, "toArray", { enumerable: true, get: function () { return toArray_1.default; } });
11344
11379
  var safeInstanceOf_1 = __webpack_require__(/*! ./utils/safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
11345
11380
  Object.defineProperty(exports, "safeInstanceOf", { enumerable: true, get: function () { return safeInstanceOf_1.default; } });
11346
11381
  var readFile_1 = __webpack_require__(/*! ./utils/readFile */ "./packages/roosterjs-editor-dom/lib/utils/readFile.ts");
@@ -11460,6 +11495,12 @@ var metadata_1 = __webpack_require__(/*! ./metadata/metadata */ "./packages/roos
11460
11495
  Object.defineProperty(exports, "getMetadata", { enumerable: true, get: function () { return metadata_1.getMetadata; } });
11461
11496
  Object.defineProperty(exports, "setMetadata", { enumerable: true, get: function () { return metadata_1.setMetadata; } });
11462
11497
  Object.defineProperty(exports, "removeMetadata", { enumerable: true, get: function () { return metadata_1.removeMetadata; } });
11498
+ var arrayPush_1 = __webpack_require__(/*! ./jsUtils/arrayPush */ "./packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts");
11499
+ Object.defineProperty(exports, "arrayPush", { enumerable: true, get: function () { return arrayPush_1.default; } });
11500
+ var getObjectKeys_1 = __webpack_require__(/*! ./jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
11501
+ Object.defineProperty(exports, "getObjectKeys", { enumerable: true, get: function () { return getObjectKeys_1.default; } });
11502
+ var toArray_1 = __webpack_require__(/*! ./jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
11503
+ Object.defineProperty(exports, "toArray", { enumerable: true, get: function () { return toArray_1.default; } });
11463
11504
 
11464
11505
 
11465
11506
  /***/ }),
@@ -12096,6 +12137,70 @@ function getInlineElementBeforeAfter(root, position, isAfter) {
12096
12137
  exports.getInlineElementBeforeAfter = getInlineElementBeforeAfter;
12097
12138
 
12098
12139
 
12140
+ /***/ }),
12141
+
12142
+ /***/ "./packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts":
12143
+ /*!****************************************************************!*\
12144
+ !*** ./packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts ***!
12145
+ \****************************************************************/
12146
+ /*! no static exports found */
12147
+ /***/ (function(module, exports, __webpack_require__) {
12148
+
12149
+ "use strict";
12150
+
12151
+ Object.defineProperty(exports, "__esModule", { value: true });
12152
+ /**
12153
+ * A type-safe wrapper for Array.prototype.push.apply()
12154
+ * @param mainArray The main array to push items into
12155
+ * @param itemsArray The items to push to main array
12156
+ */
12157
+ function arrayPush(mainArray, itemsArray) {
12158
+ Array.prototype.push.apply(mainArray, itemsArray);
12159
+ }
12160
+ exports.default = arrayPush;
12161
+
12162
+
12163
+ /***/ }),
12164
+
12165
+ /***/ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts":
12166
+ /*!********************************************************************!*\
12167
+ !*** ./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts ***!
12168
+ \********************************************************************/
12169
+ /*! no static exports found */
12170
+ /***/ (function(module, exports, __webpack_require__) {
12171
+
12172
+ "use strict";
12173
+
12174
+ Object.defineProperty(exports, "__esModule", { value: true });
12175
+ /**
12176
+ * Provide a strong-typed version of Object.keys()
12177
+ * @param obj The source object
12178
+ * @returns Array of keys
12179
+ */
12180
+ function getObjectKeys(obj) {
12181
+ return Object.keys(obj);
12182
+ }
12183
+ exports.default = getObjectKeys;
12184
+
12185
+
12186
+ /***/ }),
12187
+
12188
+ /***/ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts":
12189
+ /*!**************************************************************!*\
12190
+ !*** ./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts ***!
12191
+ \**************************************************************/
12192
+ /*! no static exports found */
12193
+ /***/ (function(module, exports, __webpack_require__) {
12194
+
12195
+ "use strict";
12196
+
12197
+ Object.defineProperty(exports, "__esModule", { value: true });
12198
+ function toArray(collection) {
12199
+ return [].slice.call(collection);
12200
+ }
12201
+ exports.default = toArray;
12202
+
12203
+
12099
12204
  /***/ }),
12100
12205
 
12101
12206
  /***/ "./packages/roosterjs-editor-dom/lib/list/VList.ts":
@@ -12126,11 +12231,10 @@ var Position_1 = __webpack_require__(/*! ../selection/Position */ "./packages/ro
12126
12231
  var queryElements_1 = __webpack_require__(/*! ../utils/queryElements */ "./packages/roosterjs-editor-dom/lib/utils/queryElements.ts");
12127
12232
  var safeInstanceOf_1 = __webpack_require__(/*! ../utils/safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
12128
12233
  var splitParentNode_1 = __webpack_require__(/*! ../utils/splitParentNode */ "./packages/roosterjs-editor-dom/lib/utils/splitParentNode.ts");
12129
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
12234
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
12130
12235
  var unwrap_1 = __webpack_require__(/*! ../utils/unwrap */ "./packages/roosterjs-editor-dom/lib/utils/unwrap.ts");
12131
12236
  var VListItem_1 = __webpack_require__(/*! ./VListItem */ "./packages/roosterjs-editor-dom/lib/list/VListItem.ts");
12132
12237
  var wrap_1 = __webpack_require__(/*! ../utils/wrap */ "./packages/roosterjs-editor-dom/lib/utils/wrap.ts");
12133
- var definitionCreators_1 = __webpack_require__(/*! ../metadata/definitionCreators */ "./packages/roosterjs-editor-dom/lib/metadata/definitionCreators.ts");
12134
12238
  var metadata_1 = __webpack_require__(/*! ../metadata/metadata */ "./packages/roosterjs-editor-dom/lib/metadata/metadata.ts");
12135
12239
  /**
12136
12240
  * Represent a bullet or a numbering list
@@ -12387,10 +12491,13 @@ var VList = /** @class */ (function () {
12387
12491
  /**
12388
12492
  * Change list style of the given range of this list.
12389
12493
  * If some of the items are not real list item yet, this will make them to be list item with given style
12390
- * @param targetStyle Target list style
12494
+ * @param orderedStyle The style of ordered list
12495
+ * @param unorderedStyle The style of unordered list
12391
12496
  */
12392
- VList.prototype.setListStyleType = function (targetStyle) {
12393
- (0, metadata_1.setMetadata)(this.rootList, targetStyle, (0, definitionCreators_1.createNumberDefinition)());
12497
+ VList.prototype.setListStyleType = function (orderedStyle, unorderedStyle) {
12498
+ var style = (0, metadata_1.getMetadata)(this.rootList, VListItem_1.ListStyleDefinitionMetadata);
12499
+ var styleMetadata = createListStyleMetadata(style, orderedStyle, unorderedStyle);
12500
+ (0, metadata_1.setMetadata)(this.rootList, styleMetadata, VListItem_1.ListStyleDefinitionMetadata);
12394
12501
  };
12395
12502
  /**
12396
12503
  * Append a new item to this VList
@@ -12546,6 +12653,19 @@ function moveLiToList(li) {
12546
12653
  (0, unwrap_1.default)(li.parentNode);
12547
12654
  }
12548
12655
  }
12656
+ function getValidValue() {
12657
+ var values = [];
12658
+ for (var _i = 0; _i < arguments.length; _i++) {
12659
+ values[_i] = arguments[_i];
12660
+ }
12661
+ return values.filter(function (x) { return x !== undefined; })[0];
12662
+ }
12663
+ function createListStyleMetadata(style, orderedStyle, unorderedStyle) {
12664
+ return {
12665
+ orderedStyleType: getValidValue(orderedStyle, style === null || style === void 0 ? void 0 : style.orderedStyleType, 1 /* Decimal */),
12666
+ unorderedStyleType: getValidValue(unorderedStyle, style === null || style === void 0 ? void 0 : style.unorderedStyleType, 1 /* Disc */),
12667
+ };
12668
+ }
12549
12669
 
12550
12670
 
12551
12671
  /***/ }),
@@ -12560,7 +12680,7 @@ function moveLiToList(li) {
12560
12680
  "use strict";
12561
12681
 
12562
12682
  Object.defineProperty(exports, "__esModule", { value: true });
12563
- var arrayPush_1 = __webpack_require__(/*! ../utils/arrayPush */ "./packages/roosterjs-editor-dom/lib/utils/arrayPush.ts");
12683
+ var arrayPush_1 = __webpack_require__(/*! ../jsUtils/arrayPush */ "./packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts");
12564
12684
  var getRootListNode_1 = __webpack_require__(/*! ./getRootListNode */ "./packages/roosterjs-editor-dom/lib/list/getRootListNode.ts");
12565
12685
  var isNodeAfter_1 = __webpack_require__(/*! ../utils/isNodeAfter */ "./packages/roosterjs-editor-dom/lib/utils/isNodeAfter.ts");
12566
12686
  var isNodeInRegion_1 = __webpack_require__(/*! ../region/isNodeInRegion */ "./packages/roosterjs-editor-dom/lib/region/isNodeInRegion.ts");
@@ -12725,6 +12845,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
12725
12845
  return to.concat(ar || Array.prototype.slice.call(from));
12726
12846
  };
12727
12847
  Object.defineProperty(exports, "__esModule", { value: true });
12848
+ exports.ListStyleDefinitionMetadata = void 0;
12728
12849
  var contains_1 = __webpack_require__(/*! ../utils/contains */ "./packages/roosterjs-editor-dom/lib/utils/contains.ts");
12729
12850
  var getListTypeFromNode_1 = __webpack_require__(/*! ./getListTypeFromNode */ "./packages/roosterjs-editor-dom/lib/list/getListTypeFromNode.ts");
12730
12851
  var getTagOfNode_1 = __webpack_require__(/*! ../utils/getTagOfNode */ "./packages/roosterjs-editor-dom/lib/utils/getTagOfNode.ts");
@@ -12734,13 +12855,23 @@ var safeInstanceOf_1 = __webpack_require__(/*! ../utils/safeInstanceOf */ "./pac
12734
12855
  var setBulletListMarkers_1 = __webpack_require__(/*! ./setBulletListMarkers */ "./packages/roosterjs-editor-dom/lib/list/setBulletListMarkers.ts");
12735
12856
  var setListItemStyle_1 = __webpack_require__(/*! ./setListItemStyle */ "./packages/roosterjs-editor-dom/lib/list/setListItemStyle.ts");
12736
12857
  var setNumberingListMarkers_1 = __webpack_require__(/*! ./setNumberingListMarkers */ "./packages/roosterjs-editor-dom/lib/list/setNumberingListMarkers.ts");
12737
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
12858
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
12738
12859
  var unwrap_1 = __webpack_require__(/*! ../utils/unwrap */ "./packages/roosterjs-editor-dom/lib/utils/unwrap.ts");
12739
12860
  var wrap_1 = __webpack_require__(/*! ../utils/wrap */ "./packages/roosterjs-editor-dom/lib/utils/wrap.ts");
12861
+ var definitionCreators_1 = __webpack_require__(/*! ../metadata/definitionCreators */ "./packages/roosterjs-editor-dom/lib/metadata/definitionCreators.ts");
12740
12862
  var metadata_1 = __webpack_require__(/*! ../metadata/metadata */ "./packages/roosterjs-editor-dom/lib/metadata/metadata.ts");
12741
12863
  var orderListStyles = [null, 'lower-alpha', 'lower-roman'];
12864
+ var unorderedListStyles = ['disc', 'circle', 'square'];
12742
12865
  var MARGIN_BASE = '0in 0in 0in 0.5in';
12743
12866
  var NEGATIVE_MARGIN = '-.25in';
12867
+ /**
12868
+ * @internal
12869
+ * The definition for the number of BulletListType or NumberingListType
12870
+ */
12871
+ exports.ListStyleDefinitionMetadata = (0, definitionCreators_1.createObjectDefinition)({
12872
+ orderedStyleType: (0, definitionCreators_1.createNumberDefinition)(true /** isOptional */, undefined /** value **/, 1 /* Min */, 20 /* Max */),
12873
+ unorderedStyleType: (0, definitionCreators_1.createNumberDefinition)(true /** isOptional */, undefined /** value **/, 1 /* Min */, 7 /* Max */),
12874
+ }, true /** isOptional */, true /** allowNull */);
12744
12875
  /**
12745
12876
  * !!! Never directly create instance of this class. It should be created within VList class !!!
12746
12877
  *
@@ -12904,15 +13035,19 @@ var VListItem = /** @class */ (function () {
12904
13035
  * @param index the list item index
12905
13036
  */
12906
13037
  VListItem.prototype.applyListStyle = function (rootList, index) {
12907
- var style = (0, metadata_1.getMetadata)(rootList) ? (0, metadata_1.getMetadata)(rootList) : undefined;
13038
+ var style = (0, metadata_1.getMetadata)(rootList, exports.ListStyleDefinitionMetadata);
13039
+ // The list just need to be styled if it is at top level, so the listType length for this Vlist must be 2.
13040
+ var isFirstLevel = this.listTypes.length < 3;
12908
13041
  if (style) {
12909
- if (this.listTypes.length < 3) {
12910
- if (this.listTypes[1] === 2 /* Unordered */) {
12911
- (0, setBulletListMarkers_1.default)(this.node, style);
12912
- }
12913
- else if (this.listTypes[1] === 1 /* Ordered */) {
12914
- (0, setNumberingListMarkers_1.default)(this.node, style, index);
12915
- }
13042
+ if (isFirstLevel &&
13043
+ this.listTypes[1] === 2 /* Unordered */ &&
13044
+ style.unorderedStyleType) {
13045
+ (0, setBulletListMarkers_1.default)(this.node, style.unorderedStyleType);
13046
+ }
13047
+ else if (isFirstLevel &&
13048
+ this.listTypes[1] === 1 /* Ordered */ &&
13049
+ style.orderedStyleType) {
13050
+ (0, setNumberingListMarkers_1.default)(this.node, style.orderedStyleType, index);
12916
13051
  }
12917
13052
  else {
12918
13053
  this.node.style.removeProperty('list-style-type');
@@ -13028,9 +13163,19 @@ function createListElement(newRoot, listType, nextLevel, originalRoot) {
13028
13163
  // Can't be reused, can't clone, let's create a new one
13029
13164
  result = doc.createElement(listType == 1 /* Ordered */ ? 'ol' : 'ul');
13030
13165
  }
13166
+ // Always maintain the metadata saved in the list
13167
+ if (originalRoot && nextLevel == 1 && listType != (0, getListTypeFromNode_1.default)(originalRoot)) {
13168
+ var style = (0, metadata_1.getMetadata)(originalRoot, exports.ListStyleDefinitionMetadata);
13169
+ if (style) {
13170
+ (0, metadata_1.setMetadata)(result, style, exports.ListStyleDefinitionMetadata);
13171
+ }
13172
+ }
13031
13173
  if (listType == 1 /* Ordered */ && nextLevel > 1) {
13032
13174
  result.style.setProperty('list-style-type', orderListStyles[(nextLevel - 1) % orderListStyles.length]);
13033
13175
  }
13176
+ if (listType == 2 /* Unordered */ && nextLevel > 1) {
13177
+ result.style.setProperty('list-style-type', unorderedListStyles[(nextLevel - 1) % unorderedListStyles.length]);
13178
+ }
13034
13179
  return result;
13035
13180
  }
13036
13181
  function wrapIfNotBlockNode(nodes, checkFirst, checkLast) {
@@ -13118,6 +13263,7 @@ exports.default = convertDecimalsToAlpha;
13118
13263
  "use strict";
13119
13264
 
13120
13265
  Object.defineProperty(exports, "__esModule", { value: true });
13266
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
13121
13267
  var RomanValues = {
13122
13268
  M: 1000,
13123
13269
  CM: 900,
@@ -13142,7 +13288,7 @@ var RomanValues = {
13142
13288
  */
13143
13289
  function convertDecimalsToRoman(decimal, isLowerCase) {
13144
13290
  var romanValue = '';
13145
- for (var _i = 0, _a = Object.keys(RomanValues); _i < _a.length; _i++) {
13291
+ for (var _i = 0, _a = (0, getObjectKeys_1.default)(RomanValues); _i < _a.length; _i++) {
13146
13292
  var i = _a[_i];
13147
13293
  var timesRomanCharAppear = Math.floor(decimal / RomanValues[i]);
13148
13294
  decimal = decimal - timesRomanCharAppear * RomanValues[i];
@@ -13172,7 +13318,7 @@ var isNodeInRegion_1 = __webpack_require__(/*! ../region/isNodeInRegion */ "./pa
13172
13318
  var Position_1 = __webpack_require__(/*! ../selection/Position */ "./packages/roosterjs-editor-dom/lib/selection/Position.ts");
13173
13319
  var safeInstanceOf_1 = __webpack_require__(/*! ../utils/safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
13174
13320
  var shouldSkipNode_1 = __webpack_require__(/*! ../utils/shouldSkipNode */ "./packages/roosterjs-editor-dom/lib/utils/shouldSkipNode.ts");
13175
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
13321
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
13176
13322
  var VList_1 = __webpack_require__(/*! ./VList */ "./packages/roosterjs-editor-dom/lib/list/VList.ts");
13177
13323
  var wrap_1 = __webpack_require__(/*! ../utils/wrap */ "./packages/roosterjs-editor-dom/lib/utils/wrap.ts");
13178
13324
  var getLeafSibling_1 = __webpack_require__(/*! ../utils/getLeafSibling */ "./packages/roosterjs-editor-dom/lib/utils/getLeafSibling.ts");
@@ -13375,17 +13521,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
13375
13521
  */
13376
13522
  function setBulletListMarkers(li, listStyleType) {
13377
13523
  var marker = bulletListStyle[listStyleType];
13378
- var isDiscOrSquare = listStyleType === 0 /* Disc */ || listStyleType === 2 /* Square */;
13524
+ var isDiscOrSquare = listStyleType === 1 /* Disc */ || listStyleType === 3 /* Square */;
13379
13525
  li.style.listStyleType = isDiscOrSquare ? marker : "\"" + marker + "\"";
13380
13526
  }
13381
13527
  exports.default = setBulletListMarkers;
13382
13528
  var bulletListStyle = (_a = {},
13383
- _a[0 /* Disc */] = 'disc',
13384
- _a[2 /* Square */] = 'square',
13385
- _a[1 /* Dash */] = '- ',
13386
- _a[4 /* LongArrow */] = '→ ',
13387
- _a[3 /* ShortArrow */] = '➢ ',
13388
- _a[5 /* UnfilledArrow */] = '➪ ',
13529
+ _a[1 /* Disc */] = 'disc',
13530
+ _a[3 /* Square */] = 'square',
13531
+ _a[2 /* Dash */] = '- ',
13532
+ _a[5 /* LongArrow */] = '→ ',
13533
+ _a[4 /* ShortArrow */] = '➢ ',
13534
+ _a[6 /* UnfilledArrow */] = '➪ ',
13535
+ _a[7 /* Hyphen */] = '— ',
13389
13536
  _a);
13390
13537
 
13391
13538
 
@@ -13491,95 +13638,95 @@ function setNumberingListMarkers(li, listStyleType, level) {
13491
13638
  }
13492
13639
  exports.default = setNumberingListMarkers;
13493
13640
  var numberingListStyle = (_a = {},
13494
- _a[0 /* Decimal */] = {
13641
+ _a[1 /* Decimal */] = {
13495
13642
  markerType: MarkerTypes.Decimal,
13496
13643
  markerSeparator: '. ',
13497
13644
  },
13498
- _a[1 /* DecimalDash */] = {
13645
+ _a[2 /* DecimalDash */] = {
13499
13646
  markerType: MarkerTypes.Decimal,
13500
13647
  markerSeparator: '- ',
13501
13648
  },
13502
- _a[2 /* DecimalParenthesis */] = {
13649
+ _a[3 /* DecimalParenthesis */] = {
13503
13650
  markerType: MarkerTypes.Decimal,
13504
13651
  markerSeparator: ') ',
13505
13652
  },
13506
- _a[3 /* DecimalDoubleParenthesis */] = {
13653
+ _a[4 /* DecimalDoubleParenthesis */] = {
13507
13654
  markerType: MarkerTypes.Decimal,
13508
13655
  markerSeparator: ') ',
13509
13656
  markerSecondSeparator: '(',
13510
13657
  },
13511
- _a[4 /* LowerAlpha */] = {
13658
+ _a[5 /* LowerAlpha */] = {
13512
13659
  markerType: MarkerTypes.Alpha,
13513
13660
  markerSeparator: '. ',
13514
13661
  lowerCase: true,
13515
13662
  },
13516
- _a[7 /* LowerAlphaDash */] = {
13663
+ _a[8 /* LowerAlphaDash */] = {
13517
13664
  markerType: MarkerTypes.Alpha,
13518
13665
  markerSeparator: '- ',
13519
13666
  lowerCase: true,
13520
13667
  },
13521
- _a[5 /* LowerAlphaParenthesis */] = {
13668
+ _a[6 /* LowerAlphaParenthesis */] = {
13522
13669
  markerType: MarkerTypes.Alpha,
13523
13670
  markerSeparator: ') ',
13524
13671
  lowerCase: true,
13525
13672
  },
13526
- _a[6 /* LowerAlphaDoubleParenthesis */] = {
13673
+ _a[7 /* LowerAlphaDoubleParenthesis */] = {
13527
13674
  markerType: MarkerTypes.Alpha,
13528
13675
  markerSeparator: ') ',
13529
13676
  markerSecondSeparator: '(',
13530
13677
  lowerCase: true,
13531
13678
  },
13532
- _a[8 /* UpperAlpha */] = {
13679
+ _a[9 /* UpperAlpha */] = {
13533
13680
  markerType: MarkerTypes.Alpha,
13534
13681
  markerSeparator: '. ',
13535
13682
  },
13536
- _a[11 /* UpperAlphaDash */] = {
13683
+ _a[12 /* UpperAlphaDash */] = {
13537
13684
  markerType: MarkerTypes.Alpha,
13538
13685
  markerSeparator: '- ',
13539
13686
  },
13540
- _a[9 /* UpperAlphaParenthesis */] = {
13687
+ _a[10 /* UpperAlphaParenthesis */] = {
13541
13688
  markerType: MarkerTypes.Alpha,
13542
13689
  markerSeparator: ') ',
13543
13690
  },
13544
- _a[10 /* UpperAlphaDoubleParenthesis */] = {
13691
+ _a[11 /* UpperAlphaDoubleParenthesis */] = {
13545
13692
  markerType: MarkerTypes.Alpha,
13546
13693
  markerSeparator: ') ',
13547
13694
  markerSecondSeparator: '(',
13548
13695
  },
13549
- _a[12 /* LowerRoman */] = {
13696
+ _a[13 /* LowerRoman */] = {
13550
13697
  markerType: MarkerTypes.Roman,
13551
13698
  markerSeparator: '. ',
13552
13699
  lowerCase: true,
13553
13700
  },
13554
- _a[15 /* LowerRomanDash */] = {
13701
+ _a[16 /* LowerRomanDash */] = {
13555
13702
  markerType: MarkerTypes.Roman,
13556
13703
  markerSeparator: '- ',
13557
13704
  lowerCase: true,
13558
13705
  },
13559
- _a[13 /* LowerRomanParenthesis */] = {
13706
+ _a[14 /* LowerRomanParenthesis */] = {
13560
13707
  markerType: MarkerTypes.Roman,
13561
13708
  markerSeparator: ') ',
13562
13709
  lowerCase: true,
13563
13710
  },
13564
- _a[14 /* LowerRomanDoubleParenthesis */] = {
13711
+ _a[15 /* LowerRomanDoubleParenthesis */] = {
13565
13712
  markerType: MarkerTypes.Roman,
13566
13713
  markerSeparator: ') ',
13567
13714
  markerSecondSeparator: '(',
13568
13715
  lowerCase: true,
13569
13716
  },
13570
- _a[16 /* UpperRoman */] = {
13717
+ _a[17 /* UpperRoman */] = {
13571
13718
  markerType: MarkerTypes.Roman,
13572
13719
  markerSeparator: '. ',
13573
13720
  },
13574
- _a[19 /* UpperRomanDash */] = {
13721
+ _a[20 /* UpperRomanDash */] = {
13575
13722
  markerType: MarkerTypes.Roman,
13576
13723
  markerSeparator: '- ',
13577
13724
  },
13578
- _a[17 /* UpperRomanParenthesis */] = {
13725
+ _a[18 /* UpperRomanParenthesis */] = {
13579
13726
  markerType: MarkerTypes.Roman,
13580
13727
  markerSeparator: ') ',
13581
13728
  },
13582
- _a[18 /* UpperRomanDoubleParenthesis */] = {
13729
+ _a[19 /* UpperRomanDoubleParenthesis */] = {
13583
13730
  markerType: MarkerTypes.Roman,
13584
13731
  markerSeparator: ') ',
13585
13732
  markerSecondSeparator: '(',
@@ -13775,6 +13922,7 @@ exports.removeMetadata = removeMetadata;
13775
13922
  "use strict";
13776
13923
 
13777
13924
  Object.defineProperty(exports, "__esModule", { value: true });
13925
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
13778
13926
  /**
13779
13927
  * Validate the given object with a type definition object
13780
13928
  * @param input The object to validate
@@ -13815,7 +13963,9 @@ function validate(input, def) {
13815
13963
  case 4 /* Object */:
13816
13964
  result =
13817
13965
  typeof input === 'object' &&
13818
- Object.keys(def.propertyDef).every(function (x) { return validate(input[x], def.propertyDef[x]); });
13966
+ (0, getObjectKeys_1.default)(def.propertyDef).every(function (x) {
13967
+ return validate(input[x], def.propertyDef[x]);
13968
+ });
13819
13969
  break;
13820
13970
  case 5 /* Customize */:
13821
13971
  result = def.validator(input);
@@ -15134,6 +15284,7 @@ exports.default = getStyles;
15134
15284
  "use strict";
15135
15285
 
15136
15286
  Object.defineProperty(exports, "__esModule", { value: true });
15287
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
15137
15288
  /**
15138
15289
  * Set styles to an HTML element. If styles are empty, remove 'style' attribute
15139
15290
  * @param element The element to set styles
@@ -15141,7 +15292,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
15141
15292
  */
15142
15293
  function setStyles(element, styles) {
15143
15294
  if (element) {
15144
- var style = Object.keys(styles || {})
15295
+ var style = (0, getObjectKeys_1.default)(styles || {})
15145
15296
  .map(function (name) {
15146
15297
  var value = styles[name];
15147
15298
  var trimmedName = name ? name.trim() : null;
@@ -15188,7 +15339,7 @@ var applyTableFormat_1 = __webpack_require__(/*! ./applyTableFormat */ "./packag
15188
15339
  var moveChildNodes_1 = __webpack_require__(/*! ../utils/moveChildNodes */ "./packages/roosterjs-editor-dom/lib/utils/moveChildNodes.ts");
15189
15340
  var normalizeRect_1 = __webpack_require__(/*! ../utils/normalizeRect */ "./packages/roosterjs-editor-dom/lib/utils/normalizeRect.ts");
15190
15341
  var safeInstanceOf_1 = __webpack_require__(/*! ../utils/safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
15191
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
15342
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
15192
15343
  var tableFormatInfo_1 = __webpack_require__(/*! ./tableFormatInfo */ "./packages/roosterjs-editor-dom/lib/table/tableFormatInfo.ts");
15193
15344
  var CELL_SHADE = 'cellShade';
15194
15345
  var DEFAULT_FORMAT = {
@@ -16347,29 +16498,6 @@ function applyFormat(element, format, isDarkMode) {
16347
16498
  exports.default = applyFormat;
16348
16499
 
16349
16500
 
16350
- /***/ }),
16351
-
16352
- /***/ "./packages/roosterjs-editor-dom/lib/utils/arrayPush.ts":
16353
- /*!**************************************************************!*\
16354
- !*** ./packages/roosterjs-editor-dom/lib/utils/arrayPush.ts ***!
16355
- \**************************************************************/
16356
- /*! no static exports found */
16357
- /***/ (function(module, exports, __webpack_require__) {
16358
-
16359
- "use strict";
16360
-
16361
- Object.defineProperty(exports, "__esModule", { value: true });
16362
- /**
16363
- * A type-safe wrapper for Array.prototype.push.apply()
16364
- * @param mainArray The main array to push items into
16365
- * @param itemsArray The items to push to main array
16366
- */
16367
- function arrayPush(mainArray, itemsArray) {
16368
- Array.prototype.push.apply(mainArray, itemsArray);
16369
- }
16370
- exports.default = arrayPush;
16371
-
16372
-
16373
16501
  /***/ }),
16374
16502
 
16375
16503
  /***/ "./packages/roosterjs-editor-dom/lib/utils/changeElementTag.ts":
@@ -16430,7 +16558,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
16430
16558
  exports.collapse = void 0;
16431
16559
  var contains_1 = __webpack_require__(/*! ./contains */ "./packages/roosterjs-editor-dom/lib/utils/contains.ts");
16432
16560
  var splitParentNode_1 = __webpack_require__(/*! ./splitParentNode */ "./packages/roosterjs-editor-dom/lib/utils/splitParentNode.ts");
16433
- var toArray_1 = __webpack_require__(/*! ./toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
16561
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
16434
16562
  /**
16435
16563
  * Collapse nodes within the given start and end nodes to their common ancestor node,
16436
16564
  * split parent nodes if necessary
@@ -16560,6 +16688,7 @@ function internalContains(container, contained) {
16560
16688
  var _a;
16561
16689
  Object.defineProperty(exports, "__esModule", { value: true });
16562
16690
  exports.KnownCreateElementData = void 0;
16691
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
16563
16692
  var safeInstanceOf_1 = __webpack_require__(/*! ./safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
16564
16693
  var Browser_1 = __webpack_require__(/*! ./Browser */ "./packages/roosterjs-editor-dom/lib/utils/Browser.ts");
16565
16694
  /**
@@ -16637,12 +16766,12 @@ function createElement(elementData, document) {
16637
16766
  result.className = className;
16638
16767
  }
16639
16768
  if (dataset && (0, safeInstanceOf_1.default)(result, 'HTMLElement')) {
16640
- Object.keys(dataset).forEach(function (datasetName) {
16769
+ (0, getObjectKeys_1.default)(dataset).forEach(function (datasetName) {
16641
16770
  result.dataset[datasetName] = dataset[datasetName];
16642
16771
  });
16643
16772
  }
16644
16773
  if (attributes) {
16645
- Object.keys(attributes).forEach(function (attrName) {
16774
+ (0, getObjectKeys_1.default)(attributes).forEach(function (attrName) {
16646
16775
  result.setAttribute(attrName, attributes[attrName]);
16647
16776
  });
16648
16777
  }
@@ -16716,7 +16845,7 @@ exports.default = findClosestElementAncestor;
16716
16845
  "use strict";
16717
16846
 
16718
16847
  Object.defineProperty(exports, "__esModule", { value: true });
16719
- var toArray_1 = __webpack_require__(/*! ./toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
16848
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
16720
16849
  /**
16721
16850
  * @deprecated
16722
16851
  * Creates an HTML node array from html
@@ -16972,6 +17101,7 @@ exports.getPreviousLeafSibling = getPreviousLeafSibling;
16972
17101
 
16973
17102
  Object.defineProperty(exports, "__esModule", { value: true });
16974
17103
  exports.PendableFormatCommandMap = void 0;
17104
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
16975
17105
  /**
16976
17106
  * A map from pendable format name to document command
16977
17107
  */
@@ -17007,7 +17137,7 @@ exports.PendableFormatCommandMap = {
17007
17137
  * @returns A PendableFormatState object which contains the values of pendable format states
17008
17138
  */
17009
17139
  function getPendableFormatState(document) {
17010
- var keys = Object.keys(exports.PendableFormatCommandMap);
17140
+ var keys = (0, getObjectKeys_1.default)(exports.PendableFormatCommandMap);
17011
17141
  return keys.reduce(function (state, key) {
17012
17142
  state[key] = document.queryCommandState(exports.PendableFormatCommandMap[key]);
17013
17143
  return state;
@@ -17119,7 +17249,7 @@ var ZERO_WIDTH_SPACE = /\u200b/g;
17119
17249
  * Default value is false
17120
17250
  * @returns True if there isn't any visible element inside node, otherwise false
17121
17251
  */
17122
- function isNodeEmpty(node, trimContent) {
17252
+ function isNodeEmpty(node, trimContent, shouldCountBrAsVisible) {
17123
17253
  if (!node) {
17124
17254
  return false;
17125
17255
  }
@@ -17129,9 +17259,12 @@ function isNodeEmpty(node, trimContent) {
17129
17259
  else if (node.nodeType == 1 /* Element */) {
17130
17260
  var element = node;
17131
17261
  var textContent = trim(element.textContent || '', trimContent);
17262
+ var visibleSelector = shouldCountBrAsVisible
17263
+ ? VISIBLE_CHILD_ELEMENT_SELECTOR + ",BR"
17264
+ : VISIBLE_CHILD_ELEMENT_SELECTOR;
17132
17265
  if (textContent != '' ||
17133
17266
  VISIBLE_ELEMENT_TAGS.indexOf((0, getTagOfNode_1.default)(element)) >= 0 ||
17134
- element.querySelectorAll(VISIBLE_CHILD_ELEMENT_SELECTOR)[0]) {
17267
+ element.querySelectorAll(visibleSelector)[0]) {
17135
17268
  return false;
17136
17269
  }
17137
17270
  }
@@ -17186,6 +17319,7 @@ exports.default = isVoidHtmlElement;
17186
17319
  "use strict";
17187
17320
 
17188
17321
  Object.defineProperty(exports, "__esModule", { value: true });
17322
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
17189
17323
  // http exclude matching regex
17190
17324
  // invalid URL example (in particular on IE and Edge):
17191
17325
  // - http://www.bing.com%00, %00 before ? (question mark) is considered invalid. IE/Edge throws invalid argument exception
@@ -17248,7 +17382,7 @@ var linkMatchRules = {
17248
17382
  */
17249
17383
  function matchLink(url) {
17250
17384
  if (url) {
17251
- for (var _i = 0, _a = Object.keys(linkMatchRules); _i < _a.length; _i++) {
17385
+ for (var _i = 0, _a = (0, getObjectKeys_1.default)(linkMatchRules); _i < _a.length; _i++) {
17252
17386
  var schema = _a[_i];
17253
17387
  var rule = linkMatchRules[schema];
17254
17388
  var matches = url.match(rule.match);
@@ -17365,7 +17499,7 @@ exports.default = normalizeRect;
17365
17499
  "use strict";
17366
17500
 
17367
17501
  Object.defineProperty(exports, "__esModule", { value: true });
17368
- var toArray_1 = __webpack_require__(/*! ./toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
17502
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
17369
17503
  /**
17370
17504
  * Query HTML elements in the container by a selector string
17371
17505
  * @param container Container element to query from
@@ -17825,24 +17959,6 @@ function splitTextNode(textNode, offset, returnFirstPart) {
17825
17959
  exports.default = splitTextNode;
17826
17960
 
17827
17961
 
17828
- /***/ }),
17829
-
17830
- /***/ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts":
17831
- /*!************************************************************!*\
17832
- !*** ./packages/roosterjs-editor-dom/lib/utils/toArray.ts ***!
17833
- \************************************************************/
17834
- /*! no static exports found */
17835
- /***/ (function(module, exports, __webpack_require__) {
17836
-
17837
- "use strict";
17838
-
17839
- Object.defineProperty(exports, "__esModule", { value: true });
17840
- function toArray(collection) {
17841
- return [].slice.call(collection);
17842
- }
17843
- exports.default = toArray;
17844
-
17845
-
17846
17962
  /***/ }),
17847
17963
 
17848
17964
  /***/ "./packages/roosterjs-editor-dom/lib/utils/unwrap.ts":
@@ -17921,6 +18037,31 @@ function wrap(nodes, wrapper) {
17921
18037
  exports.default = wrap;
17922
18038
 
17923
18039
 
18040
+ /***/ }),
18041
+
18042
+ /***/ "./packages/roosterjs-editor-plugins/lib/AutoFormat.ts":
18043
+ /*!*************************************************************!*\
18044
+ !*** ./packages/roosterjs-editor-plugins/lib/AutoFormat.ts ***!
18045
+ \*************************************************************/
18046
+ /*! no static exports found */
18047
+ /***/ (function(module, exports, __webpack_require__) {
18048
+
18049
+ "use strict";
18050
+
18051
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18052
+ if (k2 === undefined) k2 = k;
18053
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
18054
+ }) : (function(o, m, k, k2) {
18055
+ if (k2 === undefined) k2 = k;
18056
+ o[k2] = m[k];
18057
+ }));
18058
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18059
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18060
+ };
18061
+ Object.defineProperty(exports, "__esModule", { value: true });
18062
+ __exportStar(__webpack_require__(/*! ./plugins/AutoFormat/index */ "./packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/index.ts"), exports);
18063
+
18064
+
17924
18065
  /***/ }),
17925
18066
 
17926
18067
  /***/ "./packages/roosterjs-editor-plugins/lib/ContentEdit.ts":
@@ -18255,6 +18396,7 @@ __exportStar(__webpack_require__(/*! ./Picker */ "./packages/roosterjs-editor-pl
18255
18396
  __exportStar(__webpack_require__(/*! ./TableResize */ "./packages/roosterjs-editor-plugins/lib/TableResize.ts"), exports);
18256
18397
  __exportStar(__webpack_require__(/*! ./Watermark */ "./packages/roosterjs-editor-plugins/lib/Watermark.ts"), exports);
18257
18398
  __exportStar(__webpack_require__(/*! ./TableCellSelection */ "./packages/roosterjs-editor-plugins/lib/TableCellSelection.ts"), exports);
18399
+ __exportStar(__webpack_require__(/*! ./AutoFormat */ "./packages/roosterjs-editor-plugins/lib/AutoFormat.ts"), exports);
18258
18400
 
18259
18401
 
18260
18402
  /***/ }),
@@ -18271,14 +18413,15 @@ __exportStar(__webpack_require__(/*! ./TableCellSelection */ "./packages/rooster
18271
18413
  Object.defineProperty(exports, "__esModule", { value: true });
18272
18414
  var lib_1 = __webpack_require__(/*! roosterjs-editor-dom/lib */ "./packages/roosterjs-editor-dom/lib/index.ts");
18273
18415
  /**
18274
- * Generate event names based on different platforms to be compatible with desktop and mobile browsers
18416
+ * Generate event names and getXY function based on different platforms to be compatible with desktop and mobile browsers
18275
18417
  */
18276
- var MOUSE_EVENT_NAMES = (function () {
18418
+ var MOUSE_EVENT_INFO = (function () {
18277
18419
  if (lib_1.Browser.isMobileOrTablet) {
18278
18420
  return {
18279
18421
  MOUSEDOWN: 'touchstart',
18280
18422
  MOUSEMOVE: 'touchmove',
18281
18423
  MOUSEUP: 'touchend',
18424
+ getPageXY: getTouchEventPageXY,
18282
18425
  };
18283
18426
  }
18284
18427
  else {
@@ -18286,9 +18429,23 @@ var MOUSE_EVENT_NAMES = (function () {
18286
18429
  MOUSEDOWN: 'mousedown',
18287
18430
  MOUSEMOVE: 'mousemove',
18288
18431
  MOUSEUP: 'mouseup',
18432
+ getPageXY: getMouseEventPageXY,
18289
18433
  };
18290
18434
  }
18291
18435
  })();
18436
+ function getMouseEventPageXY(e) {
18437
+ return [e.pageX, e.pageY];
18438
+ }
18439
+ function getTouchEventPageXY(e) {
18440
+ var pageX = 0;
18441
+ var pageY = 0;
18442
+ if (e.targetTouches && e.targetTouches.length > 0) {
18443
+ var touch = e.targetTouches[0];
18444
+ pageX = touch.pageX;
18445
+ pageY = touch.pageY;
18446
+ }
18447
+ return [pageX, pageY];
18448
+ }
18292
18449
  /**
18293
18450
  * @internal
18294
18451
  * A helper class to help manage drag and drop to an HTML element
@@ -18311,19 +18468,20 @@ var DragAndDropHelper = /** @class */ (function () {
18311
18468
  this.handler = handler;
18312
18469
  this.zoomScale = zoomScale;
18313
18470
  this.onMouseDown = function (e) {
18314
- var _a, _b;
18471
+ var _a;
18472
+ var _b, _c;
18315
18473
  e.preventDefault();
18316
18474
  e.stopPropagation();
18317
18475
  _this.addDocumentEvents();
18318
- _this.initX = e.pageX;
18319
- _this.initY = e.pageY;
18320
- _this.initValue = (_b = (_a = _this.handler).onDragStart) === null || _b === void 0 ? void 0 : _b.call(_a, _this.context, e);
18476
+ _a = MOUSE_EVENT_INFO.getPageXY(e), _this.initX = _a[0], _this.initY = _a[1];
18477
+ _this.initValue = (_c = (_b = _this.handler).onDragStart) === null || _c === void 0 ? void 0 : _c.call(_b, _this.context, e);
18321
18478
  };
18322
18479
  this.onMouseMove = function (e) {
18323
18480
  var _a, _b, _c;
18324
18481
  e.preventDefault();
18325
- var deltaX = (e.pageX - _this.initX) / _this.zoomScale;
18326
- var deltaY = (e.pageY - _this.initY) / _this.zoomScale;
18482
+ var _d = MOUSE_EVENT_INFO.getPageXY(e), pageX = _d[0], pageY = _d[1];
18483
+ var deltaX = (pageX - _this.initX) / _this.zoomScale;
18484
+ var deltaY = (pageY - _this.initY) / _this.zoomScale;
18327
18485
  if ((_b = (_a = _this.handler).onDragging) === null || _b === void 0 ? void 0 : _b.call(_a, _this.context, e, _this.initValue, deltaX, deltaY)) {
18328
18486
  (_c = _this.onSubmit) === null || _c === void 0 ? void 0 : _c.call(_this, _this.context, _this.trigger);
18329
18487
  }
@@ -18336,30 +18494,136 @@ var DragAndDropHelper = /** @class */ (function () {
18336
18494
  (_c = _this.onSubmit) === null || _c === void 0 ? void 0 : _c.call(_this, _this.context, _this.trigger);
18337
18495
  }
18338
18496
  };
18339
- trigger.addEventListener(MOUSE_EVENT_NAMES.MOUSEDOWN, this.onMouseDown);
18497
+ trigger.addEventListener(MOUSE_EVENT_INFO.MOUSEDOWN, this.onMouseDown);
18340
18498
  }
18341
18499
  /**
18342
18500
  * Dispose this object, remove all event listeners that has been attached
18343
18501
  */
18344
18502
  DragAndDropHelper.prototype.dispose = function () {
18345
- this.trigger.removeEventListener(MOUSE_EVENT_NAMES.MOUSEDOWN, this.onMouseDown);
18503
+ this.trigger.removeEventListener(MOUSE_EVENT_INFO.MOUSEDOWN, this.onMouseDown);
18346
18504
  this.removeDocumentEvents();
18347
18505
  };
18348
18506
  DragAndDropHelper.prototype.addDocumentEvents = function () {
18349
18507
  var doc = this.trigger.ownerDocument;
18350
- doc.addEventListener(MOUSE_EVENT_NAMES.MOUSEMOVE, this.onMouseMove, true /*useCapture*/);
18351
- doc.addEventListener(MOUSE_EVENT_NAMES.MOUSEUP, this.onMouseUp, true /*useCapture*/);
18508
+ doc.addEventListener(MOUSE_EVENT_INFO.MOUSEMOVE, this.onMouseMove, true /*useCapture*/);
18509
+ doc.addEventListener(MOUSE_EVENT_INFO.MOUSEUP, this.onMouseUp, true /*useCapture*/);
18352
18510
  };
18353
18511
  DragAndDropHelper.prototype.removeDocumentEvents = function () {
18354
18512
  var doc = this.trigger.ownerDocument;
18355
- doc.removeEventListener(MOUSE_EVENT_NAMES.MOUSEMOVE, this.onMouseMove, true /*useCapture*/);
18356
- doc.removeEventListener(MOUSE_EVENT_NAMES.MOUSEUP, this.onMouseUp, true /*useCapture*/);
18513
+ doc.removeEventListener(MOUSE_EVENT_INFO.MOUSEMOVE, this.onMouseMove, true /*useCapture*/);
18514
+ doc.removeEventListener(MOUSE_EVENT_INFO.MOUSEUP, this.onMouseUp, true /*useCapture*/);
18357
18515
  };
18358
18516
  return DragAndDropHelper;
18359
18517
  }());
18360
18518
  exports.default = DragAndDropHelper;
18361
18519
 
18362
18520
 
18521
+ /***/ }),
18522
+
18523
+ /***/ "./packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/AutoFormat.ts":
18524
+ /*!********************************************************************************!*\
18525
+ !*** ./packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/AutoFormat.ts ***!
18526
+ \********************************************************************************/
18527
+ /*! no static exports found */
18528
+ /***/ (function(module, exports, __webpack_require__) {
18529
+
18530
+ "use strict";
18531
+
18532
+ Object.defineProperty(exports, "__esModule", { value: true });
18533
+ var specialCharacters = /[`!@#$%^&*()_+\=\[\]{};':"\\|,.<>\/?~]/;
18534
+ /**
18535
+ * Automatically transform -- into hyphen, if typed between two words.
18536
+ */
18537
+ var AutoFormat = /** @class */ (function () {
18538
+ function AutoFormat() {
18539
+ }
18540
+ /**
18541
+ * Get a friendly name of this plugin
18542
+ */
18543
+ AutoFormat.prototype.getName = function () {
18544
+ return 'AutoFormat';
18545
+ };
18546
+ /**
18547
+ * Initialize this plugin
18548
+ * @param editor The editor instance
18549
+ */
18550
+ AutoFormat.prototype.initialize = function (editor) {
18551
+ this.editor = editor;
18552
+ };
18553
+ /**
18554
+ * Dispose this plugin
18555
+ */
18556
+ AutoFormat.prototype.dispose = function () {
18557
+ this.editor = null;
18558
+ };
18559
+ /**
18560
+ * Handle events triggered from editor
18561
+ * @param event PluginEvent object
18562
+ */
18563
+ AutoFormat.prototype.onPluginEvent = function (event) {
18564
+ var _this = this;
18565
+ if (event.eventType === 7 /* ContentChanged */ ||
18566
+ event.eventType === 5 /* MouseDown */ ||
18567
+ event.eventType === 6 /* MouseUp */) {
18568
+ this.lastKeyTyped = '';
18569
+ }
18570
+ if (event.eventType === 0 /* KeyDown */) {
18571
+ var keyTyped = event.rawEvent.key;
18572
+ if (keyTyped.length > 1) {
18573
+ this.lastKeyTyped = '';
18574
+ }
18575
+ if (this.lastKeyTyped === '-' &&
18576
+ !specialCharacters.test(keyTyped) &&
18577
+ keyTyped !== ' ' &&
18578
+ keyTyped !== '-') {
18579
+ var searcher = this.editor.getContentSearcherOfCursor(event);
18580
+ var textBeforeCursor = searcher.getSubStringBefore(3);
18581
+ var dashes = searcher.getSubStringBefore(2);
18582
+ var isPrecededByADash = textBeforeCursor[0] === '-';
18583
+ var isPrecededByASpace = textBeforeCursor[0] === ' ';
18584
+ if (isPrecededByADash ||
18585
+ isPrecededByASpace ||
18586
+ specialCharacters.test(textBeforeCursor[0]) ||
18587
+ dashes !== '--') {
18588
+ return;
18589
+ }
18590
+ var textRange_1 = searcher.getRangeFromText(dashes, true /* exactMatch */);
18591
+ var nodeHyphen_1 = document.createTextNode('—');
18592
+ this.editor.addUndoSnapshot(function () {
18593
+ textRange_1.deleteContents();
18594
+ textRange_1.insertNode(nodeHyphen_1);
18595
+ _this.editor.select(nodeHyphen_1, -1 /* End */);
18596
+ }, null /*changeSource*/, true /*canUndoByBackspace*/);
18597
+ //After the substitution the last key typed needs to be cleaned
18598
+ this.lastKeyTyped = '';
18599
+ }
18600
+ else {
18601
+ this.lastKeyTyped = keyTyped;
18602
+ }
18603
+ }
18604
+ };
18605
+ return AutoFormat;
18606
+ }());
18607
+ exports.default = AutoFormat;
18608
+
18609
+
18610
+ /***/ }),
18611
+
18612
+ /***/ "./packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/index.ts":
18613
+ /*!***************************************************************************!*\
18614
+ !*** ./packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/index.ts ***!
18615
+ \***************************************************************************/
18616
+ /*! no static exports found */
18617
+ /***/ (function(module, exports, __webpack_require__) {
18618
+
18619
+ "use strict";
18620
+
18621
+ Object.defineProperty(exports, "__esModule", { value: true });
18622
+ exports.AutoFormat = void 0;
18623
+ var AutoFormat_1 = __webpack_require__(/*! ./AutoFormat */ "./packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/AutoFormat.ts");
18624
+ Object.defineProperty(exports, "AutoFormat", { enumerable: true, get: function () { return AutoFormat_1.default; } });
18625
+
18626
+
18363
18627
  /***/ }),
18364
18628
 
18365
18629
  /***/ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/ContentEdit.ts":
@@ -18373,6 +18637,7 @@ exports.default = DragAndDropHelper;
18373
18637
 
18374
18638
  Object.defineProperty(exports, "__esModule", { value: true });
18375
18639
  var getAllFeatures_1 = __webpack_require__(/*! ./getAllFeatures */ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/getAllFeatures.ts");
18640
+ var lib_1 = __webpack_require__(/*! roosterjs-editor-dom/lib */ "./packages/roosterjs-editor-dom/lib/index.ts");
18376
18641
  /**
18377
18642
  * An editor plugin to handle content edit event.
18378
18643
  * The following cases are included:
@@ -18409,7 +18674,7 @@ var ContentEdit = /** @class */ (function () {
18409
18674
  var _this = this;
18410
18675
  var features = [];
18411
18676
  var allFeatures = (0, getAllFeatures_1.default)();
18412
- Object.keys(allFeatures).forEach(function (key) {
18677
+ (0, lib_1.getObjectKeys)(allFeatures).forEach(function (key) {
18413
18678
  var feature = allFeatures[key];
18414
18679
  var hasSettingForKey = _this.settingsOverride && _this.settingsOverride[key] !== undefined;
18415
18680
  if ((hasSettingForKey && _this.settingsOverride[key]) ||
@@ -18757,8 +19022,8 @@ exports.EntityFeatures = {
18757
19022
 
18758
19023
  Object.defineProperty(exports, "__esModule", { value: true });
18759
19024
  exports.ListFeatures = void 0;
18760
- var getListStyle_1 = __webpack_require__(/*! ../utils/getListStyle */ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListStyle.ts");
18761
- var getListType_1 = __webpack_require__(/*! ../utils/getListType */ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListType.ts");
19025
+ var getAutoBulletListStyle_1 = __webpack_require__(/*! ../utils/getAutoBulletListStyle */ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoBulletListStyle.ts");
19026
+ var getAutoNumberingListStyle_1 = __webpack_require__(/*! ../utils/getAutoNumberingListStyle */ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoNumberingListStyle.ts");
18762
19027
  var roosterjs_editor_api_1 = __webpack_require__(/*! roosterjs-editor-api */ "./packages/roosterjs-editor-api/lib/index.ts");
18763
19028
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
18764
19029
  /**
@@ -18883,15 +19148,10 @@ var AutoBullet = {
18883
19148
  if (!cacheGetListElement(event, editor)) {
18884
19149
  var searcher = editor.getContentSearcherOfCursor(event);
18885
19150
  var textBeforeCursor = searcher.getSubStringBefore(4);
18886
- var listTrigger = function (text) {
18887
- return editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)
18888
- ? (0, getListType_1.default)(text)
18889
- : isAListPattern(text);
18890
- };
18891
19151
  // Auto list is triggered if:
18892
19152
  // 1. Text before cursor exactly matches '*', '-' or '1.'
18893
19153
  // 2. There's no non-text inline entities before cursor
18894
- return listTrigger(textBeforeCursor) && !searcher.getNearestNonTextInlineElement();
19154
+ return isAListPattern(textBeforeCursor) && !searcher.getNearestNonTextInlineElement();
18895
19155
  }
18896
19156
  return false;
18897
19157
  },
@@ -18904,36 +19164,92 @@ var AutoBullet = {
18904
19164
  var searcher = editor.getContentSearcherOfCursor();
18905
19165
  var textBeforeCursor = searcher.getSubStringBefore(4);
18906
19166
  var textRange = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/);
18907
- var listType = 0 /* None */;
18908
- var listStyle;
18909
- if (editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)) {
18910
- listType = (0, getListType_1.default)(textBeforeCursor);
18911
- listStyle = (0, getListStyle_1.default)(textBeforeCursor, listType);
18912
- }
18913
- else {
18914
- listType =
18915
- textBeforeCursor.indexOf('*') == 0 || textBeforeCursor.indexOf('-') == 0
18916
- ? 2 /* Unordered */
18917
- : isAListPattern(textBeforeCursor)
18918
- ? 1 /* Ordered */
18919
- : 0 /* None */;
18920
- }
18921
19167
  if (!textRange) {
18922
19168
  // no op if the range can't be found
18923
19169
  }
18924
- else if (listType === 2 /* Unordered */) {
19170
+ else if (textBeforeCursor.indexOf('*') == 0 ||
19171
+ textBeforeCursor.indexOf('-') == 0) {
18925
19172
  prepareAutoBullet(editor, textRange);
18926
- (0, roosterjs_editor_api_1.toggleBullet)(editor, listStyle);
19173
+ (0, roosterjs_editor_api_1.toggleBullet)(editor);
18927
19174
  }
18928
- else if (listType === 1 /* Ordered */) {
19175
+ else if (isAListPattern(textBeforeCursor)) {
18929
19176
  prepareAutoBullet(editor, textRange);
18930
- (0, roosterjs_editor_api_1.toggleNumbering)(editor, undefined /* startNumber*/, listStyle);
19177
+ (0, roosterjs_editor_api_1.toggleNumbering)(editor);
19178
+ }
19179
+ else if ((regions = editor.getSelectedRegions()) && regions.length == 1) {
19180
+ var num = parseInt(textBeforeCursor);
19181
+ prepareAutoBullet(editor, textRange);
19182
+ (0, roosterjs_editor_api_1.toggleNumbering)(editor, num);
19183
+ }
19184
+ (_a = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/)) === null || _a === void 0 ? void 0 : _a.deleteContents();
19185
+ }, null /*changeSource*/, true /*canUndoByBackspace*/);
19186
+ },
19187
+ };
19188
+ /**
19189
+ * Requires @see ExperimentalFeatures.AutoFormatList to be enabled
19190
+ * AutoBulletList edit feature, provides the ability to automatically convert current line into a bullet list.
19191
+ */
19192
+ var AutoBulletList = {
19193
+ keys: [32 /* SPACE */],
19194
+ shouldHandleEvent: function (event, editor) {
19195
+ if (!cacheGetListElement(event, editor) &&
19196
+ editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)) {
19197
+ return shouldTriggerList(event, editor, getAutoBulletListStyle_1.default);
19198
+ }
19199
+ return false;
19200
+ },
19201
+ handleEvent: function (event, editor) {
19202
+ editor.insertContent('&nbsp;');
19203
+ event.rawEvent.preventDefault();
19204
+ editor.addUndoSnapshot(function () {
19205
+ var _a;
19206
+ var searcher = editor.getContentSearcherOfCursor();
19207
+ var textBeforeCursor = searcher.getSubStringBefore(5);
19208
+ var textRange = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/);
19209
+ var listStyle = (0, getAutoBulletListStyle_1.default)(textBeforeCursor);
19210
+ if (textRange) {
19211
+ prepareAutoBullet(editor, textRange);
19212
+ (0, roosterjs_editor_api_1.toggleBullet)(editor, listStyle);
19213
+ }
19214
+ (_a = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/)) === null || _a === void 0 ? void 0 : _a.deleteContents();
19215
+ }, null /*changeSource*/, true /*canUndoByBackspace*/);
19216
+ },
19217
+ };
19218
+ /**
19219
+ * Requires @see ExperimentalFeatures.AutoFormatList to be enabled
19220
+ * AutoNumberingList edit feature, provides the ability to automatically convert current line into a numbering list.
19221
+ */
19222
+ var AutoNumberingList = {
19223
+ keys: [32 /* SPACE */],
19224
+ shouldHandleEvent: function (event, editor) {
19225
+ if (!cacheGetListElement(event, editor) &&
19226
+ editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)) {
19227
+ return shouldTriggerList(event, editor, getAutoNumberingListStyle_1.default);
19228
+ }
19229
+ return false;
19230
+ },
19231
+ handleEvent: function (event, editor) {
19232
+ editor.insertContent('&nbsp;');
19233
+ event.rawEvent.preventDefault();
19234
+ editor.addUndoSnapshot(function () {
19235
+ var _a;
19236
+ var regions;
19237
+ var searcher = editor.getContentSearcherOfCursor();
19238
+ var textBeforeCursor = searcher.getSubStringBefore(5);
19239
+ var textRange = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/);
19240
+ var listStyle = (0, getAutoNumberingListStyle_1.default)(textBeforeCursor);
19241
+ if (!textRange) {
19242
+ // no op if the range can't be found
18931
19243
  }
18932
19244
  else if ((regions = editor.getSelectedRegions()) && regions.length == 1) {
18933
19245
  var num = parseInt(textBeforeCursor);
18934
19246
  prepareAutoBullet(editor, textRange);
18935
19247
  (0, roosterjs_editor_api_1.toggleNumbering)(editor, num, listStyle);
18936
19248
  }
19249
+ else {
19250
+ prepareAutoBullet(editor, textRange);
19251
+ (0, roosterjs_editor_api_1.toggleNumbering)(editor, undefined /* startNumber*/, listStyle);
19252
+ }
18937
19253
  (_a = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/)) === null || _a === void 0 ? void 0 : _a.deleteContents();
18938
19254
  }, null /*changeSource*/, true /*canUndoByBackspace*/);
18939
19255
  },
@@ -19000,6 +19316,11 @@ function cacheGetListElement(event, editor) {
19000
19316
  var listElement = li && (0, roosterjs_editor_dom_1.getTagOfNode)(li) == 'LI' && editor.getElementAtCursor('UL,OL', li);
19001
19317
  return listElement ? [listElement, li] : null;
19002
19318
  }
19319
+ function shouldTriggerList(event, editor, getListStyle) {
19320
+ var searcher = editor.getContentSearcherOfCursor(event);
19321
+ var textBeforeCursor = searcher.getSubStringBefore(5);
19322
+ return !searcher.getNearestNonTextInlineElement() && getListStyle(textBeforeCursor);
19323
+ }
19003
19324
  /**
19004
19325
  * @internal
19005
19326
  */
@@ -19012,6 +19333,8 @@ exports.ListFeatures = {
19012
19333
  mergeInNewLineWhenBackspaceOnFirstChar: MergeInNewLine,
19013
19334
  maintainListChain: MaintainListChain,
19014
19335
  maintainListChainWhenDelete: MaintainListChainWhenDelete,
19336
+ autoNumberingList: AutoNumberingList,
19337
+ autoBulletList: AutoBulletList,
19015
19338
  };
19016
19339
 
19017
19340
 
@@ -19352,7 +19675,7 @@ var CHILD_PARENT_TAG_MAP = {
19352
19675
  TH: 'TABLE',
19353
19676
  LI: 'OL,UL',
19354
19677
  };
19355
- var CHILD_SELECTOR = Object.keys(CHILD_PARENT_TAG_MAP).join(',');
19678
+ var CHILD_SELECTOR = (0, roosterjs_editor_dom_1.getObjectKeys)(CHILD_PARENT_TAG_MAP).join(',');
19356
19679
  /**
19357
19680
  * InsertLineBeforeStructuredNode edit feature, provides the ability to insert an empty line before
19358
19681
  * a structured element (bullet/numbering list, blockquote, table) if the element is at beginning of
@@ -19568,15 +19891,6 @@ exports.TableFeatures = {
19568
19891
 
19569
19892
  "use strict";
19570
19893
 
19571
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
19572
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
19573
- if (ar || !(i in from)) {
19574
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
19575
- ar[i] = from[i];
19576
- }
19577
- }
19578
- return to.concat(ar || Array.prototype.slice.call(from));
19579
- };
19580
19894
  Object.defineProperty(exports, "__esModule", { value: true });
19581
19895
  exports.TextFeatures = void 0;
19582
19896
  var roosterjs_editor_api_1 = __webpack_require__(/*! roosterjs-editor-api */ "./packages/roosterjs-editor-api/lib/index.ts");
@@ -19652,29 +19966,18 @@ var OutdentWhenTabText = {
19652
19966
  },
19653
19967
  };
19654
19968
  /**
19655
- * Requires @see ExperimentalFeatures.AutoHyphen to be enabled
19969
+ * @deprecated
19656
19970
  * Automatically transform -- into hyphen, if typed between two words.
19657
19971
  */
19658
19972
  var AutoHyphen = {
19659
- keys: __spreadArray(__spreadArray([], createNumberSequenceArray(48, 57), true), createNumberSequenceArray(65, 90), true),
19973
+ keys: [],
19660
19974
  shouldHandleEvent: function (event, editor) {
19661
- var searcher = editor.getContentSearcherOfCursor(event);
19662
- var textBeforeCursor = searcher.getSubStringBefore(3);
19663
- var hasDashes = textBeforeCursor[2] === '-' && textBeforeCursor[1] === '-';
19664
- var noSpace = textBeforeCursor[0] !== ' ';
19665
- return hasDashes && noSpace && editor.isFeatureEnabled("AutoHyphen" /* AutoHyphen */);
19975
+ return false;
19666
19976
  },
19667
19977
  handleEvent: function (event, editor) {
19668
- var searcher = editor.getContentSearcherOfCursor(event);
19669
- var dashes = searcher.getSubStringBefore(2);
19670
- var textRange = searcher.getRangeFromText(dashes, true /* exactMatch */);
19671
- var nodeHyphen = document.createTextNode('—');
19672
- editor.addUndoSnapshot(function () {
19673
- textRange.deleteContents();
19674
- textRange.insertNode(nodeHyphen);
19675
- editor.select(nodeHyphen, -1 /* End */);
19676
- }, null /*changeSource*/, true /*canUndoByBackspace*/);
19978
+ return false;
19677
19979
  },
19980
+ defaultDisabled: true,
19678
19981
  };
19679
19982
  /**
19680
19983
  * @internal
@@ -19740,9 +20043,6 @@ function insertTab(editor, event) {
19740
20043
  editor.deleteNode(span2);
19741
20044
  }
19742
20045
  }
19743
- function createNumberSequenceArray(start, end) {
19744
- return new Array(end - start).fill(start).map(function (keyCodeValue, i) { return i + start; });
19745
- }
19746
20046
 
19747
20047
 
19748
20048
  /***/ }),
@@ -19809,10 +20109,48 @@ Object.defineProperty(exports, "getAllFeatures", { enumerable: true, get: functi
19809
20109
 
19810
20110
  /***/ }),
19811
20111
 
19812
- /***/ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListStyle.ts":
19813
- /*!*****************************************************************************************!*\
19814
- !*** ./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListStyle.ts ***!
19815
- \*****************************************************************************************/
20112
+ /***/ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoBulletListStyle.ts":
20113
+ /*!***************************************************************************************************!*\
20114
+ !*** ./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoBulletListStyle.ts ***!
20115
+ \***************************************************************************************************/
20116
+ /*! no static exports found */
20117
+ /***/ (function(module, exports, __webpack_require__) {
20118
+
20119
+ "use strict";
20120
+
20121
+ Object.defineProperty(exports, "__esModule", { value: true });
20122
+ var bulletListType = {
20123
+ '*': 1 /* Disc */,
20124
+ '-': 2 /* Dash */,
20125
+ '--': 3 /* Square */,
20126
+ '->': 5 /* LongArrow */,
20127
+ '-->': 5 /* LongArrow */,
20128
+ '=>': 6 /* UnfilledArrow */,
20129
+ '>': 4 /* ShortArrow */,
20130
+ '—': 7 /* Hyphen */,
20131
+ };
20132
+ var identifyBulletListType = function (bullet) {
20133
+ return bulletListType[bullet] || null;
20134
+ };
20135
+ /**
20136
+ * @internal
20137
+ * @param textBeforeCursor The trigger character
20138
+ * @returns The style of a bullet list triggered by a string
20139
+ */
20140
+ function getAutoBulletListStyle(textBeforeCursor) {
20141
+ var trigger = textBeforeCursor.trim();
20142
+ var bulletType = identifyBulletListType(trigger);
20143
+ return bulletType;
20144
+ }
20145
+ exports.default = getAutoBulletListStyle;
20146
+
20147
+
20148
+ /***/ }),
20149
+
20150
+ /***/ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoNumberingListStyle.ts":
20151
+ /*!******************************************************************************************************!*\
20152
+ !*** ./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoNumberingListStyle.ts ***!
20153
+ \******************************************************************************************************/
19816
20154
  /*! no static exports found */
19817
20155
  /***/ (function(module, exports, __webpack_require__) {
19818
20156
 
@@ -19821,145 +20159,100 @@ Object.defineProperty(exports, "getAllFeatures", { enumerable: true, get: functi
19821
20159
  var _a, _b, _c, _d, _e, _f;
19822
20160
  Object.defineProperty(exports, "__esModule", { value: true });
19823
20161
  var characters = {
19824
- '.': 0 /* Dot */,
19825
- '-': 1 /* Dash */,
19826
- ')': 2 /* Parenthesis */,
19827
- '(': 3 /* DoubleParenthesis */,
20162
+ '.': 1 /* Dot */,
20163
+ '-': 2 /* Dash */,
20164
+ ')': 3 /* Parenthesis */,
20165
+ '(': 4 /* DoubleParenthesis */,
19828
20166
  };
19829
- var identifyCharacter = function (text) {
19830
- var char = text[0] === '(' ? text[0] : text[text.length - 1];
19831
- return characters[char];
20167
+ var identifyCharacter = function (text, secondSeparator) {
20168
+ var charType = characters[text];
20169
+ return charType === 4 /* DoubleParenthesis */ && secondSeparator !== ')'
20170
+ ? undefined
20171
+ : charType;
19832
20172
  };
19833
20173
  var identifyNumberingType = function (text) {
19834
- var char = text[0] === '(' ? text[1] : text[0];
19835
- if (!isNaN(parseInt(char))) {
19836
- return 0 /* Decimal */;
20174
+ if (!isNaN(parseInt(text))) {
20175
+ return 1 /* Decimal */;
19837
20176
  }
19838
- else if (/[a-z]+/g.test(char)) {
19839
- if (char === 'i') {
19840
- return 3 /* LowerRoman */;
20177
+ else if (/[a-z]+/g.test(text)) {
20178
+ if (text === 'i') {
20179
+ return 4 /* LowerRoman */;
19841
20180
  }
19842
20181
  else {
19843
- return 1 /* LowerAlpha */;
20182
+ return 2 /* LowerAlpha */;
19844
20183
  }
19845
20184
  }
19846
- else if (/[A-Z]+/g.test(char)) {
19847
- if (char === 'I') {
19848
- return 4 /* UpperRoman */;
20185
+ else if (/[A-Z]+/g.test(text)) {
20186
+ if (text === 'I') {
20187
+ return 5 /* UpperRoman */;
19849
20188
  }
19850
20189
  else {
19851
- return 2 /* UpperAlpha */;
20190
+ return 3 /* UpperAlpha */;
19852
20191
  }
19853
20192
  }
19854
20193
  };
19855
20194
  var numberingListTypes = (_a = {},
19856
- _a[0 /* Decimal */] = function (char) { return DecimalsTypes[char]; },
19857
- _a[1 /* LowerAlpha */] = function (char) { return LowerAlphaTypes[char]; },
19858
- _a[2 /* UpperAlpha */] = function (char) { return UpperAlphaTypes[char]; },
19859
- _a[3 /* LowerRoman */] = function (char) { return LowerRomanTypes[char]; },
19860
- _a[4 /* UpperRoman */] = function (char) { return UpperRomanTypes[char]; },
20195
+ _a[1 /* Decimal */] = function (char) { return DecimalsTypes[char] || null; },
20196
+ _a[2 /* LowerAlpha */] = function (char) { return LowerAlphaTypes[char] || null; },
20197
+ _a[3 /* UpperAlpha */] = function (char) { return UpperAlphaTypes[char] || null; },
20198
+ _a[4 /* LowerRoman */] = function (char) { return LowerRomanTypes[char] || null; },
20199
+ _a[5 /* UpperRoman */] = function (char) { return UpperRomanTypes[char] || null; },
19861
20200
  _a);
19862
20201
  var UpperRomanTypes = (_b = {},
19863
- _b[0 /* Dot */] = 16 /* UpperRoman */,
19864
- _b[1 /* Dash */] = 19 /* UpperRomanDash */,
19865
- _b[2 /* Parenthesis */] = 17 /* UpperRomanParenthesis */,
19866
- _b[3 /* DoubleParenthesis */] = 18 /* UpperRomanDoubleParenthesis */,
20202
+ _b[1 /* Dot */] = 17 /* UpperRoman */,
20203
+ _b[2 /* Dash */] = 20 /* UpperRomanDash */,
20204
+ _b[3 /* Parenthesis */] = 18 /* UpperRomanParenthesis */,
20205
+ _b[4 /* DoubleParenthesis */] = 19 /* UpperRomanDoubleParenthesis */,
19867
20206
  _b);
19868
20207
  var LowerRomanTypes = (_c = {},
19869
- _c[0 /* Dot */] = 12 /* LowerRoman */,
19870
- _c[1 /* Dash */] = 15 /* LowerRomanDash */,
19871
- _c[2 /* Parenthesis */] = 13 /* LowerRomanParenthesis */,
19872
- _c[3 /* DoubleParenthesis */] = 14 /* LowerRomanDoubleParenthesis */,
20208
+ _c[1 /* Dot */] = 13 /* LowerRoman */,
20209
+ _c[2 /* Dash */] = 16 /* LowerRomanDash */,
20210
+ _c[3 /* Parenthesis */] = 14 /* LowerRomanParenthesis */,
20211
+ _c[4 /* DoubleParenthesis */] = 15 /* LowerRomanDoubleParenthesis */,
19873
20212
  _c);
19874
20213
  var UpperAlphaTypes = (_d = {},
19875
- _d[0 /* Dot */] = 8 /* UpperAlpha */,
19876
- _d[1 /* Dash */] = 11 /* UpperAlphaDash */,
19877
- _d[2 /* Parenthesis */] = 9 /* UpperAlphaParenthesis */,
19878
- _d[3 /* DoubleParenthesis */] = 10 /* UpperAlphaDoubleParenthesis */,
20214
+ _d[1 /* Dot */] = 9 /* UpperAlpha */,
20215
+ _d[2 /* Dash */] = 12 /* UpperAlphaDash */,
20216
+ _d[3 /* Parenthesis */] = 10 /* UpperAlphaParenthesis */,
20217
+ _d[4 /* DoubleParenthesis */] = 11 /* UpperAlphaDoubleParenthesis */,
19879
20218
  _d);
19880
20219
  var LowerAlphaTypes = (_e = {},
19881
- _e[0 /* Dot */] = 4 /* LowerAlpha */,
19882
- _e[1 /* Dash */] = 7 /* LowerAlphaDash */,
19883
- _e[2 /* Parenthesis */] = 5 /* LowerAlphaParenthesis */,
19884
- _e[3 /* DoubleParenthesis */] = 6 /* LowerAlphaDoubleParenthesis */,
20220
+ _e[1 /* Dot */] = 5 /* LowerAlpha */,
20221
+ _e[2 /* Dash */] = 8 /* LowerAlphaDash */,
20222
+ _e[3 /* Parenthesis */] = 6 /* LowerAlphaParenthesis */,
20223
+ _e[4 /* DoubleParenthesis */] = 7 /* LowerAlphaDoubleParenthesis */,
19885
20224
  _e);
19886
20225
  var DecimalsTypes = (_f = {},
19887
- _f[0 /* Dot */] = 0 /* Decimal */,
19888
- _f[1 /* Dash */] = 1 /* DecimalDash */,
19889
- _f[2 /* Parenthesis */] = 2 /* DecimalParenthesis */,
19890
- _f[3 /* DoubleParenthesis */] = 3 /* DecimalDoubleParenthesis */,
20226
+ _f[1 /* Dot */] = 1 /* Decimal */,
20227
+ _f[2 /* Dash */] = 2 /* DecimalDash */,
20228
+ _f[3 /* Parenthesis */] = 3 /* DecimalParenthesis */,
20229
+ _f[4 /* DoubleParenthesis */] = 4 /* DecimalDoubleParenthesis */,
19891
20230
  _f);
19892
- var bulletListType = {
19893
- '*': 0 /* Disc */,
19894
- '-': 1 /* Dash */,
19895
- '--': 2 /* Square */,
19896
- '->': 4 /* LongArrow */,
19897
- '-->': 4 /* LongArrow */,
19898
- '=>': 5 /* UnfilledArrow */,
19899
- '>': 3 /* ShortArrow */,
19900
- };
19901
- var identifyNumberingListType = function (textBeforeCursor) {
19902
- var numbering = textBeforeCursor.replace(/\s/g, '');
19903
- var char = identifyCharacter(numbering);
19904
- var numberingType = identifyNumberingType(numbering);
19905
- return numberingListTypes[numberingType](char);
19906
- };
19907
- var identifyBulletListType = function (textBeforeCursor) {
19908
- var bullet = textBeforeCursor.replace(/\s/g, '');
19909
- return bulletListType[bullet];
19910
- };
19911
- /**
19912
- * @internal
19913
- * @param textBeforeCursor The trigger character
19914
- * @param listType The type of the list (ordered or unordered)
19915
- * @returns the style of the list
19916
- */
19917
- function getListStyle(textBeforeCursor, listType) {
19918
- if (listType === 1 /* Ordered */) {
19919
- return identifyNumberingListType(textBeforeCursor);
19920
- }
19921
- else {
19922
- return identifyBulletListType(textBeforeCursor);
20231
+ var identifyNumberingListType = function (numbering) {
20232
+ // If the marker length is 3, the marker style is double parenthis such as (1), (A). Then the number is second character of the string and the separator is first character and last character.
20233
+ var separator = numbering.length === 3 ? numbering[0] : numbering[1];
20234
+ var secondSeparator = numbering.length === 3 ? numbering[2] : undefined;
20235
+ var char = identifyCharacter(separator, secondSeparator);
20236
+ // if separator is not valid, no need to check if the number is valid.
20237
+ if (char) {
20238
+ var number = numbering.length === 3 ? numbering[1] : numbering[0];
20239
+ var numberingType = identifyNumberingType(number);
20240
+ return numberingType ? numberingListTypes[numberingType](char) : null;
19923
20241
  }
19924
- }
19925
- exports.default = getListStyle;
19926
-
19927
-
19928
- /***/ }),
19929
-
19930
- /***/ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListType.ts":
19931
- /*!****************************************************************************************!*\
19932
- !*** ./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListType.ts ***!
19933
- \****************************************************************************************/
19934
- /*! no static exports found */
19935
- /***/ (function(module, exports, __webpack_require__) {
19936
-
19937
- "use strict";
19938
-
19939
- Object.defineProperty(exports, "__esModule", { value: true });
19940
- function isABulletList(textBeforeCursor) {
19941
- var hasTriggers = ['*', '-', '>'].indexOf(textBeforeCursor[0]) > -1;
19942
- var REGEX = /^(.*?)=>|^(.*?)->|^(.*?)-->|^(.*?)=>|^(.*?)--/;
19943
- return hasTriggers || REGEX.test(textBeforeCursor);
19944
- }
19945
- function isANumberingList(textBeforeCursor) {
19946
- var REGEX = /^([1-9,a-z, i,A-Z,I]{1,2}\.|[1-9,a-z, i,A-Z,I]{1,2}\)|[1-9,a-z, i,A-Z,I]{1,2}\-|\([1-9,a-z, i,A-Z,I]{1,2}\))$/;
19947
- return REGEX.test(textBeforeCursor.replace(/\s/g, ''));
19948
- }
20242
+ return null;
20243
+ };
19949
20244
  /**
19950
20245
  * @internal
19951
20246
  * @param textBeforeCursor The trigger character
19952
- * @returns If the list is ordered or unordered
20247
+ * @returns The style of a numbering list triggered by a string
19953
20248
  */
19954
- function getListType(textBeforeCursor) {
19955
- if (isABulletList(textBeforeCursor)) {
19956
- return 2 /* Unordered */;
19957
- }
19958
- else if (isANumberingList(textBeforeCursor)) {
19959
- return 1 /* Ordered */;
19960
- }
20249
+ function getAutoNumberingListStyle(textBeforeCursor) {
20250
+ var trigger = textBeforeCursor.trim();
20251
+ // the marker must be a combination of 2 or 3 characters, so if the length is less than 2, no need to check
20252
+ var numberingType = trigger.length > 1 ? identifyNumberingListType(trigger) : null;
20253
+ return numberingType;
19961
20254
  }
19962
- exports.default = getListType;
20255
+ exports.default = getAutoNumberingListStyle;
19963
20256
 
19964
20257
 
19965
20258
  /***/ }),
@@ -20751,7 +21044,7 @@ var ImageEdit = /** @class */ (function () {
20751
21044
  this.editor = editor;
20752
21045
  this.disposer = editor.addDomEventHandler('blur', this.onBlur);
20753
21046
  // Read current enabled features from editor to determine which editing operations are allowed
20754
- Object.keys(FeatureToOperationMap).forEach(function (key) {
21047
+ (0, roosterjs_editor_dom_1.getObjectKeys)(FeatureToOperationMap).forEach(function (key) {
20755
21048
  _this.allowedOperations |= _this.editor.isFeatureEnabled(key)
20756
21049
  ? FeatureToOperationMap[key]
20757
21050
  : 0;
@@ -20891,7 +21184,7 @@ var ImageEdit = /** @class */ (function () {
20891
21184
  var isExperimentalHandlesEnabled = this.editor.isFeatureEnabled("AdaptiveHandlesResizer" /* AdaptiveHandlesResizer */);
20892
21185
  // Get HTML for all edit elements (resize handle, rotate handle, crop handle and overlay, ...) and create HTML element
20893
21186
  var options = {
20894
- borderColor: this.options.borderColor,
21187
+ borderColor: getColorString(this.options.borderColor, this.editor.isDarkMode()),
20895
21188
  rotateIconHTML: this.options.rotateIconHTML,
20896
21189
  rotateHandleBackColor: this.editor.isDarkMode()
20897
21190
  ? DARK_MODE_BGCOLOR
@@ -20900,7 +21193,7 @@ var ImageEdit = /** @class */ (function () {
20900
21193
  handlesExperimentalFeatures: isExperimentalHandlesEnabled,
20901
21194
  };
20902
21195
  var htmlData = [(0, Resizer_1.getResizeBordersHTML)(options)];
20903
- Object.keys(ImageEditHTMLMap).forEach(function (thisOperation) {
21196
+ (0, roosterjs_editor_dom_1.getObjectKeys)(ImageEditHTMLMap).forEach(function (thisOperation) {
20904
21197
  if ((operation & thisOperation) == thisOperation) {
20905
21198
  (0, roosterjs_editor_dom_1.arrayPush)(htmlData, ImageEditHTMLMap[thisOperation](options, _this.onShowResizeHandle));
20906
21199
  }
@@ -21021,6 +21314,12 @@ function isASmallImage(editInfo, isFeatureEnabled) {
21021
21314
  var widthPx = editInfo.widthPx, heightPx = editInfo.heightPx;
21022
21315
  return widthPx && heightPx && widthPx * widthPx < MAX_SMALL_SIZE_IMAGE && isFeatureEnabled;
21023
21316
  }
21317
+ function getColorString(color, isDarkMode) {
21318
+ if (typeof color === 'string') {
21319
+ return color.trim();
21320
+ }
21321
+ return isDarkMode ? color.darkModeColor.trim() : color.lightModeColor.trim();
21322
+ }
21024
21323
 
21025
21324
 
21026
21325
  /***/ }),
@@ -25037,7 +25336,7 @@ var TableResize = /** @class */ (function () {
25037
25336
  break;
25038
25337
  }
25039
25338
  }
25040
- _this.setTableEditor(currentTable, e);
25339
+ _this.setTableEditor(currentTable);
25041
25340
  (_a = _this.tableEditor) === null || _a === void 0 ? void 0 : _a.onMouseMove(x, y);
25042
25341
  };
25043
25342
  this.invalidateTableRects = function () {
@@ -25082,13 +25381,13 @@ var TableResize = /** @class */ (function () {
25082
25381
  break;
25083
25382
  }
25084
25383
  };
25085
- TableResize.prototype.setTableEditor = function (table, e) {
25384
+ TableResize.prototype.setTableEditor = function (table) {
25086
25385
  if (this.tableEditor && table != this.tableEditor.table) {
25087
25386
  this.tableEditor.dispose();
25088
25387
  this.tableEditor = null;
25089
25388
  }
25090
25389
  if (!this.tableEditor && table) {
25091
- this.tableEditor = new TableEditor_1.default(this.editor, table, this.invalidateTableRects, this.onShowHelperElement, e);
25390
+ this.tableEditor = new TableEditor_1.default(this.editor, table, this.invalidateTableRects, this.onShowHelperElement);
25092
25391
  }
25093
25392
  };
25094
25393
  TableResize.prototype.ensureTableRects = function () {
@@ -25332,13 +25631,12 @@ var INSERTER_HOVER_OFFSET = 5;
25332
25631
  * When set a different current table or change current TD, we need to update these areas
25333
25632
  */
25334
25633
  var TableEditor = /** @class */ (function () {
25335
- function TableEditor(editor, table, onChanged, onShowHelperElement, event) {
25634
+ function TableEditor(editor, table, onChanged, onShowHelperElement) {
25336
25635
  var _this = this;
25337
25636
  this.editor = editor;
25338
25637
  this.table = table;
25339
25638
  this.onChanged = onChanged;
25340
25639
  this.onShowHelperElement = onShowHelperElement;
25341
- this.event = event;
25342
25640
  this.onFinishEditing = function () {
25343
25641
  _this.editor.focus();
25344
25642
  _this.editor.select(_this.start, _this.end);
@@ -25384,7 +25682,7 @@ var TableEditor = /** @class */ (function () {
25384
25682
  };
25385
25683
  this.isRTL = (0, roosterjs_editor_dom_1.getComputedStyle)(table, 'direction') == 'rtl';
25386
25684
  this.tableResizer = (0, TableResizer_1.default)(table, editor.getZoomScale(), this.isRTL, this.onStartTableResize, this.onFinishEditing, this.onShowHelperElement);
25387
- this.tableSelector = (0, TableSelector_1.default)(table, editor.getZoomScale(), this.onSelect, this.onShowHelperElement, this.getShouldShowTableSelectorHandler(this.event));
25685
+ this.tableSelector = (0, TableSelector_1.default)(table, editor.getZoomScale(), this.onSelect, this.onShowHelperElement);
25388
25686
  }
25389
25687
  TableEditor.prototype.dispose = function () {
25390
25688
  this.disposeTableResizer();
@@ -25496,13 +25794,6 @@ var TableEditor = /** @class */ (function () {
25496
25794
  }
25497
25795
  this.editor.addUndoSnapshot();
25498
25796
  };
25499
- TableEditor.prototype.getShouldShowTableSelectorHandler = function (e) {
25500
- if ((0, roosterjs_editor_dom_1.safeInstanceOf)(e.currentTarget, 'HTMLElement')) {
25501
- var containerRect_1 = (0, roosterjs_editor_dom_1.normalizeRect)(e.currentTarget.getBoundingClientRect());
25502
- return function (rect) { return containerRect_1.top <= rect.top; };
25503
- }
25504
- return function () { return true; };
25505
- };
25506
25797
  return TableEditor;
25507
25798
  }());
25508
25799
  exports.default = TableEditor;
@@ -25762,11 +26053,7 @@ var TABLE_SELECTOR_ID = '_Table_Selector';
25762
26053
  /**
25763
26054
  * @internal
25764
26055
  */
25765
- function createTableSelector(table, zoomScale, onFinishDragging, onShowHelperElement, shouldShow) {
25766
- var rect = (0, roosterjs_editor_dom_1.normalizeRect)(table.getBoundingClientRect());
25767
- if (!shouldShow(rect)) {
25768
- return undefined;
25769
- }
26056
+ function createTableSelector(table, zoomScale, onFinishDragging, onShowHelperElement) {
25770
26057
  var document = table.ownerDocument;
25771
26058
  var createElementData = {
25772
26059
  tag: 'div',
@@ -25781,7 +26068,6 @@ function createTableSelector(table, zoomScale, onFinishDragging, onShowHelperEle
25781
26068
  var context = {
25782
26069
  table: table,
25783
26070
  zoomScale: zoomScale,
25784
- rect: rect,
25785
26071
  };
25786
26072
  setSelectorDivPosition(context, div);
25787
26073
  var onDragEnd = function (context, event) {
@@ -25797,7 +26083,8 @@ function createTableSelector(table, zoomScale, onFinishDragging, onShowHelperEle
25797
26083
  }
25798
26084
  exports.default = createTableSelector;
25799
26085
  function setSelectorDivPosition(context, trigger) {
25800
- var rect = context.rect;
26086
+ var table = context.table;
26087
+ var rect = (0, roosterjs_editor_dom_1.normalizeRect)(table.getBoundingClientRect());
25801
26088
  if (rect) {
25802
26089
  trigger.style.top = rect.top - TABLE_SELECTOR_LENGTH + "px";
25803
26090
  trigger.style.left = rect.left - TABLE_SELECTOR_LENGTH - 2 + "px";
@@ -26039,30 +26326,42 @@ exports.CompatibleBulletListType = void 0;
26039
26326
  */
26040
26327
  var CompatibleBulletListType;
26041
26328
  (function (CompatibleBulletListType) {
26329
+ /**
26330
+ * Minimum value of the enum
26331
+ */
26332
+ CompatibleBulletListType[CompatibleBulletListType["Min"] = 1] = "Min";
26042
26333
  /**
26043
26334
  * Bullet triggered by *
26044
26335
  */
26045
- CompatibleBulletListType[CompatibleBulletListType["Disc"] = 0] = "Disc";
26336
+ CompatibleBulletListType[CompatibleBulletListType["Disc"] = 1] = "Disc";
26046
26337
  /**
26047
26338
  * Bullet triggered by -
26048
26339
  */
26049
- CompatibleBulletListType[CompatibleBulletListType["Dash"] = 1] = "Dash";
26340
+ CompatibleBulletListType[CompatibleBulletListType["Dash"] = 2] = "Dash";
26050
26341
  /**
26051
26342
  * Bullet triggered by --
26052
26343
  */
26053
- CompatibleBulletListType[CompatibleBulletListType["Square"] = 2] = "Square";
26344
+ CompatibleBulletListType[CompatibleBulletListType["Square"] = 3] = "Square";
26054
26345
  /**
26055
26346
  * Bullet triggered by >
26056
26347
  */
26057
- CompatibleBulletListType[CompatibleBulletListType["ShortArrow"] = 3] = "ShortArrow";
26348
+ CompatibleBulletListType[CompatibleBulletListType["ShortArrow"] = 4] = "ShortArrow";
26058
26349
  /**
26059
26350
  * Bullet triggered by -> or -->
26060
26351
  */
26061
- CompatibleBulletListType[CompatibleBulletListType["LongArrow"] = 4] = "LongArrow";
26352
+ CompatibleBulletListType[CompatibleBulletListType["LongArrow"] = 5] = "LongArrow";
26062
26353
  /**
26063
26354
  * Bullet triggered by =>
26064
26355
  */
26065
- CompatibleBulletListType[CompatibleBulletListType["UnfilledArrow"] = 5] = "UnfilledArrow";
26356
+ CompatibleBulletListType[CompatibleBulletListType["UnfilledArrow"] = 6] = "UnfilledArrow";
26357
+ /**
26358
+ * Bullet triggered by —
26359
+ */
26360
+ CompatibleBulletListType[CompatibleBulletListType["Hyphen"] = 7] = "Hyphen";
26361
+ /**
26362
+ * Maximum value of the enum
26363
+ */
26364
+ CompatibleBulletListType[CompatibleBulletListType["Max"] = 7] = "Max";
26066
26365
  })(CompatibleBulletListType = exports.CompatibleBulletListType || (exports.CompatibleBulletListType = {}));
26067
26366
 
26068
26367
 
@@ -26914,6 +27213,7 @@ var CompatibleExperimentalFeatures;
26914
27213
  */
26915
27214
  CompatibleExperimentalFeatures["AutoFormatList"] = "AutoFormatList";
26916
27215
  /**
27216
+ * @deprecated this feature is always disabled
26917
27217
  * Automatically transform -- into hyphen, if typed between two words.
26918
27218
  */
26919
27219
  CompatibleExperimentalFeatures["AutoHyphen"] = "AutoHyphen";
@@ -27320,86 +27620,94 @@ exports.CompatibleNumberingListType = void 0;
27320
27620
  */
27321
27621
  var CompatibleNumberingListType;
27322
27622
  (function (CompatibleNumberingListType) {
27623
+ /**
27624
+ * Minimum value of the enum
27625
+ */
27626
+ CompatibleNumberingListType[CompatibleNumberingListType["Min"] = 1] = "Min";
27323
27627
  /**
27324
27628
  * Numbering triggered by 1.
27325
27629
  */
27326
- CompatibleNumberingListType[CompatibleNumberingListType["Decimal"] = 0] = "Decimal";
27630
+ CompatibleNumberingListType[CompatibleNumberingListType["Decimal"] = 1] = "Decimal";
27327
27631
  /**
27328
27632
  * Numbering triggered by 1-
27329
27633
  */
27330
- CompatibleNumberingListType[CompatibleNumberingListType["DecimalDash"] = 1] = "DecimalDash";
27634
+ CompatibleNumberingListType[CompatibleNumberingListType["DecimalDash"] = 2] = "DecimalDash";
27331
27635
  /**
27332
27636
  * Numbering triggered by 1)
27333
27637
  */
27334
- CompatibleNumberingListType[CompatibleNumberingListType["DecimalParenthesis"] = 2] = "DecimalParenthesis";
27638
+ CompatibleNumberingListType[CompatibleNumberingListType["DecimalParenthesis"] = 3] = "DecimalParenthesis";
27335
27639
  /**
27336
27640
  * Numbering triggered by (1)
27337
27641
  */
27338
- CompatibleNumberingListType[CompatibleNumberingListType["DecimalDoubleParenthesis"] = 3] = "DecimalDoubleParenthesis";
27642
+ CompatibleNumberingListType[CompatibleNumberingListType["DecimalDoubleParenthesis"] = 4] = "DecimalDoubleParenthesis";
27339
27643
  /**
27340
27644
  * Numbering triggered by a.
27341
27645
  */
27342
- CompatibleNumberingListType[CompatibleNumberingListType["LowerAlpha"] = 4] = "LowerAlpha";
27646
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerAlpha"] = 5] = "LowerAlpha";
27343
27647
  /**
27344
27648
  * Numbering triggered by a)
27345
27649
  */
27346
- CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaParenthesis"] = 5] = "LowerAlphaParenthesis";
27650
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaParenthesis"] = 6] = "LowerAlphaParenthesis";
27347
27651
  /**
27348
27652
  * Numbering triggered by (a)
27349
27653
  */
27350
- CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaDoubleParenthesis"] = 6] = "LowerAlphaDoubleParenthesis";
27654
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaDoubleParenthesis"] = 7] = "LowerAlphaDoubleParenthesis";
27351
27655
  /**
27352
27656
  * Numbering triggered by a-
27353
27657
  */
27354
- CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaDash"] = 7] = "LowerAlphaDash";
27658
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaDash"] = 8] = "LowerAlphaDash";
27355
27659
  /**
27356
27660
  * Numbering triggered by A.
27357
27661
  */
27358
- CompatibleNumberingListType[CompatibleNumberingListType["UpperAlpha"] = 8] = "UpperAlpha";
27662
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperAlpha"] = 9] = "UpperAlpha";
27359
27663
  /**
27360
27664
  * Numbering triggered by A)
27361
27665
  */
27362
- CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaParenthesis"] = 9] = "UpperAlphaParenthesis";
27666
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaParenthesis"] = 10] = "UpperAlphaParenthesis";
27363
27667
  /**
27364
27668
  * Numbering triggered by (A)
27365
27669
  */
27366
- CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaDoubleParenthesis"] = 10] = "UpperAlphaDoubleParenthesis";
27670
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaDoubleParenthesis"] = 11] = "UpperAlphaDoubleParenthesis";
27367
27671
  /**
27368
27672
  * Numbering triggered by A-
27369
27673
  */
27370
- CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaDash"] = 11] = "UpperAlphaDash";
27674
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaDash"] = 12] = "UpperAlphaDash";
27371
27675
  /**
27372
27676
  * Numbering triggered by i.
27373
27677
  */
27374
- CompatibleNumberingListType[CompatibleNumberingListType["LowerRoman"] = 12] = "LowerRoman";
27678
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerRoman"] = 13] = "LowerRoman";
27375
27679
  /**
27376
27680
  * Numbering triggered by i)
27377
27681
  */
27378
- CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanParenthesis"] = 13] = "LowerRomanParenthesis";
27682
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanParenthesis"] = 14] = "LowerRomanParenthesis";
27379
27683
  /**
27380
27684
  * Numbering triggered by (i)
27381
27685
  */
27382
- CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanDoubleParenthesis"] = 14] = "LowerRomanDoubleParenthesis";
27686
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanDoubleParenthesis"] = 15] = "LowerRomanDoubleParenthesis";
27383
27687
  /**
27384
27688
  * Numbering triggered by i-
27385
27689
  */
27386
- CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanDash"] = 15] = "LowerRomanDash";
27690
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanDash"] = 16] = "LowerRomanDash";
27387
27691
  /**
27388
27692
  * Numbering triggered by I.
27389
27693
  */
27390
- CompatibleNumberingListType[CompatibleNumberingListType["UpperRoman"] = 16] = "UpperRoman";
27694
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperRoman"] = 17] = "UpperRoman";
27391
27695
  /**
27392
27696
  * Numbering triggered by I)
27393
27697
  */
27394
- CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanParenthesis"] = 17] = "UpperRomanParenthesis";
27698
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanParenthesis"] = 18] = "UpperRomanParenthesis";
27395
27699
  /**
27396
27700
  * Numbering triggered by (I)
27397
27701
  */
27398
- CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanDoubleParenthesis"] = 18] = "UpperRomanDoubleParenthesis";
27702
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanDoubleParenthesis"] = 19] = "UpperRomanDoubleParenthesis";
27399
27703
  /**
27400
27704
  * Numbering triggered by I-
27401
27705
  */
27402
- CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanDash"] = 19] = "UpperRomanDash";
27706
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanDash"] = 20] = "UpperRomanDash";
27707
+ /**
27708
+ * Maximum value of the enum
27709
+ */
27710
+ CompatibleNumberingListType[CompatibleNumberingListType["Max"] = 20] = "Max";
27403
27711
  })(CompatibleNumberingListType = exports.CompatibleNumberingListType || (exports.CompatibleNumberingListType = {}));
27404
27712
 
27405
27713