roosterjs 8.23.1 → 8.26.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.
@@ -2247,7 +2247,7 @@ function changeCapitalization(editor, capitalization, language) {
2247
2247
  }
2248
2248
  }
2249
2249
  }
2250
- });
2250
+ }, 'changeCapitalization');
2251
2251
  function getCapitalizedText(originalText, language) {
2252
2252
  switch (capitalization) {
2253
2253
  case "lowercase" /* Lowercase */:
@@ -2317,7 +2317,7 @@ function changeFontSize(editor, change, fontSizes) {
2317
2317
  if (lineHeight != 'normal') {
2318
2318
  element.style.lineHeight = 'normal';
2319
2319
  }
2320
- });
2320
+ }, 'changeFontSize');
2321
2321
  }
2322
2322
  exports.default = changeFontSize;
2323
2323
  /**
@@ -2396,6 +2396,7 @@ exports.default = clearBlockFormat;
2396
2396
  Object.defineProperty(exports, "__esModule", { value: true });
2397
2397
  var blockFormat_1 = __webpack_require__(/*! ../utils/blockFormat */ "./packages/roosterjs-editor-api/lib/utils/blockFormat.ts");
2398
2398
  var execCommand_1 = __webpack_require__(/*! ../utils/execCommand */ "./packages/roosterjs-editor-api/lib/utils/execCommand.ts");
2399
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
2399
2400
  var setBackgroundColor_1 = __webpack_require__(/*! ./setBackgroundColor */ "./packages/roosterjs-editor-api/lib/format/setBackgroundColor.ts");
2400
2401
  var setFontName_1 = __webpack_require__(/*! ./setFontName */ "./packages/roosterjs-editor-api/lib/format/setFontName.ts");
2401
2402
  var setFontSize_1 = __webpack_require__(/*! ./setFontSize */ "./packages/roosterjs-editor-api/lib/format/setFontSize.ts");
@@ -2466,7 +2467,7 @@ function clearAttribute(element) {
2466
2467
  function updateStyles(element, callbackfn) {
2467
2468
  var styles = (0, roosterjs_editor_dom_1.getStyles)(element);
2468
2469
  var result = {};
2469
- Object.keys(styles).forEach(function (style) { return callbackfn(style, styles, result); });
2470
+ (0, roosterjs_editor_dom_1.getObjectKeys)(styles).forEach(function (style) { return callbackfn(style, styles, result); });
2470
2471
  (0, roosterjs_editor_dom_1.setStyles)(element, styles);
2471
2472
  return result;
2472
2473
  }
@@ -2511,7 +2512,7 @@ function clearAutoDetectFormat(editor) {
2511
2512
  * @param editor The editor instance
2512
2513
  */
2513
2514
  function clearBlockFormat(editor) {
2514
- editor.addUndoSnapshot(function () {
2515
+ (0, formatUndoSnapshot_1.default)(editor, function () {
2515
2516
  (0, blockFormat_1.default)(editor, function (region) {
2516
2517
  var blocks = (0, roosterjs_editor_dom_1.getSelectedBlockElementsInRegion)(region);
2517
2518
  var nodes = (0, roosterjs_editor_dom_1.collapseNodesInRegion)(region, blocks);
@@ -2519,7 +2520,7 @@ function clearBlockFormat(editor) {
2519
2520
  // If there are styles on table cell, wrap all its children and move down all non-border styles.
2520
2521
  // So that we can preserve styles for unselected blocks as well as border styles for table
2521
2522
  var nonborderStyles = removeNonBorderStyles(region.rootNode);
2522
- if (Object.keys(nonborderStyles).length > 0) {
2523
+ if ((0, roosterjs_editor_dom_1.getObjectKeys)(nonborderStyles).length > 0) {
2523
2524
  var wrapper = (0, roosterjs_editor_dom_1.wrap)((0, roosterjs_editor_dom_1.toArray)(region.rootNode.childNodes));
2524
2525
  (0, roosterjs_editor_dom_1.setStyles)(wrapper, nonborderStyles);
2525
2526
  }
@@ -2530,7 +2531,7 @@ function clearBlockFormat(editor) {
2530
2531
  nodes.forEach(clearNodeFormat);
2531
2532
  });
2532
2533
  setDefaultFormat(editor);
2533
- }, "Format" /* Format */);
2534
+ }, 'clearBlockFormat');
2534
2535
  }
2535
2536
  function clearInlineFormat(editor) {
2536
2537
  editor.focus();
@@ -2540,11 +2541,12 @@ function clearInlineFormat(editor) {
2540
2541
  return node.removeAttribute('class');
2541
2542
  });
2542
2543
  setDefaultFormat(editor);
2544
+ return 'clearInlineFormat';
2543
2545
  }, "Format" /* Format */);
2544
2546
  }
2545
2547
  function setDefaultFormat(editor) {
2546
2548
  var defaultFormat = editor.getDefaultFormat();
2547
- var isDefaultFormatEmpty = Object.keys(defaultFormat).length === 0;
2549
+ var isDefaultFormatEmpty = (0, roosterjs_editor_dom_1.getObjectKeys)(defaultFormat).length === 0;
2548
2550
  editor.queryElements('[style]', 2 /* InSelection */, function (node) {
2549
2551
  var tag = (0, roosterjs_editor_dom_1.getTagOfNode)(node);
2550
2552
  if (TAGS_TO_STOP_UNWRAP.indexOf(tag) == -1) {
@@ -2723,11 +2725,13 @@ function createLink(editor, link, altText, displayText, target) {
2723
2725
  editor.getDocument().execCommand("createLink" /* CreateLink */, false, normalizedUrl_1);
2724
2726
  var traverser = editor.getSelectionTraverser();
2725
2727
  var currentInline = traverser.getNextInlineElement();
2728
+ // list for removing unwanted lines
2729
+ var deletionInlineList = [];
2726
2730
  while (currentInline) {
2727
- var a = currentInline.getContainerNode();
2728
- a.parentElement.removeChild(a);
2731
+ deletionInlineList.push(currentInline.getContainerNode());
2729
2732
  currentInline = traverser.getNextInlineElement();
2730
2733
  }
2734
+ deletionInlineList.forEach(function (node) { return editor.deleteNode(node); });
2731
2735
  anchor = getAnchorNodeAtCursor(editor);
2732
2736
  updateAnchorDisplayText(anchor, displayText);
2733
2737
  }
@@ -2928,6 +2932,7 @@ exports.default = insertEntity;
2928
2932
  "use strict";
2929
2933
 
2930
2934
  Object.defineProperty(exports, "__esModule", { value: true });
2935
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
2931
2936
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
2932
2937
  function insertImage(editor, imageFile, attributes) {
2933
2938
  if (typeof imageFile == 'string') {
@@ -2943,17 +2948,17 @@ function insertImage(editor, imageFile, attributes) {
2943
2948
  }
2944
2949
  exports.default = insertImage;
2945
2950
  function insertImageWithSrc(editor, src, attributes) {
2946
- editor.addUndoSnapshot(function () {
2951
+ (0, formatUndoSnapshot_1.default)(editor, function () {
2947
2952
  var image = editor.getDocument().createElement('img');
2948
2953
  image.src = src;
2949
2954
  if (attributes) {
2950
- Object.keys(attributes).forEach(function (attribute) {
2955
+ (0, roosterjs_editor_dom_1.getObjectKeys)(attributes).forEach(function (attribute) {
2951
2956
  return image.setAttribute(attribute, attributes[attribute]);
2952
2957
  });
2953
2958
  }
2954
2959
  image.style.maxWidth = '100%';
2955
2960
  editor.insertNode(image);
2956
- }, "Format" /* Format */);
2961
+ }, 'insertImage');
2957
2962
  }
2958
2963
 
2959
2964
 
@@ -2969,6 +2974,7 @@ function insertImageWithSrc(editor, src, attributes) {
2969
2974
  "use strict";
2970
2975
 
2971
2976
  Object.defineProperty(exports, "__esModule", { value: true });
2977
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
2972
2978
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
2973
2979
  /**
2974
2980
  * Remove link at selection. If no links at selection, do nothing.
@@ -2978,10 +2984,10 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
2978
2984
  */
2979
2985
  function removeLink(editor) {
2980
2986
  editor.focus();
2981
- editor.addUndoSnapshot(function (start, end) {
2987
+ (0, formatUndoSnapshot_1.default)(editor, function (start, end) {
2982
2988
  editor.queryElements('a[href]', 1 /* OnSelection */, roosterjs_editor_dom_1.unwrap);
2983
2989
  editor.select(start, end);
2984
- }, "Format" /* Format */);
2990
+ }, 'removeLink');
2985
2991
  }
2986
2992
  exports.default = removeLink;
2987
2993
 
@@ -3045,6 +3051,7 @@ exports.default = replaceWithNode;
3045
3051
  "use strict";
3046
3052
 
3047
3053
  Object.defineProperty(exports, "__esModule", { value: true });
3054
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
3048
3055
  /**
3049
3056
  * Rotate an element visually
3050
3057
  * @param editor The editor instance
@@ -3053,9 +3060,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3053
3060
  */
3054
3061
  function rotateElement(editor, element, angle) {
3055
3062
  if (element) {
3056
- editor.addUndoSnapshot(function () {
3063
+ (0, formatUndoSnapshot_1.default)(editor, function () {
3057
3064
  element.style.transform = "rotate(" + angle + "deg)";
3058
- }, "Format" /* Format */);
3065
+ }, 'rotateElement');
3059
3066
  }
3060
3067
  }
3061
3068
  exports.default = rotateElement;
@@ -3075,6 +3082,7 @@ exports.default = rotateElement;
3075
3082
  Object.defineProperty(exports, "__esModule", { value: true });
3076
3083
  var blockFormat_1 = __webpack_require__(/*! ../utils/blockFormat */ "./packages/roosterjs-editor-api/lib/utils/blockFormat.ts");
3077
3084
  var execCommand_1 = __webpack_require__(/*! ../utils/execCommand */ "./packages/roosterjs-editor-api/lib/utils/execCommand.ts");
3085
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
3078
3086
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
3079
3087
  /**
3080
3088
  * Set content alignment
@@ -3083,7 +3091,7 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
3083
3091
  * Alignment.Center, Alignment.Left, Alignment.Right
3084
3092
  */
3085
3093
  function setAlignment(editor, alignment) {
3086
- editor.addUndoSnapshot(function () {
3094
+ (0, formatUndoSnapshot_1.default)(editor, function () {
3087
3095
  var selection = editor.getSelectionRangeEx();
3088
3096
  var isATable = selection && selection.type === 1 /* TableSelection */;
3089
3097
  var elementAtCursor = editor.getElementAtCursor();
@@ -3099,7 +3107,7 @@ function setAlignment(editor, alignment) {
3099
3107
  else {
3100
3108
  alignText(editor, alignment);
3101
3109
  }
3102
- }, "Format" /* Format */);
3110
+ }, 'rotateElement');
3103
3111
  }
3104
3112
  exports.default = setAlignment;
3105
3113
  /**
@@ -3154,7 +3162,7 @@ function alignList(editor, alignment) {
3154
3162
  var startNode = blocks[0].getStartNode();
3155
3163
  var vList = (0, roosterjs_editor_dom_1.createVListFromRegion)(region, true /*includeSiblingLists*/, startNode);
3156
3164
  vList.setAlignment(start, end, alignment);
3157
- });
3165
+ }, undefined /* beforeRunCallback */, 'alignList');
3158
3166
  }
3159
3167
 
3160
3168
 
@@ -3185,7 +3193,7 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
3185
3193
  function setBackgroundColor(editor, color) {
3186
3194
  (0, applyInlineStyle_1.default)(editor, function (element, isInnerNode) {
3187
3195
  (0, roosterjs_editor_dom_1.setColor)(element, isInnerNode ? '' : color, true /*isBackground*/, editor.isDarkMode());
3188
- });
3196
+ }, 'setBackgroundColor');
3189
3197
  }
3190
3198
  exports.default = setBackgroundColor;
3191
3199
 
@@ -3203,6 +3211,7 @@ exports.default = setBackgroundColor;
3203
3211
 
3204
3212
  Object.defineProperty(exports, "__esModule", { value: true });
3205
3213
  var collapseSelectedBlocks_1 = __webpack_require__(/*! ../utils/collapseSelectedBlocks */ "./packages/roosterjs-editor-api/lib/utils/collapseSelectedBlocks.ts");
3214
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
3206
3215
  /**
3207
3216
  * Change direction for the blocks/paragraph at selection
3208
3217
  * @param editor The editor instance
@@ -3211,13 +3220,13 @@ var collapseSelectedBlocks_1 = __webpack_require__(/*! ../utils/collapseSelected
3211
3220
  */
3212
3221
  function setDirection(editor, direction) {
3213
3222
  editor.focus();
3214
- editor.addUndoSnapshot(function (start, end) {
3223
+ (0, formatUndoSnapshot_1.default)(editor, function (start, end) {
3215
3224
  (0, collapseSelectedBlocks_1.default)(editor, function (element) {
3216
3225
  element.setAttribute('dir', direction == 0 /* LeftToRight */ ? 'ltr' : 'rtl');
3217
3226
  element.style.textAlign = direction == 0 /* LeftToRight */ ? 'left' : 'right';
3218
3227
  });
3219
3228
  editor.select(start, end);
3220
- }, "Format" /* Format */);
3229
+ }, 'setDirection');
3221
3230
  }
3222
3231
  exports.default = setDirection;
3223
3232
 
@@ -3246,7 +3255,7 @@ function setFontName(editor, fontName) {
3246
3255
  // (http://www.w3schools.com/tags/tag_font.asp).
3247
3256
  (0, applyListItemWrap_1.default)(editor, 'font-family', function (element, isInnerNode) {
3248
3257
  element.style.fontFamily = isInnerNode ? '' : fontName;
3249
- });
3258
+ }, 'setFontName');
3250
3259
  }
3251
3260
  exports.default = setFontName;
3252
3261
 
@@ -3280,7 +3289,7 @@ function setFontSize(editor, fontSize) {
3280
3289
  if (lineHeight != 'normal') {
3281
3290
  element.style.lineHeight = 'normal';
3282
3291
  }
3283
- });
3292
+ }, 'setFontSize');
3284
3293
  }
3285
3294
  exports.default = setFontSize;
3286
3295
 
@@ -3297,6 +3306,7 @@ exports.default = setFontSize;
3297
3306
  "use strict";
3298
3307
 
3299
3308
  Object.defineProperty(exports, "__esModule", { value: true });
3309
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
3300
3310
  /**
3301
3311
  * Set image alt text for all selected images at selection. If no images is contained
3302
3312
  * in selection, do nothing.
@@ -3308,11 +3318,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3308
3318
  */
3309
3319
  function setImageAltText(editor, altText) {
3310
3320
  editor.focus();
3311
- editor.addUndoSnapshot(function () {
3321
+ (0, formatUndoSnapshot_1.default)(editor, function () {
3312
3322
  editor.queryElements('img', 1 /* OnSelection */, function (node) {
3313
3323
  return node.setAttribute('alt', altText);
3314
3324
  });
3315
- }, "Format" /* Format */);
3325
+ }, 'setImageAltText');
3316
3326
  }
3317
3327
  exports.default = setImageAltText;
3318
3328
 
@@ -3385,7 +3395,7 @@ function setIndentation(editor, indentation) {
3385
3395
  return false;
3386
3396
  }
3387
3397
  return true;
3388
- });
3398
+ }, 'setIndentation');
3389
3399
  }
3390
3400
  exports.default = setIndentation;
3391
3401
  function indent(region, blocks) {
@@ -3431,6 +3441,7 @@ function shouldHandleWithBlockquotes(indentation, editor, startNode) {
3431
3441
  "use strict";
3432
3442
 
3433
3443
  Object.defineProperty(exports, "__esModule", { value: true });
3444
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
3434
3445
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
3435
3446
  /**
3436
3447
  * Resets Ordered List Numbering back to the value of the parameter startNumber
@@ -3440,7 +3451,7 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
3440
3451
  */
3441
3452
  function setOrderedListNumbering(editor, separator, startNumber) {
3442
3453
  if (startNumber === void 0) { startNumber = 1; }
3443
- editor.addUndoSnapshot(function () {
3454
+ (0, formatUndoSnapshot_1.default)(editor, function () {
3444
3455
  editor.focus();
3445
3456
  var regions = editor.getSelectedRegions();
3446
3457
  if (regions[0]) {
@@ -3450,7 +3461,7 @@ function setOrderedListNumbering(editor, separator, startNumber) {
3450
3461
  vList.writeBack();
3451
3462
  }
3452
3463
  }
3453
- }, "Format" /* Format */);
3464
+ }, 'setOrderedListNumbering');
3454
3465
  }
3455
3466
  exports.default = setOrderedListNumbering;
3456
3467
 
@@ -3485,7 +3496,7 @@ function setTextColor(editor, color, shouldApplyInlineStyle) {
3485
3496
  if (!shouldApplyInlineStyle || shouldApplyInlineStyle(element)) {
3486
3497
  (0, roosterjs_editor_dom_1.setColor)(element, isInnerNode ? '' : color, false /*isBackground*/, editor.isDarkMode());
3487
3498
  }
3488
- });
3499
+ }, 'setTextColor');
3489
3500
  }
3490
3501
  exports.default = setTextColor;
3491
3502
 
@@ -3521,7 +3532,7 @@ function toggleBlockQuote(editor, styler) {
3521
3532
  (0, blockWrap_1.default)(editor, function (nodes) {
3522
3533
  var wrapper = (0, roosterjs_editor_dom_1.wrap)(nodes, BLOCKQUOTE_TAG);
3523
3534
  (styler || DEFAULT_STYLER)(wrapper);
3524
- }, function () { return editor.queryElements('blockquote', 1 /* OnSelection */, roosterjs_editor_dom_1.unwrap).length == 0; });
3535
+ }, function () { return editor.queryElements('blockquote', 1 /* OnSelection */, roosterjs_editor_dom_1.unwrap).length == 0; }, 'toggleBlockQuote');
3525
3536
  }
3526
3537
  exports.default = toggleBlockQuote;
3527
3538
 
@@ -3548,7 +3559,7 @@ var execCommand_1 = __webpack_require__(/*! ../utils/execCommand */ "./packages/
3548
3559
  * @param editor The editor instance
3549
3560
  */
3550
3561
  function toggleBold(editor) {
3551
- (0, execCommand_1.default)(editor, "bold" /* Bold */);
3562
+ (0, execCommand_1.default)(editor, "bold" /* Bold */, 'toggleBold');
3552
3563
  }
3553
3564
  exports.default = toggleBold;
3554
3565
 
@@ -3576,7 +3587,7 @@ var toggleListType_1 = __webpack_require__(/*! ../utils/toggleListType */ "./pac
3576
3587
  * @param listStyle (Optional) the style of the bullet list. If not defined, the style will be set to disc.
3577
3588
  */
3578
3589
  function toggleBullet(editor, listStyle) {
3579
- (0, toggleListType_1.default)(editor, 2 /* Unordered */, undefined /* startNumber */, false /* includeSiblingLists */, listStyle);
3590
+ (0, toggleListType_1.default)(editor, 2 /* Unordered */, undefined /* startNumber */, false /* includeSiblingLists */, undefined /** orderedStyle */, listStyle);
3580
3591
  }
3581
3592
  exports.default = toggleBullet;
3582
3593
 
@@ -3617,7 +3628,7 @@ function toggleCodeBlock(editor, styler) {
3617
3628
  (0, roosterjs_editor_dom_1.unwrap)(parent_1);
3618
3629
  }
3619
3630
  }).length == 0;
3620
- });
3631
+ }, 'toggleCodeBlock');
3621
3632
  }
3622
3633
  exports.default = toggleCodeBlock;
3623
3634
 
@@ -3634,6 +3645,7 @@ exports.default = toggleCodeBlock;
3634
3645
  "use strict";
3635
3646
 
3636
3647
  Object.defineProperty(exports, "__esModule", { value: true });
3648
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
3637
3649
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
3638
3650
  /**
3639
3651
  * Toggle header at selection
@@ -3644,7 +3656,7 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
3644
3656
  */
