roosterjs 8.24.0 → 8.26.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/rooster.js CHANGED
@@ -2248,7 +2248,7 @@ function changeCapitalization(editor, capitalization, language) {
2248
2248
  }
2249
2249
  }
2250
2250
  }
2251
- });
2251
+ }, 'changeCapitalization');
2252
2252
  function getCapitalizedText(originalText, language) {
2253
2253
  switch (capitalization) {
2254
2254
  case "lowercase" /* Lowercase */:
@@ -2318,7 +2318,7 @@ function changeFontSize(editor, change, fontSizes) {
2318
2318
  if (lineHeight != 'normal') {
2319
2319
  element.style.lineHeight = 'normal';
2320
2320
  }
2321
- });
2321
+ }, 'changeFontSize');
2322
2322
  }
2323
2323
  exports.default = changeFontSize;
2324
2324
  /**
@@ -2397,6 +2397,7 @@ exports.default = clearBlockFormat;
2397
2397
  Object.defineProperty(exports, "__esModule", { value: true });
2398
2398
  var blockFormat_1 = __webpack_require__(/*! ../utils/blockFormat */ "./packages/roosterjs-editor-api/lib/utils/blockFormat.ts");
2399
2399
  var execCommand_1 = __webpack_require__(/*! ../utils/execCommand */ "./packages/roosterjs-editor-api/lib/utils/execCommand.ts");
2400
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
2400
2401
  var setBackgroundColor_1 = __webpack_require__(/*! ./setBackgroundColor */ "./packages/roosterjs-editor-api/lib/format/setBackgroundColor.ts");
2401
2402
  var setFontName_1 = __webpack_require__(/*! ./setFontName */ "./packages/roosterjs-editor-api/lib/format/setFontName.ts");
2402
2403
  var setFontSize_1 = __webpack_require__(/*! ./setFontSize */ "./packages/roosterjs-editor-api/lib/format/setFontSize.ts");
@@ -2467,7 +2468,7 @@ function clearAttribute(element) {
2467
2468
  function updateStyles(element, callbackfn) {
2468
2469
  var styles = (0, roosterjs_editor_dom_1.getStyles)(element);
2469
2470
  var result = {};
2470
- Object.keys(styles).forEach(function (style) { return callbackfn(style, styles, result); });
2471
+ (0, roosterjs_editor_dom_1.getObjectKeys)(styles).forEach(function (style) { return callbackfn(style, styles, result); });
2471
2472
  (0, roosterjs_editor_dom_1.setStyles)(element, styles);
2472
2473
  return result;
2473
2474
  }
@@ -2512,7 +2513,7 @@ function clearAutoDetectFormat(editor) {
2512
2513
  * @param editor The editor instance
2513
2514
  */
2514
2515
  function clearBlockFormat(editor) {
2515
- editor.addUndoSnapshot(function () {
2516
+ (0, formatUndoSnapshot_1.default)(editor, function () {
2516
2517
  (0, blockFormat_1.default)(editor, function (region) {
2517
2518
  var blocks = (0, roosterjs_editor_dom_1.getSelectedBlockElementsInRegion)(region);
2518
2519
  var nodes = (0, roosterjs_editor_dom_1.collapseNodesInRegion)(region, blocks);
@@ -2520,7 +2521,7 @@ function clearBlockFormat(editor) {
2520
2521
  // If there are styles on table cell, wrap all its children and move down all non-border styles.
2521
2522
  // So that we can preserve styles for unselected blocks as well as border styles for table
2522
2523
  var nonborderStyles = removeNonBorderStyles(region.rootNode);
2523
- if (Object.keys(nonborderStyles).length > 0) {
2524
+ if ((0, roosterjs_editor_dom_1.getObjectKeys)(nonborderStyles).length > 0) {
2524
2525
  var wrapper = (0, roosterjs_editor_dom_1.wrap)((0, roosterjs_editor_dom_1.toArray)(region.rootNode.childNodes));
2525
2526
  (0, roosterjs_editor_dom_1.setStyles)(wrapper, nonborderStyles);
2526
2527
  }
@@ -2531,7 +2532,7 @@ function clearBlockFormat(editor) {
2531
2532
  nodes.forEach(clearNodeFormat);
2532
2533
  });
2533
2534
  setDefaultFormat(editor);
2534
- }, "Format" /* Format */);
2535
+ }, 'clearBlockFormat');
2535
2536
  }
2536
2537
  function clearInlineFormat(editor) {
2537
2538
  editor.focus();
@@ -2541,11 +2542,12 @@ function clearInlineFormat(editor) {
2541
2542
  return node.removeAttribute('class');
2542
2543
  });
2543
2544
  setDefaultFormat(editor);
2545
+ return 'clearInlineFormat';
2544
2546
  }, "Format" /* Format */);
2545
2547
  }
2546
2548
  function setDefaultFormat(editor) {
2547
2549
  var defaultFormat = editor.getDefaultFormat();
2548
- var isDefaultFormatEmpty = Object.keys(defaultFormat).length === 0;
2550
+ var isDefaultFormatEmpty = (0, roosterjs_editor_dom_1.getObjectKeys)(defaultFormat).length === 0;
2549
2551
  editor.queryElements('[style]', 2 /* InSelection */, function (node) {
2550
2552
  var tag = (0, roosterjs_editor_dom_1.getTagOfNode)(node);
2551
2553
  if (TAGS_TO_STOP_UNWRAP.indexOf(tag) == -1) {
@@ -2724,11 +2726,13 @@ function createLink(editor, link, altText, displayText, target) {
2724
2726
  editor.getDocument().execCommand("createLink" /* CreateLink */, false, normalizedUrl_1);
2725
2727
  var traverser = editor.getSelectionTraverser();
2726
2728
  var currentInline = traverser.getNextInlineElement();
2729
+ // list for removing unwanted lines
2730
+ var deletionInlineList = [];
2727
2731
  while (currentInline) {
2728
- var a = currentInline.getContainerNode();
2729
- a.parentElement.removeChild(a);
2732
+ deletionInlineList.push(currentInline.getContainerNode());
2730
2733
  currentInline = traverser.getNextInlineElement();
2731
2734
  }
2735
+ deletionInlineList.forEach(function (node) { return editor.deleteNode(node); });
2732
2736
  anchor = getAnchorNodeAtCursor(editor);
2733
2737
  updateAnchorDisplayText(anchor, displayText);
2734
2738
  }
@@ -2929,6 +2933,7 @@ exports.default = insertEntity;
2929
2933
  "use strict";
2930
2934
 
2931
2935
  Object.defineProperty(exports, "__esModule", { value: true });
2936
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
2932
2937
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
2933
2938
  function insertImage(editor, imageFile, attributes) {
2934
2939
  if (typeof imageFile == 'string') {
@@ -2944,17 +2949,17 @@ function insertImage(editor, imageFile, attributes) {
2944
2949
  }
2945
2950
  exports.default = insertImage;
2946
2951
  function insertImageWithSrc(editor, src, attributes) {
2947
- editor.addUndoSnapshot(function () {
2952
+ (0, formatUndoSnapshot_1.default)(editor, function () {
2948
2953
  var image = editor.getDocument().createElement('img');
2949
2954
  image.src = src;
2950
2955
  if (attributes) {
2951
- Object.keys(attributes).forEach(function (attribute) {
2956
+ (0, roosterjs_editor_dom_1.getObjectKeys)(attributes).forEach(function (attribute) {
2952
2957
  return image.setAttribute(attribute, attributes[attribute]);
2953
2958
  });
2954
2959
  }
2955
2960
  image.style.maxWidth = '100%';
2956
2961
  editor.insertNode(image);
2957
- }, "Format" /* Format */);
2962
+ }, 'insertImage');
2958
2963
  }
2959
2964
 
2960
2965
 
@@ -2970,6 +2975,7 @@ function insertImageWithSrc(editor, src, attributes) {
2970
2975
  "use strict";
2971
2976
 
2972
2977
  Object.defineProperty(exports, "__esModule", { value: true });
2978
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
2973
2979
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
2974
2980
  /**
2975
2981
  * Remove link at selection. If no links at selection, do nothing.
@@ -2979,10 +2985,10 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
2979
2985
  */
2980
2986
  function removeLink(editor) {
2981
2987
  editor.focus();
2982
- editor.addUndoSnapshot(function (start, end) {
2988
+ (0, formatUndoSnapshot_1.default)(editor, function (start, end) {
2983
2989
  editor.queryElements('a[href]', 1 /* OnSelection */, roosterjs_editor_dom_1.unwrap);
2984
2990
  editor.select(start, end);
2985
- }, "Format" /* Format */);
2991
+ }, 'removeLink');
2986
2992
  }
2987
2993
  exports.default = removeLink;
2988
2994
 
@@ -3046,6 +3052,7 @@ exports.default = replaceWithNode;
3046
3052
  "use strict";
3047
3053
 
3048
3054
  Object.defineProperty(exports, "__esModule", { value: true });
3055
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
3049
3056
  /**
3050
3057
  * Rotate an element visually
3051
3058
  * @param editor The editor instance
@@ -3054,9 +3061,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3054
3061
  */
3055
3062
  function rotateElement(editor, element, angle) {
3056
3063
  if (element) {
3057
- editor.addUndoSnapshot(function () {
3064
+ (0, formatUndoSnapshot_1.default)(editor, function () {
3058
3065
  element.style.transform = "rotate(" + angle + "deg)";
3059
- }, "Format" /* Format */);
3066
+ }, 'rotateElement');
3060
3067
  }
3061
3068
  }
3062
3069
  exports.default = rotateElement;
@@ -3076,6 +3083,7 @@ exports.default = rotateElement;
3076
3083
  Object.defineProperty(exports, "__esModule", { value: true });
3077
3084
  var blockFormat_1 = __webpack_require__(/*! ../utils/blockFormat */ "./packages/roosterjs-editor-api/lib/utils/blockFormat.ts");
3078
3085
  var execCommand_1 = __webpack_require__(/*! ../utils/execCommand */ "./packages/roosterjs-editor-api/lib/utils/execCommand.ts");
3086
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
3079
3087
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
3080
3088
  /**
3081
3089
  * Set content alignment
@@ -3084,7 +3092,7 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
3084
3092
  * Alignment.Center, Alignment.Left, Alignment.Right
3085
3093
  */
3086
3094
  function setAlignment(editor, alignment) {
3087
- editor.addUndoSnapshot(function () {
3095
+ (0, formatUndoSnapshot_1.default)(editor, function () {
3088
3096
  var selection = editor.getSelectionRangeEx();
3089
3097
  var isATable = selection && selection.type === 1 /* TableSelection */;
3090
3098
  var elementAtCursor = editor.getElementAtCursor();
@@ -3100,7 +3108,7 @@ function setAlignment(editor, alignment) {
3100
3108
  else {
3101
3109
  alignText(editor, alignment);
3102
3110
  }
3103
- }, "Format" /* Format */);
3111
+ }, 'rotateElement');
3104
3112
  }
3105
3113
  exports.default = setAlignment;
3106
3114
  /**
@@ -3155,7 +3163,7 @@ function alignList(editor, alignment) {
3155
3163
  var startNode = blocks[0].getStartNode();
3156
3164
  var vList = (0, roosterjs_editor_dom_1.createVListFromRegion)(region, true /*includeSiblingLists*/, startNode);
3157
3165
  vList.setAlignment(start, end, alignment);
3158
- });
3166
+ }, undefined /* beforeRunCallback */, 'alignList');
3159
3167
  }
3160
3168
 
3161
3169
 
@@ -3186,7 +3194,7 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
3186
3194
  function setBackgroundColor(editor, color) {
3187
3195
  (0, applyInlineStyle_1.default)(editor, function (element, isInnerNode) {
3188
3196
  (0, roosterjs_editor_dom_1.setColor)(element, isInnerNode ? '' : color, true /*isBackground*/, editor.isDarkMode());
3189
- });
3197
+ }, 'setBackgroundColor');
3190
3198
  }
3191
3199
  exports.default = setBackgroundColor;
3192
3200
 
@@ -3204,6 +3212,7 @@ exports.default = setBackgroundColor;
3204
3212
 
3205
3213
  Object.defineProperty(exports, "__esModule", { value: true });
3206
3214
  var collapseSelectedBlocks_1 = __webpack_require__(/*! ../utils/collapseSelectedBlocks */ "./packages/roosterjs-editor-api/lib/utils/collapseSelectedBlocks.ts");
3215
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
3207
3216
  /**
3208
3217
  * Change direction for the blocks/paragraph at selection
3209
3218
  * @param editor The editor instance
@@ -3212,13 +3221,13 @@ var collapseSelectedBlocks_1 = __webpack_require__(/*! ../utils/collapseSelected
3212
3221
  */
3213
3222
  function setDirection(editor, direction) {
3214
3223
  editor.focus();
3215
- editor.addUndoSnapshot(function (start, end) {
3224
+ (0, formatUndoSnapshot_1.default)(editor, function (start, end) {
3216
3225
  (0, collapseSelectedBlocks_1.default)(editor, function (element) {
3217
3226
  element.setAttribute('dir', direction == 0 /* LeftToRight */ ? 'ltr' : 'rtl');
3218
3227
  element.style.textAlign = direction == 0 /* LeftToRight */ ? 'left' : 'right';
3219
3228
  });
3220
3229
  editor.select(start, end);
3221
- }, "Format" /* Format */);
3230
+ }, 'setDirection');
3222
3231
  }
3223
3232
  exports.default = setDirection;
3224
3233
 
@@ -3247,7 +3256,7 @@ function setFontName(editor, fontName) {
3247
3256
  // (http://www.w3schools.com/tags/tag_font.asp).
3248
3257
  (0, applyListItemWrap_1.default)(editor, 'font-family', function (element, isInnerNode) {
3249
3258
  element.style.fontFamily = isInnerNode ? '' : fontName;
3250
- });
3259
+ }, 'setFontName');
3251
3260
  }
3252
3261
  exports.default = setFontName;
3253
3262
 
@@ -3281,7 +3290,7 @@ function setFontSize(editor, fontSize) {
3281
3290
  if (lineHeight != 'normal') {
3282
3291
  element.style.lineHeight = 'normal';
3283
3292
  }
3284
- });
3293
+ }, 'setFontSize');
3285
3294
  }
3286
3295
  exports.default = setFontSize;
3287
3296
 
@@ -3298,6 +3307,7 @@ exports.default = setFontSize;
3298
3307
  "use strict";
3299
3308
 
3300
3309
  Object.defineProperty(exports, "__esModule", { value: true });
3310
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
3301
3311
  /**
3302
3312
  * Set image alt text for all selected images at selection. If no images is contained
3303
3313
  * in selection, do nothing.
@@ -3309,11 +3319,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3309
3319
  */
3310
3320
  function setImageAltText(editor, altText) {
3311
3321
  editor.focus();
3312
- editor.addUndoSnapshot(function () {
3322
+ (0, formatUndoSnapshot_1.default)(editor, function () {
3313
3323
  editor.queryElements('img', 1 /* OnSelection */, function (node) {
3314
3324
  return node.setAttribute('alt', altText);
3315
3325
  });
3316
- }, "Format" /* Format */);
3326
+ }, 'setImageAltText');
3317
3327
  }
3318
3328
  exports.default = setImageAltText;
3319
3329
 
@@ -3386,7 +3396,7 @@ function setIndentation(editor, indentation) {
3386
3396
  return false;
3387
3397
  }
3388
3398
  return true;
3389
- });
3399
+ }, 'setIndentation');
3390
3400
  }
3391
3401
  exports.default = setIndentation;
3392
3402
  function indent(region, blocks) {
@@ -3432,6 +3442,7 @@ function shouldHandleWithBlockquotes(indentation, editor, startNode) {
3432
3442
  "use strict";
3433
3443
 
3434
3444
  Object.defineProperty(exports, "__esModule", { value: true });
3445
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
3435
3446
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
3436
3447
  /**
3437
3448
  * Resets Ordered List Numbering back to the value of the parameter startNumber
@@ -3441,7 +3452,7 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
3441
3452
  */
3442
3453
  function setOrderedListNumbering(editor, separator, startNumber) {
3443
3454
  if (startNumber === void 0) { startNumber = 1; }
3444
- editor.addUndoSnapshot(function () {
3455
+ (0, formatUndoSnapshot_1.default)(editor, function () {
3445
3456
  editor.focus();
3446
3457
  var regions = editor.getSelectedRegions();
3447
3458
  if (regions[0]) {
@@ -3451,7 +3462,7 @@ function setOrderedListNumbering(editor, separator, startNumber) {
3451
3462
  vList.writeBack();
3452
3463
  }
3453
3464
  }
3454
- }, "Format" /* Format */);
3465
+ }, 'setOrderedListNumbering');
3455
3466
  }
3456
3467
  exports.default = setOrderedListNumbering;
3457
3468
 
@@ -3486,7 +3497,7 @@ function setTextColor(editor, color, shouldApplyInlineStyle) {
3486
3497
  if (!shouldApplyInlineStyle || shouldApplyInlineStyle(element)) {
3487
3498
  (0, roosterjs_editor_dom_1.setColor)(element, isInnerNode ? '' : color, false /*isBackground*/, editor.isDarkMode());
3488
3499
  }
3489
- });
3500
+ }, 'setTextColor');
3490
3501
  }
3491
3502
  exports.default = setTextColor;
3492
3503
 
@@ -3522,7 +3533,7 @@ function toggleBlockQuote(editor, styler) {
3522
3533
  (0, blockWrap_1.default)(editor, function (nodes) {
3523
3534
  var wrapper = (0, roosterjs_editor_dom_1.wrap)(nodes, BLOCKQUOTE_TAG);
3524
3535
  (styler || DEFAULT_STYLER)(wrapper);
3525
- }, function () { return editor.queryElements('blockquote', 1 /* OnSelection */, roosterjs_editor_dom_1.unwrap).length == 0; });
3536
+ }, function () { return editor.queryElements('blockquote', 1 /* OnSelection */, roosterjs_editor_dom_1.unwrap).length == 0; }, 'toggleBlockQuote');
3526
3537
  }
3527
3538
  exports.default = toggleBlockQuote;
3528
3539
 
@@ -3549,7 +3560,7 @@ var execCommand_1 = __webpack_require__(/*! ../utils/execCommand */ "./packages/
3549
3560
  * @param editor The editor instance
3550
3561
  */
3551
3562
  function toggleBold(editor) {
3552
- (0, execCommand_1.default)(editor, "bold" /* Bold */);
3563
+ (0, execCommand_1.default)(editor, "bold" /* Bold */, 'toggleBold');
3553
3564
  }
3554
3565
  exports.default = toggleBold;
3555
3566
 
@@ -3577,7 +3588,7 @@ var toggleListType_1 = __webpack_require__(/*! ../utils/toggleListType */ "./pac
3577
3588
  * @param listStyle (Optional) the style of the bullet list. If not defined, the style will be set to disc.
3578
3589
  */
3579
3590
  function toggleBullet(editor, listStyle) {
3580
- (0, toggleListType_1.default)(editor, 2 /* Unordered */, undefined /* startNumber */, false /* includeSiblingLists */, listStyle);
3591
+ (0, toggleListType_1.default)(editor, 2 /* Unordered */, undefined /* startNumber */, false /* includeSiblingLists */, undefined /** orderedStyle */, listStyle);
3581
3592
  }
3582
3593
  exports.default = toggleBullet;
3583
3594
 
@@ -3618,7 +3629,7 @@ function toggleCodeBlock(editor, styler) {
3618
3629
  (0, roosterjs_editor_dom_1.unwrap)(parent_1);
3619
3630
  }
3620
3631
  }).length == 0;
3621
- });
3632
+ }, 'toggleCodeBlock');
3622
3633
  }
3623
3634
  exports.default = toggleCodeBlock;
3624
3635
 
@@ -3635,6 +3646,7 @@ exports.default = toggleCodeBlock;
3635
3646
  "use strict";
3636
3647
 
3637
3648
  Object.defineProperty(exports, "__esModule", { value: true });
