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