3645
3657
  function toggleHeader(editor, level) {
3646
3658
  level = Math.min(Math.max(Math.round(level), 0), 6);
3647
- editor.addUndoSnapshot(function () {
3659
+ (0, formatUndoSnapshot_1.default)(editor, function () {
3648
3660
  editor.focus();
3649
3661
  var wrapped = false;
3650
3662
  editor.queryElements('H1,H2,H3,H4,H5,H6', 1 /* OnSelection */, function (header) {
@@ -3671,7 +3683,7 @@ function toggleHeader(editor, level) {
3671
3683
  }
3672
3684
  editor.getDocument().execCommand("formatBlock" /* FormatBlock */, false, "<H" + level + ">");
3673
3685
  }
3674
- }, "Format" /* Format */);
3686
+ }, 'toggleHeader');
3675
3687
  }
3676
3688
  exports.default = toggleHeader;
3677
3689
 
@@ -3698,7 +3710,7 @@ var execCommand_1 = __webpack_require__(/*! ../utils/execCommand */ "./packages/
3698
3710
  * @param editor The editor instance
3699
3711
  */
3700
3712
  function toggleItalic(editor) {
3701
- (0, execCommand_1.default)(editor, "italic" /* Italic */);
3713
+ (0, execCommand_1.default)(editor, "italic" /* Italic */, 'toggleItalic');
3702
3714
  }
3703
3715
  exports.default = toggleItalic;
3704
3716
 
@@ -3754,7 +3766,7 @@ var execCommand_1 = __webpack_require__(/*! ../utils/execCommand */ "./packages/
3754
3766
  * @param editor The editor instance
3755
3767
  */
3756
3768
  function toggleStrikethrough(editor) {
3757
- (0, execCommand_1.default)(editor, "strikeThrough" /* StrikeThrough */);
3769
+ (0, execCommand_1.default)(editor, "strikeThrough" /* StrikeThrough */, 'toggleStrikethrough');
3758
3770
  }
3759
3771
  exports.default = toggleStrikethrough;
3760
3772
 
@@ -3783,7 +3795,7 @@ var execCommand_1 = __webpack_require__(/*! ../utils/execCommand */ "./packages/
3783
3795
  * @param editor The editor instance
3784
3796
  */
3785
3797
  function toggleSubscript(editor) {
3786
- (0, execCommand_1.default)(editor, "subscript" /* Subscript */);
3798
+ (0, execCommand_1.default)(editor, "subscript" /* Subscript */, 'toggleSubscript');
3787
3799
  }
3788
3800
  exports.default = toggleSubscript;
3789
3801
 
@@ -3812,7 +3824,7 @@ var execCommand_1 = __webpack_require__(/*! ../utils/execCommand */ "./packages/
3812
3824
  * @param editor The editor instance
3813
3825
  */
3814
3826
  function toggleSuperscript(editor) {
3815
- (0, execCommand_1.default)(editor, "superscript" /* Superscript */);
3827
+ (0, execCommand_1.default)(editor, "superscript" /* Superscript */, 'toggleSuperscript');
3816
3828
  }
3817
3829
  exports.default = toggleSuperscript;
3818
3830
 
@@ -3839,7 +3851,7 @@ var execCommand_1 = __webpack_require__(/*! ../utils/execCommand */ "./packages/
3839
3851
  * @param editor The editor instance
3840
3852
  */
3841
3853
  function toggleUnderline(editor) {
3842
- (0, execCommand_1.default)(editor, "underline" /* Underline */);
3854
+ (0, execCommand_1.default)(editor, "underline" /* Underline */, 'toggleUnderline');
3843
3855
  }
3844
3856
  exports.default = toggleUnderline;
3845
3857
 
@@ -3949,6 +3961,7 @@ Object.defineProperty(exports, "experimentCommitListChains", { enumerable: true,
3949
3961
  "use strict";
3950
3962
 
3951
3963
  Object.defineProperty(exports, "__esModule", { value: true });
3964
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
3952
3965
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
3953
3966
  var TEMP_BACKGROUND_COLOR = 'originalBackgroundColor';
3954
3967
  var CELL_SHADE = 'cellShade';
@@ -3959,7 +3972,7 @@ var CELL_SHADE = 'cellShade';
3959
3972
  **/
3960
3973
  function applyCellShading(editor, color) {
3961
3974
  editor.focus();
3962
- editor.addUndoSnapshot(function () {
3975
+ (0, formatUndoSnapshot_1.default)(editor, function () {
3963
3976
  var regions = editor.getSelectedRegions();
3964
3977
  regions.forEach(function (region) {
3965
3978
  if ((0, roosterjs_editor_dom_1.safeInstanceOf)(region.rootNode, 'HTMLTableCellElement')) {
@@ -3969,7 +3982,7 @@ function applyCellShading(editor, color) {
3969
3982
  region.rootNode.style.backgroundColor;
3970
3983
  }
3971
3984
  });
3972
- });
3985
+ }, 'applyCellShading');
3973
3986
  }
3974
3987
  exports.default = applyCellShading;
3975
3988
 
@@ -3986,6 +3999,7 @@ exports.default = applyCellShading;
3986
3999
  "use strict";
3987
4000
 
3988
4001
  Object.defineProperty(exports, "__esModule", { value: true });
4002
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
3989
4003
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
3990
4004
  /**
3991
4005
  * Edit table with given operation. If there is no table at cursor then no op.
@@ -3995,7 +4009,7 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
3995
4009
  function editTable(editor, operation) {
3996
4010
  var td = editor.getElementAtCursor('TD,TH');
3997
4011
  if (td) {
3998
- editor.addUndoSnapshot(function () {
4012
+ (0, formatUndoSnapshot_1.default)(editor, function () {
3999
4013
  var vtable = new roosterjs_editor_dom_1.VTable(td);
4000
4014
  saveTableSelection(editor, vtable);
4001
4015
  vtable.edit(operation);
@@ -4004,7 +4018,7 @@ function editTable(editor, operation) {
4004
4018
  editor.focus();
4005
4019
  var cellToSelect = calculateCellToSelect(operation, vtable.row, vtable.col);
4006
4020
  editor.select(vtable.getCell(cellToSelect.newRow, cellToSelect.newCol).td, 0 /* Begin */);
4007
- }, "Format" /* Format */);
4021
+ }, 'editTable');
4008
4022
  }
4009
4023
  }
4010
4024
  exports.default = editTable;
@@ -4052,6 +4066,7 @@ function saveTableSelection(editor, vtable) {
4052
4066
  "use strict";
4053
4067
 
4054
4068
  Object.defineProperty(exports, "__esModule", { value: true });
4069
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
4055
4070
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
4056
4071
  /**
4057
4072
  * Format table
@@ -4062,14 +4077,14 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
4062
4077
  function formatTable(editor, format, table) {
4063
4078
  table = table || editor.getElementAtCursor('TABLE');
4064
4079
  if (table) {
4065
- editor.addUndoSnapshot(function (start, end) {
4080
+ (0, formatUndoSnapshot_1.default)(editor, function (start, end) {
4066
4081
  var vtable = new roosterjs_editor_dom_1.VTable(table);
4067
4082
  vtable.applyFormat(format);
4068
4083
  vtable.writeBack();
4069
4084
  editor.transformToDarkColor(vtable.table);
4070
4085
  editor.focus();
4071
4086
  editor.select(start, end);
4072
- }, "Format" /* Format */);
4087
+ }, 'formatTable');
4073
4088
  }
4074
4089
  }
4075
4090
  exports.default = formatTable;
@@ -4087,6 +4102,7 @@ exports.default = formatTable;
4087
4102
  "use strict";
4088
4103
 
4089
4104
  Object.defineProperty(exports, "__esModule", { value: true });
4105
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
4090
4106
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
4091
4107
  /**
4092
4108
  * Insert table into editor at current selection
@@ -4115,7 +4131,7 @@ function insertTable(editor, columns, rows, format) {
4115
4131
  }
4116
4132
  }
4117
4133
  editor.focus();
4118
- editor.addUndoSnapshot(function () {
4134
+ (0, formatUndoSnapshot_1.default)(editor, function () {
4119
4135
  var vtable = new roosterjs_editor_dom_1.VTable(table);
4120
4136
  vtable.applyFormat(format);
4121
4137
  vtable.writeBack();
@@ -4123,7 +4139,7 @@ function insertTable(editor, columns, rows, format) {
4123
4139
  editor.runAsync(function (editor) {
4124
4140
  return editor.select(new roosterjs_editor_dom_1.Position(table, 0 /* Begin */).normalize());
4125
4141
  });
4126
- }, "Format" /* Format */);
4142
+ }, 'insertTable');
4127
4143
  }
4128
4144
  exports.default = insertTable;