3649
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
3638
3650
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
3639
3651
  /**
3640
3652
  * Toggle header at selection
@@ -3645,7 +3657,7 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
3645
3657
  */
3646
3658
  function toggleHeader(editor, level) {
3647
3659
  level = Math.min(Math.max(Math.round(level), 0), 6);
3648
- editor.addUndoSnapshot(function () {
3660
+ (0, formatUndoSnapshot_1.default)(editor, function () {
3649
3661
  editor.focus();
3650
3662
  var wrapped = false;
3651
3663
  editor.queryElements('H1,H2,H3,H4,H5,H6', 1 /* OnSelection */, function (header) {
@@ -3672,7 +3684,7 @@ function toggleHeader(editor, level) {
3672
3684
  }
3673
3685
  editor.getDocument().execCommand("formatBlock" /* FormatBlock */, false, "<H" + level + ">");
3674
3686
  }
3675
- }, "Format" /* Format */);
3687
+ }, 'toggleHeader');
3676
3688
  }
3677
3689
  exports.default = toggleHeader;
3678
3690
 
@@ -3699,7 +3711,7 @@ var execCommand_1 = __webpack_require__(/*! ../utils/execCommand */ "./packages/
3699
3711
  * @param editor The editor instance
3700
3712
  */
3701
3713
  function toggleItalic(editor) {
3702
- (0, execCommand_1.default)(editor, "italic" /* Italic */);
3714
+ (0, execCommand_1.default)(editor, "italic" /* Italic */, 'toggleItalic');
3703
3715
  }
3704
3716
  exports.default = toggleItalic;
3705
3717
 
@@ -3755,7 +3767,7 @@ var execCommand_1 = __webpack_require__(/*! ../utils/execCommand */ "./packages/
3755
3767
  * @param editor The editor instance
3756
3768
  */
3757
3769
  function toggleStrikethrough(editor) {
3758
- (0, execCommand_1.default)(editor, "strikeThrough" /* StrikeThrough */);
3770
+ (0, execCommand_1.default)(editor, "strikeThrough" /* StrikeThrough */, 'toggleStrikethrough');
3759
3771
  }
3760
3772
  exports.default = toggleStrikethrough;
3761
3773
 
@@ -3784,7 +3796,7 @@ var execCommand_1 = __webpack_require__(/*! ../utils/execCommand */ "./packages/
3784
3796
  * @param editor The editor instance
3785
3797
  */
3786
3798
  function toggleSubscript(editor) {
3787
- (0, execCommand_1.default)(editor, "subscript" /* Subscript */);
3799
+ (0, execCommand_1.default)(editor, "subscript" /* Subscript */, 'toggleSubscript');
3788
3800
  }
3789
3801
  exports.default = toggleSubscript;
3790
3802
 
@@ -3813,7 +3825,7 @@ var execCommand_1 = __webpack_require__(/*! ../utils/execCommand */ "./packages/
3813
3825
  * @param editor The editor instance
3814
3826
  */
3815
3827
  function toggleSuperscript(editor) {
3816
- (0, execCommand_1.default)(editor, "superscript" /* Superscript */);
3828
+ (0, execCommand_1.default)(editor, "superscript" /* Superscript */, 'toggleSuperscript');
3817
3829
  }
3818
3830
  exports.default = toggleSuperscript;
3819
3831
 
@@ -3840,7 +3852,7 @@ var execCommand_1 = __webpack_require__(/*! ../utils/execCommand */ "./packages/
3840
3852
  * @param editor The editor instance
3841
3853
  */
3842
3854
  function toggleUnderline(editor) {
3843
- (0, execCommand_1.default)(editor, "underline" /* Underline */);
3855
+ (0, execCommand_1.default)(editor, "underline" /* Underline */, 'toggleUnderline');
3844
3856
  }
3845
3857
  exports.default = toggleUnderline;
3846
3858
 
@@ -3950,6 +3962,7 @@ Object.defineProperty(exports, "experimentCommitListChains", { enumerable: true,
3950
3962
  "use strict";
3951
3963
 
3952
3964
  Object.defineProperty(exports, "__esModule", { value: true });
3965
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
3953
3966
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
3954
3967
  var TEMP_BACKGROUND_COLOR = 'originalBackgroundColor';
3955
3968
  var CELL_SHADE = 'cellShade';
@@ -3960,7 +3973,7 @@ var CELL_SHADE = 'cellShade';
3960
3973
  **/
3961
3974
  function applyCellShading(editor, color) {
3962
3975
  editor.focus();
3963
- editor.addUndoSnapshot(function () {
3976
+ (0, formatUndoSnapshot_1.default)(editor, function () {
3964
3977
  var regions = editor.getSelectedRegions();
3965
3978
  regions.forEach(function (region) {
3966
3979
  if ((0, roosterjs_editor_dom_1.safeInstanceOf)(region.rootNode, 'HTMLTableCellElement')) {
@@ -3970,7 +3983,7 @@ function applyCellShading(editor, color) {
3970
3983
  region.rootNode.style.backgroundColor;
3971
3984
  }
3972
3985
  });
3973
- });
3986
+ }, 'applyCellShading');
3974
3987
  }
3975
3988
  exports.default = applyCellShading;
3976
3989
 
@@ -3987,6 +4000,7 @@ exports.default = applyCellShading;
3987
4000
  "use strict";
3988
4001
 
3989
4002
  Object.defineProperty(exports, "__esModule", { value: true });
4003
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
3990
4004
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
3991
4005
  /**
3992
4006
  * Edit table with given operation. If there is no table at cursor then no op.
@@ -3996,7 +4010,7 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
3996
4010
  function editTable(editor, operation) {
3997
4011
  var td = editor.getElementAtCursor('TD,TH');
3998
4012
  if (td) {
3999
- editor.addUndoSnapshot(function () {
4013
+ (0, formatUndoSnapshot_1.default)(editor, function () {
4000
4014
  var vtable = new roosterjs_editor_dom_1.VTable(td);
4001
4015
  saveTableSelection(editor, vtable);
4002
4016
  vtable.edit(operation);
@@ -4005,7 +4019,7 @@ function editTable(editor, operation) {
4005
4019
  editor.focus();
4006
4020
  var cellToSelect = calculateCellToSelect(operation, vtable.row, vtable.col);
4007
4021
  editor.select(vtable.getCell(cellToSelect.newRow, cellToSelect.newCol).td, 0 /* Begin */);
4008
- }, "Format" /* Format */);
4022
+ }, 'editTable');
4009
4023
  }
4010
4024
  }
4011
4025
  exports.default = editTable;
@@ -4053,6 +4067,7 @@ function saveTableSelection(editor, vtable) {
4053
4067
  "use strict";
4054
4068
 
4055
4069
  Object.defineProperty(exports, "__esModule", { value: true });
4070
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
4056
4071
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
4057
4072
  /**
4058
4073
  * Format table
@@ -4063,14 +4078,14 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
4063
4078
  function formatTable(editor, format, table) {
4064
4079
  table = table || editor.getElementAtCursor('TABLE');
4065
4080
  if (table) {
4066
- editor.addUndoSnapshot(function (start, end) {
4081
+ (0, formatUndoSnapshot_1.default)(editor, function (start, end) {
4067
4082
  var vtable = new roosterjs_editor_dom_1.VTable(table);
4068
4083
  vtable.applyFormat(format);
4069
4084
  vtable.writeBack();
4070
4085
  editor.transformToDarkColor(vtable.table);
4071
4086
  editor.focus();
4072
4087
  editor.select(start, end);
4073
- }, "Format" /* Format */);
4088
+ }, 'formatTable');
4074
4089
  }
4075
4090
  }
4076
4091
  exports.default = formatTable;
@@ -4088,6 +4103,7 @@ exports.default = formatTable;
4088
4103
  "use strict";
4089
4104
 
4090
4105
  Object.defineProperty(exports, "__esModule", { value: true });
4106
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
4091
4107
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
4092
4108
  /**
4093
4109
  * Insert table into editor at current selection
@@ -4116,7 +4132,7 @@ function insertTable(editor, columns, rows, format) {
4116
4132
  }
4117
4133
  }
4118
4134
  editor.focus();
4119
- editor.addUndoSnapshot(function () {
4135
+ (0, formatUndoSnapshot_1.default)(editor, function () {
4120
4136
  var vtable = new roosterjs_editor_dom_1.VTable(table);
4121
4137
  vtable.applyFormat(format);
4122
4138
  vtable.writeBack();
@@ -4124,7 +4140,7 @@ function insertTable(editor, columns, rows, format) {
4124
4140
  editor.runAsync(function (editor) {
4125
4141
  return editor.select(new roosterjs_editor_dom_1.Position(table, 0 /* Begin */).normalize());
4126
4142
  });
4127
- }, "Format" /* Format */);
4143
+ }, 'insertTable');
4128
4144
  }
4129
4145
  exports.default = insertTable;
