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