roosterjs 9.55.0 → 9.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/rooster.js CHANGED
@@ -8545,9 +8545,9 @@ var DefaultSanitizingOption = {
8545
8545
  /**
8546
8546
  * @internal
8547
8547
  */
8548
- function createDomToModelContextForSanitizing(document, defaultFormat, defaultOption, additionalSanitizingOption, domHelper) {
8548
+ function createDomToModelContextForSanitizing(document, defaultFormat, defaultOption, additionalSanitizingOption, domHelper, experimentalFeatures) {
8549
8549
  var sanitizingOption = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, DefaultSanitizingOption), additionalSanitizingOption);
8550
- return (0, roosterjs_content_model_dom_1.createDomToModelContext)((0, tslib_1.__assign)((0, tslib_1.__assign)({ defaultFormat: defaultFormat }, (0, getRootComputedStyleForContext_1.getRootComputedStyleForContext)(document)), { experimentalFeatures: [], editorViewWidth: domHelper === null || domHelper === void 0 ? void 0 : domHelper.getClientWidth() }), defaultOption, {
8550
+ return (0, roosterjs_content_model_dom_1.createDomToModelContext)((0, tslib_1.__assign)((0, tslib_1.__assign)({ defaultFormat: defaultFormat }, (0, getRootComputedStyleForContext_1.getRootComputedStyleForContext)(document)), { experimentalFeatures: experimentalFeatures !== null && experimentalFeatures !== void 0 ? experimentalFeatures : [], editorViewWidth: domHelper === null || domHelper === void 0 ? void 0 : domHelper.getClientWidth() }), defaultOption, {
8551
8551
  processorOverride: {
8552
8552
  '#text': pasteTextProcessor_1.pasteTextProcessor,
8553
8553
  entity: (0, pasteEntityProcessor_1.createPasteEntityProcessor)(sanitizingOption),
@@ -9389,12 +9389,13 @@ var BlackColor = 'rgb(0,0,0)';
9389
9389
  */
9390
9390
  function mergePasteContent(editor, eventResult, isFirstPaste) {
9391
9391
  var fragment = eventResult.fragment, domToModelOption = eventResult.domToModelOption, customizedMerge = eventResult.customizedMerge, pasteType = eventResult.pasteType, clipboardData = eventResult.clipboardData, containsBlockElements = eventResult.containsBlockElements;
9392
+ var shouldScrollCaretIntoView = !isImageOnlyFragment(fragment);
9392
9393
  editor.formatContentModel(function (model, context) {
9393
9394
  if (!isFirstPaste && clipboardData.modelBeforePaste) {
9394
9395
  var clonedModel = (0, roosterjs_content_model_dom_1.cloneModelForPaste)(clipboardData.modelBeforePaste);
9395
9396
  model.blocks = clonedModel.blocks;
9396
9397
  }
9397
- var domToModelContext = (0, createDomToModelContextForSanitizing_1.createDomToModelContextForSanitizing)(editor.getDocument(), undefined /*defaultFormat*/, editor.getEnvironment().domToModelSettings.customized, domToModelOption, editor.getDOMHelper());
9398
+ var domToModelContext = (0, createDomToModelContextForSanitizing_1.createDomToModelContextForSanitizing)(editor.getDocument(), undefined /*defaultFormat*/, editor.getEnvironment().domToModelSettings.customized, domToModelOption, editor.getDOMHelper(), editor.getExperimentalFeatures());
9398
9399
  domToModelContext.segmentFormat = getSegmentFormatForPaste(model, pasteType);
9399
9400
  var pasteModel = (0, roosterjs_content_model_dom_1.domToContentModel)(fragment, domToModelContext);
9400
9401
  var mergeOption = {
@@ -9414,7 +9415,7 @@ function mergePasteContent(editor, eventResult, isFirstPaste) {
9414
9415
  }, {
9415
9416
  changeSource: roosterjs_content_model_dom_1.ChangeSource.Paste,
9416
9417
  getChangeData: function () { return clipboardData; },
9417
- scrollCaretIntoView: true,
9418
+ scrollCaretIntoView: shouldScrollCaretIntoView,
9418
9419
  apiName: 'paste',
9419
9420
  });
9420
9421
  }
@@ -9455,6 +9456,13 @@ function getLastSegmentFormat(pasteModel) {
9455
9456
  }
9456
9457
  return {};
9457
9458
  }
9459
+ function isImageOnlyFragment(pasteFragment) {
9460
+ var _a;
9461
+ var images = pasteFragment.querySelectorAll('img');
9462
+ return (images.length === 1 &&
9463
+ pasteFragment.childNodes.length === 1 &&
9464
+ ((_a = pasteFragment.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === '');
9465
+ }
9458
9466
 
9459
9467
 
9460
9468
  /***/ },
@@ -9500,11 +9508,11 @@ function paste(editor, clipboardData, pasteTypeOrGetter) {
9500
9508
  clipboardData.rawHtml = (0, cleanHtmlComments_1.cleanHtmlComments)(clipboardData.rawHtml);
9501
9509
  }
9502
9510
  var doc = createDOMFromHtml(clipboardData.rawHtml, domCreator);
9503
- var pasteType = typeof pasteTypeOrGetter == 'function'
9504
- ? pasteTypeOrGetter(doc, clipboardData)
9505
- : pasteTypeOrGetter;
9506
9511
  // 2. Handle HTML from clipboard
9507
9512
  var htmlFromClipboard = (0, retrieveHtmlInfo_1.retrieveHtmlInfo)(doc, clipboardData);
9513
+ var pasteType = typeof pasteTypeOrGetter == 'function'
9514
+ ? pasteTypeOrGetter(doc, clipboardData, editor.getEnvironment(), htmlFromClipboard.metadata)
9515
+ : pasteTypeOrGetter;
9508
9516
  // 3. Create target fragment
9509
9517
  var sourceFragment = (0, createPasteFragment_1.createPasteFragment)(editor.getDocument(), clipboardData, pasteType, (_a = (clipboardData.rawHtml == clipboardData.html
9510
9518
  ? doc
@@ -10289,7 +10297,7 @@ var formatContentModel = function (core, formatter, options, domToModelOptions)
10289
10297
  try {
10290
10298
  handleImages(core, context);
10291
10299
  selection =
10292
- (_a = core.api.setContentModel(core, model, hasFocus ? undefined : { ignoreSelection: true }, // If editor did not have focus before format, do not set focus after format
10300
+ (_a = core.api.setContentModel(core, model, hasFocus && !(options === null || options === void 0 ? void 0 : options.skipDOMSelection) ? undefined : { ignoreSelection: true }, // If editor did not have focus before format, do not set focus after format
10293
10301
  onNodeCreated)) !== null && _a !== void 0 ? _a : undefined;
10294
10302
  handlePendingFormat(core, context, selection);
10295
10303
  if (scroll && ((selection === null || selection === void 0 ? void 0 : selection.type) == 'range' || (selection === null || selection === void 0 ? void 0 : selection.type) == 'image')) {
@@ -14491,6 +14499,7 @@ var Down = 'ArrowDown';
14491
14499
  var Left = 'ArrowLeft';
14492
14500
  var Right = 'ArrowRight';
14493
14501
  var Tab = 'Tab';
14502
+ var F10 = 'F10';
14494
14503
  /**
14495
14504
  * @internal
14496
14505
  */
@@ -14507,7 +14516,6 @@ var SelectionPlugin = /** @class */ (function () {
14507
14516
  this.disposer = null;
14508
14517
  this.logicalRootDisposer = null;
14509
14518
  this.isSafari = false;
14510
- this.isMac = false;
14511
14519
  this.scrollTopCache = 0;
14512
14520
  this.onMouseMove = function (event) {
14513
14521
  var _a, _b, _c;
@@ -14559,7 +14567,7 @@ var SelectionPlugin = /** @class */ (function () {
14559
14567
  // MacOS will not create a mouseUp event if contextMenu event is not prevent defaulted.
14560
14568
  // Make sure we capture image target even if image is wrapped
14561
14569
  this.getContainedTargetImage = function (event, previousSelection) {
14562
- if (!_this.isMac || !previousSelection || previousSelection.type !== 'image') {
14570
+ if (!previousSelection || previousSelection.type !== 'image') {
14563
14571
  return null;
14564
14572
  }
14565
14573
  var target = event.target;
@@ -14599,11 +14607,11 @@ var SelectionPlugin = /** @class */ (function () {
14599
14607
  if (((_a = _this.editor) === null || _a === void 0 ? void 0 : _a.hasFocus()) && !_this.editor.isInShadowEdit()) {
14600
14608
  var newSelection = _this.editor.getDOMSelection();
14601
14609
  var domHelper = _this.editor.getDOMHelper();
14602
- //If am image selection changed to a wider range due a keyboard event, we should update the selection
14610
+ // If an image selection changed to a wider range due to a keyboard event, we should update the selection
14603
14611
  var range = domHelper.getSelectionRange();
14604
14612
  if (range) {
14605
14613
  var image = (0, isSingleImageInSelection_1.isSingleImageInSelection)(range);
14606
- if ((newSelection === null || newSelection === void 0 ? void 0 : newSelection.type) == 'image' && !image) {
14614
+ if ((newSelection === null || newSelection === void 0 ? void 0 : newSelection.type) == 'image' && !image && !range.collapsed) {
14607
14615
  var sel = (_b = _this.editor.getDocument().defaultView) === null || _b === void 0 ? void 0 : _b.getSelection();
14608
14616
  var isReverted = sel
14609
14617
  ? sel.focusNode != range.endContainer || sel.focusOffset != range.endOffset
@@ -14662,7 +14670,6 @@ var SelectionPlugin = /** @class */ (function () {
14662
14670
  var env = this.editor.getEnvironment();
14663
14671
  var document = this.editor.getDocument();
14664
14672
  this.isSafari = !!env.isSafari;
14665
- this.isMac = !!env.isMac;
14666
14673
  document.addEventListener('selectionchange', this.onSelectionChange);
14667
14674
  if (this.isSafari) {
14668
14675
  this.disposer = this.editor.attachDomEvent({
@@ -14815,6 +14822,7 @@ var SelectionPlugin = /** @class */ (function () {
14815
14822
  }
14816
14823
  break;
14817
14824
  case 'range':
14825
+ var image = void 0;
14818
14826
  if (key == Up || key == Down || key == Left || key == Right || key == Tab) {
14819
14827
  var start = selection.range.startContainer;
14820
14828
  this.state.tableSelection = this.parseTableSelection(start, start, editor.getDOMHelper());
@@ -14830,6 +14838,14 @@ var SelectionPlugin = /** @class */ (function () {
14830
14838
  }
14831
14839
  }
14832
14840
  }
14841
+ else if (key == F10 &&
14842
+ rawEvent.shiftKey &&
14843
+ (image = (0, isSingleImageInSelection_1.isSingleImageInSelection)(selection.range))) {
14844
+ this.setDOMSelection({
14845
+ type: 'image',
14846
+ image: image,
14847
+ }, null /* tableSelection */);
14848
+ }
14833
14849
  break;
14834
14850
  case 'table':
14835
14851
  // After a content change event is handled tableSelection state is reset to null
@@ -15973,6 +15989,13 @@ var Editor = /** @class */ (function () {
15973
15989
  Editor.prototype.isExperimentalFeatureEnabled = function (featureName) {
15974
15990
  return this.getCore().experimentalFeatures.indexOf(featureName) >= 0;
15975
15991
  };
15992
+ /**
15993
+ * Get all experimental features enabled in this editor
15994
+ * @returns An array of experimental feature names
15995
+ * */
15996
+ Editor.prototype.getExperimentalFeatures = function () {
15997
+ return this.getCore().experimentalFeatures;
15998
+ };
15976
15999
  /**
15977
16000
  * @returns the current EditorCore object
15978
16001
  * @throws a standard Error if there's no core object
@@ -16812,6 +16835,8 @@ function createAriaLiveElement(document) {
16812
16835
  div.style.height = '1px';
16813
16836
  div.style.overflow = 'hidden';
16814
16837
  div.style.position = 'absolute';
16838
+ div.style.top = '0';
16839
+ div.style.left = '0';
16815
16840
  div.style.whiteSpace = 'nowrap';
16816
16841
  div.style.width = '1px';
16817
16842
  div.ariaLive = 'assertive';
@@ -17202,6 +17227,10 @@ exports.ChangeSource = {
17202
17227
  * Content changed by paste
17203
17228
  */
17204
17229
  Paste: 'Paste',
17230
+ /**
17231
+ * Content changed by auto markdown conversion
17232
+ */
17233
+ AutoMarkdownConversion: 'AutoMarkdownConversion',
17205
17234
  /**
17206
17235
  * Content changed by setContent API
17207
17236
  */
@@ -17613,6 +17642,9 @@ function createDomToModelDecoratorContext() {
17613
17642
  code: {
17614
17643
  format: {},
17615
17644
  },
17645
+ data: {
17646
+ format: {},
17647
+ },
17616
17648
  blockDecorator: {
17617
17649
  format: {},
17618
17650
  tagName: '',
@@ -17684,6 +17716,7 @@ exports.defaultProcessorMap = void 0;
17684
17716
  var brProcessor_1 = __webpack_require__(/*! ../processors/brProcessor */ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/brProcessor.ts");
17685
17717
  var childProcessor_1 = __webpack_require__(/*! ../processors/childProcessor */ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/childProcessor.ts");
17686
17718
  var codeProcessor_1 = __webpack_require__(/*! ../processors/codeProcessor */ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/codeProcessor.ts");
17719
+ var dataProcessor_1 = __webpack_require__(/*! ../processors/dataProcessor */ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/dataProcessor.ts");
17687
17720
  var delimiterProcessor_1 = __webpack_require__(/*! ../processors/delimiterProcessor */ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/delimiterProcessor.ts");
17688
17721
  var elementProcessor_1 = __webpack_require__(/*! ../processors/elementProcessor */ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/elementProcessor.ts");
17689
17722
  var entityProcessor_1 = __webpack_require__(/*! ../processors/entityProcessor */ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/entityProcessor.ts");
@@ -17710,6 +17743,7 @@ exports.defaultProcessorMap = {
17710
17743
  blockquote: knownElementProcessor_1.knownElementProcessor,
17711
17744
  br: brProcessor_1.brProcessor,
17712
17745
  code: codeProcessor_1.codeProcessor,
17746
+ data: dataProcessor_1.dataProcessor,
17713
17747
  dd: formatContainerProcessor_1.formatContainerProcessor,
17714
17748
  del: knownElementProcessor_1.knownElementProcessor,
17715
17749
  div: knownElementProcessor_1.knownElementProcessor,
@@ -17965,6 +17999,33 @@ var codeProcessor = function (group, element, context) {
17965
17999
  exports.codeProcessor = codeProcessor;
17966
18000
 
17967
18001
 
18002
+ /***/ },
18003
+
18004
+ /***/ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/dataProcessor.ts"
18005
+ /*!*****************************************************************************************!*\
18006
+ !*** ./packages/roosterjs-content-model-dom/lib/domToModel/processors/dataProcessor.ts ***!
18007
+ \*****************************************************************************************/
18008
+ (__unused_webpack_module, exports, __webpack_require__) {
18009
+
18010
+ "use strict";
18011
+
18012
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
18013
+ exports.dataProcessor = void 0;
18014
+ var knownElementProcessor_1 = __webpack_require__(/*! ./knownElementProcessor */ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/knownElementProcessor.ts");
18015
+ var parseFormat_1 = __webpack_require__(/*! ../utils/parseFormat */ "./packages/roosterjs-content-model-dom/lib/domToModel/utils/parseFormat.ts");
18016
+ var stackFormat_1 = __webpack_require__(/*! ../utils/stackFormat */ "./packages/roosterjs-content-model-dom/lib/domToModel/utils/stackFormat.ts");
18017
+ /**
18018
+ * @internal
18019
+ */
18020
+ var dataProcessor = function (group, element, context) {
18021
+ (0, stackFormat_1.stackFormat)(context, { data: 'empty' }, function () {
18022
+ (0, parseFormat_1.parseFormat)(element, context.formatParsers.data, context.data.format, context);
18023
+ (0, knownElementProcessor_1.knownElementProcessor)(group, element, context);
18024
+ });
18025
+ };
18026
+ exports.dataProcessor = dataProcessor;
18027
+
18028
+
17968
18029
  /***/ },
17969
18030
 
17970
18031
  /***/ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/delimiterProcessor.ts"
@@ -19403,13 +19464,14 @@ var SkippedStylesForTable = [
19403
19464
  * @internal
19404
19465
  */
19405
19466
  function stackFormat(context, options, callback) {
19406
- var segmentFormat = context.segmentFormat, blockFormat = context.blockFormat, linkFormat = context.link, codeFormat = context.code, decoratorFormat = context.blockDecorator;
19407
- var segment = options.segment, paragraph = options.paragraph, link = options.link, code = options.code, blockDecorator = options.blockDecorator;
19467
+ var segmentFormat = context.segmentFormat, blockFormat = context.blockFormat, linkFormat = context.link, codeFormat = context.code, dataFormat = context.data, decoratorFormat = context.blockDecorator;
19468
+ var segment = options.segment, paragraph = options.paragraph, link = options.link, code = options.code, data = options.data, blockDecorator = options.blockDecorator;
19408
19469
  try {
19409
19470
  context.segmentFormat = stackFormatInternal(segmentFormat, segment);
19410
19471
  context.blockFormat = stackFormatInternal(blockFormat, paragraph);
19411
19472
  context.link = stackLinkInternal(linkFormat, link);
19412
19473
  context.code = stackCodeInternal(codeFormat, code);
19474
+ context.data = stackDataInternal(dataFormat, data);
19413
19475
  context.blockDecorator = stackDecoratorInternal(decoratorFormat, blockDecorator);
19414
19476
  callback();
19415
19477
  }
@@ -19418,6 +19480,7 @@ function stackFormat(context, options, callback) {
19418
19480
  context.blockFormat = blockFormat;
19419
19481
  context.link = linkFormat;
19420
19482
  context.code = codeFormat;
19483
+ context.data = dataFormat;
19421
19484
  context.blockDecorator = decoratorFormat;
19422
19485
  }
19423
19486
  }
@@ -19460,6 +19523,16 @@ function stackCodeInternal(codeFormat, code) {
19460
19523
  return codeFormat;
19461
19524
  }
19462
19525
  }
19526
+ function stackDataInternal(dataFormat, data) {
19527
+ switch (data) {
19528
+ case 'empty':
19529
+ return {
19530
+ format: {},
19531
+ };
19532
+ default:
19533
+ return dataFormat;
19534
+ }
19535
+ }
19463
19536
  function stackDecoratorInternal(format, decorator) {
19464
19537
  switch (decorator) {
19465
19538
  case 'empty':
@@ -22242,6 +22315,7 @@ var borderColorFormatHandler_1 = __webpack_require__(/*! ./common/borderColorFor
22242
22315
  var borderFormatHandler_1 = __webpack_require__(/*! ./common/borderFormatHandler */ "./packages/roosterjs-content-model-dom/lib/formatHandlers/common/borderFormatHandler.ts");
22243
22316
  var boxShadowFormatHandler_1 = __webpack_require__(/*! ./common/boxShadowFormatHandler */ "./packages/roosterjs-content-model-dom/lib/formatHandlers/common/boxShadowFormatHandler.ts");
22244
22317
  var datasetFormatHandler_1 = __webpack_require__(/*! ./common/datasetFormatHandler */ "./packages/roosterjs-content-model-dom/lib/formatHandlers/common/datasetFormatHandler.ts");
22318
+ var dataValueFormatHandler_1 = __webpack_require__(/*! ./segment/dataValueFormatHandler */ "./packages/roosterjs-content-model-dom/lib/formatHandlers/segment/dataValueFormatHandler.ts");
22245
22319
  var directionFormatHandler_1 = __webpack_require__(/*! ./block/directionFormatHandler */ "./packages/roosterjs-content-model-dom/lib/formatHandlers/block/directionFormatHandler.ts");
22246
22320
  var displayFormatHandler_1 = __webpack_require__(/*! ./block/displayFormatHandler */ "./packages/roosterjs-content-model-dom/lib/formatHandlers/block/displayFormatHandler.ts");
22247
22321
  var entityFormatHandler_1 = __webpack_require__(/*! ./entity/entityFormatHandler */ "./packages/roosterjs-content-model-dom/lib/formatHandlers/entity/entityFormatHandler.ts");
@@ -22287,6 +22361,7 @@ var defaultFormatHandlerMap = {
22287
22361
  borderColor: borderColorFormatHandler_1.borderColorFormatHandler,
22288
22362
  boxShadow: boxShadowFormatHandler_1.boxShadowFormatHandler,
22289
22363
  dataset: datasetFormatHandler_1.datasetFormatHandler,
22364
+ dataValue: dataValueFormatHandler_1.dataValueFormatHandler,
22290
22365
  direction: directionFormatHandler_1.directionFormatHandler,
22291
22366
  display: displayFormatHandler_1.displayFormatHandler,
22292
22367
  float: floatFormatHandler_1.floatFormatHandler,
@@ -22428,6 +22503,7 @@ exports.defaultFormatKeysPerCategory = {
22428
22503
  ],
22429
22504
  segmentUnderLink: ['textColor'],
22430
22505
  code: ['fontFamily', 'display'],
22506
+ data: ['dataValue'],
22431
22507
  dataset: ['dataset'],
22432
22508
  divider: (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(sharedBlockFormats), false), (0, tslib_1.__read)(sharedContainerFormats), false), ['display', 'size', 'htmlAlign'], false),
22433
22509
  container: (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(sharedContainerFormats), false), ['htmlAlign', 'size', 'display', 'id'], false),
@@ -22718,6 +22794,37 @@ exports.boldFormatHandler = {
22718
22794
  };
22719
22795
 
22720
22796
 
22797
+ /***/ },
22798
+
22799
+ /***/ "./packages/roosterjs-content-model-dom/lib/formatHandlers/segment/dataValueFormatHandler.ts"
22800
+ /*!***************************************************************************************************!*\
22801
+ !*** ./packages/roosterjs-content-model-dom/lib/formatHandlers/segment/dataValueFormatHandler.ts ***!
22802
+ \***************************************************************************************************/
22803
+ (__unused_webpack_module, exports) {
22804
+
22805
+ "use strict";
22806
+
22807
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
22808
+ exports.dataValueFormatHandler = void 0;
22809
+ /**
22810
+ * @internal
22811
+ * Format handler for the "value" attribute of a HTML <data> element
22812
+ */
22813
+ exports.dataValueFormatHandler = {
22814
+ parse: function (format, element) {
22815
+ var _a;
22816
+ if (element.hasAttribute('value')) {
22817
+ format.dataValue = (_a = element.getAttribute('value')) !== null && _a !== void 0 ? _a : '';
22818
+ }
22819
+ },
22820
+ apply: function (format, element) {
22821
+ if (format.dataValue != undefined) {
22822
+ element.setAttribute('value', format.dataValue);
22823
+ }
22824
+ },
22825
+ };
22826
+
22827
+
22721
22828
  /***/ },
22722
22829
 
22723
22830
  /***/ "./packages/roosterjs-content-model-dom/lib/formatHandlers/segment/fontFamilyFormatHandler.ts"
@@ -23758,9 +23865,9 @@ exports.shouldSetValue = shouldSetValue;
23758
23865
 
23759
23866
  Object.defineProperty(exports, "__esModule", ({ value: true }));
23760
23867
  exports.createImage = exports.createText = exports.createTableCell = exports.createTable = exports.createSelectionMarker = exports.createParagraph = exports.createFormatContainer = exports.createListItem = exports.createBr = exports.isLinkUndeletable = exports.setLinkUndeletable = exports.scrollRectIntoView = exports.normalizeRect = exports.isWhiteSpacePreserved = exports.reuseCachedElement = exports.findClosestBlockEntityContainer = exports.isBlockEntityContainer = exports.isEntityDelimiter = exports.addDelimiters = exports.generateEntityClassNames = exports.parseEntityFormat = exports.getAllEntityWrappers = exports.findClosestEntityWrapper = exports.isEntityElement = exports.unwrap = exports.wrap = exports.wrapAllChildNodes = exports.moveChildNodes = exports.toArray = exports.getSafeIdSelector = exports.getObjectKeys = exports.isElementOfType = exports.isNodeOfType = exports.hasMetadata = exports.getMetadata = exports.updateMetadata = exports.buildSelectionMarker = exports.isBlockElement = exports.areSameFormats = exports.parseFormat = exports.getRegularSelectionOffsets = exports.formatContainerProcessor = exports.tableProcessor = exports.entityProcessor = exports.processChildNode = exports.handleRegularSelection = exports.childProcessor = exports.contentModelToText = exports.contentModelToDom = exports.domToContentModel = void 0;
23761
- exports.trimModelForSelection = exports.getDOMInsertPointRect = exports.getSelectionRootNode = exports.isBold = exports.createModelToDomConfig = exports.createModelToDomContextWithConfig = exports.createModelToDomContext = exports.createDomToModelConfig = exports.createDomToModelContextWithConfig = exports.createDomToModelContext = exports.defaultGenerateColorKey = exports.parseColor = exports.setColor = exports.getColor = exports.DeprecatedColors = exports.BorderKeys = exports.parseValueWithUnit = exports.getAutoListStyleType = exports.getOrderedListNumberStr = exports.ParagraphFormats = exports.ListFormatsToMove = exports.ListFormatsToKeep = exports.ListFormats = exports.copyFormat = exports.setParagraphNotImplicit = exports.normalizeSegmentFormat = exports.mergeTextSegments = exports.normalizeSingleSegment = exports.isEmpty = exports.addSegment = exports.unwrapBlock = exports.isGeneralSegment = exports.normalizeContentModel = exports.normalizeParagraph = exports.addTextSegment = exports.addLink = exports.addCode = exports.addBlock = exports.mutateSegment = exports.mutateSegments = exports.mutateBlock = exports.createTableRow = exports.createEmptyModel = exports.createListLevel = exports.createDivider = exports.createEntity = exports.createGeneralBlock = exports.createGeneralSegment = exports.createParagraphDecorator = exports.createContentModelDocument = void 0;
23762
- exports.getClosestAncestorBlockGroupIndex = exports.getSegmentTextFormat = exports.getListStyleTypeFromString = exports.retrieveModelFormatState = exports.setTableCellBackgroundColor = exports.MIN_ALLOWED_TABLE_CELL_HEIGHT = exports.MIN_ALLOWED_TABLE_CELL_WIDTH = exports.normalizeTable = exports.setFirstColumnFormatBorders = exports.applyTableFormat = exports.deleteBlock = exports.deleteSegment = exports.deleteSelection = exports.mergeModel = exports.cloneModelForPaste = exports.cloneModel = exports.setSelection = exports.hasSelectionInBlockGroup = exports.hasSelectionInSegment = exports.hasSelectionInBlock = exports.getSelectedCells = exports.getSelectedSegmentsAndParagraphs = exports.getSelectedSegments = exports.getSelectedParagraphs = exports.getOperationalBlocks = exports.getFirstSelectedTable = exports.getFirstSelectedListItem = exports.iterateSelections = exports.isBlockGroupOfType = exports.getRangesByText = exports.getImageState = exports.setImageState = exports.getParagraphMarker = exports.setParagraphMarker = exports.cacheGetEventData = exports.extractClipboardItems = exports.normalizeFontFamily = exports.transformColor = exports.retrieveDocumentMetadata = exports.readFile = exports.parseTableCells = exports.normalizeText = exports.isSpace = exports.isPunctuation = exports.extractBorderValues = exports.combineBorderValue = exports.getNodePositionFromEvent = exports.isCursorMovingKey = exports.isModifierKey = exports.isCharacterValue = void 0;
23763
- exports.EmptySegmentFormat = exports.UnorderedListStyleMap = exports.OrderedListStyleMap = exports.TableBorderFormat = exports.NumberingListType = exports.BulletListType = exports.ChangeSource = exports.ListMetadataDefinition = exports.getListMetadata = exports.updateListMetadata = exports.getTableMetadata = exports.updateTableMetadata = exports.getTableCellMetadata = exports.updateTableCellMetadata = exports.getImageMetadata = exports.updateImageMetadata = exports.runEditSteps = void 0;
23868
+ exports.getDOMInsertPointRect = exports.getSelectionRootNode = exports.isBold = exports.createModelToDomConfig = exports.createModelToDomContextWithConfig = exports.createModelToDomContext = exports.createDomToModelConfig = exports.createDomToModelContextWithConfig = exports.createDomToModelContext = exports.defaultGenerateColorKey = exports.parseColor = exports.setColor = exports.getColor = exports.DeprecatedColors = exports.BorderKeys = exports.parseValueWithUnit = exports.getAutoListStyleType = exports.getOrderedListNumberStr = exports.ParagraphFormats = exports.ListFormatsToMove = exports.ListFormatsToKeep = exports.ListFormats = exports.copyFormat = exports.setParagraphNotImplicit = exports.normalizeSegmentFormat = exports.mergeTextSegments = exports.normalizeSingleSegment = exports.isEmpty = exports.addSegment = exports.unwrapBlock = exports.isGeneralSegment = exports.normalizeContentModel = exports.normalizeParagraph = exports.addTextSegment = exports.addLink = exports.addData = exports.addCode = exports.addBlock = exports.mutateSegment = exports.mutateSegments = exports.mutateBlock = exports.createTableRow = exports.createEmptyModel = exports.createListLevel = exports.createDivider = exports.createEntity = exports.createGeneralBlock = exports.createGeneralSegment = exports.createParagraphDecorator = exports.createContentModelDocument = void 0;
23869
+ exports.getSegmentTextFormat = exports.getListStyleTypeFromString = exports.retrieveModelFormatState = exports.setTableCellBackgroundColor = exports.MIN_ALLOWED_TABLE_CELL_HEIGHT = exports.MIN_ALLOWED_TABLE_CELL_WIDTH = exports.normalizeTable = exports.setFirstColumnFormatBorders = exports.applyTableFormat = exports.deleteBlock = exports.deleteSegment = exports.deleteSelection = exports.mergeModel = exports.cloneModelForPaste = exports.cloneModel = exports.setSelection = exports.hasSelectionInBlockGroup = exports.hasSelectionInSegment = exports.hasSelectionInBlock = exports.getSelectedCells = exports.getSelectedSegmentsAndParagraphs = exports.getSelectedSegments = exports.getSelectedParagraphs = exports.getOperationalBlocks = exports.getFirstSelectedTable = exports.getFirstSelectedListItem = exports.iterateSelections = exports.isBlockGroupOfType = exports.getRangesByText = exports.getImageState = exports.setImageState = exports.getParagraphMarker = exports.setParagraphMarker = exports.cacheGetEventData = exports.extractClipboardItems = exports.normalizeFontFamily = exports.transformColor = exports.retrieveDocumentMetadata = exports.readFile = exports.parseTableCells = exports.normalizeText = exports.isSpace = exports.isPunctuation = exports.extractBorderValues = exports.combineBorderValue = exports.getNodePositionFromEvent = exports.isCursorMovingKey = exports.isModifierKey = exports.isCharacterValue = exports.trimModelForSelection = void 0;
23870
+ exports.EmptySegmentFormat = exports.UnorderedListStyleMap = exports.OrderedListStyleMap = exports.TableBorderFormat = exports.NumberingListType = exports.BulletListType = exports.ChangeSource = exports.ListMetadataDefinition = exports.getListMetadata = exports.updateListMetadata = exports.getTableMetadata = exports.updateTableMetadata = exports.getTableCellMetadata = exports.updateTableCellMetadata = exports.getImageMetadata = exports.updateImageMetadata = exports.runEditSteps = exports.getClosestAncestorBlockGroupIndex = void 0;
23764
23871
  var domToContentModel_1 = __webpack_require__(/*! ./domToModel/domToContentModel */ "./packages/roosterjs-content-model-dom/lib/domToModel/domToContentModel.ts");
23765
23872
  Object.defineProperty(exports, "domToContentModel", ({ enumerable: true, get: function () { return domToContentModel_1.domToContentModel; } }));
23766
23873
  var contentModelToDom_1 = __webpack_require__(/*! ./modelToDom/contentModelToDom */ "./packages/roosterjs-content-model-dom/lib/modelToDom/contentModelToDom.ts");
@@ -23874,7 +23981,9 @@ Object.defineProperty(exports, "addBlock", ({ enumerable: true, get: function ()
23874
23981
  var addDecorators_1 = __webpack_require__(/*! ./modelApi/common/addDecorators */ "./packages/roosterjs-content-model-dom/lib/modelApi/common/addDecorators.ts");
23875
23982
  Object.defineProperty(exports, "addCode", ({ enumerable: true, get: function () { return addDecorators_1.addCode; } }));
23876
23983
  var addDecorators_2 = __webpack_require__(/*! ./modelApi/common/addDecorators */ "./packages/roosterjs-content-model-dom/lib/modelApi/common/addDecorators.ts");
23877
- Object.defineProperty(exports, "addLink", ({ enumerable: true, get: function () { return addDecorators_2.addLink; } }));
23984
+ Object.defineProperty(exports, "addData", ({ enumerable: true, get: function () { return addDecorators_2.addData; } }));
23985
+ var addDecorators_3 = __webpack_require__(/*! ./modelApi/common/addDecorators */ "./packages/roosterjs-content-model-dom/lib/modelApi/common/addDecorators.ts");
23986
+ Object.defineProperty(exports, "addLink", ({ enumerable: true, get: function () { return addDecorators_3.addLink; } }));
23878
23987
  var addTextSegment_1 = __webpack_require__(/*! ./modelApi/common/addTextSegment */ "./packages/roosterjs-content-model-dom/lib/modelApi/common/addTextSegment.ts");
23879
23988
  Object.defineProperty(exports, "addTextSegment", ({ enumerable: true, get: function () { return addTextSegment_1.addTextSegment; } }));
23880
23989
  var normalizeParagraph_1 = __webpack_require__(/*! ./modelApi/common/normalizeParagraph */ "./packages/roosterjs-content-model-dom/lib/modelApi/common/normalizeParagraph.ts");
@@ -24195,7 +24304,7 @@ exports.addBlock = addBlock;
24195
24304
  "use strict";
24196
24305
 
24197
24306
  Object.defineProperty(exports, "__esModule", ({ value: true }));
24198
- exports.addDecorators = exports.addCode = exports.addLink = void 0;
24307
+ exports.addDecorators = exports.addData = exports.addCode = exports.addLink = void 0;
24199
24308
  var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
24200
24309
  /**
24201
24310
  * @internal
@@ -24222,12 +24331,27 @@ function addCode(segment, code) {
24222
24331
  }
24223
24332
  }
24224
24333
  exports.addCode = addCode;
24334
+ /**
24335
+ * @internal
24336
+ * Add a data decorator into segment if any
24337
+ * @param segment The segment to add decorator to
24338
+ * @param data The data decorator to add
24339
+ */
24340
+ function addData(segment, data) {
24341
+ if (data.format.dataValue != undefined) {
24342
+ segment.data = {
24343
+ format: (0, tslib_1.__assign)({}, data.format),
24344
+ };
24345
+ }
24346
+ }
24347
+ exports.addData = addData;
24225
24348
  /**
24226
24349
  * @internal
24227
24350
  */
24228
24351
  function addDecorators(segment, context) {
24229
24352
  addLink(segment, context.link);
24230
24353
  addCode(segment, context.code);
24354
+ addData(segment, context.data);
24231
24355
  }
24232
24356
  exports.addDecorators = addDecorators;
24233
24357
 
@@ -24512,7 +24636,8 @@ function segmentsWithSameFormat(seg1, seg2) {
24512
24636
  return (!!seg1.isSelected == !!seg2.isSelected &&
24513
24637
  (0, areSameFormats_1.areSameFormats)(seg1.format, seg2.format) &&
24514
24638
  areSameLinks(seg1.link, seg2.link) &&
24515
- areSameCodes(seg1.code, seg2.code));
24639
+ areSameCodes(seg1.code, seg2.code) &&
24640
+ areSameData(seg1.data, seg2.data));
24516
24641
  }
24517
24642
  function areSameLinks(link1, link2) {
24518
24643
  return ((!link1 && !link2) ||
@@ -24524,6 +24649,9 @@ function areSameLinks(link1, link2) {
24524
24649
  function areSameCodes(code1, code2) {
24525
24650
  return (!code1 && !code2) || (code1 && code2 && (0, areSameFormats_1.areSameFormats)(code1.format, code2.format));
24526
24651
  }
24652
+ function areSameData(data1, data2) {
24653
+ return (!data1 && !data2) || (data1 && data2 && (0, areSameFormats_1.areSameFormats)(data1.format, data2.format));
24654
+ }
24527
24655
 
24528
24656
 
24529
24657
  /***/ },
@@ -25609,9 +25737,10 @@ var addDecorators_1 = __webpack_require__(/*! ../common/addDecorators */ "./pack
25609
25737
  * @param text Text of this model
25610
25738
  * @param format @optional The format of this model
25611
25739
  * @param link @optional The link decorator
25612
- * @param code @option The code decorator
25740
+ * @param code @optional The code decorator
25741
+ * @param data @optional The data decorator
25613
25742
  */
25614
- function createText(text, format, link, code) {
25743
+ function createText(text, format, link, code, data) {
25615
25744
  var result = {
25616
25745
  segmentType: 'Text',
25617
25746
  text: text,
@@ -25623,6 +25752,9 @@ function createText(text, format, link, code) {
25623
25752
  if (code) {
25624
25753
  (0, addDecorators_1.addCode)(result, code);
25625
25754
  }
25755
+ if (data) {
25756
+ (0, addDecorators_1.addData)(result, data);
25757
+ }
25626
25758
  return result;
25627
25759
  }
25628
25760
  exports.createText = createText;
@@ -26090,7 +26222,7 @@ function cloneBlockGroupBase(group, options) {
26090
26222
  };
26091
26223
  }
26092
26224
  function cloneSegmentBase(segment) {
26093
- var segmentType = segment.segmentType, isSelected = segment.isSelected, code = segment.code, link = segment.link;
26225
+ var segmentType = segment.segmentType, isSelected = segment.isSelected, code = segment.code, link = segment.link, data = segment.data;
26094
26226
  var newSegment = Object.assign({
26095
26227
  segmentType: segmentType,
26096
26228
  isSelected: isSelected,
@@ -26101,6 +26233,9 @@ function cloneSegmentBase(segment) {
26101
26233
  if (link) {
26102
26234
  newSegment.link = Object.assign(cloneModelWithFormat(link), cloneModelWithDataset(link));
26103
26235
  }
26236
+ if (data) {
26237
+ newSegment.data = cloneModelWithFormat(data);
26238
+ }
26104
26239
  return newSegment;
26105
26240
  }
26106
26241
  function cloneEntity(entity, options) {
@@ -26905,6 +27040,11 @@ function mergeTables(markerPosition, newTable, source) {
26905
27040
  var newTableRowCount = newTable.rows.length;
26906
27041
  var lastTargetColIndex = getTargetColIndex(table, rowIndex, colIndex, newTableColCount);
26907
27042
  var extraColsNeeded = lastTargetColIndex - table.rows[0].cells.length;
27043
+ newTable.rows.forEach(function (row) {
27044
+ row.cells.forEach(function (cell) {
27045
+ cell.spanAbove = false;
27046
+ });
27047
+ });
26908
27048
  if (extraColsNeeded > 0) {
26909
27049
  var currentColCount = table.rows[0].cells.length;
26910
27050
  for (var col = 0; col < extraColsNeeded; col++) {
@@ -30136,7 +30276,7 @@ var moveChildNodes_1 = __webpack_require__(/*! ../../domUtils/moveChildNodes */
30136
30276
  * @internal
30137
30277
  */
30138
30278
  var handleSegmentDecorator = function (_, parent, segment, context) {
30139
- var code = segment.code, link = segment.link;
30279
+ var code = segment.code, link = segment.link, data = segment.data;
30140
30280
  if ((0, isNodeOfType_1.isNodeOfType)(parent, 'ELEMENT_NODE')) {
30141
30281
  if (link) {
30142
30282
  (0, stackFormat_1.stackFormat)(context, 'a', function () {
@@ -30155,6 +30295,14 @@ var handleSegmentDecorator = function (_, parent, segment, context) {
30155
30295
  (_a = context.onNodeCreated) === null || _a === void 0 ? void 0 : _a.call(context, code, codeNode);
30156
30296
  });
30157
30297
  }
30298
+ if (data) {
30299
+ (0, stackFormat_1.stackFormat)(context, 'data', function () {
30300
+ var _a;
30301
+ var dataNode = (0, moveChildNodes_1.wrapAllChildNodes)(parent, 'data');
30302
+ (0, applyFormat_1.applyFormat)(dataNode, context.formatAppliers.data, data.format, context);
30303
+ (_a = context.onNodeCreated) === null || _a === void 0 ? void 0 : _a.call(context, data, dataNode);
30304
+ });
30305
+ }
30158
30306
  }
30159
30307
  };
30160
30308
  exports.handleSegmentDecorator = handleSegmentDecorator;
@@ -30339,7 +30487,20 @@ exports.handleText = handleText;
30339
30487
  Object.defineProperty(exports, "__esModule", ({ value: true }));
30340
30488
  exports.mergeNode = void 0;
30341
30489
  var isNodeOfType_1 = __webpack_require__(/*! ../../domUtils/isNodeOfType */ "./packages/roosterjs-content-model-dom/lib/domUtils/isNodeOfType.ts");
30342
- var OptimizeTags = ['SPAN', 'B', 'EM', 'I', 'U', 'SUB', 'SUP', 'STRIKE', 'S', 'A', 'CODE'];
30490
+ var OptimizeTags = [
30491
+ 'SPAN',
30492
+ 'B',
30493
+ 'EM',
30494
+ 'I',
30495
+ 'U',
30496
+ 'SUB',
30497
+ 'SUP',
30498
+ 'STRIKE',
30499
+ 'S',
30500
+ 'A',
30501
+ 'CODE',
30502
+ 'DATA',
30503
+ ];
30343
30504
  /**
30344
30505
  * @internal
30345
30506
  */
@@ -30915,9 +31076,9 @@ var MarkdownBlockGroupType = {
30915
31076
  /**
30916
31077
  * @internal
30917
31078
  */
30918
- function createBlockGroupFromMarkdown(text, patternName, options, group) {
31079
+ function createBlockGroupFromMarkdown(text, patternName, options, group, list) {
30919
31080
  if (MarkdownBlockGroupType[patternName] === 'ListItem') {
30920
- return (0, createListFromMarkdown_1.createListFromMarkdown)(text, patternName === 'ordered_list' ? 'OL' : 'UL', options);
31081
+ return (0, createListFromMarkdown_1.createListFromMarkdown)(text, patternName === 'ordered_list' ? 'OL' : 'UL', options, list);
30921
31082
  }
30922
31083
  else {
30923
31084
  return (0, createBlockQuoteFromMarkdown_1.createBlockQuoteFromMarkdown)(text, options, group);
@@ -31005,12 +31166,13 @@ var createParagraphFromMarkdown_1 = __webpack_require__(/*! ./createParagraphFro
31005
31166
  /**
31006
31167
  * @internal
31007
31168
  */
31008
- function createListFromMarkdown(text, listType, options) {
31169
+ function createListFromMarkdown(text, listType, options, list) {
31009
31170
  var marker = text.trim().split(' ')[0];
31010
31171
  var isDummy = isDummyListItem(marker);
31172
+ var startNumber = listType === 'OL' && !list ? parseInt(marker, 10) : undefined;
31011
31173
  var itemText = isDummy ? text : text.trim().substring(marker.length);
31012
31174
  var paragraph = (0, createParagraphFromMarkdown_1.createParagraphFromMarkdown)(itemText.trim(), options);
31013
- var levels = createLevels(text, listType, isDummy, options);
31175
+ var levels = createLevels(text, listType, isDummy, options, startNumber);
31014
31176
  var listModel = (0, roosterjs_content_model_dom_1.createListItem)(levels);
31015
31177
  if (options.direction) {
31016
31178
  listModel.format.direction = options.direction;
@@ -31019,8 +31181,11 @@ function createListFromMarkdown(text, listType, options) {
31019
31181
  return listModel;
31020
31182
  }
31021
31183
  exports.createListFromMarkdown = createListFromMarkdown;
31022
- function createLevels(text, listType, isDummy, options) {
31184
+ function createLevels(text, listType, isDummy, options, startNumberOverride) {
31023
31185
  var level = (0, roosterjs_content_model_dom_1.createListLevel)(listType, options.direction ? { direction: options.direction } : undefined);
31186
+ if (startNumberOverride) {
31187
+ level.format.startNumberOverride = startNumberOverride;
31188
+ }
31024
31189
  if (isDummy) {
31025
31190
  level.format.displayForDummyItem = 'block';
31026
31191
  }
@@ -31309,7 +31474,7 @@ function addMarkdownBlockToModel(model, blockType, markdown, patternName, markdo
31309
31474
  model.blocks.push(divider);
31310
31475
  break;
31311
31476
  case 'BlockGroup':
31312
- var blockGroup = (0, createBlockGroupFromMarkdown_1.createBlockGroupFromMarkdown)(markdown, patternName, options, markdownContext.lastQuote);
31477
+ var blockGroup = (0, createBlockGroupFromMarkdown_1.createBlockGroupFromMarkdown)(markdown, patternName, options, markdownContext.lastQuote, markdownContext.lastList);
31313
31478
  if (!markdownContext.lastQuote) {
31314
31479
  model.blocks.push(blockGroup);
31315
31480
  }
@@ -32161,6 +32326,7 @@ var MarkdownPastePlugin = /** @class */ (function () {
32161
32326
  return true;
32162
32327
  }, {
32163
32328
  apiName: 'MarkdownConversion',
32329
+ changeSource: roosterjs_content_model_dom_1.ChangeSource.AutoMarkdownConversion,
32164
32330
  scrollCaretIntoView: true,
32165
32331
  });
32166
32332
  }
@@ -33742,7 +33908,8 @@ exports.CustomReplacePlugin = CustomReplacePlugin;
33742
33908
 
33743
33909
  Object.defineProperty(exports, "__esModule", ({ value: true }));
33744
33910
  exports.DragAndDropPlugin = void 0;
33745
- var handleDroppedContent_1 = __webpack_require__(/*! ./utils/handleDroppedContent */ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedContent.ts");
33911
+ var handleDroppedExternalContent_1 = __webpack_require__(/*! ./utils/handleDroppedExternalContent */ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedExternalContent.ts");
33912
+ var handleDroppedInternalContent_1 = __webpack_require__(/*! ./utils/handleDroppedInternalContent */ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedInternalContent.ts");
33746
33913
  var DefaultOptions = {
33747
33914
  forbiddenElements: ['iframe'],
33748
33915
  };
@@ -33759,7 +33926,7 @@ var DragAndDropPlugin = /** @class */ (function () {
33759
33926
  var _a;
33760
33927
  this.editor = null;
33761
33928
  this.forbiddenElements = [];
33762
- this.isInternalDragging = false;
33929
+ this.internalDrag = false;
33763
33930
  this.disposer = null;
33764
33931
  this.forbiddenElements = (_a = options.forbiddenElements) !== null && _a !== void 0 ? _a : [];
33765
33932
  }
@@ -33781,7 +33948,7 @@ var DragAndDropPlugin = /** @class */ (function () {
33781
33948
  this.disposer = editor.attachDomEvent({
33782
33949
  dragstart: {
33783
33950
  beforeDispatch: function (_ev) {
33784
- _this.isInternalDragging = true;
33951
+ _this.internalDrag = true;
33785
33952
  },
33786
33953
  },
33787
33954
  });
@@ -33797,7 +33964,6 @@ var DragAndDropPlugin = /** @class */ (function () {
33797
33964
  this.disposer();
33798
33965
  this.disposer = null;
33799
33966
  }
33800
- this.isInternalDragging = false;
33801
33967
  this.forbiddenElements = [];
33802
33968
  };
33803
33969
  /**
@@ -33809,17 +33975,18 @@ var DragAndDropPlugin = /** @class */ (function () {
33809
33975
  DragAndDropPlugin.prototype.onPluginEvent = function (event) {
33810
33976
  var _a;
33811
33977
  if (this.editor && event.eventType == 'beforeDrop') {
33812
- if (this.isInternalDragging) {
33813
- this.isInternalDragging = false;
33978
+ var dropEvent = event.rawEvent;
33979
+ if (this.internalDrag &&
33980
+ this.editor.isExperimentalFeatureEnabled('HandleDropInternalContent')) {
33981
+ (0, handleDroppedInternalContent_1.handleDroppedInternalContent)(this.editor, dropEvent);
33814
33982
  }
33815
- else {
33816
- var dropEvent = event.rawEvent;
33983
+ else if (!this.internalDrag) {
33817
33984
  var html = (_a = dropEvent.dataTransfer) === null || _a === void 0 ? void 0 : _a.getData('text/html');
33818
33985
  if (html) {
33819
- (0, handleDroppedContent_1.handleDroppedContent)(this.editor, dropEvent, html, this.forbiddenElements);
33986
+ (0, handleDroppedExternalContent_1.handleDroppedExternalContent)(this.editor, dropEvent, html, this.forbiddenElements);
33820
33987
  }
33821
33988
  }
33822
- return;
33989
+ this.internalDrag = false;
33823
33990
  }
33824
33991
  };
33825
33992
  return DragAndDropPlugin;
@@ -33873,23 +34040,23 @@ exports.cleanForbiddenElements = cleanForbiddenElements;
33873
34040
 
33874
34041
  /***/ },
33875
34042
 
33876
- /***/ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedContent.ts"
33877
- /*!************************************************************************************************!*\
33878
- !*** ./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedContent.ts ***!
33879
- \************************************************************************************************/
34043
+ /***/ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedExternalContent.ts"
34044
+ /*!********************************************************************************************************!*\
34045
+ !*** ./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedExternalContent.ts ***!
34046
+ \********************************************************************************************************/
33880
34047
  (__unused_webpack_module, exports, __webpack_require__) {
33881
34048
 
33882
34049
  "use strict";
33883
34050
 
33884
34051
  Object.defineProperty(exports, "__esModule", ({ value: true }));
33885
- exports.handleDroppedContent = void 0;
34052
+ exports.handleDroppedExternalContent = void 0;
33886
34053
  var cleanForbiddenElements_1 = __webpack_require__(/*! ./cleanForbiddenElements */ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/cleanForbiddenElements.ts");
33887
34054
  var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
33888
34055
  /**
33889
34056
  * @internal
33890
34057
  * Handle dropped HTML content by inserting it at the drop position
33891
34058
  */
33892
- function handleDroppedContent(editor, event, html, forbiddenElements) {
34059
+ function handleDroppedExternalContent(editor, event, html, forbiddenElements) {
33893
34060
  var doc = editor.getDocument();
33894
34061
  var domPosition = (0, roosterjs_content_model_dom_1.getNodePositionFromEvent)(doc, editor.getDOMHelper(), event.x, event.y);
33895
34062
  if (domPosition) {
@@ -33913,7 +34080,56 @@ function handleDroppedContent(editor, event, html, forbiddenElements) {
33913
34080
  });
33914
34081
  }
33915
34082
  }
33916
- exports.handleDroppedContent = handleDroppedContent;
34083
+ exports.handleDroppedExternalContent = handleDroppedExternalContent;
34084
+
34085
+
34086
+ /***/ },
34087
+
34088
+ /***/ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedInternalContent.ts"
34089
+ /*!********************************************************************************************************!*\
34090
+ !*** ./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedInternalContent.ts ***!
34091
+ \********************************************************************************************************/
34092
+ (__unused_webpack_module, exports, __webpack_require__) {
34093
+
34094
+ "use strict";
34095
+
34096
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
34097
+ exports.handleDroppedInternalContent = void 0;
34098
+ var roosterjs_content_model_api_1 = __webpack_require__(/*! roosterjs-content-model-api */ "./packages/roosterjs-content-model-api/lib/index.ts");
34099
+ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
34100
+ /**
34101
+ * @internal
34102
+ * Handle dropped internal HTML content by inserting it at the drop position
34103
+ */
34104
+ function handleDroppedInternalContent(editor, event) {
34105
+ var doc = editor.getDocument();
34106
+ var domPosition = (0, roosterjs_content_model_dom_1.getNodePositionFromEvent)(doc, editor.getDOMHelper(), event.x, event.y);
34107
+ var selection = editor.getDOMSelection();
34108
+ if (domPosition && selection) {
34109
+ event.preventDefault();
34110
+ event.stopPropagation();
34111
+ (0, roosterjs_content_model_api_1.formatInsertPointWithContentModel)(editor, domPosition, function (model, context, insertPoint) {
34112
+ if (insertPoint) {
34113
+ var cloneModel = (0, roosterjs_content_model_dom_1.cloneModelForPaste)(model);
34114
+ (0, roosterjs_content_model_dom_1.trimModelForSelection)(cloneModel, selection);
34115
+ if ((0, roosterjs_content_model_dom_1.deleteSelection)(model, [], context).deleteResult == 'range') {
34116
+ (0, roosterjs_content_model_dom_1.normalizeContentModel)(model);
34117
+ }
34118
+ var startMarker = (0, roosterjs_content_model_dom_1.createSelectionMarker)(insertPoint.marker.format);
34119
+ var startParagraph = (0, roosterjs_content_model_dom_1.mutateBlock)(insertPoint.paragraph);
34120
+ var startIndex = startParagraph.segments.indexOf(insertPoint.marker);
34121
+ startParagraph.segments.splice(startIndex, 0, startMarker);
34122
+ var newInsertPoint = (0, roosterjs_content_model_dom_1.mergeModel)(model, cloneModel, context, {
34123
+ insertPosition: insertPoint,
34124
+ });
34125
+ if (newInsertPoint) {
34126
+ (0, roosterjs_content_model_dom_1.setSelection)(model, startMarker, newInsertPoint.marker);
34127
+ }
34128
+ }
34129
+ });
34130
+ }
34131
+ }
34132
+ exports.handleDroppedInternalContent = handleDroppedInternalContent;
33917
34133
 
33918
34134
 
33919
34135
  /***/ },
@@ -36987,7 +37203,7 @@ var ImageEditPlugin = /** @class */ (function () {
36987
37203
  if (event.rawEvent.key == 'Enter' && this.isCropMode) {
36988
37204
  event.rawEvent.preventDefault();
36989
37205
  }
36990
- this.applyFormatWithContentModel(editor, this.isCropMode, true /** should selectImage */, false /* isApiOperation */);
37206
+ this.applyFormatWithContentModel(editor, this.isCropMode, false /** should selectImage */, false /* isApiOperation */);
36991
37207
  }
36992
37208
  }
36993
37209
  };
@@ -37027,6 +37243,28 @@ var ImageEditPlugin = /** @class */ (function () {
37027
37243
  var editingImageModel;
37028
37244
  var selection = editor.getDOMSelection();
37029
37245
  var isRTL = false;
37246
+ var formatContentModelOptions = {
37247
+ onNodeCreated: function (model, node) {
37248
+ var _a;
37249
+ if (!isApiOperation &&
37250
+ editingImageModel &&
37251
+ editingImageModel == model &&
37252
+ editingImageModel.format.imageState == findEditingImage_1.EDITING_MARKER &&
37253
+ (0, roosterjs_content_model_dom_1.isNodeOfType)(node, 'ELEMENT_NODE') &&
37254
+ (0, roosterjs_content_model_dom_1.isElementOfType)(node, 'img')) {
37255
+ if (_this.isCropMode) {
37256
+ _this.startCropMode(editor, node, isRTL);
37257
+ }
37258
+ else {
37259
+ (_a = editor.getDocument().defaultView) === null || _a === void 0 ? void 0 : _a.requestAnimationFrame(function () {
37260
+ _this.startRotateAndResize(editor, node, isRTL);
37261
+ });
37262
+ }
37263
+ }
37264
+ },
37265
+ apiName: IMAGE_EDIT_FORMAT_EVENT,
37266
+ skipDOMSelection: false,
37267
+ };
37030
37268
  editor.formatContentModel(function (model, context) {
37031
37269
  var editingImage = (0, getSelectedImage_1.getSelectedImage)(model);
37032
37270
  var previousSelectedImage = isApiOperation
@@ -37085,28 +37323,12 @@ var ImageEditPlugin = /** @class */ (function () {
37085
37323
  _this.imageEditInfo = (0, updateImageEditInfo_1.updateImageEditInfo)(image, selection.image);
37086
37324
  image.format.imageState = 'isEditing';
37087
37325
  });
37326
+ formatContentModelOptions.skipDOMSelection = !isCropMode;
37088
37327
  result = true;
37089
37328
  }
37090
37329
  }
37091
37330
  return result;
37092
- }, {
37093
- onNodeCreated: function (model, node) {
37094
- if (!isApiOperation &&
37095
- editingImageModel &&
37096
- editingImageModel == model &&
37097
- editingImageModel.format.imageState == findEditingImage_1.EDITING_MARKER &&
37098
- (0, roosterjs_content_model_dom_1.isNodeOfType)(node, 'ELEMENT_NODE') &&
37099
- (0, roosterjs_content_model_dom_1.isElementOfType)(node, 'img')) {
37100
- if (isCropMode) {
37101
- _this.startCropMode(editor, node, isRTL);
37102
- }
37103
- else {
37104
- _this.startRotateAndResize(editor, node, isRTL);
37105
- }
37106
- }
37107
- },
37108
- apiName: IMAGE_EDIT_FORMAT_EVENT,
37109
- }, {
37331
+ }, formatContentModelOptions, {
37110
37332
  tryGetFromCache: true,
37111
37333
  });
37112
37334
  };
@@ -38092,7 +38314,6 @@ var createImageCropper_1 = __webpack_require__(/*! ../Cropper/createImageCropper
38092
38314
  var createImageResizer_1 = __webpack_require__(/*! ../Resizer/createImageResizer */ "./packages/roosterjs-content-model-plugins/lib/imageEdit/Resizer/createImageResizer.ts");
38093
38315
  var createImageRotator_1 = __webpack_require__(/*! ../Rotator/createImageRotator */ "./packages/roosterjs-content-model-plugins/lib/imageEdit/Rotator/createImageRotator.ts");
38094
38316
  var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
38095
- var IMAGE_EDIT_SHADOW_ROOT = 'ImageEditShadowRoot';
38096
38317
  /**
38097
38318
  * @internal
38098
38319
  */
@@ -38125,15 +38346,8 @@ var createShadowSpan = function (wrapper, imageSpan, imageWidth, imageHeight) {
38125
38346
  var shadowRoot = imageSpan.attachShadow({
38126
38347
  mode: 'open',
38127
38348
  });
38128
- imageSpan.id = IMAGE_EDIT_SHADOW_ROOT;
38129
- // Pin the shadow host to the original image's box so that wrapping the image does not grow the
38130
- // surrounding line box. Without this, the taller edit wrapper enlarges the line and the browser
38131
- // scrolls the selection back into view, making the editor jump. The wrapper and handles still
38132
- // overflow the host visually because overflow is left visible.
38133
38349
  if (imageWidth > 0 && imageHeight > 0) {
38134
38350
  imageSpan.style.display = 'inline-block';
38135
- imageSpan.style.width = imageWidth + "px";
38136
- imageSpan.style.height = imageHeight + "px";
38137
38351
  imageSpan.style.verticalAlign = 'bottom';
38138
38352
  imageSpan.style.overflow = 'visible';
38139
38353
  }
@@ -38807,7 +39021,7 @@ function getSelectedImageMetadata(editor, image) {
38807
39021
  (0, roosterjs_content_model_dom_1.mutateSegment)(selectedImage.paragraph, selectedImage === null || selectedImage === void 0 ? void 0 : selectedImage.image, function (modelImage) {
38808
39022
  imageMetadata = updateImageEditInfo(modelImage, image);
38809
39023
  });
38810
- return true;
39024
+ return false;
38811
39025
  }
38812
39026
  return false;
38813
39027
  });
@@ -39617,6 +39831,7 @@ var BulletSelector = '* > span > span[style*=mso-special-format]';
39617
39831
  var MsOfficeSpecialFormat = 'mso-special-format';
39618
39832
  var CssStyleKey = 'style';
39619
39833
  var MsoSpecialFormatRegex = /mso-special-format:\s*([^;]*)/;
39834
+ var TableElementTags = new Set(['TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TR', 'TD', 'TH']);
39620
39835
  var clearListItemStyles = function (format) {
39621
39836
  delete format.textAlign;
39622
39837
  delete format.marginLeft;
@@ -39643,7 +39858,9 @@ function processPastedContentFromPowerPoint(event, domCreator) {
39643
39858
  if (style.includes(MsOfficeSpecialFormat) && context.listFormat.levels.length > 0) {
39644
39859
  return;
39645
39860
  }
39646
- var bulletElement = element.querySelector(BulletSelector);
39861
+ var bulletElement = !TableElementTags.has(element.tagName)
39862
+ ? element.querySelector(BulletSelector)
39863
+ : null;
39647
39864
  if (bulletElement) {
39648
39865
  var _c = extractPowerPointListInfo(element, bulletElement), depth = _c.depth, unorderedBulletType = _c.unorderedBulletType, orderedBulletType = _c.orderedBulletType, startNumberOverrideOrBullet_1 = _c.startNumberOverrideOrBullet, isOrderedList = _c.isOrderedList, isNewList_1 = _c.isNewList;
39649
39866
  // Setup the listformat with the metadata extracted from the bullet element
@@ -39664,6 +39881,12 @@ function processPastedContentFromPowerPoint(event, domCreator) {
39664
39881
  }
39665
39882
  clearListItemStyles(listItem.levels[listItem.levels.length - 1].format);
39666
39883
  clearListItemStyles(listItem.format);
39884
+ // When the list is inside a table cell, remove the font size from the
39885
+ // list marker so it does not inherit the list's font size. Otherwise a
39886
+ // large marker may be rendered outside of the table cell.
39887
+ if (element.closest('td,th')) {
39888
+ delete listItem.formatHolder.format.fontSize;
39889
+ }
39667
39890
  });
39668
39891
  }
39669
39892
  else {