4130
4146
  function getTableCellWidth(columns) {
@@ -4152,6 +4168,7 @@ function getTableCellWidth(columns) {
4152
4168
  "use strict";
4153
4169
 
4154
4170
  Object.defineProperty(exports, "__esModule", { value: true });
4171
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ./formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
4155
4172
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
4156
4173
  var ZERO_WIDTH_SPACE = '\u200B';
4157
4174
  /**
@@ -4160,7 +4177,7 @@ var ZERO_WIDTH_SPACE = '\u200B';
4160
4177
  * @param editor The editor instance
4161
4178
  * @param callback The callback function to apply style
4162
4179
  */
4163
- function applyInlineStyle(editor, callback) {
4180
+ function applyInlineStyle(editor, callback, apiName) {
4164
4181
  editor.focus();
4165
4182
  var selection = editor.getSelectionRangeEx();
4166
4183
  if (selection && selection.areAllCollapsed) {
@@ -4193,7 +4210,7 @@ function applyInlineStyle(editor, callback) {
4193
4210
  else {
4194
4211
  // This is start and end node that get the style. The start and end needs to be recorded so that selection
4195
4212
  // can be re-applied post-applying style
4196
- editor.addUndoSnapshot(function () {
4213
+ (0, formatUndoSnapshot_1.default)(editor, function () {
4197
4214
  var firstNode;
4198
4215
  var lastNode;
4199
4216
  selection.ranges.forEach(function (range) {
@@ -4212,7 +4229,7 @@ function applyInlineStyle(editor, callback) {
4212
4229
  if (firstNode && lastNode && selection.type == 0 /* Normal */) {
4213
4230
  editor.select(firstNode, -2 /* Before */, lastNode, -3 /* After */);
4214
4231
  }
4215
- }, "Format" /* Format */);
4232
+ }, apiName);
4216
4233
  }
4217
4234
  }
4218
4235
  exports.default = applyInlineStyle;
@@ -4239,7 +4256,7 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
4239
4256
  * @param styleName Name of the style to apply to the list item
4240
4257
  * @param formatCallback callback to apply the style to each element
4241
4258
  */
4242
- function applyListItemStyleWrap(editor, styleName, formatCallback) {
4259
+ function applyListItemStyleWrap(editor, styleName, formatCallback, apiName) {
4243
4260
  var parentNodes = [];
4244
4261
  (0, applyInlineStyle_1.default)(editor, function (element, isInnerNode) {
4245
4262
  formatCallback(element, isInnerNode);
@@ -4247,7 +4264,7 @@ function applyListItemStyleWrap(editor, styleName, formatCallback) {
4247
4264
  if (parent && parentNodes.indexOf(parent) === -1) {
4248
4265
  parentNodes.push(parent);
4249
4266
  }
4250
- });
4267
+ }, apiName);
4251
4268
  applyStyleToListItems(parentNodes, [styleName]);
4252
4269
  }
4253
4270
  exports.default = applyListItemStyleWrap;
@@ -4279,14 +4296,15 @@ function applyStyleToListItems(parentNodes, styles) {
4279
4296
 
4280
4297
  Object.defineProperty(exports, "__esModule", { value: true });
4281
4298
  var experimentCommitListChains_1 = __webpack_require__(/*! ../experiment/experimentCommitListChains */ "./packages/roosterjs-editor-api/lib/experiment/experimentCommitListChains.ts");
4299
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ./formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
4282
4300
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
4283
4301
  /**
4284
4302
  * Split selection into regions, and perform a block-wise formatting action for each region.
4285
4303
  */
4286
- function blockFormat(editor, callback, beforeRunCallback) {
4304
+ function blockFormat(editor, callback, beforeRunCallback, apiName) {
4287
4305
  editor.focus();
4288
4306
  var selection = editor.getSelectionRangeEx();
4289
- editor.addUndoSnapshot(function (start, end) {
4307
+ (0, formatUndoSnapshot_1.default)(editor, function (start, end) {
4290
4308
  if (!beforeRunCallback || beforeRunCallback()) {
4291
4309
  var regions = editor.getSelectedRegions();
4292
4310
  var chains_1 = roosterjs_editor_dom_1.VListChain.createListChains(regions, start === null || start === void 0 ? void 0 : start.node);
@@ -4299,7 +4317,7 @@ function blockFormat(editor, callback, beforeRunCallback) {
4299
4317
  else if (selection.type == 1 /* TableSelection */) {
4300
4318
  editor.select(selection.table, selection.coordinates);
4301
4319
  }
4302
- }, "Format" /* Format */);
4320
+ }, apiName);
4303
4321
  }
4304
4322
  exports.default = blockFormat;
4305
4323
 
@@ -4327,7 +4345,7 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
4327
4345
  * @param beforeRunCallback A callback function to run before looping all regions. If it returns false,
4328
4346
  * the loop for regions will be skipped
4329
4347
  */
4330
- function blockWrap(editor, wrapFunction, beforeRunCallback) {
4348
+ function blockWrap(editor, wrapFunction, beforeRunCallback, apiName) {
4331
4349
  (0, blockFormat_1.default)(editor, function (region) {
4332
4350
  var blocks = (0, roosterjs_editor_dom_1.getSelectedBlockElementsInRegion)(region, true /*createBlockIfEmpty*/);
4333
4351
  var nodes = (0, roosterjs_editor_dom_1.collapseNodesInRegion)(region, blocks);
@@ -4348,7 +4366,7 @@ function blockWrap(editor, wrapFunction, beforeRunCallback) {
4348
4366
  }
4349
4367
  wrapFunction(nodes);
4350
4368
  }
4351
- }, beforeRunCallback);
4369
+ }, beforeRunCallback, apiName);
4352
4370
  }
4353
4371
  exports.default = blockWrap;
4354
4372
 
@@ -4408,6 +4426,7 @@ function isEmptyBlockUnderTR(block) {
4408
4426
  "use strict";
4409
4427
 
4410
4428
  Object.defineProperty(exports, "__esModule", { value: true });
4429
+ var formatUndoSnapshot_1 = __webpack_require__(/*! ./formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
4411
4430
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
4412
4431
  /**
4413
4432
  * @internal
@@ -4419,7 +4438,7 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
4419
4438
  * @param doWorkaroundForList Optional, set to true to do workaround for list in order to keep current format.
4420
4439
  * Default value is false.
4421
4440
  */
4422
- function execCommand(editor, command) {
4441
+ function execCommand(editor, command, apiName) {
4423
4442
  editor.focus();
4424
4443
  var formatter = function () { return editor.getDocument().execCommand(command, false, null); };
4425
4444
  var selection = editor.getSelectionRangeEx();
@@ -4427,7 +4446,7 @@ function execCommand(editor, command) {
4427
4446
  editor.addUndoSnapshot();
4428
4447
  var formatState = editor.getPendableFormatState(false /* forceGetStateFromDom */);
4429
4448
  formatter();
4430
- var formatName = Object.keys(roosterjs_editor_dom_1.PendableFormatCommandMap).filter(function (x) { return roosterjs_editor_dom_1.PendableFormatCommandMap[x] == command; })[0];
4449
+ var formatName = (0, roosterjs_editor_dom_1.getObjectKeys)(roosterjs_editor_dom_1.PendableFormatCommandMap).filter(function (x) { return roosterjs_editor_dom_1.PendableFormatCommandMap[x] == command; })[0];
4431
4450
  if (formatName) {
4432
4451
  formatState[formatName] = !formatState[formatName];
4433
4452
  editor.triggerPluginEvent(13 /* PendingFormatStateChanged */, {
@@ -4436,7 +4455,7 @@ function execCommand(editor, command) {
4436
4455
  }
4437
4456
  }
4438
4457
  else {
4439
- editor.addUndoSnapshot(function () {
4458
+ (0, formatUndoSnapshot_1.default)(editor, function () {
4440
4459
  var tempRange;
4441
4460
  selection.ranges.forEach(function (range) {
4442
4461
  if (selection.type == 1 /* TableSelection */) {
@@ -4448,12 +4467,40 @@ function execCommand(editor, command) {
4448
4467
  if (tempRange && selection.type == 1 /* TableSelection */) {
4449
4468
  editor.select(selection.table, selection.coordinates);
4450
4469
  }
4451
- }, "Format" /* Format */);
4470
+ }, apiName);
4452
4471
  }
4453
4472
  }
4454
4473
  exports.default = execCommand;
4455
4474
 
4456
4475
 
4476
+ /***/ }),
4477
+
4478
+ /***/ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts":
4479
+ /*!***********************************************************************!*\
4480
+ !*** ./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts ***!
4481
+ \***********************************************************************/
4482
+ /*! no static exports found */
4483
+ /***/ (function(module, exports, __webpack_require__) {
4484
+
4485
+ "use strict";
4486
+
4487
+ Object.defineProperty(exports, "__esModule", { value: true });
4488
+ /**
4489
+ * @internal
4490
+ * Execute add undo snapshot for the Format APIs
4491
+ * @param editor The editor instance
4492
+ * @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.
4493
+ * @param apiName Optional, name of the API that was is going to be executed.
4494
+ * Default value is false.
4495
+ */
4496
+ function formatUndoSnapshot(editor, callback, apiName) {
4497
+ editor.addUndoSnapshot(callback, "Format" /* Format */, undefined /* canUndoByBackspace */, apiName && {
4498
+ formatApiName: apiName,
4499
+ });
4500
+ }
4501
+ exports.default = formatUndoSnapshot;
4502
+
4503
+
4457
4504
  /***/ }),
4458
4505
 
4459
4506
  /***/ "./packages/roosterjs-editor-api/lib/utils/toggleListType.ts":
@@ -4484,9 +4531,10 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
4484
4531
  * @param listType The list type to toggle
4485
4532
  * @param startNumber (Optional) Start number of the list
4486
4533
  * @param includeSiblingLists Sets wether the operation should include Sibling Lists, by default true
4487
- * @param listStyle (Optional) the style of an ordered or unordered list. If If not defined, the style will be set to disc or decimal.
4534
+ * @param orderedStyle (Optional) the style of an ordered. If not defined, the style will be set to decimal.
4535
+ * @param unorderedStyle (Optional) the style of an unordered list. If not defined, the style will be set to disc.
4488
4536
  */
4489
- function toggleListType(editor, listType, startNumber, includeSiblingLists, listStyle) {
4537
+ function toggleListType(editor, listType, startNumber, includeSiblingLists, orderedStyle, unorderedStyle) {
4490
4538
  if (includeSiblingLists === void 0) { includeSiblingLists = true; }
4491
4539
  (0, blockFormat_1.default)(editor, function (region, start, end, chains) {
4492
4540
  var _a;
@@ -4496,12 +4544,12 @@ function toggleListType(editor, listType, startNumber, includeSiblingLists, list
4496
4544
  : (0, roosterjs_editor_dom_1.createVListFromRegion)(region, includeSiblingLists);
4497
4545
  if (vList) {
4498
4546
  vList.changeListType(start, end, listType);
4499
- if (listStyle && editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)) {
4500
- vList.setListStyleType(listStyle);
4547
+ if (editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)) {
4548
+ vList.setListStyleType(orderedStyle, unorderedStyle);
4501
4549
  }
4502
4550
  vList.writeBack();
4503
4551
  }
4504
- });
4552
+ }, undefined /* beforeRunCallback */, 'toggleListType');
4505
4553
  }
4506
4554
  exports.default = toggleListType;
4507
4555
 
@@ -4539,8 +4587,10 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
4539
4587
  * @param callback The editing callback, accepting current selection start and end position, returns an optional object used as the data field of ContentChangedEvent.
4540
4588
  * @param changeSource The ChangeSource string of ContentChangedEvent. @default ChangeSource.Format. Set to null to avoid triggering ContentChangedEvent
4541
4589
  * @param canUndoByBackspace True if this action can be undone when user press Backspace key (aka Auto Complete).
4590
+ * @param formatApiName Optional parameter to provide the ContentChangeEvent which FormatApi was invoked.
4542
4591
  */
4543
- var addUndoSnapshot = function (core, callback, changeSource, canUndoByBackspace) {
4592
+ var addUndoSnapshot = function (core, callback, changeSource, canUndoByBackspace, additionalData) {
4593
+ if (additionalData === void 0) { additionalData = undefined; }
4544
4594
  var undoState = core.undo;
4545
4595
  var isNested = undoState.isNested;
4546
4596
  var data;
@@ -4567,6 +4617,7 @@ var addUndoSnapshot = function (core, callback, changeSource, canUndoByBackspace
4567
4617
  eventType: 7 /* ContentChanged */,
4568
4618
  source: changeSource,
4569
4619
  data: data,
4620
+ additionalData: additionalData,
4570
4621
  };
4571
4622
  core.api.triggerEvent(core, event_1, true /*broadcast*/);
4572
4623
  }
@@ -4607,6 +4658,7 @@ function addUndoSnapshotInternal(core, canUndoByBackspace) {
4607
4658
 
4608
4659
  Object.defineProperty(exports, "__esModule", { value: true });
4609
4660
  exports.attachDomEvent = void 0;
4661
+ var lib_1 = __webpack_require__(/*! roosterjs-editor-dom/lib */ "./packages/roosterjs-editor-dom/lib/index.ts");
4610
4662
  /**
4611
4663
  * @internal
4612
4664
  * Attach a DOM event to the editor content DIV
@@ -4616,7 +4668,7 @@ exports.attachDomEvent = void 0;
4616
4668
  * @param beforeDispatch Optional callback function to be invoked when the DOM event is triggered before trigger plugin event
4617
4669
  */
4618
4670
  var attachDomEvent = function (core, eventMap) {
4619
- var disposers = Object.keys(eventMap || {}).map(function (eventName) {
4671
+ var disposers = (0, lib_1.getObjectKeys)(eventMap || {}).map(function (eventName) {
4620
4672
  var _a = extractHandler(eventMap[eventName]), pluginEventType = _a.pluginEventType, beforeDispatch = _a.beforeDispatch;
4621
4673
  var onEvent = function (event) {
4622
4674
  if (beforeDispatch) {
@@ -4935,6 +4987,10 @@ var ensureTypeInContainer = function (core, position, keyboardEvent) {
4935
4987
  var formatNode;
4936
4988
  if (block) {
4937
4989
  formatNode = block.collapseToSingleElement();
4990
+ if ((0, roosterjs_editor_dom_1.isNodeEmpty)(formatNode, false /* trimContent */, true /* shouldCountBrAsVisible */)) {
4991
+ var brEl = formatNode.ownerDocument.createElement('br');
4992
+ formatNode.append(brEl);
4993
+ }
4938
4994
  // if the block is empty, apply default format
4939
4995
  // Otherwise, leave it as it is as we don't want to change the style for existing data
4940
4996
  // unless the block was just created by the keyboard event (e.g. ctrl+a & start typing)
@@ -5178,7 +5234,7 @@ function queryCommandStateFromDOM(core, currentPosition) {
5178
5234
  var tag = (0, roosterjs_editor_dom_1.getTagOfNode)(node);
5179
5235
  var style = node.nodeType == 1 /* Element */ && node.style;
5180
5236
  if (tag && style) {
5181
- Object.keys(PendableStyleCheckers).forEach(function (key) {
5237
+ (0, roosterjs_editor_dom_1.getObjectKeys)(PendableStyleCheckers).forEach(function (key) {
5182
5238
  if (!(pendableKeys.indexOf(key) >= 0)) {
5183
5239
  formatState[key] = formatState[key] || PendableStyleCheckers[key](tag, style);
5184
5240
  if (CssFalsyCheckers[key](style)) {
@@ -5625,7 +5681,7 @@ function restorePendingFormatState(core) {
5625
5681
  if (pendingFormatState.pendableFormatState) {
5626
5682
  var document_1 = contentDiv.ownerDocument;
5627
5683
  var formatState_1 = (0, roosterjs_editor_dom_1.getPendableFormatState)(document_1);
5628
- Object.keys(roosterjs_editor_dom_1.PendableFormatCommandMap).forEach(function (key) {
5684
+ (0, roosterjs_editor_dom_1.getObjectKeys)(roosterjs_editor_dom_1.PendableFormatCommandMap).forEach(function (key) {
5629
5685
  if (!!pendingFormatState.pendableFormatState[key] != formatState_1[key]) {
5630
5686
  document_1.execCommand(roosterjs_editor_dom_1.PendableFormatCommandMap[key], false, null);
5631
5687
  }
@@ -6189,7 +6245,7 @@ var CopyPastePlugin = /** @class */ (function () {
6189
6245
  function CopyPastePlugin(options) {
6190
6246
  var _this = this;
6191
6247
  this.onPaste = function (event) {
6192
- var _a;
6248
+ var _a, _b;
6193
6249
  var range;
6194
6250
  (0, roosterjs_editor_dom_1.extractClipboardEvent)(event, function (clipboardData) { var _a; return (_a = _this.editor) === null || _a === void 0 ? void 0 : _a.paste(clipboardData); }, {
6195
6251
  allowLinkPreview: (_a = _this.editor) === null || _a === void 0 ? void 0 : _a.isFeatureEnabled("PasteWithLinkPreview" /* PasteWithLinkPreview */),
@@ -6202,7 +6258,7 @@ var CopyPastePlugin = /** @class */ (function () {
6202
6258
  removeTempDiv: function (div) {
6203
6259
  _this.cleanUpAndRestoreSelection(div, range, false /* isCopy */);
6204
6260
  },
6205
- });
6261
+ }, (_b = _this.editor) === null || _b === void 0 ? void 0 : _b.getSelectionRange());
6206
6262
  };
6207
6263
  this.state = {
6208
6264
  allowedCustomPasteType: options.allowedCustomPasteType || [],
@@ -6811,7 +6867,7 @@ var EntityPlugin = /** @class */ (function () {
6811
6867
  (0, roosterjs_editor_dom_1.commitEntity)(wrapper, type, isReadonly, entity.id); // Use entity.id here because it is newly updated
6812
6868
  _this.handleNewEntity(entity);
6813
6869
  });
6814
- Object.keys(this.state.shadowEntityCache).forEach(function (id) {
6870
+ (0, roosterjs_editor_dom_1.getObjectKeys)(this.state.shadowEntityCache).forEach(function (id) {
6815
6871
  _this.triggerEvent(_this.state.shadowEntityCache[id], 6 /* Overwrite */);
6816
6872
  delete _this.state.shadowEntityCache[id];
6817
6873
  });
@@ -7098,7 +7154,7 @@ var LifecyclePlugin = /** @class */ (function () {
7098
7154
  LifecyclePlugin.prototype.dispose = function () {
7099
7155
  var _this = this;
7100
7156
  this.editor.triggerPluginEvent(12 /* BeforeDispose */, {}, true /*broadcast*/);
7101
- Object.keys(this.state.customData).forEach(function (key) {
7157
+ (0, roosterjs_editor_dom_1.getObjectKeys)(this.state.customData).forEach(function (key) {
7102
7158
  var data = _this.state.customData[key];
7103
7159
  if (data && data.disposer) {
7104
7160
  data.disposer(data.value);
@@ -7133,7 +7189,7 @@ var LifecyclePlugin = /** @class */ (function () {
7133
7189
  };
7134
7190
  LifecyclePlugin.prototype.adjustBrowserBehavior = function () {
7135
7191
  var _this = this;
7136
- Object.keys(COMMANDS).forEach(function (command) {
7192
+ (0, roosterjs_editor_dom_1.getObjectKeys)(COMMANDS).forEach(function (command) {
7137
7193
  // Catch any possible exception since this should not block the initialization of editor
7138
7194
  try {
7139
7195
  _this.editor.getDocument().execCommand(command, false, COMMANDS[command]);
@@ -7151,7 +7207,7 @@ var LifecyclePlugin = /** @class */ (function () {
7151
7207
  baseFormat.textColors = DARK_MODE_DEFAULT_FORMAT.textColors;
7152
7208
  }
7153
7209
  }
7154
- if (baseFormat && Object.keys(baseFormat).length === 0) {
7210
+ if (baseFormat && (0, roosterjs_editor_dom_1.getObjectKeys)(baseFormat).length === 0) {
7155
7211
  return;
7156
7212
  }
7157
7213
  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;
@@ -7869,8 +7925,8 @@ var __assign = (this && this.__assign) || function () {
7869
7925
  return __assign.apply(this, arguments);
7870
7926
  };
7871
7927
  Object.defineProperty(exports, "__esModule", { value: true });
7872
- var coreApiMap_1 = __webpack_require__(/*! ../coreApi/coreApiMap */ "./packages/roosterjs-editor-core/lib/coreApi/coreApiMap.ts");
7873
7928
  var createCorePlugins_1 = __webpack_require__(/*! ../corePlugins/createCorePlugins */ "./packages/roosterjs-editor-core/lib/corePlugins/createCorePlugins.ts");
7929
+ var coreApiMap_1 = __webpack_require__(/*! ../coreApi/coreApiMap */ "./packages/roosterjs-editor-core/lib/coreApi/coreApiMap.ts");
7874
7930
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
7875
7931
  /**
7876
7932
  * RoosterJs core editor class
@@ -7892,7 +7948,7 @@ var Editor = /** @class */ (function () {
7892
7948
  // 2. Store options values to local variables
7893
7949
  var corePlugins = (0, createCorePlugins_1.default)(contentDiv, options);
7894
7950
  var plugins = [];
7895
- Object.keys(corePlugins).forEach(function (name) {
7951
+ (0, roosterjs_editor_dom_1.getObjectKeys)(corePlugins).forEach(function (name) {
7896
7952
  if (name == '_placeholder') {
7897
7953
  (0, roosterjs_editor_dom_1.arrayPush)(plugins, options.plugins);
7898
7954
  }
@@ -8961,13 +9017,15 @@ exports.default = getFirstLastBlockElement;
8961
9017
  Object.defineProperty(exports, "__esModule", { value: true });
8962
9018
  var extractClipboardItems_1 = __webpack_require__(/*! ./extractClipboardItems */ "./packages/roosterjs-editor-dom/lib/clipboard/extractClipboardItems.ts");
8963
9019
  var extractClipboardItemsForIE_1 = __webpack_require__(/*! ./extractClipboardItemsForIE */ "./packages/roosterjs-editor-dom/lib/clipboard/extractClipboardItemsForIE.ts");
8964
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
9020
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
9021
+ var Browser_1 = __webpack_require__(/*! ../utils/Browser */ "./packages/roosterjs-editor-dom/lib/utils/Browser.ts");
8965
9022
  /**
8966
9023
  * @deprecated Use extractClipboardItems and extractClipboardItemsForIE instead
8967
9024
  * Extract a Clipboard event
8968
9025
  * @param event The paste event
8969
9026
  * @param callback Callback function when data is ready
8970
9027
  * @param options Options to retrieve more items from the event, including HTML string and other customized items
9028
+ * @param rangeBeforePaste Optional range to be removed when pasting in Android
8971
9029
  * @returns An object with the following properties:
8972
9030
  * types: Available types from the clipboard event
8973
9031
  * text: Plain text from the clipboard event
@@ -8976,19 +9034,27 @@ var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterj
8976
9034
  * When set to undefined, it means can't retrieve HTML string, there may be HTML string but direct retrieving is
8977
9035
  * not supported by browser.
8978
9036
  */
8979
- function extractClipboardEvent(event, callback, options) {
9037
+ function extractClipboardEvent(event, callback, options, rangeBeforePaste) {
8980
9038
  var _a;
8981
9039
  var dataTransfer = event.clipboardData ||
8982
9040
  ((_a = event.target.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView).clipboardData;
8983
9041
  if (dataTransfer.items) {
8984
9042
  event.preventDefault();
8985
- (0, extractClipboardItems_1.default)((0, toArray_1.default)(dataTransfer.items), options).then(callback);
9043
+ (0, extractClipboardItems_1.default)((0, toArray_1.default)(dataTransfer.items), options).then(function (clipboardData) {
9044
+ removeContents(rangeBeforePaste);
9045
+ callback(clipboardData);
9046
+ });
8986
9047
  }
8987
9048
  else {
8988
9049
  (0, extractClipboardItemsForIE_1.default)(dataTransfer, callback, options);
8989
9050
  }
8990
9051
  }
8991
9052
  exports.default = extractClipboardEvent;
9053
+ function removeContents(range) {
9054
+ if (Browser_1.Browser.isAndroid && range) {
9055
+ range.deleteContents();
9056
+ }
9057
+ }
8992
9058
 
8993
9059
 
8994
9060
  /***/ }),
@@ -9149,7 +9215,7 @@ function getAllowedCustomType(type, allowedCustomPasteType) {
9149
9215
 
9150
9216
  Object.defineProperty(exports, "__esModule", { value: true });
9151
9217
  var readFile_1 = __webpack_require__(/*! ../utils/readFile */ "./packages/roosterjs-editor-dom/lib/utils/readFile.ts");
9152
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
9218
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
9153
9219
  /**
9154
9220
  * Extract clipboard items to be a ClipboardData object for IE
9155
9221
  * @param dataTransfer The clipboard items retrieve from a DataTransfer object
@@ -9942,17 +10008,19 @@ var Position_1 = __webpack_require__(/*! ../selection/Position */ "./packages/ro
9942
10008
  var PositionContentSearcher_1 = __webpack_require__(/*! ../contentTraverser/PositionContentSearcher */ "./packages/roosterjs-editor-dom/lib/contentTraverser/PositionContentSearcher.ts");
9943
10009
  var queryElements_1 = __webpack_require__(/*! ../utils/queryElements */ "./packages/roosterjs-editor-dom/lib/utils/queryElements.ts");
9944
10010
  var splitTextNode_1 = __webpack_require__(/*! ../utils/splitTextNode */ "./packages/roosterjs-editor-dom/lib/utils/splitTextNode.ts");
9945
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
10011
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
9946
10012
  var unwrap_1 = __webpack_require__(/*! ../utils/unwrap */ "./packages/roosterjs-editor-dom/lib/utils/unwrap.ts");
9947
10013
  var VTable_1 = __webpack_require__(/*! ../table/VTable */ "./packages/roosterjs-editor-dom/lib/table/VTable.ts");
9948
10014
  var wrap_1 = __webpack_require__(/*! ../utils/wrap */ "./packages/roosterjs-editor-dom/lib/utils/wrap.ts");
9949
10015
  var splitParentNode_1 = __webpack_require__(/*! ../utils/splitParentNode */ "./packages/roosterjs-editor-dom/lib/utils/splitParentNode.ts");
10016
+ var NOT_EDITABLE_SELECTOR = '[contenteditable=false]';
9950
10017
  var adjustSteps = [
9951
10018
  adjustInsertPositionForHyperLink,
9952
10019
  adjustInsertPositionForStructuredNode,
9953
10020
  adjustInsertPositionForParagraph,
9954
10021
  adjustInsertPositionForVoidElement,
9955
10022
  adjustInsertPositionForMoveCursorOutOfALink,
10023
+ adjustInsertPositionForNotEditableNode,
9956
10024
  ];
9957
10025
  /**
9958
10026
  * Adjust position for A tag don't be nested inside another A tag.
@@ -10092,6 +10160,26 @@ function adjustInsertPositionForMoveCursorOutOfALink(root, nodeToInsert, positio
10092
10160
  }
10093
10161
  return position;
10094
10162
  }
10163
+ /**
10164
+ * Adjust the position cursor out of a not contenteditable element.
10165
+ */
10166
+ function adjustInsertPositionForNotEditableNode(root, nodeToInsert, position, range) {
10167
+ if (!position.element.isContentEditable) {
10168
+ var nonEditableElement = void 0;
10169
+ var lastNonEditableElement = (0, findClosestElementAncestor_1.default)(position.node, root, NOT_EDITABLE_SELECTOR);
10170
+ while (lastNonEditableElement) {
10171
+ nonEditableElement = lastNonEditableElement;
10172
+ lastNonEditableElement = (nonEditableElement === null || nonEditableElement === void 0 ? void 0 : nonEditableElement.parentElement)
10173
+ ? (0, findClosestElementAncestor_1.default)(nonEditableElement.parentElement, root, NOT_EDITABLE_SELECTOR)
10174
+ : null;
10175
+ }
10176
+ if (nonEditableElement) {
10177
+ position = new Position_1.default(nonEditableElement, -3 /* After */);
10178
+ return adjustInsertPositionForNotEditableNode(root, nodeToInsert, position, range);
10179
+ }
10180
+ }
10181
+ return position;
10182
+ }
10095
10183
  /**
10096
10184
  *
10097
10185
  * @param root the contentDiv of the ditor
@@ -10125,7 +10213,7 @@ function safeRemove(node) {
10125
10213
  "use strict";
10126
10214
 
10127
10215
  Object.defineProperty(exports, "__esModule", { value: true });
10128
- var arrayPush_1 = __webpack_require__(/*! ../utils/arrayPush */ "./packages/roosterjs-editor-dom/lib/utils/arrayPush.ts");
10216
+ var arrayPush_1 = __webpack_require__(/*! ../jsUtils/arrayPush */ "./packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts");
10129
10217
  var collapseNodesInRegion_1 = __webpack_require__(/*! ../region/collapseNodesInRegion */ "./packages/roosterjs-editor-dom/lib/region/collapseNodesInRegion.ts");
10130
10218
  var getRegionsFromRange_1 = __webpack_require__(/*! ../region/getRegionsFromRange */ "./packages/roosterjs-editor-dom/lib/region/getRegionsFromRange.ts");
10131
10219
  var getSelectionRangeInRegion_1 = __webpack_require__(/*! ../region/getSelectionRangeInRegion */ "./packages/roosterjs-editor-dom/lib/region/getSelectionRangeInRegion.ts");
@@ -10518,12 +10606,13 @@ exports.default = isModifierKey;
10518
10606
  Object.defineProperty(exports, "__esModule", { value: true });
10519
10607
  var changeElementTag_1 = __webpack_require__(/*! ../utils/changeElementTag */ "./packages/roosterjs-editor-dom/lib/utils/changeElementTag.ts");
10520
10608
  var getInheritableStyles_1 = __webpack_require__(/*! ./getInheritableStyles */ "./packages/roosterjs-editor-dom/lib/htmlSanitizer/getInheritableStyles.ts");
10609
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
10521
10610
  var getPredefinedCssForElement_1 = __webpack_require__(/*! ./getPredefinedCssForElement */ "./packages/roosterjs-editor-dom/lib/htmlSanitizer/getPredefinedCssForElement.ts");
10522
10611
  var getStyles_1 = __webpack_require__(/*! ../style/getStyles */ "./packages/roosterjs-editor-dom/lib/style/getStyles.ts");
10523
10612
  var getTagOfNode_1 = __webpack_require__(/*! ../utils/getTagOfNode */ "./packages/roosterjs-editor-dom/lib/utils/getTagOfNode.ts");
10524
10613
  var safeInstanceOf_1 = __webpack_require__(/*! ../utils/safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
10525
10614
  var setStyles_1 = __webpack_require__(/*! ../style/setStyles */ "./packages/roosterjs-editor-dom/lib/style/setStyles.ts");
10526
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
10615
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
10527
10616
  var cloneObject_1 = __webpack_require__(/*! ./cloneObject */ "./packages/roosterjs-editor-dom/lib/htmlSanitizer/cloneObject.ts");
10528
10617
  var getAllowedValues_1 = __webpack_require__(/*! ./getAllowedValues */ "./packages/roosterjs-editor-dom/lib/htmlSanitizer/getAllowedValues.ts");
10529
10618
  /**
@@ -10730,7 +10819,7 @@ var HtmlSanitizer = /** @class */ (function () {
10730
10819
  HtmlSanitizer.prototype.preprocessCss = function (element, thisStyle) {
10731
10820
  var predefinedStyles = (0, getPredefinedCssForElement_1.default)(element, this.additionalPredefinedCssForElement);
10732
10821
  if (predefinedStyles) {
10733
- Object.keys(predefinedStyles).forEach(function (name) {
10822
+ (0, getObjectKeys_1.default)(predefinedStyles).forEach(function (name) {
10734
10823
  thisStyle[name] = predefinedStyles[name];
10735
10824
  });
10736
10825
  }
@@ -10738,7 +10827,7 @@ var HtmlSanitizer = /** @class */ (function () {
10738
10827
  HtmlSanitizer.prototype.processCss = function (element, thisStyle, context) {
10739
10828
  var _this = this;
10740
10829
  var styles = (0, getStyles_1.default)(element);
10741
- Object.keys(styles).forEach(function (name) {
10830
+ (0, getObjectKeys_1.default)(styles).forEach(function (name) {
10742
10831
  var value = styles[name];
10743
10832
  var callback = _this.styleCallbacks[name];
10744
10833
  var isInheritable = thisStyle[name] != undefined;
@@ -10853,13 +10942,14 @@ exports.default = chainSanitizerCallback;
10853
10942
 
10854
10943
  Object.defineProperty(exports, "__esModule", { value: true });
10855
10944
  exports.cloneObject = void 0;
10945
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
10856
10946
  function nativeClone(source, existingObj) {
10857
10947
  return Object.assign(existingObj || {}, source);
10858
10948
  }
10859
10949
  function customClone(source, existingObj) {
10860
10950
  var result = existingObj || {};
10861
10951
  if (source) {
10862
- for (var _i = 0, _a = Object.keys(source); _i < _a.length; _i++) {
10952
+ for (var _i = 0, _a = (0, getObjectKeys_1.default)(source); _i < _a.length; _i++) {
10863
10953
  var key = _a[_i];
10864
10954
  result[key] = source[key];
10865
10955
  }
@@ -10934,6 +11024,7 @@ var __assign = (this && this.__assign) || function () {
10934
11024
  };
10935
11025
  Object.defineProperty(exports, "__esModule", { value: true });
10936
11026
  exports.getStyleCallbacks = exports.getDefaultStyleValues = exports.getAllowedCssClassesRegex = exports.getAllowedAttributes = exports.getTagReplacement = void 0;
11027
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
10937
11028
  var cloneObject_1 = __webpack_require__(/*! ./cloneObject */ "./packages/roosterjs-editor-dom/lib/htmlSanitizer/cloneObject.ts");
10938
11029
  var HTML_TAG_REPLACEMENT = {
10939
11030
  // Allowed tags
@@ -11118,7 +11209,7 @@ var ALLOWED_CSS_CLASSES = [];
11118
11209
  function getTagReplacement(additionalReplacements) {
11119
11210
  var result = __assign({}, HTML_TAG_REPLACEMENT);
11120
11211
  var replacements = additionalReplacements || {};
11121
- Object.keys(replacements).forEach(function (key) {
11212
+ (0, getObjectKeys_1.default)(replacements).forEach(function (key) {
11122
11213
  if (key) {
11123
11214
  result[key.toLowerCase()] = replacements[key];
11124
11215
  }
@@ -11288,9 +11379,9 @@ exports.default = getPredefinedCssForElement;
11288
11379
  "use strict";
11289
11380
 
11290
11381
  Object.defineProperty(exports, "__esModule", { value: true });
11291
- exports.KnownCreateElementData = exports.createElement = exports.matchesSelector = exports.setColor = exports.getInnerHTML = exports.readFile = exports.safeInstanceOf = exports.toArray = exports.normalizeRect = exports.splitTextNode = exports.getLastLeafNode = exports.getFirstLeafNode = exports.getPreviousLeafSibling = exports.getNextLeafSibling = exports.wrap = exports.unwrap = exports.splitBalancedNodeRange = exports.splitParentNode = exports.queryElements = exports.matchLink = exports.isVoidHtmlElement = exports.isNodeEmpty = exports.isBlockElement = exports.getTagOfNode = exports.PendableFormatCommandMap = exports.getPendableFormatState = exports.getComputedStyle = exports.getComputedStyles = exports.fromHtml = exports.findClosestElementAncestor = exports.contains = exports.collapseNodes = exports.changeElementTag = exports.applyFormat = exports.getBrowserInfo = exports.Browser = exports.arrayPush = exports.extractClipboardItemsForIE = exports.extractClipboardItems = exports.extractClipboardEvent = exports.applyTextStyle = exports.PartialInlineElement = exports.NodeInlineElement = exports.LinkInlineElement = exports.ImageInlineElement = exports.getInlineElementAtNode = exports.PositionContentSearcher = exports.ContentTraverser = exports.getFirstLastBlockElement = exports.getBlockElementAtNode = void 0;
11292
- exports.validate = exports.getTextContent = exports.deleteSelectedContent = exports.adjustInsertPosition = exports.setStyles = exports.getStyles = exports.isCtrlOrMetaPressed = exports.isCharacterValue = exports.isModifierKey = exports.clearEventDataCache = exports.cacheGetEventData = exports.getEntitySelector = exports.getEntityFromElement = exports.commitEntity = exports.chainSanitizerCallback = exports.createDefaultHtmlSanitizerOptions = exports.getInheritableStyles = exports.HtmlSanitizer = exports.canUndoAutoComplete = exports.createSnapshots = exports.moveCurrentSnapsnot = exports.moveCurrentSnapshot = exports.clearProceedingSnapshotsV2 = exports.clearProceedingSnapshots = exports.canMoveCurrentSnapshot = exports.addSnapshotV2 = exports.addSnapshot = exports.addRangeToSelection = exports.setHtmlWithMetadata = exports.setHtmlWithSelectionPath = exports.getHtmlWithSelectionPath = exports.getSelectionPath = exports.isPositionAtBeginningOf = exports.getPositionRect = exports.createRange = exports.Position = exports.mergeBlocksInRegion = exports.getSelectionRangeInRegion = exports.isNodeInRegion = exports.collapseNodesInRegion = exports.getSelectedBlockElementsInRegion = exports.getRegionsFromRange = exports.setListItemStyle = exports.VListChain = exports.createVListFromRegion = exports.VListItem = exports.VList = exports.isWholeTableSelected = exports.VTable = exports.moveChildNodes = void 0;
11293
- exports.removeMetadata = exports.setMetadata = exports.getMetadata = exports.createObjectDefinition = exports.createArrayDefinition = exports.createStringDefinition = exports.createBooleanDefinition = exports.createNumberDefinition = void 0;
11382
+ 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;
11383
+ 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;
11384
+ exports.toArray = exports.getObjectKeys = exports.arrayPush = exports.removeMetadata = exports.setMetadata = exports.getMetadata = exports.createObjectDefinition = exports.createArrayDefinition = exports.createStringDefinition = void 0;
11294
11385
  var getBlockElementAtNode_1 = __webpack_require__(/*! ./blockElements/getBlockElementAtNode */ "./packages/roosterjs-editor-dom/lib/blockElements/getBlockElementAtNode.ts");
11295
11386
  Object.defineProperty(exports, "getBlockElementAtNode", { enumerable: true, get: function () { return getBlockElementAtNode_1.default; } });
11296
11387
  var getFirstLastBlockElement_1 = __webpack_require__(/*! ./blockElements/getFirstLastBlockElement */ "./packages/roosterjs-editor-dom/lib/blockElements/getFirstLastBlockElement.ts");
@@ -11317,8 +11408,6 @@ var extractClipboardItems_1 = __webpack_require__(/*! ./clipboard/extractClipboa
11317
11408
  Object.defineProperty(exports, "extractClipboardItems", { enumerable: true, get: function () { return extractClipboardItems_1.default; } });
11318
11409
  var extractClipboardItemsForIE_1 = __webpack_require__(/*! ./clipboard/extractClipboardItemsForIE */ "./packages/roosterjs-editor-dom/lib/clipboard/extractClipboardItemsForIE.ts");
11319
11410
  Object.defineProperty(exports, "extractClipboardItemsForIE", { enumerable: true, get: function () { return extractClipboardItemsForIE_1.default; } });
11320
- var arrayPush_1 = __webpack_require__(/*! ./utils/arrayPush */ "./packages/roosterjs-editor-dom/lib/utils/arrayPush.ts");
11321
- Object.defineProperty(exports, "arrayPush", { enumerable: true, get: function () { return arrayPush_1.default; } });
11322
11411
  var Browser_1 = __webpack_require__(/*! ./utils/Browser */ "./packages/roosterjs-editor-dom/lib/utils/Browser.ts");
11323
11412
  Object.defineProperty(exports, "Browser", { enumerable: true, get: function () { return Browser_1.Browser; } });
11324
11413
  Object.defineProperty(exports, "getBrowserInfo", { enumerable: true, get: function () { return Browser_1.getBrowserInfo; } });
@@ -11369,8 +11458,6 @@ var splitTextNode_1 = __webpack_require__(/*! ./utils/splitTextNode */ "./packag
11369
11458
  Object.defineProperty(exports, "splitTextNode", { enumerable: true, get: function () { return splitTextNode_1.default; } });
11370
11459
  var normalizeRect_1 = __webpack_require__(/*! ./utils/normalizeRect */ "./packages/roosterjs-editor-dom/lib/utils/normalizeRect.ts");
11371
11460
  Object.defineProperty(exports, "normalizeRect", { enumerable: true, get: function () { return normalizeRect_1.default; } });
11372
- var toArray_1 = __webpack_require__(/*! ./utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
11373
- Object.defineProperty(exports, "toArray", { enumerable: true, get: function () { return toArray_1.default; } });
11374
11461
  var safeInstanceOf_1 = __webpack_require__(/*! ./utils/safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
11375
11462
  Object.defineProperty(exports, "safeInstanceOf", { enumerable: true, get: function () { return safeInstanceOf_1.default; } });
11376
11463
  var readFile_1 = __webpack_require__(/*! ./utils/readFile */ "./packages/roosterjs-editor-dom/lib/utils/readFile.ts");
@@ -11490,6 +11577,12 @@ var metadata_1 = __webpack_require__(/*! ./metadata/metadata */ "./packages/roos
11490
11577
  Object.defineProperty(exports, "getMetadata", { enumerable: true, get: function () { return metadata_1.getMetadata; } });
11491
11578
  Object.defineProperty(exports, "setMetadata", { enumerable: true, get: function () { return metadata_1.setMetadata; } });
11492
11579
  Object.defineProperty(exports, "removeMetadata", { enumerable: true, get: function () { return metadata_1.removeMetadata; } });
11580
+ var arrayPush_1 = __webpack_require__(/*! ./jsUtils/arrayPush */ "./packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts");
11581
+ Object.defineProperty(exports, "arrayPush", { enumerable: true, get: function () { return arrayPush_1.default; } });
11582
+ var getObjectKeys_1 = __webpack_require__(/*! ./jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
11583
+ Object.defineProperty(exports, "getObjectKeys", { enumerable: true, get: function () { return getObjectKeys_1.default; } });
11584
+ var toArray_1 = __webpack_require__(/*! ./jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
11585
+ Object.defineProperty(exports, "toArray", { enumerable: true, get: function () { return toArray_1.default; } });
11493
11586
 
11494
11587
 
11495
11588
  /***/ }),
@@ -12126,6 +12219,70 @@ function getInlineElementBeforeAfter(root, position, isAfter) {
12126
12219
  exports.getInlineElementBeforeAfter = getInlineElementBeforeAfter;
12127
12220
 
12128
12221
 
12222
+ /***/ }),
12223
+
12224
+ /***/ "./packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts":
12225
+ /*!****************************************************************!*\
12226
+ !*** ./packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts ***!
12227
+ \****************************************************************/
12228
+ /*! no static exports found */
12229
+ /***/ (function(module, exports, __webpack_require__) {
12230
+
12231
+ "use strict";
12232
+
12233
+ Object.defineProperty(exports, "__esModule", { value: true });
12234
+ /**
12235
+ * A type-safe wrapper for Array.prototype.push.apply()
12236
+ * @param mainArray The main array to push items into
12237
+ * @param itemsArray The items to push to main array
12238
+ */
12239
+ function arrayPush(mainArray, itemsArray) {
12240
+ Array.prototype.push.apply(mainArray, itemsArray);
12241
+ }
12242
+ exports.default = arrayPush;
12243
+
12244
+
12245
+ /***/ }),
12246
+
12247
+ /***/ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts":
12248
+ /*!********************************************************************!*\
12249
+ !*** ./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts ***!
12250
+ \********************************************************************/
12251
+ /*! no static exports found */
12252
+ /***/ (function(module, exports, __webpack_require__) {
12253
+
12254
+ "use strict";
12255
+
12256
+ Object.defineProperty(exports, "__esModule", { value: true });
12257
+ /**
12258
+ * Provide a strong-typed version of Object.keys()
12259
+ * @param obj The source object
12260
+ * @returns Array of keys
12261
+ */
12262
+ function getObjectKeys(obj) {
12263
+ return Object.keys(obj);
12264
+ }
12265
+ exports.default = getObjectKeys;
12266
+
12267
+
12268
+ /***/ }),
12269
+
12270
+ /***/ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts":
12271
+ /*!**************************************************************!*\
12272
+ !*** ./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts ***!
12273
+ \**************************************************************/
12274
+ /*! no static exports found */
12275
+ /***/ (function(module, exports, __webpack_require__) {
12276
+
12277
+ "use strict";
12278
+
12279
+ Object.defineProperty(exports, "__esModule", { value: true });
12280
+ function toArray(collection) {
12281
+ return [].slice.call(collection);
12282
+ }
12283
+ exports.default = toArray;
12284
+
12285
+
12129
12286
  /***/ }),
12130
12287
 
12131
12288
  /***/ "./packages/roosterjs-editor-dom/lib/list/VList.ts":
@@ -12156,11 +12313,10 @@ var Position_1 = __webpack_require__(/*! ../selection/Position */ "./packages/ro
12156
12313
  var queryElements_1 = __webpack_require__(/*! ../utils/queryElements */ "./packages/roosterjs-editor-dom/lib/utils/queryElements.ts");
12157
12314
  var safeInstanceOf_1 = __webpack_require__(/*! ../utils/safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
12158
12315
  var splitParentNode_1 = __webpack_require__(/*! ../utils/splitParentNode */ "./packages/roosterjs-editor-dom/lib/utils/splitParentNode.ts");
12159
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
12316
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
12160
12317
  var unwrap_1 = __webpack_require__(/*! ../utils/unwrap */ "./packages/roosterjs-editor-dom/lib/utils/unwrap.ts");
12161
12318
  var VListItem_1 = __webpack_require__(/*! ./VListItem */ "./packages/roosterjs-editor-dom/lib/list/VListItem.ts");
12162
12319
  var wrap_1 = __webpack_require__(/*! ../utils/wrap */ "./packages/roosterjs-editor-dom/lib/utils/wrap.ts");
12163
- var definitionCreators_1 = __webpack_require__(/*! ../metadata/definitionCreators */ "./packages/roosterjs-editor-dom/lib/metadata/definitionCreators.ts");
12164
12320
  var metadata_1 = __webpack_require__(/*! ../metadata/metadata */ "./packages/roosterjs-editor-dom/lib/metadata/metadata.ts");
12165
12321
  /**
12166
12322
  * Represent a bullet or a numbering list
@@ -12417,10 +12573,13 @@ var VList = /** @class */ (function () {
12417
12573
  /**
12418
12574
  * Change list style of the given range of this list.
12419
12575
  * If some of the items are not real list item yet, this will make them to be list item with given style
12420
- * @param targetStyle Target list style
12576
+ * @param orderedStyle The style of ordered list
12577
+ * @param unorderedStyle The style of unordered list
12421
12578
  */
12422
- VList.prototype.setListStyleType = function (targetStyle) {
12423
- (0, metadata_1.setMetadata)(this.rootList, targetStyle, (0, definitionCreators_1.createNumberDefinition)());
12579
+ VList.prototype.setListStyleType = function (orderedStyle, unorderedStyle) {
12580
+ var style = (0, metadata_1.getMetadata)(this.rootList, VListItem_1.ListStyleDefinitionMetadata);
12581
+ var styleMetadata = createListStyleMetadata(style, orderedStyle, unorderedStyle);
12582
+ (0, metadata_1.setMetadata)(this.rootList, styleMetadata, VListItem_1.ListStyleDefinitionMetadata);
12424
12583
  };
12425
12584
  /**
12426
12585
  * Append a new item to this VList
@@ -12576,6 +12735,19 @@ function moveLiToList(li) {
12576
12735
  (0, unwrap_1.default)(li.parentNode);
12577
12736
  }
12578
12737
  }
12738
+ function getValidValue() {
12739
+ var values = [];
12740
+ for (var _i = 0; _i < arguments.length; _i++) {
12741
+ values[_i] = arguments[_i];
12742
+ }
12743
+ return values.filter(function (x) { return x !== undefined; })[0];
12744
+ }
12745
+ function createListStyleMetadata(style, orderedStyle, unorderedStyle) {
12746
+ return {
12747
+ orderedStyleType: getValidValue(orderedStyle, style === null || style === void 0 ? void 0 : style.orderedStyleType, 1 /* Decimal */),
12748
+ unorderedStyleType: getValidValue(unorderedStyle, style === null || style === void 0 ? void 0 : style.unorderedStyleType, 1 /* Disc */),
12749
+ };
12750
+ }
12579
12751
 
12580
12752
 
12581
12753
  /***/ }),
@@ -12590,7 +12762,7 @@ function moveLiToList(li) {
12590
12762
  "use strict";
12591
12763
 
12592
12764
  Object.defineProperty(exports, "__esModule", { value: true });
12593
- var arrayPush_1 = __webpack_require__(/*! ../utils/arrayPush */ "./packages/roosterjs-editor-dom/lib/utils/arrayPush.ts");
12765
+ var arrayPush_1 = __webpack_require__(/*! ../jsUtils/arrayPush */ "./packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts");
12594
12766
  var getRootListNode_1 = __webpack_require__(/*! ./getRootListNode */ "./packages/roosterjs-editor-dom/lib/list/getRootListNode.ts");
12595
12767
  var isNodeAfter_1 = __webpack_require__(/*! ../utils/isNodeAfter */ "./packages/roosterjs-editor-dom/lib/utils/isNodeAfter.ts");
12596
12768
  var isNodeInRegion_1 = __webpack_require__(/*! ../region/isNodeInRegion */ "./packages/roosterjs-editor-dom/lib/region/isNodeInRegion.ts");
@@ -12755,6 +12927,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
12755
12927
  return to.concat(ar || Array.prototype.slice.call(from));
12756
12928
  };
12757
12929
  Object.defineProperty(exports, "__esModule", { value: true });
12930
+ exports.ListStyleDefinitionMetadata = void 0;
12758
12931
  var contains_1 = __webpack_require__(/*! ../utils/contains */ "./packages/roosterjs-editor-dom/lib/utils/contains.ts");
12759
12932
  var getListTypeFromNode_1 = __webpack_require__(/*! ./getListTypeFromNode */ "./packages/roosterjs-editor-dom/lib/list/getListTypeFromNode.ts");
12760
12933
  var getTagOfNode_1 = __webpack_require__(/*! ../utils/getTagOfNode */ "./packages/roosterjs-editor-dom/lib/utils/getTagOfNode.ts");
@@ -12764,13 +12937,23 @@ var safeInstanceOf_1 = __webpack_require__(/*! ../utils/safeInstanceOf */ "./pac
12764
12937
  var setBulletListMarkers_1 = __webpack_require__(/*! ./setBulletListMarkers */ "./packages/roosterjs-editor-dom/lib/list/setBulletListMarkers.ts");
12765
12938
  var setListItemStyle_1 = __webpack_require__(/*! ./setListItemStyle */ "./packages/roosterjs-editor-dom/lib/list/setListItemStyle.ts");
12766
12939
  var setNumberingListMarkers_1 = __webpack_require__(/*! ./setNumberingListMarkers */ "./packages/roosterjs-editor-dom/lib/list/setNumberingListMarkers.ts");
12767
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
12940
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
12768
12941
  var unwrap_1 = __webpack_require__(/*! ../utils/unwrap */ "./packages/roosterjs-editor-dom/lib/utils/unwrap.ts");
12769
12942
  var wrap_1 = __webpack_require__(/*! ../utils/wrap */ "./packages/roosterjs-editor-dom/lib/utils/wrap.ts");
12943
+ var definitionCreators_1 = __webpack_require__(/*! ../metadata/definitionCreators */ "./packages/roosterjs-editor-dom/lib/metadata/definitionCreators.ts");
12770
12944
  var metadata_1 = __webpack_require__(/*! ../metadata/metadata */ "./packages/roosterjs-editor-dom/lib/metadata/metadata.ts");
12771
12945
  var orderListStyles = [null, 'lower-alpha', 'lower-roman'];
12946
+ var unorderedListStyles = ['disc', 'circle', 'square'];
12772
12947
  var MARGIN_BASE = '0in 0in 0in 0.5in';
12773
12948
  var NEGATIVE_MARGIN = '-.25in';
12949
+ /**
12950
+ * @internal
12951
+ * The definition for the number of BulletListType or NumberingListType
12952
+ */
12953
+ exports.ListStyleDefinitionMetadata = (0, definitionCreators_1.createObjectDefinition)({
12954
+ orderedStyleType: (0, definitionCreators_1.createNumberDefinition)(true /** isOptional */, undefined /** value **/, 1 /* Min */, 20 /* Max */),
12955
+ unorderedStyleType: (0, definitionCreators_1.createNumberDefinition)(true /** isOptional */, undefined /** value **/, 1 /* Min */, 7 /* Max */),
12956
+ }, true /** isOptional */, true /** allowNull */);
12774
12957
  /**
12775
12958
  * !!! Never directly create instance of this class. It should be created within VList class !!!
12776
12959
  *
@@ -12934,15 +13117,19 @@ var VListItem = /** @class */ (function () {
12934
13117
  * @param index the list item index
12935
13118
  */
12936
13119
  VListItem.prototype.applyListStyle = function (rootList, index) {
12937
- var style = (0, metadata_1.getMetadata)(rootList) ? (0, metadata_1.getMetadata)(rootList) : undefined;
13120
+ var style = (0, metadata_1.getMetadata)(rootList, exports.ListStyleDefinitionMetadata);
13121
+ // The list just need to be styled if it is at top level, so the listType length for this Vlist must be 2.
13122
+ var isFirstLevel = this.listTypes.length < 3;
12938
13123
  if (style) {
12939
- if (this.listTypes.length < 3) {
12940
- if (this.listTypes[1] === 2 /* Unordered */) {
12941
- (0, setBulletListMarkers_1.default)(this.node, style);
12942
- }
12943
- else if (this.listTypes[1] === 1 /* Ordered */) {
12944
- (0, setNumberingListMarkers_1.default)(this.node, style, index);
12945
- }
13124
+ if (isFirstLevel &&
13125
+ this.listTypes[1] === 2 /* Unordered */ &&
13126
+ style.unorderedStyleType) {
13127
+ (0, setBulletListMarkers_1.default)(this.node, style.unorderedStyleType);
13128
+ }
13129
+ else if (isFirstLevel &&
13130
+ this.listTypes[1] === 1 /* Ordered */ &&
13131
+ style.orderedStyleType) {
13132
+ (0, setNumberingListMarkers_1.default)(this.node, style.orderedStyleType, index);
12946
13133
  }
12947
13134
  else {
12948
13135
  this.node.style.removeProperty('list-style-type');
@@ -13058,9 +13245,19 @@ function createListElement(newRoot, listType, nextLevel, originalRoot) {
13058
13245
  // Can't be reused, can't clone, let's create a new one
13059
13246
  result = doc.createElement(listType == 1 /* Ordered */ ? 'ol' : 'ul');
13060
13247
  }
13248
+ // Always maintain the metadata saved in the list
13249
+ if (originalRoot && nextLevel == 1 && listType != (0, getListTypeFromNode_1.default)(originalRoot)) {
13250
+ var style = (0, metadata_1.getMetadata)(originalRoot, exports.ListStyleDefinitionMetadata);
13251
+ if (style) {
13252
+ (0, metadata_1.setMetadata)(result, style, exports.ListStyleDefinitionMetadata);
13253
+ }
13254
+ }
13061
13255
  if (listType == 1 /* Ordered */ && nextLevel > 1) {
13062
13256
  result.style.setProperty('list-style-type', orderListStyles[(nextLevel - 1) % orderListStyles.length]);
13063
13257
  }
13258
+ if (listType == 2 /* Unordered */ && nextLevel > 1) {
13259
+ result.style.setProperty('list-style-type', unorderedListStyles[(nextLevel - 1) % unorderedListStyles.length]);
13260
+ }
13064
13261
  return result;
13065
13262
  }
13066
13263
  function wrapIfNotBlockNode(nodes, checkFirst, checkLast) {
@@ -13148,6 +13345,7 @@ exports.default = convertDecimalsToAlpha;
13148
13345
  "use strict";
13149
13346
 
13150
13347
  Object.defineProperty(exports, "__esModule", { value: true });
13348
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
13151
13349
  var RomanValues = {
13152
13350
  M: 1000,
13153
13351
  CM: 900,
@@ -13172,7 +13370,7 @@ var RomanValues = {
13172
13370
  */
13173
13371
  function convertDecimalsToRoman(decimal, isLowerCase) {
13174
13372
  var romanValue = '';
13175
- for (var _i = 0, _a = Object.keys(RomanValues); _i < _a.length; _i++) {
13373
+ for (var _i = 0, _a = (0, getObjectKeys_1.default)(RomanValues); _i < _a.length; _i++) {
13176
13374
  var i = _a[_i];
13177
13375
  var timesRomanCharAppear = Math.floor(decimal / RomanValues[i]);
13178
13376
  decimal = decimal - timesRomanCharAppear * RomanValues[i];
@@ -13202,7 +13400,7 @@ var isNodeInRegion_1 = __webpack_require__(/*! ../region/isNodeInRegion */ "./pa
13202
13400
  var Position_1 = __webpack_require__(/*! ../selection/Position */ "./packages/roosterjs-editor-dom/lib/selection/Position.ts");
13203
13401
  var safeInstanceOf_1 = __webpack_require__(/*! ../utils/safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
13204
13402
  var shouldSkipNode_1 = __webpack_require__(/*! ../utils/shouldSkipNode */ "./packages/roosterjs-editor-dom/lib/utils/shouldSkipNode.ts");
13205
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
13403
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
13206
13404
  var VList_1 = __webpack_require__(/*! ./VList */ "./packages/roosterjs-editor-dom/lib/list/VList.ts");
13207
13405
  var wrap_1 = __webpack_require__(/*! ../utils/wrap */ "./packages/roosterjs-editor-dom/lib/utils/wrap.ts");
13208
13406
  var getLeafSibling_1 = __webpack_require__(/*! ../utils/getLeafSibling */ "./packages/roosterjs-editor-dom/lib/utils/getLeafSibling.ts");
@@ -13405,17 +13603,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
13405
13603
  */
13406
13604
  function setBulletListMarkers(li, listStyleType) {
13407
13605
  var marker = bulletListStyle[listStyleType];
13408
- var isDiscOrSquare = listStyleType === 0 /* Disc */ || listStyleType === 2 /* Square */;
13606
+ var isDiscOrSquare = listStyleType === 1 /* Disc */ || listStyleType === 3 /* Square */;
13409
13607
  li.style.listStyleType = isDiscOrSquare ? marker : "\"" + marker + "\"";
13410
13608
  }
13411
13609
  exports.default = setBulletListMarkers;
13412
13610
  var bulletListStyle = (_a = {},
13413
- _a[0 /* Disc */] = 'disc',
13414
- _a[2 /* Square */] = 'square',
13415
- _a[1 /* Dash */] = '- ',
13416
- _a[4 /* LongArrow */] = '→ ',
13417
- _a[3 /* ShortArrow */] = '➢ ',
13418
- _a[5 /* UnfilledArrow */] = '➪ ',
13611
+ _a[1 /* Disc */] = 'disc',
13612
+ _a[3 /* Square */] = 'square',
13613
+ _a[2 /* Dash */] = '- ',
13614
+ _a[5 /* LongArrow */] = '→ ',
13615
+ _a[4 /* ShortArrow */] = '➢ ',
13616
+ _a[6 /* UnfilledArrow */] = '➪ ',
13617
+ _a[7 /* Hyphen */] = '— ',
13419
13618
  _a);
13420
13619
 
13421
13620
 
@@ -13521,95 +13720,95 @@ function setNumberingListMarkers(li, listStyleType, level) {
13521
13720
  }
13522
13721
  exports.default = setNumberingListMarkers;
13523
13722
  var numberingListStyle = (_a = {},
13524
- _a[0 /* Decimal */] = {
13723
+ _a[1 /* Decimal */] = {
13525
13724
  markerType: MarkerTypes.Decimal,
13526
13725
  markerSeparator: '. ',
13527
13726
  },
13528
- _a[1 /* DecimalDash */] = {
13727
+ _a[2 /* DecimalDash */] = {
13529
13728
  markerType: MarkerTypes.Decimal,
13530
13729
  markerSeparator: '- ',
13531
13730
  },
13532
- _a[2 /* DecimalParenthesis */] = {
13731
+ _a[3 /* DecimalParenthesis */] = {
13533
13732
  markerType: MarkerTypes.Decimal,
13534
13733
  markerSeparator: ') ',
13535
13734
  },
13536
- _a[3 /* DecimalDoubleParenthesis */] = {
13735
+ _a[4 /* DecimalDoubleParenthesis */] = {
13537
13736
  markerType: MarkerTypes.Decimal,
13538
13737
  markerSeparator: ') ',
13539
13738
  markerSecondSeparator: '(',
13540
13739
  },
13541
- _a[4 /* LowerAlpha */] = {
13740
+ _a[5 /* LowerAlpha */] = {
13542
13741
  markerType: MarkerTypes.Alpha,
13543
13742
  markerSeparator: '. ',
13544
13743
  lowerCase: true,
13545
13744
  },
13546
- _a[7 /* LowerAlphaDash */] = {
13745
+ _a[8 /* LowerAlphaDash */] = {
13547
13746
  markerType: MarkerTypes.Alpha,
13548
13747
  markerSeparator: '- ',
13549
13748
  lowerCase: true,
13550
13749
  },
13551
- _a[5 /* LowerAlphaParenthesis */] = {
13750
+ _a[6 /* LowerAlphaParenthesis */] = {
13552
13751
  markerType: MarkerTypes.Alpha,
13553
13752
  markerSeparator: ') ',
13554
13753
  lowerCase: true,
13555
13754
  },
13556
- _a[6 /* LowerAlphaDoubleParenthesis */] = {
13755
+ _a[7 /* LowerAlphaDoubleParenthesis */] = {
13557
13756
  markerType: MarkerTypes.Alpha,
13558
13757
  markerSeparator: ') ',
13559
13758
  markerSecondSeparator: '(',
13560
13759
  lowerCase: true,
13561
13760
  },
13562
- _a[8 /* UpperAlpha */] = {
13761
+ _a[9 /* UpperAlpha */] = {
13563
13762
  markerType: MarkerTypes.Alpha,
13564
13763
  markerSeparator: '. ',
13565
13764
  },
13566
- _a[11 /* UpperAlphaDash */] = {
13765
+ _a[12 /* UpperAlphaDash */] = {
13567
13766
  markerType: MarkerTypes.Alpha,
13568
13767
  markerSeparator: '- ',
13569
13768
  },
13570
- _a[9 /* UpperAlphaParenthesis */] = {
13769
+ _a[10 /* UpperAlphaParenthesis */] = {
13571
13770
  markerType: MarkerTypes.Alpha,
13572
13771
  markerSeparator: ') ',
13573
13772
  },
13574
- _a[10 /* UpperAlphaDoubleParenthesis */] = {
13773
+ _a[11 /* UpperAlphaDoubleParenthesis */] = {
13575
13774
  markerType: MarkerTypes.Alpha,
13576
13775
  markerSeparator: ') ',
13577
13776
  markerSecondSeparator: '(',
13578
13777
  },
13579
- _a[12 /* LowerRoman */] = {
13778
+ _a[13 /* LowerRoman */] = {
13580
13779
  markerType: MarkerTypes.Roman,
13581
13780
  markerSeparator: '. ',
13582
13781
  lowerCase: true,
13583
13782
  },
13584
- _a[15 /* LowerRomanDash */] = {
13783
+ _a[16 /* LowerRomanDash */] = {
13585
13784
  markerType: MarkerTypes.Roman,
13586
13785
  markerSeparator: '- ',
13587
13786
  lowerCase: true,
13588
13787
  },
13589
- _a[13 /* LowerRomanParenthesis */] = {
13788
+ _a[14 /* LowerRomanParenthesis */] = {
13590
13789
  markerType: MarkerTypes.Roman,
13591
13790
  markerSeparator: ') ',
13592
13791
  lowerCase: true,
13593
13792
  },
13594
- _a[14 /* LowerRomanDoubleParenthesis */] = {
13793
+ _a[15 /* LowerRomanDoubleParenthesis */] = {
13595
13794
  markerType: MarkerTypes.Roman,
13596
13795
  markerSeparator: ') ',
13597
13796
  markerSecondSeparator: '(',
13598
13797
  lowerCase: true,
13599
13798
  },
13600
- _a[16 /* UpperRoman */] = {
13799
+ _a[17 /* UpperRoman */] = {
13601
13800
  markerType: MarkerTypes.Roman,
13602
13801
  markerSeparator: '. ',
13603
13802
  },
13604
- _a[19 /* UpperRomanDash */] = {
13803
+ _a[20 /* UpperRomanDash */] = {
13605
13804
  markerType: MarkerTypes.Roman,
13606
13805
  markerSeparator: '- ',
13607
13806
  },
13608
- _a[17 /* UpperRomanParenthesis */] = {
13807
+ _a[18 /* UpperRomanParenthesis */] = {
13609
13808
  markerType: MarkerTypes.Roman,
13610
13809
  markerSeparator: ') ',
13611
13810
  },
13612
- _a[18 /* UpperRomanDoubleParenthesis */] = {
13811
+ _a[19 /* UpperRomanDoubleParenthesis */] = {
13613
13812
  markerType: MarkerTypes.Roman,
13614
13813
  markerSeparator: ') ',
13615
13814
  markerSecondSeparator: '(',
@@ -13805,6 +14004,7 @@ exports.removeMetadata = removeMetadata;
13805
14004
  "use strict";
13806
14005
 
13807
14006
  Object.defineProperty(exports, "__esModule", { value: true });
14007
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
13808
14008
  /**
13809
14009
  * Validate the given object with a type definition object
13810
14010
  * @param input The object to validate
@@ -13845,7 +14045,9 @@ function validate(input, def) {
13845
14045
  case 4 /* Object */:
13846
14046
  result =
13847
14047
  typeof input === 'object' &&
13848
- Object.keys(def.propertyDef).every(function (x) { return validate(input[x], def.propertyDef[x]); });
14048
+ (0, getObjectKeys_1.default)(def.propertyDef).every(function (x) {
14049
+ return validate(input[x], def.propertyDef[x]);
14050
+ });
13849
14051
  break;
13850
14052
  case 5 /* Customize */:
13851
14053
  result = def.validator(input);
@@ -15164,6 +15366,7 @@ exports.default = getStyles;
15164
15366
  "use strict";
15165
15367
 
15166
15368
  Object.defineProperty(exports, "__esModule", { value: true });
15369
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
15167
15370
  /**
15168
15371
  * Set styles to an HTML element. If styles are empty, remove 'style' attribute
15169
15372
  * @param element The element to set styles
@@ -15171,7 +15374,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
15171
15374
  */
15172
15375
  function setStyles(element, styles) {
15173
15376
  if (element) {
15174
- var style = Object.keys(styles || {})
15377
+ var style = (0, getObjectKeys_1.default)(styles || {})
15175
15378
  .map(function (name) {
15176
15379
  var value = styles[name];
15177
15380
  var trimmedName = name ? name.trim() : null;
@@ -15218,7 +15421,7 @@ var applyTableFormat_1 = __webpack_require__(/*! ./applyTableFormat */ "./packag
15218
15421
  var moveChildNodes_1 = __webpack_require__(/*! ../utils/moveChildNodes */ "./packages/roosterjs-editor-dom/lib/utils/moveChildNodes.ts");
15219
15422
  var normalizeRect_1 = __webpack_require__(/*! ../utils/normalizeRect */ "./packages/roosterjs-editor-dom/lib/utils/normalizeRect.ts");
15220
15423
  var safeInstanceOf_1 = __webpack_require__(/*! ../utils/safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
15221
- var toArray_1 = __webpack_require__(/*! ../utils/toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
15424
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
15222
15425
  var tableFormatInfo_1 = __webpack_require__(/*! ./tableFormatInfo */ "./packages/roosterjs-editor-dom/lib/table/tableFormatInfo.ts");
15223
15426
  var CELL_SHADE = 'cellShade';
15224
15427
  var DEFAULT_FORMAT = {
@@ -16377,29 +16580,6 @@ function applyFormat(element, format, isDarkMode) {
16377
16580
  exports.default = applyFormat;
16378
16581
 
16379
16582
 
16380
- /***/ }),
16381
-
16382
- /***/ "./packages/roosterjs-editor-dom/lib/utils/arrayPush.ts":
16383
- /*!**************************************************************!*\
16384
- !*** ./packages/roosterjs-editor-dom/lib/utils/arrayPush.ts ***!
16385
- \**************************************************************/
16386
- /*! no static exports found */
16387
- /***/ (function(module, exports, __webpack_require__) {
16388
-
16389
- "use strict";
16390
-
16391
- Object.defineProperty(exports, "__esModule", { value: true });
16392
- /**
16393
- * A type-safe wrapper for Array.prototype.push.apply()
16394
- * @param mainArray The main array to push items into
16395
- * @param itemsArray The items to push to main array
16396
- */
16397
- function arrayPush(mainArray, itemsArray) {
16398
- Array.prototype.push.apply(mainArray, itemsArray);
16399
- }
16400
- exports.default = arrayPush;
16401
-
16402
-
16403
16583
  /***/ }),
16404
16584
 
16405
16585
  /***/ "./packages/roosterjs-editor-dom/lib/utils/changeElementTag.ts":
@@ -16460,7 +16640,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
16460
16640
  exports.collapse = void 0;
16461
16641
  var contains_1 = __webpack_require__(/*! ./contains */ "./packages/roosterjs-editor-dom/lib/utils/contains.ts");
16462
16642
  var splitParentNode_1 = __webpack_require__(/*! ./splitParentNode */ "./packages/roosterjs-editor-dom/lib/utils/splitParentNode.ts");
16463
- var toArray_1 = __webpack_require__(/*! ./toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
16643
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
16464
16644
  /**
16465
16645
  * Collapse nodes within the given start and end nodes to their common ancestor node,
16466
16646
  * split parent nodes if necessary
@@ -16590,6 +16770,7 @@ function internalContains(container, contained) {
16590
16770
  var _a;
16591
16771
  Object.defineProperty(exports, "__esModule", { value: true });
16592
16772
  exports.KnownCreateElementData = void 0;
16773
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
16593
16774
  var safeInstanceOf_1 = __webpack_require__(/*! ./safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
16594
16775
  var Browser_1 = __webpack_require__(/*! ./Browser */ "./packages/roosterjs-editor-dom/lib/utils/Browser.ts");
16595
16776
  /**
@@ -16667,12 +16848,12 @@ function createElement(elementData, document) {
16667
16848
  result.className = className;
16668
16849
  }
16669
16850
  if (dataset && (0, safeInstanceOf_1.default)(result, 'HTMLElement')) {
16670
- Object.keys(dataset).forEach(function (datasetName) {
16851
+ (0, getObjectKeys_1.default)(dataset).forEach(function (datasetName) {
16671
16852
  result.dataset[datasetName] = dataset[datasetName];
16672
16853
  });
16673
16854
  }
16674
16855
  if (attributes) {
16675
- Object.keys(attributes).forEach(function (attrName) {
16856
+ (0, getObjectKeys_1.default)(attributes).forEach(function (attrName) {
16676
16857
  result.setAttribute(attrName, attributes[attrName]);
16677
16858
  });
16678
16859
  }
@@ -16746,7 +16927,7 @@ exports.default = findClosestElementAncestor;
16746
16927
  "use strict";
16747
16928
 
16748
16929
  Object.defineProperty(exports, "__esModule", { value: true });
16749
- var toArray_1 = __webpack_require__(/*! ./toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
16930
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
16750
16931
  /**
16751
16932
  * @deprecated
16752
16933
  * Creates an HTML node array from html
@@ -17002,6 +17183,7 @@ exports.getPreviousLeafSibling = getPreviousLeafSibling;
17002
17183
 
17003
17184
  Object.defineProperty(exports, "__esModule", { value: true });
17004
17185
  exports.PendableFormatCommandMap = void 0;
17186
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
17005
17187
  /**
17006
17188
  * A map from pendable format name to document command
17007
17189
  */
@@ -17037,7 +17219,7 @@ exports.PendableFormatCommandMap = {
17037
17219
  * @returns A PendableFormatState object which contains the values of pendable format states
17038
17220
  */
17039
17221
  function getPendableFormatState(document) {
17040
- var keys = Object.keys(exports.PendableFormatCommandMap);
17222
+ var keys = (0, getObjectKeys_1.default)(exports.PendableFormatCommandMap);
17041
17223
  return keys.reduce(function (state, key) {
17042
17224
  state[key] = document.queryCommandState(exports.PendableFormatCommandMap[key]);
17043
17225
  return state;
@@ -17149,7 +17331,7 @@ var ZERO_WIDTH_SPACE = /\u200b/g;
17149
17331
  * Default value is false
17150
17332
  * @returns True if there isn't any visible element inside node, otherwise false
17151
17333
  */
17152
- function isNodeEmpty(node, trimContent) {
17334
+ function isNodeEmpty(node, trimContent, shouldCountBrAsVisible) {
17153
17335
  if (!node) {
17154
17336
  return false;
17155
17337
  }
@@ -17159,9 +17341,12 @@ function isNodeEmpty(node, trimContent) {
17159
17341
  else if (node.nodeType == 1 /* Element */) {
17160
17342
  var element = node;
17161
17343
  var textContent = trim(element.textContent || '', trimContent);
17344
+ var visibleSelector = shouldCountBrAsVisible
17345
+ ? VISIBLE_CHILD_ELEMENT_SELECTOR + ",BR"
17346
+ : VISIBLE_CHILD_ELEMENT_SELECTOR;
17162
17347
  if (textContent != '' ||
17163
17348
  VISIBLE_ELEMENT_TAGS.indexOf((0, getTagOfNode_1.default)(element)) >= 0 ||
17164
- element.querySelectorAll(VISIBLE_CHILD_ELEMENT_SELECTOR)[0]) {
17349
+ element.querySelectorAll(visibleSelector)[0]) {
17165
17350
  return false;
17166
17351
  }
17167
17352
  }
@@ -17216,6 +17401,7 @@ exports.default = isVoidHtmlElement;
17216
17401
  "use strict";
17217
17402
 
17218
17403
  Object.defineProperty(exports, "__esModule", { value: true });
17404
+ var getObjectKeys_1 = __webpack_require__(/*! ../jsUtils/getObjectKeys */ "./packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts");
17219
17405
  // http exclude matching regex
17220
17406
  // invalid URL example (in particular on IE and Edge):
17221
17407
  // - http://www.bing.com%00, %00 before ? (question mark) is considered invalid. IE/Edge throws invalid argument exception
@@ -17278,7 +17464,7 @@ var linkMatchRules = {
17278
17464
  */
17279
17465
  function matchLink(url) {
17280
17466
  if (url) {
17281
- for (var _i = 0, _a = Object.keys(linkMatchRules); _i < _a.length; _i++) {
17467
+ for (var _i = 0, _a = (0, getObjectKeys_1.default)(linkMatchRules); _i < _a.length; _i++) {
17282
17468
  var schema = _a[_i];
17283
17469
  var rule = linkMatchRules[schema];
17284
17470
  var matches = url.match(rule.match);
@@ -17395,7 +17581,7 @@ exports.default = normalizeRect;
17395
17581
  "use strict";
17396
17582
 
17397
17583
  Object.defineProperty(exports, "__esModule", { value: true });
17398
- var toArray_1 = __webpack_require__(/*! ./toArray */ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts");
17584
+ var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
17399
17585
  /**
17400
17586
  * Query HTML elements in the container by a selector string
17401
17587
  * @param container Container element to query from
@@ -17506,10 +17692,9 @@ exports.getTargetWindow = void 0;
17506
17692
  /**
17507
17693
  * @internal Export for test only
17508
17694
  * Try get window from the given node or range
17509
- * @param source Source node or range
17695
+ * @param node Source node to get window from
17510
17696
  */
17511
- function getTargetWindow(source) {
17512
- var node = source && (source.commonAncestorContainer || source);
17697
+ function getTargetWindow(node) {
17513
17698
  var document = node &&
17514
17699
  (node.ownerDocument ||
17515
17700
  (Object.prototype.toString.apply(node) == '[object HTMLDocument]'
@@ -17526,6 +17711,11 @@ exports.getTargetWindow = getTargetWindow;
17526
17711
  * @param typeName Target type name
17527
17712
  */
17528
17713
  function safeInstanceOf(obj, typeName) {
17714
+ var _a;
17715
+ if (typeName == 'Range') {
17716
+ return (Object.prototype.toString.apply(obj) == '[object Range]' &&
17717
+ !!((_a = obj) === null || _a === void 0 ? void 0 : _a.commonAncestorContainer));
17718
+ }
17529
17719
  var targetWindow = getTargetWindow(obj);
17530
17720
  var targetType = targetWindow && targetWindow[typeName];
17531
17721
  var mainWindow = window;
@@ -17855,24 +18045,6 @@ function splitTextNode(textNode, offset, returnFirstPart) {
17855
18045
  exports.default = splitTextNode;
17856
18046
 
17857
18047
 
17858
- /***/ }),
17859
-
17860
- /***/ "./packages/roosterjs-editor-dom/lib/utils/toArray.ts":
17861
- /*!************************************************************!*\
17862
- !*** ./packages/roosterjs-editor-dom/lib/utils/toArray.ts ***!
17863
- \************************************************************/
17864
- /*! no static exports found */
17865
- /***/ (function(module, exports, __webpack_require__) {
17866
-
17867
- "use strict";
17868
-
17869
- Object.defineProperty(exports, "__esModule", { value: true });
17870
- function toArray(collection) {
17871
- return [].slice.call(collection);
17872
- }
17873
- exports.default = toArray;
17874
-
17875
-
17876
18048
  /***/ }),
17877
18049
 
17878
18050
  /***/ "./packages/roosterjs-editor-dom/lib/utils/unwrap.ts":
@@ -18551,6 +18723,7 @@ Object.defineProperty(exports, "AutoFormat", { enumerable: true, get: function (
18551
18723
 
18552
18724
  Object.defineProperty(exports, "__esModule", { value: true });
18553
18725
  var getAllFeatures_1 = __webpack_require__(/*! ./getAllFeatures */ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/getAllFeatures.ts");
18726
+ var lib_1 = __webpack_require__(/*! roosterjs-editor-dom/lib */ "./packages/roosterjs-editor-dom/lib/index.ts");
18554
18727
  /**
18555
18728
  * An editor plugin to handle content edit event.
18556
18729
  * The following cases are included:
@@ -18587,7 +18760,7 @@ var ContentEdit = /** @class */ (function () {
18587
18760
  var _this = this;
18588
18761
  var features = [];
18589
18762
  var allFeatures = (0, getAllFeatures_1.default)();
18590
- Object.keys(allFeatures).forEach(function (key) {
18763
+ (0, lib_1.getObjectKeys)(allFeatures).forEach(function (key) {
18591
18764
  var feature = allFeatures[key];
18592
18765
  var hasSettingForKey = _this.settingsOverride && _this.settingsOverride[key] !== undefined;
18593
18766
  if ((hasSettingForKey && _this.settingsOverride[key]) ||
@@ -18935,8 +19108,8 @@ exports.EntityFeatures = {
18935
19108
 
18936
19109
  Object.defineProperty(exports, "__esModule", { value: true });
18937
19110
  exports.ListFeatures = void 0;
18938
- var getListStyle_1 = __webpack_require__(/*! ../utils/getListStyle */ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListStyle.ts");
18939
- var getListType_1 = __webpack_require__(/*! ../utils/getListType */ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListType.ts");
19111
+ var getAutoBulletListStyle_1 = __webpack_require__(/*! ../utils/getAutoBulletListStyle */ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoBulletListStyle.ts");
19112
+ var getAutoNumberingListStyle_1 = __webpack_require__(/*! ../utils/getAutoNumberingListStyle */ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoNumberingListStyle.ts");
18940
19113
  var roosterjs_editor_api_1 = __webpack_require__(/*! roosterjs-editor-api */ "./packages/roosterjs-editor-api/lib/index.ts");
18941
19114
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
18942
19115
  /**
@@ -19061,15 +19234,10 @@ var AutoBullet = {
19061
19234
  if (!cacheGetListElement(event, editor)) {
19062
19235
  var searcher = editor.getContentSearcherOfCursor(event);
19063
19236
  var textBeforeCursor = searcher.getSubStringBefore(4);
19064
- var listTrigger = function (text) {
19065
- return editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)
19066
- ? (0, getListType_1.default)(text)
19067
- : isAListPattern(text);
19068
- };
19069
19237
  // Auto list is triggered if:
19070
19238
  // 1. Text before cursor exactly matches '*', '-' or '1.'
19071
19239
  // 2. There's no non-text inline entities before cursor
19072
- return listTrigger(textBeforeCursor) && !searcher.getNearestNonTextInlineElement();
19240
+ return isAListPattern(textBeforeCursor) && !searcher.getNearestNonTextInlineElement();
19073
19241
  }
19074
19242
  return false;
19075
19243
  },
@@ -19082,36 +19250,92 @@ var AutoBullet = {
19082
19250
  var searcher = editor.getContentSearcherOfCursor();
19083
19251
  var textBeforeCursor = searcher.getSubStringBefore(4);
19084
19252
  var textRange = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/);
19085
- var listType = 0 /* None */;
19086
- var listStyle;
19087
- if (editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)) {
19088
- listType = (0, getListType_1.default)(textBeforeCursor);
19089
- listStyle = (0, getListStyle_1.default)(textBeforeCursor, listType);
19090
- }
19091
- else {
19092
- listType =
19093
- textBeforeCursor.indexOf('*') == 0 || textBeforeCursor.indexOf('-') == 0
19094
- ? 2 /* Unordered */
19095
- : isAListPattern(textBeforeCursor)
19096
- ? 1 /* Ordered */
19097
- : 0 /* None */;
19098
- }
19099
19253
  if (!textRange) {
19100
19254
  // no op if the range can't be found
19101
19255
  }
19102
- else if (listType === 2 /* Unordered */) {
19256
+ else if (textBeforeCursor.indexOf('*') == 0 ||
19257
+ textBeforeCursor.indexOf('-') == 0) {
19103
19258
  prepareAutoBullet(editor, textRange);
19104
- (0, roosterjs_editor_api_1.toggleBullet)(editor, listStyle);
19259
+ (0, roosterjs_editor_api_1.toggleBullet)(editor);
19105
19260
  }
19106
- else if (listType === 1 /* Ordered */) {
19261
+ else if (isAListPattern(textBeforeCursor)) {
19107
19262
  prepareAutoBullet(editor, textRange);
19108
- (0, roosterjs_editor_api_1.toggleNumbering)(editor, undefined /* startNumber*/, listStyle);
19263
+ (0, roosterjs_editor_api_1.toggleNumbering)(editor);
19264
+ }
19265
+ else if ((regions = editor.getSelectedRegions()) && regions.length == 1) {
19266
+ var num = parseInt(textBeforeCursor);
19267
+ prepareAutoBullet(editor, textRange);
19268
+ (0, roosterjs_editor_api_1.toggleNumbering)(editor, num);
19269
+ }
19270
+ (_a = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/)) === null || _a === void 0 ? void 0 : _a.deleteContents();
19271
+ }, null /*changeSource*/, true /*canUndoByBackspace*/);
19272
+ },
19273
+ };
19274
+ /**
19275
+ * Requires @see ExperimentalFeatures.AutoFormatList to be enabled
19276
+ * AutoBulletList edit feature, provides the ability to automatically convert current line into a bullet list.
19277
+ */
19278
+ var AutoBulletList = {
19279
+ keys: [32 /* SPACE */],
19280
+ shouldHandleEvent: function (event, editor) {
19281
+ if (!cacheGetListElement(event, editor) &&
19282
+ editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)) {
19283
+ return shouldTriggerList(event, editor, getAutoBulletListStyle_1.default);
19284
+ }
19285
+ return false;
19286
+ },
19287
+ handleEvent: function (event, editor) {
19288
+ editor.insertContent('&nbsp;');
19289
+ event.rawEvent.preventDefault();
19290
+ editor.addUndoSnapshot(function () {
19291
+ var _a;
19292
+ var searcher = editor.getContentSearcherOfCursor();
19293
+ var textBeforeCursor = searcher.getSubStringBefore(5);
19294
+ var textRange = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/);
19295
+ var listStyle = (0, getAutoBulletListStyle_1.default)(textBeforeCursor);
19296
+ if (textRange) {
19297
+ prepareAutoBullet(editor, textRange);
19298
+ (0, roosterjs_editor_api_1.toggleBullet)(editor, listStyle);
19299
+ }
19300
+ (_a = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/)) === null || _a === void 0 ? void 0 : _a.deleteContents();
19301
+ }, null /*changeSource*/, true /*canUndoByBackspace*/);
19302
+ },
19303
+ };
19304
+ /**
19305
+ * Requires @see ExperimentalFeatures.AutoFormatList to be enabled
19306
+ * AutoNumberingList edit feature, provides the ability to automatically convert current line into a numbering list.
19307
+ */
19308
+ var AutoNumberingList = {
19309
+ keys: [32 /* SPACE */],
19310
+ shouldHandleEvent: function (event, editor) {
19311
+ if (!cacheGetListElement(event, editor) &&
19312
+ editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)) {
19313
+ return shouldTriggerList(event, editor, getAutoNumberingListStyle_1.default);
19314
+ }
19315
+ return false;
19316
+ },
19317
+ handleEvent: function (event, editor) {
19318
+ editor.insertContent('&nbsp;');
19319
+ event.rawEvent.preventDefault();
19320
+ editor.addUndoSnapshot(function () {
19321
+ var _a;
19322
+ var regions;
19323
+ var searcher = editor.getContentSearcherOfCursor();
19324
+ var textBeforeCursor = searcher.getSubStringBefore(5);
19325
+ var textRange = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/);
19326
+ var listStyle = (0, getAutoNumberingListStyle_1.default)(textBeforeCursor);
19327
+ if (!textRange) {
19328
+ // no op if the range can't be found
19109
19329
  }
19110
19330
  else if ((regions = editor.getSelectedRegions()) && regions.length == 1) {
19111
19331
  var num = parseInt(textBeforeCursor);
19112
19332
  prepareAutoBullet(editor, textRange);
19113
19333
  (0, roosterjs_editor_api_1.toggleNumbering)(editor, num, listStyle);
19114
19334
  }
19335
+ else {
19336
+ prepareAutoBullet(editor, textRange);
19337
+ (0, roosterjs_editor_api_1.toggleNumbering)(editor, undefined /* startNumber*/, listStyle);
19338
+ }
19115
19339
  (_a = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/)) === null || _a === void 0 ? void 0 : _a.deleteContents();
19116
19340
  }, null /*changeSource*/, true /*canUndoByBackspace*/);
19117
19341
  },
@@ -19178,6 +19402,12 @@ function cacheGetListElement(event, editor) {
19178
19402
  var listElement = li && (0, roosterjs_editor_dom_1.getTagOfNode)(li) == 'LI' && editor.getElementAtCursor('UL,OL', li);
19179
19403
  return listElement ? [listElement, li] : null;
19180
19404
  }
19405
+ function shouldTriggerList(event, editor, getListStyle) {
19406
+ var searcher = editor.getContentSearcherOfCursor(event);
19407
+ var textBeforeCursor = searcher.getSubStringBefore(4);
19408
+ var itHasSpace = /\s/g.test(textBeforeCursor);
19409
+ return (!itHasSpace && !searcher.getNearestNonTextInlineElement() && getListStyle(textBeforeCursor));
19410
+ }
19181
19411
  /**
19182
19412
  * @internal
19183
19413
  */
@@ -19190,6 +19420,8 @@ exports.ListFeatures = {
19190
19420
  mergeInNewLineWhenBackspaceOnFirstChar: MergeInNewLine,
19191
19421
  maintainListChain: MaintainListChain,
19192
19422
  maintainListChainWhenDelete: MaintainListChainWhenDelete,
19423
+ autoNumberingList: AutoNumberingList,
19424
+ autoBulletList: AutoBulletList,
19193
19425
  };
19194
19426
 
19195
19427
 
@@ -19530,7 +19762,7 @@ var CHILD_PARENT_TAG_MAP = {
19530
19762
  TH: 'TABLE',
19531
19763
  LI: 'OL,UL',
19532
19764
  };
19533
- var CHILD_SELECTOR = Object.keys(CHILD_PARENT_TAG_MAP).join(',');
19765
+ var CHILD_SELECTOR = (0, roosterjs_editor_dom_1.getObjectKeys)(CHILD_PARENT_TAG_MAP).join(',');
19534
19766
  /**
19535
19767
  * InsertLineBeforeStructuredNode edit feature, provides the ability to insert an empty line before
19536
19768
  * a structured element (bullet/numbering list, blockquote, table) if the element is at beginning of
@@ -19964,10 +20196,48 @@ Object.defineProperty(exports, "getAllFeatures", { enumerable: true, get: functi
19964
20196
 
19965
20197
  /***/ }),
19966
20198
 
19967
- /***/ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListStyle.ts":
19968
- /*!*****************************************************************************************!*\
19969
- !*** ./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListStyle.ts ***!
19970
- \*****************************************************************************************/
20199
+ /***/ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoBulletListStyle.ts":
20200
+ /*!***************************************************************************************************!*\
20201
+ !*** ./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoBulletListStyle.ts ***!
20202
+ \***************************************************************************************************/
20203
+ /*! no static exports found */
20204
+ /***/ (function(module, exports, __webpack_require__) {
20205
+
20206
+ "use strict";
20207
+
20208
+ Object.defineProperty(exports, "__esModule", { value: true });
20209
+ var bulletListType = {
20210
+ '*': 1 /* Disc */,
20211
+ '-': 2 /* Dash */,
20212
+ '--': 3 /* Square */,
20213
+ '->': 5 /* LongArrow */,
20214
+ '-->': 5 /* LongArrow */,
20215
+ '=>': 6 /* UnfilledArrow */,
20216
+ '>': 4 /* ShortArrow */,
20217
+ '—': 7 /* Hyphen */,
20218
+ };
20219
+ var identifyBulletListType = function (bullet) {
20220
+ return bulletListType[bullet] || null;
20221
+ };
20222
+ /**
20223
+ * @internal
20224
+ * @param textBeforeCursor The trigger character
20225
+ * @returns The style of a bullet list triggered by a string
20226
+ */
20227
+ function getAutoBulletListStyle(textBeforeCursor) {
20228
+ var trigger = textBeforeCursor.trim();
20229
+ var bulletType = identifyBulletListType(trigger);
20230
+ return bulletType;
20231
+ }
20232
+ exports.default = getAutoBulletListStyle;
20233
+
20234
+
20235
+ /***/ }),
20236
+
20237
+ /***/ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoNumberingListStyle.ts":
20238
+ /*!******************************************************************************************************!*\
20239
+ !*** ./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoNumberingListStyle.ts ***!
20240
+ \******************************************************************************************************/
19971
20241
  /*! no static exports found */
19972
20242
  /***/ (function(module, exports, __webpack_require__) {
19973
20243
 
@@ -19976,145 +20246,100 @@ Object.defineProperty(exports, "getAllFeatures", { enumerable: true, get: functi
19976
20246
  var _a, _b, _c, _d, _e, _f;
19977
20247
  Object.defineProperty(exports, "__esModule", { value: true });
19978
20248
  var characters = {
19979
- '.': 0 /* Dot */,
19980
- '-': 1 /* Dash */,
19981
- ')': 2 /* Parenthesis */,
19982
- '(': 3 /* DoubleParenthesis */,
20249
+ '.': 1 /* Dot */,
20250
+ '-': 2 /* Dash */,
20251
+ ')': 3 /* Parenthesis */,
20252
+ '(': 4 /* DoubleParenthesis */,
19983
20253
  };
19984
- var identifyCharacter = function (text) {
19985
- var char = text[0] === '(' ? text[0] : text[text.length - 1];
19986
- return characters[char];
20254
+ var identifyCharacter = function (text, secondSeparator) {
20255
+ var charType = characters[text];
20256
+ return charType === 4 /* DoubleParenthesis */ && secondSeparator !== ')'
20257
+ ? undefined
20258
+ : charType;
19987
20259
  };
19988
20260
  var identifyNumberingType = function (text) {
19989
- var char = text[0] === '(' ? text[1] : text[0];
19990
- if (!isNaN(parseInt(char))) {
19991
- return 0 /* Decimal */;
20261
+ if (!isNaN(parseInt(text))) {
20262
+ return 1 /* Decimal */;
19992
20263
  }
19993
- else if (/[a-z]+/g.test(char)) {
19994
- if (char === 'i') {
19995
- return 3 /* LowerRoman */;
20264
+ else if (/[a-z]+/g.test(text)) {
20265
+ if (text === 'i') {
20266
+ return 4 /* LowerRoman */;
19996
20267
  }
19997
20268
  else {
19998
- return 1 /* LowerAlpha */;
20269
+ return 2 /* LowerAlpha */;
19999
20270
  }
20000
20271
  }
20001
- else if (/[A-Z]+/g.test(char)) {
20002
- if (char === 'I') {
20003
- return 4 /* UpperRoman */;
20272
+ else if (/[A-Z]+/g.test(text)) {
20273
+ if (text === 'I') {
20274
+ return 5 /* UpperRoman */;
20004
20275
  }
20005
20276
  else {
20006
- return 2 /* UpperAlpha */;
20277
+ return 3 /* UpperAlpha */;
20007
20278
  }
20008
20279
  }
20009
20280
  };
20010
20281
  var numberingListTypes = (_a = {},
20011
- _a[0 /* Decimal */] = function (char) { return DecimalsTypes[char]; },
20012
- _a[1 /* LowerAlpha */] = function (char) { return LowerAlphaTypes[char]; },
20013
- _a[2 /* UpperAlpha */] = function (char) { return UpperAlphaTypes[char]; },
20014
- _a[3 /* LowerRoman */] = function (char) { return LowerRomanTypes[char]; },
20015
- _a[4 /* UpperRoman */] = function (char) { return UpperRomanTypes[char]; },
20282
+ _a[1 /* Decimal */] = function (char) { return DecimalsTypes[char] || null; },
20283
+ _a[2 /* LowerAlpha */] = function (char) { return LowerAlphaTypes[char] || null; },
20284
+ _a[3 /* UpperAlpha */] = function (char) { return UpperAlphaTypes[char] || null; },
20285
+ _a[4 /* LowerRoman */] = function (char) { return LowerRomanTypes[char] || null; },
20286
+ _a[5 /* UpperRoman */] = function (char) { return UpperRomanTypes[char] || null; },
20016
20287
  _a);
20017
20288
  var UpperRomanTypes = (_b = {},
20018
- _b[0 /* Dot */] = 16 /* UpperRoman */,
20019
- _b[1 /* Dash */] = 19 /* UpperRomanDash */,
20020
- _b[2 /* Parenthesis */] = 17 /* UpperRomanParenthesis */,
20021
- _b[3 /* DoubleParenthesis */] = 18 /* UpperRomanDoubleParenthesis */,
20289
+ _b[1 /* Dot */] = 17 /* UpperRoman */,
20290
+ _b[2 /* Dash */] = 20 /* UpperRomanDash */,
20291
+ _b[3 /* Parenthesis */] = 18 /* UpperRomanParenthesis */,
20292
+ _b[4 /* DoubleParenthesis */] = 19 /* UpperRomanDoubleParenthesis */,
20022
20293
  _b);
20023
20294
  var LowerRomanTypes = (_c = {},
20024
- _c[0 /* Dot */] = 12 /* LowerRoman */,
20025
- _c[1 /* Dash */] = 15 /* LowerRomanDash */,
20026
- _c[2 /* Parenthesis */] = 13 /* LowerRomanParenthesis */,
20027
- _c[3 /* DoubleParenthesis */] = 14 /* LowerRomanDoubleParenthesis */,
20295
+ _c[1 /* Dot */] = 13 /* LowerRoman */,
20296
+ _c[2 /* Dash */] = 16 /* LowerRomanDash */,
20297
+ _c[3 /* Parenthesis */] = 14 /* LowerRomanParenthesis */,
20298
+ _c[4 /* DoubleParenthesis */] = 15 /* LowerRomanDoubleParenthesis */,
20028
20299
  _c);
20029
20300
  var UpperAlphaTypes = (_d = {},
20030
- _d[0 /* Dot */] = 8 /* UpperAlpha */,
20031
- _d[1 /* Dash */] = 11 /* UpperAlphaDash */,
20032
- _d[2 /* Parenthesis */] = 9 /* UpperAlphaParenthesis */,
20033
- _d[3 /* DoubleParenthesis */] = 10 /* UpperAlphaDoubleParenthesis */,
20301
+ _d[1 /* Dot */] = 9 /* UpperAlpha */,
20302
+ _d[2 /* Dash */] = 12 /* UpperAlphaDash */,
20303
+ _d[3 /* Parenthesis */] = 10 /* UpperAlphaParenthesis */,
20304
+ _d[4 /* DoubleParenthesis */] = 11 /* UpperAlphaDoubleParenthesis */,
20034
20305
  _d);
20035
20306
  var LowerAlphaTypes = (_e = {},
20036
- _e[0 /* Dot */] = 4 /* LowerAlpha */,
20037
- _e[1 /* Dash */] = 7 /* LowerAlphaDash */,
20038
- _e[2 /* Parenthesis */] = 5 /* LowerAlphaParenthesis */,
20039
- _e[3 /* DoubleParenthesis */] = 6 /* LowerAlphaDoubleParenthesis */,
20307
+ _e[1 /* Dot */] = 5 /* LowerAlpha */,
20308
+ _e[2 /* Dash */] = 8 /* LowerAlphaDash */,
20309
+ _e[3 /* Parenthesis */] = 6 /* LowerAlphaParenthesis */,
20310
+ _e[4 /* DoubleParenthesis */] = 7 /* LowerAlphaDoubleParenthesis */,
20040
20311
  _e);
20041
20312
  var DecimalsTypes = (_f = {},
20042
- _f[0 /* Dot */] = 0 /* Decimal */,
20043
- _f[1 /* Dash */] = 1 /* DecimalDash */,
20044
- _f[2 /* Parenthesis */] = 2 /* DecimalParenthesis */,
20045
- _f[3 /* DoubleParenthesis */] = 3 /* DecimalDoubleParenthesis */,
20313
+ _f[1 /* Dot */] = 1 /* Decimal */,
20314
+ _f[2 /* Dash */] = 2 /* DecimalDash */,
20315
+ _f[3 /* Parenthesis */] = 3 /* DecimalParenthesis */,
20316
+ _f[4 /* DoubleParenthesis */] = 4 /* DecimalDoubleParenthesis */,
20046
20317
  _f);
20047
- var bulletListType = {
20048
- '*': 0 /* Disc */,
20049
- '-': 1 /* Dash */,
20050
- '--': 2 /* Square */,
20051
- '->': 4 /* LongArrow */,
20052
- '-->': 4 /* LongArrow */,
20053
- '=>': 5 /* UnfilledArrow */,
20054
- '>': 3 /* ShortArrow */,
20055
- };
20056
- var identifyNumberingListType = function (textBeforeCursor) {
20057
- var numbering = textBeforeCursor.replace(/\s/g, '');
20058
- var char = identifyCharacter(numbering);
20059
- var numberingType = identifyNumberingType(numbering);
20060
- return numberingListTypes[numberingType](char);
20061
- };
20062
- var identifyBulletListType = function (textBeforeCursor) {
20063
- var bullet = textBeforeCursor.replace(/\s/g, '');
20064
- return bulletListType[bullet];
20065
- };
20066
- /**
20067
- * @internal
20068
- * @param textBeforeCursor The trigger character
20069
- * @param listType The type of the list (ordered or unordered)
20070
- * @returns the style of the list
20071
- */
20072
- function getListStyle(textBeforeCursor, listType) {
20073
- if (listType === 1 /* Ordered */) {
20074
- return identifyNumberingListType(textBeforeCursor);
20318
+ var identifyNumberingListType = function (numbering) {
20319
+ // 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.
20320
+ var separator = numbering.length === 3 ? numbering[0] : numbering[1];
20321
+ var secondSeparator = numbering.length === 3 ? numbering[2] : undefined;
20322
+ var char = identifyCharacter(separator, secondSeparator);
20323
+ // if separator is not valid, no need to check if the number is valid.
20324
+ if (char) {
20325
+ var number = numbering.length === 3 ? numbering[1] : numbering[0];
20326
+ var numberingType = identifyNumberingType(number);
20327
+ return numberingType ? numberingListTypes[numberingType](char) : null;
20075
20328
  }
20076
- else {
20077
- return identifyBulletListType(textBeforeCursor);
20078
- }
20079
- }
20080
- exports.default = getListStyle;
20081
-
20082
-
20083
- /***/ }),
20084
-
20085
- /***/ "./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListType.ts":
20086
- /*!****************************************************************************************!*\
20087
- !*** ./packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getListType.ts ***!
20088
- \****************************************************************************************/
20089
- /*! no static exports found */
20090
- /***/ (function(module, exports, __webpack_require__) {
20091
-
20092
- "use strict";
20093
-
20094
- Object.defineProperty(exports, "__esModule", { value: true });
20095
- function isABulletList(textBeforeCursor) {
20096
- var hasTriggers = ['*', '-', '>'].indexOf(textBeforeCursor[0]) > -1;
20097
- var REGEX = /^(.*?)=>|^(.*?)->|^(.*?)-->|^(.*?)=>|^(.*?)--/;
20098
- return hasTriggers || REGEX.test(textBeforeCursor);
20099
- }
20100
- function isANumberingList(textBeforeCursor) {
20101
- var REGEX = /^([1-9,a-z, i,A-Z,I]{1,2}\.|[1-9,a-z, i,A-Z,I]{1,2}\)|[1-9,a-z, i,A-Z,I]{1,2}\-|\([1-9,a-z, i,A-Z,I]{1,2}\))$/;
20102
- return REGEX.test(textBeforeCursor.replace(/\s/g, ''));
20103
- }
20329
+ return null;
20330
+ };
20104
20331
  /**
20105
20332
  * @internal
20106
20333
  * @param textBeforeCursor The trigger character
20107
- * @returns If the list is ordered or unordered
20334
+ * @returns The style of a numbering list triggered by a string
20108
20335
  */
20109
- function getListType(textBeforeCursor) {
20110
- if (isABulletList(textBeforeCursor)) {
20111
- return 2 /* Unordered */;
20112
- }
20113
- else if (isANumberingList(textBeforeCursor)) {
20114
- return 1 /* Ordered */;
20115
- }
20336
+ function getAutoNumberingListStyle(textBeforeCursor) {
20337
+ var trigger = textBeforeCursor.trim();
20338
+ // the marker must be a combination of 2 or 3 characters, so if the length is less than 2, no need to check
20339
+ var numberingType = trigger.length > 1 ? identifyNumberingListType(trigger) : null;
20340
+ return numberingType;
20116
20341
  }
20117
- exports.default = getListType;
20342
+ exports.default = getAutoNumberingListStyle;
20118
20343
 
20119
20344
 
20120
20345
  /***/ }),
@@ -20906,7 +21131,7 @@ var ImageEdit = /** @class */ (function () {
20906
21131
  this.editor = editor;
20907
21132
  this.disposer = editor.addDomEventHandler('blur', this.onBlur);
20908
21133
  // Read current enabled features from editor to determine which editing operations are allowed
20909
- Object.keys(FeatureToOperationMap).forEach(function (key) {
21134
+ (0, roosterjs_editor_dom_1.getObjectKeys)(FeatureToOperationMap).forEach(function (key) {
20910
21135
  _this.allowedOperations |= _this.editor.isFeatureEnabled(key)
20911
21136
  ? FeatureToOperationMap[key]
20912
21137
  : 0;
@@ -20991,14 +21216,13 @@ var ImageEdit = /** @class */ (function () {
20991
21216
  // When there is image in editing, clean up any cached objects and elements
20992
21217
  this.clearDndHelpers();
20993
21218
  // Apply the changes, and add undo snapshot if necessary
20994
- if ((0, applyChange_1.default)(this.editor, this.image, this.editInfo, this.lastSrc, this.wasResized)) {
20995
- this.editor.addUndoSnapshot(function () { return _this.image; }, "ImageResize" /* ImageResize */);
20996
- }
21219
+ (0, applyChange_1.default)(this.editor, this.image, this.editInfo, this.lastSrc, this.wasResized);
20997
21220
  // Remove editing wrapper
20998
21221
  var wrapper = this.getImageWrapper(this.image);
20999
21222
  if (wrapper) {
21000
21223
  this.removeWrapper(wrapper);
21001
21224
  }
21225
+ this.editor.addUndoSnapshot(function () { return _this.image; }, "ImageResize" /* ImageResize */);
21002
21226
  if (selectImage) {
21003
21227
  this.editor.select(this.image);
21004
21228
  }
@@ -21046,7 +21270,7 @@ var ImageEdit = /** @class */ (function () {
21046
21270
  var isExperimentalHandlesEnabled = this.editor.isFeatureEnabled("AdaptiveHandlesResizer" /* AdaptiveHandlesResizer */);
21047
21271
  // Get HTML for all edit elements (resize handle, rotate handle, crop handle and overlay, ...) and create HTML element
21048
21272
  var options = {
21049
- borderColor: this.options.borderColor,
21273
+ borderColor: getColorString(this.options.borderColor, this.editor.isDarkMode()),
21050
21274
  rotateIconHTML: this.options.rotateIconHTML,
21051
21275
  rotateHandleBackColor: this.editor.isDarkMode()
21052
21276
  ? DARK_MODE_BGCOLOR
@@ -21055,7 +21279,7 @@ var ImageEdit = /** @class */ (function () {
21055
21279
  handlesExperimentalFeatures: isExperimentalHandlesEnabled,
21056
21280
  };
21057
21281
  var htmlData = [(0, Resizer_1.getResizeBordersHTML)(options)];
21058
- Object.keys(ImageEditHTMLMap).forEach(function (thisOperation) {
21282
+ (0, roosterjs_editor_dom_1.getObjectKeys)(ImageEditHTMLMap).forEach(function (thisOperation) {
21059
21283
  if ((operation & thisOperation) == thisOperation) {
21060
21284
  (0, roosterjs_editor_dom_1.arrayPush)(htmlData, ImageEditHTMLMap[thisOperation](options, _this.onShowResizeHandle));
21061
21285
  }
@@ -21176,6 +21400,12 @@ function isASmallImage(editInfo, isFeatureEnabled) {
21176
21400
  var widthPx = editInfo.widthPx, heightPx = editInfo.heightPx;
21177
21401
  return widthPx && heightPx && widthPx * widthPx < MAX_SMALL_SIZE_IMAGE && isFeatureEnabled;
21178
21402
  }
21403
+ function getColorString(color, isDarkMode) {
21404
+ if (typeof color === 'string') {
21405
+ return color.trim();
21406
+ }
21407
+ return isDarkMode ? color.darkModeColor.trim() : color.lightModeColor.trim();
21408
+ }
21179
21409
 
21180
21410
 
21181
21411
  /***/ }),
@@ -21355,7 +21585,6 @@ var editInfo_1 = __webpack_require__(/*! ./editInfo */ "./packages/roosterjs-edi
21355
21585
  * @param image The image to apply the change
21356
21586
  * @param editInfo Edit info that contains the changed information of the image
21357
21587
  * @param previousSrc Last src value of the image before the change was made
21358
- * @returns True if the image is changed, otherwise false
21359
21588
  */
21360
21589
  function applyChange(editor, image, editInfo, previousSrc, wasResized) {
21361
21590
  var newSrc = '';
@@ -21402,9 +21631,6 @@ function applyChange(editor, image, editInfo, previousSrc, wasResized) {
21402
21631
  var _a = (0, getGeneratedImageSize_1.default)(editInfo), targetWidth = _a.targetWidth, targetHeight = _a.targetHeight;
21403
21632
  image.src = newSrc;
21404
21633
  setImageSize(image, wasResized, targetWidth, targetHeight);
21405
- return (srcChanged ||
21406
- editInfo.widthPx != initEditInfo.widthPx ||
21407
- editInfo.heightPx != initEditInfo.heightPx);
21408
21634
  }
21409
21635
  exports.default = applyChange;
21410
21636
  /**
@@ -23202,7 +23428,9 @@ function getAndSetNodeId(wordCustomData, element) {
23202
23428
 
23203
23429
  Object.defineProperty(exports, "__esModule", { value: true });
23204
23430
  var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
23431
+ var MSO_COMMENT_PARENT = 'mso-comment-parent';
23205
23432
  var MSO_COMMENT_REFERENCE = 'mso-comment-reference';
23433
+ var MSO_COMMENT_DATE = 'mso-comment-date';
23206
23434
  var MSO_COMMENT_ANCHOR_HREF_REGEX = /#_msocom_/;
23207
23435
  var MSO_SPECIAL_CHARACTER = 'mso-special-character';
23208
23436
  var MSO_SPECIAL_CHARACTER_COMMENT = 'comment';
@@ -23213,7 +23441,7 @@ var MSO_ELEMENT_COMMENT_LIST = 'comment-list';
23213
23441
  * @internal
23214
23442
  * Removes comments when pasting Word content.
23215
23443
  */
23216
- function commentsRemoval(elementCallbacks) {
23444
+ function commentsRemoval(elementCallbacks, styleCallbacks) {
23217
23445
  // 1st Step, Remove SPAN elements added after each comment.
23218
23446
  // Word adds multiple elements for comments as SPAN elements.
23219
23447
  // In this step we remove these elements:
@@ -23245,11 +23473,7 @@ function commentsRemoval(elementCallbacks) {
23245
23473
  // In this step we remove this Anchor elements.
23246
23474
  (0, roosterjs_editor_dom_1.chainSanitizerCallback)(elementCallbacks, 'A', function (element) {
23247
23475
  var _a;
23248
- var styles = (0, roosterjs_editor_dom_1.getStyles)(element);
23249
- if (!!styles[MSO_COMMENT_REFERENCE]) {
23250
- (0, roosterjs_editor_dom_1.changeElementTag)(element, 'span');
23251
- }
23252
- else if ((0, roosterjs_editor_dom_1.safeInstanceOf)(element, 'HTMLAnchorElement') &&
23476
+ if ((0, roosterjs_editor_dom_1.safeInstanceOf)(element, 'HTMLAnchorElement') &&
23253
23477
  MSO_COMMENT_ANCHOR_HREF_REGEX.test(element.href)) {
23254
23478
  (_a = element.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(element);
23255
23479
  }
@@ -23274,6 +23498,13 @@ function commentsRemoval(elementCallbacks) {
23274
23498
  }
23275
23499
  return true;
23276
23500
  });
23501
+ /**
23502
+ * Remove styles related to Office Comments that can cause unwanted behaviors
23503
+ * depending on the user client
23504
+ */
23505
+ (0, roosterjs_editor_dom_1.chainSanitizerCallback)(styleCallbacks, MSO_COMMENT_REFERENCE, function () { return false; });
23506
+ (0, roosterjs_editor_dom_1.chainSanitizerCallback)(styleCallbacks, MSO_COMMENT_DATE, function () { return false; });
23507
+ (0, roosterjs_editor_dom_1.chainSanitizerCallback)(styleCallbacks, MSO_COMMENT_PARENT, function () { return false; });
23277
23508
  }
23278
23509
  exports.default = commentsRemoval;
23279
23510
 
@@ -23340,7 +23571,7 @@ function convertPastedContentFromWord(event) {
23340
23571
  }
23341
23572
  return true;
23342
23573
  });
23343
- (0, commentsRemoval_1.default)(sanitizingOption.elementCallbacks);
23574
+ (0, commentsRemoval_1.default)(sanitizingOption.elementCallbacks, sanitizingOption.cssStyleCallbacks);
23344
23575
  }
23345
23576
  exports.default = convertPastedContentFromWord;
23346
23577
 
@@ -23891,8 +24122,6 @@ var UNIDENTIFIED_CODE = [0, 229];
23891
24122
  * - Apply selected item in picker
23892
24123
  *
23893
24124
  * PickerPlugin doesn't provide any UI, it just wraps related DOM events and invoke callback functions.
23894
- * To show a picker UI, you need to build your own UI component. Please reference to
23895
- * https://github.com/microsoft/roosterjs/tree/master/demo/scripts/controls/samplepicker
23896
24125
  */
23897
24126
  var PickerPlugin = /** @class */ (function () {
23898
24127
  function PickerPlugin(dataProvider, pickerOptions) {
@@ -25192,7 +25421,7 @@ var TableResize = /** @class */ (function () {
25192
25421
  break;
25193
25422
  }
25194
25423
  }
25195
- _this.setTableEditor(currentTable);
25424
+ _this.setTableEditor(currentTable, e);
25196
25425
  (_a = _this.tableEditor) === null || _a === void 0 ? void 0 : _a.onMouseMove(x, y);
25197
25426
  };
25198
25427
  this.invalidateTableRects = function () {
@@ -25237,13 +25466,13 @@ var TableResize = /** @class */ (function () {
25237
25466
  break;
25238
25467
  }
25239
25468
  };
25240
- TableResize.prototype.setTableEditor = function (table) {
25469
+ TableResize.prototype.setTableEditor = function (table, e) {
25241
25470
  if (this.tableEditor && table != this.tableEditor.table) {
25242
25471
  this.tableEditor.dispose();
25243
25472
  this.tableEditor = null;
25244
25473
  }
25245
25474
  if (!this.tableEditor && table) {
25246
- this.tableEditor = new TableEditor_1.default(this.editor, table, this.invalidateTableRects, this.onShowHelperElement);
25475
+ this.tableEditor = new TableEditor_1.default(this.editor, table, this.invalidateTableRects, this.onShowHelperElement, e.currentTarget);
25247
25476
  }
25248
25477
  };
25249
25478
  TableResize.prototype.ensureTableRects = function () {
@@ -25487,7 +25716,7 @@ var INSERTER_HOVER_OFFSET = 5;
25487
25716
  * When set a different current table or change current TD, we need to update these areas
25488
25717
  */
25489
25718
  var TableEditor = /** @class */ (function () {
25490
- function TableEditor(editor, table, onChanged, onShowHelperElement) {
25719
+ function TableEditor(editor, table, onChanged, onShowHelperElement, eventTarget) {
25491
25720
  var _this = this;
25492
25721
  this.editor = editor;
25493
25722
  this.table = table;
@@ -25516,29 +25745,31 @@ var TableEditor = /** @class */ (function () {
25516
25745
  _this.editor.focus();
25517
25746
  if (table) {
25518
25747
  var vTable = new roosterjs_editor_dom_1.VTable(table);
25519
- var rows = vTable.cells.length - 1;
25520
- var lastCellIndex_1 = 0;
25521
- vTable.cells[rows].forEach(function (cell, index) {
25522
- if (cell.td) {
25523
- lastCellIndex_1 = index;
25524
- }
25525
- });
25526
- var selection = {
25527
- firstCell: {
25528
- x: 0,
25529
- y: 0,
25530
- },
25531
- lastCell: {
25532
- y: rows,
25533
- x: lastCellIndex_1,
25534
- },
25535
- };
25536
- _this.editor.select(table, selection);
25748
+ if (vTable.cells) {
25749
+ var rows = vTable.cells.length - 1;
25750
+ var lastCellIndex_1 = 0;
25751
+ vTable.cells[rows].forEach(function (cell, index) {
25752
+ if (cell.td) {
25753
+ lastCellIndex_1 = index;
25754
+ }
25755
+ });
25756
+ var selection = {
25757
+ firstCell: {
25758
+ x: 0,
25759
+ y: 0,
25760
+ },
25761
+ lastCell: {
25762
+ y: rows,
25763
+ x: lastCellIndex_1,
25764
+ },
25765
+ };
25766
+ _this.editor.select(table, selection);
25767
+ }
25537
25768
  }
25538
25769
  };
25539
25770
  this.isRTL = (0, roosterjs_editor_dom_1.getComputedStyle)(table, 'direction') == 'rtl';
25540
25771
  this.tableResizer = (0, TableResizer_1.default)(table, editor.getZoomScale(), this.isRTL, this.onStartTableResize, this.onFinishEditing, this.onShowHelperElement);
25541
- this.tableSelector = (0, TableSelector_1.default)(table, editor.getZoomScale(), this.onSelect, this.onShowHelperElement);
25772
+ this.tableSelector = (0, TableSelector_1.default)(table, editor.getZoomScale(), this.onSelect, this.onShowHelperElement, this.getShouldShowTableSelectorHandler(this.editor.getScrollContainer(), eventTarget));
25542
25773
  }
25543
25774
  TableEditor.prototype.dispose = function () {
25544
25775
  this.disposeTableResizer();
@@ -25650,6 +25881,21 @@ var TableEditor = /** @class */ (function () {
25650
25881
  }
25651
25882
  this.editor.addUndoSnapshot();
25652
25883
  };
25884
+ TableEditor.prototype.getShouldShowTableSelectorHandler = function (scrollContainer, eventTarget) {
25885
+ if (eventTarget && (0, roosterjs_editor_dom_1.safeInstanceOf)(eventTarget, 'HTMLElement') && scrollContainer) {
25886
+ var scrollContainerRect_1 = (0, roosterjs_editor_dom_1.normalizeRect)(scrollContainer.getBoundingClientRect());
25887
+ var containerRect_1 = (0, roosterjs_editor_dom_1.normalizeRect)(eventTarget.getBoundingClientRect());
25888
+ if (scrollContainerRect_1 && containerRect_1) {
25889
+ var scrollContainerVisibleTop_1 = scrollContainer.scrollTop - scrollContainerRect_1.top;
25890
+ return function (rect) {
25891
+ return containerRect_1.top <= rect.top &&
25892
+ scrollContainerVisibleTop_1 <= rect.top &&
25893
+ scrollContainerRect_1.top <= rect.top;
25894
+ };
25895
+ }
25896
+ }
25897
+ return function () { return true; };
25898
+ };
25653
25899
  return TableEditor;
25654
25900
  }());
25655
25901
  exports.default = TableEditor;
@@ -25672,10 +25918,10 @@ exports.disposeTableEditFeature = void 0;
25672
25918
  * @internal
25673
25919
  */
25674
25920
  function disposeTableEditFeature(resizer) {
25675
- var _a;
25676
- (_a = resizer.div.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(resizer.div);
25921
+ var _a, _b, _c;
25922
+ (_b = (_a = resizer.div) === null || _a === void 0 ? void 0 : _a.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(resizer.div);
25677
25923
  resizer.div = null;
25678
- resizer.featureHandler.dispose();
25924
+ (_c = resizer.featureHandler) === null || _c === void 0 ? void 0 : _c.dispose();
25679
25925
  resizer.featureHandler = null;
25680
25926
  }
25681
25927
  exports.disposeTableEditFeature = disposeTableEditFeature;
@@ -25909,7 +26155,11 @@ var TABLE_SELECTOR_ID = '_Table_Selector';
25909
26155
  /**
25910
26156
  * @internal
25911
26157
  */
25912
- function createTableSelector(table, zoomScale, onFinishDragging, onShowHelperElement) {
26158
+ function createTableSelector(table, zoomScale, onFinishDragging, onShowHelperElement, shouldShow) {
26159
+ var rect = (0, roosterjs_editor_dom_1.normalizeRect)(table.getBoundingClientRect());
26160
+ if (rect && shouldShow && !shouldShow(rect)) {
26161
+ return { div: null, featureHandler: null, node: table };
26162
+ }
25913
26163
  var document = table.ownerDocument;
25914
26164
  var createElementData = {
25915
26165
  tag: 'div',
@@ -25924,6 +26174,7 @@ function createTableSelector(table, zoomScale, onFinishDragging, onShowHelperEle
25924
26174
  var context = {
25925
26175
  table: table,
25926
26176
  zoomScale: zoomScale,
26177
+ rect: rect,
25927
26178
  };
25928
26179
  setSelectorDivPosition(context, div);
25929
26180
  var onDragEnd = function (context, event) {
@@ -25939,8 +26190,7 @@ function createTableSelector(table, zoomScale, onFinishDragging, onShowHelperEle
25939
26190
  }
25940
26191
  exports.default = createTableSelector;
25941
26192
  function setSelectorDivPosition(context, trigger) {
25942
- var table = context.table;
25943
- var rect = (0, roosterjs_editor_dom_1.normalizeRect)(table.getBoundingClientRect());
26193
+ var rect = context.rect;
25944
26194
  if (rect) {
25945
26195
  trigger.style.top = rect.top - TABLE_SELECTOR_LENGTH + "px";
25946
26196
  trigger.style.left = rect.left - TABLE_SELECTOR_LENGTH - 2 + "px";
@@ -26182,30 +26432,42 @@ exports.CompatibleBulletListType = void 0;
26182
26432
  */
26183
26433
  var CompatibleBulletListType;
26184
26434
  (function (CompatibleBulletListType) {
26435
+ /**
26436
+ * Minimum value of the enum
26437
+ */
26438
+ CompatibleBulletListType[CompatibleBulletListType["Min"] = 1] = "Min";
26185
26439
  /**
26186
26440
  * Bullet triggered by *
26187
26441
  */
26188
- CompatibleBulletListType[CompatibleBulletListType["Disc"] = 0] = "Disc";
26442
+ CompatibleBulletListType[CompatibleBulletListType["Disc"] = 1] = "Disc";
26189
26443
  /**
26190
26444
  * Bullet triggered by -
26191
26445
  */
26192
- CompatibleBulletListType[CompatibleBulletListType["Dash"] = 1] = "Dash";
26446
+ CompatibleBulletListType[CompatibleBulletListType["Dash"] = 2] = "Dash";
26193
26447
  /**
26194
26448
  * Bullet triggered by --
26195
26449
  */
26196
- CompatibleBulletListType[CompatibleBulletListType["Square"] = 2] = "Square";
26450
+ CompatibleBulletListType[CompatibleBulletListType["Square"] = 3] = "Square";
26197
26451
  /**
26198
26452
  * Bullet triggered by >
26199
26453
  */
26200
- CompatibleBulletListType[CompatibleBulletListType["ShortArrow"] = 3] = "ShortArrow";
26454
+ CompatibleBulletListType[CompatibleBulletListType["ShortArrow"] = 4] = "ShortArrow";
26201
26455
  /**
26202
26456
  * Bullet triggered by -> or -->
26203
26457
  */
26204
- CompatibleBulletListType[CompatibleBulletListType["LongArrow"] = 4] = "LongArrow";
26458
+ CompatibleBulletListType[CompatibleBulletListType["LongArrow"] = 5] = "LongArrow";
26205
26459
  /**
26206
26460
  * Bullet triggered by =>
26207
26461
  */
26208
- CompatibleBulletListType[CompatibleBulletListType["UnfilledArrow"] = 5] = "UnfilledArrow";
26462
+ CompatibleBulletListType[CompatibleBulletListType["UnfilledArrow"] = 6] = "UnfilledArrow";
26463
+ /**
26464
+ * Bullet triggered by —
26465
+ */
26466
+ CompatibleBulletListType[CompatibleBulletListType["Hyphen"] = 7] = "Hyphen";
26467
+ /**
26468
+ * Maximum value of the enum
26469
+ */
26470
+ CompatibleBulletListType[CompatibleBulletListType["Max"] = 7] = "Max";
26209
26471
  })(CompatibleBulletListType = exports.CompatibleBulletListType || (exports.CompatibleBulletListType = {}));
26210
26472
 
26211
26473
 
@@ -27464,86 +27726,94 @@ exports.CompatibleNumberingListType = void 0;
27464
27726
  */
27465
27727
  var CompatibleNumberingListType;
27466
27728
  (function (CompatibleNumberingListType) {
27729
+ /**
27730
+ * Minimum value of the enum
27731
+ */
27732
+ CompatibleNumberingListType[CompatibleNumberingListType["Min"] = 1] = "Min";
27467
27733
  /**
27468
27734
  * Numbering triggered by 1.
27469
27735
  */
27470
- CompatibleNumberingListType[CompatibleNumberingListType["Decimal"] = 0] = "Decimal";
27736
+ CompatibleNumberingListType[CompatibleNumberingListType["Decimal"] = 1] = "Decimal";
27471
27737
  /**
27472
27738
  * Numbering triggered by 1-
27473
27739
  */
27474
- CompatibleNumberingListType[CompatibleNumberingListType["DecimalDash"] = 1] = "DecimalDash";
27740
+ CompatibleNumberingListType[CompatibleNumberingListType["DecimalDash"] = 2] = "DecimalDash";
27475
27741
  /**
27476
27742
  * Numbering triggered by 1)
27477
27743
  */
27478
- CompatibleNumberingListType[CompatibleNumberingListType["DecimalParenthesis"] = 2] = "DecimalParenthesis";
27744
+ CompatibleNumberingListType[CompatibleNumberingListType["DecimalParenthesis"] = 3] = "DecimalParenthesis";
27479
27745
  /**
27480
27746
  * Numbering triggered by (1)
27481
27747
  */
27482
- CompatibleNumberingListType[CompatibleNumberingListType["DecimalDoubleParenthesis"] = 3] = "DecimalDoubleParenthesis";
27748
+ CompatibleNumberingListType[CompatibleNumberingListType["DecimalDoubleParenthesis"] = 4] = "DecimalDoubleParenthesis";
27483
27749
  /**
27484
27750
  * Numbering triggered by a.
27485
27751
  */
27486
- CompatibleNumberingListType[CompatibleNumberingListType["LowerAlpha"] = 4] = "LowerAlpha";
27752
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerAlpha"] = 5] = "LowerAlpha";
27487
27753
  /**
27488
27754
  * Numbering triggered by a)
27489
27755
  */
27490
- CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaParenthesis"] = 5] = "LowerAlphaParenthesis";
27756
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaParenthesis"] = 6] = "LowerAlphaParenthesis";
27491
27757
  /**
27492
27758
  * Numbering triggered by (a)
27493
27759
  */
27494
- CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaDoubleParenthesis"] = 6] = "LowerAlphaDoubleParenthesis";
27760
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaDoubleParenthesis"] = 7] = "LowerAlphaDoubleParenthesis";
27495
27761
  /**
27496
27762
  * Numbering triggered by a-
27497
27763
  */
27498
- CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaDash"] = 7] = "LowerAlphaDash";
27764
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerAlphaDash"] = 8] = "LowerAlphaDash";
27499
27765
  /**
27500
27766
  * Numbering triggered by A.
27501
27767
  */
27502
- CompatibleNumberingListType[CompatibleNumberingListType["UpperAlpha"] = 8] = "UpperAlpha";
27768
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperAlpha"] = 9] = "UpperAlpha";
27503
27769
  /**
27504
27770
  * Numbering triggered by A)
27505
27771
  */
27506
- CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaParenthesis"] = 9] = "UpperAlphaParenthesis";
27772
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaParenthesis"] = 10] = "UpperAlphaParenthesis";
27507
27773
  /**
27508
27774
  * Numbering triggered by (A)
27509
27775
  */
27510
- CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaDoubleParenthesis"] = 10] = "UpperAlphaDoubleParenthesis";
27776
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaDoubleParenthesis"] = 11] = "UpperAlphaDoubleParenthesis";
27511
27777
  /**
27512
27778
  * Numbering triggered by A-
27513
27779
  */
27514
- CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaDash"] = 11] = "UpperAlphaDash";
27780
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperAlphaDash"] = 12] = "UpperAlphaDash";
27515
27781
  /**
27516
27782
  * Numbering triggered by i.
27517
27783
  */
27518
- CompatibleNumberingListType[CompatibleNumberingListType["LowerRoman"] = 12] = "LowerRoman";
27784
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerRoman"] = 13] = "LowerRoman";
27519
27785
  /**
27520
27786
  * Numbering triggered by i)
27521
27787
  */
27522
- CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanParenthesis"] = 13] = "LowerRomanParenthesis";
27788
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanParenthesis"] = 14] = "LowerRomanParenthesis";
27523
27789
  /**
27524
27790
  * Numbering triggered by (i)
27525
27791
  */
27526
- CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanDoubleParenthesis"] = 14] = "LowerRomanDoubleParenthesis";
27792
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanDoubleParenthesis"] = 15] = "LowerRomanDoubleParenthesis";
27527
27793
  /**
27528
27794
  * Numbering triggered by i-
27529
27795
  */
27530
- CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanDash"] = 15] = "LowerRomanDash";
27796
+ CompatibleNumberingListType[CompatibleNumberingListType["LowerRomanDash"] = 16] = "LowerRomanDash";
27531
27797
  /**
27532
27798
  * Numbering triggered by I.
27533
27799
  */
27534
- CompatibleNumberingListType[CompatibleNumberingListType["UpperRoman"] = 16] = "UpperRoman";
27800
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperRoman"] = 17] = "UpperRoman";
27535
27801
  /**
27536
27802
  * Numbering triggered by I)
27537
27803
  */
27538
- CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanParenthesis"] = 17] = "UpperRomanParenthesis";
27804
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanParenthesis"] = 18] = "UpperRomanParenthesis";
27539
27805
  /**
27540
27806
  * Numbering triggered by (I)
27541
27807
  */
27542
- CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanDoubleParenthesis"] = 18] = "UpperRomanDoubleParenthesis";
27808
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanDoubleParenthesis"] = 19] = "UpperRomanDoubleParenthesis";
27543
27809
  /**
27544
27810
  * Numbering triggered by I-
27545
27811
  */
27546
- CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanDash"] = 19] = "UpperRomanDash";
27812
+ CompatibleNumberingListType[CompatibleNumberingListType["UpperRomanDash"] = 20] = "UpperRomanDash";
27813
+ /**
27814
+ * Maximum value of the enum
27815
+ */
27816
+ CompatibleNumberingListType[CompatibleNumberingListType["Max"] = 20] = "Max";
27547
27817
  })(CompatibleNumberingListType = exports.CompatibleNumberingListType || (exports.CompatibleNumberingListType = {}));
27548
27818
 
27549
27819