4129
4145
  function getTableCellWidth(columns) {
@@ -4151,6 +4167,7 @@ function getTableCellWidth(columns) {
4151
4167
  "use strict";
4152
4168
 
4153
4169
  Object.defineProperty(exports, "__esModule", { value: true });
4170
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ./formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
4154
4171
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
4155
4172
  var ZERO_WIDTH_SPACE = '\u200B';
4156
4173
  /**
@@ -4159,7 +4176,7 @@ var ZERO_WIDTH_SPACE = '\u200B';
4159
4176
  * @param editor The editor instance
4160
4177
  * @param callback The callback function to apply style
4161
4178
  */
4162
- function applyInlineStyle(editor, callback) {
4179
+ function applyInlineStyle(editor, callback, apiName) {
4163
4180
  editor.focus();
4164
4181
  var selection = editor.getSelectionRangeEx();
4165
4182
  if (selection && selection.areAllCollapsed) {
@@ -4192,7 +4209,7 @@ function applyInlineStyle(editor, callback) {
4192
4209
  else {
4193
4210
  // This is start and end node that get the style. The start and end needs to be recorded so that selection
4194
4211
  // can be re-applied post-applying style
4195
- editor.addUndoSnapshot(function () {
4212
+ (0, formatUndoSnapshot_1.default)(editor, function () {
4196
4213
  var firstNode;
4197
4214
  var lastNode;
4198
4215
  selection.ranges.forEach(function (range) {
@@ -4211,7 +4228,7 @@ function applyInlineStyle(editor, callback) {
4211
4228
  if (firstNode && lastNode && selection.type == 0 /* Normal */) {
4212
4229
  editor.select(firstNode, -2 /* Before */, lastNode, -3 /* After */);
4213
4230
  }
4214
- }, "Format" /* Format */);
4231
+ }, apiName);
4215
4232
  }
4216
4233
  }
4217
4234
  exports.default = applyInlineStyle;
@@ -4238,7 +4255,7 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
4238
4255
  * @param styleName Name of the style to apply to the list item
4239
4256
  * @param formatCallback callback to apply the style to each element
4240
4257
  */
4241
- function applyListItemStyleWrap(editor, styleName, formatCallback) {
4258
+ function applyListItemStyleWrap(editor, styleName, formatCallback, apiName) {
4242
4259
  var parentNodes = [];
4243
4260
  (0, applyInlineStyle_1.default)(editor, function (element, isInnerNode) {
4244
4261
  formatCallback(element, isInnerNode);
@@ -4246,7 +4263,7 @@ function applyListItemStyleWrap(editor, styleName, formatCallback) {
4246
4263
  if (parent && parentNodes.indexOf(parent) === -1) {
4247
4264
  parentNodes.push(parent);
4248
4265
  }
4249
- });
4266
+ }, apiName);
4250
4267
  applyStyleToListItems(parentNodes, [styleName]);
4251
4268
  }
4252
4269
  exports.default = applyListItemStyleWrap;
@@ -4278,14 +4295,15 @@ function applyStyleToListItems(parentNodes, styles) {
4278
4295
 
4279
4296
  Object.defineProperty(exports, "__esModule", { value: true });
4280
4297
  var experimentCommitListChains_1 = __webpack_require__(/*! ../experiment/experimentCommitListChains */ "./packages/roosterjs-editor-api/lib/experiment/experimentCommitListChains.ts");
4298
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ./formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
4281
4299
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
4282
4300
  /**
4283
4301
  * Split selection into regions, and perform a block-wise formatting action for each region.
4284
4302
  */
4285
- function blockFormat(editor, callback, beforeRunCallback) {
4303
+ function blockFormat(editor, callback, beforeRunCallback, apiName) {
4286
4304
  editor.focus();
4287
4305
  var selection = editor.getSelectionRangeEx();
4288
- editor.addUndoSnapshot(function (start, end) {
4306
+ (0, formatUndoSnapshot_1.default)(editor, function (start, end) {
4289
4307
  if (!beforeRunCallback || beforeRunCallback()) {
4290
4308
  var regions = editor.getSelectedRegions();
4291
4309
  var chains_1 = roosterjs_editor_dom_1.VListChain.createListChains(regions, start === null || start === void 0 ? void 0 : start.node);
@@ -4298,7 +4316,7 @@ function blockFormat(editor, callback, beforeRunCallback) {
4298
4316
  else if (selection.type == 1 /* TableSelection */) {
4299
4317
  editor.select(selection.table, selection.coordinates);
4300
4318
  }
4301
- }, "Format" /* Format */);
4319
+ }, apiName);
4302
4320
  }
4303
4321
  exports.default = blockFormat;
4304
4322
 
@@ -4326,7 +4344,7 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
4326
4344
  * @param beforeRunCallback A callback function to run before looping all regions. If it returns false,
4327
4345
  * the loop for regions will be skipped
4328
4346
  */
4329
- function blockWrap(editor, wrapFunction, beforeRunCallback) {
4347
+ function blockWrap(editor, wrapFunction, beforeRunCallback, apiName) {
4330
4348
  (0, blockFormat_1.default)(editor, function (region) {
4331
4349
  var blocks = (0, roosterjs_editor_dom_1.getSelectedBlockElementsInRegion)(region, true /*createBlockIfEmpty*/);
4332
4350
  var nodes = (0, roosterjs_editor_dom_1.collapseNodesInRegion)(region, blocks);
@@ -4347,7 +4365,7 @@ function blockWrap(editor, wrapFunction, beforeRunCallback) {
4347
4365
  }
4348
4366
  wrapFunction(nodes);
4349
4367
  }
4350
- }, beforeRunCallback);
4368
+ }, beforeRunCallback, apiName);
4351
4369
  }
4352
4370
  exports.default = blockWrap;
4353
4371
 
@@ -4407,6 +4425,7 @@ function isEmptyBlockUnderTR(block) {
4407
4425
  "use strict";
4408
4426
 
4409
4427
  Object.defineProperty(exports, "__esModule", { value: true });
4428
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ./formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
4410
4429
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
4411
4430
  /**
4412
4431
  * @internal
@@ -4418,7 +4437,7 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
4418
4437
  * @param doWorkaroundForList Optional, set to true to do workaround for list in order to keep current format.
4419
4438
  * Default value is false.
4420
4439
  */
4421
- function execCommand(editor, command) {
4440
+ function execCommand(editor, command, apiName) {
4422
4441
  editor.focus();
4423
4442
  var formatter = function () { return editor.getDocument().execCommand(command, false, null); };
4424
4443
  var selection = editor.getSelectionRangeEx();
@@ -4426,7 +4445,7 @@ function execCommand(editor, command) {
4426
4445
  editor.addUndoSnapshot();
4427
4446
  var formatState = editor.getPendableFormatState(false /* forceGetStateFromDom */);
4428
4447
  formatter();
4429
- var formatName = Object.keys(roosterjs_editor_dom_1.PendableFormatCommandMap).filter(function (x) { return roosterjs_editor_dom_1.PendableFormatCommandMap[x] == command; })[0];
4448
+ var formatName = (0, roosterjs_editor_dom_1.getObjectKeys)(roosterjs_editor_dom_1.PendableFormatCommandMap).filter(function (x) { return roosterjs_editor_dom_1.PendableFormatCommandMap[x] == command; })[0];
4430
4449
  if (formatName) {
4431
4450
  formatState[formatName] = !formatState[formatName];
4432
4451
  editor.triggerPluginEvent(13 /* PendingFormatStateChanged */, {
@@ -4435,7 +4454,7 @@ function execCommand(editor, command) {
4435
4454
  }
4436
4455
  }
4437
4456
  else {
4438
- editor.addUndoSnapshot(function () {
4457
+ (0, formatUndoSnapshot_1.default)(editor, function () {
4439
4458
  var tempRange;
4440
4459
  selection.ranges.forEach(function (range) {
4441
4460
  if (selection.type == 1 /* TableSelection */) {
@@ -4447,12 +4466,40 @@ function execCommand(editor, command) {
4447
4466
  if (tempRange && selection.type == 1 /* TableSelection */) {
4448
4467
  editor.select(selection.table, selection.coordinates);
4449
4468
  }
4450
- }, "Format" /* Format */);
4469
+ }, apiName);
4451
4470
  }
4452
4471
  }
4453
4472
  exports.default = execCommand;
4454
4473
 
4455
4474
 
4475
+ /***/ }),
4476
+
4477
+ /***/ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts":
4478
+ /*!***********************************************************************!*\
4479
+ !*** ./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts ***!
4480
+ \***********************************************************************/
4481
+ /*! no static exports found */
4482
+ /***/ (function(module, exports, __webpack_require__) {
4483
+
4484
+ "use strict";
4485
+
4486
+ Object.defineProperty(exports, "__esModule", { value: true });
4487
+ /**
4488
+ * @internal
4489
+ * Execute add undo snapshot for the Format APIs
4490
+ * @param editor The editor instance
4491
+ * @param command Optional, The callback function to perform formatting, returns a data object which will be used as the data field in ContentChangedEvent if changeSource is not null.
4492
+ * @param apiName Optional, name of the API that was is going to be executed.
4493
+ * Default value is false.
4494
+ */
4495
+ function formatUndoSnapshot(editor, callback, apiName) {
4496
+ editor.addUndoSnapshot(callback, "Format" /* Format */, undefined /* canUndoByBackspace */, apiName && {
4497
+ formatApiName: apiName,
4498
+ });
4499
+ }
4500
+ exports.default = formatUndoSnapshot;
4501
+
4502
+
4456
4503
  /***/ }),
4457
4504
 
4458
4505
  /***/ "./packages/roosterjs-editor-api/lib/utils/toggleListType.ts":
@@ -4483,9 +4530,10 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
4483
4530
  * @param listType The list type to toggle
4484
4531
  * @param startNumber (Optional) Start number of the list
4485
4532
  * @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.
4533
+ * @param orderedStyle (Optional) the style of an ordered. If not defined, the style will be set to decimal.
4534
+ * @param unorderedStyle (Optional) the style of an unordered list. If not defined, the style will be set to disc.
4487
4535
  */
4488
- function toggleListType(editor, listType, startNumber, includeSiblingLists, listStyle) {
4536
+ function toggleListType(editor, listType, startNumber, includeSiblingLists, orderedStyle, unorderedStyle) {
4489
4537
  if (includeSiblingLists === void 0) { includeSiblingLists = true; }
4490
4538
  (0, blockFormat_1.default)(editor, function (region, start, end, chains) {
4491
4539
  var _a;
@@ -4495,12 +4543,12 @@ function toggleListType(editor, listType, startNumber, includeSiblingLists, list
4495
4543
  : (0, roosterjs_editor_dom_1.createVListFromRegion)(region, includeSiblingLists);
4496
4544
  if (vList) {
4497
4545
  vList.changeListType(start, end, listType);
4498
- if (listStyle && editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)) {
4499
- vList.setListStyleType(listStyle);
4546
+ if (editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)) {
4547
+ vList.setListStyleType(orderedStyle, unorderedStyle);
4500
4548
  }
4501
4549
  vList.writeBack();
4502
4550
  }
4503
- });
4551
+ }, undefined /* beforeRunCallback */, 'toggleListType');
4504
4552
  }
4505
4553
  exports.default = toggleListType;
4506
4554
 
@@ -4538,8 +4586,10 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
4538
4586
  * @param callback The editing callback, accepting current selection start and end position, returns an optional object used as the data field of ContentChangedEvent.
4539
4587
  * @param changeSource The ChangeSource string of ContentChangedEvent. @default ChangeSource.Format. Set to null to avoid triggering ContentChangedEvent
4540
4588
  * @param canUndoByBackspace True if this action can be undone when user press Backspace key (aka Auto Complete).
4589
+ * @param formatApiName Optional parameter to provide the ContentChangeEvent which FormatApi was invoked.
4541
4590
  */
4542
- var addUndoSnapshot = function (core, callback, changeSource, canUndoByBackspace) {
4591
+ var addUndoSnapshot = function (core, callback, changeSource, canUndoByBackspace, additionalData) {
4592
+ if (additionalData === void 0) { additionalData = undefined; }
4543
4593
  var undoState = core.undo;
4544
4594
  var isNested = undoState.isNested;
4545
4595
  var data;
@@ -4566,6 +4616,7 @@ var addUndoSnapshot = function (core, callback, changeSource, canUndoByBackspace
4566
4616
  eventType: 7 /* ContentChanged */,
4567
4617
  source: changeSource,
4568
4618
  data: data,
4619
+ additionalData: additionalData,
4569
4620
  };
4570
4621
  core.api.triggerEvent(core, event_1, true /*broadcast*/);
4571
4622
  }
@@ -4606,6 +4657,7 @@ function addUndoSnapshotInternal(core, canUndoByBackspace) {
4606
4657
 
4607
4658
  Object.defineProperty(exports, "__esModule", { value: true });
4608
4659
  exports.attachDomEvent = void 0;
4660
+ var lib_1 = __webpack_require__(/*! roosterjs-editor-dom/lib */ "./packages/roosterjs-editor-dom/lib/index.ts");
4609
4661
  /**
4610
4662
  * @internal
4611
4663
  * Attach a DOM event to the editor content DIV
@@ -4615,7 +4667,7 @@ exports.attachDomEvent = void 0;
4615
4667
  * @param beforeDispatch Optional callback function to be invoked when the DOM event is triggered before trigger plugin event
4616
4668
  */
4617
4669
  var attachDomEvent = function (core, eventMap) {
4618
- var disposers = Object.keys(eventMap || {}).map(function (eventName) {
4670
+ var disposers = (0, lib_1.getObjectKeys)(eventMap || {}).map(function (eventName) {
4619
4671
  var _a = extractHandler(eventMap[eventName]), pluginEventType = _a.pluginEventType, beforeDispatch = _a.beforeDispatch;
4620
4672
  var onEvent = function (event) {
4621
4673
  if (beforeDispatch) {
@@ -4724,11 +4776,13 @@ exports.coreApiMap = {
4724
4776
  "use strict";
4725
4777
 
4726
4778
  Object.defineProperty(exports, "__esModule", { value: true });
4727
- exports.createPasteFragment = void 0;
4779
+ exports.transformTabCharacters = exports.createPasteFragment = void 0;
4728
4780
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
4729
4781
  var START_FRAGMENT = '<!--StartFragment-->';
4730
4782
  var END_FRAGMENT = '<!--EndFragment-->';
4731
4783
  var NBSP_HTML = '\u00A0';
4784
+ var ENSP_HTML = '\u2002';
4785
+ var TAB_SPACES = 6;
4732
4786
  /**
4733
4787
  * @internal
4734
4788
  * Create a DocumentFragment for paste from a ClipboardData
@@ -4819,6 +4873,9 @@ var createPasteFragment = function (core, clipboardData, position, pasteAsText,
4819
4873
  .replace(/^ /g, NBSP_HTML)
4820
4874
  .replace(/\r/g, '')
4821
4875
  .replace(/ {2}/g, ' ' + NBSP_HTML);
4876
+ if (line.includes('\t')) {
4877
+ line = transformTabCharacters(line, index === 0 ? position.offset : 0);
4878
+ }
4822
4879
  var textNode = document.createTextNode(line);
4823
4880
  // There are 3 scenarios:
4824
4881
  // 1. Single line: Paste as it is
@@ -4848,6 +4905,26 @@ var createPasteFragment = function (core, clipboardData, position, pasteAsText,
4848
4905
  return fragment;
4849
4906
  };
4850
4907
  exports.createPasteFragment = createPasteFragment;
4908
+ /**
4909
+ * @internal
4910
+ * Transform \t characters into EN SPACE characters
4911
+ * @param input string NOT containing \n characters
4912
+ * @example t("\thello", 2) => "&ensp;&ensp;&ensp;&ensp;hello"
4913
+ */
4914
+ function transformTabCharacters(input, initialOffset) {
4915
+ if (initialOffset === void 0) { initialOffset = 0; }
4916
+ var line = input;
4917
+ var tIndex;
4918
+ while ((tIndex = line.indexOf('\t')) != -1) {
4919
+ var lineBefore = line.slice(0, tIndex);
4920
+ var lineAfter = line.slice(tIndex + 1);
4921
+ var tabCount = TAB_SPACES - ((lineBefore.length + initialOffset) % TAB_SPACES);
4922
+ var tabStr = Array(tabCount).fill(ENSP_HTML).join('');
4923
+ line = lineBefore + tabStr + lineAfter;
4924
+ }
4925
+ return line;
4926
+ }
4927
+ exports.transformTabCharacters = transformTabCharacters;
4851
4928
  function getCurrentFormat(core, node) {
4852
4929
  var pendableFormat = core.api.getPendableFormatState(core, true /** forceGetStateFromDOM*/);
4853
4930
  var styleBasedFormat = core.api.getStyleBasedFormatState(core, node);
@@ -4909,6 +4986,10 @@ var ensureTypeInContainer = function (core, position, keyboardEvent) {
4909
4986
  var formatNode;
4910
4987
  if (block) {
4911
4988
  formatNode = block.collapseToSingleElement();
4989
+ if ((0, roosterjs_editor_dom_1.isNodeEmpty)(formatNode, false /* trimContent */, true /* shouldCountBrAsVisible */)) {
4990
+ var brEl = formatNode.ownerDocument.createElement('br');
4991
+ formatNode.append(brEl);
4992
+ }
4912
4993
  // if the block is empty, apply default format
4913
4994
  // Otherwise, leave it as it is as we don't want to change the style for existing data
4914
4995
  // unless the block was just created by the keyboard event (e.g. ctrl+a & start typing)
@@ -5152,7 +5233,7 @@ function queryCommandStateFromDOM(core, currentPosition) {
5152
5233
  var tag = (0, roosterjs_editor_dom_1.getTagOfNode)(node);
5153
5234
  var style = node.nodeType == 1 /* Element */ && node.style;
5154
5235
  if (tag && style) {
5155
- Object.keys(PendableStyleCheckers).forEach(function (key) {
5236
+ (0, roosterjs_editor_dom_1.getObjectKeys)(PendableStyleCheckers).forEach(function (key) {
5156
5237
  if (!(pendableKeys.indexOf(key) >= 0)) {
5157
5238
  formatState[key] = formatState[key] || PendableStyleCheckers[key](tag, style);
5158
5239
  if (CssFalsyCheckers[key](style)) {
@@ -5599,7 +5680,7 @@ function restorePendingFormatState(core) {
5599
5680
  if (pendingFormatState.pendableFormatState) {
5600
5681
  var document_1 = contentDiv.ownerDocument;
5601
5682
  var formatState_1 = (0, roosterjs_editor_dom_1.getPendableFormatState)(document_1);
5602
- Object.keys(roosterjs_editor_dom_1.PendableFormatCommandMap).forEach(function (key) {
5683
+ (0, roosterjs_editor_dom_1.getObjectKeys)(roosterjs_editor_dom_1.PendableFormatCommandMap).forEach(function (key) {
5603
5684
  if (!!pendingFormatState.pendableFormatState[key] != formatState_1[key]) {
5604
5685
  document_1.execCommand(roosterjs_editor_dom_1.PendableFormatCommandMap[key], false, null);
5605
5686
  }
@@ -6163,7 +6244,7 @@ var CopyPastePlugin = /** @class */ (function () {
6163
6244
  function CopyPastePlugin(options) {
6164
6245
  var _this = this;
6165
6246
  this.onPaste = function (event) {
6166
- var _a;
6247
+ var _a, _b;
6167
6248
  var range;
6168
6249
  (0, roosterjs_editor_dom_1.extractClipboardEvent)(event, function (clipboardData) { var _a; return (_a = _this.editor) === null || _a === void 0 ? void 0 : _a.paste(clipboardData); }, {
6169
6250
  allowLinkPreview: (_a = _this.editor) === null || _a === void 0 ? void 0 : _a.isFeatureEnabled("PasteWithLinkPreview" /* PasteWithLinkPreview */),
@@ -6176,7 +6257,7 @@ var CopyPastePlugin = /** @class */ (function () {
6176
6257
  removeTempDiv: function (div) {
6177
6258
  _this.cleanUpAndRestoreSelection(div, range, false /* isCopy */);
6178
6259
  },
6179
- });
6260
+ }, (_b = _this.editor) === null || _b === void 0 ? void 0 : _b.getSelectionRange());
6180
6261
  };
6181
6262
  this.state = {
6182
6263
  allowedCustomPasteType: options.allowedCustomPasteType || [],
@@ -6785,7 +6866,7 @@ var EntityPlugin = /** @class */ (function () {
6785
6866
  (0, roosterjs_editor_dom_1.commitEntity)(wrapper, type, isReadonly, entity.id); // Use entity.id here because it is newly updated
6786
6867
  _this.handleNewEntity(entity);
6787
6868
  });
6788
- Object.keys(this.state.shadowEntityCache).forEach(function (id) {
6869
+ (0, roosterjs_editor_dom_1.getObjectKeys)(this.state.shadowEntityCache).forEach(function (id) {
6789
6870
  _this.triggerEvent(_this.state.shadowEntityCache[id], 6 /* Overwrite */);
6790
6871
  delete _this.state.shadowEntityCache[id];
6791
6872
  });
@@ -7072,7 +7153,7 @@ var LifecyclePlugin = /** @class */ (function () {
7072
7153
  LifecyclePlugin.prototype.dispose = function () {
7073
7154
  var _this = this;
7074
7155
  this.editor.triggerPluginEvent(12 /* BeforeDispose */, {}, true /*broadcast*/);
7075
- Object.keys(this.state.customData).forEach(function (key) {
7156
+ (0, roosterjs_editor_dom_1.getObjectKeys)(this.state.customData).forEach(function (key) {
7076
7157
  var data = _this.state.customData[key];
7077
7158
  if (data && data.disposer) {
7078
7159
  data.disposer(data.value);
@@ -7107,7 +7188,7 @@ var LifecyclePlugin = /** @class */ (function () {
7107
7188
  };
7108
7189
  LifecyclePlugin.prototype.adjustBrowserBehavior = function () {
7109
7190
  var _this = this;
7110
- Object.keys(COMMANDS).forEach(function (command) {
7191
+ (0, roosterjs_editor_dom_1.getObjectKeys)(COMMANDS).forEach(function (command) {
7111
7192
  // Catch any possible exception since this should not block the initialization of editor
7112
7193
  try {
7113
7194
  _this.editor.getDocument().execCommand(command, false, COMMANDS[command]);
@@ -7125,7 +7206,7 @@ var LifecyclePlugin = /** @class */ (function () {
7125
7206
  baseFormat.textColors = DARK_MODE_DEFAULT_FORMAT.textColors;
7126
7207
  }
7127
7208
  }
7128
- if (baseFormat && Object.keys(baseFormat).length === 0) {
7209
+ if (baseFormat && (0, roosterjs_editor_dom_1.getObjectKeys)(baseFormat).length === 0) {
7129
7210
  return;
7130
7211
  }
7131
7212
  var _b = baseFormat || {}, fontFamily = _b.fontFamily, fontSize = _b.fontSize, textColor = _b.textColor, textColors = _b.textColors, backgroundColor = _b.backgroundColor, backgroundColors = _b.backgroundColors, bold = _b.bold, italic = _b.italic, underline = _b.underline;
@@ -7334,6 +7415,7 @@ exports.default = NormalizeTablePlugin;
7334
7415
  function normalizeTables(tables) {
7335
7416
  var isDOMChanged = false;
7336
7417
  tables.forEach(function (table) {
7418
+ var _a;
7337
7419
  var tbody = null;
7338
7420
  for (var child = table.firstChild; child; child = child.nextSibling) {
7339
7421
  var tag = (0, roosterjs_editor_dom_1.getTagOfNode)(child);
@@ -7350,7 +7432,7 @@ function normalizeTables(tables) {
7350
7432
  case 'TBODY':
7351
7433
  if (tbody) {
7352
7434
  (0, roosterjs_editor_dom_1.moveChildNodes)(tbody, child, true /*keepExistingChildren*/);
7353
- child.parentNode.removeChild(child);
7435
+ (_a = child.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(child);
7354
7436
  child = tbody;
7355
7437
  isDOMChanged = true;
7356
7438
  }
@@ -7358,16 +7440,20 @@ function normalizeTables(tables) {
7358
7440
  tbody = child;
7359
7441
  }
7360
7442
  break;
7361
- case 'COLGROUP':
7362
- if (table.tHead) {
7363
- table.tHead.prepend(child);
7364
- }
7365
- break;
7366
7443
  default:
7367
7444
  tbody = null;
7368
7445
  break;
7369
7446
  }
7370
7447
  }
7448
+ var colgroups = table.querySelectorAll('colgroup');
7449
+ var thead = table.querySelector('thead');
7450
+ if (thead) {
7451
+ colgroups.forEach(function (colgroup) {
7452
+ if (!thead.contains(colgroup)) {
7453
+ thead.appendChild(colgroup);
7454
+ }
7455
+ });
7456
+ }
7371
7457
  });
7372
7458
  return isDOMChanged;
7373
7459
  }
@@ -7838,8 +7924,8 @@ var __assign = (this && this.__assign) || function () {
7838
7924
  return __assign.apply(this, arguments);
7839
7925
  };
7840
7926
  Object.defineProperty(exports, "__esModule", { value: true });
7841
- var coreApiMap_1 = __webpack_require__(/*! ../coreApi/coreApiMap */ "./packages/roosterjs-editor-core/lib/coreApi/coreApiMap.ts");
7842
7927
  var createCorePlugins_1 = __webpack_require__(/*! ../corePlugins/createCorePlugins */ "./packages/roosterjs-editor-core/lib/corePlugins/createCorePlugins.ts");
7928
+ var coreApiMap_1 = __webpack_require__(/*! ../coreApi/coreApiMap */ "./packages/roosterjs-editor-core/lib/coreApi/coreApiMap.ts");
7843
7929
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
7844
7930
  /**
7845
7931
  * RoosterJs core editor class
@@ -7861,7 +7947,7 @@ var Editor = /** @class */ (function () {
7861
7947
  // 2. Store options values to local variables
7862
7948
  var corePlugins = (0, createCorePlugins_1.default)(contentDiv, options);
7863
7949
  var plugins = [];
7864
- Object.keys(corePlugins).forEach(function (name) {
7950
+ (0, roosterjs_editor_dom_1.getObjectKeys)(corePlugins).forEach(function (name) {
7865
7951
  if (name == '_placeholder') {
7866
7952
  (0, roosterjs_editor_dom_1.arrayPush)(plugins, options.plugins);
7867
7953
  }
@@ -8930,13 +9016,15 @@ exports.default = getFirstLastBlockElement;
8930
9016
  Object.defineProperty(exports, "__esModule", { value: true });
8931
9017
  var extractClipboardItems_1 = __webpack_require__(/*! ./extractClipboardItems */ "./packages/roosterjs-editor-dom/lib/clipboard/extractClipboardItems.ts");
8932
9018
  var extractClipboardItemsForIE_1 = __webpack_require__(/*! ./extractClipboardItemsForIE */ "./packages/roosterjs-editor-dom/lib/clipboard/extractClipboardItemsForIE.ts");
8933
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
9019
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
9020
+ var Browser_1 = __webpack_require__(/*! ../utils/Browser */ "./packages/roosterjs-editor-dom/lib/utils/Browser.ts");
8934
9021
  /**
8935
9022
  * @deprecated Use extractClipboardItems and extractClipboardItemsForIE instead
8936
9023
  * Extract a Clipboard event
8937
9024
  * @param event The paste event
8938
9025
  * @param callback Callback function when data is ready
8939
9026
  * @param options Options to retrieve more items from the event, including HTML string and other customized items
9027
+ * @param rangeBeforePaste Optional range to be removed when pasting in Android
8940
9028
  * @returns An object with the following properties:
8941
9029
  * types: Available types from the clipboard event
8942
9030
  * text: Plain text from the clipboard event
@@ -8945,19 +9033,27 @@ var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterj
8945
9033
  * When set to undefined, it means can't retrieve HTML string, there may be HTML string but direct retrieving is
8946
9034
  * not supported by browser.
8947
9035
  */
8948
- function extractClipboardEvent(event, callback, options) {
9036
+ function extractClipboardEvent(event, callback, options, rangeBeforePaste) {
8949
9037
  var _a;
8950
9038
  var dataTransfer = event.clipboardData ||
8951
9039
  ((_a = event.target.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView).clipboardData;
8952
9040
  if (dataTransfer.items) {
8953
9041
  event.preventDefault();
8954
- (0, extractClipboardItems_1.default)((0, toArray_1.default)(dataTransfer.items), options).then(callback);
9042
+ (0, extractClipboardItems_1.default)((0, toArray_1.default)(dataTransfer.items), options).then(function (clipboardData) {
9043
+ removeContents(rangeBeforePaste);
9044
+ callback(clipboardData);
9045
+ });
8955
9046
  }
8956
9047
  else {
8957
9048
  (0, extractClipboardItemsForIE_1.default)(dataTransfer, callback, options);
8958
9049
  }
8959
9050
  }
8960
9051
  exports.default = extractClipboardEvent;
9052
+ function removeContents(range) {
9053
+ if (Browser_1.Browser.isAndroid && range) {
9054
+ range.deleteContents();
9055
+ }
9056
+ }
8961
9057
 
8962
9058
 
8963
9059
  /***/ }),
@@ -9118,7 +9214,7 @@ function getAllowedCustomType(type, allowedCustomPasteType) {
9118
9214
 
9119
9215
  Object.defineProperty(exports, "__esModule", { value: true });
9120
9216
  var readFile_1 = __webpack_require__(/*! ../utils/readFile */ "./packages/roosterjs-editor-dom/lib/utils/readFile.ts");
9121
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
9217
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
9122
9218
  /**
9123
9219
  * Extract clipboard items to be a ClipboardData object for IE
9124
9220
  * @param dataTransfer The clipboard items retrieve from a DataTransfer object
@@ -9911,17 +10007,19 @@ var Position_1 = __webpack_require__(/*! ../selection/Position */ "./packages/ro
9911
10007
  var PositionContentSearcher_1 = __webpack_require__(/*! ../contentTraverser/PositionContentSearcher */ "./packages/roosterjs-editor-dom/lib/contentTraverser/PositionContentSearcher.ts");
9912
10008
  var queryElements_1 = __webpack_require__(/*! ../utils/queryElements */ "./packages/roosterjs-editor-dom/lib/utils/queryElements.ts");
9913
10009
  var splitTextNode_1 = __webpack_require__(/*! ../utils/splitTextNode */ "./packages/roosterjs-editor-dom/lib/utils/splitTextNode.ts");
9914
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
10010
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
9915
10011
  var unwrap_1 = __webpack_require__(/*! ../utils/unwrap */ "./packages/roosterjs-editor-dom/lib/utils/unwrap.ts");
9916
10012
  var VTable_1 = __webpack_require__(/*! ../table/VTable */ "./packages/roosterjs-editor-dom/lib/table/VTable.ts");
9917
10013
  var wrap_1 = __webpack_require__(/*! ../utils/wrap */ "./packages/roosterjs-editor-dom/lib/utils/wrap.ts");
9918
10014
  var splitParentNode_1 = __webpack_require__(/*! ../utils/splitParentNode */ "./packages/roosterjs-editor-dom/lib/utils/splitParentNode.ts");
10015
+ var NOT_EDITABLE_SELECTOR = '[contenteditable=false]';
9919
10016
  var adjustSteps = [
9920
10017
  adjustInsertPositionForHyperLink,
9921
10018
  adjustInsertPositionForStructuredNode,
9922
10019
  adjustInsertPositionForParagraph,
9923
10020
  adjustInsertPositionForVoidElement,
9924
10021
  adjustInsertPositionForMoveCursorOutOfALink,
10022
+ adjustInsertPositionForNotEditableNode,
9925
10023
  ];
9926
10024
  /**
9927
10025
  * Adjust position for A tag don't be nested inside another A tag.
@@ -10061,6 +10159,26 @@ function adjustInsertPositionForMoveCursorOutOfALink(root, nodeToInsert, positio
10061
10159
  }
10062
10160
  return position;
10063
10161
  }
10162
+ /**
10163
+ * Adjust the position cursor out of a not contenteditable element.
10164
+ */
10165
+ function adjustInsertPositionForNotEditableNode(root, nodeToInsert, position, range) {
10166
+ if (!position.element.isContentEditable) {
10167
+ var nonEditableElement = void 0;
10168
+ var lastNonEditableElement = (0, findClosestElementAncestor_1.default)(position.node, root, NOT_EDITABLE_SELECTOR);
10169
+ while (lastNonEditableElement) {
10170
+ nonEditableElement = lastNonEditableElement;
10171
+ lastNonEditableElement = (nonEditableElement === null || nonEditableElement === void 0 ? void 0 : nonEditableElement.parentElement)
10172
+ ? (0, findClosestElementAncestor_1.default)(nonEditableElement.parentElement, root, NOT_EDITABLE_SELECTOR)
10173
+ : null;
10174
+ }
10175
+ if (nonEditableElement) {
10176
+ position = new Position_1.default(nonEditableElement, -3 /* After */);
10177
+ return adjustInsertPositionForNotEditableNode(root, nodeToInsert, position, range);
10178
+ }
10179
+ }
10180
+ return position;
10181
+ }
10064
10182
  /**
10065
10183
  *
10066
10184
  * @param root the contentDiv of the ditor
@@ -10094,7 +10212,7 @@ function safeRemove(node) {
10094
10212
  "use strict";
10095
10213
 
10096
10214
  Object.defineProperty(exports, "__esModule", { value: true });
10097
- var arrayPush_1 = __webpack_require__(/*! ../utils/arrayPush */ "./packages/roosterjs-editor-dom/lib/utils/arrayPush.ts");
10215
+ var arrayPush_1 = __webpack_require__(/*! ../jsUtils/arrayPush */ "./packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts");
10098
10216
  var collapseNodesInRegion_1 = __webpack_require__(/*! ../region/collapseNodesInRegion */ "./packages/roosterjs-editor-dom/lib/region/collapseNodesInRegion.ts");
10099
10217
  var getRegionsFromRange_1 = __webpack_require__(/*! ../region/getRegionsFromRange */ "./packages/roosterjs-editor-dom/lib/region/getRegionsFromRange.ts");
10100
10218
  var getSelectionRangeInRegion_1 = __webpack_require__(/*! ../region/getSelectionRangeInRegion */ "./packages/roosterjs-editor-dom/lib/region/getSelectionRangeInRegion.ts");
@@ -10487,12 +10605,13 @@ exports.default = isModifierKey;
10487
10605
  Object.defineProperty(exports, "__esModule", { value: true });
10488
10606
  var changeElementTag_1 = __webpack_require__(/*! ../utils/changeElementTag */ "./packages/roosterjs-editor-dom/lib/utils/changeElementTag.ts");
10489
10607
  var getInheritableStyles_1 = __webpack_require__(/*! ./getInheritableStyles */ "./packages/roosterjs-editor-dom/lib/htmlSanitizer/getInheritableStyles.ts");
10608
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
10490
10609
  var getPredefinedCssForElement_1 = __webpack_require__(/*! ./getPredefinedCssForElement */ "./packages/roosterjs-editor-dom/lib/htmlSanitizer/getPredefinedCssForElement.ts");
10491
10610
  var getStyles_1 = __webpack_require__(/*! ../style/getStyles */ "./packages/roosterjs-editor-dom/lib/style/getStyles.ts");
10492
10611
  var getTagOfNode_1 = __webpack_require__(/*! ../utils/getTagOfNode */ "./packages/roosterjs-editor-dom/lib/utils/getTagOfNode.ts");
10493
10612
  var safeInstanceOf_1 = __webpack_require__(/*! ../utils/safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
10494
10613
  var setStyles_1 = __webpack_require__(/*! ../style/setStyles */ "./packages/roosterjs-editor-dom/lib/style/setStyles.ts");
10495
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
10614
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
10496
10615
  var cloneObject_1 = __webpack_require__(/*! ./cloneObject */ "./packages/roosterjs-editor-dom/lib/htmlSanitizer/cloneObject.ts");
10497
10616
  var getAllowedValues_1 = __webpack_require__(/*! ./getAllowedValues */ "./packages/roosterjs-editor-dom/lib/htmlSanitizer/getAllowedValues.ts");
10498
10617
  /**
@@ -10699,7 +10818,7 @@ var HtmlSanitizer = /** @class */ (function () {
10699
10818
  HtmlSanitizer.prototype.preprocessCss = function (element, thisStyle) {
10700
10819
  var predefinedStyles = (0, getPredefinedCssForElement_1.default)(element, this.additionalPredefinedCssForElement);
10701
10820
  if (predefinedStyles) {
10702
- Object.keys(predefinedStyles).forEach(function (name) {
10821
+ (0, getObjectKeys_1.default)(predefinedStyles).forEach(function (name) {
10703
10822
  thisStyle[name] = predefinedStyles[name];
10704
10823
  });
10705
10824
  }
@@ -10707,7 +10826,7 @@ var HtmlSanitizer = /** @class */ (function () {
10707
10826
  HtmlSanitizer.prototype.processCss = function (element, thisStyle, context) {
10708
10827
  var _this = this;
10709
10828
  var styles = (0, getStyles_1.default)(element);
10710
- Object.keys(styles).forEach(function (name) {
10829
+ (0, getObjectKeys_1.default)(styles).forEach(function (name) {
10711
10830
  var value = styles[name];
10712
10831
  var callback = _this.styleCallbacks[name];
10713
10832
  var isInheritable = thisStyle[name] != undefined;
@@ -10822,13 +10941,14 @@ exports.default = chainSanitizerCallback;
10822
10941
 
10823
10942
  Object.defineProperty(exports, "__esModule", { value: true });
10824
10943
  exports.cloneObject = void 0;
10944
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
10825
10945
  function nativeClone(source, existingObj) {
10826
10946
  return Object.assign(existingObj || {}, source);
10827
10947
  }
10828
10948
  function customClone(source, existingObj) {
10829
10949
  var result = existingObj || {};
10830
10950
  if (source) {
10831
- for (var _i = 0, _a = Object.keys(source); _i < _a.length; _i++) {
10951
+ for (var _i = 0, _a = (0, getObjectKeys_1.default)(source); _i < _a.length; _i++) {
10832
10952
  var key = _a[_i];
10833
10953
  result[key] = source[key];
10834
10954
  }
@@ -10903,6 +11023,7 @@ var __assign = (this && this.__assign) || function () {
10903
11023
  };
10904
11024
  Object.defineProperty(exports, "__esModule", { value: true });
10905
11025
  exports.getStyleCallbacks = exports.getDefaultStyleValues = exports.getAllowedCssClassesRegex = exports.getAllowedAttributes = exports.getTagReplacement = void 0;
11026
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
10906
11027
  var cloneObject_1 = __webpack_require__(/*! ./cloneObject */ "./packages/roosterjs-editor-dom/lib/htmlSanitizer/cloneObject.ts");
10907
11028
  var HTML_TAG_REPLACEMENT = {
10908
11029
  // Allowed tags
@@ -11087,7 +11208,7 @@ var ALLOWED_CSS_CLASSES = [];
11087
11208
  function getTagReplacement(additionalReplacements) {
11088
11209
  var result = __assign({}, HTML_TAG_REPLACEMENT);
11089
11210
  var replacements = additionalReplacements || {};
11090
- Object.keys(replacements).forEach(function (key) {
11211
+ (0, getObjectKeys_1.default)(replacements).forEach(function (key) {
11091
11212
  if (key) {
11092
11213
  result[key.toLowerCase()] = replacements[key];
11093
11214
  }
@@ -11257,9 +11378,9 @@ exports.default = getPredefinedCssForElement;
11257
11378
  "use strict";
11258
11379
 
11259
11380
  Object.defineProperty(exports, "__esModule", { value: true });
11260
- 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;
11261
- 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;
11262
- exports.removeMetadata = exports.setMetadata = exports.getMetadata = exports.createObjectDefinition = exports.createArrayDefinition = exports.createStringDefinition = exports.createBooleanDefinition = exports.createNumberDefinition = void 0;
11381
+ exports.VTable = exports.moveChildNodes = exports.KnownCreateElementData = exports.createElement = exports.matchesSelector = exports.setColor = exports.getInnerHTML = exports.readFile = exports.safeInstanceOf = exports.normalizeRect = exports.splitTextNode = exports.getLastLeafNode = exports.getFirstLeafNode = exports.getPreviousLeafSibling = exports.getNextLeafSibling = exports.wrap = exports.unwrap = exports.splitBalancedNodeRange = exports.splitParentNode = exports.queryElements = exports.matchLink = exports.isVoidHtmlElement = exports.isNodeEmpty = exports.isBlockElement = exports.getTagOfNode = exports.PendableFormatCommandMap = exports.getPendableFormatState = exports.getComputedStyle = exports.getComputedStyles = exports.fromHtml = exports.findClosestElementAncestor = exports.contains = exports.collapseNodes = exports.changeElementTag = exports.applyFormat = exports.getBrowserInfo = exports.Browser = exports.extractClipboardItemsForIE = exports.extractClipboardItems = exports.extractClipboardEvent = exports.applyTextStyle = exports.PartialInlineElement = exports.NodeInlineElement = exports.LinkInlineElement = exports.ImageInlineElement = exports.getInlineElementAtNode = exports.PositionContentSearcher = exports.ContentTraverser = exports.getFirstLastBlockElement = exports.getBlockElementAtNode = void 0;
11382
+ exports.createBooleanDefinition = exports.createNumberDefinition = exports.validate = exports.getTextContent = exports.deleteSelectedContent = exports.adjustInsertPosition = exports.setStyles = exports.getStyles = exports.isCtrlOrMetaPressed = exports.isCharacterValue = exports.isModifierKey = exports.clearEventDataCache = exports.cacheGetEventData = exports.getEntitySelector = exports.getEntityFromElement = exports.commitEntity = exports.chainSanitizerCallback = exports.createDefaultHtmlSanitizerOptions = exports.getInheritableStyles = exports.HtmlSanitizer = exports.canUndoAutoComplete = exports.createSnapshots = exports.moveCurrentSnapsnot = exports.moveCurrentSnapshot = exports.clearProceedingSnapshotsV2 = exports.clearProceedingSnapshots = exports.canMoveCurrentSnapshot = exports.addSnapshotV2 = exports.addSnapshot = exports.addRangeToSelection = exports.setHtmlWithMetadata = exports.setHtmlWithSelectionPath = exports.getHtmlWithSelectionPath = exports.getSelectionPath = exports.isPositionAtBeginningOf = exports.getPositionRect = exports.createRange = exports.Position = exports.mergeBlocksInRegion = exports.getSelectionRangeInRegion = exports.isNodeInRegion = exports.collapseNodesInRegion = exports.getSelectedBlockElementsInRegion = exports.getRegionsFromRange = exports.setListItemStyle = exports.VListChain = exports.createVListFromRegion = exports.VListItem = exports.VList = exports.isWholeTableSelected = void 0;
11383
+ exports.toArray = exports.getObjectKeys = exports.arrayPush = exports.removeMetadata = exports.setMetadata = exports.getMetadata = exports.createObjectDefinition = exports.createArrayDefinition = exports.createStringDefinition = void 0;
11263
11384
  var getBlockElementAtNode_1 = __webpack_require__(/*! ./blockElements/getBlockElementAtNode */ "./packages/roosterjs-editor-dom/lib/blockElements/getBlockElementAtNode.ts");
11264
11385
  Object.defineProperty(exports, "getBlockElementAtNode", { enumerable: true, get: function () { return getBlockElementAtNode_1.default; } });
11265
11386
  var getFirstLastBlockElement_1 = __webpack_require__(/*! ./blockElements/getFirstLastBlockElement */ "./packages/roosterjs-editor-dom/lib/blockElements/getFirstLastBlockElement.ts");
@@ -11286,8 +11407,6 @@ var extractClipboardItems_1 = __webpack_require__(/*! ./clipboard/extractClipboa
11286
11407
  Object.defineProperty(exports, "extractClipboardItems", { enumerable: true, get: function () { return extractClipboardItems_1.default; } });
11287
11408
  var extractClipboardItemsForIE_1 = __webpack_require__(/*! ./clipboard/extractClipboardItemsForIE */ "./packages/roosterjs-editor-dom/lib/clipboard/extractClipboardItemsForIE.ts");
11288
11409
  Object.defineProperty(exports, "extractClipboardItemsForIE", { enumerable: true, get: function () { return extractClipboardItemsForIE_1.default; } });
11289
- var arrayPush_1 = __webpack_require__(/*! ./utils/arrayPush */ "./packages/roosterjs-editor-dom/lib/utils/arrayPush.ts");
11290
- Object.defineProperty(exports, "arrayPush", { enumerable: true, get: function () { return arrayPush_1.default; } });
11291
11410
  var Browser_1 = __webpack_require__(/*! ./utils/Browser */ "./packages/roosterjs-editor-dom/lib/utils/Browser.ts");
11292
11411
  Object.defineProperty(exports, "Browser", { enumerable: true, get: function () { return Browser_1.Browser; } });
11293
11412
  Object.defineProperty(exports, "getBrowserInfo", { enumerable: true, get: function () { return Browser_1.getBrowserInfo; } });
@@ -11338,8 +11457,6 @@ var splitTextNode_1 = __webpack_require__(/*! ./utils/splitTextNode */ "./packag
11338
11457
  Object.defineProperty(exports, "splitTextNode", { enumerable: true, get: function () { return splitTextNode_1.default; } });
11339
11458
  var normalizeRect_1 = __webpack_require__(/*! ./utils/normalizeRect */ "./packages/roosterjs-editor-dom/lib/utils/normalizeRect.ts");
11340
11459
  Object.defineProperty(exports, "normalizeRect", { enumerable: true, get: function () { return normalizeRect_1.default; } });
11341
- var toArray_1 = __webpack_require__(/*! ./utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
11342
- Object.defineProperty(exports, "toArray", { enumerable: true, get: function () { return toArray_1.default; } });
11343
11460
  var safeInstanceOf_1 = __webpack_require__(/*! ./utils/safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
11344
11461
  Object.defineProperty(exports, "safeInstanceOf", { enumerable: true, get: function () { return safeInstanceOf_1.default; } });
11345
11462
  var readFile_1 = __webpack_require__(/*! ./utils/readFile */ "./packages/roosterjs-editor-dom/lib/utils/readFile.ts");
@@ -11459,6 +11576,12 @@ var metadata_1 = __webpack_require__(/*! ./metadata/metadata */ "./packages/roos
11459
11576
  Object.defineProperty(exports, "getMetadata", { enumerable: true, get: function () { return metadata_1.getMetadata; } });
11460
11577
  Object.defineProperty(exports, "setMetadata", { enumerable: true, get: function () { return metadata_1.setMetadata; } });
11461
11578
  Object.defineProperty(exports, "removeMetadata", { enumerable: true, get: function () { return metadata_1.removeMetadata; } });
11579
+ var arrayPush_1 = __webpack_require__(/*! ./jsUtils/arrayPush */ "./packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts");
11580
+ Object.defineProperty(exports, "arrayPush", { enumerable: true, get: function () { return arrayPush_1.default; } });
11581
+ var getObjectKeys_1 = __webpack_require__(/*! ./jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
11582
+ Object.defineProperty(exports, "getObjectKeys", { enumerable: true, get: function () { return getObjectKeys_1.default; } });
11583
+ var toArray_1 = __webpack_require__(/*! ./jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
11584
+ Object.defineProperty(exports, "toArray", { enumerable: true, get: function () { return toArray_1.default; } });
11462
11585
 
11463
11586
 
11464
11587
  /***/ }),
@@ -12095,6 +12218,70 @@ function getInlineElementBeforeAfter(root, position, isAfter) {
12095
12218
  exports.getInlineElementBeforeAfter = getInlineElementBeforeAfter;
12096
12219
 
12097
12220
 
12221
+ /***/ }),
12222
+
12223
+ /***/ "./packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts":
12224
+ /*!****************************************************************!*\
12225
+ !*** ./packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts ***!
12226
+ \****************************************************************/
12227
+ /*! no static exports found */
12228
+ /***/ (function(module, exports, __webpack_require__) {
12229
+
12230
+ "use strict";
12231
+
12232
+ Object.defineProperty(exports, "__esModule", { value: true });
12233
+ /**
12234
+ * A type-safe wrapper for Array.prototype.push.apply()
12235
+ * @param mainArray The main array to push items into
12236
+ * @param itemsArray The items to push to main array
12237
+ */
12238
+ function arrayPush(mainArray, itemsArray) {
12239
+ Array.prototype.push.apply(mainArray, itemsArray);
12240
+ }
12241
+ exports.default = arrayPush;
12242
+
12243
+
12244
+ /***/ }),
12245
+
12246
+ /***/ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts":
12247
+ /*!********************************************************************!*\
12248
+ !*** ./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts ***!
12249
+ \********************************************************************/
12250
+ /*! no static exports found */
12251
+ /***/ (function(module, exports, __webpack_require__) {
12252
+
12253
+ "use strict";
12254
+
12255
+ Object.defineProperty(exports, "__esModule", { value: true });
12256
+ /**
12257
+ * Provide a strong-typed version of Object.keys()
12258
+ * @param obj The source object
12259
+ * @returns Array of keys
12260
+ */
12261
+ function getObjectKeys(obj) {
12262
+ return Object.keys(obj);
12263
+ }
12264
+ exports.default = getObjectKeys;
12265
+
12266
+
12267
+ /***/ }),
12268
+
12269
+ /***/ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts":
12270
+ /*!**************************************************************!*\
12271
+ !*** ./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts ***!
12272
+ \**************************************************************/
12273
+ /*! no static exports found */
12274
+ /***/ (function(module, exports, __webpack_require__) {
12275
+
12276
+ "use strict";
12277
+
12278
+ Object.defineProperty(exports, "__esModule", { value: true });
12279
+ function toArray(collection) {
12280
+ return [].slice.call(collection);
12281
+ }
12282
+ exports.default = toArray;
12283
+
12284
+
12098
12285
  /***/ }),
12099
12286
 
12100
12287
  /***/ "./packages/roosterjs-editor-dom/lib/list/VList.ts":
@@ -12125,11 +12312,10 @@ var Position_1 = __webpack_require__(/*! ../selection/Position */ "./packages/ro
12125
12312
  var queryElements_1 = __webpack_require__(/*! ../utils/queryElements */ "./packages/roosterjs-editor-dom/lib/utils/queryElements.ts");
12126
12313
  var safeInstanceOf_1 = __webpack_require__(/*! ../utils/safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
12127
12314
  var splitParentNode_1 = __webpack_require__(/*! ../utils/splitParentNode */ "./packages/roosterjs-editor-dom/lib/utils/splitParentNode.ts");
12128
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
12315
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
12129
12316
  var unwrap_1 = __webpack_require__(/*! ../utils/unwrap */ "./packages/roosterjs-editor-dom/lib/utils/unwrap.ts");
12130
12317
  var VListItem_1 = __webpack_require__(/*! ./VListItem */ "./packages/roosterjs-editor-dom/lib/list/VListItem.ts");
12131
12318
  var wrap_1 = __webpack_require__(/*! ../utils/wrap */ "./packages/roosterjs-editor-dom/lib/utils/wrap.ts");
12132
- var definitionCreators_1 = __webpack_require__(/*! ../metadata/definitionCreators */ "./packages/roosterjs-editor-dom/lib/metadata/definitionCreators.ts");
12133
12319
  var metadata_1 = __webpack_require__(/*! ../metadata/metadata */ "./packages/roosterjs-editor-dom/lib/metadata/metadata.ts");
12134
12320
  /**
12135
12321
  * Represent a bullet or a numbering list
@@ -12386,10 +12572,13 @@ var VList = /** @class */ (function () {
12386
12572
  /**
12387
12573
  * Change list style of the given range of this list.
12388
12574
  * If some of the items are not real list item yet, this will make them to be list item with given style
12389
- * @param targetStyle Target list style
12575
+ * @param orderedStyle The style of ordered list
12576
+ * @param unorderedStyle The style of unordered list
12390
12577
  */
12391
- VList.prototype.setListStyleType = function (targetStyle) {
12392
- (0, metadata_1.setMetadata)(this.rootList, targetStyle, (0, definitionCreators_1.createNumberDefinition)());
12578
+ VList.prototype.setListStyleType = function (orderedStyle, unorderedStyle) {
12579
+ var style = (0, metadata_1.getMetadata)(this.rootList, VListItem_1.ListStyleDefinitionMetadata);
12580
+ var styleMetadata = createListStyleMetadata(style, orderedStyle, unorderedStyle);
12581
+ (0, metadata_1.setMetadata)(this.rootList, styleMetadata, VListItem_1.ListStyleDefinitionMetadata);
12393
12582
  };
12394
12583
  /**
12395
12584
  * Append a new item to this VList
@@ -12545,6 +12734,19 @@ function moveLiToList(li) {
12545
12734
  (0, unwrap_1.default)(li.parentNode);
12546
12735
  }
12547
12736
  }
12737
+ function getValidValue() {
12738
+ var values = [];
12739
+ for (var _i = 0; _i < arguments.length; _i++) {
12740
+ values[_i] = arguments[_i];
12741
+ }
12742
+ return values.filter(function (x) { return x !== undefined; })[0];
12743
+ }
12744
+ function createListStyleMetadata(style, orderedStyle, unorderedStyle) {
12745
+ return {
12746
+ orderedStyleType: getValidValue(orderedStyle, style === null || style === void 0 ? void 0 : style.orderedStyleType, 1 /* Decimal */),
12747
+ unorderedStyleType: getValidValue(unorderedStyle, style === null || style === void 0 ? void 0 : style.unorderedStyleType, 1 /* Disc */),
12748
+ };
12749
+ }
12548
12750
 
12549
12751
 
12550
12752
  /***/ }),
@@ -12559,7 +12761,7 @@ function moveLiToList(li) {
12559
12761
  "use strict";
12560
12762
 
12561
12763
  Object.defineProperty(exports, "__esModule", { value: true });
12562
- var arrayPush_1 = __webpack_require__(/*! ../utils/arrayPush */ "./packages/roosterjs-editor-dom/lib/utils/arrayPush.ts");
12764
+ var arrayPush_1 = __webpack_require__(/*! ../jsUtils/arrayPush */ "./packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts");
12563
12765
  var getRootListNode_1 = __webpack_require__(/*! ./getRootListNode */ "./packages/roosterjs-editor-dom/lib/list/getRootListNode.ts");
12564
12766
  var isNodeAfter_1 = __webpack_require__(/*! ../utils/isNodeAfter */ "./packages/roosterjs-editor-dom/lib/utils/isNodeAfter.ts");
12565
12767
  var isNodeInRegion_1 = __webpack_require__(/*! ../region/isNodeInRegion */ "./packages/roosterjs-editor-dom/lib/region/isNodeInRegion.ts");
@@ -12724,6 +12926,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
12724
12926
  return to.concat(ar || Array.prototype.slice.call(from));
12725
12927
  };
12726
12928
  Object.defineProperty(exports, "__esModule", { value: true });
12929
+ exports.ListStyleDefinitionMetadata = void 0;
12727
12930
  var contains_1 = __webpack_require__(/*! ../utils/contains */ "./packages/roosterjs-editor-dom/lib/utils/contains.ts");
12728
12931
  var getListTypeFromNode_1 = __webpack_require__(/*! ./getListTypeFromNode */ "./packages/roosterjs-editor-dom/lib/list/getListTypeFromNode.ts");
12729
12932
  var getTagOfNode_1 = __webpack_require__(/*! ../utils/getTagOfNode */ "./packages/roosterjs-editor-dom/lib/utils/getTagOfNode.ts");
@@ -12733,13 +12936,23 @@ var safeInstanceOf_1 = __webpack_require__(/*! ../utils/safeInstanceOf */ "./pac
12733
12936
  var setBulletListMarkers_1 = __webpack_require__(/*! ./setBulletListMarkers */ "./packages/roosterjs-editor-dom/lib/list/setBulletListMarkers.ts");
12734
12937
  var setListItemStyle_1 = __webpack_require__(/*! ./setListItemStyle */ "./packages/roosterjs-editor-dom/lib/list/setListItemStyle.ts");
12735
12938
  var setNumberingListMarkers_1 = __webpack_require__(/*! ./setNumberingListMarkers */ "./packages/roosterjs-editor-dom/lib/list/setNumberingListMarkers.ts");
12736
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
12939
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
12737
12940
  var unwrap_1 = __webpack_require__(/*! ../utils/unwrap */ "./packages/roosterjs-editor-dom/lib/utils/unwrap.ts");
12738
12941
  var wrap_1 = __webpack_require__(/*! ../utils/wrap */ "./packages/roosterjs-editor-dom/lib/utils/wrap.ts");
12942
+ var definitionCreators_1 = __webpack_require__(/*! ../metadata/definitionCreators */ "./packages/roosterjs-editor-dom/lib/metadata/definitionCreators.ts");
12739
12943
  var metadata_1 = __webpack_require__(/*! ../metadata/metadata */ "./packages/roosterjs-editor-dom/lib/metadata/metadata.ts");
12740
12944
  var orderListStyles = [null, 'lower-alpha', 'lower-roman'];
12945
+ var unorderedListStyles = ['disc', 'circle', 'square'];
12741
12946
  var MARGIN_BASE = '0in 0in 0in 0.5in';
12742
12947
  var NEGATIVE_MARGIN = '-.25in';
12948
+ /**
12949
+ * @internal
12950
+ * The definition for the number of BulletListType or NumberingListType
12951
+ */
12952
+ exports.ListStyleDefinitionMetadata = (0, definitionCreators_1.createObjectDefinition)({
12953
+ orderedStyleType: (0, definitionCreators_1.createNumberDefinition)(true /** isOptional */, undefined /** value **/, 1 /* Min */, 20 /* Max */),
12954
+ unorderedStyleType: (0, definitionCreators_1.createNumberDefinition)(true /** isOptional */, undefined /** value **/, 1 /* Min */, 7 /* Max */),
12955
+ }, true /** isOptional */, true /** allowNull */);
12743
12956
  /**
12744
12957
  * !!! Never directly create instance of this class. It should be created within VList class !!!
12745
12958
  *
@@ -12903,15 +13116,19 @@ var VListItem = /** @class */ (function () {
12903
13116
  * @param index the list item index
12904
13117
  */
12905
13118
  VListItem.prototype.applyListStyle = function (rootList, index) {
12906
- var style = (0, metadata_1.getMetadata)(rootList) ? (0, metadata_1.getMetadata)(rootList) : undefined;
13119
+ var style = (0, metadata_1.getMetadata)(rootList, exports.ListStyleDefinitionMetadata);
13120
+ // The list just need to be styled if it is at top level, so the listType length for this Vlist must be 2.
13121
+ var isFirstLevel = this.listTypes.length < 3;
12907
13122
  if (style) {
12908
- if (this.listTypes.length < 3) {
12909
- if (this.listTypes[1] === 2 /* Unordered */) {
12910
- (0, setBulletListMarkers_1.default)(this.node, style);
12911
- }
12912
- else if (this.listTypes[1] === 1 /* Ordered */) {
12913
- (0, setNumberingListMarkers_1.default)(this.node, style, index);
12914
- }
13123
+ if (isFirstLevel &&
13124
+ this.listTypes[1] === 2 /* Unordered */ &&
13125
+ style.unorderedStyleType) {
13126
+ (0, setBulletListMarkers_1.default)(this.node, style.unorderedStyleType);
13127
+ }
13128
+ else if (isFirstLevel &&
13129
+ this.listTypes[1] === 1 /* Ordered */ &&
13130
+ style.orderedStyleType) {
13131
+ (0, setNumberingListMarkers_1.default)(this.node, style.orderedStyleType, index);
12915
13132
  }
12916
13133
  else {
12917
13134
  this.node.style.removeProperty('list-style-type');
@@ -13027,9 +13244,19 @@ function createListElement(newRoot, listType, nextLevel, originalRoot) {
13027
13244
  // Can't be reused, can't clone, let's create a new one
13028
13245
  result = doc.createElement(listType == 1 /* Ordered */ ? 'ol' : 'ul');
13029
13246
  }
13247
+ // Always maintain the metadata saved in the list
13248
+ if (originalRoot && nextLevel == 1 && listType != (0, getListTypeFromNode_1.default)(originalRoot)) {
13249
+ var style = (0, metadata_1.getMetadata)(originalRoot, exports.ListStyleDefinitionMetadata);
13250
+ if (style) {
13251
+ (0, metadata_1.setMetadata)(result, style, exports.ListStyleDefinitionMetadata);
13252
+ }
13253
+ }
13030
13254
  if (listType == 1 /* Ordered */ && nextLevel > 1) {
13031
13255
  result.style.setProperty('list-style-type', orderListStyles[(nextLevel - 1) % orderListStyles.length]);
13032
13256
  }
13257
+ if (listType == 2 /* Unordered */ && nextLevel > 1) {
13258
+ result.style.setProperty('list-style-type', unorderedListStyles[(nextLevel - 1) % unorderedListStyles.length]);
13259
+ }
13033
13260
  return result;
13034
13261
  }
13035
13262
  function wrapIfNotBlockNode(nodes, checkFirst, checkLast) {
@@ -13117,6 +13344,7 @@ exports.default = convertDecimalsToAlpha;
13117
13344
  "use strict";
13118
13345
 
13119
13346
  Object.defineProperty(exports, "__esModule", { value: true });
13347
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
13120
13348
  var RomanValues = {
13121
13349
  M: 1000,
13122
13350
  CM: 900,
@@ -13141,7 +13369,7 @@ var RomanValues = {
13141
13369
  */
13142
13370
  function convertDecimalsToRoman(decimal, isLowerCase) {
13143
13371
  var romanValue = '';
13144
- for (var _i = 0, _a = Object.keys(RomanValues); _i < _a.length; _i++) {
13372
+ for (var _i = 0, _a = (0, getObjectKeys_1.default)(RomanValues); _i < _a.length; _i++) {
13145
13373
  var i = _a[_i];
13146
13374
  var timesRomanCharAppear = Math.floor(decimal / RomanValues[i]);
13147
13375
  decimal = decimal - timesRomanCharAppear * RomanValues[i];
@@ -13171,7 +13399,7 @@ var isNodeInRegion_1 = __webpack_require__(/*! ../region/isNodeInRegion */ "./pa
13171
13399
  var Position_1 = __webpack_require__(/*! ../selection/Position */ "./packages/roosterjs-editor-dom/lib/selection/Position.ts");
13172
13400
  var safeInstanceOf_1 = __webpack_require__(/*! ../utils/safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
13173
13401
  var shouldSkipNode_1 = __webpack_require__(/*! ../utils/shouldSkipNode */ "./packages/roosterjs-editor-dom/lib/utils/shouldSkipNode.ts");
13174
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
13402
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
13175
13403
  var VList_1 = __webpack_require__(/*! ./VList */ "./packages/roosterjs-editor-dom/lib/list/VList.ts");
13176
13404
  var wrap_1 = __webpack_require__(/*! ../utils/wrap */ "./packages/roosterjs-editor-dom/lib/utils/wrap.ts");
13177
13405
  var getLeafSibling_1 = __webpack_require__(/*! ../utils/getLeafSibling */ "./packages/roosterjs-editor-dom/lib/utils/getLeafSibling.ts");
@@ -13374,17 +13602,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
13374
13602
  */
13375
13603
  function setBulletListMarkers(li, listStyleType) {
13376
13604
  var marker = bulletListStyle[listStyleType];
13377
- var isDiscOrSquare = listStyleType === 0 /* Disc */ || listStyleType === 2 /* Square */;
13605
+ var isDiscOrSquare = listStyleType === 1 /* Disc */ || listStyleType === 3 /* Square */;
13378
13606
  li.style.listStyleType = isDiscOrSquare ? marker : "\"" + marker + "\"";
13379
13607
  }
13380
13608
  exports.default = setBulletListMarkers;
13381
13609
  var bulletListStyle = (_a = {},
13382
- _a[0 /* Disc */] = 'disc',
13383
- _a[2 /* Square */] = 'square',
13384
- _a[1 /* Dash */] = '- ',
13385
- _a[4 /* LongArrow */] = '→ ',
13386
- _a[3 /* ShortArrow */] = '➢ ',
13387
- _a[5 /* UnfilledArrow */] = '➪ ',
13610
+ _a[1 /* Disc */] = 'disc',
13611
+ _a[3 /* Square */] = 'square',
13612
+ _a[2 /* Dash */] = '- ',
13613
+ _a[5 /* LongArrow */] = '→ ',
13614
+ _a[4 /* ShortArrow */] = '➢ ',
13615
+ _a[6 /* UnfilledArrow */] = '➪ ',
13616
+ _a[7 /* Hyphen */] = '— ',
13388
13617
  _a);
13389
13618
 
13390
13619
 
@@ -13490,95 +13719,95 @@ function setNumberingListMarkers(li, listStyleType, level) {
13490
13719
  }
13491
13720
  exports.default = setNumberingListMarkers;
13492
13721
  var numberingListStyle = (_a = {},
13493
- _a[0 /* Decimal */] = {
13722
+ _a[1 /* Decimal */] = {
13494
13723
  markerType: MarkerTypes.Decimal,
13495
13724
  markerSeparator: '. ',
13496
13725
  },
13497
- _a[1 /* DecimalDash */] = {
13726
+ _a[2 /* DecimalDash */] = {
13498
13727
  markerType: MarkerTypes.Decimal,
13499
13728
  markerSeparator: '- ',
13500
13729
  },
13501
- _a[2 /* DecimalParenthesis */] = {
13730
+ _a[3 /* DecimalParenthesis */] = {
13502
13731
  markerType: MarkerTypes.Decimal,
13503
13732
  markerSeparator: ') ',
13504
13733
  },
13505
- _a[3 /* DecimalDoubleParenthesis */] = {
13734
+ _a[4 /* DecimalDoubleParenthesis */] = {
13506
13735
  markerType: MarkerTypes.Decimal,
13507
13736
  markerSeparator: ') ',
13508
13737
  markerSecondSeparator: '(',
13509
13738
  },
13510
- _a[4 /* LowerAlpha */] = {
13739
+ _a[5 /* LowerAlpha */] = {
13511
13740
  markerType: MarkerTypes.Alpha,
13512
13741
  markerSeparator: '. ',
13513
13742
  lowerCase: true,
13514
13743
  },
13515
- _a[7 /* LowerAlphaDash */] = {
13744
+ _a[8 /* LowerAlphaDash */] = {
13516
13745
  markerType: MarkerTypes.Alpha,
13517
13746
  markerSeparator: '- ',
13518
13747
  lowerCase: true,
13519
13748
  },
13520
- _a[5 /* LowerAlphaParenthesis */] = {
13749
+ _a[6 /* LowerAlphaParenthesis */] = {
13521
13750
  markerType: MarkerTypes.Alpha,
13522
13751
  markerSeparator: ') ',
13523
13752
  lowerCase: true,
13524
13753
  },
13525
- _a[6 /* LowerAlphaDoubleParenthesis */] = {
13754
+ _a[7 /* LowerAlphaDoubleParenthesis */] = {
13526
13755
  markerType: MarkerTypes.Alpha,
13527
13756
  markerSeparator: ') ',
13528
13757
  markerSecondSeparator: '(',
13529
13758
  lowerCase: true,
13530
13759
  },
13531
- _a[8 /* UpperAlpha */] = {
13760
+ _a[9 /* UpperAlpha */] = {
13532
13761
  markerType: MarkerTypes.Alpha,
13533
13762
  markerSeparator: '. ',
13534
13763
  },
13535
- _a[11 /* UpperAlphaDash */] = {
13764
+ _a[12 /* UpperAlphaDash */] = {
13536
13765
  markerType: MarkerTypes.Alpha,
13537
13766
  markerSeparator: '- ',
13538
13767
  },
13539
- _a[9 /* UpperAlphaParenthesis */] = {
13768
+ _a[10 /* UpperAlphaParenthesis */] = {
13540
13769
  markerType: MarkerTypes.Alpha,
13541
13770
  markerSeparator: ') ',
13542
13771
  },
13543
- _a[10 /* UpperAlphaDoubleParenthesis */] = {
13772
+ _a[11 /* UpperAlphaDoubleParenthesis */] = {
13544
13773
  markerType: MarkerTypes.Alpha,
13545
13774
  markerSeparator: ') ',
13546
13775
  markerSecondSeparator: '(',
13547
13776
  },
13548
- _a[12 /* LowerRoman */] = {
13777
+ _a[13 /* LowerRoman */] = {
13549
13778
  markerType: MarkerTypes.Roman,
13550
13779
  markerSeparator: '. ',
13551
13780
  lowerCase: true,
13552
13781
  },
13553
- _a[15 /* LowerRomanDash */] = {
13782
+ _a[16 /* LowerRomanDash */] = {
13554
13783
  markerType: MarkerTypes.Roman,
13555
13784
  markerSeparator: '- ',
13556
13785
  lowerCase: true,
13557
13786
  },
13558
- _a[13 /* LowerRomanParenthesis */] = {
13787
+ _a[14 /* LowerRomanParenthesis */] = {
13559
13788
  markerType: MarkerTypes.Roman,
13560
13789
  markerSeparator: ') ',
13561
13790
  lowerCase: true,
13562
13791
  },
13563
- _a[14 /* LowerRomanDoubleParenthesis */] = {
13792
+ _a[15 /* LowerRomanDoubleParenthesis */] = {
13564
13793
  markerType: MarkerTypes.Roman,
13565
13794
  markerSeparator: ') ',
13566
13795
  markerSecondSeparator: '(',
13567
13796
  lowerCase: true,
13568
13797
  },
13569
- _a[16 /* UpperRoman */] = {
13798
+ _a[17 /* UpperRoman */] = {
13570
13799
  markerType: MarkerTypes.Roman,
13571
13800
  markerSeparator: '. ',
13572
13801
  },
13573
- _a[19 /* UpperRomanDash */] = {
13802
+ _a[20 /* UpperRomanDash */] = {
13574
13803
  markerType: MarkerTypes.Roman,
13575
13804
  markerSeparator: '- ',
13576
13805
  },
13577
- _a[17 /* UpperRomanParenthesis */] = {
13806
+ _a[18 /* UpperRomanParenthesis */] = {
13578
13807
  markerType: MarkerTypes.Roman,
13579
13808
  markerSeparator: ') ',
13580
13809
  },
13581
- _a[18 /* UpperRomanDoubleParenthesis */] = {
13810
+ _a[19 /* UpperRomanDoubleParenthesis */] = {
13582
13811
  markerType: MarkerTypes.Roman,
13583
13812
  markerSeparator: ') ',
13584
13813
  markerSecondSeparator: '(',
@@ -13774,6 +14003,7 @@ exports.removeMetadata = removeMetadata;
13774
14003
  "use strict";
13775
14004
 
13776
14005
  Object.defineProperty(exports, "__esModule", { value: true });
14006
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
13777
14007
  /**
13778
14008
  * Validate the given object with a type definition object
13779
14009
  * @param input The object to validate
@@ -13814,7 +14044,9 @@ function validate(input, def) {
13814
14044
  case 4 /* Object */:
13815
14045
  result =
13816
14046
  typeof input === 'object' &&
13817
- Object.keys(def.propertyDef).every(function (x) { return validate(input[x], def.propertyDef[x]); });
14047
+ (0, getObjectKeys_1.default)(def.propertyDef).every(function (x) {
14048
+ return validate(input[x], def.propertyDef[x]);
14049
+ });
13818
14050
  break;
13819
14051
  case 5 /* Customize */:
13820
14052
  result = def.validator(input);
@@ -15133,6 +15365,7 @@ exports.default = getStyles;
15133
15365
  "use strict";
15134
15366
 
15135
15367
  Object.defineProperty(exports, "__esModule", { value: true });
15368
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
15136
15369
  /**
15137
15370
  * Set styles to an HTML element. If styles are empty, remove 'style' attribute
15138
15371
  * @param element The element to set styles
@@ -15140,7 +15373,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
15140
15373
  */
15141
15374
  function setStyles(element, styles) {
15142
15375
  if (element) {
15143
- var style = Object.keys(styles || {})
15376
+ var style = (0, getObjectKeys_1.default)(styles || {})
15144
15377
  .map(function (name) {
15145
15378
  var value = styles[name];
15146
15379
  var trimmedName = name ? name.trim() : null;
@@ -15187,7 +15420,7 @@ var applyTableFormat_1 = __webpack_require__(/*! ./applyTableFormat */ "./packag
15187
15420
  var moveChildNodes_1 = __webpack_require__(/*! ../utils/moveChildNodes */ "./packages/roosterjs-editor-dom/lib/utils/moveChildNodes.ts");
15188
15421
  var normalizeRect_1 = __webpack_require__(/*! ../utils/normalizeRect */ "./packages/roosterjs-editor-dom/lib/utils/normalizeRect.ts");
15189
15422
  var safeInstanceOf_1 = __webpack_require__(/*! ../utils/safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
15190
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
15423
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
15191
15424
  var tableFormatInfo_1 = __webpack_require__(/*! ./tableFormatInfo */ "./packages/roosterjs-editor-dom/lib/table/tableFormatInfo.ts");
15192
15425
  var CELL_SHADE = 'cellShade';
15193
15426
  var DEFAULT_FORMAT = {
@@ -16346,29 +16579,6 @@ function applyFormat(element, format, isDarkMode) {
16346
16579
  exports.default = applyFormat;
16347
16580
 
16348
16581
 
16349
- /***/ }),
16350
-
16351
- /***/ "./packages/roosterjs-editor-dom/lib/utils/arrayPush.ts":
16352
- /*!**************************************************************!*\
16353
- !*** ./packages/roosterjs-editor-dom/lib/utils/arrayPush.ts ***!
16354
- \**************************************************************/
16355
- /*! no static exports found */
16356
- /***/ (function(module, exports, __webpack_require__) {
16357
-
16358
- "use strict";
16359
-
16360
- Object.defineProperty(exports, "__esModule", { value: true });
16361
- /**
16362
- * A type-safe wrapper for Array.prototype.push.apply()
16363
- * @param mainArray The main array to push items into
16364
- * @param itemsArray The items to push to main array
16365
- */
16366
- function arrayPush(mainArray, itemsArray) {
16367
- Array.prototype.push.apply(mainArray, itemsArray);
16368
- }
16369
- exports.default = arrayPush;
16370
-
16371
-
16372
16582
  /***/ }),
16373
16583
 
16374
16584
  /***/ "./packages/roosterjs-editor-dom/lib/utils/changeElementTag.ts":
@@ -16429,7 +16639,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
16429
16639
  exports.collapse = void 0;
16430
16640
  var contains_1 = __webpack_require__(/*! ./contains */ "./packages/roosterjs-editor-dom/lib/utils/contains.ts");
16431
16641
  var splitParentNode_1 = __webpack_require__(/*! ./splitParentNode */ "./packages/roosterjs-editor-dom/lib/utils/splitParentNode.ts");
16432
- var toArray_1 = __webpack_require__(/*! ./toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
16642
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
16433
16643
  /**
16434
16644
  * Collapse nodes within the given start and end nodes to their common ancestor node,
16435
16645
  * split parent nodes if necessary
@@ -16559,6 +16769,7 @@ function internalContains(container, contained) {
16559
16769
  var _a;
16560
16770
  Object.defineProperty(exports, "__esModule", { value: true });
16561
16771
  exports.KnownCreateElementData = void 0;
16772
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
16562
16773
  var safeInstanceOf_1 = __webpack_require__(/*! ./safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
16563
16774
  var Browser_1 = __webpack_require__(/*! ./Browser */ "./packages/roosterjs-editor-dom/lib/utils/Browser.ts");
16564
16775
  /**
@@ -16636,12 +16847,12 @@ function createElement(elementData, document) {
16636
16847
  result.className = className;
16637
16848
  }
16638
16849
  if (dataset && (0, safeInstanceOf_1.default)(result, 'HTMLElement')) {
16639
- Object.keys(dataset).forEach(function (datasetName) {
16850
+ (0, getObjectKeys_1.default)(dataset).forEach(function (datasetName) {
16640
16851
  result.dataset[datasetName] = dataset[datasetName];
16641
16852
  });
16642
16853
  }
16643
16854
  if (attributes) {
16644
- Object.keys(attributes).forEach(function (attrName) {
16855
+ (0, getObjectKeys_1.default)(attributes).forEach(function (attrName) {
16645
16856
  result.setAttribute(attrName, attributes[attrName]);
16646
16857
  });
16647
16858
  }
@@ -16715,7 +16926,7 @@ exports.default = findClosestElementAncestor;
16715
16926
  "use strict";
16716
16927
 
16717
16928
  Object.defineProperty(exports, "__esModule", { value: true });
16718
- var toArray_1 = __webpack_require__(/*! ./toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
16929
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
16719
16930
  /**
16720
16931
  * @deprecated
16721
16932
  * Creates an HTML node array from html
@@ -16971,6 +17182,7 @@ exports.getPreviousLeafSibling = getPreviousLeafSibling;
16971
17182
 
16972
17183
  Object.defineProperty(exports, "__esModule", { value: true });
16973
17184
  exports.PendableFormatCommandMap = void 0;
17185
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
16974
17186
  /**
16975
17187
  * A map from pendable format name to document command
16976
17188
  */
@@ -17006,7 +17218,7 @@ exports.PendableFormatCommandMap = {
17006
17218
  * @returns A PendableFormatState object which contains the values of pendable format states
17007
17219
  */
17008
17220
  function getPendableFormatState(document) {
17009
- var keys = Object.keys(exports.PendableFormatCommandMap);
17221
+ var keys = (0, getObjectKeys_1.default)(exports.PendableFormatCommandMap);
17010
17222
  return keys.reduce(function (state, key) {
17011
17223
  state[key] = document.queryCommandState(exports.PendableFormatCommandMap[key]);
17012
17224
  return state;
@@ -17118,7 +17330,7 @@ var ZERO_WIDTH_SPACE = /\u200b/g;
17118
17330
  * Default value is false
17119
17331
  * @returns True if there isn't any visible element inside node, otherwise false
17120
17332
  */
17121
- function isNodeEmpty(node, trimContent) {
17333
+ function isNodeEmpty(node, trimContent, shouldCountBrAsVisible) {
17122
17334
  if (!node) {
17123
17335
  return false;
17124
17336
  }
@@ -17128,9 +17340,12 @@ function isNodeEmpty(node, trimContent) {
17128
17340
  else if (node.nodeType == 1 /* Element */) {
17129
17341
  var element = node;
17130
17342
  var textContent = trim(element.textContent || '', trimContent);
17343
+ var visibleSelector = shouldCountBrAsVisible
17344
+ ? VISIBLE_CHILD_ELEMENT_SELECTOR + ",BR"
17345
+ : VISIBLE_CHILD_ELEMENT_SELECTOR;
17131
17346
  if (textContent != '' ||
17132
17347
  VISIBLE_ELEMENT_TAGS.indexOf((0, getTagOfNode_1.default)(element)) >= 0 ||
17133
- element.querySelectorAll(VISIBLE_CHILD_ELEMENT_SELECTOR)[0]) {
17348
+ element.querySelectorAll(visibleSelector)[0]) {
17134
17349
  return false;
17135
17350
  }
17136
17351
  }
@@ -17185,6 +17400,7 @@ exports.default = isVoidHtmlElement;
17185
17400
  "use strict";
17186
17401
 
17187
17402
  Object.defineProperty(exports, "__esModule", { value: true });
17403
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
17188
17404
  // http exclude matching regex
17189
17405
  // invalid URL example (in particular on IE and Edge):
17190
17406
  // - http://www.bing.com%00, %00 before ? (question mark) is considered invalid. IE/Edge throws invalid argument exception
@@ -17247,7 +17463,7 @@ var linkMatchRules = {
17247
17463
  */
17248
17464
  function matchLink(url) {
17249
17465
  if (url) {
17250
- for (var _i = 0, _a = Object.keys(linkMatchRules); _i < _a.length; _i++) {
17466
+ for (var _i = 0, _a = (0, getObjectKeys_1.default)(linkMatchRules); _i < _a.length; _i++) {
17251
17467
  var schema = _a[_i];
17252
17468
  var rule = linkMatchRules[schema];
17253
17469
  var matches = url.match(rule.match);
@@ -17364,7 +17580,7 @@ exports.default = normalizeRect;
17364
17580
  "use strict";
17365
17581
 
17366
17582
  Object.defineProperty(exports, "__esModule", { value: true });
17367
- var toArray_1 = __webpack_require__(/*! ./toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
17583
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
17368
17584
  /**
17369
17585
  * Query HTML elements in the container by a selector string
17370
17586
  * @param container Container element to query from
@@ -17475,10 +17691,9 @@ exports.getTargetWindow = void 0;
17475
17691
  /**
17476
17692
  * @internal Export for test only
17477
17693
  * Try get window from the given node or range
17478
- * @param source Source node or range
17694
+ * @param node Source node to get window from
17479
17695
  */
17480
- function getTargetWindow(source) {
17481
- var node = source && (source.commonAncestorContainer || source);
17696
+ function getTargetWindow(node) {
17482
17697
  var document = node &&
17483
17698
  (node.ownerDocument ||
17484
17699
  (Object.prototype.toString.apply(node) == '[object HTMLDocument]'
@@ -17495,6 +17710,11 @@ exports.getTargetWindow = getTargetWindow;
17495
17710
  * @param typeName Target type name
17496
17711
  */
17497
17712
  function safeInstanceOf(obj, typeName) {
17713
+ var _a;
17714
+ if (typeName == 'Range') {
17715
+ return (Object.prototype.toString.apply(obj) == '[object Range]' &&
17716
+ !!((_a = obj) === null || _a === void 0 ? void 0 : _a.commonAncestorContainer));
17717
+ }
17498
17718
  var targetWindow = getTargetWindow(obj);
17499
17719
  var targetType = targetWindow && targetWindow[typeName];
17500
17720
  var mainWindow = window;
@@ -17824,24 +18044,6 @@ function splitTextNode(textNode, offset, returnFirstPart) {
17824
18044
  exports.default = splitTextNode;
17825
18045
 
17826
18046
 
17827
- /***/ }),
17828
-
17829
- /***/ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts":
17830
- /*!************************************************************!*\
17831
- !*** ./packages/roosterjs-editor-dom/lib/utils/toArray.ts ***!
17832
- \************************************************************/
17833
- /*! no static exports found */
17834
- /***/ (function(module, exports, __webpack_require__) {
17835
-
17836
- "use strict";
17837
-
17838
- Object.defineProperty(exports, "__esModule", { value: true });
17839
- function toArray(collection) {
17840
- return [].slice.call(collection);
17841
- }
17842
- exports.default = toArray;
17843
-
17844
-
17845
18047
  /***/ }),
17846
18048
 
17847
18049
  /***/ "./packages/roosterjs-editor-dom/lib/utils/unwrap.ts":
@@ -17920,6 +18122,31 @@ function wrap(nodes, wrapper) {
17920
18122
  exports.default = wrap;
17921
18123
 
17922
18124
 
18125
+ /***/ }),
18126
+
18127
+ /***/ "./packages/roosterjs-editor-plugins/lib/AutoFormat.ts":
18128
+ /*!*************************************************************!*\
18129
+ !*** ./packages/roosterjs-editor-plugins/lib/AutoFormat.ts ***!
18130
+ \*************************************************************/
18131
+ /*! no static exports found */
18132
+ /***/ (function(module, exports, __webpack_require__) {
18133
+
18134
+ "use strict";
18135
+
18136
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18137
+ if (k2 === undefined) k2 = k;
18138
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
18139
+ }) : (function(o, m, k, k2) {
18140
+ if (k2 === undefined) k2 = k;
18141
+ o[k2] = m[k];
18142
+ }));
18143
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18144
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18145
+ };
18146
+ Object.defineProperty(exports, "__esModule", { value: true });
18147
+ __exportStar(__webpack_require__(/*! ./plugins/AutoFormat/index */ "./packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/index.ts"), exports);
18148
+
18149
+
17923
18150
  /***/ }),
17924
18151
 
17925
18152
  /***/ "./packages/roosterjs-editor-plugins/lib/ContentEdit.ts":
@@ -18254,6 +18481,7 @@ __exportStar(__webpack_require__(/*! ./Picker */ "./packages/roosterjs-editor-pl
18254
18481
  __exportStar(__webpack_require__(/*! ./TableResize */ "./packages/roosterjs-editor-plugins/lib/TableResize.ts"), exports);
18255
18482
  __exportStar(__webpack_require__(/*! ./Watermark */ "./packages/roosterjs-editor-plugins/lib/Watermark.ts"), exports);
18256
18483
  __exportStar(__webpack_require__(/*! ./TableCellSelection */ "./packages/roosterjs-editor-plugins/lib/TableCellSelection.ts"), exports);
18484
+ __exportStar(__webpack_require__(/*! ./AutoFormat */ "./packages/roosterjs-editor-plugins/lib/AutoFormat.ts"), exports);
18257
18485
 
18258
18486
 
18259
18487
  /***/ }),
@@ -18270,14 +18498,15 @@ __exportStar(__webpack_require__(/*! ./TableCellSelection */ "./packages/rooster
18270
18498
  Object.defineProperty(exports, "__esModule", { value: true });
18271
18499
  var lib_1 = __webpack_require__(/*! roosterjs-editor-dom/lib */ "./packages/roosterjs-editor-dom/lib/index.ts");
18272
18500
  /**
18273
- * Generate event names based on different platforms to be compatible with desktop and mobile browsers
18501
+ * Generate event names and getXY function based on different platforms to be compatible with desktop and mobile browsers
18274
18502
  */
18275
- var MOUSE_EVENT_NAMES = (function () {
18503
+ var MOUSE_EVENT_INFO = (function () {
18276
18504
  if (lib_1.Browser.isMobileOrTablet) {
18277
18505
  return {
18278
18506
  MOUSEDOWN: 'touchstart',
18279
18507
  MOUSEMOVE: 'touchmove',
18280
18508
  MOUSEUP: 'touchend',
18509
+ getPageXY: getTouchEventPageXY,
18281
18510
  };
18282
18511
  }
18283
18512
  else {
@@ -18285,9 +18514,23 @@ var MOUSE_EVENT_NAMES = (function () {
18285
18514
  MOUSEDOWN: 'mousedown',
18286
18515
  MOUSEMOVE: 'mousemove',
18287
18516
  MOUSEUP: 'mouseup',
18517
+ getPageXY: getMouseEventPageXY,
18288
18518
  };
18289
18519
  }
18290
18520
  })();
18521
+ function getMouseEventPageXY(e) {
18522
+ return [e.pageX, e.pageY];
18523
+ }
18524
+ function getTouchEventPageXY(e) {
18525
+ var pageX = 0;
18526
+ var pageY = 0;
18527
+ if (e.targetTouches && e.targetTouches.length > 0) {
18528
+ var touch = e.targetTouches[0];
18529
+ pageX = touch.pageX;
18530
+ pageY = touch.pageY;
18531
+ }
18532
+ return [pageX, pageY];
18533
+ }
18291
18534
  /**
18292
18535
  * @internal
18293
18536
  * A helper class to help manage drag and drop to an HTML element
@@ -18310,19 +18553,20 @@ var DragAndDropHelper = /** @class */ (function () {
18310
18553
  this.handler = handler;
18311
18554
  this.zoomScale = zoomScale;
18312
18555
  this.onMouseDown = function (e) {
18313
- var _a, _b;
18556
+ var _a;
18557
+ var _b, _c;
18314
18558
  e.preventDefault();
18315
18559
  e.stopPropagation();
18316
18560
  _this.addDocumentEvents();
18317
- _this.initX = e.pageX;
18318
- _this.initY = e.pageY;
18319
- _this.initValue = (_b = (_a = _this.handler).onDragStart) === null || _b === void 0 ? void 0 : _b.call(_a, _this.context, e);
18561
+ _a = MOUSE_EVENT_INFO.getPageXY(e), _this.initX = _a[0], _this.initY = _a[1];
18562
+ _this.initValue = (_c = (_b = _this.handler).onDragStart) === null || _c === void 0 ? void 0 : _c.call(_b, _this.context, e);
18320
18563
  };
18321
18564
  this.onMouseMove = function (e) {
18322
18565
  var _a, _b, _c;
18323
18566
  e.preventDefault();
18324
- var deltaX = (e.pageX - _this.initX) / _this.zoomScale;
18325
- var deltaY = (e.pageY - _this.initY) / _this.zoomScale;
18567
+ var _d = MOUSE_EVENT_INFO.getPageXY(e), pageX = _d[0], pageY = _d[1];
18568
+ var deltaX = (pageX - _this.initX) / _this.zoomScale;
18569
+ var deltaY = (pageY - _this.initY) / _this.zoomScale;
18326
18570
  if ((_b = (_a = _this.handler).onDragging) === null || _b === void 0 ? void 0 : _b.call(_a, _this.context, e, _this.initValue, deltaX, deltaY)) {
18327
18571
  (_c = _this.onSubmit) === null || _c === void 0 ? void 0 : _c.call(_this, _this.context, _this.trigger);
18328
18572
  }
@@ -18335,30 +18579,136 @@ var DragAndDropHelper = /** @class */ (function () {
18335
18579
  (_c = _this.onSubmit) === null || _c === void 0 ? void 0 : _c.call(_this, _this.context, _this.trigger);
18336
18580
  }
18337
18581
  };
18338
- trigger.addEventListener(MOUSE_EVENT_NAMES.MOUSEDOWN, this.onMouseDown);
18582
+ trigger.addEventListener(MOUSE_EVENT_INFO.MOUSEDOWN, this.onMouseDown);
18339
18583
  }
18340
18584
  /**
18341
18585
  * Dispose this object, remove all event listeners that has been attached
18342
18586
  */
18343
18587
  DragAndDropHelper.prototype.dispose = function () {
18344
- this.trigger.removeEventListener(MOUSE_EVENT_NAMES.MOUSEDOWN, this.onMouseDown);
18588
+ this.trigger.removeEventListener(MOUSE_EVENT_INFO.MOUSEDOWN, this.onMouseDown);
18345
18589
  this.removeDocumentEvents();
18346
18590
  };
18347
18591
  DragAndDropHelper.prototype.addDocumentEvents = function () {
18348
18592
  var doc = this.trigger.ownerDocument;
18349
- doc.addEventListener(MOUSE_EVENT_NAMES.MOUSEMOVE, this.onMouseMove, true /*useCapture*/);
18350
- doc.addEventListener(MOUSE_EVENT_NAMES.MOUSEUP, this.onMouseUp, true /*useCapture*/);
18593
+ doc.addEventListener(MOUSE_EVENT_INFO.MOUSEMOVE, this.onMouseMove, true /*useCapture*/);
18594
+ doc.addEventListener(MOUSE_EVENT_INFO.MOUSEUP, this.onMouseUp, true /*useCapture*/);
18351
18595
  };
18352
18596
  DragAndDropHelper.prototype.removeDocumentEvents = function () {
18353
18597
  var doc = this.trigger.ownerDocument;
18354
- doc.removeEventListener(MOUSE_EVENT_NAMES.MOUSEMOVE, this.onMouseMove, true /*useCapture*/);
18355
- doc.removeEventListener(MOUSE_EVENT_NAMES.MOUSEUP, this.onMouseUp, true /*useCapture*/);
18598
+ doc.removeEventListener(MOUSE_EVENT_INFO.MOUSEMOVE, this.onMouseMove, true /*useCapture*/);
18599
+ doc.removeEventListener(MOUSE_EVENT_INFO.MOUSEUP, this.onMouseUp, true /*useCapture*/);
18356
18600
  };
18357
18601
  return DragAndDropHelper;
18358
18602
  }());
18359
18603
  exports.default = DragAndDropHelper;
18360
18604
 
18361
18605
 
18606
+ /***/ }),
18607
+
18608
+ /***/ "./packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/AutoFormat.ts":
18609
+ /*!********************************************************************************!*\
18610
+ !*** ./packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/AutoFormat.ts ***!
18611
+ \********************************************************************************/
18612
+ /*! no static exports found */
18613
+ /***/ (function(module, exports, __webpack_require__) {
18614
+
18615
+ "use strict";
18616
+
18617
+ Object.defineProperty(exports, "__esModule", { value: true });
18618
+ var specialCharacters = /[`!@#$%^&*()_+\=\[\]{};':"\\|,.<>\/?~]/;
18619
+ /**
18620
+ * Automatically transform -- into hyphen, if typed between two words.
18621
+ */
18622
+ var AutoFormat = /** @class */ (function () {
18623
+ function AutoFormat() {
18624
+ }
18625
+ /**
18626
+ * Get a friendly name of this plugin
18627
+ */
18628
+ AutoFormat.prototype.getName = function () {
18629
+ return 'AutoFormat';
18630
+ };
18631
+ /**
18632
+ * Initialize this plugin
18633
+ * @param editor The editor instance
18634
+ */
18635
+ AutoFormat.prototype.initialize = function (editor) {
18636
+ this.editor = editor;
18637
+ };
18638
+ /**
18639
+ * Dispose this plugin
18640
+ */
18641
+ AutoFormat.prototype.dispose = function () {
18642
+ this.editor = null;
18643
+ };
18644
+ /**
18645
+ * Handle events triggered from editor
18646
+ * @param event PluginEvent object
18647
+ */
18648
+ AutoFormat.prototype.onPluginEvent = function (event) {
18649
+ var _this = this;
18650
+ if (event.eventType === 7 /* ContentChanged */ ||
18651
+ event.eventType === 5 /* MouseDown */ ||
18652
+ event.eventType === 6 /* MouseUp */) {
18653
+ this.lastKeyTyped = '';
18654
+ }
18655
+ if (event.eventType === 0 /* KeyDown */) {
18656
+ var keyTyped = event.rawEvent.key;
18657
+ if (keyTyped.length > 1) {
18658
+ this.lastKeyTyped = '';
18659
+ }
18660
+ if (this.lastKeyTyped === '-' &&
18661
+ !specialCharacters.test(keyTyped) &&
18662
+ keyTyped !== ' ' &&
18663
+ keyTyped !== '-') {
18664
+ var searcher = this.editor.getContentSearcherOfCursor(event);
18665
+ var textBeforeCursor = searcher.getSubStringBefore(3);
18666
+ var dashes = searcher.getSubStringBefore(2);
18667
+ var isPrecededByADash = textBeforeCursor[0] === '-';
18668
+ var isPrecededByASpace = textBeforeCursor[0] === ' ';
18669
+ if (isPrecededByADash ||
18670
+ isPrecededByASpace ||
18671
+ specialCharacters.test(textBeforeCursor[0]) ||
18672
+ dashes !== '--') {
18673
+ return;
18674
+ }
18675
+ var textRange_1 = searcher.getRangeFromText(dashes, true /* exactMatch */);
18676
+ var nodeHyphen_1 = document.createTextNode('—');
18677
+ this.editor.addUndoSnapshot(function () {
18678
+ textRange_1.deleteContents();
18679
+ textRange_1.insertNode(nodeHyphen_1);
18680
+ _this.editor.select(nodeHyphen_1, -1 /* End */);
18681
+ }, null /*changeSource*/, true /*canUndoByBackspace*/);
18682
+ //After the substitution the last key typed needs to be cleaned
18683
+ this.lastKeyTyped = '';
18684
+ }
18685
+ else {
18686
+ this.lastKeyTyped = keyTyped;
18687
+ }
18688
+ }
18689
+ };
18690
+ return AutoFormat;
18691
+ }());
18692
+ exports.default = AutoFormat;
18693
+
18694
+
18695
+ /***/ }),
18696
+
18697
+ /***/ "./packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/index.ts":
18698
+ /*!***************************************************************************!*\
18699
+ !*** ./packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/index.ts ***!
18700
+ \***************************************************************************/
18701
+ /*! no static exports found */
18702
+ /***/ (function(module, exports, __webpack_require__) {
18703
+
18704
+ "use strict";
18705
+
18706
+ Object.defineProperty(exports, "__esModule", { value: true });
18707
+ exports.AutoFormat = void 0;
18708
+ var AutoFormat_1 = __webpack_require__(/*! ./AutoFormat */ "./packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/AutoFormat.ts");
18709
+ Object.defineProperty(exports, "AutoFormat", { enumerable: true, get: function () { return AutoFormat_1.default; } });
18710
+
18711
+
18362
18712
  /***/ }),
18363
18713
 
18364
18714
  /***/ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/ContentEdit.ts":
@@ -18372,6 +18722,7 @@ exports.default = DragAndDropHelper;
18372
18722
 
18373
18723
  Object.defineProperty(exports, "__esModule", { value: true });
18374
18724
  var getAllFeatures_1 = __webpack_require__(/*! ./getAllFeatures */ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/getAllFeatures.ts");
18725
+ var lib_1 = __webpack_require__(/*! roosterjs-editor-dom/lib */ "./packages/roosterjs-editor-dom/lib/index.ts");
18375
18726
  /**
18376
18727
  * An editor plugin to handle content edit event.
18377
18728
  * The following cases are included:
@@ -18408,7 +18759,7 @@ var ContentEdit = /** @class */ (function () {
18408
18759
  var _this = this;
18409
18760
  var features = [];
18410
18761
  var allFeatures = (0, getAllFeatures_1.default)();
18411
- Object.keys(allFeatures).forEach(function (key) {
18762
+ (0, lib_1.getObjectKeys)(allFeatures).forEach(function (key) {
18412
18763
  var feature = allFeatures[key];
18413
18764
  var hasSettingForKey = _this.settingsOverride && _this.settingsOverride[key] !== undefined;
18414
18765
  if ((hasSettingForKey && _this.settingsOverride[key]) ||
@@ -18756,8 +19107,8 @@ exports.EntityFeatures = {
18756
19107
 
18757
19108
  Object.defineProperty(exports, "__esModule", { value: true });
18758
19109
  exports.ListFeatures = void 0;
18759
- var getListStyle_1 = __webpack_require__(/*! ../utils/getListStyle */ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListStyle.ts");
18760
- var getListType_1 = __webpack_require__(/*! ../utils/getListType */ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListType.ts");
19110
+ var getAutoBulletListStyle_1 = __webpack_require__(/*! ../utils/getAutoBulletListStyle */ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoBulletListStyle.ts");
19111
+ var getAutoNumberingListStyle_1 = __webpack_require__(/*! ../utils/getAutoNumberingListStyle */ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoNumberingListStyle.ts");
18761
19112
  var roosterjs_editor_api_1 = __webpack_require__(/*! roosterjs-editor-api */ "./packages/roosterjs-editor-api/lib/index.ts");
18762
19113
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
18763
19114
  /**
@@ -18882,15 +19233,10 @@ var AutoBullet = {
18882
19233
  if (!cacheGetListElement(event, editor)) {
18883
19234
  var searcher = editor.getContentSearcherOfCursor(event);
18884
19235
  var textBeforeCursor = searcher.getSubStringBefore(4);
18885
- var listTrigger = function (text) {
18886
- return editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)
18887
- ? (0, getListType_1.default)(text)
18888
- : isAListPattern(text);
18889
- };
18890
19236
  // Auto list is triggered if:
18891
19237
  // 1. Text before cursor exactly matches '*', '-' or '1.'
18892
19238
  // 2. There's no non-text inline entities before cursor
18893
- return listTrigger(textBeforeCursor) && !searcher.getNearestNonTextInlineElement();
19239
+ return isAListPattern(textBeforeCursor) && !searcher.getNearestNonTextInlineElement();
18894
19240
  }
18895
19241
  return false;
18896
19242
  },
@@ -18903,36 +19249,92 @@ var AutoBullet = {
18903
19249
  var searcher = editor.getContentSearcherOfCursor();
18904
19250
  var textBeforeCursor = searcher.getSubStringBefore(4);
18905
19251
  var textRange = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/);
18906
- var listType = 0 /* None */;
18907
- var listStyle;
18908
- if (editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)) {
18909
- listType = (0, getListType_1.default)(textBeforeCursor);
18910
- listStyle = (0, getListStyle_1.default)(textBeforeCursor, listType);
18911
- }
18912
- else {
18913
- listType =
18914
- textBeforeCursor.indexOf('*') == 0 || textBeforeCursor.indexOf('-') == 0
18915
- ? 2 /* Unordered */
18916
- : isAListPattern(textBeforeCursor)
18917
- ? 1 /* Ordered */
18918
- : 0 /* None */;
18919
- }
18920
19252
  if (!textRange) {
18921
19253
  // no op if the range can't be found
18922
19254
  }
18923
- else if (listType === 2 /* Unordered */) {
19255
+ else if (textBeforeCursor.indexOf('*') == 0 ||
19256
+ textBeforeCursor.indexOf('-') == 0) {
18924
19257
  prepareAutoBullet(editor, textRange);
18925
- (0, roosterjs_editor_api_1.toggleBullet)(editor, listStyle);
19258
+ (0, roosterjs_editor_api_1.toggleBullet)(editor);
18926
19259
  }
18927
- else if (listType === 1 /* Ordered */) {
19260
+ else if (isAListPattern(textBeforeCursor)) {
18928
19261
  prepareAutoBullet(editor, textRange);
18929
- (0, roosterjs_editor_api_1.toggleNumbering)(editor, undefined /* startNumber*/, listStyle);
19262
+ (0, roosterjs_editor_api_1.toggleNumbering)(editor);
19263
+ }
19264
+ else if ((regions = editor.getSelectedRegions()) && regions.length == 1) {
19265
+ var num = parseInt(textBeforeCursor);
19266
+ prepareAutoBullet(editor, textRange);
19267
+ (0, roosterjs_editor_api_1.toggleNumbering)(editor, num);
19268
+ }
19269
+ (_a = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/)) === null || _a === void 0 ? void 0 : _a.deleteContents();
19270
+ }, null /*changeSource*/, true /*canUndoByBackspace*/);
19271
+ },
19272
+ };
19273
+ /**
19274
+ * Requires @see ExperimentalFeatures.AutoFormatList to be enabled
19275
+ * AutoBulletList edit feature, provides the ability to automatically convert current line into a bullet list.
19276
+ */
19277
+ var AutoBulletList = {
19278
+ keys: [32 /* SPACE */],
19279
+ shouldHandleEvent: function (event, editor) {
19280
+ if (!cacheGetListElement(event, editor) &&
19281
+ editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)) {
19282
+ return shouldTriggerList(event, editor, getAutoBulletListStyle_1.default);
19283
+ }
19284
+ return false;
19285
+ },
19286
+ handleEvent: function (event, editor) {
19287
+ editor.insertContent('&nbsp;');
19288
+ event.rawEvent.preventDefault();
19289
+ editor.addUndoSnapshot(function () {
19290
+ var _a;
19291
+ var searcher = editor.getContentSearcherOfCursor();
19292
+ var textBeforeCursor = searcher.getSubStringBefore(5);
19293
+ var textRange = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/);
19294
+ var listStyle = (0, getAutoBulletListStyle_1.default)(textBeforeCursor);
19295
+ if (textRange) {
19296
+ prepareAutoBullet(editor, textRange);
19297
+ (0, roosterjs_editor_api_1.toggleBullet)(editor, listStyle);
19298
+ }
19299
+ (_a = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/)) === null || _a === void 0 ? void 0 : _a.deleteContents();
19300
+ }, null /*changeSource*/, true /*canUndoByBackspace*/);
19301
+ },
19302
+ };
19303
+ /**
19304
+ * Requires @see ExperimentalFeatures.AutoFormatList to be enabled
19305
+ * AutoNumberingList edit feature, provides the ability to automatically convert current line into a numbering list.
19306
+ */
19307
+ var AutoNumberingList = {
19308
+ keys: [32 /* SPACE */],
19309
+ shouldHandleEvent: function (event, editor) {
19310
+ if (!cacheGetListElement(event, editor) &&
19311
+ editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)) {
19312
+ return shouldTriggerList(event, editor, getAutoNumberingListStyle_1.default);
19313
+ }
19314
+ return false;
19315
+ },
19316
+ handleEvent: function (event, editor) {
19317
+ editor.insertContent('&nbsp;');
19318
+ event.rawEvent.preventDefault();
19319
+ editor.addUndoSnapshot(function () {
19320
+ var _a;
19321
+ var regions;
19322
+ var searcher = editor.getContentSearcherOfCursor();
19323
+ var textBeforeCursor = searcher.getSubStringBefore(5);
19324
+ var textRange = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/);
19325
+ var listStyle = (0, getAutoNumberingListStyle_1.default)(textBeforeCursor);
19326
+ if (!textRange) {
19327
+ // no op if the range can't be found
18930
19328
  }
18931
19329
  else if ((regions = editor.getSelectedRegions()) && regions.length == 1) {
18932
19330
  var num = parseInt(textBeforeCursor);
18933
19331
  prepareAutoBullet(editor, textRange);
18934
19332
  (0, roosterjs_editor_api_1.toggleNumbering)(editor, num, listStyle);
18935
19333
  }
19334
+ else {
19335
+ prepareAutoBullet(editor, textRange);
19336
+ (0, roosterjs_editor_api_1.toggleNumbering)(editor, undefined /* startNumber*/, listStyle);
19337
+ }
18936
19338
  (_a = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/)) === null || _a === void 0 ? void 0 : _a.deleteContents();
18937
19339
  }, null /*changeSource*/, true /*canUndoByBackspace*/);
18938
19340
  },
@@ -18999,6 +19401,11 @@ function cacheGetListElement(event, editor) {
18999
19401
  var listElement = li && (0, roosterjs_editor_dom_1.getTagOfNode)(li) == 'LI' && editor.getElementAtCursor('UL,OL', li);
19000
19402
  return listElement ? [listElement, li] : null;
19001
19403
  }
19404
+ function shouldTriggerList(event, editor, getListStyle) {
19405
+ var searcher = editor.getContentSearcherOfCursor(event);
19406
+ var textBeforeCursor = searcher.getSubStringBefore(5);
19407
+ return !searcher.getNearestNonTextInlineElement() && getListStyle(textBeforeCursor);
19408
+ }
19002
19409
  /**
19003
19410
  * @internal
19004
19411
  */
@@ -19011,6 +19418,8 @@ exports.ListFeatures = {
19011
19418
  mergeInNewLineWhenBackspaceOnFirstChar: MergeInNewLine,
19012
19419
  maintainListChain: MaintainListChain,
19013
19420
  maintainListChainWhenDelete: MaintainListChainWhenDelete,
19421
+ autoNumberingList: AutoNumberingList,
19422
+ autoBulletList: AutoBulletList,
19014
19423
  };
19015
19424
 
19016
19425
 
@@ -19351,7 +19760,7 @@ var CHILD_PARENT_TAG_MAP = {
19351
19760
  TH: 'TABLE',
19352
19761
  LI: 'OL,UL',
19353
19762
  };
19354
- var CHILD_SELECTOR = Object.keys(CHILD_PARENT_TAG_MAP).join(',');
19763
+ var CHILD_SELECTOR = (0, roosterjs_editor_dom_1.getObjectKeys)(CHILD_PARENT_TAG_MAP).join(',');
19355
19764
  /**
19356
19765
  * InsertLineBeforeStructuredNode edit feature, provides the ability to insert an empty line before
19357
19766
  * a structured element (bullet/numbering list, blockquote, table) if the element is at beginning of
@@ -19567,15 +19976,6 @@ exports.TableFeatures = {
19567
19976
 
19568
19977
  "use strict";
19569
19978
 
19570
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
19571
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
19572
- if (ar || !(i in from)) {
19573
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
19574
- ar[i] = from[i];
19575
- }
19576
- }
19577
- return to.concat(ar || Array.prototype.slice.call(from));
19578
- };
19579
19979
  Object.defineProperty(exports, "__esModule", { value: true });
19580
19980
  exports.TextFeatures = void 0;
19581
19981
  var roosterjs_editor_api_1 = __webpack_require__(/*! roosterjs-editor-api */ "./packages/roosterjs-editor-api/lib/index.ts");
@@ -19651,29 +20051,18 @@ var OutdentWhenTabText = {
19651
20051
  },
19652
20052
  };
19653
20053
  /**
19654
- * Requires @see ExperimentalFeatures.AutoHyphen to be enabled
20054
+ * @deprecated
19655
20055
  * Automatically transform -- into hyphen, if typed between two words.
19656
20056
  */
19657
20057
  var AutoHyphen = {
19658
- keys: __spreadArray(__spreadArray([], createNumberSequenceArray(48, 57), true), createNumberSequenceArray(65, 90), true),
20058
+ keys: [],
19659
20059
  shouldHandleEvent: function (event, editor) {
19660
- var searcher = editor.getContentSearcherOfCursor(event);
19661
- var textBeforeCursor = searcher.getSubStringBefore(3);
19662
- var hasDashes = textBeforeCursor[2] === '-' && textBeforeCursor[1] === '-';
19663
- var noSpace = textBeforeCursor[0] !== ' ';
19664
- return hasDashes && noSpace && editor.isFeatureEnabled("AutoHyphen" /* AutoHyphen */);
20060
+ return false;
19665
20061
  },
19666
20062
  handleEvent: function (event, editor) {
19667
- var searcher = editor.getContentSearcherOfCursor(event);
19668
- var dashes = searcher.getSubStringBefore(2);
19669
- var textRange = searcher.getRangeFromText(dashes, true /* exactMatch */);
19670
- var nodeHyphen = document.createTextNode('—');
19671
- editor.addUndoSnapshot(function () {
19672
- textRange.deleteContents();
19673
- textRange.insertNode(nodeHyphen);
19674
- editor.select(nodeHyphen, -1 /* End */);
19675
- }, null /*changeSource*/, true /*canUndoByBackspace*/);
20063
+ return false;
19676
20064
  },
20065
+ defaultDisabled: true,
19677
20066
  };
19678
20067
  /**
19679
20068
  * @internal
@@ -19739,9 +20128,6 @@ function insertTab(editor, event) {
19739
20128
  editor.deleteNode(span2);
19740
20129
  }
19741
20130
  }
19742
- function createNumberSequenceArray(start, end) {
19743
- return new Array(end - start).fill(start).map(function (keyCodeValue, i) { return i + start; });
19744
- }
19745
20131
 
19746
20132
 
19747
20133
  /***/ }),
@@ -19808,10 +20194,48 @@ Object.defineProperty(exports, "getAllFeatures", { enumerable: true, get: functi
19808
20194
 
19809
20195
  /***/ }),
19810
20196
 
19811
- /***/ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListStyle.ts":
19812
- /*!*****************************************************************************************!*\
19813
- !*** ./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListStyle.ts ***!
19814
- \*****************************************************************************************/
20197
+ /***/ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoBulletListStyle.ts":
20198
+ /*!***************************************************************************************************!*\
20199
+ !*** ./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoBulletListStyle.ts ***!
20200
+ \***************************************************************************************************/
20201
+ /*! no static exports found */
20202
+ /***/ (function(module, exports, __webpack_require__) {
20203
+
20204
+ "use strict";
20205
+
20206
+ Object.defineProperty(exports, "__esModule", { value: true });
20207
+ var bulletListType = {
20208
+ '*': 1 /* Disc */,
20209
+ '-': 2 /* Dash */,
20210
+ '--': 3 /* Square */,
20211
+ '->': 5 /* LongArrow */,
20212
+ '-->': 5 /* LongArrow */,
20213
+ '=>': 6 /* UnfilledArrow */,
20214
+ '>': 4 /* ShortArrow */,
20215
+ '—': 7 /* Hyphen */,
20216
+ };
20217
+ var identifyBulletListType = function (bullet) {
20218
+ return bulletListType[bullet] || null;
20219
+ };
20220
+ /**
20221
+ * @internal
20222
+ * @param textBeforeCursor The trigger character
20223
+ * @returns The style of a bullet list triggered by a string
20224
+ */
20225
+ function getAutoBulletListStyle(textBeforeCursor) {
20226
+ var trigger = textBeforeCursor.trim();
20227
+ var bulletType = identifyBulletListType(trigger);
20228
+ return bulletType;
20229
+ }
20230
+ exports.default = getAutoBulletListStyle;
20231
+
20232
+
20233
+ /***/ }),
20234
+
20235
+ /***/ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoNumberingListStyle.ts":
20236
+ /*!******************************************************************************************************!*\
20237
+ !*** ./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoNumberingListStyle.ts ***!
20238
+ \******************************************************************************************************/
19815
20239
  /*! no static exports found */
19816
20240
  /***/ (function(module, exports, __webpack_require__) {
19817
20241
 
@@ -19820,145 +20244,100 @@ Object.defineProperty(exports, "getAllFeatures", { enumerable: true, get: functi
19820
20244
  var _a, _b, _c, _d, _e, _f;
19821
20245
  Object.defineProperty(exports, "__esModule", { value: true });
19822
20246
  var characters = {
19823
- '.': 0 /* Dot */,
19824
- '-': 1 /* Dash */,
19825
- ')': 2 /* Parenthesis */,
19826
- '(': 3 /* DoubleParenthesis */,
20247
+ '.': 1 /* Dot */,
20248
+ '-': 2 /* Dash */,
20249
+ ')': 3 /* Parenthesis */,
20250
+ '(': 4 /* DoubleParenthesis */,
19827
20251
  };
19828
- var identifyCharacter = function (text) {
19829
- var char = text[0] === '(' ? text[0] : text[text.length - 1];
19830
- return characters[char];
20252
+ var identifyCharacter = function (text, secondSeparator) {
20253
+ var charType = characters[text];
20254
+ return charType === 4 /* DoubleParenthesis */ && secondSeparator !== ')'
20255
+ ? undefined
20256
+ : charType;
19831
20257
  };
19832
20258
  var identifyNumberingType = function (text) {
19833
- var char = text[0] === '(' ? text[1] : text[0];
19834
- if (!isNaN(parseInt(char))) {
19835
- return 0 /* Decimal */;
20259
+ if (!isNaN(parseInt(text))) {
20260
+ return 1 /* Decimal */;
19836
20261
  }
19837
- else if (/[a-z]+/g.test(char)) {
19838
- if (char === 'i') {
19839
- return 3 /* LowerRoman */;
20262
+ else if (/[a-z]+/g.test(text)) {
20263
+ if (text === 'i') {
20264
+ return 4 /* LowerRoman */;
19840
20265
  }
19841
20266
  else {
19842
- return 1 /* LowerAlpha */;
20267
+ return 2 /* LowerAlpha */;
19843
20268
  }
19844
20269
  }
19845
- else if (/[A-Z]+/g.test(char)) {
19846
- if (char === 'I') {
19847
- return 4 /* UpperRoman */;
20270
+ else if (/[A-Z]+/g.test(text)) {
20271
+ if (text === 'I') {
20272
+ return 5 /* UpperRoman */;
19848
20273
  }
19849
20274
  else {
19850
- return 2 /* UpperAlpha */;
20275
+ return 3 /* UpperAlpha */;
19851
20276
  }
19852
20277
  }
19853
20278
  };
19854
20279
  var numberingListTypes = (_a = {},
19855
- _a[0 /* Decimal */] = function (char) { return DecimalsTypes[char]; },
19856
- _a[1 /* LowerAlpha */] = function (char) { return LowerAlphaTypes[char]; },
19857
- _a[2 /* UpperAlpha */] = function (char) { return UpperAlphaTypes[char]; },
19858
- _a[3 /* LowerRoman */] = function (char) { return LowerRomanTypes[char]; },
19859
- _a[4 /* UpperRoman */] = function (char) { return UpperRomanTypes[char]; },
20280
+ _a[1 /* Decimal */] = function (char) { return DecimalsTypes[char] || null; },
20281
+ _a[2 /* LowerAlpha */] = function (char) { return LowerAlphaTypes[char] || null; },
20282
+ _a[3 /* UpperAlpha */] = function (char) { return UpperAlphaTypes[char] || null; },
20283
+ _a[4 /* LowerRoman */] = function (char) { return LowerRomanTypes[char] || null; },
20284
+ _a[5 /* UpperRoman */] = function (char) { return UpperRomanTypes[char] || null; },
19860
20285
  _a);
19861
20286
  var UpperRomanTypes = (_b = {},
19862
- _b[0 /* Dot */] = 16 /* UpperRoman */,
19863
- _b[1 /* Dash */] = 19 /* UpperRomanDash */,
19864
- _b[2 /* Parenthesis */] = 17 /* UpperRomanParenthesis */,
19865
- _b[3 /* DoubleParenthesis */] = 18 /* UpperRomanDoubleParenthesis */,
20287
+ _b[1 /* Dot */] = 17 /* UpperRoman */,
20288
+ _b[2 /* Dash */] = 20 /* UpperRomanDash */,
20289
+ _b[3 /* Parenthesis */] = 18 /* UpperRomanParenthesis */,
20290
+ _b[4 /* DoubleParenthesis */] = 19 /* UpperRomanDoubleParenthesis */,
19866
20291
  _b);
19867
20292
  var LowerRomanTypes = (_c = {},
19868
- _c[0 /* Dot */] = 12 /* LowerRoman */,
19869
- _c[1 /* Dash */] = 15 /* LowerRomanDash */,
19870
- _c[2 /* Parenthesis */] = 13 /* LowerRomanParenthesis */,
19871
- _c[3 /* DoubleParenthesis */] = 14 /* LowerRomanDoubleParenthesis */,
20293
+ _c[1 /* Dot */] = 13 /* LowerRoman */,
20294
+ _c[2 /* Dash */] = 16 /* LowerRomanDash */,
20295
+ _c[3 /* Parenthesis */] = 14 /* LowerRomanParenthesis */,
20296
+ _c[4 /* DoubleParenthesis */] = 15 /* LowerRomanDoubleParenthesis */,
19872
20297
  _c);
19873
20298
  var UpperAlphaTypes = (_d = {},
19874
- _d[0 /* Dot */] = 8 /* UpperAlpha */,
19875
- _d[1 /* Dash */] = 11 /* UpperAlphaDash */,
19876
- _d[2 /* Parenthesis */] = 9 /* UpperAlphaParenthesis */,
19877
- _d[3 /* DoubleParenthesis */] = 10 /* UpperAlphaDoubleParenthesis */,
20299
+ _d[1 /* Dot */] = 9 /* UpperAlpha */,
20300
+ _d[2 /* Dash */] = 12 /* UpperAlphaDash */,
20301
+ _d[3 /* Parenthesis */] = 10 /* UpperAlphaParenthesis */,
20302
+ _d[4 /* DoubleParenthesis */] = 11 /* UpperAlphaDoubleParenthesis */,
19878
20303
  _d);
19879
20304
  var LowerAlphaTypes = (_e = {},
19880
- _e[0 /* Dot */] = 4 /* LowerAlpha */,
19881
- _e[1 /* Dash */] = 7 /* LowerAlphaDash */,
19882
- _e[2 /* Parenthesis */] = 5 /* LowerAlphaParenthesis */,
19883
- _e[3 /* DoubleParenthesis */] = 6 /* LowerAlphaDoubleParenthesis */,
20305
+ _e[1 /* Dot */] = 5 /* LowerAlpha */,
20306
+ _e[2 /* Dash */] = 8 /* LowerAlphaDash */,
20307
+ _e[3 /* Parenthesis */] = 6 /* LowerAlphaParenthesis */,
20308
+ _e[4 /* DoubleParenthesis */] = 7 /* LowerAlphaDoubleParenthesis */,
19884
20309
  _e);
19885
20310
  var DecimalsTypes = (_f = {},
19886
- _f[0 /* Dot */] = 0 /* Decimal */,
19887
- _f[1 /* Dash */] = 1 /* DecimalDash */,
19888
- _f[2 /* Parenthesis */] = 2 /* DecimalParenthesis */,
19889
- _f[3 /* DoubleParenthesis */] = 3 /* DecimalDoubleParenthesis */,
20311
+ _f[1 /* Dot */] = 1 /* Decimal */,
20312
+ _f[2 /* Dash */] = 2 /* DecimalDash */,
20313
+ _f[3 /* Parenthesis */] = 3 /* DecimalParenthesis */,
20314
+ _f[4 /* DoubleParenthesis */] = 4 /* DecimalDoubleParenthesis */,
19890
20315
  _f);
19891
- var bulletListType = {
19892
- '*': 0 /* Disc */,
19893
- '-': 1 /* Dash */,
19894
- '--': 2 /* Square */,
19895
- '->': 4 /* LongArrow */,
19896
- '-->': 4 /* LongArrow */,
19897
- '=>': 5 /* UnfilledArrow */,
19898
- '>': 3 /* ShortArrow */,
19899
- };
19900
- var identifyNumberingListType = function (textBeforeCursor) {
19901
- var numbering = textBeforeCursor.replace(/\s/g, '');
19902
- var char = identifyCharacter(numbering);
19903
- var numberingType = identifyNumberingType(numbering);
19904
- return numberingListTypes[numberingType](char);
19905
- };
19906
- var identifyBulletListType = function (textBeforeCursor) {
19907
- var bullet = textBeforeCursor.replace(/\s/g, '');
19908
- return bulletListType[bullet];
19909
- };
19910
- /**
19911
- * @internal
19912
- * @param textBeforeCursor The trigger character
19913
- * @param listType The type of the list (ordered or unordered)
19914
- * @returns the style of the list
19915
- */
19916
- function getListStyle(textBeforeCursor, listType) {
19917
- if (listType === 1 /* Ordered */) {
19918
- return identifyNumberingListType(textBeforeCursor);
20316
+ var identifyNumberingListType = function (numbering) {
20317
+ // If the marker length is 3, the marker style is double parenthis such as (1), (A). Then the number is second character of the string and the separator is first character and last character.
20318
+ var separator = numbering.length === 3 ? numbering[0] : numbering[1];
20319
+ var secondSeparator = numbering.length === 3 ? numbering[2] : undefined;
20320
+ var char = identifyCharacter(separator, secondSeparator);
20321
+ // if separator is not valid, no need to check if the number is valid.
20322
+ if (char) {
20323
+ var number = numbering.length === 3 ? numbering[1] : numbering[0];
20324
+ var numberingType = identifyNumberingType(number);
20325
+ return numberingType ? numberingListTypes[numberingType](char) : null;
19919
20326
  }
19920
- else {
19921
- return identifyBulletListType(textBeforeCursor);
19922
- }
19923
- }
19924
- exports.default = getListStyle;
19925
-
19926
-
19927
- /***/ }),
19928
-
19929
- /***/ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListType.ts":
19930
- /*!****************************************************************************************!*\
19931
- !*** ./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListType.ts ***!
19932
- \****************************************************************************************/
19933
- /*! no static exports found */
19934
- /***/ (function(module, exports, __webpack_require__) {
19935
-
19936
- "use strict";
19937
-
19938
- Object.defineProperty(exports, "__esModule", { value: true });
19939
- function isABulletList(textBeforeCursor) {
19940
- var hasTriggers = ['*', '-', '>'].indexOf(textBeforeCursor[0]) > -1;
19941
- var REGEX = /^(.*?)=>|^(.*?)->|^(.*?)-->|^(.*?)=>|^(.*?)--/;
19942
- return hasTriggers || REGEX.test(textBeforeCursor);
19943
- }
19944
- function isANumberingList(textBeforeCursor) {
19945
- 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}\))$/;
19946
- return REGEX.test(textBeforeCursor.replace(/\s/g, ''));
19947
- }
20327
+ return null;
20328
+ };
19948
20329
  /**
19949
20330
  * @internal
19950
20331
  * @param textBeforeCursor The trigger character
19951
- * @returns If the list is ordered or unordered
20332
+ * @returns The style of a numbering list triggered by a string
19952
20333
  */
19953
- function getListType(textBeforeCursor) {
19954
- if (isABulletList(textBeforeCursor)) {
19955
- return 2 /* Unordered */;
19956
- }
19957
- else if (isANumberingList(textBeforeCursor)) {
19958
- return 1 /* Ordered */;
19959
- }
20334
+ function getAutoNumberingListStyle(textBeforeCursor) {
20335
+ var trigger = textBeforeCursor.trim();
20336
+ // the marker must be a combination of 2 or 3 characters, so if the length is less than 2, no need to check
20337
+ var numberingType = trigger.length > 1 ? identifyNumberingListType(trigger) : null;
20338
+ return numberingType;
19960
20339
  }
19961
- exports.default = getListType;
20340
+ exports.default = getAutoNumberingListStyle;
19962
20341
 
19963
20342
 
19964
20343
  /***/ }),
@@ -20750,7 +21129,7 @@ var ImageEdit = /** @class */ (function () {
20750
21129
  this.editor = editor;
20751
21130
  this.disposer = editor.addDomEventHandler('blur', this.onBlur);
20752
21131
  // Read current enabled features from editor to determine which editing operations are allowed
20753
- Object.keys(FeatureToOperationMap).forEach(function (key) {
21132
+ (0, roosterjs_editor_dom_1.getObjectKeys)(FeatureToOperationMap).forEach(function (key) {
20754
21133
  _this.allowedOperations |= _this.editor.isFeatureEnabled(key)
20755
21134
  ? FeatureToOperationMap[key]
20756
21135
  : 0;
@@ -20835,14 +21214,13 @@ var ImageEdit = /** @class */ (function () {
20835
21214
  // When there is image in editing, clean up any cached objects and elements
20836
21215
  this.clearDndHelpers();
20837
21216
  // Apply the changes, and add undo snapshot if necessary
20838
- if ((0, applyChange_1.default)(this.editor, this.image, this.editInfo, this.lastSrc, this.wasResized)) {
20839
- this.editor.addUndoSnapshot(function () { return _this.image; }, "ImageResize" /* ImageResize */);
20840
- }
21217
+ (0, applyChange_1.default)(this.editor, this.image, this.editInfo, this.lastSrc, this.wasResized);
20841
21218
  // Remove editing wrapper
20842
21219
  var wrapper = this.getImageWrapper(this.image);
20843
21220
  if (wrapper) {
20844
21221
  this.removeWrapper(wrapper);
20845
21222
  }
21223
+ this.editor.addUndoSnapshot(function () { return _this.image; }, "ImageResize" /* ImageResize */);
20846
21224
  if (selectImage) {
20847
21225
  this.editor.select(this.image);
20848
21226
  }
@@ -20890,7 +21268,7 @@ var ImageEdit = /** @class */ (function () {
20890
21268
  var isExperimentalHandlesEnabled = this.editor.isFeatureEnabled("AdaptiveHandlesResizer" /* AdaptiveHandlesResizer */);
20891
21269
  // Get HTML for all edit elements (resize handle, rotate handle, crop handle and overlay, ...) and create HTML element
20892
21270
  var options = {
20893
- borderColor: this.options.borderColor,
21271
+ borderColor: getColorString(this.options.borderColor, this.editor.isDarkMode()),
20894
21272
  rotateIconHTML: this.options.rotateIconHTML,
20895
21273
  rotateHandleBackColor: this.editor.isDarkMode()
20896
21274
  ? DARK_MODE_BGCOLOR
@@ -20899,7 +21277,7 @@ var ImageEdit = /** @class */ (function () {
20899
21277
  handlesExperimentalFeatures: isExperimentalHandlesEnabled,
20900
21278
  };
20901
21279
  var htmlData = [(0, Resizer_1.getResizeBordersHTML)(options)];
20902
- Object.keys(ImageEditHTMLMap).forEach(function (thisOperation) {
21280
+ (0, roosterjs_editor_dom_1.getObjectKeys)(ImageEditHTMLMap).forEach(function (thisOperation) {
20903
21281
  if ((operation & thisOperation) == thisOperation) {
20904
21282
  (0, roosterjs_editor_dom_1.arrayPush)(htmlData, ImageEditHTMLMap[thisOperation](options, _this.onShowResizeHandle));
20905
21283
  }
@@ -21020,6 +21398,12 @@ function isASmallImage(editInfo, isFeatureEnabled) {
21020
21398
  var widthPx = editInfo.widthPx, heightPx = editInfo.heightPx;
21021
21399
  return widthPx && heightPx && widthPx * widthPx < MAX_SMALL_SIZE_IMAGE && isFeatureEnabled;
21022
21400
  }
21401
+ function getColorString(color, isDarkMode) {
21402
+ if (typeof color === 'string') {
21403
+ return color.trim();
21404
+ }
21405
+ return isDarkMode ? color.darkModeColor.trim() : color.lightModeColor.trim();
21406
+ }
21023
21407
 
21024
21408
 
21025
21409
  /***/ }),
@@ -21199,7 +21583,6 @@ var editInfo_1 = __webpack_require__(/*! ./editInfo */ "./packages/roosterjs-edi
21199
21583
  * @param image The image to apply the change
21200
21584
  * @param editInfo Edit info that contains the changed information of the image
21201
21585
  * @param previousSrc Last src value of the image before the change was made
21202
- * @returns True if the image is changed, otherwise false
21203
21586
  */
21204
21587
  function applyChange(editor, image, editInfo, previousSrc, wasResized) {
21205
21588
  var newSrc = '';
@@ -21246,9 +21629,6 @@ function applyChange(editor, image, editInfo, previousSrc, wasResized) {
21246
21629
  var _a = (0, getGeneratedImageSize_1.default)(editInfo), targetWidth = _a.targetWidth, targetHeight = _a.targetHeight;
21247
21630
  image.src = newSrc;
21248
21631
  setImageSize(image, wasResized, targetWidth, targetHeight);
21249
- return (srcChanged ||
21250
- editInfo.widthPx != initEditInfo.widthPx ||
21251
- editInfo.heightPx != initEditInfo.heightPx);
21252
21632
  }
21253
21633
  exports.default = applyChange;
21254
21634
  /**
@@ -23046,7 +23426,9 @@ function getAndSetNodeId(wordCustomData, element) {
23046
23426
 
23047
23427
  Object.defineProperty(exports, "__esModule", { value: true });
23048
23428
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
23429
+ var MSO_COMMENT_PARENT = 'mso-comment-parent';
23049
23430
  var MSO_COMMENT_REFERENCE = 'mso-comment-reference';
23431
+ var MSO_COMMENT_DATE = 'mso-comment-date';
23050
23432
  var MSO_COMMENT_ANCHOR_HREF_REGEX = /#_msocom_/;
23051
23433
  var MSO_SPECIAL_CHARACTER = 'mso-special-character';
23052
23434
  var MSO_SPECIAL_CHARACTER_COMMENT = 'comment';
@@ -23057,7 +23439,7 @@ var MSO_ELEMENT_COMMENT_LIST = 'comment-list';
23057
23439
  * @internal
23058
23440
  * Removes comments when pasting Word content.
23059
23441
  */
23060
- function commentsRemoval(elementCallbacks) {
23442
+ function commentsRemoval(elementCallbacks, styleCallbacks) {
23061
23443
  // 1st Step, Remove SPAN elements added after each comment.
23062
23444
  // Word adds multiple elements for comments as SPAN elements.
23063
23445
  // In this step we remove these elements:
@@ -23089,11 +23471,7 @@ function commentsRemoval(elementCallbacks) {
23089
23471
  // In this step we remove this Anchor elements.
23090
23472
  (0, roosterjs_editor_dom_1.chainSanitizerCallback)(elementCallbacks, 'A', function (element) {
23091
23473
  var _a;
23092
- var styles = (0, roosterjs_editor_dom_1.getStyles)(element);
23093
- if (!!styles[MSO_COMMENT_REFERENCE]) {
23094
- (0, roosterjs_editor_dom_1.changeElementTag)(element, 'span');
23095
- }
23096
- else if ((0, roosterjs_editor_dom_1.safeInstanceOf)(element, 'HTMLAnchorElement') &&
23474
+ if ((0, roosterjs_editor_dom_1.safeInstanceOf)(element, 'HTMLAnchorElement') &&
23097
23475
  MSO_COMMENT_ANCHOR_HREF_REGEX.test(element.href)) {
23098
23476
  (_a = element.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(element);
23099
23477
  }
@@ -23118,6 +23496,13 @@ function commentsRemoval(elementCallbacks) {
23118
23496
  }
23119
23497
  return true;
23120
23498
  });
23499
+ /**
23500
+ * Remove styles related to Office Comments that can cause unwanted behaviors
23501
+ * depending on the user client
23502
+ */
23503
+ (0, roosterjs_editor_dom_1.chainSanitizerCallback)(styleCallbacks, MSO_COMMENT_REFERENCE, function () { return false; });
23504
+ (0, roosterjs_editor_dom_1.chainSanitizerCallback)(styleCallbacks, MSO_COMMENT_DATE, function () { return false; });
23505
+ (0, roosterjs_editor_dom_1.chainSanitizerCallback)(styleCallbacks, MSO_COMMENT_PARENT, function () { return false; });
23121
23506
  }
23122
23507
  exports.default = commentsRemoval;
23123
23508
 
@@ -23184,7 +23569,7 @@ function convertPastedContentFromWord(event) {
23184
23569
  }
23185
23570
  return true;
23186
23571
  });
23187
- (0, commentsRemoval_1.default)(sanitizingOption.elementCallbacks);
23572
+ (0, commentsRemoval_1.default)(sanitizingOption.elementCallbacks, sanitizingOption.cssStyleCallbacks);
23188
23573
  }
23189
23574
  exports.default = convertPastedContentFromWord;
23190
23575
 
@@ -23735,8 +24120,6 @@ var UNIDENTIFIED_CODE = [0, 229];
23735
24120
  * - Apply selected item in picker
23736
24121
  *
23737
24122
  * PickerPlugin doesn't provide any UI, it just wraps related DOM events and invoke callback functions.
23738
- * To show a picker UI, you need to build your own UI component. Please reference to
23739
- * https://github.com/microsoft/roosterjs/tree/master/demo/scripts/controls/samplepicker
23740
24123
  */
23741
24124
  var PickerPlugin = /** @class */ (function () {
23742
24125
  function PickerPlugin(dataProvider, pickerOptions) {
@@ -25036,7 +25419,7 @@ var TableResize = /** @class */ (function () {
25036
25419
  break;
25037
25420
  }
25038
25421
  }
25039
- _this.setTableEditor(currentTable);
25422
+ _this.setTableEditor(currentTable, e);
25040
25423
  (_a = _this.tableEditor) === null || _a === void 0 ? void 0 : _a.onMouseMove(x, y);
25041
25424
  };
25042
25425
  this.invalidateTableRects = function () {
@@ -25081,13 +25464,13 @@ var TableResize = /** @class */ (function () {
25081
25464
  break;
25082
25465
  }
25083
25466
  };
25084
- TableResize.prototype.setTableEditor = function (table) {
25467
+ TableResize.prototype.setTableEditor = function (table, e) {
25085
25468
  if (this.tableEditor && table != this.tableEditor.table) {
25086
25469
  this.tableEditor.dispose();
25087
25470
  this.tableEditor = null;
25088
25471
  }
25089
25472
  if (!this.tableEditor && table) {
25090
- this.tableEditor = new TableEditor_1.default(this.editor, table, this.invalidateTableRects, this.onShowHelperElement);
25473
+ this.tableEditor = new TableEditor_1.default(this.editor, table, this.invalidateTableRects, this.onShowHelperElement, e.currentTarget);
25091
25474
  }
25092
25475
  };
25093
25476
  TableResize.prototype.ensureTableRects = function () {
@@ -25331,7 +25714,7 @@ var INSERTER_HOVER_OFFSET = 5;
25331
25714
  * When set a different current table or change current TD, we need to update these areas
25332
25715
  */
25333
25716
  var TableEditor = /** @class */ (function () {
25334
- function TableEditor(editor, table, onChanged, onShowHelperElement) {
25717
+ function TableEditor(editor, table, onChanged, onShowHelperElement, eventTarget) {
25335
25718
  var _this = this;
25336
25719
  this.editor = editor;
25337
25720
  this.table = table;
@@ -25360,29 +25743,31 @@ var TableEditor = /** @class */ (function () {
25360
25743
  _this.editor.focus();
25361
25744
  if (table) {
25362
25745
  var vTable = new roosterjs_editor_dom_1.VTable(table);
25363
- var rows = vTable.cells.length - 1;
25364
- var lastCellIndex_1 = 0;
25365
- vTable.cells[rows].forEach(function (cell, index) {
25366
- if (cell.td) {
25367
- lastCellIndex_1 = index;
25368
- }
25369
- });
25370
- var selection = {
25371
- firstCell: {
25372
- x: 0,
25373
- y: 0,
25374
- },
25375
- lastCell: {
25376
- y: rows,
25377
- x: lastCellIndex_1,
25378
- },
25379
- };
25380
- _this.editor.select(table, selection);
25746
+ if (vTable.cells) {
25747
+ var rows = vTable.cells.length - 1;
25748
+ var lastCellIndex_1 = 0;
25749
+ vTable.cells[rows].forEach(function (cell, index) {
25750
+ if (cell.td) {
25751
+ lastCellIndex_1 = index;
25752
+ }
25753
+ });
25754
+ var selection = {
25755
+ firstCell: {
25756
+ x: 0,
25757
+ y: 0,
25758
+ },
25759
+ lastCell: {
25760
+ y: rows,
25761
+ x: lastCellIndex_1,
25762
+ },
25763
+ };
25764
+ _this.editor.select(table, selection);
25765
+ }
25381
25766
  }
25382
25767
  };
25383
25768
  this.isRTL = (0, roosterjs_editor_dom_1.getComputedStyle)(table, 'direction') == 'rtl';
25384
25769
  this.tableResizer = (0, TableResizer_1.default)(table, editor.getZoomScale(), this.isRTL, this.onStartTableResize, this.onFinishEditing, this.onShowHelperElement);
25385
- this.tableSelector = (0, TableSelector_1.default)(table, editor.getZoomScale(), this.onSelect, this.onShowHelperElement);
25770
+ this.tableSelector = (0, TableSelector_1.default)(table, editor.getZoomScale(), this.onSelect, this.onShowHelperElement, this.getShouldShowTableSelectorHandler(this.editor.getScrollContainer(), eventTarget));
25386
25771
  }
25387
25772
  TableEditor.prototype.dispose = function () {
25388
25773
  this.disposeTableResizer();
@@ -25494,6 +25879,21 @@ var TableEditor = /** @class */ (function () {
25494
25879
  }
25495
25880
  this.editor.addUndoSnapshot();
25496
25881
  };
25882
+ TableEditor.prototype.getShouldShowTableSelectorHandler = function (scrollContainer, eventTarget) {
25883
+ if (eventTarget && (0, roosterjs_editor_dom_1.safeInstanceOf)(eventTarget, 'HTMLElement') && scrollContainer) {
25884
+ var scrollContainerRect_1 = (0, roosterjs_editor_dom_1.normalizeRect)(scrollContainer.getBoundingClientRect());
25885
+ var containerRect_1 = (0, roosterjs_editor_dom_1.normalizeRect)(eventTarget.getBoundingClientRect());
25886
+ if (scrollContainerRect_1 && containerRect_1) {
25887
+ var scrollContainerVisibleTop_1 = scrollContainer.scrollTop - scrollContainerRect_1.top;
25888
+ return function (rect) {
25889
+ return containerRect_1.top <= rect.top &&
25890
+ scrollContainerVisibleTop_1 <= rect.top &&
25891
+ scrollContainerRect_1.top <= rect.top;
25892
+ };
25893
+ }
25894
+ }
25895
+ return function () { return true; };
25896
+ };
25497
25897
  return TableEditor;
25498
25898
  }());
25499
25899
  exports.default = TableEditor;
@@ -25516,10 +25916,10 @@ exports.disposeTableEditFeature = void 0;
25516
25916
  * @internal
25517
25917
  */
25518
25918
  function disposeTableEditFeature(resizer) {
25519
- var _a;
25520
- (_a = resizer.div.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(resizer.div);
25919
+ var _a, _b, _c;
25920
+ (_b = (_a = resizer.div) === null || _a === void 0 ? void 0 : _a.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(resizer.div);
25521
25921
  resizer.div = null;
25522
- resizer.featureHandler.dispose();
25922
+ (_c = resizer.featureHandler) === null || _c === void 0 ? void 0 : _c.dispose();
25523
25923
  resizer.featureHandler = null;
25524
25924
  }
25525
25925
  exports.disposeTableEditFeature = disposeTableEditFeature;
@@ -25753,7 +26153,11 @@ var TABLE_SELECTOR_ID = '_Table_Selector';
25753
26153
  /**
25754
26154
  * @internal
25755
26155
  */
25756
- function createTableSelector(table, zoomScale, onFinishDragging, onShowHelperElement) {
26156
+ function createTableSelector(table, zoomScale, onFinishDragging, onShowHelperElement, shouldShow) {
26157
+ var rect = (0, roosterjs_editor_dom_1.normalizeRect)(table.getBoundingClientRect());
26158
+ if (rect && shouldShow && !shouldShow(rect)) {
26159
+ return { div: null, featureHandler: null, node: table };
26160
+ }
25757
26161
  var document = table.ownerDocument;
25758
26162
  var createElementData = {
25759
26163
  tag: 'div',
@@ -25768,6 +26172,7 @@ function createTableSelector(table, zoomScale, onFinishDragging, onShowHelperEle
25768
26172
  var context = {
25769
26173
  table: table,
25770
26174
  zoomScale: zoomScale,
26175
+ rect: rect,
25771
26176
  };
25772
26177
  setSelectorDivPosition(context, div);
25773
26178
  var onDragEnd = function (context, event) {
@@ -25783,8 +26188,7 @@ function createTableSelector(table, zoomScale, onFinishDragging, onShowHelperEle
25783
26188
  }
25784
26189
  exports.default = createTableSelector;
25785
26190
  function setSelectorDivPosition(context, trigger) {
25786
- var table = context.table;
25787
- var rect = (0, roosterjs_editor_dom_1.normalizeRect)(table.getBoundingClientRect());
26191
+ var rect = context.rect;
25788
26192
  if (rect) {
25789
26193
  trigger.style.top = rect.top - TABLE_SELECTOR_LENGTH + "px";
25790
26194
  trigger.style.left = rect.left - TABLE_SELECTOR_LENGTH - 2 + "px";
@@ -26026,30 +26430,42 @@ exports.CompatibleBulletListType = void 0;
26026
26430
  */
26027
26431
  var CompatibleBulletListType;
26028
26432
  (function (CompatibleBulletListType) {
26433
+ /**
26434
+ * Minimum value of the enum
26435
+ */
26436
+ CompatibleBulletListType[CompatibleBulletListType["Min"] = 1] = "Min";
26029
26437
  /**
26030
26438
  * Bullet triggered by *
26031
26439
  */
26032
- CompatibleBulletListType[CompatibleBulletListType["Disc"] = 0] = "Disc";
26440
+ CompatibleBulletListType[CompatibleBulletListType["Disc"] = 1] = "Disc";
26033
26441
  /**
26034
26442
  * Bullet triggered by -
26035
26443
  */
26036
- CompatibleBulletListType[CompatibleBulletListType["Dash"] = 1] = "Dash";
26444
+ CompatibleBulletListType[CompatibleBulletListType["Dash"] = 2] = "Dash";
26037
26445
  /**
26038
26446
  * Bullet triggered by --
26039
26447
  */
26040
- CompatibleBulletListType[CompatibleBulletListType["Square"] = 2] = "Square";
26448
+ CompatibleBulletListType[CompatibleBulletListType["Square"] = 3] = "Square";
26041
26449
  /**
26042
26450
  * Bullet triggered by >
26043
26451
  */
26044
- CompatibleBulletListType[CompatibleBulletListType["ShortArrow"] = 3] = "ShortArrow";
26452
+ CompatibleBulletListType[CompatibleBulletListType["ShortArrow"] = 4] = "ShortArrow";
26045
26453
  /**
26046
26454
  * Bullet triggered by -> or -->
26047
26455
  */
26048
- CompatibleBulletListType[CompatibleBulletListType["LongArrow"] = 4] = "LongArrow";
26456
+ CompatibleBulletListType[CompatibleBulletListType["LongArrow"] = 5] = "LongArrow";
26049
26457
  /**
26050
26458
  * Bullet triggered by =>
26051
26459
  */
26052
- CompatibleBulletListType[CompatibleBulletListType["UnfilledArrow"] = 5] = "UnfilledArrow";
26460
+ CompatibleBulletListType[CompatibleBulletListType["UnfilledArrow"] = 6] = "UnfilledArrow";
26461
+ /**
26462
+ * Bullet triggered by —
26463
+ */
26464
+ CompatibleBulletListType[CompatibleBulletListType["Hyphen"] = 7] = "Hyphen";
26465
+ /**
26466
+ * Maximum value of the enum
26467
+ */
26468
+ CompatibleBulletListType[CompatibleBulletListType["Max"] = 7] = "Max";
26053
26469
  })(CompatibleBulletListType = exports.CompatibleBulletListType || (exports.CompatibleBulletListType = {}));
26054
26470
 
26055
26471
 
@@ -26901,6 +27317,7 @@ var CompatibleExperimentalFeatures;
26901
27317
  */
26902
27318
  CompatibleExperimentalFeatures["AutoFormatList"] = "AutoFormatList";
26903
27319
  /**
27320
+ * @deprecated this feature is always disabled
26904
27321
  * Automatically transform -- into hyphen, if typed between two words.
26905
27322
  */
26906
27323
  CompatibleExperimentalFeatures["AutoHyphen"] = "AutoHyphen";
@@ -27307,86 +27724,94 @@ exports.CompatibleNumberingListType = void 0;
27307
27724
  */
27308
27725
  var CompatibleNumberingListType;
27309
27726
  (function (CompatibleNumberingListType) {
27727
+ /**
27728
+ * Minimum value of the enum
27729
+ */
27730
+ CompatibleNumberingListType[CompatibleNumberingListType["Min"] = 1] = "Min";
27310
27731
  /**
27311
27732
  * Numbering triggered by 1.
27312
27733
  */
27313
- CompatibleNumberingListType[CompatibleNumberingListType["Decimal"] = 0] = "Decimal";
27734
+ CompatibleNumberingListType[CompatibleNumberingListType["Decimal"] = 1] = "Decimal";
27314
27735
  /**
27315
27736
  * Numbering triggered by 1-
27316
27737
  */
27317
- CompatibleNumberingListType[CompatibleNumberingListType["DecimalDash"] = 1] = "DecimalDash";
27738
+ CompatibleNumberingListType[CompatibleNumberingListType["DecimalDash"] = 2] = "DecimalDash";
27318
27739
  /**
27319
27740
  * Numbering triggered by 1)
27320
27741
  */
27321
- CompatibleNumberingListType[CompatibleNumberingListType["DecimalParenthesis"] = 2] = "DecimalParenthesis";
27742
+ CompatibleNumberingListType[CompatibleNumberingListType["DecimalParenthesis"] = 3] = "DecimalParenthesis";
27322
27743
  /**
27323
27744
  * Numbering triggered by (1)
27324
27745
  */
27325
- CompatibleNumberingListType[CompatibleNumberingListType["DecimalDoubleParenthesis"] = 3] = "DecimalDoubleParenthesis";
27746
+ CompatibleNumberingListType[CompatibleNumberingListType["DecimalDoubleParenthesis"] = 4] = "DecimalDoubleParenthesis";
27326
27747
  /**
27327
27748
  * Numbering triggered by a.
27328
27749
  */
27329
- CompatibleNumberingListType[CompatibleNumberingListType["LowerAlpha"] = 4] = "LowerAlpha";
27750
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerAlpha"] = 5] = "LowerAlpha";
27330
27751
  /**
27331
27752
  * Numbering triggered by a)
27332
27753
  */
27333
- CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaParenthesis"] = 5] = "LowerAlphaParenthesis";
27754
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaParenthesis"] = 6] = "LowerAlphaParenthesis";
27334
27755
  /**
27335
27756
  * Numbering triggered by (a)
27336
27757
  */
27337
- CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaDoubleParenthesis"] = 6] = "LowerAlphaDoubleParenthesis";
27758
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaDoubleParenthesis"] = 7] = "LowerAlphaDoubleParenthesis";
27338
27759
  /**
27339
27760
  * Numbering triggered by a-
27340
27761
  */
27341
- CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaDash"] = 7] = "LowerAlphaDash";
27762
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaDash"] = 8] = "LowerAlphaDash";
27342
27763
  /**
27343
27764
  * Numbering triggered by A.
27344
27765
  */
27345
- CompatibleNumberingListType[CompatibleNumberingListType["UpperAlpha"] = 8] = "UpperAlpha";
27766
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperAlpha"] = 9] = "UpperAlpha";
27346
27767
  /**
27347
27768
  * Numbering triggered by A)
27348
27769
  */
27349
- CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaParenthesis"] = 9] = "UpperAlphaParenthesis";
27770
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaParenthesis"] = 10] = "UpperAlphaParenthesis";
27350
27771
  /**
27351
27772
  * Numbering triggered by (A)
27352
27773
  */
27353
- CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaDoubleParenthesis"] = 10] = "UpperAlphaDoubleParenthesis";
27774
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaDoubleParenthesis"] = 11] = "UpperAlphaDoubleParenthesis";
27354
27775
  /**
27355
27776
  * Numbering triggered by A-
27356
27777
  */
27357
- CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaDash"] = 11] = "UpperAlphaDash";
27778
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaDash"] = 12] = "UpperAlphaDash";
27358
27779
  /**
27359
27780
  * Numbering triggered by i.
27360
27781
  */
27361
- CompatibleNumberingListType[CompatibleNumberingListType["LowerRoman"] = 12] = "LowerRoman";
27782
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerRoman"] = 13] = "LowerRoman";
27362
27783
  /**
27363
27784
  * Numbering triggered by i)
27364
27785
  */
27365
- CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanParenthesis"] = 13] = "LowerRomanParenthesis";
27786
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanParenthesis"] = 14] = "LowerRomanParenthesis";
27366
27787
  /**
27367
27788
  * Numbering triggered by (i)
27368
27789
  */
27369
- CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanDoubleParenthesis"] = 14] = "LowerRomanDoubleParenthesis";
27790
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanDoubleParenthesis"] = 15] = "LowerRomanDoubleParenthesis";
27370
27791
  /**
27371
27792
  * Numbering triggered by i-
27372
27793
  */
27373
- CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanDash"] = 15] = "LowerRomanDash";
27794
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanDash"] = 16] = "LowerRomanDash";
27374
27795
  /**
27375
27796
  * Numbering triggered by I.
27376
27797
  */
27377
- CompatibleNumberingListType[CompatibleNumberingListType["UpperRoman"] = 16] = "UpperRoman";
27798
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperRoman"] = 17] = "UpperRoman";
27378
27799
  /**
27379
27800
  * Numbering triggered by I)
27380
27801
  */
27381
- CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanParenthesis"] = 17] = "UpperRomanParenthesis";
27802
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanParenthesis"] = 18] = "UpperRomanParenthesis";
27382
27803
  /**
27383
27804
  * Numbering triggered by (I)
27384
27805
  */
27385
- CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanDoubleParenthesis"] = 18] = "UpperRomanDoubleParenthesis";
27806
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanDoubleParenthesis"] = 19] = "UpperRomanDoubleParenthesis";
27386
27807
  /**
27387
27808
  * Numbering triggered by I-
27388
27809
  */
27389
- CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanDash"] = 19] = "UpperRomanDash";
27810
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanDash"] = 20] = "UpperRomanDash";
27811
+ /**
27812
+ * Maximum value of the enum
27813
+ */
27814
+ CompatibleNumberingListType[CompatibleNumberingListType["Max"] = 20] = "Max";
27390
27815
  })(CompatibleNumberingListType = exports.CompatibleNumberingListType || (exports.CompatibleNumberingListType = {}));
27391
27816
 
27392
27817