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