roosterjs 9.41.0 → 9.42.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.
@@ -7100,6 +7100,7 @@ exports.formatTable = formatTable;
7100
7100
 
7101
7101
  Object.defineProperty(exports, "__esModule", ({ value: true }));
7102
7102
  exports.insertTable = void 0;
7103
+ var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
7103
7104
  var adjustIndentation_1 = __webpack_require__(/*! ../../modelApi/common/adjustIndentation */ "./packages/roosterjs-content-model-api/lib/modelApi/common/adjustIndentation.ts");
7104
7105
  var createTableStructure_1 = __webpack_require__(/*! ../../modelApi/table/createTableStructure */ "./packages/roosterjs-content-model-api/lib/modelApi/table/createTableStructure.ts");
7105
7106
  var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
@@ -7109,10 +7110,10 @@ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-mo
7109
7110
  * @param columns Number of columns in table, it also controls the default table cell width:
7110
7111
  * if columns <= 4, width = 120px; if columns <= 6, width = 100px; else width = 70px
7111
7112
  * @param rows Number of rows in table
7112
- * @param format (Optional) The table format. If not passed, the default format will be applied:
7113
- * background color: #FFF; border color: #ABABAB
7113
+ * @param tableMetadataFormat (Optional) The table format that are stored as metadata. If not passed, the default format will be applied: background color: #FFF; border color: #ABABAB
7114
+ * @param format (Optional) The table format used for style attributes
7114
7115
  */
