roosterjs 9.46.0 → 9.47.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.
@@ -1,4 +1,4 @@
1
- // Type definitions for roosterjs (Version 9.46.0)
1
+ // Type definitions for roosterjs (Version 9.47.0)
2
2
  // Generated by dts tool from roosterjs
3
3
  // Project: https://github.com/Microsoft/roosterjs
4
4
 
@@ -3011,6 +3011,18 @@ export interface DomToModelListFormat {
3011
3011
  export interface ModelToDomContext extends EditorContext, ModelToDomSelectionContext, ModelToDomFormatContext, ModelToDomSettings, RewriteFromModelContext {
3012
3012
  }
3013
3013
 
3014
+ /**
3015
+ * Extended context used by segment and text handlers to carry per-paragraph segment state
3016
+ */
3017
+ export interface ModelToDomSegmentContext extends ModelToDomContext {
3018
+ /**
3019
+ * Whether the current segment is the last segment in the paragraph,
3020
+ * or there are no more Text segments after it (excluding SelectionMarkers).
3021
+ * When true, trailing spaces should be converted to  .
3022
+ */
3023
+ noFollowingTextSegmentOrLast?: boolean;
3024
+ }
3025
+
3014
3026
  /**
3015
3027
  * Represents internal data structure for a selection position, combined by block and segment node
3016
3028
  */
@@ -3151,7 +3163,7 @@ export type ContentModelHandler<T extends ContentModelSegment | ContentModelBloc
3151
3163
  * - For segments with decorators: decorator elements will also be included
3152
3164
  * - For inline entity segment, the delimiter SPANs will also be included
3153
3165
  */
3154
- export type ContentModelSegmentHandler<T extends ContentModelSegment> = (doc: Document, parent: Node, model: T, context: ModelToDomContext, segmentNodes: Node[]) => void;
3166
+ export type ContentModelSegmentHandler<T extends ContentModelSegment> = (doc: Document, parent: Node, model: T, context: ModelToDomSegmentContext, segmentNodes: Node[]) => void;
3155
3167
 
3156
3168
  /**
3157
3169
  * Type of Content Model to DOM handler for block
@@ -7615,6 +7627,15 @@ export function isModifierKey(event: KeyboardEvent): boolean;
7615
7627
  */
7616
7628
  export function isCursorMovingKey(event: KeyboardEvent): boolean;
7617
7629
 
7630
+ /**
7631
+ * Get insertion point from coordinate.
7632
+ * @param doc Parent document object
7633
+ * @param domHelper The DOM helper of the editor
7634
+ * @param x The cursor coordinate for the x-axis
7635
+ * @param y The cursor coordinate for the y-axis
7636
+ */
7637
+ export function getNodePositionFromEvent(doc: Document, domHelper: DOMHelper, x: number, y: number): DOMInsertPoint | null;
7638
+
7618
7639
  /**
7619
7640
  * Combine border value array back to string
7620
7641
  * @param values Input string values
@@ -12427,7 +12427,8 @@ var TextMutationObserverImpl = /** @class */ (function () {
12427
12427
  continue;
12428
12428
  }
12429
12429
  else if (!includedNodes.has(target)) {
12430
- if ((0, roosterjs_content_model_dom_1.findClosestEntityWrapper)(target, _this.domHelper) ||
12430
+ if (!_this.domHelper.isNodeInEditor(target) ||
12431
+ (0, roosterjs_content_model_dom_1.findClosestEntityWrapper)(target, _this.domHelper) ||
12431
12432
  (0, roosterjs_content_model_dom_1.findClosestBlockEntityContainer)(target, _this.domHelper)) {
12432
12433
  ignoredNodes.add(target);
12433
12434
  continue;
@@ -14760,7 +14761,9 @@ var SelectionPlugin = /** @class */ (function () {
14760
14761
  rawEvent.preventDefault();
14761
14762
  }
14762
14763
  else {
14763
- win === null || win === void 0 ? void 0 : win.requestAnimationFrame(function () { return _this.handleSelectionInTable(key); });
14764
+ win === null || win === void 0 ? void 0 : win.requestAnimationFrame(function () {
14765
+ return _this.handleSelectionInTable(key, selection.range);
14766
+ });
14764
14767
  }
14765
14768
  }
14766
14769
  }
@@ -14809,7 +14812,7 @@ var SelectionPlugin = /** @class */ (function () {
14809
14812
  SelectionPlugin.prototype.getTabKey = function (rawEvent) {
14810
14813
  return rawEvent.shiftKey ? 'TabLeft' : 'TabRight';
14811
14814
  };
14812
- SelectionPlugin.prototype.handleSelectionInTable = function (key) {
14815
+ SelectionPlugin.prototype.handleSelectionInTable = function (key, rangeBeforeChange) {
14813
14816
  var _a, _b, _c, _d, _e, _f;
14814
14817
  if (!this.editor || !this.state.tableSelection) {
14815
14818
  return;
@@ -14843,7 +14846,15 @@ var SelectionPlugin = /** @class */ (function () {
14843
14846
  }
14844
14847
  }
14845
14848
  if (collapsed && td) {
14846
- this.setRangeSelectionInTable(td, key == Up ? td.childNodes.length : 0, this.editor);
14849
+ var textOffset = (key == 'ArrowUp' || key == 'ArrowDown') && rangeBeforeChange
14850
+ ? this.getTextOffset(this.editor, rangeBeforeChange, td, key == 'ArrowUp')
14851
+ : null;
14852
+ if (textOffset) {
14853
+ this.setRangeSelectionInTable(textOffset.node, textOffset.offset, this.editor, false /* selectAll */);
14854
+ }
14855
+ else {
14856
+ this.setRangeSelectionInTable(td, 0, this.editor, false /* selectAll */);
14857
+ }
14847
14858
  }
14848
14859
  else if (!td && (lastCo.row == -1 || lastCo.row <= parsedTable.length)) {
14849
14860
  this.selectBeforeOrAfterElement(this.editor, table, change == 1 /* after */, change != 1 /* setSelectionInNextSiblingElement */);
@@ -14894,8 +14905,23 @@ var SelectionPlugin = /** @class */ (function () {
14894
14905
  }
14895
14906
  }
14896
14907
  };
14908
+ SelectionPlugin.prototype.getTextOffset = function (editor, range, td, isKeyUp) {
14909
+ var doc = editor.getDocument();
14910
+ var cursorRect = range
14911
+ ? (0, roosterjs_content_model_dom_1.getDOMInsertPointRect)(doc, {
14912
+ node: range.startContainer,
14913
+ offset: range.startOffset,
14914
+ })
14915
+ : undefined;
14916
+ var rect = td === null || td === void 0 ? void 0 : td.getBoundingClientRect();
14917
+ var textOffset = cursorRect && rect
14918
+ ? (0, roosterjs_content_model_dom_1.getNodePositionFromEvent)(doc, editor.getDOMHelper(), cursorRect.left, isKeyUp ? rect.top - 1 : rect.top + 1)
14919
+ : null;
14920
+ return textOffset;
14921
+ };
14897
14922
  SelectionPlugin.prototype.setRangeSelectionInTable = function (cell, nodeOffset, editor, selectAll) {
14898
- var range = editor.getDocument().createRange();
14923
+ var doc = editor.getDocument();
14924
+ var range = doc.createRange();
14899
14925
  if (selectAll && cell.firstChild && cell.lastChild) {
14900
14926
  var cellStart = cell.firstChild;
14901
14927
  var cellEnd = cell.lastChild;
@@ -19680,6 +19706,52 @@ function getAllowedCustomType(type, allowedCustomPasteType) {
19680
19706
  }
19681
19707
 
19682
19708
 
19709
+ /***/ },
19710
+
19711
+ /***/ "./packages/roosterjs-content-model-dom/lib/domUtils/event/getNodePositionFromEvent.ts"
19712
+ /*!*********************************************************************************************!*\
19713
+ !*** ./packages/roosterjs-content-model-dom/lib/domUtils/event/getNodePositionFromEvent.ts ***!
19714
+ \*********************************************************************************************/
19715
+ (__unused_webpack_module, exports) {
19716
+
19717
+ "use strict";
19718
+
19719
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
19720
+ exports.getNodePositionFromEvent = void 0;
19721
+ /**
19722
+ * Get insertion point from coordinate.
19723
+ * @param doc Parent document object
19724
+ * @param domHelper The DOM helper of the editor
19725
+ * @param x The cursor coordinate for the x-axis
19726
+ * @param y The cursor coordinate for the y-axis
19727
+ */
19728
+ function getNodePositionFromEvent(doc, domHelper, x, y) {
19729
+ if ('caretPositionFromPoint' in doc) {
19730
+ // Firefox, Chrome, Edge, Safari, Opera
19731
+ var pos = doc.caretPositionFromPoint(x, y);
19732
+ if (pos && domHelper.isNodeInEditor(pos.offsetNode)) {
19733
+ return { node: pos.offsetNode, offset: pos.offset };
19734
+ }
19735
+ }
19736
+ if (doc.caretRangeFromPoint) {
19737
+ // Safari
19738
+ var range = doc.caretRangeFromPoint(x, y);
19739
+ if (range && domHelper.isNodeInEditor(range.startContainer)) {
19740
+ return { node: range.startContainer, offset: range.startOffset };
19741
+ }
19742
+ }
19743
+ if (doc.elementFromPoint) {
19744
+ // Fallback
19745
+ var element = doc.elementFromPoint(x, y);
19746
+ if (element && domHelper.isNodeInEditor(element)) {
19747
+ return { node: element, offset: 0 };
19748
+ }
19749
+ }
19750
+ return null;
19751
+ }
19752
+ exports.getNodePositionFromEvent = getNodePositionFromEvent;
19753
+
19754
+
19683
19755
  /***/ },
19684
19756
 
19685
19757
  /***/ "./packages/roosterjs-content-model-dom/lib/domUtils/getObjectKeys.ts"
@@ -23510,8 +23582,8 @@ exports.shouldSetValue = shouldSetValue;
23510
23582
  Object.defineProperty(exports, "__esModule", ({ value: true }));
23511
23583
  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;
23512
23584
  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;
23513
- exports.updateImageMetadata = exports.runEditSteps = 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.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.isCursorMovingKey = exports.isModifierKey = exports.isCharacterValue = void 0;
23514
- 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 = void 0;
23585
+ exports.runEditSteps = 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.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;
23586
+ 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 = void 0;
23515
23587
  var domToContentModel_1 = __webpack_require__(/*! ./domToModel/domToContentModel */ "./packages/roosterjs-content-model-dom/lib/domToModel/domToContentModel.ts");
23516
23588
  Object.defineProperty(exports, "domToContentModel", ({ enumerable: true, get: function () { return domToContentModel_1.domToContentModel; } }));
23517
23589
  var contentModelToDom_1 = __webpack_require__(/*! ./modelToDom/contentModelToDom */ "./packages/roosterjs-content-model-dom/lib/modelToDom/contentModelToDom.ts");
@@ -23688,6 +23760,8 @@ var eventUtils_1 = __webpack_require__(/*! ./domUtils/event/eventUtils */ "./pac
23688
23760
  Object.defineProperty(exports, "isCharacterValue", ({ enumerable: true, get: function () { return eventUtils_1.isCharacterValue; } }));
23689
23761
  Object.defineProperty(exports, "isModifierKey", ({ enumerable: true, get: function () { return eventUtils_1.isModifierKey; } }));
23690
23762
  Object.defineProperty(exports, "isCursorMovingKey", ({ enumerable: true, get: function () { return eventUtils_1.isCursorMovingKey; } }));
23763
+ var getNodePositionFromEvent_1 = __webpack_require__(/*! ./domUtils/event/getNodePositionFromEvent */ "./packages/roosterjs-content-model-dom/lib/domUtils/event/getNodePositionFromEvent.ts");
23764
+ Object.defineProperty(exports, "getNodePositionFromEvent", ({ enumerable: true, get: function () { return getNodePositionFromEvent_1.getNodePositionFromEvent; } }));
23691
23765
  var borderValues_1 = __webpack_require__(/*! ./domUtils/style/borderValues */ "./packages/roosterjs-content-model-dom/lib/domUtils/style/borderValues.ts");
23692
23766
  Object.defineProperty(exports, "combineBorderValue", ({ enumerable: true, get: function () { return borderValues_1.combineBorderValue; } }));
23693
23767
  Object.defineProperty(exports, "extractBorderValues", ({ enumerable: true, get: function () { return borderValues_1.extractBorderValues; } }));
@@ -29513,23 +29587,40 @@ var handleParagraph = function (doc, parent, paragraph, context, refNode) {
29513
29587
  segment: null,
29514
29588
  };
29515
29589
  var handleSegments = function () {
29590
+ var e_1, _a;
29591
+ var _b;
29516
29592
  var parent = container;
29517
29593
  if (parent) {
29518
29594
  var firstSegment = paragraph.segments[0];
29595
+ var segmentContext = context;
29519
29596
  if ((firstSegment === null || firstSegment === void 0 ? void 0 : firstSegment.segmentType) == 'SelectionMarker') {
29520
29597
  // Make sure there is a segment created before selection marker.
29521
29598
  // If selection marker is the first selected segment in a paragraph, create a dummy text node,
29522
29599
  // so after rewrite, the regularSelection object can have a valid segment object set to the text node.
29523
- context.modelHandlers.text(doc, parent, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, firstSegment), { segmentType: 'Text', text: '' }), context, []);
29600
+ context.modelHandlers.text(doc, parent, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, firstSegment), { segmentType: 'Text', text: '' }), segmentContext, []);
29524
29601
  }
29525
- paragraph.segments.forEach(function (segment) {
29602
+ for (var i = 0; i < paragraph.segments.length; i++) {
29603
+ var segment = paragraph.segments[i];
29604
+ segmentContext.noFollowingTextSegmentOrLast =
29605
+ i === paragraph.segments.length - 1 ||
29606
+ !hasTextSegmentAfter(paragraph.segments, i);
29526
29607
  var newSegments = [];
29527
- context.modelHandlers.segment(doc, parent, segment, context, newSegments);
29528
- newSegments.forEach(function (node) {
29529
- var _a;
29530
- (_a = context.domIndexer) === null || _a === void 0 ? void 0 : _a.onSegment(node, paragraph, [segment]);
29531
- });
29532
- });
29608
+ context.modelHandlers.segment(doc, parent, segment, segmentContext, newSegments);
29609
+ try {
29610
+ for (var newSegments_1 = (e_1 = void 0, (0, tslib_1.__values)(newSegments)), newSegments_1_1 = newSegments_1.next(); !newSegments_1_1.done; newSegments_1_1 = newSegments_1.next()) {
29611
+ var node = newSegments_1_1.value;
29612
+ (_b = context.domIndexer) === null || _b === void 0 ? void 0 : _b.onSegment(node, paragraph, [segment]);
29613
+ }
29614
+ }
29615
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
29616
+ finally {
29617
+ try {
29618
+ if (newSegments_1_1 && !newSegments_1_1.done && (_a = newSegments_1.return)) _a.call(newSegments_1);
29619
+ }
29620
+ finally { if (e_1) throw e_1.error; }
29621
+ }
29622
+ }
29623
+ delete segmentContext.noFollowingTextSegmentOrLast;
29533
29624
  }
29534
29625
  };
29535
29626
  if (needParagraphWrapper) {
@@ -29569,6 +29660,21 @@ var handleParagraph = function (doc, parent, paragraph, context, refNode) {
29569
29660
  return refNode;
29570
29661
  };
29571
29662
  exports.handleParagraph = handleParagraph;
29663
+ function hasTextSegmentAfter(segments, index) {
29664
+ for (var i = index + 1; i < segments.length; i++) {
29665
+ var type = segments[i].segmentType;
29666
+ if (type === 'SelectionMarker') {
29667
+ continue;
29668
+ }
29669
+ if (type === 'Text') {
29670
+ return true;
29671
+ }
29672
+ else {
29673
+ return false;
29674
+ }
29675
+ }
29676
+ return false;
29677
+ }
29572
29678
 
29573
29679
 
29574
29680
  /***/ },
@@ -29809,11 +29915,15 @@ exports.handleTable = handleTable;
29809
29915
  Object.defineProperty(exports, "__esModule", ({ value: true }));
29810
29916
  exports.handleText = void 0;
29811
29917
  var handleSegmentCommon_1 = __webpack_require__(/*! ../utils/handleSegmentCommon */ "./packages/roosterjs-content-model-dom/lib/modelToDom/utils/handleSegmentCommon.ts");
29918
+ var nonBreakingSpace = '\u00A0';
29812
29919
  /**
29813
29920
  * @internal
29814
29921
  */
29815
29922
  var handleText = function (doc, parent, segment, context, segmentNodes) {
29816
- var txt = doc.createTextNode(segment.text);
29923
+ var textContent = context.noFollowingTextSegmentOrLast && segment.text.endsWith(' ')
29924
+ ? segment.text.slice(0, -1) + nonBreakingSpace
29925
+ : segment.text;
29926
+ var txt = doc.createTextNode(textContent);
29817
29927
  var element = doc.createElement('span');
29818
29928
  parent.appendChild(element);
29819
29929
  element.appendChild(txt);
@@ -39244,6 +39354,7 @@ var getStyles_1 = __webpack_require__(/*! ../utils/getStyles */ "./packages/roos
39244
39354
  var listLevelParser_1 = __webpack_require__(/*! ../parsers/listLevelParser */ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/listLevelParser.ts");
39245
39355
  var processWordComments_1 = __webpack_require__(/*! ./processWordComments */ "./packages/roosterjs-content-model-plugins/lib/paste/WordDesktop/processWordComments.ts");
39246
39356
  var processWordLists_1 = __webpack_require__(/*! ./processWordLists */ "./packages/roosterjs-content-model-plugins/lib/paste/WordDesktop/processWordLists.ts");
39357
+ var adjustWordListMarginParser_1 = __webpack_require__(/*! ../parsers/adjustWordListMarginParser */ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/adjustWordListMarginParser.ts");
39247
39358
  var removeNegativeTextIndentParser_1 = __webpack_require__(/*! ../parsers/removeNegativeTextIndentParser */ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/removeNegativeTextIndentParser.ts");
39248
39359
  var setProcessor_1 = __webpack_require__(/*! ../utils/setProcessor */ "./packages/roosterjs-content-model-plugins/lib/paste/utils/setProcessor.ts");
39249
39360
  var wordContainerParser_1 = __webpack_require__(/*! ../parsers/wordContainerParser */ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/wordContainerParser.ts");
@@ -39260,6 +39371,7 @@ function processPastedContentFromWordDesktop(domToModelOption, htmlString) {
39260
39371
  (0, addParser_1.addParser)(domToModelOption, 'block', adjustPercentileLineHeightParser_1.adjustPercentileLineHeight);
39261
39372
  (0, addParser_1.addParser)(domToModelOption, 'block', removeNegativeTextIndentParser_1.removeNegativeTextIndentParser);
39262
39373
  (0, addParser_1.addParser)(domToModelOption, 'listItemElement', removeNegativeTextIndentParser_1.removeNegativeTextIndentParser);
39374
+ (0, addParser_1.addParser)(domToModelOption, 'listItemElement', adjustWordListMarginParser_1.adjustWordListMarginParser);
39263
39375
  (0, addParser_1.addParser)(domToModelOption, 'listLevel', listLevelParser_1.listLevelParser);
39264
39376
  (0, addParser_1.addParser)(domToModelOption, 'container', wordContainerParser_1.wordContainerParser);
39265
39377
  (0, addParser_1.addParser)(domToModelOption, 'table', wordTableParser_1.wordTableParser);
@@ -39684,6 +39796,42 @@ function adjustPercentileLineHeight(format, element) {
39684
39796
  exports.adjustPercentileLineHeight = adjustPercentileLineHeight;
39685
39797
 
39686
39798
 
39799
+ /***/ },
39800
+
39801
+ /***/ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/adjustWordListMarginParser.ts"
39802
+ /*!**************************************************************************************************!*\
39803
+ !*** ./packages/roosterjs-content-model-plugins/lib/paste/parsers/adjustWordListMarginParser.ts ***!
39804
+ \**************************************************************************************************/
39805
+ (__unused_webpack_module, exports, __webpack_require__) {
39806
+
39807
+ "use strict";
39808
+
39809
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
39810
+ exports.adjustWordListMarginParser = void 0;
39811
+ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
39812
+ var MSO_LIST_PARAGRAPH_CLASS = 'MsoListParagraph';
39813
+ // Default list padding from the HTML user-agent stylesheet (paddingInlineStart for <ul>/<ol>)
39814
+ var DEFAULT_LIST_PADDING_INLINE_START = '40px';
39815
+ /**
39816
+ * @internal
39817
+ * Parser that subtracts the default list format (paddingInlineStart: 40px) from
39818
+ * the marginLeft of list item elements that have the MsoListParagraph class,
39819
+ * since Word adds the full indentation as margin on the paragraph, which
39820
+ * duplicates the padding the list element already provides.
39821
+ */
39822
+ var adjustWordListMarginParser = function (format, element) {
39823
+ if (element.classList.contains(MSO_LIST_PARAGRAPH_CLASS) && format.marginLeft) {
39824
+ var currentPx = (0, roosterjs_content_model_dom_1.parseValueWithUnit)(format.marginLeft, element);
39825
+ var defaultPx = (0, roosterjs_content_model_dom_1.parseValueWithUnit)(DEFAULT_LIST_PADDING_INLINE_START);
39826
+ var result = currentPx - defaultPx;
39827
+ if (result > 0) {
39828
+ format.marginLeft = result + "px";
39829
+ }
39830
+ }
39831
+ };
39832
+ exports.adjustWordListMarginParser = adjustWordListMarginParser;
39833
+
39834
+
39687
39835
  /***/ },
39688
39836
 
39689
39837
  /***/ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/blockElementParser.ts"
@@ -42569,7 +42717,6 @@ var createElement_1 = __webpack_require__(/*! ../../../pluginUtils/CreateElement
42569
42717
  var DragAndDropHelper_1 = __webpack_require__(/*! ../../../pluginUtils/DragAndDrop/DragAndDropHelper */ "./packages/roosterjs-content-model-plugins/lib/pluginUtils/DragAndDrop/DragAndDropHelper.ts");
42570
42718
  var roosterjs_content_model_api_1 = __webpack_require__(/*! roosterjs-content-model-api */ "./packages/roosterjs-content-model-api/lib/index.ts");
42571
42719
  var getTableFromContentModel_1 = __webpack_require__(/*! ../utils/getTableFromContentModel */ "./packages/roosterjs-content-model-plugins/lib/tableEdit/editors/utils/getTableFromContentModel.ts");
42572
- var getNodePositionFromEvent_1 = __webpack_require__(/*! ../../../utils/getNodePositionFromEvent */ "./packages/roosterjs-content-model-plugins/lib/utils/getNodePositionFromEvent.ts");
42573
42720
  var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
42574
42721
  var TABLE_MOVER_LENGTH = 12;
42575
42722
  /**
@@ -42697,7 +42844,7 @@ function onDragging(context, event, initValue) {
42697
42844
  // Move table outline rectangle
42698
42845
  tableRect.style.top = event.clientY + TABLE_MOVER_LENGTH + "px";
42699
42846
  tableRect.style.left = event.clientX + TABLE_MOVER_LENGTH + "px";
42700
- var pos = (0, getNodePositionFromEvent_1.getNodePositionFromEvent)(editor, event.clientX, event.clientY);
42847
+ var pos = (0, roosterjs_content_model_dom_1.getNodePositionFromEvent)(editor.getDocument(), editor.getDOMHelper(), event.clientX, event.clientY);
42701
42848
  if (pos) {
42702
42849
  var range = editor.getDocument().createRange();
42703
42850
  range.setStart(pos.node, pos.offset);
@@ -42737,7 +42884,7 @@ function onDragEnd(context, event, initValue) {
42737
42884
  }
42738
42885
  var insertionSuccess_1 = false;
42739
42886
  // Get position to insert table
42740
- var insertPosition = (0, getNodePositionFromEvent_1.getNodePositionFromEvent)(editor, event.clientX, event.clientY);
42887
+ var insertPosition = (0, roosterjs_content_model_dom_1.getNodePositionFromEvent)(editor.getDocument(), editor.getDOMHelper(), event.clientX, event.clientY);
42741
42888
  if (insertPosition) {
42742
42889
  // Move table to new position
42743
42890
  (0, roosterjs_content_model_api_1.formatInsertPointWithContentModel)(editor, insertPosition, function (model, context, ip) {
@@ -43274,7 +43421,7 @@ exports.getCMTableFromTable = getCMTableFromTable;
43274
43421
 
43275
43422
  Object.defineProperty(exports, "__esModule", ({ value: true }));
43276
43423
  exports.TouchPlugin = void 0;
43277
- var getNodePositionFromEvent_1 = __webpack_require__(/*! ../utils/getNodePositionFromEvent */ "./packages/roosterjs-content-model-plugins/lib/utils/getNodePositionFromEvent.ts");
43424
+ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
43278
43425
  var MAX_TOUCH_MOVE_DISTANCE = 6; // the max number of offsets for the touch selection to move
43279
43426
  var POINTER_DETECTION_DELAY = 150; // Delay time to wait for selection to be updated and also detect if pointerup is a tap or part of double tap
43280
43427
  var PUNCTUATION_MATCHING_REGEX = /[.,;:!]/;
@@ -43342,7 +43489,7 @@ var TouchPlugin = /** @class */ (function () {
43342
43489
  if (_this.editor) {
43343
43490
  if (!_this.isDblClicked) {
43344
43491
  _this.editor.focus();
43345
- var caretPosition = (0, getNodePositionFromEvent_1.getNodePositionFromEvent)(_this.editor, event.rawEvent.x, event.rawEvent.y);
43492
+ var caretPosition = (0, roosterjs_content_model_dom_1.getNodePositionFromEvent)(_this.editor.getDocument(), _this.editor.getDOMHelper(), event.rawEvent.x, event.rawEvent.y);
43346
43493
  var newRange = _this.editor.getDocument().createRange();
43347
43494
  if (caretPosition) {
43348
43495
  var node = caretPosition.node, offset = caretPosition.offset;
@@ -43390,7 +43537,7 @@ var TouchPlugin = /** @class */ (function () {
43390
43537
  if (this.isTouchPenPointerEvent) {
43391
43538
  event.rawEvent.preventDefault();
43392
43539
  this.isDblClicked = true;
43393
- var caretPosition = (0, getNodePositionFromEvent_1.getNodePositionFromEvent)(this.editor, event.rawEvent.x, event.rawEvent.y);
43540
+ var caretPosition = (0, roosterjs_content_model_dom_1.getNodePositionFromEvent)(this.editor.getDocument(), this.editor.getDOMHelper(), event.rawEvent.x, event.rawEvent.y);
43394
43541
  if (caretPosition) {
43395
43542
  var node = caretPosition.node, offset = caretPosition.offset;
43396
43543
  if (node.nodeType !== Node.TEXT_NODE) {
@@ -43484,50 +43631,6 @@ function findWordBoundaries(text, offset) {
43484
43631
  }
43485
43632
 
43486
43633
 
43487
- /***/ },
43488
-
43489
- /***/ "./packages/roosterjs-content-model-plugins/lib/utils/getNodePositionFromEvent.ts"
43490
- /*!****************************************************************************************!*\
43491
- !*** ./packages/roosterjs-content-model-plugins/lib/utils/getNodePositionFromEvent.ts ***!
43492
- \****************************************************************************************/
43493
- (__unused_webpack_module, exports) {
43494
-
43495
- "use strict";
43496
-
43497
- Object.defineProperty(exports, "__esModule", ({ value: true }));
43498
- exports.getNodePositionFromEvent = void 0;
43499
- /**
43500
- * @internal Get insertion point from coordinate.
43501
- */
43502
- function getNodePositionFromEvent(editor, x, y) {
43503
- var doc = editor.getDocument();
43504
- var domHelper = editor.getDOMHelper();
43505
- if ('caretPositionFromPoint' in doc) {
43506
- // Firefox, Chrome, Edge, Safari, Opera
43507
- var pos = doc.caretPositionFromPoint(x, y);
43508
- if (pos && domHelper.isNodeInEditor(pos.offsetNode)) {
43509
- return { node: pos.offsetNode, offset: pos.offset };
43510
- }
43511
- }
43512
- if (doc.caretRangeFromPoint) {
43513
- // Safari
43514
- var range = doc.caretRangeFromPoint(x, y);
43515
- if (range && domHelper.isNodeInEditor(range.startContainer)) {
43516
- return { node: range.startContainer, offset: range.startOffset };
43517
- }
43518
- }
43519
- if (doc.elementFromPoint) {
43520
- // Fallback
43521
- var element = doc.elementFromPoint(x, y);
43522
- if (element && domHelper.isNodeInEditor(element)) {
43523
- return { node: element, offset: 0 };
43524
- }
43525
- }
43526
- return null;
43527
- }
43528
- exports.getNodePositionFromEvent = getNodePositionFromEvent;
43529
-
43530
-
43531
43634
  /***/ },
43532
43635
 
43533
43636
  /***/ "./packages/roosterjs-content-model-plugins/lib/watermark/WatermarkPlugin.ts"