roosterjs 8.22.1 → 8.24.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
@@ -2930,23 +2930,28 @@ exports.default = insertEntity;
2930
2930
 
2931
2931
  Object.defineProperty(exports, "__esModule", { value: true });
2932
2932
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
2933
- function insertImage(editor, imageFile) {
2933
+ function insertImage(editor, imageFile, attributes) {
2934
2934
  if (typeof imageFile == 'string') {
2935
- insertImageWithSrc(editor, imageFile);
2935
+ insertImageWithSrc(editor, imageFile, attributes);
2936
2936
  }
2937
2937
  else {
2938
2938
  (0, roosterjs_editor_dom_1.readFile)(imageFile, function (dataUrl) {
2939
2939
  if (dataUrl && !editor.isDisposed()) {
2940
- insertImageWithSrc(editor, dataUrl);
2940
+ insertImageWithSrc(editor, dataUrl, attributes);
2941
2941
  }
2942
2942
  });
2943
2943
  }
2944
2944
  }
2945
2945
  exports.default = insertImage;
2946
- function insertImageWithSrc(editor, src) {
2946
+ function insertImageWithSrc(editor, src, attributes) {
2947
2947
  editor.addUndoSnapshot(function () {
2948
2948
  var image = editor.getDocument().createElement('img');
2949
2949
  image.src = src;
2950
+ if (attributes) {
2951
+ Object.keys(attributes).forEach(function (attribute) {
2952
+ return image.setAttribute(attribute, attributes[attribute]);
2953
+ });
2954
+ }
2950
2955
  image.style.maxWidth = '100%';
2951
2956
  editor.insertNode(image);
2952
2957
  }, "Format" /* Format */);
@@ -3569,9 +3574,10 @@ var toggleListType_1 = __webpack_require__(/*! ../utils/toggleListType */ "./pac
3569
3574
  * If selection contains both bullet/numbering and normal text, the behavior is decided by corresponding
3570
3575
  * browser execCommand API
3571
3576
  * @param editor The editor instance
3577
+ * @param listStyle (Optional) the style of the bullet list. If not defined, the style will be set to disc.
3572
3578
  */
3573
- function toggleBullet(editor) {
3574
- (0, toggleListType_1.default)(editor, 2 /* Unordered */);
3579
+ function toggleBullet(editor, listStyle) {
3580
+ (0, toggleListType_1.default)(editor, 2 /* Unordered */, undefined /* startNumber */, false /* includeSiblingLists */, listStyle);
3575
3581
  }
3576
3582
  exports.default = toggleBullet;
3577
3583
 
@@ -3719,9 +3725,10 @@ var toggleListType_1 = __webpack_require__(/*! ../utils/toggleListType */ "./pac
3719
3725
  * realization of browser execCommand API
3720
3726
  * @param editor The editor instance
3721
3727
  * @param startNumber (Optional) Start number of the list
3728
+ * @param listStyle (Optional) The style of the numbering list. If not defined, the style will be set to decimal.
3722
3729
  */
3723
- function toggleNumbering(editor, startNumber) {
3724
- (0, toggleListType_1.default)(editor, 1 /* Ordered */, startNumber);
3730
+ function toggleNumbering(editor, startNumber, listStyle) {
3731
+ (0, toggleListType_1.default)(editor, 1 /* Ordered */, startNumber, undefined /* includeSiblingLists */, listStyle);
3725
3732
  }
3726
3733
  exports.default = toggleNumbering;
3727
3734
 
@@ -4477,8 +4484,9 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
4477
4484
  * @param listType The list type to toggle
4478
4485
  * @param startNumber (Optional) Start number of the list
4479
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.
4480
4488
  */
4481
- function toggleListType(editor, listType, startNumber, includeSiblingLists) {
4489
+ function toggleListType(editor, listType, startNumber, includeSiblingLists, listStyle) {
4482
4490
  if (includeSiblingLists === void 0) { includeSiblingLists = true; }
4483
4491
  (0, blockFormat_1.default)(editor, function (region, start, end, chains) {
4484
4492
  var _a;
@@ -4488,6 +4496,9 @@ function toggleListType(editor, listType, startNumber, includeSiblingLists) {
4488
4496
  : (0, roosterjs_editor_dom_1.createVListFromRegion)(region, includeSiblingLists);
4489
4497
  if (vList) {
4490
4498
  vList.changeListType(start, end, listType);
4499
+ if (listStyle && editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)) {
4500
+ vList.setListStyleType(listStyle);
4501
+ }
4491
4502
  vList.writeBack();
4492
4503
  }
4493
4504
  });
@@ -4714,11 +4725,13 @@ exports.coreApiMap = {
4714
4725
  "use strict";
4715
4726
 
4716
4727
  Object.defineProperty(exports, "__esModule", { value: true });
4717
- exports.createPasteFragment = void 0;
4728
+ exports.transformTabCharacters = exports.createPasteFragment = void 0;
4718
4729
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
4719
4730
  var START_FRAGMENT = '<!--StartFragment-->';
4720
4731
  var END_FRAGMENT = '<!--EndFragment-->';
4721
4732
  var NBSP_HTML = '\u00A0';
4733
+ var ENSP_HTML = '\u2002';
4734
+ var TAB_SPACES = 6;
4722
4735
  /**
4723
4736
  * @internal
4724
4737
  * Create a DocumentFragment for paste from a ClipboardData
@@ -4809,6 +4822,9 @@ var createPasteFragment = function (core, clipboardData, position, pasteAsText,
4809
4822
  .replace(/^ /g, NBSP_HTML)
4810
4823
  .replace(/\r/g, '')
4811
4824
  .replace(/ {2}/g, ' ' + NBSP_HTML);
4825
+ if (line.includes('\t')) {
4826
+ line = transformTabCharacters(line, index === 0 ? position.offset : 0);
4827
+ }
4812
4828
  var textNode = document.createTextNode(line);
4813
4829
  // There are 3 scenarios:
4814
4830
  // 1. Single line: Paste as it is
@@ -4838,6 +4854,26 @@ var createPasteFragment = function (core, clipboardData, position, pasteAsText,
4838
4854
  return fragment;
4839
4855
  };
4840
4856
  exports.createPasteFragment = createPasteFragment;
4857
+ /**
4858
+ * @internal
4859
+ * Transform \t characters into EN SPACE characters
4860
+ * @param input string NOT containing \n characters
4861
+ * @example t("\thello", 2) => "&ensp;&ensp;&ensp;&ensp;hello"
4862
+ */
4863
+ function transformTabCharacters(input, initialOffset) {
4864
+ if (initialOffset === void 0) { initialOffset = 0; }
4865
+ var line = input;
4866
+ var tIndex;
4867
+ while ((tIndex = line.indexOf('\t')) != -1) {
4868
+ var lineBefore = line.slice(0, tIndex);
4869
+ var lineAfter = line.slice(tIndex + 1);
4870
+ var tabCount = TAB_SPACES - ((lineBefore.length + initialOffset) % TAB_SPACES);
4871
+ var tabStr = Array(tabCount).fill(ENSP_HTML).join('');
4872
+ line = lineBefore + tabStr + lineAfter;
4873
+ }
4874
+ return line;
4875
+ }
4876
+ exports.transformTabCharacters = transformTabCharacters;
4841
4877
  function getCurrentFormat(core, node) {
4842
4878
  var pendableFormat = core.api.getPendableFormatState(core, true /** forceGetStateFromDOM*/);
4843
4879
  var styleBasedFormat = core.api.getStyleBasedFormatState(core, node);
@@ -6153,12 +6189,14 @@ var CopyPastePlugin = /** @class */ (function () {
6153
6189
  function CopyPastePlugin(options) {
6154
6190
  var _this = this;
6155
6191
  this.onPaste = function (event) {
6192
+ var _a;
6156
6193
  var range;
6157
- (0, roosterjs_editor_dom_1.extractClipboardEvent)(event, function (clipboardData) { return _this.editor.paste(clipboardData); }, {
6158
- allowLinkPreview: _this.editor.isFeatureEnabled("PasteWithLinkPreview" /* PasteWithLinkPreview */),
6194
+ (0, roosterjs_editor_dom_1.extractClipboardEvent)(event, function (clipboardData) { var _a; return (_a = _this.editor) === null || _a === void 0 ? void 0 : _a.paste(clipboardData); }, {
6195
+ allowLinkPreview: (_a = _this.editor) === null || _a === void 0 ? void 0 : _a.isFeatureEnabled("PasteWithLinkPreview" /* PasteWithLinkPreview */),
6159
6196
  allowedCustomPasteType: _this.state.allowedCustomPasteType,
6160
6197
  getTempDiv: function () {
6161
- range = _this.editor.getSelectionRange();
6198
+ var _a;
6199
+ range = (_a = _this.editor) === null || _a === void 0 ? void 0 : _a.getSelectionRange();
6162
6200
  return _this.getTempDiv();
6163
6201
  },
6164
6202
  removeTempDiv: function (div) {
@@ -7322,6 +7360,7 @@ exports.default = NormalizeTablePlugin;
7322
7360
  function normalizeTables(tables) {
7323
7361
  var isDOMChanged = false;
7324
7362
  tables.forEach(function (table) {
7363
+ var _a;
7325
7364
  var tbody = null;
7326
7365
  for (var child = table.firstChild; child; child = child.nextSibling) {
7327
7366
  var tag = (0, roosterjs_editor_dom_1.getTagOfNode)(child);
@@ -7338,7 +7377,7 @@ function normalizeTables(tables) {
7338
7377
  case 'TBODY':
7339
7378
  if (tbody) {
7340
7379
  (0, roosterjs_editor_dom_1.moveChildNodes)(tbody, child, true /*keepExistingChildren*/);
7341
- child.parentNode.removeChild(child);
7380
+ (_a = child.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(child);
7342
7381
  child = tbody;
7343
7382
  isDOMChanged = true;
7344
7383
  }
@@ -7346,16 +7385,20 @@ function normalizeTables(tables) {
7346
7385
  tbody = child;
7347
7386
  }
7348
7387
  break;
7349
- case 'COLGROUP':
7350
- if (table.tHead) {
7351
- table.tHead.prepend(child);
7352
- }
7353
- break;
7354
7388
  default:
7355
7389
  tbody = null;
7356
7390
  break;
7357
7391
  }
7358
7392
  }
7393
+ var colgroups = table.querySelectorAll('colgroup');
7394
+ var thead = table.querySelector('thead');
7395
+ if (thead) {
7396
+ colgroups.forEach(function (colgroup) {
7397
+ if (!thead.contains(colgroup)) {
7398
+ thead.appendChild(colgroup);
7399
+ }
7400
+ });
7401
+ }
7359
7402
  });
7360
7403
  return isDOMChanged;
7361
7404
  }
@@ -7635,7 +7678,8 @@ var UndoPlugin = /** @class */ (function () {
7635
7678
  UndoPlugin.prototype.onKeyDown = function (evt) {
7636
7679
  // Handle backspace/delete when there is a selection to take a snapshot
7637
7680
  // since we want the state prior to deletion restorable
7638
- if (evt.which == 8 /* BACKSPACE */ || evt.which == 46 /* DELETE */) {
7681
+ // Ignore if keycombo is ALT+BACKSPACE
7682
+ if ((evt.which == 8 /* BACKSPACE */ && !evt.altKey) || evt.which == 46 /* DELETE */) {
7639
7683
  if (evt.which == 8 /* BACKSPACE */ && this.canUndoAutoComplete()) {
7640
7684
  evt.preventDefault();
7641
7685
  this.editor.undo();
@@ -9670,11 +9714,24 @@ var SelectionBlockScoper = /** @class */ (function () {
9670
9714
  * @param startFrom Where to start, can be Begin, End, SelectionStart
9671
9715
  */
9672
9716
  function SelectionBlockScoper(rootNode, position, startFrom) {
9717
+ var _a;
9673
9718
  this.rootNode = rootNode;
9674
9719
  this.startFrom = startFrom;
9675
- position = (0, safeInstanceOf_1.default)(position, 'Range') ? Position_1.default.getStart(position) : position;
9676
- this.position = position.normalize();
9677
- this.block = (0, getBlockElementAtNode_1.default)(this.rootNode, this.position.node);
9720
+ // Debugging info, will be removed later
9721
+ var isPosition = false;
9722
+ if ((0, safeInstanceOf_1.default)(position, 'Range')) {
9723
+ position = Position_1.default.getStart(position);
9724
+ }
9725
+ else {
9726
+ isPosition = true;
9727
+ }
9728
+ try {
9729
+ this.position = position.normalize();
9730
+ this.block = (0, getBlockElementAtNode_1.default)(this.rootNode, this.position.node);
9731
+ }
9732
+ catch (e) {
9733
+ throw new Error(((_a = e) === null || _a === void 0 ? void 0 : _a.message) + "; isPosition: " + isPosition + "; actual type: " + typeof position + "; String name: " + (typeof (position === null || position === void 0 ? void 0 : position.toString) === 'function' ? position.toString() : 'No toString()'));
9734
+ }
9678
9735
  }
9679
9736
  /**
9680
9737
  * Get the start block element
@@ -11232,7 +11289,8 @@ exports.default = getPredefinedCssForElement;
11232
11289
 
11233
11290
  Object.defineProperty(exports, "__esModule", { value: true });
11234
11291
  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;
11235
- 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;
11292
+ 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;
11293
+ exports.removeMetadata = exports.setMetadata = exports.getMetadata = exports.createObjectDefinition = exports.createArrayDefinition = exports.createStringDefinition = exports.createBooleanDefinition = exports.createNumberDefinition = void 0;
11236
11294
  var getBlockElementAtNode_1 = __webpack_require__(/*! ./blockElements/getBlockElementAtNode */ "./packages/roosterjs-editor-dom/lib/blockElements/getBlockElementAtNode.ts");
11237
11295
  Object.defineProperty(exports, "getBlockElementAtNode", { enumerable: true, get: function () { return getBlockElementAtNode_1.default; } });
11238
11296
  var getFirstLastBlockElement_1 = __webpack_require__(/*! ./blockElements/getFirstLastBlockElement */ "./packages/roosterjs-editor-dom/lib/blockElements/getFirstLastBlockElement.ts");
@@ -11420,6 +11478,18 @@ var deleteSelectedContent_1 = __webpack_require__(/*! ./edit/deleteSelectedConte
11420
11478
  Object.defineProperty(exports, "deleteSelectedContent", { enumerable: true, get: function () { return deleteSelectedContent_1.default; } });
11421
11479
  var getTextContent_1 = __webpack_require__(/*! ./edit/getTextContent */ "./packages/roosterjs-editor-dom/lib/edit/getTextContent.ts");
11422
11480
  Object.defineProperty(exports, "getTextContent", { enumerable: true, get: function () { return getTextContent_1.default; } });
11481
+ var validate_1 = __webpack_require__(/*! ./metadata/validate */ "./packages/roosterjs-editor-dom/lib/metadata/validate.ts");
11482
+ Object.defineProperty(exports, "validate", { enumerable: true, get: function () { return validate_1.default; } });
11483
+ var definitionCreators_1 = __webpack_require__(/*! ./metadata/definitionCreators */ "./packages/roosterjs-editor-dom/lib/metadata/definitionCreators.ts");
11484
+ Object.defineProperty(exports, "createNumberDefinition", { enumerable: true, get: function () { return definitionCreators_1.createNumberDefinition; } });
11485
+ Object.defineProperty(exports, "createBooleanDefinition", { enumerable: true, get: function () { return definitionCreators_1.createBooleanDefinition; } });
11486
+ Object.defineProperty(exports, "createStringDefinition", { enumerable: true, get: function () { return definitionCreators_1.createStringDefinition; } });
11487
+ Object.defineProperty(exports, "createArrayDefinition", { enumerable: true, get: function () { return definitionCreators_1.createArrayDefinition; } });
11488
+ Object.defineProperty(exports, "createObjectDefinition", { enumerable: true, get: function () { return definitionCreators_1.createObjectDefinition; } });
11489
+ var metadata_1 = __webpack_require__(/*! ./metadata/metadata */ "./packages/roosterjs-editor-dom/lib/metadata/metadata.ts");
11490
+ Object.defineProperty(exports, "getMetadata", { enumerable: true, get: function () { return metadata_1.getMetadata; } });
11491
+ Object.defineProperty(exports, "setMetadata", { enumerable: true, get: function () { return metadata_1.setMetadata; } });
11492
+ Object.defineProperty(exports, "removeMetadata", { enumerable: true, get: function () { return metadata_1.removeMetadata; } });
11423
11493
 
11424
11494
 
11425
11495
  /***/ }),
@@ -11826,7 +11896,7 @@ var splitTextNode_1 = __webpack_require__(/*! ../utils/splitTextNode */ "./packa
11826
11896
  var wrap_1 = __webpack_require__(/*! ../utils/wrap */ "./packages/roosterjs-editor-dom/lib/utils/wrap.ts");
11827
11897
  var getLeafSibling_1 = __webpack_require__(/*! ../utils/getLeafSibling */ "./packages/roosterjs-editor-dom/lib/utils/getLeafSibling.ts");
11828
11898
  var splitParentNode_1 = __webpack_require__(/*! ../utils/splitParentNode */ "./packages/roosterjs-editor-dom/lib/utils/splitParentNode.ts");
11829
- var STYLET_AGS = 'SPAN,B,I,U,EM,STRONG,STRIKE,S,SMALL'.split(',');
11899
+ var STYLET_AGS = 'SPAN,B,I,U,EM,STRONG,STRIKE,S,SMALL,SUP,SUB'.split(',');
11830
11900
  /**
11831
11901
  * Apply style using a styler function to the given container node in the given range
11832
11902
  * @param container The container node to apply style to
@@ -12090,6 +12160,8 @@ var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterj
12090
12160
  var unwrap_1 = __webpack_require__(/*! ../utils/unwrap */ "./packages/roosterjs-editor-dom/lib/utils/unwrap.ts");
12091
12161
  var VListItem_1 = __webpack_require__(/*! ./VListItem */ "./packages/roosterjs-editor-dom/lib/list/VListItem.ts");
12092
12162
  var wrap_1 = __webpack_require__(/*! ../utils/wrap */ "./packages/roosterjs-editor-dom/lib/utils/wrap.ts");
12163
+ var definitionCreators_1 = __webpack_require__(/*! ../metadata/definitionCreators */ "./packages/roosterjs-editor-dom/lib/metadata/definitionCreators.ts");
12164
+ var metadata_1 = __webpack_require__(/*! ../metadata/metadata */ "./packages/roosterjs-editor-dom/lib/metadata/metadata.ts");
12093
12165
  /**
12094
12166
  * Represent a bullet or a numbering list
12095
12167
  *
@@ -12263,6 +12335,8 @@ var VList = /** @class */ (function () {
12263
12335
  start++;
12264
12336
  }
12265
12337
  }
12338
+ var itemIndex = _this.getListItemIndex(item.getNode());
12339
+ item.applyListStyle(_this.rootList, itemIndex);
12266
12340
  lastList = topList;
12267
12341
  });
12268
12342
  // Restore the content to the position of placeholder
@@ -12340,6 +12414,14 @@ var VList = /** @class */ (function () {
12340
12414
  return needChangeType ? item.changeListType(targetType) : item.outdent();
12341
12415
  });
12342
12416
  };
12417
+ /**
12418
+ * Change list style of the given range of this list.
12419
+ * If some of the items are not real list item yet, this will make them to be list item with given style
12420
+ * @param targetStyle Target list style
12421
+ */
12422
+ VList.prototype.setListStyleType = function (targetStyle) {
12423
+ (0, metadata_1.setMetadata)(this.rootList, targetStyle, (0, definitionCreators_1.createNumberDefinition)());
12424
+ };
12343
12425
  /**
12344
12426
  * Append a new item to this VList
12345
12427
  * @param node node of the item to append. If it is not wrapped with LI tag, it will be wrapped
@@ -12679,10 +12761,13 @@ var getTagOfNode_1 = __webpack_require__(/*! ../utils/getTagOfNode */ "./package
12679
12761
  var isBlockElement_1 = __webpack_require__(/*! ../utils/isBlockElement */ "./packages/roosterjs-editor-dom/lib/utils/isBlockElement.ts");
12680
12762
  var moveChildNodes_1 = __webpack_require__(/*! ../utils/moveChildNodes */ "./packages/roosterjs-editor-dom/lib/utils/moveChildNodes.ts");
12681
12763
  var safeInstanceOf_1 = __webpack_require__(/*! ../utils/safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
12764
+ var setBulletListMarkers_1 = __webpack_require__(/*! ./setBulletListMarkers */ "./packages/roosterjs-editor-dom/lib/list/setBulletListMarkers.ts");
12682
12765
  var setListItemStyle_1 = __webpack_require__(/*! ./setListItemStyle */ "./packages/roosterjs-editor-dom/lib/list/setListItemStyle.ts");
12766
+ var setNumberingListMarkers_1 = __webpack_require__(/*! ./setNumberingListMarkers */ "./packages/roosterjs-editor-dom/lib/list/setNumberingListMarkers.ts");
12683
12767
  var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
12684
12768
  var unwrap_1 = __webpack_require__(/*! ../utils/unwrap */ "./packages/roosterjs-editor-dom/lib/utils/unwrap.ts");
12685
12769
  var wrap_1 = __webpack_require__(/*! ../utils/wrap */ "./packages/roosterjs-editor-dom/lib/utils/wrap.ts");
12770
+ var metadata_1 = __webpack_require__(/*! ../metadata/metadata */ "./packages/roosterjs-editor-dom/lib/metadata/metadata.ts");
12686
12771
  var orderListStyles = [null, 'lower-alpha', 'lower-roman'];
12687
12772
  var MARGIN_BASE = '0in 0in 0in 0.5in';
12688
12773
  var NEGATIVE_MARGIN = '-.25in';
@@ -12843,6 +12928,27 @@ var VListItem = /** @class */ (function () {
12843
12928
  VListItem.prototype.setNewListStart = function (startNumber) {
12844
12929
  this.newListStart = startNumber;
12845
12930
  };
12931
+ /**
12932
+ * Apply the list style type
12933
+ * @param rootList the vList that receives the style
12934
+ * @param index the list item index
12935
+ */
12936
+ VListItem.prototype.applyListStyle = function (rootList, index) {
12937
+ var style = (0, metadata_1.getMetadata)(rootList) ? (0, metadata_1.getMetadata)(rootList) : undefined;
12938
+ if (style) {
12939
+ if (this.listTypes.length < 3) {
12940
+ if (this.listTypes[1] === 2 /* Unordered */) {
12941
+ (0, setBulletListMarkers_1.default)(this.node, style);
12942
+ }
12943
+ else if (this.listTypes[1] === 1 /* Ordered */) {
12944
+ (0, setNumberingListMarkers_1.default)(this.node, style, index);
12945
+ }
12946
+ }
12947
+ else {
12948
+ this.node.style.removeProperty('list-style-type');
12949
+ }
12950
+ }
12951
+ };
12846
12952
  /**
12847
12953
  * Write the change result back into DOM
12848
12954
  * @param listStack current stack of list elements
@@ -12972,6 +13078,111 @@ function getChildrenAndUnwrap(node) {
12972
13078
  }
12973
13079
 
12974
13080
 
13081
+ /***/ }),
13082
+
13083
+ /***/ "./packages/roosterjs-editor-dom/lib/list/convertDecimalsToAlpha.ts":
13084
+ /*!**************************************************************************!*\
13085
+ !*** ./packages/roosterjs-editor-dom/lib/list/convertDecimalsToAlpha.ts ***!
13086
+ \**************************************************************************/
13087
+ /*! no static exports found */
13088
+ /***/ (function(module, exports, __webpack_require__) {
13089
+
13090
+ "use strict";
13091
+
13092
+ Object.defineProperty(exports, "__esModule", { value: true });
13093
+ var ALPHABET = {
13094
+ 0: 'A',
13095
+ 1: 'B',
13096
+ 2: 'C',
13097
+ 3: 'D',
13098
+ 4: 'E',
13099
+ 5: 'F',
13100
+ 6: 'G',
13101
+ 7: 'H',
13102
+ 8: 'I',
13103
+ 9: 'J',
13104
+ 10: 'K',
13105
+ 11: 'L',
13106
+ 12: 'M',
13107
+ 13: 'N',
13108
+ 14: 'O',
13109
+ 15: 'P',
13110
+ 16: 'Q',
13111
+ 17: 'R',
13112
+ 18: 'S',
13113
+ 19: 'T',
13114
+ 20: 'U',
13115
+ 21: 'V',
13116
+ 22: 'W',
13117
+ 23: 'X',
13118
+ 24: 'Y',
13119
+ 25: 'Z',
13120
+ };
13121
+ /**
13122
+ * @internal
13123
+ * Convert decimal numbers into english alphabet letters
13124
+ * @param decimal The decimal number that needs to be converted
13125
+ * @param isLowerCase if true the roman value will appear in lower case
13126
+ * @returns
13127
+ */
13128
+ function convertDecimalsToAlpha(decimal, isLowerCase) {
13129
+ var alpha = '';
13130
+ while (decimal >= 0) {
13131
+ alpha = ALPHABET[decimal % 26] + alpha;
13132
+ decimal = Math.floor(decimal / 26) - 1;
13133
+ }
13134
+ return isLowerCase ? alpha.toLowerCase() : alpha;
13135
+ }
13136
+ exports.default = convertDecimalsToAlpha;
13137
+
13138
+
13139
+ /***/ }),
13140
+
13141
+ /***/ "./packages/roosterjs-editor-dom/lib/list/convertDecimalsToRomans.ts":
13142
+ /*!***************************************************************************!*\
13143
+ !*** ./packages/roosterjs-editor-dom/lib/list/convertDecimalsToRomans.ts ***!
13144
+ \***************************************************************************/
13145
+ /*! no static exports found */
13146
+ /***/ (function(module, exports, __webpack_require__) {
13147
+
13148
+ "use strict";
13149
+
13150
+ Object.defineProperty(exports, "__esModule", { value: true });
13151
+ var RomanValues = {
13152
+ M: 1000,
13153
+ CM: 900,
13154
+ D: 500,
13155
+ CD: 400,
13156
+ C: 100,
13157
+ XC: 90,
13158
+ L: 50,
13159
+ XL: 40,
13160
+ X: 10,
13161
+ IX: 9,
13162
+ V: 5,
13163
+ IV: 4,
13164
+ I: 1,
13165
+ };
13166
+ /**
13167
+ * @internal
13168
+ * Convert decimal numbers into roman numbers
13169
+ * @param decimal The decimal number that needs to be converted
13170
+ * @param isLowerCase if true the roman value will appear in lower case
13171
+ * @returns
13172
+ */
13173
+ function convertDecimalsToRoman(decimal, isLowerCase) {
13174
+ var romanValue = '';
13175
+ for (var _i = 0, _a = Object.keys(RomanValues); _i < _a.length; _i++) {
13176
+ var i = _a[_i];
13177
+ var timesRomanCharAppear = Math.floor(decimal / RomanValues[i]);
13178
+ decimal = decimal - timesRomanCharAppear * RomanValues[i];
13179
+ romanValue = romanValue + i.repeat(timesRomanCharAppear);
13180
+ }
13181
+ return isLowerCase ? romanValue.toLocaleLowerCase() : romanValue;
13182
+ }
13183
+ exports.default = convertDecimalsToRoman;
13184
+
13185
+
12975
13186
  /***/ }),
12976
13187
 
12977
13188
  /***/ "./packages/roosterjs-editor-dom/lib/list/createVListFromRegion.ts":
@@ -13173,6 +13384,41 @@ function getRootListNode(region, selector, node) {
13173
13384
  exports.default = getRootListNode;
13174
13385
 
13175
13386
 
13387
+ /***/ }),
13388
+
13389
+ /***/ "./packages/roosterjs-editor-dom/lib/list/setBulletListMarkers.ts":
13390
+ /*!************************************************************************!*\
13391
+ !*** ./packages/roosterjs-editor-dom/lib/list/setBulletListMarkers.ts ***!
13392
+ \************************************************************************/
13393
+ /*! no static exports found */
13394
+ /***/ (function(module, exports, __webpack_require__) {
13395
+
13396
+ "use strict";
13397
+
13398
+ var _a;
13399
+ Object.defineProperty(exports, "__esModule", { value: true });
13400
+ /**
13401
+ * @internal
13402
+ * Set the marker of a bullet list
13403
+ * @param li
13404
+ * @param listStyleType
13405
+ */
13406
+ function setBulletListMarkers(li, listStyleType) {
13407
+ var marker = bulletListStyle[listStyleType];
13408
+ var isDiscOrSquare = listStyleType === 0 /* Disc */ || listStyleType === 2 /* Square */;
13409
+ li.style.listStyleType = isDiscOrSquare ? marker : "\"" + marker + "\"";
13410
+ }
13411
+ exports.default = setBulletListMarkers;
13412
+ var bulletListStyle = (_a = {},
13413
+ _a[0 /* Disc */] = 'disc',
13414
+ _a[2 /* Square */] = 'square',
13415
+ _a[1 /* Dash */] = '- ',
13416
+ _a[4 /* LongArrow */] = '→ ',
13417
+ _a[3 /* ShortArrow */] = '➢ ',
13418
+ _a[5 /* UnfilledArrow */] = '➪ ',
13419
+ _a);
13420
+
13421
+
13176
13422
  /***/ }),
13177
13423
 
13178
13424
  /***/ "./packages/roosterjs-editor-dom/lib/list/setListItemStyle.ts":
@@ -13232,6 +13478,388 @@ function getInlineChildElementsStyle(element) {
13232
13478
  }
13233
13479
 
13234
13480
 
13481
+ /***/ }),
13482
+
13483
+ /***/ "./packages/roosterjs-editor-dom/lib/list/setNumberingListMarkers.ts":
13484
+ /*!***************************************************************************!*\
13485
+ !*** ./packages/roosterjs-editor-dom/lib/list/setNumberingListMarkers.ts ***!
13486
+ \***************************************************************************/
13487
+ /*! no static exports found */
13488
+ /***/ (function(module, exports, __webpack_require__) {
13489
+
13490
+ "use strict";
13491
+
13492
+ var _a;
13493
+ Object.defineProperty(exports, "__esModule", { value: true });
13494
+ var convertDecimalsToAlpha_1 = __webpack_require__(/*! ./convertDecimalsToAlpha */ "./packages/roosterjs-editor-dom/lib/list/convertDecimalsToAlpha.ts");
13495
+ var convertDecimalsToRomans_1 = __webpack_require__(/*! ./convertDecimalsToRomans */ "./packages/roosterjs-editor-dom/lib/list/convertDecimalsToRomans.ts");
13496
+ var MarkerTypes;
13497
+ (function (MarkerTypes) {
13498
+ MarkerTypes[MarkerTypes["Decimal"] = 0] = "Decimal";
13499
+ MarkerTypes[MarkerTypes["Roman"] = 1] = "Roman";
13500
+ MarkerTypes[MarkerTypes["Alpha"] = 2] = "Alpha";
13501
+ })(MarkerTypes || (MarkerTypes = {}));
13502
+ /**
13503
+ * @internal
13504
+ * Set marker style of a numbering list
13505
+ * @param listStyleType
13506
+ * @param li
13507
+ */
13508
+ function setNumberingListMarkers(li, listStyleType, level) {
13509
+ var _a = numberingListStyle[listStyleType], markerSeparator = _a.markerSeparator, markerSecondSeparator = _a.markerSecondSeparator, markerType = _a.markerType, lowerCase = _a.lowerCase;
13510
+ var markerNumber = level.toString();
13511
+ if (markerType === MarkerTypes.Roman) {
13512
+ markerNumber = (0, convertDecimalsToRomans_1.default)(level, lowerCase);
13513
+ }
13514
+ else if (markerType === MarkerTypes.Alpha) {
13515
+ markerNumber = (0, convertDecimalsToAlpha_1.default)(level - 1, lowerCase);
13516
+ }
13517
+ var marker = markerSecondSeparator
13518
+ ? markerSecondSeparator + markerNumber + markerSeparator
13519
+ : markerNumber + markerSeparator;
13520
+ li.style.listStyleType = "\"" + marker + "\"";
13521
+ }
13522
+ exports.default = setNumberingListMarkers;
13523
+ var numberingListStyle = (_a = {},
13524
+ _a[0 /* Decimal */] = {
13525
+ markerType: MarkerTypes.Decimal,
13526
+ markerSeparator: '. ',
13527
+ },
13528
+ _a[1 /* DecimalDash */] = {
13529
+ markerType: MarkerTypes.Decimal,
13530
+ markerSeparator: '- ',
13531
+ },
13532
+ _a[2 /* DecimalParenthesis */] = {
13533
+ markerType: MarkerTypes.Decimal,
13534
+ markerSeparator: ') ',
13535
+ },
13536
+ _a[3 /* DecimalDoubleParenthesis */] = {
13537
+ markerType: MarkerTypes.Decimal,
13538
+ markerSeparator: ') ',
13539
+ markerSecondSeparator: '(',
13540
+ },
13541
+ _a[4 /* LowerAlpha */] = {
13542
+ markerType: MarkerTypes.Alpha,
13543
+ markerSeparator: '. ',
13544
+ lowerCase: true,
13545
+ },
13546
+ _a[7 /* LowerAlphaDash */] = {
13547
+ markerType: MarkerTypes.Alpha,
13548
+ markerSeparator: '- ',
13549
+ lowerCase: true,
13550
+ },
13551
+ _a[5 /* LowerAlphaParenthesis */] = {
13552
+ markerType: MarkerTypes.Alpha,
13553
+ markerSeparator: ') ',
13554
+ lowerCase: true,
13555
+ },
13556
+ _a[6 /* LowerAlphaDoubleParenthesis */] = {
13557
+ markerType: MarkerTypes.Alpha,
13558
+ markerSeparator: ') ',
13559
+ markerSecondSeparator: '(',
13560
+ lowerCase: true,
13561
+ },
13562
+ _a[8 /* UpperAlpha */] = {
13563
+ markerType: MarkerTypes.Alpha,
13564
+ markerSeparator: '. ',
13565
+ },
13566
+ _a[11 /* UpperAlphaDash */] = {
13567
+ markerType: MarkerTypes.Alpha,
13568
+ markerSeparator: '- ',
13569
+ },
13570
+ _a[9 /* UpperAlphaParenthesis */] = {
13571
+ markerType: MarkerTypes.Alpha,
13572
+ markerSeparator: ') ',
13573
+ },
13574
+ _a[10 /* UpperAlphaDoubleParenthesis */] = {
13575
+ markerType: MarkerTypes.Alpha,
13576
+ markerSeparator: ') ',
13577
+ markerSecondSeparator: '(',
13578
+ },
13579
+ _a[12 /* LowerRoman */] = {
13580
+ markerType: MarkerTypes.Roman,
13581
+ markerSeparator: '. ',
13582
+ lowerCase: true,
13583
+ },
13584
+ _a[15 /* LowerRomanDash */] = {
13585
+ markerType: MarkerTypes.Roman,
13586
+ markerSeparator: '- ',
13587
+ lowerCase: true,
13588
+ },
13589
+ _a[13 /* LowerRomanParenthesis */] = {
13590
+ markerType: MarkerTypes.Roman,
13591
+ markerSeparator: ') ',
13592
+ lowerCase: true,
13593
+ },
13594
+ _a[14 /* LowerRomanDoubleParenthesis */] = {
13595
+ markerType: MarkerTypes.Roman,
13596
+ markerSeparator: ') ',
13597
+ markerSecondSeparator: '(',
13598
+ lowerCase: true,
13599
+ },
13600
+ _a[16 /* UpperRoman */] = {
13601
+ markerType: MarkerTypes.Roman,
13602
+ markerSeparator: '. ',
13603
+ },
13604
+ _a[19 /* UpperRomanDash */] = {
13605
+ markerType: MarkerTypes.Roman,
13606
+ markerSeparator: '- ',
13607
+ },
13608
+ _a[17 /* UpperRomanParenthesis */] = {
13609
+ markerType: MarkerTypes.Roman,
13610
+ markerSeparator: ') ',
13611
+ },
13612
+ _a[18 /* UpperRomanDoubleParenthesis */] = {
13613
+ markerType: MarkerTypes.Roman,
13614
+ markerSeparator: ') ',
13615
+ markerSecondSeparator: '(',
13616
+ },
13617
+ _a);
13618
+
13619
+
13620
+ /***/ }),
13621
+
13622
+ /***/ "./packages/roosterjs-editor-dom/lib/metadata/definitionCreators.ts":
13623
+ /*!**************************************************************************!*\
13624
+ !*** ./packages/roosterjs-editor-dom/lib/metadata/definitionCreators.ts ***!
13625
+ \**************************************************************************/
13626
+ /*! no static exports found */
13627
+ /***/ (function(module, exports, __webpack_require__) {
13628
+
13629
+ "use strict";
13630
+
13631
+ Object.defineProperty(exports, "__esModule", { value: true });
13632
+ exports.createObjectDefinition = exports.createArrayDefinition = exports.createStringDefinition = exports.createBooleanDefinition = exports.createNumberDefinition = void 0;
13633
+ /**
13634
+ * Create a number definition
13635
+ * @param isOptional Whether this property is optional
13636
+ * @param value Optional value of the number
13637
+ * @param minValue Optional minimum value
13638
+ * @param maxValue Optional maximum value
13639
+ * @param allowNull Allow the property to be null
13640
+ * @returns The number definition object
13641
+ */
13642
+ function createNumberDefinition(isOptional, value, minValue, maxValue, allowNull) {
13643
+ return {
13644
+ type: 1 /* Number */,
13645
+ isOptional: isOptional,
13646
+ value: value,
13647
+ maxValue: maxValue,
13648
+ minValue: minValue,
13649
+ allowNull: allowNull,
13650
+ };
13651
+ }
13652
+ exports.createNumberDefinition = createNumberDefinition;
13653
+ /**
13654
+ * Create a boolean definition
13655
+ * @param isOptional Whether this property is optional
13656
+ * @param value Optional expected boolean value
13657
+ * @param allowNull Allow the property to be null
13658
+ * @returns The boolean definition object
13659
+ */
13660
+ function createBooleanDefinition(isOptional, value, allowNull) {
13661
+ return {
13662
+ type: 0 /* Boolean */,
13663
+ isOptional: isOptional,
13664
+ value: value,
13665
+ allowNull: allowNull,
13666
+ };
13667
+ }
13668
+ exports.createBooleanDefinition = createBooleanDefinition;
13669
+ /**
13670
+ * Create a string definition
13671
+ * @param isOptional Whether this property is optional
13672
+ * @param value Optional expected string value
13673
+ * @param allowNull Allow the property to be null
13674
+ * @returns The string definition object
13675
+ */
13676
+ function createStringDefinition(isOptional, value, allowNull) {
13677
+ return {
13678
+ type: 2 /* String */,
13679
+ isOptional: isOptional,
13680
+ value: value,
13681
+ allowNull: allowNull,
13682
+ };
13683
+ }
13684
+ exports.createStringDefinition = createStringDefinition;
13685
+ /**
13686
+ * Create an array definition
13687
+ * @param itemDef Definition of each item of the related array
13688
+ * @param isOptional Whether this property is optional
13689
+ * @param allowNull Allow the property to be null
13690
+ * @returns The array definition object
13691
+ */
13692
+ function createArrayDefinition(itemDef, isOptional, minLength, maxLength, allowNull) {
13693
+ return {
13694
+ type: 3 /* Array */,
13695
+ isOptional: isOptional,
13696
+ itemDef: itemDef,
13697
+ minLength: minLength,
13698
+ maxLength: maxLength,
13699
+ allowNull: allowNull,
13700
+ };
13701
+ }
13702
+ exports.createArrayDefinition = createArrayDefinition;
13703
+ /**
13704
+ * Create an object definition
13705
+ * @param propertyDef Definition of each property of the related object
13706
+ * @param isOptional Whether this property is optional
13707
+ * @param allowNull Allow the property to be null
13708
+ * @returns The object definition object
13709
+ */
13710
+ function createObjectDefinition(propertyDef, isOptional, allowNull) {
13711
+ return {
13712
+ type: 4 /* Object */,
13713
+ isOptional: isOptional,
13714
+ propertyDef: propertyDef,
13715
+ allowNull: allowNull,
13716
+ };
13717
+ }
13718
+ exports.createObjectDefinition = createObjectDefinition;
13719
+
13720
+
13721
+ /***/ }),
13722
+
13723
+ /***/ "./packages/roosterjs-editor-dom/lib/metadata/metadata.ts":
13724
+ /*!****************************************************************!*\
13725
+ !*** ./packages/roosterjs-editor-dom/lib/metadata/metadata.ts ***!
13726
+ \****************************************************************/
13727
+ /*! no static exports found */
13728
+ /***/ (function(module, exports, __webpack_require__) {
13729
+
13730
+ "use strict";
13731
+
13732
+ Object.defineProperty(exports, "__esModule", { value: true });
13733
+ exports.removeMetadata = exports.setMetadata = exports.getMetadata = void 0;
13734
+ var validate_1 = __webpack_require__(/*! ./validate */ "./packages/roosterjs-editor-dom/lib/metadata/validate.ts");
13735
+ var MetadataDataSetName = 'editingInfo';
13736
+ /**
13737
+ * Get metadata object from an HTML element
13738
+ * @param element The HTML element to get metadata object from
13739
+ * @param definition The type definition of this metadata used for validate this metadata object.
13740
+ * If not specified, no validation will be performed and always return whatever we get from the element
13741
+ * @param defaultValue The default value to return if the retrieved object cannot pass the validation,
13742
+ * or there is no metadata object at all
13743
+ * @returns The strong-type metadata object if it can be validated, or null
13744
+ */
13745
+ function getMetadata(element, definition, defaultValue) {
13746
+ var str = element.dataset[MetadataDataSetName];
13747
+ var obj;
13748
+ try {
13749
+ obj = str ? JSON.parse(str) : null;
13750
+ }
13751
+ catch (_a) { }
13752
+ if (typeof obj !== 'undefined') {
13753
+ if (!definition) {
13754
+ return obj;
13755
+ }
13756
+ else if ((0, validate_1.default)(obj, definition)) {
13757
+ return obj;
13758
+ }
13759
+ }
13760
+ if (defaultValue) {
13761
+ return defaultValue;
13762
+ }
13763
+ else {
13764
+ return null;
13765
+ }
13766
+ }
13767
+ exports.getMetadata = getMetadata;
13768
+ /**
13769
+ * Set metadata object into an HTML element
13770
+ * @param element The HTML element to set metadata object to
13771
+ * @param metadata The metadata object to set
13772
+ * @param def An optional type definition object used for validate this metadata object.
13773
+ * If not specified, metadata will be set without validation
13774
+ * @returns True if metadata is set, otherwise false
13775
+ */
13776
+ function setMetadata(element, metadata, def) {
13777
+ if (!def || (0, validate_1.default)(metadata, def)) {
13778
+ element.dataset[MetadataDataSetName] = JSON.stringify(metadata);
13779
+ return true;
13780
+ }
13781
+ else {
13782
+ return false;
13783
+ }
13784
+ }
13785
+ exports.setMetadata = setMetadata;
13786
+ /**
13787
+ * Remove metadata from the given element if any
13788
+ * @param element The element to remove metadata from
13789
+ */
13790
+ function removeMetadata(element) {
13791
+ delete element.dataset[MetadataDataSetName];
13792
+ }
13793
+ exports.removeMetadata = removeMetadata;
13794
+
13795
+
13796
+ /***/ }),
13797
+
13798
+ /***/ "./packages/roosterjs-editor-dom/lib/metadata/validate.ts":
13799
+ /*!****************************************************************!*\
13800
+ !*** ./packages/roosterjs-editor-dom/lib/metadata/validate.ts ***!
13801
+ \****************************************************************/
13802
+ /*! no static exports found */
13803
+ /***/ (function(module, exports, __webpack_require__) {
13804
+
13805
+ "use strict";
13806
+
13807
+ Object.defineProperty(exports, "__esModule", { value: true });
13808
+ /**
13809
+ * Validate the given object with a type definition object
13810
+ * @param input The object to validate
13811
+ * @param def The type definition object used for validation
13812
+ * @returns True if the object passed the validation, otherwise false
13813
+ */
13814
+ function validate(input, def) {
13815
+ var result = false;
13816
+ if ((def.isOptional && typeof input === 'undefined') || (def.allowNull && input === null)) {
13817
+ result = true;
13818
+ }
13819
+ else {
13820
+ switch (def.type) {
13821
+ case 2 /* String */:
13822
+ result =
13823
+ typeof input === 'string' &&
13824
+ (typeof def.value === 'undefined' || input === def.value);
13825
+ break;
13826
+ case 1 /* Number */:
13827
+ result =
13828
+ typeof input === 'number' &&
13829
+ (typeof def.value === 'undefined' || areSameNumbers(def.value, input)) &&
13830
+ (typeof def.minValue === 'undefined' || input >= def.minValue) &&
13831
+ (typeof def.maxValue === 'undefined' || input <= def.maxValue);
13832
+ break;
13833
+ case 0 /* Boolean */:
13834
+ result =
13835
+ typeof input === 'boolean' &&
13836
+ (typeof def.value === 'undefined' || input === def.value);
13837
+ break;
13838
+ case 3 /* Array */:
13839
+ result =
13840
+ Array.isArray(input) &&
13841
+ (typeof def.minLength === 'undefined' || input.length >= def.minLength) &&
13842
+ (typeof def.maxLength === 'undefined' || input.length <= def.maxLength) &&
13843
+ input.every(function (x) { return validate(x, def.itemDef); });
13844
+ break;
13845
+ case 4 /* Object */:
13846
+ result =
13847
+ typeof input === 'object' &&
13848
+ Object.keys(def.propertyDef).every(function (x) { return validate(input[x], def.propertyDef[x]); });
13849
+ break;
13850
+ case 5 /* Customize */:
13851
+ result = def.validator(input);
13852
+ break;
13853
+ }
13854
+ }
13855
+ return result;
13856
+ }
13857
+ exports.default = validate;
13858
+ function areSameNumbers(n1, n2) {
13859
+ return Math.abs(n1 - n2) < 1e-3;
13860
+ }
13861
+
13862
+
13235
13863
  /***/ }),
13236
13864
 
13237
13865
  /***/ "./packages/roosterjs-editor-dom/lib/region/collapseNodesInRegion.ts":
@@ -14210,6 +14838,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
14210
14838
  exports.setHtmlWithMetadata = void 0;
14211
14839
  var createRange_1 = __webpack_require__(/*! ./createRange */ "./packages/roosterjs-editor-dom/lib/selection/createRange.ts");
14212
14840
  var safeInstanceOf_1 = __webpack_require__(/*! ../utils/safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
14841
+ var validate_1 = __webpack_require__(/*! ../metadata/validate */ "./packages/roosterjs-editor-dom/lib/metadata/validate.ts");
14842
+ var definitionCreators_1 = __webpack_require__(/*! ../metadata/definitionCreators */ "./packages/roosterjs-editor-dom/lib/metadata/definitionCreators.ts");
14843
+ var NumberArrayDefinition = (0, definitionCreators_1.createArrayDefinition)((0, definitionCreators_1.createNumberDefinition)());
14844
+ var CoordinatesDefinition = (0, definitionCreators_1.createObjectDefinition)({
14845
+ x: (0, definitionCreators_1.createNumberDefinition)(),
14846
+ y: (0, definitionCreators_1.createNumberDefinition)(),
14847
+ });
14848
+ var IsDarkModeDefinition = (0, definitionCreators_1.createBooleanDefinition)(true /*isOptional*/);
14849
+ var NormalContentMetadataDefinition = (0, definitionCreators_1.createObjectDefinition)({
14850
+ type: (0, definitionCreators_1.createNumberDefinition)(true /*isOptional*/, 0 /* Normal */),
14851
+ isDarkMode: IsDarkModeDefinition,
14852
+ start: NumberArrayDefinition,
14853
+ end: NumberArrayDefinition,
14854
+ });
14855
+ var TableContentMetadataDefinition = (0, definitionCreators_1.createObjectDefinition)({
14856
+ type: (0, definitionCreators_1.createNumberDefinition)(false /*isOptional*/, 1 /* TableSelection */),
14857
+ isDarkMode: IsDarkModeDefinition,
14858
+ tableId: (0, definitionCreators_1.createStringDefinition)(),
14859
+ firstCell: CoordinatesDefinition,
14860
+ lastCell: CoordinatesDefinition,
14861
+ });
14213
14862
  /**
14214
14863
  * @deprecated Use setHtmlWithMetadata instead
14215
14864
  * Restore inner HTML of a root element from given html string. If the string contains selection path,
@@ -14244,8 +14893,11 @@ function setHtmlWithMetadata(rootNode, html, trustedHTMLHandler) {
14244
14893
  if ((0, safeInstanceOf_1.default)(potentialMetadataComment, 'Comment')) {
14245
14894
  try {
14246
14895
  var obj = JSON.parse(potentialMetadataComment.nodeValue || '');
14247
- if (isContentMetadata(obj)) {
14896
+ if ((0, validate_1.default)(obj, NormalContentMetadataDefinition) ||
14897
+ (0, validate_1.default)(obj, TableContentMetadataDefinition)) {
14248
14898
  rootNode.removeChild(potentialMetadataComment);
14899
+ obj.type = typeof obj.type === 'undefined' ? 0 /* Normal */ : obj.type;
14900
+ obj.isDarkMode = obj.isDarkMode || false;
14249
14901
  return obj;
14250
14902
  }
14251
14903
  }
@@ -14254,42 +14906,6 @@ function setHtmlWithMetadata(rootNode, html, trustedHTMLHandler) {
14254
14906
  return undefined;
14255
14907
  }
14256
14908
  exports.setHtmlWithMetadata = setHtmlWithMetadata;
14257
- function isContentMetadata(obj) {
14258
- if (!obj || typeof obj != 'object') {
14259
- return false;
14260
- }
14261
- switch (obj.type || 0 /* Normal */) {
14262
- case 0 /* Normal */:
14263
- var regularMetadata = obj;
14264
- if (isNumberArray(regularMetadata.start) && isNumberArray(regularMetadata.end)) {
14265
- obj.type = 0 /* Normal */;
14266
- obj.isDarkMode = !!obj.isDarkMode;
14267
- return true;
14268
- }
14269
- break;
14270
- case 1 /* TableSelection */:
14271
- var tableMetadata = obj;
14272
- if (typeof tableMetadata.tableId == 'string' &&
14273
- !!tableMetadata.tableId &&
14274
- isCoordinates(tableMetadata.firstCell) &&
14275
- isCoordinates(tableMetadata.lastCell)) {
14276
- obj.isDarkMode = !!obj.isDarkMode;
14277
- return true;
14278
- }
14279
- break;
14280
- }
14281
- return false;
14282
- }
14283
- function isNumberArray(obj) {
14284
- return obj && Array.isArray(obj) && obj.every(function (o) { return typeof o == 'number'; });
14285
- }
14286
- function isCoordinates(obj) {
14287
- var coordinates = obj;
14288
- return (coordinates &&
14289
- typeof coordinates == 'object' &&
14290
- typeof coordinates.x == 'number' &&
14291
- typeof coordinates.y == 'number');
14292
- }
14293
14909
 
14294
14910
 
14295
14911
  /***/ }),
@@ -15580,7 +16196,24 @@ exports.default = isWholeTableSelected;
15580
16196
 
15581
16197
  Object.defineProperty(exports, "__esModule", { value: true });
15582
16198
  exports.saveTableInfo = exports.getTableFormatInfo = void 0;
15583
- var TABLE_STYLE_INFO = 'roosterTableInfo';
16199
+ var metadata_1 = __webpack_require__(/*! ../metadata/metadata */ "./packages/roosterjs-editor-dom/lib/metadata/metadata.ts");
16200
+ var definitionCreators_1 = __webpack_require__(/*! ../metadata/definitionCreators */ "./packages/roosterjs-editor-dom/lib/metadata/definitionCreators.ts");
16201
+ var NullStringDefinition = (0, definitionCreators_1.createStringDefinition)(false /** isOptional */, undefined /** value */, true /** allowNull */);
16202
+ var BooleanDefinition = (0, definitionCreators_1.createBooleanDefinition)(false /** isOptional */);
16203
+ var TableFormatMetadata = (0, definitionCreators_1.createObjectDefinition)({
16204
+ topBorderColor: NullStringDefinition,
16205
+ bottomBorderColor: NullStringDefinition,
16206
+ verticalBorderColor: NullStringDefinition,
16207
+ hasHeaderRow: BooleanDefinition,
16208
+ headerRowColor: NullStringDefinition,
16209
+ hasFirstColumn: BooleanDefinition,
16210
+ hasBandedColumns: BooleanDefinition,
16211
+ hasBandedRows: BooleanDefinition,
16212
+ bgColorEven: NullStringDefinition,
16213
+ bgColorOdd: NullStringDefinition,
16214
+ tableBorderFormat: (0, definitionCreators_1.createNumberDefinition)(false /** isOptional */, undefined /* value */, 0 /* first table border format */, 7 /* last table border format */),
16215
+ keepCellShade: BooleanDefinition,
16216
+ }, false /* isOptional */, true /** allowNull */);
15584
16217
  /**
15585
16218
  * @internal
15586
16219
  * Get the format info of a table
@@ -15588,8 +16221,7 @@ var TABLE_STYLE_INFO = 'roosterTableInfo';
15588
16221
  * @param table The table that has the info
15589
16222
  */
15590
16223
  function getTableFormatInfo(table) {
15591
- var obj = safeParseJSON(table === null || table === void 0 ? void 0 : table.dataset[TABLE_STYLE_INFO]);
15592
- return checkIfTableFormatIsValid(obj) ? obj : null;
16224
+ return (0, metadata_1.getMetadata)(table, TableFormatMetadata);
15593
16225
  }
15594
16226
  exports.getTableFormatInfo = getTableFormatInfo;
15595
16227
  /**
@@ -15600,59 +16232,10 @@ exports.getTableFormatInfo = getTableFormatInfo;
15600
16232
  */
15601
16233
  function saveTableInfo(table, format) {
15602
16234
  if (table && format) {
15603
- table.dataset[TABLE_STYLE_INFO] = JSON.stringify(format);
16235
+ (0, metadata_1.setMetadata)(table, format, TableFormatMetadata);
15604
16236
  }
15605
16237
  }
15606
16238
  exports.saveTableInfo = saveTableInfo;
15607
- function checkIfTableFormatIsValid(format) {
15608
- if (!format) {
15609
- return false;
15610
- }
15611
- var topBorderColor = format.topBorderColor, verticalBorderColor = format.verticalBorderColor, bottomBorderColor = format.bottomBorderColor, bgColorOdd = format.bgColorOdd, bgColorEven = format.bgColorEven, hasBandedColumns = format.hasBandedColumns, hasBandedRows = format.hasBandedRows, hasFirstColumn = format.hasFirstColumn, hasHeaderRow = format.hasHeaderRow, tableBorderFormat = format.tableBorderFormat;
15612
- var colorsValues = [
15613
- topBorderColor,
15614
- verticalBorderColor,
15615
- bottomBorderColor,
15616
- bgColorOdd,
15617
- bgColorEven,
15618
- ];
15619
- var stateValues = [hasBandedColumns, hasBandedRows, hasFirstColumn, hasHeaderRow];
15620
- if (colorsValues.some(function (key) { return !isAValidColor(key); }) ||
15621
- stateValues.some(function (key) { return !isBoolean(key); }) ||
15622
- !isAValidTableBorderType(tableBorderFormat)) {
15623
- return false;
15624
- }
15625
- return true;
15626
- }
15627
- function isAValidColor(color) {
15628
- if (color === null || color === undefined || typeof color === 'string') {
15629
- return true;
15630
- }
15631
- return false;
15632
- }
15633
- function isBoolean(a) {
15634
- if (typeof a === 'boolean') {
15635
- return true;
15636
- }
15637
- return false;
15638
- }
15639
- function isAValidTableBorderType(border) {
15640
- if (-1 < border && border < 8) {
15641
- return true;
15642
- }
15643
- return false;
15644
- }
15645
- function safeParseJSON(json) {
15646
- if (!json) {
15647
- return null;
15648
- }
15649
- try {
15650
- return JSON.parse(json);
15651
- }
15652
- catch (_a) {
15653
- return null;
15654
- }
15655
- }
15656
16239
 
15657
16240
 
15658
16241
  /***/ }),
@@ -15673,9 +16256,10 @@ var isAndroidRegex = /android/i;
15673
16256
  * Get current browser information from user agent string
15674
16257
  * @param userAgent The userAgent string of a browser
15675
16258
  * @param appVersion The appVersion string of a browser
16259
+ * @param vendor The vendor string of a browser
15676
16260
  * @returns The BrowserInfo object calculated from the given userAgent and appVersion
15677
16261
  */
15678
- function getBrowserInfo(userAgent, appVersion) {
16262
+ function getBrowserInfo(userAgent, appVersion, vendor) {
15679
16263
  // checks whether the browser is running in IE
15680
16264
  // IE11 will use rv in UA instead of MSIE. Unfortunately Firefox also uses this. We should also look for "Trident" to confirm this.
15681
16265
  // There have been cases where companies using older version of IE and custom UserAgents have broken this logic (e.g. IE 10 and KellyServices)
@@ -15688,6 +16272,16 @@ function getBrowserInfo(userAgent, appVersion) {
15688
16272
  var isSafari = false;
15689
16273
  var isEdge = false;
15690
16274
  var isWebKit = userAgent.indexOf('WebKit') != -1;
16275
+ var isMobileOrTablet = false;
16276
+ // Reference: http://detectmobilebrowsers.com/
16277
+ // The default regex on the website doesn't consider tablet.
16278
+ // To support tablet, add |android|ipad|playbook|silk to the first regex according to the info in /about page
16279
+ (function (userAgentOrVendor) {
16280
+ if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(userAgentOrVendor)
16281
+ || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(userAgentOrVendor.substr(0, 4))) {
16282
+ isMobileOrTablet = true;
16283
+ }
16284
+ })(userAgent || vendor || "");
15691
16285
  if (!isIE) {
15692
16286
  isChrome = userAgent.indexOf('Chrome') != -1;
15693
16287
  isFirefox = userAgent.indexOf('Firefox') != -1;
@@ -15717,6 +16311,7 @@ function getBrowserInfo(userAgent, appVersion) {
15717
16311
  isEdge: isEdge,
15718
16312
  isIEOrEdge: isIE || isEdge,
15719
16313
  isAndroid: isAndroid,
16314
+ isMobileOrTablet: isMobileOrTablet,
15720
16315
  };
15721
16316
  }
15722
16317
  exports.getBrowserInfo = getBrowserInfo;
@@ -15724,7 +16319,7 @@ exports.getBrowserInfo = getBrowserInfo;
15724
16319
  * Browser object contains browser and operating system information of current environment
15725
16320
  */
15726
16321
  exports.Browser = window
15727
- ? getBrowserInfo(window.navigator.userAgent, window.navigator.appVersion)
16322
+ ? getBrowserInfo(window.navigator.userAgent, window.navigator.appVersion, window.navigator.vendor)
15728
16323
  : {};
15729
16324
 
15730
16325
 
@@ -17096,7 +17691,7 @@ function getColorsFromRGB(color) {
17096
17691
  Object.defineProperty(exports, "__esModule", { value: true });
17097
17692
  var getTagOfNode_1 = __webpack_require__(/*! ./getTagOfNode */ "./packages/roosterjs-editor-dom/lib/utils/getTagOfNode.ts");
17098
17693
  var getComputedStyles_1 = __webpack_require__(/*! ./getComputedStyles */ "./packages/roosterjs-editor-dom/lib/utils/getComputedStyles.ts");
17099
- var CRLF = /^[\r\n]+$/gm;
17694
+ var CRLF = /^[\r\n]+$/g;
17100
17695
  var CRLF_SPACE = /[\t\r\n\u0020\u200B]/gm; // We should only find new line, real space or ZeroWidthSpace (TAB, %20, but not &nbsp;)
17101
17696
  /**
17102
17697
  * @internal
@@ -17356,6 +17951,31 @@ function wrap(nodes, wrapper) {
17356
17951
  exports.default = wrap;
17357
17952
 
17358
17953
 
17954
+ /***/ }),
17955
+
17956
+ /***/ "./packages/roosterjs-editor-plugins/lib/AutoFormat.ts":
17957
+ /*!*************************************************************!*\
17958
+ !*** ./packages/roosterjs-editor-plugins/lib/AutoFormat.ts ***!
17959
+ \*************************************************************/
17960
+ /*! no static exports found */
17961
+ /***/ (function(module, exports, __webpack_require__) {
17962
+
17963
+ "use strict";
17964
+
17965
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17966
+ if (k2 === undefined) k2 = k;
17967
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
17968
+ }) : (function(o, m, k, k2) {
17969
+ if (k2 === undefined) k2 = k;
17970
+ o[k2] = m[k];
17971
+ }));
17972
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17973
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
17974
+ };
17975
+ Object.defineProperty(exports, "__esModule", { value: true });
17976
+ __exportStar(__webpack_require__(/*! ./plugins/AutoFormat/index */ "./packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/index.ts"), exports);
17977
+
17978
+
17359
17979
  /***/ }),
17360
17980
 
17361
17981
  /***/ "./packages/roosterjs-editor-plugins/lib/ContentEdit.ts":
@@ -17690,6 +18310,7 @@ __exportStar(__webpack_require__(/*! ./Picker */ "./packages/roosterjs-editor-pl
17690
18310
  __exportStar(__webpack_require__(/*! ./TableResize */ "./packages/roosterjs-editor-plugins/lib/TableResize.ts"), exports);
17691
18311
  __exportStar(__webpack_require__(/*! ./Watermark */ "./packages/roosterjs-editor-plugins/lib/Watermark.ts"), exports);
17692
18312
  __exportStar(__webpack_require__(/*! ./TableCellSelection */ "./packages/roosterjs-editor-plugins/lib/TableCellSelection.ts"), exports);
18313
+ __exportStar(__webpack_require__(/*! ./AutoFormat */ "./packages/roosterjs-editor-plugins/lib/AutoFormat.ts"), exports);
17693
18314
 
17694
18315
 
17695
18316
  /***/ }),
@@ -17704,6 +18325,41 @@ __exportStar(__webpack_require__(/*! ./TableCellSelection */ "./packages/rooster
17704
18325
  "use strict";
17705
18326
 
17706
18327
  Object.defineProperty(exports, "__esModule", { value: true });
18328
+ var lib_1 = __webpack_require__(/*! roosterjs-editor-dom/lib */ "./packages/roosterjs-editor-dom/lib/index.ts");
18329
+ /**
18330
+ * Generate event names and getXY function based on different platforms to be compatible with desktop and mobile browsers
18331
+ */
18332
+ var MOUSE_EVENT_INFO = (function () {
18333
+ if (lib_1.Browser.isMobileOrTablet) {
18334
+ return {
18335
+ MOUSEDOWN: 'touchstart',
18336
+ MOUSEMOVE: 'touchmove',
18337
+ MOUSEUP: 'touchend',
18338
+ getPageXY: getTouchEventPageXY,
18339
+ };
18340
+ }
18341
+ else {
18342
+ return {
18343
+ MOUSEDOWN: 'mousedown',
18344
+ MOUSEMOVE: 'mousemove',
18345
+ MOUSEUP: 'mouseup',
18346
+ getPageXY: getMouseEventPageXY,
18347
+ };
18348
+ }
18349
+ })();
18350
+ function getMouseEventPageXY(e) {
18351
+ return [e.pageX, e.pageY];
18352
+ }
18353
+ function getTouchEventPageXY(e) {
18354
+ var pageX = 0;
18355
+ var pageY = 0;
18356
+ if (e.targetTouches && e.targetTouches.length > 0) {
18357
+ var touch = e.targetTouches[0];
18358
+ pageX = touch.pageX;
18359
+ pageY = touch.pageY;
18360
+ }
18361
+ return [pageX, pageY];
18362
+ }
17707
18363
  /**
17708
18364
  * @internal
17709
18365
  * A helper class to help manage drag and drop to an HTML element
@@ -17726,19 +18382,20 @@ var DragAndDropHelper = /** @class */ (function () {
17726
18382
  this.handler = handler;
17727
18383
  this.zoomScale = zoomScale;
17728
18384
  this.onMouseDown = function (e) {
17729
- var _a, _b;
18385
+ var _a;
18386
+ var _b, _c;
17730
18387
  e.preventDefault();
17731
18388
  e.stopPropagation();
17732
18389
  _this.addDocumentEvents();
17733
- _this.initX = e.pageX;
17734
- _this.initY = e.pageY;
17735
- _this.initValue = (_b = (_a = _this.handler).onDragStart) === null || _b === void 0 ? void 0 : _b.call(_a, _this.context, e);
18390
+ _a = MOUSE_EVENT_INFO.getPageXY(e), _this.initX = _a[0], _this.initY = _a[1];
18391
+ _this.initValue = (_c = (_b = _this.handler).onDragStart) === null || _c === void 0 ? void 0 : _c.call(_b, _this.context, e);
17736
18392
  };
17737
18393
  this.onMouseMove = function (e) {
17738
18394
  var _a, _b, _c;
17739
18395
  e.preventDefault();
17740
- var deltaX = (e.pageX - _this.initX) / _this.zoomScale;
17741
- var deltaY = (e.pageY - _this.initY) / _this.zoomScale;
18396
+ var _d = MOUSE_EVENT_INFO.getPageXY(e), pageX = _d[0], pageY = _d[1];
18397
+ var deltaX = (pageX - _this.initX) / _this.zoomScale;
18398
+ var deltaY = (pageY - _this.initY) / _this.zoomScale;
17742
18399
  if ((_b = (_a = _this.handler).onDragging) === null || _b === void 0 ? void 0 : _b.call(_a, _this.context, e, _this.initValue, deltaX, deltaY)) {
17743
18400
  (_c = _this.onSubmit) === null || _c === void 0 ? void 0 : _c.call(_this, _this.context, _this.trigger);
17744
18401
  }
@@ -17751,30 +18408,136 @@ var DragAndDropHelper = /** @class */ (function () {
17751
18408
  (_c = _this.onSubmit) === null || _c === void 0 ? void 0 : _c.call(_this, _this.context, _this.trigger);
17752
18409
  }
17753
18410
  };
17754
- trigger.addEventListener('mousedown', this.onMouseDown);
18411
+ trigger.addEventListener(MOUSE_EVENT_INFO.MOUSEDOWN, this.onMouseDown);
17755
18412
  }
17756
18413
  /**
17757
18414
  * Dispose this object, remove all event listeners that has been attached
17758
18415
  */
17759
18416
  DragAndDropHelper.prototype.dispose = function () {
17760
- this.trigger.removeEventListener('mousedown', this.onMouseDown);
18417
+ this.trigger.removeEventListener(MOUSE_EVENT_INFO.MOUSEDOWN, this.onMouseDown);
17761
18418
  this.removeDocumentEvents();
17762
18419
  };
17763
18420
  DragAndDropHelper.prototype.addDocumentEvents = function () {
17764
18421
  var doc = this.trigger.ownerDocument;
17765
- doc.addEventListener('mousemove', this.onMouseMove, true /*useCapture*/);
17766
- doc.addEventListener('mouseup', this.onMouseUp, true /*useCapture*/);
18422
+ doc.addEventListener(MOUSE_EVENT_INFO.MOUSEMOVE, this.onMouseMove, true /*useCapture*/);
18423
+ doc.addEventListener(MOUSE_EVENT_INFO.MOUSEUP, this.onMouseUp, true /*useCapture*/);
17767
18424
  };
17768
18425
  DragAndDropHelper.prototype.removeDocumentEvents = function () {
17769
18426
  var doc = this.trigger.ownerDocument;
17770
- doc.removeEventListener('mousemove', this.onMouseMove, true /*useCapture*/);
17771
- doc.removeEventListener('mouseup', this.onMouseUp, true /*useCapture*/);
18427
+ doc.removeEventListener(MOUSE_EVENT_INFO.MOUSEMOVE, this.onMouseMove, true /*useCapture*/);
18428
+ doc.removeEventListener(MOUSE_EVENT_INFO.MOUSEUP, this.onMouseUp, true /*useCapture*/);
17772
18429
  };
17773
18430
  return DragAndDropHelper;
17774
18431
  }());
17775
18432
  exports.default = DragAndDropHelper;
17776
18433
 
17777
18434
 
18435
+ /***/ }),
18436
+
18437
+ /***/ "./packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/AutoFormat.ts":
18438
+ /*!********************************************************************************!*\
18439
+ !*** ./packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/AutoFormat.ts ***!
18440
+ \********************************************************************************/
18441
+ /*! no static exports found */
18442
+ /***/ (function(module, exports, __webpack_require__) {
18443
+
18444
+ "use strict";
18445
+
18446
+ Object.defineProperty(exports, "__esModule", { value: true });
18447
+ var specialCharacters = /[`!@#$%^&*()_+\=\[\]{};':"\\|,.<>\/?~]/;
18448
+ /**
18449
+ * Automatically transform -- into hyphen, if typed between two words.
18450
+ */
18451
+ var AutoFormat = /** @class */ (function () {
18452
+ function AutoFormat() {
18453
+ }
18454
+ /**
18455
+ * Get a friendly name of this plugin
18456
+ */
18457
+ AutoFormat.prototype.getName = function () {
18458
+ return 'AutoFormat';
18459
+ };
18460
+ /**
18461
+ * Initialize this plugin
18462
+ * @param editor The editor instance
18463
+ */
18464
+ AutoFormat.prototype.initialize = function (editor) {
18465
+ this.editor = editor;
18466
+ };
18467
+ /**
18468
+ * Dispose this plugin
18469
+ */
18470
+ AutoFormat.prototype.dispose = function () {
18471
+ this.editor = null;
18472
+ };
18473
+ /**
18474
+ * Handle events triggered from editor
18475
+ * @param event PluginEvent object
18476
+ */
18477
+ AutoFormat.prototype.onPluginEvent = function (event) {
18478
+ var _this = this;
18479
+ if (event.eventType === 7 /* ContentChanged */ ||
18480
+ event.eventType === 5 /* MouseDown */ ||
18481
+ event.eventType === 6 /* MouseUp */) {
18482
+ this.lastKeyTyped = '';
18483
+ }
18484
+ if (event.eventType === 0 /* KeyDown */) {
18485
+ var keyTyped = event.rawEvent.key;
18486
+ if (keyTyped.length > 1) {
18487
+ this.lastKeyTyped = '';
18488
+ }
18489
+ if (this.lastKeyTyped === '-' &&
18490
+ !specialCharacters.test(keyTyped) &&
18491
+ keyTyped !== ' ' &&
18492
+ keyTyped !== '-') {
18493
+ var searcher = this.editor.getContentSearcherOfCursor(event);
18494
+ var textBeforeCursor = searcher.getSubStringBefore(3);
18495
+ var dashes = searcher.getSubStringBefore(2);
18496
+ var isPrecededByADash = textBeforeCursor[0] === '-';
18497
+ var isPrecededByASpace = textBeforeCursor[0] === ' ';
18498
+ if (isPrecededByADash ||
18499
+ isPrecededByASpace ||
18500
+ specialCharacters.test(textBeforeCursor[0]) ||
18501
+ dashes !== '--') {
18502
+ return;
18503
+ }
18504
+ var textRange_1 = searcher.getRangeFromText(dashes, true /* exactMatch */);
18505
+ var nodeHyphen_1 = document.createTextNode('—');
18506
+ this.editor.addUndoSnapshot(function () {
18507
+ textRange_1.deleteContents();
18508
+ textRange_1.insertNode(nodeHyphen_1);
18509
+ _this.editor.select(nodeHyphen_1, -1 /* End */);
18510
+ }, null /*changeSource*/, true /*canUndoByBackspace*/);
18511
+ //After the substitution the last key typed needs to be cleaned
18512
+ this.lastKeyTyped = '';
18513
+ }
18514
+ else {
18515
+ this.lastKeyTyped = keyTyped;
18516
+ }
18517
+ }
18518
+ };
18519
+ return AutoFormat;
18520
+ }());
18521
+ exports.default = AutoFormat;
18522
+
18523
+
18524
+ /***/ }),
18525
+
18526
+ /***/ "./packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/index.ts":
18527
+ /*!***************************************************************************!*\
18528
+ !*** ./packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/index.ts ***!
18529
+ \***************************************************************************/
18530
+ /*! no static exports found */
18531
+ /***/ (function(module, exports, __webpack_require__) {
18532
+
18533
+ "use strict";
18534
+
18535
+ Object.defineProperty(exports, "__esModule", { value: true });
18536
+ exports.AutoFormat = void 0;
18537
+ var AutoFormat_1 = __webpack_require__(/*! ./AutoFormat */ "./packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/AutoFormat.ts");
18538
+ Object.defineProperty(exports, "AutoFormat", { enumerable: true, get: function () { return AutoFormat_1.default; } });
18539
+
18540
+
17778
18541
  /***/ }),
17779
18542
 
17780
18543
  /***/ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/ContentEdit.ts":
@@ -18172,6 +18935,8 @@ exports.EntityFeatures = {
18172
18935
 
18173
18936
  Object.defineProperty(exports, "__esModule", { value: true });
18174
18937
  exports.ListFeatures = void 0;
18938
+ var getListStyle_1 = __webpack_require__(/*! ../utils/getListStyle */ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListStyle.ts");
18939
+ var getListType_1 = __webpack_require__(/*! ../utils/getListType */ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListType.ts");
18175
18940
  var roosterjs_editor_api_1 = __webpack_require__(/*! roosterjs-editor-api */ "./packages/roosterjs-editor-api/lib/index.ts");
18176
18941
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
18177
18942
  /**
@@ -18275,6 +19040,16 @@ var OutdentWhenEnterOnEmptyLine = {
18275
19040
  },
18276
19041
  defaultDisabled: !roosterjs_editor_dom_1.Browser.isIE && !roosterjs_editor_dom_1.Browser.isChrome,
18277
19042
  };
19043
+ /**
19044
+ * Validate if a block of text is considered a list pattern
19045
+ * The regex expression will look for patterns of the form:
19046
+ * 1. 1> 1) 1- (1)
19047
+ * @returns if a text is considered a list pattern
19048
+ */
19049
+ function isAListPattern(textBeforeCursor) {
19050
+ var REGEX = /^(\*|-|[0-9]{1,2}\.|[0-9]{1,2}\>|[0-9]{1,2}\)|[0-9]{1,2}\-|\([0-9]{1,2}\))$/;
19051
+ return REGEX.test(textBeforeCursor);
19052
+ }
18278
19053
  /**
18279
19054
  * AutoBullet edit feature, provides the ability to automatically convert current line into a list.
18280
19055
  * When user input "1. ", convert into a numbering list
@@ -18286,10 +19061,15 @@ var AutoBullet = {
18286
19061
  if (!cacheGetListElement(event, editor)) {
18287
19062
  var searcher = editor.getContentSearcherOfCursor(event);
18288
19063
  var textBeforeCursor = searcher.getSubStringBefore(4);
19064
+ var listTrigger = function (text) {
19065
+ return editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)
19066
+ ? (0, getListType_1.default)(text)
19067
+ : isAListPattern(text);
19068
+ };
18289
19069
  // Auto list is triggered if:
18290
19070
  // 1. Text before cursor exactly matches '*', '-' or '1.'
18291
19071
  // 2. There's no non-text inline entities before cursor
18292
- return isAListPattern(textBeforeCursor) && !searcher.getNearestNonTextInlineElement();
19072
+ return listTrigger(textBeforeCursor) && !searcher.getNearestNonTextInlineElement();
18293
19073
  }
18294
19074
  return false;
18295
19075
  },
@@ -18302,22 +19082,35 @@ var AutoBullet = {
18302
19082
  var searcher = editor.getContentSearcherOfCursor();
18303
19083
  var textBeforeCursor = searcher.getSubStringBefore(4);
18304
19084
  var textRange = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/);
19085
+ var listType = 0 /* None */;
19086
+ var listStyle;
19087
+ if (editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)) {
19088
+ listType = (0, getListType_1.default)(textBeforeCursor);
19089
+ listStyle = (0, getListStyle_1.default)(textBeforeCursor, listType);
19090
+ }
19091
+ else {
19092
+ listType =
19093
+ textBeforeCursor.indexOf('*') == 0 || textBeforeCursor.indexOf('-') == 0
19094
+ ? 2 /* Unordered */
19095
+ : isAListPattern(textBeforeCursor)
19096
+ ? 1 /* Ordered */
19097
+ : 0 /* None */;
19098
+ }
18305
19099
  if (!textRange) {
18306
19100
  // no op if the range can't be found
18307
19101
  }
18308
- else if (textBeforeCursor.indexOf('*') == 0 ||
18309
- textBeforeCursor.indexOf('-') == 0) {
19102
+ else if (listType === 2 /* Unordered */) {
18310
19103
  prepareAutoBullet(editor, textRange);
18311
- (0, roosterjs_editor_api_1.toggleBullet)(editor);
19104
+ (0, roosterjs_editor_api_1.toggleBullet)(editor, listStyle);
18312
19105
  }
18313
- else if (isAListPattern(textBeforeCursor)) {
19106
+ else if (listType === 1 /* Ordered */) {
18314
19107
  prepareAutoBullet(editor, textRange);
18315
- (0, roosterjs_editor_api_1.toggleNumbering)(editor);
19108
+ (0, roosterjs_editor_api_1.toggleNumbering)(editor, undefined /* startNumber*/, listStyle);
18316
19109
  }
18317
19110
  else if ((regions = editor.getSelectedRegions()) && regions.length == 1) {
18318
19111
  var num = parseInt(textBeforeCursor);
18319
19112
  prepareAutoBullet(editor, textRange);
18320
- (0, roosterjs_editor_api_1.toggleNumbering)(editor, num);
19113
+ (0, roosterjs_editor_api_1.toggleNumbering)(editor, num, listStyle);
18321
19114
  }
18322
19115
  (_a = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/)) === null || _a === void 0 ? void 0 : _a.deleteContents();
18323
19116
  }, null /*changeSource*/, true /*canUndoByBackspace*/);
@@ -18340,16 +19133,6 @@ var MaintainListChain = {
18340
19133
  editor.runAsync(function (editor) { return (0, roosterjs_editor_api_1.experimentCommitListChains)(editor, chains); });
18341
19134
  },
18342
19135
  };
18343
- /**
18344
- * Validate if a block of text is considered a list pattern
18345
- * The regex expression will look for patterns of the form:
18346
- * 1. 1> 1) 1- (1)
18347
- * @returns if a text is considered a list pattern
18348
- */
18349
- function isAListPattern(textBeforeCursor) {
18350
- var REGEX = /^(\*|-|[0-9]{1,2}\.|[0-9]{1,2}\>|[0-9]{1,2}\)|[0-9]{1,2}\-|\([0-9]{1,2}\))$/;
18351
- return REGEX.test(textBeforeCursor);
18352
- }
18353
19136
  function getListChains(editor) {
18354
19137
  return roosterjs_editor_dom_1.VListChain.createListChains(editor.getSelectedRegions());
18355
19138
  }
@@ -18655,7 +19438,9 @@ var commands = [
18655
19438
  createCommand(4096 /* Ctrl */ | 66 /* B */, 8192 /* Meta */ | 66 /* B */, roosterjs_editor_api_1.toggleBold),
18656
19439
  createCommand(4096 /* Ctrl */ | 73 /* I */, 8192 /* Meta */ | 73 /* I */, roosterjs_editor_api_1.toggleItalic),
18657
19440
  createCommand(4096 /* Ctrl */ | 85 /* U */, 8192 /* Meta */ | 85 /* U */, roosterjs_editor_api_1.toggleUnderline),
19441
+ createCommand(4096 /* Ctrl */ | 32 /* SPACE */, 8192 /* Meta */ | 32 /* SPACE */, roosterjs_editor_api_1.clearFormat),
18658
19442
  createCommand(4096 /* Ctrl */ | 90 /* Z */, 8192 /* Meta */ | 90 /* Z */, function (editor) { return editor.undo(); }),
19443
+ createCommand(18 /* ALT */ | 8 /* BACKSPACE */, 18 /* ALT */ | 8 /* BACKSPACE */, function (editor) { return editor.undo(); }),
18659
19444
  createCommand(4096 /* Ctrl */ | 89 /* Y */, 8192 /* Meta */ | 16384 /* Shift */ | 90 /* Z */, function (editor) { return editor.redo(); }),
18660
19445
  createCommand(4096 /* Ctrl */ | 190 /* PERIOD */, 8192 /* Meta */ | 190 /* PERIOD */, roosterjs_editor_api_1.toggleBullet),
18661
19446
  createCommand(4096 /* Ctrl */ | 191 /* FORWARD_SLASH */, 8192 /* Meta */ | 191 /* FORWARD_SLASH */, roosterjs_editor_api_1.toggleNumbering),
@@ -18667,6 +19452,8 @@ var commands = [
18667
19452
  * Ctrl/Meta+B: toggle bold style
18668
19453
  * Ctrl/Meta+I: toggle italic style
18669
19454
  * Ctrl/Meta+U: toggle underline style
19455
+ * Ctrl/Meta+Space: clear formatting
19456
+ * Alt+Backspace: undo
18670
19457
  * Ctrl/Meta+Z: undo
18671
19458
  * Ctrl+Y/Meta+Shift+Z: redo
18672
19459
  * Ctrl/Meta+PERIOD: toggle bullet list
@@ -18676,7 +19463,18 @@ var commands = [
18676
19463
  */
18677
19464
  var DefaultShortcut = {
18678
19465
  allowFunctionKeys: true,
18679
- keys: [66 /* B */, 73 /* I */, 85 /* U */, 89 /* Y */, 90 /* Z */, 188 /* COMMA */, 190 /* PERIOD */, 191 /* FORWARD_SLASH */],
19466
+ keys: [
19467
+ 66 /* B */,
19468
+ 73 /* I */,
19469
+ 85 /* U */,
19470
+ 89 /* Y */,
19471
+ 90 /* Z */,
19472
+ 188 /* COMMA */,
19473
+ 190 /* PERIOD */,
19474
+ 191 /* FORWARD_SLASH */,
19475
+ 32 /* SPACE */,
19476
+ 8 /* BACKSPACE */,
19477
+ ],
18680
19478
  shouldHandleEvent: cacheGetCommand,
18681
19479
  handleEvent: function (event, editor) {
18682
19480
  var command = cacheGetCommand(event);
@@ -18691,13 +19489,16 @@ function cacheGetCommand(event) {
18691
19489
  return (0, roosterjs_editor_dom_1.cacheGetEventData)(event, 'DEFAULT_SHORT_COMMAND', function () {
18692
19490
  var e = event.rawEvent;
18693
19491
  var key =
18694
- // Need to check ALT key to be false since in some language (e.g. Polski) uses AltGr to input some special characters
18695
- // In that case, ctrlKey and altKey are both true in Edge, but we should not trigger any shortcut function here
18696
- event.eventType == 0 /* KeyDown */ && !e.altKey
19492
+ // Need to check AltGraph isn't being pressed since some languages (e.g. Polski) use AltGr
19493
+ // to input some special characters. In that case, ctrlKey and altKey are both true in Edge,
19494
+ // but we should not trigger any shortcut function here. However, we still want to capture
19495
+ // the ALT+BACKSPACE combination.
19496
+ event.eventType == 0 /* KeyDown */ && !e.getModifierState('AltGraph')
18697
19497
  ? e.which |
18698
19498
  (e.metaKey && 8192 /* Meta */) |
18699
19499
  (e.shiftKey && 16384 /* Shift */) |
18700
- (e.ctrlKey && 4096 /* Ctrl */)
19500
+ (e.ctrlKey && 4096 /* Ctrl */) |
19501
+ (e.altKey && 18 /* ALT */)
18701
19502
  : 0;
18702
19503
  return key && commands.filter(function (cmd) { return (roosterjs_editor_dom_1.Browser.isMac ? cmd.macKey : cmd.winKey) == key; })[0];
18703
19504
  });
@@ -19019,12 +19820,27 @@ var OutdentWhenTabText = {
19019
19820
  event.rawEvent.preventDefault();
19020
19821
  },
19021
19822
  };
19823
+ /**
19824
+ * @deprecated
19825
+ * Automatically transform -- into hyphen, if typed between two words.
19826
+ */
19827
+ var AutoHyphen = {
19828
+ keys: [],
19829
+ shouldHandleEvent: function (event, editor) {
19830
+ return false;
19831
+ },
19832
+ handleEvent: function (event, editor) {
19833
+ return false;
19834
+ },
19835
+ defaultDisabled: true,
19836
+ };
19022
19837
  /**
19023
19838
  * @internal
19024
19839
  */
19025
19840
  exports.TextFeatures = {
19026
19841
  indentWhenTabText: IndentWhenTabText,
19027
19842
  outdentWhenTabText: OutdentWhenTabText,
19843
+ autoHyphen: AutoHyphen,
19028
19844
  };
19029
19845
  function shouldSetIndentation(editor, range) {
19030
19846
  var result = false;
@@ -19032,6 +19848,9 @@ function shouldSetIndentation(editor, range) {
19032
19848
  var endPosition = roosterjs_editor_dom_1.Position.getEnd(range);
19033
19849
  var firstBlock = editor.getBlockElementAtNode(startPosition.node);
19034
19850
  var lastBlock = editor.getBlockElementAtNode(endPosition.node);
19851
+ if (!firstBlock || !lastBlock) {
19852
+ return false;
19853
+ }
19035
19854
  if (!firstBlock.equals(lastBlock)) {
19036
19855
  //If the selections has more than one block, we indent all the blocks in the selection
19037
19856
  return true;
@@ -19143,6 +19962,161 @@ var getAllFeatures_1 = __webpack_require__(/*! ./getAllFeatures */ "./packages/r
19143
19962
  Object.defineProperty(exports, "getAllFeatures", { enumerable: true, get: function () { return getAllFeatures_1.default; } });
19144
19963
 
19145
19964
 
19965
+ /***/ }),
19966
+
19967
+ /***/ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListStyle.ts":
19968
+ /*!*****************************************************************************************!*\
19969
+ !*** ./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListStyle.ts ***!
19970
+ \*****************************************************************************************/
19971
+ /*! no static exports found */
19972
+ /***/ (function(module, exports, __webpack_require__) {
19973
+
19974
+ "use strict";
19975
+
19976
+ var _a, _b, _c, _d, _e, _f;
19977
+ Object.defineProperty(exports, "__esModule", { value: true });
19978
+ var characters = {
19979
+ '.': 0 /* Dot */,
19980
+ '-': 1 /* Dash */,
19981
+ ')': 2 /* Parenthesis */,
19982
+ '(': 3 /* DoubleParenthesis */,
19983
+ };
19984
+ var identifyCharacter = function (text) {
19985
+ var char = text[0] === '(' ? text[0] : text[text.length - 1];
19986
+ return characters[char];
19987
+ };
19988
+ var identifyNumberingType = function (text) {
19989
+ var char = text[0] === '(' ? text[1] : text[0];
19990
+ if (!isNaN(parseInt(char))) {
19991
+ return 0 /* Decimal */;
19992
+ }
19993
+ else if (/[a-z]+/g.test(char)) {
19994
+ if (char === 'i') {
19995
+ return 3 /* LowerRoman */;
19996
+ }
19997
+ else {
19998
+ return 1 /* LowerAlpha */;
19999
+ }
20000
+ }
20001
+ else if (/[A-Z]+/g.test(char)) {
20002
+ if (char === 'I') {
20003
+ return 4 /* UpperRoman */;
20004
+ }
20005
+ else {
20006
+ return 2 /* UpperAlpha */;
20007
+ }
20008
+ }
20009
+ };
20010
+ var numberingListTypes = (_a = {},
20011
+ _a[0 /* Decimal */] = function (char) { return DecimalsTypes[char]; },
20012
+ _a[1 /* LowerAlpha */] = function (char) { return LowerAlphaTypes[char]; },
20013
+ _a[2 /* UpperAlpha */] = function (char) { return UpperAlphaTypes[char]; },
20014
+ _a[3 /* LowerRoman */] = function (char) { return LowerRomanTypes[char]; },
20015
+ _a[4 /* UpperRoman */] = function (char) { return UpperRomanTypes[char]; },
20016
+ _a);
20017
+ var UpperRomanTypes = (_b = {},
20018
+ _b[0 /* Dot */] = 16 /* UpperRoman */,
20019
+ _b[1 /* Dash */] = 19 /* UpperRomanDash */,
20020
+ _b[2 /* Parenthesis */] = 17 /* UpperRomanParenthesis */,
20021
+ _b[3 /* DoubleParenthesis */] = 18 /* UpperRomanDoubleParenthesis */,
20022
+ _b);
20023
+ var LowerRomanTypes = (_c = {},
20024
+ _c[0 /* Dot */] = 12 /* LowerRoman */,
20025
+ _c[1 /* Dash */] = 15 /* LowerRomanDash */,
20026
+ _c[2 /* Parenthesis */] = 13 /* LowerRomanParenthesis */,
20027
+ _c[3 /* DoubleParenthesis */] = 14 /* LowerRomanDoubleParenthesis */,
20028
+ _c);
20029
+ var UpperAlphaTypes = (_d = {},
20030
+ _d[0 /* Dot */] = 8 /* UpperAlpha */,
20031
+ _d[1 /* Dash */] = 11 /* UpperAlphaDash */,
20032
+ _d[2 /* Parenthesis */] = 9 /* UpperAlphaParenthesis */,
20033
+ _d[3 /* DoubleParenthesis */] = 10 /* UpperAlphaDoubleParenthesis */,
20034
+ _d);
20035
+ var LowerAlphaTypes = (_e = {},
20036
+ _e[0 /* Dot */] = 4 /* LowerAlpha */,
20037
+ _e[1 /* Dash */] = 7 /* LowerAlphaDash */,
20038
+ _e[2 /* Parenthesis */] = 5 /* LowerAlphaParenthesis */,
20039
+ _e[3 /* DoubleParenthesis */] = 6 /* LowerAlphaDoubleParenthesis */,
20040
+ _e);
20041
+ var DecimalsTypes = (_f = {},
20042
+ _f[0 /* Dot */] = 0 /* Decimal */,
20043
+ _f[1 /* Dash */] = 1 /* DecimalDash */,
20044
+ _f[2 /* Parenthesis */] = 2 /* DecimalParenthesis */,
20045
+ _f[3 /* DoubleParenthesis */] = 3 /* DecimalDoubleParenthesis */,
20046
+ _f);
20047
+ var bulletListType = {
20048
+ '*': 0 /* Disc */,
20049
+ '-': 1 /* Dash */,
20050
+ '--': 2 /* Square */,
20051
+ '->': 4 /* LongArrow */,
20052
+ '-->': 4 /* LongArrow */,
20053
+ '=>': 5 /* UnfilledArrow */,
20054
+ '>': 3 /* ShortArrow */,
20055
+ };
20056
+ var identifyNumberingListType = function (textBeforeCursor) {
20057
+ var numbering = textBeforeCursor.replace(/\s/g, '');
20058
+ var char = identifyCharacter(numbering);
20059
+ var numberingType = identifyNumberingType(numbering);
20060
+ return numberingListTypes[numberingType](char);
20061
+ };
20062
+ var identifyBulletListType = function (textBeforeCursor) {
20063
+ var bullet = textBeforeCursor.replace(/\s/g, '');
20064
+ return bulletListType[bullet];
20065
+ };
20066
+ /**
20067
+ * @internal
20068
+ * @param textBeforeCursor The trigger character
20069
+ * @param listType The type of the list (ordered or unordered)
20070
+ * @returns the style of the list
20071
+ */
20072
+ function getListStyle(textBeforeCursor, listType) {
20073
+ if (listType === 1 /* Ordered */) {
20074
+ return identifyNumberingListType(textBeforeCursor);
20075
+ }
20076
+ else {
20077
+ return identifyBulletListType(textBeforeCursor);
20078
+ }
20079
+ }
20080
+ exports.default = getListStyle;
20081
+
20082
+
20083
+ /***/ }),
20084
+
20085
+ /***/ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListType.ts":
20086
+ /*!****************************************************************************************!*\
20087
+ !*** ./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListType.ts ***!
20088
+ \****************************************************************************************/
20089
+ /*! no static exports found */
20090
+ /***/ (function(module, exports, __webpack_require__) {
20091
+
20092
+ "use strict";
20093
+
20094
+ Object.defineProperty(exports, "__esModule", { value: true });
20095
+ function isABulletList(textBeforeCursor) {
20096
+ var hasTriggers = ['*', '-', '>'].indexOf(textBeforeCursor[0]) > -1;
20097
+ var REGEX = /^(.*?)=>|^(.*?)->|^(.*?)-->|^(.*?)=>|^(.*?)--/;
20098
+ return hasTriggers || REGEX.test(textBeforeCursor);
20099
+ }
20100
+ function isANumberingList(textBeforeCursor) {
20101
+ 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}\))$/;
20102
+ return REGEX.test(textBeforeCursor.replace(/\s/g, ''));
20103
+ }
20104
+ /**
20105
+ * @internal
20106
+ * @param textBeforeCursor The trigger character
20107
+ * @returns If the list is ordered or unordered
20108
+ */
20109
+ function getListType(textBeforeCursor) {
20110
+ if (isABulletList(textBeforeCursor)) {
20111
+ return 2 /* Unordered */;
20112
+ }
20113
+ else if (isANumberingList(textBeforeCursor)) {
20114
+ return 1 /* Ordered */;
20115
+ }
20116
+ }
20117
+ exports.default = getListType;
20118
+
20119
+
19146
20120
  /***/ }),
19147
20121
 
19148
20122
  /***/ "./packages/roosterjs-editor-plugins/lib/plugins/ContextMenu/ContextMenu.ts":
@@ -19824,9 +20798,13 @@ var ImageEdit = /** @class */ (function () {
19824
20798
  /**
19825
20799
  * Create a new instance of ImageEdit
19826
20800
  * @param options Image editing options
20801
+ * @param onShowResizeHandle An optional callback to allow customize resize handle element of image resizing.
20802
+ * To customize the resize handle element, add this callback and change the attributes of elementData then it
20803
+ * will be picked up by ImageEdit code
19827
20804
  */
19828
- function ImageEdit(options) {
20805
+ function ImageEdit(options, onShowResizeHandle) {
19829
20806
  var _this = this;
20807
+ this.onShowResizeHandle = onShowResizeHandle;
19830
20808
  // Allowed editing operations
19831
20809
  this.allowedOperations = 1 /* CornerResize */;
19832
20810
  /**
@@ -20079,7 +21057,7 @@ var ImageEdit = /** @class */ (function () {
20079
21057
  var htmlData = [(0, Resizer_1.getResizeBordersHTML)(options)];
20080
21058
  Object.keys(ImageEditHTMLMap).forEach(function (thisOperation) {
20081
21059
  if ((operation & thisOperation) == thisOperation) {
20082
- (0, roosterjs_editor_dom_1.arrayPush)(htmlData, ImageEditHTMLMap[thisOperation](options));
21060
+ (0, roosterjs_editor_dom_1.arrayPush)(htmlData, ImageEditHTMLMap[thisOperation](options, _this.onShowResizeHandle));
20083
21061
  }
20084
21062
  });
20085
21063
  htmlData.forEach(function (data) {
@@ -20963,16 +21941,20 @@ exports.doubleCheckResize = doubleCheckResize;
20963
21941
  * @internal
20964
21942
  * Get HTML for resize handles at the corners
20965
21943
  */
20966
- function getCornerResizeHTML(_a) {
21944
+ function getCornerResizeHTML(_a, onShowResizeHandle) {
20967
21945
  var resizeBorderColor = _a.borderColor, handlesExperimentalFeatures = _a.handlesExperimentalFeatures;
20968
21946
  var result = [];
20969
21947
  Xs.forEach(function (x) {
20970
21948
  return Ys.forEach(function (y) {
20971
- return result.push((x == '') == (y == '')
21949
+ var elementData = (x == '') == (y == '')
20972
21950
  ? getResizeHandleHTML(x, y, resizeBorderColor, handlesExperimentalFeatures
20973
21951
  ? 1 /* CircularHandlesCorner */
20974
21952
  : 0 /* SquareHandles */)
20975
- : null);
21953
+ : null;
21954
+ if (onShowResizeHandle) {
21955
+ onShowResizeHandle(elementData, x, y);
21956
+ }
21957
+ result.push(elementData);
20976
21958
  });
20977
21959
  });
20978
21960
  return result;
@@ -20982,7 +21964,7 @@ exports.getCornerResizeHTML = getCornerResizeHTML;
20982
21964
  * @internal
20983
21965
  * Get HTML for resize handles on the sides
20984
21966
  */
20985
- function getSideResizeHTML(_a) {
21967
+ function getSideResizeHTML(_a, onShowResizeHandle) {
20986
21968
  var resizeBorderColor = _a.borderColor, isSmallImage = _a.isSmallImage, handlesExperimentalFeatures = _a.handlesExperimentalFeatures;
20987
21969
  if (isSmallImage) {
20988
21970
  return null;
@@ -20990,11 +21972,15 @@ function getSideResizeHTML(_a) {
20990
21972
  var result = [];
20991
21973
  Xs.forEach(function (x) {
20992
21974
  return Ys.forEach(function (y) {
20993
- return result.push((x == '') != (y == '')
21975
+ var elementData = (x == '') != (y == '')
20994
21976
  ? getResizeHandleHTML(x, y, resizeBorderColor, handlesExperimentalFeatures
20995
21977
  ? 1 /* CircularHandlesCorner */
20996
21978
  : 0 /* SquareHandles */)
20997
- : null);
21979
+ : null;
21980
+ if (onShowResizeHandle) {
21981
+ onShowResizeHandle(elementData, x, y);
21982
+ }
21983
+ result.push(elementData);
20998
21984
  });
20999
21985
  });
21000
21986
  return result;
@@ -21309,6 +22295,7 @@ var convertPastedContentFromExcel_1 = __webpack_require__(/*! ./excelConverter/c
21309
22295
  var convertPastedContentFromPowerPoint_1 = __webpack_require__(/*! ./pptConverter/convertPastedContentFromPowerPoint */ "./packages/roosterjs-editor-plugins/lib/plugins/Paste/pptConverter/convertPastedContentFromPowerPoint.ts");
21310
22296
  var convertPastedContentFromWord_1 = __webpack_require__(/*! ./wordConverter/convertPastedContentFromWord */ "./packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/convertPastedContentFromWord.ts");
21311
22297
  var handleLineMerge_1 = __webpack_require__(/*! ./lineMerge/handleLineMerge */ "./packages/roosterjs-editor-plugins/lib/plugins/Paste/lineMerge/handleLineMerge.ts");
22298
+ var sanitizeHtmlColorsFromPastedContent_1 = __webpack_require__(/*! ./sanitizeHtmlColorsFromPastedContent/sanitizeHtmlColorsFromPastedContent */ "./packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeHtmlColorsFromPastedContent/sanitizeHtmlColorsFromPastedContent.ts");
21312
22299
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
21313
22300
  var convertPastedContentFromWordOnline_1 = __webpack_require__(/*! ./officeOnlineConverter/convertPastedContentFromWordOnline */ "./packages/roosterjs-editor-plugins/lib/plugins/Paste/officeOnlineConverter/convertPastedContentFromWordOnline.ts");
21314
22301
  var WORD_ATTRIBUTE_NAME = 'xmlns:w';
@@ -21403,6 +22390,7 @@ var Paste = /** @class */ (function () {
21403
22390
  (0, convertPastedContentForLI_1.default)(fragment);
21404
22391
  (0, handleLineMerge_1.default)(fragment);
21405
22392
  }
22393
+ (0, sanitizeHtmlColorsFromPastedContent_1.default)(sanitizingOption);
21406
22394
  // Replace unknown tags with SPAN
21407
22395
  sanitizingOption.unknownTagReplacement = this.unknownTagReplacement;
21408
22396
  }
@@ -22000,6 +22988,77 @@ function convertPastedContentFromPowerPoint(event, trustedHTMLHandler) {
22000
22988
  exports.default = convertPastedContentFromPowerPoint;
22001
22989
 
22002
22990
 
22991
+ /***/ }),
22992
+
22993
+ /***/ "./packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeHtmlColorsFromPastedContent/deprecatedColorList.ts":
22994
+ /*!************************************************************************************************************************!*\
22995
+ !*** ./packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeHtmlColorsFromPastedContent/deprecatedColorList.ts ***!
22996
+ \************************************************************************************************************************/
22997
+ /*! no static exports found */
22998
+ /***/ (function(module, exports, __webpack_require__) {
22999
+
23000
+ "use strict";
23001
+
23002
+ /**
23003
+ * @internal
23004
+ * List of deprecated colors that should be removed
23005
+ */
23006
+ Object.defineProperty(exports, "__esModule", { value: true });
23007
+ exports.DeprecatedColorList = void 0;
23008
+ exports.DeprecatedColorList = [
23009
+ 'activeborder',
23010
+ 'activecaption',
23011
+ 'appworkspace',
23012
+ 'background',
23013
+ 'buttonhighlight',
23014
+ 'buttonshadow',
23015
+ 'captiontext',
23016
+ 'inactiveborder',
23017
+ 'inactivecaption',
23018
+ 'inactivecaptiontext',
23019
+ 'infobackground',
23020
+ 'infotext',
23021
+ 'menu',
23022
+ 'menutext',
23023
+ 'scrollbar',
23024
+ 'threeddarkshadow',
23025
+ 'threedface',
23026
+ 'threedhighlight',
23027
+ 'threedlightshadow',
23028
+ 'threedfhadow',
23029
+ 'window',
23030
+ 'windowframe',
23031
+ 'windowtext',
23032
+ ];
23033
+
23034
+
23035
+ /***/ }),
23036
+
23037
+ /***/ "./packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeHtmlColorsFromPastedContent/sanitizeHtmlColorsFromPastedContent.ts":
23038
+ /*!****************************************************************************************************************************************!*\
23039
+ !*** ./packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeHtmlColorsFromPastedContent/sanitizeHtmlColorsFromPastedContent.ts ***!
23040
+ \****************************************************************************************************************************************/
23041
+ /*! no static exports found */
23042
+ /***/ (function(module, exports, __webpack_require__) {
23043
+
23044
+ "use strict";
23045
+
23046
+ Object.defineProperty(exports, "__esModule", { value: true });
23047
+ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
23048
+ var deprecatedColorList_1 = __webpack_require__(/*! ./deprecatedColorList */ "./packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeHtmlColorsFromPastedContent/deprecatedColorList.ts");
23049
+ /**
23050
+ * @internal
23051
+ * Remove the deprecated colors from pasted content
23052
+ * @param sanitizingOption the sanitizingOption of BeforePasteEvent
23053
+ * */
23054
+ function sanitizeHtmlColorsFromPastedContent(sanitizingOption) {
23055
+ ['color', 'background-color'].forEach(function (property) {
23056
+ (0, roosterjs_editor_dom_1.chainSanitizerCallback)(sanitizingOption.cssStyleCallbacks, property, function (value) { return deprecatedColorList_1.DeprecatedColorList.indexOf(value) < 0; });
23057
+ });
23058
+ }
23059
+ exports.default = sanitizeHtmlColorsFromPastedContent;
23060
+
23061
+
22003
23062
  /***/ }),
22004
23063
 
22005
23064
  /***/ "./packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/LevelLists.ts":
@@ -23536,7 +24595,7 @@ var TableCellSelection = /** @class */ (function () {
23536
24595
  if (shiftKey) {
23537
24596
  if (!this.firstTarget) {
23538
24597
  var pos = this.editor.getFocusedPosition();
23539
- var cell = getCellAtCursor(this.editor, pos.node);
24598
+ var cell = pos && getCellAtCursor(this.editor, pos.node);
23540
24599
  this.firstTarget = this.firstTarget || cell;
23541
24600
  }
23542
24601
  //If first target is not a table cell, we should ignore this plugin
@@ -23545,7 +24604,10 @@ var TableCellSelection = /** @class */ (function () {
23545
24604
  }
23546
24605
  this.editor.runAsync(function (editor) {
23547
24606
  var pos = editor.getFocusedPosition();
23548
- _this.setData(_this.tableSelection ? _this.lastTarget : pos.node);
24607
+ var newTarget = _this.tableSelection ? _this.lastTarget : pos === null || pos === void 0 ? void 0 : pos.node;
24608
+ if (newTarget) {
24609
+ _this.setData(newTarget);
24610
+ }
23549
24611
  if (_this.firstTable == _this.targetTable) {
23550
24612
  if (!_this.shouldConvertToTableSelection() && !_this.tableSelection) {
23551
24613
  return;
@@ -25102,6 +26164,51 @@ var CompatibleAlignment;
25102
26164
  })(CompatibleAlignment = exports.CompatibleAlignment || (exports.CompatibleAlignment = {}));
25103
26165
 
25104
26166
 
26167
+ /***/ }),
26168
+
26169
+ /***/ "./packages/roosterjs-editor-types/lib/compatibleEnum/BulletListType.ts":
26170
+ /*!******************************************************************************!*\
26171
+ !*** ./packages/roosterjs-editor-types/lib/compatibleEnum/BulletListType.ts ***!
26172
+ \******************************************************************************/
26173
+ /*! no static exports found */
26174
+ /***/ (function(module, exports, __webpack_require__) {
26175
+
26176
+ "use strict";
26177
+
26178
+ Object.defineProperty(exports, "__esModule", { value: true });
26179
+ exports.CompatibleBulletListType = void 0;
26180
+ /**
26181
+ * Enum used to control the different types of bullet list
26182
+ */
26183
+ var CompatibleBulletListType;
26184
+ (function (CompatibleBulletListType) {
26185
+ /**
26186
+ * Bullet triggered by *
26187
+ */
26188
+ CompatibleBulletListType[CompatibleBulletListType["Disc"] = 0] = "Disc";
26189
+ /**
26190
+ * Bullet triggered by -
26191
+ */
26192
+ CompatibleBulletListType[CompatibleBulletListType["Dash"] = 1] = "Dash";
26193
+ /**
26194
+ * Bullet triggered by --
26195
+ */
26196
+ CompatibleBulletListType[CompatibleBulletListType["Square"] = 2] = "Square";
26197
+ /**
26198
+ * Bullet triggered by >
26199
+ */
26200
+ CompatibleBulletListType[CompatibleBulletListType["ShortArrow"] = 3] = "ShortArrow";
26201
+ /**
26202
+ * Bullet triggered by -> or -->
26203
+ */
26204
+ CompatibleBulletListType[CompatibleBulletListType["LongArrow"] = 4] = "LongArrow";
26205
+ /**
26206
+ * Bullet triggered by =>
26207
+ */
26208
+ CompatibleBulletListType[CompatibleBulletListType["UnfilledArrow"] = 5] = "UnfilledArrow";
26209
+ })(CompatibleBulletListType = exports.CompatibleBulletListType || (exports.CompatibleBulletListType = {}));
26210
+
26211
+
25105
26212
  /***/ }),
25106
26213
 
25107
26214
  /***/ "./packages/roosterjs-editor-types/lib/compatibleEnum/Capitalization.ts":
@@ -25400,6 +26507,51 @@ var CompatibleDarkModeDatasetNames;
25400
26507
  })(CompatibleDarkModeDatasetNames = exports.CompatibleDarkModeDatasetNames || (exports.CompatibleDarkModeDatasetNames = {}));
25401
26508
 
25402
26509
 
26510
+ /***/ }),
26511
+
26512
+ /***/ "./packages/roosterjs-editor-types/lib/compatibleEnum/DefinitionType.ts":
26513
+ /*!******************************************************************************!*\
26514
+ !*** ./packages/roosterjs-editor-types/lib/compatibleEnum/DefinitionType.ts ***!
26515
+ \******************************************************************************/
26516
+ /*! no static exports found */
26517
+ /***/ (function(module, exports, __webpack_require__) {
26518
+
26519
+ "use strict";
26520
+
26521
+ Object.defineProperty(exports, "__esModule", { value: true });
26522
+ exports.CompatibleDefinitionType = void 0;
26523
+ /**
26524
+ * Types of definitions, used by Definition type
26525
+ */
26526
+ var CompatibleDefinitionType;
26527
+ (function (CompatibleDefinitionType) {
26528
+ /**
26529
+ * Boolean type definition, represents a boolean type value
26530
+ */
26531
+ CompatibleDefinitionType[CompatibleDefinitionType["Boolean"] = 0] = "Boolean";
26532
+ /**
26533
+ * Number type definition, represents a number type value
26534
+ */
26535
+ CompatibleDefinitionType[CompatibleDefinitionType["Number"] = 1] = "Number";
26536
+ /**
26537
+ * String type definition, represents a string type value
26538
+ */
26539
+ CompatibleDefinitionType[CompatibleDefinitionType["String"] = 2] = "String";
26540
+ /**
26541
+ * Array type definition, represents an array with a given item type
26542
+ */
26543
+ CompatibleDefinitionType[CompatibleDefinitionType["Array"] = 3] = "Array";
26544
+ /**
26545
+ * Object type definition, represents an object with the given property types
26546
+ */
26547
+ CompatibleDefinitionType[CompatibleDefinitionType["Object"] = 4] = "Object";
26548
+ /**
26549
+ * Customize type definition, represents a customized type with a validator function
26550
+ */
26551
+ CompatibleDefinitionType[CompatibleDefinitionType["Customize"] = 5] = "Customize";
26552
+ })(CompatibleDefinitionType = exports.CompatibleDefinitionType || (exports.CompatibleDefinitionType = {}));
26553
+
26554
+
25403
26555
  /***/ }),
25404
26556
 
25405
26557
  /***/ "./packages/roosterjs-editor-types/lib/compatibleEnum/Direction.ts":
@@ -25900,6 +27052,15 @@ var CompatibleExperimentalFeatures;
25900
27052
  * Align list elements elements to left, center and right using setAlignment API
25901
27053
  */
25902
27054
  CompatibleExperimentalFeatures["ListItemAlignment"] = "ListItemAlignment";
27055
+ /**
27056
+ * Trigger formatting by a especial characters. Ex: (A), 1. i).
27057
+ */
27058
+ CompatibleExperimentalFeatures["AutoFormatList"] = "AutoFormatList";
27059
+ /**
27060
+ * @deprecated this feature is always disabled
27061
+ * Automatically transform -- into hyphen, if typed between two words.
27062
+ */
27063
+ CompatibleExperimentalFeatures["AutoHyphen"] = "AutoHyphen";
25903
27064
  })(CompatibleExperimentalFeatures = exports.CompatibleExperimentalFeatures || (exports.CompatibleExperimentalFeatures = {}));
25904
27065
 
25905
27066
 
@@ -26285,6 +27446,107 @@ var CompatibleNodeType;
26285
27446
  })(CompatibleNodeType = exports.CompatibleNodeType || (exports.CompatibleNodeType = {}));
26286
27447
 
26287
27448
 
27449
+ /***/ }),
27450
+
27451
+ /***/ "./packages/roosterjs-editor-types/lib/compatibleEnum/NumberingListType.ts":
27452
+ /*!*********************************************************************************!*\
27453
+ !*** ./packages/roosterjs-editor-types/lib/compatibleEnum/NumberingListType.ts ***!
27454
+ \*********************************************************************************/
27455
+ /*! no static exports found */
27456
+ /***/ (function(module, exports, __webpack_require__) {
27457
+
27458
+ "use strict";
27459
+
27460
+ Object.defineProperty(exports, "__esModule", { value: true });
27461
+ exports.CompatibleNumberingListType = void 0;
27462
+ /**
27463
+ * Enum used to control the different types of numbering list
27464
+ */
27465
+ var CompatibleNumberingListType;
27466
+ (function (CompatibleNumberingListType) {
27467
+ /**
27468
+ * Numbering triggered by 1.
27469
+ */
27470
+ CompatibleNumberingListType[CompatibleNumberingListType["Decimal"] = 0] = "Decimal";
27471
+ /**
27472
+ * Numbering triggered by 1-
27473
+ */
27474
+ CompatibleNumberingListType[CompatibleNumberingListType["DecimalDash"] = 1] = "DecimalDash";
27475
+ /**
27476
+ * Numbering triggered by 1)
27477
+ */
27478
+ CompatibleNumberingListType[CompatibleNumberingListType["DecimalParenthesis"] = 2] = "DecimalParenthesis";
27479
+ /**
27480
+ * Numbering triggered by (1)
27481
+ */
27482
+ CompatibleNumberingListType[CompatibleNumberingListType["DecimalDoubleParenthesis"] = 3] = "DecimalDoubleParenthesis";
27483
+ /**
27484
+ * Numbering triggered by a.
27485
+ */
27486
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerAlpha"] = 4] = "LowerAlpha";
27487
+ /**
27488
+ * Numbering triggered by a)
27489
+ */
27490
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaParenthesis"] = 5] = "LowerAlphaParenthesis";
27491
+ /**
27492
+ * Numbering triggered by (a)
27493
+ */
27494
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaDoubleParenthesis"] = 6] = "LowerAlphaDoubleParenthesis";
27495
+ /**
27496
+ * Numbering triggered by a-
27497
+ */
27498
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaDash"] = 7] = "LowerAlphaDash";
27499
+ /**
27500
+ * Numbering triggered by A.
27501
+ */
27502
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperAlpha"] = 8] = "UpperAlpha";
27503
+ /**
27504
+ * Numbering triggered by A)
27505
+ */
27506
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaParenthesis"] = 9] = "UpperAlphaParenthesis";
27507
+ /**
27508
+ * Numbering triggered by (A)
27509
+ */
27510
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaDoubleParenthesis"] = 10] = "UpperAlphaDoubleParenthesis";
27511
+ /**
27512
+ * Numbering triggered by A-
27513
+ */
27514
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaDash"] = 11] = "UpperAlphaDash";
27515
+ /**
27516
+ * Numbering triggered by i.
27517
+ */
27518
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerRoman"] = 12] = "LowerRoman";
27519
+ /**
27520
+ * Numbering triggered by i)
27521
+ */
27522
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanParenthesis"] = 13] = "LowerRomanParenthesis";
27523
+ /**
27524
+ * Numbering triggered by (i)
27525
+ */
27526
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanDoubleParenthesis"] = 14] = "LowerRomanDoubleParenthesis";
27527
+ /**
27528
+ * Numbering triggered by i-
27529
+ */
27530
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanDash"] = 15] = "LowerRomanDash";
27531
+ /**
27532
+ * Numbering triggered by I.
27533
+ */
27534
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperRoman"] = 16] = "UpperRoman";
27535
+ /**
27536
+ * Numbering triggered by I)
27537
+ */
27538
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanParenthesis"] = 17] = "UpperRomanParenthesis";
27539
+ /**
27540
+ * Numbering triggered by (I)
27541
+ */
27542
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanDoubleParenthesis"] = 18] = "UpperRomanDoubleParenthesis";
27543
+ /**
27544
+ * Numbering triggered by I-
27545
+ */
27546
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanDash"] = 19] = "UpperRomanDash";
27547
+ })(CompatibleNumberingListType = exports.CompatibleNumberingListType || (exports.CompatibleNumberingListType = {}));
27548
+
27549
+
26288
27550
  /***/ }),
26289
27551
 
26290
27552
  /***/ "./packages/roosterjs-editor-types/lib/compatibleEnum/PluginEventType.ts":
@@ -26733,9 +27995,11 @@ var CompatibleTableOperation;
26733
27995
  "use strict";
26734
27996
 
26735
27997
  Object.defineProperty(exports, "__esModule", { value: true });
26736
- exports.CompatibleTableOperation = exports.CompatibleTableBorderFormat = exports.CompatibleSelectionRangeTypes = exports.CompatibleRegionType = exports.CompatibleQueryScope = exports.CompatiblePositionType = exports.CompatiblePluginEventType = exports.CompatibleNodeType = exports.CompatibleListType = exports.CompatibleKnownCreateElementDataIndex = exports.CompatibleKeys = exports.CompatibleIndentation = exports.CompatibleImageEditOperation = exports.CompatibleGetContentMode = exports.CompatibleFontSizeChange = exports.CompatibleExperimentalFeatures = exports.CompatibleEntityOperation = exports.CompatibleEntityClasses = exports.CompatibleDocumentPosition = exports.CompatibleDocumentCommand = exports.CompatibleDirection = exports.CompatibleDarkModeDatasetNames = exports.CompatibleContentType = exports.CompatibleContentTypePrefix = exports.CompatibleContentPosition = exports.CompatibleColorTransformDirection = exports.CompatibleClearFormatMode = exports.CompatibleChangeSource = exports.CompatibleCapitalization = exports.CompatibleAlignment = void 0;
27998
+ exports.CompatibleTableOperation = exports.CompatibleTableBorderFormat = exports.CompatibleSelectionRangeTypes = exports.CompatibleRegionType = exports.CompatibleQueryScope = exports.CompatiblePositionType = exports.CompatiblePluginEventType = exports.CompatibleNumberingListType = exports.CompatibleNodeType = exports.CompatibleListType = exports.CompatibleKnownCreateElementDataIndex = exports.CompatibleKeys = exports.CompatibleIndentation = exports.CompatibleImageEditOperation = exports.CompatibleGetContentMode = exports.CompatibleFontSizeChange = exports.CompatibleExperimentalFeatures = exports.CompatibleEntityOperation = exports.CompatibleEntityClasses = exports.CompatibleDocumentPosition = exports.CompatibleDocumentCommand = exports.CompatibleDirection = exports.CompatibleDefinitionType = exports.CompatibleDarkModeDatasetNames = exports.CompatibleContentType = exports.CompatibleContentTypePrefix = exports.CompatibleContentPosition = exports.CompatibleColorTransformDirection = exports.CompatibleClearFormatMode = exports.CompatibleChangeSource = exports.CompatibleCapitalization = exports.CompatibleBulletListType = exports.CompatibleAlignment = void 0;
26737
27999
  var Alignment_1 = __webpack_require__(/*! ./Alignment */ "./packages/roosterjs-editor-types/lib/compatibleEnum/Alignment.ts");
26738
28000
  Object.defineProperty(exports, "CompatibleAlignment", { enumerable: true, get: function () { return Alignment_1.CompatibleAlignment; } });
28001
+ var BulletListType_1 = __webpack_require__(/*! ./BulletListType */ "./packages/roosterjs-editor-types/lib/compatibleEnum/BulletListType.ts");
28002
+ Object.defineProperty(exports, "CompatibleBulletListType", { enumerable: true, get: function () { return BulletListType_1.CompatibleBulletListType; } });
26739
28003
  var Capitalization_1 = __webpack_require__(/*! ./Capitalization */ "./packages/roosterjs-editor-types/lib/compatibleEnum/Capitalization.ts");
26740
28004
  Object.defineProperty(exports, "CompatibleCapitalization", { enumerable: true, get: function () { return Capitalization_1.CompatibleCapitalization; } });
26741
28005
  var ChangeSource_1 = __webpack_require__(/*! ./ChangeSource */ "./packages/roosterjs-editor-types/lib/compatibleEnum/ChangeSource.ts");
@@ -26751,6 +28015,8 @@ Object.defineProperty(exports, "CompatibleContentTypePrefix", { enumerable: true
26751
28015
  Object.defineProperty(exports, "CompatibleContentType", { enumerable: true, get: function () { return ContentType_1.CompatibleContentType; } });
26752
28016
  var DarkModeDatasetNames_1 = __webpack_require__(/*! ./DarkModeDatasetNames */ "./packages/roosterjs-editor-types/lib/compatibleEnum/DarkModeDatasetNames.ts");
26753
28017
  Object.defineProperty(exports, "CompatibleDarkModeDatasetNames", { enumerable: true, get: function () { return DarkModeDatasetNames_1.CompatibleDarkModeDatasetNames; } });
28018
+ var DefinitionType_1 = __webpack_require__(/*! ./DefinitionType */ "./packages/roosterjs-editor-types/lib/compatibleEnum/DefinitionType.ts");
28019
+ Object.defineProperty(exports, "CompatibleDefinitionType", { enumerable: true, get: function () { return DefinitionType_1.CompatibleDefinitionType; } });
26754
28020
  var Direction_1 = __webpack_require__(/*! ./Direction */ "./packages/roosterjs-editor-types/lib/compatibleEnum/Direction.ts");
26755
28021
  Object.defineProperty(exports, "CompatibleDirection", { enumerable: true, get: function () { return Direction_1.CompatibleDirection; } });
26756
28022
  var DocumentCommand_1 = __webpack_require__(/*! ./DocumentCommand */ "./packages/roosterjs-editor-types/lib/compatibleEnum/DocumentCommand.ts");
@@ -26779,6 +28045,8 @@ var ListType_1 = __webpack_require__(/*! ./ListType */ "./packages/roosterjs-edi
26779
28045
  Object.defineProperty(exports, "CompatibleListType", { enumerable: true, get: function () { return ListType_1.CompatibleListType; } });
26780
28046
  var NodeType_1 = __webpack_require__(/*! ./NodeType */ "./packages/roosterjs-editor-types/lib/compatibleEnum/NodeType.ts");
26781
28047
  Object.defineProperty(exports, "CompatibleNodeType", { enumerable: true, get: function () { return NodeType_1.CompatibleNodeType; } });
28048
+ var NumberingListType_1 = __webpack_require__(/*! ./NumberingListType */ "./packages/roosterjs-editor-types/lib/compatibleEnum/NumberingListType.ts");
28049
+ Object.defineProperty(exports, "CompatibleNumberingListType", { enumerable: true, get: function () { return NumberingListType_1.CompatibleNumberingListType; } });
26782
28050
  var PluginEventType_1 = __webpack_require__(/*! ./PluginEventType */ "./packages/roosterjs-editor-types/lib/compatibleEnum/PluginEventType.ts");
26783
28051
  Object.defineProperty(exports, "CompatiblePluginEventType", { enumerable: true, get: function () { return PluginEventType_1.CompatiblePluginEventType; } });
26784
28052
  var PositionType_1 = __webpack_require__(/*! ./PositionType */ "./packages/roosterjs-editor-types/lib/compatibleEnum/PositionType.ts");