7115
- function insertTable(editor, columns, rows, format) {
7116
+ function insertTable(editor, columns, rows, tableMetadataFormat, format) {
7116
7117
  editor.focus();
7117
7118
  editor.formatContentModel(function (model, context) {
7118
7119
  var _a, _b, _c;
@@ -7120,11 +7121,14 @@ function insertTable(editor, columns, rows, format) {
7120
7121
  if (insertPosition) {
7121
7122
  var doc = (0, roosterjs_content_model_dom_1.createContentModelDocument)();
7122
7123
  var table = (0, createTableStructure_1.createTableStructure)(doc, columns, rows);
7124
+ if (format) {
7125
+ table.format = (0, tslib_1.__assign)({}, format);
7126
+ }
7123
7127
  (0, roosterjs_content_model_dom_1.normalizeTable)(table, editor.getPendingFormat() || insertPosition.marker.format);
7124
7128
  (0, adjustIndentation_1.adjustTableIndentation)(insertPosition, table);
7125
7129
  // Assign default vertical align
7126
- format = format || { verticalAlign: 'top' };
7127
- (0, roosterjs_content_model_dom_1.applyTableFormat)(table, format);
7130
+ tableMetadataFormat = tableMetadataFormat || { verticalAlign: 'top' };
7131
+ (0, roosterjs_content_model_dom_1.applyTableFormat)(table, tableMetadataFormat);
7128
7132
  (0, roosterjs_content_model_dom_1.mergeModel)(model, doc, context, {
7129
7133
  insertPosition: insertPosition,
7130
7134
  mergeFormat: 'mergeAll',
@@ -7783,9 +7787,9 @@ var DefaultSanitizingOption = {
7783
7787
  /**
7784
7788
  * @internal
7785
7789
  */
7786
- function createDomToModelContextForSanitizing(document, defaultFormat, defaultOption, additionalSanitizingOption) {
7790
+ function createDomToModelContextForSanitizing(document, defaultFormat, defaultOption, additionalSanitizingOption, domHelper) {
7787
7791
  var sanitizingOption = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, DefaultSanitizingOption), additionalSanitizingOption);
7788
- return (0, roosterjs_content_model_dom_1.createDomToModelContext)((0, tslib_1.__assign)((0, tslib_1.__assign)({ defaultFormat: defaultFormat }, (0, getRootComputedStyleForContext_1.getRootComputedStyleForContext)(document)), { experimentalFeatures: [] }), defaultOption, {
7792
+ 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, {
7789
7793
  processorOverride: {
7790
7794
  '#text': pasteTextProcessor_1.pasteTextProcessor,
7791
7795
  entity: (0, pasteEntityProcessor_1.createPasteEntityProcessor)(sanitizingOption),
@@ -8824,7 +8828,7 @@ function mergePasteContent(editor, eventResult, isFirstPaste) {
8824
8828
  var clonedModel = cloneModelForPaste(clipboardData.modelBeforePaste);
8825
8829
  model.blocks = clonedModel.blocks;
8826
8830
  }
8827
- var domToModelContext = (0, createDomToModelContextForSanitizing_1.createDomToModelContextForSanitizing)(editor.getDocument(), undefined /*defaultFormat*/, editor.getEnvironment().domToModelSettings.customized, domToModelOption);
8831
+ var domToModelContext = (0, createDomToModelContextForSanitizing_1.createDomToModelContextForSanitizing)(editor.getDocument(), undefined /*defaultFormat*/, editor.getEnvironment().domToModelSettings.customized, domToModelOption, editor.getDOMHelper());
8828
8832
  domToModelContext.segmentFormat = getSegmentFormatForPaste(model, pasteType);
8829
8833
  var pasteModel = (0, roosterjs_content_model_dom_1.domToContentModel)(fragment, domToModelContext);
8830
8834
  var mergeOption = {
@@ -9608,7 +9612,7 @@ var createEditorContext = function (core, saveIndex) {
9608
9612
  var _a, _b;
9609
9613
  var lifecycle = core.lifecycle, format = core.format, darkColorHandler = core.darkColorHandler, logicalRoot = core.logicalRoot, cache = core.cache, domHelper = core.domHelper;
9610
9614
  saveIndex = saveIndex && !core.lifecycle.shadowEditFragment;
9611
- var context = (0, tslib_1.__assign)({ isDarkMode: lifecycle.isDarkMode, defaultFormat: format.defaultFormat, pendingFormat: (_a = format.pendingFormat) !== null && _a !== void 0 ? _a : undefined, darkColorHandler: darkColorHandler, addDelimiterForEntity: true, allowCacheElement: true, domIndexer: saveIndex ? cache.domIndexer : undefined, zoomScale: domHelper.calculateZoomScale(), experimentalFeatures: (_b = core.experimentalFeatures) !== null && _b !== void 0 ? _b : [], paragraphMap: core.cache.paragraphMap }, (0, getRootComputedStyleForContext_1.getRootComputedStyleForContext)(logicalRoot.ownerDocument));
9615
+ var context = (0, tslib_1.__assign)({ isDarkMode: lifecycle.isDarkMode, defaultFormat: format.defaultFormat, pendingFormat: (_a = format.pendingFormat) !== null && _a !== void 0 ? _a : undefined, darkColorHandler: darkColorHandler, addDelimiterForEntity: true, allowCacheElement: true, domIndexer: saveIndex ? cache.domIndexer : undefined, zoomScale: domHelper.calculateZoomScale(), experimentalFeatures: (_b = core.experimentalFeatures) !== null && _b !== void 0 ? _b : [], paragraphMap: core.cache.paragraphMap, editorViewWidth: domHelper.getClientWidth() }, (0, getRootComputedStyleForContext_1.getRootComputedStyleForContext)(logicalRoot.ownerDocument));
9612
9616
  if (core.domHelper.isRightToLeft()) {
9613
9617
  context.isRootRtl = true;
9614
9618
  }
@@ -16987,10 +16991,6 @@ function domToContentModel(root, context) {
16987
16991
  if (((_a = context.selection) === null || _a === void 0 ? void 0 : _a.type) == 'range' && context.selection.isReverted) {
16988
16992
  model.hasRevertedRangeSelection = true;
16989
16993
  }
16990
- // When allowed, persist cached element and do not clear it if not changed
16991
- if (context.domIndexer && context.allowCacheElement) {
16992
- model.persistCache = true;
16993
- }
16994
16994
  context.elementProcessors.child(model, root, context);
16995
16995
  (0, normalizeContentModel_1.normalizeContentModel)(model);
16996
16996
  return model;
@@ -21338,8 +21338,8 @@ exports.listLevelThreadFormatHandler = {
21338
21338
  var threadItemCounts = listFormat.threadItemCounts, levels = listFormat.levels;
21339
21339
  var depth = levels.length;
21340
21340
  if (element.start == 1 ||
21341
- (typeof threadItemCounts[depth] === 'number' &&
21342
- element.start != threadItemCounts[depth] + 1)) {
21341
+ typeof threadItemCounts[depth] !== 'number' ||
21342
+ element.start != threadItemCounts[depth] + 1) {
21343
21343
  format.startNumberOverride = element.start;
21344
21344
  }
21345
21345
  threadItemCounts[depth] = element.start - 1;
@@ -24386,32 +24386,47 @@ function formatCells(rows, format, metaOverrides) {
24386
24386
  * @param format The table metadata format
24387
24387
  */
24388
24388
  function setFirstColumnFormatBorders(rows, format) {
24389
- // Exit early hasFirstColumn is not set
24390
- if (!format.hasFirstColumn) {
24391
- return;
24392
- }
24393
24389
  rows.forEach(function (row, rowIndex) {
24394
24390
  row.cells.forEach(function (readonlyCell, cellIndex) {
24391
+ var e_1, _a, e_2, _b;
24395
24392
  var cell = (0, mutate_1.mutateBlock)(readonlyCell);
24396
24393
  if (cellIndex === 0) {
24397
- cell.isHeader = true;
24398
- switch (rowIndex) {
24399
- case 0:
24400
- cell.isHeader = !!format.hasHeaderRow;
24401
- if (cell.isHeader) {
24402
- cell.format.fontWeight = 'bold';
24394
+ if (rowIndex == 0) {
24395
+ cell.isHeader = !!format.hasHeaderRow;
24396
+ }
24397
+ try {
24398
+ for (var _c = (0, tslib_1.__values)(cell.blocks), _d = _c.next(); !_d.done; _d = _c.next()) {
24399
+ var block = _d.value;
24400
+ if (block.blockType == 'Paragraph') {
24401
+ try {
24402
+ for (var _e = (e_2 = void 0, (0, tslib_1.__values)(block.segments)), _f = _e.next(); !_f.done; _f = _e.next()) {
24403
+ var segment = _f.value;
24404
+ (0, mutate_1.mutateSegment)(block, segment, function (cellSegment) {
24405
+ if (format.hasFirstColumn) {
24406
+ cellSegment.format.fontWeight = 'bold';
24407
+ }
24408
+ else if (cellSegment.format.fontWeight == 'bold') {
24409
+ delete cellSegment.format.fontWeight;
24410
+ }
24411
+ });
24412
+ }
24413
+ }
24414
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
24415
+ finally {
24416
+ try {
24417
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
24418
+ }
24419
+ finally { if (e_2) throw e_2.error; }
24420
+ }
24403
24421
  }
24404
- break;
24405
- case rows.length - 1:
24406
- setBorderColor(cell.format, 'borderTop');
24407
- break;
24408
- case 1:
24409
- setBorderColor(cell.format, 'borderBottom');
24410
- break;
24411
- default:
24412
- setBorderColor(cell.format, 'borderTop');
24413
- setBorderColor(cell.format, 'borderBottom');
24414
- break;
24422
+ }
24423
+ }
24424
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
24425
+ finally {
24426
+ try {
24427
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
24428
+ }
24429
+ finally { if (e_1) throw e_1.error; }
24415
24430
  }
24416
24431
  }
24417
24432
  });
@@ -27036,19 +27051,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
27036
27051
  exports.iterateSelections = void 0;
27037
27052
  var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
27038
27053
  function iterateSelections(group, callback, option) {
27039
- var persistCache = group.blockGroupType == 'Document'
27040
- ? group.persistCache
27041
- : false;
27042
- var internalCallback = persistCache
27043
- ? callback
27044
- : function (path, tableContext, block, segments) {
27045
- var _a;
27046
- if (!!((_a = block) === null || _a === void 0 ? void 0 : _a.cachedElement)) {
27047
- delete block.cachedElement;
27048
- }
27049
- return callback(path, tableContext, block, segments);
27050
- };
27051
- internalIterateSelections([group], internalCallback, option);
27054
+ internalIterateSelections([group], callback, option);
27052
27055
  }
27053
27056
  exports.iterateSelections = iterateSelections;
27054
27057
  function internalIterateSelections(path, callback, option, table, treatAllAsSelect) {
@@ -27424,9 +27427,6 @@ function contentModelToDom(doc, root, model, context) {
27424
27427
  if (model.hasRevertedRangeSelection && (range === null || range === void 0 ? void 0 : range.type) == 'range') {
27425
27428
  range.isReverted = true;
27426
27429
  }
27427
- if (context.domIndexer && context.allowCacheElement) {
27428
- model.persistCache = true;
27429
- }
27430
27430
  root.normalize();
27431
27431
  return range;
27432
27432
  }
@@ -28133,7 +28133,12 @@ var handleList = function (doc, parent, listItem, context, refNode) {
28133
28133
  var newList = doc.createElement(level.listType || 'UL');
28134
28134
  var lastParent = nodeStack[nodeStack.length - 1].node;
28135
28135
  lastParent.insertBefore(newList, layer == 0 ? refNode : null);
28136
- nodeStack.push((0, tslib_1.__assign)({ node: newList }, level));
28136
+ nodeStack.push({
28137
+ node: newList,
28138
+ listType: level.listType,
28139
+ format: (0, tslib_1.__assign)({}, level.format),
28140
+ dataset: (0, tslib_1.__assign)({}, level.dataset),
28141
+ });
28137
28142
  (0, applyFormat_1.applyFormat)(newList, context.formatAppliers.listLevelThread, level.format, context);
28138
28143
  // Need to apply metadata after applying list level format since the list numbers value relies on the result of list thread handling
28139
28144
  (0, applyMetadata_1.applyMetadata)(level, context.metadataAppliers.listLevel, level.format, context);
@@ -32620,24 +32625,6 @@ var handleEnterOnList = function (context) {
32620
32625
  ], (0, tslib_1.__read)(path.slice(index + 1)), false));
32621
32626
  }
32622
32627
  }
32623
- var listIndex = listParent.blocks.indexOf(listItem);
32624
- var nextBlock = listParent.blocks[listIndex + 1];
32625
- if (nextBlock) {
32626
- if ((0, roosterjs_content_model_dom_1.isBlockGroupOfType)(nextBlock, 'ListItem') &&
32627
- nextBlock.levels[0]) {
32628
- nextBlock.levels.forEach(function (level) {
32629
- // Remove startNumberOverride so that next list item can join current list, unless it is 1.
32630
- // List start with 1 means it should be an explicit new list and should never join another list before it
32631
- if (level.format.startNumberOverride !== 1) {
32632
- level.format.startNumberOverride = undefined;
32633
- }
32634
- });
32635
- if (listItem.levels.length == 0) {
32636
- var nextBlockIndex = findIndex(listParent.blocks, nextBlock.levels.length);
32637
- nextBlock.levels[nextBlock.levels.length - 1].format.startNumberOverride = nextBlockIndex;
32638
- }
32639
- }
32640
- }
32641
32628
  context.deleteResult = 'range';
32642
32629
  }
32643
32630
  }
@@ -32679,21 +32666,6 @@ var createNewListLevel = function (listItem) {
32679
32666
  return (0, roosterjs_content_model_dom_1.createListLevel)(level.listType, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, level.format), { startNumberOverride: undefined, displayForDummyItem: undefined }), level.dataset);
32680
32667
  });
32681
32668
  };
32682
- var findIndex = function (blocks, levelLength) {
32683
- var counter = 1;
32684
- for (var i = 0; i < blocks.length; i++) {
32685
- var listItem = blocks[i];
32686
- if ((0, roosterjs_content_model_dom_1.isBlockGroupOfType)(listItem, 'ListItem') &&
32687
- listItem.levels.length === levelLength) {
32688
- counter++;
32689
- }
32690
- else if ((0, roosterjs_content_model_dom_1.isBlockGroupOfType)(listItem, 'ListItem') &&
32691
- listItem.levels.length == 0) {
32692
- return counter;
32693
- }
32694
- }
32695
- return counter;
32696
- };
32697
32669
 
32698
32670
 
32699
32671
  /***/ }),
@@ -37178,11 +37150,13 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
37178
37150
  exports.PastePlugin = void 0;
37179
37151
  var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
37180
37152
  var addParser_1 = __webpack_require__(/*! ./utils/addParser */ "./packages/roosterjs-content-model-plugins/lib/paste/utils/addParser.ts");
37181
- var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
37153
+ var blockElementParser_1 = __webpack_require__(/*! ./parsers/blockElementParser */ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/blockElementParser.ts");
37182
37154
  var chainSanitizerCallback_1 = __webpack_require__(/*! ./utils/chainSanitizerCallback */ "./packages/roosterjs-content-model-plugins/lib/paste/utils/chainSanitizerCallback.ts");
37183
37155
  var DefaultSanitizers_1 = __webpack_require__(/*! ./DefaultSanitizers */ "./packages/roosterjs-content-model-plugins/lib/paste/DefaultSanitizers.ts");
37184
37156
  var deprecatedColorParser_1 = __webpack_require__(/*! ./parsers/deprecatedColorParser */ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/deprecatedColorParser.ts");
37157
+ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
37185
37158
  var getPasteSource_1 = __webpack_require__(/*! ./pasteSourceValidations/getPasteSource */ "./packages/roosterjs-content-model-plugins/lib/paste/pasteSourceValidations/getPasteSource.ts");
37159
+ var imageSizeParser_1 = __webpack_require__(/*! ./parsers/imageSizeParser */ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/imageSizeParser.ts");
37186
37160
  var linkParser_1 = __webpack_require__(/*! ./parsers/linkParser */ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/linkParser.ts");
37187
37161
  var pasteButtonProcessor_1 = __webpack_require__(/*! ./processors/pasteButtonProcessor */ "./packages/roosterjs-content-model-plugins/lib/paste/processors/pasteButtonProcessor.ts");
37188
37162
  var constants_1 = __webpack_require__(/*! ./pasteSourceValidations/constants */ "./packages/roosterjs-content-model-plugins/lib/paste/pasteSourceValidations/constants.ts");
@@ -37192,6 +37166,7 @@ var processPastedContentFromPowerPoint_1 = __webpack_require__(/*! ./PowerPoint/
37192
37166
  var processPastedContentFromWordDesktop_1 = __webpack_require__(/*! ./WordDesktop/processPastedContentFromWordDesktop */ "./packages/roosterjs-content-model-plugins/lib/paste/WordDesktop/processPastedContentFromWordDesktop.ts");
37193
37167
  var processPastedContentWacComponents_1 = __webpack_require__(/*! ./WacComponents/processPastedContentWacComponents */ "./packages/roosterjs-content-model-plugins/lib/paste/WacComponents/processPastedContentWacComponents.ts");
37194
37168
  var setProcessor_1 = __webpack_require__(/*! ./utils/setProcessor */ "./packages/roosterjs-content-model-plugins/lib/paste/utils/setProcessor.ts");
37169
+ var tableBorderParser_1 = __webpack_require__(/*! ./parsers/tableBorderParser */ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/tableBorderParser.ts");
37195
37170
  /**
37196
37171
  * Paste plugin, handles BeforePaste event and reformat some special content, including:
37197
37172
  * 1. Content copied from Word
@@ -37281,12 +37256,13 @@ var PastePlugin = /** @class */ (function () {
37281
37256
  }
37282
37257
  (0, addParser_1.addParser)(event.domToModelOption, 'link', linkParser_1.parseLink);
37283
37258
  (0, addParser_1.addParser)(event.domToModelOption, 'tableCell', deprecatedColorParser_1.deprecatedBorderColorParser);
37284
- (0, addParser_1.addParser)(event.domToModelOption, 'tableCell', tableBorderParser);
37259
+ (0, addParser_1.addParser)(event.domToModelOption, 'tableCell', tableBorderParser_1.tableBorderParser);
37285
37260
  (0, addParser_1.addParser)(event.domToModelOption, 'table', deprecatedColorParser_1.deprecatedBorderColorParser);
37261
+ (0, addParser_1.addParser)(event.domToModelOption, 'image', imageSizeParser_1.imageSizeParser);
37286
37262
  (0, setProcessor_1.setProcessor)(event.domToModelOption, 'button', pasteButtonProcessor_1.pasteButtonProcessor);
37287
37263
  if (pasteType === 'mergeFormat') {
37288
- (0, addParser_1.addParser)(event.domToModelOption, 'block', blockElementParser);
37289
- (0, addParser_1.addParser)(event.domToModelOption, 'listLevel', blockElementParser);
37264
+ (0, addParser_1.addParser)(event.domToModelOption, 'block', blockElementParser_1.blockElementParser);
37265
+ (0, addParser_1.addParser)(event.domToModelOption, 'listLevel', blockElementParser_1.blockElementParser);
37290
37266
  }
37291
37267
  this.setEventSanitizers(event);
37292
37268
  };
@@ -37307,34 +37283,6 @@ var PastePlugin = /** @class */ (function () {
37307
37283
  return PastePlugin;
37308
37284
  }());
37309
37285
  exports.PastePlugin = PastePlugin;
37310
- /**
37311
- * For block elements that have background color style, remove the background color when user selects the merge current format
37312
- * paste option
37313
- */
37314
- var blockElementParser = function (format, element) {
37315
- if (element.style.backgroundColor) {
37316
- delete format.backgroundColor;
37317
- }
37318
- };
37319
- var ElementBorderKeys = new Map([
37320
- ['borderTop', { w: 'borderTopWidth', s: 'borderTopStyle', c: 'borderTopColor' }],
37321
- ['borderRight', { w: 'borderRightWidth', s: 'borderRightStyle', c: 'borderRightColor' }],
37322
- ['borderBottom', { w: 'borderBottomWidth', s: 'borderBottomStyle', c: 'borderBottomColor' }],
37323
- ['borderLeft', { w: 'borderLeftWidth', s: 'borderLeftStyle', c: 'borderLeftColor' }],
37324
- ]);
37325
- function tableBorderParser(format, element) {
37326
- roosterjs_content_model_dom_1.BorderKeys.forEach(function (key) {
37327
- if (!format[key]) {
37328
- var styleSet = ElementBorderKeys.get(key);
37329
- if (styleSet &&
37330
- element.style[styleSet.w] &&
37331
- element.style[styleSet.s] &&
37332
- !element.style[styleSet.c]) {
37333
- format[key] = element.style[styleSet.w] + " " + element.style[styleSet.s];
37334
- }
37335
- }
37336
- });
37337
- }
37338
37286
 
37339
37287
 
37340
37288
  /***/ }),
@@ -37903,15 +37851,15 @@ exports.getStyleMetadata = getStyleMetadata;
37903
37851
  Object.defineProperty(exports, "__esModule", ({ value: true }));
37904
37852
  exports.processPastedContentFromWordDesktop = void 0;
37905
37853
  var addParser_1 = __webpack_require__(/*! ../utils/addParser */ "./packages/roosterjs-content-model-plugins/lib/paste/utils/addParser.ts");
37854
+ var adjustPercentileLineHeightParser_1 = __webpack_require__(/*! ../parsers/adjustPercentileLineHeightParser */ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/adjustPercentileLineHeightParser.ts");
37906
37855
  var getStyleMetadata_1 = __webpack_require__(/*! ./getStyleMetadata */ "./packages/roosterjs-content-model-plugins/lib/paste/WordDesktop/getStyleMetadata.ts");
37907
37856
  var getStyles_1 = __webpack_require__(/*! ../utils/getStyles */ "./packages/roosterjs-content-model-plugins/lib/paste/utils/getStyles.ts");
37857
+ var listLevelParser_1 = __webpack_require__(/*! ../parsers/listLevelParser */ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/listLevelParser.ts");
37908
37858
  var processWordComments_1 = __webpack_require__(/*! ./processWordComments */ "./packages/roosterjs-content-model-plugins/lib/paste/WordDesktop/processWordComments.ts");
37909
37859
  var processWordLists_1 = __webpack_require__(/*! ./processWordLists */ "./packages/roosterjs-content-model-plugins/lib/paste/WordDesktop/processWordLists.ts");
37910
37860
  var removeNegativeTextIndentParser_1 = __webpack_require__(/*! ../parsers/removeNegativeTextIndentParser */ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/removeNegativeTextIndentParser.ts");
37911
37861
  var setProcessor_1 = __webpack_require__(/*! ../utils/setProcessor */ "./packages/roosterjs-content-model-plugins/lib/paste/utils/setProcessor.ts");
37912
- var PERCENTAGE_REGEX = /%/;
37913
- // Default line height in browsers according to https://developer.mozilla.org/en-US/docs/Web/CSS/line-height#normal
37914
- var DEFAULT_BROWSER_LINE_HEIGHT_PERCENTAGE = 1.2;
37862
+ var wordTableParser_1 = __webpack_require__(/*! ../parsers/wordTableParser */ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/wordTableParser.ts");
37915
37863
  /**
37916
37864
  * @internal
37917
37865
  * Handles Pasted content when source is Word Desktop
@@ -37920,11 +37868,11 @@ var DEFAULT_BROWSER_LINE_HEIGHT_PERCENTAGE = 1.2;
37920
37868
  function processPastedContentFromWordDesktop(ev) {
37921
37869
  var metadataMap = (0, getStyleMetadata_1.getStyleMetadata)(ev);
37922
37870
  (0, setProcessor_1.setProcessor)(ev.domToModelOption, 'element', wordDesktopElementProcessor(metadataMap));
37923
- (0, addParser_1.addParser)(ev.domToModelOption, 'block', adjustPercentileLineHeight);
37871
+ (0, addParser_1.addParser)(ev.domToModelOption, 'block', adjustPercentileLineHeightParser_1.adjustPercentileLineHeight);
37924
37872
  (0, addParser_1.addParser)(ev.domToModelOption, 'block', removeNegativeTextIndentParser_1.removeNegativeTextIndentParser);
37925
- (0, addParser_1.addParser)(ev.domToModelOption, 'listLevel', listLevelParser);
37926
- (0, addParser_1.addParser)(ev.domToModelOption, 'container', wordTableParser);
37927
- (0, addParser_1.addParser)(ev.domToModelOption, 'table', wordTableParser);
37873
+ (0, addParser_1.addParser)(ev.domToModelOption, 'listLevel', listLevelParser_1.listLevelParser);
37874
+ (0, addParser_1.addParser)(ev.domToModelOption, 'container', wordTableParser_1.wordTableParser);
37875
+ (0, addParser_1.addParser)(ev.domToModelOption, 'table', wordTableParser_1.wordTableParser);
37928
37876
  }
37929
37877
  exports.processPastedContentFromWordDesktop = processPastedContentFromWordDesktop;
37930
37878
  var wordDesktopElementProcessor = function (metadataKey) {
@@ -37937,30 +37885,6 @@ var wordDesktopElementProcessor = function (metadataKey) {
37937
37885
  }
37938
37886
  };
37939
37887
  };
37940
- function adjustPercentileLineHeight(format, element) {
37941
- //If the line height is less than the browser default line height, line between the text is going to be too narrow
37942
- var parsedLineHeight;
37943
- if (PERCENTAGE_REGEX.test(element.style.lineHeight) &&
37944
- !isNaN((parsedLineHeight = parseInt(element.style.lineHeight)))) {
37945
- format.lineHeight = (DEFAULT_BROWSER_LINE_HEIGHT_PERCENTAGE *
37946
- (parsedLineHeight / 100)).toString();
37947
- }
37948
- }
37949
- var listLevelParser = function (format, element, _context, defaultStyle) {
37950
- if (element.style.marginLeft != '') {
37951
- format.marginLeft = defaultStyle.marginLeft;
37952
- }
37953
- format.marginBottom = undefined;
37954
- };
37955
- var wordTableParser = function (format, element) {
37956
- var _a;
37957
- if ((_a = format.marginLeft) === null || _a === void 0 ? void 0 : _a.startsWith('-')) {
37958
- delete format.marginLeft;
37959
- }
37960
- if (format.htmlAlign) {
37961
- delete format.htmlAlign;
37962
- }
37963
- };
37964
37888
 
37965
37889
 
37966
37890
  /***/ }),
@@ -38334,6 +38258,67 @@ function ensureOneNoteListContext(cmContext) {
38334
38258
  }
38335
38259
 
38336
38260
 
38261
+ /***/ }),
38262
+
38263
+ /***/ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/adjustPercentileLineHeightParser.ts":
38264
+ /*!********************************************************************************************************!*\
38265
+ !*** ./packages/roosterjs-content-model-plugins/lib/paste/parsers/adjustPercentileLineHeightParser.ts ***!
38266
+ \********************************************************************************************************/
38267
+ /***/ ((__unused_webpack_module, exports) => {
38268
+
38269
+ "use strict";
38270
+
38271
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
38272
+ exports.adjustPercentileLineHeight = void 0;
38273
+ var PERCENTAGE_REGEX = /%/;
38274
+ // Default line height in browsers according to https://developer.mozilla.org/en-US/docs/Web/CSS/line-height#normal
38275
+ var DEFAULT_BROWSER_LINE_HEIGHT_PERCENTAGE = 1.2;
38276
+ /**
38277
+ * @internal
38278
+ * Parser for adjusting percentage-based line heights and converting 'normal' to a specific percentage
38279
+ * @param format The block format to modify
38280
+ * @param element The HTML element being processed
38281
+ */
38282
+ function adjustPercentileLineHeight(format, element) {
38283
+ // If the line height is less than the browser default line height, line between the text is going to be too narrow
38284
+ var parsedLineHeight;
38285
+ if (PERCENTAGE_REGEX.test(element.style.lineHeight) &&
38286
+ !isNaN((parsedLineHeight = parseInt(element.style.lineHeight)))) {
38287
+ format.lineHeight = (DEFAULT_BROWSER_LINE_HEIGHT_PERCENTAGE *
38288
+ (parsedLineHeight / 100)).toString();
38289
+ }
38290
+ else if (element.style.lineHeight.toLowerCase() === 'normal') {
38291
+ format.lineHeight = '120%';
38292
+ }
38293
+ }
38294
+ exports.adjustPercentileLineHeight = adjustPercentileLineHeight;
38295
+
38296
+
38297
+ /***/ }),
38298
+
38299
+ /***/ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/blockElementParser.ts":
38300
+ /*!******************************************************************************************!*\
38301
+ !*** ./packages/roosterjs-content-model-plugins/lib/paste/parsers/blockElementParser.ts ***!
38302
+ \******************************************************************************************/
38303
+ /***/ ((__unused_webpack_module, exports) => {
38304
+
38305
+ "use strict";
38306
+
38307
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
38308
+ exports.blockElementParser = void 0;
38309
+ /**
38310
+ * @internal
38311
+ * For block elements that have background color style, remove the background color when user selects the merge current format
38312
+ * paste option
38313
+ */
38314
+ var blockElementParser = function (format, element) {
38315
+ if (element.style.backgroundColor) {
38316
+ delete format.backgroundColor;
38317
+ }
38318
+ };
38319
+ exports.blockElementParser = blockElementParser;
38320
+
38321
+
38337
38322
  /***/ }),
38338
38323
 
38339
38324
  /***/ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/deprecatedColorParser.ts":
@@ -38364,6 +38349,40 @@ var deprecatedBorderColorParser = function (format) {
38364
38349
  exports.deprecatedBorderColorParser = deprecatedBorderColorParser;
38365
38350
 
38366
38351
 
38352
+ /***/ }),
38353
+
38354
+ /***/ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/imageSizeParser.ts":
38355
+ /*!***************************************************************************************!*\
38356
+ !*** ./packages/roosterjs-content-model-plugins/lib/paste/parsers/imageSizeParser.ts ***!
38357
+ \***************************************************************************************/
38358
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
38359
+
38360
+ "use strict";
38361
+
38362
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
38363
+ exports.imageSizeParser = void 0;
38364
+ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
38365
+ // Only process absolute units (px, pt, in, cm, mm)
38366
+ var AbsoluteUnitRegex = /^\s*\d+(\.\d+)?\s*(px|pt|in|cm|mm)\s*$/i;
38367
+ /**
38368
+ * @internal
38369
+ * Remove image size if it is larger than editor view width to let it auto size
38370
+ */
38371
+ var imageSizeParser = function (format, element, context) {
38372
+ var maxImageSize = context.editorViewWidth;
38373
+ var width = format.width;
38374
+ if (width && maxImageSize && AbsoluteUnitRegex.test(width)) {
38375
+ var widthValue = (0, roosterjs_content_model_dom_1.parseValueWithUnit)(width, element);
38376
+ // If the given width is larger than editor view width, we clear both width and height to let it auto size
38377
+ if (widthValue > maxImageSize) {
38378
+ delete format.width;
38379
+ delete format.height;
38380
+ }
38381
+ }
38382
+ };
38383
+ exports.imageSizeParser = imageSizeParser;
38384
+
38385
+
38367
38386
  /***/ }),
38368
38387
 
38369
38388
  /***/ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/linkParser.ts":
@@ -38402,6 +38421,35 @@ var parseLink = function (format, element) {
38402
38421
  exports.parseLink = parseLink;
38403
38422
 
38404
38423
 
38424
+ /***/ }),
38425
+
38426
+ /***/ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/listLevelParser.ts":
38427
+ /*!***************************************************************************************!*\
38428
+ !*** ./packages/roosterjs-content-model-plugins/lib/paste/parsers/listLevelParser.ts ***!
38429
+ \***************************************************************************************/
38430
+ /***/ ((__unused_webpack_module, exports) => {
38431
+
38432
+ "use strict";
38433
+
38434
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
38435
+ exports.listLevelParser = void 0;
38436
+ /**
38437
+ * @internal
38438
+ * Parser for processing list level formatting specific to Word Desktop
38439
+ * @param format The list item level format to modify
38440
+ * @param element The HTML element being processed
38441
+ * @param _context The DOM to model context
38442
+ * @param defaultStyle The default style properties
38443
+ */
38444
+ var listLevelParser = function (format, element, _context, defaultStyle) {
38445
+ if (element.style.marginLeft !== '') {
38446
+ format.marginLeft = defaultStyle.marginLeft;
38447
+ }
38448
+ format.marginBottom = undefined;
38449
+ };
38450
+ exports.listLevelParser = listLevelParser;
38451
+
38452
+
38405
38453
  /***/ }),
38406
38454
 
38407
38455
  /***/ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/removeNegativeTextIndentParser.ts":
@@ -38426,6 +38474,74 @@ var removeNegativeTextIndentParser = function (format) {
38426
38474
  exports.removeNegativeTextIndentParser = removeNegativeTextIndentParser;
38427
38475
 
38428
38476
 
38477
+ /***/ }),
38478
+
38479
+ /***/ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/tableBorderParser.ts":
38480
+ /*!*****************************************************************************************!*\
38481
+ !*** ./packages/roosterjs-content-model-plugins/lib/paste/parsers/tableBorderParser.ts ***!
38482
+ \*****************************************************************************************/
38483
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
38484
+
38485
+ "use strict";
38486
+
38487
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
38488
+ exports.tableBorderParser = void 0;
38489
+ var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
38490
+ var ElementBorderKeys = new Map([
38491
+ ['borderTop', { w: 'borderTopWidth', s: 'borderTopStyle', c: 'borderTopColor' }],
38492
+ ['borderRight', { w: 'borderRightWidth', s: 'borderRightStyle', c: 'borderRightColor' }],
38493
+ ['borderBottom', { w: 'borderBottomWidth', s: 'borderBottomStyle', c: 'borderBottomColor' }],
38494
+ ['borderLeft', { w: 'borderLeftWidth', s: 'borderLeftStyle', c: 'borderLeftColor' }],
38495
+ ]);
38496
+ /**
38497
+ * @internal
38498
+ */
38499
+ var tableBorderParser = function (format, element) {
38500
+ roosterjs_content_model_dom_1.BorderKeys.forEach(function (key) {
38501
+ if (!format[key]) {
38502
+ var styleSet = ElementBorderKeys.get(key);
38503
+ if (styleSet &&
38504
+ element.style[styleSet.w] &&
38505
+ element.style[styleSet.s] &&
38506
+ !element.style[styleSet.c]) {
38507
+ format[key] = element.style[styleSet.w] + " " + element.style[styleSet.s];
38508
+ }
38509
+ }
38510
+ });
38511
+ };
38512
+ exports.tableBorderParser = tableBorderParser;
38513
+
38514
+
38515
+ /***/ }),
38516
+
38517
+ /***/ "./packages/roosterjs-content-model-plugins/lib/paste/parsers/wordTableParser.ts":
38518
+ /*!***************************************************************************************!*\
38519
+ !*** ./packages/roosterjs-content-model-plugins/lib/paste/parsers/wordTableParser.ts ***!
38520
+ \***************************************************************************************/
38521
+ /***/ ((__unused_webpack_module, exports) => {
38522
+
38523
+ "use strict";
38524
+
38525
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
38526
+ exports.wordTableParser = void 0;
38527
+ /**
38528
+ * @internal
38529
+ * Parser for processing table formatting specific to Word Desktop
38530
+ * @param format The table format to modify
38531
+ * @param element The HTML element being processed
38532
+ */
38533
+ var wordTableParser = function (format, element) {
38534
+ var _a;
38535
+ if ((_a = format.marginLeft) === null || _a === void 0 ? void 0 : _a.startsWith('-')) {
38536
+ delete format.marginLeft;
38537
+ }
38538
+ if (format.htmlAlign) {
38539
+ delete format.htmlAlign;
38540
+ }
38541
+ };
38542
+ exports.wordTableParser = wordTableParser;
38543
+
38544
+
38429
38545
  /***/ }),
38430
38546
 
38431
38547
  /***/ "./packages/roosterjs-content-model-plugins/lib/paste/pasteSourceValidations/constants.ts":