From b0f9ae2d1dcd88bcf8ce01e76048f550582993ee Mon Sep 17 00:00:00 2001 From: JiuqingSong Date: Thu, 29 Jun 2023 22:58:26 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20=20@=203fddf?= =?UTF-8?q?b4ba78fefcff83c1c0e58fba34537ff06a2=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coverage/index.html | 10 +- coverage/lcov.info | 2772 +++++++++-------- .../context/createDomToModelContext.ts.html | 2 +- .../context/defaultProcessors.ts.html | 2 +- .../lib/domToModel/context/index.html | 2 +- .../lib/domToModel/domToContentModel.ts.html | 2 +- .../lib/domToModel/index.html | 2 +- .../processors/blockProcessor.ts.html | 2 +- .../domToModel/processors/brProcessor.ts.html | 2 +- .../processors/childProcessor.ts.html | 2 +- .../processors/codeProcessor.ts.html | 2 +- .../processors/delimiterProcessor.ts.html | 2 +- .../processors/elementProcessor.ts.html | 2 +- .../processors/entityProcessor.ts.html | 2 +- .../processors/fontProcessor.ts.html | 2 +- .../formatContainerProcessor.ts.html | 2 +- .../processors/generalProcessor.ts.html | 2 +- .../processors/headingProcessor.ts.html | 2 +- .../domToModel/processors/hrProcessor.ts.html | 2 +- .../processors/imageProcessor.ts.html | 2 +- .../lib/domToModel/processors/index.html | 2 +- .../processors/knownElementProcessor.ts.html | 2 +- .../processors/linkProcessor.ts.html | 2 +- .../processors/listItemProcessor.ts.html | 2 +- .../processors/listProcessor.ts.html | 2 +- .../domToModel/processors/pProcessor.ts.html | 2 +- .../processors/tableProcessor.ts.html | 2 +- .../processors/textProcessor.ts.html | 2 +- .../utils/addSelectionMarker.ts.html | 2 +- .../domToModel/utils/areSameFormats.ts.html | 2 +- .../utils/getBoundingClientRect.ts.html | 2 +- .../domToModel/utils/getDefaultStyle.ts.html | 2 +- .../utils/getRegularSelectionOffsets.ts.html | 2 +- .../lib/domToModel/utils/index.html | 2 +- .../domToModel/utils/isBlockElement.ts.html | 2 +- .../lib/domToModel/utils/parseFormat.ts.html | 2 +- .../lib/domToModel/utils/stackFormat.ts.html | 2 +- .../lib/domUtils/index.html | 2 +- .../lib/domUtils/isNodeOfType.ts.html | 2 +- .../lib/domUtils/metadata/index.html | 2 +- .../metadata/updateListMetadata.ts.html | 2 +- .../domUtils/metadata/updateMetadata.ts.html | 2 +- .../lib/domUtils/stringUtil.ts.html | 2 +- .../block/directionFormatHandler.ts.html | 4 +- .../block/displayFormatHandler.ts.html | 4 +- .../block/htmlAlignFormatHandler.ts.html | 6 +- .../lib/formatHandlers/block/index.html | 2 +- .../block/lineHeightFormatHandler.ts.html | 4 +- .../block/marginFormatHandler.ts.html | 8 +- .../block/paddingFormatHandler.ts.html | 2 +- .../block/textAlignFormatHandler.ts.html | 6 +- .../block/whiteSpaceFormatHandler.ts.html | 6 +- .../backgroundColorFormatHandler.ts.html | 4 +- .../common/borderBoxFormatHandler.ts.html | 4 +- .../common/borderFormatHandler.ts.html | 8 +- .../common/boxShadowFormatHandler.ts.html | 2 +- .../common/datasetFormatHandler.ts.html | 4 +- .../common/idFormatHandler.ts.html | 4 +- .../lib/formatHandlers/common/index.html | 2 +- .../common/sizeFormatHandler.ts.html | 14 +- .../common/verticalAlignFormatHandler.ts.html | 2 +- .../common/wordBreakFormatHandler.ts.html | 2 +- .../defaultFormatHandlers.ts.html | 16 +- .../lib/formatHandlers/index.html | 2 +- .../lib/formatHandlers/list/index.html | 2 +- .../listItemMetadataFormatHandler.ts.html | 2 +- .../list/listItemThreadFormatHandler.ts.html | 2 +- .../listLevelMetadataFormatHandler.ts.html | 2 +- .../list/listLevelThreadFormatHandler.ts.html | 2 +- .../listStylePositionFormatHandler.ts.html | 2 +- .../list/listTypeFormatHandler.ts.html | 2 +- .../lib/formatHandlers/root/index.html | 2 +- .../root/rootDirectionFormatHandler.ts.html | 2 +- .../root/zoomScaleFormatHandler.ts.html | 2 +- .../segment/boldFormatHandler.ts.html | 2 +- .../segment/fontFamilyFormatHandler.ts.html | 2 +- .../segment/fontSizeFormatHandler.ts.html | 2 +- .../lib/formatHandlers/segment/index.html | 2 +- .../segment/italicFormatHandler.ts.html | 2 +- .../letterSpacingFormatHandler.ts.html | 2 +- .../segment/linkFormatHandler.ts.html | 2 +- .../segment/strikeFormatHandler.ts.html | 2 +- .../superOrSubScriptFormatHandler.ts.html | 2 +- .../segment/textColorFormatHandler.ts.html | 2 +- .../segment/underlineFormatHandler.ts.html | 2 +- .../lib/formatHandlers/table/index.html | 2 +- .../table/tableLayoutFormatHandler.ts.html | 4 +- .../table/tableSpacingFormatHandler.ts.html | 4 +- .../textColorOnTableCellFormatHandler.ts.html | 2 +- .../lib/formatHandlers/utils/color.ts.html | 2 +- .../utils/defaultStyles.ts.html | 2 +- .../lib/formatHandlers/utils/dir.ts.html | 2 +- .../lib/formatHandlers/utils/index.html | 2 +- .../utils/parseValueWithUnit.ts.html | 2 +- .../lib/index.html | 2 +- .../lib/index.ts.html | 2 +- .../lib/modelApi/block/index.html | 2 +- .../block/setParagraphNotImplicit.ts.html | 2 +- .../lib/modelApi/common/addBlock.ts.html | 2 +- .../lib/modelApi/common/addDecorators.ts.html | 2 +- .../lib/modelApi/common/addSegment.ts.html | 2 +- .../lib/modelApi/common/index.html | 2 +- .../lib/modelApi/common/isEmpty.ts.html | 6 +- .../modelApi/common/isGeneralSegment.ts.html | 2 +- .../common/isWhiteSpacePreserved.ts.html | 2 +- .../common/normalizeContentModel.ts.html | 2 +- .../common/normalizeParagraph.ts.html | 2 +- .../modelApi/common/normalizeSegment.ts.html | 2 +- .../lib/modelApi/common/unwrapBlock.ts.html | 2 +- .../lib/modelApi/creators/createBr.ts.html | 2 +- .../createContentModelDocument.ts.html | 2 +- .../modelApi/creators/createDivider.ts.html | 2 +- .../modelApi/creators/createEntity.ts.html | 2 +- .../creators/createFormatContainer.ts.html | 2 +- .../creators/createGeneralBlock.ts.html | 2 +- .../creators/createGeneralSegment.ts.html | 2 +- .../lib/modelApi/creators/createImage.ts.html | 2 +- .../modelApi/creators/createListItem.ts.html | 2 +- .../modelApi/creators/createParagraph.ts.html | 2 +- .../creators/createParagraphDecorator.ts.html | 2 +- .../creators/createSelectionMarker.ts.html | 2 +- .../lib/modelApi/creators/createTable.ts.html | 10 +- .../modelApi/creators/createTableCell.ts.html | 8 +- .../lib/modelApi/creators/createText.ts.html | 2 +- .../lib/modelApi/creators/index.html | 2 +- .../lib/modelToDom/contentModelToDom.ts.html | 2 +- .../context/createModelToDomContext.ts.html | 6 +- .../defaultContentModelHandlers.ts.html | 2 +- .../lib/modelToDom/context/index.html | 2 +- .../modelToDom/handlers/handleBlock.ts.html | 2 +- .../handlers/handleBlockGroupChildren.ts.html | 16 +- .../lib/modelToDom/handlers/handleBr.ts.html | 2 +- .../modelToDom/handlers/handleDivider.ts.html | 2 +- .../modelToDom/handlers/handleEntity.ts.html | 2 +- .../handlers/handleFormatContainer.ts.html | 2 +- .../handlers/handleGeneralModel.ts.html | 2 +- .../modelToDom/handlers/handleImage.ts.html | 2 +- .../modelToDom/handlers/handleList.ts.html | 2 +- .../handlers/handleListItem.ts.html | 2 +- .../handlers/handleParagraph.ts.html | 2 +- .../modelToDom/handlers/handleSegment.ts.html | 2 +- .../handlers/handleSegmentDecorator.ts.html | 2 +- .../modelToDom/handlers/handleTable.ts.html | 92 +- .../modelToDom/handlers/handleText.ts.html | 2 +- .../lib/modelToDom/handlers/index.html | 10 +- .../lib/modelToDom/index.html | 2 +- .../lib/modelToDom/optimizers/index.html | 2 +- .../modelToDom/optimizers/mergeNode.ts.html | 2 +- .../modelToDom/optimizers/optimize.ts.html | 2 +- .../optimizers/removeUnnecessarySpan.ts.html | 2 +- .../lib/modelToDom/utils/applyFormat.ts.html | 6 +- .../utils/handleSegmentCommon.ts.html | 2 +- .../lib/modelToDom/utils/index.html | 2 +- .../utils/reuseCachedElement.ts.html | 2 +- .../lib/modelToDom/utils/stackFormat.ts.html | 2 +- .../lib/domToModel/processors/index.html | 2 +- .../reducedModelChildProcessor.ts.html | 2 +- .../processors/tablePreProcessor.ts.html | 2 +- .../lib/domUtils/borderValues.ts.html | 2 +- .../lib/domUtils/index.html | 2 +- .../lib/domUtils/metadata/index.html | 2 +- .../metadata/updateImageMetadata.ts.html | 2 +- .../metadata/updateTableCellMetadata.ts.html | 2 +- .../metadata/updateTableMetadata.ts.html | 2 +- .../lib/editor/ContentModelEditor.ts.html | 2 +- .../editor/coreApi/createContentModel.ts.html | 2 +- .../coreApi/createEditorContext.ts.html | 2 +- .../lib/editor/coreApi/index.html | 2 +- .../editor/coreApi/setContentModel.ts.html | 2 +- .../editor/coreApi/switchShadowEdit.ts.html | 2 +- .../ContentModelCopyPastePlugin.ts.html | 2 +- .../ContentModelTypeInContainerPlugin.ts.html | 2 +- .../lib/editor/corePlugins/index.html | 2 +- .../createContentModelEditorCore.ts.html | 2 +- .../lib/editor/index.html | 2 +- .../lib/editor/isContentModelEditor.ts.html | 2 +- .../plugins/ContentModelEditPlugin.ts.html | 2 +- .../plugins/ContentModelFormatPlugin.ts.html | 2 +- .../ContentModelPastePlugin.ts.html | 2 +- .../plugins/PastePlugin/Excel/index.html | 2 +- .../processPastedContentFromExcel.ts.html | 2 +- .../plugins/PastePlugin/PowerPoint/index.html | 2 +- ...processPastedContentFromPowerPoint.ts.html | 2 +- .../PastePlugin/WacComponents/index.html | 2 +- .../processPastedContentWacComponents.ts.html | 2 +- .../PastePlugin/WordDesktop/index.html | 2 +- ...rocessPastedContentFromWordDesktop.ts.html | 2 +- .../WordDesktop/processWordComments.ts.html | 2 +- .../WordDesktop/processWordLists.ts.html | 2 +- .../lib/editor/plugins/PastePlugin/index.html | 2 +- .../PastePlugin/utils/addParser.ts.html | 2 +- .../utils/deprecatedColorParser.ts.html | 2 +- .../plugins/PastePlugin/utils/index.html | 2 +- .../PastePlugin/utils/linkParser.ts.html | 2 +- .../PastePlugin/utils/setProcessor.ts.html | 2 +- .../lib/editor/plugins/index.html | 2 +- .../utils/handleKeyboardEventCommon.ts.html | 2 +- .../lib/editor/utils/index.html | 2 +- .../block/getLeafSiblingBlock.ts.html | 2 +- .../lib/modelApi/block/index.html | 2 +- .../modelApi/block/setModelAlignment.ts.html | 2 +- .../block/setModelIndentation.ts.html | 2 +- .../block/toggleModelBlockQuote.ts.html | 2 +- .../modelApi/common/clearModelFormat.ts.html | 2 +- .../lib/modelApi/common/cloneModel.ts.html | 2 +- .../getClosestAncestorBlockGroupIndex.ts.html | 2 +- .../lib/modelApi/common/index.html | 2 +- .../common/isBlockGroupOfType.ts.html | 2 +- .../lib/modelApi/common/mergeModel.ts.html | 2 +- .../common/retrieveModelFormatState.ts.html | 2 +- .../lib/modelApi/common/wrapBlock.ts.html | 2 +- .../lib/modelApi/edit/deleteSelection.ts.html | 2 +- .../deleteAllSegmentBefore.ts.html | 2 +- .../deleteCollapsedSelection.ts.html | 2 +- .../deleteSteps/deleteWordSelection.ts.html | 2 +- .../lib/modelApi/edit/deleteSteps/index.html | 2 +- .../lib/modelApi/edit/index.html | 2 +- .../edit/utils/createInsertPoint.ts.html | 2 +- .../modelApi/edit/utils/deleteBlock.ts.html | 2 +- .../utils/deleteExpandedSelection.ts.html | 2 +- .../modelApi/edit/utils/deleteSegment.ts.html | 2 +- .../edit/utils/deleteSingleChar.ts.html | 2 +- .../lib/modelApi/edit/utils/index.html | 2 +- .../lib/modelApi/format/index.html | 2 +- .../lib/modelApi/format/pendingFormat.ts.html | 2 +- .../image/applyImageBorderFormat.ts.html | 2 +- .../lib/modelApi/image/index.html | 2 +- .../list/findListItemsInSameThread.ts.html | 2 +- .../lib/modelApi/list/index.html | 2 +- .../lib/modelApi/list/setListType.ts.html | 2 +- .../selection/adjustSegmentSelection.ts.html | 2 +- .../selection/adjustWordSelection.ts.html | 2 +- .../selection/collapseTableSelection.ts.html | 2 +- .../selection/collectSelections.ts.html | 2 +- .../lib/modelApi/selection/index.html | 2 +- .../selection/iterateSelections.ts.html | 2 +- .../modelApi/selection/setSelection.ts.html | 2 +- .../lib/modelApi/table/alignTable.ts.html | 2 +- .../lib/modelApi/table/alignTableCell.ts.html | 2 +- .../modelApi/table/applyTableFormat.ts.html | 2 +- .../lib/modelApi/table/canMergeCells.ts.html | 2 +- .../table/createTableStructure.ts.html | 2 +- .../lib/modelApi/table/deleteTable.ts.html | 2 +- .../modelApi/table/deleteTableColumn.ts.html | 2 +- .../lib/modelApi/table/deleteTableRow.ts.html | 2 +- .../modelApi/table/getSelectedCells.ts.html | 2 +- .../lib/modelApi/table/index.html | 2 +- .../modelApi/table/insertTableColumn.ts.html | 2 +- .../lib/modelApi/table/insertTableRow.ts.html | 2 +- .../modelApi/table/mergeTableCells.ts.html | 2 +- .../modelApi/table/mergeTableColumn.ts.html | 2 +- .../lib/modelApi/table/mergeTableRow.ts.html | 2 +- .../lib/modelApi/table/normalizeTable.ts.html | 2 +- .../table/setTableCellBackgroundColor.ts.html | 2 +- .../table/splitTableCellHorizontally.ts.html | 2 +- .../table/splitTableCellVertically.ts.html | 2 +- .../lib/publicApi/block/index.html | 2 +- .../lib/publicApi/block/setAlignment.ts.html | 2 +- .../lib/publicApi/block/setDirection.ts.html | 2 +- .../publicApi/block/setHeaderLevel.ts.html | 2 +- .../publicApi/block/setIndentation.ts.html | 2 +- .../block/setParagraphMargin.ts.html | 2 +- .../lib/publicApi/block/setSpacing.ts.html | 2 +- .../publicApi/block/toggleBlockQuote.ts.html | 2 +- .../editing/handleKeyDownEvent.ts.html | 2 +- .../lib/publicApi/editing/index.html | 2 +- .../format/applyPendingFormat.ts.html | 2 +- .../lib/publicApi/format/clearFormat.ts.html | 2 +- .../publicApi/format/getFormatState.ts.html | 2 +- .../publicApi/format/getSegmentFormat.ts.html | 2 +- .../lib/publicApi/format/index.html | 2 +- .../image/adjustImageSelection.ts.html | 2 +- .../lib/publicApi/image/changeImage.ts.html | 2 +- .../lib/publicApi/image/index.html | 2 +- .../lib/publicApi/image/insertImage.ts.html | 2 +- .../publicApi/image/setImageAltText.ts.html | 2 +- .../publicApi/image/setImageBorder.ts.html | 2 +- .../publicApi/image/setImageBoxShadow.ts.html | 2 +- .../link/adjustLinkSelection.ts.html | 2 +- .../lib/publicApi/link/index.html | 2 +- .../lib/publicApi/link/insertLink.ts.html | 2 +- .../lib/publicApi/link/removeLink.ts.html | 2 +- .../lib/publicApi/list/index.html | 2 +- .../publicApi/list/setListStartNumber.ts.html | 2 +- .../lib/publicApi/list/setListStyle.ts.html | 2 +- .../lib/publicApi/list/toggleBullet.ts.html | 2 +- .../publicApi/list/toggleNumbering.ts.html | 2 +- .../segment/applySegmentFormat.ts.html | 2 +- .../segment/changeCapitalization.ts.html | 2 +- .../publicApi/segment/changeFontSize.ts.html | 2 +- .../lib/publicApi/segment/index.html | 2 +- .../segment/setBackgroundColor.ts.html | 2 +- .../lib/publicApi/segment/setFontName.ts.html | 2 +- .../lib/publicApi/segment/setFontSize.ts.html | 2 +- .../publicApi/segment/setTextColor.ts.html | 2 +- .../lib/publicApi/segment/toggleBold.ts.html | 2 +- .../lib/publicApi/segment/toggleCode.ts.html | 2 +- .../publicApi/segment/toggleItalic.ts.html | 2 +- .../segment/toggleStrikethrough.ts.html | 2 +- .../publicApi/segment/toggleSubscript.ts.html | 2 +- .../segment/toggleSuperscript.ts.html | 2 +- .../publicApi/segment/toggleUnderline.ts.html | 2 +- .../selection/hasSelectionInBlock.ts.html | 2 +- .../hasSelectionInBlockGroup.ts.html | 2 +- .../selection/hasSelectionInSegment.ts.html | 2 +- .../lib/publicApi/selection/index.html | 2 +- .../lib/publicApi/table/index.html | 2 +- .../publicApi/table/setTableCellShade.ts.html | 2 +- .../utils/formatImageWithContentModel.ts.html | 2 +- .../formatParagraphWithContentModel.ts.html | 2 +- .../formatSegmentWithContentModel.ts.html | 2 +- .../utils/formatWithContentModel.ts.html | 2 +- .../lib/publicApi/utils/index.html | 2 +- .../lib/publicApi/utils/paste.ts.html | 2 +- .../roosterjs-color-utils/lib/index.html | 2 +- .../roosterjs-color-utils/lib/index.ts.html | 2 +- .../lib/utils/getDarkColor.ts.html | 2 +- .../lib/utils/index.html | 2 +- .../lib/format/changeCapitalization.ts.html | 2 +- .../lib/format/changeFontSize.ts.html | 2 +- .../lib/format/clearBlockFormat.ts.html | 2 +- .../lib/format/clearFormat.ts.html | 2 +- .../lib/format/createLink.ts.html | 2 +- .../lib/format/getFormatState.ts.html | 2 +- .../lib/format/index.html | 2 +- .../lib/format/insertEntity.ts.html | 2 +- .../lib/format/insertImage.ts.html | 2 +- .../lib/format/removeLink.ts.html | 2 +- .../lib/format/replaceWithNode.ts.html | 2 +- .../lib/format/rotateElement.ts.html | 2 +- .../lib/format/setAlignment.ts.html | 2 +- .../lib/format/setBackgroundColor.ts.html | 2 +- .../lib/format/setDirection.ts.html | 2 +- .../lib/format/setFontName.ts.html | 2 +- .../lib/format/setFontSize.ts.html | 2 +- .../lib/format/setImageAltText.ts.html | 2 +- .../lib/format/setIndentation.ts.html | 2 +- .../format/setOrderedListNumbering.ts.html | 2 +- .../lib/format/setTextColor.ts.html | 2 +- .../lib/format/toggleBlockQuote.ts.html | 2 +- .../lib/format/toggleBold.ts.html | 2 +- .../lib/format/toggleBullet.ts.html | 2 +- .../lib/format/toggleCodeBlock.ts.html | 2 +- .../lib/format/toggleHeader.ts.html | 2 +- .../lib/format/toggleItalic.ts.html | 2 +- .../lib/format/toggleNumbering.ts.html | 2 +- .../lib/format/toggleStrikethrough.ts.html | 2 +- .../lib/format/toggleSubscript.ts.html | 2 +- .../lib/format/toggleSuperscript.ts.html | 2 +- .../lib/format/toggleUnderline.ts.html | 2 +- .../roosterjs-editor-api/lib/index.html | 2 +- .../roosterjs-editor-api/lib/index.ts.html | 2 +- .../lib/table/applyCellShading.ts.html | 2 +- .../lib/table/editTable.ts.html | 2 +- .../lib/table/formatTable.ts.html | 2 +- .../roosterjs-editor-api/lib/table/index.html | 2 +- .../lib/table/insertTable.ts.html | 2 +- .../lib/utils/applyInlineStyle.ts.html | 2 +- .../lib/utils/applyListItemWrap.ts.html | 2 +- .../lib/utils/blockFormat.ts.html | 2 +- .../lib/utils/blockWrap.ts.html | 2 +- .../lib/utils/collapseSelectedBlocks.ts.html | 2 +- .../lib/utils/commitListChains.ts.html | 2 +- .../lib/utils/execCommand.ts.html | 2 +- .../lib/utils/formatUndoSnapshot.ts.html | 2 +- .../roosterjs-editor-api/lib/utils/index.html | 2 +- .../lib/utils/normalizeBlockquote.ts.html | 2 +- .../lib/utils/toggleListType.ts.html | 2 +- .../lib/coreApi/addUndoSnapshot.ts.html | 40 +- .../lib/coreApi/attachDomEvent.ts.html | 42 +- .../lib/coreApi/coreApiMap.ts.html | 2 +- .../lib/coreApi/createPasteFragment.ts.html | 2 +- .../lib/coreApi/ensureTypeInContainer.ts.html | 24 +- .../lib/coreApi/focus.ts.html | 2 +- .../lib/coreApi/getContent.ts.html | 2 +- .../coreApi/getPendableFormatState.ts.html | 2 +- .../lib/coreApi/getSelectionRange.ts.html | 2 +- .../lib/coreApi/getSelectionRangeEx.ts.html | 14 +- .../coreApi/getStyleBasedFormatState.ts.html | 2 +- .../lib/coreApi/hasFocus.ts.html | 6 +- .../lib/coreApi/index.html | 2 +- .../lib/coreApi/insertNode.ts.html | 30 +- .../lib/coreApi/restoreUndoSnapshot.ts.html | 2 +- .../lib/coreApi/select.ts.html | 26 +- .../lib/coreApi/selectImage.ts.html | 14 +- .../lib/coreApi/selectRange.ts.html | 2 +- .../lib/coreApi/selectTable.ts.html | 16 +- .../lib/coreApi/setContent.ts.html | 12 +- .../lib/coreApi/switchShadowEdit.ts.html | 2 +- .../lib/coreApi/transformColor.ts.html | 12 +- .../lib/coreApi/triggerEvent.ts.html | 10 +- .../lib/coreApi/utils/addUniqueId.ts.html | 2 +- .../lib/coreApi/utils/index.html | 2 +- .../lib/corePlugins/CopyPastePlugin.ts.html | 28 +- .../lib/corePlugins/DOMEventPlugin.ts.html | 86 +- .../lib/corePlugins/EditPlugin.ts.html | 24 +- .../lib/corePlugins/EntityPlugin.ts.html | 50 +- .../lib/corePlugins/ImageSelection.ts.html | 14 +- .../lib/corePlugins/LifecyclePlugin.ts.html | 98 +- .../lib/corePlugins/MouseUpPlugin.ts.html | 22 +- .../corePlugins/NormalizeTablePlugin.ts.html | 18 +- .../PendingFormatStatePlugin.ts.html | 22 +- .../corePlugins/TypeInContainerPlugin.ts.html | 12 +- .../lib/corePlugins/UndoPlugin.ts.html | 40 +- .../lib/corePlugins/createCorePlugins.ts.html | 8 +- .../lib/corePlugins/index.html | 2 +- .../utils/forEachSelectedCell.ts.html | 2 +- .../lib/corePlugins/utils/index.html | 2 +- .../utils/inlineEntityOnPluginEvent.ts.html | 2 +- .../utils/removeCellsOutsideSelection.ts.html | 2 +- .../lib/editor/DarkColorHandlerImpl.ts.html | 42 +- .../lib/editor/Editor.ts.html | 6 +- .../lib/editor/EditorBase.ts.html | 90 +- .../lib/editor/createEditorCore.ts.html | 28 +- .../lib/editor/index.html | 2 +- .../lib/editor/isFeatureEnabled.ts.html | 4 +- .../roosterjs-editor-core/lib/index.html | 2 +- .../roosterjs-editor-core/lib/index.ts.html | 4 +- .../blockElements/NodeBlockElement.ts.html | 2 +- .../StartEndBlockElement.ts.html | 2 +- .../getBlockElementAtNode.ts.html | 6 +- .../getFirstLastBlockElement.ts.html | 10 +- .../lib/blockElements/index.html | 2 +- .../createFragmentFromClipboardData.ts.html | 2 +- .../clipboard/extractClipboardEvent.ts.html | 2 +- .../clipboard/extractClipboardItems.ts.html | 2 +- .../extractClipboardItemsForIE.ts.html | 2 +- .../lib/clipboard/getPasteType.ts.html | 2 +- .../lib/clipboard/handleImagePaste.ts.html | 2 +- .../lib/clipboard/handleTextPaste.ts.html | 2 +- .../lib/clipboard/index.html | 2 +- .../retrieveMetadataFromClipboard.ts.html | 2 +- .../clipboard/sanitizePasteContent.ts.html | 2 +- .../lib/contentTraverser/BodyScoper.ts.html | 2 +- .../contentTraverser/ContentTraverser.ts.html | 2 +- .../PositionContentSearcher.ts.html | 2 +- .../SelectionBlockScoper.ts.html | 2 +- .../contentTraverser/SelectionScoper.ts.html | 2 +- .../lib/contentTraverser/index.html | 2 +- .../lib/delimiter/addDelimiters.ts.html | 2 +- .../delimiter/getDelimiterFromElement.ts.html | 2 +- .../lib/delimiter/index.html | 2 +- .../lib/edit/adjustInsertPosition.ts.html | 2 +- .../lib/edit/deleteSelectedContent.ts.html | 2 +- .../lib/edit/getTextContent.ts.html | 2 +- .../roosterjs-editor-dom/lib/edit/index.html | 2 +- .../lib/entity/commitEntity.ts.html | 2 +- .../lib/entity/entityPlaceholderUtils.ts.html | 2 +- .../lib/entity/getEntityFromElement.ts.html | 2 +- .../lib/entity/getEntitySelector.ts.html | 8 +- .../lib/entity/index.html | 2 +- .../lib/event/cacheGetEventData.ts.html | 2 +- .../lib/event/clearEventDataCache.ts.html | 2 +- .../roosterjs-editor-dom/lib/event/index.html | 2 +- .../lib/event/isCharacterValue.ts.html | 2 +- .../lib/event/isCtrlOrMetaPressed.ts.html | 2 +- .../lib/event/isModifierKey.ts.html | 2 +- .../lib/htmlSanitizer/HtmlSanitizer.ts.html | 2 +- .../chainSanitizerCallback.ts.html | 2 +- .../lib/htmlSanitizer/cloneObject.ts.html | 2 +- .../createDefaultHtmlSanitizerOptions.ts.html | 2 +- .../htmlSanitizer/getAllowedValues.ts.html | 2 +- .../getInheritableStyles.ts.html | 2 +- .../getPredefinedCssForElement.ts.html | 2 +- .../lib/htmlSanitizer/index.html | 2 +- .../htmlSanitizer/processCssVariable.ts.html | 2 +- .../roosterjs-editor-dom/lib/index.html | 2 +- .../roosterjs-editor-dom/lib/index.ts.html | 48 +- .../inlineElements/EmptyInlineElement.ts.html | 2 +- .../inlineElements/ImageInlineElement.ts.html | 2 +- .../inlineElements/LinkInlineElement.ts.html | 2 +- .../inlineElements/NodeInlineElement.ts.html | 2 +- .../PartialInlineElement.ts.html | 2 +- .../lib/inlineElements/applyTextStyle.ts.html | 2 +- .../getFirstLastInlineElement.ts.html | 2 +- .../getInlineElementAtNode.ts.html | 2 +- .../getInlineElementBeforeAfter.ts.html | 2 +- .../lib/inlineElements/index.html | 2 +- .../lib/jsUtils/arrayPush.ts.html | 4 +- .../lib/jsUtils/getObjectKeys.ts.html | 4 +- .../lib/jsUtils/index.html | 2 +- .../lib/jsUtils/toArray.ts.html | 4 +- .../lib/list/VList.ts.html | 2 +- .../lib/list/VListChain.ts.html | 2 +- .../lib/list/VListItem.ts.html | 2 +- .../lib/list/convertDecimalsToAlpha.ts.html | 2 +- .../lib/list/convertDecimalsToRomans.ts.html | 2 +- .../lib/list/createVListFromRegion.ts.html | 2 +- .../lib/list/getListTypeFromNode.ts.html | 2 +- .../lib/list/getRootListNode.ts.html | 2 +- .../roosterjs-editor-dom/lib/list/index.html | 2 +- .../lib/list/setBulletListMarkers.ts.html | 2 +- .../lib/list/setListItemStyle.ts.html | 2 +- .../lib/list/setNumberingListMarkers.ts.html | 2 +- .../lib/metadata/definitionCreators.ts.html | 2 +- .../lib/metadata/index.html | 2 +- .../lib/metadata/metadata.ts.html | 2 +- .../lib/metadata/validate.ts.html | 2 +- .../pasteSourceValidations/constants.ts.html | 2 +- .../documentContainWacElements.ts.html | 2 +- .../getPasteSource.ts.html | 2 +- .../lib/pasteSourceValidations/index.html | 2 +- .../isExcelDesktopDocument.ts.html | 2 +- .../isExcelOnlineDocument.ts.html | 2 +- .../isGoogleSheetDocument.ts.html | 2 +- .../isPowerPointDesktopDocument.ts.html | 2 +- .../isWordDesktopDocument.ts.html | 2 +- .../shouldConvertToSingleImage.ts.html | 2 +- .../lib/region/collapseNodesInRegion.ts.html | 2 +- .../lib/region/getRegionsFromRange.ts.html | 2 +- .../getSelectedBlockElementsInRegion.ts.html | 2 +- .../region/getSelectionRangeInRegion.ts.html | 2 +- .../lib/region/index.html | 2 +- .../lib/region/isNodeInRegion.ts.html | 2 +- .../lib/region/mergeBlocksInRegion.ts.html | 2 +- .../lib/selection/Position.ts.html | 32 +- .../lib/selection/addRangeToSelection.ts.html | 10 +- .../lib/selection/createRange.ts.html | 2 +- .../getHtmlWithSelectionPath.ts.html | 2 +- .../lib/selection/getPositionRect.ts.html | 2 +- .../lib/selection/getSelectionPath.ts.html | 6 +- .../lib/selection/index.html | 2 +- .../selection/isPositionAtBeginningOf.ts.html | 2 +- .../setHtmlWithSelectionPath.ts.html | 2 +- .../lib/snapshots/addSnapshot.ts.html | 32 +- .../snapshots/canMoveCurrentSnapshot.ts.html | 6 +- .../lib/snapshots/canUndoAutoComplete.ts.html | 2 +- .../clearProceedingSnapshots.ts.html | 6 +- .../lib/snapshots/createSnapshots.ts.html | 4 +- .../lib/snapshots/index.html | 2 +- .../lib/snapshots/moveCurrentSnapshot.ts.html | 2 +- .../lib/style/getStyles.ts.html | 2 +- .../roosterjs-editor-dom/lib/style/index.html | 2 +- .../lib/style/removeGlobalCssStyle.ts.html | 6 +- .../style/removeImportantStyleRule.ts.html | 2 +- .../lib/style/setGlobalCssStyles.ts.html | 2 +- .../lib/style/setStyles.ts.html | 2 +- .../lib/table/VTable.ts.html | 2 +- .../lib/table/applyTableFormat.ts.html | 2 +- .../lib/table/cloneCellStyles.ts.html | 2 +- .../roosterjs-editor-dom/lib/table/index.html | 2 +- .../lib/table/isWholeTableSelected.ts.html | 2 +- .../lib/table/pasteTable.ts.html | 2 +- .../lib/table/tableCellInfo.ts.html | 2 +- .../lib/table/tableFormatInfo.ts.html | 2 +- .../lib/utils/Browser.ts.html | 2 +- .../lib/utils/applyFormat.ts.html | 30 +- .../lib/utils/changeElementTag.ts.html | 2 +- .../lib/utils/collapseNodes.ts.html | 2 +- .../lib/utils/contains.ts.html | 20 +- .../lib/utils/createElement.ts.html | 34 +- .../utils/findClosestElementAncestor.ts.html | 14 +- .../lib/utils/fromHtml.ts.html | 2 +- .../lib/utils/getComputedStyles.ts.html | 2 +- .../lib/utils/getInnerHTML.ts.html | 2 +- .../lib/utils/getIntersectedRect.ts.html | 2 +- .../lib/utils/getLeafNode.ts.html | 2 +- .../lib/utils/getLeafSibling.ts.html | 2 +- .../lib/utils/getPendableFormatState.ts.html | 2 +- .../lib/utils/getTagOfNode.ts.html | 4 +- .../roosterjs-editor-dom/lib/utils/index.html | 2 +- .../lib/utils/isBlockElement.ts.html | 2 +- .../lib/utils/isNodeAfter.ts.html | 2 +- .../lib/utils/isNodeEmpty.ts.html | 2 +- .../lib/utils/isVoidHtmlElement.ts.html | 2 +- .../lib/utils/matchLink.ts.html | 2 +- .../lib/utils/matchesSelector.ts.html | 2 +- .../lib/utils/moveChildNodes.ts.html | 8 +- .../lib/utils/normalizeRect.ts.html | 2 +- .../lib/utils/parseColor.ts.html | 2 +- .../lib/utils/queryElements.ts.html | 14 +- .../lib/utils/readFile.ts.html | 2 +- .../lib/utils/safeInstanceOf.ts.html | 22 +- .../lib/utils/setColor.ts.html | 18 +- .../lib/utils/shouldSkipNode.ts.html | 2 +- .../lib/utils/splitParentNode.ts.html | 2 +- .../lib/utils/splitTextNode.ts.html | 2 +- .../lib/utils/unwrap.ts.html | 2 +- .../lib/utils/wrap.ts.html | 2 +- .../lib/AutoFormat.ts.html | 2 +- .../lib/ContentEdit.ts.html | 2 +- .../lib/ContextMenu.ts.html | 2 +- .../lib/CustomReplace.ts.html | 2 +- .../lib/CutPasteListChain.ts.html | 2 +- .../lib/HyperLink.ts.html | 2 +- .../lib/ImageEdit.ts.html | 2 +- .../lib/ImageResize.ts.html | 2 +- .../lib/Paste.ts.html | 2 +- .../lib/Picker.ts.html | 2 +- .../lib/TableCellSelection.ts.html | 2 +- .../lib/TableResize.ts.html | 2 +- .../lib/Watermark.ts.html | 2 +- .../roosterjs-editor-plugins/lib/index.html | 2 +- .../lib/index.ts.html | 2 +- .../lib/pluginUtils/DragAndDropHelper.ts.html | 2 +- .../lib/pluginUtils/index.html | 2 +- .../lib/plugins/AutoFormat/AutoFormat.ts.html | 2 +- .../lib/plugins/AutoFormat/index.html | 2 +- .../lib/plugins/AutoFormat/index.ts.html | 2 +- .../plugins/ContentEdit/ContentEdit.ts.html | 2 +- .../features/autoLinkFeatures.ts.html | 2 +- .../ContentEdit/features/codeFeatures.ts.html | 2 +- .../features/cursorFeatures.ts.html | 2 +- .../features/entityFeatures.ts.html | 2 +- .../plugins/ContentEdit/features/index.html | 2 +- .../ContentEdit/features/listFeatures.ts.html | 2 +- .../features/markdownFeatures.ts.html | 2 +- .../features/quoteFeatures.ts.html | 2 +- .../features/shortcutFeatures.ts.html | 2 +- .../features/structuredNodeFeatures.ts.html | 2 +- .../features/tableFeatures.ts.html | 2 +- .../ContentEdit/features/textFeatures.ts.html | 2 +- .../ContentEdit/getAllFeatures.ts.html | 2 +- .../lib/plugins/ContentEdit/index.html | 2 +- .../lib/plugins/ContentEdit/index.ts.html | 2 +- .../utils/convertAlphaToDecimals.ts.html | 2 +- .../utils/getAutoBulletListStyle.ts.html | 2 +- .../utils/getAutoNumberingListStyle.ts.html | 2 +- .../lib/plugins/ContentEdit/utils/index.html | 2 +- .../plugins/ContextMenu/ContextMenu.ts.html | 2 +- .../lib/plugins/ContextMenu/index.html | 2 +- .../lib/plugins/ContextMenu/index.ts.html | 2 +- .../CustomReplace/CustomReplace.ts.html | 2 +- .../lib/plugins/CustomReplace/index.html | 2 +- .../lib/plugins/CustomReplace/index.ts.html | 2 +- .../CutPasteListChain.ts.html | 2 +- .../lib/plugins/CutPasteListChain/index.html | 2 +- .../plugins/CutPasteListChain/index.ts.html | 2 +- .../lib/plugins/HyperLink/HyperLink.ts.html | 2 +- .../lib/plugins/HyperLink/index.html | 2 +- .../lib/plugins/HyperLink/index.ts.html | 2 +- .../lib/plugins/ImageEdit/ImageEdit.ts.html | 2 +- .../ImageEdit/api/canRegenerateImage.ts.html | 2 +- .../lib/plugins/ImageEdit/api/index.html | 2 +- .../plugins/ImageEdit/api/isResizedTo.ts.html | 2 +- .../plugins/ImageEdit/api/resetImage.ts.html | 2 +- .../ImageEdit/api/resizeByPercentage.ts.html | 2 +- .../editInfoUtils/applyChange.ts.html | 2 +- .../editInfoUtils/checkEditInfoState.ts.html | 2 +- .../ImageEdit/editInfoUtils/editInfo.ts.html | 2 +- .../editInfoUtils/generateDataURL.ts.html | 2 +- .../getGeneratedImageSize.ts.html | 2 +- .../editInfoUtils/getLastZIndex.ts.html | 2 +- .../getTargetSizeByPercentage.ts.html | 2 +- .../ImageEdit/editInfoUtils/index.html | 2 +- .../tryToConvertGifToPng.ts.html | 2 +- .../ImageEdit/imageEditors/Cropper.ts.html | 2 +- .../ImageEdit/imageEditors/Resizer.ts.html | 2 +- .../ImageEdit/imageEditors/Rotator.ts.html | 2 +- .../plugins/ImageEdit/imageEditors/index.html | 2 +- .../lib/plugins/ImageEdit/index.html | 2 +- .../lib/plugins/ImageEdit/index.ts.html | 2 +- .../plugins/ImageResize/ImageResize.ts.html | 2 +- .../lib/plugins/ImageResize/index.html | 2 +- .../lib/plugins/ImageResize/index.ts.html | 2 +- .../lib/plugins/Paste/Paste.ts.html | 2 +- .../convertPastedContentForLI.ts.html | 2 +- .../plugins/Paste/commonConverter/index.html | 2 +- .../convertPastedContentFromExcel.ts.html | 2 +- .../plugins/Paste/excelConverter/index.html | 2 +- .../convertPasteContentForSingleImage.ts.html | 2 +- .../plugins/Paste/imageConverter/index.html | 2 +- .../lib/plugins/Paste/index.html | 2 +- .../lib/plugins/Paste/index.ts.html | 2 +- .../Paste/lineMerge/handleLineMerge.ts.html | 2 +- .../lib/plugins/Paste/lineMerge/index.html | 2 +- .../ListItemBlock.ts.html | 2 +- ...nvertPastedContentFromOfficeOnline.ts.html | 2 +- ...convertPastedContentFromWordOnline.ts.html | 2 +- .../Paste/officeOnlineConverter/index.html | 2 +- ...convertPastedContentFromPowerPoint.ts.html | 2 +- .../lib/plugins/Paste/pptConverter/index.html | 2 +- .../deprecatedColorList.ts.html | 2 +- .../index.html | 2 +- ...anitizeHtmlColorsFromPastedContent.ts.html | 2 +- .../plugins/Paste/sanitizeLinks/index.html | 2 +- .../Paste/sanitizeLinks/sanitizeLinks.ts.html | 2 +- .../Paste/wordConverter/LevelLists.ts.html | 2 +- .../WordConverterArguments.ts.html | 2 +- .../wordConverter/WordCustomData.ts.html | 2 +- .../wordConverter/commentsRemoval.ts.html | 2 +- .../convertPastedContentFromWord.ts.html | 2 +- .../wordConverter/converterUtils.ts.html | 2 +- .../plugins/Paste/wordConverter/index.html | 2 +- .../Paste/wordConverter/wordConverter.ts.html | 2 +- .../lib/plugins/Picker/PickerPlugin.ts.html | 2 +- .../lib/plugins/Picker/index.html | 2 +- .../lib/plugins/Picker/index.ts.html | 2 +- .../TableCellSelection.ts.html | 2 +- .../TableCellSelection/constants.ts.html | 2 +- .../features/DeleteTableContents.ts.html | 2 +- .../TableCellSelection/features/index.html | 2 +- .../lib/plugins/TableCellSelection/index.html | 2 +- .../plugins/TableCellSelection/index.ts.html | 2 +- .../keyUtils/handleKeyDownEvent.ts.html | 2 +- .../keyUtils/handleKeyUpEvent.ts.html | 2 +- .../TableCellSelection/keyUtils/index.html | 2 +- .../mouseUtils/handleMouseDownEvent.ts.html | 2 +- .../mouseUtils/handleScrollEvent.ts.html | 2 +- .../TableCellSelection/mouseUtils/index.html | 2 +- .../utils/clearState.ts.html | 2 +- .../utils/getCellAtCursor.ts.html | 2 +- .../utils/getCellCoordinates.ts.html | 2 +- .../utils/getTableAtCursor.ts.html | 2 +- .../TableCellSelection/utils/index.html | 2 +- .../TableCellSelection/utils/isAfter.ts.html | 2 +- .../utils/normalizeTableSelection.ts.html | 2 +- .../utils/prepareSelection.ts.html | 2 +- .../utils/restoreSelection.ts.html | 2 +- .../utils/selectTable.ts.html | 2 +- .../TableCellSelection/utils/setData.ts.html | 2 +- .../utils/updateSelection.ts.html | 2 +- .../plugins/TableResize/TableResize.ts.html | 2 +- .../TableResize/editors/CellResizer.ts.html | 2 +- .../TableResize/editors/TableEditor.ts.html | 2 +- .../editors/TableEditorFeature.ts.html | 2 +- .../TableResize/editors/TableInserter.ts.html | 2 +- .../TableResize/editors/TableResizer.ts.html | 2 +- .../TableResize/editors/TableSelector.ts.html | 2 +- .../plugins/TableResize/editors/index.html | 2 +- .../lib/plugins/TableResize/index.html | 2 +- .../lib/plugins/TableResize/index.ts.html | 2 +- .../lib/plugins/Watermark/Watermark.ts.html | 2 +- .../lib/plugins/Watermark/index.html | 2 +- .../lib/plugins/Watermark/index.ts.html | 2 +- .../lib/index.html | 2 +- .../lib/index.ts.html | 2 +- .../lib/browser/index.html | 2 +- .../lib/browser/index.ts.html | 2 +- .../lib/compatibleEnum/Alignment.ts.html | 2 +- .../lib/compatibleEnum/BulletListType.ts.html | 2 +- .../lib/compatibleEnum/Capitalization.ts.html | 2 +- .../lib/compatibleEnum/ChangeSource.ts.html | 2 +- .../compatibleEnum/ClearFormatMode.ts.html | 2 +- .../ColorTransformDirection.ts.html | 2 +- .../compatibleEnum/ContentPosition.ts.html | 2 +- .../lib/compatibleEnum/ContentType.ts.html | 2 +- .../DarkModeDatasetNames.ts.html | 2 +- .../lib/compatibleEnum/DefinitionType.ts.html | 2 +- .../compatibleEnum/DelimiterClasses.ts.html | 2 +- .../lib/compatibleEnum/Direction.ts.html | 2 +- .../compatibleEnum/DocumentCommand.ts.html | 2 +- .../compatibleEnum/DocumentPosition.ts.html | 2 +- .../lib/compatibleEnum/EntityClasses.ts.html | 2 +- .../compatibleEnum/EntityOperation.ts.html | 2 +- .../ExperimentalFeatures.ts.html | 2 +- .../lib/compatibleEnum/FontSizeChange.ts.html | 2 +- .../lib/compatibleEnum/GetContentMode.ts.html | 2 +- .../compatibleEnum/ImageEditOperation.ts.html | 2 +- .../lib/compatibleEnum/Indentation.ts.html | 2 +- .../lib/compatibleEnum/Keys.ts.html | 2 +- .../KnownCreateElementDataIndex.ts.html | 2 +- .../KnownPasteSourceType.ts.html | 2 +- .../lib/compatibleEnum/ListType.ts.html | 2 +- .../lib/compatibleEnum/NodeType.ts.html | 2 +- .../compatibleEnum/NumberingListType.ts.html | 2 +- .../lib/compatibleEnum/PasteType.ts.html | 2 +- .../compatibleEnum/PluginEventType.ts.html | 2 +- .../lib/compatibleEnum/PositionType.ts.html | 2 +- .../lib/compatibleEnum/QueryScope.ts.html | 2 +- .../lib/compatibleEnum/RegionType.ts.html | 2 +- .../SelectionRangeTypes.ts.html | 2 +- .../compatibleEnum/TableBorderFormat.ts.html | 2 +- .../lib/compatibleEnum/TableOperation.ts.html | 2 +- .../lib/compatibleEnum/index.html | 2 +- .../lib/compatibleEnum/index.ts.html | 2 +- .../lib/compatibleTypes.ts.html | 2 +- .../lib/corePluginState/index.html | 2 +- .../lib/corePluginState/index.ts.html | 2 +- .../lib/enum/Alignment.ts.html | 2 +- .../lib/enum/BulletListType.ts.html | 2 +- .../lib/enum/Capitalization.ts.html | 2 +- .../lib/enum/ChangeSource.ts.html | 2 +- .../lib/enum/ClearFormatMode.ts.html | 2 +- .../lib/enum/ColorTransformDirection.ts.html | 2 +- .../lib/enum/ContentPosition.ts.html | 2 +- .../lib/enum/ContentType.ts.html | 2 +- .../lib/enum/DarkModeDatasetNames.ts.html | 2 +- .../lib/enum/DefinitionType.ts.html | 2 +- .../lib/enum/DelimiterClasses.ts.html | 2 +- .../lib/enum/Direction.ts.html | 2 +- .../lib/enum/DocumentCommand.ts.html | 2 +- .../lib/enum/DocumentPosition.ts.html | 2 +- .../lib/enum/EntityClasses.ts.html | 2 +- .../lib/enum/EntityOperation.ts.html | 2 +- .../lib/enum/ExperimentalFeatures.ts.html | 2 +- .../lib/enum/FontSizeChange.ts.html | 2 +- .../lib/enum/GetContentMode.ts.html | 2 +- .../lib/enum/ImageEditOperation.ts.html | 2 +- .../lib/enum/Indentation.ts.html | 2 +- .../lib/enum/Keys.ts.html | 2 +- .../enum/KnownCreateElementDataIndex.ts.html | 2 +- .../lib/enum/KnownPasteSourceType.ts.html | 2 +- .../lib/enum/ListType.ts.html | 2 +- .../lib/enum/NodeType.ts.html | 2 +- .../lib/enum/NumberingListType.ts.html | 2 +- .../lib/enum/PasteType.ts.html | 2 +- .../lib/enum/PluginEventType.ts.html | 2 +- .../lib/enum/PositionType.ts.html | 2 +- .../lib/enum/QueryScope.ts.html | 2 +- .../lib/enum/RegionType.ts.html | 2 +- .../lib/enum/SelectionRangeTypes.ts.html | 2 +- .../lib/enum/TableBorderFormat.ts.html | 2 +- .../lib/enum/TableOperation.ts.html | 2 +- .../lib/enum/index.html | 2 +- .../lib/enum/index.ts.html | 2 +- .../lib/event/index.html | 2 +- .../lib/event/index.ts.html | 2 +- .../roosterjs-editor-types/lib/index.html | 2 +- .../roosterjs-editor-types/lib/index.ts.html | 2 +- .../lib/interface/index.html | 2 +- .../lib/interface/index.ts.html | 2 +- .../lib/type/index.html | 2 +- .../lib/type/index.ts.html | 2 +- .../roosterjs/lib/createEditor.ts.html | 2 +- coverage/packages/roosterjs/lib/index.html | 2 +- coverage/packages/roosterjs/lib/index.ts.html | 2 +- ...el_editor.contentmodelcopypasteplugin.html | 10 +- ...ntent_model_editor.contentmodeleditor.html | 138 +- ...t_model_editor.contentmodeleditplugin.html | 8 +- ...model_editor.contentmodelformatplugin.html | 8 +- ..._model_editor.contentmodelpasteplugin.html | 10 +- ...tor.contentmodeltypeincontainerplugin.html | 6 +- .../classes/roosterjs_editor_core.editor.html | 130 +- .../roosterjs_editor_core.editorbase.html | 130 +- ...roosterjs_editor_dom.contenttraverser.html | 18 +- .../roosterjs_editor_dom.htmlsanitizer.html | 12 +- ...osterjs_editor_dom.imageinlineelement.html | 20 +- ...oosterjs_editor_dom.linkinlineelement.html | 20 +- ...oosterjs_editor_dom.nodeinlineelement.html | 20 +- ...terjs_editor_dom.partialinlineelement.html | 26 +- .../roosterjs_editor_dom.position.html | 26 +- ...js_editor_dom.positioncontentsearcher.html | 16 +- docs/classes/roosterjs_editor_dom.vlist.html | 30 +- .../roosterjs_editor_dom.vlistchain.html | 8 +- .../roosterjs_editor_dom.vlistitem.html | 36 +- docs/classes/roosterjs_editor_dom.vtable.html | 38 +- .../roosterjs_editor_plugins.autoformat.html | 8 +- .../roosterjs_editor_plugins.contentedit.html | 8 +- .../roosterjs_editor_plugins.contextmenu.html | 10 +- ...oosterjs_editor_plugins.customreplace.html | 12 +- ...erjs_editor_plugins.cutpastelistchain.html | 8 +- .../roosterjs_editor_plugins.hyperlink.html | 14 +- .../roosterjs_editor_plugins.imageedit.html | 24 +- .../roosterjs_editor_plugins.imageresize.html | 28 +- .../roosterjs_editor_plugins.paste.html | 10 +- ...roosterjs_editor_plugins.pickerplugin.html | 12 +- ...rjs_editor_plugins.tablecellselection.html | 10 +- .../roosterjs_editor_plugins.tableresize.html | 10 +- .../roosterjs_editor_plugins.watermark.html | 10 +- .../roosterjs_editor_types.alignment.html | 6 +- ...roosterjs_editor_types.bulletlisttype.html | 22 +- ...roosterjs_editor_types.capitalization.html | 8 +- .../roosterjs_editor_types.changesource.html | 26 +- ...oosterjs_editor_types.clearformatmode.html | 6 +- ..._editor_types.colortransformdirection.html | 4 +- ...oosterjs_editor_types.contentposition.html | 12 +- .../roosterjs_editor_types.contenttype.html | 4 +- ...sterjs_editor_types.contenttypeprefix.html | 4 +- ...rjs_editor_types.darkmodedatasetnames.html | 8 +- ...roosterjs_editor_types.definitiontype.html | 12 +- ...osterjs_editor_types.delimiterclasses.html | 4 +- .../roosterjs_editor_types.direction.html | 4 +- ...oosterjs_editor_types.documentcommand.html | 94 +- ...osterjs_editor_types.documentposition.html | 12 +- .../roosterjs_editor_types.entityclasses.html | 8 +- ...oosterjs_editor_types.entityoperation.html | 24 +- ...rjs_editor_types.experimentalfeatures.html | 60 +- ...roosterjs_editor_types.fontsizechange.html | 4 +- ...roosterjs_editor_types.getcontentmode.html | 10 +- ...terjs_editor_types.imageeditoperation.html | 16 +- .../roosterjs_editor_types.indentation.html | 4 +- docs/enums/roosterjs_editor_types.keys.html | 74 +- ...tor_types.knowncreateelementdataindex.html | 26 +- ...rjs_editor_types.knownpastesourcetype.html | 16 +- .../roosterjs_editor_types.listtype.html | 6 +- .../roosterjs_editor_types.nodetype.html | 16 +- ...sterjs_editor_types.numberinglisttype.html | 44 +- .../roosterjs_editor_types.pastetype.html | 8 +- ...oosterjs_editor_types.plugineventtype.html | 48 +- .../roosterjs_editor_types.positiontype.html | 8 +- .../roosterjs_editor_types.queryscope.html | 6 +- .../roosterjs_editor_types.regiontype.html | 2 +- ...erjs_editor_types.selectionrangetypes.html | 6 +- ...sterjs_editor_types.tableborderformat.html | 18 +- ...roosterjs_editor_types.tableoperation.html | 46 +- .../roosterjs_react.knownribbonbuttonkey.html | 62 +- docs/enums/roosterjs_react.updatemode.html | 12 +- ...osterjs_content_model_dom.nodetypemap.html | 16 +- ...roosterjs_content_model_editor.border.html | 6 +- ...ompatiblecontentmodelbeforepasteevent.html | 20 +- ...l_editor.contentmodelbeforepasteevent.html | 20 +- ...itor.contentmodelbeforepasteeventdata.html | 16 +- ...t_model_editor.contentmodelcoreapimap.html | 48 +- ...t_model_editor.contentmodeleditorcore.html | 32 +- ...odel_editor.contentmodeleditoroptions.html | 44 +- ..._model_editor.contentmodelformatstate.html | 70 +- ...tent_model_editor.icontentmodeleditor.html | 160 +- ...content_model_editor.imageformatstate.html | 10 +- ...erjs_content_model_editor.insertpoint.html | 8 +- ...nt_model_editor.tableselectioncontext.html | 8 +- ...ent_model_types.contentmodelblockbase.html | 4 +- ...odel_types.contentmodelblockgroupbase.html | 4 +- ...odel_types.contentmodelblockwithcache.html | 2 +- ...js_content_model_types.contentmodelbr.html | 10 +- ..._content_model_types.contentmodelcode.html | 2 +- ...ntent_model_types.contentmodeldivider.html | 12 +- ...tent_model_types.contentmodeldocument.html | 6 +- ...ontent_model_types.contentmodelentity.html | 20 +- ...del_types.contentmodelformatcontainer.html | 14 +- ...ent_model_types.contentmodelformatmap.html | 42 +- ..._model_types.contentmodelgeneralblock.html | 12 +- ...odel_types.contentmodelgeneralsegment.html | 18 +- ...content_model_types.contentmodelimage.html | 20 +- ..._content_model_types.contentmodellink.html | 4 +- ...tent_model_types.contentmodellistitem.html | 12 +- ...ent_model_types.contentmodelparagraph.html | 14 +- ..._types.contentmodelparagraphdecorator.html | 4 +- ...t_model_types.contentmodelsegmentbase.html | 10 +- ...del_types.contentmodelselectionmarker.html | 10 +- ...content_model_types.contentmodeltable.html | 12 +- ...ent_model_types.contentmodeltablecell.html | 18 +- ...tent_model_types.contentmodeltablerow.html | 8 +- ..._content_model_types.contentmodeltext.html | 12 +- ...t_model_types.contentmodelwithdataset.html | 2 +- ...nt_model_types.contentmodelwithformat.html | 2 +- ...content_model_types.domtomodelcontext.html | 44 +- ...odel_types.domtomodeldecoratorcontext.html | 6 +- ...t_model_types.domtomodelformatcontext.html | 10 +- ..._model_types.domtomodelimageselection.html | 2 +- ...tent_model_types.domtomodellistformat.html | 6 +- ..._content_model_types.domtomodeloption.html | 14 +- ...odel_types.domtomodelregularselection.html | 10 +- ...odel_types.domtomodelselectioncontext.html | 10 +- ...ontent_model_types.domtomodelsettings.html | 10 +- ..._model_types.domtomodeltableselection.html | 6 +- ...rjs_content_model_types.editorcontext.html | 8 +- ...tent_model_types.formathandlertypemap.html | 72 +- ...l_types.modeltodomblockandsegmentnode.html | 4 +- ...content_model_types.modeltodomcontext.html | 30 +- ...t_model_types.modeltodomformatcontext.html | 4 +- ..._model_types.modeltodomimageselection.html | 2 +- ...ent_model_types.modeltodomlistcontext.html | 4 +- ...t_model_types.modeltodomliststackitem.html | 34 +- ..._content_model_types.modeltodomoption.html | 10 +- ...odel_types.modeltodomregularselection.html | 6 +- ...odel_types.modeltodomselectioncontext.html | 6 +- ...ontent_model_types.modeltodomsettings.html | 12 +- ..._model_types.modeltodomtableselection.html | 6 +- ...sterjs_content_model_types.selectable.html | 2 +- ...rjs_editor_plugins.contextmenuoptions.html | 6 +- ...rjs_editor_plugins.onshowresizehandle.html | 2 +- ...oosterjs_editor_types.arraydefinition.html | 12 +- ..._editor_types.autolinkfeaturesettings.html | 4 +- ...oosterjs_editor_types.basepluginevent.html | 4 +- ...terjs_editor_types.beforecutcopyevent.html | 12 +- ...s_editor_types.beforecutcopyeventdata.html | 8 +- ...terjs_editor_types.beforedisposeevent.html | 4 +- ...ditor_types.beforekeyboardeditingdata.html | 2 +- ...itor_types.beforekeyboardeditingevent.html | 6 +- ...osterjs_editor_types.beforepasteevent.html | 18 +- ...rjs_editor_types.beforepasteeventdata.html | 14 +- ...js_editor_types.beforesetcontentevent.html | 6 +- ...ditor_types.beforesetcontenteventdata.html | 2 +- .../roosterjs_editor_types.blockelement.html | 14 +- ...sterjs_editor_types.booleandefinition.html | 8 +- .../roosterjs_editor_types.browserinfo.html | 24 +- ...terjs_editor_types.buildineditfeature.html | 10 +- .../roosterjs_editor_types.clipboarddata.html | 22 +- ...erjs_editor_types.codefeaturesettings.html | 4 +- ...osterjs_editor_types.colorkeyandvalue.html | 6 +- ...or_types.compatiblebeforecutcopyevent.html | 12 +- ...or_types.compatiblebeforedisposeevent.html | 4 +- ....compatiblebeforekeyboardeditingevent.html | 6 +- ...itor_types.compatiblebeforepasteevent.html | 18 +- ...types.compatiblebeforesetcontentevent.html | 6 +- ...r_types.compatiblecontentchangedevent.html | 10 +- ...editor_types.compatibleeditimageevent.html | 12 +- ...itor_types.compatibleeditorreadyevent.html | 4 +- ..._types.compatibleentershadoweditevent.html | 8 +- ..._types.compatibleentityoperationevent.html | 16 +- ....compatibleextractcontentwithdomevent.html | 6 +- ..._types.compatibleleaveshadoweditevent.html | 4 +- ...patiblependingformatstatechangedevent.html | 8 +- ...ypes.compatibleplugincompositionevent.html | 6 +- ...ypes.compatibleplugincontextmenuevent.html | 8 +- ...itor_types.compatibleplugininputevent.html | 6 +- ...or_types.compatiblepluginkeydownevent.html | 6 +- ...r_types.compatiblepluginkeypressevent.html | 6 +- ...itor_types.compatiblepluginkeyupevent.html | 6 +- ..._types.compatiblepluginmousedownevent.html | 6 +- ...or_types.compatiblepluginmouseupevent.html | 8 +- ...tor_types.compatiblepluginscrollevent.html | 8 +- ...types.compatibleselectionchangedevent.html | 6 +- ...itor_types.compatiblezoomchangedevent.html | 8 +- ...terjs_editor_types.contentchangeddata.html | 4 +- ...erjs_editor_types.contentchangedevent.html | 10 +- ..._editor_types.contentchangedeventdata.html | 6 +- ...itor_types.contenteditfeaturesettings.html | 80 +- ...erjs_editor_types.contentmetadatabase.html | 4 +- ...erjs_editor_types.contextmenuprovider.html | 12 +- .../roosterjs_editor_types.coordinates.html | 4 +- ...rjs_editor_types.copypastepluginstate.html | 2 +- .../roosterjs_editor_types.coreapimap.html | 42 +- .../roosterjs_editor_types.coreplugins.html | 24 +- ...sterjs_editor_types.createelementdata.html | 14 +- ...js_editor_types.cursorfeaturesettings.html | 2 +- .../roosterjs_editor_types.customdata.html | 4 +- ...erjs_editor_types.customizedefinition.html | 8 +- ...sterjs_editor_types.customreplacement.html | 8 +- ...osterjs_editor_types.darkcolorhandler.html | 12 +- .../roosterjs_editor_types.defaultformat.html | 18 +- ...roosterjs_editor_types.definitionbase.html | 6 +- ...js_editor_types.domeventhandlerobject.html | 4 +- ...erjs_editor_types.domeventpluginstate.html | 14 +- ...oosterjs_editor_types.edgelinkpreview.html | 10 +- ...roosterjs_editor_types.editimageevent.html | 12 +- ...terjs_editor_types.editimageeventdata.html | 8 +- .../roosterjs_editor_types.editorcore.html | 20 +- .../roosterjs_editor_types.editoroptions.html | 40 +- .../roosterjs_editor_types.editorplugin.html | 10 +- ...osterjs_editor_types.editorreadyevent.html | 4 +- ...oosterjs_editor_types.editorundostate.html | 4 +- ...oosterjs_editor_types.editpluginstate.html | 2 +- ..._editor_types.elementbasedformatstate.html | 26 +- ...rjs_editor_types.entershadoweditevent.html | 8 +- ...editor_types.entershadowediteventdata.html | 4 +- .../roosterjs_editor_types.entity.html | 8 +- ...js_editor_types.entityfeaturesettings.html | 14 +- ...rjs_editor_types.entityoperationevent.html | 16 +- ...editor_types.entityoperationeventdata.html | 12 +- ...sterjs_editor_types.entitypluginstate.html | 8 +- .../roosterjs_editor_types.entitystate.html | 6 +- ...tor_types.extractclipboardeventoption.html | 8 +- ...pes.extractclipboarditemsforieoptions.html | 4 +- ...tor_types.extractclipboarditemsoption.html | 4 +- ...itor_types.extractcontentwithdomevent.html | 6 +- ..._types.extractcontentwithdomeventdata.html | 2 +- .../roosterjs_editor_types.formatstate.html | 68 +- ...ditor_types.genericcontenteditfeature.html | 8 +- ...rjs_editor_types.htmlsanitizeroptions.html | 22 +- ...sterjs_editor_types.icontenttraverser.html | 12 +- .../roosterjs_editor_types.ieditor.html | 152 +- ...rjs_editor_types.imagecontentmetadata.html | 6 +- ...osterjs_editor_types.imageeditoptions.html | 22 +- ...erjs_editor_types.imageselectionrange.html | 8 +- .../roosterjs_editor_types.inlineelement.html | 18 +- ...osterjs_editor_types.insertoptionbase.html | 8 +- ...sterjs_editor_types.insertoptionbasic.html | 10 +- ...sterjs_editor_types.insertoptionrange.html | 12 +- ...editor_types.ipositioncontentsearcher.html | 14 +- ...oosterjs_editor_types.knownentityitem.html | 6 +- ...rjs_editor_types.leaveshadoweditevent.html | 4 +- ...rjs_editor_types.lifecyclepluginstate.html | 22 +- .../roosterjs_editor_types.linkdata.html | 6 +- ...erjs_editor_types.listfeaturesettings.html | 26 +- ..._editor_types.markdownfeaturesettings.html | 8 +- ...rjs_editor_types.modeindependentcolor.html | 4 +- .../roosterjs_editor_types.nodeposition.html | 16 +- ...js_editor_types.normalcontentmetadata.html | 8 +- ...rjs_editor_types.normalselectionrange.html | 6 +- ...osterjs_editor_types.numberdefinition.html | 12 +- ...osterjs_editor_types.objectdefinition.html | 8 +- ...erjs_editor_types.pendableformatstate.html | 12 +- ..._types.pendingformatstatechangedevent.html | 8 +- ...r_types.pendingformatstatepluginstate.html | 6 +- ...terjs_editor_types.pickerdataprovider.html | 22 +- ...erjs_editor_types.pickerpluginoptions.html | 14 +- ...s_editor_types.plugincompositionevent.html | 6 +- ...s_editor_types.plugincontextmenuevent.html | 8 +- ...itor_types.plugincontextmenueventdata.html | 2 +- ...terjs_editor_types.plugindomeventbase.html | 6 +- ...osterjs_editor_types.plugininputevent.html | 6 +- ...terjs_editor_types.pluginkeydownevent.html | 6 +- ...erjs_editor_types.pluginkeypressevent.html | 6 +- ...osterjs_editor_types.pluginkeyupevent.html | 6 +- ...rjs_editor_types.pluginmousedownevent.html | 6 +- ...terjs_editor_types.pluginmouseupevent.html | 8 +- ...s_editor_types.pluginmouseupeventdata.html | 2 +- ...sterjs_editor_types.pluginscrollevent.html | 8 +- ...js_editor_types.pluginscrolleventdata.html | 2 +- ...oosterjs_editor_types.pluginwithstate.html | 12 +- ...rjs_editor_types.quotefeaturesettings.html | 4 +- .../roosterjs_editor_types.rect.html | 8 +- .../roosterjs_editor_types.region.html | 12 +- .../roosterjs_editor_types.regionbase.html | 8 +- ...erjs_editor_types.sanitizehtmloptions.html | 26 +- ...js_editor_types.selectionchangedevent.html | 6 +- ...ditor_types.selectionchangedeventdata.html | 2 +- .../roosterjs_editor_types.selectionpath.html | 4 +- ...rjs_editor_types.selectionrangeexbase.html | 6 +- ..._editor_types.shortcutfeaturesettings.html | 2 +- .../roosterjs_editor_types.snapshot.html | 8 +- .../roosterjs_editor_types.snapshots.html | 10 +- ...osterjs_editor_types.stringdefinition.html | 8 +- ...r_types.structurednodefeaturesettings.html | 2 +- ...js_editor_types.stylebasedformatstate.html | 22 +- ...rjs_editor_types.tablecontentmetadata.html | 10 +- ...rjs_editor_types.tablefeaturesettings.html | 8 +- .../roosterjs_editor_types.tableformat.html | 24 +- ...roosterjs_editor_types.tableselection.html | 4 +- ...erjs_editor_types.tableselectionrange.html | 12 +- .../roosterjs_editor_types.targetwindow.html | 186 +- ...osterjs_editor_types.targetwindowbase.html | 180 +- ...erjs_editor_types.textfeaturesettings.html | 6 +- ...oosterjs_editor_types.undopluginstate.html | 10 +- ...rjs_editor_types.undosnapshotsservice.html | 10 +- .../roosterjs_editor_types.vcell.html | 10 +- ...osterjs_editor_types.zoomchangedevent.html | 8 +- ...rjs_editor_types.zoomchangedeventdata.html | 4 +- .../roosterjs_react.contextmenuitem.html | 16 +- .../roosterjs_react.reacteditorplugin.html | 12 +- .../roosterjs_react.ribbonbutton.html | 18 +- .../roosterjs_react.ribbonbuttondropdown.html | 12 +- .../roosterjs_react.ribbonplugin.html | 20 +- .../roosterjs_react.ribbonprops.html | 6 +- .../roosterjs_react.roosterprops.html | 44 +- .../roosterjs_react.uiutilities.html | 4 +- .../roosterjs_react.updatecontentplugin.html | 12 +- docs/modules/roosterjs.html | 2 +- docs/modules/roosterjs_color_utils.html | 2 +- docs/modules/roosterjs_content_model.html | 2 +- docs/modules/roosterjs_content_model_dom.html | 90 +- .../roosterjs_content_model_editor.html | 114 +- .../roosterjs_content_model_types.html | 146 +- docs/modules/roosterjs_editor_api.html | 84 +- docs/modules/roosterjs_editor_core.html | 4 +- docs/modules/roosterjs_editor_dom.html | 274 +- docs/modules/roosterjs_editor_plugins.html | 14 +- docs/modules/roosterjs_editor_types.html | 118 +- docs/modules/roosterjs_react.html | 140 +- rooster-content-model-min.js | 2 +- rooster-content-model-min.js.map | 2 +- 1133 files changed, 5820 insertions(+), 5816 deletions(-) diff --git a/coverage/index.html b/coverage/index.html index b299ca68dc5..1080c4be72b 100644 --- a/coverage/index.html +++ b/coverage/index.html @@ -30,9 +30,9 @@

All files

- 75.05% + 75.06% Branches - 10094/13449 + 10098/13453
@@ -379,8 +379,8 @@

All files

98.06% 354/361 - 94.72% - 251/265 + 94.8% + 255/269 100% 26/26 97.95% @@ -2075,7 +2075,7 @@

All files

diff --git a/coverage/lcov.info b/coverage/lcov.info index 6489a2a95f4..09c9d430a79 100644 --- a/coverage/lcov.info +++ b/coverage/lcov.info @@ -1672,9 +1672,9 @@ FNDA:36,(anonymous_1) FNDA:521,getFormatParsers FNDA:10941,(anonymous_3) FNDA:64083,(anonymous_4) -FNDA:403,getFormatAppliers -FNDA:8463,(anonymous_6) -FNDA:49569,(anonymous_7) +FNDA:404,getFormatAppliers +FNDA:8484,(anonymous_6) +FNDA:49692,(anonymous_7) DA:1,1 DA:2,1 DA:3,1 @@ -1733,13 +1733,13 @@ DA:228,64083 DA:234,10941 DA:236,10941 DA:243,1 -DA:244,790 -DA:245,805 -DA:247,403 -DA:248,8463 -DA:251,49569 -DA:257,8463 -DA:259,8463 +DA:244,792 +DA:245,807 +DA:247,404 +DA:248,8484 +DA:251,49692 +DA:257,8484 +DA:259,8484 LF:65 LH:65 BRDA:221,0,0,510 @@ -1750,14 +1750,14 @@ BRDA:229,2,0,64054 BRDA:229,2,1,29 BRDA:232,3,0,10941 BRDA:232,3,1,10763 -BRDA:244,4,0,387 +BRDA:244,4,0,388 BRDA:244,4,1,16 -BRDA:245,5,0,402 +BRDA:245,5,0,403 BRDA:245,5,1,1 -BRDA:252,6,0,49515 +BRDA:252,6,0,49638 BRDA:252,6,1,54 -BRDA:255,7,0,8463 -BRDA:255,7,1,8462 +BRDA:255,7,0,8484 +BRDA:255,7,1,8483 BRF:16 BRH:16 end_of_record @@ -1768,12 +1768,12 @@ FN:15,(anonymous_1) FNF:2 FNH:2 FNDA:1801,(anonymous_0) -FNDA:550,(anonymous_1) +FNDA:551,(anonymous_1) DA:7,1 DA:9,1801 DA:11,1801 DA:12,23 -DA:16,550 +DA:16,551 DA:17,3 LF:6 LH:6 @@ -1785,7 +1785,7 @@ BRDA:11,1,1,1778 BRDA:12,2,0,18 BRDA:12,2,1,5 BRDA:16,3,0,3 -BRDA:16,3,1,547 +BRDA:16,3,1,548 BRF:9 BRH:9 end_of_record @@ -1796,19 +1796,19 @@ FN:15,(anonymous_1) FNF:2 FNH:2 FNDA:249,(anonymous_0) -FNDA:224,(anonymous_1) +FNDA:225,(anonymous_1) DA:7,1 DA:9,249 DA:11,249 DA:12,14 -DA:16,224 +DA:16,225 DA:17,11 LF:6 LH:6 BRDA:11,0,0,14 BRDA:11,0,1,235 BRDA:16,1,0,11 -BRDA:16,1,1,213 +BRDA:16,1,1,214 BRF:4 BRH:4 end_of_record @@ -1819,7 +1819,7 @@ FN:23,(anonymous_1) FNF:2 FNH:2 FNDA:284,(anonymous_0) -FNDA:232,(anonymous_1) +FNDA:233,(anonymous_1) DA:1,1 DA:3,1 DA:9,1 @@ -1829,17 +1829,17 @@ DA:17,284 DA:18,21 DA:19,21 DA:20,21 -DA:24,232 -DA:26,232 +DA:24,233 +DA:26,233 DA:27,8 LF:12 LH:12 BRDA:17,0,0,21 BRDA:17,0,1,263 BRDA:24,1,0,1 -BRDA:24,1,1,231 +BRDA:24,1,1,232 BRDA:26,2,0,8 -BRDA:26,2,1,224 +BRDA:26,2,1,225 BRF:6 BRH:6 end_of_record @@ -1850,12 +1850,12 @@ FN:15,(anonymous_1) FNF:2 FNH:2 FNDA:848,(anonymous_0) -FNDA:831,(anonymous_1) +FNDA:832,(anonymous_1) DA:7,1 DA:9,848 DA:11,848 DA:12,13 -DA:16,831 +DA:16,832 DA:17,7 LF:6 LH:6 @@ -1866,7 +1866,7 @@ BRDA:11,1,1,835 BRDA:11,2,0,848 BRDA:11,2,1,13 BRDA:16,3,0,7 -BRDA:16,3,1,824 +BRDA:16,3,1,825 BRF:8 BRH:8 end_of_record @@ -1880,8 +1880,8 @@ FNF:4 FNH:4 FNDA:509,(anonymous_0) FNDA:2036,(anonymous_1) -FNDA:447,(anonymous_2) -FNDA:1788,(anonymous_3) +FNDA:448,(anonymous_2) +FNDA:1792,(anonymous_3) DA:3,1 DA:5,1 DA:15,1 @@ -1893,9 +1893,9 @@ DA:24,222 DA:25,222 DA:29,96 DA:34,96 -DA:40,447 -DA:41,1788 -DA:43,1788 +DA:40,448 +DA:41,1792 +DA:43,1792 DA:44,171 LF:15 LH:15 @@ -1912,7 +1912,7 @@ BRDA:30,3,1,92 BRDA:30,4,0,4 BRDA:30,4,1,0 BRDA:43,5,0,171 -BRDA:43,5,1,1617 +BRDA:43,5,1,1621 BRDA:44,6,0,171 BRDA:44,6,1,29 BRF:16 @@ -1956,7 +1956,7 @@ FN:29,(anonymous_1) FNF:2 FNH:2 FNDA:772,(anonymous_0) -FNDA:591,(anonymous_1) +FNDA:592,(anonymous_1) DA:1,1 DA:3,1 DA:9,1 @@ -1966,8 +1966,8 @@ DA:15,772 DA:22,0 DA:25,772 DA:26,18 -DA:30,591 -DA:32,591 +DA:30,592 +DA:32,592 DA:33,20 DA:34,20 DA:36,20 @@ -1992,9 +1992,9 @@ BRDA:17,4,1,209 BRDA:25,5,0,18 BRDA:25,5,1,754 BRDA:30,6,0,3 -BRDA:30,6,1,588 +BRDA:30,6,1,589 BRDA:32,7,0,20 -BRDA:32,7,1,571 +BRDA:32,7,1,572 BRDA:34,8,0,10 BRDA:34,8,1,10 BRDA:34,9,0,20 @@ -2015,13 +2015,13 @@ FN:15,(anonymous_1) FNF:2 FNH:2 FNDA:482,(anonymous_0) -FNDA:324,(anonymous_1) +FNDA:325,(anonymous_1) DA:7,1 DA:9,482 DA:11,482 DA:12,14 -DA:16,324 -DA:17,324 +DA:16,325 +DA:17,325 DA:18,8 LF:7 LH:7 @@ -2030,7 +2030,7 @@ BRDA:9,0,1,475 BRDA:11,1,0,14 BRDA:11,1,1,468 BRDA:17,2,0,8 -BRDA:17,2,1,316 +BRDA:17,2,1,317 BRDA:18,3,0,8 BRDA:18,3,1,0 BRF:8 @@ -2043,13 +2043,13 @@ FN:22,(anonymous_1) FNF:2 FNH:2 FNDA:706,(anonymous_0) -FNDA:805,(anonymous_1) +FNDA:807,(anonymous_1) DA:3,1 DA:8,1 DA:11,706 DA:18,706 DA:19,15 -DA:23,805 +DA:23,807 DA:24,13 LF:7 LH:7 @@ -2058,7 +2058,7 @@ BRDA:11,0,1,691 BRDA:18,1,0,15 BRDA:18,1,1,691 BRDA:23,2,0,13 -BRDA:23,2,1,792 +BRDA:23,2,1,794 BRF:6 BRH:6 end_of_record @@ -2069,11 +2069,11 @@ FN:13,(anonymous_1) FNF:2 FNH:2 FNDA:102,(anonymous_0) -FNDA:97,(anonymous_1) +FNDA:98,(anonymous_1) DA:7,1 DA:9,102 DA:10,3 -DA:14,97 +DA:14,98 DA:15,3 LF:5 LH:5 @@ -2084,7 +2084,7 @@ BRDA:9,1,1,102 BRDA:9,2,0,102 BRDA:9,2,1,102 BRDA:14,3,0,3 -BRDA:14,3,1,94 +BRDA:14,3,1,95 BRF:8 BRH:7 end_of_record @@ -2098,17 +2098,17 @@ FNF:4 FNH:4 FNDA:302,(anonymous_0) FNDA:1510,(anonymous_1) -FNDA:269,(anonymous_2) -FNDA:1345,(anonymous_3) +FNDA:270,(anonymous_2) +FNDA:1350,(anonymous_3) DA:7,1 DA:18,1 DA:20,302 DA:21,1510 DA:23,1510 DA:24,28 -DA:29,269 -DA:30,1345 -DA:32,1345 +DA:29,270 +DA:30,1350 +DA:32,1350 DA:33,16 LF:10 LH:10 @@ -2117,7 +2117,7 @@ BRDA:23,0,1,1482 BRDA:24,1,0,0 BRDA:24,1,1,28 BRDA:32,2,0,16 -BRDA:32,2,1,1329 +BRDA:32,2,1,1334 BRF:6 BRH:5 end_of_record @@ -2157,14 +2157,14 @@ FNF:4 FNH:4 FNDA:227,(anonymous_0) FNDA:13,(anonymous_1) -FNDA:226,(anonymous_2) +FNDA:227,(anonymous_2) FNDA:14,(anonymous_3) DA:3,1 DA:8,1 DA:10,227 DA:12,227 DA:13,13 -DA:18,226 +DA:18,227 DA:19,14 LF:7 LH:7 @@ -2180,18 +2180,18 @@ FN:13,(anonymous_1) FNF:2 FNH:2 FNDA:49,(anonymous_0) -FNDA:44,(anonymous_1) +FNDA:45,(anonymous_1) DA:7,1 DA:9,49 DA:10,4 -DA:14,44 +DA:14,45 DA:15,3 LF:5 LH:5 BRDA:9,0,0,4 BRDA:9,0,1,45 BRDA:14,1,0,3 -BRDA:14,1,1,41 +BRDA:14,1,1,42 BRF:4 BRH:4 end_of_record @@ -2203,7 +2203,7 @@ FN:59,tryParseSize FNF:3 FNH:3 FNDA:303,(anonymous_0) -FNDA:272,(anonymous_1) +FNDA:273,(anonymous_1) FNDA:598,tryParseSize DA:4,1 DA:9,1 @@ -2225,17 +2225,17 @@ DA:30,303 DA:31,1 DA:33,303 DA:34,1 -DA:38,272 +DA:38,273 DA:39,4 -DA:41,272 +DA:41,273 DA:42,3 -DA:44,272 +DA:44,273 DA:45,1 -DA:47,272 +DA:47,273 DA:48,1 -DA:50,272 +DA:50,273 DA:51,1 -DA:53,272 +DA:53,273 DA:54,1 DA:60,598 DA:61,598 @@ -2259,17 +2259,17 @@ BRDA:30,6,1,302 BRDA:33,7,0,1 BRDA:33,7,1,302 BRDA:38,8,0,4 -BRDA:38,8,1,268 +BRDA:38,8,1,269 BRDA:41,9,0,3 -BRDA:41,9,1,269 +BRDA:41,9,1,270 BRDA:44,10,0,1 -BRDA:44,10,1,271 +BRDA:44,10,1,272 BRDA:47,11,0,1 -BRDA:47,11,1,271 +BRDA:47,11,1,272 BRDA:50,12,0,1 -BRDA:50,12,1,271 +BRDA:50,12,1,272 BRDA:53,13,0,1 -BRDA:53,13,1,271 +BRDA:53,13,1,272 BRDA:61,14,0,598 BRDA:61,14,1,594 BRDA:64,15,0,2 @@ -3121,12 +3121,12 @@ FN:14,(anonymous_1) FNF:2 FNH:2 FNDA:41,(anonymous_0) -FNDA:35,(anonymous_1) +FNDA:36,(anonymous_1) DA:7,1 DA:9,41 DA:10,41 DA:11,2 -DA:15,35 +DA:15,36 DA:16,1 LF:6 LH:6 @@ -3135,7 +3135,7 @@ BRDA:10,0,1,39 BRDA:10,1,0,41 BRDA:10,1,1,3 BRDA:15,2,0,1 -BRDA:15,2,1,34 +BRDA:15,2,1,35 BRF:6 BRH:6 end_of_record @@ -3146,12 +3146,12 @@ FN:15,(anonymous_1) FNF:2 FNH:2 FNDA:94,(anonymous_0) -FNDA:35,(anonymous_1) +FNDA:36,(anonymous_1) DA:4,1 DA:9,1 DA:11,94 DA:12,2 -DA:16,35 +DA:16,36 DA:17,2 DA:18,2 DA:19,2 @@ -3160,7 +3160,7 @@ LH:8 BRDA:11,0,0,2 BRDA:11,0,1,92 BRDA:16,1,0,2 -BRDA:16,1,1,33 +BRDA:16,1,1,34 BRF:4 BRH:4 end_of_record @@ -3474,8 +3474,8 @@ FN:90,isBlock FN:96,isBlockGroup FNF:8 FNH:8 -FNDA:843,isBlockEmpty -FNDA:60,(anonymous_1) +FNDA:844,isBlockEmpty +FNDA:61,(anonymous_1) FNDA:173,isBlockGroupEmpty FNDA:417,isSegmentEmpty FNDA:23,isEmpty @@ -3483,9 +3483,9 @@ FNDA:6,isSegment FNDA:13,isBlock FNDA:23,isBlockGroup DA:10,1 -DA:11,843 +DA:11,844 DA:13,635 -DA:16,60 +DA:16,61 DA:19,147 DA:22,1 DA:25,1 @@ -3514,7 +3514,7 @@ DA:99,23 LF:29 LH:27 BRDA:12,0,0,635 -BRDA:12,0,1,59 +BRDA:12,0,1,60 BRDA:12,0,2,147 BRDA:12,0,3,1 BRDA:12,0,4,1 @@ -4017,15 +4017,15 @@ SF:packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/crea FN:12,createTable FNF:1 FNH:1 -FNDA:232,createTable +FNDA:233,createTable DA:12,1 -DA:13,232 -DA:15,232 -DA:16,366 -DA:23,232 +DA:13,233 +DA:15,233 +DA:16,367 +DA:23,233 LF:5 LH:5 -BRDA:26,0,0,232 +BRDA:26,0,0,233 BRDA:26,0,1,190 BRF:2 BRH:2 @@ -4035,19 +4035,19 @@ SF:packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/crea FN:10,createTableCell FNF:1 FNH:1 -FNDA:850,createTableCell +FNDA:851,createTableCell DA:10,1 -DA:17,850 -DA:19,850 -DA:20,850 +DA:17,851 +DA:19,851 +DA:20,851 LF:4 LH:4 BRDA:17,0,0,138 -BRDA:17,0,1,712 +BRDA:17,0,1,713 BRDA:19,1,0,138 -BRDA:19,1,1,712 +BRDA:19,1,1,713 BRDA:23,2,0,475 -BRDA:23,2,1,375 +BRDA:23,2,1,376 BRF:6 BRH:6 end_of_record @@ -4156,23 +4156,23 @@ SF:packages-content-model/roosterjs-content-model-dom/lib/modelToDom/context/cre FN:14,createModelToDomContext FNF:1 FNH:1 -FNDA:401,createModelToDomContext +FNDA:402,createModelToDomContext DA:1,1 DA:2,1 DA:4,1 DA:14,1 -DA:18,401 -DA:20,401 +DA:18,402 +DA:20,402 LF:6 LH:6 -BRDA:18,0,0,401 -BRDA:18,0,1,248 -BRDA:21,1,0,401 -BRDA:21,1,1,306 -BRDA:41,2,0,401 -BRDA:41,2,1,326 -BRDA:45,3,0,401 -BRDA:45,3,1,400 +BRDA:18,0,0,402 +BRDA:18,0,1,249 +BRDA:21,1,0,402 +BRDA:21,1,1,307 +BRDA:41,2,0,402 +BRDA:41,2,1,327 +BRDA:45,3,0,402 +BRDA:45,3,1,401 BRF:8 BRH:8 end_of_record @@ -4246,22 +4246,22 @@ FN:10,(anonymous_0) FN:21,(anonymous_1) FNF:2 FNH:2 -FNDA:306,(anonymous_0) +FNDA:307,(anonymous_0) FNDA:389,(anonymous_1) DA:10,1 -DA:16,306 -DA:17,306 -DA:18,306 -DA:20,306 -DA:21,306 +DA:16,307 +DA:17,307 +DA:18,307 +DA:20,307 +DA:21,307 DA:26,389 DA:31,310 DA:34,389 -DA:38,306 +DA:38,307 DA:39,3 DA:41,3 DA:42,3 -DA:45,306 +DA:45,307 LF:14 LH:14 BRDA:26,0,0,310 @@ -4837,144 +4837,148 @@ SF:packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/ha FN:15,(anonymous_0) FNF:1 FNH:1 -FNDA:37,(anonymous_0) +FNDA:38,(anonymous_0) DA:1,1 DA:2,1 DA:3,1 DA:4,1 DA:5,1 DA:15,1 -DA:22,37 +DA:22,38 DA:24,2 -DA:27,35 -DA:29,35 +DA:27,36 +DA:29,36 DA:30,2 DA:32,2 -DA:34,33 -DA:36,33 -DA:37,33 -DA:39,33 -DA:40,33 -DA:41,33 -DA:42,33 -DA:45,35 -DA:47,35 -DA:48,35 -DA:50,35 -DA:51,47 -DA:53,47 +DA:34,34 +DA:36,34 +DA:37,34 +DA:39,34 +DA:40,34 +DA:41,34 +DA:42,34 +DA:45,36 +DA:47,36 +DA:48,36 +DA:50,36 +DA:51,48 +DA:53,48 DA:55,1 -DA:58,46 -DA:59,46 -DA:60,46 -DA:62,46 -DA:63,45 -DA:64,45 -DA:67,46 -DA:69,46 -DA:70,67 -DA:72,67 +DA:58,47 +DA:59,47 +DA:60,47 +DA:62,47 +DA:63,46 +DA:64,46 +DA:67,47 +DA:69,47 +DA:70,68 +DA:72,68 DA:73,0 DA:79,0 DA:80,0 DA:82,0 DA:83,0 -DA:87,67 -DA:88,58 -DA:90,58 -DA:92,58 -DA:93,58 -DA:94,58 -DA:95,58 -DA:97,58 +DA:87,68 +DA:88,59 +DA:90,59 +DA:92,59 +DA:93,59 +DA:94,59 +DA:95,59 +DA:97,59 DA:98,4 -DA:100,58 +DA:100,59 DA:101,4 -DA:104,58 +DA:104,59 DA:105,4 -DA:108,58 +DA:108,59 DA:109,4 -DA:112,58 +DA:112,59 DA:113,55 DA:114,4 DA:117,55 DA:118,4 -DA:122,58 +DA:122,59 DA:123,54 DA:124,54 DA:125,54 DA:126,54 DA:127,54 -DA:130,58 -DA:132,58 -DA:137,35 +DA:130,59 +DA:132,59 +DA:137,36 LF:70 LH:65 BRDA:22,0,0,2 -BRDA:22,0,1,35 +BRDA:22,0,1,36 BRDA:29,1,0,2 -BRDA:29,1,1,33 -BRDA:45,2,0,34 +BRDA:29,1,1,34 +BRDA:45,2,0,35 BRDA:45,2,1,1 -BRDA:45,3,0,35 -BRDA:45,3,1,35 +BRDA:45,3,0,36 +BRDA:45,3,1,36 BRDA:53,4,0,1 -BRDA:53,4,1,46 -BRDA:58,5,0,46 -BRDA:58,5,1,45 -BRDA:62,6,0,45 +BRDA:53,4,1,47 +BRDA:58,5,0,47 +BRDA:58,5,1,46 +BRDA:62,6,0,46 BRDA:62,6,1,1 -BRDA:67,7,0,44 +BRDA:67,7,0,45 BRDA:67,7,1,2 -BRDA:67,8,0,46 -BRDA:67,8,1,46 +BRDA:67,8,0,47 +BRDA:67,8,1,47 BRDA:72,9,0,0 -BRDA:72,9,1,67 +BRDA:72,9,1,68 BRDA:73,10,0,0 BRDA:73,10,1,0 BRDA:79,11,0,0 BRDA:79,11,1,0 -BRDA:87,12,0,58 +BRDA:87,12,0,59 BRDA:87,12,1,9 -BRDA:87,13,0,67 -BRDA:87,13,1,62 -BRDA:88,14,0,58 +BRDA:87,13,0,68 +BRDA:87,13,1,63 +BRDA:88,14,0,59 BRDA:88,14,1,54 BRDA:88,15,0,2 BRDA:88,15,1,52 -BRDA:97,16,0,46 +BRDA:97,16,0,47 BRDA:97,16,1,16 -BRDA:97,17,0,62 -BRDA:97,17,1,62 -BRDA:97,18,0,45 +BRDA:97,17,0,63 +BRDA:97,17,1,63 +BRDA:97,18,0,46 BRDA:97,18,1,17 -BRDA:97,19,0,62 -BRDA:97,19,1,62 -BRDA:100,20,0,44 +BRDA:97,19,0,63 +BRDA:97,19,1,63 +BRDA:100,20,0,45 BRDA:100,20,1,18 -BRDA:100,21,0,62 -BRDA:100,21,1,62 +BRDA:100,21,0,63 +BRDA:100,21,1,63 BRDA:104,22,0,4 -BRDA:104,22,1,54 +BRDA:104,22,1,55 BRDA:108,23,0,4 -BRDA:108,23,1,54 +BRDA:108,23,1,55 BRDA:112,24,0,55 -BRDA:112,24,1,3 -BRDA:112,25,0,58 -BRDA:112,25,1,4 +BRDA:112,24,1,4 +BRDA:112,25,0,59 +BRDA:112,25,1,5 BRDA:112,25,2,2 BRDA:113,26,0,4 BRDA:113,26,1,51 -BRDA:117,27,0,4 -BRDA:117,27,1,51 -BRDA:122,28,0,54 -BRDA:122,28,1,4 -BRDA:132,29,0,56 -BRDA:132,29,1,2 -BRDA:132,30,0,58 -BRDA:132,30,1,58 -BRF:63 -BRH:58 +BRDA:113,27,0,55 +BRDA:113,27,1,4 +BRDA:117,28,0,4 +BRDA:117,28,1,51 +BRDA:117,29,0,55 +BRDA:117,29,1,4 +BRDA:122,30,0,54 +BRDA:122,30,1,5 +BRDA:132,31,0,57 +BRDA:132,31,1,2 +BRDA:132,32,0,59 +BRDA:132,32,1,59 +BRF:67 +BRH:62 end_of_record TN: SF:packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleText.ts @@ -5099,17 +5103,17 @@ FN:15,applyFormat FN:21,(anonymous_1) FNF:2 FNH:2 -FNDA:1961,applyFormat -FNDA:10812,(anonymous_1) +FNDA:1966,applyFormat +FNDA:10828,(anonymous_1) DA:15,1 -DA:21,1961 -DA:22,10812 +DA:21,1966 +DA:22,10828 LF:3 LH:3 BRDA:22,0,0,40 -BRDA:22,0,1,10772 -BRDA:22,1,0,10812 -BRDA:22,1,1,10772 +BRDA:22,0,1,10788 +BRDA:22,1,0,10828 +BRDA:22,1,1,10788 BRF:4 BRH:4 end_of_record @@ -15289,11 +15293,11 @@ FN:4,(anonymous_2) FN:5,(anonymous_3) FNF:4 FNH:4 -FNDA:4731,(anonymous_0) +FNDA:4732,(anonymous_0) FNDA:1,(anonymous_1) FNDA:125,(anonymous_2) FNDA:25,(anonymous_3) -DA:2,4732 +DA:2,4733 DA:3,2 DA:4,126 DA:5,26 @@ -15309,67 +15313,67 @@ FN:87,addUndoSnapshotInternal FN:110,createContentMetadata FNF:3 FNH:3 -FNDA:5125,(anonymous_0) -FNDA:5236,addUndoSnapshotInternal -FNDA:5234,createContentMetadata +FNDA:5126,(anonymous_0) +FNDA:5237,addUndoSnapshotInternal +FNDA:5235,createContentMetadata DA:2,1 DA:27,1 -DA:34,5125 -DA:35,5125 -DA:38,5125 -DA:39,5033 -DA:43,5033 -DA:44,5032 -DA:48,5125 -DA:49,5125 +DA:34,5126 +DA:35,5126 +DA:38,5126 +DA:39,5034 +DA:43,5034 +DA:44,5033 +DA:48,5126 +DA:49,5126 DA:50,291 DA:51,291 DA:56,290 DA:57,204 DA:58,204 -DA:62,5125 -DA:63,5033 -DA:67,5124 +DA:62,5126 +DA:63,5034 +DA:67,5125 DA:68,260 DA:74,260 -DA:77,5124 +DA:77,5125 DA:78,18 DA:80,18 DA:81,18 DA:82,18 -DA:92,5236 -DA:93,5234 -DA:94,5234 -DA:95,5234 -DA:97,5234 -DA:106,5234 -DA:115,5234 +DA:92,5237 +DA:93,5235 +DA:94,5235 +DA:95,5235 +DA:97,5235 +DA:106,5235 +DA:115,5235 DA:117,22 DA:124,14 -DA:130,5198 +DA:130,5199 LF:35 LH:35 -BRDA:38,0,0,5033 +BRDA:38,0,0,5034 BRDA:38,0,1,92 -BRDA:43,1,0,5032 +BRDA:43,1,0,5033 BRDA:43,1,1,1 -BRDA:43,2,0,5033 -BRDA:43,2,1,4814 +BRDA:43,2,0,5034 +BRDA:43,2,1,4815 BRDA:43,2,2,1 -BRDA:43,3,0,4809 +BRDA:43,3,0,4810 BRDA:43,3,1,5 -BRDA:43,4,0,4814 -BRDA:43,4,1,4814 -BRDA:44,5,0,5032 +BRDA:43,4,0,4815 +BRDA:43,4,1,4815 +BRDA:44,5,0,5033 BRDA:44,5,1,0 -BRDA:44,6,0,5032 -BRDA:44,6,1,5032 -BRDA:44,7,0,4901 +BRDA:44,6,0,5033 +BRDA:44,6,1,5033 +BRDA:44,7,0,4902 BRDA:44,7,1,131 -BRDA:44,8,0,5032 -BRDA:44,8,1,5032 +BRDA:44,8,0,5033 +BRDA:44,8,1,5033 BRDA:49,9,0,291 -BRDA:49,9,1,4834 +BRDA:49,9,1,4835 BRDA:52,10,0,291 BRDA:52,10,1,269 BRDA:53,11,0,291 @@ -15384,35 +15388,35 @@ BRDA:57,15,0,72 BRDA:57,15,1,132 BRDA:57,16,0,204 BRDA:57,16,1,204 -BRDA:62,17,0,5033 +BRDA:62,17,0,5034 BRDA:62,17,1,92 BRDA:67,18,0,260 -BRDA:67,18,1,4864 -BRDA:67,19,0,5124 +BRDA:67,18,1,4865 +BRDA:67,19,0,5125 BRDA:67,19,1,290 BRDA:77,20,0,18 -BRDA:77,20,1,5106 +BRDA:77,20,1,5107 BRDA:80,21,0,18 BRDA:80,21,1,0 -BRDA:92,22,0,5234 +BRDA:92,22,0,5235 BRDA:92,22,1,2 -BRDA:95,23,0,5234 +BRDA:95,23,0,5235 BRDA:95,23,1,0 -BRDA:101,24,0,5234 +BRDA:101,24,0,5235 BRDA:101,24,1,0 BRDA:101,25,0,0 -BRDA:101,25,1,5234 -BRDA:101,26,0,5234 -BRDA:101,26,1,5234 +BRDA:101,25,1,5235 +BRDA:101,26,0,5235 +BRDA:101,26,1,5235 BRDA:116,27,0,22 BRDA:116,27,1,14 -BRDA:116,27,2,5198 +BRDA:116,27,2,5199 BRDA:115,28,0,0 -BRDA:115,28,1,5234 -BRDA:115,29,0,5234 -BRDA:115,29,1,5234 -BRDA:135,30,0,5198 -BRDA:135,30,1,4837 +BRDA:115,28,1,5235 +BRDA:115,29,0,5235 +BRDA:115,29,1,5235 +BRDA:135,30,0,5199 +BRDA:135,30,1,4838 BRF:64 BRH:58 end_of_record @@ -15427,48 +15431,48 @@ FN:47,(anonymous_5) FN:50,extractHandler FNF:7 FNH:7 -FNDA:14402,(anonymous_0) -FNDA:71876,(anonymous_1) -FNDA:266,(anonymous_2) -FNDA:71231,(anonymous_3) -FNDA:14269,(anonymous_4) -FNDA:71231,(anonymous_5) -FNDA:71876,extractHandler +FNDA:14405,(anonymous_0) +FNDA:71891,(anonymous_1) +FNDA:301,(anonymous_2) +FNDA:71246,(anonymous_3) +FNDA:14272,(anonymous_4) +FNDA:71246,(anonymous_5) +FNDA:71891,extractHandler DA:1,1 DA:18,1 -DA:22,14402 -DA:23,71876 -DA:24,71876 -DA:25,71876 -DA:26,266 -DA:27,237 -DA:29,266 +DA:22,14405 +DA:23,71891 +DA:24,71891 +DA:25,71891 +DA:26,301 +DA:27,272 +DA:29,301 DA:30,67 -DA:41,71876 -DA:43,71876 -DA:44,71231 -DA:47,71231 -DA:51,71876 -DA:56,71876 -DA:57,4791 -DA:58,67085 -DA:59,47942 -DA:60,19143 -DA:61,19143 -DA:63,71876 +DA:41,71891 +DA:43,71891 +DA:44,71246 +DA:47,71246 +DA:51,71891 +DA:56,71891 +DA:57,4792 +DA:58,67099 +DA:59,47952 +DA:60,19147 +DA:61,19147 +DA:63,71891 LF:22 LH:22 -BRDA:22,0,0,14402 +BRDA:22,0,0,14405 BRDA:22,0,1,1 -BRDA:26,1,0,237 +BRDA:26,1,0,272 BRDA:26,1,1,29 BRDA:29,2,0,67 -BRDA:29,2,1,199 -BRDA:56,3,0,4791 -BRDA:56,3,1,67085 -BRDA:58,4,0,47942 -BRDA:58,4,1,19143 -BRDA:60,5,0,19143 +BRDA:29,2,1,234 +BRDA:56,3,0,4792 +BRDA:56,3,1,67099 +BRDA:58,4,0,47952 +BRDA:58,4,1,19147 +BRDA:60,5,0,19147 BRDA:60,5,1,0 BRF:12 BRH:11 @@ -15540,38 +15544,38 @@ FN:25,(anonymous_0) FN:88,wasNodeJustCreatedByKeyboardEvent FNF:2 FNH:2 -FNDA:4799,(anonymous_0) +FNDA:4800,(anonymous_0) FNDA:3,wasNodeJustCreatedByKeyboardEvent DA:9,1 DA:25,1 -DA:30,4799 -DA:33,4799 +DA:30,4800 +DA:33,4800 DA:34,1 -DA:36,4799 -DA:38,4799 -DA:41,4799 +DA:36,4800 +DA:38,4800 +DA:41,4800 DA:42,12 DA:43,12 DA:44,2 DA:45,2 DA:51,12 DA:53,12 -DA:58,4787 -DA:62,4787 -DA:70,4787 -DA:73,4799 -DA:74,4787 -DA:83,4799 +DA:58,4788 +DA:62,4788 +DA:70,4788 +DA:73,4800 +DA:74,4788 +DA:83,4800 DA:84,5 DA:89,3 LF:22 LH:22 BRDA:33,0,0,1 -BRDA:33,0,1,4798 -BRDA:33,1,0,4799 +BRDA:33,0,1,4799 +BRDA:33,1,0,4800 BRDA:33,1,1,1 BRDA:41,2,0,12 -BRDA:41,2,1,4787 +BRDA:41,2,1,4788 BRDA:43,3,0,2 BRDA:43,3,1,10 BRDA:51,4,0,12 @@ -15581,12 +15585,12 @@ BRDA:53,5,0,4 BRDA:53,5,1,8 BRDA:53,6,0,12 BRDA:53,6,1,12 -BRDA:73,7,0,4787 +BRDA:73,7,0,4788 BRDA:73,7,1,12 -BRDA:73,8,0,4799 -BRDA:73,8,1,4791 +BRDA:73,8,0,4800 +BRDA:73,8,1,4792 BRDA:83,9,0,5 -BRDA:83,9,1,4794 +BRDA:83,9,1,4795 BRDA:90,10,0,3 BRDA:90,10,1,3 BRDA:90,10,2,3 @@ -15895,16 +15899,16 @@ FN:103,checkAllCollapsed FN:104,(anonymous_5) FNF:6 FNH:6 -FNDA:5943,(anonymous_0) +FNDA:5944,(anonymous_0) FNDA:3,(anonymous_1) FNDA:1,(anonymous_2) -FNDA:5827,createNormalSelectionEx -FNDA:5829,checkAllCollapsed +FNDA:5828,createNormalSelectionEx +FNDA:5830,checkAllCollapsed FNDA:856,(anonymous_5) DA:1,1 DA:15,1 -DA:16,5943 -DA:17,5943 +DA:16,5944 +DA:17,5944 DA:19,3 DA:20,3 DA:21,3 @@ -15919,7 +15923,7 @@ DA:42,1 DA:44,1 DA:57,1 DA:64,1 -DA:67,5940 +DA:67,5941 DA:68,963 DA:69,83 DA:72,880 @@ -15929,13 +15933,13 @@ DA:77,850 DA:78,850 DA:79,850 DA:80,850 -DA:85,4977 -DA:96,5827 -DA:104,5829 +DA:85,4978 +DA:96,5828 +DA:104,5830 LF:31 LH:31 BRDA:17,0,0,3 -BRDA:17,0,1,5940 +BRDA:17,0,1,5941 BRDA:24,1,0,1 BRDA:24,1,1,2 BRDA:24,2,0,3 @@ -15957,7 +15961,7 @@ BRDA:57,9,1,1 BRDA:64,10,0,1 BRDA:64,10,1,0 BRDA:67,11,0,963 -BRDA:67,11,1,4977 +BRDA:67,11,1,4978 BRDA:68,12,0,83 BRDA:68,12,1,880 BRDA:72,13,0,30 @@ -15974,15 +15978,15 @@ BRDA:77,17,2,850 BRDA:79,18,0,850 BRDA:79,18,1,0 BRDA:87,19,0,1 -BRDA:87,19,1,4976 -BRDA:86,20,0,4977 +BRDA:87,19,1,4977 +BRDA:86,20,0,4978 BRDA:86,20,1,1 BRDA:86,21,0,0 -BRDA:86,21,1,4977 -BRDA:86,22,0,4977 +BRDA:86,21,1,4978 +BRDA:86,22,0,4978 BRDA:86,22,1,0 BRDA:89,23,0,1 -BRDA:89,23,1,4975 +BRDA:89,23,1,4976 BRDA:104,24,0,0 BRDA:104,24,1,856 BRDA:104,25,0,856 @@ -16065,15 +16069,15 @@ SF:packages/roosterjs-editor-core/lib/coreApi/hasFocus.ts FN:10,(anonymous_0) FNF:1 FNH:1 -FNDA:8437,(anonymous_0) +FNDA:8438,(anonymous_0) DA:1,1 DA:10,1 -DA:11,8437 -DA:12,8437 +DA:11,8438 +DA:12,8438 LF:4 LH:4 -BRDA:13,0,0,8437 -BRDA:13,0,1,8437 +BRDA:13,0,0,8438 +BRDA:13,0,1,8438 BRF:2 BRH:2 end_of_record @@ -16087,8 +16091,8 @@ FN:224,adjustInsertPositionNewLine FNF:5 FNH:5 FNDA:38,getInitialRange -FNDA:4848,(anonymous_1) -FNDA:4847,(anonymous_2) +FNDA:4849,(anonymous_1) +FNDA:4848,(anonymous_2) FNDA:1,adjustInsertPositionRegionRoot FNDA:5,adjustInsertPositionNewLine DA:13,1 @@ -16101,20 +16105,20 @@ DA:42,24 DA:43,23 DA:46,38 DA:55,1 -DA:60,4848 -DA:67,4848 -DA:69,4848 +DA:60,4849 +DA:67,4849 +DA:69,4849 DA:70,37 -DA:73,4848 +DA:73,4849 DA:74,1 DA:75,1 -DA:78,4847 -DA:83,4847 +DA:78,4848 +DA:83,4848 DA:84,0 -DA:86,4847 -DA:89,4806 -DA:90,4806 -DA:92,4806 +DA:86,4848 +DA:89,4807 +DA:90,4807 +DA:92,4807 DA:93,18 DA:94,18 DA:102,5 @@ -16122,12 +16126,12 @@ DA:105,0 DA:106,0 DA:111,5 DA:119,13 -DA:126,4788 -DA:131,4806 +DA:126,4789 +DA:131,4807 DA:132,1 DA:133,1 DA:134,1 -DA:138,4806 +DA:138,4807 DA:142,3 DA:145,3 DA:146,0 @@ -16152,7 +16156,7 @@ DA:182,27 DA:187,37 DA:188,37 DA:191,37 -DA:197,4847 +DA:197,4848 DA:201,1 DA:202,1 DA:204,1 @@ -16178,25 +16182,25 @@ BRDA:39,0,0,14 BRDA:39,0,1,24 BRDA:42,1,0,23 BRDA:42,1,1,1 -BRDA:60,2,0,4848 +BRDA:60,2,0,4849 BRDA:60,2,1,8 BRDA:69,3,0,37 -BRDA:69,3,1,4811 +BRDA:69,3,1,4812 BRDA:73,4,0,1 -BRDA:73,4,1,4847 +BRDA:73,4,1,4848 BRDA:74,5,0,0 BRDA:74,5,1,1 BRDA:74,6,0,1 BRDA:74,6,1,1 BRDA:83,7,0,0 -BRDA:83,7,1,4847 +BRDA:83,7,1,4848 BRDA:87,8,0,15 -BRDA:87,8,1,4806 +BRDA:87,8,1,4807 BRDA:87,8,2,3 BRDA:87,8,3,14 BRDA:87,8,4,38 BRDA:92,9,0,18 -BRDA:92,9,1,4788 +BRDA:92,9,1,4789 BRDA:93,10,0,14 BRDA:93,10,1,4 BRDA:94,11,0,5 @@ -16221,9 +16225,9 @@ BRDA:113,19,1,1 BRDA:121,20,0,10 BRDA:121,20,1,3 BRDA:131,21,0,1 -BRDA:131,21,1,4805 -BRDA:131,22,0,4806 -BRDA:131,22,1,4806 +BRDA:131,21,1,4806 +BRDA:131,22,0,4807 +BRDA:131,22,1,4807 BRDA:132,23,0,0 BRDA:132,23,1,1 BRDA:133,24,0,1 @@ -16338,23 +16342,23 @@ FN:138,isSelectionPath FN:144,isNodePosition FNF:5 FNH:5 -FNDA:5382,(anonymous_0) -FNDA:5382,isSelectionRangeEx +FNDA:5383,(anonymous_0) +FNDA:5383,isSelectionRangeEx FNDA:72,isTableSelectionOrNull FNDA:277,isSelectionPath FNDA:277,isNodePosition DA:1,1 DA:23,1 -DA:24,5382 -DA:26,5382 +DA:24,5383 +DA:26,5383 DA:27,4 -DA:28,5378 +DA:28,5379 DA:29,71 -DA:36,5307 +DA:36,5308 DA:37,55 -DA:44,5252 -DA:59,5252 -DA:68,5382 +DA:44,5253 +DA:59,5253 +DA:68,5383 DA:69,542 DA:71,74 DA:72,73 @@ -16373,11 +16377,11 @@ DA:93,411 DA:95,2 DA:97,413 DA:100,542 -DA:109,4840 -DA:110,4840 -DA:113,5382 -DA:117,5382 -DA:118,5382 +DA:109,4841 +DA:110,4841 +DA:113,5383 +DA:117,5383 +DA:118,5383 DA:127,72 DA:129,72 DA:139,277 @@ -16387,20 +16391,20 @@ DA:147,277 LF:41 LH:41 BRDA:26,0,0,4 -BRDA:26,0,1,5378 +BRDA:26,0,1,5379 BRDA:28,1,0,71 -BRDA:28,1,1,5307 -BRDA:28,2,0,5378 +BRDA:28,1,1,5308 +BRDA:28,2,0,5379 BRDA:28,2,1,72 BRDA:34,3,0,67 BRDA:34,3,1,4 BRDA:34,4,0,71 BRDA:34,4,1,67 BRDA:36,5,0,55 -BRDA:36,5,1,5252 -BRDA:36,6,0,5307 +BRDA:36,5,1,5253 +BRDA:36,6,0,5308 BRDA:36,6,1,56 -BRDA:45,7,0,4838 +BRDA:45,7,0,4839 BRDA:45,7,1,414 BRDA:47,8,0,137 BRDA:47,8,1,277 @@ -16411,9 +16415,9 @@ BRDA:51,10,1,2 BRDA:50,11,0,277 BRDA:50,11,1,192 BRDA:60,12,0,412 -BRDA:60,12,1,4840 +BRDA:60,12,1,4841 BRDA:68,13,0,542 -BRDA:68,13,1,4840 +BRDA:68,13,1,4841 BRDA:70,14,0,74 BRDA:70,14,1,55 BRDA:70,14,2,413 @@ -16423,7 +16427,7 @@ BRDA:82,16,0,51 BRDA:82,16,1,4 BRDA:92,17,0,411 BRDA:92,17,1,2 -BRDA:119,18,0,5382 +BRDA:119,18,0,5383 BRDA:119,18,1,544 BRDA:119,18,2,544 BRDA:119,18,3,4 @@ -16451,10 +16455,10 @@ FN:60,(anonymous_2) FN:67,(anonymous_3) FNF:4 FNH:4 -FNDA:5477,(anonymous_0) +FNDA:5478,(anonymous_0) FNDA:56,(anonymous_1) FNDA:56,(anonymous_2) -FNDA:5477,(anonymous_3) +FNDA:5478,(anonymous_3) DA:1,1 DA:2,1 DA:17,1 @@ -16462,16 +16466,16 @@ DA:18,1 DA:19,1 DA:20,1 DA:28,1 -DA:29,5477 -DA:31,5477 -DA:33,5477 +DA:29,5478 +DA:31,5478 +DA:33,5478 DA:34,56 DA:36,56 DA:37,56 DA:39,56 DA:41,56 DA:43,56 -DA:51,5477 +DA:51,5478 DA:54,1 DA:55,56 DA:56,56 @@ -16481,12 +16485,12 @@ DA:61,56 DA:62,56 DA:64,56 DA:67,1 -DA:68,5477 -DA:69,5477 +DA:68,5478 +DA:69,5478 LF:28 LH:28 BRDA:33,0,0,56 -BRDA:33,0,1,5421 +BRDA:33,0,1,5422 BRDA:62,1,0,56 BRDA:62,1,1,56 BRF:4 @@ -16570,7 +16574,7 @@ FN:248,isValidCoordinate FN:252,isMergedCell FNF:17 FNH:17 -FNDA:5490,(anonymous_0) +FNDA:5491,(anonymous_0) FNDA:138,(anonymous_1) FNDA:80,buildCss FNDA:24,handleAllTableSelected @@ -16580,10 +16584,10 @@ FNDA:59,(anonymous_6) FNDA:208,(anonymous_7) FNDA:228,(anonymous_8) FNDA:80,select -FNDA:5490,(anonymous_10) +FNDA:5491,(anonymous_10) FNDA:264,generateCssFromCell FNDA:264,removeImportant -FNDA:5490,areValidCoordinates +FNDA:5491,areValidCoordinates FNDA:167,(anonymous_14) FNDA:331,isValidCoordinate FNDA:80,isMergedCell @@ -16594,8 +16598,8 @@ DA:23,1 DA:24,1 DA:26,1 DA:37,1 -DA:42,5490 -DA:44,5490 +DA:42,5491 +DA:44,5491 DA:45,80 DA:46,80 DA:48,80 @@ -16605,7 +16609,7 @@ DA:54,80 DA:55,80 DA:62,80 DA:66,138 -DA:72,5410 +DA:72,5411 DA:80,80 DA:81,80 DA:83,80 @@ -16663,26 +16667,26 @@ DA:196,80 DA:197,80 DA:198,80 DA:201,1 -DA:202,5490 -DA:203,5490 +DA:202,5491 +DA:203,5491 DA:214,264 DA:230,264 DA:231,264 -DA:236,5490 +DA:236,5491 DA:237,87 DA:238,87 DA:239,85 DA:240,167 DA:241,85 -DA:245,5405 +DA:245,5406 DA:249,331 DA:253,80 DA:254,80 LF:91 LH:91 BRDA:44,0,0,80 -BRDA:44,0,1,5410 -BRDA:44,1,0,5490 +BRDA:44,0,1,5411 +BRDA:44,1,0,5491 BRDA:44,1,1,80 BRDA:49,2,0,80 BRDA:49,2,1,0 @@ -16729,7 +16733,7 @@ BRDA:181,21,1,114 BRDA:230,22,0,264 BRDA:230,22,1,0 BRDA:236,23,0,87 -BRDA:236,23,1,5403 +BRDA:236,23,1,5404 BRDA:237,24,0,87 BRDA:237,24,1,0 BRDA:238,25,0,85 @@ -16758,12 +16762,12 @@ FN:27,(anonymous_0) FN:86,selectContentMetadata FNF:2 FNH:2 -FNDA:5257,(anonymous_0) +FNDA:5258,(anonymous_0) FNDA:462,selectContentMetadata DA:1,1 DA:27,1 -DA:33,5257 -DA:34,5257 +DA:33,5258 +DA:34,5258 DA:35,462 DA:44,462 DA:45,462 @@ -16773,11 +16777,11 @@ DA:53,462 DA:54,462 DA:55,462 DA:56,462 -DA:59,5257 -DA:61,5257 +DA:59,5258 +DA:61,5258 DA:62,5 DA:71,5 -DA:74,5257 +DA:74,5258 DA:75,455 DA:87,462 DA:88,96 @@ -16800,7 +16804,7 @@ DA:119,0 LF:37 LH:29 BRDA:34,0,0,462 -BRDA:34,0,1,4795 +BRDA:34,0,1,4796 BRDA:45,1,0,462 BRDA:45,1,1,17 BRDA:47,2,0,462 @@ -16814,10 +16818,10 @@ BRDA:47,5,1,462 BRDA:54,6,0,462 BRDA:54,6,1,459 BRDA:61,7,0,5 -BRDA:61,7,1,5252 -BRDA:61,8,0,5257 -BRDA:61,8,1,5161 -BRDA:61,8,2,5255 +BRDA:61,7,1,5253 +BRDA:61,8,0,5258 +BRDA:61,8,1,5162 +BRDA:61,8,2,5256 BRDA:61,8,3,96 BRDA:67,9,0,5 BRDA:67,9,1,0 @@ -16826,8 +16830,8 @@ BRDA:69,10,1,3 BRDA:69,11,0,5 BRDA:69,11,1,5 BRDA:74,12,0,455 -BRDA:74,12,1,4802 -BRDA:74,13,0,5257 +BRDA:74,12,1,4803 +BRDA:74,13,0,5258 BRDA:74,13,1,467 BRDA:87,14,0,96 BRDA:87,14,1,366 @@ -16945,21 +16949,21 @@ FN:44,iterateElements FN:65,isHTMLElement FNF:5 FNH:4 -FNDA:5051,(anonymous_0) +FNDA:5052,(anonymous_0) FNDA:0,(anonymous_1) FNDA:833,(anonymous_2) FNDA:1443,iterateElements FNDA:1248,isHTMLElement DA:15,1 -DA:22,9906 -DA:27,10102 -DA:28,5051 -DA:29,5051 +DA:22,9908 +DA:27,10104 +DA:28,5052 +DA:29,5052 DA:30,201 DA:32,0 DA:35,833 DA:38,201 -DA:41,5051 +DA:41,5052 DA:49,1443 DA:50,6 DA:53,1443 @@ -16970,19 +16974,19 @@ DA:66,1248 DA:67,1248 LF:18 LH:17 -BRDA:22,0,0,4855 +BRDA:22,0,0,4856 BRDA:22,0,1,196 BRDA:29,1,0,201 -BRDA:29,1,1,4850 -BRDA:29,2,0,5051 -BRDA:29,2,1,5049 -BRDA:29,2,2,4848 +BRDA:29,1,1,4851 +BRDA:29,2,0,5052 +BRDA:29,2,1,5050 +BRDA:29,2,2,4849 BRDA:31,3,0,1 BRDA:31,3,1,200 BRDA:41,4,0,202 -BRDA:41,4,1,4849 -BRDA:41,5,0,5051 -BRDA:41,5,1,4849 +BRDA:41,4,1,4850 +BRDA:41,5,0,5052 +BRDA:41,5,1,4850 BRDA:49,6,0,6 BRDA:49,6,1,1437 BRDA:49,7,0,1443 @@ -17002,31 +17006,31 @@ FN:34,(anonymous_2) FN:42,handledExclusively FNF:4 FNH:4 -FNDA:11604,(anonymous_0) +FNDA:11606,(anonymous_0) FNDA:6635,(anonymous_1) -FNDA:127326,(anonymous_2) +FNDA:127348,(anonymous_2) FNDA:6635,handledExclusively DA:10,1 DA:24,1 -DA:29,11604 +DA:29,11606 DA:32,6635 -DA:34,11602 -DA:35,127326 -DA:36,104302 +DA:34,11604 +DA:35,127348 +DA:36,104320 DA:43,6635 DA:44,1 DA:45,1 DA:48,6634 LF:11 LH:11 -BRDA:29,0,0,11602 +BRDA:29,0,0,11604 BRDA:29,0,1,2 -BRDA:30,1,0,11604 +BRDA:30,1,0,11606 BRDA:30,1,1,2 -BRDA:30,1,2,11603 +BRDA:30,1,2,11605 BRDA:30,1,3,633 -BRDA:35,2,0,104302 -BRDA:35,2,1,23024 +BRDA:35,2,0,104320 +BRDA:35,2,1,23028 BRDA:43,3,0,1 BRDA:43,3,1,6634 BRDA:43,4,0,6635 @@ -17103,18 +17107,18 @@ FN:290,(anonymous_25) FNF:26 FNH:18 FNDA:1,(anonymous_0) -FNDA:4986,CopyPastePlugin +FNDA:4987,CopyPastePlugin FNDA:2,(anonymous_2) FNDA:2,(anonymous_3) FNDA:0,(anonymous_4) FNDA:0,(anonymous_5) FNDA:2,(anonymous_6) -FNDA:4793,(anonymous_7) +FNDA:4794,(anonymous_7) FNDA:2,(anonymous_8) FNDA:2,(anonymous_9) FNDA:2,(anonymous_10) -FNDA:4751,(anonymous_11) -FNDA:4976,(anonymous_12) +FNDA:4752,(anonymous_11) +FNDA:4977,(anonymous_12) FNDA:4,(anonymous_13) FNDA:3,(anonymous_14) FNDA:2,(anonymous_15) @@ -17132,25 +17136,25 @@ DA:1,1 DA:2,1 DA:3,1 DA:33,1 -DA:34,4986 -DA:35,4986 -DA:42,4986 -DA:43,4986 +DA:34,4987 +DA:35,4987 +DA:42,4987 +DA:43,4987 DA:51,1 DA:52,2 -DA:59,4793 -DA:60,4793 -DA:61,4793 +DA:59,4794 +DA:60,4794 +DA:61,4794 DA:62,2 DA:63,2 DA:64,2 DA:71,1 -DA:72,4751 -DA:73,4748 -DA:75,4751 -DA:76,4751 +DA:72,4752 +DA:73,4749 +DA:75,4752 +DA:76,4752 DA:82,1 -DA:83,4976 +DA:83,4977 DA:86,4 DA:87,4 DA:88,4 @@ -17182,7 +17186,7 @@ DA:148,2 DA:149,2 DA:150,2 DA:151,2 -DA:160,4986 +DA:160,4987 DA:161,2 DA:162,2 DA:163,2 @@ -17269,9 +17273,9 @@ BRDA:183,6,0,0 BRDA:183,6,1,2 BRDA:183,7,0,2 BRDA:183,7,1,0 -BRDA:44,8,0,4986 -BRDA:44,8,1,4986 -BRDA:72,9,0,4748 +BRDA:44,8,0,4987 +BRDA:44,8,1,4987 +BRDA:72,9,0,4749 BRDA:72,9,1,3 BRDA:87,10,0,4 BRDA:87,10,1,0 @@ -17383,11 +17387,11 @@ FN:248,isContextMenuProvider FNF:23 FNH:16 FNDA:1,(anonymous_0) -FNDA:4987,DOMEventPlugin +FNDA:4988,DOMEventPlugin FNDA:1,(anonymous_2) FNDA:1,(anonymous_3) FNDA:0,(anonymous_4) -FNDA:199,(anonymous_5) +FNDA:234,(anonymous_5) FNDA:0,(anonymous_6) FNDA:0,(anonymous_7) FNDA:0,(anonymous_8) @@ -17397,88 +17401,88 @@ FNDA:39,(anonymous_11) FNDA:0,(anonymous_12) FNDA:0,(anonymous_13) FNDA:2,(anonymous_14) -FNDA:4797,(anonymous_15) +FNDA:4798,(anonymous_15) FNDA:1,(anonymous_16) FNDA:1,(anonymous_17) -FNDA:4755,(anonymous_18) -FNDA:4987,(anonymous_19) -FNDA:19188,(anonymous_20) +FNDA:4756,(anonymous_18) +FNDA:4988,(anonymous_19) +FNDA:19192,(anonymous_20) FNDA:41,(anonymous_21) FNDA:162,isContextMenuProvider DA:1,1 DA:27,1 -DA:28,4987 -DA:29,4987 -DA:37,4987 -DA:38,4987 +DA:28,4988 +DA:29,4988 +DA:37,4988 +DA:38,4988 DA:53,1 DA:54,2 -DA:61,4797 -DA:62,4797 -DA:64,4797 -DA:66,4797 +DA:61,4798 +DA:62,4798 +DA:64,4798 +DA:66,4798 DA:79,1 DA:81,1 DA:82,1 -DA:98,4797 +DA:98,4798 DA:99,0 DA:100,0 DA:101,0 -DA:102,4797 +DA:102,4798 DA:106,0 -DA:108,4797 -DA:111,4797 -DA:114,4797 -DA:115,4797 -DA:116,4797 +DA:108,4798 +DA:111,4798 +DA:114,4798 +DA:115,4798 +DA:116,4798 DA:122,1 -DA:123,4755 -DA:124,4755 +DA:123,4756 +DA:124,4756 DA:125,0 DA:130,0 DA:131,0 -DA:134,4755 -DA:135,4755 -DA:136,4755 -DA:137,4755 -DA:138,4755 -DA:139,4755 +DA:134,4756 +DA:135,4756 +DA:136,4756 +DA:137,4756 +DA:138,4756 +DA:139,4756 DA:145,1 -DA:146,4987 -DA:149,4987 +DA:146,4988 +DA:149,4988 DA:150,1 DA:151,1 -DA:155,4987 -DA:156,199 -DA:157,199 -DA:159,199 +DA:155,4988 +DA:156,234 +DA:157,234 +DA:159,234 DA:160,0 -DA:161,199 +DA:161,234 DA:162,0 -DA:163,199 +DA:163,234 DA:164,1 -DA:167,199 -DA:169,4987 +DA:167,234 +DA:169,4988 DA:170,0 DA:171,0 -DA:175,4987 +DA:175,4988 DA:176,0 DA:181,0 -DA:185,4987 +DA:185,4988 DA:186,0 DA:187,0 -DA:190,4987 +DA:190,4988 DA:191,0 -DA:197,19188 -DA:198,19188 +DA:197,19192 +DA:198,19192 DA:199,41 -DA:203,19188 -DA:211,4987 +DA:203,19192 +DA:211,4988 DA:212,2 DA:215,1 -DA:219,4987 +DA:219,4988 DA:220,39 -DA:223,4987 +DA:223,4988 DA:224,0 DA:225,0 DA:226,0 @@ -17500,26 +17504,26 @@ BRDA:150,0,0,0 BRDA:150,0,1,1 BRDA:150,1,0,1 BRDA:150,1,1,1 -BRDA:156,2,0,199 -BRDA:156,2,1,199 -BRDA:157,3,0,199 -BRDA:157,3,1,199 +BRDA:156,2,0,234 +BRDA:156,2,1,234 +BRDA:157,3,0,234 +BRDA:157,3,1,234 BRDA:159,4,0,0 -BRDA:159,4,1,199 -BRDA:159,5,0,199 +BRDA:159,4,1,234 +BRDA:159,5,0,234 BRDA:159,5,1,0 BRDA:160,6,0,0 BRDA:160,6,1,0 BRDA:160,7,0,0 BRDA:160,7,1,0 BRDA:161,8,0,0 -BRDA:161,8,1,199 +BRDA:161,8,1,234 BRDA:162,9,0,0 BRDA:162,9,1,0 BRDA:162,10,0,0 BRDA:162,10,1,0 BRDA:163,11,0,1 -BRDA:163,11,1,198 +BRDA:163,11,1,233 BRDA:164,12,0,0 BRDA:164,12,1,1 BRDA:164,13,0,1 @@ -17574,67 +17578,67 @@ BRDA:241,36,0,0 BRDA:241,36,1,0 BRDA:241,37,0,0 BRDA:241,37,1,0 -BRDA:40,38,0,4987 -BRDA:40,38,1,4985 -BRDA:44,39,0,4987 +BRDA:40,38,0,4988 +BRDA:40,38,1,4986 +BRDA:44,39,0,4988 BRDA:44,39,1,224 BRDA:44,40,0,224 -BRDA:44,40,1,4763 -BRDA:44,41,0,4987 -BRDA:44,41,1,4987 +BRDA:44,40,1,4764 +BRDA:44,41,0,4988 +BRDA:44,41,1,4988 BRDA:94,42,0,0 -BRDA:94,42,1,4797 +BRDA:94,42,1,4798 BRDA:98,43,0,0 -BRDA:98,43,1,4797 +BRDA:98,43,1,4798 BRDA:101,44,0,0 BRDA:101,44,1,0 BRDA:101,45,0,0 BRDA:101,45,1,0 BRDA:102,46,0,0 -BRDA:102,46,1,4797 +BRDA:102,46,1,4798 BRDA:115,47,0,0 -BRDA:115,47,1,4797 -BRDA:115,48,0,4797 -BRDA:115,48,1,4797 +BRDA:115,47,1,4798 +BRDA:115,48,0,4798 +BRDA:115,48,1,4798 BRDA:116,49,0,0 -BRDA:116,49,1,4797 -BRDA:116,50,0,4797 -BRDA:116,50,1,4797 +BRDA:116,49,1,4798 +BRDA:116,50,0,4798 +BRDA:116,50,1,4798 BRDA:123,51,0,0 -BRDA:123,51,1,4755 -BRDA:123,52,0,4755 -BRDA:123,52,1,4755 +BRDA:123,51,1,4756 +BRDA:123,52,0,4756 +BRDA:123,52,1,4756 BRDA:124,53,0,0 -BRDA:124,53,1,4755 -BRDA:124,54,0,4755 -BRDA:124,54,1,4755 +BRDA:124,53,1,4756 +BRDA:124,54,0,4756 +BRDA:124,54,1,4756 BRDA:131,55,0,0 BRDA:131,55,1,0 BRDA:131,56,0,0 BRDA:131,56,1,0 BRDA:134,57,0,0 -BRDA:134,57,1,4755 -BRDA:134,58,0,4755 -BRDA:134,58,1,4755 +BRDA:134,57,1,4756 +BRDA:134,58,0,4756 +BRDA:134,58,1,4756 BRDA:134,59,0,0 -BRDA:134,59,1,4755 -BRDA:134,60,0,4755 -BRDA:134,60,1,4755 +BRDA:134,59,1,4756 +BRDA:134,60,0,4756 +BRDA:134,60,1,4756 BRDA:135,61,0,0 -BRDA:135,61,1,4755 -BRDA:135,62,0,4755 -BRDA:135,62,1,4755 +BRDA:135,61,1,4756 +BRDA:135,62,0,4756 +BRDA:135,62,1,4756 BRDA:135,63,0,0 -BRDA:135,63,1,4755 -BRDA:135,64,0,4755 -BRDA:135,64,1,4755 +BRDA:135,63,1,4756 +BRDA:135,64,0,4756 +BRDA:135,64,1,4756 BRDA:137,65,0,0 -BRDA:137,65,1,4755 -BRDA:137,66,0,4755 -BRDA:137,66,1,4755 +BRDA:137,65,1,4756 +BRDA:137,66,0,4756 +BRDA:137,66,1,4756 BRDA:200,67,0,39 BRDA:200,67,1,2 -BRDA:204,68,0,19164 +BRDA:204,68,0,19168 BRDA:204,68,1,24 BRDA:249,69,0,0 BRDA:249,69,1,162 @@ -17655,37 +17659,37 @@ FN:63,(anonymous_6) FNF:7 FNH:7 FNDA:1,(anonymous_0) -FNDA:4985,EditPlugin +FNDA:4986,EditPlugin FNDA:2,(anonymous_2) -FNDA:4795,(anonymous_3) -FNDA:4753,(anonymous_4) -FNDA:4985,(anonymous_5) -FNDA:11515,(anonymous_6) +FNDA:4796,(anonymous_3) +FNDA:4754,(anonymous_4) +FNDA:4986,(anonymous_5) +FNDA:11517,(anonymous_6) DA:1,1 DA:16,1 -DA:17,4985 -DA:25,4985 +DA:17,4986 +DA:25,4986 DA:33,1 DA:34,2 DA:41,1 -DA:42,4795 +DA:42,4796 DA:48,1 -DA:49,4753 +DA:49,4754 DA:55,1 -DA:56,4985 +DA:56,4986 DA:63,1 -DA:64,11515 -DA:65,11515 -DA:66,11515 -DA:68,11515 +DA:64,11517 +DA:65,11517 +DA:66,11517 +DA:68,11517 DA:69,22 DA:70,22 DA:72,22 DA:73,22 DA:74,22 -DA:77,11493 +DA:77,11495 DA:78,682 -DA:81,11515 +DA:81,11517 DA:82,9 DA:83,9 DA:88,6 @@ -17694,7 +17698,7 @@ DA:93,1 LF:30 LH:30 BRDA:68,0,0,22 -BRDA:68,0,1,11493 +BRDA:68,0,1,11495 BRDA:70,1,0,0 BRDA:70,1,1,22 BRDA:70,2,0,22 @@ -17706,8 +17710,8 @@ BRDA:75,4,1,16 BRDA:75,4,2,16 BRDA:75,4,3,3 BRDA:77,5,0,682 -BRDA:77,5,1,10811 -BRDA:81,6,0,11518 +BRDA:77,5,1,10813 +BRDA:81,6,0,11520 BRDA:81,6,1,10 BRDA:81,7,0,0 BRDA:81,7,1,10 @@ -17760,19 +17764,19 @@ FN:408,(anonymous_32) FNF:33 FNH:28 FNDA:1,(anonymous_0) -FNDA:4996,EntityPlugin +FNDA:4997,EntityPlugin FNDA:0,(anonymous_2) FNDA:2,(anonymous_3) FNDA:2,(anonymous_4) -FNDA:4806,(anonymous_5) -FNDA:4764,(anonymous_6) -FNDA:4996,(anonymous_7) -FNDA:11524,(anonymous_8) +FNDA:4807,(anonymous_5) +FNDA:4765,(anonymous_6) +FNDA:4997,(anonymous_7) +FNDA:11526,(anonymous_8) FNDA:3,(anonymous_9) FNDA:25,(anonymous_10) FNDA:17,(anonymous_11) FNDA:1,(anonymous_12) -FNDA:5478,(anonymous_13) +FNDA:5479,(anonymous_13) FNDA:12,(anonymous_14) FNDA:19,(anonymous_15) FNDA:13,(anonymous_16) @@ -17784,7 +17788,7 @@ FNDA:8,(anonymous_21) FNDA:6,(anonymous_22) FNDA:29,(anonymous_23) FNDA:13,(anonymous_24) -FNDA:5478,(anonymous_25) +FNDA:5479,(anonymous_25) FNDA:19,(anonymous_26) FNDA:13,(anonymous_27) FNDA:0,(anonymous_28) @@ -17802,24 +17806,24 @@ DA:46,1 DA:47,1 DA:53,1 DA:64,1 -DA:65,4996 -DA:67,4996 -DA:72,4996 -DA:73,4996 +DA:65,4997 +DA:67,4997 +DA:72,4997 +DA:73,4997 DA:81,1 DA:82,2 DA:89,1 -DA:90,4806 -DA:91,4806 +DA:90,4807 +DA:91,4807 DA:97,1 -DA:98,4764 -DA:99,4764 -DA:100,4764 -DA:101,4764 +DA:98,4765 +DA:99,4765 +DA:100,4765 +DA:101,4765 DA:107,1 -DA:108,4996 +DA:108,4997 DA:115,1 -DA:116,11524 +DA:116,11526 DA:118,25 DA:119,25 DA:121,17 @@ -17831,15 +17835,15 @@ DA:129,1 DA:130,1 DA:132,690 DA:133,690 -DA:135,4788 -DA:136,4788 +DA:135,4789 +DA:136,4789 DA:138,184 DA:139,184 DA:141,3 DA:142,3 DA:144,3 DA:145,3 -DA:148,11524 +DA:148,11526 DA:149,101 DA:153,1 DA:154,3 @@ -17847,7 +17851,7 @@ DA:155,3 DA:157,3 DA:158,0 DA:159,0 -DA:163,4996 +DA:163,4997 DA:164,0 DA:165,0 DA:166,0 @@ -17868,9 +17872,9 @@ DA:204,1 DA:205,1 DA:208,1 DA:209,1 -DA:213,5478 -DA:214,5478 -DA:216,5478 +DA:213,5479 +DA:214,5479 +DA:216,5479 DA:217,12 DA:218,12 DA:220,12 @@ -17878,15 +17882,15 @@ DA:221,5 DA:223,5 DA:225,5 DA:230,0 -DA:237,5478 +DA:237,5479 DA:240,19 DA:242,19 -DA:246,5478 +DA:246,5479 DA:247,52 DA:249,13 DA:250,13 DA:251,13 -DA:254,5478 +DA:254,5479 DA:258,0 DA:262,1 DA:263,3 @@ -17897,7 +17901,7 @@ DA:272,184 DA:273,184 DA:274,2 DA:276,2 -DA:280,4996 +DA:280,4997 DA:281,2 DA:282,2 DA:287,2 @@ -17925,7 +17929,7 @@ DA:341,13 DA:342,1 DA:345,13 DA:348,1 -DA:349,5478 +DA:349,5479 DA:353,19 DA:357,1 DA:358,13 @@ -17971,26 +17975,26 @@ BRDA:287,8,1,1 BRDA:287,9,0,2 BRDA:287,9,1,1 BRDA:98,10,0,20 -BRDA:98,10,1,4744 -BRDA:98,11,0,4764 -BRDA:98,11,1,4764 +BRDA:98,10,1,4745 +BRDA:98,11,0,4765 +BRDA:98,11,1,4765 BRDA:117,12,0,25 BRDA:117,12,1,17 BRDA:117,12,2,0 BRDA:117,12,3,1 BRDA:117,12,4,690 -BRDA:117,12,5,4788 +BRDA:117,12,5,4789 BRDA:117,12,6,184 BRDA:117,12,7,3 BRDA:117,12,8,3 BRDA:124,13,0,0 BRDA:124,13,1,0 BRDA:148,14,0,101 -BRDA:148,14,1,11423 +BRDA:148,14,1,11425 BRDA:148,15,0,0 -BRDA:148,15,1,11524 -BRDA:148,16,0,11524 -BRDA:148,16,1,11524 +BRDA:148,15,1,11526 +BRDA:148,16,0,11526 +BRDA:148,16,1,11526 BRDA:155,17,0,3 BRDA:155,17,1,0 BRDA:155,18,0,0 @@ -18040,19 +18044,19 @@ BRDA:226,37,0,5 BRDA:226,37,1,5 BRDA:226,37,2,5 BRDA:238,38,0,0 -BRDA:238,38,1,5478 -BRDA:237,39,0,5478 +BRDA:238,38,1,5479 +BRDA:237,39,0,5479 BRDA:237,39,1,0 -BRDA:237,40,0,4788 +BRDA:237,40,0,4789 BRDA:237,40,1,690 -BRDA:237,41,0,5478 -BRDA:237,41,1,5478 +BRDA:237,41,0,5479 +BRDA:237,41,1,5479 BRDA:242,42,0,19 BRDA:242,42,1,10 BRDA:242,42,2,7 BRDA:254,43,0,0 -BRDA:254,43,1,5478 -BRDA:255,44,0,5478 +BRDA:254,43,1,5479 +BRDA:255,44,0,5479 BRDA:255,44,1,0 BRDA:256,45,0,0 BRDA:256,45,1,0 @@ -18090,14 +18094,14 @@ BRDA:341,61,0,9 BRDA:341,61,1,4 BRDA:341,62,0,13 BRDA:341,62,1,13 -BRDA:353,63,0,5478 +BRDA:353,63,0,5479 BRDA:353,63,1,0 -BRDA:350,64,0,5478 -BRDA:350,64,1,5478 +BRDA:350,64,0,5479 +BRDA:350,64,1,5479 BRDA:350,65,0,0 -BRDA:350,65,1,5478 -BRDA:350,66,0,5478 -BRDA:350,66,1,5478 +BRDA:350,65,1,5479 +BRDA:350,66,0,5479 +BRDA:350,66,1,5479 BRDA:359,67,0,13 BRDA:359,67,1,3 BRDA:359,68,0,0 @@ -18125,27 +18129,27 @@ FN:40,(anonymous_4) FN:45,(anonymous_5) FNF:5 FNH:5 -FNDA:4985,(anonymous_0) +FNDA:4986,(anonymous_0) FNDA:2,(anonymous_2) -FNDA:4794,(anonymous_3) -FNDA:4752,(anonymous_4) -FNDA:11569,(anonymous_5) +FNDA:4795,(anonymous_3) +FNDA:4753,(anonymous_4) +FNDA:11571,(anonymous_5) DA:1,1 DA:12,1 DA:13,1 DA:14,1 DA:19,1 -DA:20,4984 +DA:20,4985 DA:25,1 DA:26,2 DA:33,1 -DA:34,4794 +DA:34,4795 DA:40,1 -DA:41,4752 -DA:42,4752 +DA:41,4753 +DA:42,4753 DA:45,1 -DA:46,11569 -DA:47,11569 +DA:46,11571 +DA:47,11571 DA:50,8 DA:51,8 DA:52,4 @@ -18179,10 +18183,10 @@ DA:105,1 LF:46 LH:46 BRDA:41,0,0,0 -BRDA:41,0,1,4752 -BRDA:41,1,0,4752 -BRDA:41,1,1,4752 -BRDA:46,2,0,11569 +BRDA:41,0,1,4753 +BRDA:41,1,0,4753 +BRDA:41,1,1,4753 +BRDA:46,2,0,11571 BRDA:46,2,1,0 BRDA:48,3,0,4 BRDA:48,3,1,8 @@ -18239,86 +18243,86 @@ FN:218,(anonymous_14) FNF:15 FNH:14 FNDA:1,(anonymous_0) -FNDA:4980,LifecyclePlugin -FNDA:4788,(anonymous_2) -FNDA:4746,(anonymous_3) +FNDA:4981,LifecyclePlugin +FNDA:4789,(anonymous_2) +FNDA:4747,(anonymous_3) FNDA:0,(anonymous_4) -FNDA:4790,(anonymous_5) -FNDA:4739,(anonymous_6) +FNDA:4791,(anonymous_5) +FNDA:4740,(anonymous_6) FNDA:2,(anonymous_7) -FNDA:4790,(anonymous_8) -FNDA:4748,(anonymous_9) +FNDA:4791,(anonymous_8) +FNDA:4749,(anonymous_9) FNDA:2,(anonymous_10) -FNDA:4978,(anonymous_11) -FNDA:11507,(anonymous_12) -FNDA:4790,(anonymous_13) -FNDA:9580,(anonymous_14) +FNDA:4979,(anonymous_11) +FNDA:11509,(anonymous_12) +FNDA:4791,(anonymous_13) +FNDA:9582,(anonymous_14) DA:1,1 DA:13,1 DA:14,1 DA:36,1 DA:51,1 -DA:52,4980 -DA:55,4980 -DA:56,4980 -DA:64,4980 -DA:65,4980 -DA:68,4980 -DA:69,4974 -DA:70,4788 -DA:71,4788 -DA:72,4788 -DA:74,4974 -DA:75,4746 -DA:76,4746 -DA:77,4746 -DA:80,4980 -DA:83,9580 -DA:84,4790 -DA:85,4790 -DA:86,4790 -DA:94,4790 -DA:104,4980 -DA:105,4980 -DA:107,4980 -DA:108,4775 -DA:109,4742 -DA:113,4742 -DA:116,4775 +DA:52,4981 +DA:55,4981 +DA:56,4981 +DA:64,4981 +DA:65,4981 +DA:68,4981 +DA:69,4975 +DA:70,4789 +DA:71,4789 +DA:72,4789 +DA:74,4975 +DA:75,4747 +DA:76,4747 +DA:77,4747 +DA:80,4981 +DA:83,9582 +DA:84,4791 +DA:85,4791 +DA:86,4791 +DA:94,4791 +DA:104,4981 +DA:105,4981 +DA:107,4981 +DA:108,4776 +DA:109,4743 +DA:113,4743 +DA:116,4776 DA:117,0 DA:121,0 -DA:125,4980 +DA:125,4981 DA:143,1 DA:144,2 DA:151,1 -DA:152,4790 -DA:155,4790 -DA:158,4790 -DA:161,4790 -DA:164,4790 -DA:167,4790 -DA:173,4748 -DA:174,4748 -DA:176,4748 +DA:152,4791 +DA:155,4791 +DA:158,4791 +DA:161,4791 +DA:164,4791 +DA:167,4791 +DA:173,4749 +DA:174,4749 +DA:176,4749 DA:177,2 DA:179,2 DA:180,1 DA:183,2 -DA:186,4748 -DA:187,4746 -DA:188,4746 -DA:189,4746 -DA:192,4748 +DA:186,4749 +DA:187,4747 +DA:188,4747 +DA:189,4747 +DA:192,4749 DA:198,1 -DA:199,4978 +DA:199,4979 DA:206,1 -DA:207,11507 +DA:207,11509 DA:212,0 DA:213,0 -DA:217,4790 -DA:218,4790 -DA:220,9580 -DA:221,9580 +DA:217,4791 +DA:218,4791 +DA:220,9582 +DA:221,9582 DA:225,1 LF:67 LH:63 @@ -18326,62 +18330,62 @@ BRDA:15,0,0,1 BRDA:15,0,1,0 BRDA:23,1,0,0 BRDA:23,1,1,0 -BRDA:65,2,0,4980 -BRDA:65,2,1,4976 -BRDA:65,2,2,4966 -BRDA:68,3,0,4974 +BRDA:65,2,0,4981 +BRDA:65,2,1,4977 +BRDA:65,2,2,4967 +BRDA:68,3,0,4975 BRDA:68,3,1,6 BRDA:81,4,0,0 -BRDA:81,4,1,4980 +BRDA:81,4,1,4981 BRDA:85,5,0,0 -BRDA:85,5,1,4790 -BRDA:85,6,0,4790 -BRDA:85,6,1,4790 +BRDA:85,5,1,4791 +BRDA:85,6,0,4791 +BRDA:85,6,1,4791 BRDA:104,7,0,11 -BRDA:104,7,1,4969 -BRDA:104,8,0,4980 -BRDA:104,8,1,4980 -BRDA:105,9,0,4775 +BRDA:104,7,1,4970 +BRDA:104,8,0,4981 +BRDA:104,8,1,4981 +BRDA:105,9,0,4776 BRDA:105,9,1,205 -BRDA:107,10,0,4775 +BRDA:107,10,0,4776 BRDA:107,10,1,205 -BRDA:108,11,0,4742 +BRDA:108,11,0,4743 BRDA:108,11,1,33 -BRDA:108,12,0,4775 -BRDA:108,12,1,4742 +BRDA:108,12,0,4776 +BRDA:108,12,1,4743 BRDA:116,13,0,0 -BRDA:116,13,1,4775 -BRDA:116,14,0,4775 +BRDA:116,13,1,4776 +BRDA:116,14,0,4776 BRDA:116,14,1,0 BRDA:130,15,0,1 -BRDA:130,15,1,4979 -BRDA:130,16,0,4980 -BRDA:130,16,1,4980 -BRDA:131,17,0,4980 +BRDA:130,15,1,4980 +BRDA:130,16,0,4981 +BRDA:130,16,1,4981 +BRDA:131,17,0,4981 BRDA:131,17,1,339 BRDA:158,18,0,2 -BRDA:158,18,1,4788 -BRDA:158,19,0,4790 -BRDA:158,19,1,4788 +BRDA:158,18,1,4789 +BRDA:158,19,0,4791 +BRDA:158,19,1,4789 BRDA:174,20,0,0 -BRDA:174,20,1,4748 -BRDA:174,21,0,4748 -BRDA:174,21,1,4748 +BRDA:174,20,1,4749 +BRDA:174,21,0,4749 +BRDA:174,21,1,4749 BRDA:179,22,0,1 BRDA:179,22,1,1 BRDA:179,23,0,2 BRDA:179,23,1,2 -BRDA:186,24,0,4746 +BRDA:186,24,0,4747 BRDA:186,24,1,2 BRDA:207,25,0,0 -BRDA:207,25,1,11507 -BRDA:208,26,0,11507 +BRDA:207,25,1,11509 +BRDA:208,26,0,11509 BRDA:208,26,1,681 BRDA:208,26,2,681 BRDA:221,27,0,0 -BRDA:221,27,1,9580 -BRDA:221,28,0,9580 -BRDA:221,28,1,9580 +BRDA:221,27,1,9582 +BRDA:221,28,0,9582 +BRDA:221,28,1,9582 BRF:60 BRH:50 end_of_record @@ -18396,36 +18400,36 @@ FN:41,(anonymous_6) FN:55,(anonymous_7) FNF:7 FNH:7 -FNDA:4980,(anonymous_0) +FNDA:4981,(anonymous_0) FNDA:25,(anonymous_2) FNDA:1,(anonymous_3) -FNDA:4789,(anonymous_4) -FNDA:4748,(anonymous_5) -FNDA:11510,(anonymous_6) -FNDA:4773,(anonymous_7) -DA:8,4980 -DA:9,4979 -DA:10,4979 -DA:11,4979 -DA:12,4979 +FNDA:4790,(anonymous_4) +FNDA:4749,(anonymous_5) +FNDA:11512,(anonymous_6) +FNDA:4774,(anonymous_7) +DA:8,4981 +DA:9,4980 +DA:10,4980 +DA:11,4980 +DA:12,4980 DA:17,1 DA:18,1 DA:25,1 -DA:26,4789 +DA:26,4790 DA:32,1 -DA:33,4748 -DA:34,4748 +DA:33,4749 +DA:34,4749 DA:41,1 -DA:42,11510 +DA:42,11512 DA:47,32 DA:50,32 DA:51,32 DA:52,32 DA:55,1 -DA:56,4773 +DA:56,4774 DA:57,32 DA:58,32 -DA:62,4979 +DA:62,4980 DA:63,25 DA:64,25 DA:65,25 @@ -18437,14 +18441,14 @@ BRDA:63,0,1,0 BRDA:67,1,0,25 BRDA:67,1,1,9 BRDA:42,2,0,32 -BRDA:42,2,1,11478 -BRDA:43,3,0,11510 -BRDA:43,3,1,11510 +BRDA:42,2,1,11480 +BRDA:43,3,0,11512 +BRDA:43,3,1,11512 BRDA:43,3,2,33 BRDA:56,4,0,32 -BRDA:56,4,1,4741 -BRDA:56,5,0,4773 -BRDA:56,5,1,4773 +BRDA:56,4,1,4742 +BRDA:56,5,0,4774 +BRDA:56,5,1,4774 BRF:13 BRH:12 end_of_record @@ -18464,13 +18468,13 @@ FN:175,normalizeListsForExport FN:176,(anonymous_12) FNF:12 FNH:12 -FNDA:4998,(anonymous_0) +FNDA:4999,(anonymous_0) FNDA:2,(anonymous_2) -FNDA:4807,(anonymous_3) -FNDA:4765,(anonymous_4) -FNDA:11532,(anonymous_5) +FNDA:4808,(anonymous_3) +FNDA:4766,(anonymous_4) +FNDA:11534,(anonymous_5) FNDA:45,(anonymous_6) -FNDA:5523,(anonymous_7) +FNDA:5524,(anonymous_7) FNDA:173,normalizeTables FNDA:179,(anonymous_9) FNDA:7,(anonymous_10) @@ -18478,18 +18482,18 @@ FNDA:183,normalizeListsForExport FNDA:69,(anonymous_12) DA:1,1 DA:27,1 -DA:28,4997 +DA:28,4998 DA:33,1 DA:34,2 DA:43,1 -DA:44,4807 +DA:44,4808 DA:52,1 -DA:53,4765 +DA:53,4766 DA:62,1 -DA:63,11532 -DA:66,5487 -DA:67,5487 -DA:69,5487 +DA:63,11534 +DA:66,5488 +DA:67,5488 +DA:69,5488 DA:72,1 DA:73,1 DA:76,29 @@ -18504,7 +18508,7 @@ DA:92,45 DA:94,45 DA:95,35 DA:99,1 -DA:100,5523 +DA:100,5524 DA:101,173 DA:102,173 DA:103,173 @@ -18551,13 +18555,13 @@ DA:180,0 DA:182,0 LF:73 LH:71 -BRDA:64,0,0,4805 -BRDA:64,0,1,5487 +BRDA:64,0,0,4806 +BRDA:64,0,1,5488 BRDA:64,0,2,1 BRDA:64,0,3,29 BRDA:64,0,4,18 BRDA:64,0,5,183 -BRDA:66,1,0,5487 +BRDA:66,1,0,5488 BRDA:66,1,1,0 BRDA:80,2,0,16 BRDA:80,2,1,2 @@ -18568,9 +18572,9 @@ BRDA:92,4,1,45 BRDA:94,5,0,35 BRDA:94,5,1,10 BRDA:100,6,0,173 -BRDA:100,6,1,5350 -BRDA:100,7,0,5523 -BRDA:100,7,1,5523 +BRDA:100,6,1,5351 +BRDA:100,7,0,5524 +BRDA:100,7,1,5524 BRDA:103,8,0,173 BRDA:103,8,1,141 BRDA:103,8,2,112 @@ -18631,31 +18635,31 @@ FN:139,(anonymous_9) FNF:10 FNH:10 FNDA:1,(anonymous_0) -FNDA:4984,PendingFormatStatePlugin +FNDA:4985,PendingFormatStatePlugin FNDA:2,(anonymous_2) -FNDA:4794,(anonymous_3) -FNDA:4752,(anonymous_4) -FNDA:4984,(anonymous_5) -FNDA:11514,(anonymous_6) -FNDA:4769,(anonymous_7) +FNDA:4795,(anonymous_3) +FNDA:4753,(anonymous_4) +FNDA:4985,(anonymous_5) +FNDA:11516,(anonymous_6) +FNDA:4770,(anonymous_7) FNDA:42,(anonymous_8) FNDA:12,(anonymous_9) DA:1,1 DA:14,1 DA:20,1 -DA:22,4984 -DA:31,4984 +DA:22,4985 +DA:31,4985 DA:41,1 DA:42,2 DA:49,1 -DA:50,4794 +DA:50,4795 DA:56,1 -DA:57,4752 -DA:58,4752 +DA:57,4753 +DA:58,4753 DA:64,1 -DA:65,4984 +DA:65,4985 DA:72,1 -DA:73,11514 +DA:73,11516 DA:77,22 DA:78,22 DA:79,22 @@ -18672,9 +18676,9 @@ DA:107,730 DA:121,17 DA:124,730 DA:128,1 -DA:129,4769 -DA:130,4769 -DA:131,4769 +DA:129,4770 +DA:130,4770 +DA:131,4770 DA:134,1 DA:135,42 DA:136,42 @@ -18775,28 +18779,28 @@ FN:55,(anonymous_6) FN:83,(anonymous_7) FNF:7 FNH:6 -FNDA:4982,(anonymous_0) +FNDA:4983,(anonymous_0) FNDA:2,(anonymous_2) -FNDA:4791,(anonymous_3) -FNDA:4744,(anonymous_4) +FNDA:4792,(anonymous_3) +FNDA:4745,(anonymous_4) FNDA:4,(anonymous_5) -FNDA:11512,(anonymous_6) +FNDA:11514,(anonymous_6) FNDA:0,(anonymous_7) DA:2,1 DA:14,1 -DA:15,4981 +DA:15,4982 DA:20,1 DA:21,2 DA:28,1 -DA:29,4791 +DA:29,4792 DA:35,1 -DA:36,4744 +DA:36,4745 DA:39,1 DA:40,4 DA:46,0 DA:48,4 -DA:55,11512 -DA:58,11512 +DA:55,11514 +DA:58,11514 DA:70,5 DA:73,5 DA:76,5 @@ -18820,8 +18824,8 @@ BRDA:41,1,1,4 BRDA:41,1,2,0 BRDA:41,1,3,0 BRDA:58,2,0,5 -BRDA:58,2,1,11507 -BRDA:59,3,0,11512 +BRDA:58,2,1,11509 +BRDA:59,3,0,11514 BRDA:59,3,1,5 BRDA:59,3,2,5 BRDA:61,4,0,5 @@ -18886,27 +18890,27 @@ FN:277,(anonymous_26) FNF:27 FNH:26 FNDA:1,(anonymous_0) -FNDA:5010,UndoPlugin +FNDA:5011,UndoPlugin FNDA:2,(anonymous_2) -FNDA:4817,(anonymous_3) -FNDA:4771,(anonymous_4) -FNDA:5006,(anonymous_5) +FNDA:4818,(anonymous_3) +FNDA:4772,(anonymous_4) +FNDA:5007,(anonymous_5) FNDA:585,(anonymous_6) -FNDA:11548,(anonymous_7) +FNDA:11550,(anonymous_7) FNDA:41,(anonymous_8) FNDA:7,(anonymous_9) FNDA:1,(anonymous_10) FNDA:684,(anonymous_11) FNDA:686,(anonymous_12) FNDA:4,(anonymous_13) -FNDA:4818,(anonymous_14) -FNDA:5003,createUndoSnapshots -FNDA:9572,(anonymous_16) +FNDA:4819,(anonymous_14) +FNDA:5004,createUndoSnapshots +FNDA:9574,(anonymous_16) FNDA:0,(anonymous_17) -FNDA:5245,(anonymous_18) +FNDA:5246,(anonymous_18) FNDA:683,(anonymous_19) FNDA:11,(anonymous_20) -FNDA:5005,createUndoSnapshotServiceBridge +FNDA:5006,createUndoSnapshotServiceBridge FNDA:1,(anonymous_22) FNDA:1,(anonymous_23) FNDA:1,(anonymous_24) @@ -18915,27 +18919,27 @@ FNDA:1,(anonymous_26) DA:14,1 DA:26,1 DA:32,1 -DA:33,5010 -DA:34,5010 -DA:42,5010 +DA:33,5011 +DA:34,5011 +DA:42,5011 DA:57,1 DA:58,2 DA:65,1 -DA:66,4817 +DA:66,4818 DA:72,1 -DA:73,4771 +DA:73,4772 DA:79,1 -DA:80,5006 +DA:80,5007 DA:87,1 DA:88,585 DA:99,1 -DA:101,11548 +DA:101,11550 DA:102,0 -DA:105,11548 -DA:107,4789 -DA:108,4789 -DA:111,4787 -DA:113,4789 +DA:105,11550 +DA:107,4790 +DA:108,4790 +DA:111,4788 +DA:113,4790 DA:115,41 DA:116,41 DA:118,7 @@ -18993,17 +18997,17 @@ DA:233,1 DA:234,4 DA:235,4 DA:242,1 -DA:243,4818 -DA:244,4818 +DA:243,4819 +DA:244,4819 DA:246,1 -DA:249,5003 -DA:251,5003 -DA:252,9572 +DA:249,5004 +DA:251,5004 +DA:252,9574 DA:253,0 -DA:255,5245 +DA:255,5246 DA:256,683 DA:257,11 -DA:265,5005 +DA:265,5006 DA:267,1 DA:269,1 DA:271,1 @@ -19011,26 +19015,26 @@ DA:276,2 DA:277,1 LF:97 LH:92 -BRDA:44,0,0,5010 -BRDA:44,0,1,5005 -BRDA:44,0,2,5003 +BRDA:44,0,0,5011 +BRDA:44,0,1,5006 +BRDA:44,0,2,5004 BRDA:89,1,0,585 BRDA:89,1,1,15 BRDA:89,1,2,0 BRDA:101,2,0,0 -BRDA:101,2,1,11548 -BRDA:101,3,0,11548 -BRDA:101,3,1,11548 -BRDA:106,4,0,4789 +BRDA:101,2,1,11550 +BRDA:101,3,0,11550 +BRDA:101,3,1,11550 +BRDA:106,4,0,4790 BRDA:106,4,1,41 BRDA:106,4,2,7 BRDA:106,4,3,1 BRDA:106,4,4,684 BRDA:106,4,5,1 -BRDA:108,5,0,4787 +BRDA:108,5,0,4788 BRDA:108,5,1,2 -BRDA:108,6,0,4789 -BRDA:108,6,1,4788 +BRDA:108,6,0,4790 +BRDA:108,6,1,4789 BRDA:137,7,0,8 BRDA:137,7,1,33 BRDA:137,8,0,41 @@ -19103,11 +19107,11 @@ BRDA:238,36,1,2 BRDA:238,37,0,2 BRDA:238,37,1,2 BRDA:243,38,0,0 -BRDA:243,38,1,4818 -BRDA:243,39,0,4818 -BRDA:243,39,1,4818 +BRDA:243,38,1,4819 +BRDA:243,39,0,4819 +BRDA:243,39,1,4819 BRDA:266,40,0,2 -BRDA:266,40,1,5003 +BRDA:266,40,1,5004 BRDA:269,41,0,1 BRDA:269,41,1,0 BRDA:273,42,0,1 @@ -19121,8 +19125,8 @@ FN:27,createCorePlugins FN:56,getPluginState FNF:2 FNH:2 -FNDA:4976,createCorePlugins -FNDA:4976,getPluginState +FNDA:4977,createCorePlugins +FNDA:4977,getPluginState DA:1,1 DA:2,1 DA:3,1 @@ -19135,36 +19139,36 @@ DA:9,1 DA:10,1 DA:11,1 DA:27,1 -DA:31,4976 -DA:34,4976 +DA:31,4977 +DA:34,4977 DA:56,1 -DA:57,4976 +DA:57,4977 LF:16 LH:16 -BRDA:31,0,0,4976 -BRDA:31,0,1,4909 -BRDA:35,1,0,4976 -BRDA:35,1,1,4976 -BRDA:36,2,0,4976 -BRDA:36,2,1,4976 -BRDA:37,3,0,4976 -BRDA:37,3,1,4976 -BRDA:40,4,0,4976 -BRDA:40,4,1,4976 -BRDA:41,5,0,4976 -BRDA:41,5,1,4976 -BRDA:42,6,0,4976 -BRDA:42,6,1,4975 -BRDA:43,7,0,4976 -BRDA:43,7,1,4976 -BRDA:44,8,0,4976 -BRDA:44,8,1,4976 -BRDA:45,9,0,4976 -BRDA:45,9,1,4976 -BRDA:46,10,0,4976 -BRDA:46,10,1,4976 -BRDA:47,11,0,4976 -BRDA:47,11,1,4976 +BRDA:31,0,0,4977 +BRDA:31,0,1,4910 +BRDA:35,1,0,4977 +BRDA:35,1,1,4977 +BRDA:36,2,0,4977 +BRDA:36,2,1,4977 +BRDA:37,3,0,4977 +BRDA:37,3,1,4977 +BRDA:40,4,0,4977 +BRDA:40,4,1,4977 +BRDA:41,5,0,4977 +BRDA:41,5,1,4977 +BRDA:42,6,0,4977 +BRDA:42,6,1,4976 +BRDA:43,7,0,4977 +BRDA:43,7,1,4977 +BRDA:44,8,0,4977 +BRDA:44,8,1,4977 +BRDA:45,9,0,4977 +BRDA:45,9,1,4977 +BRDA:46,10,0,4977 +BRDA:46,10,1,4977 +BRDA:47,11,0,4977 +BRDA:47,11,1,4977 BRF:24 BRH:24 end_of_record @@ -19618,12 +19622,12 @@ FNF:12 FNH:12 FNDA:1,(anonymous_0) FNDA:1,(anonymous_1) -FNDA:5092,DarkColorHandlerImpl -FNDA:5234,(anonymous_3) -FNDA:14451,(anonymous_4) -FNDA:4745,(anonymous_5) +FNDA:5094,DarkColorHandlerImpl +FNDA:5235,(anonymous_3) +FNDA:14454,(anonymous_4) +FNDA:4746,(anonymous_5) FNDA:2,(anonymous_6) -FNDA:16342,(anonymous_7) +FNDA:16345,(anonymous_7) FNDA:11,(anonymous_8) FNDA:9,(anonymous_9) FNDA:843,(anonymous_10) @@ -19637,43 +19641,43 @@ DA:8,1 DA:9,1 DA:11,1 DA:25,1 -DA:26,5092 -DA:28,5092 +DA:26,5094 +DA:28,5094 DA:34,1 -DA:35,5234 +DA:35,5235 DA:45,1 -DA:46,14451 -DA:49,14451 -DA:50,14451 -DA:51,14451 -DA:52,14451 -DA:55,14451 +DA:46,14454 +DA:49,14454 +DA:50,14454 +DA:51,14454 +DA:52,14454 +DA:55,14454 DA:56,14 DA:59,14 DA:60,13 DA:62,13 DA:63,13 DA:66,14 -DA:68,14437 -DA:75,4745 -DA:76,4745 -DA:77,4745 +DA:68,14440 +DA:75,4746 +DA:76,4746 +DA:77,4746 DA:87,1 -DA:89,16342 -DA:92,16342 -DA:93,14567 -DA:95,14567 +DA:89,16345 +DA:92,16345 +DA:93,14570 +DA:95,14570 DA:96,10 DA:97,9 DA:98,9 DA:99,9 DA:101,1 -DA:103,14557 +DA:103,14560 DA:107,6 DA:109,6 DA:110,1 -DA:113,14551 -DA:117,16342 +DA:113,14554 +DA:117,16345 DA:124,11 DA:125,11 DA:127,11 @@ -19695,13 +19699,13 @@ LF:63 LH:63 BRDA:7,0,0,1 BRDA:7,0,1,1 -BRDA:49,1,0,14451 +BRDA:49,1,0,14454 BRDA:49,1,1,0 -BRDA:51,2,0,14451 -BRDA:51,2,1,14450 +BRDA:51,2,0,14454 +BRDA:51,2,1,14453 BRDA:55,3,0,14 -BRDA:55,3,1,14437 -BRDA:55,4,0,14451 +BRDA:55,3,1,14440 +BRDA:55,4,0,14454 BRDA:55,4,1,15 BRDA:57,5,0,14 BRDA:57,5,1,11 @@ -19709,12 +19713,12 @@ BRDA:59,6,0,13 BRDA:59,6,1,1 BRDA:60,7,0,13 BRDA:60,7,1,9 -BRDA:92,8,0,14567 +BRDA:92,8,0,14570 BRDA:92,8,1,1775 BRDA:93,9,0,10 -BRDA:93,9,1,14557 +BRDA:93,9,1,14560 BRDA:95,10,0,10 -BRDA:95,10,1,14557 +BRDA:95,10,1,14560 BRDA:96,11,0,9 BRDA:96,11,1,1 BRDA:99,12,0,7 @@ -19722,7 +19726,7 @@ BRDA:99,12,1,2 BRDA:99,13,0,9 BRDA:99,13,1,9 BRDA:103,14,0,6 -BRDA:103,14,1,14551 +BRDA:103,14,1,14554 BRDA:107,15,0,6 BRDA:107,15,1,5 BRDA:109,16,0,1 @@ -19751,19 +19755,19 @@ FN:14,Editor FNF:2 FNH:2 FNDA:1,(anonymous_0) -FNDA:4768,Editor +FNDA:4769,Editor DA:1,1 DA:2,1 DA:8,1 -DA:14,4770 -DA:15,4768 +DA:14,4771 +DA:15,4769 DA:17,1 LF:6 LH:6 BRDA:14,0,0,2 -BRDA:14,0,1,4766 -BRDA:15,1,0,4768 -BRDA:15,1,1,4766 +BRDA:14,0,1,4767 +BRDA:15,1,0,4769 +BRDA:15,1,1,4767 BRF:4 BRH:4 end_of_record @@ -19851,9 +19855,9 @@ FN:1022,(anonymous_78) FNF:79 FNH:61 FNDA:1,(anonymous_0) -FNDA:4788,EditorBase -FNDA:52799,(anonymous_2) -FNDA:4744,(anonymous_3) +FNDA:4789,EditorBase +FNDA:52810,(anonymous_2) +FNDA:4745,(anonymous_3) FNDA:13,(anonymous_4) FNDA:38,(anonymous_5) FNDA:5,(anonymous_6) @@ -19861,12 +19865,12 @@ FNDA:2,(anonymous_7) FNDA:2,(anonymous_8) FNDA:39,(anonymous_9) FNDA:487,(anonymous_10) -FNDA:11057,(anonymous_11) +FNDA:11059,(anonymous_11) FNDA:89,(anonymous_12) FNDA:0,(anonymous_13) FNDA:0,(anonymous_14) FNDA:183,(anonymous_15) -FNDA:5199,(anonymous_16) +FNDA:5200,(anonymous_16) FNDA:9,(anonymous_17) FNDA:11,(anonymous_18) FNDA:0,(anonymous_19) @@ -19877,7 +19881,7 @@ FNDA:698,(anonymous_23) FNDA:0,(anonymous_24) FNDA:0,(anonymous_25) FNDA:381,(anonymous_26) -FNDA:5379,(anonymous_27) +FNDA:5380,(anonymous_27) FNDA:234,(anonymous_28) FNDA:584,(anonymous_29) FNDA:584,(anonymous_30) @@ -19885,17 +19889,17 @@ FNDA:6,(anonymous_31) FNDA:116,(anonymous_32) FNDA:97,(anonymous_33) FNDA:136,(anonymous_34) -FNDA:14395,(anonymous_35) -FNDA:9638,(anonymous_36) +FNDA:14398,(anonymous_35) +FNDA:9640,(anonymous_36) FNDA:17,(anonymous_37) FNDA:0,(anonymous_38) FNDA:0,(anonymous_39) -FNDA:5112,(anonymous_40) -FNDA:4786,(anonymous_41) -FNDA:19780,(anonymous_42) +FNDA:5113,(anonymous_40) +FNDA:4787,(anonymous_41) +FNDA:19784,(anonymous_42) FNDA:0,(anonymous_43) FNDA:15,(anonymous_44) -FNDA:11517,(anonymous_45) +FNDA:11519,(anonymous_45) FNDA:34,(anonymous_46) FNDA:37,(anonymous_47) FNDA:93,(anonymous_48) @@ -19914,37 +19918,37 @@ FNDA:66,(anonymous_60) FNDA:100,(anonymous_61) FNDA:7,(anonymous_62) FNDA:14,(anonymous_63) -FNDA:4786,(anonymous_64) +FNDA:4787,(anonymous_64) FNDA:0,(anonymous_65) FNDA:75,(anonymous_66) FNDA:1,(anonymous_67) -FNDA:4806,(anonymous_68) +FNDA:4807,(anonymous_68) FNDA:3,(anonymous_69) FNDA:3,(anonymous_70) FNDA:0,(anonymous_71) -FNDA:11446,(anonymous_72) +FNDA:11448,(anonymous_72) FNDA:8,(anonymous_73) FNDA:0,(anonymous_74) FNDA:103,(anonymous_75) FNDA:0,(anonymous_76) FNDA:31,(anonymous_77) -FNDA:116127,(anonymous_78) +FNDA:116149,(anonymous_78) DA:1,1 DA:41,1 DA:73,1 -DA:75,4788 -DA:84,4788 -DA:90,4788 +DA:75,4789 +DA:84,4789 +DA:90,4789 DA:91,2 -DA:95,4786 -DA:98,52799 -DA:101,4786 +DA:95,4787 +DA:98,52810 +DA:101,4787 DA:109,1 -DA:110,4744 -DA:111,4744 -DA:112,52295 -DA:115,4744 -DA:117,4744 +DA:110,4745 +DA:111,4745 +DA:112,52306 +DA:115,4745 +DA:117,4745 DA:124,1 DA:125,13 DA:142,1 @@ -19969,16 +19973,16 @@ DA:201,487 DA:202,0 DA:204,487 DA:207,1 -DA:209,22019 -DA:215,11057 -DA:216,11057 -DA:217,11057 -DA:218,11057 -DA:220,11057 -DA:221,11057 +DA:209,22023 +DA:215,11059 +DA:216,11059 +DA:217,11059 +DA:218,11059 +DA:220,11059 +DA:221,11059 DA:222,89 DA:223,89 -DA:226,10968 +DA:226,10970 DA:229,89 DA:243,1 DA:244,0 @@ -19988,9 +19992,9 @@ DA:265,1 DA:266,366 DA:268,183 DA:269,183 -DA:277,5612 -DA:278,5199 -DA:279,5199 +DA:277,5613 +DA:278,5200 +DA:279,5200 DA:291,1 DA:292,9 DA:293,9 @@ -20039,8 +20043,8 @@ DA:421,1 DA:422,381 DA:423,381 DA:426,1 -DA:432,5379 -DA:434,5379 +DA:432,5380 +DA:434,5380 DA:440,1 DA:441,234 DA:442,234 @@ -20068,15 +20072,15 @@ DA:507,97 DA:509,116 DA:510,136 DA:518,1 -DA:522,14395 -DA:523,14395 -DA:524,14395 +DA:522,14398 +DA:523,14398 +DA:524,14398 DA:536,1 -DA:539,9746 -DA:541,9638 -DA:542,9638 -DA:546,9638 -DA:548,9638 +DA:539,9748 +DA:541,9640 +DA:542,9640 +DA:546,9640 +DA:548,9640 DA:556,1 DA:557,22 DA:560,17 @@ -20089,20 +20093,20 @@ DA:583,0 DA:584,0 DA:585,0 DA:598,1 -DA:604,5112 -DA:605,5112 +DA:604,5113 +DA:605,5113 DA:617,1 -DA:618,4786 -DA:619,4786 +DA:618,4787 +DA:619,4787 DA:633,1 -DA:634,19780 +DA:634,19784 DA:640,1 DA:641,0 DA:652,1 DA:653,15 DA:654,15 DA:664,1 -DA:665,11517 +DA:665,11519 DA:672,1 DA:673,34 DA:680,1 @@ -20169,8 +20173,8 @@ DA:843,14 DA:844,14 DA:845,14 DA:853,1 -DA:854,4786 -DA:855,4786 +DA:854,4787 +DA:855,4787 DA:866,1 DA:867,0 DA:869,0 @@ -20184,7 +20188,7 @@ DA:903,1 DA:904,1 DA:905,1 DA:917,1 -DA:918,4806 +DA:918,4807 DA:929,1 DA:930,3 DA:931,3 @@ -20194,7 +20198,7 @@ DA:939,3 DA:945,1 DA:946,0 DA:953,1 -DA:956,11446 +DA:956,11448 DA:965,1 DA:966,8 DA:972,1 @@ -20211,14 +20215,14 @@ DA:999,0 DA:1014,1 DA:1015,31 DA:1022,1 -DA:1023,116127 +DA:1023,116149 DA:1024,0 -DA:1026,116127 +DA:1026,116149 DA:1030,1 LF:286 LH:216 BRDA:90,0,0,2 -BRDA:90,0,1,4786 +BRDA:90,0,1,4787 BRDA:144,1,0,38 BRDA:144,1,1,0 BRDA:144,2,0,30 @@ -20242,20 +20246,20 @@ BRDA:181,10,0,2 BRDA:181,10,1,2 BRDA:201,11,0,0 BRDA:201,11,1,487 -BRDA:209,12,0,10962 +BRDA:209,12,0,10964 BRDA:209,12,1,95 BRDA:217,13,0,6 -BRDA:217,13,1,11051 +BRDA:217,13,1,11053 BRDA:218,14,0,6 -BRDA:218,14,1,11051 -BRDA:220,15,0,10968 +BRDA:218,14,1,11053 +BRDA:220,15,0,10970 BRDA:220,15,1,89 BRDA:221,16,0,89 -BRDA:221,16,1,10968 +BRDA:221,16,1,10970 BRDA:266,17,0,183 BRDA:266,17,1,0 BRDA:277,18,0,413 -BRDA:277,18,1,4786 +BRDA:277,18,1,4787 BRDA:292,19,0,9 BRDA:292,19,1,0 BRDA:297,20,0,0 @@ -20331,26 +20335,26 @@ BRDA:501,54,0,116 BRDA:501,54,1,0 BRDA:507,55,0,97 BRDA:507,55,1,0 -BRDA:522,56,0,4786 -BRDA:522,56,1,9609 +BRDA:522,56,0,4787 +BRDA:522,56,1,9611 BRDA:539,57,0,108 -BRDA:539,57,1,9530 +BRDA:539,57,1,9532 BRDA:557,58,0,5 BRDA:557,58,1,12 BRDA:607,59,0,283 -BRDA:607,59,1,4829 -BRDA:607,60,0,5112 -BRDA:607,60,1,5112 +BRDA:607,59,1,4830 +BRDA:607,60,0,5113 +BRDA:607,60,1,5113 BRDA:608,61,0,258 -BRDA:608,61,1,4854 -BRDA:608,62,0,5112 -BRDA:608,62,1,5112 +BRDA:608,61,1,4855 +BRDA:608,62,0,5113 +BRDA:608,62,1,5113 BRDA:609,63,0,17 -BRDA:609,63,1,5095 -BRDA:609,64,0,5112 -BRDA:609,64,1,5112 -BRDA:620,65,0,4786 -BRDA:620,65,1,4786 +BRDA:609,63,1,5096 +BRDA:609,64,0,5113 +BRDA:609,64,1,5113 +BRDA:620,65,0,4787 +BRDA:620,65,1,4787 BRDA:654,66,0,15 BRDA:654,66,1,7 BRDA:655,67,0,6 @@ -20452,7 +20456,7 @@ BRDA:994,114,1,0 BRDA:998,115,0,0 BRDA:998,115,1,0 BRDA:1023,116,0,0 -BRDA:1023,116,1,116127 +BRDA:1023,116,1,116149 BRF:236 BRH:150 end_of_record @@ -20466,10 +20470,10 @@ FN:49,(anonymous_4) FN:51,(anonymous_5) FNF:6 FNH:5 -FNDA:4786,(anonymous_0) -FNDA:62218,(anonymous_1) +FNDA:4787,(anonymous_0) +FNDA:62231,(anonymous_1) FNDA:31,(anonymous_2) -FNDA:57585,(anonymous_3) +FNDA:57597,(anonymous_3) FNDA:421,(anonymous_4) FNDA:0,(anonymous_5) DA:1,1 @@ -20477,45 +20481,45 @@ DA:2,1 DA:3,1 DA:4,1 DA:12,1 -DA:13,4786 -DA:14,4786 -DA:16,4786 -DA:17,62218 -DA:18,4786 -DA:19,4757 -DA:22,57432 -DA:26,4786 -DA:27,4786 -DA:29,4786 +DA:13,4787 +DA:14,4787 +DA:16,4787 +DA:17,62231 +DA:18,4787 +DA:19,4758 +DA:22,57444 +DA:26,4787 +DA:27,4787 +DA:29,4787 DA:31,31 DA:33,31 -DA:40,4786 -DA:47,57585 +DA:40,4787 +DA:47,57597 DA:49,421 DA:51,0 -DA:57,4786 +DA:57,4787 LF:22 LH:21 -BRDA:17,0,0,4786 -BRDA:17,0,1,57432 -BRDA:18,1,0,4757 +BRDA:17,0,0,4787 +BRDA:17,0,1,57444 +BRDA:18,1,0,4758 BRDA:18,1,1,29 BRDA:27,2,0,0 -BRDA:27,2,1,4786 +BRDA:27,2,1,4787 BRDA:27,3,0,0 -BRDA:27,3,1,4786 -BRDA:27,4,0,4786 -BRDA:27,4,1,4786 -BRDA:29,5,0,4786 -BRDA:29,5,1,4786 +BRDA:27,3,1,4787 +BRDA:27,4,0,4787 +BRDA:27,4,1,4787 +BRDA:29,5,0,4787 +BRDA:29,5,1,4787 BRDA:35,6,0,31 BRDA:35,6,1,0 -BRDA:44,7,0,4786 -BRDA:44,7,1,4785 -BRDA:49,8,0,4786 -BRDA:49,8,1,4786 -BRDA:51,9,0,4786 -BRDA:51,9,1,4786 +BRDA:44,7,0,4787 +BRDA:44,7,1,4786 +BRDA:49,8,0,4787 +BRDA:49,8,1,4787 +BRDA:51,9,0,4787 +BRDA:51,9,1,4787 BRF:20 BRH:17 end_of_record @@ -20524,12 +20528,12 @@ SF:packages/roosterjs-editor-core/lib/editor/isFeatureEnabled.ts FN:10,isFeatureEnabled FNF:1 FNH:1 -FNDA:11553,isFeatureEnabled +FNDA:11555,isFeatureEnabled DA:10,1 -DA:14,11553 +DA:14,11555 LF:2 LH:2 -BRDA:14,0,0,11553 +BRDA:14,0,0,11555 BRDA:14,0,1,36 BRF:2 BRH:2 @@ -20670,8 +20674,8 @@ FN:154,(anonymous_130) FN:156,(anonymous_131) FNF:132 FNH:104 -FNDA:5005,(anonymous_0) -FNDA:4806,(anonymous_1) +FNDA:5006,(anonymous_0) +FNDA:4807,(anonymous_1) FNDA:264,(anonymous_2) FNDA:127,(anonymous_3) FNDA:31,(anonymous_4) @@ -20693,24 +20697,24 @@ FNDA:0,(anonymous_19) FNDA:1,(anonymous_20) FNDA:1,(anonymous_21) FNDA:20,(anonymous_22) -FNDA:19474,(anonymous_23) +FNDA:19478,(anonymous_23) FNDA:0,(anonymous_24) -FNDA:4787,(anonymous_25) +FNDA:4788,(anonymous_25) FNDA:19,(anonymous_26) FNDA:28,(anonymous_27) -FNDA:12586,(anonymous_28) -FNDA:6044,(anonymous_29) +FNDA:12587,(anonymous_28) +FNDA:6045,(anonymous_29) FNDA:0,(anonymous_30) FNDA:12,(anonymous_31) FNDA:213,(anonymous_32) FNDA:1,(anonymous_33) FNDA:100,(anonymous_34) -FNDA:7599,(anonymous_35) +FNDA:7600,(anonymous_35) FNDA:372,(anonymous_36) FNDA:36,(anonymous_37) FNDA:35,(anonymous_38) FNDA:70,(anonymous_39) -FNDA:11078,(anonymous_40) +FNDA:11080,(anonymous_40) FNDA:12,(anonymous_41) FNDA:20,(anonymous_42) FNDA:315,(anonymous_43) @@ -20721,14 +20725,14 @@ FNDA:206,(anonymous_47) FNDA:0,(anonymous_48) FNDA:3,(anonymous_49) FNDA:10,(anonymous_50) -FNDA:12911,(anonymous_51) +FNDA:12913,(anonymous_51) FNDA:6,(anonymous_52) FNDA:0,(anonymous_53) -FNDA:9676,(anonymous_54) +FNDA:9678,(anonymous_54) FNDA:371,(anonymous_55) -FNDA:5010,(anonymous_56) +FNDA:5011,(anonymous_56) FNDA:0,(anonymous_57) -FNDA:261,(anonymous_58) +FNDA:262,(anonymous_58) FNDA:31,(anonymous_59) FNDA:0,(anonymous_60) FNDA:115,(anonymous_61) @@ -20747,36 +20751,36 @@ FNDA:57,(anonymous_73) FNDA:63,(anonymous_74) FNDA:0,(anonymous_75) FNDA:0,(anonymous_76) -FNDA:11094,(anonymous_77) +FNDA:11096,(anonymous_77) FNDA:887,(anonymous_78) FNDA:0,(anonymous_79) FNDA:7,(anonymous_80) -FNDA:5208,(anonymous_81) +FNDA:5209,(anonymous_81) FNDA:3,(anonymous_82) FNDA:0,(anonymous_83) FNDA:4,(anonymous_84) FNDA:462,(anonymous_85) FNDA:871,(anonymous_86) FNDA:0,(anonymous_87) -FNDA:5245,(anonymous_88) -FNDA:9572,(anonymous_89) +FNDA:5246,(anonymous_88) +FNDA:9574,(anonymous_89) FNDA:0,(anonymous_90) FNDA:683,(anonymous_91) FNDA:0,(anonymous_92) FNDA:0,(anonymous_93) -FNDA:5003,(anonymous_94) +FNDA:5004,(anonymous_94) FNDA:11,(anonymous_95) FNDA:47,(anonymous_96) FNDA:0,(anonymous_97) FNDA:49,(anonymous_98) FNDA:295,(anonymous_99) FNDA:135,(anonymous_100) -FNDA:5717,(anonymous_101) -FNDA:5761,(anonymous_102) +FNDA:5718,(anonymous_101) +FNDA:5762,(anonymous_102) FNDA:0,(anonymous_103) FNDA:4,(anonymous_104) FNDA:471,(anonymous_105) -FNDA:354,(anonymous_106) +FNDA:786,(anonymous_106) FNDA:7,(anonymous_107) FNDA:4,(anonymous_108) FNDA:53,(anonymous_109) @@ -20785,7 +20789,7 @@ FNDA:155,(anonymous_111) FNDA:5,(anonymous_112) FNDA:320,(anonymous_113) FNDA:136,(anonymous_114) -FNDA:10967,(anonymous_115) +FNDA:10969,(anonymous_115) FNDA:31,(anonymous_116) FNDA:0,(anonymous_117) FNDA:0,(anonymous_118) @@ -20798,12 +20802,12 @@ FNDA:5,(anonymous_124) FNDA:74,(anonymous_125) FNDA:19,(anonymous_126) FNDA:6,(anonymous_127) -FNDA:4840,(anonymous_128) -FNDA:42046,(anonymous_129) +FNDA:4841,(anonymous_128) +FNDA:42056,(anonymous_129) FNDA:1108,(anonymous_130) FNDA:10,(anonymous_131) -DA:1,5006 -DA:2,4807 +DA:1,5007 +DA:2,4808 DA:4,265 DA:5,128 DA:7,1 @@ -20826,23 +20830,23 @@ DA:26,1 DA:27,2 DA:28,2 DA:29,21 -DA:31,19475 -DA:32,4788 +DA:31,19479 +DA:32,4789 DA:33,20 DA:34,29 -DA:35,12587 -DA:36,6045 +DA:35,12588 +DA:36,6046 DA:37,1 DA:38,214 DA:39,1 DA:40,2 DA:41,101 -DA:44,7600 +DA:44,7601 DA:45,373 DA:46,37 DA:47,36 DA:48,71 -DA:49,11079 +DA:49,11081 DA:50,21 DA:51,316 DA:52,112 @@ -20850,13 +20854,13 @@ DA:53,54 DA:54,207 DA:55,4 DA:56,11 -DA:57,12912 +DA:57,12914 DA:58,7 DA:59,1 -DA:60,9677 +DA:60,9679 DA:61,372 -DA:62,5011 -DA:63,262 +DA:62,5012 +DA:63,263 DA:64,32 DA:65,1 DA:66,116 @@ -20875,39 +20879,39 @@ DA:81,58 DA:82,64 DA:83,1 DA:84,1 -DA:86,11095 +DA:86,11097 DA:87,888 DA:88,1 DA:89,8 -DA:90,5209 +DA:90,5210 DA:91,4 DA:92,1 DA:93,1 DA:94,5 DA:95,463 DA:97,872 -DA:99,5246 -DA:100,9573 +DA:99,5247 +DA:100,9575 DA:101,1 DA:102,1 DA:103,684 DA:105,1 DA:106,1 DA:107,1 -DA:109,5004 +DA:109,5005 DA:110,12 DA:112,48 DA:113,1 DA:114,50 DA:115,296 DA:117,136 -DA:118,5718 -DA:119,5762 +DA:118,5719 +DA:119,5763 DA:120,1 DA:121,1 DA:122,5 DA:123,472 -DA:126,355 +DA:126,787 DA:127,8 DA:128,5 DA:129,54 @@ -20916,7 +20920,7 @@ DA:132,156 DA:133,6 DA:134,321 DA:135,137 -DA:136,10968 +DA:136,10970 DA:138,32 DA:139,1 DA:140,1 @@ -20928,8 +20932,8 @@ DA:146,3 DA:147,1 DA:148,6 DA:150,75 -DA:152,4841 -DA:153,42047 +DA:152,4842 +DA:153,42057 DA:154,1109 DA:156,11 LF:130 @@ -21086,7 +21090,7 @@ FN:34,getBlockElementAtNode FN:111,findHeadTailLeafNode FNF:2 FNH:2 -FNDA:7323,getBlockElementAtNode +FNDA:7324,getBlockElementAtNode FNDA:3612,findHeadTailLeafNode DA:1,1 DA:2,1 @@ -21095,8 +21099,8 @@ DA:4,1 DA:5,1 DA:6,1 DA:34,1 -DA:38,7323 -DA:39,5394 +DA:38,7324 +DA:39,5395 DA:45,1929 DA:46,1929 DA:47,0 @@ -21143,7 +21147,7 @@ DA:138,1360 DA:140,0 LF:53 LH:48 -BRDA:38,0,0,5394 +BRDA:38,0,0,5395 BRDA:38,0,1,1929 BRDA:46,1,0,0 BRDA:46,1,1,1929 @@ -21197,24 +21201,24 @@ SF:packages/roosterjs-editor-dom/lib/blockElements/getFirstLastBlockElement.ts FN:10,getFirstLastBlockElement FNF:1 FNH:1 -FNDA:4878,getFirstLastBlockElement +FNDA:4879,getFirstLastBlockElement DA:1,1 DA:10,1 -DA:14,4878 -DA:15,4878 -DA:16,4975 -DA:18,4878 +DA:14,4879 +DA:15,4879 +DA:16,4976 +DA:18,4879 LF:6 LH:6 -BRDA:17,0,0,4975 +BRDA:17,0,0,4976 BRDA:17,0,1,185 -BRDA:16,1,0,4975 -BRDA:16,1,1,4974 +BRDA:16,1,0,4976 +BRDA:16,1,1,4975 BRDA:16,2,0,171 -BRDA:16,2,1,4803 -BRDA:18,3,0,4878 +BRDA:16,2,1,4804 +BRDA:18,3,0,4879 BRDA:18,3,1,88 -BRDA:18,3,2,4790 +BRDA:18,3,2,4791 BRF:9 BRH:9 end_of_record @@ -23059,17 +23063,17 @@ SF:packages/roosterjs-editor-dom/lib/entity/getEntitySelector.ts FN:8,getEntitySelector FNF:1 FNH:1 -FNDA:6249,getEntitySelector +FNDA:6250,getEntitySelector DA:8,1 -DA:9,6249 -DA:10,6249 -DA:11,6249 +DA:9,6250 +DA:10,6250 +DA:11,6250 LF:4 LH:4 BRDA:9,0,0,2 -BRDA:9,0,1,6247 +BRDA:9,0,1,6248 BRDA:10,1,0,2 -BRDA:10,1,1,6247 +BRDA:10,1,1,6248 BRF:4 BRH:4 end_of_record @@ -24320,9 +24324,9 @@ SF:packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts FN:6,arrayPush FNF:1 FNH:1 -FNDA:4979,arrayPush +FNDA:4980,arrayPush DA:6,1 -DA:7,4979 +DA:7,4980 LF:2 LH:2 BRF:0 @@ -24333,9 +24337,9 @@ SF:packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts FN:6,getObjectKeys FNF:1 FNH:1 -FNDA:43824,getObjectKeys +FNDA:43834,getObjectKeys DA:6,1 -DA:9,43824 +DA:9,43834 LF:2 LH:2 BRF:0 @@ -24346,9 +24350,9 @@ SF:packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts FN:33,toArray FNF:1 FNH:1 -FNDA:15579,toArray +FNDA:15581,toArray DA:33,1 -DA:34,15579 +DA:34,15581 LF:2 LH:2 BRF:0 @@ -26364,25 +26368,25 @@ FN:174,getEndOffset FNF:10 FNH:10 FNDA:1,(anonymous_0) -FNDA:18137,Position -FNDA:13365,(anonymous_2) +FNDA:18139,Position +FNDA:13367,(anonymous_2) FNDA:608,(anonymous_3) FNDA:2142,(anonymous_4) FNDA:123,(anonymous_5) FNDA:1909,(anonymous_6) FNDA:1294,(anonymous_7) FNDA:1013,getIndexOfNode -FNDA:17124,getEndOffset +FNDA:17126,getEndOffset DA:1,1 DA:2,1 DA:9,1 -DA:41,18146 -DA:42,18137 -DA:44,18137 +DA:41,18148 +DA:42,18139 +DA:44,18139 DA:45,7 DA:46,7 -DA:48,18130 -DA:51,18137 +DA:48,18132 +DA:51,18139 DA:53,505 DA:54,505 DA:55,505 @@ -26394,14 +26398,14 @@ DA:62,508 DA:65,1448 DA:66,1448 DA:67,1448 -DA:70,15676 -DA:71,15676 -DA:72,15676 -DA:73,15676 -DA:76,18137 +DA:70,15678 +DA:71,15678 +DA:72,15678 +DA:73,15678 +DA:76,18139 DA:83,1 -DA:84,13365 -DA:85,11802 +DA:84,13367 +DA:85,11804 DA:88,1563 DA:89,1563 DA:92,1563 @@ -26426,27 +26430,27 @@ DA:167,1013 DA:168,1013 DA:169,358 DA:171,1013 -DA:175,17124 +DA:175,17126 DA:176,4180 -DA:177,12944 -DA:178,12839 +DA:177,12946 +DA:178,12841 DA:180,105 LF:58 LH:58 BRDA:41,0,0,9 -BRDA:41,0,1,18128 +BRDA:41,0,1,18130 BRDA:44,1,0,7 -BRDA:44,1,1,18130 +BRDA:44,1,1,18132 BRDA:52,2,0,505 BRDA:52,2,1,508 BRDA:52,2,2,1448 -BRDA:52,2,3,15676 -BRDA:72,3,0,15676 +BRDA:52,2,3,15678 +BRDA:72,3,0,15678 BRDA:72,3,1,2076 -BRDA:84,4,0,11802 +BRDA:84,4,0,11804 BRDA:84,4,1,1563 -BRDA:84,5,0,13365 -BRDA:84,5,1,11322 +BRDA:84,5,0,13367 +BRDA:84,5,1,11324 BRDA:90,6,0,565 BRDA:90,6,1,998 BRDA:92,7,0,4184 @@ -26484,16 +26488,16 @@ BRDA:168,20,1,1371 BRDA:168,21,0,1371 BRDA:168,21,1,1371 BRDA:175,22,0,4180 -BRDA:175,22,1,12944 +BRDA:175,22,1,12946 BRDA:176,23,0,4180 BRDA:176,23,1,52 BRDA:176,24,0,0 BRDA:176,24,1,4180 BRDA:176,25,0,4180 BRDA:176,25,1,4180 -BRDA:177,26,0,12839 +BRDA:177,26,0,12841 BRDA:177,26,1,105 -BRDA:177,27,0,12944 +BRDA:177,27,0,12946 BRDA:177,27,1,105 BRF:62 BRH:60 @@ -26510,11 +26514,11 @@ DA:11,867 DA:12,867 DA:13,865 DA:15,865 -DA:17,860 -DA:18,860 -DA:21,860 +DA:17,861 +DA:18,861 +DA:21,861 DA:29,0 -DA:31,860 +DA:31,861 DA:36,865 DA:37,865 LF:13 @@ -26537,18 +26541,18 @@ BRDA:11,7,0,867 BRDA:11,7,1,867 BRDA:12,8,0,865 BRDA:12,8,1,2 -BRDA:15,9,0,860 -BRDA:15,9,1,5 +BRDA:15,9,0,861 +BRDA:15,9,1,4 BRDA:21,10,0,0 -BRDA:21,10,1,860 -BRDA:22,11,0,860 +BRDA:21,10,1,861 +BRDA:22,11,0,861 BRDA:22,11,1,684 -BRDA:22,11,2,176 -BRDA:22,11,3,176 +BRDA:22,11,2,177 +BRDA:22,11,3,177 BRDA:22,11,4,0 BRDA:22,11,5,0 BRDA:22,11,6,0 -BRDA:23,12,0,176 +BRDA:23,12,0,177 BRDA:23,12,1,0 BRDA:36,13,0,865 BRDA:36,13,1,0 @@ -26763,13 +26767,13 @@ FN:10,getSelectionPath FN:38,getPositionPath FNF:2 FNH:2 -FNDA:5246,getSelectionPath +FNDA:5247,getSelectionPath FNDA:818,getPositionPath DA:1,1 DA:2,1 DA:10,1 -DA:14,5246 -DA:15,4837 +DA:14,5247 +DA:15,4838 DA:18,409 DA:23,409 DA:39,818 @@ -26803,7 +26807,7 @@ DA:84,2001 DA:87,816 LF:36 LH:35 -BRDA:14,0,0,4837 +BRDA:14,0,0,4838 BRDA:14,0,1,409 BRDA:39,1,0,0 BRDA:39,1,1,818 @@ -26982,43 +26986,43 @@ FN:95,compareSnapshots FN:99,defaultCompare FNF:6 FNH:6 -FNDA:5272,addSnapshot +FNDA:5273,addSnapshot FNDA:27,(anonymous_1) -FNDA:5248,addSnapshotV2 -FNDA:5214,(anonymous_3) +FNDA:5249,addSnapshotV2 +FNDA:5215,(anonymous_3) FNDA:452,compareSnapshots FNDA:10,defaultCompare DA:1,1 DA:32,1 -DA:39,5272 -DA:40,5272 -DA:42,5272 -DA:43,5272 -DA:45,5272 -DA:46,5236 -DA:47,5236 -DA:48,5236 -DA:49,5236 -DA:51,5236 -DA:52,5236 +DA:39,5273 +DA:40,5273 +DA:42,5273 +DA:43,5273 +DA:45,5273 +DA:46,5237 +DA:47,5237 +DA:48,5237 +DA:49,5237 +DA:51,5237 +DA:52,5237 DA:56,3 DA:57,3 -DA:60,5236 +DA:60,5237 DA:61,3 DA:62,3 DA:63,3 -DA:66,5236 +DA:66,5237 DA:67,24 DA:69,36 DA:71,36 DA:81,1 -DA:86,5248 -DA:90,5214 +DA:86,5249 +DA:90,5215 DA:96,452 DA:100,10 LF:28 LH:28 -BRDA:39,0,0,5272 +BRDA:39,0,0,5273 BRDA:39,0,1,24 BRDA:39,1,0,27 BRDA:39,1,1,4 @@ -27026,29 +27030,29 @@ BRDA:39,2,0,0 BRDA:39,2,1,27 BRDA:39,3,0,27 BRDA:39,3,1,27 -BRDA:40,4,0,5272 +BRDA:40,4,0,5273 BRDA:40,4,1,24 -BRDA:43,5,0,5272 +BRDA:43,5,0,5273 BRDA:43,5,1,462 -BRDA:45,6,0,5236 +BRDA:45,6,0,5237 BRDA:45,6,1,36 -BRDA:45,7,0,5272 +BRDA:45,7,0,5273 BRDA:45,7,1,465 BRDA:45,7,2,462 -BRDA:53,8,0,5239 -BRDA:53,8,1,5238 +BRDA:53,8,0,5240 +BRDA:53,8,1,5239 BRDA:60,9,0,3 -BRDA:60,9,1,5233 +BRDA:60,9,1,5234 BRDA:66,10,0,24 -BRDA:66,10,1,5212 +BRDA:66,10,1,5213 BRDA:69,11,0,36 BRDA:69,11,1,0 -BRDA:90,12,0,5214 -BRDA:90,12,1,4786 +BRDA:90,12,0,5215 +BRDA:90,12,1,4787 BRDA:90,13,0,0 -BRDA:90,13,1,5214 -BRDA:90,14,0,5214 -BRDA:90,14,1,5214 +BRDA:90,13,1,5215 +BRDA:90,14,0,5215 +BRDA:90,14,1,5215 BRDA:96,15,0,452 BRDA:96,15,1,35 BRDA:96,15,2,35 @@ -27060,14 +27064,14 @@ SF:packages/roosterjs-editor-dom/lib/snapshots/canMoveCurrentSnapshot.ts FN:9,canMoveCurrentSnapshot FNF:1 FNH:1 -FNDA:15580,canMoveCurrentSnapshot +FNDA:15583,canMoveCurrentSnapshot DA:9,1 -DA:13,15580 -DA:14,15580 +DA:13,15583 +DA:14,15583 LF:3 LH:3 -BRDA:14,0,0,15580 -BRDA:14,0,1,10768 +BRDA:14,0,0,15583 +BRDA:14,0,1,10770 BRF:2 BRH:2 end_of_record @@ -27094,14 +27098,14 @@ FN:43,clearProceedingSnapshotsV2 FN:44,(anonymous_3) FNF:4 FNH:3 -FNDA:5925,clearProceedingSnapshots +FNDA:5926,clearProceedingSnapshots FNDA:3,(anonymous_1) FNDA:683,clearProceedingSnapshotsV2 FNDA:0,(anonymous_3) DA:1,1 DA:23,1 -DA:27,5925 -DA:28,5925 +DA:27,5926 +DA:28,5926 DA:29,5 DA:30,5 DA:31,5 @@ -27112,7 +27116,7 @@ DA:43,1 DA:44,683 LF:12 LH:12 -BRDA:27,0,0,5925 +BRDA:27,0,0,5926 BRDA:27,0,1,6 BRDA:27,1,0,3 BRDA:27,1,1,0 @@ -27121,7 +27125,7 @@ BRDA:27,2,1,3 BRDA:27,3,0,3 BRDA:27,3,1,3 BRDA:28,4,0,5 -BRDA:28,4,1,5920 +BRDA:28,4,1,5921 BRDA:44,5,0,0 BRDA:44,5,1,0 BRDA:44,6,0,0 @@ -27136,9 +27140,9 @@ SF:packages/roosterjs-editor-dom/lib/snapshots/createSnapshots.ts FN:7,createSnapshots FNF:1 FNH:1 -FNDA:5015,createSnapshots +FNDA:5016,createSnapshots DA:7,1 -DA:8,5015 +DA:8,5016 LF:2 LH:2 BRF:0 @@ -27203,15 +27207,15 @@ SF:packages/roosterjs-editor-dom/lib/style/removeGlobalCssStyle.ts FN:7,removeGlobalCssStyle FNF:1 FNH:1 -FNDA:10968,removeGlobalCssStyle +FNDA:10970,removeGlobalCssStyle DA:7,1 -DA:8,10968 -DA:9,10968 +DA:8,10970 +DA:9,10970 DA:10,124 LF:4 LH:4 BRDA:9,0,0,124 -BRDA:9,0,1,10844 +BRDA:9,0,1,10846 BRDA:10,1,0,0 BRDA:10,1,1,124 BRDA:10,2,0,124 @@ -28708,52 +28712,52 @@ SF:packages/roosterjs-editor-dom/lib/utils/applyFormat.ts FN:11,applyFormat FNF:1 FNH:1 -FNDA:4787,applyFormat +FNDA:4788,applyFormat DA:1,1 DA:11,1 -DA:17,4787 -DA:18,4787 -DA:29,43083 -DA:31,4787 -DA:32,4743 -DA:34,4787 -DA:35,4749 -DA:38,4787 -DA:39,4742 +DA:17,4788 +DA:18,4788 +DA:29,43092 +DA:31,4788 +DA:32,4744 +DA:34,4788 +DA:35,4750 +DA:38,4788 +DA:39,4743 DA:47,45 DA:48,0 -DA:58,4787 +DA:58,4788 DA:59,1 -DA:67,4786 +DA:67,4787 DA:68,0 -DA:78,4787 +DA:78,4788 DA:79,6 -DA:81,4787 +DA:81,4788 DA:82,1 -DA:84,4787 +DA:84,4788 DA:85,1 LF:23 LH:21 -BRDA:17,0,0,4787 +BRDA:17,0,0,4788 BRDA:17,0,1,0 -BRDA:31,1,0,4743 +BRDA:31,1,0,4744 BRDA:31,1,1,44 -BRDA:34,2,0,4749 +BRDA:34,2,0,4750 BRDA:34,2,1,38 -BRDA:38,3,0,4742 +BRDA:38,3,0,4743 BRDA:38,3,1,45 BRDA:47,4,0,0 BRDA:47,4,1,45 BRDA:58,5,0,1 -BRDA:58,5,1,4786 +BRDA:58,5,1,4787 BRDA:67,6,0,0 -BRDA:67,6,1,4786 +BRDA:67,6,1,4787 BRDA:78,7,0,6 -BRDA:78,7,1,4781 +BRDA:78,7,1,4782 BRDA:81,8,0,1 -BRDA:81,8,1,4786 +BRDA:81,8,1,4787 BRDA:84,9,0,1 -BRDA:84,9,1,4786 +BRDA:84,9,1,4787 BRF:20 BRH:17 end_of_record @@ -28874,25 +28878,25 @@ FN:30,contains FN:63,internalContains FNF:2 FNH:2 -FNDA:44666,contains -FNDA:26713,internalContains +FNDA:44669,contains +FNDA:26714,internalContains DA:1,1 DA:30,1 -DA:35,44666 -DA:36,6785 -DA:39,37881 +DA:35,44669 +DA:36,6786 +DA:39,37883 DA:40,5190 -DA:43,32691 +DA:43,32693 DA:44,3101 DA:45,3101 -DA:48,32691 +DA:48,32693 DA:49,10543 DA:50,10543 -DA:53,32691 +DA:53,32693 DA:54,992 -DA:57,31699 -DA:64,26713 -DA:65,26713 +DA:57,31701 +DA:64,26714 +DA:65,26714 DA:67,0 DA:68,0 DA:69,0 @@ -28900,33 +28904,33 @@ DA:72,0 DA:75,0 LF:22 LH:17 -BRDA:35,0,0,6785 -BRDA:35,0,1,37881 -BRDA:35,1,0,44666 -BRDA:35,1,1,44655 +BRDA:35,0,0,6786 +BRDA:35,0,1,37883 +BRDA:35,1,0,44669 +BRDA:35,1,1,44658 BRDA:39,2,0,5190 -BRDA:39,2,1,32691 -BRDA:39,3,0,37881 -BRDA:39,3,1,14689 +BRDA:39,2,1,32693 +BRDA:39,3,0,37883 +BRDA:39,3,1,14690 BRDA:43,4,0,3101 -BRDA:43,4,1,29590 +BRDA:43,4,1,29592 BRDA:44,5,0,3101 BRDA:44,5,1,3101 BRDA:48,6,0,10543 -BRDA:48,6,1,22148 -BRDA:48,7,0,32691 -BRDA:48,7,1,32691 +BRDA:48,6,1,22150 +BRDA:48,7,0,32693 +BRDA:48,7,1,32693 BRDA:53,8,0,992 -BRDA:53,8,1,31699 -BRDA:53,9,0,32691 +BRDA:53,8,1,31701 +BRDA:53,9,0,32693 BRDA:53,9,1,1114 BRDA:54,10,0,992 BRDA:54,10,1,970 -BRDA:58,11,0,31699 -BRDA:58,11,1,26713 -BRDA:58,12,0,31699 -BRDA:58,12,1,11098 -BRDA:64,13,0,26713 +BRDA:58,11,0,31701 +BRDA:58,11,1,26714 +BRDA:58,12,0,31701 +BRDA:58,12,1,11099 +BRDA:64,13,0,26714 BRDA:64,13,1,0 BRDA:68,14,0,0 BRDA:68,14,1,0 @@ -28941,69 +28945,69 @@ FN:112,(anonymous_2) FN:118,(anonymous_3) FNF:4 FNH:4 -FNDA:10692,createElement +FNDA:10694,createElement FNDA:163,(anonymous_1) FNDA:231,(anonymous_2) -FNDA:5781,(anonymous_3) +FNDA:5782,(anonymous_3) DA:1,1 DA:2,1 DA:3,1 DA:10,1 DA:77,1 -DA:84,10692 -DA:85,4858 -DA:88,10692 +DA:84,10694 +DA:85,4859 +DA:88,10694 DA:89,1 -DA:92,74837 -DA:93,10691 -DA:97,10691 +DA:92,74851 +DA:93,10693 +DA:97,10693 DA:98,405 -DA:101,10691 +DA:101,10693 DA:102,374 -DA:105,10691 +DA:105,10693 DA:106,83 DA:107,163 -DA:111,10691 +DA:111,10693 DA:112,84 DA:113,231 -DA:117,10691 -DA:118,5606 -DA:119,5781 +DA:117,10693 +DA:118,5607 +DA:119,5782 DA:120,377 -DA:121,5404 -DA:122,5403 -DA:123,5403 -DA:124,5403 -DA:130,10691 +DA:121,5405 +DA:122,5404 +DA:123,5404 +DA:124,5404 +DA:130,10693 LF:30 LH:30 BRDA:16,0,0,0 BRDA:16,0,1,1 -BRDA:84,1,0,4858 -BRDA:84,1,1,5834 +BRDA:84,1,0,4859 +BRDA:84,1,1,5835 BRDA:88,2,0,1 -BRDA:88,2,1,10691 -BRDA:88,3,0,10692 -BRDA:88,3,1,10691 +BRDA:88,2,1,10693 +BRDA:88,3,0,10694 +BRDA:88,3,1,10693 BRDA:94,4,0,109 -BRDA:94,4,1,10582 +BRDA:94,4,1,10584 BRDA:97,5,0,405 -BRDA:97,5,1,10286 +BRDA:97,5,1,10288 BRDA:101,6,0,374 -BRDA:101,6,1,10317 +BRDA:101,6,1,10319 BRDA:105,7,0,83 -BRDA:105,7,1,10608 -BRDA:105,8,0,10691 +BRDA:105,7,1,10610 +BRDA:105,8,0,10693 BRDA:105,8,1,83 BRDA:111,9,0,84 -BRDA:111,9,1,10607 -BRDA:117,10,0,5606 -BRDA:117,10,1,5085 +BRDA:111,9,1,10609 +BRDA:117,10,0,5607 +BRDA:117,10,1,5086 BRDA:119,11,0,377 -BRDA:119,11,1,5404 -BRDA:121,12,0,5403 +BRDA:119,11,1,5405 +BRDA:121,12,0,5404 BRDA:121,12,1,1 -BRDA:123,13,0,5403 +BRDA:123,13,0,5404 BRDA:123,13,1,0 BRF:28 BRH:26 @@ -29013,41 +29017,41 @@ SF:packages/roosterjs-editor-dom/lib/utils/findClosestElementAncestor.ts FN:13,findClosestElementAncestor FNF:1 FNH:1 -FNDA:26031,findClosestElementAncestor +FNDA:26034,findClosestElementAncestor DA:1,1 DA:2,1 DA:13,1 -DA:18,26031 -DA:19,26031 -DA:21,26031 -DA:22,6912 -DA:23,6912 +DA:18,26034 +DA:19,26034 +DA:21,26034 +DA:22,6913 +DA:23,6913 DA:25,0 DA:26,0 -DA:31,26031 +DA:31,26034 LF:11 LH:9 BRDA:18,0,0,30 -BRDA:18,0,1,26001 -BRDA:18,1,0,20960 +BRDA:18,0,1,26004 +BRDA:18,1,0,20963 BRDA:18,1,1,5041 -BRDA:19,2,0,25862 +BRDA:19,2,0,25865 BRDA:19,2,1,169 -BRDA:19,3,0,26031 -BRDA:19,3,1,25862 -BRDA:21,4,0,6912 -BRDA:21,4,1,19119 -BRDA:21,5,0,26031 -BRDA:21,5,1,25862 -BRDA:22,6,0,6912 +BRDA:19,3,0,26034 +BRDA:19,3,1,25865 +BRDA:21,4,0,6913 +BRDA:21,4,1,19121 +BRDA:21,5,0,26034 +BRDA:21,5,1,25865 +BRDA:22,6,0,6913 BRDA:22,6,1,0 BRDA:25,7,0,0 BRDA:25,7,1,0 BRDA:25,7,2,0 -BRDA:31,8,0,20256 -BRDA:31,8,1,5775 -BRDA:31,9,0,26031 -BRDA:31,9,1,6804 +BRDA:31,8,0,20258 +BRDA:31,8,1,5776 +BRDA:31,9,0,26034 +BRDA:31,9,1,6805 BRF:21 BRH:17 end_of_record @@ -29345,15 +29349,15 @@ SF:packages/roosterjs-editor-dom/lib/utils/getTagOfNode.ts FN:8,getTagOfNode FNF:1 FNH:1 -FNDA:33044,getTagOfNode +FNDA:33045,getTagOfNode DA:8,1 -DA:9,33044 +DA:9,33045 LF:2 LH:2 -BRDA:9,0,0,23571 +BRDA:9,0,0,23572 BRDA:9,0,1,9473 -BRDA:9,1,0,33044 -BRDA:9,1,1,32976 +BRDA:9,1,0,33045 +BRDA:9,1,1,32977 BRF:4 BRH:4 end_of_record @@ -29529,24 +29533,24 @@ SF:packages/roosterjs-editor-dom/lib/utils/moveChildNodes.ts FN:7,moveChildNodes FNF:1 FNH:1 -FNDA:825,moveChildNodes +FNDA:826,moveChildNodes DA:7,1 -DA:12,825 +DA:12,826 DA:13,4 -DA:16,821 +DA:16,822 DA:17,515 -DA:20,821 +DA:20,822 DA:21,355 LF:7 LH:7 BRDA:12,0,0,4 -BRDA:12,0,1,821 -BRDA:16,1,0,1336 -BRDA:16,1,1,1320 -BRDA:20,2,0,522 +BRDA:12,0,1,822 +BRDA:16,1,0,1337 +BRDA:16,1,1,1321 +BRDA:20,2,0,523 BRDA:20,2,1,654 -BRDA:20,3,0,1176 -BRDA:20,3,1,1172 +BRDA:20,3,0,1177 +BRDA:20,3,1,1173 BRF:8 BRH:8 end_of_record @@ -29616,18 +29620,18 @@ FN:81,checkPosition FN:82,(anonymous_4) FNF:5 FNH:5 -FNDA:12132,queryElements +FNDA:12134,queryElements FNDA:842,(anonymous_1) FNDA:842,isIntersectWithNodeRange FNDA:2794,checkPosition FNDA:5370,(anonymous_4) DA:1,1 DA:14,1 -DA:18,12807 -DA:21,12132 +DA:18,12809 +DA:21,12134 DA:22,6 -DA:25,12126 -DA:27,12126 +DA:25,12128 +DA:27,12128 DA:28,1916 DA:29,479 DA:30,263 @@ -29635,9 +29639,9 @@ DA:34,263 DA:37,479 DA:42,479 DA:43,842 -DA:52,12126 +DA:52,12128 DA:53,898 -DA:55,12126 +DA:55,12128 DA:64,842 DA:65,842 DA:66,842 @@ -29649,14 +29653,14 @@ DA:83,5370 LF:25 LH:25 BRDA:18,0,0,675 -BRDA:18,0,1,11457 +BRDA:18,0,1,11459 BRDA:21,1,0,6 -BRDA:21,1,1,12126 -BRDA:21,2,0,12132 -BRDA:21,2,1,12129 +BRDA:21,1,1,12128 +BRDA:21,2,0,12134 +BRDA:21,2,1,12131 BRDA:27,3,0,479 -BRDA:27,3,1,11647 -BRDA:27,4,0,12126 +BRDA:27,3,1,11649 +BRDA:27,4,0,12128 BRDA:27,4,1,479 BRDA:29,5,0,263 BRDA:29,5,1,216 @@ -29670,7 +29674,7 @@ BRDA:38,9,0,479 BRDA:38,9,1,291 BRDA:38,9,2,267 BRDA:52,10,0,898 -BRDA:52,10,1,11228 +BRDA:52,10,1,11230 BRDA:68,11,0,611 BRDA:68,11,1,231 BRDA:73,12,0,842 @@ -29714,45 +29718,45 @@ FN:11,getTargetWindow FN:29,safeInstanceOf FNF:2 FNH:2 -FNDA:23029,getTargetWindow -FNDA:56316,safeInstanceOf +FNDA:23031,getTargetWindow +FNDA:56320,safeInstanceOf DA:11,1 -DA:13,23029 -DA:20,23029 -DA:21,23029 +DA:13,23031 +DA:20,23031 +DA:21,23031 DA:29,1 -DA:33,56316 -DA:34,33289 -DA:40,23027 -DA:41,23027 -DA:42,23027 -DA:43,23027 -DA:44,23027 +DA:33,56320 +DA:34,33291 +DA:40,23029 +DA:41,23029 +DA:42,23029 +DA:43,23029 +DA:44,23029 LF:12 LH:12 -BRDA:13,0,0,23029 +BRDA:13,0,0,23031 BRDA:13,0,1,12828 BRDA:13,0,2,907 BRDA:16,1,0,0 BRDA:16,1,1,907 -BRDA:20,2,0,23029 +BRDA:20,2,0,23031 BRDA:20,2,1,11921 BRDA:20,2,2,665 -BRDA:33,3,0,33289 -BRDA:33,3,1,23027 -BRDA:35,4,0,33289 +BRDA:33,3,0,33291 +BRDA:33,3,1,23029 +BRDA:35,4,0,33291 BRDA:35,4,1,3259 BRDA:36,5,0,0 BRDA:36,5,1,3259 BRDA:36,6,0,3259 BRDA:36,6,1,3259 -BRDA:41,7,0,23027 +BRDA:41,7,0,23029 BRDA:41,7,1,11919 -BRDA:43,8,0,23027 -BRDA:43,8,1,23027 -BRDA:45,9,0,23027 -BRDA:45,9,1,23027 -BRDA:45,9,2,15087 +BRDA:43,8,0,23029 +BRDA:43,8,1,23029 +BRDA:45,9,0,23029 +BRDA:45,9,1,23029 +BRDA:45,9,2,15089 BRDA:45,9,3,3979 BRF:24 BRH:22 @@ -29767,7 +29771,7 @@ FN:131,calculateLightness FNF:5 FNH:5 FNDA:1,(anonymous_0) -FNDA:14478,setColor +FNDA:14481,setColor FNDA:58,adaptFontColorToBackgroundColor FNDA:7,isADarkOrBrightColor FNDA:7,calculateLightness @@ -29783,14 +29787,14 @@ DA:11,1 DA:15,1 DA:17,1 DA:29,1 -DA:37,14478 -DA:38,14478 -DA:39,14478 -DA:41,14478 -DA:42,14478 -DA:43,14415 -DA:49,14415 -DA:52,14478 +DA:37,14481 +DA:38,14481 +DA:39,14481 +DA:41,14481 +DA:42,14481 +DA:43,14418 +DA:49,14418 +DA:52,14481 DA:53,58 DA:77,58 DA:78,51 @@ -29820,31 +29824,31 @@ LH:40 BRDA:8,0,0,1 BRDA:8,0,1,1 BRDA:37,1,0,153 -BRDA:37,1,1,14325 +BRDA:37,1,1,14328 BRDA:38,2,0,153 -BRDA:38,2,1,14325 -BRDA:39,3,0,4876 -BRDA:39,3,1,9602 -BRDA:41,4,0,14478 +BRDA:38,2,1,14328 +BRDA:39,3,0,4877 +BRDA:39,3,1,9604 +BRDA:41,4,0,14481 BRDA:41,4,1,0 -BRDA:41,5,0,14478 -BRDA:41,5,1,14325 -BRDA:42,6,0,14415 +BRDA:41,5,0,14481 +BRDA:41,5,1,14328 +BRDA:42,6,0,14418 BRDA:42,6,1,63 -BRDA:44,7,0,14415 +BRDA:44,7,0,14418 BRDA:44,7,1,100 BRDA:44,8,0,100 -BRDA:44,8,1,14315 -BRDA:44,9,0,14415 -BRDA:44,9,1,14315 +BRDA:44,8,1,14318 +BRDA:44,9,0,14418 +BRDA:44,9,1,14318 BRDA:46,10,0,100 -BRDA:46,10,1,14315 -BRDA:46,11,0,14415 -BRDA:46,11,1,14315 +BRDA:46,10,1,14318 +BRDA:46,11,0,14418 +BRDA:46,11,1,14318 BRDA:52,12,0,58 -BRDA:52,12,1,14420 -BRDA:52,13,0,14478 -BRDA:52,13,1,4876 +BRDA:52,12,1,14423 +BRDA:52,13,0,14481 +BRDA:52,13,1,4877 BRDA:55,14,0,58 BRDA:55,14,1,58 BRDA:55,15,0,58 diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/context/createDomToModelContext.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/context/createDomToModelContext.ts.html index 4d8213036fe..79609aead40 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/context/createDomToModelContext.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/context/createDomToModelContext.ts.html @@ -379,7 +379,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/context/defaultProcessors.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/context/defaultProcessors.ts.html index 066a463d401..e42fe5e6ebc 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/context/defaultProcessors.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/context/defaultProcessors.ts.html @@ -253,7 +253,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/context/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/context/index.html index a7f6a84af3d..fffa361fd1b 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/context/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/context/index.html @@ -110,7 +110,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/domToContentModel.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/domToContentModel.ts.html index 4a72b679ce4..d29304b570b 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/domToContentModel.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/domToContentModel.ts.html @@ -208,7 +208,7 @@

All files / packag diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/index.html index 8cdf96feca2..82015cc0472 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/index.html @@ -95,7 +95,7 @@

All files packages-content-model/rooste diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/blockProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/blockProcessor.ts.html index 5660ca1e2b1..a71ccacf398 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/blockProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/blockProcessor.ts.html @@ -211,7 +211,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/brProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/brProcessor.ts.html index 9f98a6990de..d69730a079c 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/brProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/brProcessor.ts.html @@ -112,7 +112,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/childProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/childProcessor.ts.html index 7f8840a1788..333a8001843 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/childProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/childProcessor.ts.html @@ -310,7 +310,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/codeProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/codeProcessor.ts.html index 734ad3235cf..f47da4585bf 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/codeProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/codeProcessor.ts.html @@ -109,7 +109,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/delimiterProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/delimiterProcessor.ts.html index c62d1a300bb..1635577d08f 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/delimiterProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/delimiterProcessor.ts.html @@ -127,7 +127,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/elementProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/elementProcessor.ts.html index 09839026045..ea593fd7f91 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/elementProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/elementProcessor.ts.html @@ -163,7 +163,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/entityProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/entityProcessor.ts.html index cfcdedc88cc..ff99806e6c5 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/entityProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/entityProcessor.ts.html @@ -229,7 +229,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/fontProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/fontProcessor.ts.html index 4382b877577..34132a9d402 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/fontProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/fontProcessor.ts.html @@ -226,7 +226,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/formatContainerProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/formatContainerProcessor.ts.html index 60614887932..cc7b3aa4024 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/formatContainerProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/formatContainerProcessor.ts.html @@ -349,7 +349,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/generalProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/generalProcessor.ts.html index 666a2585ca6..f6091cbbd37 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/generalProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/generalProcessor.ts.html @@ -259,7 +259,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/headingProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/headingProcessor.ts.html index 1ba20db02f8..d7d522621fb 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/headingProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/headingProcessor.ts.html @@ -148,7 +148,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/hrProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/hrProcessor.ts.html index 8699d3c7675..a8483fc738c 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/hrProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/hrProcessor.ts.html @@ -160,7 +160,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/imageProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/imageProcessor.ts.html index 1bb94c5f603..28ee4a035e0 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/imageProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/imageProcessor.ts.html @@ -190,7 +190,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/index.html index 0ef2bf13f60..2b7ebb17763 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/index.html @@ -380,7 +380,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/knownElementProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/knownElementProcessor.ts.html index fb0bf7ea89a..17c80402046 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/knownElementProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/knownElementProcessor.ts.html @@ -466,7 +466,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/linkProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/linkProcessor.ts.html index 56bf2ce1d9e..23b1c309c70 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/linkProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/linkProcessor.ts.html @@ -127,7 +127,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/listItemProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/listItemProcessor.ts.html index bd8a86f3f84..a506fb1146f 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/listItemProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/listItemProcessor.ts.html @@ -265,7 +265,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/listProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/listProcessor.ts.html index 30e89492721..0012d729754 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/listProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/listProcessor.ts.html @@ -241,7 +241,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/pProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/pProcessor.ts.html index 6d0b6d5135c..a7f6d0d7ebd 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/pProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/pProcessor.ts.html @@ -151,7 +151,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/tableProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/tableProcessor.ts.html index 6308b4f25b0..00be6d528a2 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/tableProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/tableProcessor.ts.html @@ -838,7 +838,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/textProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/textProcessor.ts.html index 8864274cd0d..b66c96f42e8 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/textProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/textProcessor.ts.html @@ -310,7 +310,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/addSelectionMarker.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/addSelectionMarker.ts.html index 04f62236b9d..25f63d4768b 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/addSelectionMarker.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/addSelectionMarker.ts.html @@ -109,7 +109,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/areSameFormats.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/areSameFormats.ts.html index 238e9c73643..1abb18a1ec0 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/areSameFormats.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/areSameFormats.ts.html @@ -118,7 +118,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/getBoundingClientRect.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/getBoundingClientRect.ts.html index d2234e5a1da..39b7103a9a4 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/getBoundingClientRect.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/getBoundingClientRect.ts.html @@ -82,7 +82,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/getDefaultStyle.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/getDefaultStyle.ts.html index 02121e01aa1..d28494f949e 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/getDefaultStyle.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/getDefaultStyle.ts.html @@ -115,7 +115,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/getRegularSelectionOffsets.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/getRegularSelectionOffsets.ts.html index 4fbce23c3eb..c762a961747 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/getRegularSelectionOffsets.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/getRegularSelectionOffsets.ts.html @@ -136,7 +136,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/index.html index 38d7a0b8564..28b2d9d047f 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/index.html @@ -200,7 +200,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/isBlockElement.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/isBlockElement.ts.html index 105962c24ed..ae01e70bde8 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/isBlockElement.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/isBlockElement.ts.html @@ -112,7 +112,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/parseFormat.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/parseFormat.ts.html index ec54272a582..9b7f4da9959 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/parseFormat.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/parseFormat.ts.html @@ -142,7 +142,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/stackFormat.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/stackFormat.ts.html index 4767939a7b2..55da292da32 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/stackFormat.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/stackFormat.ts.html @@ -544,7 +544,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/index.html index d3c9100c816..9e92b2745bf 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/index.html @@ -110,7 +110,7 @@

All files packages-content-model/rooste diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/isNodeOfType.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/isNodeOfType.ts.html index c8c86410a47..7f578e9d7c5 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/isNodeOfType.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/isNodeOfType.ts.html @@ -235,7 +235,7 @@

All files / packag diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/metadata/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/metadata/index.html index 6d28ab6ab33..362c2f75be8 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/metadata/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/metadata/index.html @@ -110,7 +110,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/metadata/updateListMetadata.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/metadata/updateListMetadata.ts.html index 7a715a722b3..bffe46ff44a 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/metadata/updateListMetadata.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/metadata/updateListMetadata.ts.html @@ -172,7 +172,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/metadata/updateMetadata.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/metadata/updateMetadata.ts.html index 9ff805bc343..a18137b49d2 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/metadata/updateMetadata.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/metadata/updateMetadata.ts.html @@ -211,7 +211,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/stringUtil.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/stringUtil.ts.html index 53845d2a2eb..c7ed217c060 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/stringUtil.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/domUtils/stringUtil.ts.html @@ -193,7 +193,7 @@

All files / packag diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/directionFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/directionFormatHandler.ts.html index 426ee996afa..d0655a54162 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/directionFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/directionFormatHandler.ts.html @@ -92,7 +92,7 @@

All files / pac       -550x +551x 3x     @@ -124,7 +124,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/displayFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/displayFormatHandler.ts.html index 948460645cd..9f43f293ee4 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/displayFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/displayFormatHandler.ts.html @@ -92,7 +92,7 @@

All files / pac       -224x +225x 11x     @@ -124,7 +124,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/htmlAlignFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/htmlAlignFormatHandler.ts.html index 82044b69844..2bb3cffc119 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/htmlAlignFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/htmlAlignFormatHandler.ts.html @@ -110,9 +110,9 @@

All files / pac       -232x +233x   -232x +233x 8x     @@ -154,7 +154,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/index.html index f917c3c7d64..45b82bf96e7 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/index.html @@ -200,7 +200,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/lineHeightFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/lineHeightFormatHandler.ts.html index 1781f12d96f..b1f868c90c2 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/lineHeightFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/lineHeightFormatHandler.ts.html @@ -92,7 +92,7 @@

All files / pac       -831x +832x 7x     @@ -124,7 +124,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/marginFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/marginFormatHandler.ts.html index 937627b9e74..e57b9d81d87 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/marginFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/marginFormatHandler.ts.html @@ -144,10 +144,10 @@

All files / pac       -447x -1788x +448x +1792x   -1788x +1792x 171x     @@ -208,7 +208,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/paddingFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/paddingFormatHandler.ts.html index 3b4386eca38..355609d4844 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/paddingFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/paddingFormatHandler.ts.html @@ -160,7 +160,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/textAlignFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/textAlignFormatHandler.ts.html index 1b3d169bed0..8eace142f36 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/textAlignFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/textAlignFormatHandler.ts.html @@ -131,9 +131,9 @@

All files / pac       -591x +592x   -591x +592x 20x 20x   @@ -199,7 +199,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/whiteSpaceFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/whiteSpaceFormatHandler.ts.html index 61a45a6a351..82c03461ee7 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/whiteSpaceFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/whiteSpaceFormatHandler.ts.html @@ -93,8 +93,8 @@

All files / pac       -324x -324x +325x +325x 8x     @@ -127,7 +127,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/backgroundColorFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/backgroundColorFormatHandler.ts.html index dbd4962f347..b7a580a4f1f 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/backgroundColorFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/backgroundColorFormatHandler.ts.html @@ -112,7 +112,7 @@

All files / pac       -805x +807x 13x     @@ -163,7 +163,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/borderBoxFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/borderBoxFormatHandler.ts.html index da269e0a84c..c5d5c07dc17 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/borderBoxFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/borderBoxFormatHandler.ts.html @@ -88,7 +88,7 @@

All files / pac       -97x +98x 3x     @@ -118,7 +118,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/borderFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/borderFormatHandler.ts.html index 26b9ce361a4..2dcb0b527d4 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/borderFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/borderFormatHandler.ts.html @@ -122,10 +122,10 @@

All files / pac       -269x -1345x +270x +1350x   -1345x +1350x 16x     @@ -175,7 +175,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/boxShadowFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/boxShadowFormatHandler.ts.html index 2ee59123595..9c6ec90e866 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/boxShadowFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/boxShadowFormatHandler.ts.html @@ -118,7 +118,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/datasetFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/datasetFormatHandler.ts.html index f7f7a4c253b..49b673f06af 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/datasetFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/datasetFormatHandler.ts.html @@ -96,7 +96,7 @@

All files / pac       -226x +227x 14x     @@ -130,7 +130,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/idFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/idFormatHandler.ts.html index a869d0327e1..09cf1b06cd7 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/idFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/idFormatHandler.ts.html @@ -88,7 +88,7 @@

All files / pac       -44x +45x 3x     @@ -118,7 +118,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/index.html index e9b901731f9..8b226c7304e 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/index.html @@ -215,7 +215,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/sizeFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/sizeFormatHandler.ts.html index 5b1c3cdfa23..64cd72cb00a 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/sizeFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/sizeFormatHandler.ts.html @@ -162,22 +162,22 @@

All files / pac       -272x +273x 4x   -272x +273x 3x   -272x +273x 1x   -272x +273x 1x   -272x +273x 1x   -272x +273x 1x     @@ -268,7 +268,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/verticalAlignFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/verticalAlignFormatHandler.ts.html index b2605719d33..622f23edb1a 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/verticalAlignFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/verticalAlignFormatHandler.ts.html @@ -160,7 +160,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/wordBreakFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/wordBreakFormatHandler.ts.html index 7972121d798..7df90cd4bb9 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/wordBreakFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/wordBreakFormatHandler.ts.html @@ -124,7 +124,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/defaultFormatHandlers.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/defaultFormatHandlers.ts.html index 891bc2398b7..2bdf310328d 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/defaultFormatHandlers.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/defaultFormatHandlers.ts.html @@ -561,22 +561,22 @@

All files / packag     1x -790x -805x +792x +807x   -403x -8463x +404x +8484x     -49569x +49692x           -8463x +8484x   -8463x +8484x      
import { backgroundColorFormatHandler } from './common/backgroundColorFormatHandler';
@@ -847,7 +847,7 @@ 

All files / packag diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/index.html index 73c493a580e..f203a9d5020 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/index.html @@ -95,7 +95,7 @@

All files packages-content-model/rooste diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/index.html index 26ea6ef67f7..4fd86c874ac 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/index.html @@ -170,7 +170,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listItemMetadataFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listItemMetadataFormatHandler.ts.html index 11b3287c73a..abad6811aa4 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listItemMetadataFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listItemMetadataFormatHandler.ts.html @@ -376,7 +376,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listItemThreadFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listItemThreadFormatHandler.ts.html index 8704abef93a..e787933aaed 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listItemThreadFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listItemThreadFormatHandler.ts.html @@ -205,7 +205,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listLevelMetadataFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listLevelMetadataFormatHandler.ts.html index 5f1bae23975..221d72974ec 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listLevelMetadataFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listLevelMetadataFormatHandler.ts.html @@ -361,7 +361,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listLevelThreadFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listLevelThreadFormatHandler.ts.html index 2cf69fa4eac..3b613318e1a 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listLevelThreadFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listLevelThreadFormatHandler.ts.html @@ -196,7 +196,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listStylePositionFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listStylePositionFormatHandler.ts.html index 343b71aa326..27aa2d96e6b 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listStylePositionFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listStylePositionFormatHandler.ts.html @@ -124,7 +124,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listTypeFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listTypeFormatHandler.ts.html index 55c17c17240..f3db5f8ad24 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listTypeFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listTypeFormatHandler.ts.html @@ -115,7 +115,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/root/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/root/index.html index b5ce314ef53..8665f295312 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/root/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/root/index.html @@ -110,7 +110,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/root/rootDirectionFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/root/rootDirectionFormatHandler.ts.html index dc5efa30362..f90cd7a2ff7 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/root/rootDirectionFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/root/rootDirectionFormatHandler.ts.html @@ -112,7 +112,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/root/zoomScaleFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/root/zoomScaleFormatHandler.ts.html index 342bddcd106..15516a0b6fc 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/root/zoomScaleFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/root/zoomScaleFormatHandler.ts.html @@ -118,7 +118,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/boldFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/boldFormatHandler.ts.html index f2b8b955cbd..623d1795e21 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/boldFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/boldFormatHandler.ts.html @@ -172,7 +172,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/fontFamilyFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/fontFamilyFormatHandler.ts.html index cd1e7546524..52d84a69aa3 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/fontFamilyFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/fontFamilyFormatHandler.ts.html @@ -124,7 +124,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/fontSizeFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/fontSizeFormatHandler.ts.html index d9873541624..e759031b7c3 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/fontSizeFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/fontSizeFormatHandler.ts.html @@ -136,7 +136,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/index.html index 517ee467ed3..7be8be9dcba 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/index.html @@ -230,7 +230,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/italicFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/italicFormatHandler.ts.html index 9a865830fa1..e9721b74d08 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/italicFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/italicFormatHandler.ts.html @@ -169,7 +169,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/letterSpacingFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/letterSpacingFormatHandler.ts.html index 28ad1429a7d..b939587bc05 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/letterSpacingFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/letterSpacingFormatHandler.ts.html @@ -124,7 +124,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/linkFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/linkFormatHandler.ts.html index ce5e5570df0..421729505ce 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/linkFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/linkFormatHandler.ts.html @@ -295,7 +295,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/strikeFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/strikeFormatHandler.ts.html index 98883c9960e..a133f9bbeb9 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/strikeFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/strikeFormatHandler.ts.html @@ -133,7 +133,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/superOrSubScriptFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/superOrSubScriptFormatHandler.ts.html index ae3a4bad363..943fd7aa646 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/superOrSubScriptFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/superOrSubScriptFormatHandler.ts.html @@ -205,7 +205,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/textColorFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/textColorFormatHandler.ts.html index 96f25ecb69b..2a4f5845f4e 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/textColorFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/textColorFormatHandler.ts.html @@ -169,7 +169,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/underlineFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/underlineFormatHandler.ts.html index 3bb736fcef0..06f278c3983 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/underlineFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/underlineFormatHandler.ts.html @@ -169,7 +169,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/index.html index c35e357df62..c08216fdc5e 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/index.html @@ -125,7 +125,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/tableLayoutFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/tableLayoutFormatHandler.ts.html index bde0423099d..72a9a843991 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/tableLayoutFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/tableLayoutFormatHandler.ts.html @@ -90,7 +90,7 @@

All files / pac       -35x +36x 1x     @@ -121,7 +121,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/tableSpacingFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/tableSpacingFormatHandler.ts.html index f7abf4ac60a..0b5692ea725 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/tableSpacingFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/tableSpacingFormatHandler.ts.html @@ -94,7 +94,7 @@

All files / pac       -35x +36x 2x 2x 2x @@ -130,7 +130,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/textColorOnTableCellFormatHandler.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/textColorOnTableCellFormatHandler.ts.html index 42c55baee4f..b007cbed6b8 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/textColorOnTableCellFormatHandler.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/textColorOnTableCellFormatHandler.ts.html @@ -115,7 +115,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/color.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/color.ts.html index 9dba9295d5d..b96967a06c4 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/color.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/color.ts.html @@ -283,7 +283,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/defaultStyles.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/defaultStyles.ts.html index 4caed24c376..76ca044d8d2 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/defaultStyles.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/defaultStyles.ts.html @@ -637,7 +637,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/dir.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/dir.ts.html index 9d367347c07..53bd7d902fb 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/dir.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/dir.ts.html @@ -220,7 +220,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/index.html index 7dde1802880..e42359a1c93 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/index.html @@ -140,7 +140,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/parseValueWithUnit.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/parseValueWithUnit.ts.html index a41a2eadafe..38be59ccbe2 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/parseValueWithUnit.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/parseValueWithUnit.ts.html @@ -262,7 +262,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/index.html index a3846ce325a..2f659b4150c 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/index.html @@ -95,7 +95,7 @@

All files packages-content-model/roosterjs diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/index.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/index.ts.html index 474a4dac3e0..cfa777c6209 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/index.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/index.ts.html @@ -220,7 +220,7 @@

All files / packages- diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/block/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/block/index.html index 8ccac33a21b..e0fc10fe6d2 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/block/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/block/index.html @@ -95,7 +95,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/block/setParagraphNotImplicit.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/block/setParagraphNotImplicit.ts.html index 5be5ba07d41..0ee8b91b730 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/block/setParagraphNotImplicit.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/block/setParagraphNotImplicit.ts.html @@ -97,7 +97,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/addBlock.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/addBlock.ts.html index 13f41dafefc..fc16929d432 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/addBlock.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/addBlock.ts.html @@ -94,7 +94,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/addDecorators.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/addDecorators.ts.html index 1d2ef707cfc..c328bd7c514 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/addDecorators.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/addDecorators.ts.html @@ -181,7 +181,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/addSegment.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/addSegment.ts.html index 31e281e4b95..69f019ad745 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/addSegment.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/addSegment.ts.html @@ -196,7 +196,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/index.html index 0ce561dc952..88939e91e3f 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/index.html @@ -230,7 +230,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/isEmpty.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/isEmpty.ts.html index aa50f9784b2..1488e591d21 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/isEmpty.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/isEmpty.ts.html @@ -167,12 +167,12 @@

All files / pac     1x -843x +844x   635x     -60x +61x     147x @@ -364,7 +364,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/isGeneralSegment.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/isGeneralSegment.ts.html index 798bd66d583..439d89b0411 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/isGeneralSegment.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/isGeneralSegment.ts.html @@ -106,7 +106,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/isWhiteSpacePreserved.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/isWhiteSpacePreserved.ts.html index 0cde6a9e2fb..225fa9ba3e0 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/isWhiteSpacePreserved.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/isWhiteSpacePreserved.ts.html @@ -112,7 +112,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/normalizeContentModel.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/normalizeContentModel.ts.html index 62704f05f35..29d4c940d64 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/normalizeContentModel.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/normalizeContentModel.ts.html @@ -202,7 +202,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/normalizeParagraph.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/normalizeParagraph.ts.html index c08b56915f3..e89220c12a4 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/normalizeParagraph.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/normalizeParagraph.ts.html @@ -211,7 +211,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/normalizeSegment.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/normalizeSegment.ts.html index 817bbbafce0..62c192945b7 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/normalizeSegment.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/normalizeSegment.ts.html @@ -532,7 +532,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/unwrapBlock.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/unwrapBlock.ts.html index 209f46582e2..2033b9db5b6 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/unwrapBlock.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/unwrapBlock.ts.html @@ -124,7 +124,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createBr.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createBr.ts.html index 8a32cdb0153..75a202d066b 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createBr.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createBr.ts.html @@ -100,7 +100,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createContentModelDocument.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createContentModelDocument.ts.html index ceefcb90286..59bd585ab50 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createContentModelDocument.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createContentModelDocument.ts.html @@ -124,7 +124,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createDivider.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createDivider.ts.html index 03825a82d59..5aba40638d6 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createDivider.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createDivider.ts.html @@ -115,7 +115,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createEntity.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createEntity.ts.html index 8e03ece6160..bd7942a7d4d 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createEntity.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createEntity.ts.html @@ -151,7 +151,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createFormatContainer.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createFormatContainer.ts.html index 442fc86f097..33d8eaf8532 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createFormatContainer.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createFormatContainer.ts.html @@ -130,7 +130,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createGeneralBlock.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createGeneralBlock.ts.html index 31c2668e0f4..c0a4d8de317 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createGeneralBlock.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createGeneralBlock.ts.html @@ -109,7 +109,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createGeneralSegment.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createGeneralSegment.ts.html index f5dd49f6d19..8b6ceff85c8 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createGeneralSegment.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createGeneralSegment.ts.html @@ -133,7 +133,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createImage.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createImage.ts.html index fb5b0e09c3c..cb6324921b9 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createImage.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createImage.ts.html @@ -109,7 +109,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createListItem.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createListItem.ts.html index 51bb38e2b96..b8ee2001509 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createListItem.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createListItem.ts.html @@ -139,7 +139,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createParagraph.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createParagraph.ts.html index f7270a69de5..ce3ecfa81a1 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createParagraph.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createParagraph.ts.html @@ -193,7 +193,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createParagraphDecorator.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createParagraphDecorator.ts.html index 5d8a9fa92da..65750e937f4 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createParagraphDecorator.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createParagraphDecorator.ts.html @@ -121,7 +121,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createSelectionMarker.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createSelectionMarker.ts.html index 4cb7895fe44..7f627e3eb32 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createSelectionMarker.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createSelectionMarker.ts.html @@ -118,7 +118,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createTable.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createTable.ts.html index 8f56f7887d3..094bd98999c 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createTable.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createTable.ts.html @@ -99,17 +99,17 @@

All files / pac     1x -232x +233x   -232x -366x +233x +367x             -232x +233x       @@ -154,7 +154,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createTableCell.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createTableCell.ts.html index 93bebcca0f6..76d728c56bf 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createTableCell.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createTableCell.ts.html @@ -102,10 +102,10 @@

All files / pac       -850x +851x   -850x -850x +851x +851x       @@ -151,7 +151,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createText.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createText.ts.html index e07d4330798..4a03e777e10 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createText.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createText.ts.html @@ -106,7 +106,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/index.html index f2fcbd84213..9dcd3fd2c7c 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/index.html @@ -305,7 +305,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/contentModelToDom.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/contentModelToDom.ts.html index 0785280b8e9..dc07d8d34f6 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/contentModelToDom.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/contentModelToDom.ts.html @@ -415,7 +415,7 @@

All files / packag diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/context/createModelToDomContext.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/context/createModelToDomContext.ts.html index 6b67bd60ed1..ed76e96798d 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/context/createModelToDomContext.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/context/createModelToDomContext.ts.html @@ -126,9 +126,9 @@

All files / pac       -401x +402x   -401x +402x       @@ -220,7 +220,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/context/defaultContentModelHandlers.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/context/defaultContentModelHandlers.ts.html index 710f7893415..239f1e83bc6 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/context/defaultContentModelHandlers.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/context/defaultContentModelHandlers.ts.html @@ -175,7 +175,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/context/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/context/index.html index ea1b20a4445..71d4e81257a 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/context/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/context/index.html @@ -110,7 +110,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBlock.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBlock.ts.html index 940aea0f4b9..28b342a526c 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBlock.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBlock.ts.html @@ -217,7 +217,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBlockGroupChildren.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBlockGroupChildren.ts.html index 3ab05ba24b3..7042ec0c61a 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBlockGroupChildren.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBlockGroupChildren.ts.html @@ -119,12 +119,12 @@

All files / pac       -306x -306x -306x +307x +307x +307x   -306x -306x +307x +307x       @@ -141,14 +141,14 @@

All files / pac       -306x +307x 3x   3x 3x     -306x +307x      
import {
@@ -205,7 +205,7 @@ 

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBr.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBr.ts.html index 4bec838d1c4..82f5aeda0c6 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBr.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBr.ts.html @@ -133,7 +133,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleDivider.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleDivider.ts.html index a687fb6f507..ee5f025be51 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleDivider.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleDivider.ts.html @@ -181,7 +181,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleEntity.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleEntity.ts.html index b009cedddb0..09fccd29060 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleEntity.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleEntity.ts.html @@ -247,7 +247,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleFormatContainer.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleFormatContainer.ts.html index 1d9f5f2efc5..f930e39f7c4 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleFormatContainer.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleFormatContainer.ts.html @@ -250,7 +250,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleGeneralModel.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleGeneralModel.ts.html index 9b59e7b968a..28b8e34c8ed 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleGeneralModel.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleGeneralModel.ts.html @@ -199,7 +199,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleImage.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleImage.ts.html index 8e7ea0a42f1..ef5a59a0119 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleImage.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleImage.ts.html @@ -235,7 +235,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleList.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleList.ts.html index 5d0b27d01a7..63bae6a02d5 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleList.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleList.ts.html @@ -316,7 +316,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleListItem.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleListItem.ts.html index 763e5f31bf5..9eebb704f5c 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleListItem.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleListItem.ts.html @@ -217,7 +217,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleParagraph.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleParagraph.ts.html index 4feec08c31a..cff19f7c47a 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleParagraph.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleParagraph.ts.html @@ -415,7 +415,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleSegment.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleSegment.ts.html index 66029ad41a3..876a29197cb 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleSegment.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleSegment.ts.html @@ -226,7 +226,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleSegmentDecorator.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleSegmentDecorator.ts.html index 75013bfbc96..95bcb363ea7 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleSegmentDecorator.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleSegmentDecorator.ts.html @@ -193,7 +193,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleTable.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleTable.ts.html index 04fddd3b0a5..1690d0cabf3 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleTable.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleTable.ts.html @@ -30,9 +30,9 @@

All files / pac
- 92.06% + 92.54% Branches - 58/63 + 62/67
@@ -216,57 +216,57 @@

All files / pac       -37x +38x   2x     -35x +36x   -35x +36x 2x   2x   -33x +34x   -33x -33x +34x +34x   -33x -33x -33x -33x +34x +34x +34x +34x     -35x +36x   -35x -35x +36x +36x   -35x -47x +36x +48x   -47x +48x   1x     -46x -46x -46x +47x +47x +47x   +47x +46x 46x -45x -45x     -46x +47x   -46x -67x +47x +68x   -67x +68x       @@ -281,32 +281,32 @@

All files / pac       -67x -58x +68x +59x   -58x +59x   -58x -58x -58x -58x +59x +59x +59x +59x   -58x +59x 4x   -58x +59x 4x     -58x +59x 4x     -58x +59x 4x     -58x +59x 55x 4x   @@ -316,7 +316,7 @@

All files / pac       -58x +59x 54x 54x 54x @@ -324,14 +324,14 @@

All files / pac 54x     -58x +59x   -58x +59x         -35x +36x    
import { applyFormat } from '../utils/applyFormat';
 import { hasMetadata } from '../../domUtils/metadata/updateMetadata';
@@ -445,11 +445,11 @@ 

All files / pac }   if (!cell.cachedElement || (cell.format.useBorderBox && hasMetadata(table))) { - if (width > 0) { + if (width > 0 && !td.style.width) { td.style.width = width + 'px'; }   - if (height > 0) { + if (height > 0 && !td.style.height) { td.style.height = height + 'px'; } } @@ -478,7 +478,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleText.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleText.ts.html index 549ec813a94..88faf57a048 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleText.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleText.ts.html @@ -136,7 +136,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/index.html index 417f6a32623..6c5bc92aecd 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/index.html @@ -30,9 +30,9 @@

All files packages-content-model/roo
- 94.72% + 94.8% Branches - 251/265 + 255/269
@@ -274,8 +274,8 @@

All files packages-content-model/roo 93.15% 68/73 - 92.06% - 58/63 + 92.54% + 62/67 100% 1/1 92.86% @@ -305,7 +305,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/index.html index 4ea3692aa7d..14dec6d2627 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/index.html @@ -95,7 +95,7 @@

All files packages-content-model/rooste diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/index.html index 6bbfffa6599..cb293d32620 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/index.html @@ -125,7 +125,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/mergeNode.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/mergeNode.ts.html index be357eed41b..529b1b82153 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/mergeNode.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/mergeNode.ts.html @@ -205,7 +205,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/optimize.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/optimize.ts.html index 2313f3d1aab..2a8b996ed87 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/optimize.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/optimize.ts.html @@ -142,7 +142,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/removeUnnecessarySpan.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/removeUnnecessarySpan.ts.html index 9cdfcc7be99..f4a53493915 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/removeUnnecessarySpan.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/removeUnnecessarySpan.ts.html @@ -151,7 +151,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/applyFormat.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/applyFormat.ts.html index f210f55fb3d..8d71a433b21 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/applyFormat.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/applyFormat.ts.html @@ -101,8 +101,8 @@

All files / pac       -1961x -10812x +1966x +10828x      
import {
@@ -136,7 +136,7 @@ 

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/handleSegmentCommon.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/handleSegmentCommon.ts.html index ea5ebed6e0c..3f06534742b 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/handleSegmentCommon.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/handleSegmentCommon.ts.html @@ -139,7 +139,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/index.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/index.html index ae8084170aa..624895c91a6 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/index.html @@ -140,7 +140,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/reuseCachedElement.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/reuseCachedElement.ts.html index cbbe80dacb6..a8fe157ad66 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/reuseCachedElement.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/reuseCachedElement.ts.html @@ -196,7 +196,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/stackFormat.ts.html b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/stackFormat.ts.html index c94cae6033b..1f88e710851 100644 --- a/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/stackFormat.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/stackFormat.ts.html @@ -172,7 +172,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/domToModel/processors/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/domToModel/processors/index.html index c8d5e956c45..7c75b0c96e2 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/domToModel/processors/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/domToModel/processors/index.html @@ -110,7 +110,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/domToModel/processors/reducedModelChildProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/domToModel/processors/reducedModelChildProcessor.ts.html index 44f7c6e30df..a04e025381b 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/domToModel/processors/reducedModelChildProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/domToModel/processors/reducedModelChildProcessor.ts.html @@ -340,7 +340,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/domToModel/processors/tablePreProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/domToModel/processors/tablePreProcessor.ts.html index 8d5d06f28fb..567aefbd0a8 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/domToModel/processors/tablePreProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/domToModel/processors/tablePreProcessor.ts.html @@ -160,7 +160,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/borderValues.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/borderValues.ts.html index 58437e33509..6a7e803f0ab 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/borderValues.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/borderValues.ts.html @@ -202,7 +202,7 @@

All files / packag diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/index.html index 4f96416c488..f01da566f5a 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/index.html @@ -95,7 +95,7 @@

All files packages-content-model/rooste diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/index.html index 1a7b3a298e6..7602942dd45 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/index.html @@ -125,7 +125,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/updateImageMetadata.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/updateImageMetadata.ts.html index c4cacd034cb..a316e887ef3 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/updateImageMetadata.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/updateImageMetadata.ts.html @@ -166,7 +166,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/updateTableCellMetadata.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/updateTableCellMetadata.ts.html index c0c2652767c..05dcd8450bf 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/updateTableCellMetadata.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/updateTableCellMetadata.ts.html @@ -136,7 +136,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/updateTableMetadata.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/updateTableMetadata.ts.html index b8c751a0dc3..0104bebb124 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/updateTableMetadata.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/updateTableMetadata.ts.html @@ -220,7 +220,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/ContentModelEditor.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/ContentModelEditor.ts.html index 30e2ba5f188..6a7eb260b4a 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/ContentModelEditor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/ContentModelEditor.ts.html @@ -277,7 +277,7 @@

All files / packag diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/createContentModel.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/createContentModel.ts.html index 6a9960ddb98..59c84dee371 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/createContentModel.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/createContentModel.ts.html @@ -199,7 +199,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/createEditorContext.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/createEditorContext.ts.html index 61634bf281b..16088d81b4b 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/createEditorContext.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/createEditorContext.ts.html @@ -106,7 +106,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/index.html index 06e20d27e14..e48af4f48f8 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/index.html @@ -140,7 +140,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/setContentModel.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/setContentModel.ts.html index fe4f2a580b9..4567b9523e0 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/setContentModel.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/setContentModel.ts.html @@ -139,7 +139,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/switchShadowEdit.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/switchShadowEdit.ts.html index 16398644fda..c194365eb9d 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/switchShadowEdit.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/switchShadowEdit.ts.html @@ -169,7 +169,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/corePlugins/ContentModelCopyPastePlugin.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/corePlugins/ContentModelCopyPastePlugin.ts.html index 2559474fb7f..d8064aeee5b 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/corePlugins/ContentModelCopyPastePlugin.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/corePlugins/ContentModelCopyPastePlugin.ts.html @@ -877,7 +877,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/corePlugins/ContentModelTypeInContainerPlugin.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/corePlugins/ContentModelTypeInContainerPlugin.ts.html index e0bf4d831af..ae3ee1ba3a4 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/corePlugins/ContentModelTypeInContainerPlugin.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/corePlugins/ContentModelTypeInContainerPlugin.ts.html @@ -148,7 +148,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/corePlugins/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/corePlugins/index.html index 8791bb3ada2..bfbad40e34f 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/corePlugins/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/corePlugins/index.html @@ -110,7 +110,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/createContentModelEditorCore.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/createContentModelEditorCore.ts.html index 6a25d7a1723..bc9cc1a954b 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/createContentModelEditorCore.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/createContentModelEditorCore.ts.html @@ -442,7 +442,7 @@

All files / packag diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/index.html index d8fcff300ab..3758d39c27c 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/index.html @@ -125,7 +125,7 @@

All files packages-content-model/rooste diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/isContentModelEditor.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/isContentModelEditor.ts.html index 5c496636ab0..d8c723b0ef9 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/isContentModelEditor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/isContentModelEditor.ts.html @@ -103,7 +103,7 @@

All files / packag diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/ContentModelEditPlugin.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/ContentModelEditPlugin.ts.html index a318ca287db..90578e1e79a 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/ContentModelEditPlugin.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/ContentModelEditPlugin.ts.html @@ -859,7 +859,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/ContentModelFormatPlugin.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/ContentModelFormatPlugin.ts.html index 3186e16cf2f..d43b161c6bd 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/ContentModelFormatPlugin.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/ContentModelFormatPlugin.ts.html @@ -325,7 +325,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/ContentModelPastePlugin.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/ContentModelPastePlugin.ts.html index 8aca4d8a418..c6a1d4f3277 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/ContentModelPastePlugin.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/ContentModelPastePlugin.ts.html @@ -397,7 +397,7 @@

All files / diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/Excel/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/Excel/index.html index 5ffb626809e..c1effd4c2be 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/Excel/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/Excel/index.html @@ -95,7 +95,7 @@

All files packages-content-mod diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/Excel/processPastedContentFromExcel.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/Excel/processPastedContentFromExcel.ts.html index e3bddaf1c1e..3c8dbb2f398 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/Excel/processPastedContentFromExcel.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/Excel/processPastedContentFromExcel.ts.html @@ -286,7 +286,7 @@

All files / istanbul - at Wed Jun 28 2023 23:30:38 GMT+0000 (Coordinated Universal Time) + at Thu Jun 29 2023 22:57:28 GMT+0000 (Coordinated Universal Time) diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/PowerPoint/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/PowerPoint/index.html index 7de1f8e5847..c8ca43bd885 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/PowerPoint/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/PowerPoint/index.html @@ -95,7 +95,7 @@

All files packages-content-mod diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/PowerPoint/processPastedContentFromPowerPoint.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/PowerPoint/processPastedContentFromPowerPoint.ts.html index 07af732f7d2..2b407dba0ab 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/PowerPoint/processPastedContentFromPowerPoint.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/PowerPoint/processPastedContentFromPowerPoint.ts.html @@ -142,7 +142,7 @@

All files / istanbul - at Wed Jun 28 2023 23:30:38 GMT+0000 (Coordinated Universal Time) + at Thu Jun 29 2023 22:57:28 GMT+0000 (Coordinated Universal Time) diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WacComponents/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WacComponents/index.html index 64fdb7e1a8d..cca9e3302d5 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WacComponents/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WacComponents/index.html @@ -95,7 +95,7 @@

All files packages-content-mod diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WacComponents/processPastedContentWacComponents.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WacComponents/processPastedContentWacComponents.ts.html index d72a145eec6..afc406b07f9 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WacComponents/processPastedContentWacComponents.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WacComponents/processPastedContentWacComponents.ts.html @@ -847,7 +847,7 @@

All files / istanbul - at Wed Jun 28 2023 23:30:38 GMT+0000 (Coordinated Universal Time) + at Thu Jun 29 2023 22:57:28 GMT+0000 (Coordinated Universal Time) diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/index.html index c8a53acfae6..885caf642fb 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/index.html @@ -125,7 +125,7 @@

All files packages-content-mod diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/processPastedContentFromWordDesktop.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/processPastedContentFromWordDesktop.ts.html index 4d526a5ca4b..c80b0d967a0 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/processPastedContentFromWordDesktop.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/processPastedContentFromWordDesktop.ts.html @@ -379,7 +379,7 @@

All files / istanbul - at Wed Jun 28 2023 23:30:38 GMT+0000 (Coordinated Universal Time) + at Thu Jun 29 2023 22:57:28 GMT+0000 (Coordinated Universal Time) diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/processWordComments.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/processWordComments.ts.html index f02ef5d1142..7a5a4ffabcd 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/processWordComments.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/processWordComments.ts.html @@ -130,7 +130,7 @@

All files / istanbul - at Wed Jun 28 2023 23:30:38 GMT+0000 (Coordinated Universal Time) + at Thu Jun 29 2023 22:57:28 GMT+0000 (Coordinated Universal Time) diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/processWordLists.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/processWordLists.ts.html index 2c2e9f9ce7b..7b288cfedfa 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/processWordLists.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/processWordLists.ts.html @@ -691,7 +691,7 @@

All files / istanbul - at Wed Jun 28 2023 23:30:38 GMT+0000 (Coordinated Universal Time) + at Thu Jun 29 2023 22:57:28 GMT+0000 (Coordinated Universal Time) diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/index.html index 12d00bdca63..58af5d4055c 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/index.html @@ -95,7 +95,7 @@

All files packages-content-model/ diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/addParser.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/addParser.ts.html index ced34a55c95..f7642ea8b68 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/addParser.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/addParser.ts.html @@ -136,7 +136,7 @@

All files / istanbul - at Wed Jun 28 2023 23:30:38 GMT+0000 (Coordinated Universal Time) + at Thu Jun 29 2023 22:57:28 GMT+0000 (Coordinated Universal Time) diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/deprecatedColorParser.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/deprecatedColorParser.ts.html index 6c5cc7d868b..1b3732c89a4 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/deprecatedColorParser.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/deprecatedColorParser.ts.html @@ -187,7 +187,7 @@

All files / istanbul - at Wed Jun 28 2023 23:30:38 GMT+0000 (Coordinated Universal Time) + at Thu Jun 29 2023 22:57:28 GMT+0000 (Coordinated Universal Time) diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/index.html index 62463a0e308..666843ec37b 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/index.html @@ -140,7 +140,7 @@

All files packages-content-mod diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/linkParser.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/linkParser.ts.html index d0b862c49cb..db4518d384f 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/linkParser.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/linkParser.ts.html @@ -151,7 +151,7 @@

All files / istanbul - at Wed Jun 28 2023 23:30:38 GMT+0000 (Coordinated Universal Time) + at Thu Jun 29 2023 22:57:28 GMT+0000 (Coordinated Universal Time) diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/setProcessor.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/setProcessor.ts.html index fed3c6f40a4..7737764b361 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/setProcessor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/setProcessor.ts.html @@ -112,7 +112,7 @@

All files / istanbul - at Wed Jun 28 2023 23:30:38 GMT+0000 (Coordinated Universal Time) + at Thu Jun 29 2023 22:57:28 GMT+0000 (Coordinated Universal Time) diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/index.html index 9eabc5ae22d..2ac5e2cc524 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/index.html @@ -110,7 +110,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/utils/handleKeyboardEventCommon.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/utils/handleKeyboardEventCommon.ts.html index 22da3a8dcf7..f8a20967999 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/utils/handleKeyboardEventCommon.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/utils/handleKeyboardEventCommon.ts.html @@ -355,7 +355,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/utils/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/utils/index.html index 836276adfc2..e2c6965b440 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/utils/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/editor/utils/index.html @@ -95,7 +95,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/getLeafSiblingBlock.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/getLeafSiblingBlock.ts.html index 3561a90a88c..7e2d95d96a9 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/getLeafSiblingBlock.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/getLeafSiblingBlock.ts.html @@ -367,7 +367,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/index.html index abea1d28810..ce6b5653f40 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/index.html @@ -140,7 +140,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/setModelAlignment.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/setModelAlignment.ts.html index 0891f3bd764..4c20147a3a4 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/setModelAlignment.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/setModelAlignment.ts.html @@ -280,7 +280,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/setModelIndentation.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/setModelIndentation.ts.html index 79d0e042e41..b561252eecb 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/setModelIndentation.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/setModelIndentation.ts.html @@ -253,7 +253,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/toggleModelBlockQuote.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/toggleModelBlockQuote.ts.html index 4cccd9729ed..115bd1d0037 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/toggleModelBlockQuote.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/toggleModelBlockQuote.ts.html @@ -277,7 +277,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/clearModelFormat.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/clearModelFormat.ts.html index 32bd2fc44c0..04c0089c442 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/clearModelFormat.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/clearModelFormat.ts.html @@ -634,7 +634,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/cloneModel.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/cloneModel.ts.html index 02650c8e508..30942ab6961 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/cloneModel.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/cloneModel.ts.html @@ -898,7 +898,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/getClosestAncestorBlockGroupIndex.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/getClosestAncestorBlockGroupIndex.ts.html index 2f047fac495..eedf3c2493d 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/getClosestAncestorBlockGroupIndex.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/getClosestAncestorBlockGroupIndex.ts.html @@ -175,7 +175,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/index.html index 7df4ef07bfc..d88ba90f7f2 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/index.html @@ -185,7 +185,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/isBlockGroupOfType.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/isBlockGroupOfType.ts.html index c93236aedd6..9f46bae4b16 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/isBlockGroupOfType.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/isBlockGroupOfType.ts.html @@ -106,7 +106,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/mergeModel.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/mergeModel.ts.html index 559ca629dae..692c65ffa6e 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/mergeModel.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/mergeModel.ts.html @@ -1123,7 +1123,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/retrieveModelFormatState.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/retrieveModelFormatState.ts.html index 591fd63fb10..013537cebd0 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/retrieveModelFormatState.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/retrieveModelFormatState.ts.html @@ -757,7 +757,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/wrapBlock.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/wrapBlock.ts.html index 6c01971bc08..026cb359228 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/wrapBlock.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/wrapBlock.ts.html @@ -265,7 +265,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSelection.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSelection.ts.html index 449a7510874..a41268d4cf0 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSelection.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSelection.ts.html @@ -238,7 +238,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/deleteAllSegmentBefore.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/deleteAllSegmentBefore.ts.html index 092137f9e7d..269f3e01df4 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/deleteAllSegmentBefore.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/deleteAllSegmentBefore.ts.html @@ -124,7 +124,7 @@

All files / diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/deleteCollapsedSelection.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/deleteCollapsedSelection.ts.html index 8d7f63a7993..fa47ce07a11 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/deleteCollapsedSelection.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/deleteCollapsedSelection.ts.html @@ -349,7 +349,7 @@

All files / diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/deleteWordSelection.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/deleteWordSelection.ts.html index 13f3de13e52..a881ccf5b4b 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/deleteWordSelection.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/deleteWordSelection.ts.html @@ -628,7 +628,7 @@

All files / diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/index.html index 44ed6549563..83f73882efb 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/index.html @@ -125,7 +125,7 @@

All files packages-content-model/ diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/index.html index b371920ca59..60f7e9116de 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/index.html @@ -95,7 +95,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/createInsertPoint.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/createInsertPoint.ts.html index a702142c8fe..2f08c2738c4 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/createInsertPoint.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/createInsertPoint.ts.html @@ -136,7 +136,7 @@

All files / diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteBlock.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteBlock.ts.html index b8414731019..706614f05b6 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteBlock.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteBlock.ts.html @@ -235,7 +235,7 @@

All files / diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteExpandedSelection.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteExpandedSelection.ts.html index cf92230e8ad..a47163d6231 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteExpandedSelection.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteExpandedSelection.ts.html @@ -424,7 +424,7 @@

All files / diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteSegment.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteSegment.ts.html index dac4ebaa345..7145b8bd5ea 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteSegment.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteSegment.ts.html @@ -352,7 +352,7 @@

All files / diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteSingleChar.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteSingleChar.ts.html index 3f31cd50fed..d1189dbaa98 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteSingleChar.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteSingleChar.ts.html @@ -178,7 +178,7 @@

All files / diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/index.html index 535b0daba68..0d01403687f 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/index.html @@ -155,7 +155,7 @@

All files packages-content-model/ diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/format/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/format/index.html index 095309660ce..0d7a88b42c7 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/format/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/format/index.html @@ -95,7 +95,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/format/pendingFormat.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/format/pendingFormat.ts.html index 1e5d839b630..e126d1eaee1 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/format/pendingFormat.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/format/pendingFormat.ts.html @@ -286,7 +286,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/image/applyImageBorderFormat.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/image/applyImageBorderFormat.ts.html index 9309b6683ef..28d694702a9 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/image/applyImageBorderFormat.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/image/applyImageBorderFormat.ts.html @@ -241,7 +241,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/image/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/image/index.html index 3e400d5c283..04663dc8895 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/image/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/image/index.html @@ -95,7 +95,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/list/findListItemsInSameThread.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/list/findListItemsInSameThread.ts.html index 65d8dda6ed1..e4e6804a979 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/list/findListItemsInSameThread.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/list/findListItemsInSameThread.ts.html @@ -499,7 +499,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/list/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/list/index.html index 7443d2fc45e..397bf115284 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/list/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/list/index.html @@ -110,7 +110,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/list/setListType.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/list/setListType.ts.html index 04d69a1e7c6..236b93dc449 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/list/setListType.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/list/setListType.ts.html @@ -391,7 +391,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/adjustSegmentSelection.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/adjustSegmentSelection.ts.html index 1db56b5f83d..efc79d14b06 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/adjustSegmentSelection.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/adjustSegmentSelection.ts.html @@ -226,7 +226,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/adjustWordSelection.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/adjustWordSelection.ts.html index 2f7b263869d..f7939922dfd 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/adjustWordSelection.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/adjustWordSelection.ts.html @@ -505,7 +505,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/collapseTableSelection.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/collapseTableSelection.ts.html index 2a1a67eb660..f9a6acb6200 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/collapseTableSelection.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/collapseTableSelection.ts.html @@ -115,7 +115,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/collectSelections.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/collectSelections.ts.html index 61b7cd38251..62c8ad165c1 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/collectSelections.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/collectSelections.ts.html @@ -742,7 +742,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/index.html index 7f5344c1785..67395c8ddb7 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/index.html @@ -170,7 +170,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/iterateSelections.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/iterateSelections.ts.html index 7016c7f5e8d..9e3da8a8a33 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/iterateSelections.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/iterateSelections.ts.html @@ -847,7 +847,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/setSelection.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/setSelection.ts.html index 9f48ded77d6..c82001aab30 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/setSelection.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/setSelection.ts.html @@ -667,7 +667,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/alignTable.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/alignTable.ts.html index 42ff306e35a..36ba8f60671 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/alignTable.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/alignTable.ts.html @@ -130,7 +130,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/alignTableCell.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/alignTableCell.ts.html index e5b7ab27c1c..c6cfba90236 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/alignTableCell.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/alignTableCell.ts.html @@ -235,7 +235,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/applyTableFormat.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/applyTableFormat.ts.html index 7fafc3043d6..3fcf687546e 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/applyTableFormat.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/applyTableFormat.ts.html @@ -859,7 +859,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/canMergeCells.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/canMergeCells.ts.html index 969538fdab1..6c3b4bf3c71 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/canMergeCells.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/canMergeCells.ts.html @@ -271,7 +271,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/createTableStructure.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/createTableStructure.ts.html index 261265a9ca8..4de84b829dd 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/createTableStructure.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/createTableStructure.ts.html @@ -139,7 +139,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/deleteTable.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/deleteTable.ts.html index 3c62b226e77..eee3b289e4e 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/deleteTable.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/deleteTable.ts.html @@ -91,7 +91,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/deleteTableColumn.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/deleteTableColumn.ts.html index 36fa30ec372..b62613c4cba 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/deleteTableColumn.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/deleteTableColumn.ts.html @@ -142,7 +142,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/deleteTableRow.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/deleteTableRow.ts.html index b7886d460a6..5a41b778447 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/deleteTableRow.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/deleteTableRow.ts.html @@ -136,7 +136,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/getSelectedCells.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/getSelectedCells.ts.html index c0235f950ad..cfd36471812 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/getSelectedCells.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/getSelectedCells.ts.html @@ -196,7 +196,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/index.html index 1b7ae4b0472..51841da60c3 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/index.html @@ -350,7 +350,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/insertTableColumn.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/insertTableColumn.ts.html index aad7ab5ee97..f8e36922ee9 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/insertTableColumn.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/insertTableColumn.ts.html @@ -181,7 +181,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/insertTableRow.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/insertTableRow.ts.html index 918d9039d88..e92831ace36 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/insertTableRow.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/insertTableRow.ts.html @@ -166,7 +166,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/mergeTableCells.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/mergeTableCells.ts.html index 004cc56bb66..fa1e7514bf5 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/mergeTableCells.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/mergeTableCells.ts.html @@ -145,7 +145,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/mergeTableColumn.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/mergeTableColumn.ts.html index f3776a5876d..974435d7df4 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/mergeTableColumn.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/mergeTableColumn.ts.html @@ -244,7 +244,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/mergeTableRow.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/mergeTableRow.ts.html index 6ce5983d37a..cdb932dd02e 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/mergeTableRow.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/mergeTableRow.ts.html @@ -244,7 +244,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/normalizeTable.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/normalizeTable.ts.html index 3d6fa02428a..c1df83208ba 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/normalizeTable.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/normalizeTable.ts.html @@ -451,7 +451,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/setTableCellBackgroundColor.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/setTableCellBackgroundColor.ts.html index c7a16b8e030..57240cc7cd7 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/setTableCellBackgroundColor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/setTableCellBackgroundColor.ts.html @@ -256,7 +256,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/splitTableCellHorizontally.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/splitTableCellHorizontally.ts.html index 78cb65092ee..dc68d1acff4 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/splitTableCellHorizontally.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/splitTableCellHorizontally.ts.html @@ -247,7 +247,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/splitTableCellVertically.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/splitTableCellVertically.ts.html index 3065e87a676..7c605af8403 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/splitTableCellVertically.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/splitTableCellVertically.ts.html @@ -268,7 +268,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/index.html index 0b419245153..697e11686e0 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/index.html @@ -185,7 +185,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setAlignment.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setAlignment.ts.html index 3ad21a87670..bd77bbde791 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setAlignment.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setAlignment.ts.html @@ -109,7 +109,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setDirection.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setDirection.ts.html index 046d7abbb9f..fbeb3399c32 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setDirection.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setDirection.ts.html @@ -154,7 +154,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setHeaderLevel.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setHeaderLevel.ts.html index 424bcc4180b..501fe01532d 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setHeaderLevel.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setHeaderLevel.ts.html @@ -220,7 +220,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setIndentation.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setIndentation.ts.html index bbc85118dde..01e565bf763 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setIndentation.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setIndentation.ts.html @@ -136,7 +136,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setParagraphMargin.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setParagraphMargin.ts.html index 14c744b83ff..a208def573d 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setParagraphMargin.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setParagraphMargin.ts.html @@ -166,7 +166,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setSpacing.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setSpacing.ts.html index 9f692318bbd..2f6b5a554b0 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setSpacing.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setSpacing.ts.html @@ -118,7 +118,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/toggleBlockQuote.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/toggleBlockQuote.ts.html index e880ba46094..a300668ed79 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/toggleBlockQuote.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/toggleBlockQuote.ts.html @@ -190,7 +190,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/editing/handleKeyDownEvent.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/editing/handleKeyDownEvent.ts.html index fb85c625f9e..6445e43768c 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/editing/handleKeyDownEvent.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/editing/handleKeyDownEvent.ts.html @@ -268,7 +268,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/editing/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/editing/index.html index 8bbcb69b341..4d2d77ed388 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/editing/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/editing/index.html @@ -95,7 +95,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/applyPendingFormat.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/applyPendingFormat.ts.html index e39911cb1fb..53354fff1fd 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/applyPendingFormat.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/applyPendingFormat.ts.html @@ -301,7 +301,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/clearFormat.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/clearFormat.ts.html index 031fd8df63c..e56136575a2 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/clearFormat.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/clearFormat.ts.html @@ -148,7 +148,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/getFormatState.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/getFormatState.ts.html index af5b3db81c3..c56e4fd52e0 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/getFormatState.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/getFormatState.ts.html @@ -169,7 +169,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/getSegmentFormat.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/getSegmentFormat.ts.html index 07968939216..949642eeafb 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/getSegmentFormat.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/getSegmentFormat.ts.html @@ -187,7 +187,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/index.html index 72d1bda2788..dc01b0dd926 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/index.html @@ -140,7 +140,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/adjustImageSelection.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/adjustImageSelection.ts.html index a5f64fe0624..6f8e271b554 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/adjustImageSelection.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/adjustImageSelection.ts.html @@ -157,7 +157,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/changeImage.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/changeImage.ts.html index b090b53132f..bc940ea45de 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/changeImage.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/changeImage.ts.html @@ -193,7 +193,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/index.html index ce3eaf1aa6c..b9596cf46ce 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/index.html @@ -170,7 +170,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/insertImage.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/insertImage.ts.html index 58c6ac47028..01e7fe813e0 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/insertImage.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/insertImage.ts.html @@ -175,7 +175,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/setImageAltText.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/setImageAltText.ts.html index fd965be237e..1a686180ecb 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/setImageAltText.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/setImageAltText.ts.html @@ -109,7 +109,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/setImageBorder.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/setImageBorder.ts.html index f761b010b28..6a364c63545 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/setImageBorder.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/setImageBorder.ts.html @@ -130,7 +130,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/setImageBoxShadow.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/setImageBoxShadow.ts.html index 2464931d002..f763110f931 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/setImageBoxShadow.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/setImageBoxShadow.ts.html @@ -154,7 +154,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/adjustLinkSelection.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/adjustLinkSelection.ts.html index 0ce08b14b4f..bca8b9cf263 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/adjustLinkSelection.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/adjustLinkSelection.ts.html @@ -187,7 +187,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/index.html index b76e363cb0e..7c3d7ed27d8 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/index.html @@ -125,7 +125,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/insertLink.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/insertLink.ts.html index 301fb551119..1426ddd8766 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/insertLink.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/insertLink.ts.html @@ -532,7 +532,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/removeLink.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/removeLink.ts.html index 7436b13126a..c4123815c0a 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/removeLink.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/removeLink.ts.html @@ -169,7 +169,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/index.html index 99a0771030e..4f6e38029b4 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/index.html @@ -140,7 +140,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/setListStartNumber.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/setListStartNumber.ts.html index 90462487045..7c4fabc419d 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/setListStartNumber.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/setListStartNumber.ts.html @@ -133,7 +133,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/setListStyle.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/setListStyle.ts.html index 8662af70f30..5affb8a2171 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/setListStyle.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/setListStyle.ts.html @@ -169,7 +169,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/toggleBullet.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/toggleBullet.ts.html index afad6fec5ee..27eee3b8717 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/toggleBullet.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/toggleBullet.ts.html @@ -109,7 +109,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/toggleNumbering.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/toggleNumbering.ts.html index 1aaca63a142..035456e37e7 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/toggleNumbering.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/toggleNumbering.ts.html @@ -109,7 +109,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/applySegmentFormat.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/applySegmentFormat.ts.html index c37007f039e..32b9e0f3ca2 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/applySegmentFormat.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/applySegmentFormat.ts.html @@ -157,7 +157,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/changeCapitalization.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/changeCapitalization.ts.html index aa38fc271c8..647c7d8abd5 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/changeCapitalization.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/changeCapitalization.ts.html @@ -235,7 +235,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/changeFontSize.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/changeFontSize.ts.html index e455893eb3a..d67b5415475 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/changeFontSize.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/changeFontSize.ts.html @@ -283,7 +283,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/index.html index da6f2d2d80b..309b2234049 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/index.html @@ -290,7 +290,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setBackgroundColor.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setBackgroundColor.ts.html index 27b77b21af6..096cd3ecd5b 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setBackgroundColor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setBackgroundColor.ts.html @@ -136,7 +136,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setFontName.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setFontName.ts.html index 1ff8d11c3a1..867a9368f54 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setFontName.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setFontName.ts.html @@ -133,7 +133,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setFontSize.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setFontSize.ts.html index 458928576df..9cc37ddbd80 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setFontSize.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setFontSize.ts.html @@ -121,7 +121,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setTextColor.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setTextColor.ts.html index cce0281d37e..e1dc164eca2 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setTextColor.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setTextColor.ts.html @@ -157,7 +157,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleBold.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleBold.ts.html index f1b832382d9..9cc3001d48d 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleBold.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleBold.ts.html @@ -157,7 +157,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleCode.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleCode.ts.html index b5ea042ad11..6c66dcdb872 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleCode.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleCode.ts.html @@ -157,7 +157,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleItalic.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleItalic.ts.html index 7ded430184d..74d27190465 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleItalic.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleItalic.ts.html @@ -115,7 +115,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleStrikethrough.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleStrikethrough.ts.html index a2b241b2a7c..c0b39b4749b 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleStrikethrough.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleStrikethrough.ts.html @@ -115,7 +115,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleSubscript.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleSubscript.ts.html index 39dab47700d..6c257523d22 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleSubscript.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleSubscript.ts.html @@ -115,7 +115,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleSuperscript.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleSuperscript.ts.html index 9ba18c43d2d..8c5885db5f6 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleSuperscript.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleSuperscript.ts.html @@ -115,7 +115,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleUnderline.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleUnderline.ts.html index 30404818267..9400acfb2be 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleUnderline.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleUnderline.ts.html @@ -127,7 +127,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/hasSelectionInBlock.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/hasSelectionInBlock.ts.html index 177289934d3..375ecf1462f 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/hasSelectionInBlock.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/hasSelectionInBlock.ts.html @@ -145,7 +145,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/hasSelectionInBlockGroup.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/hasSelectionInBlockGroup.ts.html index da313f58511..42399d9d6a2 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/hasSelectionInBlockGroup.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/hasSelectionInBlockGroup.ts.html @@ -118,7 +118,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/hasSelectionInSegment.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/hasSelectionInSegment.ts.html index 12eee17b0e5..73dd3b04c28 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/hasSelectionInSegment.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/hasSelectionInSegment.ts.html @@ -103,7 +103,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/index.html index 1ba037a5e38..44ee40853cb 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/index.html @@ -125,7 +125,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/table/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/table/index.html index 911a9968474..b0f92b165c7 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/table/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/table/index.html @@ -95,7 +95,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/table/setTableCellShade.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/table/setTableCellShade.ts.html index 0fd42d47777..a31666aacbc 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/table/setTableCellShade.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/table/setTableCellShade.ts.html @@ -163,7 +163,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatImageWithContentModel.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatImageWithContentModel.ts.html index e1c4d0607bf..b1e6f8b5f9f 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatImageWithContentModel.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatImageWithContentModel.ts.html @@ -151,7 +151,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatParagraphWithContentModel.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatParagraphWithContentModel.ts.html index 1360dab007c..8c78fb6aae0 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatParagraphWithContentModel.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatParagraphWithContentModel.ts.html @@ -148,7 +148,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatSegmentWithContentModel.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatSegmentWithContentModel.ts.html index dc264130168..42e9175ca5b 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatSegmentWithContentModel.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatSegmentWithContentModel.ts.html @@ -310,7 +310,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatWithContentModel.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatWithContentModel.ts.html index fe82af2f544..75cda126dff 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatWithContentModel.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatWithContentModel.ts.html @@ -400,7 +400,7 @@

All files / pac diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/index.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/index.html index c260b0eab1f..4aecd672d26 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/index.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/index.html @@ -155,7 +155,7 @@

All files packages-content-model/roo diff --git a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/paste.ts.html b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/paste.ts.html index 46d7f8e9d10..aa2c52851c4 100644 --- a/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/paste.ts.html +++ b/coverage/packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/paste.ts.html @@ -592,7 +592,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-color-utils/lib/index.html b/coverage/packages/roosterjs-color-utils/lib/index.html index 9877f27bbcf..546b461b518 100644 --- a/coverage/packages/roosterjs-color-utils/lib/index.html +++ b/coverage/packages/roosterjs-color-utils/lib/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-color-utils/l diff --git a/coverage/packages/roosterjs-color-utils/lib/index.ts.html b/coverage/packages/roosterjs-color-utils/lib/index.ts.html index ddc5ceadf70..3393dc42f2e 100644 --- a/coverage/packages/roosterjs-color-utils/lib/index.ts.html +++ b/coverage/packages/roosterjs-color-utils/lib/index.ts.html @@ -67,7 +67,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-color-utils/lib/utils/getDarkColor.ts.html b/coverage/packages/roosterjs-color-utils/lib/utils/getDarkColor.ts.html index 9a29cf6d5db..36c892d362b 100644 --- a/coverage/packages/roosterjs-color-utils/lib/utils/getDarkColor.ts.html +++ b/coverage/packages/roosterjs-color-utils/lib/utils/getDarkColor.ts.html @@ -139,7 +139,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-color-utils/lib/utils/index.html b/coverage/packages/roosterjs-color-utils/lib/utils/index.html index bdd7fe802cd..df38621d039 100644 --- a/coverage/packages/roosterjs-color-utils/lib/utils/index.html +++ b/coverage/packages/roosterjs-color-utils/lib/utils/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-color-util diff --git a/coverage/packages/roosterjs-editor-api/lib/format/changeCapitalization.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/changeCapitalization.ts.html index 7ebb314c1f8..62fffe47463 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/changeCapitalization.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/changeCapitalization.ts.html @@ -286,7 +286,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/changeFontSize.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/changeFontSize.ts.html index 3cdf95e5ac8..dd09aa21621 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/changeFontSize.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/changeFontSize.ts.html @@ -280,7 +280,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/clearBlockFormat.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/clearBlockFormat.ts.html index 60e959b690f..434e0110541 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/clearBlockFormat.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/clearBlockFormat.ts.html @@ -94,7 +94,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/clearFormat.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/clearFormat.ts.html index 316169e8147..c87b1a2fee1 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/clearFormat.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/clearFormat.ts.html @@ -1123,7 +1123,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/createLink.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/createLink.ts.html index aae96b8bf5a..94cd5b54e8e 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/createLink.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/createLink.ts.html @@ -538,7 +538,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/getFormatState.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/getFormatState.ts.html index d8821f01b51..42c30829aaf 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/getFormatState.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/getFormatState.ts.html @@ -370,7 +370,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/index.html b/coverage/packages/roosterjs-editor-api/lib/format/index.html index a04ff867aef..739dcdcb6af 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/index.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/index.html @@ -545,7 +545,7 @@

All files packages/roosterjs-editor-api diff --git a/coverage/packages/roosterjs-editor-api/lib/format/insertEntity.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/insertEntity.ts.html index 0d88fa1e1c3..def12ec6510 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/insertEntity.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/insertEntity.ts.html @@ -559,7 +559,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/insertImage.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/insertImage.ts.html index fc17a501427..0efa16a8107 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/insertImage.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/insertImage.ts.html @@ -193,7 +193,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/removeLink.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/removeLink.ts.html index 8606208c58b..b2e3c6f4ca2 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/removeLink.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/removeLink.ts.html @@ -133,7 +133,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/replaceWithNode.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/replaceWithNode.ts.html index 0047d8729b5..22c7f9b4fbf 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/replaceWithNode.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/replaceWithNode.ts.html @@ -304,7 +304,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/rotateElement.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/rotateElement.ts.html index 3fa27e93383..b3ad9947870 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/rotateElement.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/rotateElement.ts.html @@ -124,7 +124,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/setAlignment.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/setAlignment.ts.html index 8ee0c4d3c1a..658ce14692c 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/setAlignment.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/setAlignment.ts.html @@ -430,7 +430,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/setBackgroundColor.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/setBackgroundColor.ts.html index 1cbb9e4a04c..747b1eac3fc 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/setBackgroundColor.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/setBackgroundColor.ts.html @@ -154,7 +154,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/setDirection.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/setDirection.ts.html index a7dc928f9ff..abc018c329f 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/setDirection.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/setDirection.ts.html @@ -148,7 +148,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/setFontName.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/setFontName.ts.html index 0811f213e2c..d172eae2bff 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/setFontName.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/setFontName.ts.html @@ -127,7 +127,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/setFontSize.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/setFontSize.ts.html index 3c739663c39..4c593260d6f 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/setFontSize.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/setFontSize.ts.html @@ -142,7 +142,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/setImageAltText.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/setImageAltText.ts.html index c6462d7efa5..ecc187d4e3a 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/setImageAltText.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/setImageAltText.ts.html @@ -139,7 +139,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/setIndentation.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/setIndentation.ts.html index 1e3dfbe5ae5..22fa067160a 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/setIndentation.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/setIndentation.ts.html @@ -568,7 +568,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/setOrderedListNumbering.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/setOrderedListNumbering.ts.html index dbc9f4bf441..7eea74f48a9 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/setOrderedListNumbering.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/setOrderedListNumbering.ts.html @@ -178,7 +178,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/setTextColor.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/setTextColor.ts.html index bbb58c8b39f..1371d0d79dd 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/setTextColor.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/setTextColor.ts.html @@ -178,7 +178,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/toggleBlockQuote.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/toggleBlockQuote.ts.html index 22f9e41a802..36f639c12b0 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/toggleBlockQuote.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/toggleBlockQuote.ts.html @@ -151,7 +151,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/toggleBold.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/toggleBold.ts.html index bf907f74679..d3bcef88b43 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/toggleBold.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/toggleBold.ts.html @@ -106,7 +106,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/toggleBullet.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/toggleBullet.ts.html index 89174e11a58..783bfeae859 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/toggleBullet.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/toggleBullet.ts.html @@ -151,7 +151,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/toggleCodeBlock.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/toggleCodeBlock.ts.html index 8148cff289c..bd9a66ffc31 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/toggleCodeBlock.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/toggleCodeBlock.ts.html @@ -178,7 +178,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/toggleHeader.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/toggleHeader.ts.html index 33b5b67262a..e3f5bc299d5 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/toggleHeader.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/toggleHeader.ts.html @@ -214,7 +214,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/toggleItalic.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/toggleItalic.ts.html index d312a1455e0..cf864f0918e 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/toggleItalic.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/toggleItalic.ts.html @@ -106,7 +106,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/toggleNumbering.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/toggleNumbering.ts.html index 04437df0671..afa1aef8eb3 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/toggleNumbering.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/toggleNumbering.ts.html @@ -157,7 +157,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/toggleStrikethrough.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/toggleStrikethrough.ts.html index 2ec9edfca83..57e29d0d18e 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/toggleStrikethrough.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/toggleStrikethrough.ts.html @@ -106,7 +106,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/toggleSubscript.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/toggleSubscript.ts.html index 98349b71291..6c28c4f137f 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/toggleSubscript.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/toggleSubscript.ts.html @@ -112,7 +112,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/toggleSuperscript.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/toggleSuperscript.ts.html index 3445303f201..14473e7fffc 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/toggleSuperscript.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/toggleSuperscript.ts.html @@ -112,7 +112,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/format/toggleUnderline.ts.html b/coverage/packages/roosterjs-editor-api/lib/format/toggleUnderline.ts.html index 88d05fe6305..108394feedd 100644 --- a/coverage/packages/roosterjs-editor-api/lib/format/toggleUnderline.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/format/toggleUnderline.ts.html @@ -106,7 +106,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/index.html b/coverage/packages/roosterjs-editor-api/lib/index.html index 8ce50d4254d..b09c988b76a 100644 --- a/coverage/packages/roosterjs-editor-api/lib/index.html +++ b/coverage/packages/roosterjs-editor-api/lib/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-editor-api/li diff --git a/coverage/packages/roosterjs-editor-api/lib/index.ts.html b/coverage/packages/roosterjs-editor-api/lib/index.ts.html index b2445852641..0a69fc31643 100644 --- a/coverage/packages/roosterjs-editor-api/lib/index.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/index.ts.html @@ -181,7 +181,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-api/lib/table/applyCellShading.ts.html b/coverage/packages/roosterjs-editor-api/lib/table/applyCellShading.ts.html index 1c8a53c1b28..b4d3e2f887d 100644 --- a/coverage/packages/roosterjs-editor-api/lib/table/applyCellShading.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/table/applyCellShading.ts.html @@ -160,7 +160,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/table/editTable.ts.html b/coverage/packages/roosterjs-editor-api/lib/table/editTable.ts.html index f4f35934ae8..e26142e2dc3 100644 --- a/coverage/packages/roosterjs-editor-api/lib/table/editTable.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/table/editTable.ts.html @@ -307,7 +307,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/table/formatTable.ts.html b/coverage/packages/roosterjs-editor-api/lib/table/formatTable.ts.html index b7fe0c00a2a..f1703bd3193 100644 --- a/coverage/packages/roosterjs-editor-api/lib/table/formatTable.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/table/formatTable.ts.html @@ -175,7 +175,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/table/index.html b/coverage/packages/roosterjs-editor-api/lib/table/index.html index f6654d7a8dc..b714a770ab4 100644 --- a/coverage/packages/roosterjs-editor-api/lib/table/index.html +++ b/coverage/packages/roosterjs-editor-api/lib/table/index.html @@ -140,7 +140,7 @@

All files packages/roosterjs-editor-api diff --git a/coverage/packages/roosterjs-editor-api/lib/table/insertTable.ts.html b/coverage/packages/roosterjs-editor-api/lib/table/insertTable.ts.html index f4233680f24..787deab9cc8 100644 --- a/coverage/packages/roosterjs-editor-api/lib/table/insertTable.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/table/insertTable.ts.html @@ -256,7 +256,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/utils/applyInlineStyle.ts.html b/coverage/packages/roosterjs-editor-api/lib/utils/applyInlineStyle.ts.html index 33df1533b00..9eb1f43e0e0 100644 --- a/coverage/packages/roosterjs-editor-api/lib/utils/applyInlineStyle.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/utils/applyInlineStyle.ts.html @@ -301,7 +301,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/utils/applyListItemWrap.ts.html b/coverage/packages/roosterjs-editor-api/lib/utils/applyListItemWrap.ts.html index e371a0ea426..a9f9bd9c780 100644 --- a/coverage/packages/roosterjs-editor-api/lib/utils/applyListItemWrap.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/utils/applyListItemWrap.ts.html @@ -205,7 +205,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/utils/blockFormat.ts.html b/coverage/packages/roosterjs-editor-api/lib/utils/blockFormat.ts.html index edfa6424a60..b4a25748b2a 100644 --- a/coverage/packages/roosterjs-editor-api/lib/utils/blockFormat.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/utils/blockFormat.ts.html @@ -190,7 +190,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/utils/blockWrap.ts.html b/coverage/packages/roosterjs-editor-api/lib/utils/blockWrap.ts.html index 53657e8fbe8..20a48864889 100644 --- a/coverage/packages/roosterjs-editor-api/lib/utils/blockWrap.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/utils/blockWrap.ts.html @@ -241,7 +241,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/utils/collapseSelectedBlocks.ts.html b/coverage/packages/roosterjs-editor-api/lib/utils/collapseSelectedBlocks.ts.html index 9539d7134c2..11f5837d00b 100644 --- a/coverage/packages/roosterjs-editor-api/lib/utils/collapseSelectedBlocks.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/utils/collapseSelectedBlocks.ts.html @@ -187,7 +187,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/utils/commitListChains.ts.html b/coverage/packages/roosterjs-editor-api/lib/utils/commitListChains.ts.html index 20d2c85dedd..90c69dd06eb 100644 --- a/coverage/packages/roosterjs-editor-api/lib/utils/commitListChains.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/utils/commitListChains.ts.html @@ -169,7 +169,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/utils/execCommand.ts.html b/coverage/packages/roosterjs-editor-api/lib/utils/execCommand.ts.html index 04eb07ce99b..7f64f631ad5 100644 --- a/coverage/packages/roosterjs-editor-api/lib/utils/execCommand.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/utils/execCommand.ts.html @@ -259,7 +259,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts.html b/coverage/packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts.html index 6c45c4d89c0..d64302bde2e 100644 --- a/coverage/packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts.html @@ -142,7 +142,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/utils/index.html b/coverage/packages/roosterjs-editor-api/lib/utils/index.html index 50bbbcab57c..b8642344b54 100644 --- a/coverage/packages/roosterjs-editor-api/lib/utils/index.html +++ b/coverage/packages/roosterjs-editor-api/lib/utils/index.html @@ -230,7 +230,7 @@

All files packages/roosterjs-editor-api diff --git a/coverage/packages/roosterjs-editor-api/lib/utils/normalizeBlockquote.ts.html b/coverage/packages/roosterjs-editor-api/lib/utils/normalizeBlockquote.ts.html index 8a79415e7f1..fa3909cc18f 100644 --- a/coverage/packages/roosterjs-editor-api/lib/utils/normalizeBlockquote.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/utils/normalizeBlockquote.ts.html @@ -217,7 +217,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-api/lib/utils/toggleListType.ts.html b/coverage/packages/roosterjs-editor-api/lib/utils/toggleListType.ts.html index 9d744c89910..87ccb6fa549 100644 --- a/coverage/packages/roosterjs-editor-api/lib/utils/toggleListType.ts.html +++ b/coverage/packages/roosterjs-editor-api/lib/utils/toggleListType.ts.html @@ -301,7 +301,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/addUndoSnapshot.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/addUndoSnapshot.ts.html index f3cfb574a93..6356e956980 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/addUndoSnapshot.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/addUndoSnapshot.ts.html @@ -228,22 +228,22 @@

All files / packag       -5125x -5125x +5126x +5126x     -5125x -5033x +5126x +5034x       +5034x 5033x -5032x       -5125x -5125x +5126x +5126x 291x 291x   @@ -256,12 +256,12 @@

All files / packag       -5125x -5033x +5126x +5034x       -5124x +5125x 260x     @@ -271,7 +271,7 @@

All files / packag 260x     -5124x +5125x 18x   18x @@ -286,12 +286,12 @@

All files / packag       -5236x -5234x -5234x -5234x +5237x +5235x +5235x +5235x   -5234x +5235x       @@ -300,7 +300,7 @@

All files / packag       -5234x +5235x       @@ -309,7 +309,7 @@

All files / packag       -5234x +5235x   22x   @@ -324,7 +324,7 @@

All files / packag       -5198x +5199x       @@ -478,7 +478,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/attachDomEvent.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/attachDomEvent.ts.html index cf158ad0314..593459d7c3f 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/attachDomEvent.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/attachDomEvent.ts.html @@ -142,14 +142,14 @@

All files / packag       -14402x -71876x -71876x -71876x -266x -237x -  -266x +14405x +71891x +71891x +71891x +301x +272x +  +301x 67x     @@ -161,29 +161,29 @@

All files / packag       -71876x +71891x   -71876x -71231x +71891x +71246x     -71231x +71246x       -71876x +71891x         -71876x -4791x -67085x -47942x -19143x -19143x +71891x +4792x +67099x +47952x +19147x +19147x   -71876x +71891x    
import { getObjectKeys } from 'roosterjs-editor-dom';
 import {
@@ -256,7 +256,7 @@ 

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/coreApiMap.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/coreApiMap.ts.html index 3026edfc7df..bfad0e40121 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/coreApiMap.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/coreApiMap.ts.html @@ -211,7 +211,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/createPasteFragment.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/createPasteFragment.ts.html index 7beb3fd5feb..c26a4229d38 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/createPasteFragment.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/createPasteFragment.ts.html @@ -283,7 +283,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/ensureTypeInContainer.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/ensureTypeInContainer.ts.html index 723f01b0b2b..d4c7be4a07f 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/ensureTypeInContainer.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/ensureTypeInContainer.ts.html @@ -180,18 +180,18 @@

All files / packag       -4799x +4800x     -4799x +4800x 1x   -4799x +4800x   -4799x +4800x     -4799x +4800x 12x 12x 2x @@ -208,11 +208,11 @@

All files / packag       -4787x +4788x       -4787x +4788x       @@ -220,11 +220,11 @@

All files / packag       -4787x +4788x     -4799x -4787x +4800x +4788x       @@ -233,7 +233,7 @@

All files / packag       -4799x +4800x 5x     @@ -346,7 +346,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/focus.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/focus.ts.html index 0b166d1949b..ee871f31f1f 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/focus.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/focus.ts.html @@ -193,7 +193,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/getContent.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/getContent.ts.html index a8222dd328e..3b6773dfddd 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/getContent.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/getContent.ts.html @@ -352,7 +352,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/getPendableFormatState.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/getPendableFormatState.ts.html index 35956c175c4..84a0956a5e1 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/getPendableFormatState.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/getPendableFormatState.ts.html @@ -382,7 +382,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/getSelectionRange.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/getSelectionRange.ts.html index b0ed96b9e12..924069f4d66 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/getSelectionRange.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/getSelectionRange.ts.html @@ -196,7 +196,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/getSelectionRangeEx.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/getSelectionRangeEx.ts.html index f0ebfce04a1..d5f84378699 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/getSelectionRangeEx.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/getSelectionRangeEx.ts.html @@ -177,8 +177,8 @@

All files / packag     1x -5943x -5943x +5944x +5944x   3x 3x @@ -228,7 +228,7 @@

All files / packag 1x     -5940x +5941x 963x 83x   @@ -246,7 +246,7 @@

All files / packag       -4977x +4978x       @@ -257,7 +257,7 @@

All files / packag       -5827x +5828x       @@ -265,7 +265,7 @@

All files / packag       -5829x +5830x    
import { contains, createRange, findClosestElementAncestor } from 'roosterjs-editor-dom';
 import {
@@ -379,7 +379,7 @@ 

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/getStyleBasedFormatState.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/getStyleBasedFormatState.ts.html index 1e08b78c368..531ed7c5124 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/getStyleBasedFormatState.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/getStyleBasedFormatState.ts.html @@ -343,7 +343,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/hasFocus.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/hasFocus.ts.html index fc45fa10847..aaf2ad3af42 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/hasFocus.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/hasFocus.ts.html @@ -82,8 +82,8 @@

All files / packag     1x -8437x -8437x +8438x +8438x       @@ -109,7 +109,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/index.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/index.html index 5e04ab7fdb2..848ac504f3c 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/index.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/index.html @@ -410,7 +410,7 @@

All files packages/roosterjs-editor-cor diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/insertNode.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/insertNode.ts.html index ebacc23403c..6534e28f4e2 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/insertNode.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/insertNode.ts.html @@ -349,39 +349,39 @@

All files / packag       -4848x +4849x             -4848x +4849x   -4848x +4849x 37x     -4848x +4849x 1x 1x     -4847x +4848x         -4847x +4848x     -4847x +4848x     -4806x -4806x +4807x +4807x   -4806x +4807x 18x 18x   @@ -415,19 +415,19 @@

All files / packag       -4788x +4789x         -4806x +4807x 1x 1x 1x       -4806x +4807x       @@ -486,7 +486,7 @@

All files / packag       -4847x +4848x       @@ -763,7 +763,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/restoreUndoSnapshot.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/restoreUndoSnapshot.ts.html index 0f9612fc25b..af487642315 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/restoreUndoSnapshot.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/restoreUndoSnapshot.ts.html @@ -283,7 +283,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/select.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/select.ts.html index 0c4b7322622..8c333feddae 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/select.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/select.ts.html @@ -233,11 +233,11 @@

All files / packag     1x -5382x +5383x   -5382x +5383x 4x -5378x +5379x 71x     @@ -245,7 +245,7 @@

All files / packag       -5307x +5308x 55x     @@ -253,7 +253,7 @@

All files / packag       -5252x +5253x       @@ -268,7 +268,7 @@

All files / packag       -5252x +5253x       @@ -277,7 +277,7 @@

All files / packag       -5382x +5383x 542x   74x @@ -318,16 +318,16 @@

All files / packag       -4840x -4840x +4841x +4841x     -5382x +5383x       -5382x -5382x +5383x +5383x       @@ -523,7 +523,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/selectImage.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/selectImage.ts.html index 964f20856d6..df0400a56eb 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/selectImage.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/selectImage.ts.html @@ -155,11 +155,11 @@

All files / packag     1x -5477x +5478x   -5477x +5478x   -5477x +5478x 56x   56x @@ -177,7 +177,7 @@

All files / packag       -5477x +5478x     1x @@ -194,8 +194,8 @@

All files / packag     1x -5477x -5477x +5478x +5478x    
import addUniqueId from './utils/addUniqueId';
 import {
@@ -274,7 +274,7 @@ 

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/selectRange.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/selectRange.ts.html index 9937cba4d02..a6f5f674bca 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/selectRange.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/selectRange.ts.html @@ -286,7 +286,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/selectTable.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/selectTable.ts.html index 2449d191e73..e04ca8e1d58 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/selectTable.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/selectTable.ts.html @@ -353,9 +353,9 @@

All files / packag       -5490x +5491x   -5490x +5491x 80x 80x   @@ -383,7 +383,7 @@

All files / packag       -5410x +5411x       @@ -513,8 +513,8 @@

All files / packag     1x -5490x -5490x +5491x +5491x       @@ -547,7 +547,7 @@

All files / packag       -5490x +5491x 87x 87x 85x @@ -556,7 +556,7 @@

All files / packag       -5405x +5406x       @@ -829,7 +829,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/setContent.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/setContent.ts.html index 7c66e593c7f..7df9d66e9c8 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/setContent.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/setContent.ts.html @@ -211,8 +211,8 @@

All files / packag       -5257x -5257x +5258x +5258x 462x     @@ -237,9 +237,9 @@

All files / packag 462x     -5257x +5258x   -5257x +5258x 5x     @@ -252,7 +252,7 @@

All files / packag 5x     -5257x +5258x 455x     @@ -430,7 +430,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/switchShadowEdit.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/switchShadowEdit.ts.html index d079eddf6d1..5dd97c3b8a3 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/switchShadowEdit.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/switchShadowEdit.ts.html @@ -487,7 +487,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/transformColor.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/transformColor.ts.html index e7b7178df43..7ee483f1e40 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/transformColor.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/transformColor.ts.html @@ -146,14 +146,14 @@

All files / packag       -9906x +9908x         -10102x -5051x -5051x +10104x +5052x +5052x 201x     @@ -165,7 +165,7 @@

All files / packag 201x     -5051x +5052x       @@ -268,7 +268,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/triggerEvent.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/triggerEvent.ts.html index 82e25c77eea..81ae2facd43 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/triggerEvent.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/triggerEvent.ts.html @@ -134,14 +134,14 @@

All files / packag       -11604x +11606x     6635x   -11602x -127326x -104302x +11604x +127348x +104320x       @@ -211,7 +211,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/utils/addUniqueId.ts.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/utils/addUniqueId.ts.html index f65b4bdacef..7c255c3813d 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/utils/addUniqueId.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/utils/addUniqueId.ts.html @@ -154,7 +154,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-core/lib/coreApi/utils/index.html b/coverage/packages/roosterjs-editor-core/lib/coreApi/utils/index.html index 736e0c4606a..c1734dad4d4 100644 --- a/coverage/packages/roosterjs-editor-core/lib/coreApi/utils/index.html +++ b/coverage/packages/roosterjs-editor-core/lib/coreApi/utils/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-editor- diff --git a/coverage/packages/roosterjs-editor-core/lib/corePlugins/CopyPastePlugin.ts.html b/coverage/packages/roosterjs-editor-core/lib/corePlugins/CopyPastePlugin.ts.html index 441cd827109..426c9d5125b 100644 --- a/coverage/packages/roosterjs-editor-core/lib/corePlugins/CopyPastePlugin.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/corePlugins/CopyPastePlugin.ts.html @@ -384,16 +384,16 @@

All files / packag     1x -4986x -4986x +4987x +4987x             -4986x -4986x +4987x +4987x       @@ -409,9 +409,9 @@

All files / packag       -4793x -4793x -4793x +4794x +4794x +4794x 2x 2x 2x @@ -422,18 +422,18 @@

All files / packag     1x -4751x -4748x +4752x +4749x   -4751x -4751x +4752x +4752x           1x -4976x +4977x     4x @@ -510,7 +510,7 @@

All files / packag       -4986x +4987x 2x 2x 2x @@ -946,7 +946,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/corePlugins/DOMEventPlugin.ts.html b/coverage/packages/roosterjs-editor-core/lib/corePlugins/DOMEventPlugin.ts.html index fc85def2b23..bc42d9549e4 100644 --- a/coverage/packages/roosterjs-editor-core/lib/corePlugins/DOMEventPlugin.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/corePlugins/DOMEventPlugin.ts.html @@ -334,8 +334,8 @@

All files / packag     1x -4987x -4987x +4988x +4988x       @@ -343,8 +343,8 @@

All files / packag       -4987x -4987x +4988x +4988x       @@ -367,12 +367,12 @@

All files / packag       -4797x -4797x +4798x +4798x   -4797x +4798x   -4797x +4798x       @@ -404,33 +404,33 @@

All files / packag       -4797x +4798x       -4797x +4798x           -4797x +4798x     -4797x +4798x     -4797x -4797x -4797x +4798x +4798x +4798x           1x -4755x -4755x +4756x +4756x       @@ -440,48 +440,48 @@

All files / packag       -4755x -4755x -4755x -4755x -4755x -4755x +4756x +4756x +4756x +4756x +4756x +4756x           1x -4987x +4988x     -4987x +4988x 1x 1x       -4987x -199x -199x +4988x +234x +234x   -199x +234x   -199x +234x   -199x +234x 1x     -199x +234x   -4987x +4988x           -4987x +4988x       @@ -491,25 +491,25 @@

All files / packag       -4987x +4988x         -4987x +4988x             -19188x -19188x +19192x +19192x 41x       -19188x +19192x       @@ -517,7 +517,7 @@

All files / packag       -4987x +4988x 2x     @@ -525,11 +525,11 @@

All files / packag       -4987x +4988x 39x     -4987x +4988x       @@ -814,7 +814,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/corePlugins/EditPlugin.ts.html b/coverage/packages/roosterjs-editor-core/lib/corePlugins/EditPlugin.ts.html index 4eff20a04cd..99e6de5b9b3 100644 --- a/coverage/packages/roosterjs-editor-core/lib/corePlugins/EditPlugin.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/corePlugins/EditPlugin.ts.html @@ -166,7 +166,7 @@

All files / packag     1x -4985x +4986x       @@ -174,7 +174,7 @@

All files / packag       -4985x +4986x       @@ -191,21 +191,21 @@

All files / packag     1x -4795x +4796x           1x -4753x +4754x           1x -4985x +4986x       @@ -213,11 +213,11 @@

All files / packag     1x -11515x -11515x -11515x +11517x +11517x +11517x   -11515x +11517x 22x 22x   @@ -226,11 +226,11 @@

All files / packag 22x     -11493x +11495x 682x     -11515x +11517x 9x 9x   @@ -343,7 +343,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/corePlugins/EntityPlugin.ts.html b/coverage/packages/roosterjs-editor-core/lib/corePlugins/EntityPlugin.ts.html index 6c9974d3ce5..0a813388cd2 100644 --- a/coverage/packages/roosterjs-editor-core/lib/corePlugins/EntityPlugin.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/corePlugins/EntityPlugin.ts.html @@ -529,15 +529,15 @@

All files / packag     1x -4996x +4997x   -4996x +4997x         -4996x -4996x +4997x +4997x       @@ -554,25 +554,25 @@

All files / packag     1x -4806x -4806x +4807x +4807x           1x -4764x -4764x -4764x -4764x +4765x +4765x +4765x +4765x           1x -4996x +4997x       @@ -580,7 +580,7 @@

All files / packag     1x -11524x +11526x   25x 25x @@ -599,8 +599,8 @@

All files / packag 690x 690x   -4788x -4788x +4789x +4789x   184x 184x @@ -612,7 +612,7 @@

All files / packag 3x     -11524x +11526x 101x     @@ -627,7 +627,7 @@

All files / packag       -4996x +4997x       @@ -677,10 +677,10 @@

All files / packag       -5478x -5478x +5479x +5479x   -5478x +5479x 12x 12x   @@ -701,7 +701,7 @@

All files / packag       -5478x +5479x     19x @@ -710,7 +710,7 @@

All files / packag       -5478x +5479x 52x   13x @@ -718,7 +718,7 @@

All files / packag 13x     -5478x +5479x       @@ -744,7 +744,7 @@

All files / packag       -4996x +4997x 2x 2x   @@ -813,7 +813,7 @@

All files / packag     1x -5478x +5479x       @@ -1288,7 +1288,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/corePlugins/ImageSelection.ts.html b/coverage/packages/roosterjs-editor-core/lib/corePlugins/ImageSelection.ts.html index 38551d30999..d0d216a24dc 100644 --- a/coverage/packages/roosterjs-editor-core/lib/corePlugins/ImageSelection.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/corePlugins/ImageSelection.ts.html @@ -181,7 +181,7 @@

All files / packag     1x -4984x +4985x       @@ -195,20 +195,20 @@

All files / packag     1x -4794x +4795x           1x -4752x -4752x +4753x +4753x     1x -11569x -11569x +11571x +11571x     8x @@ -379,7 +379,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/corePlugins/LifecyclePlugin.ts.html b/coverage/packages/roosterjs-editor-core/lib/corePlugins/LifecyclePlugin.ts.html index 616b50bc235..3a5065d2644 100644 --- a/coverage/packages/roosterjs-editor-core/lib/corePlugins/LifecyclePlugin.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/corePlugins/LifecyclePlugin.ts.html @@ -333,11 +333,11 @@

All files / packag     1x -4980x +4981x     -4980x -4980x +4981x +4981x       @@ -345,29 +345,29 @@

All files / packag       -4980x -4980x +4981x +4981x     -4980x -4974x -4788x -4788x -4788x +4981x +4975x +4789x +4789x +4789x   -4974x -4746x -4746x -4746x +4975x +4747x +4747x +4747x     -4980x +4981x     -9580x -4790x -4790x -4790x +9582x +4791x +4791x +4791x       @@ -375,7 +375,7 @@

All files / packag       -4790x +4791x       @@ -385,19 +385,19 @@

All files / packag       -4980x -4980x +4981x +4981x   -4980x -4775x -4742x +4981x +4776x +4743x       -4742x +4743x     -4775x +4776x       @@ -406,7 +406,7 @@

All files / packag       -4980x +4981x       @@ -433,31 +433,31 @@

All files / packag     1x -4790x +4791x     -4790x +4791x     -4790x +4791x     -4790x +4791x     -4790x +4791x     -4790x +4791x           -4748x -4748x +4749x +4749x   -4748x +4749x 2x   2x @@ -467,20 +467,20 @@

All files / packag 2x     -4748x -4746x -4746x -4746x +4749x +4747x +4747x +4747x     -4748x +4749x           1x -4978x +4979x       @@ -488,7 +488,7 @@

All files / packag     1x -11507x +11509x       @@ -498,11 +498,11 @@

All files / packag       -4790x -4790x +4791x +4791x   -9580x -9580x +9582x +9582x       @@ -739,7 +739,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/corePlugins/MouseUpPlugin.ts.html b/coverage/packages/roosterjs-editor-core/lib/corePlugins/MouseUpPlugin.ts.html index 69c0b6548a3..3af1bc1be8a 100644 --- a/coverage/packages/roosterjs-editor-core/lib/corePlugins/MouseUpPlugin.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/corePlugins/MouseUpPlugin.ts.html @@ -135,11 +135,11 @@

All files / packag       +4981x +4980x +4980x +4980x 4980x -4979x -4979x -4979x -4979x       @@ -153,15 +153,15 @@

All files / packag     1x -4789x +4790x           1x -4748x -4748x +4749x +4749x       @@ -169,7 +169,7 @@

All files / packag     1x -11510x +11512x       @@ -183,13 +183,13 @@

All files / packag     1x -4773x +4774x 32x 32x       -4979x +4980x 25x 25x 25x @@ -277,7 +277,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/corePlugins/NormalizeTablePlugin.ts.html b/coverage/packages/roosterjs-editor-core/lib/corePlugins/NormalizeTablePlugin.ts.html index 3426a91d897..b206bffe508 100644 --- a/coverage/packages/roosterjs-editor-core/lib/corePlugins/NormalizeTablePlugin.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/corePlugins/NormalizeTablePlugin.ts.html @@ -269,7 +269,7 @@

All files / packag     1x -4997x +4998x       @@ -285,7 +285,7 @@

All files / packag     1x -4807x +4808x       @@ -294,7 +294,7 @@

All files / packag     1x -4765x +4766x       @@ -304,13 +304,13 @@

All files / packag     1x -11532x +11534x     -5487x -5487x +5488x +5488x   -5487x +5488x     1x @@ -341,7 +341,7 @@

All files / packag     1x -5523x +5524x 173x 173x 173x @@ -619,7 +619,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/corePlugins/PendingFormatStatePlugin.ts.html b/coverage/packages/roosterjs-editor-core/lib/corePlugins/PendingFormatStatePlugin.ts.html index 7694cb2862b..69b7721bc75 100644 --- a/coverage/packages/roosterjs-editor-core/lib/corePlugins/PendingFormatStatePlugin.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/corePlugins/PendingFormatStatePlugin.ts.html @@ -265,7 +265,7 @@

All files / packag   1x   -4984x +4985x       @@ -274,7 +274,7 @@

All files / packag       -4984x +4985x       @@ -293,22 +293,22 @@

All files / packag     1x -4794x +4795x           1x -4752x -4752x +4753x +4753x           1x -4984x +4985x       @@ -316,7 +316,7 @@

All files / packag     1x -11514x +11516x       @@ -372,9 +372,9 @@

All files / packag     1x -4769x -4769x -4769x +4770x +4770x +4770x     1x @@ -625,7 +625,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/corePlugins/TypeInContainerPlugin.ts.html b/coverage/packages/roosterjs-editor-core/lib/corePlugins/TypeInContainerPlugin.ts.html index 0b9288edc91..ed2d4ca502f 100644 --- a/coverage/packages/roosterjs-editor-core/lib/corePlugins/TypeInContainerPlugin.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/corePlugins/TypeInContainerPlugin.ts.html @@ -169,7 +169,7 @@

All files / packag     1x -4981x +4982x       @@ -183,14 +183,14 @@

All files / packag     1x -4791x +4792x           1x -4744x +4745x     1x @@ -209,10 +209,10 @@

All files / packag       -11512x +11514x     -11512x +11514x       @@ -358,7 +358,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/corePlugins/UndoPlugin.ts.html b/coverage/packages/roosterjs-editor-core/lib/corePlugins/UndoPlugin.ts.html index 3f657be162c..ed7802b454f 100644 --- a/coverage/packages/roosterjs-editor-core/lib/corePlugins/UndoPlugin.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/corePlugins/UndoPlugin.ts.html @@ -369,8 +369,8 @@

All files / packag     1x -5010x -5010x +5011x +5011x       @@ -378,7 +378,7 @@

All files / packag       -5010x +5011x       @@ -402,21 +402,21 @@

All files / packag     1x -4817x +4818x           1x -4771x +4772x           1x -5006x +5007x       @@ -437,19 +437,19 @@

All files / packag   1x   -11548x +11550x       -11548x +11550x   -4789x -4789x +4790x +4790x     -4787x +4788x   -4789x +4790x   41x 41x @@ -579,19 +579,19 @@

All files / packag     1x -4818x -4818x +4819x +4819x   1x     -5003x +5004x   -5003x -9572x +5004x +9574x     -5245x +5246x 683x 11x   @@ -601,7 +601,7 @@

All files / packag       -5005x +5006x   1x   @@ -904,7 +904,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/corePlugins/createCorePlugins.ts.html b/coverage/packages/roosterjs-editor-core/lib/corePlugins/createCorePlugins.ts.html index 4a5aa001945..4b47f4f8a1a 100644 --- a/coverage/packages/roosterjs-editor-core/lib/corePlugins/createCorePlugins.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/corePlugins/createCorePlugins.ts.html @@ -153,10 +153,10 @@

All files / packag       -4976x +4977x     -4976x +4977x       @@ -179,7 +179,7 @@

All files / packag     1x -4976x +4977x       @@ -262,7 +262,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/corePlugins/index.html b/coverage/packages/roosterjs-editor-core/lib/corePlugins/index.html index c86db1b8a2e..798f957dc20 100644 --- a/coverage/packages/roosterjs-editor-core/lib/corePlugins/index.html +++ b/coverage/packages/roosterjs-editor-core/lib/corePlugins/index.html @@ -260,7 +260,7 @@

All files packages/roosterjs-editor-cor diff --git a/coverage/packages/roosterjs-editor-core/lib/corePlugins/utils/forEachSelectedCell.ts.html b/coverage/packages/roosterjs-editor-core/lib/corePlugins/utils/forEachSelectedCell.ts.html index 0c15a213d57..e6386e64eec 100644 --- a/coverage/packages/roosterjs-editor-core/lib/corePlugins/utils/forEachSelectedCell.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/corePlugins/utils/forEachSelectedCell.ts.html @@ -130,7 +130,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-core/lib/corePlugins/utils/index.html b/coverage/packages/roosterjs-editor-core/lib/corePlugins/utils/index.html index 5df54130087..c3867ed1768 100644 --- a/coverage/packages/roosterjs-editor-core/lib/corePlugins/utils/index.html +++ b/coverage/packages/roosterjs-editor-core/lib/corePlugins/utils/index.html @@ -125,7 +125,7 @@

All files packages/roosterjs-editor- diff --git a/coverage/packages/roosterjs-editor-core/lib/corePlugins/utils/inlineEntityOnPluginEvent.ts.html b/coverage/packages/roosterjs-editor-core/lib/corePlugins/utils/inlineEntityOnPluginEvent.ts.html index cf5c02db1ca..2dd9e2c3ab1 100644 --- a/coverage/packages/roosterjs-editor-core/lib/corePlugins/utils/inlineEntityOnPluginEvent.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/corePlugins/utils/inlineEntityOnPluginEvent.ts.html @@ -937,7 +937,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-core/lib/corePlugins/utils/removeCellsOutsideSelection.ts.html b/coverage/packages/roosterjs-editor-core/lib/corePlugins/utils/removeCellsOutsideSelection.ts.html index 9a6a742a301..678ecac5dae 100644 --- a/coverage/packages/roosterjs-editor-core/lib/corePlugins/utils/removeCellsOutsideSelection.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/corePlugins/utils/removeCellsOutsideSelection.ts.html @@ -172,7 +172,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-core/lib/editor/DarkColorHandlerImpl.ts.html b/coverage/packages/roosterjs-editor-core/lib/editor/DarkColorHandlerImpl.ts.html index cb4a12fe1a4..281c2a4351d 100644 --- a/coverage/packages/roosterjs-editor-core/lib/editor/DarkColorHandlerImpl.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/editor/DarkColorHandlerImpl.ts.html @@ -251,16 +251,16 @@

All files / packag     1x -5092x +5094x   -5092x +5094x           1x -5234x +5235x       @@ -271,16 +271,16 @@

All files / packag     1x -14451x +14454x     -14451x -14451x -14451x -14451x +14454x +14454x +14454x +14454x     -14451x +14454x 14x     @@ -293,16 +293,16 @@

All files / packag   14x   -14437x +14440x             -4745x -4745x -4745x +4746x +4746x +4746x       @@ -314,13 +314,13 @@

All files / packag   1x   -16342x +16345x     -16342x -14567x +16345x +14570x   -14567x +14570x 10x 9x 9x @@ -328,7 +328,7 @@

All files / packag   1x   -14557x +14560x       @@ -338,11 +338,11 @@

All files / packag 1x     -14551x +14554x       -16342x +16345x       @@ -571,7 +571,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/editor/Editor.ts.html b/coverage/packages/roosterjs-editor-core/lib/editor/Editor.ts.html index 68155bfcd54..2b87c6ac156 100644 --- a/coverage/packages/roosterjs-editor-core/lib/editor/Editor.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/editor/Editor.ts.html @@ -87,8 +87,8 @@

All files / packag       -4770x -4768x +4771x +4769x   1x  
import { createEditorCore } from './createEditorCore';
@@ -115,7 +115,7 @@ 

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/editor/EditorBase.ts.html b/coverage/packages/roosterjs-editor-core/lib/editor/EditorBase.ts.html index c86e288f718..b50ddc2ab29 100644 --- a/coverage/packages/roosterjs-editor-core/lib/editor/EditorBase.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/editor/EditorBase.ts.html @@ -1161,7 +1161,7 @@

All files / packag   1x   -4788x +4789x       @@ -1170,24 +1170,24 @@

All files / packag       -4788x +4789x           -4788x +4789x 2x       -4786x +4787x     -52799x +52810x     -4786x +4787x       @@ -1196,14 +1196,14 @@

All files / packag     1x -4744x -4744x -52295x +4745x +4745x +52306x     -4744x +4745x   -4744x +4745x       @@ -1295,24 +1295,24 @@

All files / packag   1x   -22019x +22023x           -11057x -11057x -11057x -11057x +11059x +11059x +11059x +11059x   -11057x -11057x +11059x +11059x 89x 89x     -10968x +10970x     89x @@ -1363,9 +1363,9 @@

All files / packag       -5612x -5199x -5199x +5613x +5200x +5200x       @@ -1518,9 +1518,9 @@

All files / packag       -5379x +5380x   -5379x +5380x       @@ -1608,9 +1608,9 @@

All files / packag       -14395x -14395x -14395x +14398x +14398x +14398x       @@ -1625,16 +1625,16 @@

All files / packag 1x     -9746x +9748x   -9638x -9638x +9640x +9640x       -9638x +9640x   -9638x +9640x       @@ -1690,8 +1690,8 @@

All files / packag       -5112x -5112x +5113x +5113x       @@ -1704,8 +1704,8 @@

All files / packag     1x -4786x -4786x +4787x +4787x       @@ -1720,7 +1720,7 @@

All files / packag     1x -19780x +19784x       @@ -1751,7 +1751,7 @@

All files / packag     1x -11517x +11519x       @@ -1940,8 +1940,8 @@

All files / packag     1x -4786x -4786x +4787x +4787x       @@ -2004,7 +2004,7 @@

All files / packag     1x -4806x +4807x       @@ -2042,7 +2042,7 @@

All files / packag 1x     -11446x +11448x       @@ -2109,10 +2109,10 @@

All files / packag     1x -116127x +116149x     -116127x +116149x       @@ -3154,7 +3154,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/editor/createEditorCore.ts.html b/coverage/packages/roosterjs-editor-core/lib/editor/createEditorCore.ts.html index f6a493197be..8a8cb073d0e 100644 --- a/coverage/packages/roosterjs-editor-core/lib/editor/createEditorCore.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/editor/createEditorCore.ts.html @@ -127,23 +127,23 @@

All files / packag     1x -4786x -4786x +4787x +4787x   -4786x -62218x -4786x -4757x +4787x +62231x +4787x +4758x     -57432x +57444x       -4786x -4786x +4787x +4787x   -4786x +4787x   31x   @@ -154,14 +154,14 @@

All files / packag       -4786x +4787x             -57585x +57597x   421x   @@ -171,7 +171,7 @@

All files / packag       -4786x +4787x    
import createCorePlugins, { getPluginState } from '../corePlugins/createCorePlugins';
 import DarkColorHandlerImpl from './DarkColorHandlerImpl';
@@ -238,7 +238,7 @@ 

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/editor/index.html b/coverage/packages/roosterjs-editor-core/lib/editor/index.html index 1e0d1550d3c..ac368d5558e 100644 --- a/coverage/packages/roosterjs-editor-core/lib/editor/index.html +++ b/coverage/packages/roosterjs-editor-core/lib/editor/index.html @@ -155,7 +155,7 @@

All files packages/roosterjs-editor-cor diff --git a/coverage/packages/roosterjs-editor-core/lib/editor/isFeatureEnabled.ts.html b/coverage/packages/roosterjs-editor-core/lib/editor/isFeatureEnabled.ts.html index 057e598bb5a..44e4d0d14c8 100644 --- a/coverage/packages/roosterjs-editor-core/lib/editor/isFeatureEnabled.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/editor/isFeatureEnabled.ts.html @@ -85,7 +85,7 @@

All files / packag       -11553x +11555x    
import { ExperimentalFeatures } from 'roosterjs-editor-types';
 import type { CompatibleExperimentalFeatures } from 'roosterjs-editor-types/lib/compatibleTypes';
@@ -109,7 +109,7 @@ 

All files / packag diff --git a/coverage/packages/roosterjs-editor-core/lib/index.html b/coverage/packages/roosterjs-editor-core/lib/index.html index b92e9f7827a..193108a2a03 100644 --- a/coverage/packages/roosterjs-editor-core/lib/index.html +++ b/coverage/packages/roosterjs-editor-core/lib/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-editor-core/l diff --git a/coverage/packages/roosterjs-editor-core/lib/index.ts.html b/coverage/packages/roosterjs-editor-core/lib/index.ts.html index 27f371fabb0..a05488fe64f 100644 --- a/coverage/packages/roosterjs-editor-core/lib/index.ts.html +++ b/coverage/packages/roosterjs-editor-core/lib/index.ts.html @@ -63,7 +63,7 @@

All files / packages/ 4 5 6  -4732x +4733x 2x 126x 26x @@ -79,7 +79,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-dom/lib/blockElements/NodeBlockElement.ts.html b/coverage/packages/roosterjs-editor-dom/lib/blockElements/NodeBlockElement.ts.html index aeab6b8240d..c38ecea5ace 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/blockElements/NodeBlockElement.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/blockElements/NodeBlockElement.ts.html @@ -265,7 +265,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/blockElements/StartEndBlockElement.ts.html b/coverage/packages/roosterjs-editor-dom/lib/blockElements/StartEndBlockElement.ts.html index 283225d9d00..bc49ca2d178 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/blockElements/StartEndBlockElement.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/blockElements/StartEndBlockElement.ts.html @@ -397,7 +397,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/blockElements/getBlockElementAtNode.ts.html b/coverage/packages/roosterjs-editor-dom/lib/blockElements/getBlockElementAtNode.ts.html index 7ab8bfcc78e..e065240ec1a 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/blockElements/getBlockElementAtNode.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/blockElements/getBlockElementAtNode.ts.html @@ -235,8 +235,8 @@

All files / packag       -7323x -5394x +7324x +5395x       @@ -487,7 +487,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/blockElements/getFirstLastBlockElement.ts.html b/coverage/packages/roosterjs-editor-dom/lib/blockElements/getFirstLastBlockElement.ts.html index 247b68aea97..3a85421f143 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/blockElements/getFirstLastBlockElement.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/blockElements/getFirstLastBlockElement.ts.html @@ -89,11 +89,11 @@

All files / packag       -4878x -4878x -4975x +4879x +4879x +4976x   -4878x +4879x    
import getBlockElementAtNode from './getBlockElementAtNode';
 import { BlockElement } from 'roosterjs-editor-types';
@@ -121,7 +121,7 @@ 

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/blockElements/index.html b/coverage/packages/roosterjs-editor-dom/lib/blockElements/index.html index 573797d1a5b..5026c6ca0f5 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/blockElements/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/blockElements/index.html @@ -140,7 +140,7 @@

All files packages/roosterjs-editor-dom diff --git a/coverage/packages/roosterjs-editor-dom/lib/clipboard/createFragmentFromClipboardData.ts.html b/coverage/packages/roosterjs-editor-dom/lib/clipboard/createFragmentFromClipboardData.ts.html index bf424bc90b7..724e86453b5 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/clipboard/createFragmentFromClipboardData.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/clipboard/createFragmentFromClipboardData.ts.html @@ -316,7 +316,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/clipboard/extractClipboardEvent.ts.html b/coverage/packages/roosterjs-editor-dom/lib/clipboard/extractClipboardEvent.ts.html index f82cdbf86ad..64a02a8c123 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/clipboard/extractClipboardEvent.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/clipboard/extractClipboardEvent.ts.html @@ -223,7 +223,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/clipboard/extractClipboardItems.ts.html b/coverage/packages/roosterjs-editor-dom/lib/clipboard/extractClipboardItems.ts.html index 05e09285386..22b48d010ae 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/clipboard/extractClipboardItems.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/clipboard/extractClipboardItems.ts.html @@ -472,7 +472,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/clipboard/extractClipboardItemsForIE.ts.html b/coverage/packages/roosterjs-editor-dom/lib/clipboard/extractClipboardItemsForIE.ts.html index 010f48ef693..ba5e92628f0 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/clipboard/extractClipboardItemsForIE.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/clipboard/extractClipboardItemsForIE.ts.html @@ -268,7 +268,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/clipboard/getPasteType.ts.html b/coverage/packages/roosterjs-editor-dom/lib/clipboard/getPasteType.ts.html index 99aaf612153..4002c47626f 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/clipboard/getPasteType.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/clipboard/getPasteType.ts.html @@ -136,7 +136,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/clipboard/handleImagePaste.ts.html b/coverage/packages/roosterjs-editor-dom/lib/clipboard/handleImagePaste.ts.html index f0880d6204d..54b46968cca 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/clipboard/handleImagePaste.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/clipboard/handleImagePaste.ts.html @@ -97,7 +97,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/clipboard/handleTextPaste.ts.html b/coverage/packages/roosterjs-editor-dom/lib/clipboard/handleTextPaste.ts.html index 8d82f6b509c..a3ded7ea2bf 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/clipboard/handleTextPaste.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/clipboard/handleTextPaste.ts.html @@ -268,7 +268,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/clipboard/index.html b/coverage/packages/roosterjs-editor-dom/lib/clipboard/index.html index e74fffb2e64..e1db89b0b71 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/clipboard/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/clipboard/index.html @@ -215,7 +215,7 @@

All files packages/roosterjs-editor-dom diff --git a/coverage/packages/roosterjs-editor-dom/lib/clipboard/retrieveMetadataFromClipboard.ts.html b/coverage/packages/roosterjs-editor-dom/lib/clipboard/retrieveMetadataFromClipboard.ts.html index 77e543e6d43..634824cfc0e 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/clipboard/retrieveMetadataFromClipboard.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/clipboard/retrieveMetadataFromClipboard.ts.html @@ -289,7 +289,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/clipboard/sanitizePasteContent.ts.html b/coverage/packages/roosterjs-editor-dom/lib/clipboard/sanitizePasteContent.ts.html index 06921e7fc96..11310ab4862 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/clipboard/sanitizePasteContent.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/clipboard/sanitizePasteContent.ts.html @@ -118,7 +118,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/BodyScoper.ts.html b/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/BodyScoper.ts.html index c3b3dbf5dc7..c9c0fb82c5a 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/BodyScoper.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/BodyScoper.ts.html @@ -232,7 +232,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/ContentTraverser.ts.html b/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/ContentTraverser.ts.html index d64e94318d6..e9cc1d4cee1 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/ContentTraverser.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/ContentTraverser.ts.html @@ -748,7 +748,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/PositionContentSearcher.ts.html b/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/PositionContentSearcher.ts.html index 4758fb22b0b..fdd1e78736d 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/PositionContentSearcher.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/PositionContentSearcher.ts.html @@ -763,7 +763,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/SelectionBlockScoper.ts.html b/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/SelectionBlockScoper.ts.html index 09cac3d37cd..0c5a2983ed5 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/SelectionBlockScoper.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/SelectionBlockScoper.ts.html @@ -415,7 +415,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/SelectionScoper.ts.html b/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/SelectionScoper.ts.html index 5d6477a6616..169c8e0dbb2 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/SelectionScoper.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/SelectionScoper.ts.html @@ -439,7 +439,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/index.html b/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/index.html index 6e23e4c22bf..612b2717687 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/contentTraverser/index.html @@ -155,7 +155,7 @@

All files packages/roosterjs-editor-dom diff --git a/coverage/packages/roosterjs-editor-dom/lib/delimiter/addDelimiters.ts.html b/coverage/packages/roosterjs-editor-dom/lib/delimiter/addDelimiters.ts.html index 103b0f0a40d..b342b4dda42 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/delimiter/addDelimiters.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/delimiter/addDelimiters.ts.html @@ -274,7 +274,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/delimiter/getDelimiterFromElement.ts.html b/coverage/packages/roosterjs-editor-dom/lib/delimiter/getDelimiterFromElement.ts.html index ef22b16efb1..bfcdffd9d68 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/delimiter/getDelimiterFromElement.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/delimiter/getDelimiterFromElement.ts.html @@ -139,7 +139,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/delimiter/index.html b/coverage/packages/roosterjs-editor-dom/lib/delimiter/index.html index e6e07c590b0..ed5049525de 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/delimiter/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/delimiter/index.html @@ -110,7 +110,7 @@

All files packages/roosterjs-editor-dom diff --git a/coverage/packages/roosterjs-editor-dom/lib/edit/adjustInsertPosition.ts.html b/coverage/packages/roosterjs-editor-dom/lib/edit/adjustInsertPosition.ts.html index 6a549720f2d..d98739ac525 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/edit/adjustInsertPosition.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/edit/adjustInsertPosition.ts.html @@ -1132,7 +1132,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/edit/deleteSelectedContent.ts.html b/coverage/packages/roosterjs-editor-dom/lib/edit/deleteSelectedContent.ts.html index fdd5d62a528..40b83fe7e8a 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/edit/deleteSelectedContent.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/edit/deleteSelectedContent.ts.html @@ -475,7 +475,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/edit/getTextContent.ts.html b/coverage/packages/roosterjs-editor-dom/lib/edit/getTextContent.ts.html index 57134b9b0dc..82168a9c69e 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/edit/getTextContent.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/edit/getTextContent.ts.html @@ -121,7 +121,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/edit/index.html b/coverage/packages/roosterjs-editor-dom/lib/edit/index.html index 446e88d8fb8..236bc201f83 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/edit/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/edit/index.html @@ -125,7 +125,7 @@

All files packages/roosterjs-editor-dom diff --git a/coverage/packages/roosterjs-editor-dom/lib/entity/commitEntity.ts.html b/coverage/packages/roosterjs-editor-dom/lib/entity/commitEntity.ts.html index bdcaefcfb17..88a0c067580 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/entity/commitEntity.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/entity/commitEntity.ts.html @@ -157,7 +157,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/entity/entityPlaceholderUtils.ts.html b/coverage/packages/roosterjs-editor-dom/lib/entity/entityPlaceholderUtils.ts.html index 50d9220ba55..a1157e856c1 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/entity/entityPlaceholderUtils.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/entity/entityPlaceholderUtils.ts.html @@ -514,7 +514,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/entity/getEntityFromElement.ts.html b/coverage/packages/roosterjs-editor-dom/lib/entity/getEntityFromElement.ts.html index ef5aa3938b9..5f0ba8197d5 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/entity/getEntityFromElement.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/entity/getEntityFromElement.ts.html @@ -166,7 +166,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/entity/getEntitySelector.ts.html b/coverage/packages/roosterjs-editor-dom/lib/entity/getEntitySelector.ts.html index 857608c4a87..d40ba4469ed 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/entity/getEntitySelector.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/entity/getEntitySelector.ts.html @@ -77,9 +77,9 @@

All files / packag     1x -6249x -6249x -6249x +6250x +6250x +6250x    
import { EntityClasses } from 'roosterjs-editor-types';
  
@@ -100,7 +100,7 @@ 

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/entity/index.html b/coverage/packages/roosterjs-editor-dom/lib/entity/index.html index 53d616312ff..ab99c5a8d46 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/entity/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/entity/index.html @@ -140,7 +140,7 @@

All files packages/roosterjs-editor-dom diff --git a/coverage/packages/roosterjs-editor-dom/lib/event/cacheGetEventData.ts.html b/coverage/packages/roosterjs-editor-dom/lib/event/cacheGetEventData.ts.html index ee30ce3a07b..f12eb297590 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/event/cacheGetEventData.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/event/cacheGetEventData.ts.html @@ -139,7 +139,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/event/clearEventDataCache.ts.html b/coverage/packages/roosterjs-editor-dom/lib/event/clearEventDataCache.ts.html index 24872bbe36b..1fd291b51b9 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/event/clearEventDataCache.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/event/clearEventDataCache.ts.html @@ -112,7 +112,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/event/index.html b/coverage/packages/roosterjs-editor-dom/lib/event/index.html index 2d287714477..27f2aaad9ca 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/event/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/event/index.html @@ -155,7 +155,7 @@

All files packages/roosterjs-editor-dom diff --git a/coverage/packages/roosterjs-editor-dom/lib/event/isCharacterValue.ts.html b/coverage/packages/roosterjs-editor-dom/lib/event/isCharacterValue.ts.html index 1b713ae1017..fa08a90eee3 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/event/isCharacterValue.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/event/isCharacterValue.ts.html @@ -100,7 +100,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/event/isCtrlOrMetaPressed.ts.html b/coverage/packages/roosterjs-editor-dom/lib/event/isCtrlOrMetaPressed.ts.html index 7b8dae3ea4e..6eb193f6cdd 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/event/isCtrlOrMetaPressed.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/event/isCtrlOrMetaPressed.ts.html @@ -106,7 +106,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/event/isModifierKey.ts.html b/coverage/packages/roosterjs-editor-dom/lib/event/isModifierKey.ts.html index dc21ca3c16c..09b33407de2 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/event/isModifierKey.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/event/isModifierKey.ts.html @@ -109,7 +109,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/HtmlSanitizer.ts.html b/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/HtmlSanitizer.ts.html index 66b397a9fcf..23568032bb8 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/HtmlSanitizer.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/HtmlSanitizer.ts.html @@ -1090,7 +1090,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/chainSanitizerCallback.ts.html b/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/chainSanitizerCallback.ts.html index 86e3ec44dcb..1acc7df2aa3 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/chainSanitizerCallback.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/chainSanitizerCallback.ts.html @@ -133,7 +133,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/cloneObject.ts.html b/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/cloneObject.ts.html index 74c070eb6c1..a4406459452 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/cloneObject.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/cloneObject.ts.html @@ -166,7 +166,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/createDefaultHtmlSanitizerOptions.ts.html b/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/createDefaultHtmlSanitizerOptions.ts.html index 977c4aeb80a..dea7de612ec 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/createDefaultHtmlSanitizerOptions.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/createDefaultHtmlSanitizerOptions.ts.html @@ -124,7 +124,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/getAllowedValues.ts.html b/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/getAllowedValues.ts.html index a403a79dc41..6de4d68f66c 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/getAllowedValues.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/getAllowedValues.ts.html @@ -865,7 +865,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/getInheritableStyles.ts.html b/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/getInheritableStyles.ts.html index d4ad645887e..4324f5f2f44 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/getInheritableStyles.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/getInheritableStyles.ts.html @@ -139,7 +139,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/getPredefinedCssForElement.ts.html b/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/getPredefinedCssForElement.ts.html index 885f739f04e..2f9a2e8a9eb 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/getPredefinedCssForElement.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/getPredefinedCssForElement.ts.html @@ -214,7 +214,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/index.html b/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/index.html index ad2c0f151bb..69f22085514 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/index.html @@ -200,7 +200,7 @@

All files packages/roosterjs-editor-dom diff --git a/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/processCssVariable.ts.html b/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/processCssVariable.ts.html index c7ae49e9383..90f4bdfe864 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/processCssVariable.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/htmlSanitizer/processCssVariable.ts.html @@ -118,7 +118,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/index.html b/coverage/packages/roosterjs-editor-dom/lib/index.html index bd35338c63c..e5f2b5620a9 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-editor-dom/li diff --git a/coverage/packages/roosterjs-editor-dom/lib/index.ts.html b/coverage/packages/roosterjs-editor-dom/lib/index.ts.html index 314fc2d181d..44a07bfe754 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/index.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/index.ts.html @@ -213,8 +213,8 @@

All files / packages/ 154 155 156 -1575006x -4807x +1575007x +4808x   265x 128x @@ -243,12 +243,12 @@

All files / packages/ 2x 21x   -19475x -4788x +19479x +4789x 20x 29x -12587x -6045x +12588x +6046x 1x 214x 1x @@ -256,12 +256,12 @@

All files / packages/ 101x     -7600x +7601x 373x 37x 36x 71x -11079x +11081x 21x 316x 112x @@ -269,13 +269,13 @@

All files / packages/ 207x 4x 11x -12912x +12914x 7x 1x -9677x +9679x 372x -5011x -262x +5012x +263x 32x 1x 116x @@ -298,11 +298,11 @@

All files / packages/ 1x 1x   -11095x +11097x 888x 1x 8x -5209x +5210x 4x 1x 1x @@ -311,8 +311,8 @@

All files / packages/   872x   -5246x -9573x +5247x +9575x 1x 1x 684x @@ -321,7 +321,7 @@

All files / packages/ 1x 1x   -5004x +5005x 12x   48x @@ -330,15 +330,15 @@

All files / packages/ 296x   136x -5718x -5762x +5719x +5763x 1x 1x 5x 472x     -355x +787x 8x 5x 54x @@ -348,7 +348,7 @@

All files / packages/ 6x 321x 137x -10968x +10970x   32x 1x @@ -364,8 +364,8 @@

All files / packages/   75x   -4841x -42047x +4842x +42057x 1109x   11x @@ -532,7 +532,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/EmptyInlineElement.ts.html b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/EmptyInlineElement.ts.html index 590cca9ea88..b4b3039b38e 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/EmptyInlineElement.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/EmptyInlineElement.ts.html @@ -280,7 +280,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/ImageInlineElement.ts.html b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/ImageInlineElement.ts.html index 9e12549e2ce..ef0d62d08cc 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/ImageInlineElement.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/ImageInlineElement.ts.html @@ -97,7 +97,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/LinkInlineElement.ts.html b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/LinkInlineElement.ts.html index 43009d007c4..accfc15568c 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/LinkInlineElement.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/LinkInlineElement.ts.html @@ -97,7 +97,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/NodeInlineElement.ts.html b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/NodeInlineElement.ts.html index a45dbf82b27..cba1e950e1c 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/NodeInlineElement.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/NodeInlineElement.ts.html @@ -340,7 +340,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/PartialInlineElement.ts.html b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/PartialInlineElement.ts.html index 0436da9b7ba..1897033148f 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/PartialInlineElement.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/PartialInlineElement.ts.html @@ -433,7 +433,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/applyTextStyle.ts.html b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/applyTextStyle.ts.html index 4878d65fa2d..b6edae3de36 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/applyTextStyle.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/applyTextStyle.ts.html @@ -370,7 +370,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/getFirstLastInlineElement.ts.html b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/getFirstLastInlineElement.ts.html index 258d7d5e56b..18650bbd88b 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/getFirstLastInlineElement.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/getFirstLastInlineElement.ts.html @@ -139,7 +139,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/getInlineElementAtNode.ts.html b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/getInlineElementAtNode.ts.html index bc341edc097..4f169bd839b 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/getInlineElementAtNode.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/getInlineElementAtNode.ts.html @@ -253,7 +253,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/getInlineElementBeforeAfter.ts.html b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/getInlineElementBeforeAfter.ts.html index 9b360f09a91..7845348ac95 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/getInlineElementBeforeAfter.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/getInlineElementBeforeAfter.ts.html @@ -274,7 +274,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/index.html b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/index.html index b7948ed3490..4fa34b93ef6 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/inlineElements/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/inlineElements/index.html @@ -215,7 +215,7 @@

All files packages/roosterjs-editor-dom diff --git a/coverage/packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts.html b/coverage/packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts.html index a74e9e25a73..84219a546e7 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/jsUtils/arrayPush.ts.html @@ -71,7 +71,7 @@

All files / packag     1x -4979x +4980x    
/**
  * A type-safe wrapper for Array.prototype.push.apply()
@@ -88,7 +88,7 @@ 

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts.html b/coverage/packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts.html index e5ba869adf0..e998803c538 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/jsUtils/getObjectKeys.ts.html @@ -75,7 +75,7 @@

All files / packag 1x     -43824x +43834x    
/**
  * Provide a strong-typed version of Object.keys()
@@ -94,7 +94,7 @@ 

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/jsUtils/index.html b/coverage/packages/roosterjs-editor-dom/lib/jsUtils/index.html index ce729d7d745..5f0de307490 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/jsUtils/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/jsUtils/index.html @@ -125,7 +125,7 @@

All files packages/roosterjs-editor-dom diff --git a/coverage/packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts.html b/coverage/packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts.html index b8f65e1679a..77cf46b78a3 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts.html @@ -125,7 +125,7 @@

All files / packag     1x -15579x +15581x    
/**
  * Convert a named node map to an array
@@ -169,7 +169,7 @@ 

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/list/VList.ts.html b/coverage/packages/roosterjs-editor-dom/lib/list/VList.ts.html index f81798b2174..80d34e3eaef 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/list/VList.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/list/VList.ts.html @@ -1801,7 +1801,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/list/VListChain.ts.html b/coverage/packages/roosterjs-editor-dom/lib/list/VListChain.ts.html index d5007182a7b..93bce0d0aea 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/list/VListChain.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/list/VListChain.ts.html @@ -601,7 +601,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/list/VListItem.ts.html b/coverage/packages/roosterjs-editor-dom/lib/list/VListItem.ts.html index 171a0a53db2..805fd1f7cec 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/list/VListItem.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/list/VListItem.ts.html @@ -1615,7 +1615,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/list/convertDecimalsToAlpha.ts.html b/coverage/packages/roosterjs-editor-dom/lib/list/convertDecimalsToAlpha.ts.html index 8711d623399..1d37b9e2cc6 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/list/convertDecimalsToAlpha.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/list/convertDecimalsToAlpha.ts.html @@ -196,7 +196,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/list/convertDecimalsToRomans.ts.html b/coverage/packages/roosterjs-editor-dom/lib/list/convertDecimalsToRomans.ts.html index 229c34df090..f964c783688 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/list/convertDecimalsToRomans.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/list/convertDecimalsToRomans.ts.html @@ -166,7 +166,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/list/createVListFromRegion.ts.html b/coverage/packages/roosterjs-editor-dom/lib/list/createVListFromRegion.ts.html index 7ae806f7546..2a169f7e8a0 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/list/createVListFromRegion.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/list/createVListFromRegion.ts.html @@ -508,7 +508,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/list/getListTypeFromNode.ts.html b/coverage/packages/roosterjs-editor-dom/lib/list/getListTypeFromNode.ts.html index afd62e06f29..5b2335cea24 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/list/getListTypeFromNode.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/list/getListTypeFromNode.ts.html @@ -193,7 +193,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/list/getRootListNode.ts.html b/coverage/packages/roosterjs-editor-dom/lib/list/getRootListNode.ts.html index 1bc74f4f75e..e8e04d1349e 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/list/getRootListNode.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/list/getRootListNode.ts.html @@ -208,7 +208,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/list/index.html b/coverage/packages/roosterjs-editor-dom/lib/list/index.html index d9cd3ef50c4..852648953c7 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/list/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/list/index.html @@ -245,7 +245,7 @@

All files packages/roosterjs-editor-dom diff --git a/coverage/packages/roosterjs-editor-dom/lib/list/setBulletListMarkers.ts.html b/coverage/packages/roosterjs-editor-dom/lib/list/setBulletListMarkers.ts.html index 99c89b4bef7..fb4c954eae5 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/list/setBulletListMarkers.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/list/setBulletListMarkers.ts.html @@ -148,7 +148,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/list/setListItemStyle.ts.html b/coverage/packages/roosterjs-editor-dom/lib/list/setListItemStyle.ts.html index 2347b53169f..f511a8b43b8 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/list/setListItemStyle.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/list/setListItemStyle.ts.html @@ -334,7 +334,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/list/setNumberingListMarkers.ts.html b/coverage/packages/roosterjs-editor-dom/lib/list/setNumberingListMarkers.ts.html index b810284a09a..43fb3dae92c 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/list/setNumberingListMarkers.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/list/setNumberingListMarkers.ts.html @@ -490,7 +490,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/metadata/definitionCreators.ts.html b/coverage/packages/roosterjs-editor-dom/lib/metadata/definitionCreators.ts.html index 45d04cc4bca..665cb806626 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/metadata/definitionCreators.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/metadata/definitionCreators.ts.html @@ -424,7 +424,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/metadata/index.html b/coverage/packages/roosterjs-editor-dom/lib/metadata/index.html index 0619bdd39a2..72f0bb98a5e 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/metadata/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/metadata/index.html @@ -125,7 +125,7 @@

All files packages/roosterjs-editor-dom diff --git a/coverage/packages/roosterjs-editor-dom/lib/metadata/metadata.ts.html b/coverage/packages/roosterjs-editor-dom/lib/metadata/metadata.ts.html index 66f9bd8b89a..eca57bcded0 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/metadata/metadata.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/metadata/metadata.ts.html @@ -259,7 +259,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/metadata/validate.ts.html b/coverage/packages/roosterjs-editor-dom/lib/metadata/validate.ts.html index b86a75d5466..3414298ecd6 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/metadata/validate.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/metadata/validate.ts.html @@ -268,7 +268,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/constants.ts.html b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/constants.ts.html index e746b289aba..692e7c644f6 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/constants.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/constants.ts.html @@ -109,7 +109,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/documentContainWacElements.ts.html b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/documentContainWacElements.ts.html index dc50786ce9e..f4ec4dad7f4 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/documentContainWacElements.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/documentContainWacElements.ts.html @@ -112,7 +112,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/getPasteSource.ts.html b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/getPasteSource.ts.html index 9b12a2a61ca..dc2ab319320 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/getPasteSource.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/getPasteSource.ts.html @@ -250,7 +250,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/index.html b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/index.html index cdf109c7c86..d8d88a6458b 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/index.html @@ -215,7 +215,7 @@

All files packages/roosterjs-editor-dom diff --git a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isExcelDesktopDocument.ts.html b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isExcelDesktopDocument.ts.html index 45b8bb57d74..3a6852a71e1 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isExcelDesktopDocument.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isExcelDesktopDocument.ts.html @@ -115,7 +115,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isExcelOnlineDocument.ts.html b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isExcelOnlineDocument.ts.html index abe2b625453..a2258283909 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isExcelOnlineDocument.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isExcelOnlineDocument.ts.html @@ -127,7 +127,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isGoogleSheetDocument.ts.html b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isGoogleSheetDocument.ts.html index a2c90843ee5..e716fcfb3b4 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isGoogleSheetDocument.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isGoogleSheetDocument.ts.html @@ -109,7 +109,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isPowerPointDesktopDocument.ts.html b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isPowerPointDesktopDocument.ts.html index 75b20967306..e574117734a 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isPowerPointDesktopDocument.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isPowerPointDesktopDocument.ts.html @@ -109,7 +109,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isWordDesktopDocument.ts.html b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isWordDesktopDocument.ts.html index a84f9e5ab40..ad806a3f7c1 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isWordDesktopDocument.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/isWordDesktopDocument.ts.html @@ -130,7 +130,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/shouldConvertToSingleImage.ts.html b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/shouldConvertToSingleImage.ts.html index 6242bef5488..ab309ce8b6e 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/shouldConvertToSingleImage.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/pasteSourceValidations/shouldConvertToSingleImage.ts.html @@ -121,7 +121,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/region/collapseNodesInRegion.ts.html b/coverage/packages/roosterjs-editor-dom/lib/region/collapseNodesInRegion.ts.html index a45a677b484..093b4778691 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/region/collapseNodesInRegion.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/region/collapseNodesInRegion.ts.html @@ -178,7 +178,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/region/getRegionsFromRange.ts.html b/coverage/packages/roosterjs-editor-dom/lib/region/getRegionsFromRange.ts.html index a9bdf7a3330..ca88db15fb8 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/region/getRegionsFromRange.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/region/getRegionsFromRange.ts.html @@ -811,7 +811,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/region/getSelectedBlockElementsInRegion.ts.html b/coverage/packages/roosterjs-editor-dom/lib/region/getSelectedBlockElementsInRegion.ts.html index 3c1379981c7..6896c87a51f 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/region/getSelectedBlockElementsInRegion.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/region/getSelectedBlockElementsInRegion.ts.html @@ -256,7 +256,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/region/getSelectionRangeInRegion.ts.html b/coverage/packages/roosterjs-editor-dom/lib/region/getSelectionRangeInRegion.ts.html index 501b9fd6c44..19c2d1f7d26 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/region/getSelectionRangeInRegion.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/region/getSelectionRangeInRegion.ts.html @@ -211,7 +211,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/region/index.html b/coverage/packages/roosterjs-editor-dom/lib/region/index.html index 8ada2acb6bb..d7e6584c3d8 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/region/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/region/index.html @@ -170,7 +170,7 @@

All files packages/roosterjs-editor-dom diff --git a/coverage/packages/roosterjs-editor-dom/lib/region/isNodeInRegion.ts.html b/coverage/packages/roosterjs-editor-dom/lib/region/isNodeInRegion.ts.html index 641b90d81fd..60afe7327e3 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/region/isNodeInRegion.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/region/isNodeInRegion.ts.html @@ -118,7 +118,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/region/mergeBlocksInRegion.ts.html b/coverage/packages/roosterjs-editor-dom/lib/region/mergeBlocksInRegion.ts.html index 7accc5c55f3..dd50dcdaced 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/region/mergeBlocksInRegion.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/region/mergeBlocksInRegion.ts.html @@ -280,7 +280,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/selection/Position.ts.html b/coverage/packages/roosterjs-editor-dom/lib/selection/Position.ts.html index b8072f65af1..b7b2aeda12a 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/selection/Position.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/selection/Position.ts.html @@ -279,17 +279,17 @@

All files / packag       -18146x -18137x +18148x +18139x   -18137x +18139x 7x 7x   -18130x +18132x     -18137x +18139x   505x 505x @@ -308,13 +308,13 @@

All files / packag 1448x     -15676x -15676x -15676x -15676x +15678x +15678x +15678x +15678x     -18137x +18139x       @@ -322,8 +322,8 @@

All files / packag     1x -13365x -11802x +13367x +11804x     1563x @@ -413,10 +413,10 @@

All files / packag       -17124x +17126x 4180x -12944x -12839x +12946x +12841x   105x   @@ -610,7 +610,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/selection/addRangeToSelection.ts.html b/coverage/packages/roosterjs-editor-dom/lib/selection/addRangeToSelection.ts.html index ffd7b99c040..ae7d9639562 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/selection/addRangeToSelection.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/selection/addRangeToSelection.ts.html @@ -113,11 +113,11 @@

All files / packag   865x   -860x -860x +861x +861x     -860x +861x       @@ -127,7 +127,7 @@

All files / packag       -860x +861x       @@ -184,7 +184,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/selection/createRange.ts.html b/coverage/packages/roosterjs-editor-dom/lib/selection/createRange.ts.html index 683693262ea..d214d2c3aa3 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/selection/createRange.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/selection/createRange.ts.html @@ -472,7 +472,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/selection/getHtmlWithSelectionPath.ts.html b/coverage/packages/roosterjs-editor-dom/lib/selection/getHtmlWithSelectionPath.ts.html index f683ecd59d5..0e727a3f9e7 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/selection/getHtmlWithSelectionPath.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/selection/getHtmlWithSelectionPath.ts.html @@ -133,7 +133,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/selection/getPositionRect.ts.html b/coverage/packages/roosterjs-editor-dom/lib/selection/getPositionRect.ts.html index 3a8da10c1be..81ca46ea434 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/selection/getPositionRect.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/selection/getPositionRect.ts.html @@ -238,7 +238,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/selection/getSelectionPath.ts.html b/coverage/packages/roosterjs-editor-dom/lib/selection/getSelectionPath.ts.html index 35aec61eb44..fc7678e2827 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/selection/getSelectionPath.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/selection/getSelectionPath.ts.html @@ -158,8 +158,8 @@

All files / packag       -5246x -4837x +5247x +4838x     409x @@ -328,7 +328,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/selection/index.html b/coverage/packages/roosterjs-editor-dom/lib/selection/index.html index 38274209561..0616069ee97 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/selection/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/selection/index.html @@ -200,7 +200,7 @@

All files packages/roosterjs-editor-dom diff --git a/coverage/packages/roosterjs-editor-dom/lib/selection/isPositionAtBeginningOf.ts.html b/coverage/packages/roosterjs-editor-dom/lib/selection/isPositionAtBeginningOf.ts.html index 4a75167b411..fa745955dd7 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/selection/isPositionAtBeginningOf.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/selection/isPositionAtBeginningOf.ts.html @@ -178,7 +178,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/selection/setHtmlWithSelectionPath.ts.html b/coverage/packages/roosterjs-editor-dom/lib/selection/setHtmlWithSelectionPath.ts.html index 55160f79dcf..37bb2f7bc22 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/selection/setHtmlWithSelectionPath.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/selection/setHtmlWithSelectionPath.ts.html @@ -424,7 +424,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/snapshots/addSnapshot.ts.html b/coverage/packages/roosterjs-editor-dom/lib/snapshots/addSnapshot.ts.html index 4ae0ef75ef1..c49d28b5112 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/snapshots/addSnapshot.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/snapshots/addSnapshot.ts.html @@ -196,20 +196,20 @@

All files / packag       -5272x -5272x +5273x +5273x   -5272x -5272x +5273x +5273x   -5272x -5236x -5236x -5236x -5236x +5273x +5237x +5237x +5237x +5237x   -5236x -5236x +5237x +5237x       @@ -217,13 +217,13 @@

All files / packag 3x     -5236x +5237x 3x 3x 3x     -5236x +5237x 24x   36x @@ -243,11 +243,11 @@

All files / packag       -5248x +5249x       -5214x +5215x       @@ -367,7 +367,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/snapshots/canMoveCurrentSnapshot.ts.html b/coverage/packages/roosterjs-editor-dom/lib/snapshots/canMoveCurrentSnapshot.ts.html index 7f88ecbb3a0..40fd440f962 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/snapshots/canMoveCurrentSnapshot.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/snapshots/canMoveCurrentSnapshot.ts.html @@ -84,8 +84,8 @@

All files / packag       -15580x -15580x +15583x +15583x    
import { Snapshots } from 'roosterjs-editor-types';
  
@@ -109,7 +109,7 @@ 

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/snapshots/canUndoAutoComplete.ts.html b/coverage/packages/roosterjs-editor-dom/lib/snapshots/canUndoAutoComplete.ts.html index b4d85c4d82b..e2e46713972 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/snapshots/canUndoAutoComplete.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/snapshots/canUndoAutoComplete.ts.html @@ -97,7 +97,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/snapshots/clearProceedingSnapshots.ts.html b/coverage/packages/roosterjs-editor-dom/lib/snapshots/clearProceedingSnapshots.ts.html index afb70651e0d..501278c6f4d 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/snapshots/clearProceedingSnapshots.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/snapshots/clearProceedingSnapshots.ts.html @@ -128,8 +128,8 @@

All files / packag       -5925x -5925x +5926x +5926x 5x 5x 5x @@ -199,7 +199,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/snapshots/createSnapshots.ts.html b/coverage/packages/roosterjs-editor-dom/lib/snapshots/createSnapshots.ts.html index 0d0ddbc2c4c..d06ab29da26 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/snapshots/createSnapshots.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/snapshots/createSnapshots.ts.html @@ -79,7 +79,7 @@

All files / packag     1x -5015x +5016x       @@ -109,7 +109,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/snapshots/index.html b/coverage/packages/roosterjs-editor-dom/lib/snapshots/index.html index 033e4003fb5..bbc7a2f1135 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/snapshots/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/snapshots/index.html @@ -170,7 +170,7 @@

All files packages/roosterjs-editor-dom diff --git a/coverage/packages/roosterjs-editor-dom/lib/snapshots/moveCurrentSnapshot.ts.html b/coverage/packages/roosterjs-editor-dom/lib/snapshots/moveCurrentSnapshot.ts.html index 793729bd20e..5d6f7122a45 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/snapshots/moveCurrentSnapshot.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/snapshots/moveCurrentSnapshot.ts.html @@ -145,7 +145,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/style/getStyles.ts.html b/coverage/packages/roosterjs-editor-dom/lib/style/getStyles.ts.html index 45ffe2d13a4..97c270276b6 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/style/getStyles.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/style/getStyles.ts.html @@ -115,7 +115,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/style/index.html b/coverage/packages/roosterjs-editor-dom/lib/style/index.html index a1243fecf9f..ab83b46859c 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/style/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/style/index.html @@ -155,7 +155,7 @@

All files packages/roosterjs-editor-dom diff --git a/coverage/packages/roosterjs-editor-dom/lib/style/removeGlobalCssStyle.ts.html b/coverage/packages/roosterjs-editor-dom/lib/style/removeGlobalCssStyle.ts.html index 9d509c7570a..37444842bfd 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/style/removeGlobalCssStyle.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/style/removeGlobalCssStyle.ts.html @@ -76,8 +76,8 @@

All files / packag     1x -10968x -10968x +10970x +10970x 124x     @@ -100,7 +100,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/style/removeImportantStyleRule.ts.html b/coverage/packages/roosterjs-editor-dom/lib/style/removeImportantStyleRule.ts.html index 104ae2076ff..5157fe2d903 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/style/removeImportantStyleRule.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/style/removeImportantStyleRule.ts.html @@ -133,7 +133,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/style/setGlobalCssStyles.ts.html b/coverage/packages/roosterjs-editor-dom/lib/style/setGlobalCssStyles.ts.html index 19cf4078f97..82f73918dcf 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/style/setGlobalCssStyles.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/style/setGlobalCssStyles.ts.html @@ -118,7 +118,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/style/setStyles.ts.html b/coverage/packages/roosterjs-editor-dom/lib/style/setStyles.ts.html index 050c4fa3f19..42f0352d168 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/style/setStyles.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/style/setStyles.ts.html @@ -139,7 +139,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/table/VTable.ts.html b/coverage/packages/roosterjs-editor-dom/lib/table/VTable.ts.html index 6b045c634b6..6e3fb01a93a 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/table/VTable.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/table/VTable.ts.html @@ -2479,7 +2479,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/table/applyTableFormat.ts.html b/coverage/packages/roosterjs-editor-dom/lib/table/applyTableFormat.ts.html index 27dcc26998c..c2d2ffed507 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/table/applyTableFormat.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/table/applyTableFormat.ts.html @@ -1138,7 +1138,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/table/cloneCellStyles.ts.html b/coverage/packages/roosterjs-editor-dom/lib/table/cloneCellStyles.ts.html index 771b081c0e2..4ddc59419f0 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/table/cloneCellStyles.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/table/cloneCellStyles.ts.html @@ -121,7 +121,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/table/index.html b/coverage/packages/roosterjs-editor-dom/lib/table/index.html index a914167e5b2..614e650599f 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/table/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/table/index.html @@ -185,7 +185,7 @@

All files packages/roosterjs-editor-dom diff --git a/coverage/packages/roosterjs-editor-dom/lib/table/isWholeTableSelected.ts.html b/coverage/packages/roosterjs-editor-dom/lib/table/isWholeTableSelected.ts.html index 8c3305606a2..74fabc2ca20 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/table/isWholeTableSelected.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/table/isWholeTableSelected.ts.html @@ -130,7 +130,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/table/pasteTable.ts.html b/coverage/packages/roosterjs-editor-dom/lib/table/pasteTable.ts.html index 554bdb4d10f..21440e18ec7 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/table/pasteTable.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/table/pasteTable.ts.html @@ -250,7 +250,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/table/tableCellInfo.ts.html b/coverage/packages/roosterjs-editor-dom/lib/table/tableCellInfo.ts.html index e9945829e9a..f1aaa61ee39 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/table/tableCellInfo.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/table/tableCellInfo.ts.html @@ -175,7 +175,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/table/tableFormatInfo.ts.html b/coverage/packages/roosterjs-editor-dom/lib/table/tableFormatInfo.ts.html index 9a154d71408..b46bad20ebc 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/table/tableFormatInfo.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/table/tableFormatInfo.ts.html @@ -247,7 +247,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/Browser.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/Browser.ts.html index d7cd862c073..c166da02fcc 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/Browser.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/Browser.ts.html @@ -349,7 +349,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/applyFormat.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/applyFormat.ts.html index 3865e4bba3f..0d161450ccd 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/applyFormat.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/applyFormat.ts.html @@ -161,8 +161,8 @@

All files / packag       -4787x -4787x +4788x +4788x       @@ -173,17 +173,17 @@

All files / packag       -43083x +43092x   -4787x -4743x +4788x +4744x   -4787x -4749x +4788x +4750x     -4787x -4742x +4788x +4743x       @@ -202,7 +202,7 @@

All files / packag       -4787x +4788x 1x     @@ -211,7 +211,7 @@

All files / packag       -4786x +4787x       @@ -222,13 +222,13 @@

All files / packag       -4787x +4788x 6x   -4787x +4788x 1x   -4787x +4788x 1x     @@ -328,7 +328,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/changeElementTag.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/changeElementTag.ts.html index 4bcb67c5848..37baf1cb79d 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/changeElementTag.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/changeElementTag.ts.html @@ -235,7 +235,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/collapseNodes.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/collapseNodes.ts.html index 61c6db4762a..62344ea8966 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/collapseNodes.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/collapseNodes.ts.html @@ -292,7 +292,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/contains.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/contains.ts.html index f4cc498211e..2f111f00a80 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/contains.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/contains.ts.html @@ -168,37 +168,37 @@

All files / packag       -44666x -6785x +44669x +6786x     -37881x +37883x 5190x     -32691x +32693x 3101x 3101x     -32691x +32693x 10543x 10543x     -32691x +32693x 992x     -31699x +31701x             -26713x -26713x +26714x +26714x       @@ -295,7 +295,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/createElement.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/createElement.ts.html index 91d471c63a6..a3f3df4710f 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/createElement.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/createElement.ts.html @@ -271,53 +271,53 @@

All files / packag       -10692x -4858x +10694x +4859x     -10692x +10694x 1x     -74837x -10691x +74851x +10693x       -10691x +10693x 405x     -10691x +10693x 374x     -10691x +10693x 83x 163x       -10691x +10693x 84x 231x       -10691x -5606x -5781x +10693x +5607x +5782x 377x +5405x +5404x +5404x 5404x -5403x -5403x -5403x           -10691x +10693x    
import getObjectKeys from '../jsUtils/getObjectKeys';
 import safeInstanceOf from './safeInstanceOf';
@@ -457,7 +457,7 @@ 

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/findClosestElementAncestor.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/findClosestElementAncestor.ts.html index c8267928b38..0d7138667f8 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/findClosestElementAncestor.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/findClosestElementAncestor.ts.html @@ -106,12 +106,12 @@

All files / packag       -26031x -26031x +26034x +26034x   -26031x -6912x -6912x +26034x +6913x +6913x       @@ -119,7 +119,7 @@

All files / packag       -26031x +26034x    
import contains from './contains';
 import matchesSelector from './matchesSelector';
@@ -160,7 +160,7 @@ 

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/fromHtml.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/fromHtml.ts.html index 71813511618..dc3a90e739f 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/fromHtml.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/fromHtml.ts.html @@ -109,7 +109,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/getComputedStyles.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/getComputedStyles.ts.html index aa3ebf4d8c0..d2ccb452938 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/getComputedStyles.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/getComputedStyles.ts.html @@ -217,7 +217,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/getInnerHTML.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/getInnerHTML.ts.html index 320fb16b1df..a95e7d3917e 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/getInnerHTML.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/getInnerHTML.ts.html @@ -115,7 +115,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/getIntersectedRect.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/getIntersectedRect.ts.html index 7deff2772be..c08aa7f4031 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/getIntersectedRect.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/getIntersectedRect.ts.html @@ -202,7 +202,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/getLeafNode.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/getLeafNode.ts.html index dd7f80886bf..c62604bde12 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/getLeafNode.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/getLeafNode.ts.html @@ -175,7 +175,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/getLeafSibling.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/getLeafSibling.ts.html index 0f21eccb5e3..1263aef3356 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/getLeafSibling.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/getLeafSibling.ts.html @@ -328,7 +328,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/getPendableFormatState.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/getPendableFormatState.ts.html index ec579b15ea1..fcebae8423d 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/getPendableFormatState.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/getPendableFormatState.ts.html @@ -232,7 +232,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/getTagOfNode.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/getTagOfNode.ts.html index 541637aa2fd..17242680fed 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/getTagOfNode.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/getTagOfNode.ts.html @@ -75,7 +75,7 @@

All files / packag     1x -33044x +33045x    
import { NodeType } from 'roosterjs-editor-types';
  
@@ -94,7 +94,7 @@ 

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/index.html b/coverage/packages/roosterjs-editor-dom/lib/utils/index.html index 0ee13fe9dae..fbe5869262b 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/index.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/index.html @@ -575,7 +575,7 @@

All files packages/roosterjs-editor-dom diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/isBlockElement.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/isBlockElement.ts.html index 56d12dc1932..cc12b20900a 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/isBlockElement.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/isBlockElement.ts.html @@ -124,7 +124,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/isNodeAfter.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/isNodeAfter.ts.html index e2fcb4792c7..89355f6f177 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/isNodeAfter.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/isNodeAfter.ts.html @@ -112,7 +112,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/isNodeEmpty.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/isNodeEmpty.ts.html index 86471c9bce9..343bae0d371 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/isNodeEmpty.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/isNodeEmpty.ts.html @@ -196,7 +196,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/isVoidHtmlElement.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/isVoidHtmlElement.ts.html index 61a4f0482e9..15a9be493a9 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/isVoidHtmlElement.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/isVoidHtmlElement.ts.html @@ -121,7 +121,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/matchLink.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/matchLink.ts.html index 9968c97f8e3..32dee01807b 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/matchLink.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/matchLink.ts.html @@ -346,7 +346,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/matchesSelector.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/matchesSelector.ts.html index f82c176b216..7a66d51ad8a 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/matchesSelector.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/matchesSelector.ts.html @@ -136,7 +136,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/moveChildNodes.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/moveChildNodes.ts.html index 64fdc754362..23a03d3d8a7 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/moveChildNodes.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/moveChildNodes.ts.html @@ -91,15 +91,15 @@

All files / packag       -825x +826x 4x     -821x +822x 515x     -821x +822x 355x     @@ -133,7 +133,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/normalizeRect.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/normalizeRect.ts.html index 46d23eb0b05..7069b488b28 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/normalizeRect.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/normalizeRect.ts.html @@ -118,7 +118,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/parseColor.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/parseColor.ts.html index 8b20149f342..828d2977332 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/parseColor.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/parseColor.ts.html @@ -151,7 +151,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/queryElements.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/queryElements.ts.html index b4109b17788..afa9b3f186d 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/queryElements.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/queryElements.ts.html @@ -161,16 +161,16 @@

All files / packag       -12807x +12809x     -12132x +12134x 6x     -12126x +12128x   -12126x +12128x 1916x 479x 263x @@ -195,10 +195,10 @@

All files / packag       -12126x +12128x 898x   -12126x +12128x       @@ -325,7 +325,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/readFile.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/readFile.ts.html index 934d7ab0ab2..5f35907309a 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/readFile.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/readFile.ts.html @@ -118,7 +118,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts.html index ccb7f4f1b57..d5d51bc8eb1 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts.html @@ -117,15 +117,15 @@

All files / packag   1x   -23029x +23031x             -23029x -23029x +23031x +23031x       @@ -137,18 +137,18 @@

All files / packag       -56316x -33289x +56320x +33291x           -23027x -23027x -23027x -23027x -23027x +23029x +23029x +23029x +23029x +23029x       @@ -208,7 +208,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/setColor.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/setColor.ts.html index 331f9d3c90d..c660fbe9151 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/setColor.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/setColor.ts.html @@ -239,22 +239,22 @@

All files / packag       -14478x -14478x -14478x +14481x +14481x +14481x   -14478x -14478x -14415x +14481x +14481x +14418x           -14415x +14418x     -14478x +14481x 58x     @@ -502,7 +502,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/shouldSkipNode.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/shouldSkipNode.ts.html index 94b8b6461cf..104c2dc597a 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/shouldSkipNode.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/shouldSkipNode.ts.html @@ -229,7 +229,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/splitParentNode.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/splitParentNode.ts.html index 85f43a9ea27..820cde1498d 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/splitParentNode.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/splitParentNode.ts.html @@ -262,7 +262,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/splitTextNode.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/splitTextNode.ts.html index 69a88025392..786f58bc782 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/splitTextNode.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/splitTextNode.ts.html @@ -109,7 +109,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/unwrap.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/unwrap.ts.html index f825666a565..a2f6099488f 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/unwrap.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/unwrap.ts.html @@ -118,7 +118,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-dom/lib/utils/wrap.ts.html b/coverage/packages/roosterjs-editor-dom/lib/utils/wrap.ts.html index de3f5f5ec75..38ee5ceacdc 100644 --- a/coverage/packages/roosterjs-editor-dom/lib/utils/wrap.ts.html +++ b/coverage/packages/roosterjs-editor-dom/lib/utils/wrap.ts.html @@ -331,7 +331,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-plugins/lib/AutoFormat.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/AutoFormat.ts.html index ae97232b91c..f135cf41528 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/AutoFormat.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/AutoFormat.ts.html @@ -67,7 +67,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-plugins/lib/ContentEdit.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/ContentEdit.ts.html index c79b956a496..5e0c648d5a4 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/ContentEdit.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/ContentEdit.ts.html @@ -67,7 +67,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-plugins/lib/ContextMenu.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/ContextMenu.ts.html index 4d4a501498a..e9e79b8dd4d 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/ContextMenu.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/ContextMenu.ts.html @@ -67,7 +67,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-plugins/lib/CustomReplace.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/CustomReplace.ts.html index ee2de46780d..e4e97b5e90a 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/CustomReplace.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/CustomReplace.ts.html @@ -67,7 +67,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-plugins/lib/CutPasteListChain.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/CutPasteListChain.ts.html index d2fd95b5d51..abda7d47c42 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/CutPasteListChain.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/CutPasteListChain.ts.html @@ -67,7 +67,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-plugins/lib/HyperLink.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/HyperLink.ts.html index fabab407cf3..60a108589e4 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/HyperLink.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/HyperLink.ts.html @@ -67,7 +67,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-plugins/lib/ImageEdit.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/ImageEdit.ts.html index b3ab1b417f1..4b97abab9b6 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/ImageEdit.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/ImageEdit.ts.html @@ -67,7 +67,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-plugins/lib/ImageResize.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/ImageResize.ts.html index 109650b7e36..8eb650aed42 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/ImageResize.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/ImageResize.ts.html @@ -67,7 +67,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-plugins/lib/Paste.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/Paste.ts.html index a2e1f4a1759..9c97f0b69d1 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/Paste.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/Paste.ts.html @@ -67,7 +67,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-plugins/lib/Picker.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/Picker.ts.html index eada198df72..fa8de7a664f 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/Picker.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/Picker.ts.html @@ -67,7 +67,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-plugins/lib/TableCellSelection.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/TableCellSelection.ts.html index 36d6bf7f68b..5c23d4b40ff 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/TableCellSelection.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/TableCellSelection.ts.html @@ -67,7 +67,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-plugins/lib/TableResize.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/TableResize.ts.html index 16e97278269..5fee6c63319 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/TableResize.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/TableResize.ts.html @@ -67,7 +67,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-plugins/lib/Watermark.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/Watermark.ts.html index d13cf73c365..4e7d921e65b 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/Watermark.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/Watermark.ts.html @@ -67,7 +67,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-plugins/lib/index.html b/coverage/packages/roosterjs-editor-plugins/lib/index.html index 4cb606bff80..c9f77a53827 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/index.html @@ -290,7 +290,7 @@

All files packages/roosterjs-editor-plugin diff --git a/coverage/packages/roosterjs-editor-plugins/lib/index.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/index.ts.html index b646e9c2eaa..58aab88e36e 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/index.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/index.ts.html @@ -103,7 +103,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-plugins/lib/pluginUtils/DragAndDropHelper.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/pluginUtils/DragAndDropHelper.ts.html index 10bbe7d180b..21682b8c2fe 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/pluginUtils/DragAndDropHelper.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/pluginUtils/DragAndDropHelper.ts.html @@ -523,7 +523,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-plugins/lib/pluginUtils/index.html b/coverage/packages/roosterjs-editor-plugins/lib/pluginUtils/index.html index 5b158d9e481..322e5b5e8fa 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/pluginUtils/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/pluginUtils/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-editor-plu diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/AutoFormat.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/AutoFormat.ts.html index 66f2c5d39fe..a1de084f770 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/AutoFormat.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/AutoFormat.ts.html @@ -388,7 +388,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/index.html index cfec3c8d0be..6c34c2fd374 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/index.html @@ -110,7 +110,7 @@

All files packages/roosterjs-editor- diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/index.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/index.ts.html index c3d40df354c..cede50029e3 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/index.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/AutoFormat/index.ts.html @@ -67,7 +67,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/ContentEdit.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/ContentEdit.ts.html index dea57623669..8c813c106d9 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/ContentEdit.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/ContentEdit.ts.html @@ -304,7 +304,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/autoLinkFeatures.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/autoLinkFeatures.ts.html index 0151fa37d8b..bc44cc6a381 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/autoLinkFeatures.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/autoLinkFeatures.ts.html @@ -505,7 +505,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/codeFeatures.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/codeFeatures.ts.html index a2e6948485d..e9a37a5b1d4 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/codeFeatures.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/codeFeatures.ts.html @@ -361,7 +361,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/cursorFeatures.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/cursorFeatures.ts.html index 95614533050..e021520105c 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/cursorFeatures.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/cursorFeatures.ts.html @@ -199,7 +199,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/entityFeatures.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/entityFeatures.ts.html index da8fe47a8a9..a848e57a39a 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/entityFeatures.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/entityFeatures.ts.html @@ -1633,7 +1633,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/index.html index 6240d8be709..61d019aef05 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/index.html @@ -245,7 +245,7 @@

All files packages/roosterjs-edit diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/listFeatures.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/listFeatures.ts.html index 66b2180a934..80ba9a2e026 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/listFeatures.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/listFeatures.ts.html @@ -2056,7 +2056,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/markdownFeatures.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/markdownFeatures.ts.html index 76c2f5c0ffb..16f456a418e 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/markdownFeatures.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/markdownFeatures.ts.html @@ -631,7 +631,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/quoteFeatures.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/quoteFeatures.ts.html index e561ce79134..e203693acd9 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/quoteFeatures.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/quoteFeatures.ts.html @@ -430,7 +430,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/shortcutFeatures.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/shortcutFeatures.ts.html index 4e895e8afc6..cc7c2526278 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/shortcutFeatures.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/shortcutFeatures.ts.html @@ -472,7 +472,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/structuredNodeFeatures.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/structuredNodeFeatures.ts.html index 9eb5fc9f753..dac9c08c719 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/structuredNodeFeatures.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/structuredNodeFeatures.ts.html @@ -307,7 +307,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/tableFeatures.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/tableFeatures.ts.html index 9a57c83fe5b..372292c9f5f 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/tableFeatures.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/tableFeatures.ts.html @@ -787,7 +787,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/textFeatures.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/textFeatures.ts.html index 5db30738425..0835e1391e5 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/textFeatures.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/textFeatures.ts.html @@ -718,7 +718,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/getAllFeatures.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/getAllFeatures.ts.html index 427eeb777ab..e912dc2daa0 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/getAllFeatures.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/getAllFeatures.ts.html @@ -175,7 +175,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/index.html index d8be21d9dd4..54cfbb883b0 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/index.html @@ -125,7 +125,7 @@

All files packages/roosterjs-editor- diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/index.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/index.ts.html index 488fd343139..897fd4e6424 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/index.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/index.ts.html @@ -70,7 +70,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/convertAlphaToDecimals.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/convertAlphaToDecimals.ts.html index 7415601ab96..4ef63865b46 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/convertAlphaToDecimals.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/convertAlphaToDecimals.ts.html @@ -109,7 +109,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoBulletListStyle.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoBulletListStyle.ts.html index af98789f1e5..9177c1bd867 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoBulletListStyle.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoBulletListStyle.ts.html @@ -145,7 +145,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoNumberingListStyle.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoNumberingListStyle.ts.html index f7343398dd3..29b913a179a 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoNumberingListStyle.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/getAutoNumberingListStyle.ts.html @@ -598,7 +598,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/index.html index 82e69a8c392..19eeab09fc7 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContentEdit/utils/index.html @@ -125,7 +125,7 @@

All files packages/roosterjs-edit diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContextMenu/ContextMenu.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContextMenu/ContextMenu.ts.html index 7723a62dc0b..1bb6bdd3b36 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContextMenu/ContextMenu.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContextMenu/ContextMenu.ts.html @@ -418,7 +418,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContextMenu/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContextMenu/index.html index 364c027bf7c..6274beda264 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContextMenu/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContextMenu/index.html @@ -110,7 +110,7 @@

All files packages/roosterjs-editor- diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContextMenu/index.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContextMenu/index.ts.html index 14341132180..a1f1809e997 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContextMenu/index.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ContextMenu/index.ts.html @@ -67,7 +67,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/CustomReplace/CustomReplace.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/CustomReplace/CustomReplace.ts.html index 2eb70774e32..0151dff7c00 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/CustomReplace/CustomReplace.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/CustomReplace/CustomReplace.ts.html @@ -625,7 +625,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/CustomReplace/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/CustomReplace/index.html index 723aa55bede..99853aa1471 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/CustomReplace/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/CustomReplace/index.html @@ -110,7 +110,7 @@

All files packages/roosterjs-editor- diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/CustomReplace/index.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/CustomReplace/index.ts.html index 0dfc91c04eb..f906fa5652f 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/CustomReplace/index.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/CustomReplace/index.ts.html @@ -67,7 +67,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/CutPasteListChain/CutPasteListChain.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/CutPasteListChain/CutPasteListChain.ts.html index b9c66bd1f32..40bf7ade907 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/CutPasteListChain/CutPasteListChain.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/CutPasteListChain/CutPasteListChain.ts.html @@ -328,7 +328,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/CutPasteListChain/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/CutPasteListChain/index.html index c3cf5034a4f..84edf961637 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/CutPasteListChain/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/CutPasteListChain/index.html @@ -110,7 +110,7 @@

All files packages/roosterjs-editor- diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/CutPasteListChain/index.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/CutPasteListChain/index.ts.html index 9c25d69ca6e..20758cc6188 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/CutPasteListChain/index.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/CutPasteListChain/index.ts.html @@ -67,7 +67,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/HyperLink/HyperLink.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/HyperLink/HyperLink.ts.html index bf91d208134..48783a92f35 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/HyperLink/HyperLink.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/HyperLink/HyperLink.ts.html @@ -796,7 +796,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/HyperLink/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/HyperLink/index.html index 247cfbbdcd6..bf8e9240208 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/HyperLink/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/HyperLink/index.html @@ -110,7 +110,7 @@

All files packages/roosterjs-editor- diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/HyperLink/index.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/HyperLink/index.ts.html index 85f814c1ea9..83345cbd2e6 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/HyperLink/index.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/HyperLink/index.ts.html @@ -67,7 +67,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/ImageEdit.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/ImageEdit.ts.html index 61fbf8aa675..e38d872e18b 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/ImageEdit.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/ImageEdit.ts.html @@ -2368,7 +2368,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/canRegenerateImage.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/canRegenerateImage.ts.html index 86eea9e0e09..3e3a5085033 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/canRegenerateImage.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/canRegenerateImage.ts.html @@ -145,7 +145,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/index.html index 419c29182eb..876ae596530 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/index.html @@ -140,7 +140,7 @@

All files packages/roosterjs-edit diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/isResizedTo.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/isResizedTo.ts.html index e5e74174551..0a5f5e1e0f0 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/isResizedTo.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/isResizedTo.ts.html @@ -121,7 +121,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/resetImage.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/resetImage.ts.html index 51e3c25d095..cde4f95ae6e 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/resetImage.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/resetImage.ts.html @@ -118,7 +118,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/resizeByPercentage.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/resizeByPercentage.ts.html index 645d0c87eb9..73b17f54535 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/resizeByPercentage.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/resizeByPercentage.ts.html @@ -226,7 +226,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/applyChange.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/applyChange.ts.html index f468d430b23..ce31d0715d2 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/applyChange.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/applyChange.ts.html @@ -301,7 +301,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/checkEditInfoState.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/checkEditInfoState.ts.html index bf801a1b081..0e2fd4b347a 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/checkEditInfoState.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/checkEditInfoState.ts.html @@ -337,7 +337,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/editInfo.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/editInfo.ts.html index fe8de48e38b..750651f7f58 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/editInfo.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/editInfo.ts.html @@ -232,7 +232,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/generateDataURL.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/generateDataURL.ts.html index d85bd8ce219..b2a85a93236 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/generateDataURL.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/generateDataURL.ts.html @@ -235,7 +235,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/getGeneratedImageSize.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/getGeneratedImageSize.ts.html index 3a5ef16fb50..be6cd1ed79b 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/getGeneratedImageSize.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/getGeneratedImageSize.ts.html @@ -220,7 +220,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/getLastZIndex.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/getLastZIndex.ts.html index 7e9dfcfc276..33fca9f1c20 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/getLastZIndex.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/getLastZIndex.ts.html @@ -124,7 +124,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/getTargetSizeByPercentage.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/getTargetSizeByPercentage.ts.html index c11e36a94f7..1b37af83c7c 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/getTargetSizeByPercentage.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/getTargetSizeByPercentage.ts.html @@ -142,7 +142,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/index.html index 8644607ccd7..0d72d96e925 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/index.html @@ -200,7 +200,7 @@

All files packages/roosterjs-edit diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/tryToConvertGifToPng.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/tryToConvertGifToPng.ts.html index 4de4ba28621..f7aa0299854 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/tryToConvertGifToPng.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/tryToConvertGifToPng.ts.html @@ -169,7 +169,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/imageEditors/Cropper.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/imageEditors/Cropper.ts.html index 1ee9a966ab4..1ddc9037e09 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/imageEditors/Cropper.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/imageEditors/Cropper.ts.html @@ -511,7 +511,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/imageEditors/Resizer.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/imageEditors/Resizer.ts.html index f4c6c4f4b0d..d6c565356b3 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/imageEditors/Resizer.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/imageEditors/Resizer.ts.html @@ -802,7 +802,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/imageEditors/Rotator.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/imageEditors/Rotator.ts.html index ba91a313e1c..08174e8518d 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/imageEditors/Rotator.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/imageEditors/Rotator.ts.html @@ -454,7 +454,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/imageEditors/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/imageEditors/index.html index a92a87a927e..b78a7410ee2 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/imageEditors/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/imageEditors/index.html @@ -125,7 +125,7 @@

All files packages/roosterjs-edit diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/index.html index 1a2afb507e6..c893320ac90 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/index.html @@ -110,7 +110,7 @@

All files packages/roosterjs-editor- diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/index.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/index.ts.html index d26526ba65c..1e95ce2df38 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/index.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/index.ts.html @@ -85,7 +85,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageResize/ImageResize.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageResize/ImageResize.ts.html index 52692b69794..a9c6c9ac2be 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageResize/ImageResize.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageResize/ImageResize.ts.html @@ -202,7 +202,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageResize/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageResize/index.html index d9e92d45661..6a9db1bbf3a 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageResize/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageResize/index.html @@ -110,7 +110,7 @@

All files packages/roosterjs-editor- diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageResize/index.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageResize/index.ts.html index e4dfd54d939..d47cba81cf8 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageResize/index.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/ImageResize/index.ts.html @@ -67,7 +67,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/Paste.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/Paste.ts.html index d0b65b93f2c..81e7ed5fa58 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/Paste.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/Paste.ts.html @@ -400,7 +400,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/commonConverter/convertPastedContentForLI.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/commonConverter/convertPastedContentForLI.ts.html index b943c3b1d50..a229979dbb7 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/commonConverter/convertPastedContentForLI.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/commonConverter/convertPastedContentForLI.ts.html @@ -205,7 +205,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/commonConverter/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/commonConverter/index.html index d95f8df0f49..f26949b827a 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/commonConverter/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/commonConverter/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-edit diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/excelConverter/convertPastedContentFromExcel.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/excelConverter/convertPastedContentFromExcel.ts.html index 7f8e3860258..61913f9a16e 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/excelConverter/convertPastedContentFromExcel.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/excelConverter/convertPastedContentFromExcel.ts.html @@ -268,7 +268,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/excelConverter/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/excelConverter/index.html index ec4b6f0b22c..d07e9ec7147 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/excelConverter/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/excelConverter/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-edit diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/imageConverter/convertPasteContentForSingleImage.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/imageConverter/convertPasteContentForSingleImage.ts.html index 5b474aa3f46..6f38e16ccee 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/imageConverter/convertPasteContentForSingleImage.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/imageConverter/convertPasteContentForSingleImage.ts.html @@ -127,7 +127,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/imageConverter/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/imageConverter/index.html index 3ca02afb5c4..e8aaebf19d3 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/imageConverter/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/imageConverter/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-edit diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/index.html index 89e8c107b98..e830b228cce 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/index.html @@ -110,7 +110,7 @@

All files packages/roosterjs-editor- diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/index.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/index.ts.html index d67837c534c..c50d44bb9cb 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/index.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/index.ts.html @@ -67,7 +67,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/lineMerge/handleLineMerge.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/lineMerge/handleLineMerge.ts.html index 915279bb4ee..b78aa090ccc 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/lineMerge/handleLineMerge.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/lineMerge/handleLineMerge.ts.html @@ -367,7 +367,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/lineMerge/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/lineMerge/index.html index 46c6be6326c..e0056670863 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/lineMerge/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/lineMerge/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-edit diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/officeOnlineConverter/ListItemBlock.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/officeOnlineConverter/ListItemBlock.ts.html index c273af77557..33a45cc983c 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/officeOnlineConverter/ListItemBlock.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/officeOnlineConverter/ListItemBlock.ts.html @@ -178,7 +178,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/officeOnlineConverter/convertPastedContentFromOfficeOnline.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/officeOnlineConverter/convertPastedContentFromOfficeOnline.ts.html index 28650fc58fd..1c9bf60ceba 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/officeOnlineConverter/convertPastedContentFromOfficeOnline.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/officeOnlineConverter/convertPastedContentFromOfficeOnline.ts.html @@ -223,7 +223,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/officeOnlineConverter/convertPastedContentFromWordOnline.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/officeOnlineConverter/convertPastedContentFromWordOnline.ts.html index 3be2be17fb0..70b925f3daa 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/officeOnlineConverter/convertPastedContentFromWordOnline.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/officeOnlineConverter/convertPastedContentFromWordOnline.ts.html @@ -1180,7 +1180,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/officeOnlineConverter/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/officeOnlineConverter/index.html index a88ebe591e4..e66a4601ab7 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/officeOnlineConverter/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/officeOnlineConverter/index.html @@ -125,7 +125,7 @@

All files packages/roosterjs-edit diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/pptConverter/convertPastedContentFromPowerPoint.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/pptConverter/convertPastedContentFromPowerPoint.ts.html index ef099e13097..056a266d463 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/pptConverter/convertPastedContentFromPowerPoint.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/pptConverter/convertPastedContentFromPowerPoint.ts.html @@ -139,7 +139,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/pptConverter/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/pptConverter/index.html index aec99b61cd7..852158bbddf 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/pptConverter/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/pptConverter/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-edit diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeHtmlColorsFromPastedContent/deprecatedColorList.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeHtmlColorsFromPastedContent/deprecatedColorList.ts.html index ff69b86e6ca..6ec57ecfe70 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeHtmlColorsFromPastedContent/deprecatedColorList.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeHtmlColorsFromPastedContent/deprecatedColorList.ts.html @@ -154,7 +154,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeHtmlColorsFromPastedContent/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeHtmlColorsFromPastedContent/index.html index d1e2ed49bf8..1b1312a1f8f 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeHtmlColorsFromPastedContent/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeHtmlColorsFromPastedContent/index.html @@ -110,7 +110,7 @@

All files packages/roosterjs-edit diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeHtmlColorsFromPastedContent/sanitizeHtmlColorsFromPastedContent.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeHtmlColorsFromPastedContent/sanitizeHtmlColorsFromPastedContent.ts.html index 3919d794dd4..d428b55f611 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeHtmlColorsFromPastedContent/sanitizeHtmlColorsFromPastedContent.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeHtmlColorsFromPastedContent/sanitizeHtmlColorsFromPastedContent.ts.html @@ -124,7 +124,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeLinks/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeLinks/index.html index bd5d0f50957..f5c095e37b9 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeLinks/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeLinks/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-edit diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeLinks/sanitizeLinks.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeLinks/sanitizeLinks.ts.html index 0dc7941dd85..785816e5aa9 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeLinks/sanitizeLinks.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/sanitizeLinks/sanitizeLinks.ts.html @@ -163,7 +163,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/LevelLists.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/LevelLists.ts.html index 52f297d361b..429598feaad 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/LevelLists.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/LevelLists.ts.html @@ -145,7 +145,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/WordConverterArguments.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/WordConverterArguments.ts.html index 7da23336ba8..77dee6b728d 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/WordConverterArguments.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/WordConverterArguments.ts.html @@ -232,7 +232,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/WordCustomData.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/WordCustomData.ts.html index 9b9e2bd6221..c14ef89f23e 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/WordCustomData.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/WordCustomData.ts.html @@ -286,7 +286,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/commentsRemoval.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/commentsRemoval.ts.html index b2bbee64e07..11691bdc1a9 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/commentsRemoval.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/commentsRemoval.ts.html @@ -355,7 +355,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/convertPastedContentFromWord.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/convertPastedContentFromWord.ts.html index 6ee63027b43..183c289b272 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/convertPastedContentFromWord.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/convertPastedContentFromWord.ts.html @@ -259,7 +259,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/converterUtils.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/converterUtils.ts.html index e2ac5215e62..7771cbda6d8 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/converterUtils.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/converterUtils.ts.html @@ -1822,7 +1822,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/index.html index 7c971c29276..9c5ce00106b 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/index.html @@ -185,7 +185,7 @@

All files packages/roosterjs-edit diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/wordConverter.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/wordConverter.ts.html index f5b5c58c5a3..00743cda52e 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/wordConverter.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/wordConverter.ts.html @@ -175,7 +175,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Picker/PickerPlugin.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Picker/PickerPlugin.ts.html index b6a9074a6b0..d6081160998 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Picker/PickerPlugin.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Picker/PickerPlugin.ts.html @@ -1894,7 +1894,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Picker/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Picker/index.html index 0131f0d6062..6380078a000 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Picker/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Picker/index.html @@ -110,7 +110,7 @@

All files packages/roosterjs-editor- diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Picker/index.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Picker/index.ts.html index 096542eb7b5..4d9b9f4ee83 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Picker/index.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Picker/index.ts.html @@ -67,7 +67,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/TableCellSelection.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/TableCellSelection.ts.html index 8efc06f1511..a96c88c4c04 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/TableCellSelection.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/TableCellSelection.ts.html @@ -454,7 +454,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/constants.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/constants.ts.html index 458b794137e..7ce73b393ab 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/constants.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/constants.ts.html @@ -79,7 +79,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/features/DeleteTableContents.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/features/DeleteTableContents.ts.html index 22e17a49f75..4c8533e56e7 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/features/DeleteTableContents.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/features/DeleteTableContents.ts.html @@ -202,7 +202,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/features/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/features/index.html index ed97e094dc4..3736ce10056 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/features/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/features/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-edit diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/index.html index ce7354d58e5..bf0419784b2 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/index.html @@ -125,7 +125,7 @@

All files packages/roosterjs-editor- diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/index.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/index.ts.html index ce8423b1750..178358500e7 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/index.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/index.ts.html @@ -67,7 +67,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/keyUtils/handleKeyDownEvent.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/keyUtils/handleKeyDownEvent.ts.html index cd4f3de8cb1..8476720bb4b 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/keyUtils/handleKeyDownEvent.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/keyUtils/handleKeyDownEvent.ts.html @@ -736,7 +736,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/keyUtils/handleKeyUpEvent.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/keyUtils/handleKeyUpEvent.ts.html index 713b37379f0..815e51f5999 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/keyUtils/handleKeyUpEvent.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/keyUtils/handleKeyUpEvent.ts.html @@ -160,7 +160,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/keyUtils/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/keyUtils/index.html index d7e2ee66d10..d02846b5011 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/keyUtils/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/keyUtils/index.html @@ -110,7 +110,7 @@

All files packages/roosterjs-edit diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/mouseUtils/handleMouseDownEvent.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/mouseUtils/handleMouseDownEvent.ts.html index 5598a053528..210d8f85196 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/mouseUtils/handleMouseDownEvent.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/mouseUtils/handleMouseDownEvent.ts.html @@ -823,7 +823,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/mouseUtils/handleScrollEvent.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/mouseUtils/handleScrollEvent.ts.html index 90d5c3d0374..872e9b7e119 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/mouseUtils/handleScrollEvent.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/mouseUtils/handleScrollEvent.ts.html @@ -172,7 +172,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/mouseUtils/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/mouseUtils/index.html index c8481e6ce24..671040386cd 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/mouseUtils/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/mouseUtils/index.html @@ -110,7 +110,7 @@

All files packages/roosterjs-edit diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/clearState.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/clearState.ts.html index dfd99600724..864582ad099 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/clearState.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/clearState.ts.html @@ -121,7 +121,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/getCellAtCursor.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/getCellAtCursor.ts.html index 1f29ce3fd41..73fab5de751 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/getCellAtCursor.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/getCellAtCursor.ts.html @@ -112,7 +112,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/getCellCoordinates.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/getCellCoordinates.ts.html index 18aa9a9b312..c4f5f023e48 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/getCellCoordinates.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/getCellCoordinates.ts.html @@ -142,7 +142,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/getTableAtCursor.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/getTableAtCursor.ts.html index 09031ef8ee1..95f4a570750 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/getTableAtCursor.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/getTableAtCursor.ts.html @@ -109,7 +109,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/index.html index f443256318f..9cd16845904 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/index.html @@ -245,7 +245,7 @@

All files packages/roosterjs-edit diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/isAfter.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/isAfter.ts.html index ac552d70e74..a5045ba7f0d 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/isAfter.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/isAfter.ts.html @@ -130,7 +130,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/normalizeTableSelection.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/normalizeTableSelection.ts.html index 46cd4200958..53d30358434 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/normalizeTableSelection.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/normalizeTableSelection.ts.html @@ -214,7 +214,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/prepareSelection.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/prepareSelection.ts.html index d85d3c1113e..6d86170f5d6 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/prepareSelection.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/prepareSelection.ts.html @@ -271,7 +271,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/restoreSelection.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/restoreSelection.ts.html index 9ae5911e55b..9f719bb9db7 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/restoreSelection.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/restoreSelection.ts.html @@ -178,7 +178,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/selectTable.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/selectTable.ts.html index 7f4eadd3ab4..51f3982c091 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/selectTable.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/selectTable.ts.html @@ -100,7 +100,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/setData.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/setData.ts.html index 32c84f432c2..a5a649e489d 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/setData.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/setData.ts.html @@ -142,7 +142,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/updateSelection.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/updateSelection.ts.html index 09802331b69..969c4afddf7 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/updateSelection.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/updateSelection.ts.html @@ -130,7 +130,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/TableResize.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/TableResize.ts.html index 3913fb26af9..03a12f40305 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/TableResize.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/TableResize.ts.html @@ -583,7 +583,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/CellResizer.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/CellResizer.ts.html index ed93a81ed1c..73125b9d49a 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/CellResizer.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/CellResizer.ts.html @@ -787,7 +787,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableEditor.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableEditor.ts.html index 24533fc3444..5484f6ed629 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableEditor.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableEditor.ts.html @@ -1303,7 +1303,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableEditorFeature.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableEditorFeature.ts.html index 4185dd83770..9fb462ee97b 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableEditorFeature.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableEditorFeature.ts.html @@ -130,7 +130,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableInserter.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableInserter.ts.html index 62283430cec..490ed81badc 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableInserter.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableInserter.ts.html @@ -505,7 +505,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableResizer.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableResizer.ts.html index cce9aa25e6f..96440a99c4f 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableResizer.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableResizer.ts.html @@ -514,7 +514,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableSelector.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableSelector.ts.html index 18c14838199..b513e00ccf1 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableSelector.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableSelector.ts.html @@ -460,7 +460,7 @@

All files / diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/index.html index 469e6ea898e..a45a0727860 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/editors/index.html @@ -170,7 +170,7 @@

All files packages/roosterjs-edit diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/index.html index de02744fef0..9d66c4205f3 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/index.html @@ -110,7 +110,7 @@

All files packages/roosterjs-editor- diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/index.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/index.ts.html index ff00330e64a..af28eec7f0d 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/index.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/TableResize/index.ts.html @@ -67,7 +67,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Watermark/Watermark.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Watermark/Watermark.ts.html index e792926337d..801146962fe 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Watermark/Watermark.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Watermark/Watermark.ts.html @@ -484,7 +484,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Watermark/index.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Watermark/index.html index f8be3739e4e..79fca282c22 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Watermark/index.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Watermark/index.html @@ -110,7 +110,7 @@

All files packages/roosterjs-editor- diff --git a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Watermark/index.ts.html b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Watermark/index.ts.html index f173f64a64b..1dbbfa6d9d9 100644 --- a/coverage/packages/roosterjs-editor-plugins/lib/plugins/Watermark/index.ts.html +++ b/coverage/packages/roosterjs-editor-plugins/lib/plugins/Watermark/index.ts.html @@ -67,7 +67,7 @@

All files / pac diff --git a/coverage/packages/roosterjs-editor-types-compatible/lib/index.html b/coverage/packages/roosterjs-editor-types-compatible/lib/index.html index 9de66841a17..99421ebe3be 100644 --- a/coverage/packages/roosterjs-editor-types-compatible/lib/index.html +++ b/coverage/packages/roosterjs-editor-types-compatible/lib/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-editor-types- diff --git a/coverage/packages/roosterjs-editor-types-compatible/lib/index.ts.html b/coverage/packages/roosterjs-editor-types-compatible/lib/index.ts.html index 45f733c4bb6..900b4ac51ea 100644 --- a/coverage/packages/roosterjs-editor-types-compatible/lib/index.ts.html +++ b/coverage/packages/roosterjs-editor-types-compatible/lib/index.ts.html @@ -67,7 +67,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-types/lib/browser/index.html b/coverage/packages/roosterjs-editor-types/lib/browser/index.html index becf643ac0b..617fb4c0873 100644 --- a/coverage/packages/roosterjs-editor-types/lib/browser/index.html +++ b/coverage/packages/roosterjs-editor-types/lib/browser/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-editor-typ diff --git a/coverage/packages/roosterjs-editor-types/lib/browser/index.ts.html b/coverage/packages/roosterjs-editor-types/lib/browser/index.ts.html index 3e6f5157f8a..96f6ec482e4 100644 --- a/coverage/packages/roosterjs-editor-types/lib/browser/index.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/browser/index.ts.html @@ -70,7 +70,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Alignment.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Alignment.ts.html index 07cdd318af8..baca754829c 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Alignment.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Alignment.ts.html @@ -124,7 +124,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/BulletListType.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/BulletListType.ts.html index 46e1bc9323e..ad950b76d63 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/BulletListType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/BulletListType.ts.html @@ -244,7 +244,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Capitalization.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Capitalization.ts.html index d43e64178c1..50cfa2431a8 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Capitalization.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Capitalization.ts.html @@ -145,7 +145,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ChangeSource.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ChangeSource.ts.html index 06ac6b62a6a..6454d385b87 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ChangeSource.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ChangeSource.ts.html @@ -280,7 +280,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ClearFormatMode.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ClearFormatMode.ts.html index 30166c6e053..f44f7cc8782 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ClearFormatMode.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ClearFormatMode.ts.html @@ -124,7 +124,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ColorTransformDirection.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ColorTransformDirection.ts.html index 8528a0fa925..b14713dbd6a 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ColorTransformDirection.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ColorTransformDirection.ts.html @@ -109,7 +109,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ContentPosition.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ContentPosition.ts.html index 0ada0ebdc24..c544cdd8275 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ContentPosition.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ContentPosition.ts.html @@ -175,7 +175,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ContentType.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ContentType.ts.html index 81465dfda31..3e94c7f654d 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ContentType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ContentType.ts.html @@ -160,7 +160,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DarkModeDatasetNames.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DarkModeDatasetNames.ts.html index e87f393b794..32012447355 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DarkModeDatasetNames.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DarkModeDatasetNames.ts.html @@ -142,7 +142,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DefinitionType.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DefinitionType.ts.html index fbbc64c0cd4..ce02009a62a 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DefinitionType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DefinitionType.ts.html @@ -169,7 +169,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DelimiterClasses.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DelimiterClasses.ts.html index 23da8b0d755..3542ccc9dd1 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DelimiterClasses.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DelimiterClasses.ts.html @@ -109,7 +109,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Direction.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Direction.ts.html index a2dcd5a946f..87169e881e7 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Direction.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Direction.ts.html @@ -109,7 +109,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DocumentCommand.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DocumentCommand.ts.html index 05131d07eac..a729efcf452 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DocumentCommand.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DocumentCommand.ts.html @@ -850,7 +850,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DocumentPosition.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DocumentPosition.ts.html index 75a184bd19d..a252fed42d2 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DocumentPosition.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/DocumentPosition.ts.html @@ -172,7 +172,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/EntityClasses.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/EntityClasses.ts.html index d27e4df8b36..c65393201ec 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/EntityClasses.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/EntityClasses.ts.html @@ -139,7 +139,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/EntityOperation.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/EntityOperation.ts.html index bbdb187e41b..b366a4e2eb0 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/EntityOperation.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/EntityOperation.ts.html @@ -295,7 +295,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ExperimentalFeatures.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ExperimentalFeatures.ts.html index 2cdbccfcdb8..bbdd1bb504c 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ExperimentalFeatures.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ExperimentalFeatures.ts.html @@ -595,7 +595,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/FontSizeChange.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/FontSizeChange.ts.html index feda0b3e560..9265e054cb7 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/FontSizeChange.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/FontSizeChange.ts.html @@ -112,7 +112,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/GetContentMode.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/GetContentMode.ts.html index 09fa755a351..655f261bdc3 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/GetContentMode.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/GetContentMode.ts.html @@ -175,7 +175,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ImageEditOperation.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ImageEditOperation.ts.html index 49708cd362d..837265d18a4 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ImageEditOperation.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ImageEditOperation.ts.html @@ -199,7 +199,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Indentation.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Indentation.ts.html index 94482c1fe44..953f1866bff 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Indentation.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Indentation.ts.html @@ -112,7 +112,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Keys.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Keys.ts.html index e0a127f93dd..715301fbcee 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Keys.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/Keys.ts.html @@ -226,7 +226,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/KnownCreateElementDataIndex.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/KnownCreateElementDataIndex.ts.html index 07b8551f20d..126bd69f4bb 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/KnownCreateElementDataIndex.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/KnownCreateElementDataIndex.ts.html @@ -274,7 +274,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/KnownPasteSourceType.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/KnownPasteSourceType.ts.html index baa9198d6ea..5bcc57e8de8 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/KnownPasteSourceType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/KnownPasteSourceType.ts.html @@ -106,7 +106,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ListType.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ListType.ts.html index f15664d63a1..5c77f36bb73 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ListType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/ListType.ts.html @@ -133,7 +133,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/NodeType.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/NodeType.ts.html index 03b3ca163c0..6eeeb387be8 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/NodeType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/NodeType.ts.html @@ -205,7 +205,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/NumberingListType.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/NumberingListType.ts.html index cf48289cae6..331e632407a 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/NumberingListType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/NumberingListType.ts.html @@ -409,7 +409,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/PasteType.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/PasteType.ts.html index 21aeb94a084..18432398af7 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/PasteType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/PasteType.ts.html @@ -139,7 +139,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/PluginEventType.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/PluginEventType.ts.html index faa7dfa898a..4024fbc65b4 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/PluginEventType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/PluginEventType.ts.html @@ -460,7 +460,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/PositionType.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/PositionType.ts.html index a9f6d85c681..c0989c689ef 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/PositionType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/PositionType.ts.html @@ -139,7 +139,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/QueryScope.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/QueryScope.ts.html index 4280737a96f..abfdc60cf64 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/QueryScope.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/QueryScope.ts.html @@ -127,7 +127,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/RegionType.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/RegionType.ts.html index 7b3661e502f..62a2eca2318 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/RegionType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/RegionType.ts.html @@ -94,7 +94,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/SelectionRangeTypes.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/SelectionRangeTypes.ts.html index ff7d660e244..abc9267ee0b 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/SelectionRangeTypes.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/SelectionRangeTypes.ts.html @@ -118,7 +118,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/TableBorderFormat.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/TableBorderFormat.ts.html index d52a49f13a5..0576d831e07 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/TableBorderFormat.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/TableBorderFormat.ts.html @@ -310,7 +310,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/TableOperation.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/TableOperation.ts.html index 7663b89c88c..112af4544f6 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/TableOperation.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/TableOperation.ts.html @@ -424,7 +424,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/index.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/index.html index 627d262a51f..9e94481bb52 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/index.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/index.html @@ -620,7 +620,7 @@

All files packages/roosterjs-editor-typ diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/index.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/index.ts.html index a38e7451a29..3a245e0c590 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/index.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleEnum/index.ts.html @@ -169,7 +169,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/compatibleTypes.ts.html b/coverage/packages/roosterjs-editor-types/lib/compatibleTypes.ts.html index bfcf79c5ff5..f314b83066e 100644 --- a/coverage/packages/roosterjs-editor-types/lib/compatibleTypes.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/compatibleTypes.ts.html @@ -82,7 +82,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-types/lib/corePluginState/index.html b/coverage/packages/roosterjs-editor-types/lib/corePluginState/index.html index 7fddb9c8260..473ffcfd9ad 100644 --- a/coverage/packages/roosterjs-editor-types/lib/corePluginState/index.html +++ b/coverage/packages/roosterjs-editor-types/lib/corePluginState/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-editor-typ diff --git a/coverage/packages/roosterjs-editor-types/lib/corePluginState/index.ts.html b/coverage/packages/roosterjs-editor-types/lib/corePluginState/index.ts.html index f9a8103e183..1a10aeedd00 100644 --- a/coverage/packages/roosterjs-editor-types/lib/corePluginState/index.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/corePluginState/index.ts.html @@ -85,7 +85,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/Alignment.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/Alignment.ts.html index 6bb4a1ea2b6..4dd1b207976 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/Alignment.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/Alignment.ts.html @@ -121,7 +121,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/BulletListType.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/BulletListType.ts.html index 89f0a731e8f..f4427c9b257 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/BulletListType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/BulletListType.ts.html @@ -241,7 +241,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/Capitalization.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/Capitalization.ts.html index 73c318c7ddf..0dc55e90087 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/Capitalization.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/Capitalization.ts.html @@ -142,7 +142,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/ChangeSource.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/ChangeSource.ts.html index 61ab51ab4f8..931fd63327c 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/ChangeSource.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/ChangeSource.ts.html @@ -277,7 +277,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/ClearFormatMode.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/ClearFormatMode.ts.html index b6f209302d0..bc9f8829f53 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/ClearFormatMode.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/ClearFormatMode.ts.html @@ -121,7 +121,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/ColorTransformDirection.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/ColorTransformDirection.ts.html index 5582880baba..e81d5566d82 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/ColorTransformDirection.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/ColorTransformDirection.ts.html @@ -106,7 +106,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/ContentPosition.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/ContentPosition.ts.html index afae1530e61..f63abafdbbf 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/ContentPosition.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/ContentPosition.ts.html @@ -172,7 +172,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/ContentType.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/ContentType.ts.html index 138019831c7..974d036345b 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/ContentType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/ContentType.ts.html @@ -151,7 +151,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/DarkModeDatasetNames.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/DarkModeDatasetNames.ts.html index 4177e8bad3f..f0e63cf026a 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/DarkModeDatasetNames.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/DarkModeDatasetNames.ts.html @@ -139,7 +139,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/DefinitionType.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/DefinitionType.ts.html index d927159a8bc..2a3e4820161 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/DefinitionType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/DefinitionType.ts.html @@ -166,7 +166,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/DelimiterClasses.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/DelimiterClasses.ts.html index 1311bda38b3..1f34eb81852 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/DelimiterClasses.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/DelimiterClasses.ts.html @@ -106,7 +106,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/Direction.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/Direction.ts.html index f666b8fe54b..1d19aebb064 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/Direction.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/Direction.ts.html @@ -106,7 +106,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/DocumentCommand.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/DocumentCommand.ts.html index e58ff123641..f9f4c8c0779 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/DocumentCommand.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/DocumentCommand.ts.html @@ -847,7 +847,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/DocumentPosition.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/DocumentPosition.ts.html index 398f4f3be7f..9bacda52b53 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/DocumentPosition.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/DocumentPosition.ts.html @@ -169,7 +169,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/EntityClasses.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/EntityClasses.ts.html index 405e724400f..8c06b5071ae 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/EntityClasses.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/EntityClasses.ts.html @@ -136,7 +136,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/EntityOperation.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/EntityOperation.ts.html index 22cbadb7ff4..f4e7fb6fd5f 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/EntityOperation.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/EntityOperation.ts.html @@ -292,7 +292,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/ExperimentalFeatures.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/ExperimentalFeatures.ts.html index 513ef701b4d..b611ef48142 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/ExperimentalFeatures.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/ExperimentalFeatures.ts.html @@ -592,7 +592,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/FontSizeChange.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/FontSizeChange.ts.html index 50a2f74ee7e..621490e5d0f 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/FontSizeChange.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/FontSizeChange.ts.html @@ -109,7 +109,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/GetContentMode.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/GetContentMode.ts.html index 8c20aa842d3..22117c6c14b 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/GetContentMode.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/GetContentMode.ts.html @@ -172,7 +172,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/ImageEditOperation.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/ImageEditOperation.ts.html index df0ea763816..405a5406ba6 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/ImageEditOperation.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/ImageEditOperation.ts.html @@ -196,7 +196,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/Indentation.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/Indentation.ts.html index 799d31485ec..4d075da21ca 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/Indentation.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/Indentation.ts.html @@ -109,7 +109,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/Keys.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/Keys.ts.html index 3ae88bbc5ac..6bb90fdbdd6 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/Keys.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/Keys.ts.html @@ -223,7 +223,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/KnownCreateElementDataIndex.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/KnownCreateElementDataIndex.ts.html index 2b048fe97a1..6851a818a08 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/KnownCreateElementDataIndex.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/KnownCreateElementDataIndex.ts.html @@ -271,7 +271,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/KnownPasteSourceType.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/KnownPasteSourceType.ts.html index ec9aaa04037..1a530a89c2b 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/KnownPasteSourceType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/KnownPasteSourceType.ts.html @@ -103,7 +103,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/ListType.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/ListType.ts.html index 463be93cb35..62008d77c39 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/ListType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/ListType.ts.html @@ -130,7 +130,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/NodeType.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/NodeType.ts.html index 25a744bf179..a52f52777e9 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/NodeType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/NodeType.ts.html @@ -202,7 +202,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/NumberingListType.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/NumberingListType.ts.html index 2f041a71af9..7ae1bdac39a 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/NumberingListType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/NumberingListType.ts.html @@ -406,7 +406,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/PasteType.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/PasteType.ts.html index 28d430f4ab3..f9bd18f0a8d 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/PasteType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/PasteType.ts.html @@ -136,7 +136,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/PluginEventType.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/PluginEventType.ts.html index c6f8538edb7..5e473f92c67 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/PluginEventType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/PluginEventType.ts.html @@ -457,7 +457,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/PositionType.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/PositionType.ts.html index 36074ce597d..62578191b2c 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/PositionType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/PositionType.ts.html @@ -136,7 +136,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/QueryScope.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/QueryScope.ts.html index de84d3a99fe..ae1248364f4 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/QueryScope.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/QueryScope.ts.html @@ -124,7 +124,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/RegionType.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/RegionType.ts.html index a91833bacd6..0f6c6a4bb02 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/RegionType.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/RegionType.ts.html @@ -91,7 +91,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/SelectionRangeTypes.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/SelectionRangeTypes.ts.html index bc0b6a49731..639cdbcc97f 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/SelectionRangeTypes.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/SelectionRangeTypes.ts.html @@ -115,7 +115,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/TableBorderFormat.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/TableBorderFormat.ts.html index 0f5456bce49..c05b87f321a 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/TableBorderFormat.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/TableBorderFormat.ts.html @@ -307,7 +307,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/TableOperation.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/TableOperation.ts.html index a3a865884d6..dfcaf33b479 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/TableOperation.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/TableOperation.ts.html @@ -421,7 +421,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/index.html b/coverage/packages/roosterjs-editor-types/lib/enum/index.html index b78ab883295..a7180695310 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/index.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/index.html @@ -620,7 +620,7 @@

All files packages/roosterjs-editor-typ diff --git a/coverage/packages/roosterjs-editor-types/lib/enum/index.ts.html b/coverage/packages/roosterjs-editor-types/lib/enum/index.ts.html index 477210f6581..c75d09b3bb2 100644 --- a/coverage/packages/roosterjs-editor-types/lib/enum/index.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/enum/index.ts.html @@ -169,7 +169,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/event/index.html b/coverage/packages/roosterjs-editor-types/lib/event/index.html index 2550ac39663..1fea89069ac 100644 --- a/coverage/packages/roosterjs-editor-types/lib/event/index.html +++ b/coverage/packages/roosterjs-editor-types/lib/event/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-editor-typ diff --git a/coverage/packages/roosterjs-editor-types/lib/event/index.ts.html b/coverage/packages/roosterjs-editor-types/lib/event/index.ts.html index 3afd13ba802..ba90362afd1 100644 --- a/coverage/packages/roosterjs-editor-types/lib/event/index.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/event/index.ts.html @@ -367,7 +367,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/index.html b/coverage/packages/roosterjs-editor-types/lib/index.html index be09cbd2077..c370c11b2fc 100644 --- a/coverage/packages/roosterjs-editor-types/lib/index.html +++ b/coverage/packages/roosterjs-editor-types/lib/index.html @@ -110,7 +110,7 @@

All files packages/roosterjs-editor-types/ diff --git a/coverage/packages/roosterjs-editor-types/lib/index.ts.html b/coverage/packages/roosterjs-editor-types/lib/index.ts.html index e2eb4da9531..ca01a8515d7 100644 --- a/coverage/packages/roosterjs-editor-types/lib/index.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/index.ts.html @@ -82,7 +82,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs-editor-types/lib/interface/index.html b/coverage/packages/roosterjs-editor-types/lib/interface/index.html index 222e8027a71..fcf4731c906 100644 --- a/coverage/packages/roosterjs-editor-types/lib/interface/index.html +++ b/coverage/packages/roosterjs-editor-types/lib/interface/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-editor-typ diff --git a/coverage/packages/roosterjs-editor-types/lib/interface/index.ts.html b/coverage/packages/roosterjs-editor-types/lib/interface/index.ts.html index d4ac0de90e7..09e3a4b5a45 100644 --- a/coverage/packages/roosterjs-editor-types/lib/interface/index.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/interface/index.ts.html @@ -439,7 +439,7 @@

All files / packag diff --git a/coverage/packages/roosterjs-editor-types/lib/type/index.html b/coverage/packages/roosterjs-editor-types/lib/type/index.html index 2a528295057..8e5a523a154 100644 --- a/coverage/packages/roosterjs-editor-types/lib/type/index.html +++ b/coverage/packages/roosterjs-editor-types/lib/type/index.html @@ -95,7 +95,7 @@

All files packages/roosterjs-editor-typ diff --git a/coverage/packages/roosterjs-editor-types/lib/type/index.ts.html b/coverage/packages/roosterjs-editor-types/lib/type/index.ts.html index 6e6527a6f3e..ae84406327c 100644 --- a/coverage/packages/roosterjs-editor-types/lib/type/index.ts.html +++ b/coverage/packages/roosterjs-editor-types/lib/type/index.ts.html @@ -142,7 +142,7 @@

All files / packag diff --git a/coverage/packages/roosterjs/lib/createEditor.ts.html b/coverage/packages/roosterjs/lib/createEditor.ts.html index 177c0857b16..b1073607ada 100644 --- a/coverage/packages/roosterjs/lib/createEditor.ts.html +++ b/coverage/packages/roosterjs/lib/createEditor.ts.html @@ -172,7 +172,7 @@

All files / packages/ diff --git a/coverage/packages/roosterjs/lib/index.html b/coverage/packages/roosterjs/lib/index.html index 2f72fde7225..65e3f8997e7 100644 --- a/coverage/packages/roosterjs/lib/index.html +++ b/coverage/packages/roosterjs/lib/index.html @@ -110,7 +110,7 @@

All files packages/roosterjs/lib

diff --git a/coverage/packages/roosterjs/lib/index.ts.html b/coverage/packages/roosterjs/lib/index.ts.html index 4259171f1c5..484fc36377f 100644 --- a/coverage/packages/roosterjs/lib/index.ts.html +++ b/coverage/packages/roosterjs/lib/index.ts.html @@ -88,7 +88,7 @@

All files / packages/ diff --git a/docs/classes/roosterjs_content_model_editor.contentmodelcopypasteplugin.html b/docs/classes/roosterjs_content_model_editor.contentmodelcopypasteplugin.html index fd4e93e240f..38f4f2ff17e 100644 --- a/docs/classes/roosterjs_content_model_editor.contentmodelcopypasteplugin.html +++ b/docs/classes/roosterjs_content_model_editor.contentmodelcopypasteplugin.html @@ -121,7 +121,7 @@

constructor

  • @@ -153,7 +153,7 @@

    dispose

    @@ -176,7 +176,7 @@

    getName

    @@ -199,7 +199,7 @@

    getState

    @@ -222,7 +222,7 @@

    initialize

    diff --git a/docs/classes/roosterjs_content_model_editor.contentmodeleditor.html b/docs/classes/roosterjs_content_model_editor.contentmodeleditor.html index ef3bdd9c3f3..004e3934401 100644 --- a/docs/classes/roosterjs_content_model_editor.contentmodeleditor.html +++ b/docs/classes/roosterjs_content_model_editor.contentmodeleditor.html @@ -192,7 +192,7 @@

    constructor

    @@ -234,7 +234,7 @@

    addContentEditFeature

    Implementation of IContentModelEditor.addContentEditFeature

    Inherited from EditorBase.addContentEditFeature

    @@ -267,7 +267,7 @@

    addDomEventHandler

    Implementation of IContentModelEditor.addDomEventHandler

    Inherited from EditorBase.addDomEventHandler

    @@ -313,7 +313,7 @@

    addUndoSnapshot

    Implementation of IContentModelEditor.addUndoSnapshot

    Inherited from EditorBase.addUndoSnapshot

    @@ -385,7 +385,7 @@

    cacheContentModel

    @@ -417,7 +417,7 @@

    collapseNodes

    Implementation of IContentModelEditor.collapseNodes

    Inherited from EditorBase.collapseNodes

    @@ -467,7 +467,7 @@

    contains

    Implementation of IContentModelEditor.contains

    Inherited from EditorBase.contains

    @@ -496,7 +496,7 @@

    createContentModel

    @@ -529,7 +529,7 @@

    deleteNode

    Implementation of IContentModelEditor.deleteNode

    Inherited from EditorBase.deleteNode

    @@ -563,7 +563,7 @@

    deleteSelectedContent

    Implementation of IContentModelEditor.deleteSelectedContent

    Inherited from EditorBase.deleteSelectedContent

    @@ -587,7 +587,7 @@

    dispose

    Implementation of IContentModelEditor.dispose

    Inherited from EditorBase.dispose

    @@ -611,7 +611,7 @@

    ensureTypeInContainer

    Implementation of IContentModelEditor.ensureTypeInContainer

    Inherited from EditorBase.ensureTypeInContainer

    @@ -650,7 +650,7 @@

    focus

    Implementation of IContentModelEditor.focus

    Inherited from EditorBase.focus

    @@ -674,7 +674,7 @@

    getBlockElementAtNode

    Implementation of IContentModelEditor.getBlockElementAtNode

    Inherited from EditorBase.getBlockElementAtNode

    @@ -708,7 +708,7 @@

    getBlockTraverser

    Implementation of IContentModelEditor.getBlockTraverser

    Inherited from EditorBase.getBlockTraverser

    @@ -742,7 +742,7 @@

    getBodyTraverser

    Implementation of IContentModelEditor.getBodyTraverser

    Inherited from EditorBase.getBodyTraverser

    @@ -775,7 +775,7 @@

    getContent

    Implementation of IContentModelEditor.getContent

    Inherited from EditorBase.getContent

    @@ -808,7 +808,7 @@

    getContentModelDefaultFormat

    @@ -834,7 +834,7 @@

    getContentSearcherOfCursor

    Implementation of IContentModelEditor.getContentSearcherOfCursor

    Inherited from EditorBase.getContentSearcherOfCursor

    @@ -868,7 +868,7 @@

    Protected getCore

    @@ -895,7 +895,7 @@

    getCustomData

    Implementation of IContentModelEditor.getCustomData

    Inherited from EditorBase.getCustomData

    @@ -978,7 +978,7 @@

    getDarkColorHandler

    Implementation of IContentModelEditor.getDarkColorHandler

    Inherited from EditorBase.getDarkColorHandler

    @@ -1002,7 +1002,7 @@

    getDefaultFormat

    Implementation of IContentModelEditor.getDefaultFormat

    Inherited from EditorBase.getDefaultFormat

    @@ -1027,7 +1027,7 @@

    getDocument

    Implementation of IContentModelEditor.getDocument

    Inherited from EditorBase.getDocument

    @@ -1052,7 +1052,7 @@

    getEditorDomAttribute

    Implementation of IContentModelEditor.getEditorDomAttribute

    Inherited from EditorBase.getEditorDomAttribute

    @@ -1085,7 +1085,7 @@

    getElementAtCursor

    Implementation of IContentModelEditor.getElementAtCursor

    Inherited from EditorBase.getElementAtCursor

    @@ -1136,7 +1136,7 @@

    getFocusedPosition

    Implementation of IContentModelEditor.getFocusedPosition

    Inherited from EditorBase.getFocusedPosition

    @@ -1160,7 +1160,7 @@

    getPendableFormatState

    Implementation of IContentModelEditor.getPendableFormatState

    Inherited from EditorBase.getPendableFormatState

    @@ -1194,7 +1194,7 @@

    getRelativeDistanceToEditor

    Implementation of IContentModelEditor.getRelativeDistanceToEditor

    Inherited from EditorBase.getRelativeDistanceToEditor

    @@ -1238,7 +1238,7 @@

    getScrollContainer

    Implementation of IContentModelEditor.getScrollContainer

    Inherited from EditorBase.getScrollContainer

    @@ -1262,7 +1262,7 @@

    getSelectedRegions

    Implementation of IContentModelEditor.getSelectedRegions

    Inherited from EditorBase.getSelectedRegions

    @@ -1292,7 +1292,7 @@

    getSelectionPath

    Implementation of IContentModelEditor.getSelectionPath

    Inherited from EditorBase.getSelectionPath

    @@ -1318,7 +1318,7 @@

    getSelectionRange

    Implementation of IContentModelEditor.getSelectionRange

    Inherited from EditorBase.getSelectionRange

    @@ -1354,7 +1354,7 @@

    getSelectionRangeEx

    Implementation of IContentModelEditor.getSelectionRangeEx

    Inherited from EditorBase.getSelectionRangeEx

    @@ -1380,7 +1380,7 @@

    getSelectionTraverser

    Implementation of IContentModelEditor.getSelectionTraverser

    Inherited from EditorBase.getSelectionTraverser

    @@ -1411,7 +1411,7 @@

    getSizeTransformer

    Implementation of IContentModelEditor.getSizeTransformer

    Inherited from EditorBase.getSizeTransformer

    @@ -1437,7 +1437,7 @@

    getStyleBasedFormatState

    Implementation of IContentModelEditor.getStyleBasedFormatState

    Inherited from EditorBase.getStyleBasedFormatState

    @@ -1467,7 +1467,7 @@

    getTrustedHTMLHandler

    Implementation of IContentModelEditor.getTrustedHTMLHandler

    Inherited from EditorBase.getTrustedHTMLHandler

    @@ -1494,7 +1494,7 @@

    getUndoState

    Implementation of IContentModelEditor.getUndoState

    Inherited from EditorBase.getUndoState

    @@ -1518,7 +1518,7 @@

    getVisibleViewport

    Implementation of IContentModelEditor.getVisibleViewport

    Inherited from EditorBase.getVisibleViewport

    @@ -1542,7 +1542,7 @@

    getZoomScale

    Implementation of IContentModelEditor.getZoomScale

    Inherited from EditorBase.getZoomScale

    @@ -1569,7 +1569,7 @@

    hasFocus

    Implementation of IContentModelEditor.hasFocus

    Inherited from EditorBase.hasFocus

    @@ -1594,7 +1594,7 @@

    insertContent

    Implementation of IContentModelEditor.insertContent

    Inherited from EditorBase.insertContent

    @@ -1634,7 +1634,7 @@

    insertNode

    Implementation of IContentModelEditor.insertNode

    Inherited from EditorBase.insertNode

    @@ -1678,7 +1678,7 @@

    isDarkMode

    Implementation of IContentModelEditor.isDarkMode

    Inherited from EditorBase.isDarkMode

    @@ -1703,7 +1703,7 @@

    isDisposed

    Implementation of IContentModelEditor.isDisposed

    Inherited from EditorBase.isDisposed

    @@ -1728,7 +1728,7 @@

    isEmpty

    Implementation of IContentModelEditor.isEmpty

    Inherited from EditorBase.isEmpty

    @@ -1762,7 +1762,7 @@

    isFeatureEnabled

    Implementation of IContentModelEditor.isFeatureEnabled

    Inherited from EditorBase.isFeatureEnabled

    @@ -1795,7 +1795,7 @@

    isInIME

    Implementation of IContentModelEditor.isInIME

    Inherited from EditorBase.isInIME

    @@ -1820,7 +1820,7 @@

    isInShadowEdit

    Implementation of IContentModelEditor.isInShadowEdit

    Inherited from EditorBase.isInShadowEdit

    @@ -1844,7 +1844,7 @@

    isPositionAtBeginning

    Implementation of IContentModelEditor.isPositionAtBeginning

    Inherited from EditorBase.isPositionAtBeginning

    @@ -1879,7 +1879,7 @@

    paste

    Implementation of IContentModelEditor.paste

    Inherited from EditorBase.paste

    @@ -1924,7 +1924,7 @@

    queryElements

    Implementation of IContentModelEditor.queryElements

    Inherited from EditorBase.queryElements

    @@ -1978,7 +1978,7 @@

    redo

    Implementation of IContentModelEditor.redo

    Inherited from EditorBase.redo

    @@ -2002,7 +2002,7 @@

    removeContentEditFeature

    Implementation of IContentModelEditor.removeContentEditFeature

    Inherited from EditorBase.removeContentEditFeature

    @@ -2035,7 +2035,7 @@

    replaceNode

    Implementation of IContentModelEditor.replaceNode

    Inherited from EditorBase.replaceNode

    @@ -2081,7 +2081,7 @@

    runAsync

    Implementation of IContentModelEditor.runAsync

    Inherited from EditorBase.runAsync

    @@ -2145,7 +2145,7 @@

    select

    Implementation of IContentModelEditor.select

    Inherited from EditorBase.select

    @@ -2184,7 +2184,7 @@

    setContent

    Implementation of IContentModelEditor.setContent

    Inherited from EditorBase.setContent

    @@ -2222,7 +2222,7 @@

    setContentModel

    @@ -2261,7 +2261,7 @@

    setDarkModeState

    Implementation of IContentModelEditor.setDarkModeState

    Inherited from EditorBase.setDarkModeState

    @@ -2294,7 +2294,7 @@

    setEditorDomAttribute

    Implementation of IContentModelEditor.setEditorDomAttribute

    Inherited from EditorBase.setEditorDomAttribute

    @@ -2333,7 +2333,7 @@

    setZoomScale

    Implementation of IContentModelEditor.setZoomScale

    Inherited from EditorBase.setZoomScale

    @@ -2368,7 +2368,7 @@

    startShadowEdit

    Implementation of IContentModelEditor.startShadowEdit

    Inherited from EditorBase.startShadowEdit

    @@ -2397,7 +2397,7 @@

    stopShadowEdit

    Implementation of IContentModelEditor.stopShadowEdit

    Inherited from EditorBase.stopShadowEdit

    @@ -2421,7 +2421,7 @@

    transformToDarkColor

    Implementation of IContentModelEditor.transformToDarkColor

    Inherited from EditorBase.transformToDarkColor

    @@ -2454,7 +2454,7 @@

    triggerContentChangedEvent

    Implementation of IContentModelEditor.triggerContentChangedEvent

    Inherited from EditorBase.triggerContentChangedEvent

    @@ -2493,7 +2493,7 @@

    triggerPluginEvent

    Implementation of IContentModelEditor.triggerPluginEvent

    Inherited from EditorBase.triggerPluginEvent

    @@ -2547,7 +2547,7 @@

    undo

    Implementation of IContentModelEditor.undo

    Inherited from EditorBase.undo

    diff --git a/docs/classes/roosterjs_content_model_editor.contentmodeleditplugin.html b/docs/classes/roosterjs_content_model_editor.contentmodeleditplugin.html index 4cb0edf9576..4394793355a 100644 --- a/docs/classes/roosterjs_content_model_editor.contentmodeleditplugin.html +++ b/docs/classes/roosterjs_content_model_editor.contentmodeleditplugin.html @@ -144,7 +144,7 @@

    dispose

    @@ -169,7 +169,7 @@

    getName

    @@ -192,7 +192,7 @@

    initialize

    @@ -226,7 +226,7 @@

    onPluginEvent

    diff --git a/docs/classes/roosterjs_content_model_editor.contentmodelformatplugin.html b/docs/classes/roosterjs_content_model_editor.contentmodelformatplugin.html index b45c8e1f77b..4915f16263c 100644 --- a/docs/classes/roosterjs_content_model_editor.contentmodelformatplugin.html +++ b/docs/classes/roosterjs_content_model_editor.contentmodelformatplugin.html @@ -143,7 +143,7 @@

    dispose

    @@ -168,7 +168,7 @@

    getName

    @@ -191,7 +191,7 @@

    initialize

    @@ -225,7 +225,7 @@

    onPluginEvent

    diff --git a/docs/classes/roosterjs_content_model_editor.contentmodelpasteplugin.html b/docs/classes/roosterjs_content_model_editor.contentmodelpasteplugin.html index a0bd3aaae10..449a23406e6 100644 --- a/docs/classes/roosterjs_content_model_editor.contentmodelpasteplugin.html +++ b/docs/classes/roosterjs_content_model_editor.contentmodelpasteplugin.html @@ -128,7 +128,7 @@

    constructor

  • @@ -163,7 +163,7 @@

    dispose

    @@ -188,7 +188,7 @@

    getName

    @@ -211,7 +211,7 @@

    initialize

    @@ -245,7 +245,7 @@

    onPluginEvent

    diff --git a/docs/classes/roosterjs_content_model_editor.contentmodeltypeincontainerplugin.html b/docs/classes/roosterjs_content_model_editor.contentmodeltypeincontainerplugin.html index 95dc6688905..a39dca02997 100644 --- a/docs/classes/roosterjs_content_model_editor.contentmodeltypeincontainerplugin.html +++ b/docs/classes/roosterjs_content_model_editor.contentmodeltypeincontainerplugin.html @@ -138,7 +138,7 @@

    dispose

    @@ -163,7 +163,7 @@

    getName

    @@ -186,7 +186,7 @@

    initialize

    diff --git a/docs/classes/roosterjs_editor_core.editor.html b/docs/classes/roosterjs_editor_core.editor.html index 58479d5c874..1ddf7fc261b 100644 --- a/docs/classes/roosterjs_editor_core.editor.html +++ b/docs/classes/roosterjs_editor_core.editor.html @@ -181,7 +181,7 @@

    constructor

    @@ -222,7 +222,7 @@

    addContentEditFeature

    @@ -254,7 +254,7 @@

    addDomEventHandler

    Parameters

    @@ -293,7 +293,7 @@

    addUndoSnapshot

    @@ -365,7 +365,7 @@

    collapseNodes

    @@ -414,7 +414,7 @@

    contains

    Parameters

    @@ -438,7 +438,7 @@

    deleteNode

    @@ -471,7 +471,7 @@

    deleteSelectedContent

    @@ -494,7 +494,7 @@

    dispose

    @@ -517,7 +517,7 @@

    ensureTypeInContainer

    @@ -555,7 +555,7 @@

    focus

    @@ -578,7 +578,7 @@

    getBlockElementAtNode

    @@ -611,7 +611,7 @@

    getBlockTraverser

    @@ -644,7 +644,7 @@

    getBodyTraverser

    @@ -676,7 +676,7 @@

    getContent

    @@ -709,7 +709,7 @@

    getContentSearcherOfCursor

    @@ -743,7 +743,7 @@

    Protected getCore

    @@ -769,7 +769,7 @@

    getCustomData

    @@ -851,7 +851,7 @@

    getDarkColorHandler

    @@ -874,7 +874,7 @@

    getDefaultFormat

    @@ -898,7 +898,7 @@

    getDocument

    @@ -922,7 +922,7 @@

    getEditorDomAttribute

    @@ -954,7 +954,7 @@

    getElementAtCursor

    @@ -1004,7 +1004,7 @@

    getFocusedPosition

    @@ -1027,7 +1027,7 @@

    getPendableFormatState

    @@ -1060,7 +1060,7 @@

    getRelativeDistanceToEditor

    @@ -1103,7 +1103,7 @@

    getScrollContainer

    @@ -1126,7 +1126,7 @@

    getSelectedRegions

    @@ -1155,7 +1155,7 @@

    getSelectionPath

    @@ -1180,7 +1180,7 @@

    getSelectionRange

    @@ -1215,7 +1215,7 @@

    getSelectionRangeEx

    @@ -1240,7 +1240,7 @@

    getSelectionTraverser

    @@ -1270,7 +1270,7 @@

    getSizeTransformer

    @@ -1295,7 +1295,7 @@

    getStyleBasedFormatState

    @@ -1324,7 +1324,7 @@

    getTrustedHTMLHandler

    @@ -1350,7 +1350,7 @@

    getUndoState

    @@ -1373,7 +1373,7 @@

    getVisibleViewport

    @@ -1396,7 +1396,7 @@

    getZoomScale

    @@ -1422,7 +1422,7 @@

    hasFocus

    @@ -1446,7 +1446,7 @@

    insertContent

    @@ -1485,7 +1485,7 @@

    insertNode

    @@ -1528,7 +1528,7 @@

    isDarkMode

    @@ -1552,7 +1552,7 @@

    isDisposed

    @@ -1576,7 +1576,7 @@

    isEmpty

    @@ -1609,7 +1609,7 @@

    isFeatureEnabled

    @@ -1641,7 +1641,7 @@

    isInIME

    @@ -1665,7 +1665,7 @@

    isInShadowEdit

    @@ -1688,7 +1688,7 @@

    isPositionAtBeginning

    @@ -1722,7 +1722,7 @@

    paste

    @@ -1766,7 +1766,7 @@

    queryElements

    Parameters

    @@ -1814,7 +1814,7 @@

    redo

    @@ -1837,7 +1837,7 @@

    removeContentEditFeature

    @@ -1869,7 +1869,7 @@

    replaceNode

    @@ -1914,7 +1914,7 @@

    runAsync

    @@ -1977,7 +1977,7 @@

    select

    Parameters

    @@ -2010,7 +2010,7 @@

    setContent

    @@ -2048,7 +2048,7 @@

    setDarkModeState

    @@ -2080,7 +2080,7 @@

    setEditorDomAttribute

    @@ -2118,7 +2118,7 @@

    setZoomScale

    @@ -2152,7 +2152,7 @@

    startShadowEdit

    @@ -2180,7 +2180,7 @@

    stopShadowEdit

    @@ -2203,7 +2203,7 @@

    transformToDarkColor

    @@ -2235,7 +2235,7 @@

    triggerContentChangedEvent

    @@ -2273,7 +2273,7 @@

    triggerPluginEvent

    @@ -2326,7 +2326,7 @@

    undo

    diff --git a/docs/classes/roosterjs_editor_core.editorbase.html b/docs/classes/roosterjs_editor_core.editorbase.html index c33c495a506..4800a2415ae 100644 --- a/docs/classes/roosterjs_editor_core.editorbase.html +++ b/docs/classes/roosterjs_editor_core.editorbase.html @@ -200,7 +200,7 @@

    constructor

  • @@ -253,7 +253,7 @@

    addContentEditFeature

    @@ -285,7 +285,7 @@

    addDomEventHandler

    @@ -331,7 +331,7 @@

    addUndoSnapshot

    @@ -403,7 +403,7 @@

    collapseNodes

    @@ -452,7 +452,7 @@

    contains

    @@ -482,7 +482,7 @@

    deleteNode

    @@ -515,7 +515,7 @@

    deleteSelectedContent

    @@ -538,7 +538,7 @@

    dispose

    @@ -561,7 +561,7 @@

    ensureTypeInContainer

  • @@ -812,7 +812,7 @@

    getCustomData

    @@ -894,7 +894,7 @@

    getDarkColorHandler

    @@ -917,7 +917,7 @@

    getDefaultFormat

    @@ -941,7 +941,7 @@

    getDocument

    @@ -965,7 +965,7 @@

    getEditorDomAttribute

    @@ -997,7 +997,7 @@

    getElementAtCursor

    @@ -1047,7 +1047,7 @@

    getFocusedPosition

    @@ -1070,7 +1070,7 @@

    getPendableFormatState

    @@ -1103,7 +1103,7 @@

    getRelativeDistanceToEditor

    @@ -1146,7 +1146,7 @@

    getScrollContainer

    @@ -1169,7 +1169,7 @@

    getSelectedRegions

    @@ -1198,7 +1198,7 @@

    getSelectionPath

    @@ -1223,7 +1223,7 @@

    getSelectionRange

    @@ -1258,7 +1258,7 @@

    getSelectionRangeEx

    @@ -1283,7 +1283,7 @@

    getSelectionTraverser

    @@ -1313,7 +1313,7 @@

    getSizeTransformer

    @@ -1338,7 +1338,7 @@

    getStyleBasedFormatState

    @@ -1367,7 +1367,7 @@

    getTrustedHTMLHandler

    @@ -1393,7 +1393,7 @@

    getUndoState

    @@ -1416,7 +1416,7 @@

    getVisibleViewport

    @@ -1439,7 +1439,7 @@

    getZoomScale

    @@ -1465,7 +1465,7 @@

    hasFocus

    @@ -1489,7 +1489,7 @@

    insertContent

    @@ -1528,7 +1528,7 @@

    insertNode

    @@ -1571,7 +1571,7 @@

    isDarkMode

    @@ -1595,7 +1595,7 @@

    isDisposed

    @@ -1619,7 +1619,7 @@

    isEmpty

    @@ -1652,7 +1652,7 @@

    isFeatureEnabled

    @@ -1684,7 +1684,7 @@

    isInIME

    @@ -1708,7 +1708,7 @@

    isInShadowEdit

    @@ -1731,7 +1731,7 @@

    isPositionAtBeginning

    @@ -1765,7 +1765,7 @@

    paste

    @@ -1809,7 +1809,7 @@

    queryElements

    @@ -1863,7 +1863,7 @@

    redo

    @@ -1886,7 +1886,7 @@

    removeContentEditFeature

    @@ -1918,7 +1918,7 @@

    replaceNode

    @@ -1963,7 +1963,7 @@

    runAsync

    @@ -2026,7 +2026,7 @@

    select

    @@ -2065,7 +2065,7 @@

    setContent

    @@ -2103,7 +2103,7 @@

    setDarkModeState

    @@ -2135,7 +2135,7 @@

    setEditorDomAttribute

    @@ -2173,7 +2173,7 @@

    setZoomScale

    @@ -2207,7 +2207,7 @@

    startShadowEdit

    @@ -2235,7 +2235,7 @@

    stopShadowEdit

    @@ -2258,7 +2258,7 @@

    transformToDarkColor

    @@ -2290,7 +2290,7 @@

    triggerContentChangedEvent

    @@ -2328,7 +2328,7 @@

    triggerPluginEvent

    @@ -2381,7 +2381,7 @@

    undo

    diff --git a/docs/classes/roosterjs_editor_dom.contenttraverser.html b/docs/classes/roosterjs_editor_dom.contenttraverser.html index 842aa36b941..06128ac6961 100644 --- a/docs/classes/roosterjs_editor_dom.contenttraverser.html +++ b/docs/classes/roosterjs_editor_dom.contenttraverser.html @@ -129,7 +129,7 @@

    currentBlockElement

    @@ -152,7 +152,7 @@

    currentInlineElement

    @@ -178,7 +178,7 @@

    getNextBlockElement

    @@ -201,7 +201,7 @@

    getNextInlineElement

    @@ -224,7 +224,7 @@

    getPreviousBlockElement

    @@ -247,7 +247,7 @@

    getPreviousInlineElement

    @@ -269,7 +269,7 @@

    Static createBlockTrav
  • @@ -316,7 +316,7 @@

    Static createBodyTrave
  • @@ -359,7 +359,7 @@

    Static createSelection
  • diff --git a/docs/classes/roosterjs_editor_dom.htmlsanitizer.html b/docs/classes/roosterjs_editor_dom.htmlsanitizer.html index 783b0f6193b..a8d3ff9ae92 100644 --- a/docs/classes/roosterjs_editor_dom.htmlsanitizer.html +++ b/docs/classes/roosterjs_editor_dom.htmlsanitizer.html @@ -120,7 +120,7 @@

    constructor

  • @@ -154,7 +154,7 @@

    convertGlobalCssToInlineCss

  • @@ -185,7 +185,7 @@

    exec

  • @@ -234,7 +234,7 @@

    sanitize

  • @@ -272,7 +272,7 @@

    Static convertInlineCs
  • @@ -312,7 +312,7 @@

    Static sanitizeHtml

  • diff --git a/docs/classes/roosterjs_editor_dom.imageinlineelement.html b/docs/classes/roosterjs_editor_dom.imageinlineelement.html index 80d93581ea6..2b1b4d548d7 100644 --- a/docs/classes/roosterjs_editor_dom.imageinlineelement.html +++ b/docs/classes/roosterjs_editor_dom.imageinlineelement.html @@ -126,7 +126,7 @@

    constructor

    Parameters

    @@ -156,7 +156,7 @@

    applyStyle

    @@ -206,7 +206,7 @@

    contains

    @@ -235,7 +235,7 @@

    getContainerNode

    @@ -258,7 +258,7 @@

    getEndPosition

    @@ -281,7 +281,7 @@

    getParentBlock

    Returns BlockElement

    @@ -299,7 +299,7 @@

    getStartPosition

    @@ -322,7 +322,7 @@

    getTextContent

    @@ -345,7 +345,7 @@

    isAfter

    @@ -374,7 +374,7 @@

    isTextualInlineElement

    diff --git a/docs/classes/roosterjs_editor_dom.linkinlineelement.html b/docs/classes/roosterjs_editor_dom.linkinlineelement.html index 2e965604159..2006cf1d431 100644 --- a/docs/classes/roosterjs_editor_dom.linkinlineelement.html +++ b/docs/classes/roosterjs_editor_dom.linkinlineelement.html @@ -126,7 +126,7 @@

    constructor

    Parameters

    @@ -156,7 +156,7 @@

    applyStyle

    @@ -206,7 +206,7 @@

    contains

    @@ -235,7 +235,7 @@

    getContainerNode

    @@ -258,7 +258,7 @@

    getEndPosition

    @@ -281,7 +281,7 @@

    getParentBlock

    Returns BlockElement

    @@ -299,7 +299,7 @@

    getStartPosition

    @@ -322,7 +322,7 @@

    getTextContent

    @@ -345,7 +345,7 @@

    isAfter

    @@ -374,7 +374,7 @@

    isTextualInlineElement

    diff --git a/docs/classes/roosterjs_editor_dom.nodeinlineelement.html b/docs/classes/roosterjs_editor_dom.nodeinlineelement.html index 75bf62956d9..be1fc76f20a 100644 --- a/docs/classes/roosterjs_editor_dom.nodeinlineelement.html +++ b/docs/classes/roosterjs_editor_dom.nodeinlineelement.html @@ -137,7 +137,7 @@

    constructor

  • Parameters

    @@ -167,7 +167,7 @@

    applyStyle

    @@ -217,7 +217,7 @@

    contains

    @@ -246,7 +246,7 @@

    getContainerNode

    @@ -269,7 +269,7 @@

    getEndPosition

    @@ -292,7 +292,7 @@

    getParentBlock

    @@ -315,7 +315,7 @@

    getStartPosition

    @@ -338,7 +338,7 @@

    getTextContent

    @@ -361,7 +361,7 @@

    isAfter

    @@ -390,7 +390,7 @@

    isTextualInlineElement

    diff --git a/docs/classes/roosterjs_editor_dom.partialinlineelement.html b/docs/classes/roosterjs_editor_dom.partialinlineelement.html index 1bdba48b967..70a52c8cd3b 100644 --- a/docs/classes/roosterjs_editor_dom.partialinlineelement.html +++ b/docs/classes/roosterjs_editor_dom.partialinlineelement.html @@ -138,7 +138,7 @@

    constructor

  • Parameters

    @@ -170,7 +170,7 @@

    nextInlineElement

  • @@ -192,7 +192,7 @@

    previousInlineElement

  • @@ -342,7 +342,7 @@

    getEndPosition

    @@ -365,7 +365,7 @@

    getParentBlock

    @@ -388,7 +388,7 @@

    getStartPosition

    @@ -411,7 +411,7 @@

    getTextContent

    @@ -434,7 +434,7 @@

    isAfter

    @@ -463,7 +463,7 @@

    isTextualInlineElement

    diff --git a/docs/classes/roosterjs_editor_dom.position.html b/docs/classes/roosterjs_editor_dom.position.html index bec9de4b024..e4417c306ac 100644 --- a/docs/classes/roosterjs_editor_dom.position.html +++ b/docs/classes/roosterjs_editor_dom.position.html @@ -134,7 +134,7 @@

    constructor

  • @@ -157,7 +157,7 @@

    Returns
    @@ -193,7 +193,7 @@

    Returns
    @@ -230,7 +230,7 @@

    Readonly element

    @@ -241,7 +241,7 @@

    Readonly isAtEnd

    @@ -252,7 +252,7 @@

    Readonly node

    @@ -263,7 +263,7 @@

    Readonly offset

    @@ -281,7 +281,7 @@

    equalTo

    @@ -313,7 +313,7 @@

    isAfter

    @@ -342,7 +342,7 @@

    move

    @@ -374,7 +374,7 @@

    normalize

    @@ -397,7 +397,7 @@

    Static getEnd

  • @@ -428,7 +428,7 @@

    Static getStart

  • diff --git a/docs/classes/roosterjs_editor_dom.positioncontentsearcher.html b/docs/classes/roosterjs_editor_dom.positioncontentsearcher.html index 53a40f26a76..7176c32b6cb 100644 --- a/docs/classes/roosterjs_editor_dom.positioncontentsearcher.html +++ b/docs/classes/roosterjs_editor_dom.positioncontentsearcher.html @@ -124,7 +124,7 @@

    constructor

  • @@ -165,7 +165,7 @@

    forEachTextInlineElement

    @@ -216,7 +216,7 @@

    getInlineElementAfter

    @@ -240,7 +240,7 @@

    getInlineElementBefore

    @@ -264,7 +264,7 @@

    getNearestNonTextInlineElement

    @@ -288,7 +288,7 @@

    getRangeFromText

    @@ -327,7 +327,7 @@

    getSubStringBefore

    @@ -363,7 +363,7 @@

    getWordBefore

    diff --git a/docs/classes/roosterjs_editor_dom.vlist.html b/docs/classes/roosterjs_editor_dom.vlist.html index e5cb0a7dff5..41b937d5432 100644 --- a/docs/classes/roosterjs_editor_dom.vlist.html +++ b/docs/classes/roosterjs_editor_dom.vlist.html @@ -166,7 +166,7 @@

    constructor

  • @@ -196,7 +196,7 @@

    Readonly items

    items: VListItem[] = []
    @@ -220,7 +220,7 @@

    appendItem

  • @@ -257,7 +257,7 @@

    changeListType

  • @@ -302,7 +302,7 @@

    contains

  • @@ -333,7 +333,7 @@

    getLastItemNumber

  • @@ -356,7 +356,7 @@

    getListItemIndex

  • @@ -407,7 +407,7 @@

    getStart

  • @@ -430,7 +430,7 @@

    mergeVList

  • @@ -467,7 +467,7 @@

    setAlignment

  • @@ -511,7 +511,7 @@

    setIndentation

  • @@ -545,7 +545,7 @@

    Returns void
    @@ -602,7 +602,7 @@

    setListStyleType

  • @@ -640,7 +640,7 @@

    split

  • @@ -677,7 +677,7 @@

    writeBack

  • diff --git a/docs/classes/roosterjs_editor_dom.vlistchain.html b/docs/classes/roosterjs_editor_dom.vlistchain.html index 2da99f2d40a..ae7e1291904 100644 --- a/docs/classes/roosterjs_editor_dom.vlistchain.html +++ b/docs/classes/roosterjs_editor_dom.vlistchain.html @@ -111,7 +111,7 @@

    canAppendAtCursor

  • @@ -142,7 +142,7 @@

    commit

  • @@ -180,7 +180,7 @@

    createVListAtBlock

  • @@ -217,7 +217,7 @@

    Static createListChain
  • diff --git a/docs/classes/roosterjs_editor_dom.vlistitem.html b/docs/classes/roosterjs_editor_dom.vlistitem.html index ee757d43cc0..256319c9345 100644 --- a/docs/classes/roosterjs_editor_dom.vlistitem.html +++ b/docs/classes/roosterjs_editor_dom.vlistitem.html @@ -132,7 +132,7 @@

    constructor

  • @@ -173,7 +173,7 @@

    addNegativeMargins

  • @@ -195,7 +195,7 @@

    applyListStyle

  • @@ -232,7 +232,7 @@

    canMerge

  • @@ -261,7 +261,7 @@

    changeListType

  • @@ -292,7 +292,7 @@

    contains

  • @@ -323,7 +323,7 @@

    getLevel

  • @@ -345,7 +345,7 @@

    getListType

  • @@ -367,7 +367,7 @@

    getNewListStart

  • @@ -389,7 +389,7 @@

    getNode

  • @@ -411,7 +411,7 @@

    indent

  • @@ -434,7 +434,7 @@

    isDummy

  • @@ -458,7 +458,7 @@

    isOrphanItem

  • @@ -482,7 +482,7 @@

    mergeItems

  • @@ -511,7 +511,7 @@

    outdent

  • @@ -543,7 +543,7 @@

    setIsDummy

  • @@ -574,7 +574,7 @@

    setNewListStart

  • @@ -602,7 +602,7 @@

    writeBack

  • diff --git a/docs/classes/roosterjs_editor_dom.vtable.html b/docs/classes/roosterjs_editor_dom.vtable.html index 242264c5ecc..694d71c18d4 100644 --- a/docs/classes/roosterjs_editor_dom.vtable.html +++ b/docs/classes/roosterjs_editor_dom.vtable.html @@ -138,7 +138,7 @@

    constructor

  • @@ -180,7 +180,7 @@

    cells

    cells: VCell[][] = null
    @@ -195,7 +195,7 @@

    col

    col: number
    @@ -210,7 +210,7 @@

    formatInfo

    formatInfo: Required<TableFormat> = null
    @@ -225,7 +225,7 @@

    row

    row: number
    @@ -240,7 +240,7 @@

    table

    table: HTMLTableElement
    @@ -263,7 +263,7 @@

    selection

  • @@ -276,7 +276,7 @@

    Returns
    @@ -307,7 +307,7 @@

    applyFormat

  • @@ -338,7 +338,7 @@

    edit

  • @@ -369,7 +369,7 @@

    forEachCellOfCurrentColumn

  • @@ -424,7 +424,7 @@

    forEachCellOfCurrentRow

  • @@ -476,7 +476,7 @@

    getCell

  • @@ -514,7 +514,7 @@

    getCellsWithBorder

  • @@ -565,7 +565,7 @@

    getCurrentTd

  • @@ -587,7 +587,7 @@

    getTd

  • @@ -624,7 +624,7 @@

    normalizeTableCellSize

  • Parameters

    @@ -647,7 +647,7 @@

    setAlignmentToSelectedCells

  • Parameters

    @@ -685,7 +685,7 @@

    writeBack

  • diff --git a/docs/classes/roosterjs_editor_plugins.autoformat.html b/docs/classes/roosterjs_editor_plugins.autoformat.html index 76feee70f34..dea6a9024aa 100644 --- a/docs/classes/roosterjs_editor_plugins.autoformat.html +++ b/docs/classes/roosterjs_editor_plugins.autoformat.html @@ -139,7 +139,7 @@

    dispose

    @@ -162,7 +162,7 @@

    getName

    @@ -185,7 +185,7 @@

    initialize

    @@ -217,7 +217,7 @@

    onPluginEvent

    diff --git a/docs/classes/roosterjs_editor_plugins.contentedit.html b/docs/classes/roosterjs_editor_plugins.contentedit.html index f54abb4f683..dc6bce417c1 100644 --- a/docs/classes/roosterjs_editor_plugins.contentedit.html +++ b/docs/classes/roosterjs_editor_plugins.contentedit.html @@ -131,7 +131,7 @@

    constructor

  • @@ -172,7 +172,7 @@

    dispose

    @@ -195,7 +195,7 @@

    getName

    @@ -218,7 +218,7 @@

    initialize

    diff --git a/docs/classes/roosterjs_editor_plugins.contextmenu.html b/docs/classes/roosterjs_editor_plugins.contextmenu.html index 6a11eebefaf..b209caa80d4 100644 --- a/docs/classes/roosterjs_editor_plugins.contextmenu.html +++ b/docs/classes/roosterjs_editor_plugins.contextmenu.html @@ -129,7 +129,7 @@

    constructor

  • @@ -170,7 +170,7 @@

    dispose

    @@ -193,7 +193,7 @@

    getName

    @@ -216,7 +216,7 @@

    initialize

    @@ -248,7 +248,7 @@

    onPluginEvent

    diff --git a/docs/classes/roosterjs_editor_plugins.customreplace.html b/docs/classes/roosterjs_editor_plugins.customreplace.html index 6179bfebd83..c12fbe7168f 100644 --- a/docs/classes/roosterjs_editor_plugins.customreplace.html +++ b/docs/classes/roosterjs_editor_plugins.customreplace.html @@ -123,7 +123,7 @@

    constructor

  • @@ -158,7 +158,7 @@

    dispose

    @@ -181,7 +181,7 @@

    getName

    @@ -204,7 +204,7 @@

    initialize

    @@ -236,7 +236,7 @@

    onPluginEvent

    @@ -267,7 +267,7 @@

    updateReplacements

  • diff --git a/docs/classes/roosterjs_editor_plugins.cutpastelistchain.html b/docs/classes/roosterjs_editor_plugins.cutpastelistchain.html index 61964255953..41f87dd49ec 100644 --- a/docs/classes/roosterjs_editor_plugins.cutpastelistchain.html +++ b/docs/classes/roosterjs_editor_plugins.cutpastelistchain.html @@ -139,7 +139,7 @@

    dispose

    @@ -162,7 +162,7 @@

    getName

    @@ -185,7 +185,7 @@

    initialize

    @@ -217,7 +217,7 @@

    onPluginEvent

    diff --git a/docs/classes/roosterjs_editor_plugins.hyperlink.html b/docs/classes/roosterjs_editor_plugins.hyperlink.html index e0fd5c56e1d..d406714ec79 100644 --- a/docs/classes/roosterjs_editor_plugins.hyperlink.html +++ b/docs/classes/roosterjs_editor_plugins.hyperlink.html @@ -123,7 +123,7 @@

    constructor

  • @@ -213,7 +213,7 @@

    dispose

    @@ -236,7 +236,7 @@

    getName

    @@ -259,7 +259,7 @@

    initialize

    @@ -290,7 +290,7 @@

    Protected onBlur

  • Parameters

    @@ -313,7 +313,7 @@

    Protected onMouse

  • Parameters

    @@ -337,7 +337,7 @@

    onPluginEvent

    diff --git a/docs/classes/roosterjs_editor_plugins.imageedit.html b/docs/classes/roosterjs_editor_plugins.imageedit.html index 71113975a82..03d8ef2bd0c 100644 --- a/docs/classes/roosterjs_editor_plugins.imageedit.html +++ b/docs/classes/roosterjs_editor_plugins.imageedit.html @@ -137,7 +137,7 @@

    constructor

  • @@ -262,7 +262,7 @@

    getName

    @@ -285,7 +285,7 @@

    initialize

    @@ -316,7 +316,7 @@

    isOperationAllowed

  • @@ -349,7 +349,7 @@

    onPluginEvent

    @@ -380,7 +380,7 @@

    rotateImage

  • @@ -418,7 +418,7 @@

    setEditingImage

  • @@ -447,7 +447,7 @@

    Returns void
    diff --git a/docs/classes/roosterjs_editor_plugins.imageresize.html b/docs/classes/roosterjs_editor_plugins.imageresize.html index 0fc0d8da43e..62230e345c0 100644 --- a/docs/classes/roosterjs_editor_plugins.imageresize.html +++ b/docs/classes/roosterjs_editor_plugins.imageresize.html @@ -136,7 +136,7 @@

    constructor

    @@ -192,7 +192,7 @@

    Protected editor

    @@ -203,7 +203,7 @@

    Protected options

    @@ -221,7 +221,7 @@

    dispose

    @@ -244,7 +244,7 @@

    flipImage

    @@ -281,7 +281,7 @@

    getName

    @@ -303,7 +303,7 @@

    hideResizeHandle

  • @@ -333,7 +333,7 @@

    initialize

    @@ -365,7 +365,7 @@

    isOperationAllowed

    @@ -398,7 +398,7 @@

    onPluginEvent

    @@ -430,7 +430,7 @@

    rotateImage

    @@ -469,7 +469,7 @@

    setEditingImage

    @@ -499,7 +499,7 @@

    Returns void

    Inherited from ImageEdit.setEditingImage

    @@ -537,7 +537,7 @@

    showResizeHandle

  • diff --git a/docs/classes/roosterjs_editor_plugins.paste.html b/docs/classes/roosterjs_editor_plugins.paste.html index e4b2eb703fe..a805368a31b 100644 --- a/docs/classes/roosterjs_editor_plugins.paste.html +++ b/docs/classes/roosterjs_editor_plugins.paste.html @@ -126,7 +126,7 @@

    constructor

  • @@ -168,7 +168,7 @@

    dispose

    @@ -191,7 +191,7 @@

    getName

    @@ -214,7 +214,7 @@

    initialize

    @@ -246,7 +246,7 @@

    onPluginEvent

    diff --git a/docs/classes/roosterjs_editor_plugins.pickerplugin.html b/docs/classes/roosterjs_editor_plugins.pickerplugin.html index fe0d12491aa..fdc39279669 100644 --- a/docs/classes/roosterjs_editor_plugins.pickerplugin.html +++ b/docs/classes/roosterjs_editor_plugins.pickerplugin.html @@ -143,7 +143,7 @@

    constructor

  • Type parameters

    @@ -189,7 +189,7 @@

    dispose

    @@ -212,7 +212,7 @@

    getName

    @@ -235,7 +235,7 @@

    initialize

    @@ -267,7 +267,7 @@

    onPluginEvent

    @@ -299,7 +299,7 @@

    willHandleEventExclusively

    diff --git a/docs/classes/roosterjs_editor_plugins.tablecellselection.html b/docs/classes/roosterjs_editor_plugins.tablecellselection.html index 7f45627af24..eebf04645ac 100644 --- a/docs/classes/roosterjs_editor_plugins.tablecellselection.html +++ b/docs/classes/roosterjs_editor_plugins.tablecellselection.html @@ -121,7 +121,7 @@

    constructor

  • Returns TableCellSelection

    @@ -142,7 +142,7 @@

    dispose

    @@ -165,7 +165,7 @@

    getName

    @@ -188,7 +188,7 @@

    initialize

    @@ -220,7 +220,7 @@

    onPluginEvent

    diff --git a/docs/classes/roosterjs_editor_plugins.tableresize.html b/docs/classes/roosterjs_editor_plugins.tableresize.html index 895094a5eb8..f59d33f2fa9 100644 --- a/docs/classes/roosterjs_editor_plugins.tableresize.html +++ b/docs/classes/roosterjs_editor_plugins.tableresize.html @@ -121,7 +121,7 @@

    constructor

  • @@ -179,7 +179,7 @@

    dispose

    @@ -202,7 +202,7 @@

    getName

    @@ -225,7 +225,7 @@

    initialize

    @@ -257,7 +257,7 @@

    onPluginEvent

    diff --git a/docs/classes/roosterjs_editor_plugins.watermark.html b/docs/classes/roosterjs_editor_plugins.watermark.html index c6f4e40a601..206b427af0d 100644 --- a/docs/classes/roosterjs_editor_plugins.watermark.html +++ b/docs/classes/roosterjs_editor_plugins.watermark.html @@ -121,7 +121,7 @@

    constructor

  • @@ -162,7 +162,7 @@

    dispose

    @@ -185,7 +185,7 @@

    getName

    @@ -208,7 +208,7 @@

    initialize

    @@ -240,7 +240,7 @@

    onPluginEvent

    diff --git a/docs/enums/roosterjs_editor_types.alignment.html b/docs/enums/roosterjs_editor_types.alignment.html index 16c58772e61..9e311dd39f8 100644 --- a/docs/enums/roosterjs_editor_types.alignment.html +++ b/docs/enums/roosterjs_editor_types.alignment.html @@ -96,7 +96,7 @@

    Center

    Center: = 1
    @@ -111,7 +111,7 @@

    Left

    Left: = 0
    @@ -126,7 +126,7 @@

    Right

    Right: = 2
    diff --git a/docs/enums/roosterjs_editor_types.bulletlisttype.html b/docs/enums/roosterjs_editor_types.bulletlisttype.html index 9c67a88dbd2..19fa734bfbb 100644 --- a/docs/enums/roosterjs_editor_types.bulletlisttype.html +++ b/docs/enums/roosterjs_editor_types.bulletlisttype.html @@ -104,7 +104,7 @@

    Circle

    Circle: = 9
    @@ -119,7 +119,7 @@

    Dash

    Dash: = 2
    @@ -134,7 +134,7 @@

    Disc

    Disc: = 1
    @@ -149,7 +149,7 @@

    DoubleLongArrow

    DoubleLongArrow: = 8
    @@ -164,7 +164,7 @@

    Hyphen

    Hyphen: = 7
    @@ -179,7 +179,7 @@

    LongArrow

    LongArrow: = 5
    @@ -194,7 +194,7 @@

    Max

    Max: = 9
    @@ -209,7 +209,7 @@

    Min

    Min: = 1
    @@ -224,7 +224,7 @@

    ShortArrow

    ShortArrow: = 4
    @@ -239,7 +239,7 @@

    Square

    Square: = 3
    @@ -254,7 +254,7 @@

    UnfilledArrow

    UnfilledArrow: = 6
    diff --git a/docs/enums/roosterjs_editor_types.capitalization.html b/docs/enums/roosterjs_editor_types.capitalization.html index a5ff9e4fe0e..1b74dedefed 100644 --- a/docs/enums/roosterjs_editor_types.capitalization.html +++ b/docs/enums/roosterjs_editor_types.capitalization.html @@ -98,7 +98,7 @@

    CapitalizeEachWord

    CapitalizeEachWord: = "capitalize"
    @@ -113,7 +113,7 @@

    Lowercase

    Lowercase: = "lowercase"
    @@ -128,7 +128,7 @@

    Sentence

    Sentence: = "sentence"
    @@ -144,7 +144,7 @@

    Uppercase

    Uppercase: = "uppercase"
    diff --git a/docs/enums/roosterjs_editor_types.changesource.html b/docs/enums/roosterjs_editor_types.changesource.html index fc5b5519f37..a19a7fb0575 100644 --- a/docs/enums/roosterjs_editor_types.changesource.html +++ b/docs/enums/roosterjs_editor_types.changesource.html @@ -107,7 +107,7 @@

    AutoLink

    AutoLink: = "AutoLink"
    @@ -122,7 +122,7 @@

    CreateLink

    CreateLink: = "CreateLink"
    @@ -137,7 +137,7 @@

    Cut

    Cut: = "Cut"
    @@ -152,7 +152,7 @@

    Drop

    Drop: = "Drop"
    @@ -167,7 +167,7 @@

    Format

    Format: = "Format"
    @@ -182,7 +182,7 @@

    ImageResize

    ImageResize: = "ImageResize"
    @@ -197,7 +197,7 @@

    InsertEntity

    InsertEntity: = "InsertEntity"
    @@ -212,7 +212,7 @@

    Keyboard

    Keyboard: = "Keyboard"
    @@ -228,7 +228,7 @@

    ListChain

    ListChain: = "ListChain"
    @@ -243,7 +243,7 @@

    Paste

    Paste: = "Paste"
    @@ -258,7 +258,7 @@

    SetContent

    SetContent: = "SetContent"
    @@ -273,7 +273,7 @@

    SwitchToDarkMode

    SwitchToDarkMode: = "SwitchToDarkMode"
    @@ -288,7 +288,7 @@

    SwitchToLightMode

    SwitchToLightMode: = "SwitchToLightMode"
    diff --git a/docs/enums/roosterjs_editor_types.clearformatmode.html b/docs/enums/roosterjs_editor_types.clearformatmode.html index 297a334f63a..583203a0a49 100644 --- a/docs/enums/roosterjs_editor_types.clearformatmode.html +++ b/docs/enums/roosterjs_editor_types.clearformatmode.html @@ -96,7 +96,7 @@

    AutoDetect

    AutoDetect: = 2
    @@ -111,7 +111,7 @@

    Block

    Block: = 1
    @@ -126,7 +126,7 @@

    Inline

    Inline: = 0
    diff --git a/docs/enums/roosterjs_editor_types.colortransformdirection.html b/docs/enums/roosterjs_editor_types.colortransformdirection.html index 3729bbb2c84..ccf0c520085 100644 --- a/docs/enums/roosterjs_editor_types.colortransformdirection.html +++ b/docs/enums/roosterjs_editor_types.colortransformdirection.html @@ -95,7 +95,7 @@

    DarkToLight

    DarkToLight: = 1
    @@ -110,7 +110,7 @@

    LightToDark

    LightToDark: = 0
    diff --git a/docs/enums/roosterjs_editor_types.contentposition.html b/docs/enums/roosterjs_editor_types.contentposition.html index da68e6f4ed8..daeecde8d39 100644 --- a/docs/enums/roosterjs_editor_types.contentposition.html +++ b/docs/enums/roosterjs_editor_types.contentposition.html @@ -101,7 +101,7 @@

    Begin

    Begin: = 0
    @@ -116,7 +116,7 @@

    DomEnd

    DomEnd: = 2
    @@ -131,7 +131,7 @@

    End

    End: = 1
    @@ -146,7 +146,7 @@

    Outside

    Outside: = 4
    @@ -161,7 +161,7 @@

    Range

    Range: = 5
    @@ -176,7 +176,7 @@

    SelectionStart

    SelectionStart: = 3
    diff --git a/docs/enums/roosterjs_editor_types.contenttype.html b/docs/enums/roosterjs_editor_types.contenttype.html index faa7e3a0900..0a9b3e97b80 100644 --- a/docs/enums/roosterjs_editor_types.contenttype.html +++ b/docs/enums/roosterjs_editor_types.contenttype.html @@ -95,7 +95,7 @@

    HTML

    HTML: = "text/html"
    @@ -110,7 +110,7 @@

    PlainText

    PlainText: = "text/plain"
    diff --git a/docs/enums/roosterjs_editor_types.contenttypeprefix.html b/docs/enums/roosterjs_editor_types.contenttypeprefix.html index a695c0bff7d..f206960b068 100644 --- a/docs/enums/roosterjs_editor_types.contenttypeprefix.html +++ b/docs/enums/roosterjs_editor_types.contenttypeprefix.html @@ -95,7 +95,7 @@

    Image

    Image: = "image/"
    @@ -110,7 +110,7 @@

    Text

    Text: = "text/"
    diff --git a/docs/enums/roosterjs_editor_types.darkmodedatasetnames.html b/docs/enums/roosterjs_editor_types.darkmodedatasetnames.html index d7f94da7659..320f166d264 100644 --- a/docs/enums/roosterjs_editor_types.darkmodedatasetnames.html +++ b/docs/enums/roosterjs_editor_types.darkmodedatasetnames.html @@ -99,7 +99,7 @@

    OriginalAttributeBackgroundColor

    OriginalAttributeBackgroundColor: = "ogab"
    @@ -114,7 +114,7 @@

    OriginalAttributeColor

    OriginalAttributeColor: = "ogac"
    @@ -129,7 +129,7 @@

    OriginalStyleBackgroundColor

    OriginalStyleBackgroundColor: = "ogsb"
    @@ -144,7 +144,7 @@

    OriginalStyleColor

    OriginalStyleColor: = "ogsc"
    diff --git a/docs/enums/roosterjs_editor_types.definitiontype.html b/docs/enums/roosterjs_editor_types.definitiontype.html index 04bc441156f..53131e11dd2 100644 --- a/docs/enums/roosterjs_editor_types.definitiontype.html +++ b/docs/enums/roosterjs_editor_types.definitiontype.html @@ -99,7 +99,7 @@

    Array

    Array: = 3
    @@ -114,7 +114,7 @@

    Boolean

    Boolean: = 0
    @@ -129,7 +129,7 @@

    Customize

    Customize: = 5
    @@ -144,7 +144,7 @@

    Number

    Number: = 1
    @@ -159,7 +159,7 @@

    Object

    Object: = 4
    @@ -174,7 +174,7 @@

    String

    String: = 2
    diff --git a/docs/enums/roosterjs_editor_types.delimiterclasses.html b/docs/enums/roosterjs_editor_types.delimiterclasses.html index ad86e718c9e..d2735d33679 100644 --- a/docs/enums/roosterjs_editor_types.delimiterclasses.html +++ b/docs/enums/roosterjs_editor_types.delimiterclasses.html @@ -95,7 +95,7 @@

    DELIMITER_AFTER

    DELIMITER_AFTER: = "entityDelimiterAfter"
    @@ -110,7 +110,7 @@

    DELIMITER_BEFORE

    DELIMITER_BEFORE: = "entityDelimiterBefore"
    diff --git a/docs/enums/roosterjs_editor_types.direction.html b/docs/enums/roosterjs_editor_types.direction.html index d8b6ffa2a09..83e9b408561 100644 --- a/docs/enums/roosterjs_editor_types.direction.html +++ b/docs/enums/roosterjs_editor_types.direction.html @@ -95,7 +95,7 @@

    LeftToRight

    LeftToRight: = 0
    @@ -110,7 +110,7 @@

    RightToLeft

    RightToLeft: = 1
    diff --git a/docs/enums/roosterjs_editor_types.documentcommand.html b/docs/enums/roosterjs_editor_types.documentcommand.html index 10181f6a7ff..18cfabea7ce 100644 --- a/docs/enums/roosterjs_editor_types.documentcommand.html +++ b/docs/enums/roosterjs_editor_types.documentcommand.html @@ -141,7 +141,7 @@

    AutoUrlDetect

    AutoUrlDetect: = "AutoUrlDetect"
    @@ -156,7 +156,7 @@

    BackColor

    BackColor: = "backColor"
    @@ -173,7 +173,7 @@

    Bold

    Bold: = "bold"
    @@ -188,7 +188,7 @@

    ClearAuthenticationCache

    ClearAuthenticationCache: = "ClearAuthenticationCache"
    @@ -203,7 +203,7 @@

    ContentReadOnly

    ContentReadOnly: = "contentReadOnly"
    @@ -219,7 +219,7 @@

    Copy

    Copy: = "copy"
    @@ -235,7 +235,7 @@

    CreateLink

    CreateLink: = "createLink"
    @@ -252,7 +252,7 @@

    Cut

    Cut: = "cut"
    @@ -268,7 +268,7 @@

    DecreaseFontSize

    DecreaseFontSize: = "decreaseFontSize"
    @@ -283,7 +283,7 @@

    DefaultParagraphSeparator

    DefaultParagraphSeparator: = "defaultParagraphSeparator"
    @@ -299,7 +299,7 @@

    Delete

    Delete: = "delete"
    @@ -314,7 +314,7 @@

    EnableInlineTableEditing

    EnableInlineTableEditing: = "enableInlineTableEditing"
    @@ -329,7 +329,7 @@

    EnableObjectResizing

    EnableObjectResizing: = "enableObjectResizing"
    @@ -344,7 +344,7 @@

    FontName

    FontName: = "fontName"
    @@ -360,7 +360,7 @@

    FontSize

    FontSize: = "fontSize"
    @@ -375,7 +375,7 @@

    ForeColor

    ForeColor: = "foreColor"
    @@ -391,7 +391,7 @@

    FormatBlock

    FormatBlock: = "formatBlock"
    @@ -409,7 +409,7 @@

    ForwardDelete

    ForwardDelete: = "forwardDelete"
    @@ -424,7 +424,7 @@

    Heading

    Heading: = "heading"
    @@ -440,7 +440,7 @@

    HiliteColor

    HiliteColor: = "hiliteColor"
    @@ -456,7 +456,7 @@

    IncreaseFontSize

    IncreaseFontSize: = "increaseFontSize"
    @@ -471,7 +471,7 @@

    Indent

    Indent: = "indent"
    @@ -487,7 +487,7 @@

    InsertBrOnReturn

    InsertBrOnReturn: = "insertBrOnReturn"
    @@ -503,7 +503,7 @@

    InsertHTML

    InsertHTML: = "insertHTML"
    @@ -519,7 +519,7 @@

    InsertHorizontalRule

    InsertHorizontalRule: = "insertHorizontalRule"
    @@ -534,7 +534,7 @@

    InsertImage

    InsertImage: = "insertImage"
    @@ -550,7 +550,7 @@

    InsertOrderedList

    InsertOrderedList: = "insertOrderedList"
    @@ -565,7 +565,7 @@

    InsertParagraph

    InsertParagraph: = "insertParagraph"
    @@ -581,7 +581,7 @@

    InsertText

    InsertText: = "insertText"
    @@ -596,7 +596,7 @@

    InsertUnorderedList

    InsertUnorderedList: = "insertUnorderedList"
    @@ -611,7 +611,7 @@

    Italic

    Italic: = "italic"
    @@ -627,7 +627,7 @@

    JustifyCenter

    JustifyCenter: = "justifyCenter"
    @@ -642,7 +642,7 @@

    JustifyFull

    JustifyFull: = "justifyFull"
    @@ -657,7 +657,7 @@

    JustifyLeft

    JustifyLeft: = "justifyLeft"
    @@ -672,7 +672,7 @@

    JustifyRight

    JustifyRight: = "justifyRight"
    @@ -687,7 +687,7 @@

    Outdent

    Outdent: = "outdent"
    @@ -702,7 +702,7 @@

    Paste

    Paste: = "paste"
    @@ -717,7 +717,7 @@

    Redo

    Redo: = "redo"
    @@ -732,7 +732,7 @@

    RemoveFormat

    RemoveFormat: = "removeFormat"
    @@ -747,7 +747,7 @@

    SelectAll

    SelectAll: = "selectAll"
    @@ -762,7 +762,7 @@

    StrikeThrough

    StrikeThrough: = "strikeThrough"
    @@ -777,7 +777,7 @@

    StyleWithCSS

    StyleWithCSS: = "styleWithCSS"
    @@ -792,7 +792,7 @@

    Subscript

    Subscript: = "subscript"
    @@ -807,7 +807,7 @@

    Superscript

    Superscript: = "superscript"
    @@ -822,7 +822,7 @@

    Underline

    Underline: = "underline"
    @@ -837,7 +837,7 @@

    Undo

    Undo: = "undo"
    @@ -852,7 +852,7 @@

    Unlink

    Unlink: = "unlink"
    diff --git a/docs/enums/roosterjs_editor_types.documentposition.html b/docs/enums/roosterjs_editor_types.documentposition.html index 5289a173083..e97c61fd72d 100644 --- a/docs/enums/roosterjs_editor_types.documentposition.html +++ b/docs/enums/roosterjs_editor_types.documentposition.html @@ -100,7 +100,7 @@

    ContainedBy

    ContainedBy: = 16
    @@ -115,7 +115,7 @@

    Contains

    Contains: = 8
    @@ -130,7 +130,7 @@

    Disconnected

    Disconnected: = 1
    @@ -145,7 +145,7 @@

    Following

    Following: = 4
    @@ -160,7 +160,7 @@

    Preceding

    Preceding: = 2
    @@ -175,7 +175,7 @@

    Same

    Same: = 0
    diff --git a/docs/enums/roosterjs_editor_types.entityclasses.html b/docs/enums/roosterjs_editor_types.entityclasses.html index c5249635ec1..c658dc0aa2b 100644 --- a/docs/enums/roosterjs_editor_types.entityclasses.html +++ b/docs/enums/roosterjs_editor_types.entityclasses.html @@ -97,7 +97,7 @@

    ENTITY_ID_PREFIX

    ENTITY_ID_PREFIX: = "_EId_"
    @@ -112,7 +112,7 @@

    ENTITY_INFO_NAME

    ENTITY_INFO_NAME: = "_Entity"
    @@ -127,7 +127,7 @@

    ENTITY_READONLY_PREFIX

    ENTITY_READONLY_PREFIX: = "_EReadonly_"
    @@ -142,7 +142,7 @@

    ENTITY_TYPE_PREFIX

    ENTITY_TYPE_PREFIX: = "_EType_"
    diff --git a/docs/enums/roosterjs_editor_types.entityoperation.html b/docs/enums/roosterjs_editor_types.entityoperation.html index 12717c55406..9b0b4313a8f 100644 --- a/docs/enums/roosterjs_editor_types.entityoperation.html +++ b/docs/enums/roosterjs_editor_types.entityoperation.html @@ -105,7 +105,7 @@

    AddShadowRoot

    AddShadowRoot: = 9
    @@ -121,7 +121,7 @@

    Click

    Click: = 1
    @@ -136,7 +136,7 @@

    ContextMenu

    ContextMenu: = 2
    @@ -151,7 +151,7 @@

    Escape

    Escape: = 3
    @@ -166,7 +166,7 @@

    NewEntity

    NewEntity: = 0
    @@ -185,7 +185,7 @@

    Overwrite

    Overwrite: = 6
    @@ -202,7 +202,7 @@

    PartialOverwrite

    PartialOverwrite: = 7
    @@ -218,7 +218,7 @@

    RemoveFromEnd

    RemoveFromEnd: = 5
    @@ -233,7 +233,7 @@

    RemoveFromStart

    RemoveFromStart: = 4
    @@ -248,7 +248,7 @@

    RemoveShadowRoot

    RemoveShadowRoot: = 10
    @@ -264,7 +264,7 @@

    ReplaceTemporaryContent

    ReplaceTemporaryContent: = 8
    @@ -283,7 +283,7 @@

    UpdateEntityState

    UpdateEntityState: = 11
    diff --git a/docs/enums/roosterjs_editor_types.experimentalfeatures.html b/docs/enums/roosterjs_editor_types.experimentalfeatures.html index bb32d68bde9..0253eb79347 100644 --- a/docs/enums/roosterjs_editor_types.experimentalfeatures.html +++ b/docs/enums/roosterjs_editor_types.experimentalfeatures.html @@ -123,7 +123,7 @@

    AdaptiveHandlesResizer

    AdaptiveHandlesResizer: = "AdaptiveHandlesResizer"
    @@ -141,7 +141,7 @@

    AlwaysApplyDefaultFormat

    AlwaysApplyDefaultFormat: = "AlwaysApplyDefaultFormat"
    @@ -159,7 +159,7 @@

    AutoFormatList

    AutoFormatList: = "AutoFormatList"
    @@ -174,7 +174,7 @@

    AutoHyphen

    AutoHyphen: = "AutoHyphen"
    @@ -192,7 +192,7 @@

    ContentModelPaste

    ContentModelPaste: = "ContentModelPaste"
    @@ -207,7 +207,7 @@

    ConvertSingleImageBody

    ConvertSingleImageBody: = "ConvertSingleImageBody"
    @@ -225,7 +225,7 @@

    DefaultFormatInSpan

    DefaultFormatInSpan: = "DefaultFormatInSpan"
    @@ -241,7 +241,7 @@

    DefaultFormatOnContainer

    DefaultFormatOnContainer: = "DefaultFormatOnContainer"
    @@ -257,7 +257,7 @@

    DeleteTableWithBackspace

    DeleteTableWithBackspace: = "DeleteTableWithBackspace"
    @@ -272,7 +272,7 @@

    DisableListChain

    DisableListChain: = "DisableListChain"
    @@ -287,7 +287,7 @@

    EditWithContentModel

    EditWithContentModel: = "EditWithContentModel"
    @@ -302,7 +302,7 @@

    ImageCrop

    ImageCrop: = "ImageCrop"
    @@ -319,7 +319,7 @@

    ImageRotate

    ImageRotate: = "ImageRotate"
    @@ -336,7 +336,7 @@

    ImageSelection

    ImageSelection: = "ImageSelection"
    @@ -354,7 +354,7 @@

    InlineEntityReadOnlyDelimiters

    InlineEntityReadOnlyDelimiters: = "InlineEntityReadOnlyDelimiters"
    @@ -369,7 +369,7 @@

    ListChain

    ListChain: = "ListChain"
    @@ -386,7 +386,7 @@

    ListItemAlignment

    ListItemAlignment: = "ListItemAlignment"
    @@ -404,7 +404,7 @@

    MergePastedLine

    MergePastedLine: = "MergePastedLine"
    @@ -421,7 +421,7 @@

    NewBullet

    NewBullet: = "NewBullet"
    @@ -438,7 +438,7 @@

    NewIndentation

    NewIndentation: = "NewIndentation"
    @@ -455,7 +455,7 @@

    NewNumbering

    NewNumbering: = "NewNumbering"
    @@ -472,7 +472,7 @@

    NormalizeList

    NormalizeList: = "NormalizeList"
    @@ -491,7 +491,7 @@

    PasteWithLinkPreview

    PasteWithLinkPreview: = "PasteWithLinkPreview"
    @@ -508,7 +508,7 @@

    PendingStyleBasedFormat

    PendingStyleBasedFormat: = "PendingStyleBasedFormat"
    @@ -528,7 +528,7 @@

    ReusableContentModel

    ReusableContentModel: = "ReusableContentModel"
    @@ -543,7 +543,7 @@

    ReuseAllAncestorListElements

    ReuseAllAncestorListElements: = "ReuseAllAncestorListElements"
    @@ -561,7 +561,7 @@

    SingleDirectionResize

    SingleDirectionResize: = "SingleDirectionResize"
    @@ -578,7 +578,7 @@

    TabKeyTextFeatures

    TabKeyTextFeatures: = "TabKeyTextFeatures"
    @@ -593,7 +593,7 @@

    TableAlignment

    TableAlignment: = "TableAlignment"
    @@ -611,7 +611,7 @@

    VariableBasedDarkColor

    VariableBasedDarkColor: = "VariableBasedDarkColor"
    diff --git a/docs/enums/roosterjs_editor_types.fontsizechange.html b/docs/enums/roosterjs_editor_types.fontsizechange.html index ed0e04b522b..ff37ff9fc01 100644 --- a/docs/enums/roosterjs_editor_types.fontsizechange.html +++ b/docs/enums/roosterjs_editor_types.fontsizechange.html @@ -96,7 +96,7 @@

    Decrease

    Decrease: = 1
    @@ -111,7 +111,7 @@

    Increase

    Increase: = 0
    diff --git a/docs/enums/roosterjs_editor_types.getcontentmode.html b/docs/enums/roosterjs_editor_types.getcontentmode.html index f87b0b799d8..a8b5172eb86 100644 --- a/docs/enums/roosterjs_editor_types.getcontentmode.html +++ b/docs/enums/roosterjs_editor_types.getcontentmode.html @@ -98,7 +98,7 @@

    CleanHTML

    CleanHTML: = 0
    @@ -116,7 +116,7 @@

    PlainText

    PlainText: = 3
    @@ -131,7 +131,7 @@

    PlainTextFast

    PlainTextFast: = 4
    @@ -148,7 +148,7 @@

    RawHTMLOnly

    RawHTMLOnly: = 1
    @@ -163,7 +163,7 @@

    RawHTMLWithSelection

    RawHTMLWithSelection: = 2
    diff --git a/docs/enums/roosterjs_editor_types.imageeditoperation.html b/docs/enums/roosterjs_editor_types.imageeditoperation.html index 62ad420cca4..2e0814e2545 100644 --- a/docs/enums/roosterjs_editor_types.imageeditoperation.html +++ b/docs/enums/roosterjs_editor_types.imageeditoperation.html @@ -101,7 +101,7 @@

    All

    All: = 15
    @@ -116,7 +116,7 @@

    CornerResize

    CornerResize: = 1
    @@ -131,7 +131,7 @@

    Crop

    Crop: = 8
    @@ -146,7 +146,7 @@

    None

    None: = 0
    @@ -161,7 +161,7 @@

    Resize

    Resize: = 3
    @@ -176,7 +176,7 @@

    ResizeAndRotate

    ResizeAndRotate: = 7
    @@ -191,7 +191,7 @@

    Rotate

    Rotate: = 4
    @@ -206,7 +206,7 @@

    SideResize

    SideResize: = 2
    diff --git a/docs/enums/roosterjs_editor_types.indentation.html b/docs/enums/roosterjs_editor_types.indentation.html index a712d513305..924c69a09cd 100644 --- a/docs/enums/roosterjs_editor_types.indentation.html +++ b/docs/enums/roosterjs_editor_types.indentation.html @@ -96,7 +96,7 @@

    Decrease

    Decrease: = 1
    @@ -111,7 +111,7 @@

    Increase

    Increase: = 0
    diff --git a/docs/enums/roosterjs_editor_types.keys.html b/docs/enums/roosterjs_editor_types.keys.html index f21efc70c0d..f454db344ca 100644 --- a/docs/enums/roosterjs_editor_types.keys.html +++ b/docs/enums/roosterjs_editor_types.keys.html @@ -130,7 +130,7 @@

    ALT

    ALT: = 18
    @@ -140,7 +140,7 @@

    B

    B: = 66
    @@ -150,7 +150,7 @@

    BACKSPACE

    BACKSPACE: = 8
    @@ -160,7 +160,7 @@

    COMMA

    COMMA: = 188
    @@ -170,7 +170,7 @@

    CONTENTCHANGED

    CONTENTCHANGED: = 257
    @@ -185,7 +185,7 @@

    CTRL_LEFT

    CTRL_LEFT: = 17
    @@ -195,7 +195,7 @@

    Ctrl

    Ctrl: = 4096
    @@ -205,7 +205,7 @@

    DASH_UNDERSCORE

    DASH_UNDERSCORE: = 189
    @@ -215,7 +215,7 @@

    DELETE

    DELETE: = 46
    @@ -225,7 +225,7 @@

    DOWN

    DOWN: = 40
    @@ -235,7 +235,7 @@

    EIGHT_ASTERISK

    EIGHT_ASTERISK: = 56
    @@ -245,7 +245,7 @@

    EIGHT_ASTIRISK

    EIGHT_ASTIRISK: = 56
    @@ -262,7 +262,7 @@

    END

    END: = 35
    @@ -272,7 +272,7 @@

    ENTER

    ENTER: = 13
    @@ -282,7 +282,7 @@

    ESCAPE

    ESCAPE: = 27
    @@ -292,7 +292,7 @@

    FORWARDSLASH

    FORWARDSLASH: = 191
    @@ -309,7 +309,7 @@

    FORWARD_SLASH

    FORWARD_SLASH: = 191
    @@ -319,7 +319,7 @@

    GRAVE_TILDE

    GRAVE_TILDE: = 192
    @@ -329,7 +329,7 @@

    HOME

    HOME: = 36
    @@ -339,7 +339,7 @@

    I

    I: = 73
    @@ -349,7 +349,7 @@

    LEFT

    LEFT: = 37
    @@ -359,7 +359,7 @@

    META_LEFT

    META_LEFT: = 91
    @@ -369,7 +369,7 @@

    Meta

    Meta: = 8192
    @@ -379,7 +379,7 @@

    NULL

    NULL: = 0
    @@ -389,7 +389,7 @@

    PAGEUP

    PAGEUP: = 33
    @@ -399,7 +399,7 @@

    PERIOD

    PERIOD: = 190
    @@ -409,7 +409,7 @@

    PRINT_SCREEN

    PRINT_SCREEN: = 44
    @@ -419,7 +419,7 @@

    RANGE

    RANGE: = 258
    @@ -429,7 +429,7 @@

    RIGHT

    RIGHT: = 39
    @@ -439,7 +439,7 @@

    SHIFT

    SHIFT: = 16
    @@ -449,7 +449,7 @@

    SPACE

    SPACE: = 32
    @@ -459,7 +459,7 @@

    Shift

    Shift: = 16384
    @@ -469,7 +469,7 @@

    TAB

    TAB: = 9
    @@ -479,7 +479,7 @@

    U

    U: = 85
    @@ -489,7 +489,7 @@

    UP

    UP: = 38
    @@ -499,7 +499,7 @@

    Y

    Y: = 89
    @@ -509,7 +509,7 @@

    Z

    Z: = 90
    diff --git a/docs/enums/roosterjs_editor_types.knowncreateelementdataindex.html b/docs/enums/roosterjs_editor_types.knowncreateelementdataindex.html index 619e9ae4d59..a0d654a6e14 100644 --- a/docs/enums/roosterjs_editor_types.knowncreateelementdataindex.html +++ b/docs/enums/roosterjs_editor_types.knowncreateelementdataindex.html @@ -106,7 +106,7 @@

    BlockListItem

    BlockListItem: = 4
    @@ -121,7 +121,7 @@

    BlockquoteWrapper

    BlockquoteWrapper: = 2
    @@ -136,7 +136,7 @@

    ContextMenuWrapper

    ContextMenuWrapper: = 5
    @@ -151,7 +151,7 @@

    CopyPasteTempDiv

    CopyPasteTempDiv: = 3
    @@ -166,7 +166,7 @@

    EmptyLine

    EmptyLine: = 1
    @@ -181,7 +181,7 @@

    EmptyLineFormatInSpan

    EmptyLineFormatInSpan: = 12
    @@ -197,7 +197,7 @@

    ImageEditWrapper

    ImageEditWrapper: = 6
    @@ -212,7 +212,7 @@

    None

    None: = 0
    @@ -227,7 +227,7 @@

    TableHorizontalResizer

    TableHorizontalResizer: = 7
    @@ -243,7 +243,7 @@

    TableResizerLTR

    TableResizerLTR: = 9
    @@ -259,7 +259,7 @@

    TableResizerRTL

    TableResizerRTL: = 10
    @@ -275,7 +275,7 @@

    TableSelector

    TableSelector: = 11
    @@ -291,7 +291,7 @@

    TableVerticalResizer

    TableVerticalResizer: = 8
    diff --git a/docs/enums/roosterjs_editor_types.knownpastesourcetype.html b/docs/enums/roosterjs_editor_types.knownpastesourcetype.html index 8a9a90ced70..f253c5b9408 100644 --- a/docs/enums/roosterjs_editor_types.knownpastesourcetype.html +++ b/docs/enums/roosterjs_editor_types.knownpastesourcetype.html @@ -101,7 +101,7 @@

    Default

    Default: = 6
    @@ -111,7 +111,7 @@

    ExcelDesktop

    ExcelDesktop: = 1
    @@ -121,7 +121,7 @@

    ExcelOnline

    ExcelOnline: = 2
    @@ -131,7 +131,7 @@

    GoogleSheets

    GoogleSheets: = 4
    @@ -141,7 +141,7 @@

    PowerPointDesktop

    PowerPointDesktop: = 3
    @@ -151,7 +151,7 @@

    SingleImage

    SingleImage: = 7
    @@ -161,7 +161,7 @@

    WacComponents

    WacComponents: = 5
    @@ -171,7 +171,7 @@

    WordDesktop

    WordDesktop: = 0
    diff --git a/docs/enums/roosterjs_editor_types.listtype.html b/docs/enums/roosterjs_editor_types.listtype.html index 6807cd0a506..e243379b75d 100644 --- a/docs/enums/roosterjs_editor_types.listtype.html +++ b/docs/enums/roosterjs_editor_types.listtype.html @@ -96,7 +96,7 @@

    None

    None: = 0
    @@ -112,7 +112,7 @@

    Ordered

    Ordered: = 1
    @@ -128,7 +128,7 @@

    Unordered

    Unordered: = 2
    diff --git a/docs/enums/roosterjs_editor_types.nodetype.html b/docs/enums/roosterjs_editor_types.nodetype.html index dc31af54ee5..9f209085261 100644 --- a/docs/enums/roosterjs_editor_types.nodetype.html +++ b/docs/enums/roosterjs_editor_types.nodetype.html @@ -103,7 +103,7 @@

    Attribute

    Attribute: = 2
    @@ -118,7 +118,7 @@

    Comment

    Comment: = 8
    @@ -133,7 +133,7 @@

    Document

    Document: = 9
    @@ -148,7 +148,7 @@

    DocumentFragment

    DocumentFragment: = 11
    @@ -163,7 +163,7 @@

    DocumentType

    DocumentType: = 10
    @@ -178,7 +178,7 @@

    Element

    Element: = 1
    @@ -193,7 +193,7 @@

    ProcessingInstruction

    ProcessingInstruction: = 7
    @@ -208,7 +208,7 @@

    Text

    Text: = 3
    diff --git a/docs/enums/roosterjs_editor_types.numberinglisttype.html b/docs/enums/roosterjs_editor_types.numberinglisttype.html index 68cd0aff6dd..833c0660a64 100644 --- a/docs/enums/roosterjs_editor_types.numberinglisttype.html +++ b/docs/enums/roosterjs_editor_types.numberinglisttype.html @@ -115,7 +115,7 @@

    Decimal

    Decimal: = 1
    @@ -130,7 +130,7 @@

    DecimalDash

    DecimalDash: = 2
    @@ -145,7 +145,7 @@

    DecimalDoubleParenthesis

    DecimalDoubleParenthesis: = 4
    @@ -160,7 +160,7 @@

    DecimalParenthesis

    DecimalParenthesis: = 3
    @@ -175,7 +175,7 @@

    LowerAlpha

    LowerAlpha: = 5
    @@ -190,7 +190,7 @@

    LowerAlphaDash

    LowerAlphaDash: = 8
    @@ -205,7 +205,7 @@

    LowerAlphaDoubleParenthesis

    LowerAlphaDoubleParenthesis: = 7
    @@ -220,7 +220,7 @@

    LowerAlphaParenthesis

    LowerAlphaParenthesis: = 6
    @@ -235,7 +235,7 @@

    LowerRoman

    LowerRoman: = 13
    @@ -250,7 +250,7 @@

    LowerRomanDash

    LowerRomanDash: = 16
    @@ -265,7 +265,7 @@

    LowerRomanDoubleParenthesis

    LowerRomanDoubleParenthesis: = 15
    @@ -280,7 +280,7 @@

    LowerRomanParenthesis

    LowerRomanParenthesis: = 14
    @@ -295,7 +295,7 @@

    Max

    Max: = 20
    @@ -310,7 +310,7 @@

    Min

    Min: = 1
    @@ -325,7 +325,7 @@

    UpperAlpha

    UpperAlpha: = 9
    @@ -340,7 +340,7 @@

    UpperAlphaDash

    UpperAlphaDash: = 12
    @@ -355,7 +355,7 @@

    UpperAlphaDoubleParenthesis

    UpperAlphaDoubleParenthesis: = 11
    @@ -370,7 +370,7 @@

    UpperAlphaParenthesis

    UpperAlphaParenthesis: = 10
    @@ -385,7 +385,7 @@

    UpperRoman

    UpperRoman: = 17
    @@ -400,7 +400,7 @@

    UpperRomanDash

    UpperRomanDash: = 20
    @@ -415,7 +415,7 @@

    UpperRomanDoubleParenthesis

    UpperRomanDoubleParenthesis: = 19
    @@ -430,7 +430,7 @@

    UpperRomanParenthesis

    UpperRomanParenthesis: = 18
    diff --git a/docs/enums/roosterjs_editor_types.pastetype.html b/docs/enums/roosterjs_editor_types.pastetype.html index edaed8da285..c5f6239e23b 100644 --- a/docs/enums/roosterjs_editor_types.pastetype.html +++ b/docs/enums/roosterjs_editor_types.pastetype.html @@ -97,7 +97,7 @@

    AsImage

    AsImage: = 3
    @@ -112,7 +112,7 @@

    AsPlainText

    AsPlainText: = 1
    @@ -127,7 +127,7 @@

    MergeFormat

    MergeFormat: = 2
    @@ -142,7 +142,7 @@

    Normal

    Normal: = 0
    diff --git a/docs/enums/roosterjs_editor_types.plugineventtype.html b/docs/enums/roosterjs_editor_types.plugineventtype.html index 0973ad0a2ff..73e29eb7739 100644 --- a/docs/enums/roosterjs_editor_types.plugineventtype.html +++ b/docs/enums/roosterjs_editor_types.plugineventtype.html @@ -117,7 +117,7 @@

    BeforeCutCopy

    BeforeCutCopy: = 9
    @@ -132,7 +132,7 @@

    BeforeDispose

    BeforeDispose: = 12
    @@ -147,7 +147,7 @@

    BeforeKeyboardEditing

    BeforeKeyboardEditing: = 23
    @@ -164,7 +164,7 @@

    BeforePaste

    BeforePaste: = 10
    @@ -179,7 +179,7 @@

    BeforeSetContent

    BeforeSetContent: = 20
    @@ -195,7 +195,7 @@

    CompositionEnd

    CompositionEnd: = 4
    @@ -210,7 +210,7 @@

    ContentChanged

    ContentChanged: = 7
    @@ -225,7 +225,7 @@

    ContextMenu

    ContextMenu: = 16
    @@ -240,7 +240,7 @@

    EditImage

    EditImage: = 19
    @@ -255,7 +255,7 @@

    EditorReady

    EditorReady: = 11
    @@ -270,7 +270,7 @@

    EnteredShadowEdit

    EnteredShadowEdit: = 17
    @@ -285,7 +285,7 @@

    EntityOperation

    EntityOperation: = 15
    @@ -300,7 +300,7 @@

    ExtractContentWithDom

    ExtractContentWithDom: = 8
    @@ -318,7 +318,7 @@

    Input

    Input: = 3
    @@ -333,7 +333,7 @@

    KeyDown

    KeyDown: = 0
    @@ -348,7 +348,7 @@

    KeyPress

    KeyPress: = 1
    @@ -363,7 +363,7 @@

    KeyUp

    KeyUp: = 2
    @@ -378,7 +378,7 @@

    LeavingShadowEdit

    LeavingShadowEdit: = 18
    @@ -393,7 +393,7 @@

    MouseDown

    MouseDown: = 5
    @@ -408,7 +408,7 @@

    MouseUp

    MouseUp: = 6
    @@ -423,7 +423,7 @@

    PendingFormatStateChanged

    PendingFormatStateChanged: = 13
    @@ -438,7 +438,7 @@

    Scroll

    Scroll: = 14
    @@ -453,7 +453,7 @@

    SelectionChanged

    SelectionChanged: = 22
    @@ -469,7 +469,7 @@

    ZoomChanged

    ZoomChanged: = 21
    diff --git a/docs/enums/roosterjs_editor_types.positiontype.html b/docs/enums/roosterjs_editor_types.positiontype.html index 593046981ed..016d33928da 100644 --- a/docs/enums/roosterjs_editor_types.positiontype.html +++ b/docs/enums/roosterjs_editor_types.positiontype.html @@ -97,7 +97,7 @@

    After

    After: = -3
    @@ -112,7 +112,7 @@

    Before

    Before: = -2
    @@ -127,7 +127,7 @@

    Begin

    Begin: = 0
    @@ -142,7 +142,7 @@

    End

    End: = -1
    diff --git a/docs/enums/roosterjs_editor_types.queryscope.html b/docs/enums/roosterjs_editor_types.queryscope.html index 6e31e654ee9..7b65f762f8e 100644 --- a/docs/enums/roosterjs_editor_types.queryscope.html +++ b/docs/enums/roosterjs_editor_types.queryscope.html @@ -96,7 +96,7 @@

    Body

    Body: = 0
    @@ -111,7 +111,7 @@

    InSelection

    InSelection: = 2
    @@ -126,7 +126,7 @@

    OnSelection

    OnSelection: = 1
    diff --git a/docs/enums/roosterjs_editor_types.regiontype.html b/docs/enums/roosterjs_editor_types.regiontype.html index ce80ca9305a..8f27d254ca0 100644 --- a/docs/enums/roosterjs_editor_types.regiontype.html +++ b/docs/enums/roosterjs_editor_types.regiontype.html @@ -94,7 +94,7 @@

    Table

    Table: = 0
    diff --git a/docs/enums/roosterjs_editor_types.selectionrangetypes.html b/docs/enums/roosterjs_editor_types.selectionrangetypes.html index 87eef394db6..feaf912cf23 100644 --- a/docs/enums/roosterjs_editor_types.selectionrangetypes.html +++ b/docs/enums/roosterjs_editor_types.selectionrangetypes.html @@ -96,7 +96,7 @@

    ImageSelection

    ImageSelection: = 2
    @@ -111,7 +111,7 @@

    Normal

    Normal: = 0
    @@ -126,7 +126,7 @@

    TableSelection

    TableSelection: = 1
    diff --git a/docs/enums/roosterjs_editor_types.tableborderformat.html b/docs/enums/roosterjs_editor_types.tableborderformat.html index ffcf1d58943..dfe7b849462 100644 --- a/docs/enums/roosterjs_editor_types.tableborderformat.html +++ b/docs/enums/roosterjs_editor_types.tableborderformat.html @@ -102,7 +102,7 @@

    CLEAR

    CLEAR: = 8
    @@ -117,7 +117,7 @@

    DEFAULT

    DEFAULT: = 0
    @@ -136,7 +136,7 @@

    ESPECIAL_TYPE_1

    ESPECIAL_TYPE_1: = 5
    @@ -156,7 +156,7 @@

    ESPECIAL_TYPE_2

    ESPECIAL_TYPE_2: = 6
    @@ -176,7 +176,7 @@

    ESPECIAL_TYPE_3

    ESPECIAL_TYPE_3: = 7
    @@ -194,7 +194,7 @@

    FIRST_COLUMN_HEADER_EXTERNAL

    FIRST_COLUMN_HEADER_EXTERNAL: = 4
    @@ -213,7 +213,7 @@

    LIST_WITH_SIDE_BORDERS

    LIST_WITH_SIDE_BORDERS: = 1
    @@ -232,7 +232,7 @@

    NO_HEADER_BORDERS

    NO_HEADER_BORDERS: = 2
    @@ -250,7 +250,7 @@

    NO_SIDE_BORDERS

    NO_SIDE_BORDERS: = 3
    diff --git a/docs/enums/roosterjs_editor_types.tableoperation.html b/docs/enums/roosterjs_editor_types.tableoperation.html index dccb762ac46..beb1ef8010f 100644 --- a/docs/enums/roosterjs_editor_types.tableoperation.html +++ b/docs/enums/roosterjs_editor_types.tableoperation.html @@ -116,7 +116,7 @@

    AlignCellBottom

    AlignCellBottom: = 22
    @@ -131,7 +131,7 @@

    AlignCellCenter

    AlignCellCenter: = 18
    @@ -146,7 +146,7 @@

    AlignCellLeft

    AlignCellLeft: = 17
    @@ -161,7 +161,7 @@

    AlignCellMiddle

    AlignCellMiddle: = 21
    @@ -176,7 +176,7 @@

    AlignCellRight

    AlignCellRight: = 19
    @@ -191,7 +191,7 @@

    AlignCellTop

    AlignCellTop: = 20
    @@ -206,7 +206,7 @@

    AlignCenter

    AlignCenter: = 14
    @@ -221,7 +221,7 @@

    AlignLeft

    AlignLeft: = 15
    @@ -236,7 +236,7 @@

    AlignRight

    AlignRight: = 16
    @@ -251,7 +251,7 @@

    DeleteColumn

    DeleteColumn: = 5
    @@ -266,7 +266,7 @@

    DeleteRow

    DeleteRow: = 6
    @@ -281,7 +281,7 @@

    DeleteTable

    DeleteTable: = 4
    @@ -296,7 +296,7 @@

    InsertAbove

    InsertAbove: = 0
    @@ -311,7 +311,7 @@

    InsertBelow

    InsertBelow: = 1
    @@ -326,7 +326,7 @@

    InsertLeft

    InsertLeft: = 2
    @@ -341,7 +341,7 @@

    InsertRight

    InsertRight: = 3
    @@ -356,7 +356,7 @@

    MergeAbove

    MergeAbove: = 7
    @@ -371,7 +371,7 @@

    MergeBelow

    MergeBelow: = 8
    @@ -386,7 +386,7 @@

    MergeCells

    MergeCells: = 11
    @@ -401,7 +401,7 @@

    MergeLeft

    MergeLeft: = 9
    @@ -416,7 +416,7 @@

    MergeRight

    MergeRight: = 10
    @@ -431,7 +431,7 @@

    SplitHorizontally

    SplitHorizontally: = 12
    @@ -446,7 +446,7 @@

    SplitVertically

    SplitVertically: = 13
    diff --git a/docs/enums/roosterjs_react.knownribbonbuttonkey.html b/docs/enums/roosterjs_react.knownribbonbuttonkey.html index 849f837cd6f..434f484c15c 100644 --- a/docs/enums/roosterjs_react.knownribbonbuttonkey.html +++ b/docs/enums/roosterjs_react.knownribbonbuttonkey.html @@ -124,7 +124,7 @@

    AlignCenter

    AlignCenter: = 15
    @@ -139,7 +139,7 @@

    AlignLeft

    AlignLeft: = 14
    @@ -154,7 +154,7 @@

    AlignRight

    AlignRight: = 16
    @@ -169,7 +169,7 @@

    BackgroundColor

    BackgroundColor: = 8
    @@ -184,7 +184,7 @@

    Bold

    Bold: = 0
    @@ -199,7 +199,7 @@

    BulletedList

    BulletedList: = 9
    @@ -214,7 +214,7 @@

    ClearFormat

    ClearFormat: = 30
    @@ -229,7 +229,7 @@

    Code

    Code: = 25
    @@ -244,7 +244,7 @@

    DecreaseFontSize

    DecreaseFontSize: = 6
    @@ -259,7 +259,7 @@

    DecreaseIndent

    DecreaseIndent: = 11
    @@ -274,7 +274,7 @@

    Font

    Font: = 3
    @@ -289,7 +289,7 @@

    FontSize

    FontSize: = 4
    @@ -304,7 +304,7 @@

    Header

    Header: = 24
    @@ -319,7 +319,7 @@

    IncreaseFontSize

    IncreaseFontSize: = 5
    @@ -334,7 +334,7 @@

    IncreaseIndent

    IncreaseIndent: = 12
    @@ -349,7 +349,7 @@

    InsertImage

    InsertImage: = 20
    @@ -364,7 +364,7 @@

    InsertLink

    InsertLink: = 17
    @@ -379,7 +379,7 @@

    InsertTable

    InsertTable: = 19
    @@ -394,7 +394,7 @@

    Italic

    Italic: = 1
    @@ -409,7 +409,7 @@

    Ltr

    Ltr: = 26
    @@ -424,7 +424,7 @@

    NumberedList

    NumberedList: = 10
    @@ -439,7 +439,7 @@

    Quote

    Quote: = 13
    @@ -454,7 +454,7 @@

    Redo

    Redo: = 29
    @@ -469,7 +469,7 @@

    RemoveLink

    RemoveLink: = 18
    @@ -484,7 +484,7 @@

    Rtl

    Rtl: = 27
    @@ -499,7 +499,7 @@

    Strikethrough

    Strikethrough: = 23
    @@ -514,7 +514,7 @@

    Subscript

    Subscript: = 22
    @@ -529,7 +529,7 @@

    Superscript

    Superscript: = 21
    @@ -544,7 +544,7 @@

    TextColor

    TextColor: = 7
    @@ -559,7 +559,7 @@

    Underline

    Underline: = 2
    @@ -574,7 +574,7 @@

    Undo

    Undo: = 28
    diff --git a/docs/enums/roosterjs_react.updatemode.html b/docs/enums/roosterjs_react.updatemode.html index 0153fd26ac0..05ae48a1b34 100644 --- a/docs/enums/roosterjs_react.updatemode.html +++ b/docs/enums/roosterjs_react.updatemode.html @@ -99,7 +99,7 @@

    Force

    Force: = 0
    @@ -114,7 +114,7 @@

    OnBlur

    OnBlur: = 16
    @@ -129,7 +129,7 @@

    OnContentChangedEvent

    OnContentChangedEvent: = 8
    @@ -144,7 +144,7 @@

    OnDispose

    OnDispose: = 2
    @@ -159,7 +159,7 @@

    OnInitialize

    OnInitialize: = 1
    @@ -174,7 +174,7 @@

    OnUserInput

    OnUserInput: = 4
    diff --git a/docs/interfaces/roosterjs_content_model_dom.nodetypemap.html b/docs/interfaces/roosterjs_content_model_dom.nodetypemap.html index cfff987cc95..a2055bc7eae 100644 --- a/docs/interfaces/roosterjs_content_model_dom.nodetypemap.html +++ b/docs/interfaces/roosterjs_content_model_dom.nodetypemap.html @@ -109,7 +109,7 @@

    1

    1: HTMLElement
    @@ -124,7 +124,7 @@

    10

    10: DocumentType
    @@ -139,7 +139,7 @@

    11

    11: DocumentFragment
    @@ -154,7 +154,7 @@

    2

    2: Attr
    @@ -169,7 +169,7 @@

    3

    3: Text
    @@ -184,7 +184,7 @@

    7

    7: ProcessingInstruction
    @@ -199,7 +199,7 @@

    8

    8: Comment
    @@ -214,7 +214,7 @@

    9

    9: Document
    diff --git a/docs/interfaces/roosterjs_content_model_editor.border.html b/docs/interfaces/roosterjs_content_model_editor.border.html index 62301bb72aa..d2c32d95ec6 100644 --- a/docs/interfaces/roosterjs_content_model_editor.border.html +++ b/docs/interfaces/roosterjs_content_model_editor.border.html @@ -105,7 +105,7 @@

    Optional color

    color: string
    @@ -120,7 +120,7 @@

    Optional style

    style: string
    @@ -135,7 +135,7 @@

    Optional width

    width: string
    diff --git a/docs/interfaces/roosterjs_content_model_editor.compatiblecontentmodelbeforepasteevent.html b/docs/interfaces/roosterjs_content_model_editor.compatiblecontentmodelbeforepasteevent.html index 3d10b652a76..1413da342b8 100644 --- a/docs/interfaces/roosterjs_content_model_editor.compatiblecontentmodelbeforepasteevent.html +++ b/docs/interfaces/roosterjs_content_model_editor.compatiblecontentmodelbeforepasteevent.html @@ -120,7 +120,7 @@

    clipboardData

    @@ -136,7 +136,7 @@

    domToModelOption

    @@ -152,7 +152,7 @@

    Optional eventDataCa
    @@ -178,7 +178,7 @@

    eventType

    @@ -194,7 +194,7 @@

    fragment

    @@ -210,7 +210,7 @@

    htmlAfter

    @@ -226,7 +226,7 @@

    htmlAttributes

    @@ -242,7 +242,7 @@

    htmlBefore

    @@ -258,7 +258,7 @@

    Readonly pasteType

    @@ -274,7 +274,7 @@

    sanitizingOption

    diff --git a/docs/interfaces/roosterjs_content_model_editor.contentmodelbeforepasteevent.html b/docs/interfaces/roosterjs_content_model_editor.contentmodelbeforepasteevent.html index 49b904bb5c0..1d3c0b1c6ea 100644 --- a/docs/interfaces/roosterjs_content_model_editor.contentmodelbeforepasteevent.html +++ b/docs/interfaces/roosterjs_content_model_editor.contentmodelbeforepasteevent.html @@ -120,7 +120,7 @@

    clipboardData

    @@ -136,7 +136,7 @@

    domToModelOption

    @@ -152,7 +152,7 @@

    Optional eventDataCa
    @@ -178,7 +178,7 @@

    eventType

    @@ -194,7 +194,7 @@

    fragment

    @@ -210,7 +210,7 @@

    htmlAfter

    @@ -226,7 +226,7 @@

    htmlAttributes

    @@ -242,7 +242,7 @@

    htmlBefore

    @@ -258,7 +258,7 @@

    Readonly pasteType

    @@ -274,7 +274,7 @@

    sanitizingOption

    diff --git a/docs/interfaces/roosterjs_content_model_editor.contentmodelbeforepasteeventdata.html b/docs/interfaces/roosterjs_content_model_editor.contentmodelbeforepasteeventdata.html index 1139d8532aa..193ed8c118f 100644 --- a/docs/interfaces/roosterjs_content_model_editor.contentmodelbeforepasteeventdata.html +++ b/docs/interfaces/roosterjs_content_model_editor.contentmodelbeforepasteeventdata.html @@ -123,7 +123,7 @@

    clipboardData

    @@ -138,7 +138,7 @@

    domToModelOption

    domToModelOption: Partial<DomToModelOption>
    @@ -154,7 +154,7 @@

    fragment

    @@ -170,7 +170,7 @@

    htmlAfter

    @@ -186,7 +186,7 @@

    htmlAttributes

    @@ -202,7 +202,7 @@

    htmlBefore

    @@ -218,7 +218,7 @@

    Readonly pasteType

    @@ -234,7 +234,7 @@

    sanitizingOption

    diff --git a/docs/interfaces/roosterjs_content_model_editor.contentmodelcoreapimap.html b/docs/interfaces/roosterjs_content_model_editor.contentmodelcoreapimap.html index 56a33df1995..e3a41f910d2 100644 --- a/docs/interfaces/roosterjs_content_model_editor.contentmodelcoreapimap.html +++ b/docs/interfaces/roosterjs_content_model_editor.contentmodelcoreapimap.html @@ -132,7 +132,7 @@

    addUndoSnapshot

    @@ -163,7 +163,7 @@

    attachDomEvent

    @@ -192,7 +192,7 @@

    createContentModel

    createContentModel: CreateContentModel
    @@ -215,7 +215,7 @@

    createEditorContext

    createEditorContext: CreateEditorContext
    @@ -236,7 +236,7 @@

    createPasteFragment

    @@ -270,7 +270,7 @@

    ensureTypeInContainer

    @@ -300,7 +300,7 @@

    focus

    @@ -321,7 +321,7 @@

    getContent

    @@ -348,7 +348,7 @@

    getPendableFormatState

    @@ -375,7 +375,7 @@

    getSelectionRange

    @@ -402,7 +402,7 @@

    getSelectionRangeEx

    @@ -429,7 +429,7 @@

    getStyleBasedFormatState

    @@ -453,7 +453,7 @@

    hasFocus

    @@ -477,7 +477,7 @@

    insertNode

    @@ -501,7 +501,7 @@

    restoreUndoSnapshot

    @@ -525,7 +525,7 @@

    select

    @@ -559,7 +559,7 @@

    selectImage

    @@ -589,7 +589,7 @@

    selectRange

    @@ -618,7 +618,7 @@

    selectTable

    @@ -652,7 +652,7 @@

    setContent

    @@ -679,7 +679,7 @@

    setContentModel

    setContentModel: SetContentModel
    @@ -706,7 +706,7 @@

    switchShadowEdit

    @@ -730,7 +730,7 @@

    transformColor

    @@ -770,7 +770,7 @@

    triggerEvent

    diff --git a/docs/interfaces/roosterjs_content_model_editor.contentmodeleditorcore.html b/docs/interfaces/roosterjs_content_model_editor.contentmodeleditorcore.html index 43ed79e308f..0785478baeb 100644 --- a/docs/interfaces/roosterjs_content_model_editor.contentmodeleditorcore.html +++ b/docs/interfaces/roosterjs_content_model_editor.contentmodeleditorcore.html @@ -134,7 +134,7 @@

    addDelimiterForEntity

    addDelimiterForEntity: boolean
    @@ -150,7 +150,7 @@

    Readonly api

    @@ -165,7 +165,7 @@

    Optional cachedModel

    @@ -181,7 +181,7 @@

    Readonly contentDiv

    @@ -197,7 +197,7 @@

    darkColorHandler

    @@ -213,7 +213,7 @@

    defaultDomToModelOptions

    defaultDomToModelOptions: DomToModelOption
    @@ -228,7 +228,7 @@

    defaultFormat

    @@ -243,7 +243,7 @@

    defaultModelToDomOptions

    defaultModelToDomOptions: ModelToDomOption
    @@ -259,7 +259,7 @@

    getVisibleViewport

    @@ -290,7 +290,7 @@

    Optional imageSelection

    Inherited from EditorCore.imageSelectionBorderColor

    @@ -306,7 +306,7 @@

    Readonly originalApi

    @@ -322,7 +322,7 @@

    Readonly plugins

    @@ -337,7 +337,7 @@

    reuseModel

    reuseModel: boolean
    @@ -353,7 +353,7 @@

    sizeTransformer

    @@ -371,7 +371,7 @@

    Readonly trustedHTMLHandler

    Inherited from EditorCore.trustedHTMLHandler

    @@ -389,7 +389,7 @@

    zoomScale

    diff --git a/docs/interfaces/roosterjs_content_model_editor.contentmodeleditoroptions.html b/docs/interfaces/roosterjs_content_model_editor.contentmodeleditoroptions.html index e85b42e8a50..01da308fb0c 100644 --- a/docs/interfaces/roosterjs_content_model_editor.contentmodeleditoroptions.html +++ b/docs/interfaces/roosterjs_content_model_editor.contentmodeleditoroptions.html @@ -129,7 +129,7 @@

    Optional allowKeyboard

    Inherited from EditorOptions.allowKeyboardEventPropagation

    @@ -148,7 +148,7 @@

    Optional allowedCustom

    Inherited from EditorOptions.allowedCustomPasteType

    @@ -165,7 +165,7 @@

    Optional coreApiOver
    @@ -182,7 +182,7 @@

    Optional corePluginO
    @@ -198,7 +198,7 @@

    Optional defaultDomT
    defaultDomToModelOptions: DomToModelOption
    @@ -214,7 +214,7 @@

    Optional defaultFormat

    Inherited from EditorOptions.defaultFormat

    @@ -231,7 +231,7 @@

    Optional defaultModeldefaultModelToDomOptions: ModelToDomOption

    @@ -247,7 +247,7 @@

    Optional doNotAdjust
    @@ -263,7 +263,7 @@

    Optional experimentalFeat
    @@ -279,7 +279,7 @@

    Optional getDarkColo
    @@ -317,7 +317,7 @@

    Optional getVisibleV
    @@ -348,7 +348,7 @@

    Optional imageSelection

    Inherited from EditorOptions.imageSelectionBorderColor

    @@ -364,7 +364,7 @@

    Optional inDarkMode<
    @@ -380,7 +380,7 @@

    Optional initialContent

    Inherited from EditorOptions.initialContent

    @@ -397,7 +397,7 @@

    Optional onExternalC
    @@ -438,7 +438,7 @@

    Optional plugins

    @@ -457,7 +457,7 @@

    Optional scrollContainer<
    @@ -474,7 +474,7 @@

    Optional sizeTransformer<
    @@ -492,7 +492,7 @@

    Optional trustedHTMLHandler

    Inherited from EditorOptions.trustedHTMLHandler

    @@ -510,7 +510,7 @@

    Optional undoMetadata

    Inherited from EditorOptions.undoMetadataSnapshotService

    @@ -527,7 +527,7 @@

    Optional undoSnapshot

    Inherited from EditorOptions.undoSnapshotService

    @@ -546,7 +546,7 @@

    Optional zoomScale

    diff --git a/docs/interfaces/roosterjs_content_model_editor.contentmodelformatstate.html b/docs/interfaces/roosterjs_content_model_editor.contentmodelformatstate.html index 6e584d554a1..bdbc4090831 100644 --- a/docs/interfaces/roosterjs_content_model_editor.contentmodelformatstate.html +++ b/docs/interfaces/roosterjs_content_model_editor.contentmodelformatstate.html @@ -142,7 +142,7 @@

    Optional backgroundColor<
    @@ -158,7 +158,7 @@

    Optional backgroundColors
    @@ -174,7 +174,7 @@

    Optional canAddImage
    @@ -190,7 +190,7 @@

    Optional canMergeTab
    @@ -206,7 +206,7 @@

    Optional canRedo

    @@ -222,7 +222,7 @@

    Optional canUndo

    @@ -238,7 +238,7 @@

    Optional canUnlink

    @@ -254,7 +254,7 @@

    Optional direction

    @@ -270,7 +270,7 @@

    Optional fontName

    @@ -286,7 +286,7 @@

    Optional fontSize

    @@ -302,7 +302,7 @@

    Optional headerLevel

    @@ -317,7 +317,7 @@

    Optional imageFormat

    imageFormat: ImageFormatState
    @@ -333,7 +333,7 @@

    Optional isBlockQuot
    @@ -349,7 +349,7 @@

    Optional isBold

    @@ -365,7 +365,7 @@

    Optional isBullet

    @@ -381,7 +381,7 @@

    Optional isCodeBlock
    @@ -397,7 +397,7 @@

    Optional isCodeInlin
    @@ -413,7 +413,7 @@

    Optional isDarkMode<
    @@ -429,7 +429,7 @@

    Optional isInTable

    @@ -445,7 +445,7 @@

    Optional isItalic

    @@ -461,7 +461,7 @@

    Optional isMultiline
    @@ -477,7 +477,7 @@

    Optional isNumbering

    @@ -493,7 +493,7 @@

    Optional isStrikeThr
    @@ -509,7 +509,7 @@

    Optional isSubscript

    @@ -525,7 +525,7 @@

    Optional isSuperscript

    Inherited from FormatState.isSuperscript

    @@ -541,7 +541,7 @@

    Optional isUnderline

    @@ -557,7 +557,7 @@

    Optional lineHeight

    @@ -573,7 +573,7 @@

    Optional marginBottom

    Inherited from FormatState.marginBottom

    @@ -589,7 +589,7 @@

    Optional marginTop

    @@ -605,7 +605,7 @@

    Optional tableFormat

    @@ -621,7 +621,7 @@

    Optional tableHasHea
    @@ -637,7 +637,7 @@

    Optional textAlign

    @@ -653,7 +653,7 @@

    Optional textColor

    @@ -669,7 +669,7 @@

    Optional textColors

    @@ -685,7 +685,7 @@

    Optional zoomScale

    diff --git a/docs/interfaces/roosterjs_content_model_editor.icontentmodeleditor.html b/docs/interfaces/roosterjs_content_model_editor.icontentmodeleditor.html index f2d34f659fc..3d62f838019 100644 --- a/docs/interfaces/roosterjs_content_model_editor.icontentmodeleditor.html +++ b/docs/interfaces/roosterjs_content_model_editor.icontentmodeleditor.html @@ -185,7 +185,7 @@

    addContentEditFeature

    @@ -218,7 +218,7 @@

    addDomEventHandler

    @@ -261,7 +261,7 @@

    Returns void

    Inherited from IEditor.addDomEventHandler

    @@ -307,7 +307,7 @@

    addUndoSnapshot

    @@ -381,7 +381,7 @@

    cacheContentModel

  • @@ -412,7 +412,7 @@

    collapseNodes

    @@ -462,7 +462,7 @@

    contains

    @@ -486,7 +486,7 @@

    Returns boolean

    Inherited from IEditor.contains

    @@ -518,7 +518,7 @@

    createContentModel

  • @@ -550,7 +550,7 @@

    deleteNode

    @@ -583,7 +583,7 @@

    deleteSelectedContent

    @@ -606,7 +606,7 @@

    dispose

  • @@ -845,7 +845,7 @@

    getContentSearcherOfCursor

    @@ -879,7 +879,7 @@

    getCustomData

    @@ -961,7 +961,7 @@

    getDarkColorHandler

    @@ -984,7 +984,7 @@

    getDefaultFormat

    @@ -1008,7 +1008,7 @@

    getDocument

    @@ -1032,7 +1032,7 @@

    getEditorDomAttribute

    @@ -1064,7 +1064,7 @@

    getElementAtCursor

    @@ -1114,7 +1114,7 @@

    getFocusedPosition

    @@ -1137,7 +1137,7 @@

    getPendableFormatState

    @@ -1170,7 +1170,7 @@

    getRelativeDistanceToEditor

    @@ -1213,7 +1213,7 @@

    getScrollContainer

    @@ -1236,7 +1236,7 @@

    getSelectedRegions

    @@ -1265,7 +1265,7 @@

    getSelectionPath

    @@ -1290,7 +1290,7 @@

    getSelectionRange

    @@ -1325,7 +1325,7 @@

    getSelectionRangeEx

    @@ -1350,7 +1350,7 @@

    getSelectionTraverser

    @@ -1380,7 +1380,7 @@

    getSizeTransformer

    @@ -1405,7 +1405,7 @@

    getStyleBasedFormatState

    @@ -1434,7 +1434,7 @@

    getTrustedHTMLHandler

    @@ -1460,7 +1460,7 @@

    getUndoState

    @@ -1483,7 +1483,7 @@

    getVisibleViewport

    @@ -1506,7 +1506,7 @@

    getZoomScale

    @@ -1532,7 +1532,7 @@

    hasFocus

    @@ -1556,7 +1556,7 @@

    insertContent

    @@ -1595,7 +1595,7 @@

    insertNode

    @@ -1638,7 +1638,7 @@

    isDarkMode

    @@ -1662,7 +1662,7 @@

    isDisposed

    @@ -1686,7 +1686,7 @@

    isEmpty

    @@ -1719,7 +1719,7 @@

    isFeatureEnabled

    @@ -1751,7 +1751,7 @@

    isInIME

    @@ -1775,7 +1775,7 @@

    isInShadowEdit

    @@ -1798,7 +1798,7 @@

    isPositionAtBeginning

    @@ -1832,7 +1832,7 @@

    paste

    @@ -1879,7 +1879,7 @@

    queryElements

    @@ -1933,7 +1933,7 @@

    Returns HTMLEleme
    @@ -1987,7 +1987,7 @@

    Returns T<
    @@ -2047,7 +2047,7 @@

    Returns HTMLEleme
    @@ -2116,7 +2116,7 @@

    redo

    @@ -2139,7 +2139,7 @@

    removeContentEditFeature

    @@ -2171,7 +2171,7 @@

    replaceNode

    @@ -2216,7 +2216,7 @@

    runAsync

    @@ -2287,7 +2287,7 @@

    select

    @@ -2311,7 +2311,7 @@

    Returns boolean

    Inherited from IEditor.select

    @@ -2335,7 +2335,7 @@

    Returns boolean

    Inherited from IEditor.select

    @@ -2365,7 +2365,7 @@

    Returns boolean

    Inherited from IEditor.select

    @@ -2389,7 +2389,7 @@

    Returns boolean

    Inherited from IEditor.select

    @@ -2419,7 +2419,7 @@

    Returns boolean

    Inherited from IEditor.select

    @@ -2461,7 +2461,7 @@

    Returns boolean

    Inherited from IEditor.select

    @@ -2485,7 +2485,7 @@

    Returns boolean

    Inherited from IEditor.select

    @@ -2514,7 +2514,7 @@

    Returns boolean

    Inherited from IEditor.select

    @@ -2546,7 +2546,7 @@

    setContent

    @@ -2583,7 +2583,7 @@

    setContentModel

  • @@ -2621,7 +2621,7 @@

    setDarkModeState

    @@ -2653,7 +2653,7 @@

    setEditorDomAttribute

    @@ -2691,7 +2691,7 @@

    setZoomScale

    @@ -2722,7 +2722,7 @@

    startShadowEdit

    @@ -2750,7 +2750,7 @@

    stopShadowEdit

    @@ -2773,7 +2773,7 @@

    transformToDarkColor

    @@ -2805,7 +2805,7 @@

    triggerContentChangedEvent

    @@ -2843,7 +2843,7 @@

    triggerPluginEvent

    @@ -2896,7 +2896,7 @@

    undo

    diff --git a/docs/interfaces/roosterjs_content_model_editor.imageformatstate.html b/docs/interfaces/roosterjs_content_model_editor.imageformatstate.html index 73d8258beb3..f5b3f7d4163 100644 --- a/docs/interfaces/roosterjs_content_model_editor.imageformatstate.html +++ b/docs/interfaces/roosterjs_content_model_editor.imageformatstate.html @@ -106,7 +106,7 @@

    Optional borderColor

    borderColor: string
    @@ -121,7 +121,7 @@

    Optional borderRadius

    borderRadius: string
    @@ -136,7 +136,7 @@

    Optional borderStyle

    borderStyle: string
    @@ -151,7 +151,7 @@

    Optional borderWidth

    borderWidth: string
    @@ -166,7 +166,7 @@

    Optional boxShadow

    boxShadow: string
    diff --git a/docs/interfaces/roosterjs_content_model_editor.insertpoint.html b/docs/interfaces/roosterjs_content_model_editor.insertpoint.html index 9be9de7ba42..e716460dc2b 100644 --- a/docs/interfaces/roosterjs_content_model_editor.insertpoint.html +++ b/docs/interfaces/roosterjs_content_model_editor.insertpoint.html @@ -105,7 +105,7 @@

    marker

    @@ -120,7 +120,7 @@

    paragraph

    @@ -135,7 +135,7 @@

    path

    @@ -150,7 +150,7 @@

    Optional tableContext

    tableContext: TableSelectionContext
    diff --git a/docs/interfaces/roosterjs_content_model_editor.tableselectioncontext.html b/docs/interfaces/roosterjs_content_model_editor.tableselectioncontext.html index d09e4500822..173c85bb4df 100644 --- a/docs/interfaces/roosterjs_content_model_editor.tableselectioncontext.html +++ b/docs/interfaces/roosterjs_content_model_editor.tableselectioncontext.html @@ -105,7 +105,7 @@

    colIndex

    colIndex: number
    @@ -120,7 +120,7 @@

    isWholeTableSelected

    isWholeTableSelected: boolean
    @@ -135,7 +135,7 @@

    rowIndex

    rowIndex: number
    @@ -150,7 +150,7 @@

    table

    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodelblockbase.html b/docs/interfaces/roosterjs_content_model_types.contentmodelblockbase.html index 272ba3f14c2..a69395bac30 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodelblockbase.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodelblockbase.html @@ -142,7 +142,7 @@

    blockType

    blockType: T
    @@ -158,7 +158,7 @@

    format

    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodelblockgroupbase.html b/docs/interfaces/roosterjs_content_model_types.contentmodelblockgroupbase.html index c618de7253c..3cb493f7103 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodelblockgroupbase.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodelblockgroupbase.html @@ -128,7 +128,7 @@

    blockGroupType

    blockGroupType: T
    @@ -143,7 +143,7 @@

    blocks

    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodelblockwithcache.html b/docs/interfaces/roosterjs_content_model_types.contentmodelblockwithcache.html index 5856bb9b6b1..b7fda3ccfe2 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodelblockwithcache.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodelblockwithcache.html @@ -130,7 +130,7 @@

    Optional cachedElementcachedElement: TElement

    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodelbr.html b/docs/interfaces/roosterjs_content_model_types.contentmodelbr.html index 718c01aed96..5f03bf2de85 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodelbr.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodelbr.html @@ -112,7 +112,7 @@

    Optional code

    @@ -128,7 +128,7 @@

    format

    @@ -144,7 +144,7 @@

    Optional isSelected

    @@ -160,7 +160,7 @@

    Optional link

    @@ -176,7 +176,7 @@

    segmentType

    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodelcode.html b/docs/interfaces/roosterjs_content_model_types.contentmodelcode.html index 3eba69124f5..ba73541d169 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodelcode.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodelcode.html @@ -110,7 +110,7 @@

    format

    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodeldivider.html b/docs/interfaces/roosterjs_content_model_types.contentmodeldivider.html index 00d52e746bf..b1fc53a8793 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodeldivider.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodeldivider.html @@ -119,7 +119,7 @@

    blockType

    @@ -135,7 +135,7 @@

    Optional cachedElement

    Inherited from ContentModelBlockWithCache.cachedElement

    @@ -151,7 +151,7 @@

    format

    @@ -167,7 +167,7 @@

    Optional isSelected

    @@ -182,7 +182,7 @@

    Optional size

    size: string
    @@ -197,7 +197,7 @@

    tagName

    tagName: "div" | "hr"
    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodeldocument.html b/docs/interfaces/roosterjs_content_model_types.contentmodeldocument.html index 5989d11c6fb..e4a59409bdd 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodeldocument.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodeldocument.html @@ -113,7 +113,7 @@

    blockGroupType

    @@ -129,7 +129,7 @@

    blocks

    @@ -145,7 +145,7 @@

    Optional format

    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodelentity.html b/docs/interfaces/roosterjs_content_model_types.contentmodelentity.html index ec3d4f78d6a..96750c87306 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodelentity.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodelentity.html @@ -120,7 +120,7 @@

    blockType

    @@ -136,7 +136,7 @@

    Optional code

    @@ -152,7 +152,7 @@

    format

    @@ -167,7 +167,7 @@

    Optional id

    id: string
    @@ -182,7 +182,7 @@

    isReadonly

    isReadonly: boolean
    @@ -198,7 +198,7 @@

    Optional isSelected

    @@ -214,7 +214,7 @@

    Optional link

    @@ -230,7 +230,7 @@

    segmentType

    @@ -245,7 +245,7 @@

    Optional type

    type: string
    @@ -260,7 +260,7 @@

    wrapper

    wrapper: HTMLElement
    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodelformatcontainer.html b/docs/interfaces/roosterjs_content_model_types.contentmodelformatcontainer.html index ae6a0aa55c5..ecb2a797091 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodelformatcontainer.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodelformatcontainer.html @@ -120,7 +120,7 @@

    blockGroupType

    @@ -136,7 +136,7 @@

    blockType

    @@ -152,7 +152,7 @@

    blocks

    @@ -168,7 +168,7 @@

    Optional cachedElement

    Inherited from ContentModelBlockWithCache.cachedElement

    @@ -184,7 +184,7 @@

    format

    @@ -199,7 +199,7 @@

    tagName

    tagName: string
    @@ -214,7 +214,7 @@

    Optional zeroFontSiz
    zeroFontSize: boolean
    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodelformatmap.html b/docs/interfaces/roosterjs_content_model_types.contentmodelformatmap.html index b3084502e34..3aa771180fa 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodelformatmap.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodelformatmap.html @@ -122,7 +122,7 @@

    block

    @@ -137,7 +137,7 @@

    code

    @@ -152,7 +152,7 @@

    container

    @@ -167,7 +167,7 @@

    dataset

    dataset: DatasetFormat
    @@ -182,7 +182,7 @@

    divider

    @@ -197,7 +197,7 @@

    elementBasedSegment

    elementBasedSegment: ContentModelSegmentFormat
    @@ -212,7 +212,7 @@

    image

    @@ -227,7 +227,7 @@

    link

    @@ -242,7 +242,7 @@

    listItem

    @@ -257,7 +257,7 @@

    listItemElement

    @@ -272,7 +272,7 @@

    listLevel

    @@ -287,7 +287,7 @@

    segment

    @@ -302,7 +302,7 @@

    segmentOnBlock

    @@ -319,7 +319,7 @@

    segmentOnTableCell

    segmentOnTableCell: ContentModelSegmentFormat
    @@ -337,7 +337,7 @@

    segmentUnderLink

    segmentUnderLink: ContentModelHyperLinkFormat
    @@ -352,7 +352,7 @@

    styleBasedSegment

    styleBasedSegment: ContentModelSegmentFormat
    @@ -367,7 +367,7 @@

    table

    @@ -382,7 +382,7 @@

    tableBorder

    @@ -397,7 +397,7 @@

    tableCell

    @@ -412,7 +412,7 @@

    tableCellBorder

    @@ -427,7 +427,7 @@

    tableRow

    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodelgeneralblock.html b/docs/interfaces/roosterjs_content_model_types.contentmodelgeneralblock.html index 0fda3325221..c3cdd6068f3 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodelgeneralblock.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodelgeneralblock.html @@ -124,7 +124,7 @@

    blockGroupType

    @@ -140,7 +140,7 @@

    blockType

    @@ -156,7 +156,7 @@

    blocks

    @@ -171,7 +171,7 @@

    element

    element: HTMLElement
    @@ -187,7 +187,7 @@

    format

    @@ -203,7 +203,7 @@

    Optional isSelected

    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodelgeneralsegment.html b/docs/interfaces/roosterjs_content_model_types.contentmodelgeneralsegment.html index ee94af6c69d..52293792850 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodelgeneralsegment.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodelgeneralsegment.html @@ -119,7 +119,7 @@

    blockGroupType

    @@ -135,7 +135,7 @@

    blockType

    @@ -151,7 +151,7 @@

    blocks

    @@ -167,7 +167,7 @@

    Optional code

    @@ -183,7 +183,7 @@

    element

    @@ -199,7 +199,7 @@

    format

    @@ -215,7 +215,7 @@

    Optional isSelected

    @@ -231,7 +231,7 @@

    Optional link

    @@ -247,7 +247,7 @@

    segmentType

    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodelimage.html b/docs/interfaces/roosterjs_content_model_types.contentmodelimage.html index d7158c1e462..d004102d9b9 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodelimage.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodelimage.html @@ -119,7 +119,7 @@

    Optional alt

    alt: string
    @@ -135,7 +135,7 @@

    Optional code

    @@ -151,7 +151,7 @@

    dataset

    @@ -167,7 +167,7 @@

    format

    @@ -183,7 +183,7 @@

    Optional isSelected

    @@ -198,7 +198,7 @@

    Optional isSelectedA
    isSelectedAsImageSelection: boolean
    @@ -214,7 +214,7 @@

    Optional link

    @@ -230,7 +230,7 @@

    segmentType

    @@ -245,7 +245,7 @@

    src

    src: string
    @@ -260,7 +260,7 @@

    Optional title

    title: string
    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodellink.html b/docs/interfaces/roosterjs_content_model_types.contentmodellink.html index ab73b6534d4..d0d0cef8430 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodellink.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodellink.html @@ -114,7 +114,7 @@

    dataset

    @@ -130,7 +130,7 @@

    format

    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodellistitem.html b/docs/interfaces/roosterjs_content_model_types.contentmodellistitem.html index a1320e899c4..02d8da0a66c 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodellistitem.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodellistitem.html @@ -116,7 +116,7 @@

    blockGroupType

    @@ -132,7 +132,7 @@

    blockType

    @@ -148,7 +148,7 @@

    blocks

    @@ -164,7 +164,7 @@

    format

    @@ -179,7 +179,7 @@

    formatHolder

    @@ -194,7 +194,7 @@

    levels

    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodelparagraph.html b/docs/interfaces/roosterjs_content_model_types.contentmodelparagraph.html index 7532d6f5de9..dc2d847d315 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodelparagraph.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodelparagraph.html @@ -117,7 +117,7 @@

    blockType

    @@ -133,7 +133,7 @@

    Optional cachedElement

    Inherited from ContentModelBlockWithCache.cachedElement

    @@ -148,7 +148,7 @@

    Optional decorator

    @@ -164,7 +164,7 @@

    format

    @@ -179,7 +179,7 @@

    Optional isImplicit

    isImplicit: boolean
    @@ -195,7 +195,7 @@

    Optional segmentFormatsegmentFormat: ContentModelSegmentFormat

    @@ -210,7 +210,7 @@

    segments

    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodelparagraphdecorator.html b/docs/interfaces/roosterjs_content_model_types.contentmodelparagraphdecorator.html index ec01b6c6259..cb2d608ee40 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodelparagraphdecorator.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodelparagraphdecorator.html @@ -111,7 +111,7 @@

    format

    @@ -126,7 +126,7 @@

    tagName

    tagName: string
    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodelsegmentbase.html b/docs/interfaces/roosterjs_content_model_types.contentmodelsegmentbase.html index 1ef224db9fb..a900a249134 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodelsegmentbase.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodelsegmentbase.html @@ -145,7 +145,7 @@

    Optional code

    @@ -161,7 +161,7 @@

    format

    @@ -177,7 +177,7 @@

    Optional isSelected

    @@ -192,7 +192,7 @@

    Optional link

    @@ -207,7 +207,7 @@

    segmentType

    segmentType: T
    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodelselectionmarker.html b/docs/interfaces/roosterjs_content_model_types.contentmodelselectionmarker.html index 7a7949aa5ca..69157b0f103 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodelselectionmarker.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodelselectionmarker.html @@ -112,7 +112,7 @@

    Optional code

    @@ -128,7 +128,7 @@

    format

    @@ -144,7 +144,7 @@

    isSelected

    @@ -160,7 +160,7 @@

    Optional link

    @@ -176,7 +176,7 @@

    segmentType

    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodeltable.html b/docs/interfaces/roosterjs_content_model_types.contentmodeltable.html index 3349e81bd70..101d5af90d0 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodeltable.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodeltable.html @@ -119,7 +119,7 @@

    blockType

    @@ -135,7 +135,7 @@

    Optional cachedElement

    Inherited from ContentModelBlockWithCache.cachedElement

    @@ -151,7 +151,7 @@

    dataset

    @@ -167,7 +167,7 @@

    format

    @@ -182,7 +182,7 @@

    rows

    @@ -197,7 +197,7 @@

    widths

    widths: number[]
    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodeltablecell.html b/docs/interfaces/roosterjs_content_model_types.contentmodeltablecell.html index 42ef77906e5..54fd5f983bf 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodeltablecell.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodeltablecell.html @@ -128,7 +128,7 @@

    blockGroupType

    @@ -144,7 +144,7 @@

    blocks

    @@ -160,7 +160,7 @@

    Optional cachedElement

    Inherited from ContentModelBlockWithCache.cachedElement

    @@ -176,7 +176,7 @@

    dataset

    @@ -192,7 +192,7 @@

    format

    @@ -207,7 +207,7 @@

    Optional isHeader

    isHeader: boolean
    @@ -223,7 +223,7 @@

    Optional isSelected

    @@ -238,7 +238,7 @@

    spanAbove

    spanAbove: boolean
    @@ -253,7 +253,7 @@

    spanLeft

    spanLeft: boolean
    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodeltablerow.html b/docs/interfaces/roosterjs_content_model_types.contentmodeltablerow.html index 3cc759db46b..e1d12a910e8 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodeltablerow.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodeltablerow.html @@ -114,7 +114,7 @@

    Optional cachedElement

    Inherited from ContentModelBlockWithCache.cachedElement

    @@ -129,7 +129,7 @@

    cells

    @@ -145,7 +145,7 @@

    format

    @@ -160,7 +160,7 @@

    height

    height: number
    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodeltext.html b/docs/interfaces/roosterjs_content_model_types.contentmodeltext.html index 4442ad0a207..718b467d105 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodeltext.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodeltext.html @@ -113,7 +113,7 @@

    Optional code

    @@ -129,7 +129,7 @@

    format

    @@ -145,7 +145,7 @@

    Optional isSelected

    @@ -161,7 +161,7 @@

    Optional link

    @@ -177,7 +177,7 @@

    segmentType

    @@ -192,7 +192,7 @@

    text

    text: string
    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodelwithdataset.html b/docs/interfaces/roosterjs_content_model_types.contentmodelwithdataset.html index ecec23c090a..2e86587dff1 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodelwithdataset.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodelwithdataset.html @@ -124,7 +124,7 @@

    dataset

    dataset: DatasetFormat
    diff --git a/docs/interfaces/roosterjs_content_model_types.contentmodelwithformat.html b/docs/interfaces/roosterjs_content_model_types.contentmodelwithformat.html index f13e091ebd7..4d9dbd43874 100644 --- a/docs/interfaces/roosterjs_content_model_types.contentmodelwithformat.html +++ b/docs/interfaces/roosterjs_content_model_types.contentmodelwithformat.html @@ -133,7 +133,7 @@

    format

    format: T
    diff --git a/docs/interfaces/roosterjs_content_model_types.domtomodelcontext.html b/docs/interfaces/roosterjs_content_model_types.domtomodelcontext.html index 49a08dee708..1fa639fcc7a 100644 --- a/docs/interfaces/roosterjs_content_model_types.domtomodelcontext.html +++ b/docs/interfaces/roosterjs_content_model_types.domtomodelcontext.html @@ -141,7 +141,7 @@

    Optional addDelimiter

    Inherited from EditorContext.addDelimiterForEntity

    @@ -157,7 +157,7 @@

    Optional allowCacheE
    @@ -174,7 +174,7 @@

    blockDecorator

    @@ -190,7 +190,7 @@

    blockFormat

    @@ -206,7 +206,7 @@

    code

    @@ -222,7 +222,7 @@

    Optional darkColorHa
    @@ -238,7 +238,7 @@

    defaultElementProcessors

    @@ -255,7 +255,7 @@

    Optional defaultFormat

    Inherited from EditorContext.defaultFormat

    @@ -271,7 +271,7 @@

    defaultFormatParsers

    @@ -288,7 +288,7 @@

    defaultStyles

    @@ -304,7 +304,7 @@

    elementProcessors

    @@ -320,7 +320,7 @@

    formatParsers

    @@ -336,7 +336,7 @@

    Optional imageSelection

    Inherited from DomToModelSelectionContext.imageSelection

    @@ -352,7 +352,7 @@

    isDarkMode

    @@ -368,7 +368,7 @@

    isInSelection

    @@ -384,7 +384,7 @@

    link

    @@ -400,7 +400,7 @@

    listFormat

    @@ -416,7 +416,7 @@

    Optional regularSelection
    @@ -432,7 +432,7 @@

    segmentFormat

    @@ -448,7 +448,7 @@

    Optional selectionRoot

    Inherited from DomToModelSelectionContext.selectionRootNode

    @@ -468,7 +468,7 @@

    Optional tableSelection

    Inherited from DomToModelSelectionContext.tableSelection

    @@ -484,7 +484,7 @@

    zoomScaleFormat

    diff --git a/docs/interfaces/roosterjs_content_model_types.domtomodeldecoratorcontext.html b/docs/interfaces/roosterjs_content_model_types.domtomodeldecoratorcontext.html index 7902d0d3e57..0b2f346ce28 100644 --- a/docs/interfaces/roosterjs_content_model_types.domtomodeldecoratorcontext.html +++ b/docs/interfaces/roosterjs_content_model_types.domtomodeldecoratorcontext.html @@ -109,7 +109,7 @@

    blockDecorator

    @@ -124,7 +124,7 @@

    code

    @@ -139,7 +139,7 @@

    link

    diff --git a/docs/interfaces/roosterjs_content_model_types.domtomodelformatcontext.html b/docs/interfaces/roosterjs_content_model_types.domtomodelformatcontext.html index 2239d1faac8..84c712cdca4 100644 --- a/docs/interfaces/roosterjs_content_model_types.domtomodelformatcontext.html +++ b/docs/interfaces/roosterjs_content_model_types.domtomodelformatcontext.html @@ -111,7 +111,7 @@

    Optional allowCacheE
    allowCacheElement: boolean
    @@ -127,7 +127,7 @@

    blockFormat

    @@ -142,7 +142,7 @@

    listFormat

    @@ -157,7 +157,7 @@

    segmentFormat

    @@ -172,7 +172,7 @@

    zoomScaleFormat

    zoomScaleFormat: ZoomScaleFormat
    diff --git a/docs/interfaces/roosterjs_content_model_types.domtomodelimageselection.html b/docs/interfaces/roosterjs_content_model_types.domtomodelimageselection.html index aa1d241209e..d45c747b36d 100644 --- a/docs/interfaces/roosterjs_content_model_types.domtomodelimageselection.html +++ b/docs/interfaces/roosterjs_content_model_types.domtomodelimageselection.html @@ -102,7 +102,7 @@

    image

    image: HTMLImageElement
    diff --git a/docs/interfaces/roosterjs_content_model_types.domtomodellistformat.html b/docs/interfaces/roosterjs_content_model_types.domtomodellistformat.html index f5061757d77..9aae6e800ff 100644 --- a/docs/interfaces/roosterjs_content_model_types.domtomodellistformat.html +++ b/docs/interfaces/roosterjs_content_model_types.domtomodellistformat.html @@ -104,7 +104,7 @@

    levels

    @@ -119,7 +119,7 @@

    Optional listParent

    @@ -134,7 +134,7 @@

    threadItemCounts

    threadItemCounts: number[]
    diff --git a/docs/interfaces/roosterjs_content_model_types.domtomodeloption.html b/docs/interfaces/roosterjs_content_model_types.domtomodeloption.html index 2352254be1e..b329fc763dd 100644 --- a/docs/interfaces/roosterjs_content_model_types.domtomodeloption.html +++ b/docs/interfaces/roosterjs_content_model_types.domtomodeloption.html @@ -108,7 +108,7 @@

    Optional additionalFormat
    additionalFormatParsers: Partial<FormatParsersPerCategory>
    @@ -123,7 +123,7 @@

    Optional defaultStyledefaultStyleOverride: DefaultStyleMap

    @@ -138,7 +138,7 @@

    Optional disableCachedisableCacheElement: boolean

    @@ -154,7 +154,7 @@

    Optional formatParserformatParserOverride: Partial<FormatParsers>

    @@ -169,7 +169,7 @@

    Optional includeRoot

    includeRoot: boolean
    @@ -184,7 +184,7 @@

    Optional processorOverrid
    processorOverride: Partial<ElementProcessorMap>
    @@ -199,7 +199,7 @@

    Optional selectionRangeselectionRange: SelectionRangeEx

    diff --git a/docs/interfaces/roosterjs_content_model_types.domtomodelregularselection.html b/docs/interfaces/roosterjs_content_model_types.domtomodelregularselection.html index 90a581e078a..d7e27ddeb2c 100644 --- a/docs/interfaces/roosterjs_content_model_types.domtomodelregularselection.html +++ b/docs/interfaces/roosterjs_content_model_types.domtomodelregularselection.html @@ -106,7 +106,7 @@

    Optional endContainer

    endContainer: Node
    @@ -121,7 +121,7 @@

    Optional endOffset

    endOffset: number
    @@ -136,7 +136,7 @@

    Optional isSelection
    isSelectionCollapsed: boolean
    @@ -151,7 +151,7 @@

    Optional startContainerstartContainer: Node

    @@ -166,7 +166,7 @@

    Optional startOffset

    startOffset: number
    diff --git a/docs/interfaces/roosterjs_content_model_types.domtomodelselectioncontext.html b/docs/interfaces/roosterjs_content_model_types.domtomodelselectioncontext.html index 68b72985493..d9e5066fe9c 100644 --- a/docs/interfaces/roosterjs_content_model_types.domtomodelselectioncontext.html +++ b/docs/interfaces/roosterjs_content_model_types.domtomodelselectioncontext.html @@ -111,7 +111,7 @@

    Optional imageSelectionimageSelection: DomToModelImageSelection

    @@ -126,7 +126,7 @@

    isInSelection

    isInSelection: boolean
    @@ -141,7 +141,7 @@

    Optional regularSelection
    regularSelection: DomToModelRegularSelection
    @@ -156,7 +156,7 @@

    Optional selectionRootselectionRootNode: Node

    @@ -175,7 +175,7 @@

    Optional tableSelectiontableSelection: DomToModelTableSelection

    diff --git a/docs/interfaces/roosterjs_content_model_types.domtomodelsettings.html b/docs/interfaces/roosterjs_content_model_types.domtomodelsettings.html index c843daaa4a7..acf77428d85 100644 --- a/docs/interfaces/roosterjs_content_model_types.domtomodelsettings.html +++ b/docs/interfaces/roosterjs_content_model_types.domtomodelsettings.html @@ -111,7 +111,7 @@

    defaultElementProcessors

    defaultElementProcessors: Readonly<ElementProcessorMap>
    @@ -127,7 +127,7 @@

    defaultFormatParsers

    defaultFormatParsers: Readonly<FormatParsers>
    @@ -143,7 +143,7 @@

    defaultStyles

    defaultStyles: DefaultStyleMap
    @@ -158,7 +158,7 @@

    elementProcessors

    elementProcessors: ElementProcessorMap
    @@ -173,7 +173,7 @@

    formatParsers

    diff --git a/docs/interfaces/roosterjs_content_model_types.domtomodeltableselection.html b/docs/interfaces/roosterjs_content_model_types.domtomodeltableselection.html index 3435224a3c8..058ab8487a0 100644 --- a/docs/interfaces/roosterjs_content_model_types.domtomodeltableselection.html +++ b/docs/interfaces/roosterjs_content_model_types.domtomodeltableselection.html @@ -104,7 +104,7 @@

    firstCell

    firstCell: Coordinates
    @@ -119,7 +119,7 @@

    lastCell

    lastCell: Coordinates
    @@ -134,7 +134,7 @@

    table

    table: HTMLTableElement
    diff --git a/docs/interfaces/roosterjs_content_model_types.editorcontext.html b/docs/interfaces/roosterjs_content_model_types.editorcontext.html index b175b53c8a8..412da27e0fa 100644 --- a/docs/interfaces/roosterjs_content_model_types.editorcontext.html +++ b/docs/interfaces/roosterjs_content_model_types.editorcontext.html @@ -113,7 +113,7 @@

    Optional addDelimiteraddDelimiterForEntity: boolean

    @@ -128,7 +128,7 @@

    Optional darkColorHa
    darkColorHandler: DarkColorHandler
    @@ -143,7 +143,7 @@

    Optional defaultFormatdefaultFormat: ContentModelSegmentFormat

    @@ -158,7 +158,7 @@

    isDarkMode

    isDarkMode: boolean
    diff --git a/docs/interfaces/roosterjs_content_model_types.formathandlertypemap.html b/docs/interfaces/roosterjs_content_model_types.formathandlertypemap.html index f132974b363..45f172de57f 100644 --- a/docs/interfaces/roosterjs_content_model_types.formathandlertypemap.html +++ b/docs/interfaces/roosterjs_content_model_types.formathandlertypemap.html @@ -137,7 +137,7 @@

    backgroundColor

    backgroundColor: BackgroundColorFormat
    @@ -152,7 +152,7 @@

    bold

    @@ -167,7 +167,7 @@

    border

    border: BorderFormat
    @@ -182,7 +182,7 @@

    borderBox

    borderBox: BorderBoxFormat
    @@ -197,7 +197,7 @@

    boxShadow

    boxShadow: BoxShadowFormat
    @@ -212,7 +212,7 @@

    dataset

    dataset: DatasetFormat
    @@ -227,7 +227,7 @@

    direction

    direction: DirectionFormat
    @@ -242,7 +242,7 @@

    display

    display: DisplayFormat
    @@ -257,7 +257,7 @@

    fontFamily

    fontFamily: FontFamilyFormat
    @@ -272,7 +272,7 @@

    fontSize

    fontSize: FontSizeFormat
    @@ -287,7 +287,7 @@

    htmlAlign

    htmlAlign: HtmlAlignFormat
    @@ -302,7 +302,7 @@

    id

    @@ -317,7 +317,7 @@

    italic

    italic: ItalicFormat
    @@ -332,7 +332,7 @@

    letterSpacing

    letterSpacing: LetterSpacingFormat
    @@ -347,7 +347,7 @@

    lineHeight

    lineHeight: LineHeightFormat
    @@ -362,7 +362,7 @@

    link

    @@ -377,7 +377,7 @@

    listItemMetadata

    listItemMetadata: ListMetadataFormat
    @@ -392,7 +392,7 @@

    listItemThread

    listItemThread: ListThreadFormat
    @@ -407,7 +407,7 @@

    listLevelMetadata

    listLevelMetadata: ListMetadataFormat
    @@ -422,7 +422,7 @@

    listLevelThread

    listLevelThread: ListThreadFormat
    @@ -437,7 +437,7 @@

    listStylePosition

    listStylePosition: ListStylePositionFormat
    @@ -452,7 +452,7 @@

    listType

    listType: ListTypeFormat
    @@ -467,7 +467,7 @@

    margin

    margin: MarginFormat
    @@ -482,7 +482,7 @@

    padding

    padding: PaddingFormat
    @@ -497,7 +497,7 @@

    size

    @@ -512,7 +512,7 @@

    strike

    strike: StrikeFormat
    @@ -527,7 +527,7 @@

    superOrSubScript

    superOrSubScript: SuperOrSubScriptFormat
    @@ -542,7 +542,7 @@

    tableLayout

    tableLayout: TableLayoutFormat
    @@ -557,7 +557,7 @@

    tableSpacing

    tableSpacing: SpacingFormat
    @@ -572,7 +572,7 @@

    textAlign

    textAlign: TextAlignFormat
    @@ -587,7 +587,7 @@

    textColor

    textColor: TextColorFormat
    @@ -602,7 +602,7 @@

    textColorOnTableCell

    textColorOnTableCell: TextColorFormat
    @@ -617,7 +617,7 @@

    underline

    underline: UnderlineFormat
    @@ -632,7 +632,7 @@

    verticalAlign

    verticalAlign: VerticalAlignFormat
    @@ -647,7 +647,7 @@

    whiteSpace

    whiteSpace: WhiteSpaceFormat
    @@ -662,7 +662,7 @@

    wordBreak

    wordBreak: WordBreakFormat
    diff --git a/docs/interfaces/roosterjs_content_model_types.modeltodomblockandsegmentnode.html b/docs/interfaces/roosterjs_content_model_types.modeltodomblockandsegmentnode.html index 701eeb347b4..3aa93669e31 100644 --- a/docs/interfaces/roosterjs_content_model_types.modeltodomblockandsegmentnode.html +++ b/docs/interfaces/roosterjs_content_model_types.modeltodomblockandsegmentnode.html @@ -103,7 +103,7 @@

    block

    block: Node
    @@ -119,7 +119,7 @@

    segment

    segment: Node
    diff --git a/docs/interfaces/roosterjs_content_model_types.modeltodomcontext.html b/docs/interfaces/roosterjs_content_model_types.modeltodomcontext.html index 63d0633e7dd..9540f07a283 100644 --- a/docs/interfaces/roosterjs_content_model_types.modeltodomcontext.html +++ b/docs/interfaces/roosterjs_content_model_types.modeltodomcontext.html @@ -131,7 +131,7 @@

    Optional addDelimiter

    Inherited from EditorContext.addDelimiterForEntity

    @@ -147,7 +147,7 @@

    Optional darkColorHa
    @@ -163,7 +163,7 @@

    Optional defaultFormat

    Inherited from EditorContext.defaultFormat

    @@ -179,7 +179,7 @@

    defaultFormatAppliers

    @@ -196,7 +196,7 @@

    defaultImplicitFormatMap

    @@ -212,7 +212,7 @@

    defaultModelHandlers

    @@ -229,7 +229,7 @@

    formatAppliers

    @@ -245,7 +245,7 @@

    Optional imageSelection

    Inherited from ModelToDomSelectionContext.imageSelection

    @@ -261,7 +261,7 @@

    implicitFormat

    @@ -277,7 +277,7 @@

    isDarkMode

    @@ -293,7 +293,7 @@

    listFormat

    @@ -309,7 +309,7 @@

    modelHandlers

    @@ -325,7 +325,7 @@

    Optional onNodeCreat
    @@ -349,7 +349,7 @@

    regularSelection

    @@ -365,7 +365,7 @@

    Optional tableSelection

    Inherited from ModelToDomSelectionContext.tableSelection

    diff --git a/docs/interfaces/roosterjs_content_model_types.modeltodomformatcontext.html b/docs/interfaces/roosterjs_content_model_types.modeltodomformatcontext.html index 34753c44305..abfe3711a9e 100644 --- a/docs/interfaces/roosterjs_content_model_types.modeltodomformatcontext.html +++ b/docs/interfaces/roosterjs_content_model_types.modeltodomformatcontext.html @@ -108,7 +108,7 @@

    implicitFormat

    @@ -123,7 +123,7 @@

    listFormat

    diff --git a/docs/interfaces/roosterjs_content_model_types.modeltodomimageselection.html b/docs/interfaces/roosterjs_content_model_types.modeltodomimageselection.html index b68fd44995a..4dfcefc2aa8 100644 --- a/docs/interfaces/roosterjs_content_model_types.modeltodomimageselection.html +++ b/docs/interfaces/roosterjs_content_model_types.modeltodomimageselection.html @@ -102,7 +102,7 @@

    image

    image: HTMLImageElement
    diff --git a/docs/interfaces/roosterjs_content_model_types.modeltodomlistcontext.html b/docs/interfaces/roosterjs_content_model_types.modeltodomlistcontext.html index cf6ca7f0101..bc73b1df0b9 100644 --- a/docs/interfaces/roosterjs_content_model_types.modeltodomlistcontext.html +++ b/docs/interfaces/roosterjs_content_model_types.modeltodomlistcontext.html @@ -103,7 +103,7 @@

    nodeStack

    @@ -118,7 +118,7 @@

    threadItemCounts

    threadItemCounts: number[]
    diff --git a/docs/interfaces/roosterjs_content_model_types.modeltodomliststackitem.html b/docs/interfaces/roosterjs_content_model_types.modeltodomliststackitem.html index e8ec4c4889e..09c52bdc483 100644 --- a/docs/interfaces/roosterjs_content_model_types.modeltodomliststackitem.html +++ b/docs/interfaces/roosterjs_content_model_types.modeltodomliststackitem.html @@ -124,7 +124,7 @@

    Optional direction

    @@ -140,7 +140,7 @@

    Optional displayForD
    @@ -159,7 +159,7 @@

    Optional listStylePo
    @@ -175,7 +175,7 @@

    Optional listType

    @@ -191,7 +191,7 @@

    Optional marginBottom

    Inherited from ContentModelListItemLevelFormat.marginBottom

    @@ -207,7 +207,7 @@

    Optional marginLeft

    @@ -223,7 +223,7 @@

    Optional marginRight

    @@ -239,7 +239,7 @@

    Optional marginTop

    @@ -254,7 +254,7 @@

    node

    node: Node
    @@ -270,7 +270,7 @@

    Optional orderedStyle

    Inherited from ContentModelListItemLevelFormat.orderedStyleType

    @@ -286,7 +286,7 @@

    Optional paddingBottom

    Inherited from ContentModelListItemLevelFormat.paddingBottom

    @@ -302,7 +302,7 @@

    Optional paddingLeft

    @@ -318,7 +318,7 @@

    Optional paddingRight

    Inherited from ContentModelListItemLevelFormat.paddingRight

    @@ -334,7 +334,7 @@

    Optional paddingTop

    @@ -350,7 +350,7 @@

    Optional startNumber
    @@ -367,7 +367,7 @@

    Optional textAlign

    @@ -383,7 +383,7 @@

    Optional unorderedStyle

    Inherited from ContentModelListItemLevelFormat.unorderedStyleType

    diff --git a/docs/interfaces/roosterjs_content_model_types.modeltodomoption.html b/docs/interfaces/roosterjs_content_model_types.modeltodomoption.html index fb28ed37434..ed1fcc4228a 100644 --- a/docs/interfaces/roosterjs_content_model_types.modeltodomoption.html +++ b/docs/interfaces/roosterjs_content_model_types.modeltodomoption.html @@ -106,7 +106,7 @@

    Optional additionalFormat
    additionalFormatAppliers: Partial<FormatAppliersPerCategory>
    @@ -121,7 +121,7 @@

    Optional defaultImplicit<
    defaultImplicitFormatOverride: DefaultImplicitFormatMap
    @@ -136,7 +136,7 @@

    Optional formatApplierformatApplierOverride: Partial<FormatAppliers>

    @@ -151,7 +151,7 @@

    Optional modelHandlermodelHandlerOverride: Partial<ContentModelHandlerMap>

    @@ -166,7 +166,7 @@

    Optional onNodeCreat
    onNodeCreated: OnNodeCreated
    diff --git a/docs/interfaces/roosterjs_content_model_types.modeltodomregularselection.html b/docs/interfaces/roosterjs_content_model_types.modeltodomregularselection.html index db278d2f208..7b99ce2a3d9 100644 --- a/docs/interfaces/roosterjs_content_model_types.modeltodomregularselection.html +++ b/docs/interfaces/roosterjs_content_model_types.modeltodomregularselection.html @@ -104,7 +104,7 @@

    current

    @@ -119,7 +119,7 @@

    Optional end

    @@ -134,7 +134,7 @@

    Optional start

    diff --git a/docs/interfaces/roosterjs_content_model_types.modeltodomselectioncontext.html b/docs/interfaces/roosterjs_content_model_types.modeltodomselectioncontext.html index aef9495ff48..949a0bfe06b 100644 --- a/docs/interfaces/roosterjs_content_model_types.modeltodomselectioncontext.html +++ b/docs/interfaces/roosterjs_content_model_types.modeltodomselectioncontext.html @@ -109,7 +109,7 @@

    Optional imageSelectionimageSelection: ModelToDomImageSelection

    @@ -124,7 +124,7 @@

    regularSelection

    regularSelection: ModelToDomRegularSelection
    @@ -139,7 +139,7 @@

    Optional tableSelectiontableSelection: ModelToDomTableSelection

    diff --git a/docs/interfaces/roosterjs_content_model_types.modeltodomsettings.html b/docs/interfaces/roosterjs_content_model_types.modeltodomsettings.html index f8760c9efc9..73712f367e5 100644 --- a/docs/interfaces/roosterjs_content_model_types.modeltodomsettings.html +++ b/docs/interfaces/roosterjs_content_model_types.modeltodomsettings.html @@ -112,7 +112,7 @@

    defaultFormatAppliers

    defaultFormatAppliers: Readonly<FormatAppliers>
    @@ -128,7 +128,7 @@

    defaultImplicitFormatMap

    defaultImplicitFormatMap: DefaultImplicitFormatMap
    @@ -143,7 +143,7 @@

    defaultModelHandlers

    defaultModelHandlers: Readonly<ContentModelHandlerMap>
    @@ -159,7 +159,7 @@

    formatAppliers

    @@ -174,7 +174,7 @@

    modelHandlers

    modelHandlers: ContentModelHandlerMap
    @@ -189,7 +189,7 @@

    Optional onNodeCreat
    onNodeCreated: OnNodeCreated
    diff --git a/docs/interfaces/roosterjs_content_model_types.modeltodomtableselection.html b/docs/interfaces/roosterjs_content_model_types.modeltodomtableselection.html index fc899407bd6..fc4f7940292 100644 --- a/docs/interfaces/roosterjs_content_model_types.modeltodomtableselection.html +++ b/docs/interfaces/roosterjs_content_model_types.modeltodomtableselection.html @@ -104,7 +104,7 @@

    firstCell

    firstCell: Coordinates
    @@ -119,7 +119,7 @@

    lastCell

    lastCell: Coordinates
    @@ -134,7 +134,7 @@

    table

    table: HTMLTableElement
    diff --git a/docs/interfaces/roosterjs_content_model_types.selectable.html b/docs/interfaces/roosterjs_content_model_types.selectable.html index 39925ba9e06..56e89ad6fef 100644 --- a/docs/interfaces/roosterjs_content_model_types.selectable.html +++ b/docs/interfaces/roosterjs_content_model_types.selectable.html @@ -116,7 +116,7 @@

    Optional isSelected

    isSelected: boolean
    diff --git a/docs/interfaces/roosterjs_editor_plugins.contextmenuoptions.html b/docs/interfaces/roosterjs_editor_plugins.contextmenuoptions.html index 80cd7ed03f1..3235155ee37 100644 --- a/docs/interfaces/roosterjs_editor_plugins.contextmenuoptions.html +++ b/docs/interfaces/roosterjs_editor_plugins.contextmenuoptions.html @@ -112,7 +112,7 @@

    Optional allowDefaultallowDefaultMenu: boolean

    @@ -127,7 +127,7 @@

    Optional dismiss

    dismiss: (container: HTMLElement) => void
    @@ -169,7 +169,7 @@

    render

    render: (container: HTMLElement, items: T[], onDismiss: () => void) => void
    diff --git a/docs/interfaces/roosterjs_editor_plugins.onshowresizehandle.html b/docs/interfaces/roosterjs_editor_plugins.onshowresizehandle.html index 575f0153de2..651dc631864 100644 --- a/docs/interfaces/roosterjs_editor_plugins.onshowresizehandle.html +++ b/docs/interfaces/roosterjs_editor_plugins.onshowresizehandle.html @@ -83,7 +83,7 @@

    Callable

  • diff --git a/docs/interfaces/roosterjs_editor_types.arraydefinition.html b/docs/interfaces/roosterjs_editor_types.arraydefinition.html index 1b5388511cf..f740d1fd02c 100644 --- a/docs/interfaces/roosterjs_editor_types.arraydefinition.html +++ b/docs/interfaces/roosterjs_editor_types.arraydefinition.html @@ -121,7 +121,7 @@

    Optional allowNull

    @@ -137,7 +137,7 @@

    Optional isOptional

    @@ -152,7 +152,7 @@

    itemDef

    @@ -167,7 +167,7 @@

    Optional maxLength

    maxLength: number
    @@ -182,7 +182,7 @@

    Optional minLength

    minLength: number
    @@ -198,7 +198,7 @@

    type

    diff --git a/docs/interfaces/roosterjs_editor_types.autolinkfeaturesettings.html b/docs/interfaces/roosterjs_editor_types.autolinkfeaturesettings.html index 80525aefc35..0cad57df91f 100644 --- a/docs/interfaces/roosterjs_editor_types.autolinkfeaturesettings.html +++ b/docs/interfaces/roosterjs_editor_types.autolinkfeaturesettings.html @@ -108,7 +108,7 @@

    autoLink

    autoLink: boolean
    @@ -128,7 +128,7 @@

    unlinkWhenBackspaceAfterLink

    unlinkWhenBackspaceAfterLink: boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.basepluginevent.html b/docs/interfaces/roosterjs_editor_types.basepluginevent.html index 70b700fb927..e90a642e0ea 100644 --- a/docs/interfaces/roosterjs_editor_types.basepluginevent.html +++ b/docs/interfaces/roosterjs_editor_types.basepluginevent.html @@ -206,7 +206,7 @@

    Optional eventDataCa
    eventDataCache: {}
    @@ -231,7 +231,7 @@

    eventType

    eventType: T
    diff --git a/docs/interfaces/roosterjs_editor_types.beforecutcopyevent.html b/docs/interfaces/roosterjs_editor_types.beforecutcopyevent.html index 4281b0eea25..b8c4487cdff 100644 --- a/docs/interfaces/roosterjs_editor_types.beforecutcopyevent.html +++ b/docs/interfaces/roosterjs_editor_types.beforecutcopyevent.html @@ -116,7 +116,7 @@

    clonedRoot

    @@ -132,7 +132,7 @@

    Optional eventDataCa
    @@ -158,7 +158,7 @@

    eventType

    @@ -174,7 +174,7 @@

    isCut

    @@ -190,7 +190,7 @@

    range

    @@ -206,7 +206,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.beforecutcopyeventdata.html b/docs/interfaces/roosterjs_editor_types.beforecutcopyeventdata.html index 53aeb5a7403..a71317c8405 100644 --- a/docs/interfaces/roosterjs_editor_types.beforecutcopyeventdata.html +++ b/docs/interfaces/roosterjs_editor_types.beforecutcopyeventdata.html @@ -113,7 +113,7 @@

    clonedRoot

    clonedRoot: HTMLDivElement
    @@ -128,7 +128,7 @@

    isCut

    isCut: boolean
    @@ -143,7 +143,7 @@

    range

    range: Range
    @@ -158,7 +158,7 @@

    rawEvent

    rawEvent: ClipboardEvent
    diff --git a/docs/interfaces/roosterjs_editor_types.beforedisposeevent.html b/docs/interfaces/roosterjs_editor_types.beforedisposeevent.html index d7b8ced3e02..21bb215995b 100644 --- a/docs/interfaces/roosterjs_editor_types.beforedisposeevent.html +++ b/docs/interfaces/roosterjs_editor_types.beforedisposeevent.html @@ -109,7 +109,7 @@

    Optional eventDataCa
    @@ -135,7 +135,7 @@

    eventType

    diff --git a/docs/interfaces/roosterjs_editor_types.beforekeyboardeditingdata.html b/docs/interfaces/roosterjs_editor_types.beforekeyboardeditingdata.html index 28f6ceec7ee..5c125336ba0 100644 --- a/docs/interfaces/roosterjs_editor_types.beforekeyboardeditingdata.html +++ b/docs/interfaces/roosterjs_editor_types.beforekeyboardeditingdata.html @@ -110,7 +110,7 @@

    rawEvent

    rawEvent: KeyboardEvent
    diff --git a/docs/interfaces/roosterjs_editor_types.beforekeyboardeditingevent.html b/docs/interfaces/roosterjs_editor_types.beforekeyboardeditingevent.html index df50cbcef1b..5b3bca1cfb6 100644 --- a/docs/interfaces/roosterjs_editor_types.beforekeyboardeditingevent.html +++ b/docs/interfaces/roosterjs_editor_types.beforekeyboardeditingevent.html @@ -113,7 +113,7 @@

    Optional eventDataCa
    @@ -139,7 +139,7 @@

    eventType

    @@ -155,7 +155,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.beforepasteevent.html b/docs/interfaces/roosterjs_editor_types.beforepasteevent.html index db78b071aa3..d7a3cc9c496 100644 --- a/docs/interfaces/roosterjs_editor_types.beforepasteevent.html +++ b/docs/interfaces/roosterjs_editor_types.beforepasteevent.html @@ -124,7 +124,7 @@

    clipboardData

    @@ -140,7 +140,7 @@

    Optional eventDataCa
    @@ -166,7 +166,7 @@

    eventType

    @@ -182,7 +182,7 @@

    fragment

    @@ -198,7 +198,7 @@

    htmlAfter

    @@ -214,7 +214,7 @@

    htmlAttributes

    @@ -230,7 +230,7 @@

    htmlBefore

    @@ -246,7 +246,7 @@

    Readonly pasteType

    @@ -262,7 +262,7 @@

    sanitizingOption

    diff --git a/docs/interfaces/roosterjs_editor_types.beforepasteeventdata.html b/docs/interfaces/roosterjs_editor_types.beforepasteeventdata.html index 29d3f75fea4..43a8423d8b4 100644 --- a/docs/interfaces/roosterjs_editor_types.beforepasteeventdata.html +++ b/docs/interfaces/roosterjs_editor_types.beforepasteeventdata.html @@ -119,7 +119,7 @@

    clipboardData

    clipboardData: ClipboardData
    @@ -134,7 +134,7 @@

    fragment

    fragment: DocumentFragment
    @@ -149,7 +149,7 @@

    htmlAfter

    htmlAfter: string
    @@ -164,7 +164,7 @@

    htmlAttributes

    htmlAttributes: Record<string, string>
    @@ -179,7 +179,7 @@

    htmlBefore

    htmlBefore: string
    @@ -194,7 +194,7 @@

    Readonly pasteType

    @@ -209,7 +209,7 @@

    sanitizingOption

    sanitizingOption: Required<HtmlSanitizerOptions>
    diff --git a/docs/interfaces/roosterjs_editor_types.beforesetcontentevent.html b/docs/interfaces/roosterjs_editor_types.beforesetcontentevent.html index 15828e3b80d..1c5a2f22a33 100644 --- a/docs/interfaces/roosterjs_editor_types.beforesetcontentevent.html +++ b/docs/interfaces/roosterjs_editor_types.beforesetcontentevent.html @@ -114,7 +114,7 @@

    Optional eventDataCa
    @@ -140,7 +140,7 @@

    eventType

    @@ -156,7 +156,7 @@

    newContent

    diff --git a/docs/interfaces/roosterjs_editor_types.beforesetcontenteventdata.html b/docs/interfaces/roosterjs_editor_types.beforesetcontenteventdata.html index e2f2c86ba45..b0d93241ade 100644 --- a/docs/interfaces/roosterjs_editor_types.beforesetcontenteventdata.html +++ b/docs/interfaces/roosterjs_editor_types.beforesetcontenteventdata.html @@ -110,7 +110,7 @@

    newContent

    newContent: string
    diff --git a/docs/interfaces/roosterjs_editor_types.blockelement.html b/docs/interfaces/roosterjs_editor_types.blockelement.html index 781c71998bc..8de0496ccf4 100644 --- a/docs/interfaces/roosterjs_editor_types.blockelement.html +++ b/docs/interfaces/roosterjs_editor_types.blockelement.html @@ -115,7 +115,7 @@

    collapseToSingleElement

  • @@ -137,7 +137,7 @@

    contains

  • @@ -165,7 +165,7 @@

    equals

  • @@ -193,7 +193,7 @@

    getEndNode

  • @@ -215,7 +215,7 @@

    getStartNode

  • @@ -237,7 +237,7 @@

    getTextContent

  • @@ -259,7 +259,7 @@

    isAfter

  • diff --git a/docs/interfaces/roosterjs_editor_types.booleandefinition.html b/docs/interfaces/roosterjs_editor_types.booleandefinition.html index 459f54d315d..f47a04dcc3a 100644 --- a/docs/interfaces/roosterjs_editor_types.booleandefinition.html +++ b/docs/interfaces/roosterjs_editor_types.booleandefinition.html @@ -111,7 +111,7 @@

    Optional allowNull

    @@ -127,7 +127,7 @@

    Optional isOptional

    @@ -143,7 +143,7 @@

    type

    @@ -158,7 +158,7 @@

    Optional value

    value: boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.browserinfo.html b/docs/interfaces/roosterjs_editor_types.browserinfo.html index 39bf64a209f..83b79d63ff7 100644 --- a/docs/interfaces/roosterjs_editor_types.browserinfo.html +++ b/docs/interfaces/roosterjs_editor_types.browserinfo.html @@ -113,7 +113,7 @@

    Optional isAndroid: boolean

    @@ -128,7 +128,7 @@

    Optional isChrome: boolean

    @@ -143,7 +143,7 @@

    Optional isEdge: boolean

    @@ -158,7 +158,7 @@

    Optional isFirefox: boolean

    @@ -173,7 +173,7 @@

    Optional isIE: boolean

    @@ -188,7 +188,7 @@

    Optional isIE11OrGreater: boolean

    @@ -203,7 +203,7 @@

    Optional isIEOrEdge: boolean

    @@ -218,7 +218,7 @@

    Optional isMac: boolean

    @@ -233,7 +233,7 @@

    Optional isMobileOrTablet: boolean

    @@ -248,7 +248,7 @@

    Optional isSafari: boolean

    @@ -263,7 +263,7 @@

    Optional isWebKit: boolean

    @@ -278,7 +278,7 @@

    Optional isWin: boolean

    diff --git a/docs/interfaces/roosterjs_editor_types.buildineditfeature.html b/docs/interfaces/roosterjs_editor_types.buildineditfeature.html index 2b34290ec5c..65fdb91aa29 100644 --- a/docs/interfaces/roosterjs_editor_types.buildineditfeature.html +++ b/docs/interfaces/roosterjs_editor_types.buildineditfeature.html @@ -120,7 +120,7 @@

    Optional allowFunction

    Inherited from GenericContentEditFeature.allowFunctionKeys

    @@ -136,7 +136,7 @@

    Optional defaultDisabled<
    defaultDisabled: boolean
    @@ -152,7 +152,7 @@

    handleEvent

    @@ -202,7 +202,7 @@

    keys

    @@ -218,7 +218,7 @@

    shouldHandleEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.clipboarddata.html b/docs/interfaces/roosterjs_editor_types.clipboarddata.html index 4829ba176ac..2cc6307c120 100644 --- a/docs/interfaces/roosterjs_editor_types.clipboarddata.html +++ b/docs/interfaces/roosterjs_editor_types.clipboarddata.html @@ -112,7 +112,7 @@

    customValues

    customValues: Record<string, string>
    @@ -128,7 +128,7 @@

    Optional files

    files: File[]
    @@ -143,7 +143,7 @@

    Optional html

    html: string
    @@ -158,7 +158,7 @@

    Optional htmlFirstLe
    htmlFirstLevelChildTags: string[]
    @@ -173,7 +173,7 @@

    image

    image: File
    @@ -188,7 +188,7 @@

    Optional imageDataUr
    imageDataUri: string
    @@ -203,7 +203,7 @@

    Optional linkPreview

    linkPreview: EdgeLinkPreview
    @@ -218,7 +218,7 @@

    rawHtml

    rawHtml: string
    @@ -235,7 +235,7 @@

    Optional snapshotBeforesnapshotBeforePaste: string

    @@ -250,7 +250,7 @@

    text

    text: string
    @@ -265,7 +265,7 @@

    types

    types: string[]
    diff --git a/docs/interfaces/roosterjs_editor_types.codefeaturesettings.html b/docs/interfaces/roosterjs_editor_types.codefeaturesettings.html index f3379e002cd..a9bd2aacd5c 100644 --- a/docs/interfaces/roosterjs_editor_types.codefeaturesettings.html +++ b/docs/interfaces/roosterjs_editor_types.codefeaturesettings.html @@ -108,7 +108,7 @@

    removeCodeWhenBackspaceOnEmptyFirstLine

    removeCodeWhenBackspaceOnEmptyFirstLine: boolean
    @@ -128,7 +128,7 @@

    removeCodeWhenEnterOnEmptyLine

    removeCodeWhenEnterOnEmptyLine: boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.colorkeyandvalue.html b/docs/interfaces/roosterjs_editor_types.colorkeyandvalue.html index 4f3edace0d0..68590dbce62 100644 --- a/docs/interfaces/roosterjs_editor_types.colorkeyandvalue.html +++ b/docs/interfaces/roosterjs_editor_types.colorkeyandvalue.html @@ -104,7 +104,7 @@

    Optional darkModeCol
    darkModeColor: string
    @@ -119,7 +119,7 @@

    Optional key

    key: string
    @@ -134,7 +134,7 @@

    lightModeColor

    lightModeColor: string
    diff --git a/docs/interfaces/roosterjs_editor_types.compatiblebeforecutcopyevent.html b/docs/interfaces/roosterjs_editor_types.compatiblebeforecutcopyevent.html index d07dbc8d252..4405ad1d0ce 100644 --- a/docs/interfaces/roosterjs_editor_types.compatiblebeforecutcopyevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatiblebeforecutcopyevent.html @@ -116,7 +116,7 @@

    clonedRoot

    @@ -132,7 +132,7 @@

    Optional eventDataCa
    @@ -158,7 +158,7 @@

    eventType

    @@ -174,7 +174,7 @@

    isCut

    @@ -190,7 +190,7 @@

    range

    @@ -206,7 +206,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.compatiblebeforedisposeevent.html b/docs/interfaces/roosterjs_editor_types.compatiblebeforedisposeevent.html index 2826dc9025d..3a6a1368de9 100644 --- a/docs/interfaces/roosterjs_editor_types.compatiblebeforedisposeevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatiblebeforedisposeevent.html @@ -109,7 +109,7 @@

    Optional eventDataCa
    @@ -135,7 +135,7 @@

    eventType

    diff --git a/docs/interfaces/roosterjs_editor_types.compatiblebeforekeyboardeditingevent.html b/docs/interfaces/roosterjs_editor_types.compatiblebeforekeyboardeditingevent.html index bc01e942aa3..334c1f3af7c 100644 --- a/docs/interfaces/roosterjs_editor_types.compatiblebeforekeyboardeditingevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatiblebeforekeyboardeditingevent.html @@ -113,7 +113,7 @@

    Optional eventDataCa
    @@ -139,7 +139,7 @@

    eventType

    @@ -155,7 +155,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.compatiblebeforepasteevent.html b/docs/interfaces/roosterjs_editor_types.compatiblebeforepasteevent.html index f0626097ad6..a26c8686c66 100644 --- a/docs/interfaces/roosterjs_editor_types.compatiblebeforepasteevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatiblebeforepasteevent.html @@ -124,7 +124,7 @@

    clipboardData

    @@ -140,7 +140,7 @@

    Optional eventDataCa
    @@ -166,7 +166,7 @@

    eventType

    @@ -182,7 +182,7 @@

    fragment

    @@ -198,7 +198,7 @@

    htmlAfter

    @@ -214,7 +214,7 @@

    htmlAttributes

    @@ -230,7 +230,7 @@

    htmlBefore

    @@ -246,7 +246,7 @@

    Readonly pasteType

    @@ -262,7 +262,7 @@

    sanitizingOption

    diff --git a/docs/interfaces/roosterjs_editor_types.compatiblebeforesetcontentevent.html b/docs/interfaces/roosterjs_editor_types.compatiblebeforesetcontentevent.html index a3807e7b054..b83f8217f92 100644 --- a/docs/interfaces/roosterjs_editor_types.compatiblebeforesetcontentevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatiblebeforesetcontentevent.html @@ -114,7 +114,7 @@

    Optional eventDataCa
    @@ -140,7 +140,7 @@

    eventType

    @@ -156,7 +156,7 @@

    newContent

    diff --git a/docs/interfaces/roosterjs_editor_types.compatiblecontentchangedevent.html b/docs/interfaces/roosterjs_editor_types.compatiblecontentchangedevent.html index e7561f6b5e8..64a2e73dde8 100644 --- a/docs/interfaces/roosterjs_editor_types.compatiblecontentchangedevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatiblecontentchangedevent.html @@ -115,7 +115,7 @@

    Optional additionalData

    Inherited from ContentChangedEventData.additionalData

    @@ -126,7 +126,7 @@

    Optional data

    @@ -142,7 +142,7 @@

    Optional eventDataCa
    @@ -168,7 +168,7 @@

    eventType

    @@ -184,7 +184,7 @@

    source

    diff --git a/docs/interfaces/roosterjs_editor_types.compatibleeditimageevent.html b/docs/interfaces/roosterjs_editor_types.compatibleeditimageevent.html index 286ae7d0ec6..bf3b8f8664d 100644 --- a/docs/interfaces/roosterjs_editor_types.compatibleeditimageevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatibleeditimageevent.html @@ -117,7 +117,7 @@

    Optional eventDataCa
    @@ -143,7 +143,7 @@

    eventType

    @@ -159,7 +159,7 @@

    Readonly image

    @@ -175,7 +175,7 @@

    newSrc

    @@ -192,7 +192,7 @@

    Readonly originalSrc

    @@ -208,7 +208,7 @@

    Readonly previousSrc

    diff --git a/docs/interfaces/roosterjs_editor_types.compatibleeditorreadyevent.html b/docs/interfaces/roosterjs_editor_types.compatibleeditorreadyevent.html index 042941b062c..237e44fac43 100644 --- a/docs/interfaces/roosterjs_editor_types.compatibleeditorreadyevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatibleeditorreadyevent.html @@ -109,7 +109,7 @@

    Optional eventDataCa
    @@ -135,7 +135,7 @@

    eventType

    diff --git a/docs/interfaces/roosterjs_editor_types.compatibleentershadoweditevent.html b/docs/interfaces/roosterjs_editor_types.compatibleentershadoweditevent.html index cb150d10a9d..50b5e7a3d6e 100644 --- a/docs/interfaces/roosterjs_editor_types.compatibleentershadoweditevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatibleentershadoweditevent.html @@ -114,7 +114,7 @@

    Optional eventDataCa
    @@ -140,7 +140,7 @@

    eventType

    @@ -156,7 +156,7 @@

    fragment

    @@ -172,7 +172,7 @@

    selectionPath

    diff --git a/docs/interfaces/roosterjs_editor_types.compatibleentityoperationevent.html b/docs/interfaces/roosterjs_editor_types.compatibleentityoperationevent.html index 1155f162a0b..6e8e0f492e5 100644 --- a/docs/interfaces/roosterjs_editor_types.compatibleentityoperationevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatibleentityoperationevent.html @@ -119,7 +119,7 @@

    Optional contentForS
    @@ -136,7 +136,7 @@

    entity

    @@ -152,7 +152,7 @@

    Optional eventDataCa
    @@ -178,7 +178,7 @@

    eventType

    @@ -194,7 +194,7 @@

    operation

    @@ -210,7 +210,7 @@

    Optional rawEvent

    @@ -226,7 +226,7 @@

    Optional shouldPersist

    Inherited from EntityOperationEventData.shouldPersist

    @@ -244,7 +244,7 @@

    Optional state

    diff --git a/docs/interfaces/roosterjs_editor_types.compatibleextractcontentwithdomevent.html b/docs/interfaces/roosterjs_editor_types.compatibleextractcontentwithdomevent.html index 2855fd44fd2..2dcd9d48466 100644 --- a/docs/interfaces/roosterjs_editor_types.compatibleextractcontentwithdomevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatibleextractcontentwithdomevent.html @@ -116,7 +116,7 @@

    clonedRoot

    @@ -133,7 +133,7 @@

    Optional eventDataCa
    @@ -159,7 +159,7 @@

    eventType

    diff --git a/docs/interfaces/roosterjs_editor_types.compatibleleaveshadoweditevent.html b/docs/interfaces/roosterjs_editor_types.compatibleleaveshadoweditevent.html index ee687ec897e..adf4913a0c7 100644 --- a/docs/interfaces/roosterjs_editor_types.compatibleleaveshadoweditevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatibleleaveshadoweditevent.html @@ -109,7 +109,7 @@

    Optional eventDataCa
    @@ -135,7 +135,7 @@

    eventType

    diff --git a/docs/interfaces/roosterjs_editor_types.compatiblependingformatstatechangedevent.html b/docs/interfaces/roosterjs_editor_types.compatiblependingformatstatechangedevent.html index 1347e37d75e..cf72676d616 100644 --- a/docs/interfaces/roosterjs_editor_types.compatiblependingformatstatechangedevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatiblependingformatstatechangedevent.html @@ -111,7 +111,7 @@

    Optional eventDataCa
    @@ -137,7 +137,7 @@

    eventType

    @@ -152,7 +152,7 @@

    Optional formatCallbackformatCallback: (element: HTMLElement, isInnerNode?: boolean) => any

    @@ -191,7 +191,7 @@

    formatState

    formatState: PendableFormatState
    diff --git a/docs/interfaces/roosterjs_editor_types.compatibleplugincompositionevent.html b/docs/interfaces/roosterjs_editor_types.compatibleplugincompositionevent.html index b11c438e87a..5b69067a371 100644 --- a/docs/interfaces/roosterjs_editor_types.compatibleplugincompositionevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatibleplugincompositionevent.html @@ -110,7 +110,7 @@

    Optional eventDataCa
    @@ -136,7 +136,7 @@

    eventType

    @@ -152,7 +152,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.compatibleplugincontextmenuevent.html b/docs/interfaces/roosterjs_editor_types.compatibleplugincontextmenuevent.html index 9918a158b1a..42e126b35ba 100644 --- a/docs/interfaces/roosterjs_editor_types.compatibleplugincontextmenuevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatibleplugincontextmenuevent.html @@ -114,7 +114,7 @@

    Optional eventDataCa
    @@ -140,7 +140,7 @@

    eventType

    @@ -156,7 +156,7 @@

    items

    @@ -174,7 +174,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.compatibleplugininputevent.html b/docs/interfaces/roosterjs_editor_types.compatibleplugininputevent.html index 32a7f7db1fb..f1697863377 100644 --- a/docs/interfaces/roosterjs_editor_types.compatibleplugininputevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatibleplugininputevent.html @@ -110,7 +110,7 @@

    Optional eventDataCa
    @@ -136,7 +136,7 @@

    eventType

    @@ -152,7 +152,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.compatiblepluginkeydownevent.html b/docs/interfaces/roosterjs_editor_types.compatiblepluginkeydownevent.html index 04be1b04a0e..a976935c4e0 100644 --- a/docs/interfaces/roosterjs_editor_types.compatiblepluginkeydownevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatiblepluginkeydownevent.html @@ -110,7 +110,7 @@

    Optional eventDataCa
    @@ -136,7 +136,7 @@

    eventType

    @@ -152,7 +152,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.compatiblepluginkeypressevent.html b/docs/interfaces/roosterjs_editor_types.compatiblepluginkeypressevent.html index 6767413722e..eb57345e7d1 100644 --- a/docs/interfaces/roosterjs_editor_types.compatiblepluginkeypressevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatiblepluginkeypressevent.html @@ -110,7 +110,7 @@

    Optional eventDataCa
    @@ -136,7 +136,7 @@

    eventType

    @@ -152,7 +152,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.compatiblepluginkeyupevent.html b/docs/interfaces/roosterjs_editor_types.compatiblepluginkeyupevent.html index 81315be8dad..9906bfd3ce7 100644 --- a/docs/interfaces/roosterjs_editor_types.compatiblepluginkeyupevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatiblepluginkeyupevent.html @@ -110,7 +110,7 @@

    Optional eventDataCa
    @@ -136,7 +136,7 @@

    eventType

    @@ -152,7 +152,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.compatiblepluginmousedownevent.html b/docs/interfaces/roosterjs_editor_types.compatiblepluginmousedownevent.html index 66e683b9b14..d28fb329018 100644 --- a/docs/interfaces/roosterjs_editor_types.compatiblepluginmousedownevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatiblepluginmousedownevent.html @@ -110,7 +110,7 @@

    Optional eventDataCa
    @@ -136,7 +136,7 @@

    eventType

    @@ -152,7 +152,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.compatiblepluginmouseupevent.html b/docs/interfaces/roosterjs_editor_types.compatiblepluginmouseupevent.html index 41811cc8cfa..47ecf0aa746 100644 --- a/docs/interfaces/roosterjs_editor_types.compatiblepluginmouseupevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatiblepluginmouseupevent.html @@ -114,7 +114,7 @@

    Optional eventDataCa
    @@ -140,7 +140,7 @@

    eventType

    @@ -156,7 +156,7 @@

    Optional isClicking

    @@ -172,7 +172,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.compatiblepluginscrollevent.html b/docs/interfaces/roosterjs_editor_types.compatiblepluginscrollevent.html index b2dda2e9a8e..691ed21282a 100644 --- a/docs/interfaces/roosterjs_editor_types.compatiblepluginscrollevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatiblepluginscrollevent.html @@ -114,7 +114,7 @@

    Optional eventDataCa
    @@ -140,7 +140,7 @@

    eventType

    @@ -156,7 +156,7 @@

    rawEvent

    @@ -167,7 +167,7 @@

    scrollContainer

    diff --git a/docs/interfaces/roosterjs_editor_types.compatibleselectionchangedevent.html b/docs/interfaces/roosterjs_editor_types.compatibleselectionchangedevent.html index 61b8b8b337b..00c3a02a51b 100644 --- a/docs/interfaces/roosterjs_editor_types.compatibleselectionchangedevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatibleselectionchangedevent.html @@ -113,7 +113,7 @@

    Optional eventDataCa
    @@ -139,7 +139,7 @@

    eventType

    @@ -155,7 +155,7 @@

    selectionRangeEx

    diff --git a/docs/interfaces/roosterjs_editor_types.compatiblezoomchangedevent.html b/docs/interfaces/roosterjs_editor_types.compatiblezoomchangedevent.html index fa753eaa2aa..3979d9da991 100644 --- a/docs/interfaces/roosterjs_editor_types.compatiblezoomchangedevent.html +++ b/docs/interfaces/roosterjs_editor_types.compatiblezoomchangedevent.html @@ -115,7 +115,7 @@

    Optional eventDataCa
    @@ -141,7 +141,7 @@

    eventType

    @@ -157,7 +157,7 @@

    newZoomScale

    @@ -173,7 +173,7 @@

    oldZoomScale

    diff --git a/docs/interfaces/roosterjs_editor_types.contentchangeddata.html b/docs/interfaces/roosterjs_editor_types.contentchangeddata.html index 28a5435e8ba..621cbee5e0e 100644 --- a/docs/interfaces/roosterjs_editor_types.contentchangeddata.html +++ b/docs/interfaces/roosterjs_editor_types.contentchangeddata.html @@ -103,7 +103,7 @@

    Optional formatApiNa
    formatApiName: string
    @@ -118,7 +118,7 @@

    Optional getEntitySt
    getEntityState: () => EntityState[]
    diff --git a/docs/interfaces/roosterjs_editor_types.contentchangedevent.html b/docs/interfaces/roosterjs_editor_types.contentchangedevent.html index 0725d0900ca..8e9f0585356 100644 --- a/docs/interfaces/roosterjs_editor_types.contentchangedevent.html +++ b/docs/interfaces/roosterjs_editor_types.contentchangedevent.html @@ -115,7 +115,7 @@

    Optional additionalData

    Inherited from ContentChangedEventData.additionalData

    @@ -126,7 +126,7 @@

    Optional data

    @@ -142,7 +142,7 @@

    Optional eventDataCa
    @@ -168,7 +168,7 @@

    eventType

    @@ -184,7 +184,7 @@

    source

    diff --git a/docs/interfaces/roosterjs_editor_types.contentchangedeventdata.html b/docs/interfaces/roosterjs_editor_types.contentchangedeventdata.html index 5e788ac3f02..74fe2687c1c 100644 --- a/docs/interfaces/roosterjs_editor_types.contentchangedeventdata.html +++ b/docs/interfaces/roosterjs_editor_types.contentchangedeventdata.html @@ -112,7 +112,7 @@

    Optional additionalDataadditionalData: ContentChangedData

    @@ -122,7 +122,7 @@

    Optional data

    data: any
    @@ -137,7 +137,7 @@

    source

    source: string
    diff --git a/docs/interfaces/roosterjs_editor_types.contenteditfeaturesettings.html b/docs/interfaces/roosterjs_editor_types.contenteditfeaturesettings.html index a5e14831397..ec117524095 100644 --- a/docs/interfaces/roosterjs_editor_types.contenteditfeaturesettings.html +++ b/docs/interfaces/roosterjs_editor_types.contenteditfeaturesettings.html @@ -177,7 +177,7 @@

    autoBullet

    @@ -198,7 +198,7 @@

    autoBulletList

    @@ -219,7 +219,7 @@

    autoHyphen

    @@ -238,7 +238,7 @@

    autoLink

    @@ -259,7 +259,7 @@

    autoNumberingList

    @@ -280,7 +280,7 @@

    backspaceAfterEntity

    @@ -297,7 +297,7 @@

    clickOnEntity

    @@ -314,7 +314,7 @@

    defaultShortcut

    @@ -335,7 +335,7 @@

    deleteBeforeEntity

    @@ -352,7 +352,7 @@

    deleteTableWithBackspace

    @@ -369,7 +369,7 @@

    enterBeforeReadonlyEntity

    @@ -388,7 +388,7 @@

    escapeFromEntity

    @@ -405,7 +405,7 @@

    indentTableOnTab

    @@ -421,7 +421,7 @@

    indentWhenAltShiftRight

    @@ -442,7 +442,7 @@

    indentWhenTab

    @@ -463,7 +463,7 @@

    indentWhenTabText

    @@ -484,7 +484,7 @@

    insertLineBeforeStructuredNodeFeature

    @@ -506,7 +506,7 @@

    maintainListChain

    @@ -522,7 +522,7 @@

    maintainListChainWhenDelete

    @@ -538,7 +538,7 @@

    markdownBold

    @@ -559,7 +559,7 @@

    markdownInlineCode

    @@ -580,7 +580,7 @@

    markdownItalic

    @@ -601,7 +601,7 @@

    markdownStrikethru

    @@ -622,7 +622,7 @@

    mergeInNewLineWhenBackspaceOnFirstChar

    @@ -643,7 +643,7 @@

    mergeListOnBackspaceAfterList

    @@ -664,7 +664,7 @@

    moveBetweenDelimitersFeature

    @@ -680,7 +680,7 @@

    noCycleCursorMove

    @@ -702,7 +702,7 @@

    outdentWhenAltShiftLeft

    @@ -723,7 +723,7 @@

    outdentWhenBackspaceOnEmptyFirstLine

    @@ -744,7 +744,7 @@

    outdentWhenEnterOnEmptyLine

    @@ -765,7 +765,7 @@

    outdentWhenShiftTab

    @@ -786,7 +786,7 @@

    outdentWhenTabText

    @@ -804,7 +804,7 @@

    removeCodeWhenBackspaceOnEmptyFirstLine

    @@ -825,7 +825,7 @@

    removeCodeWhenEnterOnEmptyLine

    @@ -846,7 +846,7 @@

    removeEntityBetweenDelimiters

    @@ -862,7 +862,7 @@

    tabInTable

    @@ -883,7 +883,7 @@

    unlinkWhenBackspaceAfterLink

    @@ -904,7 +904,7 @@

    unquoteWhenBackspaceOnEmptyFirstLine

    @@ -925,7 +925,7 @@

    unquoteWhenEnterOnEmptyLine

    @@ -946,7 +946,7 @@

    upDownInTable

    diff --git a/docs/interfaces/roosterjs_editor_types.contentmetadatabase.html b/docs/interfaces/roosterjs_editor_types.contentmetadatabase.html index c4039f0af19..a577e72d490 100644 --- a/docs/interfaces/roosterjs_editor_types.contentmetadatabase.html +++ b/docs/interfaces/roosterjs_editor_types.contentmetadatabase.html @@ -122,7 +122,7 @@

    isDarkMode

    isDarkMode: boolean
    @@ -132,7 +132,7 @@

    type

    type: T
    diff --git a/docs/interfaces/roosterjs_editor_types.contextmenuprovider.html b/docs/interfaces/roosterjs_editor_types.contextmenuprovider.html index 940be854217..cb3222aa5e8 100644 --- a/docs/interfaces/roosterjs_editor_types.contextmenuprovider.html +++ b/docs/interfaces/roosterjs_editor_types.contextmenuprovider.html @@ -121,7 +121,7 @@

    dispose

    @@ -153,7 +153,7 @@

    getContextMenuItems

    getContextMenuItems: (target: Node) => T[]
    @@ -185,7 +185,7 @@

    getName

    @@ -216,7 +216,7 @@

    initialize

    @@ -260,7 +260,7 @@

    Optional onPluginEve
    @@ -304,7 +304,7 @@

    Optional willHandleE
    diff --git a/docs/interfaces/roosterjs_editor_types.coordinates.html b/docs/interfaces/roosterjs_editor_types.coordinates.html index 7ce471fff23..04e117cbe5e 100644 --- a/docs/interfaces/roosterjs_editor_types.coordinates.html +++ b/docs/interfaces/roosterjs_editor_types.coordinates.html @@ -103,7 +103,7 @@

    x

    x: number
    @@ -118,7 +118,7 @@

    y

    y: number
    diff --git a/docs/interfaces/roosterjs_editor_types.copypastepluginstate.html b/docs/interfaces/roosterjs_editor_types.copypastepluginstate.html index 84572c7516d..1f1a59f1979 100644 --- a/docs/interfaces/roosterjs_editor_types.copypastepluginstate.html +++ b/docs/interfaces/roosterjs_editor_types.copypastepluginstate.html @@ -102,7 +102,7 @@

    allowedCustomPasteType

    allowedCustomPasteType: string[]
    diff --git a/docs/interfaces/roosterjs_editor_types.coreapimap.html b/docs/interfaces/roosterjs_editor_types.coreapimap.html index de7c50385f4..53b107d5b7f 100644 --- a/docs/interfaces/roosterjs_editor_types.coreapimap.html +++ b/docs/interfaces/roosterjs_editor_types.coreapimap.html @@ -128,7 +128,7 @@

    addUndoSnapshot

    addUndoSnapshot: AddUndoSnapshot
    @@ -158,7 +158,7 @@

    attachDomEvent

    attachDomEvent: AttachDomEvent
    @@ -187,7 +187,7 @@

    createPasteFragment

    createPasteFragment: CreatePasteFragment
    @@ -220,7 +220,7 @@

    ensureTypeInContainer

    ensureTypeInContainer: EnsureTypeInContainer
    @@ -249,7 +249,7 @@

    focus

    focus: Focus
    @@ -269,7 +269,7 @@

    getContent

    getContent: GetContent
    @@ -295,7 +295,7 @@

    getPendableFormatState

    getPendableFormatState: GetPendableFormatState
    @@ -321,7 +321,7 @@

    getSelectionRange

    getSelectionRange: GetSelectionRange
    @@ -347,7 +347,7 @@

    getSelectionRangeEx

    getSelectionRangeEx: GetSelectionRangeEx
    @@ -373,7 +373,7 @@

    getStyleBasedFormatState

    getStyleBasedFormatState: GetStyleBasedFormatState
    @@ -396,7 +396,7 @@

    hasFocus

    hasFocus: HasFocus
    @@ -419,7 +419,7 @@

    insertNode

    insertNode: InsertNode
    @@ -442,7 +442,7 @@

    restoreUndoSnapshot

    restoreUndoSnapshot: RestoreUndoSnapshot
    @@ -465,7 +465,7 @@

    select

    select: Select
    @@ -498,7 +498,7 @@

    selectImage

    selectImage: SelectImage
    @@ -527,7 +527,7 @@

    selectRange

    selectRange: SelectRange
    @@ -555,7 +555,7 @@

    selectTable

    selectTable: SelectTable
    @@ -588,7 +588,7 @@

    setContent

    setContent: SetContent
    @@ -615,7 +615,7 @@

    switchShadowEdit

    switchShadowEdit: SwitchShadowEdit
    @@ -638,7 +638,7 @@

    transformColor

    transformColor: TransformColor
    @@ -677,7 +677,7 @@

    triggerEvent

    triggerEvent: TriggerEvent
    diff --git a/docs/interfaces/roosterjs_editor_types.coreplugins.html b/docs/interfaces/roosterjs_editor_types.coreplugins.html index 703c5eba5ee..aa3d4e45a16 100644 --- a/docs/interfaces/roosterjs_editor_types.coreplugins.html +++ b/docs/interfaces/roosterjs_editor_types.coreplugins.html @@ -114,7 +114,7 @@

    Readonly copyPaste

    @@ -129,7 +129,7 @@

    Readonly domEvent

    @@ -144,7 +144,7 @@

    Readonly edit

    @@ -159,7 +159,7 @@

    Readonly entity

    @@ -174,7 +174,7 @@

    Readonly imageSelectionimageSelection: EditorPlugin

    @@ -189,7 +189,7 @@

    Readonly lifecycle

    @@ -204,7 +204,7 @@

    Readonly mouseUp

    mouseUp: EditorPlugin
    @@ -220,7 +220,7 @@

    Readonly normalizeTablenormalizeTable: EditorPlugin

    @@ -235,7 +235,7 @@

    Readonly pendingFormatpendingFormatState: PluginWithState<PendingFormatStatePluginState>

    @@ -250,7 +250,7 @@

    Readonly typeAfterLi
    typeAfterLink: EditorPlugin
    @@ -268,7 +268,7 @@

    Readonly typeInContainer<
    typeInContainer: EditorPlugin
    @@ -283,7 +283,7 @@

    Readonly undo

    diff --git a/docs/interfaces/roosterjs_editor_types.createelementdata.html b/docs/interfaces/roosterjs_editor_types.createelementdata.html index 3d58514b583..3db231d4e9d 100644 --- a/docs/interfaces/roosterjs_editor_types.createelementdata.html +++ b/docs/interfaces/roosterjs_editor_types.createelementdata.html @@ -108,7 +108,7 @@

    Optional attributes

    attributes: Record<string, string>
    @@ -123,7 +123,7 @@

    Optional children

    children: (string | CreateElementData)[]
    @@ -138,7 +138,7 @@

    Optional className

    className: string
    @@ -153,7 +153,7 @@

    Optional dataset

    dataset: Record<string, string>
    @@ -168,7 +168,7 @@

    Optional namespace

    namespace: string
    @@ -183,7 +183,7 @@

    Optional style

    style: string
    @@ -198,7 +198,7 @@

    tag

    tag: string
    diff --git a/docs/interfaces/roosterjs_editor_types.cursorfeaturesettings.html b/docs/interfaces/roosterjs_editor_types.cursorfeaturesettings.html index 17c277810ee..45ff3dae00c 100644 --- a/docs/interfaces/roosterjs_editor_types.cursorfeaturesettings.html +++ b/docs/interfaces/roosterjs_editor_types.cursorfeaturesettings.html @@ -107,7 +107,7 @@

    noCycleCursorMove

    noCycleCursorMove: boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.customdata.html b/docs/interfaces/roosterjs_editor_types.customdata.html index e0bc45e8f78..c2300ef0a94 100644 --- a/docs/interfaces/roosterjs_editor_types.customdata.html +++ b/docs/interfaces/roosterjs_editor_types.customdata.html @@ -103,7 +103,7 @@

    Optional disposer

    disposer: (value: any) => void
    @@ -140,7 +140,7 @@

    value

    value: any
    diff --git a/docs/interfaces/roosterjs_editor_types.customizedefinition.html b/docs/interfaces/roosterjs_editor_types.customizedefinition.html index 920f5ce7e21..f15e0c5482a 100644 --- a/docs/interfaces/roosterjs_editor_types.customizedefinition.html +++ b/docs/interfaces/roosterjs_editor_types.customizedefinition.html @@ -112,7 +112,7 @@

    Optional allowNull

    @@ -128,7 +128,7 @@

    Optional isOptional

    @@ -144,7 +144,7 @@

    type

    @@ -159,7 +159,7 @@

    validator

    validator: (input: any) => boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.customreplacement.html b/docs/interfaces/roosterjs_editor_types.customreplacement.html index 7f8769b0353..8d6a9573513 100644 --- a/docs/interfaces/roosterjs_editor_types.customreplacement.html +++ b/docs/interfaces/roosterjs_editor_types.customreplacement.html @@ -105,7 +105,7 @@

    matchSourceCaseSensitive

    matchSourceCaseSensitive: boolean
    @@ -120,7 +120,7 @@

    replacementHTML

    replacementHTML: string
    @@ -135,7 +135,7 @@

    Optional shouldReplaceshouldReplace: (replacement: CustomReplacement, content: string, sourceEditor?: IEditor) => boolean

    @@ -193,7 +193,7 @@

    sourceString

    sourceString: string
    diff --git a/docs/interfaces/roosterjs_editor_types.darkcolorhandler.html b/docs/interfaces/roosterjs_editor_types.darkcolorhandler.html index 4ed01572b10..b233684f930 100644 --- a/docs/interfaces/roosterjs_editor_types.darkcolorhandler.html +++ b/docs/interfaces/roosterjs_editor_types.darkcolorhandler.html @@ -111,7 +111,7 @@

    findLightColorFromDarkColor

  • @@ -142,7 +142,7 @@

    getKnownColorsCopy

  • @@ -164,7 +164,7 @@

    parseColorValue

  • @@ -203,7 +203,7 @@

    registerColor

  • @@ -247,7 +247,7 @@

    reset

  • @@ -269,7 +269,7 @@

    transformElementColor

  • diff --git a/docs/interfaces/roosterjs_editor_types.defaultformat.html b/docs/interfaces/roosterjs_editor_types.defaultformat.html index 02281961c47..f80cd0a2698 100644 --- a/docs/interfaces/roosterjs_editor_types.defaultformat.html +++ b/docs/interfaces/roosterjs_editor_types.defaultformat.html @@ -110,7 +110,7 @@

    Optional backgroundColor<
    backgroundColor: string
    @@ -125,7 +125,7 @@

    Optional backgroundColors
    backgroundColors: ModeIndependentColor
    @@ -140,7 +140,7 @@

    Optional bold

    bold: boolean
    @@ -155,7 +155,7 @@

    Optional fontFamily

    fontFamily: string
    @@ -170,7 +170,7 @@

    Optional fontSize

    fontSize: string
    @@ -185,7 +185,7 @@

    Optional italic

    italic: boolean
    @@ -200,7 +200,7 @@

    Optional textColor

    textColor: string
    @@ -215,7 +215,7 @@

    Optional textColors

    @@ -230,7 +230,7 @@

    Optional underline

    underline: boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.definitionbase.html b/docs/interfaces/roosterjs_editor_types.definitionbase.html index ea6e42a4a02..dab51bba495 100644 --- a/docs/interfaces/roosterjs_editor_types.definitionbase.html +++ b/docs/interfaces/roosterjs_editor_types.definitionbase.html @@ -132,7 +132,7 @@

    Optional allowNull

    allowNull: boolean
    @@ -147,7 +147,7 @@

    Optional isOptional

    isOptional: boolean
    @@ -162,7 +162,7 @@

    type

    type: T
    diff --git a/docs/interfaces/roosterjs_editor_types.domeventhandlerobject.html b/docs/interfaces/roosterjs_editor_types.domeventhandlerobject.html index 4053f962f5b..77b53c0bbd9 100644 --- a/docs/interfaces/roosterjs_editor_types.domeventhandlerobject.html +++ b/docs/interfaces/roosterjs_editor_types.domeventhandlerobject.html @@ -103,7 +103,7 @@

    beforeDispatch

    beforeDispatch: DOMEventHandlerFunction<Event>
    @@ -119,7 +119,7 @@

    pluginEventType

    diff --git a/docs/interfaces/roosterjs_editor_types.domeventpluginstate.html b/docs/interfaces/roosterjs_editor_types.domeventpluginstate.html index a0b87a18811..50e57a2c85f 100644 --- a/docs/interfaces/roosterjs_editor_types.domeventpluginstate.html +++ b/docs/interfaces/roosterjs_editor_types.domeventpluginstate.html @@ -108,7 +108,7 @@

    contextMenuProviders

    contextMenuProviders: ContextMenuProvider<any>[]
    @@ -123,7 +123,7 @@

    imageSelectionRange

    imageSelectionRange: ImageSelectionRange
    @@ -138,7 +138,7 @@

    isInIME

    isInIME: boolean
    @@ -153,7 +153,7 @@

    scrollContainer

    scrollContainer: HTMLElement
    @@ -168,7 +168,7 @@

    selectionRange

    selectionRange: Range
    @@ -183,7 +183,7 @@

    stopPrintableKeyboardEventPropagation

    stopPrintableKeyboardEventPropagation: boolean
    @@ -198,7 +198,7 @@

    tableSelectionRange

    tableSelectionRange: TableSelectionRange
    diff --git a/docs/interfaces/roosterjs_editor_types.edgelinkpreview.html b/docs/interfaces/roosterjs_editor_types.edgelinkpreview.html index 0a42d044f26..686df4b02f2 100644 --- a/docs/interfaces/roosterjs_editor_types.edgelinkpreview.html +++ b/docs/interfaces/roosterjs_editor_types.edgelinkpreview.html @@ -106,7 +106,7 @@

    domain

    domain: string
    @@ -121,7 +121,7 @@

    preferred_format

    preferred_format: string
    @@ -136,7 +136,7 @@

    title

    title: string
    @@ -151,7 +151,7 @@

    type

    type: string
    @@ -166,7 +166,7 @@

    url

    url: string
    diff --git a/docs/interfaces/roosterjs_editor_types.editimageevent.html b/docs/interfaces/roosterjs_editor_types.editimageevent.html index 83110947656..a037ed56d38 100644 --- a/docs/interfaces/roosterjs_editor_types.editimageevent.html +++ b/docs/interfaces/roosterjs_editor_types.editimageevent.html @@ -117,7 +117,7 @@

    Optional eventDataCa
    @@ -143,7 +143,7 @@

    eventType

    @@ -159,7 +159,7 @@

    Readonly image

    @@ -175,7 +175,7 @@

    newSrc

    @@ -192,7 +192,7 @@

    Readonly originalSrc

    @@ -208,7 +208,7 @@

    Readonly previousSrc

    diff --git a/docs/interfaces/roosterjs_editor_types.editimageeventdata.html b/docs/interfaces/roosterjs_editor_types.editimageeventdata.html index 77bb232856b..51a76eed0fa 100644 --- a/docs/interfaces/roosterjs_editor_types.editimageeventdata.html +++ b/docs/interfaces/roosterjs_editor_types.editimageeventdata.html @@ -113,7 +113,7 @@

    Readonly image

    image: HTMLImageElement
    @@ -128,7 +128,7 @@

    newSrc

    newSrc: string
    @@ -144,7 +144,7 @@

    Readonly originalSrc

    originalSrc: string
    @@ -159,7 +159,7 @@

    Readonly previousSrc

    previousSrc: string
    diff --git a/docs/interfaces/roosterjs_editor_types.editorcore.html b/docs/interfaces/roosterjs_editor_types.editorcore.html index 246629408b1..73c4093931a 100644 --- a/docs/interfaces/roosterjs_editor_types.editorcore.html +++ b/docs/interfaces/roosterjs_editor_types.editorcore.html @@ -133,7 +133,7 @@

    Readonly api

    @@ -148,7 +148,7 @@

    Readonly contentDiv

    contentDiv: HTMLDivElement
    @@ -163,7 +163,7 @@

    darkColorHandler

    darkColorHandler: DarkColorHandler
    @@ -179,7 +179,7 @@

    getVisibleViewport

    getVisibleViewport: () => Rect
    @@ -209,7 +209,7 @@

    Optional imageSelectionimageSelectionBorderColor: string

    @@ -224,7 +224,7 @@

    Readonly originalApi

    originalApi: CoreApiMap
    @@ -239,7 +239,7 @@

    Readonly plugins

    plugins: EditorPlugin[]
    @@ -254,7 +254,7 @@

    sizeTransformer

    sizeTransformer: SizeTransformer
    @@ -271,7 +271,7 @@

    Readonly trustedHTMLHandlertrustedHTMLHandler: TrustedHTMLHandler

    @@ -288,7 +288,7 @@

    zoomScale

    zoomScale: number
    diff --git a/docs/interfaces/roosterjs_editor_types.editoroptions.html b/docs/interfaces/roosterjs_editor_types.editoroptions.html index 4b8dde3ed73..10cc009a9fe 100644 --- a/docs/interfaces/roosterjs_editor_types.editoroptions.html +++ b/docs/interfaces/roosterjs_editor_types.editoroptions.html @@ -129,7 +129,7 @@

    Optional allowKeyboardallowKeyboardEventPropagation: boolean

    @@ -147,7 +147,7 @@

    Optional allowedCustomallowedCustomPasteType: string[]

    @@ -163,7 +163,7 @@

    Optional coreApiOver
    coreApiOverride: Partial<CoreApiMap>
    @@ -179,7 +179,7 @@

    Optional corePluginO
    corePluginOverride: Partial<CorePlugins>
    @@ -195,7 +195,7 @@

    Optional defaultFormatdefaultFormat: DefaultFormat

    @@ -212,7 +212,7 @@

    Optional doNotAdjust
    doNotAdjustEditorColor: boolean
    @@ -227,7 +227,7 @@

    Optional experimentalFeat
    @@ -242,7 +242,7 @@

    Optional getDarkColo
    getDarkColor: (lightColor: string) => string
    @@ -279,7 +279,7 @@

    Optional getVisibleV
    getVisibleViewport: () => Rect
    @@ -309,7 +309,7 @@

    Optional imageSelectionimageSelectionBorderColor: string

    @@ -324,7 +324,7 @@

    Optional inDarkMode<
    inDarkMode: boolean
    @@ -339,7 +339,7 @@

    Optional initialContentinitialContent: string

    @@ -355,7 +355,7 @@

    Optional onExternalC
    onExternalContentTransform: (element: HTMLElement, fromDarkMode: boolean, toDarkMode: boolean, darkColorHandler: DarkColorHandler) => void
    @@ -395,7 +395,7 @@

    Optional plugins

    plugins: EditorPlugin[]
    @@ -413,7 +413,7 @@

    Optional scrollContainer<
    scrollContainer: HTMLElement
    @@ -429,7 +429,7 @@

    Optional sizeTransformer<
    sizeTransformer: SizeTransformer
    @@ -446,7 +446,7 @@

    Optional trustedHTMLHandlertrustedHTMLHandler: TrustedHTMLHandler

    @@ -463,7 +463,7 @@

    Optional undoMetadataundoMetadataSnapshotService: UndoSnapshotsService<Snapshot>

    @@ -479,7 +479,7 @@

    Optional undoSnapshotundoSnapshotService: UndoSnapshotsService<string>

    @@ -497,7 +497,7 @@

    Optional zoomScale

    zoomScale: number
    diff --git a/docs/interfaces/roosterjs_editor_types.editorplugin.html b/docs/interfaces/roosterjs_editor_types.editorplugin.html index b9e05513304..2e828a67860 100644 --- a/docs/interfaces/roosterjs_editor_types.editorplugin.html +++ b/docs/interfaces/roosterjs_editor_types.editorplugin.html @@ -141,7 +141,7 @@

    dispose

    dispose: () => void
    @@ -173,7 +173,7 @@

    getName

    getName: () => string
    @@ -203,7 +203,7 @@

    initialize

    initialize: (editor: IEditor) => void
    @@ -246,7 +246,7 @@

    Optional onPluginEve
    onPluginEvent: (event: PluginEvent) => void
    @@ -289,7 +289,7 @@

    Optional willHandleE
    willHandleEventExclusively: (event: PluginEvent) => boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.editorreadyevent.html b/docs/interfaces/roosterjs_editor_types.editorreadyevent.html index 142b9f696e8..24aa819f839 100644 --- a/docs/interfaces/roosterjs_editor_types.editorreadyevent.html +++ b/docs/interfaces/roosterjs_editor_types.editorreadyevent.html @@ -109,7 +109,7 @@

    Optional eventDataCa
    @@ -135,7 +135,7 @@

    eventType

    diff --git a/docs/interfaces/roosterjs_editor_types.editorundostate.html b/docs/interfaces/roosterjs_editor_types.editorundostate.html index fcb0f9a396e..c4b1f38ced2 100644 --- a/docs/interfaces/roosterjs_editor_types.editorundostate.html +++ b/docs/interfaces/roosterjs_editor_types.editorundostate.html @@ -108,7 +108,7 @@

    Optional canRedo

    canRedo: boolean
    @@ -123,7 +123,7 @@

    Optional canUndo

    canUndo: boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.editpluginstate.html b/docs/interfaces/roosterjs_editor_types.editpluginstate.html index c3ced153f01..da23f240b13 100644 --- a/docs/interfaces/roosterjs_editor_types.editpluginstate.html +++ b/docs/interfaces/roosterjs_editor_types.editpluginstate.html @@ -102,7 +102,7 @@

    features

    features: Record<number, GenericContentEditFeature<PluginEvent>[]>
    diff --git a/docs/interfaces/roosterjs_editor_types.elementbasedformatstate.html b/docs/interfaces/roosterjs_editor_types.elementbasedformatstate.html index 894feacadb6..51f01222d31 100644 --- a/docs/interfaces/roosterjs_editor_types.elementbasedformatstate.html +++ b/docs/interfaces/roosterjs_editor_types.elementbasedformatstate.html @@ -119,7 +119,7 @@

    Optional canAddImage
    canAddImageAltText: boolean
    @@ -134,7 +134,7 @@

    Optional canMergeTab
    canMergeTableCell: boolean
    @@ -149,7 +149,7 @@

    Optional canUnlink

    canUnlink: boolean
    @@ -164,7 +164,7 @@

    Optional headerLevel

    headerLevel: number
    @@ -179,7 +179,7 @@

    Optional isBlockQuot
    isBlockQuote: boolean
    @@ -194,7 +194,7 @@

    Optional isBullet

    isBullet: boolean
    @@ -209,7 +209,7 @@

    Optional isCodeBlock
    isCodeBlock: boolean
    @@ -224,7 +224,7 @@

    Optional isCodeInlin
    isCodeInline: boolean
    @@ -239,7 +239,7 @@

    Optional isInTable

    isInTable: boolean
    @@ -254,7 +254,7 @@

    Optional isMultiline
    isMultilineSelection: boolean
    @@ -269,7 +269,7 @@

    Optional isNumbering

    isNumbering: boolean
    @@ -284,7 +284,7 @@

    Optional tableFormat

    tableFormat: TableFormat
    @@ -299,7 +299,7 @@

    Optional tableHasHea
    tableHasHeader: boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.entershadoweditevent.html b/docs/interfaces/roosterjs_editor_types.entershadoweditevent.html index 214af5f2cbb..5bf3f2549d3 100644 --- a/docs/interfaces/roosterjs_editor_types.entershadoweditevent.html +++ b/docs/interfaces/roosterjs_editor_types.entershadoweditevent.html @@ -114,7 +114,7 @@

    Optional eventDataCa
    @@ -140,7 +140,7 @@

    eventType

    @@ -156,7 +156,7 @@

    fragment

    @@ -172,7 +172,7 @@

    selectionPath

    diff --git a/docs/interfaces/roosterjs_editor_types.entershadowediteventdata.html b/docs/interfaces/roosterjs_editor_types.entershadowediteventdata.html index d5dfb2dec3c..63998e6e358 100644 --- a/docs/interfaces/roosterjs_editor_types.entershadowediteventdata.html +++ b/docs/interfaces/roosterjs_editor_types.entershadowediteventdata.html @@ -111,7 +111,7 @@

    fragment

    fragment: DocumentFragment
    @@ -126,7 +126,7 @@

    selectionPath

    selectionPath: SelectionPath
    diff --git a/docs/interfaces/roosterjs_editor_types.entity.html b/docs/interfaces/roosterjs_editor_types.entity.html index 0ba4c1221c8..30e11e0ee31 100644 --- a/docs/interfaces/roosterjs_editor_types.entity.html +++ b/docs/interfaces/roosterjs_editor_types.entity.html @@ -110,7 +110,7 @@

    id

    id: string
    @@ -125,7 +125,7 @@

    isReadonly

    isReadonly: boolean
    @@ -140,7 +140,7 @@

    type

    type: string
    @@ -155,7 +155,7 @@

    wrapper

    wrapper: HTMLElement
    diff --git a/docs/interfaces/roosterjs_editor_types.entityfeaturesettings.html b/docs/interfaces/roosterjs_editor_types.entityfeaturesettings.html index 724e679e1a8..1463c347c23 100644 --- a/docs/interfaces/roosterjs_editor_types.entityfeaturesettings.html +++ b/docs/interfaces/roosterjs_editor_types.entityfeaturesettings.html @@ -113,7 +113,7 @@

    backspaceAfterEntity

    backspaceAfterEntity: boolean
    @@ -129,7 +129,7 @@

    clickOnEntity

    clickOnEntity: boolean
    @@ -145,7 +145,7 @@

    deleteBeforeEntity

    deleteBeforeEntity: boolean
    @@ -161,7 +161,7 @@

    enterBeforeReadonlyEntity

    enterBeforeReadonlyEntity: boolean
    @@ -179,7 +179,7 @@

    escapeFromEntity

    escapeFromEntity: boolean
    @@ -195,7 +195,7 @@

    moveBetweenDelimitersFeature

    moveBetweenDelimitersFeature: boolean
    @@ -210,7 +210,7 @@

    removeEntityBetweenDelimiters

    removeEntityBetweenDelimiters: boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.entityoperationevent.html b/docs/interfaces/roosterjs_editor_types.entityoperationevent.html index 32ca0ec858f..edd19919ef0 100644 --- a/docs/interfaces/roosterjs_editor_types.entityoperationevent.html +++ b/docs/interfaces/roosterjs_editor_types.entityoperationevent.html @@ -119,7 +119,7 @@

    Optional contentForS
    @@ -136,7 +136,7 @@

    entity

    @@ -152,7 +152,7 @@

    Optional eventDataCa
    @@ -178,7 +178,7 @@

    eventType

    @@ -194,7 +194,7 @@

    operation

    @@ -210,7 +210,7 @@

    Optional rawEvent

    @@ -226,7 +226,7 @@

    Optional shouldPersist

    Inherited from EntityOperationEventData.shouldPersist

    @@ -244,7 +244,7 @@

    Optional state

    diff --git a/docs/interfaces/roosterjs_editor_types.entityoperationeventdata.html b/docs/interfaces/roosterjs_editor_types.entityoperationeventdata.html index 3531459427d..bbfb45b6d18 100644 --- a/docs/interfaces/roosterjs_editor_types.entityoperationeventdata.html +++ b/docs/interfaces/roosterjs_editor_types.entityoperationeventdata.html @@ -115,7 +115,7 @@

    Optional contentForS
    contentForShadowEntity: DocumentFragment
    @@ -131,7 +131,7 @@

    entity

    entity: Entity
    @@ -146,7 +146,7 @@

    operation

    @@ -161,7 +161,7 @@

    Optional rawEvent

    rawEvent: Event
    @@ -176,7 +176,7 @@

    Optional shouldPersistshouldPersist: boolean

    @@ -193,7 +193,7 @@

    Optional state

    state: string
    diff --git a/docs/interfaces/roosterjs_editor_types.entitypluginstate.html b/docs/interfaces/roosterjs_editor_types.entitypluginstate.html index 8c200a84797..e1aa5b0c39d 100644 --- a/docs/interfaces/roosterjs_editor_types.entitypluginstate.html +++ b/docs/interfaces/roosterjs_editor_types.entitypluginstate.html @@ -105,7 +105,7 @@

    Optional clickingPointclickingPoint: { pageX: number; pageY: number }

    @@ -133,7 +133,7 @@

    entityMap

    entityMap: Record<string, KnownEntityItem>
    @@ -148,7 +148,7 @@

    Optional knownEntity
    knownEntityElements: HTMLElement[]
    @@ -165,7 +165,7 @@

    Optional shadowEntityshadowEntityCache: Record<string, HTMLElement>

    diff --git a/docs/interfaces/roosterjs_editor_types.entitystate.html b/docs/interfaces/roosterjs_editor_types.entitystate.html index 6cb0e21426a..6c6340f3bb9 100644 --- a/docs/interfaces/roosterjs_editor_types.entitystate.html +++ b/docs/interfaces/roosterjs_editor_types.entitystate.html @@ -104,7 +104,7 @@

    id

    id: string
    @@ -119,7 +119,7 @@

    state

    state: string
    @@ -136,7 +136,7 @@

    type

    type: string
    diff --git a/docs/interfaces/roosterjs_editor_types.extractclipboardeventoption.html b/docs/interfaces/roosterjs_editor_types.extractclipboardeventoption.html index 368a8162ae4..6471d668107 100644 --- a/docs/interfaces/roosterjs_editor_types.extractclipboardeventoption.html +++ b/docs/interfaces/roosterjs_editor_types.extractclipboardeventoption.html @@ -116,7 +116,7 @@

    Optional allowLinkPr
    @@ -134,7 +134,7 @@

    Optional allowedCustom

    Inherited from ExtractClipboardItemsOption.allowedCustomPasteType

    @@ -151,7 +151,7 @@

    Optional getTempDiv<
    @@ -182,7 +182,7 @@

    Optional removeTempD
    diff --git a/docs/interfaces/roosterjs_editor_types.extractclipboarditemsforieoptions.html b/docs/interfaces/roosterjs_editor_types.extractclipboarditemsforieoptions.html index d02e8400d98..a5c66806d2a 100644 --- a/docs/interfaces/roosterjs_editor_types.extractclipboarditemsforieoptions.html +++ b/docs/interfaces/roosterjs_editor_types.extractclipboarditemsforieoptions.html @@ -108,7 +108,7 @@

    Optional getTempDiv<
    getTempDiv: () => HTMLDivElement
    @@ -138,7 +138,7 @@

    Optional removeTempD
    removeTempDiv: (div: HTMLDivElement) => void
    diff --git a/docs/interfaces/roosterjs_editor_types.extractclipboarditemsoption.html b/docs/interfaces/roosterjs_editor_types.extractclipboarditemsoption.html index 4e66059d815..4cf1a6d8e6c 100644 --- a/docs/interfaces/roosterjs_editor_types.extractclipboarditemsoption.html +++ b/docs/interfaces/roosterjs_editor_types.extractclipboarditemsoption.html @@ -108,7 +108,7 @@

    Optional allowLinkPr
    allowLinkPreview: boolean
    @@ -125,7 +125,7 @@

    Optional allowedCustomallowedCustomPasteType: string[]

    diff --git a/docs/interfaces/roosterjs_editor_types.extractcontentwithdomevent.html b/docs/interfaces/roosterjs_editor_types.extractcontentwithdomevent.html index cf2e6be7acc..f81b7442a64 100644 --- a/docs/interfaces/roosterjs_editor_types.extractcontentwithdomevent.html +++ b/docs/interfaces/roosterjs_editor_types.extractcontentwithdomevent.html @@ -116,7 +116,7 @@

    clonedRoot

    @@ -133,7 +133,7 @@

    Optional eventDataCa
    @@ -159,7 +159,7 @@

    eventType

    diff --git a/docs/interfaces/roosterjs_editor_types.extractcontentwithdomeventdata.html b/docs/interfaces/roosterjs_editor_types.extractcontentwithdomeventdata.html index 7710fb3faa3..fa408ba0450 100644 --- a/docs/interfaces/roosterjs_editor_types.extractcontentwithdomeventdata.html +++ b/docs/interfaces/roosterjs_editor_types.extractcontentwithdomeventdata.html @@ -110,7 +110,7 @@

    clonedRoot

    clonedRoot: HTMLElement
    diff --git a/docs/interfaces/roosterjs_editor_types.formatstate.html b/docs/interfaces/roosterjs_editor_types.formatstate.html index 027547e6287..16a760f0b3e 100644 --- a/docs/interfaces/roosterjs_editor_types.formatstate.html +++ b/docs/interfaces/roosterjs_editor_types.formatstate.html @@ -155,7 +155,7 @@

    Optional backgroundColor<
    @@ -171,7 +171,7 @@

    Optional backgroundColors
    @@ -187,7 +187,7 @@

    Optional canAddImage
    @@ -203,7 +203,7 @@

    Optional canMergeTab
    @@ -219,7 +219,7 @@

    Optional canRedo

    @@ -235,7 +235,7 @@

    Optional canUndo

    @@ -251,7 +251,7 @@

    Optional canUnlink

    @@ -267,7 +267,7 @@

    Optional direction

    @@ -283,7 +283,7 @@

    Optional fontName

    @@ -299,7 +299,7 @@

    Optional fontSize

    @@ -315,7 +315,7 @@

    Optional headerLevel

    @@ -331,7 +331,7 @@

    Optional isBlockQuot
    @@ -347,7 +347,7 @@

    Optional isBold

    @@ -363,7 +363,7 @@

    Optional isBullet

    @@ -379,7 +379,7 @@

    Optional isCodeBlock
    @@ -395,7 +395,7 @@

    Optional isCodeInlin
    @@ -410,7 +410,7 @@

    Optional isDarkMode<
    isDarkMode: boolean
    @@ -426,7 +426,7 @@

    Optional isInTable

    @@ -442,7 +442,7 @@

    Optional isItalic

    @@ -458,7 +458,7 @@

    Optional isMultiline
    @@ -474,7 +474,7 @@

    Optional isNumbering

    @@ -490,7 +490,7 @@

    Optional isStrikeThr
    @@ -506,7 +506,7 @@

    Optional isSubscript

    @@ -522,7 +522,7 @@

    Optional isSuperscript

    Inherited from PendableFormatState.isSuperscript

    @@ -538,7 +538,7 @@

    Optional isUnderline

    @@ -554,7 +554,7 @@

    Optional lineHeight

    @@ -570,7 +570,7 @@

    Optional marginBottom

    Inherited from StyleBasedFormatState.marginBottom

    @@ -586,7 +586,7 @@

    Optional marginTop

    @@ -602,7 +602,7 @@

    Optional tableFormat

    @@ -618,7 +618,7 @@

    Optional tableHasHea
    @@ -634,7 +634,7 @@

    Optional textAlign

    @@ -650,7 +650,7 @@

    Optional textColor

    @@ -666,7 +666,7 @@

    Optional textColors

    @@ -681,7 +681,7 @@

    Optional zoomScale

    zoomScale: number
    diff --git a/docs/interfaces/roosterjs_editor_types.genericcontenteditfeature.html b/docs/interfaces/roosterjs_editor_types.genericcontenteditfeature.html index 53ea37fc76c..1242e3c674d 100644 --- a/docs/interfaces/roosterjs_editor_types.genericcontenteditfeature.html +++ b/docs/interfaces/roosterjs_editor_types.genericcontenteditfeature.html @@ -118,7 +118,7 @@

    Optional allowFunctionallowFunctionKeys: boolean

    @@ -134,7 +134,7 @@

    handleEvent

    handleEvent: (event: TEvent, editor: IEditor) => any
    @@ -183,7 +183,7 @@

    keys

    keys: number[]
    @@ -198,7 +198,7 @@

    shouldHandleEvent

    shouldHandleEvent: (event: TEvent, editor: IEditor, ctrlOrMeta: boolean) => any
    diff --git a/docs/interfaces/roosterjs_editor_types.htmlsanitizeroptions.html b/docs/interfaces/roosterjs_editor_types.htmlsanitizeroptions.html index adb8a570b96..6901d772563 100644 --- a/docs/interfaces/roosterjs_editor_types.htmlsanitizeroptions.html +++ b/docs/interfaces/roosterjs_editor_types.htmlsanitizeroptions.html @@ -117,7 +117,7 @@

    Optional additionalAllowe
    additionalAllowedAttributes: string[]
    @@ -132,7 +132,7 @@

    Optional additionalAllowe
    additionalAllowedCssClasses: string[]
    @@ -147,7 +147,7 @@

    Optional additionalDefaul
    additionalDefaultStyleValues: StringMap
    @@ -162,7 +162,7 @@

    Optional additionalGlobal
    additionalGlobalStyleNodes: HTMLStyleElement[]
    @@ -177,7 +177,7 @@

    Optional additionalPredef
    additionalPredefinedCssForElement: PredefinedCssMap
    @@ -192,7 +192,7 @@

    Optional additionalTagadditionalTagReplacements: Record<string, string>

    @@ -212,7 +212,7 @@

    Optional attributeCallbac
    attributeCallbacks: AttributeCallbackMap
    @@ -227,7 +227,7 @@

    Optional cssStyleCal
    cssStyleCallbacks: CssStyleCallbackMap
    @@ -242,7 +242,7 @@

    Optional elementCallbacks
    elementCallbacks: ElementCallbackMap
    @@ -257,7 +257,7 @@

    Optional preserveHtmlpreserveHtmlComments: boolean

    @@ -272,7 +272,7 @@

    Optional unknownTagR
    unknownTagReplacement: string
    diff --git a/docs/interfaces/roosterjs_editor_types.icontenttraverser.html b/docs/interfaces/roosterjs_editor_types.icontenttraverser.html index 3cab615c751..50a98ad22c4 100644 --- a/docs/interfaces/roosterjs_editor_types.icontenttraverser.html +++ b/docs/interfaces/roosterjs_editor_types.icontenttraverser.html @@ -118,7 +118,7 @@

    currentBlockElement

    currentBlockElement: BlockElement
    @@ -133,7 +133,7 @@

    currentInlineElement

    currentInlineElement: InlineElement
    @@ -155,7 +155,7 @@

    getNextBlockElement

  • @@ -177,7 +177,7 @@

    getNextInlineElement

  • @@ -199,7 +199,7 @@

    getPreviousBlockElement

  • @@ -221,7 +221,7 @@

    getPreviousInlineElement

  • diff --git a/docs/interfaces/roosterjs_editor_types.ieditor.html b/docs/interfaces/roosterjs_editor_types.ieditor.html index 9af6e615d34..f8a886be97d 100644 --- a/docs/interfaces/roosterjs_editor_types.ieditor.html +++ b/docs/interfaces/roosterjs_editor_types.ieditor.html @@ -179,7 +179,7 @@

    addContentEditFeature

  • @@ -211,7 +211,7 @@

    addDomEventHandler

  • @@ -253,7 +253,7 @@

    Returns void
    @@ -298,7 +298,7 @@

    addUndoSnapshot

  • @@ -372,7 +372,7 @@

    collapseNodes

  • @@ -421,7 +421,7 @@

    contains

  • @@ -444,7 +444,7 @@

    Returns boolean
    @@ -476,7 +476,7 @@

    deleteNode

  • @@ -508,7 +508,7 @@

    deleteSelectedContent

  • @@ -530,7 +530,7 @@

    dispose

  • @@ -552,7 +552,7 @@

    ensureTypeInContainer

  • @@ -589,7 +589,7 @@

    focus

  • @@ -611,7 +611,7 @@

    getBlockElementAtNode

  • @@ -643,7 +643,7 @@

    getBlockTraverser

  • @@ -675,7 +675,7 @@

    getBodyTraverser

  • @@ -706,7 +706,7 @@

    getContent

  • @@ -738,7 +738,7 @@

    getContentSearcherOfCursor

  • @@ -771,7 +771,7 @@

    getCustomData

  • @@ -852,7 +852,7 @@

    getDarkColorHandler

  • @@ -874,7 +874,7 @@

    getDefaultFormat

  • @@ -897,7 +897,7 @@

    getDocument

  • @@ -920,7 +920,7 @@

    getEditorDomAttribute

  • @@ -951,7 +951,7 @@

    getElementAtCursor

  • @@ -1000,7 +1000,7 @@

    getFocusedPosition

  • @@ -1022,7 +1022,7 @@

    getPendableFormatState

  • @@ -1054,7 +1054,7 @@

    getRelativeDistanceToEditor

  • @@ -1096,7 +1096,7 @@

    getScrollContainer

  • @@ -1118,7 +1118,7 @@

    getSelectedRegions

  • @@ -1146,7 +1146,7 @@

    getSelectionPath

  • @@ -1170,7 +1170,7 @@

    getSelectionRange

  • @@ -1204,7 +1204,7 @@

    getSelectionRangeEx

  • @@ -1228,7 +1228,7 @@

    getSelectionTraverser

  • @@ -1257,7 +1257,7 @@

    getSizeTransformer

  • @@ -1281,7 +1281,7 @@

    getStyleBasedFormatState

  • @@ -1309,7 +1309,7 @@

    getTrustedHTMLHandler

  • @@ -1334,7 +1334,7 @@

    getUndoState

  • @@ -1356,7 +1356,7 @@

    getVisibleViewport

  • @@ -1378,7 +1378,7 @@

    getZoomScale

  • @@ -1403,7 +1403,7 @@

    hasFocus

  • @@ -1426,7 +1426,7 @@

    insertContent

  • @@ -1464,7 +1464,7 @@

    insertNode

  • @@ -1506,7 +1506,7 @@

    isDarkMode

  • @@ -1529,7 +1529,7 @@

    isDisposed

  • @@ -1552,7 +1552,7 @@

    isEmpty

  • @@ -1584,7 +1584,7 @@

    isFeatureEnabled

  • @@ -1615,7 +1615,7 @@

    isInIME

  • @@ -1638,7 +1638,7 @@

    isInShadowEdit

  • @@ -1660,7 +1660,7 @@

    isPositionAtBeginning

  • @@ -1693,7 +1693,7 @@

    paste

  • @@ -1739,7 +1739,7 @@

    queryElements

  • @@ -1792,7 +1792,7 @@

    Returns HTMLEleme
  • @@ -1845,7 +1845,7 @@

    Returns T<
  • @@ -1904,7 +1904,7 @@

    Returns HTMLEleme
  • @@ -1972,7 +1972,7 @@

    redo

  • @@ -1994,7 +1994,7 @@

    removeContentEditFeature

  • @@ -2025,7 +2025,7 @@

    replaceNode

  • @@ -2069,7 +2069,7 @@

    runAsync

  • @@ -2139,7 +2139,7 @@

    select

  • @@ -2162,7 +2162,7 @@

    Returns boolean
    @@ -2185,7 +2185,7 @@

    Returns boolean
    @@ -2214,7 +2214,7 @@

    Returns boolean
    @@ -2237,7 +2237,7 @@

    Returns boolean
    @@ -2266,7 +2266,7 @@

    Returns boolean
    @@ -2307,7 +2307,7 @@

    Returns boolean
    @@ -2330,7 +2330,7 @@

    Returns boolean
    @@ -2358,7 +2358,7 @@

    Returns boolean
    @@ -2389,7 +2389,7 @@

    setContent

  • @@ -2426,7 +2426,7 @@

    setDarkModeState

  • @@ -2457,7 +2457,7 @@

    setEditorDomAttribute

  • @@ -2494,7 +2494,7 @@

    setZoomScale

  • @@ -2524,7 +2524,7 @@

    startShadowEdit

  • @@ -2551,7 +2551,7 @@

    stopShadowEdit

  • @@ -2573,7 +2573,7 @@

    transformToDarkColor

  • @@ -2604,7 +2604,7 @@

    triggerContentChangedEvent

  • @@ -2641,7 +2641,7 @@

    triggerPluginEvent

  • @@ -2693,7 +2693,7 @@

    undo

  • diff --git a/docs/interfaces/roosterjs_editor_types.imagecontentmetadata.html b/docs/interfaces/roosterjs_editor_types.imagecontentmetadata.html index fa49eb7ca69..46e4a864e02 100644 --- a/docs/interfaces/roosterjs_editor_types.imagecontentmetadata.html +++ b/docs/interfaces/roosterjs_editor_types.imagecontentmetadata.html @@ -113,7 +113,7 @@

    imageId

    imageId: string
    @@ -124,7 +124,7 @@

    isDarkMode

    @@ -135,7 +135,7 @@

    type

    diff --git a/docs/interfaces/roosterjs_editor_types.imageeditoptions.html b/docs/interfaces/roosterjs_editor_types.imageeditoptions.html index c16c265c0e8..2ebfde53441 100644 --- a/docs/interfaces/roosterjs_editor_types.imageeditoptions.html +++ b/docs/interfaces/roosterjs_editor_types.imageeditoptions.html @@ -112,7 +112,7 @@

    Optional borderColor

    borderColor: string | ModeIndependentColor
    @@ -132,7 +132,7 @@

    Optional disableCrop

    disableCrop: boolean
    @@ -147,7 +147,7 @@

    Optional disableRotatedisableRotate: boolean

    @@ -162,7 +162,7 @@

    Optional disableSide
    disableSideResize: boolean
    @@ -177,7 +177,7 @@

    Optional imageSelectorimageSelector: string

    @@ -197,7 +197,7 @@

    Optional minHeight

    minHeight: number
    @@ -217,7 +217,7 @@

    Optional minRotateDe
    minRotateDeg: number
    @@ -238,7 +238,7 @@

    Optional minWidth

    minWidth: number
    @@ -258,7 +258,7 @@

    Optional onSelectSta
    @@ -278,7 +278,7 @@

    Optional preserveRatiopreserveRatio: boolean

    @@ -299,7 +299,7 @@

    Optional rotateIconHTMLrotateIconHTML: string

    diff --git a/docs/interfaces/roosterjs_editor_types.imageselectionrange.html b/docs/interfaces/roosterjs_editor_types.imageselectionrange.html index 59bee2ef747..b791bddc0cc 100644 --- a/docs/interfaces/roosterjs_editor_types.imageselectionrange.html +++ b/docs/interfaces/roosterjs_editor_types.imageselectionrange.html @@ -111,7 +111,7 @@

    areAllCollapsed

    @@ -126,7 +126,7 @@

    image

    image: HTMLImageElement
    @@ -142,7 +142,7 @@

    ranges

    @@ -158,7 +158,7 @@

    type

    diff --git a/docs/interfaces/roosterjs_editor_types.inlineelement.html b/docs/interfaces/roosterjs_editor_types.inlineelement.html index 86ad758bc6e..b6f5f30639f 100644 --- a/docs/interfaces/roosterjs_editor_types.inlineelement.html +++ b/docs/interfaces/roosterjs_editor_types.inlineelement.html @@ -131,7 +131,7 @@

    applyStyle

  • @@ -180,7 +180,7 @@

    contains

  • @@ -208,7 +208,7 @@

    getContainerNode

  • @@ -230,7 +230,7 @@

    getEndPosition

  • @@ -252,7 +252,7 @@

    getParentBlock

  • @@ -274,7 +274,7 @@

    getStartPosition

  • @@ -296,7 +296,7 @@

    getTextContent

  • @@ -318,7 +318,7 @@

    isAfter

  • @@ -346,7 +346,7 @@

    isTextualInlineElement

  • diff --git a/docs/interfaces/roosterjs_editor_types.insertoptionbase.html b/docs/interfaces/roosterjs_editor_types.insertoptionbase.html index 4f4c6340125..2ab654fb150 100644 --- a/docs/interfaces/roosterjs_editor_types.insertoptionbase.html +++ b/docs/interfaces/roosterjs_editor_types.insertoptionbase.html @@ -113,7 +113,7 @@

    Optional insertOnNew
    insertOnNewLine: boolean
    @@ -129,7 +129,7 @@

    Optional insertToRegioninsertToRegionRoot: boolean

    @@ -146,7 +146,7 @@

    Optional replaceSelection
    replaceSelection: boolean
    @@ -162,7 +162,7 @@

    Optional updateCursor

    updateCursor: boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.insertoptionbasic.html b/docs/interfaces/roosterjs_editor_types.insertoptionbasic.html index 4524fbe115a..fa5431e4255 100644 --- a/docs/interfaces/roosterjs_editor_types.insertoptionbasic.html +++ b/docs/interfaces/roosterjs_editor_types.insertoptionbasic.html @@ -112,7 +112,7 @@

    Optional insertOnNew
    @@ -129,7 +129,7 @@

    Optional insertToRegion

    Inherited from InsertOptionBase.insertToRegionRoot

    @@ -146,7 +146,7 @@

    position

    @@ -157,7 +157,7 @@

    Optional replaceSelection
    @@ -174,7 +174,7 @@

    Optional updateCursor

    Inherited from InsertOptionBase.updateCursor

    diff --git a/docs/interfaces/roosterjs_editor_types.insertoptionrange.html b/docs/interfaces/roosterjs_editor_types.insertoptionrange.html index efa393ad6e5..ab90a6e395f 100644 --- a/docs/interfaces/roosterjs_editor_types.insertoptionrange.html +++ b/docs/interfaces/roosterjs_editor_types.insertoptionrange.html @@ -113,7 +113,7 @@

    Optional insertOnNew
    @@ -130,7 +130,7 @@

    Optional insertToRegion

    Inherited from InsertOptionBase.insertToRegionRoot

    @@ -147,7 +147,7 @@

    position

    position: Range | Range
    @@ -157,7 +157,7 @@

    range

    range: Range
    @@ -173,7 +173,7 @@

    Optional replaceSelection
    @@ -190,7 +190,7 @@

    Optional updateCursor

    Inherited from InsertOptionBase.updateCursor

    diff --git a/docs/interfaces/roosterjs_editor_types.ipositioncontentsearcher.html b/docs/interfaces/roosterjs_editor_types.ipositioncontentsearcher.html index 38ad5888294..08fc60ccd7e 100644 --- a/docs/interfaces/roosterjs_editor_types.ipositioncontentsearcher.html +++ b/docs/interfaces/roosterjs_editor_types.ipositioncontentsearcher.html @@ -118,7 +118,7 @@

    forEachTextInlineElement

  • @@ -168,7 +168,7 @@

    getInlineElementAfter

  • @@ -191,7 +191,7 @@

    getInlineElementBefore

  • @@ -214,7 +214,7 @@

    getNearestNonTextInlineElement

  • @@ -237,7 +237,7 @@

    getRangeFromText

  • @@ -275,7 +275,7 @@

    getSubStringBefore

  • @@ -310,7 +310,7 @@

    getWordBefore

  • diff --git a/docs/interfaces/roosterjs_editor_types.knownentityitem.html b/docs/interfaces/roosterjs_editor_types.knownentityitem.html index 3193abac9d1..37c9ca1a964 100644 --- a/docs/interfaces/roosterjs_editor_types.knownentityitem.html +++ b/docs/interfaces/roosterjs_editor_types.knownentityitem.html @@ -104,7 +104,7 @@

    Optional canPersist

    canPersist: boolean
    @@ -119,7 +119,7 @@

    element

    element: HTMLElement
    @@ -134,7 +134,7 @@

    Optional isDeleted

    isDeleted: boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.leaveshadoweditevent.html b/docs/interfaces/roosterjs_editor_types.leaveshadoweditevent.html index 52bd4d40d9e..18e897fee8d 100644 --- a/docs/interfaces/roosterjs_editor_types.leaveshadoweditevent.html +++ b/docs/interfaces/roosterjs_editor_types.leaveshadoweditevent.html @@ -109,7 +109,7 @@

    Optional eventDataCa
    @@ -135,7 +135,7 @@

    eventType

    diff --git a/docs/interfaces/roosterjs_editor_types.lifecyclepluginstate.html b/docs/interfaces/roosterjs_editor_types.lifecyclepluginstate.html index ed77daf80e8..550af1f3b80 100644 --- a/docs/interfaces/roosterjs_editor_types.lifecyclepluginstate.html +++ b/docs/interfaces/roosterjs_editor_types.lifecyclepluginstate.html @@ -112,7 +112,7 @@

    customData

    customData: Record<string, CustomData>
    @@ -127,7 +127,7 @@

    defaultFormat

    defaultFormat: DefaultFormat
    @@ -142,7 +142,7 @@

    experimentalFeatures

    @@ -157,7 +157,7 @@

    getDarkColor

    getDarkColor: (lightColor: string) => string
    @@ -193,7 +193,7 @@

    isDarkMode

    isDarkMode: boolean
    @@ -208,7 +208,7 @@

    onExternalContentTransform

    onExternalContentTransform: (element: HTMLElement, fromDarkMode: boolean, toDarkMode: boolean, darkColorHandler: DarkColorHandler) => void
    @@ -253,7 +253,7 @@

    shadowEditEntities

    shadowEditEntities: Record<string, HTMLElement>
    @@ -268,7 +268,7 @@

    shadowEditFragment

    shadowEditFragment: DocumentFragment
    @@ -283,7 +283,7 @@

    shadowEditImageSelectionPath

    shadowEditImageSelectionPath: SelectionPath[]
    @@ -298,7 +298,7 @@

    shadowEditSelectionPath

    shadowEditSelectionPath: SelectionPath
    @@ -313,7 +313,7 @@

    shadowEditTableSelectionPath

    shadowEditTableSelectionPath: SelectionPath[]
    diff --git a/docs/interfaces/roosterjs_editor_types.linkdata.html b/docs/interfaces/roosterjs_editor_types.linkdata.html index 64539e21320..3b1b96f7982 100644 --- a/docs/interfaces/roosterjs_editor_types.linkdata.html +++ b/docs/interfaces/roosterjs_editor_types.linkdata.html @@ -104,7 +104,7 @@

    normalizedUrl

    normalizedUrl: string
    @@ -119,7 +119,7 @@

    originalUrl

    originalUrl: string
    @@ -134,7 +134,7 @@

    scheme

    scheme: string
    diff --git a/docs/interfaces/roosterjs_editor_types.listfeaturesettings.html b/docs/interfaces/roosterjs_editor_types.listfeaturesettings.html index 0c497c7002c..05fa0b2b3ed 100644 --- a/docs/interfaces/roosterjs_editor_types.listfeaturesettings.html +++ b/docs/interfaces/roosterjs_editor_types.listfeaturesettings.html @@ -119,7 +119,7 @@

    autoBullet

    autoBullet: boolean
    @@ -139,7 +139,7 @@

    autoBulletList

    autoBulletList: boolean
    @@ -159,7 +159,7 @@

    autoNumberingList

    autoNumberingList: boolean
    @@ -179,7 +179,7 @@

    indentWhenAltShiftRight

    indentWhenAltShiftRight: boolean
    @@ -199,7 +199,7 @@

    indentWhenTab

    indentWhenTab: boolean
    @@ -219,7 +219,7 @@

    maintainListChain

    maintainListChain: boolean
    @@ -234,7 +234,7 @@

    maintainListChainWhenDelete

    maintainListChainWhenDelete: boolean
    @@ -249,7 +249,7 @@

    mergeInNewLineWhenBackspaceOnFirstChar

    mergeInNewLineWhenBackspaceOnFirstChar: boolean
    @@ -269,7 +269,7 @@

    mergeListOnBackspaceAfterList

    mergeListOnBackspaceAfterList: boolean
    @@ -289,7 +289,7 @@

    outdentWhenAltShiftLeft

    outdentWhenAltShiftLeft: boolean
    @@ -309,7 +309,7 @@

    outdentWhenBackspaceOnEmptyFirstLine

    outdentWhenBackspaceOnEmptyFirstLine: boolean
    @@ -329,7 +329,7 @@

    outdentWhenEnterOnEmptyLine

    outdentWhenEnterOnEmptyLine: boolean
    @@ -349,7 +349,7 @@

    outdentWhenShiftTab

    outdentWhenShiftTab: boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.markdownfeaturesettings.html b/docs/interfaces/roosterjs_editor_types.markdownfeaturesettings.html index f3acd93dd77..7aa46e9d06f 100644 --- a/docs/interfaces/roosterjs_editor_types.markdownfeaturesettings.html +++ b/docs/interfaces/roosterjs_editor_types.markdownfeaturesettings.html @@ -110,7 +110,7 @@

    markdownBold

    markdownBold: boolean
    @@ -130,7 +130,7 @@

    markdownInlineCode

    markdownInlineCode: boolean
    @@ -150,7 +150,7 @@

    markdownItalic

    markdownItalic: boolean
    @@ -170,7 +170,7 @@

    markdownStrikethru

    markdownStrikethru: boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.modeindependentcolor.html b/docs/interfaces/roosterjs_editor_types.modeindependentcolor.html index 8e34ec48433..d0a6ae9136f 100644 --- a/docs/interfaces/roosterjs_editor_types.modeindependentcolor.html +++ b/docs/interfaces/roosterjs_editor_types.modeindependentcolor.html @@ -103,7 +103,7 @@

    darkModeColor

    darkModeColor: string
    @@ -118,7 +118,7 @@

    lightModeColor

    lightModeColor: string
    diff --git a/docs/interfaces/roosterjs_editor_types.nodeposition.html b/docs/interfaces/roosterjs_editor_types.nodeposition.html index 33622510f81..dbaea1fac05 100644 --- a/docs/interfaces/roosterjs_editor_types.nodeposition.html +++ b/docs/interfaces/roosterjs_editor_types.nodeposition.html @@ -120,7 +120,7 @@

    Readonly element

    element: HTMLElement
    @@ -130,7 +130,7 @@

    Readonly isAtEnd

    isAtEnd: boolean
    @@ -140,7 +140,7 @@

    Readonly node

    node: Node
    @@ -150,7 +150,7 @@

    Readonly offset

    offset: number
    @@ -167,7 +167,7 @@

    equalTo

  • @@ -198,7 +198,7 @@

    isAfter

  • @@ -229,7 +229,7 @@

    move

  • @@ -260,7 +260,7 @@

    normalize

  • diff --git a/docs/interfaces/roosterjs_editor_types.normalcontentmetadata.html b/docs/interfaces/roosterjs_editor_types.normalcontentmetadata.html index 9af29342b3e..188d26c1daa 100644 --- a/docs/interfaces/roosterjs_editor_types.normalcontentmetadata.html +++ b/docs/interfaces/roosterjs_editor_types.normalcontentmetadata.html @@ -118,7 +118,7 @@

    end

    @@ -134,7 +134,7 @@

    isDarkMode

    @@ -145,7 +145,7 @@

    start

    @@ -161,7 +161,7 @@

    type

    diff --git a/docs/interfaces/roosterjs_editor_types.normalselectionrange.html b/docs/interfaces/roosterjs_editor_types.normalselectionrange.html index 5ca986eb819..bce9d9778db 100644 --- a/docs/interfaces/roosterjs_editor_types.normalselectionrange.html +++ b/docs/interfaces/roosterjs_editor_types.normalselectionrange.html @@ -110,7 +110,7 @@

    areAllCollapsed

    @@ -126,7 +126,7 @@

    ranges

    @@ -142,7 +142,7 @@

    type

    diff --git a/docs/interfaces/roosterjs_editor_types.numberdefinition.html b/docs/interfaces/roosterjs_editor_types.numberdefinition.html index 9b1671d65d6..322321e7ccf 100644 --- a/docs/interfaces/roosterjs_editor_types.numberdefinition.html +++ b/docs/interfaces/roosterjs_editor_types.numberdefinition.html @@ -113,7 +113,7 @@

    Optional allowNull

    @@ -129,7 +129,7 @@

    Optional isOptional

    @@ -144,7 +144,7 @@

    Optional maxValue

    maxValue: number
    @@ -159,7 +159,7 @@

    Optional minValue

    minValue: number
    @@ -175,7 +175,7 @@

    type

    @@ -190,7 +190,7 @@

    Optional value

    value: number
    diff --git a/docs/interfaces/roosterjs_editor_types.objectdefinition.html b/docs/interfaces/roosterjs_editor_types.objectdefinition.html index 32a90ae265d..b2f4f4bdc77 100644 --- a/docs/interfaces/roosterjs_editor_types.objectdefinition.html +++ b/docs/interfaces/roosterjs_editor_types.objectdefinition.html @@ -119,7 +119,7 @@

    Optional allowNull

    @@ -135,7 +135,7 @@

    Optional isOptional

    @@ -150,7 +150,7 @@

    propertyDef

    propertyDef: ObjectPropertyDefinition<T>
    @@ -166,7 +166,7 @@

    type

    diff --git a/docs/interfaces/roosterjs_editor_types.pendableformatstate.html b/docs/interfaces/roosterjs_editor_types.pendableformatstate.html index 4713d476ce5..9f11bff3d6e 100644 --- a/docs/interfaces/roosterjs_editor_types.pendableformatstate.html +++ b/docs/interfaces/roosterjs_editor_types.pendableformatstate.html @@ -115,7 +115,7 @@

    Optional isBold

    isBold: boolean
    @@ -130,7 +130,7 @@

    Optional isItalic

    isItalic: boolean
    @@ -145,7 +145,7 @@

    Optional isStrikeThr
    isStrikeThrough: boolean
    @@ -160,7 +160,7 @@

    Optional isSubscript

    isSubscript: boolean
    @@ -175,7 +175,7 @@

    Optional isSuperscriptisSuperscript: boolean

    @@ -190,7 +190,7 @@

    Optional isUnderline

    isUnderline: boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.pendingformatstatechangedevent.html b/docs/interfaces/roosterjs_editor_types.pendingformatstatechangedevent.html index 49e187b43ce..19588b83a21 100644 --- a/docs/interfaces/roosterjs_editor_types.pendingformatstatechangedevent.html +++ b/docs/interfaces/roosterjs_editor_types.pendingformatstatechangedevent.html @@ -111,7 +111,7 @@

    Optional eventDataCa
    @@ -137,7 +137,7 @@

    eventType

    @@ -152,7 +152,7 @@

    Optional formatCallbackformatCallback: (element: HTMLElement, isInnerNode?: boolean) => any

    @@ -191,7 +191,7 @@

    formatState

    formatState: PendableFormatState
    diff --git a/docs/interfaces/roosterjs_editor_types.pendingformatstatepluginstate.html b/docs/interfaces/roosterjs_editor_types.pendingformatstatepluginstate.html index e3f109e62ed..a3e84671ee0 100644 --- a/docs/interfaces/roosterjs_editor_types.pendingformatstatepluginstate.html +++ b/docs/interfaces/roosterjs_editor_types.pendingformatstatepluginstate.html @@ -104,7 +104,7 @@

    pendableFormatPosition

    pendableFormatPosition: NodePosition
    @@ -119,7 +119,7 @@

    pendableFormatSpan

    pendableFormatSpan: HTMLElement
    @@ -135,7 +135,7 @@

    pendableFormatState

    pendableFormatState: PendableFormatState
    diff --git a/docs/interfaces/roosterjs_editor_types.pickerdataprovider.html b/docs/interfaces/roosterjs_editor_types.pickerdataprovider.html index 490ad8ef95c..a3c58ac9e2b 100644 --- a/docs/interfaces/roosterjs_editor_types.pickerdataprovider.html +++ b/docs/interfaces/roosterjs_editor_types.pickerdataprovider.html @@ -112,7 +112,7 @@

    Optional getSelected
    getSelectedIndex: () => number
    @@ -142,7 +142,7 @@

    Optional onContentCh
    onContentChanged: (elementIds: string[]) => void
    @@ -179,7 +179,7 @@

    onDispose

    onDispose: () => void
    @@ -209,7 +209,7 @@

    onInitalize

    onInitalize: (insertNodeCallback: (nodeToInsert: HTMLElement) => void, setIsSuggestingCallback: (isSuggesting: boolean) => void, editor?: IEditor) => void
    @@ -294,7 +294,7 @@

    onIsSuggestingChanged

    onIsSuggestingChanged: (isSuggesting: boolean) => void
    @@ -331,7 +331,7 @@

    onRemove

    onRemove: (nodeRemoved: Node, isBackwards: boolean) => Node
    @@ -371,7 +371,7 @@

    Optional onScroll

    onScroll: (scrollContainer: HTMLElement) => void
    @@ -407,7 +407,7 @@

    queryStringUpdated

    queryStringUpdated: (queryString: string, isExactMatch: boolean) => void
    @@ -446,7 +446,7 @@

    Optional selectOption

    selectOption: () => void
    @@ -476,7 +476,7 @@

    Optional setCursorPo
    setCursorPoint: (targetPoint: { x: number; y: number }, buffer: number) => void
    @@ -524,7 +524,7 @@

    Optional shiftHighlightshiftHighlight: (isIncrement: boolean) => void

    diff --git a/docs/interfaces/roosterjs_editor_types.pickerpluginoptions.html b/docs/interfaces/roosterjs_editor_types.pickerpluginoptions.html index 4968f682bfe..6335f46df60 100644 --- a/docs/interfaces/roosterjs_editor_types.pickerpluginoptions.html +++ b/docs/interfaces/roosterjs_editor_types.pickerpluginoptions.html @@ -108,7 +108,7 @@

    changeSource

    changeSource: string
    @@ -124,7 +124,7 @@

    elementIdPrefix

    elementIdPrefix: string
    @@ -140,7 +140,7 @@

    Optional handleAutoC
    handleAutoComplete: boolean
    @@ -156,7 +156,7 @@

    Optional isHorizontal

    isHorizontal: boolean
    @@ -173,7 +173,7 @@

    Optional suggestionLabel<
    suggestionLabelPrefix: string
    @@ -189,7 +189,7 @@

    Optional suggestionsLabel
    suggestionsLabel: string
    @@ -205,7 +205,7 @@

    triggerCharacter

    triggerCharacter: string
    diff --git a/docs/interfaces/roosterjs_editor_types.plugincompositionevent.html b/docs/interfaces/roosterjs_editor_types.plugincompositionevent.html index 7ba44f6d386..db368b5257d 100644 --- a/docs/interfaces/roosterjs_editor_types.plugincompositionevent.html +++ b/docs/interfaces/roosterjs_editor_types.plugincompositionevent.html @@ -110,7 +110,7 @@

    Optional eventDataCa
    @@ -136,7 +136,7 @@

    eventType

    @@ -152,7 +152,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.plugincontextmenuevent.html b/docs/interfaces/roosterjs_editor_types.plugincontextmenuevent.html index 79ab1d30a1e..80dc6486889 100644 --- a/docs/interfaces/roosterjs_editor_types.plugincontextmenuevent.html +++ b/docs/interfaces/roosterjs_editor_types.plugincontextmenuevent.html @@ -114,7 +114,7 @@

    Optional eventDataCa
    @@ -140,7 +140,7 @@

    eventType

    @@ -156,7 +156,7 @@

    items

    @@ -174,7 +174,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.plugincontextmenueventdata.html b/docs/interfaces/roosterjs_editor_types.plugincontextmenueventdata.html index 3062cac258f..3fb2af46a9d 100644 --- a/docs/interfaces/roosterjs_editor_types.plugincontextmenueventdata.html +++ b/docs/interfaces/roosterjs_editor_types.plugincontextmenueventdata.html @@ -110,7 +110,7 @@

    items

    items: any[]
    diff --git a/docs/interfaces/roosterjs_editor_types.plugindomeventbase.html b/docs/interfaces/roosterjs_editor_types.plugindomeventbase.html index dc20ebc937a..596abec9721 100644 --- a/docs/interfaces/roosterjs_editor_types.plugindomeventbase.html +++ b/docs/interfaces/roosterjs_editor_types.plugindomeventbase.html @@ -177,7 +177,7 @@

    Optional eventDataCa
    @@ -203,7 +203,7 @@

    eventType

    @@ -218,7 +218,7 @@

    rawEvent

    rawEvent: TRawEvent
    diff --git a/docs/interfaces/roosterjs_editor_types.plugininputevent.html b/docs/interfaces/roosterjs_editor_types.plugininputevent.html index 9c8fb8c10b1..6b11f95f1a2 100644 --- a/docs/interfaces/roosterjs_editor_types.plugininputevent.html +++ b/docs/interfaces/roosterjs_editor_types.plugininputevent.html @@ -110,7 +110,7 @@

    Optional eventDataCa
    @@ -136,7 +136,7 @@

    eventType

    @@ -152,7 +152,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.pluginkeydownevent.html b/docs/interfaces/roosterjs_editor_types.pluginkeydownevent.html index 5798d6eb14a..653b5320335 100644 --- a/docs/interfaces/roosterjs_editor_types.pluginkeydownevent.html +++ b/docs/interfaces/roosterjs_editor_types.pluginkeydownevent.html @@ -110,7 +110,7 @@

    Optional eventDataCa
    @@ -136,7 +136,7 @@

    eventType

    @@ -152,7 +152,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.pluginkeypressevent.html b/docs/interfaces/roosterjs_editor_types.pluginkeypressevent.html index b5accc2ff08..539d461641a 100644 --- a/docs/interfaces/roosterjs_editor_types.pluginkeypressevent.html +++ b/docs/interfaces/roosterjs_editor_types.pluginkeypressevent.html @@ -110,7 +110,7 @@

    Optional eventDataCa
    @@ -136,7 +136,7 @@

    eventType

    @@ -152,7 +152,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.pluginkeyupevent.html b/docs/interfaces/roosterjs_editor_types.pluginkeyupevent.html index 255d77ba2f4..08050cfd486 100644 --- a/docs/interfaces/roosterjs_editor_types.pluginkeyupevent.html +++ b/docs/interfaces/roosterjs_editor_types.pluginkeyupevent.html @@ -110,7 +110,7 @@

    Optional eventDataCa
    @@ -136,7 +136,7 @@

    eventType

    @@ -152,7 +152,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.pluginmousedownevent.html b/docs/interfaces/roosterjs_editor_types.pluginmousedownevent.html index 3d32eea1e11..8838773b7ac 100644 --- a/docs/interfaces/roosterjs_editor_types.pluginmousedownevent.html +++ b/docs/interfaces/roosterjs_editor_types.pluginmousedownevent.html @@ -110,7 +110,7 @@

    Optional eventDataCa
    @@ -136,7 +136,7 @@

    eventType

    @@ -152,7 +152,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.pluginmouseupevent.html b/docs/interfaces/roosterjs_editor_types.pluginmouseupevent.html index fb13e0d43e3..613841159c4 100644 --- a/docs/interfaces/roosterjs_editor_types.pluginmouseupevent.html +++ b/docs/interfaces/roosterjs_editor_types.pluginmouseupevent.html @@ -114,7 +114,7 @@

    Optional eventDataCa
    @@ -140,7 +140,7 @@

    eventType

    @@ -156,7 +156,7 @@

    Optional isClicking

    @@ -172,7 +172,7 @@

    rawEvent

    diff --git a/docs/interfaces/roosterjs_editor_types.pluginmouseupeventdata.html b/docs/interfaces/roosterjs_editor_types.pluginmouseupeventdata.html index 6cdd4023851..316339b7657 100644 --- a/docs/interfaces/roosterjs_editor_types.pluginmouseupeventdata.html +++ b/docs/interfaces/roosterjs_editor_types.pluginmouseupeventdata.html @@ -110,7 +110,7 @@

    Optional isClicking

    isClicking: boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.pluginscrollevent.html b/docs/interfaces/roosterjs_editor_types.pluginscrollevent.html index ba45141d4ff..c2870fce48a 100644 --- a/docs/interfaces/roosterjs_editor_types.pluginscrollevent.html +++ b/docs/interfaces/roosterjs_editor_types.pluginscrollevent.html @@ -114,7 +114,7 @@

    Optional eventDataCa
    @@ -140,7 +140,7 @@

    eventType

    @@ -156,7 +156,7 @@

    rawEvent

    @@ -167,7 +167,7 @@

    scrollContainer

    diff --git a/docs/interfaces/roosterjs_editor_types.pluginscrolleventdata.html b/docs/interfaces/roosterjs_editor_types.pluginscrolleventdata.html index 3b7e7e9b8ad..d4ecdd99486 100644 --- a/docs/interfaces/roosterjs_editor_types.pluginscrolleventdata.html +++ b/docs/interfaces/roosterjs_editor_types.pluginscrolleventdata.html @@ -110,7 +110,7 @@

    scrollContainer

    scrollContainer: HTMLElement
    diff --git a/docs/interfaces/roosterjs_editor_types.pluginwithstate.html b/docs/interfaces/roosterjs_editor_types.pluginwithstate.html index f4bdf7df98c..dc12b786b7c 100644 --- a/docs/interfaces/roosterjs_editor_types.pluginwithstate.html +++ b/docs/interfaces/roosterjs_editor_types.pluginwithstate.html @@ -133,7 +133,7 @@

    dispose

    @@ -166,7 +166,7 @@

    getName

    @@ -197,7 +197,7 @@

    initialize

    @@ -241,7 +241,7 @@

    Optional onPluginEve
    @@ -285,7 +285,7 @@

    Optional willHandleE
    @@ -337,7 +337,7 @@

    getState

  • diff --git a/docs/interfaces/roosterjs_editor_types.quotefeaturesettings.html b/docs/interfaces/roosterjs_editor_types.quotefeaturesettings.html index a9dc30d5f8b..3eac2093754 100644 --- a/docs/interfaces/roosterjs_editor_types.quotefeaturesettings.html +++ b/docs/interfaces/roosterjs_editor_types.quotefeaturesettings.html @@ -108,7 +108,7 @@

    unquoteWhenBackspaceOnEmptyFirstLine

    unquoteWhenBackspaceOnEmptyFirstLine: boolean
    @@ -128,7 +128,7 @@

    unquoteWhenEnterOnEmptyLine

    unquoteWhenEnterOnEmptyLine: boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.rect.html b/docs/interfaces/roosterjs_editor_types.rect.html index ff3e70aa302..222a467536e 100644 --- a/docs/interfaces/roosterjs_editor_types.rect.html +++ b/docs/interfaces/roosterjs_editor_types.rect.html @@ -105,7 +105,7 @@

    bottom

    bottom: number
    @@ -120,7 +120,7 @@

    left

    left: number
    @@ -135,7 +135,7 @@

    right

    right: number
    @@ -150,7 +150,7 @@

    top

    top: number
    diff --git a/docs/interfaces/roosterjs_editor_types.region.html b/docs/interfaces/roosterjs_editor_types.region.html index e298d9d97bb..18504b900bd 100644 --- a/docs/interfaces/roosterjs_editor_types.region.html +++ b/docs/interfaces/roosterjs_editor_types.region.html @@ -113,7 +113,7 @@

    fullSelectionEnd

    fullSelectionEnd: NodePosition
    @@ -129,7 +129,7 @@

    fullSelectionStart

    fullSelectionStart: NodePosition
    @@ -146,7 +146,7 @@

    Optional nodeAfter

    @@ -163,7 +163,7 @@

    Optional nodeBefore

    @@ -180,7 +180,7 @@

    rootNode

    @@ -196,7 +196,7 @@

    skipTags

    diff --git a/docs/interfaces/roosterjs_editor_types.regionbase.html b/docs/interfaces/roosterjs_editor_types.regionbase.html index 6b1157ebb90..c5f349ccc59 100644 --- a/docs/interfaces/roosterjs_editor_types.regionbase.html +++ b/docs/interfaces/roosterjs_editor_types.regionbase.html @@ -123,7 +123,7 @@

    Optional nodeAfter

    nodeAfter: Node
    @@ -139,7 +139,7 @@

    Optional nodeBefore

    nodeBefore: Node
    @@ -155,7 +155,7 @@

    rootNode

    rootNode: HTMLElement
    @@ -170,7 +170,7 @@

    skipTags

    skipTags: string[]
    diff --git a/docs/interfaces/roosterjs_editor_types.sanitizehtmloptions.html b/docs/interfaces/roosterjs_editor_types.sanitizehtmloptions.html index ec9d8a37c7c..9299b0824a8 100644 --- a/docs/interfaces/roosterjs_editor_types.sanitizehtmloptions.html +++ b/docs/interfaces/roosterjs_editor_types.sanitizehtmloptions.html @@ -122,7 +122,7 @@

    Optional additionalAllowe
    @@ -138,7 +138,7 @@

    Optional additionalAllowe
    @@ -154,7 +154,7 @@

    Optional additionalDefaul
    @@ -170,7 +170,7 @@

    Optional additionalGlobal
    @@ -186,7 +186,7 @@

    Optional additionalPredef
    @@ -202,7 +202,7 @@

    Optional additionalTag

    Inherited from HtmlSanitizerOptions.additionalTagReplacements

    @@ -223,7 +223,7 @@

    Optional attributeCallbac
    @@ -238,7 +238,7 @@

    Optional convertCssO
    convertCssOnly: boolean
    @@ -254,7 +254,7 @@

    Optional cssStyleCal
    @@ -269,7 +269,7 @@

    Optional currentElementcurrentElementOrStyle: HTMLElement | StringMap

    @@ -286,7 +286,7 @@

    Optional elementCallbacks
    @@ -302,7 +302,7 @@

    Optional preserveHtml

    Inherited from HtmlSanitizerOptions.preserveHtmlComments

    @@ -318,7 +318,7 @@

    Optional unknownTagR
    diff --git a/docs/interfaces/roosterjs_editor_types.selectionchangedevent.html b/docs/interfaces/roosterjs_editor_types.selectionchangedevent.html index 69826efdc79..749abb1a940 100644 --- a/docs/interfaces/roosterjs_editor_types.selectionchangedevent.html +++ b/docs/interfaces/roosterjs_editor_types.selectionchangedevent.html @@ -113,7 +113,7 @@

    Optional eventDataCa
    @@ -139,7 +139,7 @@

    eventType

    @@ -155,7 +155,7 @@

    selectionRangeEx

    diff --git a/docs/interfaces/roosterjs_editor_types.selectionchangedeventdata.html b/docs/interfaces/roosterjs_editor_types.selectionchangedeventdata.html index e49056c0c51..dfeea86ae47 100644 --- a/docs/interfaces/roosterjs_editor_types.selectionchangedeventdata.html +++ b/docs/interfaces/roosterjs_editor_types.selectionchangedeventdata.html @@ -110,7 +110,7 @@

    selectionRangeEx

    selectionRangeEx: SelectionRangeEx
    diff --git a/docs/interfaces/roosterjs_editor_types.selectionpath.html b/docs/interfaces/roosterjs_editor_types.selectionpath.html index 3c174b8eb93..341cc57d82d 100644 --- a/docs/interfaces/roosterjs_editor_types.selectionpath.html +++ b/docs/interfaces/roosterjs_editor_types.selectionpath.html @@ -108,7 +108,7 @@

    end

    end: number[]
    @@ -123,7 +123,7 @@

    start

    start: number[]
    diff --git a/docs/interfaces/roosterjs_editor_types.selectionrangeexbase.html b/docs/interfaces/roosterjs_editor_types.selectionrangeexbase.html index 654b73ac2d1..b8868ddf88e 100644 --- a/docs/interfaces/roosterjs_editor_types.selectionrangeexbase.html +++ b/docs/interfaces/roosterjs_editor_types.selectionrangeexbase.html @@ -123,7 +123,7 @@

    areAllCollapsed

    areAllCollapsed: boolean
    @@ -138,7 +138,7 @@

    ranges

    ranges: Range[]
    @@ -153,7 +153,7 @@

    type

    type: T
    diff --git a/docs/interfaces/roosterjs_editor_types.shortcutfeaturesettings.html b/docs/interfaces/roosterjs_editor_types.shortcutfeaturesettings.html index 62c292c77fd..280f5b844ea 100644 --- a/docs/interfaces/roosterjs_editor_types.shortcutfeaturesettings.html +++ b/docs/interfaces/roosterjs_editor_types.shortcutfeaturesettings.html @@ -107,7 +107,7 @@

    defaultShortcut

    defaultShortcut: boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.snapshot.html b/docs/interfaces/roosterjs_editor_types.snapshot.html index 949bbea0c95..969579c26d7 100644 --- a/docs/interfaces/roosterjs_editor_types.snapshot.html +++ b/docs/interfaces/roosterjs_editor_types.snapshot.html @@ -105,7 +105,7 @@

    Optional entityStates

    entityStates: EntityState[]
    @@ -121,7 +121,7 @@

    html

    html: string
    @@ -136,7 +136,7 @@

    knownColors

    knownColors: Readonly<ModeIndependentColor>[]
    @@ -151,7 +151,7 @@

    metadata

    metadata: ContentMetadata
    diff --git a/docs/interfaces/roosterjs_editor_types.snapshots.html b/docs/interfaces/roosterjs_editor_types.snapshots.html index a7a6badc4e0..2512e22babf 100644 --- a/docs/interfaces/roosterjs_editor_types.snapshots.html +++ b/docs/interfaces/roosterjs_editor_types.snapshots.html @@ -114,7 +114,7 @@

    autoCompleteIndex

    autoCompleteIndex: number
    @@ -129,7 +129,7 @@

    currentIndex

    currentIndex: number
    @@ -144,7 +144,7 @@

    Readonly maxSize

    maxSize: number
    @@ -159,7 +159,7 @@

    snapshots

    snapshots: T[]
    @@ -174,7 +174,7 @@

    totalSize

    totalSize: number
    diff --git a/docs/interfaces/roosterjs_editor_types.stringdefinition.html b/docs/interfaces/roosterjs_editor_types.stringdefinition.html index b2d7c787ed0..f02b4621341 100644 --- a/docs/interfaces/roosterjs_editor_types.stringdefinition.html +++ b/docs/interfaces/roosterjs_editor_types.stringdefinition.html @@ -111,7 +111,7 @@

    Optional allowNull

    @@ -127,7 +127,7 @@

    Optional isOptional

    @@ -143,7 +143,7 @@

    type

    @@ -158,7 +158,7 @@

    Optional value

    value: string
    diff --git a/docs/interfaces/roosterjs_editor_types.structurednodefeaturesettings.html b/docs/interfaces/roosterjs_editor_types.structurednodefeaturesettings.html index caa1e2dd46d..860e6162565 100644 --- a/docs/interfaces/roosterjs_editor_types.structurednodefeaturesettings.html +++ b/docs/interfaces/roosterjs_editor_types.structurednodefeaturesettings.html @@ -107,7 +107,7 @@

    insertLineBeforeStructuredNodeFeature

    insertLineBeforeStructuredNodeFeature: boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.stylebasedformatstate.html b/docs/interfaces/roosterjs_editor_types.stylebasedformatstate.html index d6d5c475065..5a053141eff 100644 --- a/docs/interfaces/roosterjs_editor_types.stylebasedformatstate.html +++ b/docs/interfaces/roosterjs_editor_types.stylebasedformatstate.html @@ -117,7 +117,7 @@

    Optional backgroundColor<
    backgroundColor: string
    @@ -132,7 +132,7 @@

    Optional backgroundColors
    backgroundColors: ModeIndependentColor
    @@ -147,7 +147,7 @@

    Optional direction

    direction: string
    @@ -162,7 +162,7 @@

    Optional fontName

    fontName: string
    @@ -177,7 +177,7 @@

    Optional fontSize

    fontSize: string
    @@ -192,7 +192,7 @@

    Optional lineHeight

    lineHeight: string
    @@ -207,7 +207,7 @@

    Optional marginBottom

    marginBottom: string
    @@ -222,7 +222,7 @@

    Optional marginTop

    marginTop: string
    @@ -237,7 +237,7 @@

    Optional textAlign

    textAlign: string
    @@ -252,7 +252,7 @@

    Optional textColor

    textColor: string
    @@ -267,7 +267,7 @@

    Optional textColors

    diff --git a/docs/interfaces/roosterjs_editor_types.tablecontentmetadata.html b/docs/interfaces/roosterjs_editor_types.tablecontentmetadata.html index e4e1675bba3..b012f1e1b04 100644 --- a/docs/interfaces/roosterjs_editor_types.tablecontentmetadata.html +++ b/docs/interfaces/roosterjs_editor_types.tablecontentmetadata.html @@ -119,7 +119,7 @@

    firstCell

    @@ -135,7 +135,7 @@

    isDarkMode

    @@ -146,7 +146,7 @@

    lastCell

    @@ -161,7 +161,7 @@

    tableId

    tableId: string
    @@ -172,7 +172,7 @@

    type

    diff --git a/docs/interfaces/roosterjs_editor_types.tablefeaturesettings.html b/docs/interfaces/roosterjs_editor_types.tablefeaturesettings.html index 37fa0a56310..b31fa12fc32 100644 --- a/docs/interfaces/roosterjs_editor_types.tablefeaturesettings.html +++ b/docs/interfaces/roosterjs_editor_types.tablefeaturesettings.html @@ -110,7 +110,7 @@

    deleteTableWithBackspace

    deleteTableWithBackspace: boolean
    @@ -126,7 +126,7 @@

    indentTableOnTab

    indentTableOnTab: boolean
    @@ -141,7 +141,7 @@

    tabInTable

    tabInTable: boolean
    @@ -161,7 +161,7 @@

    upDownInTable

    upDownInTable: boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.tableformat.html b/docs/interfaces/roosterjs_editor_types.tableformat.html index bebb56ceabf..af35678d4d2 100644 --- a/docs/interfaces/roosterjs_editor_types.tableformat.html +++ b/docs/interfaces/roosterjs_editor_types.tableformat.html @@ -113,7 +113,7 @@

    Optional bgColorEven
    bgColorEven: string
    @@ -128,7 +128,7 @@

    Optional bgColorOdd<
    bgColorOdd: string
    @@ -143,7 +143,7 @@

    Optional bottomBorderbottomBorderColor: string

    @@ -158,7 +158,7 @@

    Optional hasBandedCo
    hasBandedColumns: boolean
    @@ -173,7 +173,7 @@

    Optional hasBandedRo
    hasBandedRows: boolean
    @@ -188,7 +188,7 @@

    Optional hasFirstCol
    hasFirstColumn: boolean
    @@ -203,7 +203,7 @@

    Optional hasHeaderRo
    hasHeaderRow: boolean
    @@ -218,7 +218,7 @@

    Optional headerRowCo
    headerRowColor: string
    @@ -233,7 +233,7 @@

    Optional keepCellSha
    keepCellShade: boolean
    @@ -248,7 +248,7 @@

    Optional tableBorder
    @@ -263,7 +263,7 @@

    Optional topBorderCo
    topBorderColor: string
    @@ -278,7 +278,7 @@

    Optional verticalBorderverticalBorderColor: string

    diff --git a/docs/interfaces/roosterjs_editor_types.tableselection.html b/docs/interfaces/roosterjs_editor_types.tableselection.html index 998bb6a961c..c90ad1df9c6 100644 --- a/docs/interfaces/roosterjs_editor_types.tableselection.html +++ b/docs/interfaces/roosterjs_editor_types.tableselection.html @@ -108,7 +108,7 @@

    firstCell

    firstCell: Coordinates
    @@ -123,7 +123,7 @@

    lastCell

    lastCell: Coordinates
    diff --git a/docs/interfaces/roosterjs_editor_types.tableselectionrange.html b/docs/interfaces/roosterjs_editor_types.tableselectionrange.html index cd100de1352..ac52d9122a2 100644 --- a/docs/interfaces/roosterjs_editor_types.tableselectionrange.html +++ b/docs/interfaces/roosterjs_editor_types.tableselectionrange.html @@ -113,7 +113,7 @@

    areAllCollapsed

    @@ -128,7 +128,7 @@

    coordinates

    coordinates: TableSelection
    @@ -143,7 +143,7 @@

    Optional isWholeTabl
    isWholeTableSelected: boolean
    @@ -159,7 +159,7 @@

    ranges

    @@ -174,7 +174,7 @@

    table

    table: HTMLTableElement
    @@ -190,7 +190,7 @@

    type

    diff --git a/docs/interfaces/roosterjs_editor_types.targetwindow.html b/docs/interfaces/roosterjs_editor_types.targetwindow.html index ee57bc064c6..70617b3121c 100644 --- a/docs/interfaces/roosterjs_editor_types.targetwindow.html +++ b/docs/interfaces/roosterjs_editor_types.targetwindow.html @@ -200,7 +200,7 @@

    Attr

    @@ -211,7 +211,7 @@

    CDATASection

    @@ -222,7 +222,7 @@

    CharacterData

    @@ -233,7 +233,7 @@

    ChildNode

    @@ -244,7 +244,7 @@

    Comment

    @@ -255,7 +255,7 @@

    Document

    @@ -266,7 +266,7 @@

    DocumentFragment

    @@ -277,7 +277,7 @@

    DocumentType

    @@ -288,7 +288,7 @@

    Element

    @@ -299,7 +299,7 @@

    HTMLAnchorElement

    @@ -309,7 +309,7 @@

    HTMLAppletElement

    HTMLAppletElement: Element
    @@ -327,7 +327,7 @@

    HTMLAreaElement

    @@ -338,7 +338,7 @@

    HTMLAudioElement

    @@ -349,7 +349,7 @@

    HTMLBRElement

    @@ -360,7 +360,7 @@

    HTMLBaseElement

    @@ -370,7 +370,7 @@

    HTMLBaseFontElement

    HTMLBaseFontElement: Element
    @@ -388,7 +388,7 @@

    HTMLBodyElement

    @@ -399,7 +399,7 @@

    HTMLButtonElement

    @@ -410,7 +410,7 @@

    HTMLCanvasElement

    @@ -421,7 +421,7 @@

    HTMLDListElement

    @@ -432,7 +432,7 @@

    HTMLDataElement

    @@ -443,7 +443,7 @@

    HTMLDataListElement

    @@ -454,7 +454,7 @@

    HTMLDetailsElement

    @@ -465,7 +465,7 @@

    HTMLDialogElement

    @@ -476,7 +476,7 @@

    HTMLDirectoryElement

    @@ -487,7 +487,7 @@

    HTMLDivElement

    @@ -498,7 +498,7 @@

    HTMLDocument

    @@ -509,7 +509,7 @@

    HTMLElement

    @@ -520,7 +520,7 @@

    HTMLEmbedElement

    @@ -531,7 +531,7 @@

    HTMLFieldSetElement

    @@ -542,7 +542,7 @@

    HTMLFontElement

    @@ -553,7 +553,7 @@

    HTMLFormElement

    @@ -564,7 +564,7 @@

    HTMLFrameElement

    @@ -575,7 +575,7 @@

    HTMLFrameSetElement

    @@ -586,7 +586,7 @@

    HTMLHRElement

    @@ -597,7 +597,7 @@

    HTMLHeadElement

    @@ -608,7 +608,7 @@

    HTMLHeadingElement

    @@ -619,7 +619,7 @@

    HTMLHtmlElement

    @@ -630,7 +630,7 @@

    HTMLIFrameElement

    @@ -641,7 +641,7 @@

    HTMLImageElement

    @@ -652,7 +652,7 @@

    HTMLInputElement

    @@ -663,7 +663,7 @@

    HTMLLIElement

    @@ -674,7 +674,7 @@

    HTMLLabelElement

    @@ -685,7 +685,7 @@

    HTMLLegendElement

    @@ -696,7 +696,7 @@

    HTMLLinkElement

    @@ -707,7 +707,7 @@

    HTMLMapElement

    @@ -718,7 +718,7 @@

    HTMLMarqueeElement

    @@ -729,7 +729,7 @@

    HTMLMediaElement

    @@ -740,7 +740,7 @@

    HTMLMenuElement

    @@ -751,7 +751,7 @@

    HTMLMetaElement

    @@ -762,7 +762,7 @@

    HTMLMeterElement

    @@ -773,7 +773,7 @@

    HTMLModElement

    @@ -784,7 +784,7 @@

    HTMLOListElement

    @@ -795,7 +795,7 @@

    HTMLObjectElement

    @@ -806,7 +806,7 @@

    HTMLOptGroupElement

    @@ -817,7 +817,7 @@

    HTMLOptionElement

    @@ -828,7 +828,7 @@

    HTMLOutputElement

    @@ -839,7 +839,7 @@

    HTMLParagraphElement

    @@ -850,7 +850,7 @@

    HTMLParamElement

    @@ -861,7 +861,7 @@

    HTMLPictureElement

    @@ -872,7 +872,7 @@

    HTMLPreElement

    @@ -883,7 +883,7 @@

    HTMLProgressElement

    @@ -894,7 +894,7 @@

    HTMLQuoteElement

    @@ -905,7 +905,7 @@

    HTMLScriptElement

    @@ -916,7 +916,7 @@

    HTMLSelectElement

    @@ -927,7 +927,7 @@

    HTMLSlotElement

    @@ -938,7 +938,7 @@

    HTMLSourceElement

    @@ -949,7 +949,7 @@

    HTMLSpanElement

    @@ -960,7 +960,7 @@

    HTMLStyleElement

    @@ -971,7 +971,7 @@

    HTMLTableCaptionElement

    @@ -982,7 +982,7 @@

    HTMLTableCellElement

    @@ -993,7 +993,7 @@

    HTMLTableColElement

    @@ -1004,7 +1004,7 @@

    HTMLTableDataCellElement

    @@ -1015,7 +1015,7 @@

    HTMLTableElement

    @@ -1026,7 +1026,7 @@

    HTMLTableHeaderCellElement

    @@ -1037,7 +1037,7 @@

    HTMLTableRowElement

    @@ -1048,7 +1048,7 @@

    HTMLTableSectionElement

    @@ -1059,7 +1059,7 @@

    HTMLTemplateElement

    @@ -1070,7 +1070,7 @@

    HTMLTextAreaElement

    @@ -1081,7 +1081,7 @@

    HTMLTimeElement

    @@ -1092,7 +1092,7 @@

    HTMLTitleElement

    @@ -1103,7 +1103,7 @@

    HTMLTrackElement

    @@ -1114,7 +1114,7 @@

    HTMLUListElement

    @@ -1125,7 +1125,7 @@

    HTMLUnknownElement

    @@ -1136,7 +1136,7 @@

    HTMLVideoElement

    @@ -1147,7 +1147,7 @@

    Node

    @@ -1158,7 +1158,7 @@

    ParentNode

    @@ -1169,7 +1169,7 @@

    ProcessingInstruction

    @@ -1180,7 +1180,7 @@

    Range

    @@ -1190,7 +1190,7 @@

    SVGCursorElement

    SVGCursorElement: Element
    @@ -1208,7 +1208,7 @@

    ShadowRoot

    @@ -1219,7 +1219,7 @@

    Text

    @@ -1230,7 +1230,7 @@

    XMLDocument

    diff --git a/docs/interfaces/roosterjs_editor_types.targetwindowbase.html b/docs/interfaces/roosterjs_editor_types.targetwindowbase.html index 3123de379b0..75c82e5f335 100644 --- a/docs/interfaces/roosterjs_editor_types.targetwindowbase.html +++ b/docs/interfaces/roosterjs_editor_types.targetwindowbase.html @@ -196,7 +196,7 @@

    Attr

    Attr: Attr
    @@ -206,7 +206,7 @@

    CDATASection

    CDATASection: CDATASection
    @@ -216,7 +216,7 @@

    CharacterData

    CharacterData: CharacterData
    @@ -226,7 +226,7 @@

    ChildNode

    ChildNode: ChildNode
    @@ -236,7 +236,7 @@

    Comment

    Comment: Comment
    @@ -246,7 +246,7 @@

    Document

    Document: Document
    @@ -256,7 +256,7 @@

    DocumentFragment

    DocumentFragment: DocumentFragment
    @@ -266,7 +266,7 @@

    DocumentType

    DocumentType: DocumentType
    @@ -276,7 +276,7 @@

    Element

    Element: Element
    @@ -286,7 +286,7 @@

    HTMLAnchorElement

    HTMLAnchorElement: HTMLAnchorElement
    @@ -296,7 +296,7 @@

    HTMLAreaElement

    HTMLAreaElement: HTMLAreaElement
    @@ -306,7 +306,7 @@

    HTMLAudioElement

    HTMLAudioElement: HTMLAudioElement
    @@ -316,7 +316,7 @@

    HTMLBRElement

    HTMLBRElement: HTMLBRElement
    @@ -326,7 +326,7 @@

    HTMLBaseElement

    HTMLBaseElement: HTMLBaseElement
    @@ -336,7 +336,7 @@

    HTMLBodyElement

    HTMLBodyElement: HTMLBodyElement
    @@ -346,7 +346,7 @@

    HTMLButtonElement

    HTMLButtonElement: HTMLButtonElement
    @@ -356,7 +356,7 @@

    HTMLCanvasElement

    HTMLCanvasElement: HTMLCanvasElement
    @@ -366,7 +366,7 @@

    HTMLDListElement

    HTMLDListElement: HTMLDListElement
    @@ -376,7 +376,7 @@

    HTMLDataElement

    HTMLDataElement: HTMLDataElement
    @@ -386,7 +386,7 @@

    HTMLDataListElement

    HTMLDataListElement: HTMLDataListElement
    @@ -396,7 +396,7 @@

    HTMLDetailsElement

    HTMLDetailsElement: HTMLDetailsElement
    @@ -406,7 +406,7 @@

    HTMLDialogElement

    HTMLDialogElement: HTMLDialogElement
    @@ -416,7 +416,7 @@

    HTMLDirectoryElement

    HTMLDirectoryElement: HTMLDirectoryElement
    @@ -426,7 +426,7 @@

    HTMLDivElement

    HTMLDivElement: HTMLDivElement
    @@ -436,7 +436,7 @@

    HTMLDocument

    HTMLDocument: HTMLDocument
    @@ -446,7 +446,7 @@

    HTMLElement

    HTMLElement: HTMLElement
    @@ -456,7 +456,7 @@

    HTMLEmbedElement

    HTMLEmbedElement: HTMLEmbedElement
    @@ -466,7 +466,7 @@

    HTMLFieldSetElement

    HTMLFieldSetElement: HTMLFieldSetElement
    @@ -476,7 +476,7 @@

    HTMLFontElement

    HTMLFontElement: HTMLFontElement
    @@ -486,7 +486,7 @@

    HTMLFormElement

    HTMLFormElement: HTMLFormElement
    @@ -496,7 +496,7 @@

    HTMLFrameElement

    HTMLFrameElement: HTMLFrameElement
    @@ -506,7 +506,7 @@

    HTMLFrameSetElement

    HTMLFrameSetElement: HTMLFrameSetElement
    @@ -516,7 +516,7 @@

    HTMLHRElement

    HTMLHRElement: HTMLHRElement
    @@ -526,7 +526,7 @@

    HTMLHeadElement

    HTMLHeadElement: HTMLHeadElement
    @@ -536,7 +536,7 @@

    HTMLHeadingElement

    HTMLHeadingElement: HTMLHeadingElement
    @@ -546,7 +546,7 @@

    HTMLHtmlElement

    HTMLHtmlElement: HTMLHtmlElement
    @@ -556,7 +556,7 @@

    HTMLIFrameElement

    HTMLIFrameElement: HTMLIFrameElement
    @@ -566,7 +566,7 @@

    HTMLImageElement

    HTMLImageElement: HTMLImageElement
    @@ -576,7 +576,7 @@

    HTMLInputElement

    HTMLInputElement: HTMLInputElement
    @@ -586,7 +586,7 @@

    HTMLLIElement

    HTMLLIElement: HTMLLIElement
    @@ -596,7 +596,7 @@

    HTMLLabelElement

    HTMLLabelElement: HTMLLabelElement
    @@ -606,7 +606,7 @@

    HTMLLegendElement

    HTMLLegendElement: HTMLLegendElement
    @@ -616,7 +616,7 @@

    HTMLLinkElement

    HTMLLinkElement: HTMLLinkElement
    @@ -626,7 +626,7 @@

    HTMLMapElement

    HTMLMapElement: HTMLMapElement
    @@ -636,7 +636,7 @@

    HTMLMarqueeElement

    HTMLMarqueeElement: HTMLMarqueeElement
    @@ -646,7 +646,7 @@

    HTMLMediaElement

    HTMLMediaElement: HTMLMediaElement
    @@ -656,7 +656,7 @@

    HTMLMenuElement

    HTMLMenuElement: HTMLMenuElement
    @@ -666,7 +666,7 @@

    HTMLMetaElement

    HTMLMetaElement: HTMLMetaElement
    @@ -676,7 +676,7 @@

    HTMLMeterElement

    HTMLMeterElement: HTMLMeterElement
    @@ -686,7 +686,7 @@

    HTMLModElement

    HTMLModElement: HTMLModElement
    @@ -696,7 +696,7 @@

    HTMLOListElement

    HTMLOListElement: HTMLOListElement
    @@ -706,7 +706,7 @@

    HTMLObjectElement

    HTMLObjectElement: HTMLObjectElement
    @@ -716,7 +716,7 @@

    HTMLOptGroupElement

    HTMLOptGroupElement: HTMLOptGroupElement
    @@ -726,7 +726,7 @@

    HTMLOptionElement

    HTMLOptionElement: HTMLOptionElement
    @@ -736,7 +736,7 @@

    HTMLOutputElement

    HTMLOutputElement: HTMLOutputElement
    @@ -746,7 +746,7 @@

    HTMLParagraphElement

    HTMLParagraphElement: HTMLParagraphElement
    @@ -756,7 +756,7 @@

    HTMLParamElement

    HTMLParamElement: HTMLParamElement
    @@ -766,7 +766,7 @@

    HTMLPictureElement

    HTMLPictureElement: HTMLPictureElement
    @@ -776,7 +776,7 @@

    HTMLPreElement

    HTMLPreElement: HTMLPreElement
    @@ -786,7 +786,7 @@

    HTMLProgressElement

    HTMLProgressElement: HTMLProgressElement
    @@ -796,7 +796,7 @@

    HTMLQuoteElement

    HTMLQuoteElement: HTMLQuoteElement
    @@ -806,7 +806,7 @@

    HTMLScriptElement

    HTMLScriptElement: HTMLScriptElement
    @@ -816,7 +816,7 @@

    HTMLSelectElement

    HTMLSelectElement: HTMLSelectElement
    @@ -826,7 +826,7 @@

    HTMLSlotElement

    HTMLSlotElement: HTMLSlotElement
    @@ -836,7 +836,7 @@

    HTMLSourceElement

    HTMLSourceElement: HTMLSourceElement
    @@ -846,7 +846,7 @@

    HTMLSpanElement

    HTMLSpanElement: HTMLSpanElement
    @@ -856,7 +856,7 @@

    HTMLStyleElement

    HTMLStyleElement: HTMLStyleElement
    @@ -866,7 +866,7 @@

    HTMLTableCaptionElement

    HTMLTableCaptionElement: HTMLTableCaptionElement
    @@ -876,7 +876,7 @@

    HTMLTableCellElement

    HTMLTableCellElement: HTMLTableCellElement
    @@ -886,7 +886,7 @@

    HTMLTableColElement

    HTMLTableColElement: HTMLTableColElement
    @@ -896,7 +896,7 @@

    HTMLTableDataCellElement

    HTMLTableDataCellElement: HTMLTableDataCellElement
    @@ -906,7 +906,7 @@

    HTMLTableElement

    HTMLTableElement: HTMLTableElement
    @@ -916,7 +916,7 @@

    HTMLTableHeaderCellElement

    HTMLTableHeaderCellElement: HTMLTableHeaderCellElement
    @@ -926,7 +926,7 @@

    HTMLTableRowElement

    HTMLTableRowElement: HTMLTableRowElement
    @@ -936,7 +936,7 @@

    HTMLTableSectionElement

    HTMLTableSectionElement: HTMLTableSectionElement
    @@ -946,7 +946,7 @@

    HTMLTemplateElement

    HTMLTemplateElement: HTMLTemplateElement
    @@ -956,7 +956,7 @@

    HTMLTextAreaElement

    HTMLTextAreaElement: HTMLTextAreaElement
    @@ -966,7 +966,7 @@

    HTMLTimeElement

    HTMLTimeElement: HTMLTimeElement
    @@ -976,7 +976,7 @@

    HTMLTitleElement

    HTMLTitleElement: HTMLTitleElement
    @@ -986,7 +986,7 @@

    HTMLTrackElement

    HTMLTrackElement: HTMLTrackElement
    @@ -996,7 +996,7 @@

    HTMLUListElement

    HTMLUListElement: HTMLUListElement
    @@ -1006,7 +1006,7 @@

    HTMLUnknownElement

    HTMLUnknownElement: HTMLUnknownElement
    @@ -1016,7 +1016,7 @@

    HTMLVideoElement

    HTMLVideoElement: HTMLVideoElement
    @@ -1026,7 +1026,7 @@

    Node

    Node: Node
    @@ -1036,7 +1036,7 @@

    ParentNode

    ParentNode: ParentNode
    @@ -1046,7 +1046,7 @@

    ProcessingInstruction

    ProcessingInstruction: ProcessingInstruction
    @@ -1056,7 +1056,7 @@

    Range

    Range: Range
    @@ -1066,7 +1066,7 @@

    ShadowRoot

    ShadowRoot: ShadowRoot
    @@ -1076,7 +1076,7 @@

    Text

    Text: Text
    @@ -1086,7 +1086,7 @@

    XMLDocument

    XMLDocument: XMLDocument
    diff --git a/docs/interfaces/roosterjs_editor_types.textfeaturesettings.html b/docs/interfaces/roosterjs_editor_types.textfeaturesettings.html index 9ad46bfe083..089f175d3f0 100644 --- a/docs/interfaces/roosterjs_editor_types.textfeaturesettings.html +++ b/docs/interfaces/roosterjs_editor_types.textfeaturesettings.html @@ -109,7 +109,7 @@

    autoHyphen

    autoHyphen: boolean
    @@ -127,7 +127,7 @@

    indentWhenTabText

    indentWhenTabText: boolean
    @@ -147,7 +147,7 @@

    outdentWhenTabText

    outdentWhenTabText: boolean
    diff --git a/docs/interfaces/roosterjs_editor_types.undopluginstate.html b/docs/interfaces/roosterjs_editor_types.undopluginstate.html index 79768946580..eb4a429e66f 100644 --- a/docs/interfaces/roosterjs_editor_types.undopluginstate.html +++ b/docs/interfaces/roosterjs_editor_types.undopluginstate.html @@ -106,7 +106,7 @@

    autoCompletePosition

    autoCompletePosition: NodePosition
    @@ -121,7 +121,7 @@

    hasNewContent

    hasNewContent: boolean
    @@ -136,7 +136,7 @@

    isNested

    isNested: boolean
    @@ -151,7 +151,7 @@

    isRestoring

    isRestoring: boolean
    @@ -166,7 +166,7 @@

    snapshotsService

    snapshotsService: UndoSnapshotsService<Snapshot>
    diff --git a/docs/interfaces/roosterjs_editor_types.undosnapshotsservice.html b/docs/interfaces/roosterjs_editor_types.undosnapshotsservice.html index 3503765cf38..b250478aee8 100644 --- a/docs/interfaces/roosterjs_editor_types.undosnapshotsservice.html +++ b/docs/interfaces/roosterjs_editor_types.undosnapshotsservice.html @@ -118,7 +118,7 @@

    addSnapshot

  • @@ -152,7 +152,7 @@

    canMove

  • @@ -184,7 +184,7 @@

    canUndoAutoComplete

  • @@ -206,7 +206,7 @@

    clearRedo

  • @@ -228,7 +228,7 @@

    move

  • diff --git a/docs/interfaces/roosterjs_editor_types.vcell.html b/docs/interfaces/roosterjs_editor_types.vcell.html index 081f0d0486b..1defb4ca75f 100644 --- a/docs/interfaces/roosterjs_editor_types.vcell.html +++ b/docs/interfaces/roosterjs_editor_types.vcell.html @@ -106,7 +106,7 @@

    Optional height

    height: number
    @@ -122,7 +122,7 @@

    Optional spanAbove

    spanAbove: boolean
    @@ -137,7 +137,7 @@

    Optional spanLeft

    spanLeft: boolean
    @@ -152,7 +152,7 @@

    Optional td

    td: HTMLTableCellElement
    @@ -167,7 +167,7 @@

    Optional width

    width: number
    diff --git a/docs/interfaces/roosterjs_editor_types.zoomchangedevent.html b/docs/interfaces/roosterjs_editor_types.zoomchangedevent.html index 16eb0a6ba07..2d492bc5575 100644 --- a/docs/interfaces/roosterjs_editor_types.zoomchangedevent.html +++ b/docs/interfaces/roosterjs_editor_types.zoomchangedevent.html @@ -115,7 +115,7 @@

    Optional eventDataCa
    @@ -141,7 +141,7 @@

    eventType

    @@ -157,7 +157,7 @@

    newZoomScale

    @@ -173,7 +173,7 @@

    oldZoomScale

    diff --git a/docs/interfaces/roosterjs_editor_types.zoomchangedeventdata.html b/docs/interfaces/roosterjs_editor_types.zoomchangedeventdata.html index d5ad322e0e3..851061cd449 100644 --- a/docs/interfaces/roosterjs_editor_types.zoomchangedeventdata.html +++ b/docs/interfaces/roosterjs_editor_types.zoomchangedeventdata.html @@ -111,7 +111,7 @@

    newZoomScale

    newZoomScale: number
    @@ -126,7 +126,7 @@

    oldZoomScale

    oldZoomScale: number
    diff --git a/docs/interfaces/roosterjs_react.contextmenuitem.html b/docs/interfaces/roosterjs_react.contextmenuitem.html index f7c6430e603..3af7a447dbb 100644 --- a/docs/interfaces/roosterjs_react.contextmenuitem.html +++ b/docs/interfaces/roosterjs_react.contextmenuitem.html @@ -120,7 +120,7 @@

    Optional commandBarS
    commandBarSubMenuProperties: Partial<IContextualMenuProps>
    @@ -135,7 +135,7 @@

    Optional itemClassNa
    itemClassName: string
    @@ -150,7 +150,7 @@

    Optional itemRender

    itemRender: (item: IContextualMenuItem, onClick: (e: MouseEvent<Element, MouseEvent> | KeyboardEvent<Element>, item: IContextualMenuItem) => void) => ReactNode
    @@ -220,7 +220,7 @@

    key

    key: TString
    @@ -235,7 +235,7 @@

    onClick

    onClick: (key: TString, editor: IEditor, targetNode: Node, strings: LocalizedStrings<TString, string>, uiUtilities: UIUtilities, context?: TContext) => void
    @@ -316,7 +316,7 @@

    Optional shouldShow

    shouldShow: (editor: IEditor, targetNode: Node, context?: TContext) => boolean
    @@ -373,7 +373,7 @@

    Optional subItems

    subItems: {[ key in string]: string }
    @@ -389,7 +389,7 @@

    unlocalizedText

    unlocalizedText: string
    diff --git a/docs/interfaces/roosterjs_react.reacteditorplugin.html b/docs/interfaces/roosterjs_react.reacteditorplugin.html index 69de3bfc4ec..5f1159cbe18 100644 --- a/docs/interfaces/roosterjs_react.reacteditorplugin.html +++ b/docs/interfaces/roosterjs_react.reacteditorplugin.html @@ -123,7 +123,7 @@

    dispose

    @@ -156,7 +156,7 @@

    getName

    @@ -187,7 +187,7 @@

    initialize

    @@ -231,7 +231,7 @@

    Optional onPluginEve
    @@ -275,7 +275,7 @@

    Optional willHandleE
    @@ -327,7 +327,7 @@

    setUIUtilities

  • diff --git a/docs/interfaces/roosterjs_react.ribbonbutton.html b/docs/interfaces/roosterjs_react.ribbonbutton.html index b8f17e1f76f..63f97f7c555 100644 --- a/docs/interfaces/roosterjs_react.ribbonbutton.html +++ b/docs/interfaces/roosterjs_react.ribbonbutton.html @@ -118,7 +118,7 @@

    Optional commandBarP
    commandBarProperties: Partial<ICommandBarItemProps>
    @@ -135,7 +135,7 @@

    Optional dropDownMen
    dropDownMenu: RibbonButtonDropDown
    @@ -152,7 +152,7 @@

    Optional flipWhenRtl
    flipWhenRtl: boolean
    @@ -167,7 +167,7 @@

    iconName

    iconName: string
    @@ -182,7 +182,7 @@

    Optional isChecked

    isChecked: (formatState: FormatState) => boolean
    @@ -224,7 +224,7 @@

    Optional isDisabled

    isDisabled: (formatState: FormatState) => boolean
    @@ -266,7 +266,7 @@

    key

    key: T
    @@ -281,7 +281,7 @@

    onClick

    onClick: (editor: IEditor, key: T, strings: LocalizedStrings<T, string>, uiUtilities: UIUtilities) => void
    @@ -346,7 +346,7 @@

    unlocalizedText

    unlocalizedText: string
    diff --git a/docs/interfaces/roosterjs_react.ribbonbuttondropdown.html b/docs/interfaces/roosterjs_react.ribbonbuttondropdown.html index 7d0f0cf14e1..79b1bb3dd30 100644 --- a/docs/interfaces/roosterjs_react.ribbonbuttondropdown.html +++ b/docs/interfaces/roosterjs_react.ribbonbuttondropdown.html @@ -107,7 +107,7 @@

    Optional allowLivePr
    allowLivePreview: boolean
    @@ -124,7 +124,7 @@

    Optional commandBarS
    commandBarSubMenuProperties: Partial<IContextualMenuProps>
    @@ -139,7 +139,7 @@

    Optional getSelected
    getSelectedItemKey: (formatState: FormatState) => string
    @@ -181,7 +181,7 @@

    Optional itemClassNa
    itemClassName: string
    @@ -196,7 +196,7 @@

    Optional itemRender

    itemRender: (item: IContextualMenuItem, onClick: (e: MouseEvent<Element, MouseEvent> | KeyboardEvent<Element>, item: IContextualMenuItem) => void) => ReactNode
    @@ -266,7 +266,7 @@

    items

    items: Record<string, string>
    diff --git a/docs/interfaces/roosterjs_react.ribbonplugin.html b/docs/interfaces/roosterjs_react.ribbonplugin.html index 5202b129b01..5b9a00fa973 100644 --- a/docs/interfaces/roosterjs_react.ribbonplugin.html +++ b/docs/interfaces/roosterjs_react.ribbonplugin.html @@ -122,7 +122,7 @@

    dispose

    @@ -155,7 +155,7 @@

    getName

    @@ -186,7 +186,7 @@

    initialize

    @@ -229,7 +229,7 @@

    onButtonClick

    onButtonClick: <T>(button: RibbonButton<T>, key: T, strings?: LocalizedStrings<T, string>) => void
    @@ -293,7 +293,7 @@

    Optional onPluginEve
    @@ -336,7 +336,7 @@

    registerFormatChangedCallback

    registerFormatChangedCallback: (callback: (formatState: FormatState) => void) => () => void
    @@ -402,7 +402,7 @@

    startLivePreview

    startLivePreview: <T>(button: RibbonButton<T>, key: T, strings?: LocalizedStrings<T, string>) => void
    @@ -465,7 +465,7 @@

    stopLivePreview

    stopLivePreview: () => void
    @@ -496,7 +496,7 @@

    Optional willHandleE
    @@ -549,7 +549,7 @@

    setUIUtilities

    diff --git a/docs/interfaces/roosterjs_react.ribbonprops.html b/docs/interfaces/roosterjs_react.ribbonprops.html index 0df7e3cf6bf..33394335806 100644 --- a/docs/interfaces/roosterjs_react.ribbonprops.html +++ b/docs/interfaces/roosterjs_react.ribbonprops.html @@ -117,7 +117,7 @@

    buttons

    buttons: RibbonButton<T>[]
    @@ -132,7 +132,7 @@

    plugin

    plugin: RibbonPlugin
    @@ -147,7 +147,7 @@

    Optional strings

    strings: LocalizedStrings<T, string>
    diff --git a/docs/interfaces/roosterjs_react.roosterprops.html b/docs/interfaces/roosterjs_react.roosterprops.html index 0bdeb3ad4df..ef5c0645572 100644 --- a/docs/interfaces/roosterjs_react.roosterprops.html +++ b/docs/interfaces/roosterjs_react.roosterprops.html @@ -132,7 +132,7 @@

    Optional allowKeyboard

    Inherited from EditorOptions.allowKeyboardEventPropagation

    @@ -151,7 +151,7 @@

    Optional allowedCustom

    Inherited from EditorOptions.allowedCustomPasteType

    @@ -168,7 +168,7 @@

    Optional coreApiOver
    @@ -185,7 +185,7 @@

    Optional corePluginO
    @@ -202,7 +202,7 @@

    Optional defaultFormat

    Inherited from EditorOptions.defaultFormat

    @@ -220,7 +220,7 @@

    Optional doNotAdjust
    @@ -235,7 +235,7 @@

    Optional editorCreatoreditorCreator: (div: HTMLDivElement, options: EditorOptions) => IEditor

    @@ -276,7 +276,7 @@

    Optional experimentalFeat
    @@ -291,7 +291,7 @@

    Optional focusOnInit

    focusOnInit: boolean
    @@ -308,7 +308,7 @@

    Optional getDarkColo
    @@ -346,7 +346,7 @@

    Optional getVisibleV
    @@ -377,7 +377,7 @@

    Optional imageSelection

    Inherited from EditorOptions.imageSelectionBorderColor

    @@ -393,7 +393,7 @@

    Optional inDarkMode<
    @@ -409,7 +409,7 @@

    Optional initialContent

    Inherited from EditorOptions.initialContent

    @@ -426,7 +426,7 @@

    Optional onExternalC
    @@ -467,7 +467,7 @@

    Optional plugins

    @@ -486,7 +486,7 @@

    Optional scrollContainer<
    @@ -503,7 +503,7 @@

    Optional sizeTransformer<
    @@ -521,7 +521,7 @@

    Optional trustedHTMLHandler

    Inherited from EditorOptions.trustedHTMLHandler

    @@ -539,7 +539,7 @@

    Optional undoMetadata

    Inherited from EditorOptions.undoMetadataSnapshotService

    @@ -556,7 +556,7 @@

    Optional undoSnapshot

    Inherited from EditorOptions.undoSnapshotService

    @@ -575,7 +575,7 @@

    Optional zoomScale

    diff --git a/docs/interfaces/roosterjs_react.uiutilities.html b/docs/interfaces/roosterjs_react.uiutilities.html index 5407661b68d..929efabe45b 100644 --- a/docs/interfaces/roosterjs_react.uiutilities.html +++ b/docs/interfaces/roosterjs_react.uiutilities.html @@ -107,7 +107,7 @@

    isRightToLeft

  • @@ -129,7 +129,7 @@

    renderComponent

  • diff --git a/docs/interfaces/roosterjs_react.updatecontentplugin.html b/docs/interfaces/roosterjs_react.updatecontentplugin.html index 8ed548353bf..79a5c9946c2 100644 --- a/docs/interfaces/roosterjs_react.updatecontentplugin.html +++ b/docs/interfaces/roosterjs_react.updatecontentplugin.html @@ -113,7 +113,7 @@

    dispose

    @@ -145,7 +145,7 @@

    forceUpdate

    forceUpdate: () => void
    @@ -176,7 +176,7 @@

    getName

    @@ -207,7 +207,7 @@

    initialize

    @@ -251,7 +251,7 @@

    Optional onPluginEve
    @@ -295,7 +295,7 @@

    Optional willHandleE
    diff --git a/docs/modules/roosterjs.html b/docs/modules/roosterjs.html index 5848bd7a0a9..1dcc0eb9053 100644 --- a/docs/modules/roosterjs.html +++ b/docs/modules/roosterjs.html @@ -88,7 +88,7 @@

    createEditor

  • diff --git a/docs/modules/roosterjs_color_utils.html b/docs/modules/roosterjs_color_utils.html index a5323aaf7ec..82999d45618 100644 --- a/docs/modules/roosterjs_color_utils.html +++ b/docs/modules/roosterjs_color_utils.html @@ -88,7 +88,7 @@

    getDarkColor

  • diff --git a/docs/modules/roosterjs_content_model.html b/docs/modules/roosterjs_content_model.html index c5955dc2959..42b2ba199b9 100644 --- a/docs/modules/roosterjs_content_model.html +++ b/docs/modules/roosterjs_content_model.html @@ -88,7 +88,7 @@

    createContentModelEditor

  • diff --git a/docs/modules/roosterjs_content_model_dom.html b/docs/modules/roosterjs_content_model_dom.html index 6f2f562f6a3..c2167fb550c 100644 --- a/docs/modules/roosterjs_content_model_dom.html +++ b/docs/modules/roosterjs_content_model_dom.html @@ -139,7 +139,7 @@

    Const BorderKeys

    BorderKeys: (keyof BorderFormat & keyof CSSStyleDeclaration)[] = ...
    @@ -154,7 +154,7 @@

    Const defaultImplicitFo
    defaultImplicitFormatMap: DefaultImplicitFormatMap = ...
    @@ -176,7 +176,7 @@

    addBlock

  • @@ -213,7 +213,7 @@

    addCode

  • @@ -250,7 +250,7 @@

    addLink

  • @@ -282,7 +282,7 @@

    addSegment

  • @@ -325,7 +325,7 @@

    areSameFormats

  • @@ -368,7 +368,7 @@

    Const childProcessor

  • @@ -408,7 +408,7 @@

    contentModelToDom

  • @@ -471,7 +471,7 @@

    createBr

  • @@ -502,7 +502,7 @@

    createContentModelDocument

  • @@ -533,7 +533,7 @@

    createDivider

  • @@ -570,7 +570,7 @@

    createDomToModelContext

  • @@ -607,7 +607,7 @@

    createEntity

  • @@ -662,7 +662,7 @@

    createFormatContainer

  • @@ -699,7 +699,7 @@

    createGeneralBlock

  • @@ -730,7 +730,7 @@

    createGeneralSegment

  • @@ -767,7 +767,7 @@

    createImage

  • @@ -804,7 +804,7 @@

    createListItem

  • @@ -841,7 +841,7 @@

    createParagraph

  • @@ -890,7 +890,7 @@

    createParagraphDecorator

  • @@ -927,7 +927,7 @@

    createSelectionMarker

  • @@ -958,7 +958,7 @@

    createTable

  • @@ -995,7 +995,7 @@

    createTableCell

  • @@ -1044,7 +1044,7 @@

    createText

  • @@ -1081,7 +1081,7 @@

    domToContentModel

  • @@ -1125,7 +1125,7 @@

    Const entityProcessor

  • @@ -1165,7 +1165,7 @@

    getRegularSelectionOffsets

  • @@ -1204,7 +1204,7 @@

    handleRegularSelection

  • @@ -1259,7 +1259,7 @@

    hasMetadata

  • @@ -1296,7 +1296,7 @@

    isGeneralSegment

  • @@ -1327,7 +1327,7 @@

    isNodeOfType

  • @@ -1370,7 +1370,7 @@

    isPunctuation

  • @@ -1401,7 +1401,7 @@

    isSpace

  • @@ -1433,7 +1433,7 @@

    isWhiteSpacePreserved

  • @@ -1464,7 +1464,7 @@

    normalizeContentModel

  • @@ -1502,7 +1502,7 @@

    normalizeSingleSegment

  • @@ -1539,7 +1539,7 @@

    normalizeText

  • @@ -1577,7 +1577,7 @@

    parseFormat

  • @@ -1632,7 +1632,7 @@

    parseValueWithUnit

  • @@ -1675,7 +1675,7 @@

    processChildNode

  • @@ -1715,7 +1715,7 @@

    setParagraphNotImplicit

  • @@ -1746,7 +1746,7 @@

    Const tableProcessor

  • @@ -1797,7 +1797,7 @@

    unwrapBlock

  • @@ -1834,7 +1834,7 @@

    updateMetadata

  • diff --git a/docs/modules/roosterjs_content_model_editor.html b/docs/modules/roosterjs_content_model_editor.html index df1a8b0ef63..119cacd1f44 100644 --- a/docs/modules/roosterjs_content_model_editor.html +++ b/docs/modules/roosterjs_content_model_editor.html @@ -173,7 +173,7 @@

    CreateContentModel

    CreateContentModel: (core: ContentModelEditorCore, option?: DomToModelOption) => ContentModelDocument
  • @@ -356,7 +356,7 @@

    adjustLinkSelection

  • @@ -385,7 +385,7 @@

    applyPendingFormat

  • @@ -422,7 +422,7 @@

    applySegmentFormat

  • @@ -459,7 +459,7 @@

    changeCapitalization

  • @@ -504,7 +504,7 @@

    changeFontSize

  • @@ -541,7 +541,7 @@

    changeImage

  • @@ -578,7 +578,7 @@

    clearFormat

  • @@ -609,7 +609,7 @@

    combineBorderValue

  • @@ -637,7 +637,7 @@

    Const createContentMode
  • @@ -668,7 +668,7 @@

    editTable

  • @@ -705,7 +705,7 @@

    extractBorderValues

  • @@ -737,7 +737,7 @@

    formatTable

  • @@ -780,7 +780,7 @@

    getFormatState

  • @@ -811,7 +811,7 @@

    getSegmentFormat

  • @@ -842,7 +842,7 @@

    hasSelectionInBlock

  • @@ -873,7 +873,7 @@

    hasSelectionInBlockGroup

  • @@ -901,7 +901,7 @@

    hasSelectionInSegment

  • @@ -932,7 +932,7 @@

    insertImage

  • @@ -966,7 +966,7 @@

    insertLink

  • @@ -1026,7 +1026,7 @@

    insertTable

  • @@ -1077,7 +1077,7 @@

    isContentModelEditor

  • @@ -1109,7 +1109,7 @@

    paste

  • @@ -1155,7 +1155,7 @@

    promoteToContentModelEditorCore

  • @@ -1192,7 +1192,7 @@

    removeLink

  • @@ -1225,7 +1225,7 @@

    setAlignment

  • @@ -1262,7 +1262,7 @@

    setBackgroundColor

  • @@ -1299,7 +1299,7 @@

    setDirection

  • @@ -1336,7 +1336,7 @@

    setFontName

  • @@ -1373,7 +1373,7 @@

    setFontSize

  • @@ -1410,7 +1410,7 @@

    setHeaderLevel

  • @@ -1447,7 +1447,7 @@

    setImageAltText

  • @@ -1485,7 +1485,7 @@

    setImageBorder

  • @@ -1529,7 +1529,7 @@

    setImageBoxShadow

  • @@ -1572,7 +1572,7 @@

    setIndentation

  • @@ -1615,7 +1615,7 @@

    setListStartNumber

  • @@ -1652,7 +1652,7 @@

    setListStyle

  • @@ -1689,7 +1689,7 @@

    setParagraphMargin

  • @@ -1733,7 +1733,7 @@

    setSpacing

  • @@ -1770,7 +1770,7 @@

    setTableCellShade

  • @@ -1807,7 +1807,7 @@

    setTextColor

  • @@ -1844,7 +1844,7 @@

    toggleBlockQuote

  • @@ -1883,7 +1883,7 @@

    toggleBold

  • @@ -1914,7 +1914,7 @@

    toggleBullet

  • @@ -1949,7 +1949,7 @@

    toggleCode

  • @@ -1980,7 +1980,7 @@

    toggleItalic

  • @@ -2011,7 +2011,7 @@

    toggleNumbering

  • @@ -2046,7 +2046,7 @@

    toggleStrikethrough

  • @@ -2077,7 +2077,7 @@

    toggleSubscript

  • @@ -2108,7 +2108,7 @@

    toggleSuperscript

  • @@ -2139,7 +2139,7 @@

    toggleUnderline

  • @@ -2170,7 +2170,7 @@

    updateImageMetadata

  • @@ -2225,7 +2225,7 @@

    updateTableCellMetadata

  • @@ -2280,7 +2280,7 @@

    updateTableMetadata

  • diff --git a/docs/modules/roosterjs_content_model_types.html b/docs/modules/roosterjs_content_model_types.html index 8ae74b5ea9f..b6b30d84d63 100644 --- a/docs/modules/roosterjs_content_model_types.html +++ b/docs/modules/roosterjs_content_model_types.html @@ -210,7 +210,7 @@

    BackgroundColorFormat

    BackgroundColorFormat: { backgroundColor?: string }
    @@ -238,7 +238,7 @@

    BoldFormat

    BoldFormat: { fontWeight?: string }
    @@ -266,7 +266,7 @@

    BorderBoxFormat

    BorderBoxFormat: { useBorderBox?: boolean }
    @@ -294,7 +294,7 @@

    BorderFormat

    BorderFormat: { borderBottom?: string; borderLeft?: string; borderRadius?: string; borderRight?: string; borderTop?: string }
    @@ -354,7 +354,7 @@

    BoxShadowFormat

    BoxShadowFormat: { boxShadow?: string }
    @@ -382,7 +382,7 @@

    ContentModelBlock

    @@ -397,7 +397,7 @@

    ContentModelBlockFormat

    @@ -412,7 +412,7 @@

    ContentModelBlockGroup

    @@ -427,7 +427,7 @@

    ContentModelBlockGroupType

    ContentModelBlockGroupType: "Document" | "FormatContainer" | "ListItem" | "TableCell" | "General"
    @@ -442,7 +442,7 @@

    ContentModelBlockHandler

    ContentModelBlockHandler<T>: (doc: Document, parent: Node, model: T, context: ModelToDomContext, refNode: Node | null) => Node | null

    Type parameters

    @@ -522,7 +522,7 @@

    ContentModelBlockType

    ContentModelBlockType: "BlockGroup" | "Table" | "Paragraph" | "Entity" | "Divider"
    @@ -537,7 +537,7 @@

    ContentModelCodeFormat

    ContentModelCodeFormat: FontFamilyFormat & DisplayFormat
    @@ -552,7 +552,7 @@

    ContentModelDecorator

    ContentModelDecorator: ContentModelLink | ContentModelCode
    @@ -567,7 +567,7 @@

    ContentModelDividerFormat

    ContentModelDividerFormat: ContentModelBlockFormat & DisplayFormat & SizeFormat
    @@ -582,7 +582,7 @@

    ContentModelFormatBase

    ContentModelFormatBase<V>: {}
    @@ -613,7 +613,7 @@

    ContentModelFormatContainerFormat

    @@ -628,7 +628,7 @@

    ContentModelHandler

    ContentModelHandler<T>: (doc: Document, parent: Node, model: T, context: ModelToDomContext) => void

    Type parameters

    @@ -699,7 +699,7 @@

    ContentModelHandlerMap

    @@ -839,7 +839,7 @@

    ContentModelHyperLinkFormat

    @@ -854,7 +854,7 @@

    ContentModelImageFormat

    @@ -869,7 +869,7 @@

    ContentModelListItemFormat

    @@ -884,7 +884,7 @@

    ContentModelListItemLevelFormat

    @@ -899,7 +899,7 @@

    ContentModelSegment

    @@ -914,7 +914,7 @@

    ContentModelSegmentFormat

    @@ -929,7 +929,7 @@

    ContentModelSegmentType

    ContentModelSegmentType: "Text" | "Br" | "Image" | "SelectionMarker" | "General" | "Entity"
    @@ -944,7 +944,7 @@

    ContentModelTableCellFormat

    @@ -959,7 +959,7 @@

    ContentModelTableFormat

    @@ -974,7 +974,7 @@

    DatasetFormat

    DatasetFormat: Record<string, string>
    @@ -989,7 +989,7 @@

    DefaultImplicitFormatMap

    DefaultImplicitFormatMap: Record<string, Readonly<ContentModelSegmentFormat & ContentModelBlockFormat>>
    @@ -1004,7 +1004,7 @@

    DefaultStyleMap

    DefaultStyleMap: {[ key in keyof HTMLElementDeprecatedTagNameMap]: Readonly<Partial<CSSStyleDeclaration>> } & {[ key in keyof HTMLElementTagNameMap]: Readonly<Partial<CSSStyleDeclaration>> } & { center?: Partial<CSSStyleDeclaration>; strike?: Partial<CSSStyleDeclaration> }
    @@ -1019,7 +1019,7 @@

    DirectionFormat

    DirectionFormat: { direction?: "ltr" | "rtl" }
    @@ -1047,7 +1047,7 @@

    DisplayFormat

    DisplayFormat: { display?: string }
    @@ -1075,7 +1075,7 @@

    ElementProcessor

    ElementProcessor<T>: (group: ContentModelBlockGroup, element: T, context: DomToModelContext) => void

    Type parameters

    @@ -1138,7 +1138,7 @@

    ElementProcessorMap

    ElementProcessorMap: {[ key in keyof HTMLElementDeprecatedTagNameMap]: ElementProcessor<HTMLElementDeprecatedTagNameMap[key]> } & {[ key in keyof HTMLElementTagNameMap]: ElementProcessor<HTMLElementTagNameMap[key]> } & { #text: ElementProcessor<Text>; *: ElementProcessor<HTMLElement>; center?: ElementProcessor<HTMLElement>; child: ElementProcessor<ParentNode>; delimiter?: ElementProcessor<HTMLSpanElement>; element: ElementProcessor<HTMLElement>; entity: ElementProcessor<HTMLElement>; strike?: ElementProcessor<HTMLElement> }
    @@ -1153,7 +1153,7 @@

    FontFamilyFormat

    FontFamilyFormat: { fontFamily?: string }
    @@ -1181,7 +1181,7 @@

    FontSizeFormat

    FontSizeFormat: { fontSize?: string }
    @@ -1209,7 +1209,7 @@

    FormatApplier

    FormatApplier<TFormat>: (format: TFormat, element: HTMLElement, context: ModelToDomContext) => void

    Type parameters

    @@ -1272,7 +1272,7 @@

    FormatAppliers

    FormatAppliers: {[ Key in FormatKey]: FormatApplier<FormatHandlerTypeMap[Key]> | null }
    @@ -1287,7 +1287,7 @@

    FormatAppliersPerCategory

    FormatAppliersPerCategory: {[ Key in keyof ContentModelFormatMap]: (FormatApplier<ContentModelFormatMap[Key]> | null)[] }
    @@ -1302,7 +1302,7 @@

    FormatKey

    FormatKey: keyof FormatHandlerTypeMap
    @@ -1317,7 +1317,7 @@

    FormatParser

    FormatParser<TFormat>: (format: TFormat, element: HTMLElement, context: DomToModelContext, defaultStyle: Readonly<Partial<CSSStyleDeclaration>>) => void

    Type parameters

    @@ -1388,7 +1388,7 @@

    FormatParsers

    FormatParsers: {[ Key in FormatKey]: FormatParser<FormatHandlerTypeMap[Key]> | null }
    @@ -1403,7 +1403,7 @@

    FormatParsersPerCategory

    FormatParsersPerCategory: {[ Key in keyof ContentModelFormatMap]: (FormatParser<ContentModelFormatMap[Key]> | null)[] }
    @@ -1418,7 +1418,7 @@

    HtmlAlignFormat

    HtmlAlignFormat: { htmlAlign?: "start" | "center" | "end" | "justify" | "initial" }
    @@ -1446,7 +1446,7 @@

    IdFormat

    IdFormat: { id?: string }
    @@ -1474,7 +1474,7 @@

    ImageCropMetadataFormat

    ImageCropMetadataFormat: { bottomPercent?: number; leftPercent?: number; rightPercent?: number; topPercent?: number }
    @@ -1546,7 +1546,7 @@

    ImageMetadataFormat

    ImageMetadataFormat: ImageResizeMetadataFormat & ImageCropMetadataFormat & ImageRotateMetadataFormat & { naturalHeight?: number; naturalWidth?: number; src?: string }
    @@ -1561,7 +1561,7 @@

    ImageResizeMetadataFormat

    ImageResizeMetadataFormat: { heightPx?: number; widthPx?: number }
    @@ -1611,7 +1611,7 @@

    ImageRotateMetadataFormat

    ImageRotateMetadataFormat: { angleRad?: number }
    @@ -1644,7 +1644,7 @@

    ItalicFormat

    ItalicFormat: { italic?: boolean }
    @@ -1672,7 +1672,7 @@

    LetterSpacingFormat

    LetterSpacingFormat: { letterSpacing?: string }
    @@ -1700,7 +1700,7 @@

    LineHeightFormat

    LineHeightFormat: { lineHeight?: string }
    @@ -1728,7 +1728,7 @@

    LinkFormat

    LinkFormat: { anchorClass?: string; anchorId?: string; anchorTitle?: string; href?: string; name?: string; relationship?: string; target?: string }
    @@ -1804,7 +1804,7 @@

    ListMetadataFormat

    ListMetadataFormat: { orderedStyleType?: NumberingListType; unorderedStyleType?: BulletListType }
    @@ -1840,7 +1840,7 @@

    ListStylePositionFormat

    ListStylePositionFormat: { listStylePosition?: string }
    @@ -1868,7 +1868,7 @@

    ListThreadFormat

    ListThreadFormat: { displayForDummyItem?: string; startNumberOverride?: number }
    @@ -1908,7 +1908,7 @@

    ListTypeFormat

    ListTypeFormat: { listType?: "OL" | "UL" }
    @@ -1936,7 +1936,7 @@

    MarginFormat

    MarginFormat: { marginBottom?: string; marginLeft?: string; marginRight?: string; marginTop?: string }
    @@ -1988,7 +1988,7 @@

    OnNodeCreated

    @@ -2037,7 +2037,7 @@

    PaddingFormat

    PaddingFormat: { paddingBottom?: string; paddingLeft?: string; paddingRight?: string; paddingTop?: string }
    @@ -2089,7 +2089,7 @@

    SizeFormat

    SizeFormat: { height?: string; maxHeight?: string; maxWidth?: string; minHeight?: string; minWidth?: string; width?: string }
    @@ -2157,7 +2157,7 @@

    SpacingFormat

    SpacingFormat: { borderCollapse?: boolean }
    @@ -2185,7 +2185,7 @@

    StrikeFormat

    StrikeFormat: { strikethrough?: boolean }
    @@ -2213,7 +2213,7 @@

    SuperOrSubScriptFormat

    SuperOrSubScriptFormat: { superOrSubScriptSequence?: string }
    @@ -2242,7 +2242,7 @@

    TableLayoutFormat

    TableLayoutFormat: { tableLayout?: string }
    @@ -2270,7 +2270,7 @@

    TableMetadataFormat

    TableMetadataFormat: { bgColorEven?: string | null; bgColorOdd?: string | null; bottomBorderColor?: string | null; hasBandedColumns?: boolean; hasBandedRows?: boolean; hasFirstColumn?: boolean; hasHeaderRow?: boolean; headerRowColor?: string | null; tableBorderFormat?: TableBorderFormat | CompatibleTableBorderFormat; topBorderColor?: string | null; verticalBorderColor?: string | null }
    @@ -2378,7 +2378,7 @@

    TextAlignFormat

    TextAlignFormat: { textAlign?: "start" | "center" | "end" | "justify" | "initial" }
    @@ -2406,7 +2406,7 @@

    TextColorFormat

    TextColorFormat: { textColor?: string }
    @@ -2434,7 +2434,7 @@

    UnderlineFormat

    UnderlineFormat: { underline?: boolean }
    @@ -2462,7 +2462,7 @@

    VerticalAlignFormat

    VerticalAlignFormat: { verticalAlign?: "top" | "middle" | "bottom" }
    @@ -2490,7 +2490,7 @@

    WhiteSpaceFormat

    WhiteSpaceFormat: { whiteSpace?: string }
    @@ -2518,7 +2518,7 @@

    WordBreakFormat

    WordBreakFormat: { wordBreak?: string }
    @@ -2546,7 +2546,7 @@

    ZoomScaleFormat

    ZoomScaleFormat: { zoomScale?: number }
    diff --git a/docs/modules/roosterjs_editor_api.html b/docs/modules/roosterjs_editor_api.html index c14c8e6246c..f0f4231323c 100644 --- a/docs/modules/roosterjs_editor_api.html +++ b/docs/modules/roosterjs_editor_api.html @@ -129,7 +129,7 @@

    Const FONT_SIZES

    FONT_SIZES: number[] = ...
    @@ -152,7 +152,7 @@

    applyCellShading

  • @@ -189,7 +189,7 @@

    blockFormat

  • @@ -265,7 +265,7 @@

    changeCapitalization

  • @@ -310,7 +310,7 @@

    changeFontSize

  • @@ -353,7 +353,7 @@

    clearBlockFormat

  • @@ -386,7 +386,7 @@

    clearFormat

  • @@ -425,7 +425,7 @@

    commitListChains

  • @@ -462,7 +462,7 @@

    createLink

  • @@ -522,7 +522,7 @@

    editTable

  • @@ -559,7 +559,7 @@

    Const experimentCommitL
  • @@ -592,7 +592,7 @@

    formatTable

  • @@ -635,7 +635,7 @@

    getElementBasedFormatState

  • @@ -675,7 +675,7 @@

    getFormatState

  • @@ -717,7 +717,7 @@

    insertEntity

  • @@ -794,7 +794,7 @@

    insertImage

  • @@ -837,7 +837,7 @@

    insertTable

  • @@ -888,7 +888,7 @@

    removeLink

  • @@ -922,7 +922,7 @@

    replaceWithNode

  • @@ -969,7 +969,7 @@

    Returns boolean
    @@ -1019,7 +1019,7 @@

    rotateElement

  • @@ -1062,7 +1062,7 @@

    setAlignment

  • @@ -1100,7 +1100,7 @@

    setBackgroundColor

  • @@ -1142,7 +1142,7 @@

    setDirection

  • @@ -1180,7 +1180,7 @@

    setFontName

  • @@ -1218,7 +1218,7 @@

    setFontSize

  • @@ -1256,7 +1256,7 @@

    setImageAltText

  • @@ -1297,7 +1297,7 @@

    setIndentation

  • @@ -1337,7 +1337,7 @@

    setOrderedListNumbering

  • @@ -1380,7 +1380,7 @@

    setTextColor

  • @@ -1446,7 +1446,7 @@

    toggleBlockQuote

  • @@ -1502,7 +1502,7 @@

    toggleBold

  • @@ -1537,7 +1537,7 @@

    toggleBullet

  • @@ -1584,7 +1584,7 @@

    toggleCodeBlock

  • @@ -1640,7 +1640,7 @@

    toggleHeader

  • @@ -1679,7 +1679,7 @@

    toggleItalic

  • @@ -1714,7 +1714,7 @@

    toggleListType

  • @@ -1791,7 +1791,7 @@

    toggleNumbering

  • @@ -1844,7 +1844,7 @@

    toggleStrikethrough

  • @@ -1879,7 +1879,7 @@

    toggleSubscript

  • @@ -1916,7 +1916,7 @@

    toggleSuperscript

  • @@ -1953,7 +1953,7 @@

    toggleUnderline

  • diff --git a/docs/modules/roosterjs_editor_core.html b/docs/modules/roosterjs_editor_core.html index 4edd2cc6982..30e4661ff8a 100644 --- a/docs/modules/roosterjs_editor_core.html +++ b/docs/modules/roosterjs_editor_core.html @@ -96,7 +96,7 @@

    Const createEditorCore<
  • @@ -133,7 +133,7 @@

    isFeatureEnabled

  • diff --git a/docs/modules/roosterjs_editor_dom.html b/docs/modules/roosterjs_editor_dom.html index cc53cf0307a..54ca0282e0f 100644 --- a/docs/modules/roosterjs_editor_dom.html +++ b/docs/modules/roosterjs_editor_dom.html @@ -231,7 +231,7 @@

    PendableFormatNames

    PendableFormatNames: keyof PendableFormatState
    @@ -249,7 +249,7 @@

    Const Browser

    Browser: BrowserInfo = ...
    @@ -264,7 +264,7 @@

    Const KnownCreateElemen
    KnownCreateElementData: Record<KnownCreateElementDataIndex, CreateElementData> = ...
    @@ -279,7 +279,7 @@

    Const PendableFormatCom
    PendableFormatCommandMap: {[ key in PendableFormatNames]: DocumentCommand } = ...
    @@ -301,7 +301,7 @@

    addDelimiterAfter

  • @@ -332,7 +332,7 @@

    addDelimiterBefore

  • @@ -363,7 +363,7 @@

    addDelimiters

  • @@ -394,7 +394,7 @@

    addRangeToSelection

  • @@ -434,7 +434,7 @@

    addSnapshot

  • @@ -468,7 +468,7 @@

    Returns void
    @@ -568,7 +568,7 @@

    addSnapshotV2

  • @@ -611,7 +611,7 @@

    adjustInsertPosition

  • Parameters

    @@ -656,7 +656,7 @@

    applyFormat

  • @@ -705,7 +705,7 @@

    applyTextStyle

  • @@ -769,7 +769,7 @@

    arrayPush

  • @@ -812,7 +812,7 @@

    cacheGetEventData

  • @@ -874,7 +874,7 @@

    canMoveCurrentSnapshot

  • @@ -918,7 +918,7 @@

    canUndoAutoComplete

  • @@ -952,7 +952,7 @@

    chainSanitizerCallback

  • @@ -1010,7 +1010,7 @@

    changeElementTag

  • @@ -1045,7 +1045,7 @@

    Returns HTMLEleme
  • @@ -1083,7 +1083,7 @@

    clearEventDataCache

  • @@ -1121,7 +1121,7 @@

    clearProceedingSnapshots

  • @@ -1143,7 +1143,7 @@

    Returns void
    @@ -1201,7 +1201,7 @@

    clearProceedingSnapshotsV2

  • @@ -1232,7 +1232,7 @@

    collapseNodes

  • @@ -1286,7 +1286,7 @@

    collapseNodesInRegion

  • @@ -1325,7 +1325,7 @@

    commitEntity

  • @@ -1375,7 +1375,7 @@

    contains

  • @@ -1412,7 +1412,7 @@

    Returns boolean
    @@ -1450,7 +1450,7 @@

    createArrayDefinition

  • @@ -1506,7 +1506,7 @@

    createBooleanDefinition

  • @@ -1550,7 +1550,7 @@

    createDefaultHtmlSanitizerOptions

  • @@ -1572,7 +1572,7 @@

    createElement

  • @@ -1610,7 +1610,7 @@

    createEntityPlaceholder

  • @@ -1644,7 +1644,7 @@

    createFragmentFromClipboardData

  • @@ -1712,7 +1712,7 @@

    createNumberDefinition

  • @@ -1768,7 +1768,7 @@

    createObjectDefinition

  • @@ -1822,7 +1822,7 @@

    createRange

  • @@ -1852,7 +1852,7 @@

    Returns Range
    @@ -1881,7 +1881,7 @@

    Returns Range
    @@ -1922,7 +1922,7 @@

    Returns Range
    @@ -1957,7 +1957,7 @@

    Returns Range
    @@ -1995,7 +1995,7 @@

    createSnapshots

  • @@ -2032,7 +2032,7 @@

    createStringDefinition

  • @@ -2076,7 +2076,7 @@

    createVListFromRegion

  • @@ -2121,7 +2121,7 @@

    deleteSelectedContent

  • @@ -2155,7 +2155,7 @@

    extractClipboardEvent

  • @@ -2232,7 +2232,7 @@

    extractClipboardItems

  • @@ -2273,7 +2273,7 @@

    extractClipboardItemsForIE

  • @@ -2338,7 +2338,7 @@

    extractContentMetadata

  • @@ -2370,7 +2370,7 @@

    findClosestElementAncestor

  • @@ -2415,7 +2415,7 @@

    fromHtml

  • @@ -2455,7 +2455,7 @@

    getBlockElementAtNode

  • @@ -2514,7 +2514,7 @@

    getBrowserInfo

  • @@ -2558,7 +2558,7 @@

    getComputedStyle

  • @@ -2596,7 +2596,7 @@

    getComputedStyles

  • @@ -2635,7 +2635,7 @@

    getDelimiterFromElement

  • @@ -2667,7 +2667,7 @@

    getEntityFromElement

  • @@ -2699,7 +2699,7 @@

    getEntitySelector

  • @@ -2736,7 +2736,7 @@

    getFirstLastBlockElement

  • @@ -2774,7 +2774,7 @@

    getFirstLeafNode

  • @@ -2805,7 +2805,7 @@

    getHtmlWithSelectionPath

  • @@ -2844,7 +2844,7 @@

    getInheritableStyles

  • @@ -2876,7 +2876,7 @@

    getInlineElementAtNode

  • @@ -2904,7 +2904,7 @@

    Returns
    @@ -2941,7 +2941,7 @@

    getInnerHTML

  • @@ -2972,7 +2972,7 @@

    getIntersectedRect

  • @@ -3030,7 +3030,7 @@

    getLastLeafNode

  • @@ -3061,7 +3061,7 @@

    getMetadata

  • @@ -3113,7 +3113,7 @@

    getNextLeafSibling

  • @@ -3156,7 +3156,7 @@

    getObjectKeys

  • @@ -3194,7 +3194,7 @@

    getPasteSource

  • @@ -3232,7 +3232,7 @@

    getPasteType

  • @@ -3275,7 +3275,7 @@

    getPendableFormatState

  • @@ -3307,7 +3307,7 @@

    getPositionRect

  • @@ -3338,7 +3338,7 @@

    getPreviousLeafSibling

  • @@ -3381,7 +3381,7 @@

    getRegionsFromRange

  • @@ -3425,7 +3425,7 @@

    getSelectedBlockElementsInRegion

  • @@ -3469,7 +3469,7 @@

    getSelectionPath

  • @@ -3506,7 +3506,7 @@

    getSelectionRangeInRegion

  • @@ -3539,7 +3539,7 @@

    getStyles

  • @@ -3570,7 +3570,7 @@

    getTableFormatInfo

  • @@ -3602,7 +3602,7 @@

    getTagOfNode

  • @@ -3634,7 +3634,7 @@

    getTextContent

  • @@ -3666,7 +3666,7 @@

    handleImagePaste

  • @@ -3703,7 +3703,7 @@

    handleTextPaste

  • @@ -3746,7 +3746,7 @@

    isBlockElement

  • @@ -3778,7 +3778,7 @@

    isCharacterValue

  • @@ -3812,7 +3812,7 @@

    isCtrlOrMetaPressed

  • @@ -3844,7 +3844,7 @@

    isModifierKey

  • @@ -3875,7 +3875,7 @@

    isNodeAfter

  • @@ -3913,7 +3913,7 @@

    isNodeEmpty

  • @@ -3955,7 +3955,7 @@

    isNodeInRegion

  • @@ -3992,7 +3992,7 @@

    isPositionAtBeginningOf

  • @@ -4031,7 +4031,7 @@

    isVoidHtmlElement

  • @@ -4062,7 +4062,7 @@

    isWholeTableSelected

  • @@ -4099,7 +4099,7 @@

    matchLink

  • @@ -4132,7 +4132,7 @@

    matchesSelector

  • @@ -4169,7 +4169,7 @@

    mergeBlocksInRegion

  • @@ -4212,7 +4212,7 @@

    moveChildNodes

  • @@ -4255,7 +4255,7 @@

    moveContentWithEntityPlaceholders

  • @@ -4298,7 +4298,7 @@

    moveCurrentSnapshot

  • @@ -4342,7 +4342,7 @@

    Const moveCurrentSnapsn
  • @@ -4381,7 +4381,7 @@

    normalizeRect

  • @@ -4410,7 +4410,7 @@

    parseColor

  • @@ -4439,7 +4439,7 @@

    queryElements

  • @@ -4495,7 +4495,7 @@

    readFile

  • @@ -4551,7 +4551,7 @@

    removeGlobalCssStyle

  • @@ -4588,7 +4588,7 @@

    removeImportantStyleRule

  • @@ -4625,7 +4625,7 @@

    removeMetadata

  • @@ -4656,7 +4656,7 @@

    restoreContentWithEntityPlaceholder

  • @@ -4705,7 +4705,7 @@

    retrieveMetadataFromClipboard

  • @@ -4748,7 +4748,7 @@

    safeInstanceOf

  • @@ -4794,7 +4794,7 @@

    sanitizePasteContent

  • @@ -4831,7 +4831,7 @@

    saveTableCellMetadata

  • @@ -4868,7 +4868,7 @@

    setColor

  • @@ -4930,7 +4930,7 @@

    setGlobalCssStyles

  • @@ -4973,7 +4973,7 @@

    setHtmlWithMetadata

  • @@ -5015,7 +5015,7 @@

    setHtmlWithSelectionPath

  • @@ -5060,7 +5060,7 @@

    setListItemStyle

  • @@ -5104,7 +5104,7 @@

    setMetadata

  • @@ -5155,7 +5155,7 @@

    setStyles

  • @@ -5192,7 +5192,7 @@

    splitBalancedNodeRange

  • @@ -5225,7 +5225,7 @@

    splitParentNode

  • @@ -5266,7 +5266,7 @@

    splitTextNode

  • @@ -5314,7 +5314,7 @@

    toArray

  • @@ -5336,7 +5336,7 @@

    Returns Attr
    @@ -5358,7 +5358,7 @@

    Returns DataTrans
  • @@ -5386,7 +5386,7 @@

    Returns T<
  • @@ -5414,7 +5414,7 @@

    Returns T<
  • @@ -5453,7 +5453,7 @@

    unwrap

  • @@ -5484,7 +5484,7 @@

    validate

  • @@ -5531,7 +5531,7 @@

    wrap

  • @@ -5566,7 +5566,7 @@

    Returns HTMLEleme
  • @@ -5597,7 +5597,7 @@

    Returns HTMLEleme
  • @@ -5626,7 +5626,7 @@

    Returns HTMLEleme
  • diff --git a/docs/modules/roosterjs_editor_plugins.html b/docs/modules/roosterjs_editor_plugins.html index 2c1f2a1862c..a3f4b3a3af1 100644 --- a/docs/modules/roosterjs_editor_plugins.html +++ b/docs/modules/roosterjs_editor_plugins.html @@ -120,7 +120,7 @@

    DNDDirectionX

    DNDDirectionX: "w" | "" | "e"
    @@ -135,7 +135,7 @@

    DnDDirectionY

    DnDDirectionY: "n" | "" | "s"
    @@ -157,7 +157,7 @@

    canRegenerateImage

  • @@ -190,7 +190,7 @@

    getAllFeatures

  • @@ -212,7 +212,7 @@

    isResizedTo

  • @@ -249,7 +249,7 @@

    resetImage

  • @@ -286,7 +286,7 @@

    resizeByPercentage

  • diff --git a/docs/modules/roosterjs_editor_types.html b/docs/modules/roosterjs_editor_types.html index b559f44e17f..1bb88e94313 100644 --- a/docs/modules/roosterjs_editor_types.html +++ b/docs/modules/roosterjs_editor_types.html @@ -346,7 +346,7 @@

    AddUndoSnapshot

    AddUndoSnapshot: (core: EditorCore, callback: ((start: NodePosition | null, end: NodePosition | null) => any) | null, changeSource: ChangeSource | CompatibleChangeSource | string | null, canUndoByBackspace: boolean, additionalData?: ContentChangedData) => void
    @@ -420,7 +420,7 @@

    ArrayItemType

    ArrayItemType<T>: T extends infer U[] ? U : never
    @@ -441,7 +441,7 @@

    AttachDomEvent

    AttachDomEvent: (core: EditorCore, eventMap: Record<string, DOMEventHandler>) => () => void
    @@ -502,7 +502,7 @@

    AttributeCallback

    AttributeCallback: (value: string, element: HTMLElement, context: Object) => string
    @@ -560,7 +560,7 @@

    AttributeCallbackMap

    AttributeCallbackMap: Record<string, AttributeCallback>
    @@ -575,7 +575,7 @@

    CompatiblePluginDomEvent

    @@ -590,7 +590,7 @@

    CompatiblePluginKeyboardEvent

    @@ -605,7 +605,7 @@

    CompatiblePluginMouseEvent

    @@ -620,7 +620,7 @@

    ContentEditFeature

    @@ -635,7 +635,7 @@

    ContentMetadata

    @@ -651,7 +651,7 @@

    CoreCreator

    CoreCreator<TEditorCore, TEditorOptions>: (contentDiv: HTMLDivElement, options: TEditorOptions) => TEditorCore

    Type parameters

    @@ -709,7 +709,7 @@

    CreatePasteFragment

    CreatePasteFragment: (core: EditorCore, clipboardData: ClipboardData, position: NodePosition | null, pasteAsText: boolean, applyCurrentStyle: boolean, pasteAsImage: boolean) => DocumentFragment | null
    @@ -786,7 +786,7 @@

    CssStyleCallback

    CssStyleCallback: (value: string, element: HTMLElement, thisStyle: StringMap, context: Object) => boolean
    @@ -852,7 +852,7 @@

    CssStyleCallbackMap

    CssStyleCallbackMap: Record<string, CssStyleCallback>
    @@ -867,7 +867,7 @@

    DOMEventHandler

    @@ -888,7 +888,7 @@

    DOMEventHandlerFunction

    DOMEventHandlerFunction<E>: (event: E) => void

    Type parameters

    @@ -930,7 +930,7 @@

    Definition

    Definition<T>: CustomizeDefinition | (T extends any[] ? ArrayDefinition<T> : T extends Record<string, any> ? ObjectDefinition<T> : T extends String ? StringDefinition : T extends Number ? NumberDefinition : T extends Boolean ? BooleanDefinition : never)
    @@ -951,7 +951,7 @@

    ElementCallback

    ElementCallback: (element: HTMLElement, context: Object) => boolean
    @@ -1001,7 +1001,7 @@

    ElementCallbackMap

    ElementCallbackMap: Record<string, ElementCallback>
    @@ -1016,7 +1016,7 @@

    EnsureTypeInContainer

    EnsureTypeInContainer: (core: EditorCore, position: NodePosition, keyboardEvent?: KeyboardEvent, deprecated?: boolean) => void
    @@ -1081,7 +1081,7 @@

    Focus

    Focus: (core: EditorCore) => void
    @@ -1122,7 +1122,7 @@

    GenericPluginState

    GenericPluginState<Key>: {[ P in StatePluginKeys<Key>]: TypeOfStatePlugin<P> }
    @@ -1143,7 +1143,7 @@

    GetContent

    GetContent: (core: EditorCore, mode: GetContentMode | CompatibleGetContentMode) => string
    @@ -1193,7 +1193,7 @@

    GetPendableFormatState

    GetPendableFormatState: (core: EditorCore, forceGetStateFromDOM: boolean) => PendableFormatState
    @@ -1243,7 +1243,7 @@

    GetSelectionRange

    GetSelectionRange: (core: EditorCore, tryGetFromCache: boolean) => Range | null
    @@ -1293,7 +1293,7 @@

    GetSelectionRangeEx

    GetSelectionRangeEx: (core: EditorCore) => SelectionRangeEx
    @@ -1335,7 +1335,7 @@

    GetStyleBasedFormatState

    GetStyleBasedFormatState: (core: EditorCore, node: Node | null) => StyleBasedFormatState
    @@ -1384,7 +1384,7 @@

    HasFocus

    HasFocus: (core: EditorCore) => boolean
    @@ -1426,7 +1426,7 @@

    InsertNode

    InsertNode: (core: EditorCore, node: Node, option: InsertOption | null) => boolean
    @@ -1478,7 +1478,7 @@

    InsertOption

    @@ -1496,7 +1496,7 @@

    KeyOfStatePlugin

    KeyOfStatePlugin<Key>: CorePlugins[Key] extends PluginWithState<infer U> ? Key : never
    @@ -1517,7 +1517,7 @@

    ObjectPropertyDefinition

    ObjectPropertyDefinition<T>: {[ Key in keyof T]: Definition<T[Key]> }
    @@ -1538,7 +1538,7 @@

    PluginDomEvent

    @@ -1553,7 +1553,7 @@

    PluginEvent

    @@ -1568,7 +1568,7 @@

    PluginEventData

    PluginEventData<T>: PluginEventDataGeneric<PluginEvent, T>
    @@ -1589,7 +1589,7 @@

    PluginEventDataGeneric

    PluginEventDataGeneric<E, T>: E extends BasePluginEvent<T> ? Pick<E, Exclude<keyof E, "eventType">> : never
    @@ -1614,7 +1614,7 @@

    PluginEventFromType

    PluginEventFromType<T>: PluginEventFromTypeGeneric<PluginEvent, T>
    @@ -1635,7 +1635,7 @@

    PluginEventFromTypeGeneric

    PluginEventFromTypeGeneric<E, T>: E extends BasePluginEvent<T> ? E : never
    @@ -1660,7 +1660,7 @@

    PluginKey

    PluginKey: keyof CorePlugins
    @@ -1675,7 +1675,7 @@

    PluginKeyboardEvent

    @@ -1690,7 +1690,7 @@

    PluginMouseEvent

    @@ -1705,7 +1705,7 @@

    PluginState

    @@ -1720,7 +1720,7 @@

    PredefinedCssMap

    PredefinedCssMap: Record<string, StringMap>
    @@ -1735,7 +1735,7 @@

    RestoreUndoSnapshot

    RestoreUndoSnapshot: (core: EditorCore, step: number) => void
    @@ -1784,7 +1784,7 @@

    Select

    Select: (core: EditorCore, arg1: Range | SelectionRangeEx | NodePosition | Node | SelectionPath | null, arg2?: NodePosition | number | PositionType | TableSelection | null, arg3?: Node, arg4?: number | PositionType) => boolean
    @@ -1858,7 +1858,7 @@

    SelectImage

    SelectImage: (core: EditorCore, image: HTMLImageElement | null) => ImageSelectionRange | null
    @@ -1908,7 +1908,7 @@

    SelectRange

    SelectRange: (core: EditorCore, range: Range, skipSameRange?: boolean) => boolean
    @@ -1967,7 +1967,7 @@

    SelectTable

    SelectTable: (core: EditorCore, table: HTMLTableElement | null, coordinates?: TableSelection) => TableSelectionRange | null
    @@ -2026,7 +2026,7 @@

    SelectionRangeEx

    @@ -2041,7 +2041,7 @@

    SetContent

    SetContent: (core: EditorCore, content: string, triggerContentChangedEvent: boolean, metadata?: ContentMetadata) => void
    @@ -2102,7 +2102,7 @@

    SizeTransformer

    SizeTransformer: (size: number) => number
    @@ -2146,7 +2146,7 @@

    StatePluginKeys

    StatePluginKeys<Key>: {[ P in Key]: KeyOfStatePlugin<P> }[Key]
    @@ -2167,7 +2167,7 @@

    StringMap

    StringMap: Record<string, string>
    @@ -2182,7 +2182,7 @@

    SwitchShadowEdit

    SwitchShadowEdit: (core: EditorCore, isOn: boolean) => void
    @@ -2231,7 +2231,7 @@

    TableCellMetadataFormat

    TableCellMetadataFormat: { bgColorOverride?: boolean }
    @@ -2259,7 +2259,7 @@

    TransformColor

    TransformColor: (core: EditorCore, rootNode: Node | null, includeSelf: boolean, callback: (() => void) | null, direction: ColorTransformDirection | CompatibleColorTransformDirection, forceTransform?: boolean, fromDarkMode?: boolean) => void
    @@ -2344,7 +2344,7 @@

    TriggerEvent

    TriggerEvent: (core: EditorCore, pluginEvent: PluginEvent, broadcast: boolean) => void
    @@ -2401,7 +2401,7 @@

    TrustedHTMLHandler

    TrustedHTMLHandler: (html: string) => string
    @@ -2437,7 +2437,7 @@

    TypeOfStatePlugin

    TypeOfStatePlugin<Key>: CorePlugins[Key] extends PluginWithState<infer U> ? U : never
    diff --git a/docs/modules/roosterjs_react.html b/docs/modules/roosterjs_react.html index 09e1aa1b194..51b33298e34 100644 --- a/docs/modules/roosterjs_react.html +++ b/docs/modules/roosterjs_react.html @@ -184,7 +184,7 @@

    AlignCenterButtonStringKey

    AlignCenterButtonStringKey: "buttonNameAlignCenter"
    @@ -199,7 +199,7 @@

    AlignLeftButtonStringKey

    AlignLeftButtonStringKey: "buttonNameAlignLeft"
    @@ -214,7 +214,7 @@

    AlignRightButtonStringKey

    AlignRightButtonStringKey: "buttonNameAlignRight"
    @@ -229,7 +229,7 @@

    AllButtonStringKeys

    @@ -244,7 +244,7 @@

    BackgroundColorButtonStringKey

    BackgroundColorButtonStringKey: "buttonNameBackgroundColor" | BackgroundColorKeys
    @@ -259,7 +259,7 @@

    BackgroundColorKeys

    BackgroundColorKeys: "backgroundColorCyan" | "backgroundColorGreen" | "backgroundColorYellow" | "backgroundColorOrange" | "backgroundColorRed" | "backgroundColorMagenta" | "backgroundColorLightCyan" | "backgroundColorLightGreen" | "backgroundColorLightYellow" | "backgroundColorLightOrange" | "backgroundColorLightRed" | "backgroundColorLightMagenta" | "backgroundColorWhite" | "backgroundColorLightGray" | "backgroundColorGray" | "backgroundColorDarkGray" | "backgroundColorDarkerGray" | "backgroundColorBlack"
    @@ -274,7 +274,7 @@

    BoldButtonStringKey

    BoldButtonStringKey: "buttonNameBold"
    @@ -289,7 +289,7 @@

    BulletedListButtonStringKey

    BulletedListButtonStringKey: "buttonNameBulletedList"
    @@ -304,7 +304,7 @@

    CancelButtonStringKey

    CancelButtonStringKey: "buttonNameCancel"
    @@ -319,7 +319,7 @@

    CellShadeButtonStringKey

    CellShadeButtonStringKey: "buttonNameCellShade" | BackgroundColorKeys
    @@ -336,7 +336,7 @@

    ClearFormatButtonStringKey

    ClearFormatButtonStringKey: "buttonNameClearFormat"
    @@ -351,7 +351,7 @@

    CodeButtonStringKey

    CodeButtonStringKey: "buttonNameCode"
    @@ -366,7 +366,7 @@

    DecreaseFontSizeButtonStringKey

    DecreaseFontSizeButtonStringKey: "buttonNameDecreaseFontSize"
    @@ -381,7 +381,7 @@

    DecreaseIndentButtonStringKey

    DecreaseIndentButtonStringKey: "buttonNameDecreaseIndent"
    @@ -396,7 +396,7 @@

    EmojiStringKeys

    EmojiStringKeys: "emojiSearchPlaceholder" | "emojiSearchInputAriaLabel"
    @@ -411,7 +411,7 @@

    FontButtonStringKey

    FontButtonStringKey: "buttonNameFont"
    @@ -426,7 +426,7 @@

    FontSizeButtonStringKey

    FontSizeButtonStringKey: "buttonNameFontSize"
    @@ -441,7 +441,7 @@

    HeaderButtonStringKey

    HeaderButtonStringKey: "buttonNameHeader" | "buttonNameHeader1" | "buttonNameHeader2" | "buttonNameHeader3" | "buttonNameHeader4" | "buttonNameHeader5" | "buttonNameHeader6" | "buttonNameNoHeader" | MenuItemSplitterKey0
    @@ -456,7 +456,7 @@

    ImageEditMenuItemStringKey

    ImageEditMenuItemStringKey: "menuNameImageAltText" | "menuNameImageResize" | "menuNameImageCrop" | "menuNameImageRotate" | "menuNameImageRemove" | "menuNameImageFlip" | "menuNameImageSizeBestFit" | "menuNameImageSizeSmall" | "menuNameImageSizeMedium" | "menuNameImageSizeOriginal" | "menuNameImageRotateLeft" | "menuNameImageRotateRight" | "menuNameImageRotateFlipHorizontally" | "menuNameImageRotateFlipVertically" | "menuNameImageCopy" | "menuNameImageCut" | OkButtonStringKey | CancelButtonStringKey
    @@ -480,7 +480,7 @@

    IncreaseFontSizeButtonStringKey

    IncreaseFontSizeButtonStringKey: "buttonNameIncreaseFontSize"
    @@ -495,7 +495,7 @@

    IncreaseIndentButtonStringKey

    IncreaseIndentButtonStringKey: "buttonNameIncreaseIndent"
    @@ -510,7 +510,7 @@

    InsertImageButtonStringKey

    InsertImageButtonStringKey: "buttonNameInsertImage"
    @@ -525,7 +525,7 @@

    InsertLinkButtonStringKey

    InsertLinkButtonStringKey: "buttonNameInsertLink" | "insertLinkTitle" | "insertLinkDialogUrl" | "insertLinkDialogDisplayAs" | OkButtonStringKey | CancelButtonStringKey
    @@ -540,7 +540,7 @@

    InsertTableButtonStringKey

    InsertTableButtonStringKey: "buttonNameInsertTable" | "insertTablePane"
    @@ -555,7 +555,7 @@

    ItalicButtonStringKey

    ItalicButtonStringKey: "buttonNameItalic"
    @@ -570,7 +570,7 @@

    ListNumberMenuItemStringKey

    ListNumberMenuItemStringKey: "menuNameListNumberEdit" | "menuNameListNumberReset" | "dialogTextSetListNumber" | OkButtonStringKey | CancelButtonStringKey
    @@ -593,7 +593,7 @@

    LocalizedStrings

    LocalizedStrings<T, V>: {[ key in T]: V | (() => V) }
    @@ -617,7 +617,7 @@

    LtrButtonStringKey

    LtrButtonStringKey: "buttonNameLtr"
    @@ -632,7 +632,7 @@

    MenuItemSplitterKey0

    MenuItemSplitterKey0: "-"
    @@ -648,7 +648,7 @@

    MoreCommandsButtonStringKey

    MoreCommandsButtonStringKey: "buttonNameMoreCommands"
    @@ -663,7 +663,7 @@

    NumberedListButtonStringKey

    NumberedListButtonStringKey: "buttonNameNumberedList"
    @@ -678,7 +678,7 @@

    OkButtonStringKey

    OkButtonStringKey: "buttonNameOK"
    @@ -693,7 +693,7 @@

    PasteOptionButtonKeys

    PasteOptionButtonKeys: "pasteOptionPasteAsIs" | "pasteOptionPasteText" | "pasteOptionMergeFormat" | "pasteOptionPasteAsImage"
    @@ -708,7 +708,7 @@

    PasteOptionStringKeys

    PasteOptionStringKeys: PasteOptionButtonKeys | "pasteOptionPaneText"
    @@ -723,7 +723,7 @@

    QuoteButtonStringKey

    QuoteButtonStringKey: "buttonNameQuote"
    @@ -738,7 +738,7 @@

    RedoButtonStringKey

    RedoButtonStringKey: "buttonNameRedo"
    @@ -753,7 +753,7 @@

    RemoveLinkButtonStringKey

    RemoveLinkButtonStringKey: "buttonNameRemoveLink"
    @@ -768,7 +768,7 @@

    RtlButtonStringKey

    RtlButtonStringKey: "buttonNameRtl"
    @@ -783,7 +783,7 @@

    StrikethroughButtonStringKey

    StrikethroughButtonStringKey: "buttonNameStrikethrough"
    @@ -798,7 +798,7 @@

    SubscriptButtonStringKey

    SubscriptButtonStringKey: "buttonNameSubscript"
    @@ -813,7 +813,7 @@

    SuperscriptButtonStringKey

    SuperscriptButtonStringKey: "buttonNameSuperscript"
    @@ -828,7 +828,7 @@

    TableEditAlignMenuItemStringKey

    TableEditAlignMenuItemStringKey: "menuNameTableAlign" | "menuNameTableAlignLeft" | "menuNameTableAlignCenter" | "menuNameTableAlignRight" | "menuNameTableAlignTop" | "menuNameTableAlignMiddle" | "menuNameTableAlignBottom" | MenuItemSplitterKey0
    @@ -843,7 +843,7 @@

    TableEditAlignTableMenuItemStringKey

    TableEditAlignTableMenuItemStringKey: "menuNameTableAlignTable" | "menuNameTableAlignTableLeft" | "menuNameTableAlignTableCenter" | "menuNameTableAlignTableRight"
    @@ -858,7 +858,7 @@

    TableEditDeleteMenuItemStringKey

    TableEditDeleteMenuItemStringKey: "menuNameTableDelete" | "menuNameTableDeleteTable" | "menuNameTableDeleteColumn" | "menuNameTableDeleteRow"
    @@ -873,7 +873,7 @@

    TableEditInsertMenuItemStringKey

    TableEditInsertMenuItemStringKey: "menuNameTableInsert" | "menuNameTableInsertAbove" | "menuNameTableInsertBelow" | "menuNameTableInsertLeft" | "menuNameTableInsertRight"
    @@ -888,7 +888,7 @@

    TableEditMenuItemStringKey

    @@ -911,7 +911,7 @@

    TableEditMergeMenuItemStringKey

    TableEditMergeMenuItemStringKey: "menuNameTableMerge" | "menuNameTableMergeAbove" | "menuNameTableMergeBelow" | "menuNameTableMergeLeft" | "menuNameTableMergeRight" | "menuNameTableMergeCells" | MenuItemSplitterKey0
    @@ -926,7 +926,7 @@

    TableEditShadeMenuItemStringKey

    TableEditShadeMenuItemStringKey: "menuNameTableCellShade" | BackgroundColorKeys
    @@ -941,7 +941,7 @@

    TableEditSplitMenuItemStringKey

    TableEditSplitMenuItemStringKey: "menuNameTableSplit" | "menuNameTableSplitHorizontally" | "menuNameTableSplitVertically"
    @@ -956,7 +956,7 @@

    TextColorButtonStringKey

    TextColorButtonStringKey: "buttonNameTextColor" | TextColorKeys
    @@ -971,7 +971,7 @@

    TextColorKeys

    TextColorKeys: "textColorLightBlue" | "textColorLightGreen" | "textColorLightYellow" | "textColorLightOrange" | "textColorLightRed" | "textColorLightPurple" | "textColorBlue" | "textColorGreen" | "textColorYellow" | "textColorOrange" | "textColorRed" | "textColorPurple" | "textColorDarkBlue" | "textColorDarkGreen" | "textColorDarkYellow" | "textColorDarkOrange" | "textColorDarkRed" | "textColorDarkPurple" | "textColorDarkerBlue" | "textColorDarkerGreen" | "textColorDarkerYellow" | "textColorDarkerOrange" | "textColorDarkerRed" | "textColorDarkerPurple" | "textColorWhite" | "textColorLightGray" | "textColorGray" | "textColorDarkGray" | "textColorDarkerGray" | "textColorBlack"
    @@ -986,7 +986,7 @@

    UnderlineButtonStringKey

    UnderlineButtonStringKey: "buttonNameUnderline"
    @@ -1001,7 +1001,7 @@

    UndoButtonStringKey

    UndoButtonStringKey: "buttonNameUndo"
    @@ -1019,7 +1019,7 @@

    Const AllButtonKeys

    AllButtonKeys: KnownRibbonButtonKey[] = ...
    @@ -1041,7 +1041,7 @@

    Ribbon

  • @@ -1079,7 +1079,7 @@

    Rooster

  • @@ -1111,7 +1111,7 @@

    createContextMenuPlugin

  • @@ -1133,7 +1133,7 @@

    createContextMenuProvider

  • @@ -1215,7 +1215,7 @@

    createEmojiPlugin

  • @@ -1243,7 +1243,7 @@

    createImageEditMenuProvider

  • @@ -1275,7 +1275,7 @@

    createListEditMenuProvider

  • @@ -1304,7 +1304,7 @@

    createPasteOptionPlugin

  • @@ -1342,7 +1342,7 @@

    createRibbonPlugin

  • @@ -1373,7 +1373,7 @@

    createTableEditMenuProvider

  • @@ -1402,7 +1402,7 @@

    createUIUtilities

  • @@ -1440,7 +1440,7 @@

    createUpdateContentPlugin

  • @@ -1498,7 +1498,7 @@

    getBackgroundColorValue

  • @@ -1530,7 +1530,7 @@

    getButtons

  • @@ -1568,7 +1568,7 @@

    getLocalizedString

  • @@ -1621,7 +1621,7 @@

    getTextColorValue

  • diff --git a/rooster-content-model-min.js b/rooster-content-model-min.js index 53e3282899a..97915e92f03 100644 --- a/rooster-content-model-min.js +++ b/rooster-content-model-min.js @@ -1,2 +1,2 @@ -var roosterjsContentModel;(()=>{"use strict";var e={9968:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createDomToModelContext=void 0;var o=r(7582),n=r(8659),a=r(3647),l=r(976);t.createDomToModelContext=function(e,t){var r,i=(0,o.__assign)((0,o.__assign)({},e||{isDarkMode:!1}),{blockFormat:{},segmentFormat:{},zoomScaleFormat:{},isInSelection:!1,listFormat:{levels:[],threadItemCounts:[]},link:{format:{},dataset:{}},code:{format:{}},blockDecorator:{format:{},tagName:""},elementProcessors:(0,o.__assign)((0,o.__assign)({},a.defaultProcessorMap),(null==t?void 0:t.processorOverride)||{}),defaultStyles:(0,o.__assign)((0,o.__assign)({},l.defaultStyleMap),(null==t?void 0:t.defaultStyleOverride)||{}),formatParsers:(0,n.getFormatParsers)(null==t?void 0:t.formatParserOverride,null==t?void 0:t.additionalFormatParsers),defaultElementProcessors:a.defaultProcessorMap,defaultFormatParsers:n.defaultFormatParsers,allowCacheElement:!(null==t?void 0:t.disableCacheElement)}),s=null==t?void 0:t.selectionRange;switch(null==s?void 0:s.type){case 0:var d=s.ranges[0];d&&(r=d.commonAncestorContainer,i.regularSelection={startContainer:d.startContainer,startOffset:d.startOffset,endContainer:d.endContainer,endOffset:d.endOffset,isSelectionCollapsed:d.collapsed});break;case 1:s.coordinates&&s.table&&(r=s.table,i.tableSelection={table:s.table,firstCell:(0,o.__assign)({},s.coordinates.firstCell),lastCell:(0,o.__assign)({},s.coordinates.lastCell)});break;case 2:r=s.image,i.imageSelection={image:s.image}}return r&&(i.selectionRootNode=r),i}},3647:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.defaultProcessorMap=void 0;var o=r(2697),n=r(9384),a=r(9633),l=r(2130),i=r(7883),s=r(6905),d=r(5718),c=r(9004),u=r(1001),f=r(2625),m=r(3092),p=r(215),v=r(4748),g=r(1091),b=r(5476),h=r(2791),y=r(8191),_=r(970),P=r(9892);t.defaultProcessorMap={a:g.linkProcessor,b:v.knownElementProcessor,blockquote:v.knownElementProcessor,br:o.brProcessor,code:a.codeProcessor,div:v.knownElementProcessor,em:v.knownElementProcessor,font:d.fontProcessor,i:v.knownElementProcessor,img:p.imageProcessor,h1:f.headingProcessor,h2:f.headingProcessor,h3:f.headingProcessor,h4:f.headingProcessor,h5:f.headingProcessor,h6:f.headingProcessor,hr:m.hrProcessor,li:b.listItemProcessor,ol:h.listProcessor,p:y.pProcessor,pre:c.formatContainerProcessor,s:v.knownElementProcessor,span:v.knownElementProcessor,strike:v.knownElementProcessor,strong:v.knownElementProcessor,sub:v.knownElementProcessor,sup:v.knownElementProcessor,table:_.tableProcessor,u:v.knownElementProcessor,ul:h.listProcessor,"*":u.generalProcessor,"#text":P.textProcessor,element:i.elementProcessor,entity:s.entityProcessor,child:n.childProcessor,delimiter:l.delimiterProcessor}},1807:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.domToContentModel=void 0;var o=r(5733),n=r(9968),a=r(8767),l=r(9366),i=r(7573),s=r(2347),d=r(5571);t.domToContentModel=function(e,t,r){var c=(0,o.createContentModelDocument)(t.defaultFormat),u=(0,n.createDomToModelContext)(t,r);return(0,s.safeInstanceOf)(e,"DocumentFragment")?u.elementProcessors.child(c,e,u):((0,l.parseFormat)(e,[i.rootDirectionFormatHandler.parse],u.blockFormat,u),(0,l.parseFormat)(e,[d.zoomScaleFormatHandler.parse],u.zoomScaleFormat,u),(r.includeRoot?u.elementProcessors.element:u.elementProcessors.child)(c,e,u)),(0,a.normalizeContentModel)(c),c}},7304:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.blockProcessor=void 0;var o=r(7582),n=r(9275),a=r(9004),l=r(5092),i=r(9366),s=["A","CODE"];t.blockProcessor=function(e,t,r,d){var c=r.blockDecorator.tagName?r.blockDecorator:void 0,u=s.indexOf(t.tagName)>=0;(0,i.parseFormat)(t,r.formatParsers.block,r.blockFormat,r);var f=(0,o.__assign)({},r.blockFormat);if((0,i.parseFormat)(t,r.formatParsers.container,f,r),a.ContextStyles.forEach((function(e){f[e]&&(r.blockFormat[e]=f[e])})),!u){var m=(0,l.createParagraph)(!1,f,d,c);(0,n.addBlock)(e,m)}r.elementProcessors.child(e,t,r)}},2697:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.brProcessor=void 0;var o=r(8513),n=r(7826);t.brProcessor=function(e,t,r){var a=(0,n.createBr)(r.segmentFormat);r.isInSelection&&(a.isSelected=!0),(0,o.addSegment)(e,a,r.blockFormat)}},9384:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleRegularSelection=t.processChildNode=t.childProcessor=void 0;var o=r(7582),n=r(9871),a=r(8063),l=r(3233);function i(e,t,r){(0,l.isNodeOfType)(t,1)&&"none"!=t.style.display?r.elementProcessors.element(e,t,r):(0,l.isNodeOfType)(t,3)&&r.elementProcessors["#text"](e,t,r)}function s(e,t,r,o,a){e==o&&(t.isInSelection=!0,(0,n.addSelectionMarker)(r,t)),e==a&&(t.regularSelection.isSelectionCollapsed||(0,n.addSelectionMarker)(r,t),t.isInSelection=!1)}t.childProcessor=function(e,t,r){for(var n=(0,o.__read)((0,a.getRegularSelectionOffsets)(r,t),2),l=n[0],d=n[1],c=0,u=t.firstChild;u;u=u.nextSibling)s(c,r,e,l,d),i(e,u,r),c++;s(c,r,e,l,d)},t.processChildNode=i,t.handleRegularSelection=s},9633:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.codeProcessor=void 0;var o=r(4748),n=r(9366),a=r(202);t.codeProcessor=function(e,t,r){(0,a.stackFormat)(r,{code:"codeDefault"},(function(){(0,n.parseFormat)(t,r.formatParsers.code,r.code.format,r),(0,o.knownElementProcessor)(e,t,r)}))}},2130:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.delimiterProcessor=void 0;var o=r(7582),n=r(8063),a=r(9384);t.delimiterProcessor=function(e,t,r){for(var l=0,i=(0,o.__read)((0,n.getRegularSelectionOffsets)(r,t),2),s=i[0],d=i[1],c=t.firstChild;c;c=c.nextSibling)(0,a.handleRegularSelection)(l,r,e,s,d),l++;(0,a.handleRegularSelection)(l,r,e,s,d)}},7883:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.elementProcessor=void 0;var o=r(2347);t.elementProcessor=function(e,t,r){var n=t.tagName.toLowerCase(),a=function(e,t){return e.className&&(0,o.getEntityFromElement)(e)||"false"==e.contentEditable?t.elementProcessors.entity:null}(t,r)||function(e,t){return(0,o.getDelimiterFromElement)(e)?t.elementProcessors.delimiter:null}(t,r)||r.elementProcessors[n]||n.indexOf(":")>=0&&r.elementProcessors.child||r.elementProcessors["*"];a(e,t,r)}},6905:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.entityProcessor=void 0;var o=r(9275),n=r(8513),a=r(1033),l=r(2347),i=r(2404),s=r(202);t.entityProcessor=function(e,t,r){var d=(0,l.getEntityFromElement)(t)||{isReadonly:!0},c=d.id,u=d.type,f=d.isReadonly,m=(0,i.isBlockElement)(t,r);(0,s.stackFormat)(r,{segment:m?"empty":void 0,paragraph:"empty"},(function(){var l=r.allowCacheElement?t:t.cloneNode(!0);r.allowCacheElement||(l.style.backgroundColor=t.style.backgroundColor||"inherit",l.style.color=t.style.color||"inherit");var i=(0,a.createEntity)(l,f,r.segmentFormat,c,u);r.isInSelection&&(i.isSelected=!0),m?(0,o.addBlock)(e,i):(0,n.addSegment)(e,i)}))}},5718:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.fontProcessor=void 0;var o=r(2404),n=r(9366),a=r(202),l=["10px","13px","16px","18px","24px","32px","48px"];t.fontProcessor=function(e,t,r){(0,a.stackFormat)(r,{segment:(0,o.isBlockElement)(t,r)?"shallowCloneForBlock":"shallowClone"},(function(){var o,a,i=t.getAttribute("face"),s=(o=t.getAttribute("size"),a=parseInt(o||""),Number.isNaN(a)?void 0:a<1?l[0]:a>l.length?l[l.length-1]:l[a-1]),d=t.getAttribute("color"),c=r.segmentFormat;i&&(c.fontFamily=i),s&&(c.fontSize=s),d&&(c.textColor=d),(0,n.parseFormat)(t,r.formatParsers.segment,r.segmentFormat,r),r.elementProcessors.child(e,t,r)}))}},9004:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatContainerProcessor=t.ContextStyles=void 0;var o=r(7582),n=r(9275),a=r(2766),l=r(5092),i=r(3149),s=r(9366),d=r(3963),c=r(202);t.ContextStyles=["marginLeft","marginRight","paddingLeft","paddingRight"],t.formatContainerProcessor=function(e,r,u){(0,c.stackFormat)(u,{segment:"shallowCloneForBlock",paragraph:"shallowClone"},(function(){(0,s.parseFormat)(r,u.formatParsers.block,u.blockFormat,u),(0,s.parseFormat)(r,u.formatParsers.segmentOnBlock,u.segmentFormat,u);var l=(0,o.__assign)({},u.blockFormat);(0,s.parseFormat)(r,u.formatParsers.container,l,u);var c="block"==(0,i.getDefaultStyle)(r,u).display?r.tagName.toLowerCase():"div",f=(0,a.createFormatContainer)(c,l);if(t.ContextStyles.forEach((function(e){delete u.blockFormat[e]})),u.elementProcessors.child(f,r,u),r.style.fontSize&&0==parseInt(r.style.fontSize)&&(f.zeroFontSize=!0),function(e){var t=e.blocks[0];return"div"==e.tagName&&1==e.blocks.length&&"Paragraph"==t.blockType&&t.isImplicit}(f)){var m=f.blocks[0];f.zeroFontSize&&(m.segmentFormat=Object.assign({},m.segmentFormat,{fontSize:"0"})),Object.assign(m.format,f.format),(0,d.setParagraphNotImplicit)(m),(0,n.addBlock)(e,m)}else(0,n.addBlock)(e,f)})),(0,n.addBlock)(e,(0,l.createParagraph)(!0,u.blockFormat))}},1001:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generalProcessor=void 0;var o=r(9275),n=r(3883),a=r(8513),l=r(9237),i=r(8885),s=r(2404),d=r(202),c=function(e,t,r){var n=(0,l.createGeneralBlock)(t),a=r.isInSelection;(0,d.stackFormat)(r,{segment:"empty",paragraph:"empty",link:"empty"},(function(){(0,o.addBlock)(e,n),r.elementProcessors.child(n,t,r)})),a&&r.isInSelection&&(n.isSelected=!0)},u=function(e,t,r){var o=(0,i.createGeneralSegment)(t,r.segmentFormat),l=r.isInSelection;(0,n.addDecorators)(o,r),(0,a.addSegment)(e,o),(0,d.stackFormat)(r,{segment:"empty"},(function(){r.elementProcessors.child(o,t,r)})),l&&r.isInSelection&&(o.isSelected=!0)};t.generalProcessor=function(e,t,r){((0,s.isBlockElement)(t,r)?c:u)(e,t,r)}},2625:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.headingProcessor=void 0;var o=r(9275),n=r(7304),a=r(5092),l=r(24),i=r(9366),s=r(202);t.headingProcessor=function(e,t,r){(0,s.stackFormat)(r,{segment:"shallowCloneForBlock",paragraph:"shallowClone",blockDecorator:"empty"},(function(){var o={};(0,i.parseFormat)(t,r.formatParsers.segmentOnBlock,o,r),r.blockDecorator=(0,l.createParagraphDecorator)(t.tagName,o),(0,n.blockProcessor)(e,t,r)})),(0,o.addBlock)(e,(0,a.createParagraph)(!0,r.blockFormat))}},3092:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.hrProcessor=void 0;var o=r(9275),n=r(7110),a=r(9366),l=r(202);t.hrProcessor=function(e,t,r){(0,l.stackFormat)(r,{paragraph:"shallowClone"},(function(){(0,a.parseFormat)(t,r.formatParsers.divider,r.blockFormat,r);var l=(0,n.createDivider)("hr",r.blockFormat);t.size&&(l.size=t.size),r.isInSelection&&(l.isSelected=!0),(0,o.addBlock)(e,l)}))}},215:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.imageProcessor=void 0;var o=r(3883),n=r(8513),a=r(5566),l=r(9366),i=r(202);t.imageProcessor=function(e,t,r){(0,i.stackFormat)(r,{segment:"shallowClone"},(function(){var i,s=r.segmentFormat;(0,l.parseFormat)(t,r.formatParsers.segment,s,r),(0,l.parseFormat)(t,r.formatParsers.image,s,r),(0,l.parseFormat)(t,r.formatParsers.block,r.blockFormat,r);var d=(0,a.createImage)(t.src,s),c=t.alt,u=t.title;(0,l.parseFormat)(t,r.formatParsers.dataset,d.dataset,r),(0,o.addDecorators)(d,r),c&&(d.alt=c),u&&(d.title=u),r.isInSelection&&(d.isSelected=!0),(null===(i=r.imageSelection)||void 0===i?void 0:i.image)==t&&(d.isSelectedAsImageSelection=!0,d.isSelected=!0),(0,n.addSegment)(e,d)}))}},4748:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.knownElementProcessor=void 0;var o=r(9275),n=r(7304),a=r(5092),l=r(9004),i=r(3149),s=r(2404),d=r(9366),c=r(202),u=["marginBottom","marginTop","paddingBottom","paddingTop","paddingLeft","paddingRight","borderTopWidth","borderBottomWidth","borderLeftWidth","borderRightWidth","width","height","maxWidth","maxHeight","minWidth","minHeight"],f=["H1","H2","H3","H4","H5","H6","P","A"],m=["A","CODE"];t.knownElementProcessor=function(e,t,r){var p=(0,s.isBlockElement)(t,r);if((p||"inline-block"==t.style.display)&&function(e,t){if(f.indexOf(e.tagName)>=0)return!1;var r=e.style,o=(0,i.getDefaultStyle)(e,t),n=r.getPropertyValue("background-color");return!(!n||"transparent"==n)||(!!u.some((function(e){return parseInt(r[e]||o[e]||"")>0}))||("auto"==r.marginLeft||"auto"==r.marginRight||!!e.getAttribute("align")))}(t,r))(0,l.formatContainerProcessor)(e,t,r);else if(p){var v=r.blockDecorator.tagName?r.blockDecorator:void 0,g=m.indexOf(t.tagName)>=0;(0,c.stackFormat)(r,{segment:"shallowCloneForBlock",paragraph:"shallowClone"},(function(){var o={};(0,d.parseFormat)(t,r.formatParsers.segmentOnBlock,o,r),Object.assign(r.segmentFormat,o),(0,n.blockProcessor)(e,t,r,o)})),p&&!g&&(0,o.addBlock)(e,(0,a.createParagraph)(!0,r.blockFormat,void 0,v))}else(0,c.stackFormat)(r,{segment:"shallowClone",paragraph:"shallowClone",link:"cloneFormat"},(function(){(0,d.parseFormat)(t,r.formatParsers.segment,r.segmentFormat,r),r.link.format.href&&"A"!=t.tagName&&(0,d.parseFormat)(t,r.formatParsers.segmentUnderLink,r.link.format,r),r.elementProcessors.child(e,t,r)}))}},1091:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.linkProcessor=void 0;var o=r(4748),n=r(9366),a=r(202);t.linkProcessor=function(e,t,r){t.hasAttribute("href")?(0,a.stackFormat)(r,{link:"linkDefault"},(function(){(0,n.parseFormat)(t,r.formatParsers.link,r.link.format,r),(0,n.parseFormat)(t,r.formatParsers.dataset,r.link.dataset,r),(0,o.knownElementProcessor)(e,t,r)})):(0,o.knownElementProcessor)(e,t,r)}},5476:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.listItemProcessor=void 0;var o=r(7724),n=r(9366),a=r(202);t.listItemProcessor=function(e,t,r){var l,i=r.listFormat;if(i.listParent&&i.levels.length>0)(0,a.stackFormat)(r,{segment:"shallowCloneForBlock"},(function(){(0,n.parseFormat)(t,r.formatParsers.segmentOnBlock,r.segmentFormat,r);var e=(0,o.createListItem)(i.levels,r.segmentFormat);(0,n.parseFormat)(t,r.formatParsers.listItemElement,e.format,r),i.listParent.blocks.push(e),(0,n.parseFormat)(t,r.formatParsers.listItem,e.levels[e.levels.length-1],r),r.elementProcessors.child(e,t,r);var a=e.blocks[0];1==e.blocks.length&&"Paragraph"==a.blockType&&a.isImplicit&&(Object.assign(e.format,a.format),a.format={})}));else{var s=null===(l=i.listParent)||void 0===l?void 0:l.blocks,d=null==s?void 0:s[(null==s?void 0:s.length)-1];r.elementProcessors["*"]("BlockGroup"==(null==d?void 0:d.blockType)?d:e,t,r)}}},2791:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.listProcessor=void 0;var o=r(7582),n=r(9366),a=r(202),l=r(2362);t.listProcessor=function(e,t,r){(0,a.stackFormat)(r,{segment:"shallowCloneForBlock",paragraph:"shallowCloneForGroup"},(function(){var a=(0,o.__assign)({},r.blockFormat),i=r.listFormat;!function(e,t,r){var o={};(0,n.parseFormat)(e,t.formatParsers.dataset,o,t),(0,l.updateListMetadata)({dataset:o},(function(e){return Object.assign(r,e||{}),null}))}(t,r,a),(0,n.parseFormat)(t,r.formatParsers.listLevel,a,r),(0,n.parseFormat)(t,r.formatParsers.segment,r.segmentFormat,r);var s=i.listParent;i.listParent=i.listParent||e,i.levels.push(a);try{r.elementProcessors.child(e,t,r)}finally{i.levels.pop(),i.listParent=s}}))}},8191:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.pProcessor=void 0;var o=r(9275),n=r(7304),a=r(5092),l=r(24),i=r(9366),s=r(202);t.pProcessor=function(e,t,r){(0,s.stackFormat)(r,{blockDecorator:"empty",segment:"shallowCloneForBlock",paragraph:"shallowClone"},(function(){r.blockDecorator=(0,l.createParagraphDecorator)(t.tagName);var o={};(0,i.parseFormat)(t,r.formatParsers.segmentOnBlock,o,r),Object.assign(r.segmentFormat,o),(0,n.blockProcessor)(e,t,r,o)})),(0,o.addBlock)(e,(0,a.createParagraph)(!0,r.blockFormat))}},970:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.tableProcessor=void 0;var o=r(7582),n=r(9275),a=r(988),l=r(1160),i=r(3095),s=r(9366),d=r(202);function c(e){for(var t=[],r=e[e.length-1],o=e.length-2;o>=0;o--)void 0===e[o]?t[o]=0:(t[o]=r-e[o],r=e[o]);return t}t.tableProcessor=function(e,t,r){(0,d.stackFormat)(r,{segment:"shallowCloneForBlock",paragraph:"shallowCloneForGroup"},(function(){(0,s.parseFormat)(t,r.formatParsers.block,r.blockFormat,r);var u=(0,a.createTable)(t.rows.length,r.blockFormat),f=r.tableSelection||{},m=f.table,p=f.firstCell,v=f.lastCell,g=m==t&&!!p&&!!v;r.allowCacheElement&&(u.cachedElement=t),(0,s.parseFormat)(t,r.formatParsers.table,u.format,r),(0,s.parseFormat)(t,r.formatParsers.tableBorder,u.format,r),(0,s.parseFormat)(t,r.formatParsers.segmentOnBlock,r.segmentFormat,r),(0,s.parseFormat)(t,r.formatParsers.dataset,u.dataset,r),(0,n.addBlock)(e,u);for(var b=[0],h=[0],y=r.zoomScaleFormat.zoomScale||1,_=function(e){var n=t.rows[e],a=u.rows[e];r.allowCacheElement&&(a.cachedElement=n),(0,s.parseFormat)(n,r.formatParsers.tableRow,a.format,r),(0,d.stackFormat)(r,{paragraph:"shallowClone",segment:"shallowClone"},(function(){var t=n.parentElement,c=null==t?void 0:t.tagName;!t||"TBODY"!=c&&"THEAD"!=c&&"TFOOT"!=c||((0,s.parseFormat)(t,r.formatParsers.block,r.blockFormat,r),(0,s.parseFormat)(t,r.formatParsers.segmentOnBlock,r.segmentFormat,r)),(0,s.parseFormat)(n,r.formatParsers.block,r.blockFormat,r),(0,s.parseFormat)(n,r.formatParsers.segmentOnBlock,r.segmentFormat,r);for(var f,m=function(t,c){for(;a.cells[c];c++);var m=n.cells[t],_=r.isInSelection,P=c+m.colSpan,C=e+m.rowSpan,S=void 0===b[P],k=void 0===h[C];if(S||k){var O=(0,i.getBoundingClientRect)(m);(O.width>0||O.height>0)&&(S&&(b[P]=b[c]+O.width/y),k&&(h[C]=h[e]+O.height/y))}(0,d.stackFormat)(r,{paragraph:"shallowClone",segment:"shallowClone"},(function(){(0,s.parseFormat)(m,r.formatParsers.block,r.blockFormat,r),(0,s.parseFormat)(m,r.formatParsers.segmentOnTableCell,r.segmentFormat,r);var t=(0,o.__assign)({},r.blockFormat),n={};(0,s.parseFormat)(m,r.formatParsers.tableCell,t,r),(0,s.parseFormat)(m,r.formatParsers.tableBorder,t,r),(0,s.parseFormat)(m,r.formatParsers.dataset,n,r);for(var a=1;a<=m.colSpan;a++,c++)for(var i=1;i<=m.rowSpan;i++){var d=1==a&&1==i,f=(0,l.createTableCell)(a>1,i>1,"TH"==m.tagName,t);f.dataset=(0,o.__assign)({},n);var b=u.rows[e+i-1];if(b&&(b.cells[c]=f),d){r.allowCacheElement&&(f.cachedElement=m);var h=r.listFormat,y=h.listParent,P=h.levels;r.listFormat.listParent=void 0,r.listFormat.levels=[];try{r.elementProcessors.child(f,m,r)}finally{r.listFormat.listParent=y,r.listFormat.levels=P}}var C=r.isInSelection;(_&&C||g&&e>=p.y&&e<=v.y&&c>=p.x&&c<=v.x)&&(f.isSelected=!0)}})),f=c},_=0,P=0;_0&&(e.height=C[t])}))}))}},9892:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.textProcessor=void 0;var o=r(7582),n=r(3883),a=r(8513),l=r(9871),i=r(8310),s=r(840),d=r(8063),c=r(5589);t.textProcessor=function(e,t,r){var n=t.nodeValue||"",a=(0,o.__read)((0,d.getRegularSelectionOffsets)(r,t),2),i=a[0],s=a[1];i>=0&&(f(e,n.substring(0,i),r),r.isInSelection=!0,(0,l.addSelectionMarker)(e,r),n=n.substring(i),s-=i),s>=0&&(f(e,n.substring(0,s),r),r.regularSelection.isSelectionCollapsed||(0,l.addSelectionMarker)(e,r),r.isInSelection=!1,n=n.substring(s)),f(e,n,r)};var u=["pre","pre-wrap","pre-line","break-spaces"];function f(e,t,r){if(t){var o=e.blocks[e.blocks.length-1],l="Paragraph"==(null==o?void 0:o.blockType)?o:null,d=null==l?void 0:l.segments[l.segments.length-1];if("Text"==(null==d?void 0:d.segmentType)&&!!d.isSelected==!!r.isInSelection&&(0,i.areSameFormats)(d.format,r.segmentFormat)&&(0,i.areSameFormats)(d.link||{},r.link.format||{})&&(0,i.areSameFormats)(d.code||{},r.code.format||{}))d.text+=t;else if(!(0,c.hasSpacesOnly)(t)||(null==l?void 0:l.segments.length)>0||u.indexOf((null==l?void 0:l.format.whiteSpace)||"")>=0){var f=(0,s.createText)(t,r.segmentFormat);r.isInSelection&&(f.isSelected=!0),(0,n.addDecorators)(f,r),(0,a.addSegment)(e,f,r.blockFormat)}}}},9871:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.addSelectionMarker=void 0;var o=r(3883),n=r(8513),a=r(5114);t.addSelectionMarker=function(e,t){var r=(0,a.createSelectionMarker)(t.segmentFormat);(0,o.addDecorators)(r,t),(0,n.addSegment)(e,r,t.blockFormat)}},8310:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.areSameFormats=void 0;var o=r(2347);t.areSameFormats=function(e,t){if(e==t)return!0;var r=(0,o.getObjectKeys)(e),n=(0,o.getObjectKeys)(t);return r.length==n.length&&r.every((function(r){return e[r]==t[r]}))}},3095:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getBoundingClientRect=void 0,t.getBoundingClientRect=function(e){return e.getBoundingClientRect()}},3149:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getDefaultStyle=void 0,t.getDefaultStyle=function(e,t){var r=e.tagName.toLowerCase();return t.defaultStyles[r]||{}}},8063:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getRegularSelectionOffsets=void 0,t.getRegularSelectionOffsets=function(e,t){var r,o;return[(null===(r=e.regularSelection)||void 0===r?void 0:r.startContainer)==t?e.regularSelection.startOffset:-1,(null===(o=e.regularSelection)||void 0===o?void 0:o.endContainer)==t?e.regularSelection.endOffset:-1]}},2404:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isBlockElement=void 0;var o=r(3149),n=["block","list-item","table","table-cell","flex"];t.isBlockElement=function(e,t){var r=e.style.display||(0,o.getDefaultStyle)(e,t).display||"";return n.indexOf(r)>=0}},9366:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseFormat=void 0;var o=r(3149);t.parseFormat=function(e,t,r,n){var a=(0,o.getDefaultStyle)(e,n);t.forEach((function(t){null==t||t(r,e,n,a)}))}},202:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.stackFormat=void 0;var o=r(7582),n=r(2347),a=["backgroundColor"],l=["marginLeft","marginRight","paddingLeft","paddingRight"];function i(e,t){switch(t){case"empty":return{};case void 0:return e;default:var r=(0,o.__assign)({},e);return(0,n.getObjectKeys)(e).forEach((function(e){("shallowCloneForBlock"==t&&a.indexOf(e)>=0||"shallowCloneForGroup"==t&&l.indexOf(e)>=0)&&delete r[e]})),r}}t.stackFormat=function(e,t,r){var n,a=e.segmentFormat,l=e.blockFormat,s=e.link,d=e.code,c=e.blockDecorator,u=t.segment,f=t.paragraph,m=t.link,p=t.code,v=t.blockDecorator;try{e.segmentFormat=i(a,u),e.blockFormat=i(l,f),e.link=function(e,t){switch(t){case"linkDefault":return{format:{underline:!0},dataset:{}};case"empty":return{format:{},dataset:{}};default:return{dataset:e.dataset,format:(0,o.__assign)({},e.format)}}}(s,m),e.code=function(e,t){switch(t){case"codeDefault":return{format:{fontFamily:"monospace"}};case"empty":return{format:{}};default:return e}}(d,p),e.blockDecorator=(n=c,"empty"===v?{format:{},tagName:""}:n),r()}finally{e.segmentFormat=a,e.blockFormat=l,e.link=s,e.code=d,e.blockDecorator=c}}},3233:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isNodeOfType=void 0,t.isNodeOfType=function(e,t){return!!e&&e.nodeType==t}},2362:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.updateListMetadata=void 0;var o=r(2347),n=r(6245),a=(0,o.createObjectDefinition)({orderedStyleType:(0,o.createNumberDefinition)(!0,void 0,1,20),unorderedStyleType:(0,o.createNumberDefinition)(!0,void 0,1,9)},!0,!0);t.updateListMetadata=function(e,t){return(0,n.updateMetadata)(e,t,a)}},6245:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.hasMetadata=t.updateMetadata=void 0;var o=r(2347),n="editingInfo";t.updateMetadata=function(e,t,r){var a=e.dataset[n],l=null;try{l=JSON.parse(a)}catch(e){}return r&&!(0,o.validate)(l,r)&&(l=null),t&&((l=t(l))?r&&!(0,o.validate)(l,r)||(e.dataset[n]=JSON.stringify(l)):delete e.dataset[n]),l},t.hasMetadata=function(e){return!!e.dataset[n]}},5589:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.normalizeText=t.hasSpacesOnly=t.isSpace=t.isPunctuation=void 0;var r=/^[\r\n\t ]*$/,o=/[\u2000\u2009\u200a​\u200b​\u202f\u205f​\u3000\s\t\r\n]/gm;t.isPunctuation=function(e){return'.,?!:"()[]\\/'.indexOf(e)>=0},t.isSpace=function(e){var t,r=null!==(t=null==e?void 0:e.charCodeAt(0))&&void 0!==t?t:0;return 160==r||32==r||o.test(e)},t.hasSpacesOnly=function(e){return r.test(e)},t.normalizeText=function(e,t){return e.replace(t?/^\u0020+/:/\u0020+$/," ")}},9980:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.directionFormatHandler=void 0,t.directionFormatHandler={parse:function(e,t,r,o){var n=t.style.direction||t.dir||o.direction;n&&(e.direction="rtl"==n?"rtl":"ltr")},apply:function(e,t){e.direction&&(t.style.direction=e.direction)}}},1276:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.displayFormatHandler=void 0,t.displayFormatHandler={parse:function(e,t){var r=t.style.display;r&&(e.display=r)},apply:function(e,t){e.display&&(t.style.display=e.display)}}},7762:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.htmlAlignFormatHandler=void 0;var o=r(3612),n=r(9980);t.htmlAlignFormatHandler={parse:function(e,t,r,a){n.directionFormatHandler.parse(e,t,r,a);var l=t.getAttribute("align");l&&(e.htmlAlign=(0,o.calcAlign)(l,e.direction),delete e.textAlign,delete r.blockFormat.textAlign)},apply:function(e,t){var r="rtl"==e.direction?"rtl":"ltr";e.htmlAlign&&t.setAttribute("align",o.ResultMap[e.htmlAlign][r])}}},4652:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.lineHeightFormatHandler=void 0,t.lineHeightFormatHandler={parse:function(e,t,r,o){var n=t.style.lineHeight||o.lineHeight;n&&"inherit"!=n&&(e.lineHeight=n)},apply:function(e,t){e.lineHeight&&(t.style.lineHeight=e.lineHeight)}}},4116:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.marginFormatHandler=void 0;var o=r(8704),n=["marginTop","marginRight","marginBottom","marginLeft"];t.marginFormatHandler={parse:function(e,t,r,a){n.forEach((function(r){var n=t.style[r]||a[r];if(n)switch(r){case"marginTop":case"marginBottom":e[r]=n;break;case"marginLeft":case"marginRight":e[r]=e[r]?(0,o.parseValueWithUnit)(e[r]||"",t)+(0,o.parseValueWithUnit)(n,t)+"px":n}}))},apply:function(e,t,r){n.forEach((function(o){var n=e[o];n!=r.implicitFormat[o]&&(t.style[o]=n||"0")}))}}},632:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.paddingFormatHandler=void 0;var r=["paddingTop","paddingRight","paddingBottom","paddingLeft"];t.paddingFormatHandler={parse:function(e,t){r.forEach((function(r){var o=t.style[r];o&&(e[r]=o)}))},apply:function(e,t){r.forEach((function(r){var o=e[r];o&&(t.style[r]=o)}))}}},9568:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.textAlignFormatHandler=void 0;var o=r(3612),n=r(9980);t.textAlignFormatHandler={parse:function(e,t,r,a){var l;n.directionFormatHandler.parse(e,t,r,a);var i=t.style.textAlign||a.textAlign;"LI"==t.tagName&&"flex"===(null===(l=t.parentElement)||void 0===l?void 0:l.style.display)&&"column"===t.parentElement.style.flexDirection&&t.style.alignSelf&&(i=t.style.alignSelf),i&&(e.textAlign=(0,o.calcAlign)(i,e.direction))},apply:function(e,t){var r="rtl"==e.direction?"rtl":"ltr";if(e.textAlign){var n=t.parentElement,a=null==n?void 0:n.tagName;"LI"!=t.tagName||!n||"OL"!=a&&"UL"!=a?t.style.textAlign=o.ResultMap[e.textAlign][r]:(t.style.alignSelf=e.textAlign,t.parentElement.style.flexDirection="column",t.parentElement.style.display="flex")}}}},1167:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.whiteSpaceFormatHandler=void 0,t.whiteSpaceFormatHandler={parse:function(e,t,r,o){var n=t.style.whiteSpace||o.whiteSpace;n&&(e.whiteSpace=n)},apply:function(e,t,r){var o=r.implicitFormat.whiteSpace;e.whiteSpace!=o&&(t.style.whiteSpace=e.whiteSpace||"normal")}}},8891:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.backgroundColorFormatHandler=void 0;var o=r(5150);t.backgroundColorFormatHandler={parse:function(e,t,r,n){var a=(0,o.getColor)(t,!0,r.darkColorHandler,r.isDarkMode)||n.backgroundColor;a&&(e.backgroundColor=a)},apply:function(e,t,r){e.backgroundColor&&(0,o.setColor)(t,e.backgroundColor,!0,r.darkColorHandler,r.isDarkMode)}}},5930:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.borderBoxFormatHandler=void 0,t.borderBoxFormatHandler={parse:function(e,t){var r;"border-box"==(null===(r=t.style)||void 0===r?void 0:r.boxSizing)&&(e.useBorderBox=!0)},apply:function(e,t){e.useBorderBox&&(t.style.boxSizing="border-box")}}},1136:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.borderFormatHandler=t.BorderKeys=void 0,t.BorderKeys=["borderTop","borderRight","borderBottom","borderLeft","borderRadius"],t.borderFormatHandler={parse:function(e,r){t.BorderKeys.forEach((function(t){var o=r.style[t];o&&(e[t]="none"==o?"":o)}))},apply:function(e,r){t.BorderKeys.forEach((function(t){var o=e[t];o&&(r.style[t]=o)}))}}},8577:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.boxShadowFormatHandler=void 0,t.boxShadowFormatHandler={parse:function(e,t){var r;(null===(r=t.style)||void 0===r?void 0:r.boxShadow)&&(e.boxShadow=t.style.boxShadow)},apply:function(e,t){e.boxShadow&&(t.style.boxShadow=e.boxShadow)}}},1453:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.datasetFormatHandler=void 0;var o=r(2347);t.datasetFormatHandler={parse:function(e,t){var r=t.dataset;(0,o.getObjectKeys)(r).forEach((function(t){e[t]=r[t]||""}))},apply:function(e,t){(0,o.getObjectKeys)(e).forEach((function(r){t.dataset[r]=e[r]}))}}},6883:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.idFormatHandler=void 0,t.idFormatHandler={parse:function(e,t){t.id&&(e.id=t.id)},apply:function(e,t){e.id&&(t.id=e.id)}}},7302:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.sizeFormatHandler=void 0;var r=/[\d\.]+%/;function o(e,t){var o=e.getAttribute(t),n=parseInt(o||"");return o&&r.test(o)?o:Number.isNaN(n)?void 0:n+"px"}t.sizeFormatHandler={parse:function(e,t,r){var n=t.style.width||o(t,"width"),a=t.style.height||o(t,"height"),l=t.style.maxWidth,i=t.style.maxHeight,s=t.style.minWidth,d=t.style.minHeight;n&&(e.width=n),a&&(e.height=a),l&&(e.maxWidth=l),i&&(e.maxHeight=i),s&&(e.minWidth=s),d&&(e.minHeight=d)},apply:function(e,t){e.width&&(t.style.width=e.width),e.height&&(t.style.height=e.height),e.maxWidth&&(t.style.maxWidth=e.maxWidth),e.maxHeight&&(t.style.maxHeight=e.maxHeight),e.minWidth&&(t.style.minWidth=e.minWidth),e.minHeight&&(t.style.minHeight=e.minHeight)}}},8854:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.verticalAlignFormatHandler=void 0,t.verticalAlignFormatHandler={parse:function(e,t){switch(t.style.verticalAlign||t.getAttribute("valign")){case"baseline":case"initial":case"super":case"sub":case"text-top":case"text-bottom":case"top":e.verticalAlign="top";break;case"bottom":e.verticalAlign="bottom"}},apply:function(e,t){e.verticalAlign&&(t.style.verticalAlign=e.verticalAlign)}}},4258:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.wordBreakFormatHandler=void 0,t.wordBreakFormatHandler={parse:function(e,t,r,o){var n=t.style.wordBreak||o.wordBreak;n&&(e.wordBreak=n)},apply:function(e,t){e.wordBreak&&(t.style.wordBreak=e.wordBreak)}}},8659:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getFormatAppliers=t.getFormatParsers=t.defaultFormatAppliers=t.defaultFormatParsers=void 0;var o=r(7582),n=r(8891),a=r(8707),l=r(5930),i=r(1136),s=r(8577),d=r(1453),c=r(9980),u=r(1276),f=r(7239),m=r(9101),p=r(2347),v=r(7762),g=r(6883),b=r(2647),h=r(3260),y=r(4652),_=r(7026),P=r(154),C=r(2128),S=r(2438),k=r(9865),O=r(5931),M=r(9379),T=r(4116),F=r(632),w=r(7302),x=r(6413),j=r(5855),E=r(746),B=r(461),A=r(9568),I=r(1268),L=r(5797),D=r(7506),H=r(8854),N=r(1167),R=r(4258),z={backgroundColor:n.backgroundColorFormatHandler,bold:a.boldFormatHandler,border:i.borderFormatHandler,borderBox:l.borderBoxFormatHandler,boxShadow:s.boxShadowFormatHandler,dataset:d.datasetFormatHandler,direction:c.directionFormatHandler,display:u.displayFormatHandler,fontFamily:f.fontFamilyFormatHandler,fontSize:m.fontSizeFormatHandler,htmlAlign:v.htmlAlignFormatHandler,id:g.idFormatHandler,italic:b.italicFormatHandler,letterSpacing:h.letterSpacingFormatHandler,lineHeight:y.lineHeightFormatHandler,link:_.linkFormatHandler,listItemMetadata:P.listItemMetadataFormatHandler,listItemThread:C.listItemThreadFormatHandler,listLevelMetadata:S.listLevelMetadataFormatHandler,listLevelThread:k.listLevelThreadFormatHandler,listStylePosition:O.listStylePositionFormatHandler,listType:M.listTypeFormatHandler,margin:T.marginFormatHandler,padding:F.paddingFormatHandler,size:w.sizeFormatHandler,strike:x.strikeFormatHandler,superOrSubScript:j.superOrSubScriptFormatHandler,tableLayout:E.tableLayoutFormatHandler,tableSpacing:B.tableSpacingFormatHandler,textAlign:A.textAlignFormatHandler,textColor:I.textColorFormatHandler,textColorOnTableCell:L.textColorOnTableCellFormatHandler,underline:D.underlineFormatHandler,verticalAlign:H.verticalAlignFormatHandler,whiteSpace:N.whiteSpaceFormatHandler,wordBreak:R.wordBreakFormatHandler},W=["letterSpacing","fontFamily","fontSize"],G=["strike","underline","superOrSubScript","italic","bold"],U=["direction","textAlign","lineHeight","whiteSpace"],K=["backgroundColor","margin","padding","border"],V={block:U,listItem:["listItemThread","listItemMetadata"],listItemElement:(0,o.__spreadArray)((0,o.__spreadArray)([],(0,o.__read)(U),!1),["direction","textAlign","lineHeight","margin"],!1),listLevel:["listType","listLevelThread","listLevelMetadata","direction","textAlign","margin","padding","listStylePosition","backgroundColor"],styleBasedSegment:(0,o.__spreadArray)((0,o.__spreadArray)([],(0,o.__read)(W),!1),["textColor","backgroundColor","lineHeight"],!1),elementBasedSegment:G,segment:(0,o.__spreadArray)((0,o.__spreadArray)((0,o.__spreadArray)([],(0,o.__read)(W),!1),(0,o.__read)(G),!1),["textColor","backgroundColor","lineHeight"],!1),segmentOnBlock:(0,o.__spreadArray)((0,o.__spreadArray)((0,o.__spreadArray)([],(0,o.__read)(W),!1),(0,o.__read)(G),!1),["textColor"],!1),segmentOnTableCell:(0,o.__spreadArray)((0,o.__spreadArray)((0,o.__spreadArray)([],(0,o.__read)(W),!1),(0,o.__read)(G),!1),["textColorOnTableCell"],!1),tableCell:["border","backgroundColor","padding","verticalAlign","wordBreak","textColor","htmlAlign","size"],tableRow:["backgroundColor"],table:["id","border","backgroundColor","display","htmlAlign","margin","size","tableLayout"],tableBorder:["borderBox","tableSpacing"],tableCellBorder:["borderBox"],image:["id","size","margin","padding","borderBox","border","boxShadow","display"],link:["link","textColor","underline","display","margin","padding","backgroundColor","border","size","textAlign"],segmentUnderLink:["textColor"],code:["fontFamily","display"],dataset:["dataset"],divider:(0,o.__spreadArray)((0,o.__spreadArray)((0,o.__spreadArray)([],(0,o.__read)(U),!1),(0,o.__read)(K),!1),["display","size","htmlAlign"],!1),container:(0,o.__spreadArray)((0,o.__spreadArray)([],(0,o.__read)(K),!1),["htmlAlign","size","display"],!1)};t.defaultFormatParsers=(0,p.getObjectKeys)(z).reduce((function(e,t){return e[t]=z[t].parse,e}),{}),t.defaultFormatAppliers=(0,p.getObjectKeys)(z).reduce((function(e,t){return e[t]=z[t].apply,e}),{}),t.getFormatParsers=function(e,r){return void 0===e&&(e={}),void 0===r&&(r={}),(0,p.getObjectKeys)(V).reduce((function(o,n){var a=V[n].map((function(r){return void 0===e[r]?t.defaultFormatParsers[r]:e[r]})).concat(r[n]||[]);return o[n]=a,o}),{})},t.getFormatAppliers=function(e,r){return void 0===e&&(e={}),void 0===r&&(r={}),(0,p.getObjectKeys)(V).reduce((function(o,n){var a=V[n].map((function(r){return void 0===e[r]?t.defaultFormatAppliers[r]:e[r]})).concat(r[n]||[]);return o[n]=a,o}),{})}},154:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getOrderedListStyleValue=t.listItemMetadataFormatHandler=void 0;var o=r(7582),n=r(2347),a=r(3233),l=r(2438),i=/\$\{(\w+)\}/,s=["decimal","lower-alpha","lower-roman"],d=["disc","circle","square"],c=65,u={M:1e3,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1};function f(e,t){return e?e.replace(i,(function(e,r){switch(r){case"Number":return t+"";case"LowerAlpha":return m(t,!0);case"UpperAlpha":return m(t,!1);case"LowerRoman":return p(t,!0);case"UpperRoman":return p(t,!1)}return""})):void 0}function m(e,t){var r="";for(e--;e>=0;)r=String.fromCharCode(e%26+c)+r,e=Math.floor(e/26)-1;return t?r.toLowerCase():r}function p(e,t){var r,a,l="";try{for(var i=(0,o.__values)((0,n.getObjectKeys)(u)),s=i.next();!s.done;s=i.next()){var d=s.value,c=Math.floor(e/u[d]);e-=c*u[d],l+=d.repeat(c)}}catch(e){r={error:e}}finally{try{s&&!s.done&&(a=i.return)&&a.call(i)}finally{if(r)throw r.error}}return t?l.toLocaleLowerCase():l}t.listItemMetadataFormatHandler={parse:function(){},apply:function(e,t,r){var o,i,c=t.parentNode,u=r.listFormat.nodeStack.length-2;if(u>=0&&(0,a.isNodeOfType)(c,1)&&!c.style.listStyleType){var m="OL"==(0,n.getTagOfNode)(c)?null!==(o=f(l.OrderedMap[e.orderedStyleType],r.listFormat.threadItemCounts[u]))&&void 0!==o?o:s[u%s.length]:null!==(i=l.UnorderedMap[e.unorderedStyleType])&&void 0!==i?i:d[u%d.length];m&&(u>0||"decimal"!=m&&"disc"!=m)&&(t.style.listStyleType=m)}}},t.getOrderedListStyleValue=f},2128:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.listItemThreadFormatHandler=void 0;var o=r(2347);function n(e){return(0,o.safeInstanceOf)(e,"HTMLLIElement")&&(0,o.safeInstanceOf)(e.parentNode,"HTMLOListElement")}t.listItemThreadFormatHandler={parse:function(e,t,r,o){var a=r.listFormat,l=a.levels.length,i=t.style.display||o.display;i&&"list-item"!=i?e.displayForDummyItem=i:n(t)&&l>0&&(a.threadItemCounts[l-1]++,a.threadItemCounts.splice(l),a.levels.forEach((function(e){delete e.startNumberOverride})))},apply:function(e,t,r){var o;if(e.displayForDummyItem)t.style.display=e.displayForDummyItem;else if(n(t)){var a=r.listFormat,l=a.threadItemCounts,i=a.nodeStack.length-2;i>=0&&(l.splice(i+1),l[i]=(null!==(o=l[i])&&void 0!==o?o:0)+1)}}}},2438:(e,t,r)=>{var o,n;Object.defineProperty(t,"__esModule",{value:!0}),t.listLevelMetadataFormatHandler=t.UnorderedMap=t.OrderedMap=void 0;var a=r(2347);t.OrderedMap=((o={})[1]="decimal",o[2]='"${Number}- "',o[3]='"${Number}) "',o[4]='"(${Number}) "',o[5]="lower-alpha",o[8]='"${LowerAlpha}- "',o[6]='"${LowerAlpha}) "',o[7]='"(${LowerAlpha}) "',o[9]="upper-alpha",o[12]='"${UpperAlpha}- "',o[10]='"${UpperAlpha}) "',o[11]='"(${UpperAlpha}) "',o[13]="lower-roman",o[16]='"${LowerRoman}- "',o[14]='"${LowerRoman}) "',o[15]='"(${LowerRoman}) "',o[17]="upper-roman",o[20]='"${UpperRoman}- "',o[18]='"${UpperRoman}) "',o[19]='"(${UpperRoman}) "',o),t.UnorderedMap=((n={})[1]="disc",n[3]='"∎ "',n[9]="circle",n[2]='"- "',n[5]='"➔ "',n[8]='"➔ "',n[4]='"➢ "',n[6]='"➪ "',n[7]='"— "',n);var l={1:"decimal",a:"lower-alpha",A:"upper-alpha",i:"lower-roman",I:"upper-roman"};function i(e,t){return void 0===t?void 0:(0,a.getObjectKeys)(e).filter((function(r){return e[r]==t}))[0]}t.listLevelMetadataFormatHandler={parse:function(e,r){var o=r.style.listStyleType||(0,a.safeInstanceOf)(r,"HTMLOListElement")&&l[r.type],n=(0,a.getTagOfNode)(r);if(o)if("OL"==n&&void 0===e.orderedStyleType){var s=i(t.OrderedMap,o);e.orderedStyleType=void 0===s?void 0:parseInt(s)}else"UL"==n&&void 0===e.unorderedStyleType&&(s=i(t.UnorderedMap,o),e.unorderedStyleType=void 0===s?void 0:parseInt(s))},apply:function(e,r){var o="OL"==(0,a.getTagOfNode)(r)?t.OrderedMap[e.orderedStyleType]:t.UnorderedMap[e.unorderedStyleType];o&&o.indexOf('"')<0&&(r.style.listStyleType=o)}}},9865:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.listLevelThreadFormatHandler=void 0;var o=r(2347);t.listLevelThreadFormatHandler={parse:function(e,t,r){if((0,o.safeInstanceOf)(t,"HTMLOListElement")){var n=r.listFormat,a=n.threadItemCounts,l=n.levels.length;"number"==typeof a[l]&&t.start!=a[l]+1&&(e.startNumberOverride=t.start),a[l]=t.start-1}},apply:function(e,t,r){var n=r.listFormat,a=n.threadItemCounts,l=n.nodeStack.length-1;if(l>=0&&(0,o.safeInstanceOf)(t,"HTMLOListElement")){var i=e.startNumberOverride;"number"==typeof i?a[l]=i-1:"number"!=typeof a[l]&&(a[l]=0),a.splice(l+1),t.start=a[l]+1}}}},5931:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.listStylePositionFormatHandler=void 0,t.listStylePositionFormatHandler={parse:function(e,t){var r=t.style.listStylePosition;r&&(e.listStylePosition=r)},apply:function(e,t){e.listStylePosition&&(t.style.listStylePosition=e.listStylePosition)}}},9379:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.listTypeFormatHandler=void 0;var o=r(2347);t.listTypeFormatHandler={parse:function(e,t){var r=(0,o.getTagOfNode)(t);"OL"!=r&&"UL"!=r||(e.listType=r)},apply:function(){}}},7573:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.rootDirectionFormatHandler=void 0,t.rootDirectionFormatHandler={parse:function(e,t){var r,o=null===(r=t.ownerDocument.defaultView)||void 0===r?void 0:r.getComputedStyle(t);"rtl"==(null==o?void 0:o.direction)&&(e.direction="rtl")},apply:function(){}}},5571:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.zoomScaleFormatHandler=void 0,t.zoomScaleFormatHandler={parse:function(e,t){var r=t.getBoundingClientRect().width,o=t.offsetWidth;e.zoomScale=o>0&&r>0?Math.round(r/o*100)/100:1},apply:function(){}}},8707:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.boldFormatHandler=void 0;var o=r(2347);t.boldFormatHandler={parse:function(e,t,r,o){var n=t.style.fontWeight||o.fontWeight;n&&(e.fontWeight=n)},apply:function(e,t,r){if(void 0!==e.fontWeight){var n=r.implicitFormat.fontWeight;if(n&&n!=e.fontWeight||!n&&e.fontWeight&&"normal"!=e.fontWeight)if("bold"==e.fontWeight){var a=t.ownerDocument.createElement("b");(0,o.moveChildNodes)(a,t),t.appendChild(a)}else t.style.fontWeight=e.fontWeight||"normal"}}}},7239:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.fontFamilyFormatHandler=void 0,t.fontFamilyFormatHandler={parse:function(e,t,r,o){var n=t.style.fontFamily||o.fontFamily;n&&"inherit"!=n&&(e.fontFamily=n)},apply:function(e,t,r){e.fontFamily&&e.fontFamily!=r.implicitFormat.fontFamily&&(t.style.fontFamily=e.fontFamily)}}},9101:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.fontSizeFormatHandler=void 0;var o=r(5855);t.fontSizeFormatHandler={parse:function(e,t,r,n){var a=t.style.fontSize||n.fontSize,l=t.style.verticalAlign||n.verticalAlign;a&&!(0,o.isSuperOrSubScript)(a,l)&&"inherit"!=a&&(e.fontSize=a)},apply:function(e,t,r){e.fontSize&&e.fontSize!=r.implicitFormat.fontSize&&(t.style.fontSize=e.fontSize)}}},2647:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.italicFormatHandler=void 0;var o=r(2347);t.italicFormatHandler={parse:function(e,t,r,o){var n=t.style.fontStyle||o.fontStyle;"italic"==n||"oblique"==n?e.italic=!0:"initial"!=n&&"normal"!=n||(e.italic=!1)},apply:function(e,t,r){if(void 0!==e.italic&&!!r.implicitFormat.italic!=!!e.italic)if(e.italic){var n=t.ownerDocument.createElement("i");(0,o.moveChildNodes)(n,t),t.appendChild(n)}else t.style.fontStyle="normal"}}},3260:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.letterSpacingFormatHandler=void 0,t.letterSpacingFormatHandler={parse:function(e,t,r,o){var n=t.style.letterSpacing||o.letterSpacing;n&&(e.letterSpacing=n)},apply:function(e,t,r){e.letterSpacing&&(t.style.letterSpacing=e.letterSpacing)}}},7026:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.linkFormatHandler=void 0;var o=r(2347);t.linkFormatHandler={parse:function(e,t){if((0,o.safeInstanceOf)(t,"HTMLAnchorElement")){var r=t.name,n=t.getAttribute("href"),a=t.target,l=t.rel,i=t.id,s=t.className,d=t.title;r&&(e.name=r),n&&(e.href=n),a&&(e.target=a),i&&(e.anchorId=i),l&&(e.relationship=l),d&&(e.anchorTitle=d),s&&(e.anchorClass=s)}},apply:function(e,t){(0,o.safeInstanceOf)(t,"HTMLAnchorElement")&&e.href&&(t.href=e.href,e.name&&(t.name=e.name),e.target&&(t.target=e.target),e.anchorId&&(t.id=e.anchorId),e.anchorClass&&(t.className=e.anchorClass),e.anchorTitle&&(t.title=e.anchorTitle),e.relationship&&(t.rel=e.relationship))}}},6413:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.strikeFormatHandler=void 0;var o=r(2347);t.strikeFormatHandler={parse:function(e,t,r,o){var n=t.style.textDecoration||o.textDecoration;(null==n?void 0:n.indexOf("line-through"))>=0&&(e.strikethrough=!0)},apply:function(e,t){if(e.strikethrough){var r=t.ownerDocument.createElement("s");(0,o.moveChildNodes)(r,t),t.appendChild(r)}}}},5855:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isSuperOrSubScript=t.superOrSubScriptFormatHandler=void 0;var o=r(2347);function n(e,t){return"smaller"==e&&("sub"==t||"super"==t)}t.superOrSubScriptFormatHandler={parse:function(e,t,r,o){var a=t.style.verticalAlign||o.verticalAlign;n(t.style.fontSize||o.fontSize,a)&&(e.superOrSubScriptSequence=(e.superOrSubScriptSequence||"").split(" ").concat(a).join(" ").trim())},apply:function(e,t){e.superOrSubScriptSequence&&e.superOrSubScriptSequence.split(" ").reverse().forEach((function(e){var r="super"==e?"sup":"sub"==e?"sub":null;if(r){var n=t.ownerDocument.createElement(r);(0,o.moveChildNodes)(n,t),t.appendChild(n)}}))}},t.isSuperOrSubScript=n},1268:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.textColorFormatHandler=void 0;var o=r(5150);t.textColorFormatHandler={parse:function(e,t,r,n){var a=(0,o.getColor)(t,!1,r.darkColorHandler,r.isDarkMode)||n.color;a&&"inherit"!=a&&(e.textColor=a)},apply:function(e,t,r){var n=r.implicitFormat.textColor;e.textColor&&e.textColor!=n&&(0,o.setColor)(t,e.textColor,!1,r.darkColorHandler,r.isDarkMode)}}},7506:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.underlineFormatHandler=void 0;var o=r(2347);t.underlineFormatHandler={parse:function(e,t,r,o){var n=t.style.textDecoration||o.textDecoration;(null==n?void 0:n.indexOf("underline"))>=0?e.underline=!0:"A"==t.tagName&&"none"==n&&(e.underline=!1)},apply:function(e,t,r){if(void 0!==e.underline&&!!r.implicitFormat.underline!=!!e.underline)if(e.underline){var n=t.ownerDocument.createElement("u");(0,o.moveChildNodes)(n,t),t.appendChild(n)}else t.style.textDecoration="none"}}},746:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.tableLayoutFormatHandler=void 0,t.tableLayoutFormatHandler={parse:function(e,t){var r=t.style.tableLayout;r&&"inherit"!=r&&(e.tableLayout=r)},apply:function(e,t){e.tableLayout&&(t.style.tableLayout=e.tableLayout)}}},461:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.tableSpacingFormatHandler=void 0;var r="collapse";t.tableSpacingFormatHandler={parse:function(e,t){t.style.borderCollapse==r&&(e.borderCollapse=!0)},apply:function(e,t){e.borderCollapse&&(t.style.borderCollapse=r,t.style.borderSpacing="0",t.style.boxSizing="border-box")}}},5797:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.textColorOnTableCellFormatHandler=void 0,t.textColorOnTableCellFormatHandler={parse:function(e,t){t.style.color&&delete e.textColor},apply:function(){}}},5150:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.setColor=t.getColor=void 0;var o=r(2347);t.getColor=function(e,t,r,n){var a;return a||(a=r&&function(e,t,r,n){var a;return"FONT"==(0,o.getTagOfNode)(e)&&!e.style.getPropertyValue(n?"background-color":"color")&&t&&(a=e.getAttribute(n?"bgcolor":"color"))?r.findLightColorFromDarkColor(a):null}(e,n,r,t)||(t?e.style.backgroundColor:e.style.color)||e.getAttribute(t?"bgcolor":"color")||void 0),r&&(a=r.parseColorValue(a).lightModeColor),a},t.setColor=function(e,t,r,o,n){var a=o?o.registerColor(t,n):t;r?e.style.backgroundColor=a:e.style.color=a}},976:(e,t)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.defaultImplicitFormatMap=t.PseudoTagNames=t.defaultStyleMap=void 0;var o={display:"block"};t.defaultStyleMap={address:o,article:o,aside:o,b:{fontWeight:"bold"},blockquote:{display:"block",marginTop:"1em",marginBottom:"1em",marginLeft:"40px",marginRight:"40px"},br:o,center:{display:"block",textAlign:"center"},dd:o,div:o,dl:o,dt:o,em:{fontStyle:"italic"},fieldset:o,figcaption:o,figure:o,footer:o,form:o,h1:{display:"block",fontWeight:"bold",fontSize:"2em"},h2:{display:"block",fontWeight:"bold",fontSize:"1.5em"},h3:{display:"block",fontWeight:"bold",fontSize:"1.17em"},h4:{display:"block",fontWeight:"bold"},h5:{display:"block",fontWeight:"bold",fontSize:"0.83em"},h6:{display:"block",fontWeight:"bold",fontSize:"0.67em"},header:o,hr:o,i:{fontStyle:"italic"},li:{display:"list-item"},main:o,nav:o,ol:o,p:{display:"block",marginTop:"1em",marginBottom:"1em"},pre:{display:"block",fontFamily:"monospace",whiteSpace:"pre",marginTop:"1em",marginBottom:"1em"},s:{textDecoration:"line-through"},section:o,strike:{textDecoration:"line-through"},strong:{fontWeight:"bold"},sub:{verticalAlign:"sub",fontSize:"smaller"},sup:{verticalAlign:"super",fontSize:"smaller"},table:{display:"table",boxSizing:"border-box"},td:{display:"table-cell"},th:{display:"table-cell"},u:{textDecoration:"underline"},ul:o},(t.PseudoTagNames||(t.PseudoTagNames={})).childOfPre="pre *",t.defaultImplicitFormatMap=((r={a:{underline:!0},blockquote:{marginTop:"1em",marginBottom:"1em",marginLeft:"40px",marginRight:"40px"},code:{fontFamily:"monospace"},h1:{fontWeight:"bold",fontSize:"2em"},h2:{fontWeight:"bold",fontSize:"1.5em"},h3:{fontWeight:"bold",fontSize:"1.17em"},h4:{fontWeight:"bold",fontSize:"1em"},h5:{fontWeight:"bold",fontSize:"0.83em"},h6:{fontWeight:"bold",fontSize:"0.67em"},p:{marginTop:"1em",marginBottom:"1em"},pre:{fontFamily:"monospace",whiteSpace:"pre",marginTop:"1em",marginBottom:"1em"}})["pre *"]={fontFamily:"monospace",whiteSpace:"pre"},r)},3612:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calcAlign=t.ResultMap=void 0,t.ResultMap={start:{ltr:"left",rtl:"right"},center:{ltr:"center",rtl:"center"},end:{ltr:"right",rtl:"left"},initial:{ltr:"initial",rtl:"initial"},justify:{ltr:"justify",rtl:"justify"}},t.calcAlign=function(e,t){switch(e){case"center":return"center";case"left":return"rtl"==t?"end":"start";case"right":return"rtl"==t?"start":"end";case"start":case"end":case"justify":case"initial":return e;default:return}}},8704:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseValueWithUnit=void 0;var o=r(7582),n=r(2347),a=/(-?\d+(\.\d+)?)([a-z]+|%)/;function l(e){var t=(0,n.getComputedStyle)(e,"font-size");return i(parseFloat(t))}function i(e){return Math.round(4e3*e/3)/1e3}t.parseValueWithUnit=function(e,t,r){void 0===e&&(e=""),void 0===r&&(r="px");var n,s=a.exec(e),d=0;if(s){var c=(0,o.__read)(s,4),u=(c[0],c[1]),f=(c[2],c[3]),m=parseFloat(u);switch(f){case"px":d=m;break;case"pt":d=i(m);break;case"em":d=t?l(t)*m:0;break;case"ex":d=t?l(t)*m/2:0;break;case"%":d=t?t.offsetWidth*m/100:0}}return d>0&&"pt"==r&&(n=d,d=Math.round(3e3*n/4)/1e3),d}},1246:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createDomToModelContext=t.normalizeText=t.isSpace=t.isPunctuation=t.defaultImplicitFormatMap=t.BorderKeys=t.parseValueWithUnit=t.setParagraphNotImplicit=t.normalizeSingleSegment=t.isWhiteSpacePreserved=t.addSegment=t.unwrapBlock=t.isGeneralSegment=t.normalizeContentModel=t.addLink=t.addCode=t.addBlock=t.createDivider=t.createEntity=t.createGeneralBlock=t.createGeneralSegment=t.createParagraphDecorator=t.createContentModelDocument=t.createImage=t.createText=t.createTableCell=t.createTable=t.createSelectionMarker=t.createParagraph=t.createFormatContainer=t.createListItem=t.createBr=t.isNodeOfType=t.hasMetadata=t.updateMetadata=t.areSameFormats=t.parseFormat=t.getRegularSelectionOffsets=t.tableProcessor=t.entityProcessor=t.processChildNode=t.handleRegularSelection=t.childProcessor=t.contentModelToDom=t.domToContentModel=void 0;var o=r(1807);Object.defineProperty(t,"domToContentModel",{enumerable:!0,get:function(){return o.domToContentModel}});var n=r(4266);Object.defineProperty(t,"contentModelToDom",{enumerable:!0,get:function(){return n.contentModelToDom}});var a=r(9384);Object.defineProperty(t,"childProcessor",{enumerable:!0,get:function(){return a.childProcessor}}),Object.defineProperty(t,"handleRegularSelection",{enumerable:!0,get:function(){return a.handleRegularSelection}}),Object.defineProperty(t,"processChildNode",{enumerable:!0,get:function(){return a.processChildNode}});var l=r(6905);Object.defineProperty(t,"entityProcessor",{enumerable:!0,get:function(){return l.entityProcessor}});var i=r(970);Object.defineProperty(t,"tableProcessor",{enumerable:!0,get:function(){return i.tableProcessor}});var s=r(8063);Object.defineProperty(t,"getRegularSelectionOffsets",{enumerable:!0,get:function(){return s.getRegularSelectionOffsets}});var d=r(9366);Object.defineProperty(t,"parseFormat",{enumerable:!0,get:function(){return d.parseFormat}});var c=r(8310);Object.defineProperty(t,"areSameFormats",{enumerable:!0,get:function(){return c.areSameFormats}});var u=r(6245);Object.defineProperty(t,"updateMetadata",{enumerable:!0,get:function(){return u.updateMetadata}}),Object.defineProperty(t,"hasMetadata",{enumerable:!0,get:function(){return u.hasMetadata}});var f=r(3233);Object.defineProperty(t,"isNodeOfType",{enumerable:!0,get:function(){return f.isNodeOfType}});var m=r(7826);Object.defineProperty(t,"createBr",{enumerable:!0,get:function(){return m.createBr}});var p=r(7724);Object.defineProperty(t,"createListItem",{enumerable:!0,get:function(){return p.createListItem}});var v=r(2766);Object.defineProperty(t,"createFormatContainer",{enumerable:!0,get:function(){return v.createFormatContainer}});var g=r(5092);Object.defineProperty(t,"createParagraph",{enumerable:!0,get:function(){return g.createParagraph}});var b=r(5114);Object.defineProperty(t,"createSelectionMarker",{enumerable:!0,get:function(){return b.createSelectionMarker}});var h=r(988);Object.defineProperty(t,"createTable",{enumerable:!0,get:function(){return h.createTable}});var y=r(1160);Object.defineProperty(t,"createTableCell",{enumerable:!0,get:function(){return y.createTableCell}});var _=r(840);Object.defineProperty(t,"createText",{enumerable:!0,get:function(){return _.createText}});var P=r(5566);Object.defineProperty(t,"createImage",{enumerable:!0,get:function(){return P.createImage}});var C=r(5733);Object.defineProperty(t,"createContentModelDocument",{enumerable:!0,get:function(){return C.createContentModelDocument}});var S=r(24);Object.defineProperty(t,"createParagraphDecorator",{enumerable:!0,get:function(){return S.createParagraphDecorator}});var k=r(8885);Object.defineProperty(t,"createGeneralSegment",{enumerable:!0,get:function(){return k.createGeneralSegment}});var O=r(9237);Object.defineProperty(t,"createGeneralBlock",{enumerable:!0,get:function(){return O.createGeneralBlock}});var M=r(1033);Object.defineProperty(t,"createEntity",{enumerable:!0,get:function(){return M.createEntity}});var T=r(7110);Object.defineProperty(t,"createDivider",{enumerable:!0,get:function(){return T.createDivider}});var F=r(9275);Object.defineProperty(t,"addBlock",{enumerable:!0,get:function(){return F.addBlock}});var w=r(3883);Object.defineProperty(t,"addCode",{enumerable:!0,get:function(){return w.addCode}});var x=r(3883);Object.defineProperty(t,"addLink",{enumerable:!0,get:function(){return x.addLink}});var j=r(8767);Object.defineProperty(t,"normalizeContentModel",{enumerable:!0,get:function(){return j.normalizeContentModel}});var E=r(183);Object.defineProperty(t,"isGeneralSegment",{enumerable:!0,get:function(){return E.isGeneralSegment}});var B=r(5960);Object.defineProperty(t,"unwrapBlock",{enumerable:!0,get:function(){return B.unwrapBlock}});var A=r(8513);Object.defineProperty(t,"addSegment",{enumerable:!0,get:function(){return A.addSegment}});var I=r(3897);Object.defineProperty(t,"isWhiteSpacePreserved",{enumerable:!0,get:function(){return I.isWhiteSpacePreserved}});var L=r(3393);Object.defineProperty(t,"normalizeSingleSegment",{enumerable:!0,get:function(){return L.normalizeSingleSegment}});var D=r(3963);Object.defineProperty(t,"setParagraphNotImplicit",{enumerable:!0,get:function(){return D.setParagraphNotImplicit}});var H=r(8704);Object.defineProperty(t,"parseValueWithUnit",{enumerable:!0,get:function(){return H.parseValueWithUnit}});var N=r(1136);Object.defineProperty(t,"BorderKeys",{enumerable:!0,get:function(){return N.BorderKeys}});var R=r(976);Object.defineProperty(t,"defaultImplicitFormatMap",{enumerable:!0,get:function(){return R.defaultImplicitFormatMap}});var z=r(5589);Object.defineProperty(t,"isPunctuation",{enumerable:!0,get:function(){return z.isPunctuation}}),Object.defineProperty(t,"isSpace",{enumerable:!0,get:function(){return z.isSpace}}),Object.defineProperty(t,"normalizeText",{enumerable:!0,get:function(){return z.normalizeText}});var W=r(9968);Object.defineProperty(t,"createDomToModelContext",{enumerable:!0,get:function(){return W.createDomToModelContext}})},3963:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.setParagraphNotImplicit=void 0,t.setParagraphNotImplicit=function(e){"Paragraph"==e.blockType&&e.isImplicit&&(e.isImplicit=!1)}},9275:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.addBlock=void 0,t.addBlock=function(e,t){e.blocks.push(t)}},3883:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.addDecorators=t.addCode=t.addLink=void 0;var o=r(7582);function n(e,t){t.format.href&&(e.link={format:(0,o.__assign)({},t.format),dataset:(0,o.__assign)({},t.dataset)})}function a(e,t){t.format.fontFamily&&(e.code={format:(0,o.__assign)({},t.format)})}t.addLink=n,t.addCode=a,t.addDecorators=function(e,t){n(e,t.link),a(e,t.code)}},8513:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.addSegment=void 0;var o=r(9275),n=r(5092);t.addSegment=function(e,t,r){var a,l=e.blocks[e.blocks.length-1];"Paragraph"==(null==l?void 0:l.blockType)?a=l:(a=(0,n.createParagraph)(!0,r),(0,o.addBlock)(e,a));var i=a.segments[a.segments.length-1];"SelectionMarker"==t.segmentType?i&&i.isSelected||a.segments.push(t):(t.isSelected&&"SelectionMarker"==(null==i?void 0:i.segmentType)&&a.segments.pop(),a.segments.push(t))}},4451:(e,t)=>{function r(e){switch(e.blockType){case"Paragraph":return 0==e.segments.length;case"Table":return e.rows.every((function(e){return 0==e.cells.length}));case"BlockGroup":return o(e);default:return!1}}function o(e){switch(e.blockGroupType){case"FormatContainer":return"div"!=e.tagName&&e.blocks.every(r);case"ListItem":return e.blocks.every(r);case"Document":case"General":case"TableCell":return!1;default:return!0}}function n(e){switch(e.segmentType){case"Text":return!e.text;case"Image":return!e.src;default:return!1}}Object.defineProperty(t,"__esModule",{value:!0}),t.isEmpty=t.isSegmentEmpty=t.isBlockGroupEmpty=t.isBlockEmpty=void 0,t.isBlockEmpty=r,t.isBlockGroupEmpty=o,t.isSegmentEmpty=n,t.isEmpty=function(e){return function(e){return"string"==typeof e.blockGroupType}(e)?o(e):function(e){return"string"==typeof e.blockType}(e)?r(e):!!function(e){return"string"==typeof e.segmentType}(e)&&n(e)}},183:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isGeneralSegment=void 0,t.isGeneralSegment=function(e){return"General"==e.blockGroupType&&"General"==e.segmentType}},3897:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isWhiteSpacePreserved=void 0;var r=["pre","pre-wrap","break-spaces"];t.isWhiteSpacePreserved=function(e){return e.format.whiteSpace&&r.indexOf(e.format.whiteSpace)>=0||!1}},8767:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.normalizeContentModel=void 0;var o=r(4451),n=r(4858),a=r(5960);t.normalizeContentModel=function e(t){for(var r=t.blocks.length-1;r>=0;r--){var l=t.blocks[r];switch(l.blockType){case"BlockGroup":"ListItem"==l.blockGroupType&&0==l.levels.length?(r+=l.blocks.length,(0,a.unwrapBlock)(t,l)):e(l);break;case"Paragraph":(0,n.normalizeParagraph)(l);break;case"Table":for(var i=0;i{Object.defineProperty(t,"__esModule",{value:!0}),t.normalizeParagraph=void 0;var o=r(7826),n=r(4451),a=r(3897),l=r(3393);t.normalizeParagraph=function(e){var t=e.segments;if(!e.isImplicit&&t.length>0){var r=t[t.length-1],i=t[t.length-2];if("SelectionMarker"!=r.segmentType||i&&"Br"!=i.segmentType){if(t.length>1&&"Br"==t[t.length-1].segmentType){var s=t.filter((function(e){return"SelectionMarker"!=e.segmentType}));s.length>1&&"Br"!=s[s.length-2].segmentType&&t.pop()}}else t.push((0,o.createBr)(r.format))}(0,a.isWhiteSpacePreserved)(e)||(0,l.normalizeAllSegments)(e),function(e){for(var t=e.segments.length-1;t>=0;t--)(0,n.isSegmentEmpty)(e.segments[t])&&e.segments.splice(t,1)}(e)}},3393:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.normalizeSegment=t.createNormalizeSegmentContext=t.normalizeSingleSegment=t.normalizeAllSegments=void 0;var o=r(5589),n=" ",a=" ",l=/^\u0020+/,i=/\u0020+$/;function s(e){return Object.assign(null!=e?e:{},{textSegments:[],ignoreLeadingSpaces:!0,ignoreTrailingSpaces:!0,lastInlineSegment:void 0,lastTextSegment:void 0})}function d(e,t){switch(e.segmentType){case"Br":c(t.textSegments,t.lastInlineSegment),u(t.lastTextSegment,t.lastInlineSegment),s(t);break;case"Entity":case"General":case"Image":t.lastInlineSegment=e,t.ignoreLeadingSpaces=!1;break;case"Text":t.textSegments.push(e),t.lastInlineSegment=e,t.lastTextSegment=e;var r=e.text.substring(0,1),d=e.text.substr(-1);(0,o.hasSpacesOnly)(e.text)||(r==n&&(e.text=e.text.replace(l,t.ignoreLeadingSpaces?"":a)),d==n&&(e.text=e.text.replace(i,t.ignoreTrailingSpaces?n:a))),t.ignoreLeadingSpaces=d==n}}function c(e,t){e.forEach((function(e){if(e!=t){var r=e.text;r.substr(-1)==a&&r.length>1&&r.substr(-2,1)!=n&&(e.text=r.substring(0,r.length-1)+n)}}))}function u(e,t){e&&e==t&&(null==e?void 0:e.text.substr(-1))==n&&(e.text=e.text.replace(i,""))}t.normalizeAllSegments=function(e){var t=s();e.segments.forEach((function(e){d(e,t)})),c(t.textSegments,t.lastInlineSegment),u(t.lastTextSegment,t.lastInlineSegment)},t.normalizeSingleSegment=function(e,t){void 0===t&&(t=!1);var r=s();r.ignoreTrailingSpaces=t,d(e,r)},t.createNormalizeSegmentContext=function(){return s()},t.normalizeSegment=d},5960:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.unwrapBlock=void 0;var o=r(7582),n=r(3963);t.unwrapBlock=function(e,t){var r,a,l=null!==(a=null==e?void 0:e.blocks.indexOf(t))&&void 0!==a?a:-1;l>=0&&(t.blocks.forEach(n.setParagraphNotImplicit),null==e||(r=e.blocks).splice.apply(r,(0,o.__spreadArray)([l,1],(0,o.__read)(t.blocks),!1)))}},7826:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createBr=void 0;var o=r(7582);t.createBr=function(e){return{segmentType:"Br",format:e?(0,o.__assign)({},e):{}}}},5733:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createContentModelDocument=void 0,t.createContentModelDocument=function(e){var t={blockGroupType:"Document",blocks:[]};return e&&(t.format=e),t}},7110:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createDivider=void 0;var o=r(7582);t.createDivider=function(e,t){return{blockType:"Divider",tagName:e,format:t?(0,o.__assign)({},t):{}}}},1033:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createEntity=void 0;var o=r(7582);t.createEntity=function(e,t,r,n,a){return{segmentType:"Entity",blockType:"Entity",format:(0,o.__assign)({},r||{}),id:n,type:a,isReadonly:t,wrapper:e}}},2766:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createFormatContainer=void 0;var o=r(7582);t.createFormatContainer=function(e,t){return{blockType:"BlockGroup",blockGroupType:"FormatContainer",tagName:e,blocks:[],format:(0,o.__assign)({},t||{})}}},9237:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createGeneralBlock=void 0,t.createGeneralBlock=function(e){return{blockType:"BlockGroup",blockGroupType:"General",element:e,blocks:[],format:{}}}},8885:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createGeneralSegment=void 0;var o=r(7582);t.createGeneralSegment=function(e,t){return{blockType:"BlockGroup",blockGroupType:"General",segmentType:"General",format:t?(0,o.__assign)({},t):{},blocks:[],element:e}}},5566:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createImage=void 0;var o=r(7582);t.createImage=function(e,t){return{segmentType:"Image",src:e,format:t?(0,o.__assign)({},t):{},dataset:{}}}},7724:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createListItem=void 0;var o=r(7582),n=r(5114);t.createListItem=function(e,t){return{blockType:"BlockGroup",blockGroupType:"ListItem",blocks:[],levels:e?e.map((function(e){return(0,o.__assign)({},e)})):[],formatHolder:(0,n.createSelectionMarker)(t),format:{}}}},5092:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createParagraph=void 0;var o=r(7582);t.createParagraph=function(e,t,r,n){var a={blockType:"Paragraph",segments:[],format:t?(0,o.__assign)({},t):{}};return r&&Object.keys(r).length>0&&(a.segmentFormat=(0,o.__assign)({},r)),e&&(a.isImplicit=!0),n&&(a.decorator={tagName:n.tagName,format:(0,o.__assign)({},n.format)}),a}},24:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createParagraphDecorator=void 0;var o=r(7582);t.createParagraphDecorator=function(e,t){return{tagName:e.toLocaleLowerCase(),format:(0,o.__assign)({},t||{})}}},5114:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createSelectionMarker=void 0;var o=r(7582);t.createSelectionMarker=function(e){return{segmentType:"SelectionMarker",isSelected:!0,format:e?(0,o.__assign)({},e):{}}}},988:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createTable=void 0;var o=r(7582);t.createTable=function(e,t){for(var r=[],n=0;n{Object.defineProperty(t,"__esModule",{value:!0}),t.createTableCell=void 0;var o=r(7582);t.createTableCell=function(e,t,r,n){var a="number"==typeof e?e>1:!!e,l="number"==typeof t?t>1:!!t;return{blockGroupType:"TableCell",blocks:[],format:n?(0,o.__assign)({},n):{},spanLeft:a,spanAbove:l,isHeader:!!r,dataset:{}}}},840:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createText=void 0;var o=r(7582);t.createText=function(e,t){return{segmentType:"Text",text:e,format:t?(0,o.__assign)({},t):{}}}},4266:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.contentModelToDom=void 0;var o=r(8530),n=r(2347),a=r(3233);function l(e){var t,r;return e.block&&(r=e.segment?(0,a.isNodeOfType)(e.segment,3)?new n.Position(e.segment,(null===(t=e.segment.nodeValue)||void 0===t?void 0:t.length)||0):new n.Position(e.segment.parentNode,(0,n.toArray)(e.segment.parentNode.childNodes).indexOf(e.segment)+1):new n.Position(e.block,0)),(0,a.isNodeOfType)(null==r?void 0:r.node,11)&&(r=null==r?void 0:r.normalize()),r}t.contentModelToDom=function(e,t,r,a,i){var s=(0,o.createModelToDomContext)(a,i);s.modelHandlers.blockGroupChildren(e,t,r,s);var d=function(e){var t,r,o=e.regularSelection,a=o.start,i=o.end,s=e.tableSelection,d=e.imageSelection;if(null==d?void 0:d.image)return{type:2,ranges:[(0,n.createRange)(d.image)],areAllCollapsed:!1,image:d.image};if((t=a&&l(a))&&(r=i&&l(i))){var c=(0,n.createRange)(t,r);return{type:0,ranges:[(0,n.createRange)(t,r)],areAllCollapsed:c.collapsed}}return(null==s?void 0:s.table)?{type:1,ranges:[],areAllCollapsed:!1,table:s.table,coordinates:{firstCell:s.firstCell,lastCell:s.lastCell}}:null}(s);return t.normalize(),d}},8530:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createModelToDomContext=void 0;var o=r(7582),n=r(9550),a=r(976),l=r(8659);t.createModelToDomContext=function(e,t){return t=t||{},(0,o.__assign)((0,o.__assign)({},e||{isDarkMode:!1}),{regularSelection:{current:{block:null,segment:null}},listFormat:{threadItemCounts:[],nodeStack:[]},implicitFormat:{},formatAppliers:(0,l.getFormatAppliers)(t.formatApplierOverride,t.additionalFormatAppliers),modelHandlers:(0,o.__assign)((0,o.__assign)({},n.defaultContentModelHandlers),t.modelHandlerOverride||{}),defaultImplicitFormatMap:(0,o.__assign)((0,o.__assign)({},a.defaultImplicitFormatMap),t.defaultImplicitFormatOverride||{}),defaultModelHandlers:n.defaultContentModelHandlers,defaultFormatAppliers:l.defaultFormatAppliers,onNodeCreated:t.onNodeCreated})}},9550:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.defaultContentModelHandlers=void 0;var o=r(3377),n=r(7352),a=r(6830),l=r(1379),i=r(736),s=r(740),d=r(3035),c=r(1920),u=r(3378),f=r(6026),m=r(1351),p=r(3913),v=r(1596),g=r(8109),b=r(8906);t.defaultContentModelHandlers={block:o.handleBlock,blockGroupChildren:n.handleBlockGroupChildren,br:a.handleBr,entity:i.handleEntity,general:d.handleGeneralModel,divider:l.handleDivider,image:c.handleImage,list:u.handleList,listItem:f.handleListItem,paragraph:m.handleParagraph,formatContainer:s.handleFormatContainer,segment:p.handleSegment,segmentDecorator:v.handleSegmentDecorator,table:g.handleTable,text:b.handleText}},3377:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleBlock=void 0,t.handleBlock=function(e,t,r,o,n){var a=o.modelHandlers;switch(r.blockType){case"Table":n=a.table(e,t,r,o,n);break;case"Paragraph":n=a.paragraph(e,t,r,o,n);break;case"Entity":n=a.entity(e,t,r,o,n);break;case"Divider":n=a.divider(e,t,r,o,n);break;case"BlockGroup":switch(r.blockGroupType){case"General":n=a.general(e,t,r,o,n);break;case"FormatContainer":n=a.formatContainer(e,t,r,o,n);break;case"ListItem":n=a.listItem(e,t,r,o,n)}}return n}},7352:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleBlockGroupChildren=void 0,t.handleBlockGroupChildren=function(e,t,r,o){var n,a=o.listFormat,l=a.nodeStack,i=t.firstChild;try{for(r.blocks.forEach((function(r,n){0!=n&&"BlockGroup"==r.blockType&&"ListItem"==r.blockGroupType||(a.nodeStack=[]),i=o.modelHandlers.block(e,t,r,o,i)}));i;){var s=i.nextSibling;null===(n=i.parentNode)||void 0===n||n.removeChild(i),i=s}}finally{a.nodeStack=l}}},6830:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleBr=void 0;var o=r(8826);t.handleBr=function(e,t,r,n){var a=e.createElement("br"),l=e.createElement("span");l.appendChild(a),t.appendChild(l),(0,o.handleSegmentCommon)(e,a,l,r,n)}},1379:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleDivider=void 0;var o=r(7908),n=r(5381);t.handleDivider=function(e,t,r,a,l){var i,s=r.cachedElement;return s?l=(0,n.reuseCachedElement)(t,s,l):(s=e.createElement(r.tagName),r.cachedElement=s,t.insertBefore(s,l),(0,o.applyFormat)(s,a.formatAppliers.divider,r.format,a),r.size&&s.setAttribute("size",r.size)),null===(i=a.onNodeCreated)||void 0===i||i.call(a,r,s),l}},736:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleEntity=void 0;var o=r(7582),n=r(7908),a=r(5381),l=r(2347);t.handleEntity=function(e,t,r,i,s){var d,c=r.wrapper,u=r.id,f=r.type,m=r.isReadonly,p=r.format,v=u&&f?{wrapper:c,id:u,type:f,isReadonly:!!m}:null,g=!(0,l.isBlockElement)(c);if(v&&(0,l.commitEntity)(c,v.type,v.isReadonly,v.id),s=(0,a.reuseCachedElement)(t,c,s),g&&(0,l.getObjectKeys)(p).length>0){var b=(0,l.wrap)(c,"span");(0,n.applyFormat)(b,i.formatAppliers.segment,p,i)}if(i.addDelimiterForEntity&&g&&m){var h=(0,o.__read)((0,l.addDelimiters)(c),1)[0];i.regularSelection.current.segment=h}return null===(d=i.onNodeCreated)||void 0===d||d.call(i,r,c),s}},740:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleFormatContainer=void 0;var o=r(7908),n=r(4451),a=r(5381),l=r(3348);t.handleFormatContainer=function(e,t,r,i,s){var d,c=r.cachedElement;if(c)s=(0,a.reuseCachedElement)(t,c,s),i.modelHandlers.blockGroupChildren(e,c,r,i);else if(!(0,n.isBlockGroupEmpty)(r)){var u=e.createElement(r.tagName);r.cachedElement=u,t.insertBefore(u,s),(0,l.stackFormat)(i,r.tagName,(function(){(0,o.applyFormat)(u,i.formatAppliers.container,r.format,i),(0,o.applyFormat)(u,i.formatAppliers.segmentOnBlock,r.format,i),(0,o.applyFormat)(u,i.formatAppliers.container,r.format,i)})),"pre"==r.tagName?(0,l.stackFormat)(i,"pre *",(function(){i.modelHandlers.blockGroupChildren(e,u,r,i)})):i.modelHandlers.blockGroupChildren(e,u,r,i),c=u}return c&&(null===(d=i.onNodeCreated)||void 0===d||d.call(i,r,c)),s}},3035:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleGeneralModel=void 0;var o=r(8826),n=r(183),a=r(3233),l=r(5381),i=r(2347);t.handleGeneralModel=function(e,t,r,s,d){var c,u=r.element;if(d&&u.parentNode==t?d=(0,l.reuseCachedElement)(t,u,d):(u=u.cloneNode(),r.element=u,t.insertBefore(u,d)),(0,n.isGeneralSegment)(r)&&(0,a.isNodeOfType)(u,1)){var f=(0,i.wrap)(u,"span");(0,o.handleSegmentCommon)(e,u,f,r,s)}else null===(c=s.onNodeCreated)||void 0===c||c.call(s,r,u);return s.modelHandlers.blockGroupChildren(e,u,r,s),d}},1920:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleImage=void 0;var o=r(7908),n=r(8826),a=r(8704);t.handleImage=function(e,t,r,l){var i=e.createElement("img"),s=document.createElement("span");t.appendChild(s),s.appendChild(i),i.src=r.src,r.alt&&(i.alt=r.alt),r.title&&(i.title=r.title),(0,o.applyFormat)(i,l.formatAppliers.image,r.format,l),(0,o.applyFormat)(i,l.formatAppliers.dataset,r.dataset,l);var d=r.format,c=d.width,u=d.height,f=c?(0,a.parseValueWithUnit)(c):0,m=u?(0,a.parseValueWithUnit)(u):0;f>0&&(i.width=f),m>0&&(i.height=m),r.isSelectedAsImageSelection&&(l.imageSelection={image:i}),(0,n.handleSegmentCommon)(e,i,s,r,l)}},3378:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleList=void 0;var o=r(7582),n=r(7908),a=r(2362);function l(e,t,r){var o={};(0,a.updateListMetadata)({dataset:o},(function(){return"number"==typeof e.orderedStyleType||"number"==typeof e.unorderedStyleType?{orderedStyleType:e.orderedStyleType,unorderedStyleType:e.unorderedStyleType}:null})),(0,n.applyFormat)(t,r.formatAppliers.dataset,o,r)}t.handleList=function(e,t,r,a,i){var s,d=0,c=a.listFormat.nodeStack;for(0==c.length&&c.push({node:t});d{Object.defineProperty(t,"__esModule",{value:!0}),t.handleListItem=void 0;var o=r(7908),n=r(3963),a=r(2347);t.handleListItem=function(e,t,r,l,i){var s,d;i=l.modelHandlers.list(e,t,r,l,i);var c=l.listFormat.nodeStack,u=(null===(s=null==c?void 0:c[(null==c?void 0:c.length)-1])||void 0===s?void 0:s.node)||t,f=e.createElement("li"),m=r.levels[r.levels.length-1];return u.insertBefore(f,(null==i?void 0:i.parentNode)==u?i:null),m?((0,o.applyFormat)(f,l.formatAppliers.listItemElement,r.format,l),(0,o.applyFormat)(f,l.formatAppliers.segment,r.formatHolder.format,l),(0,o.applyFormat)(f,l.formatAppliers.listItem,m,l),l.modelHandlers.blockGroupChildren(e,f,r,l)):(r.blocks.forEach(n.setParagraphNotImplicit),l.modelHandlers.blockGroupChildren(e,f,r,l),(0,a.unwrap)(f)),null===(d=l.onNodeCreated)||void 0===d||d.call(l,r,f),i}},1351:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleParagraph=void 0;var o=r(7582),n=r(7908),a=r(2347),l=r(6976),i=r(5381),s=r(3348);t.handleParagraph=function(e,t,r,d,c){var u,f,m=r.cachedElement;return m?c=(0,i.reuseCachedElement)(t,m,c):(0,s.stackFormat)(d,(null===(u=r.decorator)||void 0===u?void 0:u.tagName)||null,(function(){var i,u,f=!r.isImplicit||!!r.decorator||(0,a.getObjectKeys)(r.format).length>0&&r.segments.some((function(e){return"SelectionMarker"!=e.segmentType})),p=f?(0,o.__assign)((0,o.__assign)({},(null===(i=r.decorator)||void 0===i?void 0:i.format)||{}),r.segmentFormat):{};m=e.createElement((null===(u=r.decorator)||void 0===u?void 0:u.tagName)||"div"),t.insertBefore(m,c),d.regularSelection.current={block:f?m:m.parentNode,segment:null};var v=function(){var t=m;if(t){var n=r.segments[0];"SelectionMarker"==(null==n?void 0:n.segmentType)&&d.modelHandlers.text(e,t,(0,o.__assign)((0,o.__assign)({},n),{segmentType:"Text",text:""}),d),r.segments.forEach((function(r){d.modelHandlers.segment(e,t,r,d)}))}};f?((0,s.stackFormat)(d,p,v),(0,n.applyFormat)(m,d.formatAppliers.block,r.format,d),(0,n.applyFormat)(m,d.formatAppliers.container,r.format,d),(0,n.applyFormat)(m,d.formatAppliers.segmentOnBlock,p,d)):v(),(0,l.optimize)(m),c=m.nextSibling,f?r.cachedElement=m:(0,a.unwrap)(m)})),m&&(null===(f=d.onNodeCreated)||void 0===f||f.call(d,r,m)),c}},3913:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleSegment=void 0;var o=r(7582);t.handleSegment=function(e,t,r,n){var a=n.regularSelection;switch(r.isSelected&&!a.start&&(a.start=(0,o.__assign)({},a.current)),r.segmentType){case"Text":n.modelHandlers.text(e,t,r,n);break;case"Br":n.modelHandlers.br(e,t,r,n);break;case"Image":n.modelHandlers.image(e,t,r,n);break;case"General":n.modelHandlers.general(e,t,r,n,null);break;case"Entity":n.modelHandlers.entity(e,t,r,n,null)}r.isSelected&&a.start&&(a.end=(0,o.__assign)({},a.current))}},1596:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleSegmentDecorator=void 0;var o=r(7908),n=r(2347),a=r(3348);t.handleSegmentDecorator=function(e,t,r,l){var i=r.code,s=r.link;s&&(0,a.stackFormat)(l,"a",(function(){var e,r=document.createElement("a");(0,n.moveChildNodes)(r,t),t.appendChild(r),(0,o.applyFormat)(r,l.formatAppliers.link,s.format,l),(0,o.applyFormat)(r,l.formatAppliers.dataset,s.dataset,l),null===(e=l.onNodeCreated)||void 0===e||e.call(l,s,r)})),i&&(0,a.stackFormat)(l,"code",(function(){var e,r=document.createElement("code");(0,n.moveChildNodes)(r,t),t.appendChild(r),(0,o.applyFormat)(r,l.formatAppliers.code,i.format,l),null===(e=l.onNodeCreated)||void 0===e||e.call(l,i,r)}))}},8109:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleTable=void 0;var o=r(7908),n=r(6245),a=r(4451),l=r(2347),i=r(5381);t.handleTable=function(e,t,r,s,d){var c,u,f,m,p,v;if((0,a.isBlockEmpty)(r))return d;var g=r.cachedElement;g?(d=(0,i.reuseCachedElement)(t,g,d),(0,l.moveChildNodes)(g)):(g=e.createElement("table"),r.cachedElement=g,t.insertBefore(g,d),(0,o.applyFormat)(g,s.formatAppliers.block,r.format,s),(0,o.applyFormat)(g,s.formatAppliers.table,r.format,s),(0,o.applyFormat)(g,s.formatAppliers.tableBorder,r.format,s),(0,o.applyFormat)(g,s.formatAppliers.dataset,r.dataset,s)),null===(c=s.onNodeCreated)||void 0===c||c.call(s,r,g);var b=e.createElement("tbody");g.appendChild(b);for(var h=0;h1&&(k.rowSpan=O),M>1&&(k.colSpan=M),(!C.cachedElement||C.format.useBorderBox&&(0,n.hasMetadata)(r))&&(T>0&&(k.style.width=T+"px"),F>0&&(k.style.height=F+"px")),C.cachedElement||(C.cachedElement=k,(0,o.applyFormat)(k,s.formatAppliers.block,C.format,s),(0,o.applyFormat)(k,s.formatAppliers.tableCell,C.format,s),(0,o.applyFormat)(k,s.formatAppliers.tableCellBorder,C.format,s),(0,o.applyFormat)(k,s.formatAppliers.dataset,C.dataset,s)),s.modelHandlers.blockGroupChildren(e,k,C,s),null===(v=s.onNodeCreated)||void 0===v||v.call(s,C,k)}}}}return d}},8906:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleText=void 0;var o=r(8826);t.handleText=function(e,t,r,n){var a=e.createTextNode(r.text),l=e.createElement("span");t.appendChild(l),l.appendChild(a),(0,o.handleSegmentCommon)(e,a,l,r,n)}},2920:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.mergeNode=void 0;var o=r(3233),n=["SPAN","B","EM","I","U","SUB","SUP","STRIKE","S","A","CODE"];function a(e,t){var r=e.attributes,o=t.attributes;if(r.length!=o.length)return!1;for(var n=0;n=0&&a(t,r)){for(;r.firstChild;)t.appendChild(r.firstChild);r.parentNode.removeChild(r)}else t=r}}},6976:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.optimize=void 0;var o=r(3233),n=r(2920),a=r(9486);t.optimize=function e(t){if(!(0,o.isNodeOfType)(t,1)||!t.classList.contains("_Entity")){(0,a.removeUnnecessarySpan)(t),(0,n.mergeNode)(t);for(var r=t.firstChild;r;r=r.nextSibling)e(r)}}},9486:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.removeUnnecessarySpan=void 0;var o=r(3233);t.removeUnnecessarySpan=function(e){for(var t=e.firstChild;t;)if((0,o.isNodeOfType)(t,1)&&"SPAN"==t.tagName&&0==t.attributes.length){var r=t,n=t.nextSibling;for(t=t.nextSibling;r.lastChild;){var a=r.lastChild;e.insertBefore(a,n),n=a}e.removeChild(r)}else t=t.nextSibling}},7908:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.applyFormat=void 0,t.applyFormat=function(e,t,r,o){t.forEach((function(t){null==t||t(r,e,o)}))}},8826:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleSegmentCommon=void 0;var o=r(7908);t.handleSegmentCommon=function(e,t,r,n,a){var l;t.firstChild||(a.regularSelection.current.segment=t),(0,o.applyFormat)(r,a.formatAppliers.styleBasedSegment,n.format,a),a.modelHandlers.segmentDecorator(e,r,n,a),(0,o.applyFormat)(r,a.formatAppliers.elementBasedSegment,n.format,a),null===(l=a.onNodeCreated)||void 0===l||l.call(a,n,t)}},5381:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.removeNode=t.reuseCachedElement=void 0;var o=r(2347),n=r(3233);t.reuseCachedElement=function(e,t,r){var a,l;if(t.parentNode==e){for(;r&&r!=t&&(l=r,!(0,n.isNodeOfType)(l,1)||!(0,o.getEntityFromElement)(l));){var i=r.nextSibling;null===(a=r.parentNode)||void 0===a||a.removeChild(r),r=i}r&&r==t?r=r.nextSibling:e.insertBefore(t,r)}else e.insertBefore(t,r);return r},t.removeNode=function(e){var t,r=e.nextSibling;return null===(t=e.parentNode)||void 0===t||t.removeChild(e),r}},3348:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.stackFormat=void 0;var o=r(7582);t.stackFormat=function(e,t,r){var n="string"==typeof t?e.defaultImplicitFormatMap[t]:t;if(n){var a=e.implicitFormat;try{e.implicitFormat=(0,o.__assign)((0,o.__assign)({},a),n),r()}finally{e.implicitFormat=a}}else r()}},214:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.reducedModelChildProcessor=void 0;var o=r(7582),n=r(2347),a=r(1246);t.reducedModelChildProcessor=function(e,t,r){if(r.selectionRootNode){r.nodeStack||(r.nodeStack=function(e,t){for(var r=[],o=t;o&&(0,n.contains)(e,o);)"TABLE"==(0,n.getTagOfNode)(o)?r.splice(0,r.length,o):r.push(o),o=o.parentNode;return r}(t,r.selectionRootNode));var l=r.nodeStack.pop();if(l){var i=(0,o.__read)((0,a.getRegularSelectionOffsets)(r,t),2),s=i[0],d=i[1],c=s>=0||d>=0?function(e,t){for(var r=0,o=e.firstChild;o&&o!=t;)r++,o=o.nextSibling;return r}(t,l):-1;c>=0&&(0,a.handleRegularSelection)(c,r,e,s,d),(0,a.processChildNode)(e,l,r),c>=0&&(0,a.handleRegularSelection)(c+1,r,e,s,d)}else r.defaultElementProcessors.child(e,t,r)}}},1934:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.tablePreProcessor=void 0;var o=r(2347),n=r(1246);t.tablePreProcessor=function(e,t,r){var a=function(e,t){return(0,n.hasMetadata)(e)||t.isInSelection||function(e,t){var r,n,a,l;return[null===(r=t.imageSelection)||void 0===r?void 0:r.image,null===(n=t.tableSelection)||void 0===n?void 0:n.table,null===(a=t.regularSelection)||void 0===a?void 0:a.startContainer,null===(l=t.regularSelection)||void 0===l?void 0:l.endContainer].some((function(t){return(0,o.contains)(e,t,!0)}))}(e,t)}(t,r)?n.tableProcessor:n.entityProcessor;a(e,t,r)}},9843:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.combineBorderValue=t.extractBorderValues=void 0;var r=["none","hidden","dotted","dashed","solid","double","groove","ridge","inset","outset"],o=/^(thin|medium|thick|[\d\.]+\w*)$/;t.extractBorderValues=function(e){var t={};return(e||"").replace(/, /g,",").split(" ").forEach((function(e){r.indexOf(e)>=0&&!t.style?t.style=e:o.test(e)&&!t.width?t.width=e:e&&!t.color&&(t.color=e)})),t},t.combineBorderValue=function(e){return[e.width||"",e.style||"",e.color||""].join(" ").trim()||"none"}},5866:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.updateImageMetadata=void 0;var o=r(1246),n=r(2347),a=(0,n.createNumberDefinition)(),l=(0,n.createObjectDefinition)({widthPx:a,heightPx:a,leftPercent:a,rightPercent:a,topPercent:a,bottomPercent:a,angleRad:a,src:(0,n.createStringDefinition)(),naturalHeight:a,naturalWidth:a});t.updateImageMetadata=function(e,t){return(0,o.updateMetadata)(e,t,l)}},860:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.updateTableCellMetadata=void 0;var o=r(2347),n=r(1246),a=(0,o.createObjectDefinition)({bgColorOverride:(0,o.createBooleanDefinition)(!0)},!1,!0);t.updateTableCellMetadata=function(e,t){return(0,n.updateMetadata)(e,t,a)}},5165:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.updateTableMetadata=void 0;var o=r(1246),n=r(2347),a=(0,n.createStringDefinition)(!1,void 0,!0),l=(0,n.createBooleanDefinition)(!1),i=(0,n.createObjectDefinition)({topBorderColor:a,bottomBorderColor:a,verticalBorderColor:a,hasHeaderRow:l,headerRowColor:a,hasFirstColumn:l,hasBandedColumns:l,hasBandedRows:l,bgColorEven:a,bgColorOdd:a,tableBorderFormat:(0,n.createNumberDefinition)(!1,void 0,0,8)},!1,!0);t.updateTableMetadata=function(e,t){return(0,o.updateMetadata)(e,t,i)}},6593:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7582),n=r(8974),a=function(e){function t(t,r){return void 0===r&&(r={}),e.call(this,t,r,n.createContentModelEditorCore)||this}return(0,o.__extends)(t,e),t.prototype.createContentModel=function(e){var t=this.getCore();return t.api.createContentModel(t,e)},t.prototype.setContentModel=function(e,t){var r=this.getCore();r.api.setContentModel(r,e,t)},t.prototype.cacheContentModel=function(e){var t=this.getCore();t.reuseModel&&!t.lifecycle.shadowEditFragment&&(t.cachedModel=e||void 0)},t.prototype.getContentModelDefaultFormat=function(){return this.getCore().defaultFormat},t}(r(2347).EditorBase);t.default=a},5427:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createContentModel=void 0;var o=r(7582),n=r(1690),a=r(1246),l=r(1934);t.createContentModel=function(e,t){var r=e.reuseModel?e.cachedModel:null;return r&&e.lifecycle.shadowEditFragment&&(r=(0,n.cloneModel)(r)),r||function(e,t){var r=(0,o.__assign)((0,o.__assign)((0,o.__assign)({selectionRange:e.api.getSelectionRangeEx(e)},e.defaultDomToModelOptions),t||{}),{processorOverride:(0,o.__assign)({table:l.tablePreProcessor},(null==t?void 0:t.processorOverride)||{})});return e.reuseModel||(r.disableCacheElement=!0),(0,a.domToContentModel)(e.contentDiv,e.api.createEditorContext(e),r)}(e,t)}},7832:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createEditorContext=void 0,t.createEditorContext=function(e){return{isDarkMode:e.lifecycle.isDarkMode,defaultFormat:e.defaultFormat,darkColorHandler:e.darkColorHandler,addDelimiterForEntity:e.addDelimiterForEntity}}},7934:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.setContentModel=void 0;var o=r(7582),n=r(1246);t.setContentModel=function(e,t,r){var a=(0,n.contentModelToDom)(e.contentDiv.ownerDocument,e.contentDiv,t,e.api.createEditorContext(e),(0,o.__assign)((0,o.__assign)({},e.defaultModelToDomOptions),r||{}));e.lifecycle.shadowEditFragment||e.api.select(e,a)}},3515:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.switchShadowEdit=void 0;var o=r(2347);t.switchShadowEdit=function(e,t){var r=e;if(t!=!!r.lifecycle.shadowEditFragment)if(t){r.cachedModel||(r.cachedModel=r.api.createContentModel(r));var n=r.api.getSelectionRange(r,!0);r.lifecycle.shadowEditSelectionPath=n&&(0,o.getSelectionPath)(r.contentDiv,n),r.lifecycle.shadowEditFragment=r.contentDiv.ownerDocument.createDocumentFragment()}else r.cachedModel&&r.api.setContentModel(r,r.cachedModel),r.lifecycle.shadowEditFragment=null,r.lifecycle.shadowEditSelectionPath=null}},6093:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.onNodeCreated=void 0;var o=r(7582),n=r(5915),a=r(1690),l=r(1246),i=r(473),s=r(4040),d=r(5098),c=r(2347),u=function(){function e(e){var t=this;this.state=e,this.editor=null,this.disposer=null,this.onPaste=function(e){if(t.editor&&function(e){return!!e.clipboardData}(e)){var r=t.editor,o=e.clipboardData;(null==o?void 0:o.items)&&(e.preventDefault(),(0,c.extractClipboardItems)((0,c.toArray)(o.items),{allowedCustomPasteType:t.state.allowedCustomPasteType}).then((function(e){r.isDisposed()||(function(e){if(c.Browser.isAndroid){var t=e.createContentModel();(0,i.deleteSelection)(t,(0,s.getOnDeleteEntityCallback)(e)),e.setContentModel(t)}}(r),(0,n.default)(r,e))})))}}}return e.prototype.getName=function(){return"ContentModelCopyPaste"},e.prototype.initialize=function(e){var t=this;this.editor=e,this.disposer=this.editor.addDomEventHandler({paste:function(e){return t.onPaste(e)},copy:function(e){return t.onCutCopy(e,!1)},cut:function(e){return t.onCutCopy(e,!0)}})},e.prototype.dispose=function(){this.disposer&&this.disposer(),this.disposer=null,this.editor=null},e.prototype.getState=function(){return this.state},e.prototype.onCutCopy=function(e,r){var n=this;if(this.editor){var u=this.editor.getSelectionRangeEx();if(u&&!u.areAllCollapsed){var f=this.editor.createContentModel({disableCacheElement:!0}),m=(0,a.cloneModel)(f);1===u.type&&(0,d.iterateSelections)([m],(function(e,t){if(null==t?void 0:t.table){var r=null==t?void 0:t.table;return r.rows=r.rows.map((function(e){return(0,o.__assign)((0,o.__assign)({},e),{cells:e.cells.filter((function(e){return e.isSelected}))})})).filter((function(e){return e.cells.length>0})),!0}return!1}));var p=this.getTempDiv(this.editor),v=(0,l.contentModelToDom)(p.ownerDocument,p,m,{isDarkMode:!1,darkColorHandler:this.editor.getDarkColorHandler()},{onNodeCreated:t.onNodeCreated}),g=function(e,t){var r;if(!e)return null;var o=null;if(1===e.type&&e.coordinates){var n=t.querySelector("#"+e.table.id),a=1==(null===(r=n.parentElement)||void 0===r?void 0:r.childElementCount)?n.parentElement:n;o=(0,c.createRange)(a)}else if(2===e.type){var l=t.querySelector("#"+e.image.id);l&&(o=(0,c.createRange)(l))}else o=e.ranges[0];return o}(v,p);g&&(this.editor.triggerPluginEvent(9,{clonedRoot:p,range:g,rawEvent:e,isCut:r}).range&&(0,c.addRangeToSelection)(g),this.editor.runAsync((function(e){var t,o;(o=p).style.backgroundColor="",o.style.color="",o.style.display="none",(0,c.moveChildNodes)(o),e.focus(),v&&(null===(t=n.editor)||void 0===t||t.select(v)),r&&e.addUndoSnapshot((function(){var t;(0,i.deleteSelection)(f,(0,s.getOnDeleteEntityCallback)(e)),null===(t=n.editor)||void 0===t||t.setContentModel(f)}),"Cut")})))}}},e.prototype.getTempDiv=function(e){var t=e.getCustomData("CopyPasteTempDiv",(function(){var t=(0,c.createElement)(3,e.getDocument());return e.getDocument().body.appendChild(t),t}),(function(e){var t;return null===(t=e.parentNode)||void 0===t?void 0:t.removeChild(e)}));return t.style.backgroundColor="white",t.style.color="black",t.childNodes.forEach((function(e){return t.removeChild(e)})),t.style.display="",t.focus(),t},e}();t.default=u,t.onNodeCreated=function(e,t){(0,c.safeInstanceOf)(t,"HTMLTableElement")&&(0,c.wrap)(t,"div")}},2517:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(){}return e.prototype.getName=function(){return"ContentModelTypeInContainer"},e.prototype.initialize=function(){},e.prototype.dispose=function(){},e}();t.default=r},8974:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.promoteToContentModelEditorCore=t.createContentModelEditorCore=void 0;var o=r(7582),n=r(6093),a=r(2909),l=r(4e3),i=r(2517),s=r(5427),d=r(7832),c=r(2347),u=r(7934),f=r(3515);function m(e,t){var r=e;!function(e){e.lifecycle.defaultFormat=e.lifecycle.defaultFormat||{},e.defaultFormat=function(e){var t,r,o,n=null!==(t=e.lifecycle.defaultFormat)&&void 0!==t?t:{};return{fontWeight:n.bold?"bold":void 0,italic:n.italic||void 0,underline:n.underline||void 0,fontFamily:n.fontFamily||void 0,fontSize:n.fontSize||void 0,textColor:(null===(r=n.textColors)||void 0===r?void 0:r.lightModeColor)||n.textColor||void 0,backgroundColor:(null===(o=n.backgroundColors)||void 0===o?void 0:o.lightModeColor)||n.backgroundColor||void 0}}(e)}(r),function(e,t){var r=e.lifecycle.experimentalFeatures;e.defaultDomToModelOptions=t.defaultDomToModelOptions||{},e.defaultModelToDomOptions=t.defaultModelToDomOptions||{},e.reuseModel=(0,c.isFeatureEnabled)(r,"ReusableContentModel"),e.addDelimiterForEntity=(0,c.isFeatureEnabled)(r,"InlineEntityReadOnlyDelimiters")}(r,t),function(e){e.api.createEditorContext=d.createEditorContext,e.api.createContentModel=s.createContentModel,e.api.setContentModel=u.setContentModel,(0,c.isFeatureEnabled)(e.lifecycle.experimentalFeatures,"ReusableContentModel")&&(e.api.switchShadowEdit=f.switchShadowEdit),e.originalApi.createEditorContext=d.createEditorContext,e.originalApi.createContentModel=s.createContentModel,e.originalApi.setContentModel=u.setContentModel}(r)}t.createContentModelEditorCore=function(e,t){var r=(0,o.__assign)((0,o.__assign)({},t),{plugins:(0,o.__spreadArray)((0,o.__spreadArray)([],(0,o.__read)(t.plugins||[]),!1),[new l.default,new a.default],!1),corePluginOverride:(0,o.__assign)({typeInContainer:(0,c.isFeatureEnabled)(t.experimentalFeatures,"EditWithContentModel")?new i.default:void 0,copyPaste:(0,c.isFeatureEnabled)(t.experimentalFeatures,"ContentModelPaste")?new n.default({allowedCustomPasteType:t.allowedCustomPasteType||[]}):void 0},t.corePluginOverride||{})}),s=(0,c.createEditorCore)(e,r);return m(s,r),s},t.promoteToContentModelEditorCore=m},1053:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return!!e.createContentModel}},2909:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7582),n=r(5634),a=r(473),l=r(2511),i=r(4040),s=r(2976),d=r(1246),c=r(2347),u=function(){function e(){this.editor=null,this.triggeredEntityEvents=[],this.editWithContentModel=!1,this.hasDefaultFormat=!1}return e.prototype.getName=function(){return"ContentModelEdit"},e.prototype.initialize=function(e){this.editor=e,this.editWithContentModel=this.editor.isFeatureEnabled("EditWithContentModel");var t=this.editor.getContentModelDefaultFormat();this.hasDefaultFormat=(0,c.getObjectKeys)(t).filter((function(e){return void 0!==t[e]})).length>0},e.prototype.dispose=function(){this.editor=null},e.prototype.onPluginEvent=function(e){if(this.editor)switch(e.eventType){case 15:this.handleEntityOperationEvent(this.editor,e);break;case 0:this.handleKeyDownEvent(this.editor,e.rawEvent);break;case 7:case 6:this.editor.cacheContentModel(null)}},e.prototype.handleEntityOperationEvent=function(e,t){var r;"keydown"==(null===(r=t.rawEvent)||void 0===r?void 0:r.type)&&this.triggeredEntityEvents.push(t)},e.prototype.handleKeyDownEvent=function(e,t){var r=t.which;if(!this.editWithContentModel||t.defaultPrevented)e.cacheContentModel(null);else if(!t.defaultPrevented)switch(r){case 8:case 46:var o=e.getSelectionRangeEx(),a=0==o.type?o.ranges[0]:null;this.shouldDeleteWithContentModel(a,t)?(0,n.default)(e,t,this.triggeredEntityEvents):e.cacheContentModel(null);break;default:((0,c.isCharacterValue)(t)||"Process"==t.key)&&this.hasDefaultFormat&&this.tryApplyDefaultFormat(e),e.cacheContentModel(null)}this.triggeredEntityEvents.length>0&&(this.triggeredEntityEvents=[])},e.prototype.tryApplyDefaultFormat=function(e){for(var t,r,o=this,n=e.getSelectionRangeEx(),s=0==(null==n?void 0:n.type)?n.ranges[0]:null,u=s?c.Position.getStart(s):null,f=null!==(t=null==u?void 0:u.node)&&void 0!==t?t:null;f&&e.contains(f);){if((0,d.isNodeOfType)(f,1)&&(null===(r=f.getAttribute)||void 0===r?void 0:r.call(f,"style")))return;if((0,c.isBlockElement)(f))break;f=f.parentNode}(0,l.formatWithContentModel)(e,"input",(function(t){var r=(0,a.deleteSelection)(t,(0,i.getOnDeleteEntityCallback)(e,void 0,o.triggeredEntityEvents));if(2==r.deleteResult)return(0,d.normalizeContentModel)(t),e.addUndoSnapshot(),!0;if(0==r.deleteResult&&r.insertPoint&&u){var n=r.insertPoint,l=n.paragraph,s=n.path,c=n.marker,f=s[0].blocks,m=f.length,p=f.indexOf(l);if(l.isImplicit&&1==l.segments.length&&l.segments[0]==c&&m>0&&p==m-1){var v=f[p-1];"Paragraph"!=(null==v?void 0:v.blockType)&&o.applyDefaultFormat(e,c.format,u)}else l.segments.every((function(e){return"Text"!=e.segmentType}))&&o.applyDefaultFormat(e,c.format,u);return!1}return!1}))},e.prototype.applyDefaultFormat=function(e,t,r){var n=(0,s.getPendingFormat)(e)||{},a=e.getContentModelDefaultFormat(),l=(0,o.__assign)((0,o.__assign)((0,o.__assign)({},a),n),t);(0,s.setPendingFormat)(e,l,r)},e.prototype.shouldDeleteWithContentModel=function(e,t){return!((null==e?void 0:e.collapsed)&&3==e.startContainer.nodeType&&!(0,c.isModifierKey)(t)&&(this.canDeleteBefore(t,e)||this.canDeleteAfter(t,e)))},e.prototype.canDeleteBefore=function(e,t){return 8==e.which&&(t.startOffset>1||t.startContainer.previousSibling)},e.prototype.canDeleteAfter=function(e,t){var r,o;return 46==e.which&&(t.startOffset<(null!==(o=null===(r=t.startContainer.nodeValue)||void 0===r?void 0:r.length)&&void 0!==o?o:0)-1||t.startContainer.nextSibling)},e}();t.default=u},4e3:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1576),n=r(2976),a=function(){function e(){this.editor=null}return e.prototype.getName=function(){return"ContentModelFormat"},e.prototype.initialize=function(e){this.editor=e},e.prototype.dispose=function(){this.editor=null},e.prototype.onPluginEvent=function(e){if(this.editor)switch(e.eventType){case 3:e.rawEvent.isComposing||this.editor.isInIME()||this.checkAndApplyPendingFormat(e.rawEvent.data);break;case 4:this.checkAndApplyPendingFormat(e.rawEvent.data);break;case 0:e.rawEvent.which>=33&&e.rawEvent.which<=40&&(0,n.clearPendingFormat)(this.editor);break;case 6:case 7:(0,n.canApplyPendingFormat)(this.editor)||(0,n.clearPendingFormat)(this.editor)}},e.prototype.checkAndApplyPendingFormat=function(e){this.editor&&e&&((0,o.default)(this.editor,e),(0,n.clearPendingFormat)(this.editor))},e}();t.default=a},1021:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(9079),n=r(2347),a=r(251),l=r(1152),i=r(1082),s=r(5459),d=r(22),c=r(2389),u=function(){function e(e){void 0===e&&(e="SPAN"),this.unknownTagReplacement=e,this.editor=null}return e.prototype.getName=function(){return"ContentModelPaste"},e.prototype.initialize=function(e){this.editor=e},e.prototype.dispose=function(){this.editor=null},e.prototype.onPluginEvent=function(e){if(this.editor&&10==e.eventType){var t=e;if(t.domToModelOption){switch((0,n.getPasteSource)(e,!1)){case 0:(0,d.processPastedContentFromWordDesktop)(t);break;case 5:(0,c.processPastedContentWacComponents)(t);break;case 2:0!==e.pasteType&&2!==e.pasteType||(0,i.processPastedContentFromExcel)(t,this.editor.getTrustedHTMLHandler());break;case 4:e.sanitizingOption.additionalTagReplacements["google-sheets-html-origin"]="*";break;case 3:(0,s.processPastedContentFromPowerPoint)(t,this.editor.getTrustedHTMLHandler())}(0,o.default)(t.domToModelOption,"link",l.parseLink),(0,a.parseDeprecatedColor)(t.sanitizingOption),e.sanitizingOption.unknownTagReplacement=this.unknownTagReplacement}}},e}();t.default=u},1082:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.excelHandler=t.processPastedContentFromExcel=void 0;var o=r(9079),n=r(2347),a=/<\/\s*td\s*>((?!<\/\s*tr\s*>)[\s\S])*$/i,l=/<\/\s*tr\s*>((?!<\/\s*table\s*>)[\s\S])*$/i,i=/]*>[^<]*/i,s=/]*>[^<]*/i,d="solid 1px #d4d4d4";function c(e,t){if(e.match(a)){var r=t.match(i);e=(r?r[0]:"")+e+""}if(e.match(l)){var o=t.match(s);e=(o?o[0]:"")+e+"
    "}return e}t.processPastedContentFromExcel=function(e,t){var r=e.fragment,a=e.htmlBefore,l=e.clipboardData,i=l.html?c(l.html,a):void 0;if(i&&l.html!=i){var s=(new DOMParser).parseFromString(t(i),"text/html");(0,n.moveChildNodes)(r,null==s?void 0:s.body)}var u=r.firstChild;u&&u.childNodes.length>0&&"DIV"==(0,n.getTagOfNode)(u)&&Array.from(u.childNodes).every((function(e){return"META"==(0,n.getTagOfNode)(e)||"TABLE"==(0,n.getTagOfNode)(e)&&e==u.lastChild}))&&u.lastChild&&e.fragment.replaceChildren(u.lastChild),(0,o.default)(e.domToModelOption,"tableCell",(function(e,t){"none"===t.style.borderStyle&&(e.borderBottom=d,e.borderLeft=d,e.borderRight=d,e.borderTop=d)}))},t.excelHandler=c},5459:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.processPastedContentFromPowerPoint=void 0;var o=r(2347);t.processPastedContentFromPowerPoint=function(e,t){var r=e.fragment,n=e.clipboardData;if(n.html&&!n.text&&n.image){var a=(new DOMParser).parseFromString(t(n.html),"text/html");(0,o.moveChildNodes)(r,null==a?void 0:a.body)}}},2389:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.processPastedContentWacComponents=void 0;var o=r(7582),n=r(9079),a=r(2347),l=r(9263),i="ListContainerWrapper",s="EmptyTextRun",d=["TableInsertRowGapBlank","TableColumnResizeHandle","TableCellTopBorderHandle","TableCellLeftBorderHandle","TableHoverColumnHandle","TableHoverRowHandle","ListMarkerWrappingSpan"],c=(0,o.__spreadArray)((0,o.__spreadArray)(["OutlineElement","NumberListStyle","WACImageContainer","ListContainerWrapper","BulletListStyle","EOP",s],(0,o.__read)(d),!1),["TableCellContent","Paragraph","WACImageContainer","WACImageBorder"],!1),u=["UL","OL","LI"],f=u.join(","),m=function(e,t){var r=t.style.verticalAlign;"super"===r&&(e.superOrSubScriptSequence="super"),"sub"===r&&(e.superOrSubScriptSequence="sub")},p=function(e,t,r){var o,n=(0,a.getTagOfNode)(t);if((0,a.matchesSelector)(t,'ul[class^="BulletListStyle"]>.OutlineElement,ol[class^="NumberListStyle"]>.OutlineElement,span.WACImageContainer,span.WACImageBorder')&&(t.style.removeProperty("display"),t.style.removeProperty("margin")),t.classList.contains(i))r.elementProcessors.child(e,t,r);else if(!(t.classList.contains("EOP")&&(null===(o=t.previousElementSibling)||void 0===o?void 0:o.classList.contains(s))||d.some((function(e){return t.classList.contains(e)})))){if(function(e,t,r){return r.listFormat.levels.length>0&&u.every((function(t){return t!=e}))&&!(0,a.findClosestElementAncestor)(t,void 0,f)}(n,t,r)){var l=r.listFormat;l.levels=[],l.listParent=void 0}r.defaultElementProcessors.element(e,t,r)}},v=function(e,t,r){var o,n,a;null===(n=(o=r.defaultElementProcessors).li)||void 0===n||n.call(o,e,t,r);var l=r.listFormat.listParent;if(l){var i=l.blocks[l.blocks.length-1];if("BlockGroup"==i.blockType&&"ListItem"==i.blockGroupType&&r.listFormat.listParent!==i){var s=i.levels[i.levels.length-1],d=parseInt(null!==(a=t.getAttribute("data-aria-level"))&&void 0!==a?a:"");if(d>0)if(d>i.levels.length)for(;d!=i.levels.length;)i.levels.push(s);else i.levels.splice(d,i.levels.length-1),i.levels[d-1]=s}}},g=function(e,t){"block"===t.style.display&&(e.displayForDummyItem=void 0),e.marginLeft=void 0},b=function(e){e.marginLeft=void 0,e.paddingLeft=void 0};t.processPastedContentWacComponents=function(e){var t;(0,n.default)(e.domToModelOption,"segment",m),(0,n.default)(e.domToModelOption,"listItem",g),(0,n.default)(e.domToModelOption,"listLevel",b),(0,l.setProcessor)(e.domToModelOption,"element",p),(0,l.setProcessor)(e.domToModelOption,"li",v),(0,l.setProcessor)(e.domToModelOption,"ol",h),(0,l.setProcessor)(e.domToModelOption,"ul",h),(t=e.sanitizingOption.additionalAllowedCssClasses).push.apply(t,(0,o.__spreadArray)([],(0,o.__read)(c),!1))};var h=function(e,t,r){var o,n,l,s,d,c=e.blocks[e.blocks.length-1],u=(0,a.findClosestElementAncestor)(t,void 0,"."+i);(null===(o=null==u?void 0:u.previousElementSibling)||void 0===o?void 0:o.classList.contains(i))&&"BlockGroup"===(null==c?void 0:c.blockType)&&"ListItem"==c.blockGroupType&&(r.listFormat={threadItemCounts:[],levels:c.levels,listParent:e}),"OL"===t.tagName.toUpperCase()?null===(l=(n=r.defaultElementProcessors).ol)||void 0===l||l.call(n,e,t,r):null===(d=(s=r.defaultElementProcessors).ul)||void 0===d||d.call(s,e,t,r)}},22:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.wordDesktopElementProcessor=t.processPastedContentFromWordDesktop=void 0;var o=r(9079),n=r(2347),a=r(9526),l=r(9541),i=r(9263),s=/%/;function d(e,t,r,o){var n;s.test(t.style.lineHeight)&&!isNaN(n=parseInt(t.style.lineHeight))&&n<120&&(e.lineHeight=o.lineHeight)}function c(e,t,r,o){""!=t.style.marginLeft&&(e.marginLeft=o.marginLeft),e.marginBottom=void 0}t.processPastedContentFromWordDesktop=function(e){(0,i.setProcessor)(e.domToModelOption,"element",t.wordDesktopElementProcessor),(0,o.default)(e.domToModelOption,"block",d),(0,o.default)(e.domToModelOption,"listLevel",c),(0,o.default)(e.domToModelOption,"listItemElement",u),(0,n.chainSanitizerCallback)(e.sanitizingOption.cssStyleCallbacks,"border",(function(e,t){return"IMG"!=t.tagName||"none"!=e})),(0,n.chainSanitizerCallback)(e.sanitizingOption.elementCallbacks,"O:P",(function(e){return(0,n.moveChildNodes)(e),e.appendChild(e.ownerDocument.createTextNode(" ")),!0}))},t.wordDesktopElementProcessor=function(e,t,r){var o=(0,n.getStyles)(t);(0,l.processWordList)(o,e,t,r)||(0,a.processWordComments)(o,t)||r.defaultElementProcessors.element(e,t,r)};var u=function(e,t){t.style.marginLeft&&(e.marginLeft=void 0),t.style.marginRight&&(e.marginRight=void 0)}},9526:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.processWordComments=void 0;var o=r(2347),n=/#_msocom_/;t.processWordComments=function(e,t){return"comment"==e["mso-special-character"]||(0,o.safeInstanceOf)(t,"HTMLAnchorElement")&&n.test(t.href)||"comment-list"==e["mso-element"]}},9541:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.processWordList=void 0;var o=r(7582),n=r(1246),a=r(2347),l="mso-list",i="ignore";function s(e){return function(t,r,o){var n=o.listFormat,a=n.wordKnownLevels,l=n.wordLevel,i=n.wordList;if("OL"==t.listType&&"number"==typeof l&&i){var s=parseInt(e);null==s||isNaN(s)||(null==a?void 0:a.has(i))||(t.startNumberOverride=s)}}}function d(e,t){var r,o,n="";t=t||5;for(var a=e.firstChild;!n&&a;)c(a)?0==(n=null!==(o=null===(r=a.textContent)||void 0===r?void 0:r.trim())&&void 0!==o?o:"").length&&(n="o"):1==a.nodeType&&t>1&&(n=d(a,t-1)),a=a.nextSibling;return n}function c(e){if(1==e.nodeType){var t=(0,a.getStyles)(e)[l];if(t&&t.length>0&&t.trim().toLowerCase()==i)return!0}return!1}t.processWordList=function(e,t,r,a){var c=a.listFormat;c.wordKnownLevels||(c.wordKnownLevels=new Map);var u=e[l]||"";if(u.toLowerCase()===i)return!0;var f=u.split(" ");if(c.wordLevel=f[1]&&parseInt(f[1].substr(5)),c.wordList=f[0]||"l0",0==c.levels.length&&(c.levels=c.wordKnownLevels.get(c.wordList)||[]),u&&t&&"number"==typeof c.wordLevel){var m=c.wordLevel,p=d(r),v=function(e){return function(e){return["o","·","§","-"].indexOf(e)>=0}(e)?"UL":"OL"}(p),g={listType:v};if((0,n.parseFormat)(r,a.formatParsers.listLevel,g,a),m>c.levels.length)for(;m!=c.levels.length;)c.levels.push(g);else c.levels.splice(m,c.levels.length-1),c.levels[m-1]=g;return c.listParent=t,function(e,t,r,o,a){var l=(0,n.createListItem)(e.levels,t.segmentFormat);(0,n.parseFormat)(r,t.formatParsers.segmentOnBlock,t.segmentFormat,t),(0,n.parseFormat)(r,t.formatParsers.listItemElement,l.format,t),(0,n.parseFormat)(r,[s(a)],l.levels[l.levels.length-1],t),t.elementProcessors.child(l,r,t),(0,n.addBlock)(o,l)}(c,a,r,t,p),c.levels.length>0&&c.wordKnownLevels.get(c.wordList)!=c.levels&&c.wordKnownLevels.set(c.wordList,(0,o.__spreadArray)([],(0,o.__read)(c.levels),!1)),!0}return!1}},9079:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){var o;e.additionalFormatParsers||(e.additionalFormatParsers={}),e.additionalFormatParsers[t]||(e.additionalFormatParsers[t]=[]),null===(o=e.additionalFormatParsers[t])||void 0===o||o.push(r)}},251:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseDeprecatedColor=void 0;var o=r(2347),n=["activeborder","activecaption","appworkspace","background","buttonhighlight","buttonshadow","captiontext","inactiveborder","inactivecaption","inactivecaptiontext","infobackground","infotext","menu","menutext","scrollbar","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedfhadow","window","windowframe","windowtext"];t.parseDeprecatedColor=function(e){["color","background-color"].forEach((function(t){(0,o.chainSanitizerCallback)(e.cssStyleCallbacks,t,(function(e){return n.indexOf(e)<0}))}))}},1152:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseLink=void 0;var o=r(2347),n=["http:","https:","notes:","mailto:","onenote:"],a=/^file:\/\/\/[a-zA-Z\/]/i;t.parseLink=function(e,t){if((0,o.safeInstanceOf)(t,"HTMLAnchorElement")){var r;try{r=new URL(t.href)}catch(e){r=void 0}(r&&-1===n.indexOf(r.protocol)||a.test(t.href))&&(t.removeAttribute("href"),e.href="")}}},9263:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.setProcessor=void 0,t.setProcessor=function(e,t,r){e.processorOverride||(e.processorOverride={}),e.processorOverride[t]=r}},4040:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.shouldDeleteAllSegmentsBefore=t.shouldDeleteWord=t.handleKeyboardEventResult=t.getOnDeleteEntityCallback=void 0;var o=r(1246);t.getOnDeleteEntityCallback=function(e,t,r){return void 0===r&&(r=[]),function(o,n){return o.id&&o.type&&(r.some((function(e){return e.entity.wrapper==o.wrapper}))||e.triggerPluginEvent(15,{entity:{id:o.id,isReadonly:o.isReadonly,type:o.type,wrapper:o.wrapper},operation:n,rawEvent:t})),!!(null==t?void 0:t.defaultPrevented)&&e.contains(o.wrapper)}},t.handleKeyboardEventResult=function(e,t,r,n){switch(n){case 0:return e.cacheContentModel(null),!1;case 3:return r.preventDefault(),!1;case 2:case 1:return r.preventDefault(),(0,o.normalizeContentModel)(t),2==n&&e.addUndoSnapshot(),e.triggerPluginEvent(23,{rawEvent:r}),!0}},t.shouldDeleteWord=function(e,t){return t&&e.altKey&&!e.metaKey||!t&&e.ctrlKey&&!e.altKey},t.shouldDeleteAllSegmentsBefore=function(e){return e.metaKey&&!e.altKey}},3247:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.updateTableMetadata=t.updateTableCellMetadata=t.updateImageMetadata=t.extractBorderValues=t.combineBorderValue=t.promoteToContentModelEditorCore=t.createContentModelEditorCore=t.ContentModelCopyPastePlugin=t.ContentModelTypeInContainerPlugin=t.ContentModelPastePlugin=t.ContentModelEditPlugin=t.ContentModelFormatPlugin=t.isContentModelEditor=t.ContentModelEditor=void 0;var o=r(7582);(0,o.__exportStar)(r(735),t),(0,o.__exportStar)(r(886),t);var n=r(6593);Object.defineProperty(t,"ContentModelEditor",{enumerable:!0,get:function(){return n.default}});var a=r(1053);Object.defineProperty(t,"isContentModelEditor",{enumerable:!0,get:function(){return a.default}});var l=r(4e3);Object.defineProperty(t,"ContentModelFormatPlugin",{enumerable:!0,get:function(){return l.default}});var i=r(2909);Object.defineProperty(t,"ContentModelEditPlugin",{enumerable:!0,get:function(){return i.default}});var s=r(1021);Object.defineProperty(t,"ContentModelPastePlugin",{enumerable:!0,get:function(){return s.default}});var d=r(2517);Object.defineProperty(t,"ContentModelTypeInContainerPlugin",{enumerable:!0,get:function(){return d.default}});var c=r(6093);Object.defineProperty(t,"ContentModelCopyPastePlugin",{enumerable:!0,get:function(){return c.default}});var u=r(8974);Object.defineProperty(t,"createContentModelEditorCore",{enumerable:!0,get:function(){return u.createContentModelEditorCore}}),Object.defineProperty(t,"promoteToContentModelEditorCore",{enumerable:!0,get:function(){return u.promoteToContentModelEditorCore}});var f=r(9843);Object.defineProperty(t,"combineBorderValue",{enumerable:!0,get:function(){return f.combineBorderValue}}),Object.defineProperty(t,"extractBorderValues",{enumerable:!0,get:function(){return f.extractBorderValues}});var m=r(5866);Object.defineProperty(t,"updateImageMetadata",{enumerable:!0,get:function(){return m.updateImageMetadata}});var p=r(860);Object.defineProperty(t,"updateTableCellMetadata",{enumerable:!0,get:function(){return p.updateTableCellMetadata}});var v=r(5165);Object.defineProperty(t,"updateTableMetadata",{enumerable:!0,get:function(){return v.updateTableMetadata}})},5567:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getLeafSiblingBlock=void 0;var o=r(7582),n=r(1246);t.getLeafSiblingBlock=function(e,t,r){for(var a,l=(0,o.__spreadArray)([],(0,o.__read)(e),!1),i=function(){var e=l[0],o=e.blocks.indexOf(t);if(o<0)return"break";var i=e.blocks[o+(r?1:-1)];if(i){for(;"BlockGroup"==i.blockType;){var s=i.blocks[r?0:i.blocks.length-1];if(!s)return{value:{block:i,path:l}};if("BlockGroup"!=s.blockType)return l.unshift(i),{value:{block:s,path:l}};l.unshift(i),i=s}return{value:{block:i,path:l}}}if((0,n.isGeneralSegment)(e)){l.shift();var d=-1,c=e,u=null===(a=l[0])||void 0===a?void 0:a.blocks.find((function(e){return"Paragraph"==e.blockType&&(d=e.segments.indexOf(c))>=0}));if(!u)return"break";var f=u.segments[d+(r?1:-1)];if(f)return{value:{block:u,path:l,siblingSegment:f}};t=u}else{if("Document"==e.blockGroupType||"TableCell"==e.blockGroupType)return"break";l.shift(),t=e}};l.length>0;){var s=i();if("object"==typeof s)return s.value;if("break"===s)break}return null}},9842:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.setModelAlignment=void 0;var o=r(6682),n=r(5544),a={left:{ltr:"start",rtl:"end"},center:{ltr:"center",rtl:"center"},right:{ltr:"end",rtl:"start"}},l={left:{ltr:15,rtl:16},center:{ltr:14,rtl:14},right:{ltr:16,rtl:15}};t.setModelAlignment=function(e,t){var r=(0,n.getOperationalBlocks)(e,["ListItem"],["TableCell"]);return r.forEach((function(e){var r=e.block,n=a[t]["rtl"==r.format.direction?"rtl":"ltr"];"Table"===r.blockType?(0,o.alignTable)(r,l[t]["rtl"==r.format.direction?"rtl":"ltr"]):r&&(r.format.textAlign=n)})),r.length>0}},687:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.setModelIndentation=void 0;var o=r(7582),n=r(5544),a=r(4979),l=r(1246);t.setModelIndentation=function(e,t,r){void 0===r&&(r=40);var i=(0,n.getOperationalBlocks)(e,["ListItem"],["TableCell"]),s="indent"==t;return i.forEach((function(e){var t=e.block;if((0,a.isBlockGroupOfType)(t,"ListItem"))if(s){var n=(0,o.__assign)({},t.levels[t.levels.length-1]);delete n.startNumberOverride,delete n.orderedStyleType,delete n.unorderedStyleType,t.levels.push(n)}else t.levels.pop();else if(t){var i=t.format,d=i.marginLeft,c=i.marginRight,u="rtl"==i.direction,f=(0,l.parseValueWithUnit)(u?c:d),m=(s?Math.ceil:Math.floor)(f/r)*r;m==f&&(m=Math.max(m+r*(s?1:-1),0)),u?i.marginRight=m+"px":i.marginLeft=m+"px"}})),i.length>0}},6162:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.toggleModelBlockQuote=void 0;var o=r(1246),n=r(5544),a=r(4979),l=r(1953);function i(e){return(0,a.isBlockGroupOfType)(e,"FormatContainer")&&"blockquote"==e.tagName}t.toggleModelBlockQuote=function(e,t){var r=(0,n.getOperationalBlocks)(e,["FormatContainer","ListItem"],["TableCell"],!0);if(r.every((function(e){return i(e.block)})))r.forEach((function(e){var t=e.block,r=e.parent;(0,o.unwrapBlock)(r,t)}));else{var a=[],s=function(){return(0,o.createFormatContainer)("blockquote",t)},d=function(e,r){return function(e,t){return i(e)&&(0,o.areSameFormats)(t,e.format)}(e,(null==r?void 0:r.format)||t)};r.forEach((function(e){var t=e.block,r=e.parent;i(t)||(0,l.wrapBlockStep1)(a,r,t,s,d)})),(0,l.wrapBlockStep2)(a,d)}return r.length>0}},512:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.clearModelFormat=void 0;var o=r(7582),n=r(5294),a=r(4158),l=r(2347),i=r(1246),s=r(4829),d=r(5098),c=r(860),u=r(5165);function f(e,t){var r=(0,s.getClosestAncestorBlockGroupIndex)(e,["FormatContainer"],["TableCell"]);if(r>=0&&r=0&&n>=0){var l=(0,i.createFormatContainer)(o.tagName,o.format);o.blocks.splice(a,1),l.blocks=o.blocks.splice(a),e[r+1].blocks.splice(n+1,0,t,l)}}}function m(e){var t=e[(0,s.getClosestAncestorBlockGroupIndex)(e,["ListItem"],["TableCell"])];t&&(t.levels=[])}function p(e,t){if("Divider"==t.blockType){var r=e[0].blocks.indexOf(t);r>=0&&e[0].blocks.splice(r,1)}else"Paragraph"==t.blockType&&(t.format={},delete t.decorator)}t.clearModelFormat=function(e,t,r,i){(0,d.iterateSelections)([e],(function(e,o,n,a){a&&(0,l.arrayPush)(r,a),n?t.push([e,n]):o&&function(e,t){if(e){var r=e.table,o=e.colIndex,n=e.rowIndex,a=e.isWholeTableSelected,l=r.rows[n].cells[o];l.isSelected&&((0,c.updateTableCellMetadata)(l,(function(){return null})),l.isHeader=!1,l.format={useBorderBox:l.format.useBorderBox}),t.find((function(e){return e[0]==r}))||t.push([r,a])}}(o,i)}),{includeListFormatHolder:e.format?"never":"anySegment"});var s=r[0];if(1==t.length&&function(e){var t="Paragraph"==e.blockType?e.segments.filter((function(e){return e.isSelected})):[];return 1==t.length&&"SelectionMarker"==t[0].segmentType}(t[0][1])&&1==t.length)r.splice.apply(r,(0,o.__spreadArray)([0,r.length],(0,o.__read)((0,n.adjustWordSelection)(e,s)),!1)),m(t[0][0]);else if(t.length>1||t.some((function(e){return function(e){return e.isSelected||"Paragraph"==e.blockType&&e.segments.every((function(e){return e.isSelected}))}(e[1])})))for(var v=t.length-1;v>=0;v--){var g=(0,o.__read)(t[v],2),b=g[0],h=g[1];p(b,h),m(b),f(b,h)}!function(e,t){e.forEach((function(e){e.format=(0,o.__assign)({},t||{}),e.link&&delete e.link.format.textColor,delete e.code}))}(r,e.format),function(e){e.forEach((function(e){var t=(0,o.__read)(e,2),r=t[0];t[1]&&(r.format={useBorderBox:r.format.useBorderBox,borderCollapse:r.format.borderCollapse},(0,u.updateTableMetadata)(r,(function(){return null}))),(0,a.applyTableFormat)(r,void 0,!0)}))}(i)}},1690:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.cloneModel=void 0;var o=r(7582);function n(e){switch(e.blockType){case"BlockGroup":switch(e.blockGroupType){case"FormatContainer":return function(e){var t=e.tagName,r=e.cachedElement,o=Object.assign({tagName:t,cachedElement:r},s(e),d(e));return e.zeroFontSize&&(o.zeroFontSize=!0),o}(e);case"General":return p(e);case"ListItem":return g=(m=e).formatHolder,b=m.levels,Object.assign({formatHolder:v(g),levels:b.map((function(e){return Object.assign({},e)}))},s(m),d(m))}break;case"Divider":return r=(t=e).tagName,n=t.isSelected,c=t.cachedElement,Object.assign({isSelected:n,tagName:r,cachedElement:c},s(t));case"Entity":return u(e);case"Paragraph":return function(e){var t=e.cachedElement,r=e.segments,n=e.isImplicit,i=e.decorator,d=e.segmentFormat,c=Object.assign({cachedElement:t,isImplicit:n,segments:r.map(a),segmentFormat:d?(0,o.__assign)({},d):void 0},s(e),l(e));return i&&(c.decorator=Object.assign({tagName:i.tagName},l(i))),c}(e);case"Table":return function(e){var t=e.cachedElement,r=e.widths,o=e.rows;return Object.assign({cachedElement:t,widths:Array.from(r),rows:o.map(f)},s(e),i(e))}(e)}var t,r,n,c,m,g,b}function a(e){switch(e.segmentType){case"Br":return c(e);case"Entity":return u(e);case"General":return d=e,Object.assign(p(d),c(d));case"Image":return n=(o=e).src,a=o.alt,l=o.title,s=o.isSelectedAsImageSelection,Object.assign({src:n,alt:a,title:l,isSelectedAsImageSelection:s},c(o),i(o));case"SelectionMarker":return v(e);case"Text":return r=(t=e).text,Object.assign({text:r},c(t))}var t,r,o,n,a,l,s,d}function l(e){return{format:Object.assign({},e.format)}}function i(e){return{dataset:Object.assign({},e.dataset)}}function s(e){var t=e.blockType;return Object.assign({blockType:t},l(e))}function d(e){return{blockGroupType:e.blockGroupType,blocks:e.blocks.map(n)}}function c(e){var t=e.segmentType,r=e.isSelected,o=e.code,n=e.link,a=Object.assign({segmentType:t,isSelected:r},l(e));return o&&(a.code=l(o)),n&&(a.link=Object.assign(l(n),i(n))),a}function u(e){var t=e.wrapper,r=e.isReadonly,o=e.type,n=e.id;return Object.assign({wrapper:t,isReadonly:r,type:o,id:n},s(e),c(e))}function f(e){var t=e.height,r=e.cells,o=e.cachedElement;return Object.assign({height:t,cachedElement:o,cells:r.map(m)},l(e))}function m(e){var t=e.cachedElement,r=e.isSelected,o=e.spanAbove,n=e.spanLeft,a=e.isHeader;return Object.assign({cachedElement:t,isSelected:r,spanAbove:o,spanLeft:n,isHeader:a},d(e),l(e),i(e))}function p(e){var t=e.element;return Object.assign({element:t},s(e),d(e))}function v(e){return Object.assign({isSelected:e.isSelected},c(e))}t.cloneModel=function(e){var t=d(e);return e.format&&(t.format=Object.assign({},e.format)),t}},4829:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getClosestAncestorBlockGroupIndex=void 0,t.getClosestAncestorBlockGroupIndex=function(e,t,r){void 0===r&&(r=[]);for(var o=0;o=0)return o;if(r.indexOf(n.blockGroupType)>=0)return-1}return-1}},4979:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isBlockGroupOfType=void 0,t.isBlockGroupOfType=function(e,t){return(null==e?void 0:e.blockGroupType)==t}},485:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.mergeModel=void 0;var o=r(7582),n=r(1246),a=r(4158),l=r(473),i=r(4829),s=r(1303),d=r(1246);function c(e,t,r){var n,a=e.paragraph,l=e.marker,i=r?a:m(e,t.format),s=i.segments.indexOf(l);s>=0&&(n=i.segments).splice.apply(n,(0,o.__spreadArray)([s,0],(0,o.__read)(t.segments),!1)),t.decorator&&(i.decorator=(0,o.__assign)({},t.decorator))}function u(e,t,r){var o,l,i=e.tableContext;if(i&&1==r.blocks.length&&r.blocks[0]==t){for(var c=i.table,u=i.colIndex,f=i.rowIndex,m=0;m=c.rows[0].cells.length)for(var b=0;b=c.rows.length)for(c.rows[f+m]||(c.rows[f+m]={cells:[],format:{},height:0}),b=0;b=0&&s.blocks.splice(d,0,t),l&&(null==l||l.levels.forEach((function(e,r){t.levels[r]=(0,o.__assign)({},e)})))}function m(e,t){var r=e.paragraph,n=e.marker,a=e.path,l=r.segments.indexOf(n),s=a[0].blocks.indexOf(r),c=(0,d.createParagraph)(!1,(0,o.__assign)((0,o.__assign)({},r.format),t),r.segmentFormat);l>=0&&(c.segments=r.segments.splice(l)),s>=0&&a[0].blocks.splice(s+1,0,c);var u=(0,i.getClosestAncestorBlockGroupIndex)(a,["ListItem"],["FormatContainer","TableCell"]),f=a[u];if(f){var m=u>=0?a[u+1]:null,p=m?m.blocks.indexOf(f):-1;if(p>=0&&m){var v=(0,d.createListItem)(f.levels,f.formatHolder.format);s>=0&&(v.blocks=f.blocks.splice(s+1)),p>=0&&m.blocks.splice(p+1,0,v),a[u]=v}}return e.paragraph=c,c}function p(e,t){var r=e.path,o=m(e,t.format),n=r[0].blocks.indexOf(o);n>=0&&r[0].blocks.splice(n,0,t)}function v(e,t,r){e.blocks.forEach((function(e){var n;switch(e.blockType){case"BlockGroup":"ListItem"==e.blockGroupType&&(e.formatHolder.format=g(r,t,e.formatHolder.format)),v(e,t,r);break;case"Table":e.rows.forEach((function(e){return e.cells.forEach((function(e){v(e,t,r)}))}));break;case"Paragraph":var a=(null===(n=e.decorator)||void 0===n?void 0:n.format)||{};e.segments.forEach((function(e){"General"==e.segmentType&&v(e,t,r),e.format=g(r,t,(0,o.__assign)((0,o.__assign)({},a),e.format))})),"keepSourceEmphasisFormat"===r&&delete e.decorator}}))}function g(e,t,r){return"mergeAll"==e?(0,o.__assign)((0,o.__assign)({},t),r):(0,o.__assign)((0,o.__assign)({},t),(a={},l=(n=r).fontWeight,i=n.italic,s=n.underline,l&&"normal"!=l&&(a.fontWeight=l),i&&(a.italic=i),s&&(a.underline=s),a));var n,a,l,i,s}t.mergeModel=function(e,t,r,n){var a,i=null!==(a=null==n?void 0:n.insertPosition)&&void 0!==a?a:(0,l.deleteSelection)(e,r).insertPoint;if(i){(null==n?void 0:n.mergeFormat)&&"none"!=n.mergeFormat&&v(t,(0,o.__assign)((0,o.__assign)({},e.format||{}),i.marker.format),null==n?void 0:n.mergeFormat);for(var s=0;s{Object.defineProperty(t,"__esModule",{value:!0}),t.retrieveModelFormatState=void 0;var o=r(9843),n=r(4829),a=r(5539),l=r(5098),i=r(5165);function s(e,t,r,o){o?void 0!==r&&(e[t]=r):r!==e[t]&&delete e[t]}t.retrieveModelFormatState=function(e,t,r){var d,c,u=!0,f=!0,m=!0;(0,l.iterateSelections)([e],(function(l,p,v,g){if(function(e,t,r){var o,a,l=(0,n.getClosestAncestorBlockGroupIndex)(t,["ListItem"],[]),i=(0,n.getClosestAncestorBlockGroupIndex)(t,["FormatContainer"],[]);if(l>=0){var d=t[l],c=null===(o=null==d?void 0:d.levels[d.levels.length-1])||void 0===o?void 0:o.listType;s(e,"isBullet","UL"==c,r),s(e,"isNumbering","OL"==c,r)}s(e,"isBlockQuote",i>=0&&"blockquote"==(null===(a=t[i])||void 0===a?void 0:a.tagName),r)}(r,l,u),v&&(c?r.isMultilineSelection=!0:c=v),"Paragraph"==(null==v?void 0:v.blockType)&&(function(e,t,r){var o,n=parseInt(((null===(o=t.decorator)||void 0===o?void 0:o.tagName)||"").substring(1)),a=n>=1&&n<=6?n:void 0;s(e,"marginBottom",t.format.marginBottom,r),s(e,"marginTop",t.format.marginTop,r),s(e,"headerLevel",a,r),s(e,"textAlign",t.format.textAlign,r),s(e,"direction",t.format.direction,r)}(r,v,u),null==g||g.forEach((function(n){var l,i,d,c,p,b,h,y,_;(m||"SelectionMarker"!=n.segmentType)&&(function(e,t,r){var o,n,l=null===(n=null===(o=r.superOrSubScriptSequence)||void 0===o?void 0:o.split(" "))||void 0===n?void 0:n.pop();s(e,"isBold",(0,a.isBold)(r.fontWeight),t),s(e,"isItalic",r.italic,t),s(e,"isUnderline",r.underline,t),s(e,"isStrikeThrough",r.strikethrough,t),s(e,"isSuperscript","super"==l,t),s(e,"isSubscript","sub"==l,t),s(e,"fontName",r.fontFamily,t),s(e,"fontSize",r.fontSize,t),s(e,"backgroundColor",r.backgroundColor,t),s(e,"textColor",r.textColor,t),s(e,"lineHeight",r.lineHeight,t)}(r,u,Object.assign({},e.format,v.format,null===(l=v.decorator)||void 0===l?void 0:l.format,n.format,null===(i=n.code)||void 0===i?void 0:i.format,null===(d=n.link)||void 0===d?void 0:d.format,t)),s(r,"isCodeInline",!!(null==n?void 0:n.code),u)),m=!1,r.canUnlink=r.canUnlink||!!n.link,r.canAddImageAltText=r.canAddImageAltText||g.some((function(e){return"Image"==e.segmentType})),u=!1,"Image"===n.segmentType&&(f?(c=r,p=n.format,"borderTop",h=(b=(0,o.extractBorderValues)(p.borderTop)).color,y=b.width,_=b.style,c.imageFormat={borderColor:h,borderWidth:y,borderStyle:_,boxShadow:p.boxShadow,borderRadius:p.borderRadius},f=!1):r.imageFormat=void 0)})),u=!1),p)if(d){var b=d.table,h=d.colIndex,y=d.rowIndex;p.table!=b||p.colIndex==h&&p.rowIndex==y||(r.canMergeTableCell=!0,r.isMultilineSelection=!0)}else!function(e,t){var r=(0,i.updateTableMetadata)(e.table);t.isInTable=!0,t.tableHasHeader=e.table.rows.some((function(e){return e.cells.some((function(e){return e.isHeader}))})),r&&(t.tableFormat=r)}(p,r),d=p}),{includeListFormatHolder:"never"})}},1953:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.wrapBlockStep2=t.wrapBlockStep1=void 0;var o=r(1246),n=r(2347);t.wrapBlockStep1=function(e,t,r,n,a){var l,i=null!==(l=null==t?void 0:t.blocks.indexOf(r))&&void 0!==l?l:-1;if(t&&i>=0){t.blocks.splice(i,1);var s=t.blocks[i-1],d=a(s)?s:function(e,t,r){var o=r();return e.blocks.splice(t,0,o),o}(t,i,n);(0,o.setParagraphNotImplicit)(r),(0,o.addBlock)(d,r),e.unshift({parent:t,wrapper:d})}},t.wrapBlockStep2=function(e,t){e.forEach((function(e){var r=e.parent,a=e.wrapper,l=r.blocks.indexOf(a),i=r.blocks[l+1];l>=0&&t(i,a)&&(a.blocks.forEach(o.setParagraphNotImplicit),(0,n.arrayPush)(a.blocks,i.blocks),r.blocks.splice(l+1,1))}))}},473:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.deleteSelection=void 0;var o=r(7582),n=r(2650);t.deleteSelection=function(e,t,r){void 0===r&&(r=[]);var a=(0,n.deleteExpandedSelection)(e,t);return r.forEach((function(e){e&&function(e){return!!e.insertPoint}(a)&&0==a.deleteResult&&e(a,t)})),function(e){var t,r=e.insertPoint,n=e.deleteResult,a=e.lastParagraph,l=e.lastTableContext;r&&0!=n&&3!=n&&a&&a!=r.paragraph&&l==r.tableContext&&((t=r.paragraph.segments).push.apply(t,(0,o.__spreadArray)([],(0,o.__read)(a.segments),!1)),a.segments=[])}(a),a}},1685:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.deleteAllSegmentBefore=void 0;var o=r(7483);t.deleteAllSegmentBefore=function(e,t){for(var r=e.insertPoint,n=r.paragraph,a=r.marker,l=n.segments.indexOf(a)-1;l>=0;l--){var i=n.segments[l];i.isSelected=!0,(0,o.deleteSegment)(n,i,t)&&(e.deleteResult=2)}}},8689:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.backwardDeleteCollapsedSelection=t.forwardDeleteCollapsedSelection=void 0;var o=r(5567),n=r(1647),a=r(5911),l=r(7483);function i(e){return function(t,r){var i,s="forward"==e,d=t.insertPoint,c=d.paragraph,u=d.marker,f=d.path,m=d.tableContext,p=c.segments;!function(e){var t,r;if("Br"==(null===(t=e[e.length-1])||void 0===t?void 0:t.segmentType)){var o=e.filter((function(e){return"SelectionMarker"!=e.segmentType}));"Br"!=(null===(r=o[o.length-2])||void 0===r?void 0:r.segmentType)&&e.pop()}}(p);var v,g=p.indexOf(u)+(s?1:-1),b=p[g];if(b)(0,l.deleteSegment)(c,b,r,e)&&(t.deleteResult=1);else if(v=(0,o.getLeafSiblingBlock)(f,c,s)){var h=v.block,y=v.path,_=v.siblingSegment;"Paragraph"==h.blockType?(_?(0,l.deleteSegment)(h,_,r,e)&&(t.deleteResult=2):(s?t.lastParagraph=h:("Br"==(null===(i=h.segments[h.segments.length-1])||void 0===i?void 0:i.segmentType)&&h.segments.pop(),t.insertPoint=(0,n.createInsertPoint)(u,h,y,m),t.lastParagraph=c,delete h.cachedElement),t.deleteResult=2),t.lastTableContext=m):(0,a.deleteBlock)(y[0].blocks,h,r,void 0,e)&&(t.deleteResult=2)}else t.deleteResult=3}}t.forwardDeleteCollapsedSelection=i("forward"),t.backwardDeleteCollapsedSelection=i("backward")},3731:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.backwardDeleteWordSelection=t.forwardDeleteWordSelection=void 0;var o,n=r(7582),a=r(1246);function l(e){return function(t){for(var r=t.insertPoint,o=r.marker,l=r.paragraph,i=l.segments.indexOf(o),s="forward"==e,d=function(e,t,r,o){var l,i,s,d,c,u,f,m,p,v;return(0,n.__generator)(this,(function(n){switch(n.label){case 0:l=r?1:-1,i=e.segments,s=(0,a.isWhiteSpacePreserved)(e),d=t+l,n.label=1;case 1:if(!(d>=0&&d=0&&u0&&(d-=l),[3,6];c.text=v,l>0&&(u-=l)}n.label=5;case 5:return u+=l,[3,3];case 6:return[3,11];case 7:return[4,{punctuation:!0,space:!1,text:!1}];case 8:return n.sent()&&(i.splice(d,1),l>0&&(d-=l),o.deleteResult=2),[3,11];case 9:return[3,11];case 10:return[2,null];case 11:return d+=l,[3,1];case 12:return[2,null]}}))}(l,i,s,t),c=d.next(),u=0;5!=u&&!c.done;){var f=c.value,m=f.punctuation,p=f.space,v=f.text;switch(u){case 0:u=p?4:m?1:2,c=d.next(!0);break;case 1:s&&p?(u=3,c=d.next(!0)):m?c=d.next(!0):u=5;break;case 2:s&&p?(u=3,c=d.next(!0)):v?c=d.next(!0):u=5;break;case 3:m||!p?u=5:c=d.next(!0);break;case 4:p?c=d.next(!0):m?(u=s?3:1,c=d.next(!0)):u=s?5:2}}}}!function(e){e[e.Start=0]="Start",e[e.Punctuation=1]="Punctuation",e[e.Text=2]="Text",e[e.NonText=3]="NonText",e[e.Space=4]="Space",e[e.End=5]="End"}(o||(o={})),t.forwardDeleteWordSelection=l("forward"),t.backwardDeleteWordSelection=l("backward")},1647:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createInsertPoint=void 0,t.createInsertPoint=function(e,t,r,o){return{marker:e,paragraph:t,path:r,tableContext:o}}},5911:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.deleteBlock=void 0,t.deleteBlock=function(e,t,r,o,n){var a=e.indexOf(t);switch(t.blockType){case"Table":case"Divider":return o?e.splice(a,1,o):e.splice(a,1),!0;case"Entity":var l=t.isSelected?6:"forward"==n?4:"backward"==n?5:void 0;return void 0===l||r(t,l)||(o?e.splice(a,1,o):e.splice(a,1)),!0;case"BlockGroup":switch(t.blockGroupType){case"General":return!!o&&(e.splice(a,1,o),!0);case"ListItem":case"FormatContainer":return e.splice(a,1),!0}}return!1}},2650:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.deleteExpandedSelection=void 0;var o=r(7582),n=r(1647),a=r(5911),l=r(7483),i=r(5098),s=r(1246),d={contentUnderSelectedTableCell:"ignoreForTableOrCell",contentUnderSelectedGeneralElement:"generalElementOnly",includeListFormatHolder:"never"};t.deleteExpandedSelection=function(e,t){var r={deleteResult:0,insertPoint:null};return(0,i.iterateSelections)([e],(function(i,d,c,u){var f=(0,s.createParagraph)(!0,void 0,e.format),m=e.format,p=0;if(u)u[0]&&"Paragraph"==(null==c?void 0:c.blockType)&&(p=(f=c).segments.indexOf(u[0]),m=u[0].format,r.lastParagraph=f,r.lastTableContext=d,u.forEach((function(e,o){0!=o||r.insertPoint||"SelectionMarker"!=e.segmentType?(0,l.deleteSegment)(c,e,t)&&(r.deleteResult=2):r.insertPoint=(0,n.createInsertPoint)(e,c,i,d)})),2==r.deleteResult&&(0,s.setParagraphNotImplicit)(c));else if(c){var v=i[0].blocks;(0,a.deleteBlock)(v,c,t,f)&&(r.deleteResult=2)}else if(d){var g=d.table,b=d.colIndex,h=d.rowIndex,y=g.rows[h],_=y.cells[b];i=(0,o.__spreadArray)([_],(0,o.__read)(i),!1),f.segments.push((0,s.createBr)(e.format)),_.blocks=[f],delete _.cachedElement,delete y.cachedElement,r.deleteResult=2}if(!r.insertPoint){var P=(0,s.createSelectionMarker)(m);(0,s.setParagraphNotImplicit)(f),f.segments.splice(p,0,P),r.insertPoint=(0,n.createInsertPoint)(P,f,i,d)}}),d),r}},7483:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.deleteSegment=void 0;var o=r(4486),n=r(1246);t.deleteSegment=function(e,t,r,a){var l=e.segments,i=l.indexOf(t),s=(0,n.isWhiteSpacePreserved)(e),d="forward"==a,c="backward"==a;switch(s||function(e,t){for(var r,o=t-1;"SelectionMarker"==(null===(r=e[o])||void 0===r?void 0:r.segmentType);)o--;var a=e[o];a&&(0,n.normalizeSingleSegment)(a)}(l,i),t.segmentType){case"Br":case"Image":case"SelectionMarker":return l.splice(i,1),!0;case"Entity":var u=t.isSelected?6:d?4:c?5:void 0;return void 0===u||r(t,u)||l.splice(i,1),!0;case"Text":var f=t.text;return 0==f.length||t.isSelected?l.splice(i,1):a&&(f=(0,o.deleteSingleChar)(f,d),s||(f=(0,n.normalizeText)(f,d)),""==f?l.splice(i,1):t.text=f),!0;case"General":return!!t.isSelected&&(l.splice(i,1),!0)}}},4486:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.deleteSingleChar=void 0;var o=r(7582);t.deleteSingleChar=function(e,t){for(var r=(0,o.__spreadArray)([],(0,o.__read)(e),!1),n=0,a=t?0:r.length-1,l="notDeleted";a>=0&&a{Object.defineProperty(t,"__esModule",{value:!0}),t.canApplyPendingFormat=t.clearPendingFormat=t.setPendingFormat=t.getPendingFormat=void 0,t.getPendingFormat=function(e){return o(e).format},t.setPendingFormat=function(e,t,r){var n=o(e);n.format=t,n.position=r},t.clearPendingFormat=function(e){var t=o(e);t.format=null,t.position=null},t.canApplyPendingFormat=function(e){var t=o(e),r=!1;if(t.format&&t.position){var n=e.getFocusedPosition();(null==n?void 0:n.equalTo(t.position))&&(r=!0)}return r};var r="__ContentModelPendingFormat";function o(e){return e.getCustomData(r,(function(){return{format:null,position:null}}))}},1354:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(9843),n=r(1246);t.default=function(e,t,r){if(t){var a=e.format,l=t.width,i=t.style,s=t.color,d=(0,o.extractBorderValues)(a.borderTop),c=d.color,u=d.width,f=d.style,m="";m=l?(0,n.parseValueWithUnit)(l)+"px":u||"1px",i?m=m+" "+i:f?m=m+" "+f:m+=" solid",s?m=m+" "+s:c&&(m=m+" "+c),e.format.borderLeft=m,e.format.borderTop=m,e.format.borderBottom=m,e.format.borderRight=m}else delete e.format.borderLeft,delete e.format.borderTop,delete e.format.borderBottom,delete e.format.borderRight;r&&(e.format.borderRadius=r)}},2874:(e,t)=>{function r(e,t){e.blocks.forEach((function(e){switch(e.blockType){case"BlockGroup":"ListItem"==e.blockGroupType?t.push(e):(o(t),r(e,t),o(t));break;case"Paragraph":o(t),e.segments.forEach((function(e){"General"==e.segmentType&&r(e,t)})),o(t);break;case"Table":o(t),e.rows.forEach((function(e){return e.cells.forEach((function(e){r(e,t)}))})),o(t)}}))}function o(e){var t=e[e.length-1];t&&null===t||e.push(null)}function n(e,t,r){var o=e[t].levels,n=e[r].levels;return o.length<=n.length&&o.every((function(e,t){return e.listType==n[t].listType}))}function a(e,t){return e.levels.slice(0,t).some((function(e){return void 0!==e.startNumberOverride}))}Object.defineProperty(t,"__esModule",{value:!0}),t.findListItemsInSameThread=void 0,t.findListItemsInSameThread=function(e,t){var o=[];return r(e,o),function(e,t){var r,o=[],l=e.indexOf(t),i=t.levels.length,s="OL"==(null===(r=t.levels[i-1])||void 0===r?void 0:r.listType);if(l>=0){for(var d=l;d>=0;d--){if(!(u=e[d])){if(s)continue;break}var c=a(u,i);if(n(e,l,d)){if(o.unshift(u),s&&c)break}else if(!s||c)break}for(d=l+1;d{Object.defineProperty(t,"__esModule",{value:!0}),t.setListType=void 0;var o=r(5544),n=r(4979),a=r(1246);function l(e,t){return 1==e.length||"Paragraph"==t.blockType&&t.segments.length>0&&t.segments.some((function(e){return"Br"!=e.segmentType&&"SelectionMarker"!=e.segmentType}))}t.setListType=function(e,t){var r=(0,o.getOperationalBlocks)(e,["ListItem"],[]),i=r.every((function(e){var o,a=e.block;return(0,n.isBlockGroupOfType)(a,"ListItem")&&(null===(o=a.levels[a.levels.length-1])||void 0===o?void 0:o.listType)==t||!l(r,a)})),s=[],d=!1;return r.forEach((function(e,o){var c,u,f=e.block,m=e.parent;if((0,n.isBlockGroupOfType)(f,"ListItem")){var p=f.levels.pop();!i&&p?(p.listType=t,f.levels.push(p)):1==f.blocks.length&&(0,a.setParagraphNotImplicit)(f.blocks[0])}else{var v=m.blocks.indexOf(f);if(v>=0)if(l(r,f)){var g=m.blocks[v-1],b="Paragraph"==f.blockType&&(null===(c=f.segments[0])||void 0===c?void 0:c.format)||{},h=(0,a.createListItem)([{listType:t,startNumberOverride:o>0||"BlockGroup"==(null==g?void 0:g.blockType)&&"ListItem"==g.blockGroupType&&"OL"==(null===(u=g.levels[0])||void 0===u?void 0:u.listType)?void 0:1,direction:f.format.direction,textAlign:f.format.textAlign,marginTop:d?"0":void 0}],{fontFamily:b.fontFamily,fontSize:b.fontSize,textColor:b.textColor});"Paragraph"==f.blockType&&(f.isImplicit=!0),h.blocks.push(f),m.blocks.splice(v,1,h),s.push(h)}else d=!0,s.forEach((function(e){return e.levels[0].marginBottom="0"})),s=[]}})),(0,a.normalizeContentModel)(e),r.length>0}},5113:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.adjustSegmentSelection=void 0;var o=r(5544),n=r(5736);t.adjustSegmentSelection=function(e,t,r){var a,l,i=(0,o.getSelectedParagraphs)(e),s=!1;return i.forEach((function(e){var o=a?0:e.segments.findIndex((function(e){return t(e)})),n=e.segments;if(!a){a=n[o];for(var i=o;i>0;i--){if(!r(n[i-1],a)){s=s||!!n[i-1].isSelected;break}a=n[i-1],s=s||!n[i-1].isSelected}}if(a)for(i=o;i{Object.defineProperty(t,"__esModule",{value:!0}),t.adjustWordSelection=void 0;var o=r(7582),n=r(1246),a=r(5098);function l(e,t){var r=e.text,o=-1;if(t)for(var a=0;a=0;a--)if(l=r[a],(0,n.isPunctuation)(l)||(0,n.isSpace)(l)){o=a+1;break}return o}function i(e,t,r,a){var l=t.text,i=(0,n.createText)(l.substring(0,a),e[r].format);t.code&&(i.code={format:(0,o.__assign)({},t.code.format)}),t.link&&(i.link={format:(0,o.__assign)({},t.link.format),dataset:(0,o.__assign)({},t.link.dataset)}),t.text=l.substring(a,l.length),e.splice(r,0,i)}t.adjustWordSelection=function(e,t){var r;if((0,a.iterateSelections)([e],(function(e,o,n,a){return"Paragraph"==(null==n?void 0:n.blockType)&&1==(null==a?void 0:a.length)&&a[0]==t&&(r=n),!0})),r){for(var o=[],n=r.segments.indexOf(t),s=n-1;s>=0&&"Text"==(d=r.segments[s]).segmentType;s--){if((c=l(d,!1))>-1){if(c==d.text.length)break;i(r.segments,d,s,c),o.push(r.segments[s+1]);break}o.push(r.segments[s])}if(n=r.segments.indexOf(t),o.push(t),o.length<=1)return o;for(s=n+1;s-1){if(0==c)break;i(r.segments,d,s,c),o.push(r.segments[s]);break}o.push(r.segments[s])}return o[o.length-1]==t?[t]:o}return[t]}},981:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.collapseTableSelection=void 0;var o=r(1246);t.collapseTableSelection=function(e,t){var r,n=t.firstCol,a=null===(r=e[t.firstRow])||void 0===r?void 0:r.cells[n];a&&(0,o.addSegment)(a,(0,o.createSelectionMarker)())}},5544:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getFirstSelectedListItem=t.getFirstSelectedTable=t.getOperationalBlocks=t.getSelectedParagraphs=t.getSelectedSegments=t.getSelectedSegmentsAndParagraphs=void 0;var o=r(4979),n=r(5098),a=r(4829);function l(e,t){var r=s(e,{includeListFormatHolder:t?"allSegments":"never"}),o=[];return r.forEach((function(e){var r=e.segments,n=e.block;r&&(t&&!n||"Paragraph"==(null==n?void 0:n.blockType))&&r.forEach((function(e){"Entity"==e.segmentType&&e.isReadonly||o.push([e,"Paragraph"==(null==n?void 0:n.blockType)?n:null])}))})),o}function i(e,t,r,o){var n=[],l=o?t.map((function(e){return[e]})):[t],i=s(e,{includeListFormatHolder:"never",contentUnderSelectedTableCell:"ignoreForTable"});return d(i),i.forEach((function(e){for(var t=e.path,o=e.block,i=function(e){var i=(0,a.getClosestAncestorBlockGroupIndex)(t,l[e],r);return i>=0?(n.filter((function(e){return e.block==t[i]})).length<=0&&n.push({parent:t[i+1],block:t[i]}),"break"):e==l.length-1&&o?(n.push({parent:t[0],block:o}),"break"):void 0},s=0;s1&&c(e,!1)&&e.pop(),e.length>1&&c(e,!0)&&e.shift()}function c(e,t){var r,o=e[t?0:e.length-1];if("Paragraph"==(null===(r=o.block)||void 0===r?void 0:r.blockType)&&o.segments&&o.segments.length>0){var n=o.block.segments,a=o.segments[0];return 1==o.segments.length&&"SelectionMarker"==a.segmentType&&a==n[t?n.length-1:0]}return!1}t.getSelectedSegmentsAndParagraphs=l,t.getSelectedSegments=function(e,t){return l(e,t).map((function(e){return e[0]}))},t.getSelectedParagraphs=function(e){var t=s(e,{includeListFormatHolder:"never"}),r=[];return d(t),t.forEach((function(e){var t=e.block;"Paragraph"==(null==t?void 0:t.blockType)&&r.push(t)})),r},t.getOperationalBlocks=i,t.getFirstSelectedTable=function(e){var t,r=s(e,{includeListFormatHolder:"never"});return d(r),r.forEach((function(e){var r=e.block,o=e.tableContext;t||(t="Table"==(null==r?void 0:r.blockType)?r:null==o?void 0:o.table)})),t},t.getFirstSelectedListItem=function(e){var t;return i(e,["ListItem"],["TableCell"]).forEach((function(e){!t&&(0,o.isBlockGroupOfType)(e.block,"ListItem")&&(t=e.block)})),t}},5098:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.iterateSelections=void 0;var o=r(7582);function n(e,t,r,a,l){for(var i=e[0],s=(null==r?void 0:r.includeListFormatHolder)||"allSegments",d=(null==r?void 0:r.contentUnderSelectedTableCell)||"include",c=(null==r?void 0:r.contentUnderSelectedGeneralElement)||"contentOnly",u=!1,f=!1,m=0;m0&&t(e,a,p,O))return!0;break;case"Divider":case"Entity":if((l||p.isSelected)&&t(e,a,p))return!0}}return!("never"==s||"ListItem"!=i.blockGroupType||!u||f&&"anySegment"!=s||!t(e,a,void 0,[i.formatHolder]))}t.iterateSelections=function(e,t,r,o,a){n(e,(function(e,r,o,n){var a;return(null===(a=o)||void 0===a?void 0:a.cachedElement)&&delete o.cachedElement,t(e,r,o,n)}),r,o,a)}},5736:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.setSelection=void 0;var o=r(1246);function n(e,t,r,s){return i(t,e,r,s,(function(t){return(0,o.isGeneralSegment)(e)&&l(e,t),e.blocks.forEach((function(e){t=function(e,t,r,o){switch(e.blockType){case"BlockGroup":return n(e,t,r,o);case"Table":return function(e,t,r,o){var i=a(e,r),s=o?a(e,o):i;if(!t&&i&&s)for(var d=0;d=i.y&&d<=s.y&&c>=i.x&&c<=s.x;l(e.rows[d].cells[c],u)}else e.rows.forEach((function(e){return e.cells.forEach((function(e){t=n(e,t,r,o)}))}));return t}(e,t,r,o);case"Divider":case"Entity":return i(t,e,r,o,(function(t){return t?e.isSelected=!0:delete e.isSelected,t}));case"Paragraph":var s=[];for(e.segments.forEach((function(e,a){t=i(t,e,r,o,(function(t){return function(e,t,r,o,a,i){switch(e.segmentType){case"SelectionMarker":return(!t||e!=o&&e!=a)&&r.push(i),t;case"General":return l(e,t),e!=o&&e!=a?n(e,t,o,a):t;case"Image":return l(e,t),e.isSelectedAsImageSelection=o==e&&(!a||a==e),t;default:return l(e,t),t}}(e,t,s,r,o,a)}))}));s.length>0;){var d=s.pop();d>=0&&e.segments.splice(d,1)}return t;default:return t}}(e,t,r,s)})),t}))}function a(e,t){var r=-1,o=-1;if(t)for(var n=0;o<0&&n=0&&o>=0?{x:r,y:o}:void 0}function l(e,t){return t?e.isSelected=!0:delete e.isSelected,t}function i(e,t,r,o,n){return(e=n(e=e||t==r))&&!!o&&t!=o}t.setSelection=function(e,t,r){n(e,!1,t||null,r||null)}},6682:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.alignTable=void 0,t.alignTable=function(e,t){e.format.marginLeft=15==t?"":"auto",e.format.marginRight=16==t?"":"auto",delete e.cachedElement}},7691:(e,t,r)=>{var o,n;Object.defineProperty(t,"__esModule",{value:!0}),t.alignTableCell=void 0;var a=r(5226),l=((o={})[17]="start",o[18]="center",o[19]="end",o),i=((n={})[20]="top",n[21]="middle",n[22]="bottom",n);t.alignTableCell=function(e,t){var r,o=(0,a.getSelectedCells)(e);if(o)for(var n=l[t],s=i[t],d=o.firstRow;d<=o.lastRow;d++)for(var c=o.firstCol;c<=o.lastCol;c++){var u=null===(r=e.rows[d])||void 0===r?void 0:r.cells[c],f=null==u?void 0:u.format;f&&(delete u.cachedElement,f.textAlign=n||f.textAlign,f.verticalAlign=s||f.verticalAlign)}}},4158:(e,t,r)=>{var o;Object.defineProperty(t,"__esModule",{value:!0}),t.applyTableFormat=void 0;var n=r(7582),a=r(1246),l=r(9843),i=r(3684),s=r(860),d=r(5165),c={topBorderColor:"#ABABAB",bottomBorderColor:"#ABABAB",verticalBorderColor:"#ABABAB",hasHeaderRow:!1,hasFirstColumn:!1,hasBandedRows:!1,hasBandedColumns:!1,bgColorEven:null,bgColorOdd:"#ABABAB20",headerRowColor:"#ABABAB",tableBorderFormat:0};t.applyTableFormat=function(e,t,r){var o=e.rows;(0,d.updateTableMetadata)(e,(function(d){var p=(0,n.__assign)((0,n.__assign)((0,n.__assign)({},c),d),t||{}),v=function(e,t){var r=[];return e.forEach((function(e){var o=[];r.push(o),e.cells.forEach((function(e){(0,s.updateTableCellMetadata)(e,(function(e){return e&&t?(o.push(!1),delete e.bgColorOverride):o.push(!!(null==e?void 0:e.bgColorOverride)),e}))}))})),r}(o,!r);return delete e.cachedElement,function(e){e.forEach((function(e){e.cells.forEach((function(e){delete e.cachedElement})),delete e.cachedElement}))}(o),function(e,t){e.forEach((function(r,o){r.cells.forEach((function(n,i){var s=u[t.tableBorderFormat]({firstRow:0===o,lastRow:o===e.length-1,firstColumn:0===i,lastColumn:i===r.cells.length-1}),d=[t.topBorderColor,t.verticalBorderColor,t.bottomBorderColor,t.verticalBorderColor];s.forEach((function(e,t){var r=!e&&d[t]||"";n.format[a.BorderKeys[t]]=(0,l.combineBorderValue)({style:m(r),width:"1px",color:r})}))}))}))}(o,p),function(e,t,r){var o=t.hasBandedRows,n=t.hasBandedColumns,a=t.bgColorOdd,l=t.bgColorEven;e.forEach((function(e,t){e.cells.forEach((function(e,s){if(!r[t][s]){var d=(o||n)&&(n&&s%2!=0||o&&t%2!=0)?a:l;(0,i.setTableCellBackgroundColor)(e,d)}}))}))}(o,p,v),function(e,t,r){e.forEach((function(o,n){o.cells.forEach((function(o,a){t.hasFirstColumn&&0===a?(o.isHeader=!0,0===n||r[n][a]||(f(o.format,"borderTop"),(0,i.setTableCellBackgroundColor)(o,null)),n!==e.length-1&&0!==n&&f(o.format,"borderBottom")):o.isHeader=!1}))}))}(o,p,v),function(e,t,r){var o;null===(o=e[0])||void 0===o||o.cells.forEach((function(e,o){e.isHeader=t.hasHeaderRow,t.hasHeaderRow&&t.headerRowColor&&(r[0][o]||(0,i.setTableCellBackgroundColor)(e,t.headerRowColor),f(e.format,"borderTop",t.headerRowColor),f(e.format,"borderRight",t.headerRowColor),f(e.format,"borderLeft",t.headerRowColor))}))}(o,p,v),p}))};var u=((o={})[0]=function(e){return[!1,!1,!1,!1]},o[1]=function(e){return[!1,!e.lastColumn,!1,!e.firstColumn]},o[4]=function(e){var t=e.firstColumn,r=e.firstRow;return[!r,!e.lastColumn&&!t||t&&r,!e.lastRow&&!r,!t]},o[2]=function(e){var t=e.firstRow,r=e.firstColumn,o=e.lastColumn;return[t,t||o,!1,t||r]},o[3]=function(e){var t=e.firstColumn;return[!1,e.lastColumn,!1,t]},o[5]=function(e){var t=e.firstRow,r=e.firstColumn;return[r&&!t,t,r&&!t,t&&!r]},o[6]=function(e){var t=e.firstRow,r=e.firstColumn;return[!t,t||!r,!t,!r]},o[7]=function(e){var t=e.firstColumn,r=e.firstRow;return[!0,r||!t,!r,!0]},o[8]=function(){return[!0,!0,!0,!0]},o);function f(e,t,r){var o=(0,l.extractBorderValues)(e[t]);o.color=r||"",o.style=m(o.color),e[t]=(0,l.combineBorderValue)(o)}function m(e){return e&&"transparent"!=e?"solid":"none"}},5788:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.canMergeCells=void 0,t.canMergeCells=function(e,t,r,o,n){var a=r==n||e[t].cells.every((function(e,t){return tn||!e.spanAbove})),l=t==o||e.every((function(e,n){return no||!e.cells[r].spanLeft})),i=e[o].cells.map((function(t,a){return a>=r&&a<=n?function(e,t,r){for(var o,n,a=0,l=t+1;l=t&&a<=o?function(e,t,r){for(var o,n,a,l=0,i=r+1;i<(null===(o=e[t])||void 0===o?void 0:o.cells.length)&&(null===(a=null===(n=e[t])||void 0===n?void 0:n.cells[i])||void 0===a?void 0:a.spanLeft);i++)l++;return l}(e,a,n):-1})).every((function(e,r,o){return e<0||e==o[t]}));return a&&l&&i&&s}},2969:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createTableStructure=void 0;var o=r(1246);t.createTableStructure=function(e,t,r){var n=(0,o.createTable)(r);return(0,o.addBlock)(e,n),n.rows.forEach((function(e){for(var r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.deleteTable=void 0,t.deleteTable=function(e){e.rows=[],delete e.cachedElement}},629:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.deleteTableColumn=void 0;var o=r(981),n=r(5226);t.deleteTableColumn=function(e){var t=(0,n.getSelectedCells)(e);if(t){for(var r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.deleteTableRow=void 0;var o=r(981),n=r(5226);t.deleteTableRow=function(e){var t=(0,n.getSelectedCells)(e);t&&(e.rows[t.firstRow].cells.forEach((function(r,o){var n,a=null===(n=e.rows[t.lastRow+1])||void 0===n?void 0:n.cells[o];a&&(a.spanAbove=a.spanAbove&&r.spanAbove)})),e.rows.splice(t.firstRow,t.lastRow-t.firstRow+1),(0,o.collapseTableSelection)(e.rows,t))}},5226:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getSelectedCells=void 0;var o=r(7536);t.getSelectedCells=function(e){var t=-1,r=-1,n=-1,a=-1,l=!1;return e.rows.forEach((function(e,i){return e.cells.forEach((function(e,s){(0,o.default)(e)&&(l=!0,t<0&&(t=i),r<0&&(r=s),n=Math.max(n,i),a=Math.max(a,s))}))})),l?{firstRow:t,firstCol:r,lastRow:n,lastCol:a}:null}},7350:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.insertTableColumn=void 0;var o=r(1246),n=r(5226);t.insertTableColumn=function(e,t){var r=(0,n.getSelectedCells)(e),a=2==t;if(r)for(var l=null==r?void 0:r.firstCol;l<=r.lastCol;l++)e.rows.forEach((function(e){var t=e.cells[a?r.firstCol:r.lastCol];e.cells.splice(a?r.firstCol:r.lastCol+1,0,(0,o.createTableCell)(t.spanLeft,t.spanAbove,t.isHeader,t.format))})),e.widths.splice(a?r.firstCol:r.lastCol+1,0,e.widths[a?r.firstCol:r.lastCol])}},9457:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.insertTableRow=void 0;var o=r(7582),n=r(1246),a=r(5226);t.insertTableRow=function(e,t){var r=(0,a.getSelectedCells)(e),l=0==t;if(r)for(var i=r.firstRow;i<=r.lastRow;i++){var s=e.rows[l?r.firstRow:r.lastRow];e.rows.splice(l?r.firstRow:r.lastRow+1,0,{format:(0,o.__assign)({},s.format),cells:s.cells.map((function(e){return(0,n.createTableCell)(e.spanLeft,e.spanAbove,e.isHeader,e.format)})),height:s.height})}}},8509:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.mergeTableCells=void 0;var o=r(5788),n=r(5226);t.mergeTableCells=function(e){var t=(0,n.getSelectedCells)(e);if(t&&(0,o.canMergeCells)(e.rows,t.firstRow,t.firstCol,t.lastRow,t.lastCol))for(var r=t.firstRow;r<=t.lastRow;r++){for(var a=t.firstCol;a<=t.lastCol;a++){var l=e.rows[r].cells[a];l&&(l.spanLeft=a>t.firstCol,l.spanAbove=r>t.firstRow,delete l.cachedElement)}delete e.rows[r].cachedElement}}},4765:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.mergeTableColumn=void 0;var o=r(5788),n=r(5226);t.mergeTableColumn=function(e,t){var r,a,l,i,s=(0,n.getSelectedCells)(e);if(s){var d=9==t?s.firstCol:s.lastCol+1;if(d>0&&d{Object.defineProperty(t,"__esModule",{value:!0}),t.mergeTableRow=void 0;var o=r(5788),n=r(5226);t.mergeTableRow=function(e,t){var r,a,l,i=(0,n.getSelectedCells)(e);if(i){var s=7==t?i.firstRow:i.lastRow+1;if(s>0&&s{Object.defineProperty(t,"__esModule",{value:!0}),t.normalizeTable=void 0;var o=r(7582),n=r(1246),a=r(2347);function l(e){return e<=4?120:e<=6?100:70}function i(e,t){t.blocks.every((function(e){return"Paragraph"==e.blockType&&(0==(t=(t=e.segments).filter((function(e){return"SelectionMarker"!=e.segmentType}))).length||1==t.length&&"Br"==t[0].segmentType);var t}))||((0,a.arrayPush)(e.blocks,t.blocks),t.blocks=[])}t.normalizeTable=function(e,t){var r,a=e.format;a.borderCollapse&&a.useBorderBox||(a.borderCollapse=!0,a.useBorderBox=!0),e.rows.forEach((function(e,r){e.cells.forEach((function(e,o){0==e.blocks.length&&(0,n.addSegment)(e,(0,n.createBr)(t)),0==r?e.spanAbove=!1:r>0&&e.isHeader&&(e.isHeader=!1,delete e.cachedElement),0==o&&(e.spanLeft=!1),e.format.useBorderBox=!0})),e.height<22&&(e.height=22)}));for(var s=Math.max.apply(Math,(0,o.__spreadArray)([],(0,o.__read)(e.rows.map((function(e){return e.cells.length}))),!1)),d=0;d0;u--)c(u);for(var f=function(t){var r=e.rows[t];r.cells.forEach((function(r,o){var n,a=null===(n=e.rows[t-1])||void 0===n?void 0:n.cells[o];a&&r.spanAbove&&i(a,r)})),r.cells.every((function(e){return e.spanAbove}))&&(e.rows[t-1].height+=r.height,e.rows.splice(t,1))},m=e.rows.length-1;m>0;m--)f(m)}},3684:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.setTableCellBackgroundColor=void 0;var o=r(2347),n=r(860);t.setTableCellBackgroundColor=function(e,t,r){if(t){e.format.backgroundColor=t,r&&(0,n.updateTableCellMetadata)(e,(function(e){return(e=e||{}).bgColorOverride=!0,e}));var a=function(e){var t=(0,o.parseColor)(e);if(t){var r=t[0]/255,n=t[1]/255,a=t[2]/255;return 50*(Math.max(r,n,a)+Math.min(r,n,a))}return 255}(t);a<20?e.format.textColor="#ffffff":a>80?e.format.textColor="#000000":delete e.format.textColor}else delete e.format.backgroundColor,delete e.format.textColor;delete e.cachedElement}},3618:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.splitTableCellHorizontally=void 0;var o=r(7582),n=r(1246),a=r(5226);t.splitTableCellHorizontally=function(e){var t=(0,a.getSelectedCells)(e);if(t)for(var r=function(r){if(e.rows.every((function(e,o){var n;return ot.lastRow||(null===(n=e.cells[r+1])||void 0===n?void 0:n.spanLeft)})))e.rows.forEach((function(e,o){delete e.cells[r].cachedElement,o>=t.firstRow&&o<=t.lastRow&&(e.cells[r+1].spanLeft=!1,delete e.cells[r+1].cachedElement)}));else{e.rows.forEach((function(e,a){var l=e.cells[r];if(l){var i=(0,n.createTableCell)(l.spanLeft,l.spanAbove,l.isHeader,l.format);i.dataset=(0,o.__assign)({},l.dataset),at.lastRow?i.spanLeft=!0:i.isSelected=l.isSelected,e.cells.splice(r+1,0,i),delete e.cells[r].cachedElement}}));var a=Math.max(e.widths[r]/2,30);e.widths.splice(r,1,a,a)}},l=t.lastCol;l>=t.firstCol;l--)r(l)}},2242:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.splitTableCellVertically=void 0;var o=r(7582),n=r(1246),a=r(5226);t.splitTableCellVertically=function(e){var t=(0,a.getSelectedCells)(e);if(t)for(var r=t.lastRow;r>=t.firstRow;r--){var l=e.rows[r],i=e.rows[r+1];if(l.cells.forEach((function(e){delete e.cachedElement})),delete l.cachedElement,null==i?void 0:i.cells.every((function(e,r){return rt.lastCol||e.spanAbove})))i.cells.forEach((function(e,r){r>=t.firstCol&&r<=t.lastCol&&(e.spanAbove=!1,delete e.cachedElement)})),delete i.cachedElement;else{var s=Math.max(l.height/=2,22),d={format:(0,o.__assign)({},l.format),height:s,cells:l.cells.map((function(e,r){var a=(0,n.createTableCell)(e.spanLeft,e.spanAbove,e.isHeader,e.format);return a.dataset=(0,o.__assign)({},e.dataset),rt.lastCol?a.spanAbove=!0:a.isSelected=e.isSelected,a}))};l.height=s,e.rows.splice(r+1,0,d)}}}},5149:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(2511),n=r(9842);t.default=function(e,t){(0,o.formatWithContentModel)(e,"setAlignment",(function(e){return(0,n.setModelAlignment)(e,t)}))}},8365:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(9139);t.default=function(e,t){(0,o.formatParagraphWithContentModel)(e,"setDirection",(function(e){if("rtl"==e.format.direction!=("rtl"==t)){e.format.direction=t;var r=e.format.marginLeft,o=e.format.paddingLeft;e.format.marginLeft=e.format.marginRight,e.format.marginRight=r,e.format.paddingLeft=e.format.paddingRight,e.format.paddingRight=o}}))}},6747:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7582),n=r(1246),a=r(9139);t.default=function(e,t){(0,a.formatParagraphWithContentModel)(e,"setHeaderLevel",(function(e){var r,a,l,i=t>0?"h"+t:(a=(null==(r=e.decorator)?void 0:r.tagName)||"",(l=parseInt(a.substring(1)))>=1&&l<=6?a:null),s=i&&n.defaultImplicitFormatMap[i]||{};t>0?(e.decorator={tagName:i,format:(0,o.__assign)({},s)},e.segments.forEach((function(e){delete e.format.fontSize,delete e.format.fontWeight}))):i&&delete e.decorator}))}},3721:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(2511),n=r(687);t.default=function(e,t,r){(0,o.formatWithContentModel)(e,"setIndentation",(function(e){return(0,n.setModelIndentation)(e,t,r)}),{preservePendingFormat:!0})}},7339:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1246),n=r(9139);t.default=function(e,t,r){(0,n.formatParagraphWithContentModel)(e,"setParagraphMargin",(function(e){e.decorator||(e.decorator=(0,o.createParagraphDecorator)("p")),t?e.format.marginTop=t:null===t&&delete e.format.marginTop,r?e.format.marginBottom=r:null===r&&delete e.format.marginBottom}))}},9294:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(9139);t.default=function(e,t){(0,o.formatParagraphWithContentModel)(e,"setSpacing",(function(e){e.format.lineHeight=t.toString(),e.segments.forEach((function(e){e.format.lineHeight&&delete e.format.lineHeight}))}))}},1977:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7582),n=r(2511),a=r(6162),l={borderLeft:"3px solid rgb(200, 200, 200)",textColor:"rgb(102, 102, 102)"},i={marginTop:"1em",marginBottom:"1em",marginLeft:"40px",marginRight:"40px",paddingLeft:"10px"};t.default=function(e,t){void 0===t&&(t=l);var r=(0,o.__assign)((0,o.__assign)({},i),t);(0,n.formatWithContentModel)(e,"toggleBlockQuote",(function(e){return(0,a.toggleModelBlockQuote)(e,r)}),{preservePendingFormat:!0})}},5634:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(2347),n=r(1685),a=r(473),l=r(2511),i=r(4040),s=r(3731),d=r(8689);t.default=function(e,t,r){var c=t.which;(0,l.formatWithContentModel)(e,46==c?"handleDeleteKey":"handleBackspaceKey",(function(l){var c=(0,a.deleteSelection)(l,(0,i.getOnDeleteEntityCallback)(e,t,r),function(e){var t=46==e.which;return[(0,i.shouldDeleteAllSegmentsBefore)(e)&&!t?n.deleteAllSegmentBefore:null,(0,i.shouldDeleteWord)(e,!!o.Browser.isMac)?t?s.forwardDeleteWordSelection:s.backwardDeleteWordSelection:null,t?d.forwardDeleteCollapsedSelection:d.backwardDeleteCollapsedSelection]}(t)).deleteResult;return(0,i.handleKeyboardEventResult)(e,l,t,c)}),{skipUndoSnapshot:!0,changeSource:"Keyboard",getChangeData:function(){return c}})}},1576:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7582),n=r(2511),a=r(2976),l=r(5098),i=r(1246);t.default=function(e,t){var r=(0,a.getPendingFormat)(e);if(r){var s=!1;(0,n.formatWithContentModel)(e,"applyPendingFormat",(function(e){return(0,l.iterateSelections)([e],(function(e,n,a,l){if("Paragraph"==(null==a?void 0:a.blockType)&&1==(null==l?void 0:l.length)&&"SelectionMarker"==l[0].segmentType){var d=l[0],c=a.segments.indexOf(d),u=a.segments[c-1];if("Text"==(null==u?void 0:u.segmentType)){var f=u.text,m=f.substr(-t.length,t.length);if(m==t||" "==t&&" "==m){d.format=(0,o.__assign)({},r),u.text=f.substring(0,f.length-t.length);var p=(0,i.createText)(" "==t?" ":t,(0,o.__assign)((0,o.__assign)({},u.format),r));a.segments.splice(c,0,p),(0,i.setParagraphNotImplicit)(a),s=!0}}}return!0})),s&&(0,i.normalizeContentModel)(e),s}),{skipUndoSnapshot:!0})}}},2313:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(512),n=r(2511),a=r(1246);t.default=function(e){(0,n.formatWithContentModel)(e,"clearFormat",(function(e){var t=[],r=[],n=[];return(0,o.clearModelFormat)(e,t,r,n),(0,a.normalizeContentModel)(e),t.length>0||r.length>0||n.length>0}))}},7950:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7582),n=r(2511),a=r(2976),l=r(2229);t.default=function(e){var t=(0,o.__assign)((0,o.__assign)({},e.getUndoState()),{isDarkMode:e.isDarkMode(),zoomScale:e.getZoomScale()});return(0,n.formatWithContentModel)(e,"getFormatState",(function(r){var o=(0,a.getPendingFormat)(e);return(0,l.retrieveModelFormatState)(r,o,t),!1}),{useReducedModel:!0}),t}},6055:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(2511),n=r(2976),a=r(5098);t.default=function(e){var t=(0,n.getPendingFormat)(e);return t||(0,o.formatWithContentModel)(e,"getSegmentFormat",(function(e){return(0,a.iterateSelections)([e],(function(e,r,o,n){var a;return t=(null===(a=null==n?void 0:n[0])||void 0===a?void 0:a.format)||null,!0}),{includeListFormatHolder:"never"}),!1}),{useReducedModel:!0}),t}},6623:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(5113),n=r(2511);t.default=function(e){var t=null;return(0,n.formatWithContentModel)(e,"adjustImageSelection",(function(e){return(0,o.adjustSegmentSelection)(e,(function(e){return!(!e.isSelected||"Image"!=e.segmentType||(t=e,0))}),(function(e,t){return e==t}))})),t}},8401:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(6154),n=r(2347);t.default=function(e,t){var r=e.getSelectionRangeEx();(0,n.readFile)(t,(function(t){t&&!e.isDisposed()&&2===r.type&&(0,o.default)(e,"changeImage",(function(e){e.src=t,e.dataset={},e.format.width="",e.format.height=""}),{image:r.image,previousSrc:r.image.src,newSrc:t,originalSrc:a(r.image)})}))};var a=function(e){var t=(0,n.getMetadata)(e);return t&&t.src||""}},2930:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1246),n=r(2511),a=r(4040),l=r(485),i=r(2347);function s(e,t){(0,n.formatWithContentModel)(e,"insertImage",(function(r){var n=(0,o.createImage)(t),i=(0,o.createContentModelDocument)();return(0,o.addSegment)(i,n),(0,l.mergeModel)(r,i,(0,a.getOnDeleteEntityCallback)(e),{mergeFormat:"mergeAll"}),!0}))}t.default=function(e,t){"string"==typeof t?s(e,t):(0,i.readFile)(t,(function(t){t&&!e.isDisposed()&&s(e,t)}))}},2063:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(6154);t.default=function(e,t){(0,o.default)(e,"setImageAltText",(function(e){e.alt=t}))}},4653:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1354),n=r(6154);t.default=function(e,t,r){(0,n.default)(e,"setImageBorder",(function(e){(0,o.default)(e,t,r)}))}},4735:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(6154);t.default=function(e,t,r){(0,o.default)(e,"setImageBoxShadow",(function(e){e.format.boxShadow=t,r?(e.format.marginBottom=r,e.format.marginLeft=r,e.format.marginRight=r,e.format.marginTop=r):null===r&&(delete e.format.marginBottom,delete e.format.marginLeft,delete e.format.marginRight,delete e.format.marginTop)}))}},886:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.paste=t.toggleCode=t.setParagraphMargin=t.adjustImageSelection=t.setImageAltText=t.adjustLinkSelection=t.removeLink=t.insertLink=t.clearFormat=t.applyPendingFormat=t.getSegmentFormat=t.getFormatState=t.changeImage=t.setImageBoxShadow=t.setImageBorder=t.setSpacing=t.toggleBlockQuote=t.setHeaderLevel=t.setDirection=t.setAlignment=t.setIndentation=t.hasSelectionInBlockGroup=t.hasSelectionInSegment=t.hasSelectionInBlock=t.setListStartNumber=t.setListStyle=t.insertImage=t.changeCapitalization=t.applySegmentFormat=t.changeFontSize=t.setTextColor=t.setFontSize=t.setFontName=t.setBackgroundColor=t.toggleSuperscript=t.toggleSubscript=t.toggleStrikethrough=t.toggleUnderline=t.toggleItalic=t.toggleBold=t.toggleNumbering=t.toggleBullet=t.editTable=t.setTableCellShade=t.formatTable=t.insertTable=void 0;var o=r(6901);Object.defineProperty(t,"insertTable",{enumerable:!0,get:function(){return o.default}});var n=r(2435);Object.defineProperty(t,"formatTable",{enumerable:!0,get:function(){return n.default}});var a=r(7783);Object.defineProperty(t,"setTableCellShade",{enumerable:!0,get:function(){return a.default}});var l=r(959);Object.defineProperty(t,"editTable",{enumerable:!0,get:function(){return l.default}});var i=r(58);Object.defineProperty(t,"toggleBullet",{enumerable:!0,get:function(){return i.default}});var s=r(4505);Object.defineProperty(t,"toggleNumbering",{enumerable:!0,get:function(){return s.default}});var d=r(5539);Object.defineProperty(t,"toggleBold",{enumerable:!0,get:function(){return d.default}});var c=r(3462);Object.defineProperty(t,"toggleItalic",{enumerable:!0,get:function(){return c.default}});var u=r(3679);Object.defineProperty(t,"toggleUnderline",{enumerable:!0,get:function(){return u.default}});var f=r(5602);Object.defineProperty(t,"toggleStrikethrough",{enumerable:!0,get:function(){return f.default}});var m=r(2494);Object.defineProperty(t,"toggleSubscript",{enumerable:!0,get:function(){return m.default}});var p=r(1308);Object.defineProperty(t,"toggleSuperscript",{enumerable:!0,get:function(){return p.default}});var v=r(5253);Object.defineProperty(t,"setBackgroundColor",{enumerable:!0,get:function(){return v.default}});var g=r(1250);Object.defineProperty(t,"setFontName",{enumerable:!0,get:function(){return g.default}});var b=r(5442);Object.defineProperty(t,"setFontSize",{enumerable:!0,get:function(){return b.default}});var h=r(9715);Object.defineProperty(t,"setTextColor",{enumerable:!0,get:function(){return h.default}});var y=r(7451);Object.defineProperty(t,"changeFontSize",{enumerable:!0,get:function(){return y.default}});var _=r(4847);Object.defineProperty(t,"applySegmentFormat",{enumerable:!0,get:function(){return _.default}});var P=r(5284);Object.defineProperty(t,"changeCapitalization",{enumerable:!0,get:function(){return P.default}});var C=r(2930);Object.defineProperty(t,"insertImage",{enumerable:!0,get:function(){return C.default}});var S=r(3e3);Object.defineProperty(t,"setListStyle",{enumerable:!0,get:function(){return S.default}});var k=r(1123);Object.defineProperty(t,"setListStartNumber",{enumerable:!0,get:function(){return k.default}});var O=r(6516);Object.defineProperty(t,"hasSelectionInBlock",{enumerable:!0,get:function(){return O.default}});var M=r(5676);Object.defineProperty(t,"hasSelectionInSegment",{enumerable:!0,get:function(){return M.default}});var T=r(7536);Object.defineProperty(t,"hasSelectionInBlockGroup",{enumerable:!0,get:function(){return T.default}});var F=r(3721);Object.defineProperty(t,"setIndentation",{enumerable:!0,get:function(){return F.default}});var w=r(5149);Object.defineProperty(t,"setAlignment",{enumerable:!0,get:function(){return w.default}});var x=r(8365);Object.defineProperty(t,"setDirection",{enumerable:!0,get:function(){return x.default}});var j=r(6747);Object.defineProperty(t,"setHeaderLevel",{enumerable:!0,get:function(){return j.default}});var E=r(1977);Object.defineProperty(t,"toggleBlockQuote",{enumerable:!0,get:function(){return E.default}});var B=r(9294);Object.defineProperty(t,"setSpacing",{enumerable:!0,get:function(){return B.default}});var A=r(4653);Object.defineProperty(t,"setImageBorder",{enumerable:!0,get:function(){return A.default}});var I=r(4735);Object.defineProperty(t,"setImageBoxShadow",{enumerable:!0,get:function(){return I.default}});var L=r(8401);Object.defineProperty(t,"changeImage",{enumerable:!0,get:function(){return L.default}});var D=r(7950);Object.defineProperty(t,"getFormatState",{enumerable:!0,get:function(){return D.default}});var H=r(6055);Object.defineProperty(t,"getSegmentFormat",{enumerable:!0,get:function(){return H.default}});var N=r(1576);Object.defineProperty(t,"applyPendingFormat",{enumerable:!0,get:function(){return N.default}});var R=r(2313);Object.defineProperty(t,"clearFormat",{enumerable:!0,get:function(){return R.default}});var z=r(7058);Object.defineProperty(t,"insertLink",{enumerable:!0,get:function(){return z.default}});var W=r(3932);Object.defineProperty(t,"removeLink",{enumerable:!0,get:function(){return W.default}});var G=r(1270);Object.defineProperty(t,"adjustLinkSelection",{enumerable:!0,get:function(){return G.default}});var U=r(2063);Object.defineProperty(t,"setImageAltText",{enumerable:!0,get:function(){return U.default}});var K=r(6623);Object.defineProperty(t,"adjustImageSelection",{enumerable:!0,get:function(){return K.default}});var V=r(7339);Object.defineProperty(t,"setParagraphMargin",{enumerable:!0,get:function(){return V.default}});var q=r(1340);Object.defineProperty(t,"toggleCode",{enumerable:!0,get:function(){return q.default}});var $=r(5915);Object.defineProperty(t,"paste",{enumerable:!0,get:function(){return $.default}})},1270:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(5113),n=r(5294),a=r(2511),l=r(5544),i=r(5736);t.default=function(e){var t="",r=null;return(0,a.formatWithContentModel)(e,"adjustLinkSelection",(function(e){var a,s,d=(0,o.adjustSegmentSelection)(e,(function(e){return!!e.isSelected&&!!e.link}),(function(e,t){return!!e.link&&e.link.format.href==t.link.format.href})),c=(0,l.getSelectedSegments)(e,!1),u=c[0];return 1==c.length&&"SelectionMarker"==u.segmentType&&(c=(0,n.adjustWordSelection)(e,u)).length>1&&(d=!0,(0,i.setSelection)(e,c[0],c[c.length-1])),t=c.map((function(e){return"Text"==e.segmentType?e.text:""})).join(""),r=(null===(s=null===(a=c[0])||void 0===a?void 0:a.link)||void 0===s?void 0:s.format.href)||null,d})),[t,r]}},7058:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7582),n=r(2511),a=r(4040),l=r(2976),i=r(5544),s=r(2347),d=r(485),c=r(1246),u=/^[a-zA-Z]+:/i,f=/^[\w.%+-]+@/i,m=/^ftp\./i;function p(e){if(!e)return e;var t="";return e.search(u)<0&&(t=0==e.search(f)?"mailto:":0==e.search(m)?"ftp://":"http://"),t+e}t.default=function(e,t,r,u,f){var m=(function(e){var t=new s.HtmlSanitizer,r=document.createElement("a");return r.href=e||"",t.sanitize(r),r.getAttribute("href")||""}(t)||"").trim();if(m){var v,g=(0,s.matchLink)(m),b={dataset:{},format:{href:g?g.normalizedUrl:p(m),anchorTitle:r,target:f,underline:!0}},h=[];(0,n.formatWithContentModel)(e,"insertLink",(function(t){var r,n=(0,i.getSelectedSegments)(t,!1),s=n.map((function(e){return"Text"==e.segmentType?e.text:""})).join(""),f=u||s||"";if(n.some((function(e){return"SelectionMarker"!=e.segmentType}))&&s==f)n.forEach((function(e){(0,c.addLink)(e,b),e.link&&h.push(e.link)}));else if(n.every((function(e){return"SelectionMarker"==e.segmentType}))||f&&f!=s){var p=(0,c.createText)(f||(g?g.originalUrl:m),(0,o.__assign)((0,o.__assign)({},(null===(r=n[0])||void 0===r?void 0:r.format)||{}),(0,l.getPendingFormat)(e)||{})),v=(0,c.createContentModelDocument)();(0,c.addLink)(p,b),(0,c.addSegment)(v,p),p.link&&h.push(p.link),(0,d.mergeModel)(t,v,(0,a.getOnDeleteEntityCallback)(e),{mergeFormat:"mergeAll"})}return n.length>0}),{changeSource:"CreateLink",onNodeCreated:function(e,t){!v&&h.indexOf(e)>=0&&(v=t)},getChangeData:function(){return v}})}}},3932:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(5113),n=r(2511),a=r(5544);t.default=function(e){(0,n.formatWithContentModel)(e,"removeLink",(function(e){(0,o.adjustSegmentSelection)(e,(function(e){return!!e.isSelected&&!!e.link}),(function(e,t){return e.isSelected||!!e.link&&e.link.format.href==t.link.format.href}));var t=(0,a.getSelectedSegments)(e,!1),r=!1;return t.forEach((function(e){e.link&&(r=!0,delete e.link)})),r}))}},1123:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(2511),n=r(5544);t.default=function(e,t){(0,o.formatWithContentModel)(e,"setListStartNumber",(function(e){var r=(0,n.getFirstSelectedListItem)(e),o=null==r?void 0:r.levels[(null==r?void 0:r.levels.length)-1];return!!o&&(o.startNumberOverride=t,!0)}))}},3e3:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(2874),n=r(2511),a=r(5544);t.default=function(e,t){(0,n.formatWithContentModel)(e,"setListStyle",(function(e){var r=(0,a.getFirstSelectedListItem)(e);if(r){var n=(0,o.findListItemsInSameThread)(e,r),l=r.levels.length-1;return n.forEach((function(e){void 0!==t.orderedStyleType&&(e.levels[l].orderedStyleType=t.orderedStyleType),void 0!==t.unorderedStyleType&&(e.levels[l].unorderedStyleType=t.unorderedStyleType)})),!0}return!1}))}},58:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(2511),n=r(1567);t.default=function(e){(0,o.formatWithContentModel)(e,"toggleBullet",(function(e){return(0,n.setListType)(e,"UL")}),{preservePendingFormat:!0})}},4505:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(2511),n=r(1567);t.default=function(e){(0,o.formatWithContentModel)(e,"toggleNumbering",(function(e){return(0,n.setListType)(e,"OL")}),{preservePendingFormat:!0})}},4847:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e,t){(0,o.formatSegmentWithContentModel)(e,"applySegmentFormat",(function(e){e.backgroundColor=t.backgroundColor,e.fontFamily=t.fontFamily,e.fontSize=t.fontSize,e.fontWeight=t.fontWeight,e.italic=t.italic,e.strikethrough=t.strikethrough,e.superOrSubScriptSequence=t.superOrSubScriptSequence,e.textColor=t.textColor,e.underline=t.underline}),void 0,!0)}},5284:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e,t,r){(0,o.formatSegmentWithContentModel)(e,"changeCapitalization",(function(e,o,n){if("Text"==(null==n?void 0:n.segmentType))switch(t){case"lowerCase":n.text=n.text.toLocaleLowerCase(r);break;case"upperCase":n.text=n.text.toLocaleUpperCase(r);break;case"capitalize":for(var a=n.text.toLocaleLowerCase(r).split(" "),l=0;l{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741),n=r(1246),a=[8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72];t.default=function(e,t){(0,o.formatSegmentWithContentModel)(e,"changeFontSize",(function(e){return function(e,t){if(e.fontSize){var r=(0,n.parseValueWithUnit)(e.fontSize,void 0,"pt");if(r>0){var o=function(e,t,r){e=1==t?Math.floor(e):Math.ceil(e);var o=r[r.length-1];if(e<=r[0])e=Math.max(e+t,1);else if(e>o||e==o&&1==t)e/=10,e=1==t?Math.floor(e):Math.ceil(e),e=Math.min(Math.max(10*(e+t),o),1e3);else if(1==t){for(var n=0;n=0;n--)if(e>r[n]){e=r[n];break}return e}(r,"increase"==t?1:-1,a);e.fontSize=o+"pt"}}}(e,t)}),void 0,!0)}},5253:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e,t){(0,o.formatSegmentWithContentModel)(e,"setBackgroundColor",null===t?function(e){delete e.backgroundColor}:function(e){e.backgroundColor=t})}},1250:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e,t){(0,o.formatSegmentWithContentModel)(e,"setFontName",(function(e,r,o){e.fontFamily=t,(null==o?void 0:o.code)&&(o.code.format.fontFamily=t)}),void 0,!0)}},5442:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e,t){(0,o.formatSegmentWithContentModel)(e,"setFontSize",(function(e){e.fontSize=t}),void 0,!0)}},9715:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e,t){(0,o.formatSegmentWithContentModel)(e,"setTextColor",null===t?function(e,t,r){delete e.textColor,(null==r?void 0:r.link)&&delete r.link.format.textColor}:function(e,r,o){e.textColor=t,(null==o?void 0:o.link)&&(o.link.format.textColor=t)},void 0,!0)}},5539:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isBold=void 0;var o=r(1741);function n(e){return!!e&&("bold"==e||"bolder"==e||parseInt(e)>=600)}t.default=function(e){(0,o.formatSegmentWithContentModel)(e,"toggleBold",(function(e,t){e.fontWeight=t?"bold":"normal"}),(function(e,t,r){var o;return n(void 0===e.fontWeight?null===(o=null==r?void 0:r.decorator)||void 0===o?void 0:o.format.fontWeight:e.fontWeight)}))},t.isBold=n},1340:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1246),n=r(1741),a={format:{fontFamily:"monospace"}};t.default=function(e){(0,n.formatSegmentWithContentModel)(e,"toggleCode",(function(e,t,r){r&&(t?(0,o.addCode)(r,a):delete r.code)}),(function(e,t){return!!(null==t?void 0:t.code)}))}},3462:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e){(0,o.formatSegmentWithContentModel)(e,"toggleItalic",(function(e,t){e.italic=!!t}),(function(e){return!!e.italic}))}},5602:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e){(0,o.formatSegmentWithContentModel)(e,"toggleStrikethrough",(function(e,t){e.strikethrough=!!t}),(function(e){return!!e.strikethrough}))}},2494:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e){(0,o.formatSegmentWithContentModel)(e,"toggleSubscript",(function(e,t){e.superOrSubScriptSequence=t?"sub":""}),(function(e){var t;return"sub"==(null===(t=e.superOrSubScriptSequence)||void 0===t?void 0:t.split(" ").pop())}))}},1308:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e){(0,o.formatSegmentWithContentModel)(e,"toggleSuperscript",(function(e,t){e.superOrSubScriptSequence=t?"super":""}),(function(e){var t;return"super"==(null===(t=e.superOrSubScriptSequence)||void 0===t?void 0:t.split(" ").pop())}))}},3679:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e){(0,o.formatSegmentWithContentModel)(e,"toggleUnderline",(function(e,t,r){e.underline=!!t,(null==r?void 0:r.link)&&(r.link.format.underline=!!t)}),(function(e){return!!e.underline}))}},6516:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7536),n=r(5676);t.default=function(e){switch(e.blockType){case"Paragraph":return e.segments.some(n.default);case"Table":return e.rows.some((function(e){return e.cells.some(o.default)}));case"BlockGroup":return(0,o.default)(e);case"Divider":case"Entity":return!!e.isSelected;default:return!1}}},7536:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(6516);t.default=function(e){return!("TableCell"!=e.blockGroupType||!e.isSelected)||!!e.blocks.some(o.default)}},5676:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(6516);t.default=function(e){return e.isSelected||"General"==e.segmentType&&e.blocks.some(o.default)}},959:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(6682),n=r(7691),a=r(4158),l=r(6893),i=r(629),s=r(4054),d=r(2511),c=r(5544),u=r(1246),f=r(7350),m=r(9457),p=r(8509),v=r(4765),g=r(2806),b=r(1303),h=r(3618),y=r(2242);t.default=function(e,t){(0,d.formatWithContentModel)(e,"editTable",(function(e){var r=(0,c.getFirstSelectedTable)(e);if(r){switch(t){case 22:case 18:case 17:case 21:case 19:case 20:(0,n.alignTableCell)(r,t);break;case 14:case 15:case 16:(0,o.alignTable)(r,t);break;case 5:(0,i.deleteTableColumn)(r);break;case 6:(0,s.deleteTableRow)(r);break;case 4:(0,l.deleteTable)(r);break;case 0:case 1:(0,m.insertTableRow)(r,t);break;case 2:case 3:(0,f.insertTableColumn)(r,t);break;case 7:case 8:(0,g.mergeTableRow)(r,t);break;case 11:(0,p.mergeTableCells)(r);break;case 9:case 10:(0,v.mergeTableColumn)(r,t);break;case 12:(0,h.splitTableCellHorizontally)(r);break;case 13:(0,y.splitTableCellVertically)(r)}return(0,b.normalizeTable)(r),(0,u.hasMetadata)(r)&&(0,a.applyTableFormat)(r,void 0,!0),!0}return!1}))}},2435:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(4158),n=r(2511),a=r(5544);t.default=function(e,t,r){(0,n.formatWithContentModel)(e,"formatTable",(function(e){var n=(0,a.getFirstSelectedTable)(e);return!!n&&((0,o.applyTableFormat)(n,t,r),!0)}))}},6901:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(4158),n=r(1246),a=r(2969),l=r(473),i=r(2511),s=r(4040),d=r(2976),c=r(485),u=r(1303),f=r(5736);t.default=function(e,t,r,m){(0,i.formatWithContentModel)(e,"insertTable",(function(i){var p,v,g,b=(0,s.getOnDeleteEntityCallback)(e),h=(0,l.deleteSelection)(i,b).insertPoint;if(h){var y=(0,n.createContentModelDocument)(),_=(0,a.createTableStructure)(y,t,r);(0,u.normalizeTable)(_,(0,d.getPendingFormat)(e)||h.marker.format),(0,o.applyTableFormat)(_,m),(0,c.mergeModel)(i,y,b,{insertPosition:h,mergeFormat:"mergeAll"});var P=null===(v=null===(p=_.rows[0])||void 0===p?void 0:p.cells[0])||void 0===v?void 0:v.blocks[0];if("Paragraph"==(null==P?void 0:P.blockType)){var C=(0,n.createSelectionMarker)(null===(g=P.segments[0])||void 0===g?void 0:g.format);P.segments.unshift(C),(0,f.setSelection)(i,C)}return!0}return!1}))}},7783:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7536),n=r(2511),a=r(5544),l=r(1303),i=r(3684);t.default=function(e,t){(0,n.formatWithContentModel)(e,"setTableCellShade",(function(e){var r=(0,a.getFirstSelectedTable)(e);return!!r&&((0,l.normalizeTable)(r),r.rows.forEach((function(e){return e.cells.forEach((function(e){(0,o.default)(e)&&(0,i.setTableCellBackgroundColor)(e,t,!0)}))})),!0)}))}},6154:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e,t,r,n){(0,o.formatSegmentWithContentModel)(e,t,(function(t,o,a){"Image"==(null==a?void 0:a.segmentType)&&(r(a),n&&e.triggerPluginEvent(19,n))}),void 0,void 0)}},9139:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatParagraphWithContentModel=void 0;var o=r(2511),n=r(5544);t.formatParagraphWithContentModel=function(e,t,r){(0,o.formatWithContentModel)(e,t,(function(e){var t=(0,n.getSelectedParagraphs)(e);return t.forEach(r),t.length>0}),{preservePendingFormat:!0})}},1741:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatSegmentWithContentModel=void 0;var o=r(7582),n=r(5294),a=r(2511),l=r(2976),i=r(5544);t.formatSegmentWithContentModel=function(e,t,r,s,d){(0,a.formatWithContentModel)(e,t,(function(t){var a=(0,i.getSelectedSegmentsAndParagraphs)(t,!!d),c=(0,l.getPendingFormat)(e),u=1==a.length&&"SelectionMarker"==a[0][0].segmentType;if(u){var f=a[0][1];(a=(0,n.adjustWordSelection)(t,a[0][0]).map((function(e){return[e,f]}))).length>1&&(u=!1)}var m=c?[[c,null,null]]:a.map((function(e){return[e[0].format,e[0],e[1]]})),p=!!s&&m.every((function(e){var t=(0,o.__read)(e,3),r=t[0],n=t[1],a=t[2];return s(r,n,a)}));if(m.forEach((function(e){var t=(0,o.__read)(e,2),n=t[0],a=t[1];return r(n,!p,a)})),!c&&u){var v=e.getFocusedPosition();v&&(0,l.setPendingFormat)(e,a[0][0].format,v)}return u?(e.focus(),!1):m.length>0}))}},2511:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatWithContentModel=void 0;var o=r(2976),n=r(214);t.formatWithContentModel=function(e,t,r,a){var l,i=a||{},s=i.useReducedModel,d=i.onNodeCreated,c=i.preservePendingFormat,u=i.getChangeData,f=i.skipUndoSnapshot,m=i.changeSource,p=s?{processorOverride:{child:n.reducedModelChildProcessor}}:void 0,v=e.createContentModel(p);if(r(v)){var g=function(){if(e.focus(),v&&e.setContentModel(v,{onNodeCreated:d}),c){var t=(0,o.getPendingFormat)(e),r=e.getFocusedPosition();t&&r&&(0,o.setPendingFormat)(e,t,r)}return null==u?void 0:u()};f?(g(),m&&e.triggerContentChangedEvent(m,null==u?void 0:u())):e.addUndoSnapshot(g,m||"Format",!1,{formatApiName:t}),null===(l=e.cacheContentModel)||void 0===l||l.call(e,v)}}},5915:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7582),n=r(1246),a=r(2511),l=r(4040),i=r(485),s=r(2347);t.default=function(e,t,r,c,u){void 0===r&&(r=!1),void 0===c&&(c=!1),void 0===u&&(u=!1),t.snapshotBeforePaste?e.setContent(t.snapshotBeforePaste):t.snapshotBeforePaste=e.getContent(2);var f=e.getSelectionRange(),m=f&&s.Position.getStart(f),p=function(e,t,r){var o=(0,s.createDefaultHtmlSanitizerOptions)();return o.cssStyleCallbacks["caret-color"]=function(){return!1},{eventType:10,clipboardData:t,fragment:e.getDocument().createDocumentFragment(),sanitizingOption:o,htmlBefore:"",htmlAfter:"",htmlAttributes:{},domToModelOption:{},pasteType:r}}(e,t,(0,s.getPasteType)(r,c,u)),v=function(e,t,r,o,n,a){var l=a.fragment,i=t.rawHtml,d=t.text,c=t.imageDataUri,u=e.getTrustedHTMLHandler(),f=i?(new DOMParser).parseFromString(u(i),"text/html"):void 0;return(0,s.retrieveMetadataFromClipboard)(f,a,e.getTrustedHTMLHandler()),n&&c||!o&&!d&&c?(0,s.handleImagePaste)(c,l):!o&&i&&f&&f.body?(0,s.moveChildNodes)(l,null==f?void 0:f.body):d&&(0,s.handleTextPaste)(d,r,l),e.triggerPluginEvent(10,a,!0),(0,s.sanitizePasteContent)(a,r),l}(e,t,m,r,u,p),g=(0,n.domToContentModel)(v,{isDarkMode:e.isDarkMode(),darkColorHandler:e.getDarkColorHandler(),defaultFormat:e.getDefaultFormat()},(0,o.__assign)((0,o.__assign)({},p.domToModelOption),{disableCacheElement:!0,additionalFormatParsers:(0,o.__assign)((0,o.__assign)({},p.domToModelOption),{block:(0,o.__spreadArray)([],(0,o.__read)(c?[d]:[]),!1),listLevel:(0,o.__spreadArray)([],(0,o.__read)(c?[d]:[]),!1)})}));g&&(0,a.formatWithContentModel)(e,"Paste",(function(t){return(0,i.mergeModel)(t,g,(0,l.getOnDeleteEntityCallback)(e),{mergeFormat:c?"keepSourceEmphasisFormat":"none"}),!0}),{changeSource:"Paste",getChangeData:function(){return t}})};var d=function(e,t){t.style.backgroundColor&&(t.style.backgroundColor="",delete e.backgroundColor)}},735:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},398:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},1533:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createContentModelEditor=void 0;var o=r(2347),n=r(3247);t.createContentModelEditor=function(e,t,r){var a=[new n.ContentModelPastePlugin];t&&(a=a.concat(t));var l={plugins:a,initialContent:r,getDarkColor:o.getDarkColor,defaultFormat:{fontFamily:"Calibri,Arial,Helvetica,sans-serif",fontSize:"11pt",textColor:"#000000"}};return new n.ContentModelEditor(e,l)}},2594:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createContentModelEditor=void 0;var o=r(7582),n=r(1533);Object.defineProperty(t,"createContentModelEditor",{enumerable:!0,get:function(){return n.createContentModelEditor}}),(0,o.__exportStar)(r(398),t),(0,o.__exportStar)(r(1246),t),(0,o.__exportStar)(r(3247),t)},2347:e=>{e.exports=roosterjs},7582:(e,t,r)=>{r.r(t),r.d(t,{__assign:()=>a,__asyncDelegator:()=>O,__asyncGenerator:()=>k,__asyncValues:()=>M,__await:()=>S,__awaiter:()=>p,__classPrivateFieldGet:()=>j,__classPrivateFieldIn:()=>B,__classPrivateFieldSet:()=>E,__createBinding:()=>g,__decorate:()=>i,__esDecorate:()=>d,__exportStar:()=>b,__extends:()=>n,__generator:()=>v,__importDefault:()=>x,__importStar:()=>w,__makeTemplateObject:()=>T,__metadata:()=>m,__param:()=>s,__propKey:()=>u,__read:()=>y,__rest:()=>l,__runInitializers:()=>c,__setFunctionName:()=>f,__spread:()=>_,__spreadArray:()=>C,__spreadArrays:()=>P,__values:()=>h,default:()=>A});var o=function(e,t){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},o(e,t)};function n(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var a=function(){return a=Object.assign||function(e){for(var t,r=1,o=arguments.length;r=0;i--)(n=e[i])&&(l=(a<3?n(l):a>3?n(t,r,l):n(t,r))||l);return a>3&&l&&Object.defineProperty(t,r,l),l}function s(e,t){return function(r,o){t(r,o,e)}}function d(e,t,r,o,n,a){function l(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var i,s=o.kind,d="getter"===s?"get":"setter"===s?"set":"value",c=!t&&e?o.static?e:e.prototype:null,u=t||(c?Object.getOwnPropertyDescriptor(c,o.name):{}),f=!1,m=r.length-1;m>=0;m--){var p={};for(var v in o)p[v]="access"===v?{}:o[v];for(var v in o.access)p.access[v]=o.access[v];p.addInitializer=function(e){if(f)throw new TypeError("Cannot add initializers after decoration has completed");a.push(l(e||null))};var g=(0,r[m])("accessor"===s?{get:u.get,set:u.set}:u[d],p);if("accessor"===s){if(void 0===g)continue;if(null===g||"object"!=typeof g)throw new TypeError("Object expected");(i=l(g.get))&&(u.get=i),(i=l(g.set))&&(u.set=i),(i=l(g.init))&&n.unshift(i)}else(i=l(g))&&("field"===s?n.unshift(i):u[d]=i)}c&&Object.defineProperty(c,o.name,u),f=!0}function c(e,t,r){for(var o=arguments.length>2,n=0;n0&&n[n.length-1])||6!==i[0]&&2!==i[0])){l=0;continue}if(3===i[0]&&(!n||i[1]>n[0]&&i[1]=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function y(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var o,n,a=r.call(e),l=[];try{for(;(void 0===t||t-- >0)&&!(o=a.next()).done;)l.push(o.value)}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(n)throw n.error}}return l}function _(){for(var e=[],t=0;t1||i(e,t)}))})}function i(e,t){try{(r=n[e](t)).value instanceof S?Promise.resolve(r.value.v).then(s,d):c(a[0][2],r)}catch(e){c(a[0][3],e)}var r}function s(e){i("next",e)}function d(e){i("throw",e)}function c(e,t){e(t),a.shift(),a.length&&i(a[0][0],a[0][1])}}function O(e){var t,r;return t={},o("next"),o("throw",(function(e){throw e})),o("return"),t[Symbol.iterator]=function(){return this},t;function o(o,n){t[o]=e[o]?function(t){return(r=!r)?{value:S(e[o](t)),done:!1}:n?n(t):t}:n}}function M(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,r=e[Symbol.asyncIterator];return r?r.call(e):(e=h(e),t={},o("next"),o("throw"),o("return"),t[Symbol.asyncIterator]=function(){return this},t);function o(r){t[r]=e[r]&&function(t){return new Promise((function(o,n){!function(e,t,r,o){Promise.resolve(o).then((function(t){e({value:t,done:r})}),t)}(o,n,(t=e[r](t)).done,t.value)}))}}}function T(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var F=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t};function w(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&g(t,e,r);return F(t,e),t}function x(e){return e&&e.__esModule?e:{default:e}}function j(e,t,r,o){if("a"===r&&!o)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!o:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?o:"a"===r?o.call(e):o?o.value:t.get(e)}function E(e,t,r,o,n){if("m"===o)throw new TypeError("Private method is not writable");if("a"===o&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===o?n.call(e,r):n?n.value=r:t.set(e,r),r}function B(e,t){if(null===t||"object"!=typeof t&&"function"!=typeof t)throw new TypeError("Cannot use 'in' operator on non-object");return"function"==typeof e?t===e:e.has(t)}const A={__extends:n,__assign:a,__rest:l,__decorate:i,__param:s,__metadata:m,__awaiter:p,__generator:v,__createBinding:g,__exportStar:b,__values:h,__read:y,__spread:_,__spreadArrays:P,__spreadArray:C,__await:S,__asyncGenerator:k,__asyncDelegator:O,__asyncValues:M,__makeTemplateObject:T,__importStar:w,__importDefault:x,__classPrivateFieldGet:j,__classPrivateFieldSet:E,__classPrivateFieldIn:B}}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var a=t[o]={exports:{}};return e[o](a,a.exports,r),a.exports}r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o=r(2594);roosterjsContentModel=o})(); +var roosterjsContentModel;(()=>{"use strict";var e={9968:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createDomToModelContext=void 0;var o=r(7582),n=r(8659),a=r(3647),l=r(976);t.createDomToModelContext=function(e,t){var r,i=(0,o.__assign)((0,o.__assign)({},e||{isDarkMode:!1}),{blockFormat:{},segmentFormat:{},zoomScaleFormat:{},isInSelection:!1,listFormat:{levels:[],threadItemCounts:[]},link:{format:{},dataset:{}},code:{format:{}},blockDecorator:{format:{},tagName:""},elementProcessors:(0,o.__assign)((0,o.__assign)({},a.defaultProcessorMap),(null==t?void 0:t.processorOverride)||{}),defaultStyles:(0,o.__assign)((0,o.__assign)({},l.defaultStyleMap),(null==t?void 0:t.defaultStyleOverride)||{}),formatParsers:(0,n.getFormatParsers)(null==t?void 0:t.formatParserOverride,null==t?void 0:t.additionalFormatParsers),defaultElementProcessors:a.defaultProcessorMap,defaultFormatParsers:n.defaultFormatParsers,allowCacheElement:!(null==t?void 0:t.disableCacheElement)}),s=null==t?void 0:t.selectionRange;switch(null==s?void 0:s.type){case 0:var d=s.ranges[0];d&&(r=d.commonAncestorContainer,i.regularSelection={startContainer:d.startContainer,startOffset:d.startOffset,endContainer:d.endContainer,endOffset:d.endOffset,isSelectionCollapsed:d.collapsed});break;case 1:s.coordinates&&s.table&&(r=s.table,i.tableSelection={table:s.table,firstCell:(0,o.__assign)({},s.coordinates.firstCell),lastCell:(0,o.__assign)({},s.coordinates.lastCell)});break;case 2:r=s.image,i.imageSelection={image:s.image}}return r&&(i.selectionRootNode=r),i}},3647:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.defaultProcessorMap=void 0;var o=r(2697),n=r(9384),a=r(9633),l=r(2130),i=r(7883),s=r(6905),d=r(5718),c=r(9004),u=r(1001),f=r(2625),m=r(3092),p=r(215),v=r(4748),g=r(1091),b=r(5476),h=r(2791),y=r(8191),_=r(970),P=r(9892);t.defaultProcessorMap={a:g.linkProcessor,b:v.knownElementProcessor,blockquote:v.knownElementProcessor,br:o.brProcessor,code:a.codeProcessor,div:v.knownElementProcessor,em:v.knownElementProcessor,font:d.fontProcessor,i:v.knownElementProcessor,img:p.imageProcessor,h1:f.headingProcessor,h2:f.headingProcessor,h3:f.headingProcessor,h4:f.headingProcessor,h5:f.headingProcessor,h6:f.headingProcessor,hr:m.hrProcessor,li:b.listItemProcessor,ol:h.listProcessor,p:y.pProcessor,pre:c.formatContainerProcessor,s:v.knownElementProcessor,span:v.knownElementProcessor,strike:v.knownElementProcessor,strong:v.knownElementProcessor,sub:v.knownElementProcessor,sup:v.knownElementProcessor,table:_.tableProcessor,u:v.knownElementProcessor,ul:h.listProcessor,"*":u.generalProcessor,"#text":P.textProcessor,element:i.elementProcessor,entity:s.entityProcessor,child:n.childProcessor,delimiter:l.delimiterProcessor}},1807:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.domToContentModel=void 0;var o=r(5733),n=r(9968),a=r(8767),l=r(9366),i=r(7573),s=r(2347),d=r(5571);t.domToContentModel=function(e,t,r){var c=(0,o.createContentModelDocument)(t.defaultFormat),u=(0,n.createDomToModelContext)(t,r);return(0,s.safeInstanceOf)(e,"DocumentFragment")?u.elementProcessors.child(c,e,u):((0,l.parseFormat)(e,[i.rootDirectionFormatHandler.parse],u.blockFormat,u),(0,l.parseFormat)(e,[d.zoomScaleFormatHandler.parse],u.zoomScaleFormat,u),(r.includeRoot?u.elementProcessors.element:u.elementProcessors.child)(c,e,u)),(0,a.normalizeContentModel)(c),c}},7304:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.blockProcessor=void 0;var o=r(7582),n=r(9275),a=r(9004),l=r(5092),i=r(9366),s=["A","CODE"];t.blockProcessor=function(e,t,r,d){var c=r.blockDecorator.tagName?r.blockDecorator:void 0,u=s.indexOf(t.tagName)>=0;(0,i.parseFormat)(t,r.formatParsers.block,r.blockFormat,r);var f=(0,o.__assign)({},r.blockFormat);if((0,i.parseFormat)(t,r.formatParsers.container,f,r),a.ContextStyles.forEach((function(e){f[e]&&(r.blockFormat[e]=f[e])})),!u){var m=(0,l.createParagraph)(!1,f,d,c);(0,n.addBlock)(e,m)}r.elementProcessors.child(e,t,r)}},2697:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.brProcessor=void 0;var o=r(8513),n=r(7826);t.brProcessor=function(e,t,r){var a=(0,n.createBr)(r.segmentFormat);r.isInSelection&&(a.isSelected=!0),(0,o.addSegment)(e,a,r.blockFormat)}},9384:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleRegularSelection=t.processChildNode=t.childProcessor=void 0;var o=r(7582),n=r(9871),a=r(8063),l=r(3233);function i(e,t,r){(0,l.isNodeOfType)(t,1)&&"none"!=t.style.display?r.elementProcessors.element(e,t,r):(0,l.isNodeOfType)(t,3)&&r.elementProcessors["#text"](e,t,r)}function s(e,t,r,o,a){e==o&&(t.isInSelection=!0,(0,n.addSelectionMarker)(r,t)),e==a&&(t.regularSelection.isSelectionCollapsed||(0,n.addSelectionMarker)(r,t),t.isInSelection=!1)}t.childProcessor=function(e,t,r){for(var n=(0,o.__read)((0,a.getRegularSelectionOffsets)(r,t),2),l=n[0],d=n[1],c=0,u=t.firstChild;u;u=u.nextSibling)s(c,r,e,l,d),i(e,u,r),c++;s(c,r,e,l,d)},t.processChildNode=i,t.handleRegularSelection=s},9633:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.codeProcessor=void 0;var o=r(4748),n=r(9366),a=r(202);t.codeProcessor=function(e,t,r){(0,a.stackFormat)(r,{code:"codeDefault"},(function(){(0,n.parseFormat)(t,r.formatParsers.code,r.code.format,r),(0,o.knownElementProcessor)(e,t,r)}))}},2130:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.delimiterProcessor=void 0;var o=r(7582),n=r(8063),a=r(9384);t.delimiterProcessor=function(e,t,r){for(var l=0,i=(0,o.__read)((0,n.getRegularSelectionOffsets)(r,t),2),s=i[0],d=i[1],c=t.firstChild;c;c=c.nextSibling)(0,a.handleRegularSelection)(l,r,e,s,d),l++;(0,a.handleRegularSelection)(l,r,e,s,d)}},7883:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.elementProcessor=void 0;var o=r(2347);t.elementProcessor=function(e,t,r){var n=t.tagName.toLowerCase(),a=function(e,t){return e.className&&(0,o.getEntityFromElement)(e)||"false"==e.contentEditable?t.elementProcessors.entity:null}(t,r)||function(e,t){return(0,o.getDelimiterFromElement)(e)?t.elementProcessors.delimiter:null}(t,r)||r.elementProcessors[n]||n.indexOf(":")>=0&&r.elementProcessors.child||r.elementProcessors["*"];a(e,t,r)}},6905:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.entityProcessor=void 0;var o=r(9275),n=r(8513),a=r(1033),l=r(2347),i=r(2404),s=r(202);t.entityProcessor=function(e,t,r){var d=(0,l.getEntityFromElement)(t)||{isReadonly:!0},c=d.id,u=d.type,f=d.isReadonly,m=(0,i.isBlockElement)(t,r);(0,s.stackFormat)(r,{segment:m?"empty":void 0,paragraph:"empty"},(function(){var l=r.allowCacheElement?t:t.cloneNode(!0);r.allowCacheElement||(l.style.backgroundColor=t.style.backgroundColor||"inherit",l.style.color=t.style.color||"inherit");var i=(0,a.createEntity)(l,f,r.segmentFormat,c,u);r.isInSelection&&(i.isSelected=!0),m?(0,o.addBlock)(e,i):(0,n.addSegment)(e,i)}))}},5718:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.fontProcessor=void 0;var o=r(2404),n=r(9366),a=r(202),l=["10px","13px","16px","18px","24px","32px","48px"];t.fontProcessor=function(e,t,r){(0,a.stackFormat)(r,{segment:(0,o.isBlockElement)(t,r)?"shallowCloneForBlock":"shallowClone"},(function(){var o,a,i=t.getAttribute("face"),s=(o=t.getAttribute("size"),a=parseInt(o||""),Number.isNaN(a)?void 0:a<1?l[0]:a>l.length?l[l.length-1]:l[a-1]),d=t.getAttribute("color"),c=r.segmentFormat;i&&(c.fontFamily=i),s&&(c.fontSize=s),d&&(c.textColor=d),(0,n.parseFormat)(t,r.formatParsers.segment,r.segmentFormat,r),r.elementProcessors.child(e,t,r)}))}},9004:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatContainerProcessor=t.ContextStyles=void 0;var o=r(7582),n=r(9275),a=r(2766),l=r(5092),i=r(3149),s=r(9366),d=r(3963),c=r(202);t.ContextStyles=["marginLeft","marginRight","paddingLeft","paddingRight"],t.formatContainerProcessor=function(e,r,u){(0,c.stackFormat)(u,{segment:"shallowCloneForBlock",paragraph:"shallowClone"},(function(){(0,s.parseFormat)(r,u.formatParsers.block,u.blockFormat,u),(0,s.parseFormat)(r,u.formatParsers.segmentOnBlock,u.segmentFormat,u);var l=(0,o.__assign)({},u.blockFormat);(0,s.parseFormat)(r,u.formatParsers.container,l,u);var c="block"==(0,i.getDefaultStyle)(r,u).display?r.tagName.toLowerCase():"div",f=(0,a.createFormatContainer)(c,l);if(t.ContextStyles.forEach((function(e){delete u.blockFormat[e]})),u.elementProcessors.child(f,r,u),r.style.fontSize&&0==parseInt(r.style.fontSize)&&(f.zeroFontSize=!0),function(e){var t=e.blocks[0];return"div"==e.tagName&&1==e.blocks.length&&"Paragraph"==t.blockType&&t.isImplicit}(f)){var m=f.blocks[0];f.zeroFontSize&&(m.segmentFormat=Object.assign({},m.segmentFormat,{fontSize:"0"})),Object.assign(m.format,f.format),(0,d.setParagraphNotImplicit)(m),(0,n.addBlock)(e,m)}else(0,n.addBlock)(e,f)})),(0,n.addBlock)(e,(0,l.createParagraph)(!0,u.blockFormat))}},1001:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generalProcessor=void 0;var o=r(9275),n=r(3883),a=r(8513),l=r(9237),i=r(8885),s=r(2404),d=r(202),c=function(e,t,r){var n=(0,l.createGeneralBlock)(t),a=r.isInSelection;(0,d.stackFormat)(r,{segment:"empty",paragraph:"empty",link:"empty"},(function(){(0,o.addBlock)(e,n),r.elementProcessors.child(n,t,r)})),a&&r.isInSelection&&(n.isSelected=!0)},u=function(e,t,r){var o=(0,i.createGeneralSegment)(t,r.segmentFormat),l=r.isInSelection;(0,n.addDecorators)(o,r),(0,a.addSegment)(e,o),(0,d.stackFormat)(r,{segment:"empty"},(function(){r.elementProcessors.child(o,t,r)})),l&&r.isInSelection&&(o.isSelected=!0)};t.generalProcessor=function(e,t,r){((0,s.isBlockElement)(t,r)?c:u)(e,t,r)}},2625:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.headingProcessor=void 0;var o=r(9275),n=r(7304),a=r(5092),l=r(24),i=r(9366),s=r(202);t.headingProcessor=function(e,t,r){(0,s.stackFormat)(r,{segment:"shallowCloneForBlock",paragraph:"shallowClone",blockDecorator:"empty"},(function(){var o={};(0,i.parseFormat)(t,r.formatParsers.segmentOnBlock,o,r),r.blockDecorator=(0,l.createParagraphDecorator)(t.tagName,o),(0,n.blockProcessor)(e,t,r)})),(0,o.addBlock)(e,(0,a.createParagraph)(!0,r.blockFormat))}},3092:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.hrProcessor=void 0;var o=r(9275),n=r(7110),a=r(9366),l=r(202);t.hrProcessor=function(e,t,r){(0,l.stackFormat)(r,{paragraph:"shallowClone"},(function(){(0,a.parseFormat)(t,r.formatParsers.divider,r.blockFormat,r);var l=(0,n.createDivider)("hr",r.blockFormat);t.size&&(l.size=t.size),r.isInSelection&&(l.isSelected=!0),(0,o.addBlock)(e,l)}))}},215:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.imageProcessor=void 0;var o=r(3883),n=r(8513),a=r(5566),l=r(9366),i=r(202);t.imageProcessor=function(e,t,r){(0,i.stackFormat)(r,{segment:"shallowClone"},(function(){var i,s=r.segmentFormat;(0,l.parseFormat)(t,r.formatParsers.segment,s,r),(0,l.parseFormat)(t,r.formatParsers.image,s,r),(0,l.parseFormat)(t,r.formatParsers.block,r.blockFormat,r);var d=(0,a.createImage)(t.src,s),c=t.alt,u=t.title;(0,l.parseFormat)(t,r.formatParsers.dataset,d.dataset,r),(0,o.addDecorators)(d,r),c&&(d.alt=c),u&&(d.title=u),r.isInSelection&&(d.isSelected=!0),(null===(i=r.imageSelection)||void 0===i?void 0:i.image)==t&&(d.isSelectedAsImageSelection=!0,d.isSelected=!0),(0,n.addSegment)(e,d)}))}},4748:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.knownElementProcessor=void 0;var o=r(9275),n=r(7304),a=r(5092),l=r(9004),i=r(3149),s=r(2404),d=r(9366),c=r(202),u=["marginBottom","marginTop","paddingBottom","paddingTop","paddingLeft","paddingRight","borderTopWidth","borderBottomWidth","borderLeftWidth","borderRightWidth","width","height","maxWidth","maxHeight","minWidth","minHeight"],f=["H1","H2","H3","H4","H5","H6","P","A"],m=["A","CODE"];t.knownElementProcessor=function(e,t,r){var p=(0,s.isBlockElement)(t,r);if((p||"inline-block"==t.style.display)&&function(e,t){if(f.indexOf(e.tagName)>=0)return!1;var r=e.style,o=(0,i.getDefaultStyle)(e,t),n=r.getPropertyValue("background-color");return!(!n||"transparent"==n)||(!!u.some((function(e){return parseInt(r[e]||o[e]||"")>0}))||("auto"==r.marginLeft||"auto"==r.marginRight||!!e.getAttribute("align")))}(t,r))(0,l.formatContainerProcessor)(e,t,r);else if(p){var v=r.blockDecorator.tagName?r.blockDecorator:void 0,g=m.indexOf(t.tagName)>=0;(0,c.stackFormat)(r,{segment:"shallowCloneForBlock",paragraph:"shallowClone"},(function(){var o={};(0,d.parseFormat)(t,r.formatParsers.segmentOnBlock,o,r),Object.assign(r.segmentFormat,o),(0,n.blockProcessor)(e,t,r,o)})),p&&!g&&(0,o.addBlock)(e,(0,a.createParagraph)(!0,r.blockFormat,void 0,v))}else(0,c.stackFormat)(r,{segment:"shallowClone",paragraph:"shallowClone",link:"cloneFormat"},(function(){(0,d.parseFormat)(t,r.formatParsers.segment,r.segmentFormat,r),r.link.format.href&&"A"!=t.tagName&&(0,d.parseFormat)(t,r.formatParsers.segmentUnderLink,r.link.format,r),r.elementProcessors.child(e,t,r)}))}},1091:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.linkProcessor=void 0;var o=r(4748),n=r(9366),a=r(202);t.linkProcessor=function(e,t,r){t.hasAttribute("href")?(0,a.stackFormat)(r,{link:"linkDefault"},(function(){(0,n.parseFormat)(t,r.formatParsers.link,r.link.format,r),(0,n.parseFormat)(t,r.formatParsers.dataset,r.link.dataset,r),(0,o.knownElementProcessor)(e,t,r)})):(0,o.knownElementProcessor)(e,t,r)}},5476:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.listItemProcessor=void 0;var o=r(7724),n=r(9366),a=r(202);t.listItemProcessor=function(e,t,r){var l,i=r.listFormat;if(i.listParent&&i.levels.length>0)(0,a.stackFormat)(r,{segment:"shallowCloneForBlock"},(function(){(0,n.parseFormat)(t,r.formatParsers.segmentOnBlock,r.segmentFormat,r);var e=(0,o.createListItem)(i.levels,r.segmentFormat);(0,n.parseFormat)(t,r.formatParsers.listItemElement,e.format,r),i.listParent.blocks.push(e),(0,n.parseFormat)(t,r.formatParsers.listItem,e.levels[e.levels.length-1],r),r.elementProcessors.child(e,t,r);var a=e.blocks[0];1==e.blocks.length&&"Paragraph"==a.blockType&&a.isImplicit&&(Object.assign(e.format,a.format),a.format={})}));else{var s=null===(l=i.listParent)||void 0===l?void 0:l.blocks,d=null==s?void 0:s[(null==s?void 0:s.length)-1];r.elementProcessors["*"]("BlockGroup"==(null==d?void 0:d.blockType)?d:e,t,r)}}},2791:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.listProcessor=void 0;var o=r(7582),n=r(9366),a=r(202),l=r(2362);t.listProcessor=function(e,t,r){(0,a.stackFormat)(r,{segment:"shallowCloneForBlock",paragraph:"shallowCloneForGroup"},(function(){var a=(0,o.__assign)({},r.blockFormat),i=r.listFormat;!function(e,t,r){var o={};(0,n.parseFormat)(e,t.formatParsers.dataset,o,t),(0,l.updateListMetadata)({dataset:o},(function(e){return Object.assign(r,e||{}),null}))}(t,r,a),(0,n.parseFormat)(t,r.formatParsers.listLevel,a,r),(0,n.parseFormat)(t,r.formatParsers.segment,r.segmentFormat,r);var s=i.listParent;i.listParent=i.listParent||e,i.levels.push(a);try{r.elementProcessors.child(e,t,r)}finally{i.levels.pop(),i.listParent=s}}))}},8191:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.pProcessor=void 0;var o=r(9275),n=r(7304),a=r(5092),l=r(24),i=r(9366),s=r(202);t.pProcessor=function(e,t,r){(0,s.stackFormat)(r,{blockDecorator:"empty",segment:"shallowCloneForBlock",paragraph:"shallowClone"},(function(){r.blockDecorator=(0,l.createParagraphDecorator)(t.tagName);var o={};(0,i.parseFormat)(t,r.formatParsers.segmentOnBlock,o,r),Object.assign(r.segmentFormat,o),(0,n.blockProcessor)(e,t,r,o)})),(0,o.addBlock)(e,(0,a.createParagraph)(!0,r.blockFormat))}},970:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.tableProcessor=void 0;var o=r(7582),n=r(9275),a=r(988),l=r(1160),i=r(3095),s=r(9366),d=r(202);function c(e){for(var t=[],r=e[e.length-1],o=e.length-2;o>=0;o--)void 0===e[o]?t[o]=0:(t[o]=r-e[o],r=e[o]);return t}t.tableProcessor=function(e,t,r){(0,d.stackFormat)(r,{segment:"shallowCloneForBlock",paragraph:"shallowCloneForGroup"},(function(){(0,s.parseFormat)(t,r.formatParsers.block,r.blockFormat,r);var u=(0,a.createTable)(t.rows.length,r.blockFormat),f=r.tableSelection||{},m=f.table,p=f.firstCell,v=f.lastCell,g=m==t&&!!p&&!!v;r.allowCacheElement&&(u.cachedElement=t),(0,s.parseFormat)(t,r.formatParsers.table,u.format,r),(0,s.parseFormat)(t,r.formatParsers.tableBorder,u.format,r),(0,s.parseFormat)(t,r.formatParsers.segmentOnBlock,r.segmentFormat,r),(0,s.parseFormat)(t,r.formatParsers.dataset,u.dataset,r),(0,n.addBlock)(e,u);for(var b=[0],h=[0],y=r.zoomScaleFormat.zoomScale||1,_=function(e){var n=t.rows[e],a=u.rows[e];r.allowCacheElement&&(a.cachedElement=n),(0,s.parseFormat)(n,r.formatParsers.tableRow,a.format,r),(0,d.stackFormat)(r,{paragraph:"shallowClone",segment:"shallowClone"},(function(){var t=n.parentElement,c=null==t?void 0:t.tagName;!t||"TBODY"!=c&&"THEAD"!=c&&"TFOOT"!=c||((0,s.parseFormat)(t,r.formatParsers.block,r.blockFormat,r),(0,s.parseFormat)(t,r.formatParsers.segmentOnBlock,r.segmentFormat,r)),(0,s.parseFormat)(n,r.formatParsers.block,r.blockFormat,r),(0,s.parseFormat)(n,r.formatParsers.segmentOnBlock,r.segmentFormat,r);for(var f,m=function(t,c){for(;a.cells[c];c++);var m=n.cells[t],_=r.isInSelection,P=c+m.colSpan,C=e+m.rowSpan,S=void 0===b[P],k=void 0===h[C];if(S||k){var O=(0,i.getBoundingClientRect)(m);(O.width>0||O.height>0)&&(S&&(b[P]=b[c]+O.width/y),k&&(h[C]=h[e]+O.height/y))}(0,d.stackFormat)(r,{paragraph:"shallowClone",segment:"shallowClone"},(function(){(0,s.parseFormat)(m,r.formatParsers.block,r.blockFormat,r),(0,s.parseFormat)(m,r.formatParsers.segmentOnTableCell,r.segmentFormat,r);var t=(0,o.__assign)({},r.blockFormat),n={};(0,s.parseFormat)(m,r.formatParsers.tableCell,t,r),(0,s.parseFormat)(m,r.formatParsers.tableBorder,t,r),(0,s.parseFormat)(m,r.formatParsers.dataset,n,r);for(var a=1;a<=m.colSpan;a++,c++)for(var i=1;i<=m.rowSpan;i++){var d=1==a&&1==i,f=(0,l.createTableCell)(a>1,i>1,"TH"==m.tagName,t);f.dataset=(0,o.__assign)({},n);var b=u.rows[e+i-1];if(b&&(b.cells[c]=f),d){r.allowCacheElement&&(f.cachedElement=m);var h=r.listFormat,y=h.listParent,P=h.levels;r.listFormat.listParent=void 0,r.listFormat.levels=[];try{r.elementProcessors.child(f,m,r)}finally{r.listFormat.listParent=y,r.listFormat.levels=P}}var C=r.isInSelection;(_&&C||g&&e>=p.y&&e<=v.y&&c>=p.x&&c<=v.x)&&(f.isSelected=!0)}})),f=c},_=0,P=0;_0&&(e.height=C[t])}))}))}},9892:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.textProcessor=void 0;var o=r(7582),n=r(3883),a=r(8513),l=r(9871),i=r(8310),s=r(840),d=r(8063),c=r(5589);t.textProcessor=function(e,t,r){var n=t.nodeValue||"",a=(0,o.__read)((0,d.getRegularSelectionOffsets)(r,t),2),i=a[0],s=a[1];i>=0&&(f(e,n.substring(0,i),r),r.isInSelection=!0,(0,l.addSelectionMarker)(e,r),n=n.substring(i),s-=i),s>=0&&(f(e,n.substring(0,s),r),r.regularSelection.isSelectionCollapsed||(0,l.addSelectionMarker)(e,r),r.isInSelection=!1,n=n.substring(s)),f(e,n,r)};var u=["pre","pre-wrap","pre-line","break-spaces"];function f(e,t,r){if(t){var o=e.blocks[e.blocks.length-1],l="Paragraph"==(null==o?void 0:o.blockType)?o:null,d=null==l?void 0:l.segments[l.segments.length-1];if("Text"==(null==d?void 0:d.segmentType)&&!!d.isSelected==!!r.isInSelection&&(0,i.areSameFormats)(d.format,r.segmentFormat)&&(0,i.areSameFormats)(d.link||{},r.link.format||{})&&(0,i.areSameFormats)(d.code||{},r.code.format||{}))d.text+=t;else if(!(0,c.hasSpacesOnly)(t)||(null==l?void 0:l.segments.length)>0||u.indexOf((null==l?void 0:l.format.whiteSpace)||"")>=0){var f=(0,s.createText)(t,r.segmentFormat);r.isInSelection&&(f.isSelected=!0),(0,n.addDecorators)(f,r),(0,a.addSegment)(e,f,r.blockFormat)}}}},9871:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.addSelectionMarker=void 0;var o=r(3883),n=r(8513),a=r(5114);t.addSelectionMarker=function(e,t){var r=(0,a.createSelectionMarker)(t.segmentFormat);(0,o.addDecorators)(r,t),(0,n.addSegment)(e,r,t.blockFormat)}},8310:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.areSameFormats=void 0;var o=r(2347);t.areSameFormats=function(e,t){if(e==t)return!0;var r=(0,o.getObjectKeys)(e),n=(0,o.getObjectKeys)(t);return r.length==n.length&&r.every((function(r){return e[r]==t[r]}))}},3095:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getBoundingClientRect=void 0,t.getBoundingClientRect=function(e){return e.getBoundingClientRect()}},3149:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getDefaultStyle=void 0,t.getDefaultStyle=function(e,t){var r=e.tagName.toLowerCase();return t.defaultStyles[r]||{}}},8063:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getRegularSelectionOffsets=void 0,t.getRegularSelectionOffsets=function(e,t){var r,o;return[(null===(r=e.regularSelection)||void 0===r?void 0:r.startContainer)==t?e.regularSelection.startOffset:-1,(null===(o=e.regularSelection)||void 0===o?void 0:o.endContainer)==t?e.regularSelection.endOffset:-1]}},2404:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isBlockElement=void 0;var o=r(3149),n=["block","list-item","table","table-cell","flex"];t.isBlockElement=function(e,t){var r=e.style.display||(0,o.getDefaultStyle)(e,t).display||"";return n.indexOf(r)>=0}},9366:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseFormat=void 0;var o=r(3149);t.parseFormat=function(e,t,r,n){var a=(0,o.getDefaultStyle)(e,n);t.forEach((function(t){null==t||t(r,e,n,a)}))}},202:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.stackFormat=void 0;var o=r(7582),n=r(2347),a=["backgroundColor"],l=["marginLeft","marginRight","paddingLeft","paddingRight"];function i(e,t){switch(t){case"empty":return{};case void 0:return e;default:var r=(0,o.__assign)({},e);return(0,n.getObjectKeys)(e).forEach((function(e){("shallowCloneForBlock"==t&&a.indexOf(e)>=0||"shallowCloneForGroup"==t&&l.indexOf(e)>=0)&&delete r[e]})),r}}t.stackFormat=function(e,t,r){var n,a=e.segmentFormat,l=e.blockFormat,s=e.link,d=e.code,c=e.blockDecorator,u=t.segment,f=t.paragraph,m=t.link,p=t.code,v=t.blockDecorator;try{e.segmentFormat=i(a,u),e.blockFormat=i(l,f),e.link=function(e,t){switch(t){case"linkDefault":return{format:{underline:!0},dataset:{}};case"empty":return{format:{},dataset:{}};default:return{dataset:e.dataset,format:(0,o.__assign)({},e.format)}}}(s,m),e.code=function(e,t){switch(t){case"codeDefault":return{format:{fontFamily:"monospace"}};case"empty":return{format:{}};default:return e}}(d,p),e.blockDecorator=(n=c,"empty"===v?{format:{},tagName:""}:n),r()}finally{e.segmentFormat=a,e.blockFormat=l,e.link=s,e.code=d,e.blockDecorator=c}}},3233:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isNodeOfType=void 0,t.isNodeOfType=function(e,t){return!!e&&e.nodeType==t}},2362:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.updateListMetadata=void 0;var o=r(2347),n=r(6245),a=(0,o.createObjectDefinition)({orderedStyleType:(0,o.createNumberDefinition)(!0,void 0,1,20),unorderedStyleType:(0,o.createNumberDefinition)(!0,void 0,1,9)},!0,!0);t.updateListMetadata=function(e,t){return(0,n.updateMetadata)(e,t,a)}},6245:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.hasMetadata=t.updateMetadata=void 0;var o=r(2347),n="editingInfo";t.updateMetadata=function(e,t,r){var a=e.dataset[n],l=null;try{l=JSON.parse(a)}catch(e){}return r&&!(0,o.validate)(l,r)&&(l=null),t&&((l=t(l))?r&&!(0,o.validate)(l,r)||(e.dataset[n]=JSON.stringify(l)):delete e.dataset[n]),l},t.hasMetadata=function(e){return!!e.dataset[n]}},5589:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.normalizeText=t.hasSpacesOnly=t.isSpace=t.isPunctuation=void 0;var r=/^[\r\n\t ]*$/,o=/[\u2000\u2009\u200a​\u200b​\u202f\u205f​\u3000\s\t\r\n]/gm;t.isPunctuation=function(e){return'.,?!:"()[]\\/'.indexOf(e)>=0},t.isSpace=function(e){var t,r=null!==(t=null==e?void 0:e.charCodeAt(0))&&void 0!==t?t:0;return 160==r||32==r||o.test(e)},t.hasSpacesOnly=function(e){return r.test(e)},t.normalizeText=function(e,t){return e.replace(t?/^\u0020+/:/\u0020+$/," ")}},9980:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.directionFormatHandler=void 0,t.directionFormatHandler={parse:function(e,t,r,o){var n=t.style.direction||t.dir||o.direction;n&&(e.direction="rtl"==n?"rtl":"ltr")},apply:function(e,t){e.direction&&(t.style.direction=e.direction)}}},1276:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.displayFormatHandler=void 0,t.displayFormatHandler={parse:function(e,t){var r=t.style.display;r&&(e.display=r)},apply:function(e,t){e.display&&(t.style.display=e.display)}}},7762:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.htmlAlignFormatHandler=void 0;var o=r(3612),n=r(9980);t.htmlAlignFormatHandler={parse:function(e,t,r,a){n.directionFormatHandler.parse(e,t,r,a);var l=t.getAttribute("align");l&&(e.htmlAlign=(0,o.calcAlign)(l,e.direction),delete e.textAlign,delete r.blockFormat.textAlign)},apply:function(e,t){var r="rtl"==e.direction?"rtl":"ltr";e.htmlAlign&&t.setAttribute("align",o.ResultMap[e.htmlAlign][r])}}},4652:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.lineHeightFormatHandler=void 0,t.lineHeightFormatHandler={parse:function(e,t,r,o){var n=t.style.lineHeight||o.lineHeight;n&&"inherit"!=n&&(e.lineHeight=n)},apply:function(e,t){e.lineHeight&&(t.style.lineHeight=e.lineHeight)}}},4116:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.marginFormatHandler=void 0;var o=r(8704),n=["marginTop","marginRight","marginBottom","marginLeft"];t.marginFormatHandler={parse:function(e,t,r,a){n.forEach((function(r){var n=t.style[r]||a[r];if(n)switch(r){case"marginTop":case"marginBottom":e[r]=n;break;case"marginLeft":case"marginRight":e[r]=e[r]?(0,o.parseValueWithUnit)(e[r]||"",t)+(0,o.parseValueWithUnit)(n,t)+"px":n}}))},apply:function(e,t,r){n.forEach((function(o){var n=e[o];n!=r.implicitFormat[o]&&(t.style[o]=n||"0")}))}}},632:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.paddingFormatHandler=void 0;var r=["paddingTop","paddingRight","paddingBottom","paddingLeft"];t.paddingFormatHandler={parse:function(e,t){r.forEach((function(r){var o=t.style[r];o&&(e[r]=o)}))},apply:function(e,t){r.forEach((function(r){var o=e[r];o&&(t.style[r]=o)}))}}},9568:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.textAlignFormatHandler=void 0;var o=r(3612),n=r(9980);t.textAlignFormatHandler={parse:function(e,t,r,a){var l;n.directionFormatHandler.parse(e,t,r,a);var i=t.style.textAlign||a.textAlign;"LI"==t.tagName&&"flex"===(null===(l=t.parentElement)||void 0===l?void 0:l.style.display)&&"column"===t.parentElement.style.flexDirection&&t.style.alignSelf&&(i=t.style.alignSelf),i&&(e.textAlign=(0,o.calcAlign)(i,e.direction))},apply:function(e,t){var r="rtl"==e.direction?"rtl":"ltr";if(e.textAlign){var n=t.parentElement,a=null==n?void 0:n.tagName;"LI"!=t.tagName||!n||"OL"!=a&&"UL"!=a?t.style.textAlign=o.ResultMap[e.textAlign][r]:(t.style.alignSelf=e.textAlign,t.parentElement.style.flexDirection="column",t.parentElement.style.display="flex")}}}},1167:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.whiteSpaceFormatHandler=void 0,t.whiteSpaceFormatHandler={parse:function(e,t,r,o){var n=t.style.whiteSpace||o.whiteSpace;n&&(e.whiteSpace=n)},apply:function(e,t,r){var o=r.implicitFormat.whiteSpace;e.whiteSpace!=o&&(t.style.whiteSpace=e.whiteSpace||"normal")}}},8891:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.backgroundColorFormatHandler=void 0;var o=r(5150);t.backgroundColorFormatHandler={parse:function(e,t,r,n){var a=(0,o.getColor)(t,!0,r.darkColorHandler,r.isDarkMode)||n.backgroundColor;a&&(e.backgroundColor=a)},apply:function(e,t,r){e.backgroundColor&&(0,o.setColor)(t,e.backgroundColor,!0,r.darkColorHandler,r.isDarkMode)}}},5930:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.borderBoxFormatHandler=void 0,t.borderBoxFormatHandler={parse:function(e,t){var r;"border-box"==(null===(r=t.style)||void 0===r?void 0:r.boxSizing)&&(e.useBorderBox=!0)},apply:function(e,t){e.useBorderBox&&(t.style.boxSizing="border-box")}}},1136:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.borderFormatHandler=t.BorderKeys=void 0,t.BorderKeys=["borderTop","borderRight","borderBottom","borderLeft","borderRadius"],t.borderFormatHandler={parse:function(e,r){t.BorderKeys.forEach((function(t){var o=r.style[t];o&&(e[t]="none"==o?"":o)}))},apply:function(e,r){t.BorderKeys.forEach((function(t){var o=e[t];o&&(r.style[t]=o)}))}}},8577:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.boxShadowFormatHandler=void 0,t.boxShadowFormatHandler={parse:function(e,t){var r;(null===(r=t.style)||void 0===r?void 0:r.boxShadow)&&(e.boxShadow=t.style.boxShadow)},apply:function(e,t){e.boxShadow&&(t.style.boxShadow=e.boxShadow)}}},1453:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.datasetFormatHandler=void 0;var o=r(2347);t.datasetFormatHandler={parse:function(e,t){var r=t.dataset;(0,o.getObjectKeys)(r).forEach((function(t){e[t]=r[t]||""}))},apply:function(e,t){(0,o.getObjectKeys)(e).forEach((function(r){t.dataset[r]=e[r]}))}}},6883:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.idFormatHandler=void 0,t.idFormatHandler={parse:function(e,t){t.id&&(e.id=t.id)},apply:function(e,t){e.id&&(t.id=e.id)}}},7302:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.sizeFormatHandler=void 0;var r=/[\d\.]+%/;function o(e,t){var o=e.getAttribute(t),n=parseInt(o||"");return o&&r.test(o)?o:Number.isNaN(n)?void 0:n+"px"}t.sizeFormatHandler={parse:function(e,t,r){var n=t.style.width||o(t,"width"),a=t.style.height||o(t,"height"),l=t.style.maxWidth,i=t.style.maxHeight,s=t.style.minWidth,d=t.style.minHeight;n&&(e.width=n),a&&(e.height=a),l&&(e.maxWidth=l),i&&(e.maxHeight=i),s&&(e.minWidth=s),d&&(e.minHeight=d)},apply:function(e,t){e.width&&(t.style.width=e.width),e.height&&(t.style.height=e.height),e.maxWidth&&(t.style.maxWidth=e.maxWidth),e.maxHeight&&(t.style.maxHeight=e.maxHeight),e.minWidth&&(t.style.minWidth=e.minWidth),e.minHeight&&(t.style.minHeight=e.minHeight)}}},8854:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.verticalAlignFormatHandler=void 0,t.verticalAlignFormatHandler={parse:function(e,t){switch(t.style.verticalAlign||t.getAttribute("valign")){case"baseline":case"initial":case"super":case"sub":case"text-top":case"text-bottom":case"top":e.verticalAlign="top";break;case"bottom":e.verticalAlign="bottom"}},apply:function(e,t){e.verticalAlign&&(t.style.verticalAlign=e.verticalAlign)}}},4258:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.wordBreakFormatHandler=void 0,t.wordBreakFormatHandler={parse:function(e,t,r,o){var n=t.style.wordBreak||o.wordBreak;n&&(e.wordBreak=n)},apply:function(e,t){e.wordBreak&&(t.style.wordBreak=e.wordBreak)}}},8659:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getFormatAppliers=t.getFormatParsers=t.defaultFormatAppliers=t.defaultFormatParsers=void 0;var o=r(7582),n=r(8891),a=r(8707),l=r(5930),i=r(1136),s=r(8577),d=r(1453),c=r(9980),u=r(1276),f=r(7239),m=r(9101),p=r(2347),v=r(7762),g=r(6883),b=r(2647),h=r(3260),y=r(4652),_=r(7026),P=r(154),C=r(2128),S=r(2438),k=r(9865),O=r(5931),M=r(9379),T=r(4116),F=r(632),w=r(7302),x=r(6413),j=r(5855),E=r(746),B=r(461),A=r(9568),I=r(1268),L=r(5797),D=r(7506),H=r(8854),N=r(1167),R=r(4258),z={backgroundColor:n.backgroundColorFormatHandler,bold:a.boldFormatHandler,border:i.borderFormatHandler,borderBox:l.borderBoxFormatHandler,boxShadow:s.boxShadowFormatHandler,dataset:d.datasetFormatHandler,direction:c.directionFormatHandler,display:u.displayFormatHandler,fontFamily:f.fontFamilyFormatHandler,fontSize:m.fontSizeFormatHandler,htmlAlign:v.htmlAlignFormatHandler,id:g.idFormatHandler,italic:b.italicFormatHandler,letterSpacing:h.letterSpacingFormatHandler,lineHeight:y.lineHeightFormatHandler,link:_.linkFormatHandler,listItemMetadata:P.listItemMetadataFormatHandler,listItemThread:C.listItemThreadFormatHandler,listLevelMetadata:S.listLevelMetadataFormatHandler,listLevelThread:k.listLevelThreadFormatHandler,listStylePosition:O.listStylePositionFormatHandler,listType:M.listTypeFormatHandler,margin:T.marginFormatHandler,padding:F.paddingFormatHandler,size:w.sizeFormatHandler,strike:x.strikeFormatHandler,superOrSubScript:j.superOrSubScriptFormatHandler,tableLayout:E.tableLayoutFormatHandler,tableSpacing:B.tableSpacingFormatHandler,textAlign:A.textAlignFormatHandler,textColor:I.textColorFormatHandler,textColorOnTableCell:L.textColorOnTableCellFormatHandler,underline:D.underlineFormatHandler,verticalAlign:H.verticalAlignFormatHandler,whiteSpace:N.whiteSpaceFormatHandler,wordBreak:R.wordBreakFormatHandler},W=["letterSpacing","fontFamily","fontSize"],G=["strike","underline","superOrSubScript","italic","bold"],U=["direction","textAlign","lineHeight","whiteSpace"],K=["backgroundColor","margin","padding","border"],V={block:U,listItem:["listItemThread","listItemMetadata"],listItemElement:(0,o.__spreadArray)((0,o.__spreadArray)([],(0,o.__read)(U),!1),["direction","textAlign","lineHeight","margin"],!1),listLevel:["listType","listLevelThread","listLevelMetadata","direction","textAlign","margin","padding","listStylePosition","backgroundColor"],styleBasedSegment:(0,o.__spreadArray)((0,o.__spreadArray)([],(0,o.__read)(W),!1),["textColor","backgroundColor","lineHeight"],!1),elementBasedSegment:G,segment:(0,o.__spreadArray)((0,o.__spreadArray)((0,o.__spreadArray)([],(0,o.__read)(W),!1),(0,o.__read)(G),!1),["textColor","backgroundColor","lineHeight"],!1),segmentOnBlock:(0,o.__spreadArray)((0,o.__spreadArray)((0,o.__spreadArray)([],(0,o.__read)(W),!1),(0,o.__read)(G),!1),["textColor"],!1),segmentOnTableCell:(0,o.__spreadArray)((0,o.__spreadArray)((0,o.__spreadArray)([],(0,o.__read)(W),!1),(0,o.__read)(G),!1),["textColorOnTableCell"],!1),tableCell:["border","backgroundColor","padding","verticalAlign","wordBreak","textColor","htmlAlign","size"],tableRow:["backgroundColor"],table:["id","border","backgroundColor","display","htmlAlign","margin","size","tableLayout"],tableBorder:["borderBox","tableSpacing"],tableCellBorder:["borderBox"],image:["id","size","margin","padding","borderBox","border","boxShadow","display"],link:["link","textColor","underline","display","margin","padding","backgroundColor","border","size","textAlign"],segmentUnderLink:["textColor"],code:["fontFamily","display"],dataset:["dataset"],divider:(0,o.__spreadArray)((0,o.__spreadArray)((0,o.__spreadArray)([],(0,o.__read)(U),!1),(0,o.__read)(K),!1),["display","size","htmlAlign"],!1),container:(0,o.__spreadArray)((0,o.__spreadArray)([],(0,o.__read)(K),!1),["htmlAlign","size","display"],!1)};t.defaultFormatParsers=(0,p.getObjectKeys)(z).reduce((function(e,t){return e[t]=z[t].parse,e}),{}),t.defaultFormatAppliers=(0,p.getObjectKeys)(z).reduce((function(e,t){return e[t]=z[t].apply,e}),{}),t.getFormatParsers=function(e,r){return void 0===e&&(e={}),void 0===r&&(r={}),(0,p.getObjectKeys)(V).reduce((function(o,n){var a=V[n].map((function(r){return void 0===e[r]?t.defaultFormatParsers[r]:e[r]})).concat(r[n]||[]);return o[n]=a,o}),{})},t.getFormatAppliers=function(e,r){return void 0===e&&(e={}),void 0===r&&(r={}),(0,p.getObjectKeys)(V).reduce((function(o,n){var a=V[n].map((function(r){return void 0===e[r]?t.defaultFormatAppliers[r]:e[r]})).concat(r[n]||[]);return o[n]=a,o}),{})}},154:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getOrderedListStyleValue=t.listItemMetadataFormatHandler=void 0;var o=r(7582),n=r(2347),a=r(3233),l=r(2438),i=/\$\{(\w+)\}/,s=["decimal","lower-alpha","lower-roman"],d=["disc","circle","square"],c=65,u={M:1e3,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1};function f(e,t){return e?e.replace(i,(function(e,r){switch(r){case"Number":return t+"";case"LowerAlpha":return m(t,!0);case"UpperAlpha":return m(t,!1);case"LowerRoman":return p(t,!0);case"UpperRoman":return p(t,!1)}return""})):void 0}function m(e,t){var r="";for(e--;e>=0;)r=String.fromCharCode(e%26+c)+r,e=Math.floor(e/26)-1;return t?r.toLowerCase():r}function p(e,t){var r,a,l="";try{for(var i=(0,o.__values)((0,n.getObjectKeys)(u)),s=i.next();!s.done;s=i.next()){var d=s.value,c=Math.floor(e/u[d]);e-=c*u[d],l+=d.repeat(c)}}catch(e){r={error:e}}finally{try{s&&!s.done&&(a=i.return)&&a.call(i)}finally{if(r)throw r.error}}return t?l.toLocaleLowerCase():l}t.listItemMetadataFormatHandler={parse:function(){},apply:function(e,t,r){var o,i,c=t.parentNode,u=r.listFormat.nodeStack.length-2;if(u>=0&&(0,a.isNodeOfType)(c,1)&&!c.style.listStyleType){var m="OL"==(0,n.getTagOfNode)(c)?null!==(o=f(l.OrderedMap[e.orderedStyleType],r.listFormat.threadItemCounts[u]))&&void 0!==o?o:s[u%s.length]:null!==(i=l.UnorderedMap[e.unorderedStyleType])&&void 0!==i?i:d[u%d.length];m&&(u>0||"decimal"!=m&&"disc"!=m)&&(t.style.listStyleType=m)}}},t.getOrderedListStyleValue=f},2128:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.listItemThreadFormatHandler=void 0;var o=r(2347);function n(e){return(0,o.safeInstanceOf)(e,"HTMLLIElement")&&(0,o.safeInstanceOf)(e.parentNode,"HTMLOListElement")}t.listItemThreadFormatHandler={parse:function(e,t,r,o){var a=r.listFormat,l=a.levels.length,i=t.style.display||o.display;i&&"list-item"!=i?e.displayForDummyItem=i:n(t)&&l>0&&(a.threadItemCounts[l-1]++,a.threadItemCounts.splice(l),a.levels.forEach((function(e){delete e.startNumberOverride})))},apply:function(e,t,r){var o;if(e.displayForDummyItem)t.style.display=e.displayForDummyItem;else if(n(t)){var a=r.listFormat,l=a.threadItemCounts,i=a.nodeStack.length-2;i>=0&&(l.splice(i+1),l[i]=(null!==(o=l[i])&&void 0!==o?o:0)+1)}}}},2438:(e,t,r)=>{var o,n;Object.defineProperty(t,"__esModule",{value:!0}),t.listLevelMetadataFormatHandler=t.UnorderedMap=t.OrderedMap=void 0;var a=r(2347);t.OrderedMap=((o={})[1]="decimal",o[2]='"${Number}- "',o[3]='"${Number}) "',o[4]='"(${Number}) "',o[5]="lower-alpha",o[8]='"${LowerAlpha}- "',o[6]='"${LowerAlpha}) "',o[7]='"(${LowerAlpha}) "',o[9]="upper-alpha",o[12]='"${UpperAlpha}- "',o[10]='"${UpperAlpha}) "',o[11]='"(${UpperAlpha}) "',o[13]="lower-roman",o[16]='"${LowerRoman}- "',o[14]='"${LowerRoman}) "',o[15]='"(${LowerRoman}) "',o[17]="upper-roman",o[20]='"${UpperRoman}- "',o[18]='"${UpperRoman}) "',o[19]='"(${UpperRoman}) "',o),t.UnorderedMap=((n={})[1]="disc",n[3]='"∎ "',n[9]="circle",n[2]='"- "',n[5]='"➔ "',n[8]='"➔ "',n[4]='"➢ "',n[6]='"➪ "',n[7]='"— "',n);var l={1:"decimal",a:"lower-alpha",A:"upper-alpha",i:"lower-roman",I:"upper-roman"};function i(e,t){return void 0===t?void 0:(0,a.getObjectKeys)(e).filter((function(r){return e[r]==t}))[0]}t.listLevelMetadataFormatHandler={parse:function(e,r){var o=r.style.listStyleType||(0,a.safeInstanceOf)(r,"HTMLOListElement")&&l[r.type],n=(0,a.getTagOfNode)(r);if(o)if("OL"==n&&void 0===e.orderedStyleType){var s=i(t.OrderedMap,o);e.orderedStyleType=void 0===s?void 0:parseInt(s)}else"UL"==n&&void 0===e.unorderedStyleType&&(s=i(t.UnorderedMap,o),e.unorderedStyleType=void 0===s?void 0:parseInt(s))},apply:function(e,r){var o="OL"==(0,a.getTagOfNode)(r)?t.OrderedMap[e.orderedStyleType]:t.UnorderedMap[e.unorderedStyleType];o&&o.indexOf('"')<0&&(r.style.listStyleType=o)}}},9865:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.listLevelThreadFormatHandler=void 0;var o=r(2347);t.listLevelThreadFormatHandler={parse:function(e,t,r){if((0,o.safeInstanceOf)(t,"HTMLOListElement")){var n=r.listFormat,a=n.threadItemCounts,l=n.levels.length;"number"==typeof a[l]&&t.start!=a[l]+1&&(e.startNumberOverride=t.start),a[l]=t.start-1}},apply:function(e,t,r){var n=r.listFormat,a=n.threadItemCounts,l=n.nodeStack.length-1;if(l>=0&&(0,o.safeInstanceOf)(t,"HTMLOListElement")){var i=e.startNumberOverride;"number"==typeof i?a[l]=i-1:"number"!=typeof a[l]&&(a[l]=0),a.splice(l+1),t.start=a[l]+1}}}},5931:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.listStylePositionFormatHandler=void 0,t.listStylePositionFormatHandler={parse:function(e,t){var r=t.style.listStylePosition;r&&(e.listStylePosition=r)},apply:function(e,t){e.listStylePosition&&(t.style.listStylePosition=e.listStylePosition)}}},9379:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.listTypeFormatHandler=void 0;var o=r(2347);t.listTypeFormatHandler={parse:function(e,t){var r=(0,o.getTagOfNode)(t);"OL"!=r&&"UL"!=r||(e.listType=r)},apply:function(){}}},7573:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.rootDirectionFormatHandler=void 0,t.rootDirectionFormatHandler={parse:function(e,t){var r,o=null===(r=t.ownerDocument.defaultView)||void 0===r?void 0:r.getComputedStyle(t);"rtl"==(null==o?void 0:o.direction)&&(e.direction="rtl")},apply:function(){}}},5571:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.zoomScaleFormatHandler=void 0,t.zoomScaleFormatHandler={parse:function(e,t){var r=t.getBoundingClientRect().width,o=t.offsetWidth;e.zoomScale=o>0&&r>0?Math.round(r/o*100)/100:1},apply:function(){}}},8707:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.boldFormatHandler=void 0;var o=r(2347);t.boldFormatHandler={parse:function(e,t,r,o){var n=t.style.fontWeight||o.fontWeight;n&&(e.fontWeight=n)},apply:function(e,t,r){if(void 0!==e.fontWeight){var n=r.implicitFormat.fontWeight;if(n&&n!=e.fontWeight||!n&&e.fontWeight&&"normal"!=e.fontWeight)if("bold"==e.fontWeight){var a=t.ownerDocument.createElement("b");(0,o.moveChildNodes)(a,t),t.appendChild(a)}else t.style.fontWeight=e.fontWeight||"normal"}}}},7239:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.fontFamilyFormatHandler=void 0,t.fontFamilyFormatHandler={parse:function(e,t,r,o){var n=t.style.fontFamily||o.fontFamily;n&&"inherit"!=n&&(e.fontFamily=n)},apply:function(e,t,r){e.fontFamily&&e.fontFamily!=r.implicitFormat.fontFamily&&(t.style.fontFamily=e.fontFamily)}}},9101:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.fontSizeFormatHandler=void 0;var o=r(5855);t.fontSizeFormatHandler={parse:function(e,t,r,n){var a=t.style.fontSize||n.fontSize,l=t.style.verticalAlign||n.verticalAlign;a&&!(0,o.isSuperOrSubScript)(a,l)&&"inherit"!=a&&(e.fontSize=a)},apply:function(e,t,r){e.fontSize&&e.fontSize!=r.implicitFormat.fontSize&&(t.style.fontSize=e.fontSize)}}},2647:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.italicFormatHandler=void 0;var o=r(2347);t.italicFormatHandler={parse:function(e,t,r,o){var n=t.style.fontStyle||o.fontStyle;"italic"==n||"oblique"==n?e.italic=!0:"initial"!=n&&"normal"!=n||(e.italic=!1)},apply:function(e,t,r){if(void 0!==e.italic&&!!r.implicitFormat.italic!=!!e.italic)if(e.italic){var n=t.ownerDocument.createElement("i");(0,o.moveChildNodes)(n,t),t.appendChild(n)}else t.style.fontStyle="normal"}}},3260:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.letterSpacingFormatHandler=void 0,t.letterSpacingFormatHandler={parse:function(e,t,r,o){var n=t.style.letterSpacing||o.letterSpacing;n&&(e.letterSpacing=n)},apply:function(e,t,r){e.letterSpacing&&(t.style.letterSpacing=e.letterSpacing)}}},7026:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.linkFormatHandler=void 0;var o=r(2347);t.linkFormatHandler={parse:function(e,t){if((0,o.safeInstanceOf)(t,"HTMLAnchorElement")){var r=t.name,n=t.getAttribute("href"),a=t.target,l=t.rel,i=t.id,s=t.className,d=t.title;r&&(e.name=r),n&&(e.href=n),a&&(e.target=a),i&&(e.anchorId=i),l&&(e.relationship=l),d&&(e.anchorTitle=d),s&&(e.anchorClass=s)}},apply:function(e,t){(0,o.safeInstanceOf)(t,"HTMLAnchorElement")&&e.href&&(t.href=e.href,e.name&&(t.name=e.name),e.target&&(t.target=e.target),e.anchorId&&(t.id=e.anchorId),e.anchorClass&&(t.className=e.anchorClass),e.anchorTitle&&(t.title=e.anchorTitle),e.relationship&&(t.rel=e.relationship))}}},6413:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.strikeFormatHandler=void 0;var o=r(2347);t.strikeFormatHandler={parse:function(e,t,r,o){var n=t.style.textDecoration||o.textDecoration;(null==n?void 0:n.indexOf("line-through"))>=0&&(e.strikethrough=!0)},apply:function(e,t){if(e.strikethrough){var r=t.ownerDocument.createElement("s");(0,o.moveChildNodes)(r,t),t.appendChild(r)}}}},5855:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isSuperOrSubScript=t.superOrSubScriptFormatHandler=void 0;var o=r(2347);function n(e,t){return"smaller"==e&&("sub"==t||"super"==t)}t.superOrSubScriptFormatHandler={parse:function(e,t,r,o){var a=t.style.verticalAlign||o.verticalAlign;n(t.style.fontSize||o.fontSize,a)&&(e.superOrSubScriptSequence=(e.superOrSubScriptSequence||"").split(" ").concat(a).join(" ").trim())},apply:function(e,t){e.superOrSubScriptSequence&&e.superOrSubScriptSequence.split(" ").reverse().forEach((function(e){var r="super"==e?"sup":"sub"==e?"sub":null;if(r){var n=t.ownerDocument.createElement(r);(0,o.moveChildNodes)(n,t),t.appendChild(n)}}))}},t.isSuperOrSubScript=n},1268:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.textColorFormatHandler=void 0;var o=r(5150);t.textColorFormatHandler={parse:function(e,t,r,n){var a=(0,o.getColor)(t,!1,r.darkColorHandler,r.isDarkMode)||n.color;a&&"inherit"!=a&&(e.textColor=a)},apply:function(e,t,r){var n=r.implicitFormat.textColor;e.textColor&&e.textColor!=n&&(0,o.setColor)(t,e.textColor,!1,r.darkColorHandler,r.isDarkMode)}}},7506:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.underlineFormatHandler=void 0;var o=r(2347);t.underlineFormatHandler={parse:function(e,t,r,o){var n=t.style.textDecoration||o.textDecoration;(null==n?void 0:n.indexOf("underline"))>=0?e.underline=!0:"A"==t.tagName&&"none"==n&&(e.underline=!1)},apply:function(e,t,r){if(void 0!==e.underline&&!!r.implicitFormat.underline!=!!e.underline)if(e.underline){var n=t.ownerDocument.createElement("u");(0,o.moveChildNodes)(n,t),t.appendChild(n)}else t.style.textDecoration="none"}}},746:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.tableLayoutFormatHandler=void 0,t.tableLayoutFormatHandler={parse:function(e,t){var r=t.style.tableLayout;r&&"inherit"!=r&&(e.tableLayout=r)},apply:function(e,t){e.tableLayout&&(t.style.tableLayout=e.tableLayout)}}},461:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.tableSpacingFormatHandler=void 0;var r="collapse";t.tableSpacingFormatHandler={parse:function(e,t){t.style.borderCollapse==r&&(e.borderCollapse=!0)},apply:function(e,t){e.borderCollapse&&(t.style.borderCollapse=r,t.style.borderSpacing="0",t.style.boxSizing="border-box")}}},5797:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.textColorOnTableCellFormatHandler=void 0,t.textColorOnTableCellFormatHandler={parse:function(e,t){t.style.color&&delete e.textColor},apply:function(){}}},5150:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.setColor=t.getColor=void 0;var o=r(2347);t.getColor=function(e,t,r,n){var a;return a||(a=r&&function(e,t,r,n){var a;return"FONT"==(0,o.getTagOfNode)(e)&&!e.style.getPropertyValue(n?"background-color":"color")&&t&&(a=e.getAttribute(n?"bgcolor":"color"))?r.findLightColorFromDarkColor(a):null}(e,n,r,t)||(t?e.style.backgroundColor:e.style.color)||e.getAttribute(t?"bgcolor":"color")||void 0),r&&(a=r.parseColorValue(a).lightModeColor),a},t.setColor=function(e,t,r,o,n){var a=o?o.registerColor(t,n):t;r?e.style.backgroundColor=a:e.style.color=a}},976:(e,t)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.defaultImplicitFormatMap=t.PseudoTagNames=t.defaultStyleMap=void 0;var o={display:"block"};t.defaultStyleMap={address:o,article:o,aside:o,b:{fontWeight:"bold"},blockquote:{display:"block",marginTop:"1em",marginBottom:"1em",marginLeft:"40px",marginRight:"40px"},br:o,center:{display:"block",textAlign:"center"},dd:o,div:o,dl:o,dt:o,em:{fontStyle:"italic"},fieldset:o,figcaption:o,figure:o,footer:o,form:o,h1:{display:"block",fontWeight:"bold",fontSize:"2em"},h2:{display:"block",fontWeight:"bold",fontSize:"1.5em"},h3:{display:"block",fontWeight:"bold",fontSize:"1.17em"},h4:{display:"block",fontWeight:"bold"},h5:{display:"block",fontWeight:"bold",fontSize:"0.83em"},h6:{display:"block",fontWeight:"bold",fontSize:"0.67em"},header:o,hr:o,i:{fontStyle:"italic"},li:{display:"list-item"},main:o,nav:o,ol:o,p:{display:"block",marginTop:"1em",marginBottom:"1em"},pre:{display:"block",fontFamily:"monospace",whiteSpace:"pre",marginTop:"1em",marginBottom:"1em"},s:{textDecoration:"line-through"},section:o,strike:{textDecoration:"line-through"},strong:{fontWeight:"bold"},sub:{verticalAlign:"sub",fontSize:"smaller"},sup:{verticalAlign:"super",fontSize:"smaller"},table:{display:"table",boxSizing:"border-box"},td:{display:"table-cell"},th:{display:"table-cell"},u:{textDecoration:"underline"},ul:o},(t.PseudoTagNames||(t.PseudoTagNames={})).childOfPre="pre *",t.defaultImplicitFormatMap=((r={a:{underline:!0},blockquote:{marginTop:"1em",marginBottom:"1em",marginLeft:"40px",marginRight:"40px"},code:{fontFamily:"monospace"},h1:{fontWeight:"bold",fontSize:"2em"},h2:{fontWeight:"bold",fontSize:"1.5em"},h3:{fontWeight:"bold",fontSize:"1.17em"},h4:{fontWeight:"bold",fontSize:"1em"},h5:{fontWeight:"bold",fontSize:"0.83em"},h6:{fontWeight:"bold",fontSize:"0.67em"},p:{marginTop:"1em",marginBottom:"1em"},pre:{fontFamily:"monospace",whiteSpace:"pre",marginTop:"1em",marginBottom:"1em"}})["pre *"]={fontFamily:"monospace",whiteSpace:"pre"},r)},3612:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calcAlign=t.ResultMap=void 0,t.ResultMap={start:{ltr:"left",rtl:"right"},center:{ltr:"center",rtl:"center"},end:{ltr:"right",rtl:"left"},initial:{ltr:"initial",rtl:"initial"},justify:{ltr:"justify",rtl:"justify"}},t.calcAlign=function(e,t){switch(e){case"center":return"center";case"left":return"rtl"==t?"end":"start";case"right":return"rtl"==t?"start":"end";case"start":case"end":case"justify":case"initial":return e;default:return}}},8704:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseValueWithUnit=void 0;var o=r(7582),n=r(2347),a=/(-?\d+(\.\d+)?)([a-z]+|%)/;function l(e){var t=(0,n.getComputedStyle)(e,"font-size");return i(parseFloat(t))}function i(e){return Math.round(4e3*e/3)/1e3}t.parseValueWithUnit=function(e,t,r){void 0===e&&(e=""),void 0===r&&(r="px");var n,s=a.exec(e),d=0;if(s){var c=(0,o.__read)(s,4),u=(c[0],c[1]),f=(c[2],c[3]),m=parseFloat(u);switch(f){case"px":d=m;break;case"pt":d=i(m);break;case"em":d=t?l(t)*m:0;break;case"ex":d=t?l(t)*m/2:0;break;case"%":d=t?t.offsetWidth*m/100:0}}return d>0&&"pt"==r&&(n=d,d=Math.round(3e3*n/4)/1e3),d}},1246:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createDomToModelContext=t.normalizeText=t.isSpace=t.isPunctuation=t.defaultImplicitFormatMap=t.BorderKeys=t.parseValueWithUnit=t.setParagraphNotImplicit=t.normalizeSingleSegment=t.isWhiteSpacePreserved=t.addSegment=t.unwrapBlock=t.isGeneralSegment=t.normalizeContentModel=t.addLink=t.addCode=t.addBlock=t.createDivider=t.createEntity=t.createGeneralBlock=t.createGeneralSegment=t.createParagraphDecorator=t.createContentModelDocument=t.createImage=t.createText=t.createTableCell=t.createTable=t.createSelectionMarker=t.createParagraph=t.createFormatContainer=t.createListItem=t.createBr=t.isNodeOfType=t.hasMetadata=t.updateMetadata=t.areSameFormats=t.parseFormat=t.getRegularSelectionOffsets=t.tableProcessor=t.entityProcessor=t.processChildNode=t.handleRegularSelection=t.childProcessor=t.contentModelToDom=t.domToContentModel=void 0;var o=r(1807);Object.defineProperty(t,"domToContentModel",{enumerable:!0,get:function(){return o.domToContentModel}});var n=r(4266);Object.defineProperty(t,"contentModelToDom",{enumerable:!0,get:function(){return n.contentModelToDom}});var a=r(9384);Object.defineProperty(t,"childProcessor",{enumerable:!0,get:function(){return a.childProcessor}}),Object.defineProperty(t,"handleRegularSelection",{enumerable:!0,get:function(){return a.handleRegularSelection}}),Object.defineProperty(t,"processChildNode",{enumerable:!0,get:function(){return a.processChildNode}});var l=r(6905);Object.defineProperty(t,"entityProcessor",{enumerable:!0,get:function(){return l.entityProcessor}});var i=r(970);Object.defineProperty(t,"tableProcessor",{enumerable:!0,get:function(){return i.tableProcessor}});var s=r(8063);Object.defineProperty(t,"getRegularSelectionOffsets",{enumerable:!0,get:function(){return s.getRegularSelectionOffsets}});var d=r(9366);Object.defineProperty(t,"parseFormat",{enumerable:!0,get:function(){return d.parseFormat}});var c=r(8310);Object.defineProperty(t,"areSameFormats",{enumerable:!0,get:function(){return c.areSameFormats}});var u=r(6245);Object.defineProperty(t,"updateMetadata",{enumerable:!0,get:function(){return u.updateMetadata}}),Object.defineProperty(t,"hasMetadata",{enumerable:!0,get:function(){return u.hasMetadata}});var f=r(3233);Object.defineProperty(t,"isNodeOfType",{enumerable:!0,get:function(){return f.isNodeOfType}});var m=r(7826);Object.defineProperty(t,"createBr",{enumerable:!0,get:function(){return m.createBr}});var p=r(7724);Object.defineProperty(t,"createListItem",{enumerable:!0,get:function(){return p.createListItem}});var v=r(2766);Object.defineProperty(t,"createFormatContainer",{enumerable:!0,get:function(){return v.createFormatContainer}});var g=r(5092);Object.defineProperty(t,"createParagraph",{enumerable:!0,get:function(){return g.createParagraph}});var b=r(5114);Object.defineProperty(t,"createSelectionMarker",{enumerable:!0,get:function(){return b.createSelectionMarker}});var h=r(988);Object.defineProperty(t,"createTable",{enumerable:!0,get:function(){return h.createTable}});var y=r(1160);Object.defineProperty(t,"createTableCell",{enumerable:!0,get:function(){return y.createTableCell}});var _=r(840);Object.defineProperty(t,"createText",{enumerable:!0,get:function(){return _.createText}});var P=r(5566);Object.defineProperty(t,"createImage",{enumerable:!0,get:function(){return P.createImage}});var C=r(5733);Object.defineProperty(t,"createContentModelDocument",{enumerable:!0,get:function(){return C.createContentModelDocument}});var S=r(24);Object.defineProperty(t,"createParagraphDecorator",{enumerable:!0,get:function(){return S.createParagraphDecorator}});var k=r(8885);Object.defineProperty(t,"createGeneralSegment",{enumerable:!0,get:function(){return k.createGeneralSegment}});var O=r(9237);Object.defineProperty(t,"createGeneralBlock",{enumerable:!0,get:function(){return O.createGeneralBlock}});var M=r(1033);Object.defineProperty(t,"createEntity",{enumerable:!0,get:function(){return M.createEntity}});var T=r(7110);Object.defineProperty(t,"createDivider",{enumerable:!0,get:function(){return T.createDivider}});var F=r(9275);Object.defineProperty(t,"addBlock",{enumerable:!0,get:function(){return F.addBlock}});var w=r(3883);Object.defineProperty(t,"addCode",{enumerable:!0,get:function(){return w.addCode}});var x=r(3883);Object.defineProperty(t,"addLink",{enumerable:!0,get:function(){return x.addLink}});var j=r(8767);Object.defineProperty(t,"normalizeContentModel",{enumerable:!0,get:function(){return j.normalizeContentModel}});var E=r(183);Object.defineProperty(t,"isGeneralSegment",{enumerable:!0,get:function(){return E.isGeneralSegment}});var B=r(5960);Object.defineProperty(t,"unwrapBlock",{enumerable:!0,get:function(){return B.unwrapBlock}});var A=r(8513);Object.defineProperty(t,"addSegment",{enumerable:!0,get:function(){return A.addSegment}});var I=r(3897);Object.defineProperty(t,"isWhiteSpacePreserved",{enumerable:!0,get:function(){return I.isWhiteSpacePreserved}});var L=r(3393);Object.defineProperty(t,"normalizeSingleSegment",{enumerable:!0,get:function(){return L.normalizeSingleSegment}});var D=r(3963);Object.defineProperty(t,"setParagraphNotImplicit",{enumerable:!0,get:function(){return D.setParagraphNotImplicit}});var H=r(8704);Object.defineProperty(t,"parseValueWithUnit",{enumerable:!0,get:function(){return H.parseValueWithUnit}});var N=r(1136);Object.defineProperty(t,"BorderKeys",{enumerable:!0,get:function(){return N.BorderKeys}});var R=r(976);Object.defineProperty(t,"defaultImplicitFormatMap",{enumerable:!0,get:function(){return R.defaultImplicitFormatMap}});var z=r(5589);Object.defineProperty(t,"isPunctuation",{enumerable:!0,get:function(){return z.isPunctuation}}),Object.defineProperty(t,"isSpace",{enumerable:!0,get:function(){return z.isSpace}}),Object.defineProperty(t,"normalizeText",{enumerable:!0,get:function(){return z.normalizeText}});var W=r(9968);Object.defineProperty(t,"createDomToModelContext",{enumerable:!0,get:function(){return W.createDomToModelContext}})},3963:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.setParagraphNotImplicit=void 0,t.setParagraphNotImplicit=function(e){"Paragraph"==e.blockType&&e.isImplicit&&(e.isImplicit=!1)}},9275:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.addBlock=void 0,t.addBlock=function(e,t){e.blocks.push(t)}},3883:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.addDecorators=t.addCode=t.addLink=void 0;var o=r(7582);function n(e,t){t.format.href&&(e.link={format:(0,o.__assign)({},t.format),dataset:(0,o.__assign)({},t.dataset)})}function a(e,t){t.format.fontFamily&&(e.code={format:(0,o.__assign)({},t.format)})}t.addLink=n,t.addCode=a,t.addDecorators=function(e,t){n(e,t.link),a(e,t.code)}},8513:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.addSegment=void 0;var o=r(9275),n=r(5092);t.addSegment=function(e,t,r){var a,l=e.blocks[e.blocks.length-1];"Paragraph"==(null==l?void 0:l.blockType)?a=l:(a=(0,n.createParagraph)(!0,r),(0,o.addBlock)(e,a));var i=a.segments[a.segments.length-1];"SelectionMarker"==t.segmentType?i&&i.isSelected||a.segments.push(t):(t.isSelected&&"SelectionMarker"==(null==i?void 0:i.segmentType)&&a.segments.pop(),a.segments.push(t))}},4451:(e,t)=>{function r(e){switch(e.blockType){case"Paragraph":return 0==e.segments.length;case"Table":return e.rows.every((function(e){return 0==e.cells.length}));case"BlockGroup":return o(e);default:return!1}}function o(e){switch(e.blockGroupType){case"FormatContainer":return"div"!=e.tagName&&e.blocks.every(r);case"ListItem":return e.blocks.every(r);case"Document":case"General":case"TableCell":return!1;default:return!0}}function n(e){switch(e.segmentType){case"Text":return!e.text;case"Image":return!e.src;default:return!1}}Object.defineProperty(t,"__esModule",{value:!0}),t.isEmpty=t.isSegmentEmpty=t.isBlockGroupEmpty=t.isBlockEmpty=void 0,t.isBlockEmpty=r,t.isBlockGroupEmpty=o,t.isSegmentEmpty=n,t.isEmpty=function(e){return function(e){return"string"==typeof e.blockGroupType}(e)?o(e):function(e){return"string"==typeof e.blockType}(e)?r(e):!!function(e){return"string"==typeof e.segmentType}(e)&&n(e)}},183:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isGeneralSegment=void 0,t.isGeneralSegment=function(e){return"General"==e.blockGroupType&&"General"==e.segmentType}},3897:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isWhiteSpacePreserved=void 0;var r=["pre","pre-wrap","break-spaces"];t.isWhiteSpacePreserved=function(e){return e.format.whiteSpace&&r.indexOf(e.format.whiteSpace)>=0||!1}},8767:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.normalizeContentModel=void 0;var o=r(4451),n=r(4858),a=r(5960);t.normalizeContentModel=function e(t){for(var r=t.blocks.length-1;r>=0;r--){var l=t.blocks[r];switch(l.blockType){case"BlockGroup":"ListItem"==l.blockGroupType&&0==l.levels.length?(r+=l.blocks.length,(0,a.unwrapBlock)(t,l)):e(l);break;case"Paragraph":(0,n.normalizeParagraph)(l);break;case"Table":for(var i=0;i{Object.defineProperty(t,"__esModule",{value:!0}),t.normalizeParagraph=void 0;var o=r(7826),n=r(4451),a=r(3897),l=r(3393);t.normalizeParagraph=function(e){var t=e.segments;if(!e.isImplicit&&t.length>0){var r=t[t.length-1],i=t[t.length-2];if("SelectionMarker"!=r.segmentType||i&&"Br"!=i.segmentType){if(t.length>1&&"Br"==t[t.length-1].segmentType){var s=t.filter((function(e){return"SelectionMarker"!=e.segmentType}));s.length>1&&"Br"!=s[s.length-2].segmentType&&t.pop()}}else t.push((0,o.createBr)(r.format))}(0,a.isWhiteSpacePreserved)(e)||(0,l.normalizeAllSegments)(e),function(e){for(var t=e.segments.length-1;t>=0;t--)(0,n.isSegmentEmpty)(e.segments[t])&&e.segments.splice(t,1)}(e)}},3393:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.normalizeSegment=t.createNormalizeSegmentContext=t.normalizeSingleSegment=t.normalizeAllSegments=void 0;var o=r(5589),n=" ",a=" ",l=/^\u0020+/,i=/\u0020+$/;function s(e){return Object.assign(null!=e?e:{},{textSegments:[],ignoreLeadingSpaces:!0,ignoreTrailingSpaces:!0,lastInlineSegment:void 0,lastTextSegment:void 0})}function d(e,t){switch(e.segmentType){case"Br":c(t.textSegments,t.lastInlineSegment),u(t.lastTextSegment,t.lastInlineSegment),s(t);break;case"Entity":case"General":case"Image":t.lastInlineSegment=e,t.ignoreLeadingSpaces=!1;break;case"Text":t.textSegments.push(e),t.lastInlineSegment=e,t.lastTextSegment=e;var r=e.text.substring(0,1),d=e.text.substr(-1);(0,o.hasSpacesOnly)(e.text)||(r==n&&(e.text=e.text.replace(l,t.ignoreLeadingSpaces?"":a)),d==n&&(e.text=e.text.replace(i,t.ignoreTrailingSpaces?n:a))),t.ignoreLeadingSpaces=d==n}}function c(e,t){e.forEach((function(e){if(e!=t){var r=e.text;r.substr(-1)==a&&r.length>1&&r.substr(-2,1)!=n&&(e.text=r.substring(0,r.length-1)+n)}}))}function u(e,t){e&&e==t&&(null==e?void 0:e.text.substr(-1))==n&&(e.text=e.text.replace(i,""))}t.normalizeAllSegments=function(e){var t=s();e.segments.forEach((function(e){d(e,t)})),c(t.textSegments,t.lastInlineSegment),u(t.lastTextSegment,t.lastInlineSegment)},t.normalizeSingleSegment=function(e,t){void 0===t&&(t=!1);var r=s();r.ignoreTrailingSpaces=t,d(e,r)},t.createNormalizeSegmentContext=function(){return s()},t.normalizeSegment=d},5960:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.unwrapBlock=void 0;var o=r(7582),n=r(3963);t.unwrapBlock=function(e,t){var r,a,l=null!==(a=null==e?void 0:e.blocks.indexOf(t))&&void 0!==a?a:-1;l>=0&&(t.blocks.forEach(n.setParagraphNotImplicit),null==e||(r=e.blocks).splice.apply(r,(0,o.__spreadArray)([l,1],(0,o.__read)(t.blocks),!1)))}},7826:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createBr=void 0;var o=r(7582);t.createBr=function(e){return{segmentType:"Br",format:e?(0,o.__assign)({},e):{}}}},5733:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createContentModelDocument=void 0,t.createContentModelDocument=function(e){var t={blockGroupType:"Document",blocks:[]};return e&&(t.format=e),t}},7110:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createDivider=void 0;var o=r(7582);t.createDivider=function(e,t){return{blockType:"Divider",tagName:e,format:t?(0,o.__assign)({},t):{}}}},1033:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createEntity=void 0;var o=r(7582);t.createEntity=function(e,t,r,n,a){return{segmentType:"Entity",blockType:"Entity",format:(0,o.__assign)({},r||{}),id:n,type:a,isReadonly:t,wrapper:e}}},2766:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createFormatContainer=void 0;var o=r(7582);t.createFormatContainer=function(e,t){return{blockType:"BlockGroup",blockGroupType:"FormatContainer",tagName:e,blocks:[],format:(0,o.__assign)({},t||{})}}},9237:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createGeneralBlock=void 0,t.createGeneralBlock=function(e){return{blockType:"BlockGroup",blockGroupType:"General",element:e,blocks:[],format:{}}}},8885:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createGeneralSegment=void 0;var o=r(7582);t.createGeneralSegment=function(e,t){return{blockType:"BlockGroup",blockGroupType:"General",segmentType:"General",format:t?(0,o.__assign)({},t):{},blocks:[],element:e}}},5566:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createImage=void 0;var o=r(7582);t.createImage=function(e,t){return{segmentType:"Image",src:e,format:t?(0,o.__assign)({},t):{},dataset:{}}}},7724:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createListItem=void 0;var o=r(7582),n=r(5114);t.createListItem=function(e,t){return{blockType:"BlockGroup",blockGroupType:"ListItem",blocks:[],levels:e?e.map((function(e){return(0,o.__assign)({},e)})):[],formatHolder:(0,n.createSelectionMarker)(t),format:{}}}},5092:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createParagraph=void 0;var o=r(7582);t.createParagraph=function(e,t,r,n){var a={blockType:"Paragraph",segments:[],format:t?(0,o.__assign)({},t):{}};return r&&Object.keys(r).length>0&&(a.segmentFormat=(0,o.__assign)({},r)),e&&(a.isImplicit=!0),n&&(a.decorator={tagName:n.tagName,format:(0,o.__assign)({},n.format)}),a}},24:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createParagraphDecorator=void 0;var o=r(7582);t.createParagraphDecorator=function(e,t){return{tagName:e.toLocaleLowerCase(),format:(0,o.__assign)({},t||{})}}},5114:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createSelectionMarker=void 0;var o=r(7582);t.createSelectionMarker=function(e){return{segmentType:"SelectionMarker",isSelected:!0,format:e?(0,o.__assign)({},e):{}}}},988:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createTable=void 0;var o=r(7582);t.createTable=function(e,t){for(var r=[],n=0;n{Object.defineProperty(t,"__esModule",{value:!0}),t.createTableCell=void 0;var o=r(7582);t.createTableCell=function(e,t,r,n){var a="number"==typeof e?e>1:!!e,l="number"==typeof t?t>1:!!t;return{blockGroupType:"TableCell",blocks:[],format:n?(0,o.__assign)({},n):{},spanLeft:a,spanAbove:l,isHeader:!!r,dataset:{}}}},840:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createText=void 0;var o=r(7582);t.createText=function(e,t){return{segmentType:"Text",text:e,format:t?(0,o.__assign)({},t):{}}}},4266:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.contentModelToDom=void 0;var o=r(8530),n=r(2347),a=r(3233);function l(e){var t,r;return e.block&&(r=e.segment?(0,a.isNodeOfType)(e.segment,3)?new n.Position(e.segment,(null===(t=e.segment.nodeValue)||void 0===t?void 0:t.length)||0):new n.Position(e.segment.parentNode,(0,n.toArray)(e.segment.parentNode.childNodes).indexOf(e.segment)+1):new n.Position(e.block,0)),(0,a.isNodeOfType)(null==r?void 0:r.node,11)&&(r=null==r?void 0:r.normalize()),r}t.contentModelToDom=function(e,t,r,a,i){var s=(0,o.createModelToDomContext)(a,i);s.modelHandlers.blockGroupChildren(e,t,r,s);var d=function(e){var t,r,o=e.regularSelection,a=o.start,i=o.end,s=e.tableSelection,d=e.imageSelection;if(null==d?void 0:d.image)return{type:2,ranges:[(0,n.createRange)(d.image)],areAllCollapsed:!1,image:d.image};if((t=a&&l(a))&&(r=i&&l(i))){var c=(0,n.createRange)(t,r);return{type:0,ranges:[(0,n.createRange)(t,r)],areAllCollapsed:c.collapsed}}return(null==s?void 0:s.table)?{type:1,ranges:[],areAllCollapsed:!1,table:s.table,coordinates:{firstCell:s.firstCell,lastCell:s.lastCell}}:null}(s);return t.normalize(),d}},8530:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createModelToDomContext=void 0;var o=r(7582),n=r(9550),a=r(976),l=r(8659);t.createModelToDomContext=function(e,t){return t=t||{},(0,o.__assign)((0,o.__assign)({},e||{isDarkMode:!1}),{regularSelection:{current:{block:null,segment:null}},listFormat:{threadItemCounts:[],nodeStack:[]},implicitFormat:{},formatAppliers:(0,l.getFormatAppliers)(t.formatApplierOverride,t.additionalFormatAppliers),modelHandlers:(0,o.__assign)((0,o.__assign)({},n.defaultContentModelHandlers),t.modelHandlerOverride||{}),defaultImplicitFormatMap:(0,o.__assign)((0,o.__assign)({},a.defaultImplicitFormatMap),t.defaultImplicitFormatOverride||{}),defaultModelHandlers:n.defaultContentModelHandlers,defaultFormatAppliers:l.defaultFormatAppliers,onNodeCreated:t.onNodeCreated})}},9550:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.defaultContentModelHandlers=void 0;var o=r(3377),n=r(7352),a=r(6830),l=r(1379),i=r(736),s=r(740),d=r(3035),c=r(1920),u=r(3378),f=r(6026),m=r(1351),p=r(3913),v=r(1596),g=r(8109),b=r(8906);t.defaultContentModelHandlers={block:o.handleBlock,blockGroupChildren:n.handleBlockGroupChildren,br:a.handleBr,entity:i.handleEntity,general:d.handleGeneralModel,divider:l.handleDivider,image:c.handleImage,list:u.handleList,listItem:f.handleListItem,paragraph:m.handleParagraph,formatContainer:s.handleFormatContainer,segment:p.handleSegment,segmentDecorator:v.handleSegmentDecorator,table:g.handleTable,text:b.handleText}},3377:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleBlock=void 0,t.handleBlock=function(e,t,r,o,n){var a=o.modelHandlers;switch(r.blockType){case"Table":n=a.table(e,t,r,o,n);break;case"Paragraph":n=a.paragraph(e,t,r,o,n);break;case"Entity":n=a.entity(e,t,r,o,n);break;case"Divider":n=a.divider(e,t,r,o,n);break;case"BlockGroup":switch(r.blockGroupType){case"General":n=a.general(e,t,r,o,n);break;case"FormatContainer":n=a.formatContainer(e,t,r,o,n);break;case"ListItem":n=a.listItem(e,t,r,o,n)}}return n}},7352:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleBlockGroupChildren=void 0,t.handleBlockGroupChildren=function(e,t,r,o){var n,a=o.listFormat,l=a.nodeStack,i=t.firstChild;try{for(r.blocks.forEach((function(r,n){0!=n&&"BlockGroup"==r.blockType&&"ListItem"==r.blockGroupType||(a.nodeStack=[]),i=o.modelHandlers.block(e,t,r,o,i)}));i;){var s=i.nextSibling;null===(n=i.parentNode)||void 0===n||n.removeChild(i),i=s}}finally{a.nodeStack=l}}},6830:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleBr=void 0;var o=r(8826);t.handleBr=function(e,t,r,n){var a=e.createElement("br"),l=e.createElement("span");l.appendChild(a),t.appendChild(l),(0,o.handleSegmentCommon)(e,a,l,r,n)}},1379:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleDivider=void 0;var o=r(7908),n=r(5381);t.handleDivider=function(e,t,r,a,l){var i,s=r.cachedElement;return s?l=(0,n.reuseCachedElement)(t,s,l):(s=e.createElement(r.tagName),r.cachedElement=s,t.insertBefore(s,l),(0,o.applyFormat)(s,a.formatAppliers.divider,r.format,a),r.size&&s.setAttribute("size",r.size)),null===(i=a.onNodeCreated)||void 0===i||i.call(a,r,s),l}},736:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleEntity=void 0;var o=r(7582),n=r(7908),a=r(5381),l=r(2347);t.handleEntity=function(e,t,r,i,s){var d,c=r.wrapper,u=r.id,f=r.type,m=r.isReadonly,p=r.format,v=u&&f?{wrapper:c,id:u,type:f,isReadonly:!!m}:null,g=!(0,l.isBlockElement)(c);if(v&&(0,l.commitEntity)(c,v.type,v.isReadonly,v.id),s=(0,a.reuseCachedElement)(t,c,s),g&&(0,l.getObjectKeys)(p).length>0){var b=(0,l.wrap)(c,"span");(0,n.applyFormat)(b,i.formatAppliers.segment,p,i)}if(i.addDelimiterForEntity&&g&&m){var h=(0,o.__read)((0,l.addDelimiters)(c),1)[0];i.regularSelection.current.segment=h}return null===(d=i.onNodeCreated)||void 0===d||d.call(i,r,c),s}},740:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleFormatContainer=void 0;var o=r(7908),n=r(4451),a=r(5381),l=r(3348);t.handleFormatContainer=function(e,t,r,i,s){var d,c=r.cachedElement;if(c)s=(0,a.reuseCachedElement)(t,c,s),i.modelHandlers.blockGroupChildren(e,c,r,i);else if(!(0,n.isBlockGroupEmpty)(r)){var u=e.createElement(r.tagName);r.cachedElement=u,t.insertBefore(u,s),(0,l.stackFormat)(i,r.tagName,(function(){(0,o.applyFormat)(u,i.formatAppliers.container,r.format,i),(0,o.applyFormat)(u,i.formatAppliers.segmentOnBlock,r.format,i),(0,o.applyFormat)(u,i.formatAppliers.container,r.format,i)})),"pre"==r.tagName?(0,l.stackFormat)(i,"pre *",(function(){i.modelHandlers.blockGroupChildren(e,u,r,i)})):i.modelHandlers.blockGroupChildren(e,u,r,i),c=u}return c&&(null===(d=i.onNodeCreated)||void 0===d||d.call(i,r,c)),s}},3035:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleGeneralModel=void 0;var o=r(8826),n=r(183),a=r(3233),l=r(5381),i=r(2347);t.handleGeneralModel=function(e,t,r,s,d){var c,u=r.element;if(d&&u.parentNode==t?d=(0,l.reuseCachedElement)(t,u,d):(u=u.cloneNode(),r.element=u,t.insertBefore(u,d)),(0,n.isGeneralSegment)(r)&&(0,a.isNodeOfType)(u,1)){var f=(0,i.wrap)(u,"span");(0,o.handleSegmentCommon)(e,u,f,r,s)}else null===(c=s.onNodeCreated)||void 0===c||c.call(s,r,u);return s.modelHandlers.blockGroupChildren(e,u,r,s),d}},1920:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleImage=void 0;var o=r(7908),n=r(8826),a=r(8704);t.handleImage=function(e,t,r,l){var i=e.createElement("img"),s=document.createElement("span");t.appendChild(s),s.appendChild(i),i.src=r.src,r.alt&&(i.alt=r.alt),r.title&&(i.title=r.title),(0,o.applyFormat)(i,l.formatAppliers.image,r.format,l),(0,o.applyFormat)(i,l.formatAppliers.dataset,r.dataset,l);var d=r.format,c=d.width,u=d.height,f=c?(0,a.parseValueWithUnit)(c):0,m=u?(0,a.parseValueWithUnit)(u):0;f>0&&(i.width=f),m>0&&(i.height=m),r.isSelectedAsImageSelection&&(l.imageSelection={image:i}),(0,n.handleSegmentCommon)(e,i,s,r,l)}},3378:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleList=void 0;var o=r(7582),n=r(7908),a=r(2362);function l(e,t,r){var o={};(0,a.updateListMetadata)({dataset:o},(function(){return"number"==typeof e.orderedStyleType||"number"==typeof e.unorderedStyleType?{orderedStyleType:e.orderedStyleType,unorderedStyleType:e.unorderedStyleType}:null})),(0,n.applyFormat)(t,r.formatAppliers.dataset,o,r)}t.handleList=function(e,t,r,a,i){var s,d=0,c=a.listFormat.nodeStack;for(0==c.length&&c.push({node:t});d{Object.defineProperty(t,"__esModule",{value:!0}),t.handleListItem=void 0;var o=r(7908),n=r(3963),a=r(2347);t.handleListItem=function(e,t,r,l,i){var s,d;i=l.modelHandlers.list(e,t,r,l,i);var c=l.listFormat.nodeStack,u=(null===(s=null==c?void 0:c[(null==c?void 0:c.length)-1])||void 0===s?void 0:s.node)||t,f=e.createElement("li"),m=r.levels[r.levels.length-1];return u.insertBefore(f,(null==i?void 0:i.parentNode)==u?i:null),m?((0,o.applyFormat)(f,l.formatAppliers.listItemElement,r.format,l),(0,o.applyFormat)(f,l.formatAppliers.segment,r.formatHolder.format,l),(0,o.applyFormat)(f,l.formatAppliers.listItem,m,l),l.modelHandlers.blockGroupChildren(e,f,r,l)):(r.blocks.forEach(n.setParagraphNotImplicit),l.modelHandlers.blockGroupChildren(e,f,r,l),(0,a.unwrap)(f)),null===(d=l.onNodeCreated)||void 0===d||d.call(l,r,f),i}},1351:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleParagraph=void 0;var o=r(7582),n=r(7908),a=r(2347),l=r(6976),i=r(5381),s=r(3348);t.handleParagraph=function(e,t,r,d,c){var u,f,m=r.cachedElement;return m?c=(0,i.reuseCachedElement)(t,m,c):(0,s.stackFormat)(d,(null===(u=r.decorator)||void 0===u?void 0:u.tagName)||null,(function(){var i,u,f=!r.isImplicit||!!r.decorator||(0,a.getObjectKeys)(r.format).length>0&&r.segments.some((function(e){return"SelectionMarker"!=e.segmentType})),p=f?(0,o.__assign)((0,o.__assign)({},(null===(i=r.decorator)||void 0===i?void 0:i.format)||{}),r.segmentFormat):{};m=e.createElement((null===(u=r.decorator)||void 0===u?void 0:u.tagName)||"div"),t.insertBefore(m,c),d.regularSelection.current={block:f?m:m.parentNode,segment:null};var v=function(){var t=m;if(t){var n=r.segments[0];"SelectionMarker"==(null==n?void 0:n.segmentType)&&d.modelHandlers.text(e,t,(0,o.__assign)((0,o.__assign)({},n),{segmentType:"Text",text:""}),d),r.segments.forEach((function(r){d.modelHandlers.segment(e,t,r,d)}))}};f?((0,s.stackFormat)(d,p,v),(0,n.applyFormat)(m,d.formatAppliers.block,r.format,d),(0,n.applyFormat)(m,d.formatAppliers.container,r.format,d),(0,n.applyFormat)(m,d.formatAppliers.segmentOnBlock,p,d)):v(),(0,l.optimize)(m),c=m.nextSibling,f?r.cachedElement=m:(0,a.unwrap)(m)})),m&&(null===(f=d.onNodeCreated)||void 0===f||f.call(d,r,m)),c}},3913:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleSegment=void 0;var o=r(7582);t.handleSegment=function(e,t,r,n){var a=n.regularSelection;switch(r.isSelected&&!a.start&&(a.start=(0,o.__assign)({},a.current)),r.segmentType){case"Text":n.modelHandlers.text(e,t,r,n);break;case"Br":n.modelHandlers.br(e,t,r,n);break;case"Image":n.modelHandlers.image(e,t,r,n);break;case"General":n.modelHandlers.general(e,t,r,n,null);break;case"Entity":n.modelHandlers.entity(e,t,r,n,null)}r.isSelected&&a.start&&(a.end=(0,o.__assign)({},a.current))}},1596:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleSegmentDecorator=void 0;var o=r(7908),n=r(2347),a=r(3348);t.handleSegmentDecorator=function(e,t,r,l){var i=r.code,s=r.link;s&&(0,a.stackFormat)(l,"a",(function(){var e,r=document.createElement("a");(0,n.moveChildNodes)(r,t),t.appendChild(r),(0,o.applyFormat)(r,l.formatAppliers.link,s.format,l),(0,o.applyFormat)(r,l.formatAppliers.dataset,s.dataset,l),null===(e=l.onNodeCreated)||void 0===e||e.call(l,s,r)})),i&&(0,a.stackFormat)(l,"code",(function(){var e,r=document.createElement("code");(0,n.moveChildNodes)(r,t),t.appendChild(r),(0,o.applyFormat)(r,l.formatAppliers.code,i.format,l),null===(e=l.onNodeCreated)||void 0===e||e.call(l,i,r)}))}},8109:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleTable=void 0;var o=r(7908),n=r(6245),a=r(4451),l=r(2347),i=r(5381);t.handleTable=function(e,t,r,s,d){var c,u,f,m,p,v;if((0,a.isBlockEmpty)(r))return d;var g=r.cachedElement;g?(d=(0,i.reuseCachedElement)(t,g,d),(0,l.moveChildNodes)(g)):(g=e.createElement("table"),r.cachedElement=g,t.insertBefore(g,d),(0,o.applyFormat)(g,s.formatAppliers.block,r.format,s),(0,o.applyFormat)(g,s.formatAppliers.table,r.format,s),(0,o.applyFormat)(g,s.formatAppliers.tableBorder,r.format,s),(0,o.applyFormat)(g,s.formatAppliers.dataset,r.dataset,s)),null===(c=s.onNodeCreated)||void 0===c||c.call(s,r,g);var b=e.createElement("tbody");g.appendChild(b);for(var h=0;h1&&(k.rowSpan=O),M>1&&(k.colSpan=M),(!C.cachedElement||C.format.useBorderBox&&(0,n.hasMetadata)(r))&&(T>0&&!k.style.width&&(k.style.width=T+"px"),F>0&&!k.style.height&&(k.style.height=F+"px")),C.cachedElement||(C.cachedElement=k,(0,o.applyFormat)(k,s.formatAppliers.block,C.format,s),(0,o.applyFormat)(k,s.formatAppliers.tableCell,C.format,s),(0,o.applyFormat)(k,s.formatAppliers.tableCellBorder,C.format,s),(0,o.applyFormat)(k,s.formatAppliers.dataset,C.dataset,s)),s.modelHandlers.blockGroupChildren(e,k,C,s),null===(v=s.onNodeCreated)||void 0===v||v.call(s,C,k)}}}}return d}},8906:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleText=void 0;var o=r(8826);t.handleText=function(e,t,r,n){var a=e.createTextNode(r.text),l=e.createElement("span");t.appendChild(l),l.appendChild(a),(0,o.handleSegmentCommon)(e,a,l,r,n)}},2920:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.mergeNode=void 0;var o=r(3233),n=["SPAN","B","EM","I","U","SUB","SUP","STRIKE","S","A","CODE"];function a(e,t){var r=e.attributes,o=t.attributes;if(r.length!=o.length)return!1;for(var n=0;n=0&&a(t,r)){for(;r.firstChild;)t.appendChild(r.firstChild);r.parentNode.removeChild(r)}else t=r}}},6976:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.optimize=void 0;var o=r(3233),n=r(2920),a=r(9486);t.optimize=function e(t){if(!(0,o.isNodeOfType)(t,1)||!t.classList.contains("_Entity")){(0,a.removeUnnecessarySpan)(t),(0,n.mergeNode)(t);for(var r=t.firstChild;r;r=r.nextSibling)e(r)}}},9486:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.removeUnnecessarySpan=void 0;var o=r(3233);t.removeUnnecessarySpan=function(e){for(var t=e.firstChild;t;)if((0,o.isNodeOfType)(t,1)&&"SPAN"==t.tagName&&0==t.attributes.length){var r=t,n=t.nextSibling;for(t=t.nextSibling;r.lastChild;){var a=r.lastChild;e.insertBefore(a,n),n=a}e.removeChild(r)}else t=t.nextSibling}},7908:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.applyFormat=void 0,t.applyFormat=function(e,t,r,o){t.forEach((function(t){null==t||t(r,e,o)}))}},8826:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.handleSegmentCommon=void 0;var o=r(7908);t.handleSegmentCommon=function(e,t,r,n,a){var l;t.firstChild||(a.regularSelection.current.segment=t),(0,o.applyFormat)(r,a.formatAppliers.styleBasedSegment,n.format,a),a.modelHandlers.segmentDecorator(e,r,n,a),(0,o.applyFormat)(r,a.formatAppliers.elementBasedSegment,n.format,a),null===(l=a.onNodeCreated)||void 0===l||l.call(a,n,t)}},5381:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.removeNode=t.reuseCachedElement=void 0;var o=r(2347),n=r(3233);t.reuseCachedElement=function(e,t,r){var a,l;if(t.parentNode==e){for(;r&&r!=t&&(l=r,!(0,n.isNodeOfType)(l,1)||!(0,o.getEntityFromElement)(l));){var i=r.nextSibling;null===(a=r.parentNode)||void 0===a||a.removeChild(r),r=i}r&&r==t?r=r.nextSibling:e.insertBefore(t,r)}else e.insertBefore(t,r);return r},t.removeNode=function(e){var t,r=e.nextSibling;return null===(t=e.parentNode)||void 0===t||t.removeChild(e),r}},3348:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.stackFormat=void 0;var o=r(7582);t.stackFormat=function(e,t,r){var n="string"==typeof t?e.defaultImplicitFormatMap[t]:t;if(n){var a=e.implicitFormat;try{e.implicitFormat=(0,o.__assign)((0,o.__assign)({},a),n),r()}finally{e.implicitFormat=a}}else r()}},214:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.reducedModelChildProcessor=void 0;var o=r(7582),n=r(2347),a=r(1246);t.reducedModelChildProcessor=function(e,t,r){if(r.selectionRootNode){r.nodeStack||(r.nodeStack=function(e,t){for(var r=[],o=t;o&&(0,n.contains)(e,o);)"TABLE"==(0,n.getTagOfNode)(o)?r.splice(0,r.length,o):r.push(o),o=o.parentNode;return r}(t,r.selectionRootNode));var l=r.nodeStack.pop();if(l){var i=(0,o.__read)((0,a.getRegularSelectionOffsets)(r,t),2),s=i[0],d=i[1],c=s>=0||d>=0?function(e,t){for(var r=0,o=e.firstChild;o&&o!=t;)r++,o=o.nextSibling;return r}(t,l):-1;c>=0&&(0,a.handleRegularSelection)(c,r,e,s,d),(0,a.processChildNode)(e,l,r),c>=0&&(0,a.handleRegularSelection)(c+1,r,e,s,d)}else r.defaultElementProcessors.child(e,t,r)}}},1934:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.tablePreProcessor=void 0;var o=r(2347),n=r(1246);t.tablePreProcessor=function(e,t,r){var a=function(e,t){return(0,n.hasMetadata)(e)||t.isInSelection||function(e,t){var r,n,a,l;return[null===(r=t.imageSelection)||void 0===r?void 0:r.image,null===(n=t.tableSelection)||void 0===n?void 0:n.table,null===(a=t.regularSelection)||void 0===a?void 0:a.startContainer,null===(l=t.regularSelection)||void 0===l?void 0:l.endContainer].some((function(t){return(0,o.contains)(e,t,!0)}))}(e,t)}(t,r)?n.tableProcessor:n.entityProcessor;a(e,t,r)}},9843:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.combineBorderValue=t.extractBorderValues=void 0;var r=["none","hidden","dotted","dashed","solid","double","groove","ridge","inset","outset"],o=/^(thin|medium|thick|[\d\.]+\w*)$/;t.extractBorderValues=function(e){var t={};return(e||"").replace(/, /g,",").split(" ").forEach((function(e){r.indexOf(e)>=0&&!t.style?t.style=e:o.test(e)&&!t.width?t.width=e:e&&!t.color&&(t.color=e)})),t},t.combineBorderValue=function(e){return[e.width||"",e.style||"",e.color||""].join(" ").trim()||"none"}},5866:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.updateImageMetadata=void 0;var o=r(1246),n=r(2347),a=(0,n.createNumberDefinition)(),l=(0,n.createObjectDefinition)({widthPx:a,heightPx:a,leftPercent:a,rightPercent:a,topPercent:a,bottomPercent:a,angleRad:a,src:(0,n.createStringDefinition)(),naturalHeight:a,naturalWidth:a});t.updateImageMetadata=function(e,t){return(0,o.updateMetadata)(e,t,l)}},860:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.updateTableCellMetadata=void 0;var o=r(2347),n=r(1246),a=(0,o.createObjectDefinition)({bgColorOverride:(0,o.createBooleanDefinition)(!0)},!1,!0);t.updateTableCellMetadata=function(e,t){return(0,n.updateMetadata)(e,t,a)}},5165:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.updateTableMetadata=void 0;var o=r(1246),n=r(2347),a=(0,n.createStringDefinition)(!1,void 0,!0),l=(0,n.createBooleanDefinition)(!1),i=(0,n.createObjectDefinition)({topBorderColor:a,bottomBorderColor:a,verticalBorderColor:a,hasHeaderRow:l,headerRowColor:a,hasFirstColumn:l,hasBandedColumns:l,hasBandedRows:l,bgColorEven:a,bgColorOdd:a,tableBorderFormat:(0,n.createNumberDefinition)(!1,void 0,0,8)},!1,!0);t.updateTableMetadata=function(e,t){return(0,o.updateMetadata)(e,t,i)}},6593:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7582),n=r(8974),a=function(e){function t(t,r){return void 0===r&&(r={}),e.call(this,t,r,n.createContentModelEditorCore)||this}return(0,o.__extends)(t,e),t.prototype.createContentModel=function(e){var t=this.getCore();return t.api.createContentModel(t,e)},t.prototype.setContentModel=function(e,t){var r=this.getCore();r.api.setContentModel(r,e,t)},t.prototype.cacheContentModel=function(e){var t=this.getCore();t.reuseModel&&!t.lifecycle.shadowEditFragment&&(t.cachedModel=e||void 0)},t.prototype.getContentModelDefaultFormat=function(){return this.getCore().defaultFormat},t}(r(2347).EditorBase);t.default=a},5427:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createContentModel=void 0;var o=r(7582),n=r(1690),a=r(1246),l=r(1934);t.createContentModel=function(e,t){var r=e.reuseModel?e.cachedModel:null;return r&&e.lifecycle.shadowEditFragment&&(r=(0,n.cloneModel)(r)),r||function(e,t){var r=(0,o.__assign)((0,o.__assign)((0,o.__assign)({selectionRange:e.api.getSelectionRangeEx(e)},e.defaultDomToModelOptions),t||{}),{processorOverride:(0,o.__assign)({table:l.tablePreProcessor},(null==t?void 0:t.processorOverride)||{})});return e.reuseModel||(r.disableCacheElement=!0),(0,a.domToContentModel)(e.contentDiv,e.api.createEditorContext(e),r)}(e,t)}},7832:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createEditorContext=void 0,t.createEditorContext=function(e){return{isDarkMode:e.lifecycle.isDarkMode,defaultFormat:e.defaultFormat,darkColorHandler:e.darkColorHandler,addDelimiterForEntity:e.addDelimiterForEntity}}},7934:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.setContentModel=void 0;var o=r(7582),n=r(1246);t.setContentModel=function(e,t,r){var a=(0,n.contentModelToDom)(e.contentDiv.ownerDocument,e.contentDiv,t,e.api.createEditorContext(e),(0,o.__assign)((0,o.__assign)({},e.defaultModelToDomOptions),r||{}));e.lifecycle.shadowEditFragment||e.api.select(e,a)}},3515:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.switchShadowEdit=void 0;var o=r(2347);t.switchShadowEdit=function(e,t){var r=e;if(t!=!!r.lifecycle.shadowEditFragment)if(t){r.cachedModel||(r.cachedModel=r.api.createContentModel(r));var n=r.api.getSelectionRange(r,!0);r.lifecycle.shadowEditSelectionPath=n&&(0,o.getSelectionPath)(r.contentDiv,n),r.lifecycle.shadowEditFragment=r.contentDiv.ownerDocument.createDocumentFragment()}else r.cachedModel&&r.api.setContentModel(r,r.cachedModel),r.lifecycle.shadowEditFragment=null,r.lifecycle.shadowEditSelectionPath=null}},6093:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.onNodeCreated=void 0;var o=r(7582),n=r(5915),a=r(1690),l=r(1246),i=r(473),s=r(4040),d=r(5098),c=r(2347),u=function(){function e(e){var t=this;this.state=e,this.editor=null,this.disposer=null,this.onPaste=function(e){if(t.editor&&function(e){return!!e.clipboardData}(e)){var r=t.editor,o=e.clipboardData;(null==o?void 0:o.items)&&(e.preventDefault(),(0,c.extractClipboardItems)((0,c.toArray)(o.items),{allowedCustomPasteType:t.state.allowedCustomPasteType}).then((function(e){r.isDisposed()||(function(e){if(c.Browser.isAndroid){var t=e.createContentModel();(0,i.deleteSelection)(t,(0,s.getOnDeleteEntityCallback)(e)),e.setContentModel(t)}}(r),(0,n.default)(r,e))})))}}}return e.prototype.getName=function(){return"ContentModelCopyPaste"},e.prototype.initialize=function(e){var t=this;this.editor=e,this.disposer=this.editor.addDomEventHandler({paste:function(e){return t.onPaste(e)},copy:function(e){return t.onCutCopy(e,!1)},cut:function(e){return t.onCutCopy(e,!0)}})},e.prototype.dispose=function(){this.disposer&&this.disposer(),this.disposer=null,this.editor=null},e.prototype.getState=function(){return this.state},e.prototype.onCutCopy=function(e,r){var n=this;if(this.editor){var u=this.editor.getSelectionRangeEx();if(u&&!u.areAllCollapsed){var f=this.editor.createContentModel({disableCacheElement:!0}),m=(0,a.cloneModel)(f);1===u.type&&(0,d.iterateSelections)([m],(function(e,t){if(null==t?void 0:t.table){var r=null==t?void 0:t.table;return r.rows=r.rows.map((function(e){return(0,o.__assign)((0,o.__assign)({},e),{cells:e.cells.filter((function(e){return e.isSelected}))})})).filter((function(e){return e.cells.length>0})),!0}return!1}));var p=this.getTempDiv(this.editor),v=(0,l.contentModelToDom)(p.ownerDocument,p,m,{isDarkMode:!1,darkColorHandler:this.editor.getDarkColorHandler()},{onNodeCreated:t.onNodeCreated}),g=function(e,t){var r;if(!e)return null;var o=null;if(1===e.type&&e.coordinates){var n=t.querySelector("#"+e.table.id),a=1==(null===(r=n.parentElement)||void 0===r?void 0:r.childElementCount)?n.parentElement:n;o=(0,c.createRange)(a)}else if(2===e.type){var l=t.querySelector("#"+e.image.id);l&&(o=(0,c.createRange)(l))}else o=e.ranges[0];return o}(v,p);g&&(this.editor.triggerPluginEvent(9,{clonedRoot:p,range:g,rawEvent:e,isCut:r}).range&&(0,c.addRangeToSelection)(g),this.editor.runAsync((function(e){var t,o;(o=p).style.backgroundColor="",o.style.color="",o.style.display="none",(0,c.moveChildNodes)(o),e.focus(),v&&(null===(t=n.editor)||void 0===t||t.select(v)),r&&e.addUndoSnapshot((function(){var t;(0,i.deleteSelection)(f,(0,s.getOnDeleteEntityCallback)(e)),null===(t=n.editor)||void 0===t||t.setContentModel(f)}),"Cut")})))}}},e.prototype.getTempDiv=function(e){var t=e.getCustomData("CopyPasteTempDiv",(function(){var t=(0,c.createElement)(3,e.getDocument());return e.getDocument().body.appendChild(t),t}),(function(e){var t;return null===(t=e.parentNode)||void 0===t?void 0:t.removeChild(e)}));return t.style.backgroundColor="white",t.style.color="black",t.childNodes.forEach((function(e){return t.removeChild(e)})),t.style.display="",t.focus(),t},e}();t.default=u,t.onNodeCreated=function(e,t){(0,c.safeInstanceOf)(t,"HTMLTableElement")&&(0,c.wrap)(t,"div")}},2517:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(){}return e.prototype.getName=function(){return"ContentModelTypeInContainer"},e.prototype.initialize=function(){},e.prototype.dispose=function(){},e}();t.default=r},8974:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.promoteToContentModelEditorCore=t.createContentModelEditorCore=void 0;var o=r(7582),n=r(6093),a=r(2909),l=r(4e3),i=r(2517),s=r(5427),d=r(7832),c=r(2347),u=r(7934),f=r(3515);function m(e,t){var r=e;!function(e){e.lifecycle.defaultFormat=e.lifecycle.defaultFormat||{},e.defaultFormat=function(e){var t,r,o,n=null!==(t=e.lifecycle.defaultFormat)&&void 0!==t?t:{};return{fontWeight:n.bold?"bold":void 0,italic:n.italic||void 0,underline:n.underline||void 0,fontFamily:n.fontFamily||void 0,fontSize:n.fontSize||void 0,textColor:(null===(r=n.textColors)||void 0===r?void 0:r.lightModeColor)||n.textColor||void 0,backgroundColor:(null===(o=n.backgroundColors)||void 0===o?void 0:o.lightModeColor)||n.backgroundColor||void 0}}(e)}(r),function(e,t){var r=e.lifecycle.experimentalFeatures;e.defaultDomToModelOptions=t.defaultDomToModelOptions||{},e.defaultModelToDomOptions=t.defaultModelToDomOptions||{},e.reuseModel=(0,c.isFeatureEnabled)(r,"ReusableContentModel"),e.addDelimiterForEntity=(0,c.isFeatureEnabled)(r,"InlineEntityReadOnlyDelimiters")}(r,t),function(e){e.api.createEditorContext=d.createEditorContext,e.api.createContentModel=s.createContentModel,e.api.setContentModel=u.setContentModel,(0,c.isFeatureEnabled)(e.lifecycle.experimentalFeatures,"ReusableContentModel")&&(e.api.switchShadowEdit=f.switchShadowEdit),e.originalApi.createEditorContext=d.createEditorContext,e.originalApi.createContentModel=s.createContentModel,e.originalApi.setContentModel=u.setContentModel}(r)}t.createContentModelEditorCore=function(e,t){var r=(0,o.__assign)((0,o.__assign)({},t),{plugins:(0,o.__spreadArray)((0,o.__spreadArray)([],(0,o.__read)(t.plugins||[]),!1),[new l.default,new a.default],!1),corePluginOverride:(0,o.__assign)({typeInContainer:(0,c.isFeatureEnabled)(t.experimentalFeatures,"EditWithContentModel")?new i.default:void 0,copyPaste:(0,c.isFeatureEnabled)(t.experimentalFeatures,"ContentModelPaste")?new n.default({allowedCustomPasteType:t.allowedCustomPasteType||[]}):void 0},t.corePluginOverride||{})}),s=(0,c.createEditorCore)(e,r);return m(s,r),s},t.promoteToContentModelEditorCore=m},1053:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return!!e.createContentModel}},2909:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7582),n=r(5634),a=r(473),l=r(2511),i=r(4040),s=r(2976),d=r(1246),c=r(2347),u=function(){function e(){this.editor=null,this.triggeredEntityEvents=[],this.editWithContentModel=!1,this.hasDefaultFormat=!1}return e.prototype.getName=function(){return"ContentModelEdit"},e.prototype.initialize=function(e){this.editor=e,this.editWithContentModel=this.editor.isFeatureEnabled("EditWithContentModel");var t=this.editor.getContentModelDefaultFormat();this.hasDefaultFormat=(0,c.getObjectKeys)(t).filter((function(e){return void 0!==t[e]})).length>0},e.prototype.dispose=function(){this.editor=null},e.prototype.onPluginEvent=function(e){if(this.editor)switch(e.eventType){case 15:this.handleEntityOperationEvent(this.editor,e);break;case 0:this.handleKeyDownEvent(this.editor,e.rawEvent);break;case 7:case 6:this.editor.cacheContentModel(null)}},e.prototype.handleEntityOperationEvent=function(e,t){var r;"keydown"==(null===(r=t.rawEvent)||void 0===r?void 0:r.type)&&this.triggeredEntityEvents.push(t)},e.prototype.handleKeyDownEvent=function(e,t){var r=t.which;if(!this.editWithContentModel||t.defaultPrevented)e.cacheContentModel(null);else if(!t.defaultPrevented)switch(r){case 8:case 46:var o=e.getSelectionRangeEx(),a=0==o.type?o.ranges[0]:null;this.shouldDeleteWithContentModel(a,t)?(0,n.default)(e,t,this.triggeredEntityEvents):e.cacheContentModel(null);break;default:((0,c.isCharacterValue)(t)||"Process"==t.key)&&this.hasDefaultFormat&&this.tryApplyDefaultFormat(e),e.cacheContentModel(null)}this.triggeredEntityEvents.length>0&&(this.triggeredEntityEvents=[])},e.prototype.tryApplyDefaultFormat=function(e){for(var t,r,o=this,n=e.getSelectionRangeEx(),s=0==(null==n?void 0:n.type)?n.ranges[0]:null,u=s?c.Position.getStart(s):null,f=null!==(t=null==u?void 0:u.node)&&void 0!==t?t:null;f&&e.contains(f);){if((0,d.isNodeOfType)(f,1)&&(null===(r=f.getAttribute)||void 0===r?void 0:r.call(f,"style")))return;if((0,c.isBlockElement)(f))break;f=f.parentNode}(0,l.formatWithContentModel)(e,"input",(function(t){var r=(0,a.deleteSelection)(t,(0,i.getOnDeleteEntityCallback)(e,void 0,o.triggeredEntityEvents));if(2==r.deleteResult)return(0,d.normalizeContentModel)(t),e.addUndoSnapshot(),!0;if(0==r.deleteResult&&r.insertPoint&&u){var n=r.insertPoint,l=n.paragraph,s=n.path,c=n.marker,f=s[0].blocks,m=f.length,p=f.indexOf(l);if(l.isImplicit&&1==l.segments.length&&l.segments[0]==c&&m>0&&p==m-1){var v=f[p-1];"Paragraph"!=(null==v?void 0:v.blockType)&&o.applyDefaultFormat(e,c.format,u)}else l.segments.every((function(e){return"Text"!=e.segmentType}))&&o.applyDefaultFormat(e,c.format,u);return!1}return!1}))},e.prototype.applyDefaultFormat=function(e,t,r){var n=(0,s.getPendingFormat)(e)||{},a=e.getContentModelDefaultFormat(),l=(0,o.__assign)((0,o.__assign)((0,o.__assign)({},a),n),t);(0,s.setPendingFormat)(e,l,r)},e.prototype.shouldDeleteWithContentModel=function(e,t){return!((null==e?void 0:e.collapsed)&&3==e.startContainer.nodeType&&!(0,c.isModifierKey)(t)&&(this.canDeleteBefore(t,e)||this.canDeleteAfter(t,e)))},e.prototype.canDeleteBefore=function(e,t){return 8==e.which&&(t.startOffset>1||t.startContainer.previousSibling)},e.prototype.canDeleteAfter=function(e,t){var r,o;return 46==e.which&&(t.startOffset<(null!==(o=null===(r=t.startContainer.nodeValue)||void 0===r?void 0:r.length)&&void 0!==o?o:0)-1||t.startContainer.nextSibling)},e}();t.default=u},4e3:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1576),n=r(2976),a=function(){function e(){this.editor=null}return e.prototype.getName=function(){return"ContentModelFormat"},e.prototype.initialize=function(e){this.editor=e},e.prototype.dispose=function(){this.editor=null},e.prototype.onPluginEvent=function(e){if(this.editor)switch(e.eventType){case 3:e.rawEvent.isComposing||this.editor.isInIME()||this.checkAndApplyPendingFormat(e.rawEvent.data);break;case 4:this.checkAndApplyPendingFormat(e.rawEvent.data);break;case 0:e.rawEvent.which>=33&&e.rawEvent.which<=40&&(0,n.clearPendingFormat)(this.editor);break;case 6:case 7:(0,n.canApplyPendingFormat)(this.editor)||(0,n.clearPendingFormat)(this.editor)}},e.prototype.checkAndApplyPendingFormat=function(e){this.editor&&e&&((0,o.default)(this.editor,e),(0,n.clearPendingFormat)(this.editor))},e}();t.default=a},1021:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(9079),n=r(2347),a=r(251),l=r(1152),i=r(1082),s=r(5459),d=r(22),c=r(2389),u=function(){function e(e){void 0===e&&(e="SPAN"),this.unknownTagReplacement=e,this.editor=null}return e.prototype.getName=function(){return"ContentModelPaste"},e.prototype.initialize=function(e){this.editor=e},e.prototype.dispose=function(){this.editor=null},e.prototype.onPluginEvent=function(e){if(this.editor&&10==e.eventType){var t=e;if(t.domToModelOption){switch((0,n.getPasteSource)(e,!1)){case 0:(0,d.processPastedContentFromWordDesktop)(t);break;case 5:(0,c.processPastedContentWacComponents)(t);break;case 2:0!==e.pasteType&&2!==e.pasteType||(0,i.processPastedContentFromExcel)(t,this.editor.getTrustedHTMLHandler());break;case 4:e.sanitizingOption.additionalTagReplacements["google-sheets-html-origin"]="*";break;case 3:(0,s.processPastedContentFromPowerPoint)(t,this.editor.getTrustedHTMLHandler())}(0,o.default)(t.domToModelOption,"link",l.parseLink),(0,a.parseDeprecatedColor)(t.sanitizingOption),e.sanitizingOption.unknownTagReplacement=this.unknownTagReplacement}}},e}();t.default=u},1082:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.excelHandler=t.processPastedContentFromExcel=void 0;var o=r(9079),n=r(2347),a=/<\/\s*td\s*>((?!<\/\s*tr\s*>)[\s\S])*$/i,l=/<\/\s*tr\s*>((?!<\/\s*table\s*>)[\s\S])*$/i,i=/]*>[^<]*/i,s=/]*>[^<]*/i,d="solid 1px #d4d4d4";function c(e,t){if(e.match(a)){var r=t.match(i);e=(r?r[0]:"")+e+""}if(e.match(l)){var o=t.match(s);e=(o?o[0]:"")+e+"
    "}return e}t.processPastedContentFromExcel=function(e,t){var r=e.fragment,a=e.htmlBefore,l=e.clipboardData,i=l.html?c(l.html,a):void 0;if(i&&l.html!=i){var s=(new DOMParser).parseFromString(t(i),"text/html");(0,n.moveChildNodes)(r,null==s?void 0:s.body)}var u=r.firstChild;u&&u.childNodes.length>0&&"DIV"==(0,n.getTagOfNode)(u)&&Array.from(u.childNodes).every((function(e){return"META"==(0,n.getTagOfNode)(e)||"TABLE"==(0,n.getTagOfNode)(e)&&e==u.lastChild}))&&u.lastChild&&e.fragment.replaceChildren(u.lastChild),(0,o.default)(e.domToModelOption,"tableCell",(function(e,t){"none"===t.style.borderStyle&&(e.borderBottom=d,e.borderLeft=d,e.borderRight=d,e.borderTop=d)}))},t.excelHandler=c},5459:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.processPastedContentFromPowerPoint=void 0;var o=r(2347);t.processPastedContentFromPowerPoint=function(e,t){var r=e.fragment,n=e.clipboardData;if(n.html&&!n.text&&n.image){var a=(new DOMParser).parseFromString(t(n.html),"text/html");(0,o.moveChildNodes)(r,null==a?void 0:a.body)}}},2389:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.processPastedContentWacComponents=void 0;var o=r(7582),n=r(9079),a=r(2347),l=r(9263),i="ListContainerWrapper",s="EmptyTextRun",d=["TableInsertRowGapBlank","TableColumnResizeHandle","TableCellTopBorderHandle","TableCellLeftBorderHandle","TableHoverColumnHandle","TableHoverRowHandle","ListMarkerWrappingSpan"],c=(0,o.__spreadArray)((0,o.__spreadArray)(["OutlineElement","NumberListStyle","WACImageContainer","ListContainerWrapper","BulletListStyle","EOP",s],(0,o.__read)(d),!1),["TableCellContent","Paragraph","WACImageContainer","WACImageBorder"],!1),u=["UL","OL","LI"],f=u.join(","),m=function(e,t){var r=t.style.verticalAlign;"super"===r&&(e.superOrSubScriptSequence="super"),"sub"===r&&(e.superOrSubScriptSequence="sub")},p=function(e,t,r){var o,n=(0,a.getTagOfNode)(t);if((0,a.matchesSelector)(t,'ul[class^="BulletListStyle"]>.OutlineElement,ol[class^="NumberListStyle"]>.OutlineElement,span.WACImageContainer,span.WACImageBorder')&&(t.style.removeProperty("display"),t.style.removeProperty("margin")),t.classList.contains(i))r.elementProcessors.child(e,t,r);else if(!(t.classList.contains("EOP")&&(null===(o=t.previousElementSibling)||void 0===o?void 0:o.classList.contains(s))||d.some((function(e){return t.classList.contains(e)})))){if(function(e,t,r){return r.listFormat.levels.length>0&&u.every((function(t){return t!=e}))&&!(0,a.findClosestElementAncestor)(t,void 0,f)}(n,t,r)){var l=r.listFormat;l.levels=[],l.listParent=void 0}r.defaultElementProcessors.element(e,t,r)}},v=function(e,t,r){var o,n,a;null===(n=(o=r.defaultElementProcessors).li)||void 0===n||n.call(o,e,t,r);var l=r.listFormat.listParent;if(l){var i=l.blocks[l.blocks.length-1];if("BlockGroup"==i.blockType&&"ListItem"==i.blockGroupType&&r.listFormat.listParent!==i){var s=i.levels[i.levels.length-1],d=parseInt(null!==(a=t.getAttribute("data-aria-level"))&&void 0!==a?a:"");if(d>0)if(d>i.levels.length)for(;d!=i.levels.length;)i.levels.push(s);else i.levels.splice(d,i.levels.length-1),i.levels[d-1]=s}}},g=function(e,t){"block"===t.style.display&&(e.displayForDummyItem=void 0),e.marginLeft=void 0},b=function(e){e.marginLeft=void 0,e.paddingLeft=void 0};t.processPastedContentWacComponents=function(e){var t;(0,n.default)(e.domToModelOption,"segment",m),(0,n.default)(e.domToModelOption,"listItem",g),(0,n.default)(e.domToModelOption,"listLevel",b),(0,l.setProcessor)(e.domToModelOption,"element",p),(0,l.setProcessor)(e.domToModelOption,"li",v),(0,l.setProcessor)(e.domToModelOption,"ol",h),(0,l.setProcessor)(e.domToModelOption,"ul",h),(t=e.sanitizingOption.additionalAllowedCssClasses).push.apply(t,(0,o.__spreadArray)([],(0,o.__read)(c),!1))};var h=function(e,t,r){var o,n,l,s,d,c=e.blocks[e.blocks.length-1],u=(0,a.findClosestElementAncestor)(t,void 0,"."+i);(null===(o=null==u?void 0:u.previousElementSibling)||void 0===o?void 0:o.classList.contains(i))&&"BlockGroup"===(null==c?void 0:c.blockType)&&"ListItem"==c.blockGroupType&&(r.listFormat={threadItemCounts:[],levels:c.levels,listParent:e}),"OL"===t.tagName.toUpperCase()?null===(l=(n=r.defaultElementProcessors).ol)||void 0===l||l.call(n,e,t,r):null===(d=(s=r.defaultElementProcessors).ul)||void 0===d||d.call(s,e,t,r)}},22:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.wordDesktopElementProcessor=t.processPastedContentFromWordDesktop=void 0;var o=r(9079),n=r(2347),a=r(9526),l=r(9541),i=r(9263),s=/%/;function d(e,t,r,o){var n;s.test(t.style.lineHeight)&&!isNaN(n=parseInt(t.style.lineHeight))&&n<120&&(e.lineHeight=o.lineHeight)}function c(e,t,r,o){""!=t.style.marginLeft&&(e.marginLeft=o.marginLeft),e.marginBottom=void 0}t.processPastedContentFromWordDesktop=function(e){(0,i.setProcessor)(e.domToModelOption,"element",t.wordDesktopElementProcessor),(0,o.default)(e.domToModelOption,"block",d),(0,o.default)(e.domToModelOption,"listLevel",c),(0,o.default)(e.domToModelOption,"listItemElement",u),(0,n.chainSanitizerCallback)(e.sanitizingOption.cssStyleCallbacks,"border",(function(e,t){return"IMG"!=t.tagName||"none"!=e})),(0,n.chainSanitizerCallback)(e.sanitizingOption.elementCallbacks,"O:P",(function(e){return(0,n.moveChildNodes)(e),e.appendChild(e.ownerDocument.createTextNode(" ")),!0}))},t.wordDesktopElementProcessor=function(e,t,r){var o=(0,n.getStyles)(t);(0,l.processWordList)(o,e,t,r)||(0,a.processWordComments)(o,t)||r.defaultElementProcessors.element(e,t,r)};var u=function(e,t){t.style.marginLeft&&(e.marginLeft=void 0),t.style.marginRight&&(e.marginRight=void 0)}},9526:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.processWordComments=void 0;var o=r(2347),n=/#_msocom_/;t.processWordComments=function(e,t){return"comment"==e["mso-special-character"]||(0,o.safeInstanceOf)(t,"HTMLAnchorElement")&&n.test(t.href)||"comment-list"==e["mso-element"]}},9541:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.processWordList=void 0;var o=r(7582),n=r(1246),a=r(2347),l="mso-list",i="ignore";function s(e){return function(t,r,o){var n=o.listFormat,a=n.wordKnownLevels,l=n.wordLevel,i=n.wordList;if("OL"==t.listType&&"number"==typeof l&&i){var s=parseInt(e);null==s||isNaN(s)||(null==a?void 0:a.has(i))||(t.startNumberOverride=s)}}}function d(e,t){var r,o,n="";t=t||5;for(var a=e.firstChild;!n&&a;)c(a)?0==(n=null!==(o=null===(r=a.textContent)||void 0===r?void 0:r.trim())&&void 0!==o?o:"").length&&(n="o"):1==a.nodeType&&t>1&&(n=d(a,t-1)),a=a.nextSibling;return n}function c(e){if(1==e.nodeType){var t=(0,a.getStyles)(e)[l];if(t&&t.length>0&&t.trim().toLowerCase()==i)return!0}return!1}t.processWordList=function(e,t,r,a){var c=a.listFormat;c.wordKnownLevels||(c.wordKnownLevels=new Map);var u=e[l]||"";if(u.toLowerCase()===i)return!0;var f=u.split(" ");if(c.wordLevel=f[1]&&parseInt(f[1].substr(5)),c.wordList=f[0]||"l0",0==c.levels.length&&(c.levels=c.wordKnownLevels.get(c.wordList)||[]),u&&t&&"number"==typeof c.wordLevel){var m=c.wordLevel,p=d(r),v=function(e){return function(e){return["o","·","§","-"].indexOf(e)>=0}(e)?"UL":"OL"}(p),g={listType:v};if((0,n.parseFormat)(r,a.formatParsers.listLevel,g,a),m>c.levels.length)for(;m!=c.levels.length;)c.levels.push(g);else c.levels.splice(m,c.levels.length-1),c.levels[m-1]=g;return c.listParent=t,function(e,t,r,o,a){var l=(0,n.createListItem)(e.levels,t.segmentFormat);(0,n.parseFormat)(r,t.formatParsers.segmentOnBlock,t.segmentFormat,t),(0,n.parseFormat)(r,t.formatParsers.listItemElement,l.format,t),(0,n.parseFormat)(r,[s(a)],l.levels[l.levels.length-1],t),t.elementProcessors.child(l,r,t),(0,n.addBlock)(o,l)}(c,a,r,t,p),c.levels.length>0&&c.wordKnownLevels.get(c.wordList)!=c.levels&&c.wordKnownLevels.set(c.wordList,(0,o.__spreadArray)([],(0,o.__read)(c.levels),!1)),!0}return!1}},9079:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){var o;e.additionalFormatParsers||(e.additionalFormatParsers={}),e.additionalFormatParsers[t]||(e.additionalFormatParsers[t]=[]),null===(o=e.additionalFormatParsers[t])||void 0===o||o.push(r)}},251:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseDeprecatedColor=void 0;var o=r(2347),n=["activeborder","activecaption","appworkspace","background","buttonhighlight","buttonshadow","captiontext","inactiveborder","inactivecaption","inactivecaptiontext","infobackground","infotext","menu","menutext","scrollbar","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedfhadow","window","windowframe","windowtext"];t.parseDeprecatedColor=function(e){["color","background-color"].forEach((function(t){(0,o.chainSanitizerCallback)(e.cssStyleCallbacks,t,(function(e){return n.indexOf(e)<0}))}))}},1152:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseLink=void 0;var o=r(2347),n=["http:","https:","notes:","mailto:","onenote:"],a=/^file:\/\/\/[a-zA-Z\/]/i;t.parseLink=function(e,t){if((0,o.safeInstanceOf)(t,"HTMLAnchorElement")){var r;try{r=new URL(t.href)}catch(e){r=void 0}(r&&-1===n.indexOf(r.protocol)||a.test(t.href))&&(t.removeAttribute("href"),e.href="")}}},9263:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.setProcessor=void 0,t.setProcessor=function(e,t,r){e.processorOverride||(e.processorOverride={}),e.processorOverride[t]=r}},4040:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.shouldDeleteAllSegmentsBefore=t.shouldDeleteWord=t.handleKeyboardEventResult=t.getOnDeleteEntityCallback=void 0;var o=r(1246);t.getOnDeleteEntityCallback=function(e,t,r){return void 0===r&&(r=[]),function(o,n){return o.id&&o.type&&(r.some((function(e){return e.entity.wrapper==o.wrapper}))||e.triggerPluginEvent(15,{entity:{id:o.id,isReadonly:o.isReadonly,type:o.type,wrapper:o.wrapper},operation:n,rawEvent:t})),!!(null==t?void 0:t.defaultPrevented)&&e.contains(o.wrapper)}},t.handleKeyboardEventResult=function(e,t,r,n){switch(n){case 0:return e.cacheContentModel(null),!1;case 3:return r.preventDefault(),!1;case 2:case 1:return r.preventDefault(),(0,o.normalizeContentModel)(t),2==n&&e.addUndoSnapshot(),e.triggerPluginEvent(23,{rawEvent:r}),!0}},t.shouldDeleteWord=function(e,t){return t&&e.altKey&&!e.metaKey||!t&&e.ctrlKey&&!e.altKey},t.shouldDeleteAllSegmentsBefore=function(e){return e.metaKey&&!e.altKey}},3247:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.updateTableMetadata=t.updateTableCellMetadata=t.updateImageMetadata=t.extractBorderValues=t.combineBorderValue=t.promoteToContentModelEditorCore=t.createContentModelEditorCore=t.ContentModelCopyPastePlugin=t.ContentModelTypeInContainerPlugin=t.ContentModelPastePlugin=t.ContentModelEditPlugin=t.ContentModelFormatPlugin=t.isContentModelEditor=t.ContentModelEditor=void 0;var o=r(7582);(0,o.__exportStar)(r(735),t),(0,o.__exportStar)(r(886),t);var n=r(6593);Object.defineProperty(t,"ContentModelEditor",{enumerable:!0,get:function(){return n.default}});var a=r(1053);Object.defineProperty(t,"isContentModelEditor",{enumerable:!0,get:function(){return a.default}});var l=r(4e3);Object.defineProperty(t,"ContentModelFormatPlugin",{enumerable:!0,get:function(){return l.default}});var i=r(2909);Object.defineProperty(t,"ContentModelEditPlugin",{enumerable:!0,get:function(){return i.default}});var s=r(1021);Object.defineProperty(t,"ContentModelPastePlugin",{enumerable:!0,get:function(){return s.default}});var d=r(2517);Object.defineProperty(t,"ContentModelTypeInContainerPlugin",{enumerable:!0,get:function(){return d.default}});var c=r(6093);Object.defineProperty(t,"ContentModelCopyPastePlugin",{enumerable:!0,get:function(){return c.default}});var u=r(8974);Object.defineProperty(t,"createContentModelEditorCore",{enumerable:!0,get:function(){return u.createContentModelEditorCore}}),Object.defineProperty(t,"promoteToContentModelEditorCore",{enumerable:!0,get:function(){return u.promoteToContentModelEditorCore}});var f=r(9843);Object.defineProperty(t,"combineBorderValue",{enumerable:!0,get:function(){return f.combineBorderValue}}),Object.defineProperty(t,"extractBorderValues",{enumerable:!0,get:function(){return f.extractBorderValues}});var m=r(5866);Object.defineProperty(t,"updateImageMetadata",{enumerable:!0,get:function(){return m.updateImageMetadata}});var p=r(860);Object.defineProperty(t,"updateTableCellMetadata",{enumerable:!0,get:function(){return p.updateTableCellMetadata}});var v=r(5165);Object.defineProperty(t,"updateTableMetadata",{enumerable:!0,get:function(){return v.updateTableMetadata}})},5567:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getLeafSiblingBlock=void 0;var o=r(7582),n=r(1246);t.getLeafSiblingBlock=function(e,t,r){for(var a,l=(0,o.__spreadArray)([],(0,o.__read)(e),!1),i=function(){var e=l[0],o=e.blocks.indexOf(t);if(o<0)return"break";var i=e.blocks[o+(r?1:-1)];if(i){for(;"BlockGroup"==i.blockType;){var s=i.blocks[r?0:i.blocks.length-1];if(!s)return{value:{block:i,path:l}};if("BlockGroup"!=s.blockType)return l.unshift(i),{value:{block:s,path:l}};l.unshift(i),i=s}return{value:{block:i,path:l}}}if((0,n.isGeneralSegment)(e)){l.shift();var d=-1,c=e,u=null===(a=l[0])||void 0===a?void 0:a.blocks.find((function(e){return"Paragraph"==e.blockType&&(d=e.segments.indexOf(c))>=0}));if(!u)return"break";var f=u.segments[d+(r?1:-1)];if(f)return{value:{block:u,path:l,siblingSegment:f}};t=u}else{if("Document"==e.blockGroupType||"TableCell"==e.blockGroupType)return"break";l.shift(),t=e}};l.length>0;){var s=i();if("object"==typeof s)return s.value;if("break"===s)break}return null}},9842:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.setModelAlignment=void 0;var o=r(6682),n=r(5544),a={left:{ltr:"start",rtl:"end"},center:{ltr:"center",rtl:"center"},right:{ltr:"end",rtl:"start"}},l={left:{ltr:15,rtl:16},center:{ltr:14,rtl:14},right:{ltr:16,rtl:15}};t.setModelAlignment=function(e,t){var r=(0,n.getOperationalBlocks)(e,["ListItem"],["TableCell"]);return r.forEach((function(e){var r=e.block,n=a[t]["rtl"==r.format.direction?"rtl":"ltr"];"Table"===r.blockType?(0,o.alignTable)(r,l[t]["rtl"==r.format.direction?"rtl":"ltr"]):r&&(r.format.textAlign=n)})),r.length>0}},687:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.setModelIndentation=void 0;var o=r(7582),n=r(5544),a=r(4979),l=r(1246);t.setModelIndentation=function(e,t,r){void 0===r&&(r=40);var i=(0,n.getOperationalBlocks)(e,["ListItem"],["TableCell"]),s="indent"==t;return i.forEach((function(e){var t=e.block;if((0,a.isBlockGroupOfType)(t,"ListItem"))if(s){var n=(0,o.__assign)({},t.levels[t.levels.length-1]);delete n.startNumberOverride,delete n.orderedStyleType,delete n.unorderedStyleType,t.levels.push(n)}else t.levels.pop();else if(t){var i=t.format,d=i.marginLeft,c=i.marginRight,u="rtl"==i.direction,f=(0,l.parseValueWithUnit)(u?c:d),m=(s?Math.ceil:Math.floor)(f/r)*r;m==f&&(m=Math.max(m+r*(s?1:-1),0)),u?i.marginRight=m+"px":i.marginLeft=m+"px"}})),i.length>0}},6162:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.toggleModelBlockQuote=void 0;var o=r(1246),n=r(5544),a=r(4979),l=r(1953);function i(e){return(0,a.isBlockGroupOfType)(e,"FormatContainer")&&"blockquote"==e.tagName}t.toggleModelBlockQuote=function(e,t){var r=(0,n.getOperationalBlocks)(e,["FormatContainer","ListItem"],["TableCell"],!0);if(r.every((function(e){return i(e.block)})))r.forEach((function(e){var t=e.block,r=e.parent;(0,o.unwrapBlock)(r,t)}));else{var a=[],s=function(){return(0,o.createFormatContainer)("blockquote",t)},d=function(e,r){return function(e,t){return i(e)&&(0,o.areSameFormats)(t,e.format)}(e,(null==r?void 0:r.format)||t)};r.forEach((function(e){var t=e.block,r=e.parent;i(t)||(0,l.wrapBlockStep1)(a,r,t,s,d)})),(0,l.wrapBlockStep2)(a,d)}return r.length>0}},512:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.clearModelFormat=void 0;var o=r(7582),n=r(5294),a=r(4158),l=r(2347),i=r(1246),s=r(4829),d=r(5098),c=r(860),u=r(5165);function f(e,t){var r=(0,s.getClosestAncestorBlockGroupIndex)(e,["FormatContainer"],["TableCell"]);if(r>=0&&r=0&&n>=0){var l=(0,i.createFormatContainer)(o.tagName,o.format);o.blocks.splice(a,1),l.blocks=o.blocks.splice(a),e[r+1].blocks.splice(n+1,0,t,l)}}}function m(e){var t=e[(0,s.getClosestAncestorBlockGroupIndex)(e,["ListItem"],["TableCell"])];t&&(t.levels=[])}function p(e,t){if("Divider"==t.blockType){var r=e[0].blocks.indexOf(t);r>=0&&e[0].blocks.splice(r,1)}else"Paragraph"==t.blockType&&(t.format={},delete t.decorator)}t.clearModelFormat=function(e,t,r,i){(0,d.iterateSelections)([e],(function(e,o,n,a){a&&(0,l.arrayPush)(r,a),n?t.push([e,n]):o&&function(e,t){if(e){var r=e.table,o=e.colIndex,n=e.rowIndex,a=e.isWholeTableSelected,l=r.rows[n].cells[o];l.isSelected&&((0,c.updateTableCellMetadata)(l,(function(){return null})),l.isHeader=!1,l.format={useBorderBox:l.format.useBorderBox}),t.find((function(e){return e[0]==r}))||t.push([r,a])}}(o,i)}),{includeListFormatHolder:e.format?"never":"anySegment"});var s=r[0];if(1==t.length&&function(e){var t="Paragraph"==e.blockType?e.segments.filter((function(e){return e.isSelected})):[];return 1==t.length&&"SelectionMarker"==t[0].segmentType}(t[0][1])&&1==t.length)r.splice.apply(r,(0,o.__spreadArray)([0,r.length],(0,o.__read)((0,n.adjustWordSelection)(e,s)),!1)),m(t[0][0]);else if(t.length>1||t.some((function(e){return function(e){return e.isSelected||"Paragraph"==e.blockType&&e.segments.every((function(e){return e.isSelected}))}(e[1])})))for(var v=t.length-1;v>=0;v--){var g=(0,o.__read)(t[v],2),b=g[0],h=g[1];p(b,h),m(b),f(b,h)}!function(e,t){e.forEach((function(e){e.format=(0,o.__assign)({},t||{}),e.link&&delete e.link.format.textColor,delete e.code}))}(r,e.format),function(e){e.forEach((function(e){var t=(0,o.__read)(e,2),r=t[0];t[1]&&(r.format={useBorderBox:r.format.useBorderBox,borderCollapse:r.format.borderCollapse},(0,u.updateTableMetadata)(r,(function(){return null}))),(0,a.applyTableFormat)(r,void 0,!0)}))}(i)}},1690:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.cloneModel=void 0;var o=r(7582);function n(e){switch(e.blockType){case"BlockGroup":switch(e.blockGroupType){case"FormatContainer":return function(e){var t=e.tagName,r=e.cachedElement,o=Object.assign({tagName:t,cachedElement:r},s(e),d(e));return e.zeroFontSize&&(o.zeroFontSize=!0),o}(e);case"General":return p(e);case"ListItem":return g=(m=e).formatHolder,b=m.levels,Object.assign({formatHolder:v(g),levels:b.map((function(e){return Object.assign({},e)}))},s(m),d(m))}break;case"Divider":return r=(t=e).tagName,n=t.isSelected,c=t.cachedElement,Object.assign({isSelected:n,tagName:r,cachedElement:c},s(t));case"Entity":return u(e);case"Paragraph":return function(e){var t=e.cachedElement,r=e.segments,n=e.isImplicit,i=e.decorator,d=e.segmentFormat,c=Object.assign({cachedElement:t,isImplicit:n,segments:r.map(a),segmentFormat:d?(0,o.__assign)({},d):void 0},s(e),l(e));return i&&(c.decorator=Object.assign({tagName:i.tagName},l(i))),c}(e);case"Table":return function(e){var t=e.cachedElement,r=e.widths,o=e.rows;return Object.assign({cachedElement:t,widths:Array.from(r),rows:o.map(f)},s(e),i(e))}(e)}var t,r,n,c,m,g,b}function a(e){switch(e.segmentType){case"Br":return c(e);case"Entity":return u(e);case"General":return d=e,Object.assign(p(d),c(d));case"Image":return n=(o=e).src,a=o.alt,l=o.title,s=o.isSelectedAsImageSelection,Object.assign({src:n,alt:a,title:l,isSelectedAsImageSelection:s},c(o),i(o));case"SelectionMarker":return v(e);case"Text":return r=(t=e).text,Object.assign({text:r},c(t))}var t,r,o,n,a,l,s,d}function l(e){return{format:Object.assign({},e.format)}}function i(e){return{dataset:Object.assign({},e.dataset)}}function s(e){var t=e.blockType;return Object.assign({blockType:t},l(e))}function d(e){return{blockGroupType:e.blockGroupType,blocks:e.blocks.map(n)}}function c(e){var t=e.segmentType,r=e.isSelected,o=e.code,n=e.link,a=Object.assign({segmentType:t,isSelected:r},l(e));return o&&(a.code=l(o)),n&&(a.link=Object.assign(l(n),i(n))),a}function u(e){var t=e.wrapper,r=e.isReadonly,o=e.type,n=e.id;return Object.assign({wrapper:t,isReadonly:r,type:o,id:n},s(e),c(e))}function f(e){var t=e.height,r=e.cells,o=e.cachedElement;return Object.assign({height:t,cachedElement:o,cells:r.map(m)},l(e))}function m(e){var t=e.cachedElement,r=e.isSelected,o=e.spanAbove,n=e.spanLeft,a=e.isHeader;return Object.assign({cachedElement:t,isSelected:r,spanAbove:o,spanLeft:n,isHeader:a},d(e),l(e),i(e))}function p(e){var t=e.element;return Object.assign({element:t},s(e),d(e))}function v(e){return Object.assign({isSelected:e.isSelected},c(e))}t.cloneModel=function(e){var t=d(e);return e.format&&(t.format=Object.assign({},e.format)),t}},4829:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getClosestAncestorBlockGroupIndex=void 0,t.getClosestAncestorBlockGroupIndex=function(e,t,r){void 0===r&&(r=[]);for(var o=0;o=0)return o;if(r.indexOf(n.blockGroupType)>=0)return-1}return-1}},4979:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isBlockGroupOfType=void 0,t.isBlockGroupOfType=function(e,t){return(null==e?void 0:e.blockGroupType)==t}},485:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.mergeModel=void 0;var o=r(7582),n=r(1246),a=r(4158),l=r(473),i=r(4829),s=r(1303),d=r(1246);function c(e,t,r){var n,a=e.paragraph,l=e.marker,i=r?a:m(e,t.format),s=i.segments.indexOf(l);s>=0&&(n=i.segments).splice.apply(n,(0,o.__spreadArray)([s,0],(0,o.__read)(t.segments),!1)),t.decorator&&(i.decorator=(0,o.__assign)({},t.decorator))}function u(e,t,r){var o,l,i=e.tableContext;if(i&&1==r.blocks.length&&r.blocks[0]==t){for(var c=i.table,u=i.colIndex,f=i.rowIndex,m=0;m=c.rows[0].cells.length)for(var b=0;b=c.rows.length)for(c.rows[f+m]||(c.rows[f+m]={cells:[],format:{},height:0}),b=0;b=0&&s.blocks.splice(d,0,t),l&&(null==l||l.levels.forEach((function(e,r){t.levels[r]=(0,o.__assign)({},e)})))}function m(e,t){var r=e.paragraph,n=e.marker,a=e.path,l=r.segments.indexOf(n),s=a[0].blocks.indexOf(r),c=(0,d.createParagraph)(!1,(0,o.__assign)((0,o.__assign)({},r.format),t),r.segmentFormat);l>=0&&(c.segments=r.segments.splice(l)),s>=0&&a[0].blocks.splice(s+1,0,c);var u=(0,i.getClosestAncestorBlockGroupIndex)(a,["ListItem"],["FormatContainer","TableCell"]),f=a[u];if(f){var m=u>=0?a[u+1]:null,p=m?m.blocks.indexOf(f):-1;if(p>=0&&m){var v=(0,d.createListItem)(f.levels,f.formatHolder.format);s>=0&&(v.blocks=f.blocks.splice(s+1)),p>=0&&m.blocks.splice(p+1,0,v),a[u]=v}}return e.paragraph=c,c}function p(e,t){var r=e.path,o=m(e,t.format),n=r[0].blocks.indexOf(o);n>=0&&r[0].blocks.splice(n,0,t)}function v(e,t,r){e.blocks.forEach((function(e){var n;switch(e.blockType){case"BlockGroup":"ListItem"==e.blockGroupType&&(e.formatHolder.format=g(r,t,e.formatHolder.format)),v(e,t,r);break;case"Table":e.rows.forEach((function(e){return e.cells.forEach((function(e){v(e,t,r)}))}));break;case"Paragraph":var a=(null===(n=e.decorator)||void 0===n?void 0:n.format)||{};e.segments.forEach((function(e){"General"==e.segmentType&&v(e,t,r),e.format=g(r,t,(0,o.__assign)((0,o.__assign)({},a),e.format))})),"keepSourceEmphasisFormat"===r&&delete e.decorator}}))}function g(e,t,r){return"mergeAll"==e?(0,o.__assign)((0,o.__assign)({},t),r):(0,o.__assign)((0,o.__assign)({},t),(a={},l=(n=r).fontWeight,i=n.italic,s=n.underline,l&&"normal"!=l&&(a.fontWeight=l),i&&(a.italic=i),s&&(a.underline=s),a));var n,a,l,i,s}t.mergeModel=function(e,t,r,n){var a,i=null!==(a=null==n?void 0:n.insertPosition)&&void 0!==a?a:(0,l.deleteSelection)(e,r).insertPoint;if(i){(null==n?void 0:n.mergeFormat)&&"none"!=n.mergeFormat&&v(t,(0,o.__assign)((0,o.__assign)({},e.format||{}),i.marker.format),null==n?void 0:n.mergeFormat);for(var s=0;s{Object.defineProperty(t,"__esModule",{value:!0}),t.retrieveModelFormatState=void 0;var o=r(9843),n=r(4829),a=r(5539),l=r(5098),i=r(5165);function s(e,t,r,o){o?void 0!==r&&(e[t]=r):r!==e[t]&&delete e[t]}t.retrieveModelFormatState=function(e,t,r){var d,c,u=!0,f=!0,m=!0;(0,l.iterateSelections)([e],(function(l,p,v,g){if(function(e,t,r){var o,a,l=(0,n.getClosestAncestorBlockGroupIndex)(t,["ListItem"],[]),i=(0,n.getClosestAncestorBlockGroupIndex)(t,["FormatContainer"],[]);if(l>=0){var d=t[l],c=null===(o=null==d?void 0:d.levels[d.levels.length-1])||void 0===o?void 0:o.listType;s(e,"isBullet","UL"==c,r),s(e,"isNumbering","OL"==c,r)}s(e,"isBlockQuote",i>=0&&"blockquote"==(null===(a=t[i])||void 0===a?void 0:a.tagName),r)}(r,l,u),v&&(c?r.isMultilineSelection=!0:c=v),"Paragraph"==(null==v?void 0:v.blockType)&&(function(e,t,r){var o,n=parseInt(((null===(o=t.decorator)||void 0===o?void 0:o.tagName)||"").substring(1)),a=n>=1&&n<=6?n:void 0;s(e,"marginBottom",t.format.marginBottom,r),s(e,"marginTop",t.format.marginTop,r),s(e,"headerLevel",a,r),s(e,"textAlign",t.format.textAlign,r),s(e,"direction",t.format.direction,r)}(r,v,u),null==g||g.forEach((function(n){var l,i,d,c,p,b,h,y,_;(m||"SelectionMarker"!=n.segmentType)&&(function(e,t,r){var o,n,l=null===(n=null===(o=r.superOrSubScriptSequence)||void 0===o?void 0:o.split(" "))||void 0===n?void 0:n.pop();s(e,"isBold",(0,a.isBold)(r.fontWeight),t),s(e,"isItalic",r.italic,t),s(e,"isUnderline",r.underline,t),s(e,"isStrikeThrough",r.strikethrough,t),s(e,"isSuperscript","super"==l,t),s(e,"isSubscript","sub"==l,t),s(e,"fontName",r.fontFamily,t),s(e,"fontSize",r.fontSize,t),s(e,"backgroundColor",r.backgroundColor,t),s(e,"textColor",r.textColor,t),s(e,"lineHeight",r.lineHeight,t)}(r,u,Object.assign({},e.format,v.format,null===(l=v.decorator)||void 0===l?void 0:l.format,n.format,null===(i=n.code)||void 0===i?void 0:i.format,null===(d=n.link)||void 0===d?void 0:d.format,t)),s(r,"isCodeInline",!!(null==n?void 0:n.code),u)),m=!1,r.canUnlink=r.canUnlink||!!n.link,r.canAddImageAltText=r.canAddImageAltText||g.some((function(e){return"Image"==e.segmentType})),u=!1,"Image"===n.segmentType&&(f?(c=r,p=n.format,"borderTop",h=(b=(0,o.extractBorderValues)(p.borderTop)).color,y=b.width,_=b.style,c.imageFormat={borderColor:h,borderWidth:y,borderStyle:_,boxShadow:p.boxShadow,borderRadius:p.borderRadius},f=!1):r.imageFormat=void 0)})),u=!1),p)if(d){var b=d.table,h=d.colIndex,y=d.rowIndex;p.table!=b||p.colIndex==h&&p.rowIndex==y||(r.canMergeTableCell=!0,r.isMultilineSelection=!0)}else!function(e,t){var r=(0,i.updateTableMetadata)(e.table);t.isInTable=!0,t.tableHasHeader=e.table.rows.some((function(e){return e.cells.some((function(e){return e.isHeader}))})),r&&(t.tableFormat=r)}(p,r),d=p}),{includeListFormatHolder:"never"})}},1953:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.wrapBlockStep2=t.wrapBlockStep1=void 0;var o=r(1246),n=r(2347);t.wrapBlockStep1=function(e,t,r,n,a){var l,i=null!==(l=null==t?void 0:t.blocks.indexOf(r))&&void 0!==l?l:-1;if(t&&i>=0){t.blocks.splice(i,1);var s=t.blocks[i-1],d=a(s)?s:function(e,t,r){var o=r();return e.blocks.splice(t,0,o),o}(t,i,n);(0,o.setParagraphNotImplicit)(r),(0,o.addBlock)(d,r),e.unshift({parent:t,wrapper:d})}},t.wrapBlockStep2=function(e,t){e.forEach((function(e){var r=e.parent,a=e.wrapper,l=r.blocks.indexOf(a),i=r.blocks[l+1];l>=0&&t(i,a)&&(a.blocks.forEach(o.setParagraphNotImplicit),(0,n.arrayPush)(a.blocks,i.blocks),r.blocks.splice(l+1,1))}))}},473:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.deleteSelection=void 0;var o=r(7582),n=r(2650);t.deleteSelection=function(e,t,r){void 0===r&&(r=[]);var a=(0,n.deleteExpandedSelection)(e,t);return r.forEach((function(e){e&&function(e){return!!e.insertPoint}(a)&&0==a.deleteResult&&e(a,t)})),function(e){var t,r=e.insertPoint,n=e.deleteResult,a=e.lastParagraph,l=e.lastTableContext;r&&0!=n&&3!=n&&a&&a!=r.paragraph&&l==r.tableContext&&((t=r.paragraph.segments).push.apply(t,(0,o.__spreadArray)([],(0,o.__read)(a.segments),!1)),a.segments=[])}(a),a}},1685:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.deleteAllSegmentBefore=void 0;var o=r(7483);t.deleteAllSegmentBefore=function(e,t){for(var r=e.insertPoint,n=r.paragraph,a=r.marker,l=n.segments.indexOf(a)-1;l>=0;l--){var i=n.segments[l];i.isSelected=!0,(0,o.deleteSegment)(n,i,t)&&(e.deleteResult=2)}}},8689:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.backwardDeleteCollapsedSelection=t.forwardDeleteCollapsedSelection=void 0;var o=r(5567),n=r(1647),a=r(5911),l=r(7483);function i(e){return function(t,r){var i,s="forward"==e,d=t.insertPoint,c=d.paragraph,u=d.marker,f=d.path,m=d.tableContext,p=c.segments;!function(e){var t,r;if("Br"==(null===(t=e[e.length-1])||void 0===t?void 0:t.segmentType)){var o=e.filter((function(e){return"SelectionMarker"!=e.segmentType}));"Br"!=(null===(r=o[o.length-2])||void 0===r?void 0:r.segmentType)&&e.pop()}}(p);var v,g=p.indexOf(u)+(s?1:-1),b=p[g];if(b)(0,l.deleteSegment)(c,b,r,e)&&(t.deleteResult=1);else if(v=(0,o.getLeafSiblingBlock)(f,c,s)){var h=v.block,y=v.path,_=v.siblingSegment;"Paragraph"==h.blockType?(_?(0,l.deleteSegment)(h,_,r,e)&&(t.deleteResult=2):(s?t.lastParagraph=h:("Br"==(null===(i=h.segments[h.segments.length-1])||void 0===i?void 0:i.segmentType)&&h.segments.pop(),t.insertPoint=(0,n.createInsertPoint)(u,h,y,m),t.lastParagraph=c,delete h.cachedElement),t.deleteResult=2),t.lastTableContext=m):(0,a.deleteBlock)(y[0].blocks,h,r,void 0,e)&&(t.deleteResult=2)}else t.deleteResult=3}}t.forwardDeleteCollapsedSelection=i("forward"),t.backwardDeleteCollapsedSelection=i("backward")},3731:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.backwardDeleteWordSelection=t.forwardDeleteWordSelection=void 0;var o,n=r(7582),a=r(1246);function l(e){return function(t){for(var r=t.insertPoint,o=r.marker,l=r.paragraph,i=l.segments.indexOf(o),s="forward"==e,d=function(e,t,r,o){var l,i,s,d,c,u,f,m,p,v;return(0,n.__generator)(this,(function(n){switch(n.label){case 0:l=r?1:-1,i=e.segments,s=(0,a.isWhiteSpacePreserved)(e),d=t+l,n.label=1;case 1:if(!(d>=0&&d=0&&u0&&(d-=l),[3,6];c.text=v,l>0&&(u-=l)}n.label=5;case 5:return u+=l,[3,3];case 6:return[3,11];case 7:return[4,{punctuation:!0,space:!1,text:!1}];case 8:return n.sent()&&(i.splice(d,1),l>0&&(d-=l),o.deleteResult=2),[3,11];case 9:return[3,11];case 10:return[2,null];case 11:return d+=l,[3,1];case 12:return[2,null]}}))}(l,i,s,t),c=d.next(),u=0;5!=u&&!c.done;){var f=c.value,m=f.punctuation,p=f.space,v=f.text;switch(u){case 0:u=p?4:m?1:2,c=d.next(!0);break;case 1:s&&p?(u=3,c=d.next(!0)):m?c=d.next(!0):u=5;break;case 2:s&&p?(u=3,c=d.next(!0)):v?c=d.next(!0):u=5;break;case 3:m||!p?u=5:c=d.next(!0);break;case 4:p?c=d.next(!0):m?(u=s?3:1,c=d.next(!0)):u=s?5:2}}}}!function(e){e[e.Start=0]="Start",e[e.Punctuation=1]="Punctuation",e[e.Text=2]="Text",e[e.NonText=3]="NonText",e[e.Space=4]="Space",e[e.End=5]="End"}(o||(o={})),t.forwardDeleteWordSelection=l("forward"),t.backwardDeleteWordSelection=l("backward")},1647:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createInsertPoint=void 0,t.createInsertPoint=function(e,t,r,o){return{marker:e,paragraph:t,path:r,tableContext:o}}},5911:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.deleteBlock=void 0,t.deleteBlock=function(e,t,r,o,n){var a=e.indexOf(t);switch(t.blockType){case"Table":case"Divider":return o?e.splice(a,1,o):e.splice(a,1),!0;case"Entity":var l=t.isSelected?6:"forward"==n?4:"backward"==n?5:void 0;return void 0===l||r(t,l)||(o?e.splice(a,1,o):e.splice(a,1)),!0;case"BlockGroup":switch(t.blockGroupType){case"General":return!!o&&(e.splice(a,1,o),!0);case"ListItem":case"FormatContainer":return e.splice(a,1),!0}}return!1}},2650:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.deleteExpandedSelection=void 0;var o=r(7582),n=r(1647),a=r(5911),l=r(7483),i=r(5098),s=r(1246),d={contentUnderSelectedTableCell:"ignoreForTableOrCell",contentUnderSelectedGeneralElement:"generalElementOnly",includeListFormatHolder:"never"};t.deleteExpandedSelection=function(e,t){var r={deleteResult:0,insertPoint:null};return(0,i.iterateSelections)([e],(function(i,d,c,u){var f=(0,s.createParagraph)(!0,void 0,e.format),m=e.format,p=0;if(u)u[0]&&"Paragraph"==(null==c?void 0:c.blockType)&&(p=(f=c).segments.indexOf(u[0]),m=u[0].format,r.lastParagraph=f,r.lastTableContext=d,u.forEach((function(e,o){0!=o||r.insertPoint||"SelectionMarker"!=e.segmentType?(0,l.deleteSegment)(c,e,t)&&(r.deleteResult=2):r.insertPoint=(0,n.createInsertPoint)(e,c,i,d)})),2==r.deleteResult&&(0,s.setParagraphNotImplicit)(c));else if(c){var v=i[0].blocks;(0,a.deleteBlock)(v,c,t,f)&&(r.deleteResult=2)}else if(d){var g=d.table,b=d.colIndex,h=d.rowIndex,y=g.rows[h],_=y.cells[b];i=(0,o.__spreadArray)([_],(0,o.__read)(i),!1),f.segments.push((0,s.createBr)(e.format)),_.blocks=[f],delete _.cachedElement,delete y.cachedElement,r.deleteResult=2}if(!r.insertPoint){var P=(0,s.createSelectionMarker)(m);(0,s.setParagraphNotImplicit)(f),f.segments.splice(p,0,P),r.insertPoint=(0,n.createInsertPoint)(P,f,i,d)}}),d),r}},7483:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.deleteSegment=void 0;var o=r(4486),n=r(1246);t.deleteSegment=function(e,t,r,a){var l=e.segments,i=l.indexOf(t),s=(0,n.isWhiteSpacePreserved)(e),d="forward"==a,c="backward"==a;switch(s||function(e,t){for(var r,o=t-1;"SelectionMarker"==(null===(r=e[o])||void 0===r?void 0:r.segmentType);)o--;var a=e[o];a&&(0,n.normalizeSingleSegment)(a)}(l,i),t.segmentType){case"Br":case"Image":case"SelectionMarker":return l.splice(i,1),!0;case"Entity":var u=t.isSelected?6:d?4:c?5:void 0;return void 0===u||r(t,u)||l.splice(i,1),!0;case"Text":var f=t.text;return 0==f.length||t.isSelected?l.splice(i,1):a&&(f=(0,o.deleteSingleChar)(f,d),s||(f=(0,n.normalizeText)(f,d)),""==f?l.splice(i,1):t.text=f),!0;case"General":return!!t.isSelected&&(l.splice(i,1),!0)}}},4486:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.deleteSingleChar=void 0;var o=r(7582);t.deleteSingleChar=function(e,t){for(var r=(0,o.__spreadArray)([],(0,o.__read)(e),!1),n=0,a=t?0:r.length-1,l="notDeleted";a>=0&&a{Object.defineProperty(t,"__esModule",{value:!0}),t.canApplyPendingFormat=t.clearPendingFormat=t.setPendingFormat=t.getPendingFormat=void 0,t.getPendingFormat=function(e){return o(e).format},t.setPendingFormat=function(e,t,r){var n=o(e);n.format=t,n.position=r},t.clearPendingFormat=function(e){var t=o(e);t.format=null,t.position=null},t.canApplyPendingFormat=function(e){var t=o(e),r=!1;if(t.format&&t.position){var n=e.getFocusedPosition();(null==n?void 0:n.equalTo(t.position))&&(r=!0)}return r};var r="__ContentModelPendingFormat";function o(e){return e.getCustomData(r,(function(){return{format:null,position:null}}))}},1354:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(9843),n=r(1246);t.default=function(e,t,r){if(t){var a=e.format,l=t.width,i=t.style,s=t.color,d=(0,o.extractBorderValues)(a.borderTop),c=d.color,u=d.width,f=d.style,m="";m=l?(0,n.parseValueWithUnit)(l)+"px":u||"1px",i?m=m+" "+i:f?m=m+" "+f:m+=" solid",s?m=m+" "+s:c&&(m=m+" "+c),e.format.borderLeft=m,e.format.borderTop=m,e.format.borderBottom=m,e.format.borderRight=m}else delete e.format.borderLeft,delete e.format.borderTop,delete e.format.borderBottom,delete e.format.borderRight;r&&(e.format.borderRadius=r)}},2874:(e,t)=>{function r(e,t){e.blocks.forEach((function(e){switch(e.blockType){case"BlockGroup":"ListItem"==e.blockGroupType?t.push(e):(o(t),r(e,t),o(t));break;case"Paragraph":o(t),e.segments.forEach((function(e){"General"==e.segmentType&&r(e,t)})),o(t);break;case"Table":o(t),e.rows.forEach((function(e){return e.cells.forEach((function(e){r(e,t)}))})),o(t)}}))}function o(e){var t=e[e.length-1];t&&null===t||e.push(null)}function n(e,t,r){var o=e[t].levels,n=e[r].levels;return o.length<=n.length&&o.every((function(e,t){return e.listType==n[t].listType}))}function a(e,t){return e.levels.slice(0,t).some((function(e){return void 0!==e.startNumberOverride}))}Object.defineProperty(t,"__esModule",{value:!0}),t.findListItemsInSameThread=void 0,t.findListItemsInSameThread=function(e,t){var o=[];return r(e,o),function(e,t){var r,o=[],l=e.indexOf(t),i=t.levels.length,s="OL"==(null===(r=t.levels[i-1])||void 0===r?void 0:r.listType);if(l>=0){for(var d=l;d>=0;d--){if(!(u=e[d])){if(s)continue;break}var c=a(u,i);if(n(e,l,d)){if(o.unshift(u),s&&c)break}else if(!s||c)break}for(d=l+1;d{Object.defineProperty(t,"__esModule",{value:!0}),t.setListType=void 0;var o=r(5544),n=r(4979),a=r(1246);function l(e,t){return 1==e.length||"Paragraph"==t.blockType&&t.segments.length>0&&t.segments.some((function(e){return"Br"!=e.segmentType&&"SelectionMarker"!=e.segmentType}))}t.setListType=function(e,t){var r=(0,o.getOperationalBlocks)(e,["ListItem"],[]),i=r.every((function(e){var o,a=e.block;return(0,n.isBlockGroupOfType)(a,"ListItem")&&(null===(o=a.levels[a.levels.length-1])||void 0===o?void 0:o.listType)==t||!l(r,a)})),s=[],d=!1;return r.forEach((function(e,o){var c,u,f=e.block,m=e.parent;if((0,n.isBlockGroupOfType)(f,"ListItem")){var p=f.levels.pop();!i&&p?(p.listType=t,f.levels.push(p)):1==f.blocks.length&&(0,a.setParagraphNotImplicit)(f.blocks[0])}else{var v=m.blocks.indexOf(f);if(v>=0)if(l(r,f)){var g=m.blocks[v-1],b="Paragraph"==f.blockType&&(null===(c=f.segments[0])||void 0===c?void 0:c.format)||{},h=(0,a.createListItem)([{listType:t,startNumberOverride:o>0||"BlockGroup"==(null==g?void 0:g.blockType)&&"ListItem"==g.blockGroupType&&"OL"==(null===(u=g.levels[0])||void 0===u?void 0:u.listType)?void 0:1,direction:f.format.direction,textAlign:f.format.textAlign,marginTop:d?"0":void 0}],{fontFamily:b.fontFamily,fontSize:b.fontSize,textColor:b.textColor});"Paragraph"==f.blockType&&(f.isImplicit=!0),h.blocks.push(f),m.blocks.splice(v,1,h),s.push(h)}else d=!0,s.forEach((function(e){return e.levels[0].marginBottom="0"})),s=[]}})),(0,a.normalizeContentModel)(e),r.length>0}},5113:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.adjustSegmentSelection=void 0;var o=r(5544),n=r(5736);t.adjustSegmentSelection=function(e,t,r){var a,l,i=(0,o.getSelectedParagraphs)(e),s=!1;return i.forEach((function(e){var o=a?0:e.segments.findIndex((function(e){return t(e)})),n=e.segments;if(!a){a=n[o];for(var i=o;i>0;i--){if(!r(n[i-1],a)){s=s||!!n[i-1].isSelected;break}a=n[i-1],s=s||!n[i-1].isSelected}}if(a)for(i=o;i{Object.defineProperty(t,"__esModule",{value:!0}),t.adjustWordSelection=void 0;var o=r(7582),n=r(1246),a=r(5098);function l(e,t){var r=e.text,o=-1;if(t)for(var a=0;a=0;a--)if(l=r[a],(0,n.isPunctuation)(l)||(0,n.isSpace)(l)){o=a+1;break}return o}function i(e,t,r,a){var l=t.text,i=(0,n.createText)(l.substring(0,a),e[r].format);t.code&&(i.code={format:(0,o.__assign)({},t.code.format)}),t.link&&(i.link={format:(0,o.__assign)({},t.link.format),dataset:(0,o.__assign)({},t.link.dataset)}),t.text=l.substring(a,l.length),e.splice(r,0,i)}t.adjustWordSelection=function(e,t){var r;if((0,a.iterateSelections)([e],(function(e,o,n,a){return"Paragraph"==(null==n?void 0:n.blockType)&&1==(null==a?void 0:a.length)&&a[0]==t&&(r=n),!0})),r){for(var o=[],n=r.segments.indexOf(t),s=n-1;s>=0&&"Text"==(d=r.segments[s]).segmentType;s--){if((c=l(d,!1))>-1){if(c==d.text.length)break;i(r.segments,d,s,c),o.push(r.segments[s+1]);break}o.push(r.segments[s])}if(n=r.segments.indexOf(t),o.push(t),o.length<=1)return o;for(s=n+1;s-1){if(0==c)break;i(r.segments,d,s,c),o.push(r.segments[s]);break}o.push(r.segments[s])}return o[o.length-1]==t?[t]:o}return[t]}},981:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.collapseTableSelection=void 0;var o=r(1246);t.collapseTableSelection=function(e,t){var r,n=t.firstCol,a=null===(r=e[t.firstRow])||void 0===r?void 0:r.cells[n];a&&(0,o.addSegment)(a,(0,o.createSelectionMarker)())}},5544:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getFirstSelectedListItem=t.getFirstSelectedTable=t.getOperationalBlocks=t.getSelectedParagraphs=t.getSelectedSegments=t.getSelectedSegmentsAndParagraphs=void 0;var o=r(4979),n=r(5098),a=r(4829);function l(e,t){var r=s(e,{includeListFormatHolder:t?"allSegments":"never"}),o=[];return r.forEach((function(e){var r=e.segments,n=e.block;r&&(t&&!n||"Paragraph"==(null==n?void 0:n.blockType))&&r.forEach((function(e){"Entity"==e.segmentType&&e.isReadonly||o.push([e,"Paragraph"==(null==n?void 0:n.blockType)?n:null])}))})),o}function i(e,t,r,o){var n=[],l=o?t.map((function(e){return[e]})):[t],i=s(e,{includeListFormatHolder:"never",contentUnderSelectedTableCell:"ignoreForTable"});return d(i),i.forEach((function(e){for(var t=e.path,o=e.block,i=function(e){var i=(0,a.getClosestAncestorBlockGroupIndex)(t,l[e],r);return i>=0?(n.filter((function(e){return e.block==t[i]})).length<=0&&n.push({parent:t[i+1],block:t[i]}),"break"):e==l.length-1&&o?(n.push({parent:t[0],block:o}),"break"):void 0},s=0;s1&&c(e,!1)&&e.pop(),e.length>1&&c(e,!0)&&e.shift()}function c(e,t){var r,o=e[t?0:e.length-1];if("Paragraph"==(null===(r=o.block)||void 0===r?void 0:r.blockType)&&o.segments&&o.segments.length>0){var n=o.block.segments,a=o.segments[0];return 1==o.segments.length&&"SelectionMarker"==a.segmentType&&a==n[t?n.length-1:0]}return!1}t.getSelectedSegmentsAndParagraphs=l,t.getSelectedSegments=function(e,t){return l(e,t).map((function(e){return e[0]}))},t.getSelectedParagraphs=function(e){var t=s(e,{includeListFormatHolder:"never"}),r=[];return d(t),t.forEach((function(e){var t=e.block;"Paragraph"==(null==t?void 0:t.blockType)&&r.push(t)})),r},t.getOperationalBlocks=i,t.getFirstSelectedTable=function(e){var t,r=s(e,{includeListFormatHolder:"never"});return d(r),r.forEach((function(e){var r=e.block,o=e.tableContext;t||(t="Table"==(null==r?void 0:r.blockType)?r:null==o?void 0:o.table)})),t},t.getFirstSelectedListItem=function(e){var t;return i(e,["ListItem"],["TableCell"]).forEach((function(e){!t&&(0,o.isBlockGroupOfType)(e.block,"ListItem")&&(t=e.block)})),t}},5098:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.iterateSelections=void 0;var o=r(7582);function n(e,t,r,a,l){for(var i=e[0],s=(null==r?void 0:r.includeListFormatHolder)||"allSegments",d=(null==r?void 0:r.contentUnderSelectedTableCell)||"include",c=(null==r?void 0:r.contentUnderSelectedGeneralElement)||"contentOnly",u=!1,f=!1,m=0;m0&&t(e,a,p,O))return!0;break;case"Divider":case"Entity":if((l||p.isSelected)&&t(e,a,p))return!0}}return!("never"==s||"ListItem"!=i.blockGroupType||!u||f&&"anySegment"!=s||!t(e,a,void 0,[i.formatHolder]))}t.iterateSelections=function(e,t,r,o,a){n(e,(function(e,r,o,n){var a;return(null===(a=o)||void 0===a?void 0:a.cachedElement)&&delete o.cachedElement,t(e,r,o,n)}),r,o,a)}},5736:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.setSelection=void 0;var o=r(1246);function n(e,t,r,s){return i(t,e,r,s,(function(t){return(0,o.isGeneralSegment)(e)&&l(e,t),e.blocks.forEach((function(e){t=function(e,t,r,o){switch(e.blockType){case"BlockGroup":return n(e,t,r,o);case"Table":return function(e,t,r,o){var i=a(e,r),s=o?a(e,o):i;if(!t&&i&&s)for(var d=0;d=i.y&&d<=s.y&&c>=i.x&&c<=s.x;l(e.rows[d].cells[c],u)}else e.rows.forEach((function(e){return e.cells.forEach((function(e){t=n(e,t,r,o)}))}));return t}(e,t,r,o);case"Divider":case"Entity":return i(t,e,r,o,(function(t){return t?e.isSelected=!0:delete e.isSelected,t}));case"Paragraph":var s=[];for(e.segments.forEach((function(e,a){t=i(t,e,r,o,(function(t){return function(e,t,r,o,a,i){switch(e.segmentType){case"SelectionMarker":return(!t||e!=o&&e!=a)&&r.push(i),t;case"General":return l(e,t),e!=o&&e!=a?n(e,t,o,a):t;case"Image":return l(e,t),e.isSelectedAsImageSelection=o==e&&(!a||a==e),t;default:return l(e,t),t}}(e,t,s,r,o,a)}))}));s.length>0;){var d=s.pop();d>=0&&e.segments.splice(d,1)}return t;default:return t}}(e,t,r,s)})),t}))}function a(e,t){var r=-1,o=-1;if(t)for(var n=0;o<0&&n=0&&o>=0?{x:r,y:o}:void 0}function l(e,t){return t?e.isSelected=!0:delete e.isSelected,t}function i(e,t,r,o,n){return(e=n(e=e||t==r))&&!!o&&t!=o}t.setSelection=function(e,t,r){n(e,!1,t||null,r||null)}},6682:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.alignTable=void 0,t.alignTable=function(e,t){e.format.marginLeft=15==t?"":"auto",e.format.marginRight=16==t?"":"auto",delete e.cachedElement}},7691:(e,t,r)=>{var o,n;Object.defineProperty(t,"__esModule",{value:!0}),t.alignTableCell=void 0;var a=r(5226),l=((o={})[17]="start",o[18]="center",o[19]="end",o),i=((n={})[20]="top",n[21]="middle",n[22]="bottom",n);t.alignTableCell=function(e,t){var r,o=(0,a.getSelectedCells)(e);if(o)for(var n=l[t],s=i[t],d=o.firstRow;d<=o.lastRow;d++)for(var c=o.firstCol;c<=o.lastCol;c++){var u=null===(r=e.rows[d])||void 0===r?void 0:r.cells[c],f=null==u?void 0:u.format;f&&(delete u.cachedElement,f.textAlign=n||f.textAlign,f.verticalAlign=s||f.verticalAlign)}}},4158:(e,t,r)=>{var o;Object.defineProperty(t,"__esModule",{value:!0}),t.applyTableFormat=void 0;var n=r(7582),a=r(1246),l=r(9843),i=r(3684),s=r(860),d=r(5165),c={topBorderColor:"#ABABAB",bottomBorderColor:"#ABABAB",verticalBorderColor:"#ABABAB",hasHeaderRow:!1,hasFirstColumn:!1,hasBandedRows:!1,hasBandedColumns:!1,bgColorEven:null,bgColorOdd:"#ABABAB20",headerRowColor:"#ABABAB",tableBorderFormat:0};t.applyTableFormat=function(e,t,r){var o=e.rows;(0,d.updateTableMetadata)(e,(function(d){var p=(0,n.__assign)((0,n.__assign)((0,n.__assign)({},c),d),t||{}),v=function(e,t){var r=[];return e.forEach((function(e){var o=[];r.push(o),e.cells.forEach((function(e){(0,s.updateTableCellMetadata)(e,(function(e){return e&&t?(o.push(!1),delete e.bgColorOverride):o.push(!!(null==e?void 0:e.bgColorOverride)),e}))}))})),r}(o,!r);return delete e.cachedElement,function(e){e.forEach((function(e){e.cells.forEach((function(e){delete e.cachedElement})),delete e.cachedElement}))}(o),function(e,t){e.forEach((function(r,o){r.cells.forEach((function(n,i){var s=u[t.tableBorderFormat]({firstRow:0===o,lastRow:o===e.length-1,firstColumn:0===i,lastColumn:i===r.cells.length-1}),d=[t.topBorderColor,t.verticalBorderColor,t.bottomBorderColor,t.verticalBorderColor];s.forEach((function(e,t){var r=!e&&d[t]||"";n.format[a.BorderKeys[t]]=(0,l.combineBorderValue)({style:m(r),width:"1px",color:r})}))}))}))}(o,p),function(e,t,r){var o=t.hasBandedRows,n=t.hasBandedColumns,a=t.bgColorOdd,l=t.bgColorEven;e.forEach((function(e,t){e.cells.forEach((function(e,s){if(!r[t][s]){var d=(o||n)&&(n&&s%2!=0||o&&t%2!=0)?a:l;(0,i.setTableCellBackgroundColor)(e,d)}}))}))}(o,p,v),function(e,t,r){e.forEach((function(o,n){o.cells.forEach((function(o,a){t.hasFirstColumn&&0===a?(o.isHeader=!0,0===n||r[n][a]||(f(o.format,"borderTop"),(0,i.setTableCellBackgroundColor)(o,null)),n!==e.length-1&&0!==n&&f(o.format,"borderBottom")):o.isHeader=!1}))}))}(o,p,v),function(e,t,r){var o;null===(o=e[0])||void 0===o||o.cells.forEach((function(e,o){e.isHeader=t.hasHeaderRow,t.hasHeaderRow&&t.headerRowColor&&(r[0][o]||(0,i.setTableCellBackgroundColor)(e,t.headerRowColor),f(e.format,"borderTop",t.headerRowColor),f(e.format,"borderRight",t.headerRowColor),f(e.format,"borderLeft",t.headerRowColor))}))}(o,p,v),p}))};var u=((o={})[0]=function(e){return[!1,!1,!1,!1]},o[1]=function(e){return[!1,!e.lastColumn,!1,!e.firstColumn]},o[4]=function(e){var t=e.firstColumn,r=e.firstRow;return[!r,!e.lastColumn&&!t||t&&r,!e.lastRow&&!r,!t]},o[2]=function(e){var t=e.firstRow,r=e.firstColumn,o=e.lastColumn;return[t,t||o,!1,t||r]},o[3]=function(e){var t=e.firstColumn;return[!1,e.lastColumn,!1,t]},o[5]=function(e){var t=e.firstRow,r=e.firstColumn;return[r&&!t,t,r&&!t,t&&!r]},o[6]=function(e){var t=e.firstRow,r=e.firstColumn;return[!t,t||!r,!t,!r]},o[7]=function(e){var t=e.firstColumn,r=e.firstRow;return[!0,r||!t,!r,!0]},o[8]=function(){return[!0,!0,!0,!0]},o);function f(e,t,r){var o=(0,l.extractBorderValues)(e[t]);o.color=r||"",o.style=m(o.color),e[t]=(0,l.combineBorderValue)(o)}function m(e){return e&&"transparent"!=e?"solid":"none"}},5788:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.canMergeCells=void 0,t.canMergeCells=function(e,t,r,o,n){var a=r==n||e[t].cells.every((function(e,t){return tn||!e.spanAbove})),l=t==o||e.every((function(e,n){return no||!e.cells[r].spanLeft})),i=e[o].cells.map((function(t,a){return a>=r&&a<=n?function(e,t,r){for(var o,n,a=0,l=t+1;l=t&&a<=o?function(e,t,r){for(var o,n,a,l=0,i=r+1;i<(null===(o=e[t])||void 0===o?void 0:o.cells.length)&&(null===(a=null===(n=e[t])||void 0===n?void 0:n.cells[i])||void 0===a?void 0:a.spanLeft);i++)l++;return l}(e,a,n):-1})).every((function(e,r,o){return e<0||e==o[t]}));return a&&l&&i&&s}},2969:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createTableStructure=void 0;var o=r(1246);t.createTableStructure=function(e,t,r){var n=(0,o.createTable)(r);return(0,o.addBlock)(e,n),n.rows.forEach((function(e){for(var r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.deleteTable=void 0,t.deleteTable=function(e){e.rows=[],delete e.cachedElement}},629:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.deleteTableColumn=void 0;var o=r(981),n=r(5226);t.deleteTableColumn=function(e){var t=(0,n.getSelectedCells)(e);if(t){for(var r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.deleteTableRow=void 0;var o=r(981),n=r(5226);t.deleteTableRow=function(e){var t=(0,n.getSelectedCells)(e);t&&(e.rows[t.firstRow].cells.forEach((function(r,o){var n,a=null===(n=e.rows[t.lastRow+1])||void 0===n?void 0:n.cells[o];a&&(a.spanAbove=a.spanAbove&&r.spanAbove)})),e.rows.splice(t.firstRow,t.lastRow-t.firstRow+1),(0,o.collapseTableSelection)(e.rows,t))}},5226:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getSelectedCells=void 0;var o=r(7536);t.getSelectedCells=function(e){var t=-1,r=-1,n=-1,a=-1,l=!1;return e.rows.forEach((function(e,i){return e.cells.forEach((function(e,s){(0,o.default)(e)&&(l=!0,t<0&&(t=i),r<0&&(r=s),n=Math.max(n,i),a=Math.max(a,s))}))})),l?{firstRow:t,firstCol:r,lastRow:n,lastCol:a}:null}},7350:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.insertTableColumn=void 0;var o=r(1246),n=r(5226);t.insertTableColumn=function(e,t){var r=(0,n.getSelectedCells)(e),a=2==t;if(r)for(var l=null==r?void 0:r.firstCol;l<=r.lastCol;l++)e.rows.forEach((function(e){var t=e.cells[a?r.firstCol:r.lastCol];e.cells.splice(a?r.firstCol:r.lastCol+1,0,(0,o.createTableCell)(t.spanLeft,t.spanAbove,t.isHeader,t.format))})),e.widths.splice(a?r.firstCol:r.lastCol+1,0,e.widths[a?r.firstCol:r.lastCol])}},9457:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.insertTableRow=void 0;var o=r(7582),n=r(1246),a=r(5226);t.insertTableRow=function(e,t){var r=(0,a.getSelectedCells)(e),l=0==t;if(r)for(var i=r.firstRow;i<=r.lastRow;i++){var s=e.rows[l?r.firstRow:r.lastRow];e.rows.splice(l?r.firstRow:r.lastRow+1,0,{format:(0,o.__assign)({},s.format),cells:s.cells.map((function(e){return(0,n.createTableCell)(e.spanLeft,e.spanAbove,e.isHeader,e.format)})),height:s.height})}}},8509:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.mergeTableCells=void 0;var o=r(5788),n=r(5226);t.mergeTableCells=function(e){var t=(0,n.getSelectedCells)(e);if(t&&(0,o.canMergeCells)(e.rows,t.firstRow,t.firstCol,t.lastRow,t.lastCol))for(var r=t.firstRow;r<=t.lastRow;r++){for(var a=t.firstCol;a<=t.lastCol;a++){var l=e.rows[r].cells[a];l&&(l.spanLeft=a>t.firstCol,l.spanAbove=r>t.firstRow,delete l.cachedElement)}delete e.rows[r].cachedElement}}},4765:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.mergeTableColumn=void 0;var o=r(5788),n=r(5226);t.mergeTableColumn=function(e,t){var r,a,l,i,s=(0,n.getSelectedCells)(e);if(s){var d=9==t?s.firstCol:s.lastCol+1;if(d>0&&d{Object.defineProperty(t,"__esModule",{value:!0}),t.mergeTableRow=void 0;var o=r(5788),n=r(5226);t.mergeTableRow=function(e,t){var r,a,l,i=(0,n.getSelectedCells)(e);if(i){var s=7==t?i.firstRow:i.lastRow+1;if(s>0&&s{Object.defineProperty(t,"__esModule",{value:!0}),t.normalizeTable=void 0;var o=r(7582),n=r(1246),a=r(2347);function l(e){return e<=4?120:e<=6?100:70}function i(e,t){t.blocks.every((function(e){return"Paragraph"==e.blockType&&(0==(t=(t=e.segments).filter((function(e){return"SelectionMarker"!=e.segmentType}))).length||1==t.length&&"Br"==t[0].segmentType);var t}))||((0,a.arrayPush)(e.blocks,t.blocks),t.blocks=[])}t.normalizeTable=function(e,t){var r,a=e.format;a.borderCollapse&&a.useBorderBox||(a.borderCollapse=!0,a.useBorderBox=!0),e.rows.forEach((function(e,r){e.cells.forEach((function(e,o){0==e.blocks.length&&(0,n.addSegment)(e,(0,n.createBr)(t)),0==r?e.spanAbove=!1:r>0&&e.isHeader&&(e.isHeader=!1,delete e.cachedElement),0==o&&(e.spanLeft=!1),e.format.useBorderBox=!0})),e.height<22&&(e.height=22)}));for(var s=Math.max.apply(Math,(0,o.__spreadArray)([],(0,o.__read)(e.rows.map((function(e){return e.cells.length}))),!1)),d=0;d0;u--)c(u);for(var f=function(t){var r=e.rows[t];r.cells.forEach((function(r,o){var n,a=null===(n=e.rows[t-1])||void 0===n?void 0:n.cells[o];a&&r.spanAbove&&i(a,r)})),r.cells.every((function(e){return e.spanAbove}))&&(e.rows[t-1].height+=r.height,e.rows.splice(t,1))},m=e.rows.length-1;m>0;m--)f(m)}},3684:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.setTableCellBackgroundColor=void 0;var o=r(2347),n=r(860);t.setTableCellBackgroundColor=function(e,t,r){if(t){e.format.backgroundColor=t,r&&(0,n.updateTableCellMetadata)(e,(function(e){return(e=e||{}).bgColorOverride=!0,e}));var a=function(e){var t=(0,o.parseColor)(e);if(t){var r=t[0]/255,n=t[1]/255,a=t[2]/255;return 50*(Math.max(r,n,a)+Math.min(r,n,a))}return 255}(t);a<20?e.format.textColor="#ffffff":a>80?e.format.textColor="#000000":delete e.format.textColor}else delete e.format.backgroundColor,delete e.format.textColor;delete e.cachedElement}},3618:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.splitTableCellHorizontally=void 0;var o=r(7582),n=r(1246),a=r(5226);t.splitTableCellHorizontally=function(e){var t=(0,a.getSelectedCells)(e);if(t)for(var r=function(r){if(e.rows.every((function(e,o){var n;return ot.lastRow||(null===(n=e.cells[r+1])||void 0===n?void 0:n.spanLeft)})))e.rows.forEach((function(e,o){delete e.cells[r].cachedElement,o>=t.firstRow&&o<=t.lastRow&&(e.cells[r+1].spanLeft=!1,delete e.cells[r+1].cachedElement)}));else{e.rows.forEach((function(e,a){var l=e.cells[r];if(l){var i=(0,n.createTableCell)(l.spanLeft,l.spanAbove,l.isHeader,l.format);i.dataset=(0,o.__assign)({},l.dataset),at.lastRow?i.spanLeft=!0:i.isSelected=l.isSelected,e.cells.splice(r+1,0,i),delete e.cells[r].cachedElement}}));var a=Math.max(e.widths[r]/2,30);e.widths.splice(r,1,a,a)}},l=t.lastCol;l>=t.firstCol;l--)r(l)}},2242:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.splitTableCellVertically=void 0;var o=r(7582),n=r(1246),a=r(5226);t.splitTableCellVertically=function(e){var t=(0,a.getSelectedCells)(e);if(t)for(var r=t.lastRow;r>=t.firstRow;r--){var l=e.rows[r],i=e.rows[r+1];if(l.cells.forEach((function(e){delete e.cachedElement})),delete l.cachedElement,null==i?void 0:i.cells.every((function(e,r){return rt.lastCol||e.spanAbove})))i.cells.forEach((function(e,r){r>=t.firstCol&&r<=t.lastCol&&(e.spanAbove=!1,delete e.cachedElement)})),delete i.cachedElement;else{var s=Math.max(l.height/=2,22),d={format:(0,o.__assign)({},l.format),height:s,cells:l.cells.map((function(e,r){var a=(0,n.createTableCell)(e.spanLeft,e.spanAbove,e.isHeader,e.format);return a.dataset=(0,o.__assign)({},e.dataset),rt.lastCol?a.spanAbove=!0:a.isSelected=e.isSelected,a}))};l.height=s,e.rows.splice(r+1,0,d)}}}},5149:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(2511),n=r(9842);t.default=function(e,t){(0,o.formatWithContentModel)(e,"setAlignment",(function(e){return(0,n.setModelAlignment)(e,t)}))}},8365:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(9139);t.default=function(e,t){(0,o.formatParagraphWithContentModel)(e,"setDirection",(function(e){if("rtl"==e.format.direction!=("rtl"==t)){e.format.direction=t;var r=e.format.marginLeft,o=e.format.paddingLeft;e.format.marginLeft=e.format.marginRight,e.format.marginRight=r,e.format.paddingLeft=e.format.paddingRight,e.format.paddingRight=o}}))}},6747:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7582),n=r(1246),a=r(9139);t.default=function(e,t){(0,a.formatParagraphWithContentModel)(e,"setHeaderLevel",(function(e){var r,a,l,i=t>0?"h"+t:(a=(null==(r=e.decorator)?void 0:r.tagName)||"",(l=parseInt(a.substring(1)))>=1&&l<=6?a:null),s=i&&n.defaultImplicitFormatMap[i]||{};t>0?(e.decorator={tagName:i,format:(0,o.__assign)({},s)},e.segments.forEach((function(e){delete e.format.fontSize,delete e.format.fontWeight}))):i&&delete e.decorator}))}},3721:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(2511),n=r(687);t.default=function(e,t,r){(0,o.formatWithContentModel)(e,"setIndentation",(function(e){return(0,n.setModelIndentation)(e,t,r)}),{preservePendingFormat:!0})}},7339:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1246),n=r(9139);t.default=function(e,t,r){(0,n.formatParagraphWithContentModel)(e,"setParagraphMargin",(function(e){e.decorator||(e.decorator=(0,o.createParagraphDecorator)("p")),t?e.format.marginTop=t:null===t&&delete e.format.marginTop,r?e.format.marginBottom=r:null===r&&delete e.format.marginBottom}))}},9294:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(9139);t.default=function(e,t){(0,o.formatParagraphWithContentModel)(e,"setSpacing",(function(e){e.format.lineHeight=t.toString(),e.segments.forEach((function(e){e.format.lineHeight&&delete e.format.lineHeight}))}))}},1977:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7582),n=r(2511),a=r(6162),l={borderLeft:"3px solid rgb(200, 200, 200)",textColor:"rgb(102, 102, 102)"},i={marginTop:"1em",marginBottom:"1em",marginLeft:"40px",marginRight:"40px",paddingLeft:"10px"};t.default=function(e,t){void 0===t&&(t=l);var r=(0,o.__assign)((0,o.__assign)({},i),t);(0,n.formatWithContentModel)(e,"toggleBlockQuote",(function(e){return(0,a.toggleModelBlockQuote)(e,r)}),{preservePendingFormat:!0})}},5634:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(2347),n=r(1685),a=r(473),l=r(2511),i=r(4040),s=r(3731),d=r(8689);t.default=function(e,t,r){var c=t.which;(0,l.formatWithContentModel)(e,46==c?"handleDeleteKey":"handleBackspaceKey",(function(l){var c=(0,a.deleteSelection)(l,(0,i.getOnDeleteEntityCallback)(e,t,r),function(e){var t=46==e.which;return[(0,i.shouldDeleteAllSegmentsBefore)(e)&&!t?n.deleteAllSegmentBefore:null,(0,i.shouldDeleteWord)(e,!!o.Browser.isMac)?t?s.forwardDeleteWordSelection:s.backwardDeleteWordSelection:null,t?d.forwardDeleteCollapsedSelection:d.backwardDeleteCollapsedSelection]}(t)).deleteResult;return(0,i.handleKeyboardEventResult)(e,l,t,c)}),{skipUndoSnapshot:!0,changeSource:"Keyboard",getChangeData:function(){return c}})}},1576:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7582),n=r(2511),a=r(2976),l=r(5098),i=r(1246);t.default=function(e,t){var r=(0,a.getPendingFormat)(e);if(r){var s=!1;(0,n.formatWithContentModel)(e,"applyPendingFormat",(function(e){return(0,l.iterateSelections)([e],(function(e,n,a,l){if("Paragraph"==(null==a?void 0:a.blockType)&&1==(null==l?void 0:l.length)&&"SelectionMarker"==l[0].segmentType){var d=l[0],c=a.segments.indexOf(d),u=a.segments[c-1];if("Text"==(null==u?void 0:u.segmentType)){var f=u.text,m=f.substr(-t.length,t.length);if(m==t||" "==t&&" "==m){d.format=(0,o.__assign)({},r),u.text=f.substring(0,f.length-t.length);var p=(0,i.createText)(" "==t?" ":t,(0,o.__assign)((0,o.__assign)({},u.format),r));a.segments.splice(c,0,p),(0,i.setParagraphNotImplicit)(a),s=!0}}}return!0})),s&&(0,i.normalizeContentModel)(e),s}),{skipUndoSnapshot:!0})}}},2313:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(512),n=r(2511),a=r(1246);t.default=function(e){(0,n.formatWithContentModel)(e,"clearFormat",(function(e){var t=[],r=[],n=[];return(0,o.clearModelFormat)(e,t,r,n),(0,a.normalizeContentModel)(e),t.length>0||r.length>0||n.length>0}))}},7950:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7582),n=r(2511),a=r(2976),l=r(2229);t.default=function(e){var t=(0,o.__assign)((0,o.__assign)({},e.getUndoState()),{isDarkMode:e.isDarkMode(),zoomScale:e.getZoomScale()});return(0,n.formatWithContentModel)(e,"getFormatState",(function(r){var o=(0,a.getPendingFormat)(e);return(0,l.retrieveModelFormatState)(r,o,t),!1}),{useReducedModel:!0}),t}},6055:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(2511),n=r(2976),a=r(5098);t.default=function(e){var t=(0,n.getPendingFormat)(e);return t||(0,o.formatWithContentModel)(e,"getSegmentFormat",(function(e){return(0,a.iterateSelections)([e],(function(e,r,o,n){var a;return t=(null===(a=null==n?void 0:n[0])||void 0===a?void 0:a.format)||null,!0}),{includeListFormatHolder:"never"}),!1}),{useReducedModel:!0}),t}},6623:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(5113),n=r(2511);t.default=function(e){var t=null;return(0,n.formatWithContentModel)(e,"adjustImageSelection",(function(e){return(0,o.adjustSegmentSelection)(e,(function(e){return!(!e.isSelected||"Image"!=e.segmentType||(t=e,0))}),(function(e,t){return e==t}))})),t}},8401:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(6154),n=r(2347);t.default=function(e,t){var r=e.getSelectionRangeEx();(0,n.readFile)(t,(function(t){t&&!e.isDisposed()&&2===r.type&&(0,o.default)(e,"changeImage",(function(e){e.src=t,e.dataset={},e.format.width="",e.format.height=""}),{image:r.image,previousSrc:r.image.src,newSrc:t,originalSrc:a(r.image)})}))};var a=function(e){var t=(0,n.getMetadata)(e);return t&&t.src||""}},2930:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1246),n=r(2511),a=r(4040),l=r(485),i=r(2347);function s(e,t){(0,n.formatWithContentModel)(e,"insertImage",(function(r){var n=(0,o.createImage)(t),i=(0,o.createContentModelDocument)();return(0,o.addSegment)(i,n),(0,l.mergeModel)(r,i,(0,a.getOnDeleteEntityCallback)(e),{mergeFormat:"mergeAll"}),!0}))}t.default=function(e,t){"string"==typeof t?s(e,t):(0,i.readFile)(t,(function(t){t&&!e.isDisposed()&&s(e,t)}))}},2063:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(6154);t.default=function(e,t){(0,o.default)(e,"setImageAltText",(function(e){e.alt=t}))}},4653:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1354),n=r(6154);t.default=function(e,t,r){(0,n.default)(e,"setImageBorder",(function(e){(0,o.default)(e,t,r)}))}},4735:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(6154);t.default=function(e,t,r){(0,o.default)(e,"setImageBoxShadow",(function(e){e.format.boxShadow=t,r?(e.format.marginBottom=r,e.format.marginLeft=r,e.format.marginRight=r,e.format.marginTop=r):null===r&&(delete e.format.marginBottom,delete e.format.marginLeft,delete e.format.marginRight,delete e.format.marginTop)}))}},886:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.paste=t.toggleCode=t.setParagraphMargin=t.adjustImageSelection=t.setImageAltText=t.adjustLinkSelection=t.removeLink=t.insertLink=t.clearFormat=t.applyPendingFormat=t.getSegmentFormat=t.getFormatState=t.changeImage=t.setImageBoxShadow=t.setImageBorder=t.setSpacing=t.toggleBlockQuote=t.setHeaderLevel=t.setDirection=t.setAlignment=t.setIndentation=t.hasSelectionInBlockGroup=t.hasSelectionInSegment=t.hasSelectionInBlock=t.setListStartNumber=t.setListStyle=t.insertImage=t.changeCapitalization=t.applySegmentFormat=t.changeFontSize=t.setTextColor=t.setFontSize=t.setFontName=t.setBackgroundColor=t.toggleSuperscript=t.toggleSubscript=t.toggleStrikethrough=t.toggleUnderline=t.toggleItalic=t.toggleBold=t.toggleNumbering=t.toggleBullet=t.editTable=t.setTableCellShade=t.formatTable=t.insertTable=void 0;var o=r(6901);Object.defineProperty(t,"insertTable",{enumerable:!0,get:function(){return o.default}});var n=r(2435);Object.defineProperty(t,"formatTable",{enumerable:!0,get:function(){return n.default}});var a=r(7783);Object.defineProperty(t,"setTableCellShade",{enumerable:!0,get:function(){return a.default}});var l=r(959);Object.defineProperty(t,"editTable",{enumerable:!0,get:function(){return l.default}});var i=r(58);Object.defineProperty(t,"toggleBullet",{enumerable:!0,get:function(){return i.default}});var s=r(4505);Object.defineProperty(t,"toggleNumbering",{enumerable:!0,get:function(){return s.default}});var d=r(5539);Object.defineProperty(t,"toggleBold",{enumerable:!0,get:function(){return d.default}});var c=r(3462);Object.defineProperty(t,"toggleItalic",{enumerable:!0,get:function(){return c.default}});var u=r(3679);Object.defineProperty(t,"toggleUnderline",{enumerable:!0,get:function(){return u.default}});var f=r(5602);Object.defineProperty(t,"toggleStrikethrough",{enumerable:!0,get:function(){return f.default}});var m=r(2494);Object.defineProperty(t,"toggleSubscript",{enumerable:!0,get:function(){return m.default}});var p=r(1308);Object.defineProperty(t,"toggleSuperscript",{enumerable:!0,get:function(){return p.default}});var v=r(5253);Object.defineProperty(t,"setBackgroundColor",{enumerable:!0,get:function(){return v.default}});var g=r(1250);Object.defineProperty(t,"setFontName",{enumerable:!0,get:function(){return g.default}});var b=r(5442);Object.defineProperty(t,"setFontSize",{enumerable:!0,get:function(){return b.default}});var h=r(9715);Object.defineProperty(t,"setTextColor",{enumerable:!0,get:function(){return h.default}});var y=r(7451);Object.defineProperty(t,"changeFontSize",{enumerable:!0,get:function(){return y.default}});var _=r(4847);Object.defineProperty(t,"applySegmentFormat",{enumerable:!0,get:function(){return _.default}});var P=r(5284);Object.defineProperty(t,"changeCapitalization",{enumerable:!0,get:function(){return P.default}});var C=r(2930);Object.defineProperty(t,"insertImage",{enumerable:!0,get:function(){return C.default}});var S=r(3e3);Object.defineProperty(t,"setListStyle",{enumerable:!0,get:function(){return S.default}});var k=r(1123);Object.defineProperty(t,"setListStartNumber",{enumerable:!0,get:function(){return k.default}});var O=r(6516);Object.defineProperty(t,"hasSelectionInBlock",{enumerable:!0,get:function(){return O.default}});var M=r(5676);Object.defineProperty(t,"hasSelectionInSegment",{enumerable:!0,get:function(){return M.default}});var T=r(7536);Object.defineProperty(t,"hasSelectionInBlockGroup",{enumerable:!0,get:function(){return T.default}});var F=r(3721);Object.defineProperty(t,"setIndentation",{enumerable:!0,get:function(){return F.default}});var w=r(5149);Object.defineProperty(t,"setAlignment",{enumerable:!0,get:function(){return w.default}});var x=r(8365);Object.defineProperty(t,"setDirection",{enumerable:!0,get:function(){return x.default}});var j=r(6747);Object.defineProperty(t,"setHeaderLevel",{enumerable:!0,get:function(){return j.default}});var E=r(1977);Object.defineProperty(t,"toggleBlockQuote",{enumerable:!0,get:function(){return E.default}});var B=r(9294);Object.defineProperty(t,"setSpacing",{enumerable:!0,get:function(){return B.default}});var A=r(4653);Object.defineProperty(t,"setImageBorder",{enumerable:!0,get:function(){return A.default}});var I=r(4735);Object.defineProperty(t,"setImageBoxShadow",{enumerable:!0,get:function(){return I.default}});var L=r(8401);Object.defineProperty(t,"changeImage",{enumerable:!0,get:function(){return L.default}});var D=r(7950);Object.defineProperty(t,"getFormatState",{enumerable:!0,get:function(){return D.default}});var H=r(6055);Object.defineProperty(t,"getSegmentFormat",{enumerable:!0,get:function(){return H.default}});var N=r(1576);Object.defineProperty(t,"applyPendingFormat",{enumerable:!0,get:function(){return N.default}});var R=r(2313);Object.defineProperty(t,"clearFormat",{enumerable:!0,get:function(){return R.default}});var z=r(7058);Object.defineProperty(t,"insertLink",{enumerable:!0,get:function(){return z.default}});var W=r(3932);Object.defineProperty(t,"removeLink",{enumerable:!0,get:function(){return W.default}});var G=r(1270);Object.defineProperty(t,"adjustLinkSelection",{enumerable:!0,get:function(){return G.default}});var U=r(2063);Object.defineProperty(t,"setImageAltText",{enumerable:!0,get:function(){return U.default}});var K=r(6623);Object.defineProperty(t,"adjustImageSelection",{enumerable:!0,get:function(){return K.default}});var V=r(7339);Object.defineProperty(t,"setParagraphMargin",{enumerable:!0,get:function(){return V.default}});var q=r(1340);Object.defineProperty(t,"toggleCode",{enumerable:!0,get:function(){return q.default}});var $=r(5915);Object.defineProperty(t,"paste",{enumerable:!0,get:function(){return $.default}})},1270:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(5113),n=r(5294),a=r(2511),l=r(5544),i=r(5736);t.default=function(e){var t="",r=null;return(0,a.formatWithContentModel)(e,"adjustLinkSelection",(function(e){var a,s,d=(0,o.adjustSegmentSelection)(e,(function(e){return!!e.isSelected&&!!e.link}),(function(e,t){return!!e.link&&e.link.format.href==t.link.format.href})),c=(0,l.getSelectedSegments)(e,!1),u=c[0];return 1==c.length&&"SelectionMarker"==u.segmentType&&(c=(0,n.adjustWordSelection)(e,u)).length>1&&(d=!0,(0,i.setSelection)(e,c[0],c[c.length-1])),t=c.map((function(e){return"Text"==e.segmentType?e.text:""})).join(""),r=(null===(s=null===(a=c[0])||void 0===a?void 0:a.link)||void 0===s?void 0:s.format.href)||null,d})),[t,r]}},7058:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7582),n=r(2511),a=r(4040),l=r(2976),i=r(5544),s=r(2347),d=r(485),c=r(1246),u=/^[a-zA-Z]+:/i,f=/^[\w.%+-]+@/i,m=/^ftp\./i;function p(e){if(!e)return e;var t="";return e.search(u)<0&&(t=0==e.search(f)?"mailto:":0==e.search(m)?"ftp://":"http://"),t+e}t.default=function(e,t,r,u,f){var m=(function(e){var t=new s.HtmlSanitizer,r=document.createElement("a");return r.href=e||"",t.sanitize(r),r.getAttribute("href")||""}(t)||"").trim();if(m){var v,g=(0,s.matchLink)(m),b={dataset:{},format:{href:g?g.normalizedUrl:p(m),anchorTitle:r,target:f,underline:!0}},h=[];(0,n.formatWithContentModel)(e,"insertLink",(function(t){var r,n=(0,i.getSelectedSegments)(t,!1),s=n.map((function(e){return"Text"==e.segmentType?e.text:""})).join(""),f=u||s||"";if(n.some((function(e){return"SelectionMarker"!=e.segmentType}))&&s==f)n.forEach((function(e){(0,c.addLink)(e,b),e.link&&h.push(e.link)}));else if(n.every((function(e){return"SelectionMarker"==e.segmentType}))||f&&f!=s){var p=(0,c.createText)(f||(g?g.originalUrl:m),(0,o.__assign)((0,o.__assign)({},(null===(r=n[0])||void 0===r?void 0:r.format)||{}),(0,l.getPendingFormat)(e)||{})),v=(0,c.createContentModelDocument)();(0,c.addLink)(p,b),(0,c.addSegment)(v,p),p.link&&h.push(p.link),(0,d.mergeModel)(t,v,(0,a.getOnDeleteEntityCallback)(e),{mergeFormat:"mergeAll"})}return n.length>0}),{changeSource:"CreateLink",onNodeCreated:function(e,t){!v&&h.indexOf(e)>=0&&(v=t)},getChangeData:function(){return v}})}}},3932:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(5113),n=r(2511),a=r(5544);t.default=function(e){(0,n.formatWithContentModel)(e,"removeLink",(function(e){(0,o.adjustSegmentSelection)(e,(function(e){return!!e.isSelected&&!!e.link}),(function(e,t){return e.isSelected||!!e.link&&e.link.format.href==t.link.format.href}));var t=(0,a.getSelectedSegments)(e,!1),r=!1;return t.forEach((function(e){e.link&&(r=!0,delete e.link)})),r}))}},1123:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(2511),n=r(5544);t.default=function(e,t){(0,o.formatWithContentModel)(e,"setListStartNumber",(function(e){var r=(0,n.getFirstSelectedListItem)(e),o=null==r?void 0:r.levels[(null==r?void 0:r.levels.length)-1];return!!o&&(o.startNumberOverride=t,!0)}))}},3e3:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(2874),n=r(2511),a=r(5544);t.default=function(e,t){(0,n.formatWithContentModel)(e,"setListStyle",(function(e){var r=(0,a.getFirstSelectedListItem)(e);if(r){var n=(0,o.findListItemsInSameThread)(e,r),l=r.levels.length-1;return n.forEach((function(e){void 0!==t.orderedStyleType&&(e.levels[l].orderedStyleType=t.orderedStyleType),void 0!==t.unorderedStyleType&&(e.levels[l].unorderedStyleType=t.unorderedStyleType)})),!0}return!1}))}},58:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(2511),n=r(1567);t.default=function(e){(0,o.formatWithContentModel)(e,"toggleBullet",(function(e){return(0,n.setListType)(e,"UL")}),{preservePendingFormat:!0})}},4505:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(2511),n=r(1567);t.default=function(e){(0,o.formatWithContentModel)(e,"toggleNumbering",(function(e){return(0,n.setListType)(e,"OL")}),{preservePendingFormat:!0})}},4847:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e,t){(0,o.formatSegmentWithContentModel)(e,"applySegmentFormat",(function(e){e.backgroundColor=t.backgroundColor,e.fontFamily=t.fontFamily,e.fontSize=t.fontSize,e.fontWeight=t.fontWeight,e.italic=t.italic,e.strikethrough=t.strikethrough,e.superOrSubScriptSequence=t.superOrSubScriptSequence,e.textColor=t.textColor,e.underline=t.underline}),void 0,!0)}},5284:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e,t,r){(0,o.formatSegmentWithContentModel)(e,"changeCapitalization",(function(e,o,n){if("Text"==(null==n?void 0:n.segmentType))switch(t){case"lowerCase":n.text=n.text.toLocaleLowerCase(r);break;case"upperCase":n.text=n.text.toLocaleUpperCase(r);break;case"capitalize":for(var a=n.text.toLocaleLowerCase(r).split(" "),l=0;l{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741),n=r(1246),a=[8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72];t.default=function(e,t){(0,o.formatSegmentWithContentModel)(e,"changeFontSize",(function(e){return function(e,t){if(e.fontSize){var r=(0,n.parseValueWithUnit)(e.fontSize,void 0,"pt");if(r>0){var o=function(e,t,r){e=1==t?Math.floor(e):Math.ceil(e);var o=r[r.length-1];if(e<=r[0])e=Math.max(e+t,1);else if(e>o||e==o&&1==t)e/=10,e=1==t?Math.floor(e):Math.ceil(e),e=Math.min(Math.max(10*(e+t),o),1e3);else if(1==t){for(var n=0;n=0;n--)if(e>r[n]){e=r[n];break}return e}(r,"increase"==t?1:-1,a);e.fontSize=o+"pt"}}}(e,t)}),void 0,!0)}},5253:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e,t){(0,o.formatSegmentWithContentModel)(e,"setBackgroundColor",null===t?function(e){delete e.backgroundColor}:function(e){e.backgroundColor=t})}},1250:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e,t){(0,o.formatSegmentWithContentModel)(e,"setFontName",(function(e,r,o){e.fontFamily=t,(null==o?void 0:o.code)&&(o.code.format.fontFamily=t)}),void 0,!0)}},5442:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e,t){(0,o.formatSegmentWithContentModel)(e,"setFontSize",(function(e){e.fontSize=t}),void 0,!0)}},9715:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e,t){(0,o.formatSegmentWithContentModel)(e,"setTextColor",null===t?function(e,t,r){delete e.textColor,(null==r?void 0:r.link)&&delete r.link.format.textColor}:function(e,r,o){e.textColor=t,(null==o?void 0:o.link)&&(o.link.format.textColor=t)},void 0,!0)}},5539:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isBold=void 0;var o=r(1741);function n(e){return!!e&&("bold"==e||"bolder"==e||parseInt(e)>=600)}t.default=function(e){(0,o.formatSegmentWithContentModel)(e,"toggleBold",(function(e,t){e.fontWeight=t?"bold":"normal"}),(function(e,t,r){var o;return n(void 0===e.fontWeight?null===(o=null==r?void 0:r.decorator)||void 0===o?void 0:o.format.fontWeight:e.fontWeight)}))},t.isBold=n},1340:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1246),n=r(1741),a={format:{fontFamily:"monospace"}};t.default=function(e){(0,n.formatSegmentWithContentModel)(e,"toggleCode",(function(e,t,r){r&&(t?(0,o.addCode)(r,a):delete r.code)}),(function(e,t){return!!(null==t?void 0:t.code)}))}},3462:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e){(0,o.formatSegmentWithContentModel)(e,"toggleItalic",(function(e,t){e.italic=!!t}),(function(e){return!!e.italic}))}},5602:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e){(0,o.formatSegmentWithContentModel)(e,"toggleStrikethrough",(function(e,t){e.strikethrough=!!t}),(function(e){return!!e.strikethrough}))}},2494:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e){(0,o.formatSegmentWithContentModel)(e,"toggleSubscript",(function(e,t){e.superOrSubScriptSequence=t?"sub":""}),(function(e){var t;return"sub"==(null===(t=e.superOrSubScriptSequence)||void 0===t?void 0:t.split(" ").pop())}))}},1308:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e){(0,o.formatSegmentWithContentModel)(e,"toggleSuperscript",(function(e,t){e.superOrSubScriptSequence=t?"super":""}),(function(e){var t;return"super"==(null===(t=e.superOrSubScriptSequence)||void 0===t?void 0:t.split(" ").pop())}))}},3679:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e){(0,o.formatSegmentWithContentModel)(e,"toggleUnderline",(function(e,t,r){e.underline=!!t,(null==r?void 0:r.link)&&(r.link.format.underline=!!t)}),(function(e){return!!e.underline}))}},6516:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7536),n=r(5676);t.default=function(e){switch(e.blockType){case"Paragraph":return e.segments.some(n.default);case"Table":return e.rows.some((function(e){return e.cells.some(o.default)}));case"BlockGroup":return(0,o.default)(e);case"Divider":case"Entity":return!!e.isSelected;default:return!1}}},7536:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(6516);t.default=function(e){return!("TableCell"!=e.blockGroupType||!e.isSelected)||!!e.blocks.some(o.default)}},5676:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(6516);t.default=function(e){return e.isSelected||"General"==e.segmentType&&e.blocks.some(o.default)}},959:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(6682),n=r(7691),a=r(4158),l=r(6893),i=r(629),s=r(4054),d=r(2511),c=r(5544),u=r(1246),f=r(7350),m=r(9457),p=r(8509),v=r(4765),g=r(2806),b=r(1303),h=r(3618),y=r(2242);t.default=function(e,t){(0,d.formatWithContentModel)(e,"editTable",(function(e){var r=(0,c.getFirstSelectedTable)(e);if(r){switch(t){case 22:case 18:case 17:case 21:case 19:case 20:(0,n.alignTableCell)(r,t);break;case 14:case 15:case 16:(0,o.alignTable)(r,t);break;case 5:(0,i.deleteTableColumn)(r);break;case 6:(0,s.deleteTableRow)(r);break;case 4:(0,l.deleteTable)(r);break;case 0:case 1:(0,m.insertTableRow)(r,t);break;case 2:case 3:(0,f.insertTableColumn)(r,t);break;case 7:case 8:(0,g.mergeTableRow)(r,t);break;case 11:(0,p.mergeTableCells)(r);break;case 9:case 10:(0,v.mergeTableColumn)(r,t);break;case 12:(0,h.splitTableCellHorizontally)(r);break;case 13:(0,y.splitTableCellVertically)(r)}return(0,b.normalizeTable)(r),(0,u.hasMetadata)(r)&&(0,a.applyTableFormat)(r,void 0,!0),!0}return!1}))}},2435:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(4158),n=r(2511),a=r(5544);t.default=function(e,t,r){(0,n.formatWithContentModel)(e,"formatTable",(function(e){var n=(0,a.getFirstSelectedTable)(e);return!!n&&((0,o.applyTableFormat)(n,t,r),!0)}))}},6901:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(4158),n=r(1246),a=r(2969),l=r(473),i=r(2511),s=r(4040),d=r(2976),c=r(485),u=r(1303),f=r(5736);t.default=function(e,t,r,m){(0,i.formatWithContentModel)(e,"insertTable",(function(i){var p,v,g,b=(0,s.getOnDeleteEntityCallback)(e),h=(0,l.deleteSelection)(i,b).insertPoint;if(h){var y=(0,n.createContentModelDocument)(),_=(0,a.createTableStructure)(y,t,r);(0,u.normalizeTable)(_,(0,d.getPendingFormat)(e)||h.marker.format),(0,o.applyTableFormat)(_,m),(0,c.mergeModel)(i,y,b,{insertPosition:h,mergeFormat:"mergeAll"});var P=null===(v=null===(p=_.rows[0])||void 0===p?void 0:p.cells[0])||void 0===v?void 0:v.blocks[0];if("Paragraph"==(null==P?void 0:P.blockType)){var C=(0,n.createSelectionMarker)(null===(g=P.segments[0])||void 0===g?void 0:g.format);P.segments.unshift(C),(0,f.setSelection)(i,C)}return!0}return!1}))}},7783:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7536),n=r(2511),a=r(5544),l=r(1303),i=r(3684);t.default=function(e,t){(0,n.formatWithContentModel)(e,"setTableCellShade",(function(e){var r=(0,a.getFirstSelectedTable)(e);return!!r&&((0,l.normalizeTable)(r),r.rows.forEach((function(e){return e.cells.forEach((function(e){(0,o.default)(e)&&(0,i.setTableCellBackgroundColor)(e,t,!0)}))})),!0)}))}},6154:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(1741);t.default=function(e,t,r,n){(0,o.formatSegmentWithContentModel)(e,t,(function(t,o,a){"Image"==(null==a?void 0:a.segmentType)&&(r(a),n&&e.triggerPluginEvent(19,n))}),void 0,void 0)}},9139:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatParagraphWithContentModel=void 0;var o=r(2511),n=r(5544);t.formatParagraphWithContentModel=function(e,t,r){(0,o.formatWithContentModel)(e,t,(function(e){var t=(0,n.getSelectedParagraphs)(e);return t.forEach(r),t.length>0}),{preservePendingFormat:!0})}},1741:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatSegmentWithContentModel=void 0;var o=r(7582),n=r(5294),a=r(2511),l=r(2976),i=r(5544);t.formatSegmentWithContentModel=function(e,t,r,s,d){(0,a.formatWithContentModel)(e,t,(function(t){var a=(0,i.getSelectedSegmentsAndParagraphs)(t,!!d),c=(0,l.getPendingFormat)(e),u=1==a.length&&"SelectionMarker"==a[0][0].segmentType;if(u){var f=a[0][1];(a=(0,n.adjustWordSelection)(t,a[0][0]).map((function(e){return[e,f]}))).length>1&&(u=!1)}var m=c?[[c,null,null]]:a.map((function(e){return[e[0].format,e[0],e[1]]})),p=!!s&&m.every((function(e){var t=(0,o.__read)(e,3),r=t[0],n=t[1],a=t[2];return s(r,n,a)}));if(m.forEach((function(e){var t=(0,o.__read)(e,2),n=t[0],a=t[1];return r(n,!p,a)})),!c&&u){var v=e.getFocusedPosition();v&&(0,l.setPendingFormat)(e,a[0][0].format,v)}return u?(e.focus(),!1):m.length>0}))}},2511:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatWithContentModel=void 0;var o=r(2976),n=r(214);t.formatWithContentModel=function(e,t,r,a){var l,i=a||{},s=i.useReducedModel,d=i.onNodeCreated,c=i.preservePendingFormat,u=i.getChangeData,f=i.skipUndoSnapshot,m=i.changeSource,p=s?{processorOverride:{child:n.reducedModelChildProcessor}}:void 0,v=e.createContentModel(p);if(r(v)){var g=function(){if(e.focus(),v&&e.setContentModel(v,{onNodeCreated:d}),c){var t=(0,o.getPendingFormat)(e),r=e.getFocusedPosition();t&&r&&(0,o.setPendingFormat)(e,t,r)}return null==u?void 0:u()};f?(g(),m&&e.triggerContentChangedEvent(m,null==u?void 0:u())):e.addUndoSnapshot(g,m||"Format",!1,{formatApiName:t}),null===(l=e.cacheContentModel)||void 0===l||l.call(e,v)}}},5915:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});var o=r(7582),n=r(1246),a=r(2511),l=r(4040),i=r(485),s=r(2347);t.default=function(e,t,r,c,u){void 0===r&&(r=!1),void 0===c&&(c=!1),void 0===u&&(u=!1),t.snapshotBeforePaste?e.setContent(t.snapshotBeforePaste):t.snapshotBeforePaste=e.getContent(2);var f=e.getSelectionRange(),m=f&&s.Position.getStart(f),p=function(e,t,r){var o=(0,s.createDefaultHtmlSanitizerOptions)();return o.cssStyleCallbacks["caret-color"]=function(){return!1},{eventType:10,clipboardData:t,fragment:e.getDocument().createDocumentFragment(),sanitizingOption:o,htmlBefore:"",htmlAfter:"",htmlAttributes:{},domToModelOption:{},pasteType:r}}(e,t,(0,s.getPasteType)(r,c,u)),v=function(e,t,r,o,n,a){var l=a.fragment,i=t.rawHtml,d=t.text,c=t.imageDataUri,u=e.getTrustedHTMLHandler(),f=i?(new DOMParser).parseFromString(u(i),"text/html"):void 0;return(0,s.retrieveMetadataFromClipboard)(f,a,e.getTrustedHTMLHandler()),n&&c||!o&&!d&&c?(0,s.handleImagePaste)(c,l):!o&&i&&f&&f.body?(0,s.moveChildNodes)(l,null==f?void 0:f.body):d&&(0,s.handleTextPaste)(d,r,l),e.triggerPluginEvent(10,a,!0),(0,s.sanitizePasteContent)(a,r),l}(e,t,m,r,u,p),g=(0,n.domToContentModel)(v,{isDarkMode:e.isDarkMode(),darkColorHandler:e.getDarkColorHandler(),defaultFormat:e.getDefaultFormat()},(0,o.__assign)((0,o.__assign)({},p.domToModelOption),{disableCacheElement:!0,additionalFormatParsers:(0,o.__assign)((0,o.__assign)({},p.domToModelOption),{block:(0,o.__spreadArray)([],(0,o.__read)(c?[d]:[]),!1),listLevel:(0,o.__spreadArray)([],(0,o.__read)(c?[d]:[]),!1)})}));g&&(0,a.formatWithContentModel)(e,"Paste",(function(t){return(0,i.mergeModel)(t,g,(0,l.getOnDeleteEntityCallback)(e),{mergeFormat:c?"keepSourceEmphasisFormat":"none"}),!0}),{changeSource:"Paste",getChangeData:function(){return t}})};var d=function(e,t){t.style.backgroundColor&&(t.style.backgroundColor="",delete e.backgroundColor)}},735:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},398:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},1533:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createContentModelEditor=void 0;var o=r(2347),n=r(3247);t.createContentModelEditor=function(e,t,r){var a=[new n.ContentModelPastePlugin];t&&(a=a.concat(t));var l={plugins:a,initialContent:r,getDarkColor:o.getDarkColor,defaultFormat:{fontFamily:"Calibri,Arial,Helvetica,sans-serif",fontSize:"11pt",textColor:"#000000"}};return new n.ContentModelEditor(e,l)}},2594:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createContentModelEditor=void 0;var o=r(7582),n=r(1533);Object.defineProperty(t,"createContentModelEditor",{enumerable:!0,get:function(){return n.createContentModelEditor}}),(0,o.__exportStar)(r(398),t),(0,o.__exportStar)(r(1246),t),(0,o.__exportStar)(r(3247),t)},2347:e=>{e.exports=roosterjs},7582:(e,t,r)=>{r.r(t),r.d(t,{__assign:()=>a,__asyncDelegator:()=>O,__asyncGenerator:()=>k,__asyncValues:()=>M,__await:()=>S,__awaiter:()=>p,__classPrivateFieldGet:()=>j,__classPrivateFieldIn:()=>B,__classPrivateFieldSet:()=>E,__createBinding:()=>g,__decorate:()=>i,__esDecorate:()=>d,__exportStar:()=>b,__extends:()=>n,__generator:()=>v,__importDefault:()=>x,__importStar:()=>w,__makeTemplateObject:()=>T,__metadata:()=>m,__param:()=>s,__propKey:()=>u,__read:()=>y,__rest:()=>l,__runInitializers:()=>c,__setFunctionName:()=>f,__spread:()=>_,__spreadArray:()=>C,__spreadArrays:()=>P,__values:()=>h,default:()=>A});var o=function(e,t){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},o(e,t)};function n(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var a=function(){return a=Object.assign||function(e){for(var t,r=1,o=arguments.length;r=0;i--)(n=e[i])&&(l=(a<3?n(l):a>3?n(t,r,l):n(t,r))||l);return a>3&&l&&Object.defineProperty(t,r,l),l}function s(e,t){return function(r,o){t(r,o,e)}}function d(e,t,r,o,n,a){function l(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var i,s=o.kind,d="getter"===s?"get":"setter"===s?"set":"value",c=!t&&e?o.static?e:e.prototype:null,u=t||(c?Object.getOwnPropertyDescriptor(c,o.name):{}),f=!1,m=r.length-1;m>=0;m--){var p={};for(var v in o)p[v]="access"===v?{}:o[v];for(var v in o.access)p.access[v]=o.access[v];p.addInitializer=function(e){if(f)throw new TypeError("Cannot add initializers after decoration has completed");a.push(l(e||null))};var g=(0,r[m])("accessor"===s?{get:u.get,set:u.set}:u[d],p);if("accessor"===s){if(void 0===g)continue;if(null===g||"object"!=typeof g)throw new TypeError("Object expected");(i=l(g.get))&&(u.get=i),(i=l(g.set))&&(u.set=i),(i=l(g.init))&&n.unshift(i)}else(i=l(g))&&("field"===s?n.unshift(i):u[d]=i)}c&&Object.defineProperty(c,o.name,u),f=!0}function c(e,t,r){for(var o=arguments.length>2,n=0;n0&&n[n.length-1])||6!==i[0]&&2!==i[0])){l=0;continue}if(3===i[0]&&(!n||i[1]>n[0]&&i[1]=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function y(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var o,n,a=r.call(e),l=[];try{for(;(void 0===t||t-- >0)&&!(o=a.next()).done;)l.push(o.value)}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(n)throw n.error}}return l}function _(){for(var e=[],t=0;t1||i(e,t)}))})}function i(e,t){try{(r=n[e](t)).value instanceof S?Promise.resolve(r.value.v).then(s,d):c(a[0][2],r)}catch(e){c(a[0][3],e)}var r}function s(e){i("next",e)}function d(e){i("throw",e)}function c(e,t){e(t),a.shift(),a.length&&i(a[0][0],a[0][1])}}function O(e){var t,r;return t={},o("next"),o("throw",(function(e){throw e})),o("return"),t[Symbol.iterator]=function(){return this},t;function o(o,n){t[o]=e[o]?function(t){return(r=!r)?{value:S(e[o](t)),done:!1}:n?n(t):t}:n}}function M(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,r=e[Symbol.asyncIterator];return r?r.call(e):(e=h(e),t={},o("next"),o("throw"),o("return"),t[Symbol.asyncIterator]=function(){return this},t);function o(r){t[r]=e[r]&&function(t){return new Promise((function(o,n){!function(e,t,r,o){Promise.resolve(o).then((function(t){e({value:t,done:r})}),t)}(o,n,(t=e[r](t)).done,t.value)}))}}}function T(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var F=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t};function w(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&g(t,e,r);return F(t,e),t}function x(e){return e&&e.__esModule?e:{default:e}}function j(e,t,r,o){if("a"===r&&!o)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!o:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?o:"a"===r?o.call(e):o?o.value:t.get(e)}function E(e,t,r,o,n){if("m"===o)throw new TypeError("Private method is not writable");if("a"===o&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===o?n.call(e,r):n?n.value=r:t.set(e,r),r}function B(e,t){if(null===t||"object"!=typeof t&&"function"!=typeof t)throw new TypeError("Cannot use 'in' operator on non-object");return"function"==typeof e?t===e:e.has(t)}const A={__extends:n,__assign:a,__rest:l,__decorate:i,__param:s,__metadata:m,__awaiter:p,__generator:v,__createBinding:g,__exportStar:b,__values:h,__read:y,__spread:_,__spreadArrays:P,__spreadArray:C,__await:S,__asyncGenerator:k,__asyncDelegator:O,__asyncValues:M,__makeTemplateObject:T,__importStar:w,__importDefault:x,__classPrivateFieldGet:j,__classPrivateFieldSet:E,__classPrivateFieldIn:B}}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var a=t[o]={exports:{}};return e[o](a,a.exports,r),a.exports}r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o=r(2594);roosterjsContentModel=o})(); //# sourceMappingURL=rooster-content-model-min.js.map \ No newline at end of file diff --git a/rooster-content-model-min.js.map b/rooster-content-model-min.js.map index c723f0ae8e4..9488589263b 100644 --- a/rooster-content-model-min.js.map +++ b/rooster-content-model-min.js.map @@ -1 +1 @@ -{"version":3,"file":"rooster-content-model-min.js","mappings":"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","sources":["webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/context/createDomToModelContext.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/context/defaultProcessors.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/domToContentModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/blockProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/brProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/childProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/codeProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/delimiterProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/elementProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/entityProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/fontProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/formatContainerProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/generalProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/headingProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/hrProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/imageProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/knownElementProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/linkProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/listItemProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/listProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/pProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/tableProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/textProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/addSelectionMarker.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/areSameFormats.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/getBoundingClientRect.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/getDefaultStyle.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/getRegularSelectionOffsets.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/isBlockElement.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/parseFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/stackFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domUtils/isNodeOfType.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domUtils/metadata/updateListMetadata.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domUtils/metadata/updateMetadata.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domUtils/stringUtil.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/directionFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/displayFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/htmlAlignFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/lineHeightFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/marginFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/paddingFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/textAlignFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/whiteSpaceFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/backgroundColorFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/borderBoxFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/borderFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/boxShadowFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/datasetFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/idFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/sizeFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/verticalAlignFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/wordBreakFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/defaultFormatHandlers.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listItemMetadataFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listItemThreadFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listLevelMetadataFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listLevelThreadFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listStylePositionFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listTypeFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/root/rootDirectionFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/root/zoomScaleFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/boldFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/fontFamilyFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/fontSizeFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/italicFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/letterSpacingFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/linkFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/strikeFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/superOrSubScriptFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/textColorFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/underlineFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/tableLayoutFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/tableSpacingFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/textColorOnTableCellFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/color.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/defaultStyles.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/dir.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/parseValueWithUnit.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/index.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/block/setParagraphNotImplicit.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/addBlock.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/addDecorators.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/addSegment.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/isEmpty.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/isGeneralSegment.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/isWhiteSpacePreserved.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/normalizeContentModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/normalizeParagraph.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/normalizeSegment.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/unwrapBlock.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createBr.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createContentModelDocument.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createDivider.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createEntity.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createFormatContainer.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createGeneralBlock.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createGeneralSegment.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createImage.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createListItem.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createParagraph.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createParagraphDecorator.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createSelectionMarker.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createTable.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createTableCell.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createText.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/contentModelToDom.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/context/createModelToDomContext.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/context/defaultContentModelHandlers.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBlock.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBlockGroupChildren.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBr.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleDivider.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleEntity.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleFormatContainer.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleGeneralModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleImage.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleList.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleListItem.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleParagraph.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleSegment.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleSegmentDecorator.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleTable.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleText.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/mergeNode.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/optimize.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/removeUnnecessarySpan.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/applyFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/handleSegmentCommon.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/reuseCachedElement.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/stackFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/domToModel/processors/reducedModelChildProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/domToModel/processors/tablePreProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/domUtils/borderValues.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/updateImageMetadata.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/updateTableCellMetadata.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/updateTableMetadata.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/ContentModelEditor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/createContentModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/createEditorContext.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/setContentModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/switchShadowEdit.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/corePlugins/ContentModelCopyPastePlugin.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/corePlugins/ContentModelTypeInContainerPlugin.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/createContentModelEditorCore.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/isContentModelEditor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/ContentModelEditPlugin.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/ContentModelFormatPlugin.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/ContentModelPastePlugin.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/Excel/processPastedContentFromExcel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/PowerPoint/processPastedContentFromPowerPoint.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WacComponents/processPastedContentWacComponents.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/processPastedContentFromWordDesktop.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/processWordComments.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/processWordLists.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/addParser.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/deprecatedColorParser.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/linkParser.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/setProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/utils/handleKeyboardEventCommon.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/index.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/getLeafSiblingBlock.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/setModelAlignment.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/setModelIndentation.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/toggleModelBlockQuote.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/clearModelFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/cloneModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/getClosestAncestorBlockGroupIndex.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/isBlockGroupOfType.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/mergeModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/retrieveModelFormatState.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/wrapBlock.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/deleteAllSegmentBefore.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/deleteCollapsedSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/deleteWordSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/createInsertPoint.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteBlock.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteExpandedSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteSegment.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteSingleChar.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/format/pendingFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/image/applyImageBorderFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/list/findListItemsInSameThread.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/list/setListType.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/adjustSegmentSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/adjustWordSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/collapseTableSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/collectSelections.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/iterateSelections.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/setSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/alignTable.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/alignTableCell.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/applyTableFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/canMergeCells.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/createTableStructure.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/deleteTable.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/deleteTableColumn.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/deleteTableRow.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/getSelectedCells.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/insertTableColumn.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/insertTableRow.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/mergeTableCells.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/mergeTableColumn.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/mergeTableRow.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/normalizeTable.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/setTableCellBackgroundColor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/splitTableCellHorizontally.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/splitTableCellVertically.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setAlignment.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setDirection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setHeaderLevel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setIndentation.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setParagraphMargin.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setSpacing.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/toggleBlockQuote.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/editing/handleKeyDownEvent.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/applyPendingFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/clearFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/getFormatState.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/getSegmentFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/adjustImageSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/changeImage.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/insertImage.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/setImageAltText.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/setImageBorder.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/setImageBoxShadow.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/index.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/adjustLinkSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/insertLink.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/removeLink.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/setListStartNumber.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/setListStyle.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/toggleBullet.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/toggleNumbering.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/applySegmentFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/changeCapitalization.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/changeFontSize.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setBackgroundColor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setFontName.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setFontSize.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setTextColor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleBold.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleCode.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleItalic.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleStrikethrough.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleSubscript.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleSuperscript.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleUnderline.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/hasSelectionInBlock.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/hasSelectionInBlockGroup.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/hasSelectionInSegment.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/table/editTable.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/table/formatTable.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/table/insertTable.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/table/setTableCellShade.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatImageWithContentModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatParagraphWithContentModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatSegmentWithContentModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatWithContentModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/paste.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model/lib/createContentModelEditor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model/lib/index.ts","webpack://roosterjsContentModel/external var \"roosterjs\"","webpack://roosterjsContentModel/./node_modules/tslib/tslib.es6.mjs","webpack://roosterjsContentModel/webpack/bootstrap","webpack://roosterjsContentModel/webpack/runtime/define property getters","webpack://roosterjsContentModel/webpack/runtime/hasOwnProperty shorthand","webpack://roosterjsContentModel/webpack/runtime/make namespace object","webpack://roosterjsContentModel/webpack/startup"],"sourcesContent":["import { defaultFormatParsers, getFormatParsers } from '../../formatHandlers/defaultFormatHandlers';\nimport { defaultProcessorMap } from './defaultProcessors';\nimport { defaultStyleMap } from '../../formatHandlers/utils/defaultStyles';\nimport { DomToModelContext, DomToModelOption, EditorContext } from 'roosterjs-content-model-types';\nimport { SelectionRangeTypes } from 'roosterjs-editor-types';\n\n/**\n * Create context object form DOM to Content Model conversion\n * @param editorContext Context of editor\n * @param options Options for this context\n */\nexport function createDomToModelContext(\n editorContext?: EditorContext,\n options?: DomToModelOption\n): DomToModelContext {\n const context: DomToModelContext = {\n ...(editorContext || {\n isDarkMode: false,\n }),\n\n blockFormat: {},\n segmentFormat: {},\n zoomScaleFormat: {},\n isInSelection: false,\n\n listFormat: {\n levels: [],\n threadItemCounts: [],\n },\n link: {\n format: {},\n dataset: {},\n },\n code: {\n format: {},\n },\n blockDecorator: {\n format: {},\n tagName: '',\n },\n\n elementProcessors: {\n ...defaultProcessorMap,\n ...(options?.processorOverride || {}),\n },\n\n defaultStyles: {\n ...defaultStyleMap,\n ...(options?.defaultStyleOverride || {}),\n },\n\n formatParsers: getFormatParsers(\n options?.formatParserOverride,\n options?.additionalFormatParsers\n ),\n\n defaultElementProcessors: defaultProcessorMap,\n defaultFormatParsers: defaultFormatParsers,\n allowCacheElement: !options?.disableCacheElement,\n };\n\n const range = options?.selectionRange;\n let selectionRoot: Node | undefined;\n\n switch (range?.type) {\n case SelectionRangeTypes.Normal:\n const regularRange = range.ranges[0];\n if (regularRange) {\n selectionRoot = regularRange.commonAncestorContainer;\n context.regularSelection = {\n startContainer: regularRange.startContainer,\n startOffset: regularRange.startOffset,\n endContainer: regularRange.endContainer,\n endOffset: regularRange.endOffset,\n isSelectionCollapsed: regularRange.collapsed,\n };\n }\n break;\n\n case SelectionRangeTypes.TableSelection:\n if (range.coordinates && range.table) {\n selectionRoot = range.table;\n context.tableSelection = {\n table: range.table,\n firstCell: { ...range.coordinates.firstCell },\n lastCell: { ...range.coordinates.lastCell },\n };\n }\n\n break;\n\n case SelectionRangeTypes.ImageSelection:\n selectionRoot = range.image;\n context.imageSelection = {\n image: range.image,\n };\n break;\n }\n\n if (selectionRoot) {\n context.selectionRootNode = selectionRoot;\n }\n\n return context;\n}\n","import { brProcessor } from '../processors/brProcessor';\nimport { childProcessor } from '../processors/childProcessor';\nimport { codeProcessor } from '../processors/codeProcessor';\nimport { delimiterProcessor } from '../processors/delimiterProcessor';\nimport { elementProcessor } from '../processors/elementProcessor';\nimport { ElementProcessorMap } from 'roosterjs-content-model-types';\nimport { entityProcessor } from '../processors/entityProcessor';\nimport { fontProcessor } from '../processors/fontProcessor';\nimport { formatContainerProcessor } from '../processors/formatContainerProcessor';\nimport { generalProcessor } from '../processors/generalProcessor';\nimport { headingProcessor } from '../processors/headingProcessor';\nimport { hrProcessor } from '../processors/hrProcessor';\nimport { imageProcessor } from '../processors/imageProcessor';\nimport { knownElementProcessor } from '../processors/knownElementProcessor';\nimport { linkProcessor } from '../processors/linkProcessor';\nimport { listItemProcessor } from '../processors/listItemProcessor';\nimport { listProcessor } from '../processors/listProcessor';\nimport { pProcessor } from '../processors/pProcessor';\nimport { tableProcessor } from '../processors/tableProcessor';\nimport { textProcessor } from '../processors/textProcessor';\n\n/**\n * @internal\n */\nexport const defaultProcessorMap: ElementProcessorMap = {\n a: linkProcessor,\n b: knownElementProcessor,\n blockquote: knownElementProcessor,\n br: brProcessor,\n code: codeProcessor,\n div: knownElementProcessor,\n em: knownElementProcessor,\n font: fontProcessor,\n i: knownElementProcessor,\n img: imageProcessor,\n h1: headingProcessor,\n h2: headingProcessor,\n h3: headingProcessor,\n h4: headingProcessor,\n h5: headingProcessor,\n h6: headingProcessor,\n hr: hrProcessor,\n li: listItemProcessor,\n ol: listProcessor,\n p: pProcessor,\n pre: formatContainerProcessor,\n s: knownElementProcessor,\n span: knownElementProcessor,\n strike: knownElementProcessor,\n strong: knownElementProcessor,\n sub: knownElementProcessor,\n sup: knownElementProcessor,\n table: tableProcessor,\n u: knownElementProcessor,\n ul: listProcessor,\n\n '*': generalProcessor,\n '#text': textProcessor,\n element: elementProcessor,\n entity: entityProcessor,\n child: childProcessor,\n delimiter: delimiterProcessor,\n};\n","import { createContentModelDocument } from '../modelApi/creators/createContentModelDocument';\nimport { createDomToModelContext } from './context/createDomToModelContext';\nimport { normalizeContentModel } from '../modelApi/common/normalizeContentModel';\nimport { parseFormat } from './utils/parseFormat';\nimport { rootDirectionFormatHandler } from '../formatHandlers/root/rootDirectionFormatHandler';\nimport { safeInstanceOf } from 'roosterjs-editor-dom';\nimport { zoomScaleFormatHandler } from '../formatHandlers/root/zoomScaleFormatHandler';\nimport {\n ContentModelDocument,\n DomToModelOption,\n EditorContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * Create Content Model from DOM tree in this editor\n * @param root Root element of DOM tree to create Content Model from\n * @param editorContext Context of content model editor\n * @param option The option to customize the behavior of DOM to Content Model conversion\n * @returns A ContentModelDocument object that contains all the models created from the give root element\n */\nexport function domToContentModel(\n root: HTMLElement | DocumentFragment,\n editorContext: EditorContext,\n option: DomToModelOption\n): ContentModelDocument {\n const model = createContentModelDocument(editorContext.defaultFormat);\n const context = createDomToModelContext(editorContext, option);\n\n if (safeInstanceOf(root, 'DocumentFragment')) {\n context.elementProcessors.child(model, root, context);\n } else {\n // Need to calculate direction (ltr or rtl), use it as initial value\n parseFormat(root, [rootDirectionFormatHandler.parse], context.blockFormat, context);\n\n // Need to calculate zoom scale value from root element, use this value to calculate sizes for elements\n parseFormat(root, [zoomScaleFormatHandler.parse], context.zoomScaleFormat, context);\n\n const processor = option.includeRoot\n ? context.elementProcessors.element\n : context.elementProcessors.child;\n\n processor(model, root, context);\n }\n\n normalizeContentModel(model);\n\n return model;\n}\n","import { addBlock } from '../../modelApi/common/addBlock';\nimport { ContextStyles } from './formatContainerProcessor';\nimport { createParagraph } from '../../modelApi/creators/createParagraph';\nimport { parseFormat } from '../utils/parseFormat';\nimport {\n ContentModelBlockGroup,\n ContentModelSegmentFormat,\n DomToModelContext,\n} from 'roosterjs-content-model-types';\n\nconst SegmentDecoratorTags = ['A', 'CODE'];\n\n/**\n * @internal\n */\nexport function blockProcessor(\n group: ContentModelBlockGroup,\n element: HTMLElement,\n context: DomToModelContext,\n segmentFormat?: ContentModelSegmentFormat\n) {\n const decorator = context.blockDecorator.tagName ? context.blockDecorator : undefined;\n const isSegmentDecorator = SegmentDecoratorTags.indexOf(element.tagName) >= 0;\n\n parseFormat(element, context.formatParsers.block, context.blockFormat, context);\n\n const blockFormat = { ...context.blockFormat };\n\n parseFormat(element, context.formatParsers.container, blockFormat, context);\n\n ContextStyles.forEach(style => {\n if (blockFormat[style]) {\n context.blockFormat[style] = blockFormat[style];\n }\n });\n\n if (!isSegmentDecorator) {\n const paragraph = createParagraph(\n false /*isImplicit*/,\n blockFormat,\n segmentFormat,\n decorator\n );\n\n addBlock(group, paragraph);\n }\n\n context.elementProcessors.child(group, element, context);\n}\n","import { addSegment } from '../../modelApi/common/addSegment';\nimport { createBr } from '../../modelApi/creators/createBr';\nimport { ElementProcessor } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const brProcessor: ElementProcessor = (group, element, context) => {\n const br = createBr(context.segmentFormat);\n\n if (context.isInSelection) {\n br.isSelected = true;\n }\n\n addSegment(group, br, context.blockFormat);\n};\n","import { addSelectionMarker } from '../utils/addSelectionMarker';\nimport { getRegularSelectionOffsets } from '../utils/getRegularSelectionOffsets';\nimport { isNodeOfType } from '../../domUtils/isNodeOfType';\nimport { NodeType } from 'roosterjs-editor-types';\nimport {\n ContentModelBlockGroup,\n DomToModelContext,\n ElementProcessor,\n} from 'roosterjs-content-model-types';\n\n/**\n * Content Model Element Processor for child elements\n * @param group The parent block group\n * @param parent Parent DOM node to process\n * @param context DOM to Content Model context\n */\nexport const childProcessor: ElementProcessor = (\n group: ContentModelBlockGroup,\n parent: ParentNode,\n context: DomToModelContext\n) => {\n const [nodeStartOffset, nodeEndOffset] = getRegularSelectionOffsets(context, parent);\n let index = 0;\n\n for (let child = parent.firstChild; child; child = child.nextSibling) {\n handleRegularSelection(index, context, group, nodeStartOffset, nodeEndOffset);\n\n processChildNode(group, child, context);\n\n index++;\n }\n\n handleRegularSelection(index, context, group, nodeStartOffset, nodeEndOffset);\n};\n\n/**\n * Helper function for processing child node\n * @param group The parent block group\n * @param parent Parent DOM node to process\n * @param context DOM to Content Model context\n *\n */\nexport function processChildNode(\n group: ContentModelBlockGroup,\n child: Node,\n context: DomToModelContext\n) {\n if (isNodeOfType(child, NodeType.Element) && child.style.display != 'none') {\n context.elementProcessors.element(group, child, context);\n } else if (isNodeOfType(child, NodeType.Text)) {\n context.elementProcessors['#text'](group, child, context);\n }\n}\n\n/**\n * Helper function to handle regular (range based) selection when process child node\n * @param index Index of current child node in its parent\n * @param context DOM to Content Model context\n * @param group The parent block group\n * @param nodeStartOffset Start offset of current regular selection\n * @param nodeEndOffset End offset of current regular selection\n */\nexport function handleRegularSelection(\n index: number,\n context: DomToModelContext,\n group: ContentModelBlockGroup,\n nodeStartOffset: number,\n nodeEndOffset: number\n) {\n if (index == nodeStartOffset) {\n context.isInSelection = true;\n\n addSelectionMarker(group, context);\n }\n\n if (index == nodeEndOffset) {\n if (!context.regularSelection!.isSelectionCollapsed) {\n addSelectionMarker(group, context);\n }\n context.isInSelection = false;\n }\n}\n","import { ElementProcessor } from 'roosterjs-content-model-types';\nimport { knownElementProcessor } from './knownElementProcessor';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\n\n/**\n * @internal\n */\nexport const codeProcessor: ElementProcessor = (group, element, context) => {\n stackFormat(context, { code: 'codeDefault' }, () => {\n parseFormat(element, context.formatParsers.code, context.code.format, context);\n\n knownElementProcessor(group, element, context);\n });\n};\n","import { ElementProcessor } from 'roosterjs-content-model-types';\nimport { getRegularSelectionOffsets } from '../utils/getRegularSelectionOffsets';\nimport { handleRegularSelection } from './childProcessor';\n\n/**\n * @internal\n * @param group\n * @param element\n * @param context\n */\nexport const delimiterProcessor: ElementProcessor = (group, element, context) => {\n let index = 0;\n const [nodeStartOffset, nodeEndOffset] = getRegularSelectionOffsets(context, element);\n\n for (let child = element.firstChild; child; child = child.nextSibling) {\n handleRegularSelection(index, context, group, nodeStartOffset, nodeEndOffset);\n index++;\n }\n\n handleRegularSelection(index, context, group, nodeStartOffset, nodeEndOffset);\n};\n","import { getDelimiterFromElement, getEntityFromElement } from 'roosterjs-editor-dom';\nimport {\n DomToModelContext,\n ElementProcessor,\n ElementProcessorMap,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * @param group\n * @param element\n * @param context\n */\nexport const elementProcessor: ElementProcessor = (group, element, context) => {\n const tagName = element.tagName.toLowerCase() as keyof ElementProcessorMap;\n const processor = (tryGetProcessorForEntity(element, context) ||\n tryGetProcessorForDelimiter(element, context) ||\n context.elementProcessors[tagName] ||\n (tagName.indexOf(':') >= 0 && context.elementProcessors.child) ||\n context.elementProcessors['*']) as ElementProcessor;\n processor(group, element, context);\n};\n\nfunction tryGetProcessorForEntity(element: HTMLElement, context: DomToModelContext) {\n return (element.className && getEntityFromElement(element)) ||\n element.contentEditable == 'false' // For readonly element, treat as an entity\n ? context.elementProcessors.entity\n : null;\n}\n\nfunction tryGetProcessorForDelimiter(element: Node, context: DomToModelContext) {\n return getDelimiterFromElement(element) ? context.elementProcessors.delimiter : null;\n}\n","import { addBlock } from '../../modelApi/common/addBlock';\nimport { addSegment } from '../../modelApi/common/addSegment';\nimport { createEntity } from '../../modelApi/creators/createEntity';\nimport { ElementProcessor } from 'roosterjs-content-model-types';\nimport { getEntityFromElement } from 'roosterjs-editor-dom';\nimport { isBlockElement } from '../utils/isBlockElement';\nimport { stackFormat } from '../utils/stackFormat';\n\n/**\n * Content Model Element Processor for entity\n * @param group The parent block group\n * @param parent Parent DOM node to process\n * @param context DOM to Content Model context\n */\nexport const entityProcessor: ElementProcessor = (group, element, context) => {\n const entity = getEntityFromElement(element);\n\n // In Content Model we also treat read only element as an entity since we cannot edit it\n const { id, type, isReadonly } = entity || { isReadonly: true };\n const isBlockEntity = isBlockElement(element, context);\n\n stackFormat(\n context,\n { segment: isBlockEntity ? 'empty' : undefined, paragraph: 'empty' },\n () => {\n const wrapperToUse = context.allowCacheElement\n ? element\n : (element.cloneNode(true /* deep */) as HTMLElement);\n\n if (!context.allowCacheElement) {\n wrapperToUse.style.backgroundColor = element.style.backgroundColor || 'inherit';\n wrapperToUse.style.color = element.style.color || 'inherit';\n }\n\n const entityModel = createEntity(\n wrapperToUse,\n isReadonly,\n context.segmentFormat,\n id,\n type\n );\n\n // TODO: Need to handle selection for editable entity\n if (context.isInSelection) {\n entityModel.isSelected = true;\n }\n\n if (isBlockEntity) {\n addBlock(group, entityModel);\n } else {\n addSegment(group, entityModel);\n }\n }\n );\n};\n","import { ElementProcessor } from 'roosterjs-content-model-types';\nimport { isBlockElement } from '../utils/isBlockElement';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\n\nconst FontSizes = ['10px', '13px', '16px', '18px', '24px', '32px', '48px'];\n\nfunction getFontSize(size: string | null) {\n const intSize = parseInt(size || '');\n\n if (Number.isNaN(intSize)) {\n return undefined;\n } else if (intSize < 1) {\n return FontSizes[0];\n } else if (intSize > FontSizes.length) {\n return FontSizes[FontSizes.length - 1];\n } else {\n return FontSizes[intSize - 1];\n }\n}\n\n/**\n * @internal\n */\nexport const fontProcessor: ElementProcessor = (group, element, context) => {\n stackFormat(\n context,\n {\n segment: isBlockElement(element, context) ? 'shallowCloneForBlock' : 'shallowClone',\n },\n () => {\n const fontFamily = element.getAttribute('face');\n const fontSize = getFontSize(element.getAttribute('size'));\n const textColor = element.getAttribute('color');\n const format = context.segmentFormat;\n\n if (fontFamily) {\n format.fontFamily = fontFamily;\n }\n\n if (fontSize) {\n format.fontSize = fontSize;\n }\n\n if (textColor) {\n format.textColor = textColor;\n }\n\n parseFormat(element, context.formatParsers.segment, context.segmentFormat, context);\n\n context.elementProcessors.child(group, element, context);\n }\n );\n};\n","import { addBlock } from '../../modelApi/common/addBlock';\nimport { createFormatContainer } from '../../modelApi/creators/createFormatContainer';\nimport { createParagraph } from '../../modelApi/creators/createParagraph';\nimport { getDefaultStyle } from '../utils/getDefaultStyle';\nimport { parseFormat } from '../utils/parseFormat';\nimport { setParagraphNotImplicit } from '../../modelApi/block/setParagraphNotImplicit';\nimport { stackFormat } from '../utils/stackFormat';\nimport {\n ContentModelFormatContainer,\n ContentModelFormatContainerFormat,\n ContentModelParagraph,\n ElementProcessor,\n MarginFormat,\n PaddingFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const ContextStyles: (keyof (MarginFormat & PaddingFormat))[] = [\n 'marginLeft',\n 'marginRight',\n 'paddingLeft',\n 'paddingRight',\n];\n\n/**\n * @internal\n */\nexport const formatContainerProcessor: ElementProcessor = (\n group,\n element,\n context\n) => {\n stackFormat(context, { segment: 'shallowCloneForBlock', paragraph: 'shallowClone' }, () => {\n parseFormat(element, context.formatParsers.block, context.blockFormat, context);\n parseFormat(element, context.formatParsers.segmentOnBlock, context.segmentFormat, context);\n\n const format: ContentModelFormatContainerFormat = {\n ...context.blockFormat,\n };\n\n parseFormat(element, context.formatParsers.container, format, context);\n\n const tagName =\n getDefaultStyle(element, context).display == 'block'\n ? element.tagName.toLowerCase()\n : 'div';\n const formatContainer = createFormatContainer(tagName, format);\n\n // It is possible to inherit margin left/right styles from parent DIV or other containers,\n // since we are going into a deeper level of format container now,\n // the container will render these styles so no need to keep them in context format\n ContextStyles.forEach(style => {\n delete context.blockFormat[style];\n });\n\n context.elementProcessors.child(formatContainer, element, context);\n\n if (element.style.fontSize && parseInt(element.style.fontSize) == 0) {\n formatContainer.zeroFontSize = true;\n }\n\n if (shouldFallbackToParagraph(formatContainer)) {\n // For DIV container that only has one paragraph child, container style can be merged into paragraph\n // and no need to have this container\n const paragraph = formatContainer.blocks[0] as ContentModelParagraph;\n\n if (formatContainer.zeroFontSize) {\n paragraph.segmentFormat = Object.assign({}, paragraph.segmentFormat, {\n fontSize: '0',\n });\n }\n\n Object.assign(paragraph.format, formatContainer.format);\n setParagraphNotImplicit(paragraph);\n addBlock(group, paragraph);\n } else {\n addBlock(group, formatContainer);\n }\n });\n\n addBlock(group, createParagraph(true /*isImplicit*/, context.blockFormat));\n};\n\nfunction shouldFallbackToParagraph(formatContainer: ContentModelFormatContainer) {\n const firstChild = formatContainer.blocks[0];\n\n return (\n formatContainer.tagName == 'div' &&\n formatContainer.blocks.length == 1 &&\n firstChild.blockType == 'Paragraph' &&\n firstChild.isImplicit\n );\n}\n","import { addBlock } from '../../modelApi/common/addBlock';\nimport { addDecorators } from '../../modelApi/common/addDecorators';\nimport { addSegment } from '../../modelApi/common/addSegment';\nimport { createGeneralBlock } from '../../modelApi/creators/createGeneralBlock';\nimport { createGeneralSegment } from '../../modelApi/creators/createGeneralSegment';\nimport { ElementProcessor } from 'roosterjs-content-model-types';\nimport { isBlockElement } from '../utils/isBlockElement';\nimport { stackFormat } from '../utils/stackFormat';\n\nconst generalBlockProcessor: ElementProcessor = (group, element, context) => {\n const block = createGeneralBlock(element);\n const isSelectedBefore = context.isInSelection;\n\n stackFormat(\n context,\n {\n segment: 'empty',\n paragraph: 'empty',\n link: 'empty',\n },\n () => {\n addBlock(group, block);\n\n context.elementProcessors.child(block, element, context);\n }\n );\n\n if (isSelectedBefore && context.isInSelection) {\n block.isSelected = true;\n }\n};\n\nconst generalSegmentProcessor: ElementProcessor = (group, element, context) => {\n const segment = createGeneralSegment(element, context.segmentFormat);\n const isSelectedBefore = context.isInSelection;\n\n addDecorators(segment, context);\n addSegment(group, segment);\n\n stackFormat(\n context,\n {\n segment:\n 'empty' /*clearFormat, General segment will include all properties and styles when generate back to HTML, so no need to carry over existing segment format*/,\n },\n () => {\n context.elementProcessors.child(segment, element, context);\n }\n );\n\n if (isSelectedBefore && context.isInSelection) {\n segment.isSelected = true;\n }\n};\n\n/**\n * @internal\n */\nexport const generalProcessor: ElementProcessor = (group, element, context) => {\n const processor = isBlockElement(element, context)\n ? generalBlockProcessor\n : generalSegmentProcessor;\n\n processor(group, element, context);\n};\n","import { addBlock } from '../../modelApi/common/addBlock';\nimport { blockProcessor } from './blockProcessor';\nimport { ContentModelSegmentFormat, ElementProcessor } from 'roosterjs-content-model-types';\nimport { createParagraph } from '../../modelApi/creators/createParagraph';\nimport { createParagraphDecorator } from '../../modelApi/creators/createParagraphDecorator';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\n\n/**\n * @internal\n */\nexport const headingProcessor: ElementProcessor = (group, element, context) => {\n stackFormat(\n context,\n { segment: 'shallowCloneForBlock', paragraph: 'shallowClone', blockDecorator: 'empty' },\n () => {\n const segmentFormat: ContentModelSegmentFormat = {};\n\n parseFormat(element, context.formatParsers.segmentOnBlock, segmentFormat, context);\n\n context.blockDecorator = createParagraphDecorator(element.tagName, segmentFormat);\n\n blockProcessor(group, element, context);\n }\n );\n\n addBlock(group, createParagraph(true /*isImplicit*/, context.blockFormat));\n};\n","import { addBlock } from '../../modelApi/common/addBlock';\nimport { createDivider } from '../../modelApi/creators/createDivider';\nimport { ElementProcessor } from 'roosterjs-content-model-types';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\n\n/**\n * @internal\n */\nexport const hrProcessor: ElementProcessor = (group, element, context) => {\n stackFormat(\n context,\n {\n paragraph: 'shallowClone',\n },\n () => {\n parseFormat(element, context.formatParsers.divider, context.blockFormat, context);\n\n const hr = createDivider('hr', context.blockFormat);\n\n if (element.size) {\n hr.size = element.size;\n }\n\n if (context.isInSelection) {\n hr.isSelected = true;\n }\n\n addBlock(group, hr);\n }\n );\n};\n","import { addDecorators } from '../../modelApi/common/addDecorators';\nimport { addSegment } from '../../modelApi/common/addSegment';\nimport { ContentModelImageFormat, ElementProcessor } from 'roosterjs-content-model-types';\nimport { createImage } from '../../modelApi/creators/createImage';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\n\n/**\n * @internal\n */\nexport const imageProcessor: ElementProcessor = (group, element, context) => {\n stackFormat(context, { segment: 'shallowClone' }, () => {\n const imageFormat: ContentModelImageFormat = context.segmentFormat;\n\n parseFormat(element, context.formatParsers.segment, imageFormat, context);\n parseFormat(element, context.formatParsers.image, imageFormat, context);\n parseFormat(element, context.formatParsers.block, context.blockFormat, context);\n\n const image = createImage(element.src, imageFormat);\n const alt = element.alt;\n const title = element.title;\n\n parseFormat(element, context.formatParsers.dataset, image.dataset, context);\n addDecorators(image, context);\n\n if (alt) {\n image.alt = alt;\n }\n if (title) {\n image.title = title;\n }\n if (context.isInSelection) {\n image.isSelected = true;\n }\n if (context.imageSelection?.image == element) {\n image.isSelectedAsImageSelection = true;\n image.isSelected = true;\n }\n\n addSegment(group, image);\n });\n};\n","import { addBlock } from '../../modelApi/common/addBlock';\nimport { blockProcessor } from './blockProcessor';\nimport { createParagraph } from '../../modelApi/creators/createParagraph';\nimport { formatContainerProcessor } from './formatContainerProcessor';\nimport { getDefaultStyle } from '../utils/getDefaultStyle';\nimport { isBlockElement } from '../utils/isBlockElement';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\nimport {\n ContentModelSegmentFormat,\n DomToModelContext,\n ElementProcessor,\n} from 'roosterjs-content-model-types';\n\nconst FormatContainerTriggerStyles: (keyof CSSStyleDeclaration)[] = [\n 'marginBottom',\n 'marginTop',\n 'paddingBottom',\n 'paddingTop',\n 'paddingLeft',\n 'paddingRight',\n 'borderTopWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'width',\n 'height',\n 'maxWidth',\n 'maxHeight',\n 'minWidth',\n 'minHeight',\n];\nconst ByPassFormatContainerTags = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'P', 'A'];\nconst SegmentDecoratorTags = ['A', 'CODE'];\n\n/**\n * @internal\n */\nexport const knownElementProcessor: ElementProcessor = (group, element, context) => {\n const isBlock = isBlockElement(element, context);\n\n if (\n (isBlock || element.style.display == 'inline-block') && // For inline-block here, we will also check if it should be represented as Format Container\n shouldUseFormatContainer(element, context)\n ) {\n formatContainerProcessor(group, element, context);\n } else if (isBlock) {\n const decorator = context.blockDecorator.tagName ? context.blockDecorator : undefined;\n const isSegmentDecorator = SegmentDecoratorTags.indexOf(element.tagName) >= 0;\n\n stackFormat(context, { segment: 'shallowCloneForBlock', paragraph: 'shallowClone' }, () => {\n const segmentFormat: ContentModelSegmentFormat = {};\n\n parseFormat(element, context.formatParsers.segmentOnBlock, segmentFormat, context);\n Object.assign(context.segmentFormat, segmentFormat);\n\n blockProcessor(group, element, context, segmentFormat);\n });\n\n if (isBlock && !isSegmentDecorator) {\n addBlock(\n group,\n createParagraph(\n true /*isImplicit*/,\n context.blockFormat,\n undefined /*segmentFormat*/,\n decorator\n )\n );\n }\n } else {\n stackFormat(\n context,\n {\n segment: 'shallowClone',\n paragraph: 'shallowClone',\n link: 'cloneFormat',\n },\n () => {\n parseFormat(element, context.formatParsers.segment, context.segmentFormat, context);\n\n if (context.link.format.href && element.tagName != 'A') {\n parseFormat(\n element,\n context.formatParsers.segmentUnderLink,\n context.link.format,\n context\n );\n }\n\n context.elementProcessors.child(group, element, context);\n }\n );\n }\n};\n\nfunction shouldUseFormatContainer(element: HTMLElement, context: DomToModelContext) {\n // For those tags that we know we should not use format container, just return false\n if (ByPassFormatContainerTags.indexOf(element.tagName) >= 0) {\n return false;\n }\n\n const style = element.style;\n const defaultStyle = getDefaultStyle(element, context);\n\n const bgcolor = style.getPropertyValue('background-color');\n\n // For block element with background, we need to use format container\n if (bgcolor && bgcolor != 'transparent') {\n return true;\n }\n\n // For block element with positive value of border width or top/bottom margin/padding,\n // we need to use format container\n if (\n FormatContainerTriggerStyles.some(\n key => parseInt((style[key] as string) || (defaultStyle[key] as string) || '') > 0\n )\n ) {\n return true;\n }\n\n // For margin left/right with value \"auto\", we need to use format container\n if (style.marginLeft == 'auto' || style.marginRight == 'auto') {\n return true;\n }\n\n // For element with \"align\" attribute, we need to use format container\n if (element.getAttribute('align')) {\n return true;\n }\n\n return false;\n}\n","import { ElementProcessor } from 'roosterjs-content-model-types';\nimport { knownElementProcessor } from './knownElementProcessor';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\n\n/**\n * @internal\n */\nexport const linkProcessor: ElementProcessor = (group, element, context) => {\n if (element.hasAttribute('href')) {\n stackFormat(context, { link: 'linkDefault' }, () => {\n parseFormat(element, context.formatParsers.link, context.link.format, context);\n parseFormat(element, context.formatParsers.dataset, context.link.dataset, context);\n\n knownElementProcessor(group, element, context);\n });\n } else {\n // A tag without href, can be treated as normal SPAN tag\n knownElementProcessor(group, element, context);\n }\n};\n","import { createListItem } from '../../modelApi/creators/createListItem';\nimport { ElementProcessor } from 'roosterjs-content-model-types';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\n\n/**\n * @internal\n */\nexport const listItemProcessor: ElementProcessor = (group, element, context) => {\n const { listFormat } = context;\n\n if (listFormat.listParent && listFormat.levels.length > 0) {\n stackFormat(\n context,\n {\n segment: 'shallowCloneForBlock',\n },\n () => {\n parseFormat(\n element,\n context.formatParsers.segmentOnBlock,\n context.segmentFormat,\n context\n );\n\n const listItem = createListItem(listFormat.levels, context.segmentFormat);\n parseFormat(\n element,\n context.formatParsers.listItemElement,\n listItem.format,\n context\n );\n\n listFormat.listParent!.blocks.push(listItem);\n\n parseFormat(\n element,\n context.formatParsers.listItem,\n listItem.levels[listItem.levels.length - 1],\n context\n );\n\n context.elementProcessors.child(listItem, element, context);\n\n const firstChild = listItem.blocks[0];\n\n if (\n listItem.blocks.length == 1 &&\n firstChild.blockType == 'Paragraph' &&\n firstChild.isImplicit\n ) {\n Object.assign(listItem.format, firstChild.format);\n firstChild.format = {};\n }\n }\n );\n } else {\n const currentBlocks = listFormat.listParent?.blocks;\n const lastItem = currentBlocks?.[currentBlocks?.length - 1];\n\n context.elementProcessors['*'](\n lastItem?.blockType == 'BlockGroup' ? lastItem : group,\n element,\n context\n );\n }\n};\n","import { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\nimport { updateListMetadata } from '../../domUtils/metadata/updateListMetadata';\nimport {\n ContentModelListItemLevelFormat,\n DatasetFormat,\n DomToModelContext,\n ElementProcessor,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const listProcessor: ElementProcessor = (\n group,\n element,\n context\n) => {\n stackFormat(\n context,\n {\n segment: 'shallowCloneForBlock',\n paragraph: 'shallowCloneForGroup',\n },\n () => {\n const level: ContentModelListItemLevelFormat = { ...context.blockFormat };\n const { listFormat } = context;\n\n processMetadata(element, context, level);\n parseFormat(element, context.formatParsers.listLevel, level, context);\n parseFormat(element, context.formatParsers.segment, context.segmentFormat, context);\n\n const originalListParent = listFormat.listParent;\n\n listFormat.listParent = listFormat.listParent || group;\n listFormat.levels.push(level);\n\n try {\n context.elementProcessors.child(group, element, context);\n } finally {\n listFormat.levels.pop();\n listFormat.listParent = originalListParent;\n }\n }\n );\n};\n\nfunction processMetadata(\n element: HTMLOListElement | HTMLUListElement,\n context: DomToModelContext,\n level: ContentModelListItemLevelFormat\n) {\n const dataset: DatasetFormat = {};\n parseFormat(element, context.formatParsers.dataset, dataset, context);\n updateListMetadata({ dataset }, metadata => {\n Object.assign(level, metadata || {});\n return null;\n });\n}\n","import { addBlock } from '../../modelApi/common/addBlock';\nimport { blockProcessor } from './blockProcessor';\nimport { ContentModelSegmentFormat, ElementProcessor } from 'roosterjs-content-model-types';\nimport { createParagraph } from '../../modelApi/creators/createParagraph';\nimport { createParagraphDecorator } from '../../modelApi/creators/createParagraphDecorator';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\n\n/**\n * @internal\n */\nexport const pProcessor: ElementProcessor = (group, element, context) => {\n stackFormat(\n context,\n { blockDecorator: 'empty', segment: 'shallowCloneForBlock', paragraph: 'shallowClone' },\n () => {\n context.blockDecorator = createParagraphDecorator(element.tagName);\n\n const segmentFormat: ContentModelSegmentFormat = {};\n\n parseFormat(element, context.formatParsers.segmentOnBlock, segmentFormat, context);\n Object.assign(context.segmentFormat, segmentFormat);\n\n blockProcessor(group, element, context, segmentFormat);\n }\n );\n\n addBlock(group, createParagraph(true /*isImplicit*/, context.blockFormat));\n};\n","import { addBlock } from '../../modelApi/common/addBlock';\nimport { createTable } from '../../modelApi/creators/createTable';\nimport { createTableCell } from '../../modelApi/creators/createTableCell';\nimport { getBoundingClientRect } from '../utils/getBoundingClientRect';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\nimport {\n ContentModelTableCellFormat,\n DatasetFormat,\n ElementProcessor,\n} from 'roosterjs-content-model-types';\n\n/**\n * Content Model Element Processor for table\n *\n * For Table with merged/splitted cells, HTML uses colSpan and rowSpan attributes to specify how it should be rendered.\n * To make it easier to edit a table, we will use a different way to describe table.\n *\n * 1. For a m * n table (m rows, n columns), we always create a m * n array for the cells.\n * 2. For a regular table cell, it is mapped to one item of this array\n * 3. For a merged/splitted table cell, it will has colSpan/rowSpan value. We also created TableCell model for those spanned\n * cells, and use \"spanLeft\" and \"spanAbove\" to mark its state\n * 4. When edit table, we always edit on this mapped m * n array because it always has an item for each cell\n * 5. When write back to DOM, we create TD/TH elements for those non-spanned cells, and mark its colSpan/rowSpan value according\n * its neighbour cell's spanLeft/spanAbove attribute\n * @param group The parent block group\n * @param parent Parent DOM node to process\n * @param context DOM to Content Model context\n */\nexport const tableProcessor: ElementProcessor = (\n group,\n tableElement,\n context\n) => {\n stackFormat(\n context,\n { segment: 'shallowCloneForBlock', paragraph: 'shallowCloneForGroup' },\n () => {\n parseFormat(tableElement, context.formatParsers.block, context.blockFormat, context);\n\n const table = createTable(tableElement.rows.length, context.blockFormat);\n const { table: selectedTable, firstCell, lastCell } = context.tableSelection || {};\n const hasTableSelection = selectedTable == tableElement && !!firstCell && !!lastCell;\n\n if (context.allowCacheElement) {\n table.cachedElement = tableElement;\n }\n\n parseFormat(tableElement, context.formatParsers.table, table.format, context);\n parseFormat(tableElement, context.formatParsers.tableBorder, table.format, context);\n parseFormat(\n tableElement,\n context.formatParsers.segmentOnBlock,\n context.segmentFormat,\n context\n );\n parseFormat(tableElement, context.formatParsers.dataset, table.dataset, context);\n addBlock(group, table);\n\n const columnPositions: number[] = [0];\n const rowPositions: number[] = [0];\n const zoomScale = context.zoomScaleFormat.zoomScale || 1;\n\n for (let row = 0; row < tableElement.rows.length; row++) {\n const tr = tableElement.rows[row];\n const tableRow = table.rows[row];\n\n if (context.allowCacheElement) {\n tableRow.cachedElement = tr;\n }\n\n parseFormat(tr, context.formatParsers.tableRow, tableRow.format, context);\n\n stackFormat(context, { paragraph: 'shallowClone', segment: 'shallowClone' }, () => {\n const parent = tr.parentElement;\n const parentTag = parent?.tagName;\n\n if (\n parent &&\n (parentTag == 'TBODY' || parentTag == 'THEAD' || parentTag == 'TFOOT')\n ) {\n // If there is TBODY around TR, retrieve format from TBODY first, in case some format are declared there\n parseFormat(\n parent,\n context.formatParsers.block,\n context.blockFormat,\n context\n );\n parseFormat(\n parent,\n context.formatParsers.segmentOnBlock,\n context.segmentFormat,\n context\n );\n }\n\n parseFormat(tr, context.formatParsers.block, context.blockFormat, context);\n parseFormat(\n tr,\n context.formatParsers.segmentOnBlock,\n context.segmentFormat,\n context\n );\n\n for (\n let sourceCol = 0, targetCol = 0;\n sourceCol < tr.cells.length;\n sourceCol++\n ) {\n for (; tableRow.cells[targetCol]; targetCol++) {}\n\n const td = tr.cells[sourceCol];\n const hasSelectionBeforeCell = context.isInSelection;\n const colEnd = targetCol + td.colSpan;\n const rowEnd = row + td.rowSpan;\n const needCalcWidth = columnPositions[colEnd] === undefined;\n const needCalcHeight = rowPositions[rowEnd] === undefined;\n\n if (needCalcWidth || needCalcHeight) {\n const rect = getBoundingClientRect(td);\n\n if (rect.width > 0 || rect.height > 0) {\n if (needCalcWidth) {\n columnPositions[colEnd] =\n columnPositions[targetCol] + rect.width / zoomScale;\n }\n\n if (needCalcHeight) {\n rowPositions[rowEnd] =\n rowPositions[row] + rect.height / zoomScale;\n }\n }\n }\n\n stackFormat(\n context,\n { paragraph: 'shallowClone', segment: 'shallowClone' },\n () => {\n parseFormat(\n td,\n context.formatParsers.block,\n context.blockFormat,\n context\n );\n parseFormat(\n td,\n context.formatParsers.segmentOnTableCell,\n context.segmentFormat,\n context\n );\n\n const cellFormat: ContentModelTableCellFormat = {\n ...context.blockFormat,\n };\n const dataset: DatasetFormat = {};\n\n parseFormat(\n td,\n context.formatParsers.tableCell,\n cellFormat,\n context\n );\n parseFormat(\n td,\n context.formatParsers.tableBorder,\n cellFormat,\n context\n );\n parseFormat(td, context.formatParsers.dataset, dataset, context);\n\n for (\n let colSpan = 1;\n colSpan <= td.colSpan;\n colSpan++, targetCol++\n ) {\n for (let rowSpan = 1; rowSpan <= td.rowSpan; rowSpan++) {\n const hasTd = colSpan == 1 && rowSpan == 1;\n const cell = createTableCell(\n colSpan > 1,\n rowSpan > 1,\n td.tagName == 'TH',\n cellFormat\n );\n\n cell.dataset = { ...dataset };\n\n const spannedRow = table.rows[row + rowSpan - 1];\n\n if (spannedRow) {\n spannedRow.cells[targetCol] = cell;\n }\n\n if (hasTd) {\n if (context.allowCacheElement) {\n cell.cachedElement = td;\n }\n\n const { listParent, levels } = context.listFormat;\n\n context.listFormat.listParent = undefined;\n context.listFormat.levels = [];\n\n try {\n context.elementProcessors.child(cell, td, context);\n } finally {\n context.listFormat.listParent = listParent;\n context.listFormat.levels = levels;\n }\n }\n\n const hasSelectionAfterCell = context.isInSelection;\n\n if (\n (hasSelectionBeforeCell && hasSelectionAfterCell) ||\n (hasTableSelection &&\n row >= firstCell.y &&\n row <= lastCell.y &&\n targetCol >= firstCell.x &&\n targetCol <= lastCell.x)\n ) {\n cell.isSelected = true;\n }\n }\n }\n }\n );\n }\n });\n }\n\n table.widths = calcSizes(columnPositions);\n\n const heights = calcSizes(rowPositions);\n\n table.rows.forEach((row, i) => {\n if (heights[i] > 0) {\n row.height = heights[i];\n }\n });\n }\n );\n};\n\nfunction calcSizes(positions: number[]): number[] {\n let result: number[] = [];\n let lastPos = positions[positions.length - 1];\n\n for (let i = positions.length - 2; i >= 0; i--) {\n if (positions[i] === undefined) {\n result[i] = 0;\n } else {\n result[i] = lastPos - positions[i];\n lastPos = positions[i];\n }\n }\n\n return result;\n}\n","import { addDecorators } from '../../modelApi/common/addDecorators';\nimport { addSegment } from '../../modelApi/common/addSegment';\nimport { addSelectionMarker } from '../utils/addSelectionMarker';\nimport { areSameFormats } from '../utils/areSameFormats';\nimport {\n ContentModelBlockGroup,\n DomToModelContext,\n ElementProcessor,\n} from 'roosterjs-content-model-types';\nimport { createText } from '../../modelApi/creators/createText';\nimport { getRegularSelectionOffsets } from '../utils/getRegularSelectionOffsets';\nimport { hasSpacesOnly } from '../../domUtils/stringUtil';\n\n/**\n * @internal\n */\nexport const textProcessor: ElementProcessor = (\n group: ContentModelBlockGroup,\n textNode: Text,\n context: DomToModelContext\n) => {\n let txt = textNode.nodeValue || '';\n let [txtStartOffset, txtEndOffset] = getRegularSelectionOffsets(context, textNode);\n\n if (txtStartOffset >= 0) {\n addTextSegment(group, txt.substring(0, txtStartOffset), context);\n context.isInSelection = true;\n\n addSelectionMarker(group, context);\n\n txt = txt.substring(txtStartOffset);\n txtEndOffset -= txtStartOffset;\n }\n\n if (txtEndOffset >= 0) {\n addTextSegment(group, txt.substring(0, txtEndOffset), context);\n\n if (!context.regularSelection!.isSelectionCollapsed) {\n addSelectionMarker(group, context);\n }\n\n context.isInSelection = false;\n txt = txt.substring(txtEndOffset);\n }\n\n addTextSegment(group, txt, context);\n};\n\n// When we see these values of white-space style, need to preserve spaces and line-breaks and let browser handle it for us.\nconst WhiteSpaceValuesNeedToHandle = ['pre', 'pre-wrap', 'pre-line', 'break-spaces'];\n\nfunction addTextSegment(group: ContentModelBlockGroup, text: string, context: DomToModelContext) {\n if (text) {\n const lastBlock = group.blocks[group.blocks.length - 1];\n const paragraph = lastBlock?.blockType == 'Paragraph' ? lastBlock : null;\n const lastSegment = paragraph?.segments[paragraph.segments.length - 1];\n\n if (\n lastSegment?.segmentType == 'Text' &&\n !!lastSegment.isSelected == !!context.isInSelection &&\n areSameFormats(lastSegment.format, context.segmentFormat) &&\n areSameFormats(lastSegment.link || {}, context.link.format || {}) &&\n areSameFormats(lastSegment.code || {}, context.code.format || {})\n ) {\n lastSegment.text += text;\n } else if (\n !hasSpacesOnly(text) ||\n paragraph?.segments.length! > 0 ||\n WhiteSpaceValuesNeedToHandle.indexOf(paragraph?.format.whiteSpace || '') >= 0\n ) {\n const textModel = createText(text, context.segmentFormat);\n\n if (context.isInSelection) {\n textModel.isSelected = true;\n }\n\n addDecorators(textModel, context);\n\n addSegment(group, textModel, context.blockFormat);\n }\n }\n}\n","import { addDecorators } from '../../modelApi/common/addDecorators';\nimport { addSegment } from '../../modelApi/common/addSegment';\nimport { ContentModelBlockGroup, DomToModelContext } from 'roosterjs-content-model-types';\nimport { createSelectionMarker } from '../../modelApi/creators/createSelectionMarker';\n\n/**\n * @internal\n */\nexport function addSelectionMarker(group: ContentModelBlockGroup, context: DomToModelContext) {\n const marker = createSelectionMarker(context.segmentFormat);\n\n addDecorators(marker, context);\n\n addSegment(group, marker, context.blockFormat);\n}\n","import { ContentModelFormatBase } from 'roosterjs-content-model-types';\nimport { getObjectKeys } from 'roosterjs-editor-dom';\n\n/**\n * Check if the two given formats object are equal. This is a check to value but not to reference\n * @param f1 The first format object to check\n * @param f2 The second format object to check\n */\nexport function areSameFormats(f1: T, f2: T) {\n if (f1 == f2) {\n return true;\n } else {\n const keys1 = getObjectKeys(f1);\n const keys2 = getObjectKeys(f2);\n\n return keys1.length == keys2.length && keys1.every(key => f1[key] == f2[key]);\n }\n}\n","/**\n * @internal\n */\nexport function getBoundingClientRect(element: Element): DOMRect {\n return element.getBoundingClientRect();\n}\n","import { DefaultStyleMap, DomToModelContext } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Get default CSS style of given element\n * @param element The element to get default style from\n * @param context The context of DOM to Content Model conversion\n * @returns A valid CSS style object\n */\nexport function getDefaultStyle(\n element: HTMLElement,\n context: DomToModelContext\n): Partial {\n let tag = element.tagName.toLowerCase() as keyof DefaultStyleMap;\n\n return context.defaultStyles[tag] || {};\n}\n","import { DomToModelContext } from 'roosterjs-content-model-types';\n\n/**\n * Get offset numbers of a regular (range based) selection.\n * If the selection start/end position is not in the given node, it will return -1 for the related value\n * @param context DOM to Content Model context used for retrieve the selection\n * @param currentContainer The container node to check\n * @returns a tuple of start and end offsets. -1 means selection is not directly under the given node\n */\nexport function getRegularSelectionOffsets(\n context: DomToModelContext,\n currentContainer: Node\n): [number, number] {\n let startOffset =\n context.regularSelection?.startContainer == currentContainer\n ? context.regularSelection.startOffset!\n : -1;\n let endOffset =\n context.regularSelection?.endContainer == currentContainer\n ? context.regularSelection.endOffset!\n : -1;\n\n return [startOffset, endOffset];\n}\n","import { DomToModelContext } from 'roosterjs-content-model-types';\nimport { getDefaultStyle } from './getDefaultStyle';\n\nconst BLOCK_DISPLAY_STYLES = ['block', 'list-item', 'table', 'table-cell', 'flex'];\n\n/**\n * @internal\n * Check if the given element will be layout as a block\n * @param element The element to check\n * @param context The context of DOM to Content Model conversion\n */\nexport function isBlockElement(element: HTMLElement, context: DomToModelContext): boolean {\n const display = element.style.display || getDefaultStyle(element, context).display || '';\n\n return BLOCK_DISPLAY_STYLES.indexOf(display) >= 0;\n}\n","import { getDefaultStyle } from './getDefaultStyle';\nimport {\n ContentModelFormatBase,\n DomToModelContext,\n FormatParser,\n} from 'roosterjs-content-model-types';\n\n/**\n * Parse formats of the given HTML element using specified format parsers\n * @param element The element to parse format from\n * @param parsers The parses we are using to parse format\n * @param format The format object to hold result format\n * @param context DOM to Content Model context\n */\nexport function parseFormat(\n element: HTMLElement,\n parsers: (FormatParser | null)[],\n format: T,\n context: DomToModelContext\n) {\n const defaultStyle = getDefaultStyle(element, context);\n\n parsers.forEach(parser => {\n parser?.(format, element, context, defaultStyle);\n });\n}\n","import { getObjectKeys } from 'roosterjs-editor-dom';\nimport {\n ContentModelBlockFormat,\n ContentModelCode,\n ContentModelFormatBase,\n ContentModelLink,\n ContentModelParagraphDecorator,\n ContentModelSegmentFormat,\n DomToModelContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport interface StackFormatOptions {\n segment?: 'shallowClone' | 'shallowCloneForBlock' | 'empty';\n paragraph?: 'shallowClone' | 'shallowCloneForGroup' | 'empty';\n blockDecorator?: 'empty';\n link?: 'linkDefault' | 'cloneFormat' | 'empty';\n code?: 'codeDefault' | 'empty';\n}\n\n// Some styles, such as background color, won't be inherited by block element if it was originally\n// declared from an inline element. So we need to skip them.\n// e.g.\n// \n// line 1 <---------------------------- in red here\n//
    line 2
    <---------------------- not in red here\n//
    \nconst SkippedStylesForBlock: (keyof ContentModelSegmentFormat)[] = ['backgroundColor'];\nconst SkippedStylesForTable: (keyof ContentModelBlockFormat)[] = [\n 'marginLeft',\n 'marginRight',\n 'paddingLeft',\n 'paddingRight',\n];\n\n/**\n * @internal\n */\nexport function stackFormat(\n context: DomToModelContext,\n options: StackFormatOptions,\n callback: () => void\n) {\n const {\n segmentFormat,\n blockFormat,\n link: linkFormat,\n code: codeFormat,\n blockDecorator: decoratorFormat,\n } = context;\n const { segment, paragraph, link, code, blockDecorator } = options;\n\n try {\n context.segmentFormat = stackFormatInternal(segmentFormat, segment);\n context.blockFormat = stackFormatInternal(blockFormat, paragraph);\n context.link = stackLinkInternal(linkFormat, link);\n context.code = stackCodeInternal(codeFormat, code);\n context.blockDecorator = stackDecoratorInternal(decoratorFormat, blockDecorator);\n\n callback();\n } finally {\n context.segmentFormat = segmentFormat;\n context.blockFormat = blockFormat;\n context.link = linkFormat;\n context.code = codeFormat;\n context.blockDecorator = decoratorFormat;\n }\n}\n\nfunction stackLinkInternal(\n linkFormat: ContentModelLink,\n link?: 'linkDefault' | 'cloneFormat' | 'empty'\n) {\n switch (link) {\n case 'linkDefault':\n return {\n format: {\n underline: true,\n },\n dataset: {},\n };\n\n case 'empty':\n return {\n format: {},\n dataset: {},\n };\n\n case 'cloneFormat':\n default:\n return {\n dataset: linkFormat.dataset,\n format: { ...linkFormat.format },\n };\n }\n}\n\nfunction stackCodeInternal(codeFormat: ContentModelCode, code?: 'codeDefault' | 'empty') {\n switch (code) {\n case 'codeDefault':\n return {\n format: {\n fontFamily: 'monospace',\n },\n };\n case 'empty':\n return {\n format: {},\n };\n default:\n return codeFormat;\n }\n}\n\nfunction stackDecoratorInternal(\n format: ContentModelParagraphDecorator,\n decorator?: 'decoratorDefault' | 'empty'\n) {\n switch (decorator) {\n case 'empty':\n return {\n format: {},\n tagName: '',\n };\n default:\n return format;\n }\n}\n\nfunction stackFormatInternal(\n format: T,\n processType?: 'shallowClone' | 'shallowCloneForBlock' | 'shallowCloneForGroup' | 'empty'\n): T | {} {\n switch (processType) {\n case 'empty':\n return {};\n\n case undefined:\n return format;\n\n default:\n const result = { ...format };\n\n getObjectKeys(format).forEach(key => {\n if (\n (processType == 'shallowCloneForBlock' &&\n SkippedStylesForBlock.indexOf(key as keyof ContentModelSegmentFormat) >=\n 0) ||\n (processType == 'shallowCloneForGroup' &&\n SkippedStylesForTable.indexOf(key as keyof ContentModelBlockFormat) >= 0)\n ) {\n delete result[key];\n }\n });\n\n return result;\n }\n}\n","import { NodeType } from 'roosterjs-editor-types';\n\n/**\n * A type map from node type number to its type declaration. This is used by utility function isNodeOfType()\n */\nexport interface NodeTypeMap {\n /**\n * Attribute node\n */\n [NodeType.Attribute]: Attr;\n\n /**\n * Comment node\n */\n [NodeType.Comment]: Comment;\n\n /**\n * DocumentFragment node\n */\n [NodeType.DocumentFragment]: DocumentFragment;\n\n /**\n * Document node\n */\n [NodeType.Document]: Document;\n\n /**\n * DocumentType node\n */\n [NodeType.DocumentType]: DocumentType;\n\n /**\n * HTMLElement node\n */\n [NodeType.Element]: HTMLElement;\n /**\n * ProcessingInstruction node\n */\n [NodeType.ProcessingInstruction]: ProcessingInstruction;\n\n /**\n * Text node\n */\n [NodeType.Text]: Text;\n}\n\n/**\n * Type checker for Node. Return true if it of the specified node type\n * @param node The node to check\n * @param expectedType The type to check\n */\nexport function isNodeOfType(\n node: Node | null | undefined,\n expectedType: T\n): node is NodeTypeMap[T] {\n return !!node && node.nodeType == expectedType;\n}\n","import { BulletListType, NumberingListType } from 'roosterjs-editor-types';\nimport { ContentModelWithDataset, ListMetadataFormat } from 'roosterjs-content-model-types';\nimport { createNumberDefinition, createObjectDefinition } from 'roosterjs-editor-dom';\nimport { updateMetadata } from './updateMetadata';\n\nconst ListStyleDefinitionMetadata = createObjectDefinition(\n {\n orderedStyleType: createNumberDefinition(\n true /** isOptional */,\n undefined /** value **/,\n NumberingListType.Min,\n NumberingListType.Max\n ),\n unorderedStyleType: createNumberDefinition(\n true /** isOptional */,\n undefined /** value **/,\n BulletListType.Min,\n BulletListType.Max\n ),\n },\n true /** isOptional */,\n true /** allowNull */\n);\n\n/**\n * @internal\n * Update list metadata with a callback\n * @param list The list Content Model (metadata holder)\n * @param callback The callback function used for updating metadata\n */\nexport function updateListMetadata(\n list: ContentModelWithDataset,\n callback?: (format: ListMetadataFormat | null) => ListMetadataFormat | null\n): ListMetadataFormat | null {\n return updateMetadata(list, callback, ListStyleDefinitionMetadata);\n}\n","import { ContentModelWithDataset } from 'roosterjs-content-model-types';\nimport { Definition } from 'roosterjs-editor-types';\nimport { validate } from 'roosterjs-editor-dom';\n\nconst EditingInfoDatasetName = 'editingInfo';\n\n/**\n * Update metadata of the given model\n * @param model The model to update metadata to\n * @param callback A callback function to update metadata\n * @param definition @optional Metadata definition used for verify the metadata object\n * @returns The metadata object if any, or null\n */\nexport function updateMetadata(\n model: ContentModelWithDataset,\n callback?: (metadata: T | null) => T | null,\n definition?: Definition\n): T | null {\n const metadataString = model.dataset[EditingInfoDatasetName];\n let obj: T | null = null;\n\n try {\n obj = JSON.parse(metadataString) as T;\n } catch {}\n\n if (definition && !validate(obj, definition)) {\n obj = null;\n }\n\n if (callback) {\n obj = callback(obj);\n\n if (!obj) {\n delete model.dataset[EditingInfoDatasetName];\n } else if (!definition || validate(obj, definition)) {\n model.dataset[EditingInfoDatasetName] = JSON.stringify(obj);\n }\n }\n\n return obj;\n}\n\n/**\n * Check if the given model has metadata\n * @param model The content model to check\n */\nexport function hasMetadata(model: ContentModelWithDataset | HTMLElement): boolean {\n return !!model.dataset[EditingInfoDatasetName];\n}\n","// A regex to match text that only has space and CR\n// We use real space char \" \" (\\u0020) here but not \"\\s\" since \"\\s\" will also match \" \" (\\u00A0) which is something we need to keep\nconst SPACE_TEXT_REGEX = /^[\\r\\n\\t ]*$/;\n\nconst SPACES_REGEX = /[\\u2000\\u2009\\u200a​\\u200b​\\u202f\\u205f​\\u3000\\s\\t\\r\\n]/gm;\nconst PUNCTUATIONS = '.,?!:\"()[]\\\\/';\n\n/**\n * Check if the given character is punctuation\n * @param char The character to check\n */\nexport function isPunctuation(char: string) {\n return PUNCTUATIONS.indexOf(char) >= 0;\n}\n\n/**\n * Check if the give character is a space. A space can be normal ASCII pace (32) or non-break space (160) or other kinds of spaces\n * such as ZeroWidthSpace, ...\n * @param char The character to check\n */\nexport function isSpace(char: string) {\n const code = char?.charCodeAt(0) ?? 0;\n return code == 160 || code == 32 || SPACES_REGEX.test(char);\n}\n\n/**\n * @internal\n * Check if the given string only has space, including line breaks.\n * @param txt The string to check\n */\nexport function hasSpacesOnly(txt: string): boolean {\n return SPACE_TEXT_REGEX.test(txt);\n}\n\n/**\n * Normalize spaces of the given string. After normalization, all leading (for forward) or trailing (for backward) spaces\n * will be replaces with non-break space (160)\n * @param txt The string to normalize\n * @param isForward Whether normalize forward or backward\n */\nexport function normalizeText(txt: string, isForward: boolean): string {\n return txt.replace(isForward ? /^\\u0020+/ : /\\u0020+$/, '\\u00A0');\n}\n","import { DirectionFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n */\nexport const directionFormatHandler: FormatHandler = {\n parse: (format, element, _, defaultStyle) => {\n const dir = element.style.direction || element.dir || defaultStyle.direction;\n\n if (dir) {\n format.direction = dir == 'rtl' ? 'rtl' : 'ltr';\n }\n },\n apply: (format, element) => {\n if (format.direction) {\n element.style.direction = format.direction;\n }\n },\n};\n","import { DisplayFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n */\nexport const displayFormatHandler: FormatHandler = {\n parse: (format, element) => {\n const display = element.style.display;\n\n if (display) {\n format.display = display;\n }\n },\n apply: (format, element) => {\n if (format.display) {\n element.style.display = format.display;\n }\n },\n};\n","import { calcAlign, ResultMap } from '../utils/dir';\nimport { DirectionFormat, HtmlAlignFormat, TextAlignFormat } from 'roosterjs-content-model-types';\nimport { directionFormatHandler } from './directionFormatHandler';\nimport { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n */\nexport const htmlAlignFormatHandler: FormatHandler<\n DirectionFormat & HtmlAlignFormat & TextAlignFormat\n> = {\n parse: (format, element, context, defaultStyle) => {\n directionFormatHandler.parse(format, element, context, defaultStyle);\n\n const htmlAlign = element.getAttribute('align');\n\n if (htmlAlign) {\n format.htmlAlign = calcAlign(htmlAlign, format.direction);\n delete format.textAlign;\n delete context.blockFormat.textAlign;\n }\n },\n apply: (format, element) => {\n const dir: 'ltr' | 'rtl' = format.direction == 'rtl' ? 'rtl' : 'ltr';\n\n if (format.htmlAlign) {\n element.setAttribute('align', ResultMap[format.htmlAlign][dir]);\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { LineHeightFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const lineHeightFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const lineHeight = element.style.lineHeight || defaultStyle.lineHeight;\n\n if (lineHeight && lineHeight != 'inherit') {\n format.lineHeight = lineHeight;\n }\n },\n apply: (format, element) => {\n if (format.lineHeight) {\n element.style.lineHeight = format.lineHeight;\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { MarginFormat } from 'roosterjs-content-model-types';\nimport { parseValueWithUnit } from '../utils/parseValueWithUnit';\n\nconst MarginKeys: (keyof MarginFormat & keyof CSSStyleDeclaration)[] = [\n 'marginTop',\n 'marginRight',\n 'marginBottom',\n 'marginLeft',\n];\n\n/**\n * @internal\n */\nexport const marginFormatHandler: FormatHandler = {\n parse: (format, element, _, defaultStyle) => {\n MarginKeys.forEach(key => {\n const value = element.style[key] || defaultStyle[key];\n\n if (value) {\n switch (key) {\n case 'marginTop':\n case 'marginBottom':\n format[key] = value;\n break;\n\n case 'marginLeft':\n case 'marginRight':\n format[key] = format[key]\n ? parseValueWithUnit(format[key] || '', element) +\n parseValueWithUnit(value, element) +\n 'px'\n : value;\n break;\n }\n }\n });\n },\n apply: (format, element, context) => {\n MarginKeys.forEach(key => {\n const value = format[key];\n\n if (value != context.implicitFormat[key]) {\n element.style[key] = value || '0';\n }\n });\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { PaddingFormat } from 'roosterjs-content-model-types';\n\nconst PaddingKeys: (keyof PaddingFormat & keyof CSSStyleDeclaration)[] = [\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n];\n\n/**\n * @internal\n */\nexport const paddingFormatHandler: FormatHandler = {\n parse: (format, element) => {\n PaddingKeys.forEach(key => {\n const value = element.style[key];\n\n if (value) {\n format[key] = value;\n }\n });\n },\n apply: (format, element) => {\n PaddingKeys.forEach(key => {\n const value = format[key];\n if (value) {\n element.style[key] = value;\n }\n });\n },\n};\n","import { calcAlign, ResultMap } from '../utils/dir';\nimport { DirectionFormat, TextAlignFormat } from 'roosterjs-content-model-types';\nimport { directionFormatHandler } from './directionFormatHandler';\nimport { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n */\nexport const textAlignFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n directionFormatHandler.parse(format, element, context, defaultStyle);\n\n let textAlign = element.style.textAlign || defaultStyle.textAlign;\n\n if (\n element.tagName == 'LI' &&\n element.parentElement?.style.display === 'flex' &&\n element.parentElement.style.flexDirection === 'column' &&\n element.style.alignSelf\n ) {\n // For LI element with flex style applied, we use its \"align-self\" style value instead since LI has a different implementation for align\n textAlign = element.style.alignSelf;\n }\n\n if (textAlign) {\n format.textAlign = calcAlign(textAlign, format.direction);\n }\n },\n apply: (format, element) => {\n const dir: 'ltr' | 'rtl' = format.direction == 'rtl' ? 'rtl' : 'ltr';\n\n if (format.textAlign) {\n const parent = element.parentElement;\n const parentTag = parent?.tagName;\n\n if (element.tagName == 'LI' && parent && (parentTag == 'OL' || parentTag == 'UL')) {\n element.style.alignSelf = format.textAlign;\n element.parentElement.style.flexDirection = 'column';\n element.parentElement.style.display = 'flex';\n } else {\n element.style.textAlign = ResultMap[format.textAlign][dir];\n }\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { WhiteSpaceFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const whiteSpaceFormatHandler: FormatHandler = {\n parse: (format, element, _, defaultStyle) => {\n const whiteSpace = element.style.whiteSpace || defaultStyle.whiteSpace;\n\n if (whiteSpace) {\n format.whiteSpace = whiteSpace;\n }\n },\n apply: (format, element, context) => {\n const whiteSpace = context.implicitFormat.whiteSpace;\n if (format.whiteSpace != whiteSpace) {\n element.style.whiteSpace = format.whiteSpace || 'normal';\n }\n },\n};\n","import { BackgroundColorFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\nimport { getColor, setColor } from '../utils/color';\n\n/**\n * @internal\n */\nexport const backgroundColorFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const backgroundColor =\n getColor(\n element,\n true /*isBackground*/,\n context.darkColorHandler,\n context.isDarkMode\n ) || defaultStyle.backgroundColor;\n\n if (backgroundColor) {\n format.backgroundColor = backgroundColor;\n }\n },\n apply: (format, element, context) => {\n if (format.backgroundColor) {\n setColor(\n element,\n format.backgroundColor,\n true /*isBackground*/,\n context.darkColorHandler,\n context.isDarkMode\n );\n }\n },\n};\n","import { BorderBoxFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n */\nexport const borderBoxFormatHandler: FormatHandler = {\n parse: (format, element) => {\n if (element.style?.boxSizing == 'border-box') {\n format.useBorderBox = true;\n }\n },\n apply: (format, element) => {\n if (format.useBorderBox) {\n element.style.boxSizing = 'border-box';\n }\n },\n};\n","import { BorderFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\n\n/**\n * Keys of border items\n */\nexport const BorderKeys: (keyof BorderFormat & keyof CSSStyleDeclaration)[] = [\n 'borderTop',\n 'borderRight',\n 'borderBottom',\n 'borderLeft',\n 'borderRadius',\n];\n\n/**\n * @internal\n */\nexport const borderFormatHandler: FormatHandler = {\n parse: (format, element) => {\n BorderKeys.forEach(key => {\n const value = element.style[key];\n\n if (value) {\n format[key] = value == 'none' ? '' : value;\n }\n });\n },\n apply: (format, element) => {\n BorderKeys.forEach(key => {\n const value = format[key];\n\n if (value) {\n element.style[key] = value;\n }\n });\n },\n};\n","import { BoxShadowFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n */\nexport const boxShadowFormatHandler: FormatHandler = {\n parse: (format, element) => {\n if (element.style?.boxShadow) {\n format.boxShadow = element.style.boxShadow;\n }\n },\n apply: (format, element) => {\n if (format.boxShadow) {\n element.style.boxShadow = format.boxShadow;\n }\n },\n};\n","import { DatasetFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\nimport { getObjectKeys } from 'roosterjs-editor-dom';\n\n/**\n * @internal\n */\nexport const datasetFormatHandler: FormatHandler = {\n parse: (format, element) => {\n const dataset = element.dataset;\n\n getObjectKeys(dataset).forEach(key => {\n format[key] = dataset[key] || '';\n });\n },\n\n apply: (format, element) => {\n getObjectKeys(format).forEach(key => {\n element.dataset[key] = format[key];\n });\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { IdFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const idFormatHandler: FormatHandler = {\n parse: (format, element) => {\n if (element.id) {\n format.id = element.id;\n }\n },\n apply: (format, element) => {\n if (format.id) {\n element.id = format.id;\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { SizeFormat } from 'roosterjs-content-model-types';\n\nconst PercentageRegex = /[\\d\\.]+%/;\n\n/**\n * @internal\n */\nexport const sizeFormatHandler: FormatHandler = {\n parse: (format, element, context) => {\n const width = element.style.width || tryParseSize(element, 'width');\n const height = element.style.height || tryParseSize(element, 'height');\n const maxWidth = element.style.maxWidth;\n const maxHeight = element.style.maxHeight;\n const minWidth = element.style.minWidth;\n const minHeight = element.style.minHeight;\n\n if (width) {\n format.width = width;\n }\n if (height) {\n format.height = height;\n }\n if (maxWidth) {\n format.maxWidth = maxWidth;\n }\n if (maxHeight) {\n format.maxHeight = maxHeight;\n }\n if (minWidth) {\n format.minWidth = minWidth;\n }\n if (minHeight) {\n format.minHeight = minHeight;\n }\n },\n apply: (format, element) => {\n if (format.width) {\n element.style.width = format.width;\n }\n if (format.height) {\n element.style.height = format.height;\n }\n if (format.maxWidth) {\n element.style.maxWidth = format.maxWidth;\n }\n if (format.maxHeight) {\n element.style.maxHeight = format.maxHeight;\n }\n if (format.minWidth) {\n element.style.minWidth = format.minWidth;\n }\n if (format.minHeight) {\n element.style.minHeight = format.minHeight;\n }\n },\n};\n\nfunction tryParseSize(element: HTMLElement, attrName: 'width' | 'height'): string | undefined {\n const attrValue = element.getAttribute(attrName);\n const value = parseInt(attrValue || '');\n\n return attrValue && PercentageRegex.test(attrValue)\n ? attrValue\n : Number.isNaN(value)\n ? undefined\n : value + 'px';\n}\n","import { FormatHandler } from '../FormatHandler';\nimport { VerticalAlignFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const verticalAlignFormatHandler: FormatHandler = {\n parse: (format, element) => {\n const align = element.style.verticalAlign || element.getAttribute('valign');\n\n switch (align) {\n case 'baseline':\n case 'initial':\n case 'super':\n case 'sub':\n case 'text-top':\n case 'text-bottom':\n case 'top':\n format.verticalAlign = 'top';\n break;\n\n case 'bottom':\n format.verticalAlign = 'bottom';\n break;\n }\n },\n apply: (format, element) => {\n if (format.verticalAlign) {\n element.style.verticalAlign = format.verticalAlign;\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { WordBreakFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const wordBreakFormatHandler: FormatHandler = {\n parse: (format, element, _, defaultStyle) => {\n const wordBreak = element.style.wordBreak || defaultStyle.wordBreak;\n\n if (wordBreak) {\n format.wordBreak = wordBreak;\n }\n },\n apply: (format, element) => {\n if (format.wordBreak) {\n element.style.wordBreak = format.wordBreak;\n }\n },\n};\n","import { backgroundColorFormatHandler } from './common/backgroundColorFormatHandler';\nimport { boldFormatHandler } from './segment/boldFormatHandler';\nimport { borderBoxFormatHandler } from './common/borderBoxFormatHandler';\nimport { borderFormatHandler } from './common/borderFormatHandler';\nimport { boxShadowFormatHandler } from './common/boxShadowFormatHandler';\nimport { datasetFormatHandler } from './common/datasetFormatHandler';\nimport { directionFormatHandler } from './block/directionFormatHandler';\nimport { displayFormatHandler } from './block/displayFormatHandler';\nimport { fontFamilyFormatHandler } from './segment/fontFamilyFormatHandler';\nimport { fontSizeFormatHandler } from './segment/fontSizeFormatHandler';\nimport { FormatHandler } from './FormatHandler';\nimport { getObjectKeys } from 'roosterjs-editor-dom';\nimport { htmlAlignFormatHandler } from './block/htmlAlignFormatHandler';\nimport { idFormatHandler } from './common/idFormatHandler';\nimport { italicFormatHandler } from './segment/italicFormatHandler';\nimport { letterSpacingFormatHandler } from './segment/letterSpacingFormatHandler';\nimport { lineHeightFormatHandler } from './block/lineHeightFormatHandler';\nimport { linkFormatHandler } from './segment/linkFormatHandler';\nimport { listItemMetadataFormatHandler } from './list/listItemMetadataFormatHandler';\nimport { listItemThreadFormatHandler } from './list/listItemThreadFormatHandler';\nimport { listLevelMetadataFormatHandler } from './list/listLevelMetadataFormatHandler';\nimport { listLevelThreadFormatHandler } from './list/listLevelThreadFormatHandler';\nimport { listStylePositionFormatHandler } from './list/listStylePositionFormatHandler';\nimport { listTypeFormatHandler } from './list/listTypeFormatHandler';\nimport { marginFormatHandler } from './block/marginFormatHandler';\nimport { paddingFormatHandler } from './block/paddingFormatHandler';\nimport { sizeFormatHandler } from './common/sizeFormatHandler';\nimport { strikeFormatHandler } from './segment/strikeFormatHandler';\nimport { superOrSubScriptFormatHandler } from './segment/superOrSubScriptFormatHandler';\nimport { tableLayoutFormatHandler } from './table/tableLayoutFormatHandler';\nimport { tableSpacingFormatHandler } from './table/tableSpacingFormatHandler';\nimport { textAlignFormatHandler } from './block/textAlignFormatHandler';\nimport { textColorFormatHandler } from './segment/textColorFormatHandler';\nimport { textColorOnTableCellFormatHandler } from './table/textColorOnTableCellFormatHandler';\nimport { underlineFormatHandler } from './segment/underlineFormatHandler';\nimport { verticalAlignFormatHandler } from './common/verticalAlignFormatHandler';\nimport { whiteSpaceFormatHandler } from './block/whiteSpaceFormatHandler';\nimport { wordBreakFormatHandler } from './common/wordBreakFormatHandler';\nimport {\n ContentModelFormatMap,\n FormatHandlerTypeMap,\n FormatKey,\n FormatApplier,\n FormatAppliers,\n FormatAppliersPerCategory,\n FormatParser,\n FormatParsers,\n FormatParsersPerCategory,\n} from 'roosterjs-content-model-types';\n\ntype FormatHandlers = {\n [Key in FormatKey]: FormatHandler;\n};\n\nconst defaultFormatHandlerMap: FormatHandlers = {\n backgroundColor: backgroundColorFormatHandler,\n bold: boldFormatHandler,\n border: borderFormatHandler,\n borderBox: borderBoxFormatHandler,\n boxShadow: boxShadowFormatHandler,\n dataset: datasetFormatHandler,\n direction: directionFormatHandler,\n display: displayFormatHandler,\n fontFamily: fontFamilyFormatHandler,\n fontSize: fontSizeFormatHandler,\n htmlAlign: htmlAlignFormatHandler,\n id: idFormatHandler,\n italic: italicFormatHandler,\n letterSpacing: letterSpacingFormatHandler,\n lineHeight: lineHeightFormatHandler,\n link: linkFormatHandler,\n listItemMetadata: listItemMetadataFormatHandler,\n listItemThread: listItemThreadFormatHandler,\n listLevelMetadata: listLevelMetadataFormatHandler,\n listLevelThread: listLevelThreadFormatHandler,\n listStylePosition: listStylePositionFormatHandler,\n listType: listTypeFormatHandler,\n margin: marginFormatHandler,\n padding: paddingFormatHandler,\n size: sizeFormatHandler,\n strike: strikeFormatHandler,\n superOrSubScript: superOrSubScriptFormatHandler,\n tableLayout: tableLayoutFormatHandler,\n tableSpacing: tableSpacingFormatHandler,\n textAlign: textAlignFormatHandler,\n textColor: textColorFormatHandler,\n textColorOnTableCell: textColorOnTableCellFormatHandler,\n underline: underlineFormatHandler,\n verticalAlign: verticalAlignFormatHandler,\n whiteSpace: whiteSpaceFormatHandler,\n wordBreak: wordBreakFormatHandler,\n};\n\nconst styleBasedSegmentFormats: (keyof FormatHandlerTypeMap)[] = [\n 'letterSpacing',\n 'fontFamily',\n 'fontSize',\n];\n\nconst elementBasedSegmentFormats: (keyof FormatHandlerTypeMap)[] = [\n 'strike',\n 'underline',\n 'superOrSubScript',\n 'italic',\n 'bold',\n];\nconst sharedBlockFormats: (keyof FormatHandlerTypeMap)[] = [\n 'direction',\n 'textAlign',\n 'lineHeight',\n 'whiteSpace',\n];\nconst sharedContainerFormats: (keyof FormatHandlerTypeMap)[] = [\n 'backgroundColor',\n 'margin',\n 'padding',\n 'border',\n];\n\nconst defaultFormatKeysPerCategory: {\n [key in keyof ContentModelFormatMap]: (keyof FormatHandlerTypeMap)[];\n} = {\n block: sharedBlockFormats,\n listItem: ['listItemThread', 'listItemMetadata'],\n listItemElement: [...sharedBlockFormats, 'direction', 'textAlign', 'lineHeight', 'margin'],\n listLevel: [\n 'listType',\n 'listLevelThread',\n 'listLevelMetadata',\n 'direction',\n 'textAlign',\n 'margin',\n 'padding',\n 'listStylePosition',\n 'backgroundColor',\n ],\n styleBasedSegment: [...styleBasedSegmentFormats, 'textColor', 'backgroundColor', 'lineHeight'],\n elementBasedSegment: elementBasedSegmentFormats,\n segment: [\n ...styleBasedSegmentFormats,\n ...elementBasedSegmentFormats,\n 'textColor',\n 'backgroundColor',\n 'lineHeight',\n ],\n segmentOnBlock: [...styleBasedSegmentFormats, ...elementBasedSegmentFormats, 'textColor'],\n segmentOnTableCell: [\n ...styleBasedSegmentFormats,\n ...elementBasedSegmentFormats,\n 'textColorOnTableCell',\n ],\n tableCell: [\n 'border',\n 'backgroundColor',\n 'padding',\n 'verticalAlign',\n 'wordBreak',\n 'textColor',\n 'htmlAlign',\n 'size',\n ],\n tableRow: ['backgroundColor'],\n table: [\n 'id',\n 'border',\n 'backgroundColor',\n 'display',\n 'htmlAlign',\n 'margin',\n 'size',\n 'tableLayout',\n ],\n tableBorder: ['borderBox', 'tableSpacing'],\n tableCellBorder: ['borderBox'],\n image: ['id', 'size', 'margin', 'padding', 'borderBox', 'border', 'boxShadow', 'display'],\n link: [\n 'link',\n 'textColor',\n 'underline',\n 'display',\n 'margin',\n 'padding',\n 'backgroundColor',\n 'border',\n 'size',\n 'textAlign',\n ],\n segmentUnderLink: ['textColor'],\n code: ['fontFamily', 'display'],\n dataset: ['dataset'],\n divider: [...sharedBlockFormats, ...sharedContainerFormats, 'display', 'size', 'htmlAlign'],\n container: [...sharedContainerFormats, 'htmlAlign', 'size', 'display'],\n};\n\n/**\n * @internal\n */\nexport const defaultFormatParsers: FormatParsers = getObjectKeys(defaultFormatHandlerMap).reduce(\n (result, key) => {\n result[key] = defaultFormatHandlerMap[key].parse as FormatParser;\n return result;\n },\n {}\n);\n\n/**\n * @internal\n */\nexport const defaultFormatAppliers: FormatAppliers = getObjectKeys(defaultFormatHandlerMap).reduce(\n (result, key) => {\n result[key] = defaultFormatHandlerMap[key].apply as FormatApplier;\n return result;\n },\n {}\n);\n\n/**\n * @internal\n */\nexport function getFormatParsers(\n override: Partial = {},\n additionalParsers: Partial = {}\n): FormatParsersPerCategory {\n return getObjectKeys(defaultFormatKeysPerCategory).reduce((result, key) => {\n const value = defaultFormatKeysPerCategory[key]\n .map(\n formatKey =>\n (override[formatKey] === undefined\n ? defaultFormatParsers[formatKey]\n : override[formatKey]) as FormatParser\n )\n .concat((additionalParsers[key] as FormatParser[]) || []);\n\n result[key] = value;\n\n return result;\n }, {} as FormatParsersPerCategory);\n}\n\n/**\n * @internal\n */\nexport function getFormatAppliers(\n override: Partial = {},\n additionalAppliers: Partial = {}\n): FormatAppliersPerCategory {\n return getObjectKeys(defaultFormatKeysPerCategory).reduce((result, key) => {\n const value = defaultFormatKeysPerCategory[key]\n .map(\n formatKey =>\n (override[formatKey] === undefined\n ? defaultFormatAppliers[formatKey]\n : override[formatKey]) as FormatApplier\n )\n .concat((additionalAppliers[key] as FormatApplier[]) || []);\n\n result[key] = value;\n\n return result;\n }, {} as FormatAppliersPerCategory);\n}\n","import { FormatHandler } from '../FormatHandler';\nimport { getObjectKeys, getTagOfNode } from 'roosterjs-editor-dom';\nimport { isNodeOfType } from '../../domUtils/isNodeOfType';\nimport { ListMetadataFormat } from 'roosterjs-content-model-types';\nimport { NodeType } from 'roosterjs-editor-types';\nimport { OrderedMap, UnorderedMap } from './listLevelMetadataFormatHandler';\n\nconst OrderedMapPlaceholderRegex = /\\$\\{(\\w+)\\}/;\nconst DefaultOrderedListStyles = ['decimal', 'lower-alpha', 'lower-roman'];\nconst DefaultUnorderedListStyles = ['disc', 'circle', 'square'];\nconst CharCodeOfA = 65;\nconst RomanValues: Record = {\n M: 1000,\n CM: 900,\n D: 500,\n CD: 400,\n C: 100,\n XC: 90,\n L: 50,\n XL: 40,\n X: 10,\n IX: 9,\n V: 5,\n IV: 4,\n I: 1,\n};\n\n/**\n * @internal\n */\nexport const listItemMetadataFormatHandler: FormatHandler = {\n parse: () => {\n // TODO: Handle list style override\n },\n apply: (format, element, context) => {\n const parent = element.parentNode;\n const depth = context.listFormat.nodeStack.length - 2; // Minus two for the parent element and convert length to index\n\n if (depth >= 0 && isNodeOfType(parent, NodeType.Element) && !parent.style.listStyleType) {\n const parentTag = getTagOfNode(parent);\n const style =\n parentTag == 'OL'\n ? getOrderedListStyleValue(\n OrderedMap[format.orderedStyleType!],\n context.listFormat.threadItemCounts[depth]\n ) ?? DefaultOrderedListStyles[depth % DefaultOrderedListStyles.length]\n : UnorderedMap[format.unorderedStyleType!] ??\n DefaultUnorderedListStyles[depth % DefaultUnorderedListStyles.length];\n\n if (style && (depth > 0 || (style != 'decimal' && style != 'disc'))) {\n element.style.listStyleType = style;\n }\n }\n },\n};\n\n/**\n * @internal\n * Export for test only\n */\nexport function getOrderedListStyleValue(\n template: string | undefined,\n listNumber: number\n): string | undefined {\n return template\n ? template.replace(OrderedMapPlaceholderRegex, (match, subStr) => {\n switch (subStr) {\n case 'Number':\n return listNumber + '';\n case 'LowerAlpha':\n return convertDecimalsToAlpha(listNumber, true /*isLowerCase*/);\n case 'UpperAlpha':\n return convertDecimalsToAlpha(listNumber, false /*isLowerCase*/);\n case 'LowerRoman':\n return convertDecimalsToRoman(listNumber, true /*isLowerCase*/);\n case 'UpperRoman':\n return convertDecimalsToRoman(listNumber, false /*isLowerCase*/);\n }\n\n return '';\n })\n : undefined;\n}\n\nfunction convertDecimalsToAlpha(decimal: number, isLowerCase?: boolean): string {\n let alpha = '';\n decimal--;\n\n while (decimal >= 0) {\n alpha = String.fromCharCode((decimal % 26) + CharCodeOfA) + alpha;\n decimal = Math.floor(decimal / 26) - 1;\n }\n return isLowerCase ? alpha.toLowerCase() : alpha;\n}\n\nfunction convertDecimalsToRoman(decimal: number, isLowerCase?: boolean) {\n let romanValue = '';\n for (let i of getObjectKeys(RomanValues)) {\n let timesRomanCharAppear = Math.floor(decimal / RomanValues[i]);\n decimal = decimal - timesRomanCharAppear * RomanValues[i];\n romanValue = romanValue + i.repeat(timesRomanCharAppear);\n }\n return isLowerCase ? romanValue.toLocaleLowerCase() : romanValue;\n}\n","import { FormatHandler } from '../FormatHandler';\nimport { ListThreadFormat } from 'roosterjs-content-model-types';\nimport { safeInstanceOf } from 'roosterjs-editor-dom';\n\n/**\n * @internal\n */\nexport const listItemThreadFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyles) => {\n const { listFormat } = context;\n const depth = listFormat.levels.length;\n const display = element.style.display || defaultStyles.display;\n\n if (display && display != 'list-item') {\n format.displayForDummyItem = display;\n } else if (isLiUnderOl(element) && depth > 0) {\n listFormat.threadItemCounts[depth - 1]++;\n listFormat.threadItemCounts.splice(depth);\n listFormat.levels.forEach(level => {\n // Delete restart number so next list item doesn't need to have this value.\n // Then it will be treated as a continuous list item to the previous one\n delete level.startNumberOverride;\n });\n }\n },\n apply: (format, element, context) => {\n if (format.displayForDummyItem) {\n element.style.display = format.displayForDummyItem;\n } else if (isLiUnderOl(element)) {\n const { listFormat } = context;\n const { threadItemCounts } = listFormat;\n const index = listFormat.nodeStack.length - 2; // The first one is always the parent of list, then minus another 1 to convert length to index\n\n if (index >= 0) {\n threadItemCounts.splice(index + 1);\n threadItemCounts[index] = (threadItemCounts[index] ?? 0) + 1;\n }\n }\n },\n};\n\nfunction isLiUnderOl(element: HTMLElement) {\n return (\n safeInstanceOf(element, 'HTMLLIElement') &&\n safeInstanceOf(element.parentNode, 'HTMLOListElement')\n );\n}\n","import { BulletListType, NumberingListType } from 'roosterjs-editor-types';\nimport { FormatHandler } from '../FormatHandler';\nimport { getObjectKeys, getTagOfNode, safeInstanceOf } from 'roosterjs-editor-dom';\nimport { ListMetadataFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const OrderedMap: Record = {\n [NumberingListType.Decimal]: 'decimal',\n [NumberingListType.DecimalDash]: '\"${Number}- \"',\n [NumberingListType.DecimalParenthesis]: '\"${Number}) \"',\n [NumberingListType.DecimalDoubleParenthesis]: '\"(${Number}) \"',\n [NumberingListType.LowerAlpha]: 'lower-alpha',\n [NumberingListType.LowerAlphaDash]: '\"${LowerAlpha}- \"',\n [NumberingListType.LowerAlphaParenthesis]: '\"${LowerAlpha}) \"',\n [NumberingListType.LowerAlphaDoubleParenthesis]: '\"(${LowerAlpha}) \"',\n [NumberingListType.UpperAlpha]: 'upper-alpha',\n [NumberingListType.UpperAlphaDash]: '\"${UpperAlpha}- \"',\n [NumberingListType.UpperAlphaParenthesis]: '\"${UpperAlpha}) \"',\n [NumberingListType.UpperAlphaDoubleParenthesis]: '\"(${UpperAlpha}) \"',\n [NumberingListType.LowerRoman]: 'lower-roman',\n [NumberingListType.LowerRomanDash]: '\"${LowerRoman}- \"',\n [NumberingListType.LowerRomanParenthesis]: '\"${LowerRoman}) \"',\n [NumberingListType.LowerRomanDoubleParenthesis]: '\"(${LowerRoman}) \"',\n [NumberingListType.UpperRoman]: 'upper-roman',\n [NumberingListType.UpperRomanDash]: '\"${UpperRoman}- \"',\n [NumberingListType.UpperRomanParenthesis]: '\"${UpperRoman}) \"',\n [NumberingListType.UpperRomanDoubleParenthesis]: '\"(${UpperRoman}) \"',\n};\n\n/**\n * @internal\n */\nexport const UnorderedMap: Record = {\n [BulletListType.Disc]: 'disc',\n [BulletListType.Square]: '\"∎ \"',\n [BulletListType.Circle]: 'circle',\n [BulletListType.Dash]: '\"- \"',\n [BulletListType.LongArrow]: '\"➔ \"',\n [BulletListType.DoubleLongArrow]: '\"➔ \"',\n [BulletListType.ShortArrow]: '\"➢ \"',\n [BulletListType.UnfilledArrow]: '\"➪ \"',\n [BulletListType.Hyphen]: '\"— \"',\n};\n\nconst OLTypeToStyleMap: Record = {\n '1': 'decimal',\n a: 'lower-alpha',\n A: 'upper-alpha',\n i: 'lower-roman',\n I: 'upper-roman',\n};\n\n/**\n * @internal\n */\nexport const listLevelMetadataFormatHandler: FormatHandler = {\n parse: (format, element) => {\n const listStyle =\n element.style.listStyleType ||\n (safeInstanceOf(element, 'HTMLOListElement') && OLTypeToStyleMap[element.type]);\n const tag = getTagOfNode(element);\n\n if (listStyle) {\n if (tag == 'OL' && format.orderedStyleType === undefined) {\n const value = getKeyFromValue(OrderedMap, listStyle);\n format.orderedStyleType =\n typeof value === 'undefined' ? undefined : parseInt(value);\n } else if (tag == 'UL' && format.unorderedStyleType === undefined) {\n const value = getKeyFromValue(UnorderedMap, listStyle);\n format.unorderedStyleType =\n typeof value === 'undefined' ? undefined : parseInt(value);\n }\n }\n },\n apply: (format, element) => {\n const tag = getTagOfNode(element);\n const listType =\n tag == 'OL'\n ? OrderedMap[format.orderedStyleType!]\n : UnorderedMap[format.unorderedStyleType!];\n\n if (listType && listType.indexOf('\"') < 0) {\n element.style.listStyleType = listType;\n }\n },\n};\n\nfunction getKeyFromValue(\n map: Record,\n value: V | undefined\n): string | undefined {\n const result =\n value === undefined ? undefined : getObjectKeys(map).filter(key => map[key] == value)[0];\n\n // During run time the key is always string\n return (result as any) as string | undefined;\n}\n","import { FormatHandler } from '../FormatHandler';\nimport { ListThreadFormat } from 'roosterjs-content-model-types';\nimport { safeInstanceOf } from 'roosterjs-editor-dom';\n\n/**\n * @internal\n */\nexport const listLevelThreadFormatHandler: FormatHandler = {\n parse: (format, element, context) => {\n if (safeInstanceOf(element, 'HTMLOListElement')) {\n const { listFormat } = context;\n const { threadItemCounts, levels } = listFormat;\n const depth = levels.length;\n\n if (\n typeof threadItemCounts[depth] === 'number' &&\n element.start != threadItemCounts[depth] + 1\n ) {\n format.startNumberOverride = element.start;\n }\n\n threadItemCounts[depth] = element.start - 1;\n }\n },\n apply: (format, element, context) => {\n const {\n listFormat: { threadItemCounts, nodeStack },\n } = context;\n const depth = nodeStack.length - 1; // The first one is always the parent of list\n\n if (depth >= 0 && safeInstanceOf(element, 'HTMLOListElement')) {\n const startNumber = format.startNumberOverride;\n\n if (typeof startNumber === 'number') {\n threadItemCounts[depth] = startNumber - 1;\n } else if (typeof threadItemCounts[depth] != 'number') {\n threadItemCounts[depth] = 0;\n }\n\n threadItemCounts.splice(depth + 1);\n element.start = threadItemCounts[depth] + 1;\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { ListStylePositionFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const listStylePositionFormatHandler: FormatHandler = {\n parse: (format, element) => {\n const listStylePosition = element.style.listStylePosition;\n\n if (listStylePosition) {\n format.listStylePosition = listStylePosition;\n }\n },\n apply: (format, element) => {\n if (format.listStylePosition) {\n element.style.listStylePosition = format.listStylePosition;\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { getTagOfNode } from 'roosterjs-editor-dom';\nimport { ListTypeFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const listTypeFormatHandler: FormatHandler = {\n parse: (format, element) => {\n const tag = getTagOfNode(element);\n\n if (tag == 'OL' || tag == 'UL') {\n format.listType = tag;\n }\n },\n apply: () => {},\n};\n","import { DirectionFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n */\nexport const rootDirectionFormatHandler: FormatHandler = {\n parse: (format, element) => {\n const style = element.ownerDocument.defaultView?.getComputedStyle(element);\n\n if (style?.direction == 'rtl') {\n format.direction = 'rtl';\n }\n },\n apply: () => {},\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { ZoomScaleFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const zoomScaleFormatHandler: FormatHandler = {\n parse: (format, element) => {\n const originalWidth = element.getBoundingClientRect().width;\n const visualWidth = element.offsetWidth;\n\n format.zoomScale =\n visualWidth > 0 && originalWidth > 0\n ? Math.round((originalWidth / visualWidth) * 100) / 100\n : 1;\n },\n apply: () => {},\n};\n","import { BoldFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\nimport { moveChildNodes } from 'roosterjs-editor-dom';\n\n/**\n * @internal\n */\nexport const boldFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const fontWeight = element.style.fontWeight || defaultStyle.fontWeight;\n\n if (fontWeight) {\n format.fontWeight = fontWeight;\n }\n },\n apply: (format, element, context) => {\n if (typeof format.fontWeight === 'undefined') {\n return;\n }\n\n const blockFontWeight = context.implicitFormat.fontWeight;\n\n if (\n (blockFontWeight && blockFontWeight != format.fontWeight) ||\n (!blockFontWeight && format.fontWeight && format.fontWeight != 'normal')\n ) {\n if (format.fontWeight == 'bold') {\n const b = element.ownerDocument.createElement('b');\n moveChildNodes(b, element);\n element.appendChild(b);\n } else {\n element.style.fontWeight = format.fontWeight || 'normal';\n }\n }\n },\n};\n","import { FontFamilyFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n */\nexport const fontFamilyFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const fontFamily = element.style.fontFamily || defaultStyle.fontFamily;\n\n if (fontFamily && fontFamily != 'inherit') {\n format.fontFamily = fontFamily;\n }\n },\n apply: (format, element, context) => {\n if (format.fontFamily && format.fontFamily != context.implicitFormat.fontFamily) {\n element.style.fontFamily = format.fontFamily;\n }\n },\n};\n","import { FontSizeFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\nimport { isSuperOrSubScript } from './superOrSubScriptFormatHandler';\n\n/**\n * @internal\n */\nexport const fontSizeFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const fontSize = element.style.fontSize || defaultStyle.fontSize;\n const verticalAlign = element.style.verticalAlign || defaultStyle.verticalAlign;\n\n // when font size is 'smaller' and the style is for superscript/subscript,\n // the font size will be handled by superOrSubScript handler\n if (fontSize && !isSuperOrSubScript(fontSize, verticalAlign) && fontSize != 'inherit') {\n format.fontSize = fontSize;\n }\n },\n apply: (format, element, context) => {\n if (format.fontSize && format.fontSize != context.implicitFormat.fontSize) {\n element.style.fontSize = format.fontSize;\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { ItalicFormat } from 'roosterjs-content-model-types';\nimport { moveChildNodes } from 'roosterjs-editor-dom';\n\n/**\n * @internal\n */\nexport const italicFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const fontStyle = element.style.fontStyle || defaultStyle.fontStyle;\n\n if (fontStyle == 'italic' || fontStyle == 'oblique') {\n format.italic = true;\n } else if (fontStyle == 'initial' || fontStyle == 'normal') {\n format.italic = false;\n }\n },\n apply: (format, element, context) => {\n if (typeof format.italic === 'undefined') {\n return;\n }\n\n const implicitItalic = context.implicitFormat.italic;\n\n if (!!implicitItalic != !!format.italic) {\n if (format.italic) {\n const i = element.ownerDocument.createElement('i');\n moveChildNodes(i, element);\n element.appendChild(i);\n } else {\n element.style.fontStyle = 'normal';\n }\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { LetterSpacingFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const letterSpacingFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const letterSpacing = element.style.letterSpacing || defaultStyle.letterSpacing;\n\n if (letterSpacing) {\n format.letterSpacing = letterSpacing;\n }\n },\n apply: (format, element, context) => {\n if (format.letterSpacing) {\n element.style.letterSpacing = format.letterSpacing;\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { LinkFormat } from 'roosterjs-content-model-types';\nimport { safeInstanceOf } from 'roosterjs-editor-dom';\n\n/**\n * @internal\n */\nexport const linkFormatHandler: FormatHandler = {\n parse: (format, element) => {\n if (safeInstanceOf(element, 'HTMLAnchorElement')) {\n const name = element.name;\n const href = element.getAttribute('href'); // Use getAttribute to get original HREF but not the resolved absolute url\n const target = element.target;\n const rel = element.rel;\n const id = element.id;\n const className = element.className;\n const title = element.title;\n\n if (name) {\n format.name = name;\n }\n\n if (href) {\n format.href = href;\n }\n\n if (target) {\n format.target = target;\n }\n\n if (id) {\n format.anchorId = id;\n }\n\n if (rel) {\n format.relationship = rel;\n }\n\n if (title) {\n format.anchorTitle = title;\n }\n\n if (className) {\n format.anchorClass = className;\n }\n }\n },\n apply: (format, element) => {\n if (safeInstanceOf(element, 'HTMLAnchorElement') && format.href) {\n element.href = format.href;\n\n if (format.name) {\n element.name = format.name;\n }\n\n if (format.target) {\n element.target = format.target;\n }\n\n if (format.anchorId) {\n element.id = format.anchorId;\n }\n\n if (format.anchorClass) {\n element.className = format.anchorClass;\n }\n\n if (format.anchorTitle) {\n element.title = format.anchorTitle;\n }\n\n if (format.relationship) {\n element.rel = format.relationship;\n }\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { moveChildNodes } from 'roosterjs-editor-dom';\nimport { StrikeFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const strikeFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const textDecoration = element.style.textDecoration || defaultStyle.textDecoration;\n\n if (textDecoration?.indexOf('line-through')! >= 0) {\n format.strikethrough = true;\n }\n },\n apply: (format, element) => {\n if (format.strikethrough) {\n const strike = element.ownerDocument.createElement('s');\n moveChildNodes(strike, element);\n element.appendChild(strike);\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { moveChildNodes } from 'roosterjs-editor-dom';\nimport { SuperOrSubScriptFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const superOrSubScriptFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const verticalAlign = element.style.verticalAlign || defaultStyle.verticalAlign;\n const fontSize = element.style.fontSize || defaultStyle.fontSize;\n\n if (isSuperOrSubScript(fontSize, verticalAlign)) {\n format.superOrSubScriptSequence = (format.superOrSubScriptSequence || '')\n .split(' ')\n .concat(verticalAlign)\n .join(' ')\n .trim();\n }\n },\n apply: (format, element) => {\n if (format.superOrSubScriptSequence) {\n format.superOrSubScriptSequence\n .split(' ')\n .reverse()\n .forEach(value => {\n const tagName = value == 'super' ? 'sup' : value == 'sub' ? 'sub' : null;\n\n if (tagName) {\n const wrapper = element.ownerDocument.createElement(tagName);\n moveChildNodes(wrapper, element);\n element.appendChild(wrapper);\n }\n });\n }\n },\n};\n\n/**\n * @internal\n */\nexport function isSuperOrSubScript(\n fontSize: string | undefined,\n verticalAlign: string | undefined\n): verticalAlign is 'sub' | 'super' {\n return fontSize == 'smaller' && (verticalAlign == 'sub' || verticalAlign == 'super');\n}\n","import { FormatHandler } from '../FormatHandler';\nimport { getColor, setColor } from '../utils/color';\nimport { TextColorFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const textColorFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const textColor =\n getColor(\n element,\n false /*isBackground*/,\n context.darkColorHandler,\n context.isDarkMode\n ) || defaultStyle.color;\n\n if (textColor && textColor != 'inherit') {\n format.textColor = textColor;\n }\n },\n apply: (format, element, context) => {\n const implicitColor = context.implicitFormat.textColor;\n\n if (format.textColor && format.textColor != implicitColor) {\n setColor(\n element,\n format.textColor,\n false /*isBackground*/,\n context.darkColorHandler,\n context.isDarkMode\n );\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { moveChildNodes } from 'roosterjs-editor-dom';\nimport { UnderlineFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const underlineFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const textDecoration = element.style.textDecoration || defaultStyle.textDecoration;\n\n if (textDecoration?.indexOf('underline')! >= 0) {\n format.underline = true;\n } else if (element.tagName == 'A' && textDecoration == 'none') {\n format.underline = false;\n }\n },\n apply: (format, element, context) => {\n if (typeof format.underline === 'undefined') {\n return;\n }\n\n const blockUnderline = context.implicitFormat.underline;\n\n if (!!blockUnderline != !!format.underline) {\n if (format.underline) {\n const u = element.ownerDocument.createElement('u');\n moveChildNodes(u, element);\n element.appendChild(u);\n } else {\n element.style.textDecoration = 'none';\n }\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { TableLayoutFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const tableLayoutFormatHandler: FormatHandler = {\n parse: (format, element) => {\n const tableLayout = element.style.tableLayout;\n if (tableLayout && tableLayout != 'inherit') {\n format.tableLayout = tableLayout;\n }\n },\n apply: (format, element) => {\n if (format.tableLayout) {\n element.style.tableLayout = format.tableLayout;\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { SpacingFormat } from 'roosterjs-content-model-types';\n\nconst BorderCollapsed = 'collapse';\n\n/**\n * @internal\n */\nexport const tableSpacingFormatHandler: FormatHandler = {\n parse: (format, element) => {\n if (element.style.borderCollapse == BorderCollapsed) {\n format.borderCollapse = true;\n }\n },\n apply: (format, element) => {\n if (format.borderCollapse) {\n element.style.borderCollapse = BorderCollapsed;\n element.style.borderSpacing = '0';\n element.style.boxSizing = 'border-box';\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { TextColorFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const textColorOnTableCellFormatHandler: FormatHandler = {\n parse: (format, element) => {\n if (element.style.color) {\n // Delete color from format since text color on TD/TH will be handled by separate code\n // and text color on segment format context need to be reset so that it will not inherit\n // value outer container\n delete format.textColor;\n }\n },\n apply: () => {},\n};\n","import { DarkColorHandler } from 'roosterjs-editor-types';\nimport { getTagOfNode } from 'roosterjs-editor-dom';\n\n/**\n * @internal\n */\nexport function getColor(\n element: HTMLElement,\n isBackground: boolean,\n darkColorHandler: DarkColorHandler | undefined | null,\n isDarkMode: boolean\n): string | undefined {\n let color: string | undefined;\n\n if (!color) {\n color =\n (darkColorHandler &&\n tryGetFontColor(element, isDarkMode, darkColorHandler, isBackground)) ||\n (isBackground ? element.style.backgroundColor : element.style.color) ||\n element.getAttribute(isBackground ? 'bgcolor' : 'color') ||\n undefined;\n }\n\n if (darkColorHandler) {\n color = darkColorHandler.parseColorValue(color).lightModeColor;\n }\n\n return color;\n}\n\n/**\n * @internal\n */\nexport function setColor(\n element: HTMLElement,\n lightModeColor: string,\n isBackground: boolean,\n darkColorHandler: DarkColorHandler | undefined | null,\n isDarkMode: boolean\n) {\n const effectiveColor = darkColorHandler\n ? darkColorHandler.registerColor(lightModeColor, isDarkMode)\n : lightModeColor;\n\n if (isBackground) {\n element.style.backgroundColor = effectiveColor;\n } else {\n element.style.color = effectiveColor;\n }\n}\n\n/**\n * There is a known issue that when input with IME in Chrome, it is possible Chrome insert a new FONT tag with colors.\n * If editor is in dark mode, this color will cause the FONT tag doesn't have light mode color info so that after convert\n * to light mode the color will be wrong.\n * To workaround it, we check if this is a known color (for light mode with VariableBasedDarkColor enabled, all used colors\n * are stored in darkColorHandler), then use the related light mode color instead.\n */\nfunction tryGetFontColor(\n element: HTMLElement,\n isDarkMode: boolean,\n darkColorHandler: DarkColorHandler,\n isBackground: boolean\n) {\n let darkColor: string | null;\n\n return getTagOfNode(element) == 'FONT' &&\n !element.style.getPropertyValue(isBackground ? 'background-color' : 'color') &&\n isDarkMode &&\n (darkColor = element.getAttribute(isBackground ? 'bgcolor' : 'color'))\n ? darkColorHandler.findLightColorFromDarkColor(darkColor)\n : null;\n}\n","import { DefaultImplicitFormatMap, DefaultStyleMap } from 'roosterjs-content-model-types';\n\nconst blockElement: Partial = {\n display: 'block',\n};\n\n/**\n * @internal\n */\nexport const defaultStyleMap: DefaultStyleMap = {\n address: blockElement,\n article: blockElement,\n aside: blockElement,\n b: {\n fontWeight: 'bold',\n },\n blockquote: {\n display: 'block',\n marginTop: '1em',\n marginBottom: '1em',\n marginLeft: '40px',\n marginRight: '40px',\n },\n br: blockElement,\n center: {\n display: 'block',\n textAlign: 'center',\n },\n dd: blockElement,\n div: blockElement,\n dl: blockElement,\n dt: blockElement,\n em: {\n fontStyle: 'italic',\n },\n fieldset: blockElement,\n figcaption: blockElement,\n figure: blockElement,\n footer: blockElement,\n form: blockElement,\n h1: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '2em',\n },\n h2: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '1.5em',\n },\n h3: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '1.17em',\n },\n h4: {\n display: 'block',\n fontWeight: 'bold',\n },\n h5: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '0.83em',\n },\n h6: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '0.67em',\n },\n header: blockElement,\n hr: blockElement,\n i: {\n fontStyle: 'italic',\n },\n li: {\n display: 'list-item',\n },\n main: blockElement,\n nav: blockElement,\n ol: blockElement,\n p: {\n display: 'block',\n marginTop: '1em',\n marginBottom: '1em',\n },\n pre: {\n display: 'block',\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n marginTop: '1em',\n marginBottom: '1em',\n },\n s: {\n textDecoration: 'line-through',\n },\n section: blockElement,\n strike: {\n textDecoration: 'line-through',\n },\n strong: {\n fontWeight: 'bold',\n },\n sub: {\n verticalAlign: 'sub',\n fontSize: 'smaller',\n },\n sup: {\n verticalAlign: 'super',\n fontSize: 'smaller',\n },\n table: {\n display: 'table',\n boxSizing: 'border-box',\n },\n td: {\n display: 'table-cell',\n },\n th: {\n display: 'table-cell',\n },\n u: {\n textDecoration: 'underline',\n },\n ul: blockElement,\n};\n\n/**\n * @internal\n */\nexport const enum PseudoTagNames {\n childOfPre = 'pre *', // This value is not a CSS selector, it just to tell this will impact elements under PRE tag. Any unique value here can work actually\n}\n\n/**\n * A map from tag name to its default implicit formats\n */\nexport const defaultImplicitFormatMap: DefaultImplicitFormatMap = {\n a: {\n underline: true,\n },\n blockquote: {\n marginTop: '1em',\n marginBottom: '1em',\n marginLeft: '40px',\n marginRight: '40px',\n },\n code: {\n fontFamily: 'monospace',\n },\n h1: {\n fontWeight: 'bold',\n fontSize: '2em',\n },\n h2: {\n fontWeight: 'bold',\n fontSize: '1.5em',\n },\n h3: {\n fontWeight: 'bold',\n fontSize: '1.17em',\n },\n h4: {\n fontWeight: 'bold',\n fontSize: '1em', // Set this default value here to overwrite existing font size when change header level\n },\n h5: {\n fontWeight: 'bold',\n fontSize: '0.83em',\n },\n h6: {\n fontWeight: 'bold',\n fontSize: '0.67em',\n },\n p: {\n marginTop: '1em',\n marginBottom: '1em',\n },\n pre: {\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n marginTop: '1em',\n marginBottom: '1em',\n },\n\n // For PRE tag, the following styles will be included from the PRE tag.\n // Adding this implicit style here so no need to generate these style for child elements\n [PseudoTagNames.childOfPre]: {\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n },\n};\n","/**\n * @internal\n */\nexport const ResultMap = {\n start: {\n ltr: 'left',\n rtl: 'right',\n },\n center: {\n ltr: 'center',\n rtl: 'center',\n },\n end: {\n ltr: 'right',\n rtl: 'left',\n },\n initial: {\n ltr: 'initial',\n rtl: 'initial',\n },\n justify: {\n ltr: 'justify',\n rtl: 'justify',\n },\n};\n\n/**\n * @internal\n */\nexport function calcAlign(align: string, dir?: 'ltr' | 'rtl') {\n switch (align) {\n case 'center':\n return 'center';\n\n case 'left':\n return dir == 'rtl' ? 'end' : 'start';\n\n case 'right':\n return dir == 'rtl' ? 'start' : 'end';\n\n case 'start':\n case 'end':\n return align;\n\n case 'justify':\n case 'initial':\n return align;\n\n default:\n return undefined;\n }\n}\n","import { getComputedStyle } from 'roosterjs-editor-dom';\n\nconst MarginValueRegex = /(-?\\d+(\\.\\d+)?)([a-z]+|%)/;\n\n/**\n * Parse unit value with its unit\n * @param value The source value to parse\n * @param element The source element which has this unit value.\n * @param resultUnit Unit for result, can be px or pt. @default px\n */\nexport function parseValueWithUnit(\n value: string = '',\n element?: HTMLElement,\n resultUnit: 'px' | 'pt' = 'px'\n): number {\n const match = MarginValueRegex.exec(value);\n let result = 0;\n\n if (match) {\n const [_, numStr, __, unit] = match;\n const num = parseFloat(numStr);\n\n switch (unit) {\n case 'px':\n result = num;\n break;\n case 'pt':\n result = ptToPx(num);\n break;\n case 'em':\n result = element ? getFontSize(element) * num : 0;\n break;\n case 'ex':\n result = element ? (getFontSize(element) * num) / 2 : 0;\n break;\n case '%':\n result = element ? (element.offsetWidth * num) / 100 : 0;\n break;\n default:\n // TODO: Support more unit if need\n break;\n }\n }\n\n if (result > 0 && resultUnit == 'pt') {\n result = pxToPt(result);\n }\n\n return result;\n}\n\nfunction getFontSize(element: HTMLElement) {\n const styleInPt = getComputedStyle(element, 'font-size');\n const floatInPt = parseFloat(styleInPt);\n const floatInPx = ptToPx(floatInPt);\n\n return floatInPx;\n}\n\nfunction ptToPx(pt: number): number {\n return Math.round((pt * 4000) / 3) / 1000;\n}\n\nfunction pxToPt(px: number) {\n return Math.round((px * 3000) / 4) / 1000;\n}\n","export { domToContentModel } from './domToModel/domToContentModel';\nexport { contentModelToDom } from './modelToDom/contentModelToDom';\n\nexport {\n childProcessor,\n handleRegularSelection,\n processChildNode,\n} from './domToModel/processors/childProcessor';\nexport { entityProcessor } from './domToModel/processors/entityProcessor';\nexport { tableProcessor } from './domToModel/processors/tableProcessor';\nexport { getRegularSelectionOffsets } from './domToModel/utils/getRegularSelectionOffsets';\nexport { parseFormat } from './domToModel/utils/parseFormat';\nexport { areSameFormats } from './domToModel/utils/areSameFormats';\n\nexport { updateMetadata, hasMetadata } from './domUtils/metadata/updateMetadata';\nexport { isNodeOfType, NodeTypeMap } from './domUtils/isNodeOfType';\n\nexport { createBr } from './modelApi/creators/createBr';\nexport { createListItem } from './modelApi/creators/createListItem';\nexport { createFormatContainer } from './modelApi/creators/createFormatContainer';\nexport { createParagraph } from './modelApi/creators/createParagraph';\nexport { createSelectionMarker } from './modelApi/creators/createSelectionMarker';\nexport { createTable } from './modelApi/creators/createTable';\nexport { createTableCell } from './modelApi/creators/createTableCell';\nexport { createText } from './modelApi/creators/createText';\nexport { createImage } from './modelApi/creators/createImage';\nexport { createContentModelDocument } from './modelApi/creators/createContentModelDocument';\nexport { createParagraphDecorator } from './modelApi/creators/createParagraphDecorator';\nexport { createGeneralSegment } from './modelApi/creators/createGeneralSegment';\nexport { createGeneralBlock } from './modelApi/creators/createGeneralBlock';\nexport { createEntity } from './modelApi/creators/createEntity';\nexport { createDivider } from './modelApi/creators/createDivider';\n\nexport { addBlock } from './modelApi/common/addBlock';\nexport { addCode } from './modelApi/common/addDecorators';\nexport { addLink } from './modelApi/common/addDecorators';\nexport { normalizeContentModel } from './modelApi/common/normalizeContentModel';\nexport { isGeneralSegment } from './modelApi/common/isGeneralSegment';\nexport { unwrapBlock } from './modelApi/common/unwrapBlock';\nexport { addSegment } from './modelApi/common/addSegment';\nexport { isWhiteSpacePreserved } from './modelApi/common/isWhiteSpacePreserved';\nexport { normalizeSingleSegment } from './modelApi/common/normalizeSegment';\n\nexport { setParagraphNotImplicit } from './modelApi/block/setParagraphNotImplicit';\n\nexport { parseValueWithUnit } from './formatHandlers/utils/parseValueWithUnit';\nexport { BorderKeys } from './formatHandlers/common/borderFormatHandler';\nexport { defaultImplicitFormatMap } from './formatHandlers/utils/defaultStyles';\n\nexport { isPunctuation, isSpace, normalizeText } from './domUtils/stringUtil';\n\nexport { createDomToModelContext } from './domToModel/context/createDomToModelContext';\n","import { ContentModelBlock } from 'roosterjs-content-model-types';\n\n/**\n * For a given block, if it is a paragraph, set it to be not-implicit\n * @param block The block to check\n */\nexport function setParagraphNotImplicit(block: ContentModelBlock) {\n if (block.blockType == 'Paragraph' && block.isImplicit) {\n block.isImplicit = false;\n }\n}\n","import type { ContentModelBlock, ContentModelBlockGroup } from 'roosterjs-content-model-types';\n\n/**\n * Add a given block to block group\n * @param group The block group to add block into\n * @param block The block to add\n */\nexport function addBlock(group: ContentModelBlockGroup, block: ContentModelBlock) {\n group.blocks.push(block);\n}\n","import {\n ContentModelCode,\n ContentModelLink,\n ContentModelSegment,\n DomToModelDecoratorContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function addLink(segment: ContentModelSegment, link: ContentModelLink) {\n if (link.format.href) {\n segment.link = {\n format: { ...link.format },\n dataset: { ...link.dataset },\n };\n }\n}\n\n/**\n * Add a code decorator into segment if any\n * @param segment The segment to add decorator to\n * @param code The code decorator to add\n */\nexport function addCode(segment: ContentModelSegment, code: ContentModelCode) {\n if (code.format.fontFamily) {\n segment.code = {\n format: { ...code.format },\n };\n }\n}\n\n/**\n * @internal\n */\nexport function addDecorators(segment: ContentModelSegment, context: DomToModelDecoratorContext) {\n addLink(segment, context.link);\n addCode(segment, context.code);\n}\n","import { addBlock } from './addBlock';\nimport { createParagraph } from '../creators/createParagraph';\nimport type {\n ContentModelBlockFormat,\n ContentModelBlockGroup,\n ContentModelParagraph,\n ContentModelSegment,\n} from 'roosterjs-content-model-types';\n\n/**\n * Add a given segment into a paragraph from its parent group. If the last block of the given group is not paragraph, create a new paragraph.\n * @param group The parent block group of the paragraph to add segment into\n * @param newSegment The segment to add\n * @param blockFormat The block format used for creating a new paragraph when need\n */\nexport function addSegment(\n group: ContentModelBlockGroup,\n newSegment: ContentModelSegment,\n blockFormat?: ContentModelBlockFormat\n) {\n const lastBlock = group.blocks[group.blocks.length - 1];\n let paragraph: ContentModelParagraph;\n\n if (lastBlock?.blockType == 'Paragraph') {\n paragraph = lastBlock;\n } else {\n paragraph = createParagraph(true, blockFormat);\n addBlock(group, paragraph);\n }\n\n const lastSegment = paragraph.segments[paragraph.segments.length - 1];\n\n if (newSegment.segmentType == 'SelectionMarker') {\n if (!lastSegment || !lastSegment.isSelected) {\n paragraph.segments.push(newSegment);\n }\n } else {\n if (newSegment.isSelected && lastSegment?.segmentType == 'SelectionMarker') {\n paragraph.segments.pop();\n }\n\n paragraph.segments.push(newSegment);\n }\n}\n","import {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelSegment,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function isBlockEmpty(block: ContentModelBlock): boolean {\n switch (block.blockType) {\n case 'Paragraph':\n return block.segments.length == 0;\n\n case 'Table':\n return block.rows.every(row => row.cells.length == 0);\n\n case 'BlockGroup':\n return isBlockGroupEmpty(block);\n\n case 'Entity':\n return false;\n\n default:\n return false;\n }\n}\n\n/**\n * @internal\n */\nexport function isBlockGroupEmpty(group: ContentModelBlockGroup): boolean {\n switch (group.blockGroupType) {\n case 'FormatContainer':\n // Format Container of DIV is a container for style, so we always treat it as not empty\n return group.tagName == 'div' ? false : group.blocks.every(isBlockEmpty);\n\n case 'ListItem':\n return group.blocks.every(isBlockEmpty);\n\n case 'Document':\n case 'General':\n case 'TableCell':\n return false;\n\n default:\n return true;\n }\n}\n\n/**\n * @internal\n */\nexport function isSegmentEmpty(segment: ContentModelSegment): boolean {\n switch (segment.segmentType) {\n case 'Text':\n return !segment.text;\n\n case 'Image':\n return !segment.src;\n\n default:\n return false;\n }\n}\n\n/**\n * @internal\n */\nexport function isEmpty(\n model: ContentModelBlock | ContentModelBlockGroup | ContentModelSegment\n): boolean {\n if (isBlockGroup(model)) {\n return isBlockGroupEmpty(model);\n } else if (isBlock(model)) {\n return isBlockEmpty(model);\n } else if (isSegment(model)) {\n return isSegmentEmpty(model);\n }\n\n return false;\n}\n\nfunction isSegment(\n model: ContentModelBlock | ContentModelBlockGroup | ContentModelSegment\n): model is ContentModelSegment {\n return typeof (model).segmentType === 'string';\n}\n\nfunction isBlock(\n model: ContentModelBlock | ContentModelBlockGroup | ContentModelSegment\n): model is ContentModelBlock {\n return typeof (model).blockType === 'string';\n}\n\nfunction isBlockGroup(\n model: ContentModelBlock | ContentModelBlockGroup | ContentModelSegment\n): model is ContentModelBlockGroup {\n return typeof (model).blockGroupType === 'string';\n}\n","import { ContentModelBlockGroup, ContentModelGeneralSegment } from 'roosterjs-content-model-types';\n\n/**\n * Check if the given block group is a general segment\n * @param group The group to check\n */\nexport function isGeneralSegment(\n group: ContentModelBlockGroup | ContentModelGeneralSegment\n): group is ContentModelGeneralSegment {\n return (\n group.blockGroupType == 'General' &&\n (group).segmentType == 'General'\n );\n}\n","import { ContentModelParagraph } from 'roosterjs-content-model-types';\n\n// According to https://developer.mozilla.org/en-US/docs/Web/CSS/white-space, these style values will need to preserve white spaces\nconst WHITESPACE_PRE_VALUES = ['pre', 'pre-wrap', 'break-spaces'];\n\n/**\n * Check if we have white-space to be preserved for a given paragraph\n * @param paragraph The paragraph to check\n */\nexport function isWhiteSpacePreserved(paragraph: ContentModelParagraph): boolean {\n return (\n (paragraph.format.whiteSpace &&\n WHITESPACE_PRE_VALUES.indexOf(paragraph.format.whiteSpace) >= 0) ||\n false\n );\n}\n","import { ContentModelBlockGroup } from 'roosterjs-content-model-types';\nimport { isBlockEmpty } from './isEmpty';\nimport { normalizeParagraph } from './normalizeParagraph';\nimport { unwrapBlock } from './unwrapBlock';\n\n/**\n * For a given content model, normalize it to make the model be consistent.\n * This process includes:\n * - For a list item without any list level, unwrap the list item\n * - For a paragraph, make sure it has BR at the end if it is an empty paragraph\n * - For text segments under paragraph, make sure its space values are correct (use nbsp to replace space when necessary)\n * - For an empty block, remove it\n * @param group The root level block group of content model to normalize\n */\nexport function normalizeContentModel(group: ContentModelBlockGroup) {\n for (let i = group.blocks.length - 1; i >= 0; i--) {\n const block = group.blocks[i];\n\n switch (block.blockType) {\n case 'BlockGroup':\n if (block.blockGroupType == 'ListItem' && block.levels.length == 0) {\n i += block.blocks.length;\n unwrapBlock(group, block);\n } else {\n normalizeContentModel(block);\n }\n break;\n case 'Paragraph':\n normalizeParagraph(block);\n break;\n case 'Table':\n for (let r = 0; r < block.rows.length; r++) {\n for (let c = 0; c < block.rows[r].cells.length; c++) {\n if (block.rows[r].cells[c]) {\n normalizeContentModel(block.rows[r].cells[c]);\n }\n }\n }\n break;\n }\n\n if (isBlockEmpty(block)) {\n group.blocks.splice(i, 1);\n }\n }\n}\n","import { ContentModelParagraph } from 'roosterjs-content-model-types';\nimport { createBr } from '../creators/createBr';\nimport { isSegmentEmpty } from './isEmpty';\nimport { isWhiteSpacePreserved } from './isWhiteSpacePreserved';\nimport { normalizeAllSegments } from './normalizeSegment';\n\n/**\n * @internal\n */\nexport function normalizeParagraph(paragraph: ContentModelParagraph) {\n const segments = paragraph.segments;\n\n if (!paragraph.isImplicit && segments.length > 0) {\n const last = segments[segments.length - 1];\n const secondLast = segments[segments.length - 2];\n\n if (\n last.segmentType == 'SelectionMarker' &&\n (!secondLast || secondLast.segmentType == 'Br')\n ) {\n segments.push(createBr(last.format));\n } else if (segments.length > 1 && segments[segments.length - 1].segmentType == 'Br') {\n const noMarkerSegments = segments.filter(x => x.segmentType != 'SelectionMarker');\n\n // When there is content with a
    tag at the end, we can remove the BR.\n // But if there are more than one
    at the end, do not remove them.\n if (\n noMarkerSegments.length > 1 &&\n noMarkerSegments[noMarkerSegments.length - 2].segmentType != 'Br'\n ) {\n segments.pop();\n }\n }\n }\n\n if (!isWhiteSpacePreserved(paragraph)) {\n normalizeAllSegments(paragraph);\n }\n\n removeEmptySegments(paragraph);\n}\n\nfunction removeEmptySegments(block: ContentModelParagraph) {\n for (let j = block.segments.length - 1; j >= 0; j--) {\n if (isSegmentEmpty(block.segments[j])) {\n block.segments.splice(j, 1);\n }\n }\n}\n","import { hasSpacesOnly } from '../../domUtils/stringUtil';\nimport {\n ContentModelParagraph,\n ContentModelSegment,\n ContentModelText,\n} from 'roosterjs-content-model-types';\n\nconst SPACE = '\\u0020';\nconst NONE_BREAK_SPACE = '\\u00A0';\nconst LEADING_SPACE_REGEX = /^\\u0020+/;\nconst TRAILING_SPACE_REGEX = /\\u0020+$/;\n\n/**\n * @internal\n */\nexport function normalizeAllSegments(paragraph: ContentModelParagraph) {\n const context = resetNormalizeSegmentContext();\n\n paragraph.segments.forEach(segment => {\n normalizeSegment(segment, context);\n });\n\n normalizeTextSegments(context.textSegments, context.lastInlineSegment);\n normalizeLastTextSegment(context.lastTextSegment, context.lastInlineSegment);\n}\n\n/**\n * Normalize a given segment, make sure its spaces are correctly represented by space and non-break space\n * @param segment The segment to normalize\n * @param ignoreTrailingSpaces Whether we should ignore the trailing space of the text segment @default false\n */\nexport function normalizeSingleSegment(\n segment: ContentModelSegment,\n ignoreTrailingSpaces: boolean = false\n) {\n const context = resetNormalizeSegmentContext();\n\n context.ignoreTrailingSpaces = ignoreTrailingSpaces;\n normalizeSegment(segment, context);\n}\n\n/**\n * @internal Export for test only\n */\nexport interface NormalizeSegmentContext {\n textSegments: ContentModelText[];\n ignoreLeadingSpaces: boolean;\n ignoreTrailingSpaces: boolean;\n lastTextSegment: ContentModelText | undefined;\n lastInlineSegment: ContentModelSegment | undefined;\n}\n\n/**\n * @internal Export for test only\n */\nexport function createNormalizeSegmentContext(): NormalizeSegmentContext {\n return resetNormalizeSegmentContext();\n}\n\nfunction resetNormalizeSegmentContext(\n context?: Partial\n): NormalizeSegmentContext {\n return Object.assign(context ?? {}, {\n textSegments: [],\n ignoreLeadingSpaces: true,\n ignoreTrailingSpaces: true,\n lastInlineSegment: undefined,\n lastTextSegment: undefined,\n });\n}\n\n/**\n * @internal Export for test only\n */\nexport function normalizeSegment(segment: ContentModelSegment, context: NormalizeSegmentContext) {\n switch (segment.segmentType) {\n case 'Br':\n normalizeTextSegments(context.textSegments, context.lastInlineSegment);\n normalizeLastTextSegment(context.lastTextSegment, context.lastInlineSegment);\n\n // Line ends, reset all states\n resetNormalizeSegmentContext(context);\n break;\n\n case 'Entity':\n case 'General':\n case 'Image':\n // Here \"inline segment\" means a segment showing some content inline such as text, image, or other inline HTML elements\n // BR will end current line, so it is not treated as \"inline\" here.\n // We will do some normalization to the trailing spaces for non-inline-segments\n context.lastInlineSegment = segment;\n context.ignoreLeadingSpaces = false;\n break;\n\n case 'Text':\n context.textSegments.push(segment);\n context.lastInlineSegment = segment;\n context.lastTextSegment = segment;\n\n const first = segment.text.substring(0, 1);\n const last = segment.text.substr(-1);\n\n if (!hasSpacesOnly(segment.text)) {\n if (first == SPACE) {\n // 1. Multiple leading space => single   or empty (depends on if previous segment ends with space)\n segment.text = segment.text.replace(\n LEADING_SPACE_REGEX,\n context.ignoreLeadingSpaces ? '' : NONE_BREAK_SPACE\n );\n }\n\n if (last == SPACE) {\n // 2. Multiple trailing space => single space\n segment.text = segment.text.replace(\n TRAILING_SPACE_REGEX,\n context.ignoreTrailingSpaces ? SPACE : NONE_BREAK_SPACE\n );\n }\n }\n\n context.ignoreLeadingSpaces = last == SPACE;\n\n break;\n }\n}\n\nfunction normalizeTextSegments(\n segments: ContentModelText[],\n lastInlineSegment: ContentModelSegment | undefined\n) {\n segments.forEach(segment => {\n // 3. Segment ends with   replace it with space if the previous char is not space so that next segment can wrap\n // Only do this for segments that is not the last one since the last space will be removed in step 4\n if (segment != lastInlineSegment) {\n const text = segment.text;\n\n if (\n text.substr(-1) == NONE_BREAK_SPACE &&\n text.length > 1 &&\n text.substr(-2, 1) != SPACE\n ) {\n segment.text = text.substring(0, text.length - 1) + SPACE;\n }\n }\n });\n}\n\nfunction normalizeLastTextSegment(\n segment: ContentModelText | undefined,\n lastInlineSegment: ContentModelSegment | undefined\n) {\n if (segment && segment == lastInlineSegment && segment?.text.substr(-1) == SPACE) {\n // 4. last text segment of the paragraph, remove trailing space\n segment.text = segment.text.replace(TRAILING_SPACE_REGEX, '');\n }\n}\n","import { ContentModelBlock, ContentModelBlockGroup } from 'roosterjs-content-model-types';\nimport { setParagraphNotImplicit } from '../block/setParagraphNotImplicit';\n\n/**\n * Unwrap a given block group, move its child blocks to be under its parent group\n * @param parent Parent block group of the unwrapping group\n * @param groupToUnwrap The block group to unwrap\n */\nexport function unwrapBlock(\n parent: ContentModelBlockGroup | null,\n groupToUnwrap: ContentModelBlockGroup & ContentModelBlock\n) {\n const index = parent?.blocks.indexOf(groupToUnwrap) ?? -1;\n\n if (index >= 0) {\n groupToUnwrap.blocks.forEach(setParagraphNotImplicit);\n\n parent?.blocks.splice(index, 1, ...groupToUnwrap.blocks);\n }\n}\n","import { ContentModelBr, ContentModelSegmentFormat } from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelBr model\n * @param format @optional The format of this model\n */\nexport function createBr(format?: ContentModelSegmentFormat): ContentModelBr {\n return {\n segmentType: 'Br',\n format: format ? { ...format } : {},\n };\n}\n","import { ContentModelDocument, ContentModelSegmentFormat } from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelDocument model\n * @param defaultFormat @optional Default format of this model\n */\nexport function createContentModelDocument(\n defaultFormat?: ContentModelSegmentFormat\n): ContentModelDocument {\n const result: ContentModelDocument = {\n blockGroupType: 'Document',\n blocks: [],\n };\n\n if (defaultFormat) {\n result.format = defaultFormat;\n }\n\n return result;\n}\n","import { ContentModelBlockFormat, ContentModelDivider } from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelDivider model\n * @param tagName Tag name of this divider. Currently only hr and div are supported\n * @param format @optional The format of this model\n */\nexport function createDivider(\n tagName: 'hr' | 'div',\n format?: ContentModelBlockFormat\n): ContentModelDivider {\n return {\n blockType: 'Divider',\n tagName,\n format: format ? { ...format } : {},\n };\n}\n","import { ContentModelEntity, ContentModelSegmentFormat } from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelEntity model\n * @param wrapper Wrapper element of this entity\n * @param isReadonly Whether this is a readonly entity\n * @param segmentFormat Segment format of this entity\n * @param id @optional Id of this entity\n * @param type @optional Type of this entity\n */\nexport function createEntity(\n wrapper: HTMLElement,\n isReadonly: boolean,\n segmentFormat?: ContentModelSegmentFormat,\n id?: string,\n type?: string\n): ContentModelEntity {\n return {\n segmentType: 'Entity',\n blockType: 'Entity',\n format: {\n ...(segmentFormat || {}),\n },\n id,\n type,\n isReadonly,\n wrapper,\n };\n}\n","import {\n ContentModelFormatContainer,\n ContentModelFormatContainerFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelFormatContainer model\n * @param tag Tag name of this format container, in lower case\n * @param format @optional The format of this model\n */\nexport function createFormatContainer(\n tag: Lowercase,\n format?: ContentModelFormatContainerFormat\n): ContentModelFormatContainer {\n return {\n blockType: 'BlockGroup',\n blockGroupType: 'FormatContainer',\n tagName: tag,\n blocks: [],\n format: { ...(format || {}) },\n };\n}\n","import { ContentModelGeneralBlock } from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelGeneralBlock model\n * @param element Original element of this model\n */\nexport function createGeneralBlock(element: HTMLElement): ContentModelGeneralBlock {\n return {\n blockType: 'BlockGroup',\n blockGroupType: 'General',\n element: element,\n blocks: [],\n format: {},\n };\n}\n","import {\n ContentModelGeneralSegment,\n ContentModelSegmentFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelGeneralSegment model\n * @param element The original DOM element\n * @param format @optional The format of this model\n */\nexport function createGeneralSegment(\n element: HTMLElement,\n format?: ContentModelSegmentFormat\n): ContentModelGeneralSegment {\n return {\n blockType: 'BlockGroup',\n blockGroupType: 'General',\n segmentType: 'General',\n format: format ? { ...format } : {},\n blocks: [],\n element: element,\n };\n}\n","import { ContentModelImage, ContentModelImageFormat } from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelImage model\n * @param src Image source\n * @param format @optional The format of this model\n */\nexport function createImage(src: string, format?: ContentModelImageFormat): ContentModelImage {\n return {\n segmentType: 'Image',\n src: src,\n format: format ? { ...format } : {},\n dataset: {},\n };\n}\n","import { createSelectionMarker } from './createSelectionMarker';\nimport {\n ContentModelListItem,\n ContentModelListItemLevelFormat,\n ContentModelSegmentFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelListItem model\n * @param levels Existing list levels\n * @param format @optional The format of this model\n */\nexport function createListItem(\n levels: ContentModelListItemLevelFormat[],\n format?: ContentModelSegmentFormat\n): ContentModelListItem {\n return {\n blockType: 'BlockGroup',\n blockGroupType: 'ListItem',\n blocks: [],\n levels: levels ? levels.map(level => ({ ...level })) : [],\n formatHolder: createSelectionMarker(format),\n format: {},\n };\n}\n","import type {\n ContentModelBlockFormat,\n ContentModelParagraph,\n ContentModelParagraphDecorator,\n ContentModelSegmentFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelParagraph model\n * @param isImplicit @optional Whether this is an implicit paragraph. An implicit paragraph is a paragraph that will not render with DOM element container\n * @param blockFormat @optional Format of this paragraph\n * @param segmentFormat @optional Segment format applied to this block\n * @param decorator @optional Decorator of this paragraph\n */\nexport function createParagraph(\n isImplicit?: boolean,\n blockFormat?: ContentModelBlockFormat,\n segmentFormat?: ContentModelSegmentFormat,\n decorator?: ContentModelParagraphDecorator\n): ContentModelParagraph {\n const result: ContentModelParagraph = {\n blockType: 'Paragraph',\n segments: [],\n format: blockFormat ? { ...blockFormat } : {},\n };\n\n if (segmentFormat && Object.keys(segmentFormat).length > 0) {\n result.segmentFormat = { ...segmentFormat };\n }\n\n if (isImplicit) {\n result.isImplicit = true;\n }\n\n if (decorator) {\n result.decorator = {\n tagName: decorator.tagName,\n format: { ...decorator.format },\n };\n }\n\n return result;\n}\n","import {\n ContentModelParagraphDecorator,\n ContentModelSegmentFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelParagraphDecorator model\n * @param tagName Tag name of this decorator\n * @param format @optional The format of this model\n */\nexport function createParagraphDecorator(\n tagName: string,\n format?: ContentModelSegmentFormat\n): ContentModelParagraphDecorator {\n return {\n tagName: tagName.toLocaleLowerCase(),\n format: { ...(format || {}) },\n };\n}\n","import {\n ContentModelSegmentFormat,\n ContentModelSelectionMarker,\n} from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelSelectionMarker model\n * @param format @optional The format of this model\n */\nexport function createSelectionMarker(\n format?: ContentModelSegmentFormat\n): ContentModelSelectionMarker {\n return {\n segmentType: 'SelectionMarker',\n isSelected: true,\n format: format ? { ...format } : {},\n };\n}\n","import {\n ContentModelTable,\n ContentModelTableFormat,\n ContentModelTableRow,\n} from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelTable model\n * @param rowCount Count of rows of this table\n * @param format @optional The format of this model\n */\nexport function createTable(rowCount: number, format?: ContentModelTableFormat): ContentModelTable {\n const rows: ContentModelTableRow[] = [];\n\n for (let i = 0; i < rowCount; i++) {\n rows.push({\n height: 0,\n format: {},\n cells: [],\n });\n }\n\n return {\n blockType: 'Table',\n rows,\n format: { ...(format || {}) },\n widths: [],\n dataset: {},\n };\n}\n","import { ContentModelTableCell, ContentModelTableCellFormat } from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelTableCell model\n * @param spanLeftOrColSpan @optional Whether this is a table cell merged with its left cell, or colspan number @default false\n * @param spanAboveOrRowSpan Whether this is a table cell merged with its upper cell, or rowSpan number @default false\n * @param isHeader @optional Whether this is a header cell @default false\n * @param format @optional The format of this model\n */\nexport function createTableCell(\n spanLeftOrColSpan?: boolean | number,\n spanAboveOrRowSpan?: boolean | number,\n isHeader?: boolean,\n format?: ContentModelTableCellFormat\n): ContentModelTableCell {\n const spanLeft =\n typeof spanLeftOrColSpan === 'number' ? spanLeftOrColSpan > 1 : !!spanLeftOrColSpan;\n const spanAbove =\n typeof spanAboveOrRowSpan === 'number' ? spanAboveOrRowSpan > 1 : !!spanAboveOrRowSpan;\n return {\n blockGroupType: 'TableCell',\n blocks: [],\n format: format ? { ...format } : {},\n spanLeft,\n spanAbove,\n isHeader: !!isHeader,\n dataset: {},\n };\n}\n","import { ContentModelSegmentFormat, ContentModelText } from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelText model\n * @param text Text of this model\n * @param format @optional The format of this model\n */\nexport function createText(text: string, format?: ContentModelSegmentFormat): ContentModelText {\n return {\n segmentType: 'Text',\n text: text,\n format: format ? { ...format } : {},\n };\n}\n","import { createModelToDomContext } from './context/createModelToDomContext';\nimport { createRange, Position, toArray } from 'roosterjs-editor-dom';\nimport { isNodeOfType } from '../domUtils/isNodeOfType';\nimport {\n ContentModelDocument,\n EditorContext,\n ModelToDomBlockAndSegmentNode,\n ModelToDomContext,\n ModelToDomOption,\n} from 'roosterjs-content-model-types';\nimport {\n NodePosition,\n NodeType,\n SelectionRangeEx,\n SelectionRangeTypes,\n} from 'roosterjs-editor-types';\n\n/**\n * Create DOM tree fragment from Content Model document\n * @param doc Document object of the target DOM tree\n * @param root Target node that will become the container of new DOM tree.\n * When a DOM node with existing node is passed, it will be merged with content model so that unchanged blocks\n * won't be touched.\n * @param model The content model document to generate DOM tree from\n * @param editorContext Content for Content Model editor\n * @param option Additional options to customize the behavior of Content Model to DOM conversion\n * @returns A tuple of the following 3 objects:\n * 1. Document Fragment that contains the DOM tree generated from the given model\n * 2. A SelectionRangeEx object that contains selection info from the model if any, or null\n * 3. An array entity DOM wrapper and its placeholder node pair for reusable root level entities.\n */\nexport function contentModelToDom(\n doc: Document,\n root: Node,\n model: ContentModelDocument,\n editorContext: EditorContext,\n option?: ModelToDomOption\n): SelectionRangeEx | null {\n const modelToDomContext = createModelToDomContext(editorContext, option);\n\n modelToDomContext.modelHandlers.blockGroupChildren(doc, root, model, modelToDomContext);\n\n const range = extractSelectionRange(modelToDomContext);\n\n root.normalize();\n\n return range;\n}\n\nfunction extractSelectionRange(context: ModelToDomContext): SelectionRangeEx | null {\n const {\n regularSelection: { start, end },\n tableSelection,\n imageSelection,\n } = context;\n\n let startPosition: NodePosition | undefined;\n let endPosition: NodePosition | undefined;\n\n if (imageSelection?.image) {\n return {\n type: SelectionRangeTypes.ImageSelection,\n ranges: [createRange(imageSelection.image)],\n areAllCollapsed: false,\n image: imageSelection.image,\n };\n } else if (\n (startPosition = start && calcPosition(start)) &&\n (endPosition = end && calcPosition(end))\n ) {\n const range = createRange(startPosition, endPosition);\n\n return {\n type: SelectionRangeTypes.Normal,\n ranges: [createRange(startPosition, endPosition)],\n areAllCollapsed: range.collapsed,\n };\n } else if (tableSelection?.table) {\n return {\n type: SelectionRangeTypes.TableSelection,\n ranges: [],\n areAllCollapsed: false,\n table: tableSelection.table,\n coordinates: {\n firstCell: tableSelection.firstCell,\n lastCell: tableSelection.lastCell,\n },\n };\n } else {\n return null;\n }\n}\n\nfunction calcPosition(pos: ModelToDomBlockAndSegmentNode): NodePosition | undefined {\n let result: NodePosition | undefined;\n\n if (pos.block) {\n if (!pos.segment) {\n result = new Position(pos.block, 0);\n } else if (isNodeOfType(pos.segment, NodeType.Text)) {\n result = new Position(pos.segment, pos.segment.nodeValue?.length || 0);\n } else {\n result = new Position(\n pos.segment.parentNode!,\n toArray(pos.segment.parentNode!.childNodes as NodeListOf).indexOf(\n pos.segment!\n ) + 1\n );\n }\n }\n\n if (isNodeOfType(result?.node, NodeType.DocumentFragment)) {\n result = result?.normalize();\n }\n\n return result;\n}\n","import { defaultContentModelHandlers } from './defaultContentModelHandlers';\nimport { defaultImplicitFormatMap } from '../../formatHandlers/utils/defaultStyles';\nimport { EditorContext, ModelToDomContext, ModelToDomOption } from 'roosterjs-content-model-types';\nimport {\n defaultFormatAppliers,\n getFormatAppliers,\n} from '../../formatHandlers/defaultFormatHandlers';\n\n/**\n * @internal\n * @param editorContext\n * @returns\n */\nexport function createModelToDomContext(\n editorContext?: EditorContext,\n options?: ModelToDomOption\n): ModelToDomContext {\n options = options || {};\n\n return {\n ...(editorContext || {\n isDarkMode: false,\n }),\n regularSelection: {\n current: {\n block: null,\n segment: null,\n },\n },\n listFormat: {\n threadItemCounts: [],\n nodeStack: [],\n },\n implicitFormat: {},\n formatAppliers: getFormatAppliers(\n options.formatApplierOverride,\n options.additionalFormatAppliers\n ),\n modelHandlers: {\n ...defaultContentModelHandlers,\n ...(options.modelHandlerOverride || {}),\n },\n defaultImplicitFormatMap: {\n ...defaultImplicitFormatMap,\n ...(options.defaultImplicitFormatOverride || {}),\n },\n\n defaultModelHandlers: defaultContentModelHandlers,\n defaultFormatAppliers: defaultFormatAppliers,\n onNodeCreated: options.onNodeCreated,\n };\n}\n","import { ContentModelHandlerMap } from 'roosterjs-content-model-types';\nimport { handleBlock } from '../handlers/handleBlock';\nimport { handleBlockGroupChildren } from '../handlers/handleBlockGroupChildren';\nimport { handleBr } from '../handlers/handleBr';\nimport { handleDivider } from '../handlers/handleDivider';\nimport { handleEntity } from '../handlers/handleEntity';\nimport { handleFormatContainer } from '../handlers/handleFormatContainer';\nimport { handleGeneralModel } from '../handlers/handleGeneralModel';\nimport { handleImage } from '../handlers/handleImage';\nimport { handleList } from '../handlers/handleList';\nimport { handleListItem } from '../handlers/handleListItem';\nimport { handleParagraph } from '../handlers/handleParagraph';\nimport { handleSegment } from '../handlers/handleSegment';\nimport { handleSegmentDecorator } from '../handlers/handleSegmentDecorator';\nimport { handleTable } from '../handlers/handleTable';\nimport { handleText } from '../handlers/handleText';\n\n/**\n * @internal\n */\nexport const defaultContentModelHandlers: ContentModelHandlerMap = {\n block: handleBlock,\n blockGroupChildren: handleBlockGroupChildren,\n br: handleBr,\n entity: handleEntity,\n general: handleGeneralModel,\n divider: handleDivider,\n image: handleImage,\n list: handleList,\n listItem: handleListItem,\n paragraph: handleParagraph,\n formatContainer: handleFormatContainer,\n segment: handleSegment,\n segmentDecorator: handleSegmentDecorator,\n table: handleTable,\n text: handleText,\n};\n","import {\n ContentModelBlock,\n ContentModelBlockHandler,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleBlock: ContentModelBlockHandler = (\n doc: Document,\n parent: Node,\n block: ContentModelBlock,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n const handlers = context.modelHandlers;\n\n switch (block.blockType) {\n case 'Table':\n refNode = handlers.table(doc, parent, block, context, refNode);\n break;\n case 'Paragraph':\n refNode = handlers.paragraph(doc, parent, block, context, refNode);\n break;\n case 'Entity':\n refNode = handlers.entity(doc, parent, block, context, refNode);\n break;\n case 'Divider':\n refNode = handlers.divider(doc, parent, block, context, refNode);\n break;\n case 'BlockGroup':\n switch (block.blockGroupType) {\n case 'General':\n refNode = handlers.general(doc, parent, block, context, refNode);\n break;\n\n case 'FormatContainer':\n refNode = handlers.formatContainer(doc, parent, block, context, refNode);\n break;\n\n case 'ListItem':\n refNode = handlers.listItem(doc, parent, block, context, refNode);\n break;\n }\n\n break;\n }\n\n return refNode;\n};\n","import {\n ContentModelBlockGroup,\n ContentModelHandler,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleBlockGroupChildren: ContentModelHandler = (\n doc: Document,\n parent: Node,\n group: ContentModelBlockGroup,\n context: ModelToDomContext\n) => {\n const { listFormat } = context;\n const nodeStack = listFormat.nodeStack;\n let refNode: Node | null = parent.firstChild;\n\n try {\n group.blocks.forEach((childBlock, index) => {\n // When process list, we need a node stack.\n // When there are two continuous lists, they should share the same stack\n // so that list items with same type/threadId can be merged into the same list element\n // In other cases, clear the stack so that two separate lists won't share the same list element\n if (\n index == 0 ||\n childBlock.blockType != 'BlockGroup' ||\n childBlock.blockGroupType != 'ListItem'\n ) {\n listFormat.nodeStack = [];\n }\n\n refNode = context.modelHandlers.block(doc, parent, childBlock, context, refNode);\n });\n\n // Remove all rest node if any since they don't appear in content model\n while (refNode) {\n const next = refNode.nextSibling;\n\n refNode.parentNode?.removeChild(refNode);\n refNode = next;\n }\n } finally {\n listFormat.nodeStack = nodeStack;\n }\n};\n","import { handleSegmentCommon } from '../utils/handleSegmentCommon';\nimport {\n ContentModelBr,\n ContentModelHandler,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleBr: ContentModelHandler = (\n doc: Document,\n parent: Node,\n segment: ContentModelBr,\n context: ModelToDomContext\n) => {\n const br = doc.createElement('br');\n const element = doc.createElement('span');\n element.appendChild(br);\n parent.appendChild(element);\n\n handleSegmentCommon(doc, br, element, segment, context);\n};\n","import { applyFormat } from '../utils/applyFormat';\nimport { reuseCachedElement } from '../utils/reuseCachedElement';\nimport {\n ContentModelBlockHandler,\n ContentModelDivider,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleDivider: ContentModelBlockHandler = (\n doc: Document,\n parent: Node,\n divider: ContentModelDivider,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n let element = divider.cachedElement;\n\n if (element) {\n refNode = reuseCachedElement(parent, element, refNode);\n } else {\n element = doc.createElement(divider.tagName);\n\n divider.cachedElement = element;\n parent.insertBefore(element, refNode);\n\n applyFormat(element, context.formatAppliers.divider, divider.format, context);\n\n if (divider.size) {\n element.setAttribute('size', divider.size);\n }\n }\n\n context.onNodeCreated?.(divider, element);\n\n return refNode;\n};\n","import { applyFormat } from '../utils/applyFormat';\nimport { Entity } from 'roosterjs-editor-types';\nimport { reuseCachedElement } from '../utils/reuseCachedElement';\nimport {\n ContentModelBlockHandler,\n ContentModelEntity,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\nimport {\n addDelimiters,\n commitEntity,\n getObjectKeys,\n isBlockElement,\n wrap,\n} from 'roosterjs-editor-dom';\n\n/**\n * @internal\n */\nexport const handleEntity: ContentModelBlockHandler = (\n doc: Document,\n parent: Node,\n entityModel: ContentModelEntity,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n const { wrapper, id, type, isReadonly, format } = entityModel;\n const entity: Entity | null =\n id && type\n ? {\n wrapper,\n id,\n type,\n isReadonly: !!isReadonly,\n }\n : null;\n const isInlineEntity = !isBlockElement(wrapper);\n\n if (entity) {\n // Commit the entity attributes in case there is any change\n commitEntity(wrapper, entity.type, entity.isReadonly, entity.id);\n }\n\n refNode = reuseCachedElement(parent, wrapper, refNode);\n\n if (isInlineEntity && getObjectKeys(format).length > 0) {\n const span = wrap(wrapper, 'span');\n\n applyFormat(span, context.formatAppliers.segment, format, context);\n }\n\n if (context.addDelimiterForEntity && isInlineEntity && isReadonly) {\n const [after] = addDelimiters(wrapper);\n\n context.regularSelection.current.segment = after;\n }\n\n context.onNodeCreated?.(entityModel, wrapper);\n\n return refNode;\n};\n","import { applyFormat } from '../utils/applyFormat';\nimport { isBlockGroupEmpty } from '../../modelApi/common/isEmpty';\nimport { PseudoTagNames } from '../../formatHandlers/utils/defaultStyles';\nimport { reuseCachedElement } from '../utils/reuseCachedElement';\nimport { stackFormat } from '../utils/stackFormat';\nimport {\n ContentModelBlockHandler,\n ContentModelFormatContainer,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleFormatContainer: ContentModelBlockHandler = (\n doc: Document,\n parent: Node,\n container: ContentModelFormatContainer,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n let element = container.cachedElement;\n\n if (element) {\n refNode = reuseCachedElement(parent, element, refNode);\n\n context.modelHandlers.blockGroupChildren(doc, element, container, context);\n } else if (!isBlockGroupEmpty(container)) {\n const containerNode = doc.createElement(container.tagName);\n\n container.cachedElement = containerNode;\n parent.insertBefore(containerNode, refNode);\n\n stackFormat(context, container.tagName, () => {\n applyFormat(containerNode, context.formatAppliers.container, container.format, context);\n applyFormat(\n containerNode,\n context.formatAppliers.segmentOnBlock,\n container.format,\n context\n );\n\n applyFormat(containerNode, context.formatAppliers.container, container.format, context);\n });\n\n if (container.tagName == 'pre') {\n stackFormat(context, PseudoTagNames.childOfPre, () => {\n context.modelHandlers.blockGroupChildren(doc, containerNode, container, context);\n });\n } else {\n context.modelHandlers.blockGroupChildren(doc, containerNode, container, context);\n }\n\n element = containerNode;\n }\n\n if (element) {\n context.onNodeCreated?.(container, element);\n }\n\n return refNode;\n};\n","import { handleSegmentCommon } from '../utils/handleSegmentCommon';\nimport { isGeneralSegment } from '../../modelApi/common/isGeneralSegment';\nimport { isNodeOfType } from '../../domUtils/isNodeOfType';\nimport { NodeType } from 'roosterjs-editor-types';\nimport { reuseCachedElement } from '../utils/reuseCachedElement';\nimport { wrap } from 'roosterjs-editor-dom';\nimport {\n ContentModelBlockHandler,\n ContentModelGeneralBlock,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleGeneralModel: ContentModelBlockHandler = (\n doc: Document,\n parent: Node,\n group: ContentModelGeneralBlock,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n let node: Node = group.element;\n\n if (refNode && node.parentNode == parent) {\n refNode = reuseCachedElement(parent, node, refNode);\n } else {\n node = node.cloneNode();\n group.element = node as HTMLElement;\n\n parent.insertBefore(node, refNode);\n }\n\n if (isGeneralSegment(group) && isNodeOfType(node, NodeType.Element)) {\n const element = wrap(node, 'span');\n\n handleSegmentCommon(doc, node, element, group, context);\n } else {\n context.onNodeCreated?.(group, node);\n }\n\n context.modelHandlers.blockGroupChildren(doc, node, group, context);\n\n return refNode;\n};\n","import { applyFormat } from '../utils/applyFormat';\nimport { handleSegmentCommon } from '../utils/handleSegmentCommon';\nimport { parseValueWithUnit } from '../../formatHandlers/utils/parseValueWithUnit';\nimport {\n ContentModelHandler,\n ContentModelImage,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleImage: ContentModelHandler = (\n doc: Document,\n parent: Node,\n imageModel: ContentModelImage,\n context: ModelToDomContext\n) => {\n const img = doc.createElement('img');\n const element = document.createElement('span');\n\n parent.appendChild(element);\n element.appendChild(img);\n\n img.src = imageModel.src;\n\n if (imageModel.alt) {\n img.alt = imageModel.alt;\n }\n\n if (imageModel.title) {\n img.title = imageModel.title;\n }\n\n applyFormat(img, context.formatAppliers.image, imageModel.format, context);\n applyFormat(img, context.formatAppliers.dataset, imageModel.dataset, context);\n\n const { width, height } = imageModel.format;\n const widthNum = width ? parseValueWithUnit(width) : 0;\n const heightNum = height ? parseValueWithUnit(height) : 0;\n\n if (widthNum > 0) {\n img.width = widthNum;\n }\n\n if (heightNum > 0) {\n img.height = heightNum;\n }\n\n if (imageModel.isSelectedAsImageSelection) {\n context.imageSelection = {\n image: img,\n };\n }\n\n handleSegmentCommon(doc, img, element, imageModel, context);\n};\n","import { applyFormat } from '../utils/applyFormat';\nimport { updateListMetadata } from '../../domUtils/metadata/updateListMetadata';\nimport {\n ContentModelBlockHandler,\n ContentModelListItem,\n ContentModelListItemLevelFormat,\n DatasetFormat,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleList: ContentModelBlockHandler = (\n doc: Document,\n parent: Node,\n listItem: ContentModelListItem,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n let layer = 0;\n const { nodeStack } = context.listFormat;\n\n if (nodeStack.length == 0) {\n nodeStack.push({\n node: parent,\n });\n }\n\n // Skip existing list levels that has same properties so we can reuse them\n for (; layer < listItem.levels.length && layer + 1 < nodeStack.length; layer++) {\n const stackLevel = nodeStack[layer + 1];\n const itemLevel = listItem.levels[layer];\n\n if (\n stackLevel.listType != itemLevel.listType ||\n stackLevel.orderedStyleType != itemLevel.orderedStyleType ||\n stackLevel.unorderedStyleType != itemLevel.unorderedStyleType ||\n (itemLevel.listType == 'OL' && typeof itemLevel.startNumberOverride === 'number')\n ) {\n break;\n }\n }\n\n // Cut off remained list levels that we can't reuse\n nodeStack.splice(layer + 1);\n\n // Create new list levels that are after reused ones\n for (; layer < listItem.levels.length; layer++) {\n const level = listItem.levels[layer];\n const newList = doc.createElement(level.listType || 'UL');\n const lastParent = nodeStack[nodeStack.length - 1].node;\n\n lastParent.insertBefore(newList, layer == 0 ? refNode : null);\n\n applyFormat(newList, context.formatAppliers.listLevel, level, context);\n\n handleMetadata(level, newList, context);\n\n nodeStack.push({ node: newList, ...level });\n\n context.onNodeCreated?.(level, newList);\n }\n\n return refNode;\n};\n\nfunction handleMetadata(\n level: ContentModelListItemLevelFormat,\n newList: HTMLElement,\n context: ModelToDomContext\n) {\n const dataset: DatasetFormat = {};\n\n updateListMetadata({ dataset }, () =>\n typeof level.orderedStyleType === 'number' || typeof level.unorderedStyleType === 'number'\n ? {\n orderedStyleType: level.orderedStyleType,\n unorderedStyleType: level.unorderedStyleType,\n }\n : null\n );\n applyFormat(newList, context.formatAppliers.dataset, dataset, context);\n}\n","import { applyFormat } from '../utils/applyFormat';\nimport { setParagraphNotImplicit } from '../../modelApi/block/setParagraphNotImplicit';\nimport { unwrap } from 'roosterjs-editor-dom';\nimport {\n ContentModelBlockHandler,\n ContentModelListItem,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleListItem: ContentModelBlockHandler = (\n doc: Document,\n parent: Node,\n listItem: ContentModelListItem,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n refNode = context.modelHandlers.list(doc, parent, listItem, context, refNode);\n\n const { nodeStack } = context.listFormat;\n\n let listParent = nodeStack?.[nodeStack?.length - 1]?.node || parent;\n const li = doc.createElement('li');\n const level = listItem.levels[listItem.levels.length - 1];\n\n // It is possible listParent is the same with parent param.\n // This happens when outdent a list item to cause it has no list level\n listParent.insertBefore(li, refNode?.parentNode == listParent ? refNode : null);\n\n if (level) {\n applyFormat(li, context.formatAppliers.listItemElement, listItem.format, context);\n applyFormat(li, context.formatAppliers.segment, listItem.formatHolder.format, context);\n applyFormat(li, context.formatAppliers.listItem, level, context);\n\n context.modelHandlers.blockGroupChildren(doc, li, listItem, context);\n } else {\n // There is no level for this list item, that means it should be moved out of the list\n // For each paragraph, make it not implicit so it will have a DIV around it, to avoid more paragraphs connected together\n listItem.blocks.forEach(setParagraphNotImplicit);\n\n context.modelHandlers.blockGroupChildren(doc, li, listItem, context);\n\n unwrap(li);\n }\n\n context.onNodeCreated?.(listItem, li);\n\n return refNode;\n};\n","import { applyFormat } from '../utils/applyFormat';\nimport { getObjectKeys, unwrap } from 'roosterjs-editor-dom';\nimport { optimize } from '../optimizers/optimize';\nimport { reuseCachedElement } from '../utils/reuseCachedElement';\nimport { stackFormat } from '../utils/stackFormat';\nimport {\n ContentModelBlockHandler,\n ContentModelParagraph,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\nconst DefaultParagraphTag = 'div';\n\n/**\n * @internal\n */\nexport const handleParagraph: ContentModelBlockHandler = (\n doc: Document,\n parent: Node,\n paragraph: ContentModelParagraph,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n let container = paragraph.cachedElement;\n\n if (container) {\n refNode = reuseCachedElement(parent, container, refNode);\n } else {\n stackFormat(context, paragraph.decorator?.tagName || null, () => {\n const needParagraphWrapper =\n !paragraph.isImplicit ||\n !!paragraph.decorator ||\n (getObjectKeys(paragraph.format).length > 0 &&\n paragraph.segments.some(segment => segment.segmentType != 'SelectionMarker'));\n const formatOnWrapper = needParagraphWrapper\n ? {\n ...(paragraph.decorator?.format || {}),\n ...paragraph.segmentFormat,\n }\n : {};\n\n container = doc.createElement(paragraph.decorator?.tagName || DefaultParagraphTag);\n\n parent.insertBefore(container, refNode);\n\n context.regularSelection.current = {\n block: needParagraphWrapper ? container : container.parentNode,\n segment: null,\n };\n\n const handleSegments = () => {\n const parent = container;\n\n if (parent) {\n const firstSegment = paragraph.segments[0];\n\n if (firstSegment?.segmentType == 'SelectionMarker') {\n // Make sure there is a segment created before selection marker.\n // If selection marker is the first selected segment in a paragraph, create a dummy text node,\n // so after rewrite, the regularSelection object can have a valid segment object set to the text node.\n context.modelHandlers.text(\n doc,\n parent,\n {\n ...firstSegment,\n segmentType: 'Text',\n text: '',\n },\n context\n );\n }\n\n paragraph.segments.forEach(segment => {\n context.modelHandlers.segment(doc, parent, segment, context);\n });\n }\n };\n\n if (needParagraphWrapper) {\n stackFormat(context, formatOnWrapper, handleSegments);\n\n applyFormat(container, context.formatAppliers.block, paragraph.format, context);\n applyFormat(container, context.formatAppliers.container, paragraph.format, context);\n applyFormat(\n container,\n context.formatAppliers.segmentOnBlock,\n formatOnWrapper,\n context\n );\n } else {\n handleSegments();\n }\n\n optimize(container);\n\n // It is possible the next sibling node is changed during processing child segments\n // e.g. When this paragraph is an implicit paragraph and it contains an inline entity segment\n // The segment will be appended to container as child then the container will be removed\n // since this paragraph it is implicit. In that case container.nextSibling will become original\n // inline entity's next sibling. So reset refNode to its real next sibling (after change) here\n // to make sure the value is correct.\n refNode = container.nextSibling;\n\n if (needParagraphWrapper) {\n paragraph.cachedElement = container;\n } else {\n unwrap(container);\n }\n });\n }\n\n if (container) {\n context.onNodeCreated?.(paragraph, container);\n }\n\n return refNode;\n};\n","import {\n ContentModelHandler,\n ContentModelSegment,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleSegment: ContentModelHandler = (\n doc: Document,\n parent: Node,\n segment: ContentModelSegment,\n context: ModelToDomContext\n) => {\n const regularSelection = context.regularSelection;\n\n // If start position is not set yet, and current segment is in selection, set start position\n if (segment.isSelected && !regularSelection.start) {\n regularSelection.start = {\n ...regularSelection.current,\n };\n }\n\n switch (segment.segmentType) {\n case 'Text':\n context.modelHandlers.text(doc, parent, segment, context);\n break;\n\n case 'Br':\n context.modelHandlers.br(doc, parent, segment, context);\n break;\n\n case 'Image':\n context.modelHandlers.image(doc, parent, segment, context);\n break;\n\n case 'General':\n context.modelHandlers.general(doc, parent, segment, context, null /*refNode*/);\n break;\n\n case 'Entity':\n context.modelHandlers.entity(doc, parent, segment, context, null /*refNode*/);\n break;\n }\n\n // If end position is not set, or it is not finalized, and current segment is still in selection, set end position\n // If there is other selection, we will overwrite regularSelection.end when we process that segment\n if (segment.isSelected && regularSelection.start) {\n regularSelection.end = {\n ...regularSelection.current,\n };\n }\n};\n","import { applyFormat } from '../utils/applyFormat';\nimport { ContentModelHandler, ContentModelSegment } from 'roosterjs-content-model-types';\nimport { moveChildNodes } from 'roosterjs-editor-dom';\nimport { stackFormat } from '../utils/stackFormat';\n\n/**\n * @internal\n */\nexport const handleSegmentDecorator: ContentModelHandler = (\n doc,\n parent,\n segment,\n context\n) => {\n const { code, link } = segment;\n\n if (link) {\n stackFormat(context, 'a', () => {\n const a = document.createElement('a');\n\n moveChildNodes(a, parent);\n parent.appendChild(a);\n\n applyFormat(a, context.formatAppliers.link, link.format, context);\n applyFormat(a, context.formatAppliers.dataset, link.dataset, context);\n\n context.onNodeCreated?.(link, a);\n });\n }\n\n if (code) {\n stackFormat(context, 'code', () => {\n const codeNode = document.createElement('code');\n\n moveChildNodes(codeNode, parent);\n parent.appendChild(codeNode);\n\n applyFormat(codeNode, context.formatAppliers.code, code.format, context);\n\n context.onNodeCreated?.(code, codeNode);\n });\n }\n};\n","import { applyFormat } from '../utils/applyFormat';\nimport { hasMetadata } from '../../domUtils/metadata/updateMetadata';\nimport { isBlockEmpty } from '../../modelApi/common/isEmpty';\nimport { moveChildNodes } from 'roosterjs-editor-dom';\nimport { reuseCachedElement } from '../utils/reuseCachedElement';\nimport {\n ContentModelBlockHandler,\n ContentModelTable,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleTable: ContentModelBlockHandler = (\n doc: Document,\n parent: Node,\n table: ContentModelTable,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n if (isBlockEmpty(table)) {\n // Empty table, do not create TABLE element and just return\n return refNode;\n }\n\n let tableNode = table.cachedElement;\n\n if (tableNode) {\n refNode = reuseCachedElement(parent, tableNode, refNode);\n\n moveChildNodes(tableNode);\n } else {\n tableNode = doc.createElement('table');\n\n table.cachedElement = tableNode;\n parent.insertBefore(tableNode, refNode);\n\n applyFormat(tableNode, context.formatAppliers.block, table.format, context);\n applyFormat(tableNode, context.formatAppliers.table, table.format, context);\n applyFormat(tableNode, context.formatAppliers.tableBorder, table.format, context);\n applyFormat(tableNode, context.formatAppliers.dataset, table.dataset, context);\n }\n\n context.onNodeCreated?.(table, tableNode);\n\n const tbody = doc.createElement('tbody');\n tableNode.appendChild(tbody);\n\n for (let row = 0; row < table.rows.length; row++) {\n const tableRow = table.rows[row];\n\n if (tableRow.cells.length == 0) {\n // Skip empty row\n continue;\n }\n\n const tr = tableRow.cachedElement || doc.createElement('tr');\n tbody.appendChild(tr);\n moveChildNodes(tr);\n\n if (!tableRow.cachedElement) {\n tableRow.cachedElement = tr;\n applyFormat(tr, context.formatAppliers.tableRow, tableRow.format, context);\n }\n\n context.onNodeCreated?.(tableRow, tr);\n\n for (let col = 0; col < tableRow.cells.length; col++) {\n const cell = tableRow.cells[col];\n\n if (cell.isSelected) {\n context.tableSelection = context.tableSelection || {\n table: tableNode,\n firstCell: { x: col, y: row },\n lastCell: { x: col, y: row },\n };\n\n if (context.tableSelection.table == tableNode) {\n const lastCell = context.tableSelection.lastCell;\n\n lastCell.x = Math.max(lastCell.x, col);\n lastCell.y = Math.max(lastCell.y, row);\n }\n }\n\n if (!cell.spanAbove && !cell.spanLeft) {\n let td = cell.cachedElement || doc.createElement(cell.isHeader ? 'th' : 'td');\n\n tr.appendChild(td);\n\n let rowSpan = 1;\n let colSpan = 1;\n let width = table.widths[col];\n let height = tableRow.height;\n\n for (; table.rows[row + rowSpan]?.cells[col]?.spanAbove; rowSpan++) {\n height += table.rows[row + rowSpan].height;\n }\n for (; tableRow.cells[col + colSpan]?.spanLeft; colSpan++) {\n width += table.widths[col + colSpan];\n }\n\n if (rowSpan > 1) {\n td.rowSpan = rowSpan;\n }\n\n if (colSpan > 1) {\n td.colSpan = colSpan;\n }\n\n if (!cell.cachedElement || (cell.format.useBorderBox && hasMetadata(table))) {\n if (width > 0) {\n td.style.width = width + 'px';\n }\n\n if (height > 0) {\n td.style.height = height + 'px';\n }\n }\n\n if (!cell.cachedElement) {\n cell.cachedElement = td;\n applyFormat(td, context.formatAppliers.block, cell.format, context);\n applyFormat(td, context.formatAppliers.tableCell, cell.format, context);\n applyFormat(td, context.formatAppliers.tableCellBorder, cell.format, context);\n applyFormat(td, context.formatAppliers.dataset, cell.dataset, context);\n }\n\n context.modelHandlers.blockGroupChildren(doc, td, cell, context);\n\n context.onNodeCreated?.(cell, td);\n }\n }\n }\n\n return refNode;\n};\n","import { handleSegmentCommon } from '../utils/handleSegmentCommon';\nimport {\n ContentModelHandler,\n ContentModelText,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleText: ContentModelHandler = (\n doc: Document,\n parent: Node,\n segment: ContentModelText,\n context: ModelToDomContext\n) => {\n const txt = doc.createTextNode(segment.text);\n const element = doc.createElement('span');\n\n parent.appendChild(element);\n element.appendChild(txt);\n\n handleSegmentCommon(doc, txt, element, segment, context);\n};\n","import { isNodeOfType } from '../../domUtils/isNodeOfType';\nimport { NodeType } from 'roosterjs-editor-types';\n\nconst OptimizeTags = ['SPAN', 'B', 'EM', 'I', 'U', 'SUB', 'SUP', 'STRIKE', 'S', 'A', 'CODE'];\n\n/**\n * @internal\n */\nexport function mergeNode(root: Node) {\n for (let child = root.firstChild; child; ) {\n const next = child.nextSibling;\n\n if (\n next &&\n isNodeOfType(child, NodeType.Element) &&\n isNodeOfType(next, NodeType.Element) &&\n child.tagName == next.tagName &&\n OptimizeTags.indexOf(child.tagName) >= 0 &&\n hasSameAttributes(child, next)\n ) {\n while (next.firstChild) {\n child.appendChild(next.firstChild);\n }\n\n next.parentNode!.removeChild(next);\n } else {\n child = next;\n }\n }\n}\n\nfunction hasSameAttributes(element1: HTMLElement, element2: HTMLElement) {\n const attr1 = element1.attributes;\n const attr2 = element2.attributes;\n\n if (attr1.length != attr2.length) {\n return false;\n }\n\n for (let i = 0; i < attr1.length; i++) {\n if (attr1[i].name != attr2[i].name || attr1[i].value != attr2[i].value) {\n return false;\n }\n }\n\n return true;\n}\n","import { EntityClasses, NodeType } from 'roosterjs-editor-types';\nimport { isNodeOfType } from '../../domUtils/isNodeOfType';\nimport { mergeNode } from './mergeNode';\nimport { removeUnnecessarySpan } from './removeUnnecessarySpan';\n\n/**\n * @internal\n */\nexport function optimize(root: Node) {\n /**\n * Do no do any optimization to entity\n */\n if (\n isNodeOfType(root, NodeType.Element) &&\n root.classList.contains(EntityClasses.ENTITY_INFO_NAME)\n ) {\n return;\n }\n\n removeUnnecessarySpan(root);\n mergeNode(root);\n\n for (let child = root.firstChild; child; child = child.nextSibling) {\n optimize(child);\n }\n}\n","import { isNodeOfType } from '../../domUtils/isNodeOfType';\nimport { NodeType } from 'roosterjs-editor-types';\n\n/**\n * @internal\n */\nexport function removeUnnecessarySpan(root: Node) {\n for (let child = root.firstChild; child; ) {\n if (\n isNodeOfType(child, NodeType.Element) &&\n child.tagName == 'SPAN' &&\n child.attributes.length == 0\n ) {\n const node = child;\n let refNode = child.nextSibling;\n child = child.nextSibling;\n\n while (node.lastChild) {\n const newNode = node.lastChild;\n root.insertBefore(newNode, refNode);\n refNode = newNode;\n }\n\n root.removeChild(node);\n } else {\n child = child.nextSibling;\n }\n }\n}\n","import {\n ContentModelFormatBase,\n FormatApplier,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Apply formats to the given HTML element using specified appliers\n * @param element The element to apply formats to\n * @param appliers The appliers we are using to apply formats\n * @param format The format object we get format info from\n * @param context Content Model to DOM context\n */\nexport function applyFormat(\n element: HTMLElement,\n appliers: (FormatApplier | null)[],\n format: T,\n context: ModelToDomContext\n) {\n appliers.forEach(applier => {\n applier?.(format, element, context);\n });\n}\n","import { applyFormat } from './applyFormat';\nimport { ContentModelSegment, ModelToDomContext } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function handleSegmentCommon(\n doc: Document,\n segmentNode: Node,\n containerNode: HTMLElement,\n segment: ContentModelSegment,\n context: ModelToDomContext\n) {\n if (!segmentNode.firstChild) {\n context.regularSelection.current.segment = segmentNode;\n }\n\n applyFormat(containerNode, context.formatAppliers.styleBasedSegment, segment.format, context);\n\n context.modelHandlers.segmentDecorator(doc, containerNode, segment, context);\n\n applyFormat(containerNode, context.formatAppliers.elementBasedSegment, segment.format, context);\n\n context.onNodeCreated?.(segment, segmentNode);\n}\n","import { getEntityFromElement } from 'roosterjs-editor-dom';\nimport { isNodeOfType } from '../../domUtils/isNodeOfType';\nimport { NodeType } from 'roosterjs-editor-types';\n\n/**\n * @internal\n */\nexport function reuseCachedElement(parent: Node, element: Node, refNode: Node | null): Node | null {\n if (element.parentNode == parent) {\n // Remove nodes before the one we are hitting since they don't appear in Content Model at this position.\n // But we don't want to touch entity since it would better to keep entity at its place unless it is removed\n // In that case we will remove it after we have handled all other nodes\n while (refNode && refNode != element && !isEntity(refNode)) {\n const next = refNode.nextSibling;\n\n refNode.parentNode?.removeChild(refNode);\n refNode = next;\n }\n\n if (refNode && refNode == element) {\n refNode = refNode.nextSibling;\n } else {\n parent.insertBefore(element, refNode);\n }\n } else {\n parent.insertBefore(element, refNode);\n }\n\n return refNode;\n}\n\n/**\n * @internal\n */\nexport function removeNode(node: Node): Node | null {\n const next = node.nextSibling;\n node.parentNode?.removeChild(node);\n\n return next;\n}\n\nfunction isEntity(node: Node) {\n return isNodeOfType(node, NodeType.Element) && !!getEntityFromElement(node);\n}\n","import {\n ContentModelBlockFormat,\n ContentModelSegmentFormat,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function stackFormat(\n context: ModelToDomContext,\n tagNameOrFormat: string | (ContentModelSegmentFormat & ContentModelBlockFormat) | null,\n callback: () => void\n) {\n const newFormat =\n typeof tagNameOrFormat === 'string'\n ? context.defaultImplicitFormatMap[tagNameOrFormat]\n : tagNameOrFormat;\n\n if (newFormat) {\n const implicitFormat = context.implicitFormat;\n\n try {\n context.implicitFormat = {\n ...implicitFormat,\n ...newFormat,\n };\n\n callback();\n } finally {\n context.implicitFormat = implicitFormat;\n }\n } else {\n callback();\n }\n}\n","import { contains, getTagOfNode } from 'roosterjs-editor-dom';\nimport { ContentModelBlockGroup, DomToModelContext } from 'roosterjs-content-model-types';\nimport {\n getRegularSelectionOffsets,\n handleRegularSelection,\n processChildNode,\n} from 'roosterjs-content-model-dom';\n\n/**\n * @internal\n */\nexport interface FormatStateContext extends DomToModelContext {\n /**\n * An optional stack of parent elements to process. When provided, the child nodes of current parent element will be ignored,\n * but use the top element in this stack instead in childProcessor.\n */\n nodeStack?: Node[];\n}\n\n/**\n * @internal\n * In order to get format, we can still use the regular child processor. However, to improve performance, we don't need to create\n * content model for the whole doc, instead we only need to traverse the tree path that can arrive current selected node.\n * This \"reduced\" child processor will first create a node stack that stores DOM node from root to current common ancestor node of selection,\n * then use this stack as a faked DOM tree to create a reduced content model which we can use to retrieve format state\n */\nexport function reducedModelChildProcessor(\n group: ContentModelBlockGroup,\n parent: ParentNode,\n context: FormatStateContext\n) {\n if (context.selectionRootNode) {\n if (!context.nodeStack) {\n context.nodeStack = createNodeStack(parent, context.selectionRootNode);\n }\n\n const stackChild = context.nodeStack.pop();\n\n if (stackChild) {\n const [nodeStartOffset, nodeEndOffset] = getRegularSelectionOffsets(context, parent);\n\n // If selection is not on this node, skip getting node index to save some time since we don't need it here\n const index =\n nodeStartOffset >= 0 || nodeEndOffset >= 0 ? getChildIndex(parent, stackChild) : -1;\n\n if (index >= 0) {\n handleRegularSelection(index, context, group, nodeStartOffset, nodeEndOffset);\n }\n\n processChildNode(group, stackChild, context);\n\n if (index >= 0) {\n handleRegularSelection(index + 1, context, group, nodeStartOffset, nodeEndOffset);\n }\n } else {\n // No child node from node stack, that means we have reached the deepest node of selection.\n // Now we can use default child processor to perform full sub tree scanning for content model,\n // So that all selected node will be included.\n context.defaultElementProcessors.child(group, parent, context);\n }\n }\n}\n\nfunction createNodeStack(root: Node, startNode: Node): Node[] {\n const result: Node[] = [];\n let node: Node | null = startNode;\n\n while (node && contains(root, node)) {\n if (getTagOfNode(node) == 'TABLE') {\n // For table, we can't do a reduced model creation since we need to handle their cells and indexes,\n // so clean up whatever we already have, and just put table into the stack\n result.splice(0, result.length, node);\n } else {\n result.push(node);\n }\n\n node = node.parentNode;\n }\n\n return result;\n}\n\nfunction getChildIndex(parent: ParentNode, stackChild: Node) {\n let index = 0;\n let child = parent.firstChild;\n\n while (child && child != stackChild) {\n index++;\n child = child.nextSibling;\n }\n return index;\n}\n","import { contains } from 'roosterjs-editor-dom';\nimport { DomToModelContext, ElementProcessor } from 'roosterjs-content-model-types';\nimport { entityProcessor, hasMetadata, tableProcessor } from 'roosterjs-content-model-dom';\n\n/**\n * @internal\n */\nexport const tablePreProcessor: ElementProcessor = (group, element, context) => {\n const processor = shouldUseTableProcessor(element, context) ? tableProcessor : entityProcessor;\n\n processor(group, element, context);\n};\n\nfunction shouldUseTableProcessor(element: HTMLTableElement, context: DomToModelContext) {\n // Treat table as a real table when:\n // 1. It is a roosterjs table (has metadata)\n // 2. Table is in selection\n // 3. There is selection inside table (or whole table is selected)\n // Otherwise, we treat the table as entity so we will not change it when write back\n return hasMetadata(element) || context.isInSelection || hasSelectionInTable(element, context);\n}\n\nfunction hasSelectionInTable(element: HTMLTableElement, context: DomToModelContext) {\n const selectedNodes = [\n context.imageSelection?.image,\n context.tableSelection?.table,\n context.regularSelection?.startContainer,\n context.regularSelection?.endContainer,\n ];\n\n return selectedNodes.some(n => contains(element, n, true /*treatSameNodeAsContain*/));\n}\n","import { Border } from '../publicTypes/interface/Border';\n\nconst BorderStyles = [\n 'none',\n 'hidden',\n 'dotted',\n 'dashed',\n 'solid',\n 'double',\n 'groove',\n 'ridge',\n 'inset',\n 'outset',\n];\nconst BorderSizeRegex = /^(thin|medium|thick|[\\d\\.]+\\w*)$/;\n\n/**\n * Extract an integrated border string with border width, style, color to value tuple\n * @param combinedBorder The integrated border style string\n * @returns An array with the splitted values\n */\nexport function extractBorderValues(combinedBorder?: string): Border {\n const result: Border = {};\n const values = (combinedBorder || '').replace(/, /g, ',').split(' ');\n\n values.forEach(v => {\n if (BorderStyles.indexOf(v) >= 0 && !result.style) {\n result.style = v;\n } else if (BorderSizeRegex.test(v) && !result.width) {\n result.width = v;\n } else if (v && !result.color) {\n result.color = v; // TODO: Do we need to use a regex to match all possible colors?\n }\n });\n\n return result;\n}\n\n/**\n * Combine border value array back to string\n * @param values Input string values\n * @param initialValue Initial value for those items without valid value\n */\nexport function combineBorderValue(value: Border): string {\n return [value.width || '', value.style || '', value.color || ''].join(' ').trim() || 'none';\n}\n","import { ContentModelImage, ImageMetadataFormat } from 'roosterjs-content-model-types';\nimport { updateMetadata } from 'roosterjs-content-model-dom';\nimport {\n createNumberDefinition,\n createObjectDefinition,\n createStringDefinition,\n} from 'roosterjs-editor-dom';\n\nconst NumberDefinition = createNumberDefinition();\n\nconst ImageMetadataFormatDefinition = createObjectDefinition>({\n widthPx: NumberDefinition,\n heightPx: NumberDefinition,\n leftPercent: NumberDefinition,\n rightPercent: NumberDefinition,\n topPercent: NumberDefinition,\n bottomPercent: NumberDefinition,\n angleRad: NumberDefinition,\n src: createStringDefinition(),\n naturalHeight: NumberDefinition,\n naturalWidth: NumberDefinition,\n});\n\n/**\n * Update image metadata with a callback\n * @param image The image Content Model\n * @param callback The callback function used for updating metadata\n */\nexport function updateImageMetadata(\n image: ContentModelImage,\n callback?: (format: ImageMetadataFormat | null) => ImageMetadataFormat | null\n): ImageMetadataFormat | null {\n return updateMetadata(image, callback, ImageMetadataFormatDefinition);\n}\n","import { ContentModelTableCell } from 'roosterjs-content-model-types';\nimport { createBooleanDefinition, createObjectDefinition } from 'roosterjs-editor-dom';\nimport { TableCellMetadataFormat } from 'roosterjs-editor-types';\nimport { updateMetadata } from 'roosterjs-content-model-dom';\n\nconst TableCellMetadataFormatDefinition = createObjectDefinition>(\n {\n bgColorOverride: createBooleanDefinition(true /** isOptional */),\n },\n false /* isOptional */,\n true /** allowNull */\n);\n\n/**\n * Update table cell metadata with a callback\n * @param cell The table cell Content Model\n * @param callback The callback function used for updating metadata\n */\nexport function updateTableCellMetadata(\n cell: ContentModelTableCell,\n callback?: (format: TableCellMetadataFormat | null) => TableCellMetadataFormat | null\n): TableCellMetadataFormat | null {\n return updateMetadata(cell, callback, TableCellMetadataFormatDefinition);\n}\n","import { ContentModelTable, TableMetadataFormat } from 'roosterjs-content-model-types';\nimport { TableBorderFormat } from 'roosterjs-editor-types';\nimport { updateMetadata } from 'roosterjs-content-model-dom';\nimport {\n createBooleanDefinition,\n createNumberDefinition,\n createObjectDefinition,\n createStringDefinition,\n} from 'roosterjs-editor-dom';\n\nconst NullStringDefinition = createStringDefinition(\n false /** isOptional */,\n undefined /** value */,\n true /** allowNull */\n);\n\nconst BooleanDefinition = createBooleanDefinition(false /** isOptional */);\n\nconst TableFormatDefinition = createObjectDefinition>(\n {\n topBorderColor: NullStringDefinition,\n bottomBorderColor: NullStringDefinition,\n verticalBorderColor: NullStringDefinition,\n hasHeaderRow: BooleanDefinition,\n headerRowColor: NullStringDefinition,\n hasFirstColumn: BooleanDefinition,\n hasBandedColumns: BooleanDefinition,\n hasBandedRows: BooleanDefinition,\n bgColorEven: NullStringDefinition,\n bgColorOdd: NullStringDefinition,\n tableBorderFormat: createNumberDefinition(\n false /** isOptional */,\n undefined /* value */,\n TableBorderFormat.DEFAULT /* first table border format, TODO: Use Min/Max to specify valid values */,\n TableBorderFormat.CLEAR /* last table border format, , TODO: Use Min/Max to specify valid values */\n ),\n },\n false /* isOptional */,\n true /** allowNull */\n);\n\n/**\n * Update table metadata with a callback\n * @param table The table Content Model\n * @param callback The callback function used for updating metadata\n */\nexport function updateTableMetadata(\n table: ContentModelTable,\n callback?: (format: TableMetadataFormat | null) => TableMetadataFormat | null\n): TableMetadataFormat | null {\n return updateMetadata(table, callback, TableFormatDefinition);\n}\n","import {\n ContentModelDocument,\n ContentModelSegmentFormat,\n DomToModelOption,\n ModelToDomOption,\n} from 'roosterjs-content-model-types';\nimport { ContentModelEditorCore } from '../publicTypes/ContentModelEditorCore';\nimport { ContentModelEditorOptions, IContentModelEditor } from '../publicTypes/IContentModelEditor';\nimport { createContentModelEditorCore } from './createContentModelEditorCore';\nimport { EditorBase } from 'roosterjs-editor-core';\n\n/**\n * Editor for Content Model.\n * (This class is still under development, and may still be changed in the future with some breaking changes)\n */\nexport default class ContentModelEditor\n extends EditorBase\n implements IContentModelEditor {\n /**\n * Creates an instance of Editor\n * @param contentDiv The DIV HTML element which will be the container element of editor\n * @param options An optional options object to customize the editor\n */\n constructor(contentDiv: HTMLDivElement, options: ContentModelEditorOptions = {}) {\n super(contentDiv, options, createContentModelEditorCore);\n }\n\n /**\n * Create Content Model from DOM tree in this editor\n * @param option The option to customize the behavior of DOM to Content Model conversion\n */\n createContentModel(option?: DomToModelOption): ContentModelDocument {\n const core = this.getCore();\n\n return core.api.createContentModel(core, option);\n }\n\n /**\n * Set content with content model\n * @param model The content model to set\n * @param option Additional options to customize the behavior of Content Model to DOM conversion\n */\n setContentModel(model: ContentModelDocument, option?: ModelToDomOption) {\n const core = this.getCore();\n\n core.api.setContentModel(core, model, option);\n }\n\n /**\n * Cache a content model object. Next time when format with content model, we can reuse it.\n * @param model\n */\n cacheContentModel(model: ContentModelDocument | null) {\n const core = this.getCore();\n\n if (core.reuseModel && !core.lifecycle.shadowEditFragment) {\n core.cachedModel = model || undefined;\n }\n }\n\n /**\n * Get default format as ContentModelSegmentFormat.\n * This is a replacement of IEditor.getDefaultFormat for Content Model.\n * @returns The default format\n */\n getContentModelDefaultFormat(): ContentModelSegmentFormat {\n const core = this.getCore();\n\n return core.defaultFormat;\n }\n}\n","import { cloneModel } from '../../modelApi/common/cloneModel';\nimport { domToContentModel } from 'roosterjs-content-model-dom';\nimport { DomToModelOption } from 'roosterjs-content-model-types';\nimport { tablePreProcessor } from '../../domToModel/processors/tablePreProcessor';\nimport {\n ContentModelEditorCore,\n CreateContentModel,\n} from '../../publicTypes/ContentModelEditorCore';\n\n/**\n * @internal\n * Create Content Model from DOM tree in this editor\n * @param option The option to customize the behavior of DOM to Content Model conversion\n */\nexport const createContentModel: CreateContentModel = (core, option) => {\n let cachedModel = core.reuseModel ? core.cachedModel : null;\n\n if (cachedModel && core.lifecycle.shadowEditFragment) {\n // When in shadow edit, use a cloned model so we won't pollute the cached one\n cachedModel = cloneModel(cachedModel);\n }\n\n return cachedModel || internalCreateContentModel(core, option);\n};\n\nfunction internalCreateContentModel(\n core: ContentModelEditorCore,\n option: DomToModelOption | undefined\n) {\n const context: DomToModelOption = {\n selectionRange: core.api.getSelectionRangeEx(core),\n ...core.defaultDomToModelOptions,\n ...(option || {}),\n processorOverride: {\n table: tablePreProcessor,\n ...(option?.processorOverride || {}),\n },\n };\n\n if (!core.reuseModel) {\n context.disableCacheElement = true;\n }\n\n return domToContentModel(core.contentDiv, core.api.createEditorContext(core), context);\n}\n","import { CreateEditorContext } from '../../publicTypes/ContentModelEditorCore';\n\n/**\n * @internal\n * Create a EditorContext object used by ContentModel API\n */\nexport const createEditorContext: CreateEditorContext = core => {\n return {\n isDarkMode: core.lifecycle.isDarkMode,\n defaultFormat: core.defaultFormat,\n darkColorHandler: core.darkColorHandler,\n addDelimiterForEntity: core.addDelimiterForEntity,\n };\n};\n","import { contentModelToDom } from 'roosterjs-content-model-dom';\nimport { SetContentModel } from '../../publicTypes/ContentModelEditorCore';\n\n/**\n * @internal\n * Set content with content model\n * @param model The content model to set\n * @param option Additional options to customize the behavior of Content Model to DOM conversion\n */\nexport const setContentModel: SetContentModel = (core, model, option) => {\n const range = contentModelToDom(\n core.contentDiv.ownerDocument,\n core.contentDiv,\n model,\n core.api.createEditorContext(core),\n {\n ...core.defaultModelToDomOptions,\n ...(option || {}),\n }\n );\n\n if (!core.lifecycle.shadowEditFragment) {\n core.api.select(core, range);\n }\n};\n","import { ContentModelEditorCore } from '../../publicTypes/ContentModelEditorCore';\nimport { getSelectionPath } from 'roosterjs-editor-dom';\nimport { SwitchShadowEdit } from 'roosterjs-editor-types';\n\n/**\n * @internal\n * Switch the Shadow Edit mode of editor On/Off\n * @param editorCore The EditorCore object\n * @param isOn True to switch On, False to switch Off\n */\nexport const switchShadowEdit: SwitchShadowEdit = (editorCore, isOn): void => {\n // TODO: Use strong-typed editor core object\n const core = editorCore as ContentModelEditorCore;\n\n if (isOn != !!core.lifecycle.shadowEditFragment) {\n if (isOn) {\n if (!core.cachedModel) {\n core.cachedModel = core.api.createContentModel(core);\n }\n\n const range = core.api.getSelectionRange(core, true /*tryGetFromCache*/);\n\n core.lifecycle.shadowEditSelectionPath =\n range && getSelectionPath(core.contentDiv, range);\n core.lifecycle.shadowEditFragment = core.contentDiv.ownerDocument.createDocumentFragment();\n } else {\n if (core.cachedModel) {\n core.api.setContentModel(core, core.cachedModel);\n }\n\n core.lifecycle.shadowEditFragment = null;\n core.lifecycle.shadowEditSelectionPath = null;\n }\n }\n};\n","import paste from '../../publicApi/utils/paste';\nimport { cloneModel } from '../../modelApi/common/cloneModel';\nimport { contentModelToDom } from 'roosterjs-content-model-dom';\nimport { deleteSelection } from '../../modelApi/edit/deleteSelection';\nimport { getOnDeleteEntityCallback } from '../utils/handleKeyboardEventCommon';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { iterateSelections } from '../../modelApi/selection/iterateSelections';\nimport type {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelDecorator,\n ContentModelListItemLevelFormat,\n ContentModelSegment,\n ContentModelTableRow,\n} from 'roosterjs-content-model-types';\nimport {\n addRangeToSelection,\n createElement,\n moveChildNodes,\n createRange,\n extractClipboardItems,\n toArray,\n Browser,\n wrap,\n safeInstanceOf,\n} from 'roosterjs-editor-dom';\nimport {\n ChangeSource,\n CopyPastePluginState,\n IEditor,\n PluginEventType,\n PluginWithState,\n KnownCreateElementDataIndex,\n ClipboardData,\n SelectionRangeTypes,\n SelectionRangeEx,\n} from 'roosterjs-editor-types';\n\n/**\n * Copy and paste plugin for handling onCopy and onPaste event\n */\nexport default class ContentModelCopyPastePlugin implements PluginWithState {\n private editor: IContentModelEditor | null = null;\n private disposer: (() => void) | null = null;\n\n /**\n * Construct a new instance of CopyPastePlugin\n * @param options The editor options\n */\n constructor(private state: CopyPastePluginState) {}\n\n /**\n * Get a friendly name of this plugin\n */\n getName() {\n return 'ContentModelCopyPaste';\n }\n\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n initialize(editor: IEditor) {\n this.editor = editor as IContentModelEditor;\n this.disposer = this.editor.addDomEventHandler({\n paste: e => this.onPaste(e),\n copy: e => this.onCutCopy(e, false /*isCut*/),\n cut: e => this.onCutCopy(e, true /*isCut*/),\n });\n }\n\n /**\n * Dispose this plugin\n */\n dispose() {\n if (this.disposer) {\n this.disposer();\n }\n this.disposer = null;\n this.editor = null;\n }\n\n /**\n * Get plugin state object\n */\n getState() {\n return this.state;\n }\n\n private onCutCopy(event: Event, isCut: boolean) {\n if (!this.editor) {\n return;\n }\n const selection = this.editor.getSelectionRangeEx();\n if (selection && !selection.areAllCollapsed) {\n const model = this.editor.createContentModel({\n disableCacheElement: true,\n });\n\n const pasteModel = cloneModel(model);\n if (selection.type === SelectionRangeTypes.TableSelection) {\n iterateSelections([pasteModel], (path, tableContext) => {\n if (tableContext?.table) {\n const table = tableContext?.table;\n table.rows = table.rows\n .map(row => {\n return {\n ...row,\n cells: row.cells.filter(cell => cell.isSelected),\n };\n })\n .filter(row => row.cells.length > 0);\n return true;\n }\n return false;\n });\n }\n const tempDiv = this.getTempDiv(this.editor);\n const selectionAfterPaste = contentModelToDom(\n tempDiv.ownerDocument,\n tempDiv,\n pasteModel,\n {\n isDarkMode: false /* To force light mode on paste */,\n darkColorHandler: this.editor.getDarkColorHandler(),\n },\n {\n onNodeCreated,\n }\n );\n\n let newRange: Range | null = selectionExToRange(selectionAfterPaste, tempDiv);\n if (newRange) {\n const cutCopyEvent = this.editor.triggerPluginEvent(PluginEventType.BeforeCutCopy, {\n clonedRoot: tempDiv,\n range: newRange,\n rawEvent: event as ClipboardEvent,\n isCut,\n });\n\n if (cutCopyEvent.range) {\n addRangeToSelection(newRange);\n }\n\n this.editor.runAsync(editor => {\n cleanUpAndRestoreSelection(tempDiv);\n editor.focus();\n if (selectionAfterPaste) {\n this.editor?.select(selectionAfterPaste);\n }\n if (isCut) {\n editor.addUndoSnapshot(() => {\n deleteSelection(\n model,\n getOnDeleteEntityCallback(editor as IContentModelEditor)\n );\n this.editor?.setContentModel(model);\n }, ChangeSource.Cut);\n }\n });\n }\n }\n }\n\n private onPaste = (event: Event) => {\n if (this.editor && isClipboardEvent(event)) {\n const editor = this.editor;\n\n const dataTransfer = event.clipboardData;\n\n if (dataTransfer?.items) {\n event.preventDefault();\n extractClipboardItems(toArray(dataTransfer.items), {\n allowedCustomPasteType: this.state.allowedCustomPasteType,\n }).then((clipboardData: ClipboardData) => {\n if (!editor.isDisposed()) {\n removeContentForAndroid(editor);\n paste(editor, clipboardData);\n }\n });\n }\n }\n };\n\n private getTempDiv(editor: IEditor) {\n const div = editor.getCustomData(\n 'CopyPasteTempDiv',\n () => {\n const tempDiv = createElement(\n KnownCreateElementDataIndex.CopyPasteTempDiv,\n editor.getDocument()\n ) as HTMLDivElement;\n\n editor.getDocument().body.appendChild(tempDiv);\n\n return tempDiv;\n },\n tempDiv => tempDiv.parentNode?.removeChild(tempDiv)\n );\n\n div.style.backgroundColor = 'white';\n div.style.color = 'black';\n div.childNodes.forEach(node => div.removeChild(node));\n\n div.style.display = '';\n div.focus();\n\n return div;\n }\n}\n\nfunction cleanUpAndRestoreSelection(tempDiv: HTMLDivElement) {\n tempDiv.style.backgroundColor = '';\n tempDiv.style.color = '';\n tempDiv.style.display = 'none';\n moveChildNodes(tempDiv);\n}\nfunction isClipboardEvent(event: Event): event is ClipboardEvent {\n return !!(event as ClipboardEvent).clipboardData;\n}\nfunction removeContentForAndroid(editor: IContentModelEditor) {\n if (Browser.isAndroid) {\n const model = editor.createContentModel();\n deleteSelection(model, getOnDeleteEntityCallback(editor));\n editor.setContentModel(model);\n }\n}\nfunction selectionExToRange(\n selection: SelectionRangeEx | null,\n tempDiv: HTMLDivElement\n): Range | null {\n if (!selection) {\n return null;\n }\n let newRange: Range | null = null;\n if (selection.type === SelectionRangeTypes.TableSelection && selection.coordinates) {\n const table = tempDiv.querySelector(`#${selection.table.id}`) as HTMLTableElement;\n const elementToSelect =\n table.parentElement?.childElementCount == 1 ? table.parentElement : table;\n newRange = createRange(elementToSelect);\n } else if (selection.type === SelectionRangeTypes.ImageSelection) {\n const image = tempDiv.querySelector('#' + selection.image.id);\n\n if (image) {\n newRange = createRange(image);\n }\n } else {\n newRange = selection.ranges[0];\n }\n\n return newRange;\n}\n\n/**\n * @internal\n * Exported only for unit testing\n */\nexport const onNodeCreated = (\n _:\n | ContentModelBlock\n | ContentModelBlockGroup\n | ContentModelSegment\n | ContentModelDecorator\n | ContentModelListItemLevelFormat\n | ContentModelTableRow,\n node: Node\n): void => {\n if (safeInstanceOf(node, 'HTMLTableElement')) {\n wrap(node, 'div');\n }\n};\n","import { EditorPlugin } from 'roosterjs-editor-types';\n\n/**\n * Dummy plugin, just to skip original TypeInContainerPlugin's behavior\n */\nexport default class ContentModelTypeInContainerPlugin implements EditorPlugin {\n /**\n * Get name of this plugin\n */\n getName() {\n return 'ContentModelTypeInContainer';\n }\n\n /**\n * The first method that editor will call to a plugin when editor is initializing.\n * It will pass in the editor instance, plugin should take this chance to save the\n * editor reference so that it can call to any editor method or format API later.\n * @param editor The editor object\n */\n initialize() {}\n\n /**\n * The last method that editor will call to a plugin before it is disposed.\n * Plugin can take this chance to clear the reference to editor. After this method is\n * called, plugin should not call to any editor method since it will result in error.\n */\n dispose() {}\n}\n","import ContentModelCopyPastePlugin from './corePlugins/ContentModelCopyPastePlugin';\nimport ContentModelEditPlugin from './plugins/ContentModelEditPlugin';\nimport ContentModelFormatPlugin from './plugins/ContentModelFormatPlugin';\nimport ContentModelTypeInContainerPlugin from './corePlugins/ContentModelTypeInContainerPlugin';\nimport { ContentModelEditorCore } from '../publicTypes/ContentModelEditorCore';\nimport { ContentModelEditorOptions } from '../publicTypes/IContentModelEditor';\nimport { ContentModelSegmentFormat } from 'roosterjs-content-model-types';\nimport { CoreCreator, EditorCore, ExperimentalFeatures } from 'roosterjs-editor-types';\nimport { createContentModel } from './coreApi/createContentModel';\nimport { createEditorContext } from './coreApi/createEditorContext';\nimport { createEditorCore, isFeatureEnabled } from 'roosterjs-editor-core';\nimport { setContentModel } from './coreApi/setContentModel';\nimport { switchShadowEdit } from './coreApi/switchShadowEdit';\n\n/**\n * Editor Core creator for Content Model editor\n */\nexport const createContentModelEditorCore: CoreCreator<\n ContentModelEditorCore,\n ContentModelEditorOptions\n> = (contentDiv, options) => {\n const modifiedOptions: ContentModelEditorOptions = {\n ...options,\n plugins: [\n ...(options.plugins || []),\n new ContentModelFormatPlugin(),\n new ContentModelEditPlugin(),\n ],\n corePluginOverride: {\n typeInContainer: isFeatureEnabled(\n options.experimentalFeatures,\n ExperimentalFeatures.EditWithContentModel\n )\n ? new ContentModelTypeInContainerPlugin()\n : undefined,\n copyPaste: isFeatureEnabled(\n options.experimentalFeatures,\n ExperimentalFeatures.ContentModelPaste\n )\n ? new ContentModelCopyPastePlugin({\n allowedCustomPasteType: options.allowedCustomPasteType || [],\n })\n : undefined,\n ...(options.corePluginOverride || {}),\n },\n };\n\n const core = createEditorCore(contentDiv, modifiedOptions) as ContentModelEditorCore;\n\n promoteToContentModelEditorCore(core, modifiedOptions);\n\n return core;\n};\n\n/**\n * Creator Content Model Editor Core from Editor Core\n * @param core The original EditorCore object\n * @param options Options of this editor\n */\nexport function promoteToContentModelEditorCore(\n core: EditorCore,\n options: ContentModelEditorOptions\n) {\n const cmCore = core as ContentModelEditorCore;\n\n promoteDefaultFormat(cmCore);\n promoteContentModelInfo(cmCore, options);\n promoteCoreApi(cmCore);\n}\n\nfunction promoteDefaultFormat(cmCore: ContentModelEditorCore) {\n cmCore.lifecycle.defaultFormat = cmCore.lifecycle.defaultFormat || {};\n cmCore.defaultFormat = getDefaultSegmentFormat(cmCore);\n}\n\nfunction promoteContentModelInfo(\n cmCore: ContentModelEditorCore,\n options: ContentModelEditorOptions\n) {\n const experimentalFeatures = cmCore.lifecycle.experimentalFeatures;\n\n cmCore.defaultDomToModelOptions = options.defaultDomToModelOptions || {};\n cmCore.defaultModelToDomOptions = options.defaultModelToDomOptions || {};\n cmCore.reuseModel = isFeatureEnabled(\n experimentalFeatures,\n ExperimentalFeatures.ReusableContentModel\n );\n cmCore.addDelimiterForEntity = isFeatureEnabled(\n experimentalFeatures,\n ExperimentalFeatures.InlineEntityReadOnlyDelimiters\n );\n}\n\nfunction promoteCoreApi(cmCore: ContentModelEditorCore) {\n cmCore.api.createEditorContext = createEditorContext;\n cmCore.api.createContentModel = createContentModel;\n cmCore.api.setContentModel = setContentModel;\n\n if (\n isFeatureEnabled(\n cmCore.lifecycle.experimentalFeatures,\n ExperimentalFeatures.ReusableContentModel\n )\n ) {\n // Only use Content Model shadow edit when reuse model is enabled because it relies on cached model for the original model\n cmCore.api.switchShadowEdit = switchShadowEdit;\n }\n cmCore.originalApi.createEditorContext = createEditorContext;\n cmCore.originalApi.createContentModel = createContentModel;\n cmCore.originalApi.setContentModel = setContentModel;\n}\n\nfunction getDefaultSegmentFormat(core: EditorCore): ContentModelSegmentFormat {\n const format = core.lifecycle.defaultFormat ?? {};\n\n return {\n fontWeight: format.bold ? 'bold' : undefined,\n italic: format.italic || undefined,\n underline: format.underline || undefined,\n fontFamily: format.fontFamily || undefined,\n fontSize: format.fontSize || undefined,\n textColor: format.textColors?.lightModeColor || format.textColor || undefined,\n backgroundColor:\n format.backgroundColors?.lightModeColor || format.backgroundColor || undefined,\n };\n}\n","import { IContentModelEditor } from '../publicTypes/IContentModelEditor';\nimport { IEditor } from 'roosterjs-editor-types';\n\n/**\n * Check if the given editor object is Content Model editor\n * @param editor The editor to check\n * @returns True if the given editor is Content Model editor, otherwise false\n */\nexport default function isContentModelEditor(editor: IEditor): editor is IContentModelEditor {\n const contentModelEditor = editor as IContentModelEditor;\n\n return !!contentModelEditor.createContentModel;\n}\n","import handleKeyDownEvent from '../../publicApi/editing/handleKeyDownEvent';\nimport { ContentModelSegmentFormat } from 'roosterjs-content-model-types';\nimport { DeleteResult } from '../../modelApi/edit/utils/DeleteSelectionStep';\nimport { deleteSelection } from '../../modelApi/edit/deleteSelection';\nimport { formatWithContentModel } from '../../publicApi/utils/formatWithContentModel';\nimport { getOnDeleteEntityCallback } from '../utils/handleKeyboardEventCommon';\nimport { getPendingFormat, setPendingFormat } from '../../modelApi/format/pendingFormat';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { isNodeOfType, normalizeContentModel } from 'roosterjs-content-model-dom';\nimport {\n getObjectKeys,\n isBlockElement,\n isCharacterValue,\n isModifierKey,\n Position,\n} from 'roosterjs-editor-dom';\nimport {\n EditorPlugin,\n EntityOperationEvent,\n ExperimentalFeatures,\n IEditor,\n Keys,\n NodePosition,\n NodeType,\n PluginEvent,\n PluginEventType,\n SelectionRangeTypes,\n} from 'roosterjs-editor-types';\n\n// During IME input, KeyDown event will have \"Process\" as key\nconst ProcessKey = 'Process';\n\n/**\n * ContentModel plugins helps editor to do editing operation on top of content model.\n * This includes:\n * 1. Delete Key\n * 2. Backspace Key\n */\nexport default class ContentModelEditPlugin implements EditorPlugin {\n private editor: IContentModelEditor | null = null;\n private triggeredEntityEvents: EntityOperationEvent[] = [];\n private editWithContentModel = false;\n private hasDefaultFormat = false;\n\n /**\n * Get name of this plugin\n */\n getName() {\n return 'ContentModelEdit';\n }\n\n /**\n * The first method that editor will call to a plugin when editor is initializing.\n * It will pass in the editor instance, plugin should take this chance to save the\n * editor reference so that it can call to any editor method or format API later.\n * @param editor The editor object\n */\n initialize(editor: IEditor) {\n // TODO: Later we may need a different interface for Content Model editor plugin\n this.editor = editor as IContentModelEditor;\n this.editWithContentModel = this.editor.isFeatureEnabled(\n ExperimentalFeatures.EditWithContentModel\n );\n\n const defaultFormat = this.editor.getContentModelDefaultFormat();\n this.hasDefaultFormat =\n getObjectKeys(defaultFormat).filter(x => typeof defaultFormat[x] !== 'undefined')\n .length > 0;\n }\n\n /**\n * The last method that editor will call to a plugin before it is disposed.\n * Plugin can take this chance to clear the reference to editor. After this method is\n * called, plugin should not call to any editor method since it will result in error.\n */\n dispose() {\n this.editor = null;\n }\n\n /**\n * Core method for a plugin. Once an event happens in editor, editor will call this\n * method of each plugin to handle the event as long as the event is not handled\n * exclusively by another plugin.\n * @param event The event to handle:\n */\n onPluginEvent(event: PluginEvent) {\n if (this.editor) {\n switch (event.eventType) {\n case PluginEventType.EntityOperation:\n this.handleEntityOperationEvent(this.editor, event);\n break;\n\n case PluginEventType.KeyDown:\n this.handleKeyDownEvent(this.editor, event.rawEvent);\n break;\n\n case PluginEventType.ContentChanged:\n case PluginEventType.MouseUp:\n this.editor.cacheContentModel(null);\n break;\n }\n }\n }\n\n private handleEntityOperationEvent(editor: IContentModelEditor, event: EntityOperationEvent) {\n if (event.rawEvent?.type == 'keydown') {\n // If we see an entity operation event triggered from keydown event, it means the event can be triggered from original\n // EntityFeatures or EntityPlugin, so we don't need to trigger the same event again from ContentModel.\n // TODO: This is a temporary solution. Once Content Model can fully replace Entity Features, we can remove this.\n this.triggeredEntityEvents.push(event);\n }\n }\n\n private handleKeyDownEvent(editor: IContentModelEditor, rawEvent: KeyboardEvent) {\n const which = rawEvent.which;\n\n if (!this.editWithContentModel || rawEvent.defaultPrevented) {\n // Other plugins already handled this event, so it is most likely content is already changed, we need to clear cached content model\n editor.cacheContentModel(null /*model*/);\n } else if (!rawEvent.defaultPrevented) {\n // TODO: Consider use ContentEditFeature and need to hide other conflict features that are not based on Content Model\n switch (which) {\n case Keys.BACKSPACE:\n case Keys.DELETE:\n const rangeEx = editor.getSelectionRangeEx();\n const range =\n rangeEx.type == SelectionRangeTypes.Normal ? rangeEx.ranges[0] : null;\n\n if (this.shouldDeleteWithContentModel(range, rawEvent)) {\n handleKeyDownEvent(editor, rawEvent, this.triggeredEntityEvents);\n } else {\n editor.cacheContentModel(null);\n }\n\n break;\n\n default:\n if (\n (isCharacterValue(rawEvent) || rawEvent.key == ProcessKey) &&\n this.hasDefaultFormat\n ) {\n this.tryApplyDefaultFormat(editor);\n }\n\n editor.cacheContentModel(null);\n break;\n }\n }\n\n if (this.triggeredEntityEvents.length > 0) {\n this.triggeredEntityEvents = [];\n }\n }\n\n private tryApplyDefaultFormat(editor: IContentModelEditor) {\n const rangeEx = editor.getSelectionRangeEx();\n const range = rangeEx?.type == SelectionRangeTypes.Normal ? rangeEx.ranges[0] : null;\n const startPos = range ? Position.getStart(range) : null;\n let node: Node | null = startPos?.node ?? null;\n\n while (node && editor.contains(node)) {\n if (isNodeOfType(node, NodeType.Element) && node.getAttribute?.('style')) {\n return;\n } else if (isBlockElement(node)) {\n break;\n } else {\n node = node.parentNode;\n }\n }\n\n formatWithContentModel(editor, 'input', model => {\n const result = deleteSelection(\n model,\n getOnDeleteEntityCallback(\n editor,\n undefined /*rawEvent*/,\n this.triggeredEntityEvents\n )\n );\n\n if (result.deleteResult == DeleteResult.Range) {\n normalizeContentModel(model);\n editor.addUndoSnapshot();\n\n return true;\n } else if (\n result.deleteResult == DeleteResult.NotDeleted &&\n result.insertPoint &&\n startPos\n ) {\n const { paragraph, path, marker } = result.insertPoint;\n const blocks = path[0].blocks;\n const blockCount = blocks.length;\n const blockIndex = blocks.indexOf(paragraph);\n\n if (\n paragraph.isImplicit &&\n paragraph.segments.length == 1 &&\n paragraph.segments[0] == marker &&\n blockCount > 0 &&\n blockIndex == blockCount - 1\n ) {\n // Focus is in the last paragraph which is implicit and there is not other segments.\n // This can happen when focus is moved after all other content under current block group.\n // We need to check if browser will merge focus into previous paragraph by checking if\n // previous block is block. If previous block is paragraph, browser will most likely merge\n // the input into previous paragraph, then nothing need to do here. Otherwise we need to\n // apply pending format since this input event will start a new real paragraph.\n const previousBlock = blocks[blockIndex - 1];\n\n if (previousBlock?.blockType != 'Paragraph') {\n this.applyDefaultFormat(editor, marker.format, startPos);\n }\n } else if (paragraph.segments.every(x => x.segmentType != 'Text')) {\n this.applyDefaultFormat(editor, marker.format, startPos);\n }\n\n // We didn't do any change but just apply default format to pending format, so no need to write back\n return false;\n } else {\n return false;\n }\n });\n }\n\n private applyDefaultFormat(\n editor: IContentModelEditor,\n currentFormat: ContentModelSegmentFormat,\n startPos: NodePosition\n ) {\n const pendingFormat = getPendingFormat(editor) || {};\n const defaultFormat = editor.getContentModelDefaultFormat();\n const newFormat: ContentModelSegmentFormat = {\n ...defaultFormat,\n ...pendingFormat,\n ...currentFormat,\n };\n\n setPendingFormat(editor, newFormat, startPos);\n }\n\n private shouldDeleteWithContentModel(range: Range | null, rawEvent: KeyboardEvent) {\n return !(\n range?.collapsed &&\n range.startContainer.nodeType == NodeType.Text &&\n !isModifierKey(rawEvent) &&\n (this.canDeleteBefore(rawEvent, range) || this.canDeleteAfter(rawEvent, range))\n );\n }\n\n private canDeleteBefore(rawEvent: KeyboardEvent, range: Range) {\n return (\n rawEvent.which == Keys.BACKSPACE &&\n (range.startOffset > 1 || range.startContainer.previousSibling)\n );\n }\n\n private canDeleteAfter(rawEvent: KeyboardEvent, range: Range) {\n return (\n rawEvent.which == Keys.DELETE &&\n (range.startOffset < (range.startContainer.nodeValue?.length ?? 0) - 1 ||\n range.startContainer.nextSibling)\n );\n }\n}\n","import applyPendingFormat from '../../publicApi/format/applyPendingFormat';\nimport { canApplyPendingFormat, clearPendingFormat } from '../../modelApi/format/pendingFormat';\nimport { EditorPlugin, IEditor, Keys, PluginEvent, PluginEventType } from 'roosterjs-editor-types';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * ContentModelFormat plugins helps editor to do formatting on top of content model.\n * This includes:\n * 1. Handle pending format changes when selection is collapsed\n */\nexport default class ContentModelFormatPlugin implements EditorPlugin {\n private editor: IContentModelEditor | null = null;\n\n /**\n * Get name of this plugin\n */\n getName() {\n return 'ContentModelFormat';\n }\n\n /**\n * The first method that editor will call to a plugin when editor is initializing.\n * It will pass in the editor instance, plugin should take this chance to save the\n * editor reference so that it can call to any editor method or format API later.\n * @param editor The editor object\n */\n initialize(editor: IEditor) {\n // TODO: Later we may need a different interface for Content Model editor plugin\n this.editor = editor as IContentModelEditor;\n }\n\n /**\n * The last method that editor will call to a plugin before it is disposed.\n * Plugin can take this chance to clear the reference to editor. After this method is\n * called, plugin should not call to any editor method since it will result in error.\n */\n dispose() {\n this.editor = null;\n }\n\n /**\n * Core method for a plugin. Once an event happens in editor, editor will call this\n * method of each plugin to handle the event as long as the event is not handled\n * exclusively by another plugin.\n * @param event The event to handle:\n */\n onPluginEvent(event: PluginEvent) {\n if (!this.editor) {\n return;\n }\n\n switch (event.eventType) {\n case PluginEventType.Input:\n // In Safari, isComposing will be undefined but isInIME() works\n if (!event.rawEvent.isComposing && !this.editor.isInIME()) {\n this.checkAndApplyPendingFormat(event.rawEvent.data);\n }\n\n break;\n\n case PluginEventType.CompositionEnd:\n this.checkAndApplyPendingFormat(event.rawEvent.data);\n break;\n\n case PluginEventType.KeyDown:\n if (event.rawEvent.which >= Keys.PAGEUP && event.rawEvent.which <= Keys.DOWN) {\n clearPendingFormat(this.editor);\n }\n\n break;\n\n case PluginEventType.MouseUp:\n case PluginEventType.ContentChanged:\n if (!canApplyPendingFormat(this.editor)) {\n clearPendingFormat(this.editor);\n }\n break;\n }\n }\n\n private checkAndApplyPendingFormat(data: string | null) {\n if (this.editor && data) {\n applyPendingFormat(this.editor, data);\n clearPendingFormat(this.editor);\n }\n }\n}\n","import addParser from './utils/addParser';\nimport ContentModelBeforePasteEvent from '../../../publicTypes/event/ContentModelBeforePasteEvent';\nimport { getPasteSource } from 'roosterjs-editor-dom';\nimport { IContentModelEditor } from '../../../publicTypes/IContentModelEditor';\nimport { parseDeprecatedColor } from './utils/deprecatedColorParser';\nimport { parseLink } from './utils/linkParser';\nimport { processPastedContentFromExcel } from './Excel/processPastedContentFromExcel';\nimport { processPastedContentFromPowerPoint } from './PowerPoint/processPastedContentFromPowerPoint';\nimport { processPastedContentFromWordDesktop } from './WordDesktop/processPastedContentFromWordDesktop';\nimport { processPastedContentWacComponents } from './WacComponents/processPastedContentWacComponents';\nimport {\n EditorPlugin,\n IEditor,\n KnownPasteSourceType,\n PasteType,\n PluginEvent,\n PluginEventType,\n} from 'roosterjs-editor-types';\n\nconst GOOGLE_SHEET_NODE_NAME = 'google-sheets-html-origin';\n\n/**\n * Paste plugin, handles BeforePaste event and reformat some special content, including:\n * 1. Content copied from Word\n * 2. Content copied from Excel\n * 3. Content copied from Word Online or OneNote Online\n * 4. Content copied from Power Point\n * (This class is still under development, and may still be changed in the future with some breaking changes)\n */\nexport default class ContentModelFormatPlugin implements EditorPlugin {\n private editor: IContentModelEditor | null = null;\n\n /**\n * Construct a new instance of Paste class\n * @param unknownTagReplacement Replace solution of unknown tags, default behavior is to replace with SPAN\n */\n constructor(private unknownTagReplacement: string = 'SPAN') {}\n\n /**\n * Get name of this plugin\n */\n getName() {\n return 'ContentModelPaste';\n }\n\n /**\n * The first method that editor will call to a plugin when editor is initializing.\n * It will pass in the editor instance, plugin should take this chance to save the\n * editor reference so that it can call to any editor method or format API later.\n * @param editor The editor object\n */\n initialize(editor: IEditor) {\n // TODO: Later we may need a different interface for Content Model editor plugin\n this.editor = editor as IContentModelEditor;\n }\n\n /**\n * The last method that editor will call to a plugin before it is disposed.\n * Plugin can take this chance to clear the reference to editor. After this method is\n * called, plugin should not call to any editor method since it will result in error.\n */\n dispose() {\n this.editor = null;\n }\n\n /**\n * Core method for a plugin. Once an event happens in editor, editor will call this\n * method of each plugin to handle the event as long as the event is not handled\n * exclusively by another plugin.\n * @param event The event to handle:\n */\n onPluginEvent(event: PluginEvent) {\n if (!this.editor || event.eventType != PluginEventType.BeforePaste) {\n return;\n }\n\n const ev = event as ContentModelBeforePasteEvent;\n if (!ev.domToModelOption) {\n return;\n }\n const pasteSource = getPasteSource(event, false);\n switch (pasteSource) {\n case KnownPasteSourceType.WordDesktop:\n processPastedContentFromWordDesktop(ev);\n break;\n case KnownPasteSourceType.WacComponents:\n processPastedContentWacComponents(ev);\n break;\n case KnownPasteSourceType.ExcelOnline:\n if (\n event.pasteType === PasteType.Normal ||\n event.pasteType === PasteType.MergeFormat\n ) {\n // Handle HTML copied from Excel\n processPastedContentFromExcel(ev, this.editor.getTrustedHTMLHandler());\n }\n break;\n case KnownPasteSourceType.GoogleSheets:\n event.sanitizingOption.additionalTagReplacements[GOOGLE_SHEET_NODE_NAME] = '*';\n break;\n case KnownPasteSourceType.PowerPointDesktop:\n processPastedContentFromPowerPoint(ev, this.editor.getTrustedHTMLHandler());\n break;\n }\n\n addParser(ev.domToModelOption, 'link', parseLink);\n parseDeprecatedColor(ev.sanitizingOption);\n\n event.sanitizingOption.unknownTagReplacement = this.unknownTagReplacement;\n }\n}\n","import addParser from '../utils/addParser';\nimport ContentModelBeforePasteEvent from '../../../../publicTypes/event/ContentModelBeforePasteEvent';\nimport { getTagOfNode, moveChildNodes } from 'roosterjs-editor-dom';\nimport { TrustedHTMLHandler } from 'roosterjs-editor-types';\n\nconst LAST_TD_END_REGEX = /<\\/\\s*td\\s*>((?!<\\/\\s*tr\\s*>)[\\s\\S])*$/i;\nconst LAST_TR_END_REGEX = /<\\/\\s*tr\\s*>((?!<\\/\\s*table\\s*>)[\\s\\S])*$/i;\nconst LAST_TR_REGEX = /]*>[^<]*/i;\nconst LAST_TABLE_REGEX = /]*>[^<]*/i;\nconst DEFAULT_BORDER_STYLE = 'solid 1px #d4d4d4';\n\n/**\n * @internal\n * Convert pasted content from Excel, add borders when source doc doesn't have a border\n * @param event The BeforePaste event\n */\n\nexport function processPastedContentFromExcel(\n event: ContentModelBeforePasteEvent,\n trustedHTMLHandler: TrustedHTMLHandler\n) {\n const { fragment, htmlBefore, clipboardData } = event;\n const html = clipboardData.html ? excelHandler(clipboardData.html, htmlBefore) : undefined;\n\n if (html && clipboardData.html != html) {\n const doc = new DOMParser().parseFromString(trustedHTMLHandler(html), 'text/html');\n moveChildNodes(fragment, doc?.body);\n }\n\n // For Excel Online\n const firstChild = fragment.firstChild;\n if (firstChild && firstChild.childNodes.length > 0 && getTagOfNode(firstChild) == 'DIV') {\n const tableFound = Array.from(firstChild.childNodes).every((child: Node) => {\n // Tables pasted from Excel Online should be of the format: 0 to N META tags and 1 TABLE tag\n return getTagOfNode(child) == 'META'\n ? true\n : getTagOfNode(child) == 'TABLE' && child == firstChild.lastChild;\n });\n\n // Extract Table from Div\n if (tableFound && firstChild.lastChild) {\n event.fragment.replaceChildren(firstChild.lastChild);\n }\n }\n\n addParser(event.domToModelOption, 'tableCell', (format, element) => {\n if (element.style.borderStyle === 'none') {\n format.borderBottom = DEFAULT_BORDER_STYLE;\n format.borderLeft = DEFAULT_BORDER_STYLE;\n format.borderRight = DEFAULT_BORDER_STYLE;\n format.borderTop = DEFAULT_BORDER_STYLE;\n }\n });\n}\n\n/**\n * @internal Export for test only\n * @param html Source html\n */\n\nexport function excelHandler(html: string, htmlBefore: string): string {\n if (html.match(LAST_TD_END_REGEX)) {\n const trMatch = htmlBefore.match(LAST_TR_REGEX);\n const tr = trMatch ? trMatch[0] : '';\n html = tr + html + '';\n }\n if (html.match(LAST_TR_END_REGEX)) {\n let tableMatch = htmlBefore.match(LAST_TABLE_REGEX);\n let table = tableMatch ? tableMatch[0] : '';\n html = table + html + '
    ';\n }\n\n return html;\n}\n","import { BeforePasteEvent, TrustedHTMLHandler } from 'roosterjs-editor-types';\nimport { moveChildNodes } from 'roosterjs-editor-dom';\n\n/**\n * @internal\n * Convert pasted content from PowerPoint\n * @param event The BeforePaste event\n */\n\nexport function processPastedContentFromPowerPoint(\n event: BeforePasteEvent,\n trustedHTMLHandler: TrustedHTMLHandler\n) {\n const { fragment, clipboardData } = event;\n\n if (clipboardData.html && !clipboardData.text && clipboardData.image) {\n // It is possible that PowerPoint copied both image and HTML but not plain text.\n // We always prefer HTML if any.\n const doc = new DOMParser().parseFromString(\n trustedHTMLHandler(clipboardData.html),\n 'text/html'\n );\n\n moveChildNodes(fragment, doc?.body);\n }\n}\n","import addParser from '../utils/addParser';\nimport ContentModelBeforePasteEvent from '../../../../publicTypes/event/ContentModelBeforePasteEvent';\nimport { findClosestElementAncestor, getTagOfNode, matchesSelector } from 'roosterjs-editor-dom';\nimport { setProcessor } from '../utils/setProcessor';\nimport {\n ContentModelBlockGroup,\n ContentModelListItemLevelFormat,\n ContentModelSegmentFormat,\n DomToModelContext,\n ElementProcessor,\n FormatParser,\n} from 'roosterjs-content-model-types';\n\nconst WAC_IDENTIFY_SELECTOR =\n 'ul[class^=\"BulletListStyle\"]>.OutlineElement,ol[class^=\"NumberListStyle\"]>.OutlineElement,span.WACImageContainer,span.WACImageBorder';\nconst LIST_CONTAINER_ELEMENT_CLASS_NAME = 'ListContainerWrapper';\n\nconst EMPTY_TEXT_RUN = 'EmptyTextRun';\nconst END_OF_PARAGRAPH = 'EOP';\nconst PARAGRAPH = 'Paragraph';\n\nconst TEMP_ELEMENTS_CLASSES = [\n 'TableInsertRowGapBlank',\n 'TableColumnResizeHandle',\n 'TableCellTopBorderHandle',\n 'TableCellLeftBorderHandle',\n 'TableHoverColumnHandle',\n 'TableHoverRowHandle',\n 'ListMarkerWrappingSpan',\n];\n\nconst CLASSES_TO_KEEP = [\n 'OutlineElement',\n 'NumberListStyle',\n 'WACImageContainer',\n 'ListContainerWrapper',\n 'BulletListStyle',\n END_OF_PARAGRAPH,\n EMPTY_TEXT_RUN,\n ...TEMP_ELEMENTS_CLASSES,\n 'TableCellContent',\n PARAGRAPH,\n 'WACImageContainer',\n 'WACImageBorder',\n];\n\nconst LIST_ELEMENT_TAGS = ['UL', 'OL', 'LI'];\nconst LIST_ELEMENT_SELECTOR = LIST_ELEMENT_TAGS.join(',');\n\n/**\n * Wac components do not use sub and super tags, instead only add vertical align to a span.\n * This parser normalize the content for content model\n */\nconst wacSubSuperParser: FormatParser = (\n format: ContentModelSegmentFormat,\n element: HTMLElement\n): void => {\n const verticalAlign = element.style.verticalAlign;\n if (verticalAlign === 'super') {\n format.superOrSubScriptSequence = 'super';\n }\n if (verticalAlign === 'sub') {\n format.superOrSubScriptSequence = 'sub';\n }\n};\n\n/**\n * This processor does:\n * 1) Remove the display and margin of the element.\n * 2) When an element should be ignored but should handle the child elements call the default child processor.\n * 3) Removes the End of Paragraph element to avoid empty lines, we should only remove this if the previous element of the EOP is an EmptyTextRun\n * 4) Finally call the default processor.\n * @returns\n */\nconst wacElementProcessor: ElementProcessor = (\n group: ContentModelBlockGroup,\n element: HTMLElement,\n context: DomToModelContext\n): void => {\n const elementTag = getTagOfNode(element);\n if (matchesSelector(element, WAC_IDENTIFY_SELECTOR)) {\n element.style.removeProperty('display');\n element.style.removeProperty('margin');\n }\n\n if (element.classList.contains(LIST_CONTAINER_ELEMENT_CLASS_NAME)) {\n context.elementProcessors.child(group, element, context);\n return;\n }\n\n if (\n (element.classList.contains(END_OF_PARAGRAPH) &&\n element.previousElementSibling?.classList.contains(EMPTY_TEXT_RUN)) ||\n TEMP_ELEMENTS_CLASSES.some(className => element.classList.contains(className))\n ) {\n return;\n } else if (shouldClearListContext(elementTag, element, context)) {\n const { listFormat } = context;\n listFormat.levels = [];\n listFormat.listParent = undefined;\n }\n\n context.defaultElementProcessors.element(group, element, context);\n};\n\n/**\n * This processor calls the default list processor and then sets the correct list level and list bullet.\n */\nconst wacLiElementProcessor: ElementProcessor = (\n group: ContentModelBlockGroup,\n element: HTMLLIElement,\n context: DomToModelContext\n): void => {\n context.defaultElementProcessors.li?.(group, element, context);\n const { listFormat } = context;\n const listParent = listFormat.listParent;\n if (listParent) {\n const lastblock = listParent.blocks[listParent.blocks.length - 1];\n if (\n lastblock.blockType == 'BlockGroup' &&\n lastblock.blockGroupType == 'ListItem' &&\n context.listFormat.listParent !== lastblock\n ) {\n const currentLevel = lastblock.levels[lastblock.levels.length - 1];\n\n // Get item level from 'data-aria-level' attribute\n let level = parseInt(element.getAttribute('data-aria-level') ?? '');\n if (level > 0) {\n if (level > lastblock.levels.length) {\n while (level != lastblock.levels.length) {\n lastblock.levels.push(currentLevel);\n }\n } else {\n lastblock.levels.splice(level, lastblock.levels.length - 1);\n lastblock.levels[level - 1] = currentLevel;\n }\n }\n }\n }\n};\n\n/**\n * This parsers does:\n * 1) Sets the display for dummy item to undefined when the current style is block.\n * 2) Removes the Margin Left\n */\nconst wacListItemParser: FormatParser = (\n format: ContentModelListItemLevelFormat,\n element: HTMLElement\n): void => {\n if (element.style.display === 'block') {\n format.displayForDummyItem = undefined;\n }\n\n format.marginLeft = undefined;\n};\n\n/**\n * Wac usually adds padding to lists which is unwanted so remove it.\n */\nconst wacListLevelParser: FormatParser = (\n format: ContentModelListItemLevelFormat\n): void => {\n format.marginLeft = undefined;\n format.paddingLeft = undefined;\n};\n\n/**\n * This function returns whether we need to clear the list format.\n * Word Online wraps lists inside divs to have this structure:\n *\n *
    \n *
      ...
    \n *
    \n *
    \n *

    ...

    \n *
    \n *
    \n *
      ...
    \n *
    \n *\n * So if a elements is not contained inside of a list we should clear the list context to prevent normal text to be\n * transformed into list\n * For the above scenario, if we do not clear the format, the content inside of the second div would be transformed to a list too.\n */\nfunction shouldClearListContext(\n elementTag: string,\n element: HTMLElement,\n context: DomToModelContext\n) {\n return (\n context.listFormat.levels.length > 0 &&\n LIST_ELEMENT_TAGS.every(tag => tag != elementTag) &&\n !findClosestElementAncestor(element, undefined, LIST_ELEMENT_SELECTOR)\n );\n}\n\n/**\n * @internal\n * Convert pasted content from Office Online\n * Once it is known that the document is from WAC\n * We need to remove the display property and margin from all the list item\n * @param ev ContentModelBeforePasteEvent\n */\nexport function processPastedContentWacComponents(ev: ContentModelBeforePasteEvent) {\n addParser(ev.domToModelOption, 'segment', wacSubSuperParser);\n addParser(ev.domToModelOption, 'listItem', wacListItemParser);\n addParser(ev.domToModelOption, 'listLevel', wacListLevelParser);\n\n setProcessor(ev.domToModelOption, 'element', wacElementProcessor);\n setProcessor(ev.domToModelOption, 'li', wacLiElementProcessor);\n setProcessor(ev.domToModelOption, 'ol', wacListProcessor);\n setProcessor(ev.domToModelOption, 'ul', wacListProcessor);\n ev.sanitizingOption.additionalAllowedCssClasses.push(...CLASSES_TO_KEEP);\n}\n\n/**\n * List items from word have this format when using List items:\n * @example\n
    \n
      \n
      \n
      \n
        \n
        \n
        \n
          \n
          \n * Due to this the div between each of the lists we need to restore the list context to use the previous list,\n * otherwise it could create a new list instead under the same list element\n */\nconst wacListProcessor: ElementProcessor = (\n group: ContentModelBlockGroup,\n element: HTMLOListElement | HTMLUListElement,\n context: DomToModelContext\n): void => {\n const lastBlock = group.blocks[group.blocks.length - 1];\n const isWrappedInContainer = findClosestElementAncestor(\n element,\n undefined,\n `.${LIST_CONTAINER_ELEMENT_CLASS_NAME}`\n );\n if (\n isWrappedInContainer?.previousElementSibling?.classList.contains(\n LIST_CONTAINER_ELEMENT_CLASS_NAME\n )\n ) {\n if (lastBlock?.blockType === 'BlockGroup' && lastBlock.blockGroupType == 'ListItem') {\n context.listFormat = {\n threadItemCounts: [],\n levels: lastBlock.levels,\n listParent: group,\n };\n }\n }\n if (element.tagName.toUpperCase() === 'OL') {\n context.defaultElementProcessors.ol?.(group, element as HTMLOListElement, context);\n } else {\n context.defaultElementProcessors.ul?.(group, element as HTMLUListElement, context);\n }\n};\n","import addParser from '../utils/addParser';\nimport ContentModelBeforePasteEvent from '../../../../publicTypes/event/ContentModelBeforePasteEvent';\nimport { chainSanitizerCallback, getStyles, moveChildNodes } from 'roosterjs-editor-dom';\nimport { processWordComments } from './processWordComments';\nimport { processWordList } from './processWordLists';\nimport { setProcessor } from '../utils/setProcessor';\nimport {\n ContentModelBlockFormat,\n ContentModelListItemFormat,\n ContentModelListItemLevelFormat,\n DomToModelContext,\n ElementProcessor,\n FormatParser,\n} from 'roosterjs-content-model-types';\n\nconst PERCENTAGE_REGEX = /%/;\nconst DEFAULT_BROWSER_LINE_HEIGHT_PERCENTAGE = 120;\n\n/**\n * @internal\n * Handles Pasted content when source is Word Desktop\n * @param ev ContentModelBeforePasteEvent\n */\nexport function processPastedContentFromWordDesktop(ev: ContentModelBeforePasteEvent) {\n setProcessor(ev.domToModelOption, 'element', wordDesktopElementProcessor);\n addParser(ev.domToModelOption, 'block', removeNonValidLineHeight);\n addParser(ev.domToModelOption, 'listLevel', listLevelParser);\n addParser(ev.domToModelOption, 'listItemElement', listItemElementParser);\n\n // Remove \"border:none\" for image to fix image resize behavior\n // We found a problem that when paste an image with \"border:none\" then the resize border will be\n // displayed incorrectly when resize it. So we need to drop this style\n chainSanitizerCallback(\n ev.sanitizingOption.cssStyleCallbacks,\n 'border',\n (value, element) => element.tagName != 'IMG' || value != 'none'\n );\n\n // Preserve when its innerHTML is \" \" to avoid dropping an empty line\n chainSanitizerCallback(ev.sanitizingOption.elementCallbacks, 'O:P', element => {\n moveChildNodes(element);\n element.appendChild(element.ownerDocument.createTextNode('\\u00A0')); //  \n return true;\n });\n}\n\n/**\n * @internal\n * Exported only for unit test\n */\nexport const wordDesktopElementProcessor: ElementProcessor = (\n group,\n element,\n context\n) => {\n const styles = getStyles(element);\n // Process Word Lists or Word Commands, otherwise use the default processor on this element.\n if (\n !(processWordList(styles, group, element, context) || processWordComments(styles, element))\n ) {\n context.defaultElementProcessors.element(group, element, context);\n }\n};\n\nfunction removeNonValidLineHeight(\n format: ContentModelBlockFormat,\n element: HTMLElement,\n context: DomToModelContext,\n defaultStyle: Readonly>\n): void {\n //If the line height is less than the browser default line height, line between the text is going to be too narrow\n let parsedLineHeight: number;\n if (\n PERCENTAGE_REGEX.test(element.style.lineHeight) &&\n !isNaN((parsedLineHeight = parseInt(element.style.lineHeight))) &&\n parsedLineHeight < DEFAULT_BROWSER_LINE_HEIGHT_PERCENTAGE\n ) {\n format.lineHeight = defaultStyle.lineHeight;\n }\n}\n\nfunction listLevelParser(\n format: ContentModelListItemLevelFormat,\n element: HTMLElement,\n context: DomToModelContext,\n defaultStyle: Readonly>\n): void {\n if (element.style.marginLeft != '') {\n format.marginLeft = defaultStyle.marginLeft;\n }\n\n format.marginBottom = undefined;\n}\n\nconst listItemElementParser: FormatParser = (\n format: ContentModelListItemFormat,\n element: HTMLElement\n): void => {\n if (element.style.marginLeft) {\n format.marginLeft = undefined;\n }\n if (element.style.marginRight) {\n format.marginRight = undefined;\n }\n};\n","import { safeInstanceOf } from 'roosterjs-editor-dom';\n\nconst MSO_COMMENT_ANCHOR_HREF_REGEX = /#_msocom_/;\nconst MSO_SPECIAL_CHARACTER = 'mso-special-character';\nconst MSO_SPECIAL_CHARACTER_COMMENT = 'comment';\nconst MSO_ELEMENT = 'mso-element';\nconst MSO_ELEMENT_COMMENT_LIST = 'comment-list';\n\n/**\n * @internal\n * Check whether the element contain Word attributes related to comments and if it does we should no process\n * this element.\n * @returns\n */\nexport function processWordComments(styles: Record, element: HTMLElement) {\n return (\n styles[MSO_SPECIAL_CHARACTER] == MSO_SPECIAL_CHARACTER_COMMENT ||\n (safeInstanceOf(element, 'HTMLAnchorElement') &&\n MSO_COMMENT_ANCHOR_HREF_REGEX.test(element.href)) ||\n styles[MSO_ELEMENT] == MSO_ELEMENT_COMMENT_LIST\n );\n}\n","import { addBlock, createListItem, parseFormat } from 'roosterjs-content-model-dom';\nimport { getStyles } from 'roosterjs-editor-dom';\nimport { NodeType } from 'roosterjs-editor-types';\nimport {\n ContentModelBlockGroup,\n ContentModelListItemLevelFormat,\n DomToModelContext,\n DomToModelListFormat,\n FormatParser,\n} from 'roosterjs-content-model-types';\n\n/** Word list metadata style name */\nconst MSO_LIST = 'mso-list';\nconst MSO_LIST_IGNORE = 'ignore';\nconst LOOKUP_DEPTH = 5;\nconst OL_TAG = 'OL';\nconst WORD_FIRST_LIST = 'l0';\n\ninterface WordDesktopListFormat extends DomToModelListFormat {\n wordLevel?: number | '';\n wordList?: string;\n wordKnownLevels?: Map;\n}\n\n/**\n * @internal\n * @param styles\n * @param group\n * @param element\n * @param context\n * @returns\n */\nexport function processWordList(\n styles: Record,\n group: ContentModelBlockGroup,\n element: HTMLElement,\n context: DomToModelContext\n) {\n const listFormat = context.listFormat as WordDesktopListFormat;\n if (!listFormat.wordKnownLevels) {\n listFormat.wordKnownLevels = new Map();\n }\n const wordListStyle = styles[MSO_LIST] || '';\n\n // If the element contains Ignore style, do not process it,\n // Usually this element contains the fake bullet used in Word Desktop.\n if (wordListStyle.toLowerCase() === MSO_LIST_IGNORE) {\n return true;\n }\n\n const listProps = wordListStyle.split(' ');\n // Try get the list metadata from word, which follows this format: l1 level1 lfo2\n // If we are able to get the level property means we can process this element to be a list\n listFormat.wordLevel = listProps[1] && parseInt(listProps[1].substr('level'.length));\n\n listFormat.wordList = listProps[0] || WORD_FIRST_LIST;\n if (listFormat.levels.length == 0) {\n listFormat.levels = listFormat.wordKnownLevels.get(listFormat.wordList) || [];\n }\n\n if (wordListStyle && group && typeof listFormat.wordLevel === 'number') {\n const { wordLevel } = listFormat;\n // Retrieve the Fake bullet on the element and also the list type\n const fakeBullet = getFakeBulletText(element);\n const listType = getFakeBulletTagName(fakeBullet);\n\n // Create the new level of the list item and parse the format\n const newLevel: ContentModelListItemLevelFormat = {\n listType,\n };\n parseFormat(element, context.formatParsers.listLevel, newLevel, context);\n\n // If the list format is in a different level, update the array so we get the new item\n // To be in the same level as the provided level metadata.\n if (wordLevel > listFormat.levels.length) {\n while (wordLevel != listFormat.levels.length) {\n listFormat.levels.push(newLevel);\n }\n } else {\n listFormat.levels.splice(wordLevel, listFormat.levels.length - 1);\n listFormat.levels[wordLevel - 1] = newLevel;\n }\n\n listFormat.listParent = group;\n\n processAsListItem(listFormat, context, element, group, fakeBullet);\n\n if (\n listFormat.levels.length > 0 &&\n listFormat.wordKnownLevels.get(listFormat.wordList) != listFormat.levels\n ) {\n listFormat.wordKnownLevels.set(listFormat.wordList, [...listFormat.levels]);\n }\n return true;\n }\n\n return false;\n}\n\nfunction processAsListItem(\n listFormat: WordDesktopListFormat,\n context: DomToModelContext,\n element: HTMLElement,\n group: ContentModelBlockGroup,\n fakeBullet: string\n) {\n const listItem = createListItem(listFormat.levels, context.segmentFormat);\n\n parseFormat(element, context.formatParsers.segmentOnBlock, context.segmentFormat, context);\n parseFormat(element, context.formatParsers.listItemElement, listItem.format, context);\n parseFormat(\n element,\n [startNumberOverrideParser(fakeBullet)],\n listItem.levels[listItem.levels.length - 1],\n context\n );\n\n context.elementProcessors.child(listItem, element, context);\n addBlock(group, listItem);\n}\n\nfunction startNumberOverrideParser(\n fakeBullet: string\n): FormatParser | null {\n return (format, _, context) => {\n const {\n wordKnownLevels,\n wordLevel,\n wordList,\n } = context.listFormat as WordDesktopListFormat;\n if (format.listType == OL_TAG && typeof wordLevel === 'number' && wordList) {\n const start = parseInt(fakeBullet);\n if (start != undefined && !isNaN(start) && !wordKnownLevels?.has(wordList)) {\n format.startNumberOverride = start;\n }\n }\n };\n}\n\n/**\n * Check whether the string is a fake bullet from word Desktop\n */\nfunction isFakeBullet(fakeBullet: string): boolean {\n return ['o', '·', '§', '-'].indexOf(fakeBullet) >= 0;\n}\n\n/** Given a fake bullet text, returns the type of list that should be used for it */\nfunction getFakeBulletTagName(fakeBullet: string): 'UL' | 'OL' {\n return isFakeBullet(fakeBullet) ? 'UL' : 'OL';\n}\n\n/**\n * Finds the fake bullet text out of the specified node and returns it. For images, it will return\n * a bullet string. If not found, it returns null...\n */\nfunction getFakeBulletText(node: Node, levels?: number): string {\n // Word uses the following format for their bullets:\n // <p style=\"mso-list:l1 level1 lfo2\">\n // <span style=\"...\">\n // <span style=\"mso-list:Ignore\">1.<span style=\"...\">      </span></span>\n // </span>\n // Content here...\n // </p>\n //\n // Basically, we need to locate the mso-list:Ignore SPAN, which holds either one text or image node. That\n // text or image node will be the fake bullet we are looking for\n let result: string = '';\n levels = levels || LOOKUP_DEPTH;\n let child: Node | null = node.firstChild;\n while (!result && child) {\n // Check if this is the node that holds the fake bullets (mso-list: Ignore)\n if (isIgnoreNode(child)) {\n // Yes... this is the node that holds either the text or image data\n result = child.textContent?.trim() ?? '';\n\n // This is the case for image case\n if (result.length == 0) {\n result = 'o';\n }\n } else if (child.nodeType == NodeType.Element && levels > 1) {\n // If this is an element and we are not in the last level, try to get the fake bullet\n // out of the child\n result = getFakeBulletText(child, levels - 1);\n }\n\n child = child.nextSibling;\n }\n\n return result;\n}\n/**\n * Checks if the specified node is marked as a mso-list: Ignore. These\n * nodes need to be ignored when a list item is converted into standard\n * HTML lists\n */\nfunction isIgnoreNode(node: Node): boolean {\n if (node.nodeType == NodeType.Element) {\n let listAttribute = getStyles(node as HTMLElement)[MSO_LIST];\n if (\n listAttribute &&\n listAttribute.length > 0 &&\n listAttribute.trim().toLowerCase() == MSO_LIST_IGNORE\n ) {\n return true;\n }\n }\n\n return false;\n}\n","import {\n ContentModelFormatMap,\n DomToModelOption,\n FormatParser,\n FormatParsersPerCategory,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport default function addParser(\n domToModelOption: DomToModelOption,\n entry: TKey,\n additionalFormatParsers: FormatParser\n) {\n if (!domToModelOption.additionalFormatParsers) {\n domToModelOption.additionalFormatParsers = {};\n }\n if (!domToModelOption.additionalFormatParsers[entry]) {\n domToModelOption.additionalFormatParsers[entry] = [];\n }\n\n domToModelOption.additionalFormatParsers[entry]?.push(additionalFormatParsers);\n}\n","import { chainSanitizerCallback } from 'roosterjs-editor-dom';\nimport { HtmlSanitizerOptions } from 'roosterjs-editor-types';\n\nconst DeprecatedColorList: string[] = [\n 'activeborder',\n 'activecaption',\n 'appworkspace',\n 'background',\n 'buttonhighlight',\n 'buttonshadow',\n 'captiontext',\n 'inactiveborder',\n 'inactivecaption',\n 'inactivecaptiontext',\n 'infobackground',\n 'infotext',\n 'menu',\n 'menutext',\n 'scrollbar',\n 'threeddarkshadow',\n 'threedface',\n 'threedhighlight',\n 'threedlightshadow',\n 'threedfhadow',\n 'window',\n 'windowframe',\n 'windowtext',\n];\n\n/**\n * @internal\n */\nexport function parseDeprecatedColor(sanitizingOption: Required) {\n ['color', 'background-color'].forEach(property => {\n chainSanitizerCallback(\n sanitizingOption.cssStyleCallbacks,\n property,\n (value: string) => DeprecatedColorList.indexOf(value) < 0\n );\n });\n}\n","import { ContentModelHyperLinkFormat, FormatParser } from 'roosterjs-content-model-types';\nimport { safeInstanceOf } from 'roosterjs-editor-dom';\n\nconst SUPPORTED_PROTOCOLS = ['http:', 'https:', 'notes:', 'mailto:', 'onenote:'];\nconst INVALID_LINKS_REGEX = /^file:\\/\\/\\/[a-zA-Z\\/]/i;\n\n/**\n * @internal\n */\nexport const parseLink: FormatParser = (format, element) => {\n if (!safeInstanceOf(element, 'HTMLAnchorElement')) {\n return;\n }\n\n let url: URL | undefined;\n try {\n url = new URL(element.href);\n } catch {\n url = undefined;\n }\n\n if (\n (url && SUPPORTED_PROTOCOLS.indexOf(url.protocol) === -1) ||\n INVALID_LINKS_REGEX.test(element.href)\n ) {\n element.removeAttribute('href');\n format.href = '';\n }\n};\n","import { DomToModelOption, ElementProcessorMap } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function setProcessor(\n domToModelOption: DomToModelOption,\n entry: TKey,\n processorOverride: Partial[TKey]\n) {\n if (!domToModelOption.processorOverride) {\n domToModelOption.processorOverride = {};\n }\n\n domToModelOption.processorOverride[entry] = processorOverride;\n}\n","import { ContentModelDocument } from 'roosterjs-content-model-types';\nimport { DeleteResult, OnDeleteEntity } from '../../modelApi/edit/utils/DeleteSelectionStep';\nimport { EntityOperationEvent, PluginEventType } from 'roosterjs-editor-types';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { normalizeContentModel } from 'roosterjs-content-model-dom';\n\n/**\n * @internal\n */\nexport function getOnDeleteEntityCallback(\n editor: IContentModelEditor,\n rawEvent?: KeyboardEvent,\n triggeredEntityEvents: EntityOperationEvent[] = []\n): OnDeleteEntity {\n return (entity, operation) => {\n if (entity.id && entity.type) {\n // Only trigger entity operation event when the same event was not triggered before.\n // TODO: This is a temporary solution as the event deletion is handled by both original EntityPlugin/EntityFeatures and ContentModel.\n // Later when Content Model can fully replace Content Edit Features, we can remove this check.\n if (!triggeredEntityEvents.some(x => x.entity.wrapper == entity.wrapper)) {\n editor.triggerPluginEvent(PluginEventType.EntityOperation, {\n entity: {\n id: entity.id,\n isReadonly: entity.isReadonly,\n type: entity.type,\n wrapper: entity.wrapper,\n },\n operation,\n rawEvent: rawEvent,\n });\n }\n }\n\n // If entity is still in editor and default behavior of event is prevented, that means plugin wants to keep this entity\n // Return true to tell caller we should keep it.\n return !!rawEvent?.defaultPrevented && editor.contains(entity.wrapper);\n };\n}\n\n/**\n * @internal\n * @return True means content is changed, so need to rewrite content model to editor. Otherwise false\n */\nexport function handleKeyboardEventResult(\n editor: IContentModelEditor,\n model: ContentModelDocument,\n rawEvent: KeyboardEvent,\n result: DeleteResult\n): boolean {\n switch (result) {\n case DeleteResult.NotDeleted:\n // We have not delete anything, we will let browser handle this event, so clear cached model if any since the content will be changed by browser\n editor.cacheContentModel(null);\n return false;\n\n case DeleteResult.NothingToDelete:\n // We known there is nothing to delete, no need to let browser keep handling the event\n rawEvent.preventDefault();\n return false;\n\n case DeleteResult.Range:\n case DeleteResult.SingleChar:\n // We have deleted what we need from content model, no need to let browser keep handling the event\n rawEvent.preventDefault();\n normalizeContentModel(model);\n\n if (result == DeleteResult.Range) {\n // A range is about to be deleted, so add an undo snapshot immediately\n editor.addUndoSnapshot();\n }\n\n // Trigger an event to let plugins know the content is about to be changed by Content Model keyboard editing.\n // So plugins can do proper handling. e.g. UndoPlugin can decide whether take a snapshot before this change happens.\n editor.triggerPluginEvent(PluginEventType.BeforeKeyboardEditing, {\n rawEvent,\n });\n\n return true;\n }\n}\n\n/**\n * @internal\n */\nexport function shouldDeleteWord(rawEvent: KeyboardEvent, isMac: boolean) {\n return (\n (isMac && rawEvent.altKey && !rawEvent.metaKey) ||\n (!isMac && rawEvent.ctrlKey && !rawEvent.altKey)\n );\n}\n\n/**\n * @internal\n */\nexport function shouldDeleteAllSegmentsBefore(rawEvent: KeyboardEvent) {\n return rawEvent.metaKey && !rawEvent.altKey;\n}\n","export * from './publicTypes/index';\nexport * from './publicApi/index';\n\nexport { default as ContentModelEditor } from './editor/ContentModelEditor';\nexport { default as isContentModelEditor } from './editor/isContentModelEditor';\nexport { default as ContentModelFormatPlugin } from './editor/plugins/ContentModelFormatPlugin';\nexport { default as ContentModelEditPlugin } from './editor/plugins/ContentModelEditPlugin';\nexport { default as ContentModelPastePlugin } from './editor/plugins/PastePlugin/ContentModelPastePlugin';\nexport { default as ContentModelTypeInContainerPlugin } from './editor/corePlugins/ContentModelTypeInContainerPlugin';\nexport { default as ContentModelCopyPastePlugin } from './editor/corePlugins/ContentModelCopyPastePlugin';\nexport {\n createContentModelEditorCore,\n promoteToContentModelEditorCore,\n} from './editor/createContentModelEditorCore';\nexport { combineBorderValue, extractBorderValues } from './domUtils/borderValues';\nexport { updateImageMetadata } from './domUtils/metadata/updateImageMetadata';\nexport { updateTableCellMetadata } from './domUtils/metadata/updateTableCellMetadata';\nexport { updateTableMetadata } from './domUtils/metadata/updateTableMetadata';\n\nexport { IContentModelEditor, ContentModelEditorOptions } from './publicTypes/IContentModelEditor';\n","import { isGeneralSegment } from 'roosterjs-content-model-dom';\nimport {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelParagraph,\n ContentModelSegment,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport type BlockAndPath = {\n /**\n * The sibling block\n */\n block: ContentModelBlock;\n\n /**\n * Path of this sibling block\n */\n path: ContentModelBlockGroup[];\n\n /**\n * If the input block is under a general segment, it is possible there are sibling segments under the same paragraph.\n * Use this property to return the sibling sibling under the same paragraph\n */\n siblingSegment?: ContentModelSegment;\n};\n\n/**\n * @internal\n */\nexport function getLeafSiblingBlock(\n path: ContentModelBlockGroup[],\n block: ContentModelBlock,\n isNext: boolean\n): BlockAndPath | null {\n const newPath = [...path];\n\n while (newPath.length > 0) {\n let group = newPath[0];\n const index = group.blocks.indexOf(block);\n\n if (index < 0) {\n break;\n }\n\n let nextBlock = group.blocks[index + (isNext ? 1 : -1)];\n\n if (nextBlock) {\n while (nextBlock.blockType == 'BlockGroup') {\n const child = nextBlock.blocks[isNext ? 0 : nextBlock.blocks.length - 1];\n\n if (!child) {\n return { block: nextBlock, path: newPath };\n } else if (child.blockType != 'BlockGroup') {\n newPath.unshift(nextBlock);\n return { block: child, path: newPath };\n } else {\n newPath.unshift(nextBlock);\n nextBlock = child;\n }\n }\n\n return { block: nextBlock, path: newPath };\n } else if (isGeneralSegment(group)) {\n // For general segment, we need to check if there is sibling segment under the same paragraph\n // First let's find the parent paragraph of this segment\n newPath.shift();\n\n let segmentIndex = -1;\n const segment = group;\n const para = newPath[0]?.blocks.find(\n x => x.blockType == 'Paragraph' && (segmentIndex = x.segments.indexOf(segment)) >= 0\n ) as ContentModelParagraph;\n\n if (para) {\n // Now we have found the parent paragraph, so let's check if it has a sibling segment\n const siblingSegment = para.segments[segmentIndex + (isNext ? 1 : -1)];\n\n if (siblingSegment) {\n // Return this block, path and segment since we have found it\n return { block: para, path: newPath, siblingSegment };\n } else {\n // No sibling segment, let's keep go upper level\n block = para;\n }\n } else {\n // Parent sibling is not found (in theory this should never happen), just return null\n break;\n }\n } else if (group.blockGroupType != 'Document' && group.blockGroupType != 'TableCell') {\n newPath.shift();\n block = group;\n } else {\n break;\n }\n }\n\n return null;\n}\n","import { alignTable } from '../table/alignTable';\nimport { ContentModelDocument, ContentModelListItem } from 'roosterjs-content-model-types';\nimport { getOperationalBlocks } from '../selection/collectSelections';\nimport { TableOperation } from 'roosterjs-editor-types';\n\nconst ResultMap: Record<\n 'left' | 'center' | 'right',\n Record<'ltr' | 'rtl', 'start' | 'center' | 'end'>\n> = {\n left: {\n ltr: 'start',\n rtl: 'end',\n },\n center: {\n ltr: 'center',\n rtl: 'center',\n },\n right: {\n ltr: 'end',\n rtl: 'start',\n },\n};\n\nconst TableAlignMap: Record<\n 'left' | 'center' | 'right',\n Record<\n 'ltr' | 'rtl',\n TableOperation.AlignLeft | TableOperation.AlignCenter | TableOperation.AlignRight\n >\n> = {\n left: {\n ltr: TableOperation.AlignLeft,\n rtl: TableOperation.AlignRight,\n },\n center: {\n ltr: TableOperation.AlignCenter,\n rtl: TableOperation.AlignCenter,\n },\n right: {\n ltr: TableOperation.AlignRight,\n rtl: TableOperation.AlignLeft,\n },\n};\n\n/**\n * @internal\n */\nexport function setModelAlignment(\n model: ContentModelDocument,\n alignment: 'left' | 'center' | 'right'\n) {\n const paragraphOrListItemOrTable = getOperationalBlocks(\n model,\n ['ListItem'],\n ['TableCell']\n );\n\n paragraphOrListItemOrTable.forEach(({ block }) => {\n const newAligment = ResultMap[alignment][block.format.direction == 'rtl' ? 'rtl' : 'ltr'];\n if (block.blockType === 'Table') {\n alignTable(\n block,\n TableAlignMap[alignment][block.format.direction == 'rtl' ? 'rtl' : 'ltr']\n );\n } else if (block) {\n const { format } = block;\n format.textAlign = newAligment;\n }\n });\n\n return paragraphOrListItemOrTable.length > 0;\n}\n","import { getOperationalBlocks } from '../selection/collectSelections';\nimport { isBlockGroupOfType } from '../common/isBlockGroupOfType';\nimport { parseValueWithUnit } from 'roosterjs-content-model-dom';\nimport {\n ContentModelDocument,\n ContentModelListItem,\n ContentModelListItemLevelFormat,\n} from 'roosterjs-content-model-types';\n\nconst IndentStepInPixel = 40;\n\n/**\n * @internal\n */\nexport function setModelIndentation(\n model: ContentModelDocument,\n indentation: 'indent' | 'outdent',\n length: number = IndentStepInPixel\n) {\n const paragraphOrListItem = getOperationalBlocks(\n model,\n ['ListItem'],\n ['TableCell']\n );\n const isIndent = indentation == 'indent';\n\n paragraphOrListItem.forEach(({ block }) => {\n if (isBlockGroupOfType(block, 'ListItem')) {\n if (isIndent) {\n const newLevel: ContentModelListItemLevelFormat = {\n ...block.levels[block.levels.length - 1],\n };\n\n // New level is totally new, no need to have these attributes for now\n delete newLevel.startNumberOverride;\n delete newLevel.orderedStyleType;\n delete newLevel.unorderedStyleType;\n\n block.levels.push(newLevel);\n } else {\n block.levels.pop();\n }\n } else if (block) {\n const { format } = block;\n const { marginLeft, marginRight, direction } = format;\n const isRtl = direction == 'rtl';\n const originalValue = parseValueWithUnit(isRtl ? marginRight : marginLeft);\n let newValue = (isIndent ? Math.ceil : Math.floor)(originalValue / length) * length;\n\n if (newValue == originalValue) {\n newValue = Math.max(newValue + length * (isIndent ? 1 : -1), 0);\n }\n\n if (isRtl) {\n format.marginRight = newValue + 'px';\n } else {\n format.marginLeft = newValue + 'px';\n }\n }\n });\n\n return paragraphOrListItem.length > 0;\n}\n","import { areSameFormats, createFormatContainer, unwrapBlock } from 'roosterjs-content-model-dom';\nimport { getOperationalBlocks, OperationalBlocks } from '../selection/collectSelections';\nimport { isBlockGroupOfType } from '../common/isBlockGroupOfType';\nimport { wrapBlockStep1, WrapBlockStep1Result, wrapBlockStep2 } from '../common/wrapBlock';\nimport {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelDocument,\n ContentModelFormatContainer,\n ContentModelFormatContainerFormat,\n ContentModelListItem,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function toggleModelBlockQuote(\n model: ContentModelDocument,\n format: ContentModelFormatContainerFormat\n): boolean {\n const paragraphOfQuote = getOperationalBlocks<\n ContentModelFormatContainer | ContentModelListItem\n >(model, ['FormatContainer', 'ListItem'], ['TableCell'], true /*deepFirst*/);\n\n if (areAllBlockQuotes(paragraphOfQuote)) {\n // All selections are already in quote, we need to unquote them\n paragraphOfQuote.forEach(({ block, parent }) => {\n unwrapBlock(parent, block);\n });\n } else {\n const step1Results: WrapBlockStep1Result[] = [];\n const creator = () => createFormatContainer('blockquote', format);\n const canMerge = (\n target: ContentModelBlock,\n current?: ContentModelFormatContainer\n ): target is ContentModelFormatContainer =>\n canMergeQuote(target, current?.format || format);\n\n paragraphOfQuote.forEach(({ block, parent }) => {\n if (isQuote(block)) {\n // Already in quote, no op\n } else {\n wrapBlockStep1(step1Results, parent, block, creator, canMerge);\n }\n });\n\n wrapBlockStep2(step1Results, canMerge);\n }\n\n return paragraphOfQuote.length > 0;\n}\n\nfunction canMergeQuote(\n target: ContentModelBlock,\n format: ContentModelFormatContainerFormat\n): target is ContentModelFormatContainer {\n return isQuote(target) && areSameFormats(format, target.format);\n}\n\nfunction isQuote(block: ContentModelBlock): block is ContentModelFormatContainer {\n return (\n isBlockGroupOfType(block, 'FormatContainer') &&\n block.tagName == 'blockquote'\n );\n}\n\nfunction areAllBlockQuotes(\n blockAndParents: OperationalBlocks[]\n): blockAndParents is { block: ContentModelFormatContainer; parent: ContentModelBlockGroup }[] {\n return blockAndParents.every(blockAndParent => isQuote(blockAndParent.block));\n}\n","import { adjustWordSelection } from '../selection/adjustWordSelection';\nimport { applyTableFormat } from '../table/applyTableFormat';\nimport { arrayPush } from 'roosterjs-editor-dom';\nimport { createFormatContainer } from 'roosterjs-content-model-dom';\nimport { getClosestAncestorBlockGroupIndex } from './getClosestAncestorBlockGroupIndex';\nimport { iterateSelections } from '../selection/iterateSelections';\nimport { TableSelectionContext } from '../../publicTypes/selection/TableSelectionContext';\nimport { updateTableCellMetadata } from '../../domUtils/metadata/updateTableCellMetadata';\nimport { updateTableMetadata } from '../../domUtils/metadata/updateTableMetadata';\nimport {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelDocument,\n ContentModelFormatContainer,\n ContentModelListItem,\n ContentModelSegment,\n ContentModelSegmentFormat,\n ContentModelTable,\n Selectable,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function clearModelFormat(\n model: ContentModelDocument,\n blocksToClear: [ContentModelBlockGroup[], ContentModelBlock][],\n segmentsToClear: ContentModelSegment[],\n tablesToClear: [ContentModelTable, boolean][]\n) {\n iterateSelections(\n [model],\n (path, tableContext, block, segments) => {\n if (segments) {\n arrayPush(segmentsToClear, segments);\n }\n\n if (block) {\n blocksToClear.push([path, block]);\n } else if (tableContext) {\n clearTableCellFormat(tableContext, tablesToClear);\n }\n },\n {\n // When there is a default format to apply, we know how to handle segment format under list.\n // So no need to clear format of list number.\n // Otherwise, we will clear all format of selected text. And since they are under LI tag, we\n // also need to clear the format of LI (format holder) so that the format is really cleared\n includeListFormatHolder: model.format ? 'never' : 'anySegment',\n }\n );\n\n const marker = segmentsToClear[0];\n\n // 2. If selection is collapsed, add selection to whole word to clear if any\n if (\n blocksToClear.length == 1 &&\n isOnlySelectionMarkerSelected(blocksToClear[0][1]) &&\n blocksToClear.length == 1\n ) {\n segmentsToClear.splice(0, segmentsToClear.length, ...adjustWordSelection(model, marker));\n clearListFormat(blocksToClear[0][0]);\n } else if (blocksToClear.length > 1 || blocksToClear.some(x => isWholeBlockSelected(x[1]))) {\n // 2. If a full block or multiple blocks are selected, clear block format\n for (let i = blocksToClear.length - 1; i >= 0; i--) {\n const [path, block] = blocksToClear[i];\n\n clearBlockFormat(path, block);\n clearListFormat(path);\n clearContainerFormat(path, block);\n }\n }\n\n // 3. Finally clear format for segments\n clearSegmentsFormat(segmentsToClear, model.format);\n\n // 4. Clear format for table if any\n createTablesFormat(tablesToClear);\n}\n\nfunction createTablesFormat(tablesToClear: [ContentModelTable, boolean][]) {\n tablesToClear.forEach(x => {\n const [table, isWholeTableSelected] = x;\n if (isWholeTableSelected) {\n table.format = {\n useBorderBox: table.format.useBorderBox,\n borderCollapse: table.format.borderCollapse,\n };\n updateTableMetadata(table, () => null);\n }\n\n applyTableFormat(table, undefined /*newFormat*/, true);\n });\n}\n\nfunction clearSegmentsFormat(\n segmentsToClear: ContentModelSegment[],\n defaultSegmentFormat: ContentModelSegmentFormat | undefined\n) {\n segmentsToClear.forEach(x => {\n x.format = { ...(defaultSegmentFormat || {}) };\n\n if (x.link) {\n delete x.link.format.textColor;\n }\n\n delete x.code;\n });\n}\n\nfunction clearTableCellFormat(\n tableContext: TableSelectionContext | undefined,\n tablesToClear: [ContentModelTable, boolean][]\n) {\n if (tableContext) {\n const { table, colIndex, rowIndex, isWholeTableSelected } = tableContext;\n const cell = table.rows[rowIndex].cells[colIndex];\n\n if (cell.isSelected) {\n updateTableCellMetadata(cell, () => null);\n cell.isHeader = false;\n cell.format = {\n useBorderBox: cell.format.useBorderBox,\n };\n }\n\n if (!tablesToClear.find(x => x[0] == table)) {\n tablesToClear.push([table, isWholeTableSelected]);\n }\n }\n}\n\nfunction clearContainerFormat(path: ContentModelBlockGroup[], block: ContentModelBlock) {\n const containerPathIndex = getClosestAncestorBlockGroupIndex(\n path,\n ['FormatContainer'],\n ['TableCell']\n );\n\n if (containerPathIndex >= 0 && containerPathIndex < path.length - 1) {\n const container = path[containerPathIndex] as ContentModelFormatContainer;\n const containerIndex = path[containerPathIndex + 1].blocks.indexOf(container);\n const blockIndex = container.blocks.indexOf(block);\n\n if (blockIndex >= 0 && containerIndex >= 0) {\n const newContainer = createFormatContainer(container.tagName, container.format);\n\n container.blocks.splice(blockIndex, 1);\n newContainer.blocks = container.blocks.splice(blockIndex);\n\n path[containerPathIndex + 1].blocks.splice(containerIndex + 1, 0, block, newContainer);\n }\n }\n}\n\nfunction clearListFormat(path: ContentModelBlockGroup[]) {\n const listItem = path[getClosestAncestorBlockGroupIndex(path, ['ListItem'], ['TableCell'])] as\n | ContentModelListItem\n | undefined;\n\n if (listItem) {\n listItem.levels = [];\n }\n}\n\nfunction clearBlockFormat(path: ContentModelBlockGroup[], block: ContentModelBlock) {\n if (block.blockType == 'Divider') {\n const index = path[0].blocks.indexOf(block);\n\n if (index >= 0) {\n path[0].blocks.splice(index, 1);\n }\n } else if (block.blockType == 'Paragraph') {\n block.format = {};\n delete block.decorator;\n }\n}\n\nfunction isOnlySelectionMarkerSelected(block: ContentModelBlock) {\n const segments = block.blockType == 'Paragraph' ? block.segments.filter(x => x.isSelected) : [];\n\n return segments.length == 1 && segments[0].segmentType == 'SelectionMarker';\n}\n\nfunction isWholeBlockSelected(block: ContentModelBlock) {\n return (\n (block as Selectable).isSelected ||\n (block.blockType == 'Paragraph' && block.segments.every(x => x.isSelected))\n );\n}\n","import type {\n ContentModelBlock,\n ContentModelBlockBase,\n ContentModelBlockGroupBase,\n ContentModelBlockGroupType,\n ContentModelBlockType,\n ContentModelDivider,\n ContentModelDocument,\n ContentModelEntity,\n ContentModelFormatBase,\n ContentModelFormatContainer,\n ContentModelGeneralBlock,\n ContentModelImage,\n ContentModelListItem,\n ContentModelParagraph,\n ContentModelSegment,\n ContentModelSegmentBase,\n ContentModelSegmentType,\n ContentModelSelectionMarker,\n ContentModelTable,\n ContentModelTableCell,\n ContentModelWithDataset,\n ContentModelWithFormat,\n ContentModelGeneralSegment,\n ContentModelText,\n ContentModelTableRow,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function cloneModel(model: ContentModelDocument): ContentModelDocument {\n const newModel: ContentModelDocument = cloneBlockGroupBase(model);\n\n if (model.format) {\n newModel.format = Object.assign({}, model.format);\n }\n\n return newModel;\n}\n\nfunction cloneBlock(block: ContentModelBlock): ContentModelBlock {\n switch (block.blockType) {\n case 'BlockGroup':\n switch (block.blockGroupType) {\n case 'FormatContainer':\n return cloneFormatContainer(block);\n case 'General':\n return cloneGeneralBlock(block);\n case 'ListItem':\n return cloneListItem(block);\n }\n break;\n case 'Divider':\n return cloneDivider(block);\n case 'Entity':\n return cloneEntity(block);\n case 'Paragraph':\n return cloneParagraph(block);\n case 'Table':\n return cloneTable(block);\n }\n}\n\nfunction cloneSegment(segment: ContentModelSegment): ContentModelSegment {\n switch (segment.segmentType) {\n case 'Br':\n return cloneSegmentBase(segment);\n case 'Entity':\n return cloneEntity(segment);\n case 'General':\n return cloneGeneralSegment(segment);\n case 'Image':\n return cloneImage(segment);\n case 'SelectionMarker':\n return cloneSelectionMarker(segment);\n case 'Text':\n return cloneText(segment);\n }\n}\n\nfunction cloneModelWithFormat(\n model: ContentModelWithFormat\n): ContentModelWithFormat {\n return {\n format: Object.assign({}, model.format),\n };\n}\n\nfunction cloneModelWithDataset(model: ContentModelWithDataset): ContentModelWithDataset {\n return {\n dataset: Object.assign({}, model.dataset),\n };\n}\n\nfunction cloneBlockBase(\n block: ContentModelBlockBase\n): ContentModelBlockBase {\n const { blockType } = block;\n\n return Object.assign(\n {\n blockType,\n },\n cloneModelWithFormat(block)\n );\n}\n\nfunction cloneBlockGroupBase(\n group: ContentModelBlockGroupBase\n): ContentModelBlockGroupBase {\n const { blockGroupType, blocks } = group;\n\n return {\n blockGroupType: blockGroupType,\n blocks: blocks.map(cloneBlock),\n };\n}\n\nfunction cloneSegmentBase(\n segment: ContentModelSegmentBase\n): ContentModelSegmentBase {\n const { segmentType, isSelected, code, link } = segment;\n\n const newSegment: ContentModelSegmentBase = Object.assign(\n {\n segmentType,\n isSelected,\n },\n cloneModelWithFormat(segment)\n );\n\n if (code) {\n newSegment.code = cloneModelWithFormat(code);\n }\n if (link) {\n newSegment.link = Object.assign(cloneModelWithFormat(link), cloneModelWithDataset(link));\n }\n\n return newSegment;\n}\n\nfunction cloneEntity(entity: ContentModelEntity): ContentModelEntity {\n const { wrapper, isReadonly, type, id } = entity;\n\n return Object.assign(\n { wrapper, isReadonly, type, id },\n cloneBlockBase(entity),\n cloneSegmentBase(entity)\n );\n}\n\nfunction cloneParagraph(paragraph: ContentModelParagraph): ContentModelParagraph {\n const { cachedElement, segments, isImplicit, decorator, segmentFormat } = paragraph;\n\n const newParagraph: ContentModelParagraph = Object.assign(\n {\n cachedElement,\n isImplicit,\n segments: segments.map(cloneSegment),\n segmentFormat: segmentFormat ? { ...segmentFormat } : undefined,\n },\n cloneBlockBase(paragraph),\n cloneModelWithFormat(paragraph)\n );\n\n if (decorator) {\n newParagraph.decorator = Object.assign(\n {\n tagName: decorator.tagName,\n },\n cloneModelWithFormat(decorator)\n );\n }\n\n return newParagraph;\n}\n\nfunction cloneTable(table: ContentModelTable): ContentModelTable {\n const { cachedElement, widths, rows } = table;\n\n return Object.assign(\n {\n cachedElement,\n widths: Array.from(widths),\n rows: rows.map(cloneTableRow),\n },\n cloneBlockBase(table),\n cloneModelWithDataset(table)\n );\n}\n\nfunction cloneTableRow(row: ContentModelTableRow): ContentModelTableRow {\n const { height, cells, cachedElement } = row;\n\n return Object.assign(\n {\n height,\n cachedElement,\n cells: cells.map(cloneTableCell),\n },\n cloneModelWithFormat(row)\n );\n}\n\nfunction cloneTableCell(cell: ContentModelTableCell): ContentModelTableCell {\n const { cachedElement, isSelected, spanAbove, spanLeft, isHeader } = cell;\n\n return Object.assign(\n { cachedElement, isSelected, spanAbove, spanLeft, isHeader },\n cloneBlockGroupBase(cell),\n cloneModelWithFormat(cell),\n cloneModelWithDataset(cell)\n );\n}\n\nfunction cloneFormatContainer(container: ContentModelFormatContainer): ContentModelFormatContainer {\n const { tagName, cachedElement } = container;\n const newContainer: ContentModelFormatContainer = Object.assign(\n { tagName, cachedElement },\n cloneBlockBase(container),\n cloneBlockGroupBase(container)\n );\n\n if (container.zeroFontSize) {\n newContainer.zeroFontSize = true;\n }\n\n return newContainer;\n}\n\nfunction cloneListItem(item: ContentModelListItem): ContentModelListItem {\n const { formatHolder, levels } = item;\n\n return Object.assign(\n {\n formatHolder: cloneSelectionMarker(formatHolder),\n levels: levels.map(x => Object.assign({}, x)),\n },\n cloneBlockBase(item),\n cloneBlockGroupBase(item)\n );\n}\n\nfunction cloneDivider(divider: ContentModelDivider): ContentModelDivider {\n const { tagName, isSelected, cachedElement } = divider;\n\n return Object.assign({ isSelected, tagName, cachedElement }, cloneBlockBase(divider));\n}\n\nfunction cloneGeneralBlock(general: ContentModelGeneralBlock): ContentModelGeneralBlock {\n const { element } = general;\n\n return Object.assign({ element }, cloneBlockBase(general), cloneBlockGroupBase(general));\n}\n\nfunction cloneSelectionMarker(marker: ContentModelSelectionMarker): ContentModelSelectionMarker {\n return Object.assign({ isSelected: marker.isSelected }, cloneSegmentBase(marker));\n}\n\nfunction cloneImage(image: ContentModelImage): ContentModelImage {\n const { src, alt, title, isSelectedAsImageSelection } = image;\n\n return Object.assign(\n { src, alt, title, isSelectedAsImageSelection },\n cloneSegmentBase(image),\n cloneModelWithDataset(image)\n );\n}\n\nfunction cloneGeneralSegment(general: ContentModelGeneralSegment): ContentModelGeneralSegment {\n return Object.assign(cloneGeneralBlock(general), cloneSegmentBase(general));\n}\n\nfunction cloneText(textSegment: ContentModelText): ContentModelText {\n const { text } = textSegment;\n return Object.assign({ text }, cloneSegmentBase(textSegment));\n}\n","import {\n ContentModelBlockGroup,\n ContentModelBlockGroupBase,\n ContentModelBlockGroupType,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport type TypeOfBlockGroup<\n T extends ContentModelBlockGroup\n> = T extends ContentModelBlockGroupBase ? U : never;\n\n/**\n * @internal\n */\nexport function getClosestAncestorBlockGroupIndex(\n path: ContentModelBlockGroup[],\n blockGroupTypes: TypeOfBlockGroup[],\n stopTypes: ContentModelBlockGroupType[] = []\n): number {\n for (let i = 0; i < path.length; i++) {\n const group = path[i];\n\n if ((blockGroupTypes as string[]).indexOf(group.blockGroupType) >= 0) {\n return i;\n } else if (stopTypes.indexOf(group.blockGroupType) >= 0) {\n // Do not go across boundary specified by stopTypes.\n // For example, in most case we will set table as the boundary,\n // in order to allow modify list item under a table when the table itself is in another list item\n // Although this is not very likely to happen in most case, but we still need to handle it\n return -1;\n }\n }\n\n return -1;\n}\n","import { ContentModelBlock, ContentModelBlockGroup } from 'roosterjs-content-model-types';\nimport { TypeOfBlockGroup } from './getClosestAncestorBlockGroupIndex';\n\n/**\n * @internal\n */\nexport function isBlockGroupOfType(\n input: ContentModelBlock | ContentModelBlockGroup | null | undefined,\n type: TypeOfBlockGroup\n): input is T {\n const item = input;\n\n return item?.blockGroupType == type;\n}\n","import { addSegment } from 'roosterjs-content-model-dom';\nimport { applyTableFormat } from '../table/applyTableFormat';\nimport { deleteSelection } from '../edit/deleteSelection';\nimport { getClosestAncestorBlockGroupIndex } from './getClosestAncestorBlockGroupIndex';\nimport { InsertPoint } from '../../publicTypes/selection/InsertPoint';\nimport { normalizeTable } from '../table/normalizeTable';\nimport { OnDeleteEntity } from '../edit/utils/DeleteSelectionStep';\nimport {\n createListItem,\n createParagraph,\n createSelectionMarker,\n createTableCell,\n normalizeContentModel,\n} from 'roosterjs-content-model-dom';\nimport {\n ContentModelBlock,\n ContentModelBlockFormat,\n ContentModelBlockGroup,\n ContentModelDocument,\n ContentModelListItem,\n ContentModelParagraph,\n ContentModelSegmentFormat,\n ContentModelTable,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Options to specify how to merge models\n */\nexport interface MergeModelOption {\n /**\n * When there is only a table to merge, whether merge this table into current table (if any), or just directly insert (nested table).\n * This is usually used when paste table inside a table\n * @default false\n */\n mergeTable?: boolean;\n\n /**\n * Use this insert position to merge instead of querying selection from target model\n * @default undefined\n */\n insertPosition?: InsertPoint;\n\n /**\n * Use this to decide whether to change the source model format when doing the merge.\n * 'mergeAll': segment format of the insert position will be merged into the content that is merged into current model.\n * If the source model already has some format, it will not be overwritten.\n * 'keepSourceEmphasisFormat': format of the insert position will be set into the content that is merged into current model.\n * If the source model already has emphasis format, such as, fontWeight, Italic or underline different than the default style, it will not be overwritten.\n * 'none' the source segment format will not be modified.\n * @default undefined\n */\n mergeFormat?: 'mergeAll' | 'keepSourceEmphasisFormat' | 'none';\n}\n\n/**\n * @internal\n */\nexport function mergeModel(\n target: ContentModelDocument,\n source: ContentModelDocument,\n onDeleteEntity: OnDeleteEntity,\n options?: MergeModelOption\n) {\n const insertPosition =\n options?.insertPosition ?? deleteSelection(target, onDeleteEntity).insertPoint;\n\n if (insertPosition) {\n if (options?.mergeFormat && options.mergeFormat != 'none') {\n const newFormat: ContentModelSegmentFormat = {\n ...(target.format || {}),\n ...insertPosition.marker.format,\n };\n\n applyDefaultFormat(source, newFormat, options?.mergeFormat);\n }\n\n for (let i = 0; i < source.blocks.length; i++) {\n const block = source.blocks[i];\n\n switch (block.blockType) {\n case 'Paragraph':\n mergeParagraph(insertPosition, block, i == 0);\n break;\n\n case 'Divider':\n case 'Entity':\n insertBlock(insertPosition, block);\n break;\n\n case 'Table':\n if (source.blocks.length == 1 && options?.mergeTable) {\n mergeTable(insertPosition, block, source);\n } else {\n insertBlock(insertPosition, block);\n }\n break;\n\n case 'BlockGroup':\n switch (block.blockGroupType) {\n case 'General':\n case 'FormatContainer':\n insertBlock(insertPosition, block);\n break;\n case 'ListItem':\n mergeList(insertPosition, block);\n break;\n }\n break;\n }\n }\n }\n\n normalizeContentModel(target);\n}\n\nfunction mergeParagraph(\n markerPosition: InsertPoint,\n newPara: ContentModelParagraph,\n mergeToCurrentParagraph: boolean\n) {\n const { paragraph, marker } = markerPosition;\n const newParagraph = mergeToCurrentParagraph\n ? paragraph\n : splitParagraph(markerPosition, newPara.format);\n const segmentIndex = newParagraph.segments.indexOf(marker);\n\n if (segmentIndex >= 0) {\n newParagraph.segments.splice(segmentIndex, 0, ...newPara.segments);\n }\n\n if (newPara.decorator) {\n newParagraph.decorator = { ...newPara.decorator };\n }\n}\n\nfunction mergeTable(\n markerPosition: InsertPoint,\n newTable: ContentModelTable,\n source: ContentModelDocument\n) {\n const { tableContext } = markerPosition;\n\n if (tableContext && source.blocks.length == 1 && source.blocks[0] == newTable) {\n const { table, colIndex, rowIndex } = tableContext;\n for (let i = 0; i < newTable.rows.length; i++) {\n for (let j = 0; j < newTable.rows[i].cells.length; j++) {\n const newCell = newTable.rows[i].cells[j];\n\n if (i == 0 && colIndex + j >= table.rows[0].cells.length) {\n for (let k = 0; k < table.rows.length; k++) {\n const leftCell = table.rows[k]?.cells[colIndex + j - 1];\n table.rows[k].cells[colIndex + j] = createTableCell(\n false /*spanLeft*/,\n false /*spanAbove*/,\n leftCell?.isHeader,\n leftCell?.format\n );\n }\n }\n\n if (j == 0 && rowIndex + i >= table.rows.length) {\n if (!table.rows[rowIndex + i]) {\n table.rows[rowIndex + i] = {\n cells: [],\n format: {},\n height: 0,\n };\n }\n\n for (let k = 0; k < table.rows[rowIndex].cells.length; k++) {\n const aboveCell = table.rows[rowIndex + i - 1]?.cells[k];\n table.rows[rowIndex + i].cells[k] = createTableCell(\n false /*spanLeft*/,\n false /*spanAbove*/,\n false /*isHeader*/,\n aboveCell?.format\n );\n }\n }\n\n table.rows[rowIndex + i].cells[colIndex + j] = newCell;\n\n if (i == 0 && j == 0) {\n addSegment(newCell, createSelectionMarker());\n }\n }\n }\n\n normalizeTable(table, markerPosition.marker.format);\n applyTableFormat(table, undefined /*newFormat*/, true /*keepCellShade*/);\n } else {\n insertBlock(markerPosition, newTable);\n }\n}\n\nfunction mergeList(markerPosition: InsertPoint, newList: ContentModelListItem) {\n splitParagraph(markerPosition, newList.format);\n\n const { path, paragraph } = markerPosition;\n\n const listItemIndex = getClosestAncestorBlockGroupIndex(path, ['ListItem']);\n const listItem = path[listItemIndex] as ContentModelListItem;\n const listParent = path[listItemIndex + 1]; // It is ok here when index is -1, that means there is no list and we just insert a new paragraph and use path[0] as its parent\n const blockIndex = listParent.blocks.indexOf(listItem || paragraph);\n\n if (blockIndex >= 0) {\n listParent.blocks.splice(blockIndex, 0, newList);\n }\n\n if (listItem) {\n listItem?.levels.forEach((level, i) => {\n newList.levels[i] = { ...level };\n });\n }\n}\n\nfunction splitParagraph(markerPosition: InsertPoint, newParaFormat: ContentModelBlockFormat) {\n const { paragraph, marker, path } = markerPosition;\n const segmentIndex = paragraph.segments.indexOf(marker);\n const paraIndex = path[0].blocks.indexOf(paragraph);\n const newParagraph = createParagraph(\n false /*isImplicit*/,\n { ...paragraph.format, ...newParaFormat },\n paragraph.segmentFormat\n );\n\n if (segmentIndex >= 0) {\n newParagraph.segments = paragraph.segments.splice(segmentIndex);\n }\n\n if (paraIndex >= 0) {\n path[0].blocks.splice(paraIndex + 1, 0, newParagraph);\n }\n\n const listItemIndex = getClosestAncestorBlockGroupIndex(\n path,\n ['ListItem'],\n ['FormatContainer', 'TableCell']\n );\n const listItem = path[listItemIndex] as ContentModelListItem;\n\n if (listItem) {\n const listParent = listItemIndex >= 0 ? path[listItemIndex + 1] : null;\n const blockIndex = listParent ? listParent.blocks.indexOf(listItem) : -1;\n\n if (blockIndex >= 0 && listParent) {\n const newListItem = createListItem(listItem.levels, listItem.formatHolder.format);\n\n if (paraIndex >= 0) {\n newListItem.blocks = listItem.blocks.splice(paraIndex + 1);\n }\n\n if (blockIndex >= 0) {\n listParent.blocks.splice(blockIndex + 1, 0, newListItem);\n }\n\n path[listItemIndex] = newListItem;\n }\n }\n\n markerPosition.paragraph = newParagraph;\n\n return newParagraph;\n}\n\nfunction insertBlock(markerPosition: InsertPoint, block: ContentModelBlock) {\n const { path } = markerPosition;\n const newPara = splitParagraph(markerPosition, block.format);\n const blockIndex = path[0].blocks.indexOf(newPara);\n\n if (blockIndex >= 0) {\n path[0].blocks.splice(blockIndex, 0, block);\n }\n}\n\nfunction applyDefaultFormat(\n group: ContentModelBlockGroup,\n format: ContentModelSegmentFormat,\n applyDefaultFormatOption: 'mergeAll' | 'keepSourceEmphasisFormat'\n) {\n group.blocks.forEach(block => {\n switch (block.blockType) {\n case 'BlockGroup':\n if (block.blockGroupType == 'ListItem') {\n block.formatHolder.format = mergeSegmentFormat(\n applyDefaultFormatOption,\n format,\n block.formatHolder.format\n );\n }\n applyDefaultFormat(block, format, applyDefaultFormatOption);\n break;\n\n case 'Table':\n block.rows.forEach(row =>\n row.cells.forEach(cell => {\n applyDefaultFormat(cell, format, applyDefaultFormatOption);\n })\n );\n break;\n\n case 'Paragraph':\n const paragraphFormat = block.decorator?.format || {};\n block.segments.forEach(segment => {\n if (segment.segmentType == 'General') {\n applyDefaultFormat(segment, format, applyDefaultFormatOption);\n }\n\n segment.format = mergeSegmentFormat(applyDefaultFormatOption, format, {\n ...paragraphFormat,\n ...segment.format,\n });\n });\n\n if (applyDefaultFormatOption === 'keepSourceEmphasisFormat') {\n delete block.decorator;\n }\n break;\n }\n });\n}\n\nfunction mergeSegmentFormat(\n applyDefaultFormatOption: 'mergeAll' | 'keepSourceEmphasisFormat',\n targetformat: ContentModelSegmentFormat,\n sourceFormat: ContentModelSegmentFormat\n): ContentModelSegmentFormat {\n return applyDefaultFormatOption == 'mergeAll'\n ? { ...targetformat, ...sourceFormat }\n : {\n ...targetformat,\n ...getSemanticFormat(sourceFormat),\n };\n}\n\nfunction getSemanticFormat(segmentFormat: ContentModelSegmentFormat): ContentModelSegmentFormat {\n const result: ContentModelSegmentFormat = {};\n\n const { fontWeight, italic, underline } = segmentFormat;\n\n if (fontWeight && fontWeight != 'normal') {\n result.fontWeight = fontWeight;\n }\n if (italic) {\n result.italic = italic;\n }\n if (underline) {\n result.underline = underline;\n }\n\n return result;\n}\n","import { ContentModelFormatState } from '../../publicTypes/format/formatState/ContentModelFormatState';\nimport { extractBorderValues } from '../../domUtils/borderValues';\nimport { getClosestAncestorBlockGroupIndex } from './getClosestAncestorBlockGroupIndex';\nimport { isBold } from '../../publicApi/segment/toggleBold';\nimport { iterateSelections } from '../selection/iterateSelections';\nimport { TableSelectionContext } from '../../publicTypes/selection/TableSelectionContext';\nimport { updateTableMetadata } from '../../domUtils/metadata/updateTableMetadata';\nimport {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelDocument,\n ContentModelFormatContainer,\n ContentModelImage,\n ContentModelListItem,\n ContentModelParagraph,\n ContentModelSegmentFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function retrieveModelFormatState(\n model: ContentModelDocument,\n pendingFormat: ContentModelSegmentFormat | null,\n formatState: ContentModelFormatState\n) {\n let firstTableContext: TableSelectionContext | undefined;\n let firstBlock: ContentModelBlock | undefined;\n let isFirst = true;\n let isFirstImage = true;\n let isFirstSegment = true;\n\n iterateSelections(\n [model],\n (path, tableContext, block, segments) => {\n // Structure formats\n retrieveStructureFormat(formatState, path, isFirst);\n\n // Multiple line format\n if (block) {\n if (firstBlock) {\n formatState.isMultilineSelection = true;\n } else {\n firstBlock = block;\n }\n }\n\n if (block?.blockType == 'Paragraph') {\n // Paragraph formats\n retrieveParagraphFormat(formatState, block, isFirst);\n\n // Segment formats\n segments?.forEach(segment => {\n if (isFirstSegment || segment.segmentType != 'SelectionMarker') {\n retrieveSegmentFormat(\n formatState,\n isFirst,\n Object.assign(\n {},\n model.format,\n block.format,\n block.decorator?.format,\n segment.format,\n segment.code?.format,\n segment.link?.format,\n pendingFormat\n )\n );\n\n mergeValue(formatState, 'isCodeInline', !!segment?.code, isFirst);\n }\n\n // We only care the format of selection marker when it is the first selected segment. This is because when selection marker\n // is after some other selected segments, it mostly like appears at the beginning of a seconde line when the whole first line\n // is selected (e.g. triple-click on a line) then the second selection marker doesn't contain a correct format, so we need to\n // ignore it\n isFirstSegment = false;\n\n formatState.canUnlink = formatState.canUnlink || !!segment.link;\n formatState.canAddImageAltText =\n formatState.canAddImageAltText ||\n segments.some(segment => segment.segmentType == 'Image');\n\n isFirst = false;\n\n if (segment.segmentType === 'Image') {\n if (isFirstImage) {\n retrieveImageFormat(segment, formatState);\n isFirstImage = false;\n } else {\n formatState.imageFormat = undefined;\n }\n }\n });\n\n isFirst = false;\n }\n\n if (tableContext) {\n if (firstTableContext) {\n const { table, colIndex, rowIndex } = firstTableContext;\n\n // Merge table format\n if (\n tableContext.table == table &&\n (tableContext.colIndex != colIndex || tableContext.rowIndex != rowIndex)\n ) {\n formatState.canMergeTableCell = true;\n formatState.isMultilineSelection = true;\n }\n } else {\n // Table formats\n retrieveTableFormat(tableContext, formatState);\n firstTableContext = tableContext;\n }\n }\n\n // TODO: Support Code block in format state for Content Model\n },\n {\n includeListFormatHolder: 'never',\n }\n );\n}\n\nfunction retrieveSegmentFormat(\n result: ContentModelFormatState,\n isFirst: boolean,\n mergedFormat: ContentModelSegmentFormat\n) {\n const superOrSubscript = mergedFormat.superOrSubScriptSequence?.split(' ')?.pop();\n\n mergeValue(result, 'isBold', isBold(mergedFormat.fontWeight), isFirst);\n mergeValue(result, 'isItalic', mergedFormat.italic, isFirst);\n mergeValue(result, 'isUnderline', mergedFormat.underline, isFirst);\n mergeValue(result, 'isStrikeThrough', mergedFormat.strikethrough, isFirst);\n mergeValue(result, 'isSuperscript', superOrSubscript == 'super', isFirst);\n mergeValue(result, 'isSubscript', superOrSubscript == 'sub', isFirst);\n\n mergeValue(result, 'fontName', mergedFormat.fontFamily, isFirst);\n mergeValue(result, 'fontSize', mergedFormat.fontSize, isFirst);\n mergeValue(result, 'backgroundColor', mergedFormat.backgroundColor, isFirst);\n mergeValue(result, 'textColor', mergedFormat.textColor, isFirst);\n\n //TODO: handle block owning segments with different line-heights\n mergeValue(result, 'lineHeight', mergedFormat.lineHeight, isFirst);\n}\n\nfunction retrieveParagraphFormat(\n result: ContentModelFormatState,\n paragraph: ContentModelParagraph,\n isFirst: boolean\n) {\n const headerLevel = parseInt((paragraph.decorator?.tagName || '').substring(1));\n const validHeaderLevel = headerLevel >= 1 && headerLevel <= 6 ? headerLevel : undefined;\n\n mergeValue(result, 'marginBottom', paragraph.format.marginBottom, isFirst);\n mergeValue(result, 'marginTop', paragraph.format.marginTop, isFirst);\n mergeValue(result, 'headerLevel', validHeaderLevel, isFirst);\n mergeValue(result, 'textAlign', paragraph.format.textAlign, isFirst);\n mergeValue(result, 'direction', paragraph.format.direction, isFirst);\n}\n\nfunction retrieveStructureFormat(\n result: ContentModelFormatState,\n path: ContentModelBlockGroup[],\n isFirst: boolean\n) {\n const listItemIndex = getClosestAncestorBlockGroupIndex(path, ['ListItem'], []);\n const containerIndex = getClosestAncestorBlockGroupIndex(path, ['FormatContainer'], []);\n\n if (listItemIndex >= 0) {\n const listItem = path[listItemIndex] as ContentModelListItem;\n const listType = listItem?.levels[listItem.levels.length - 1]?.listType;\n\n mergeValue(result, 'isBullet', listType == 'UL', isFirst);\n mergeValue(result, 'isNumbering', listType == 'OL', isFirst);\n }\n\n mergeValue(\n result,\n 'isBlockQuote',\n containerIndex >= 0 &&\n (path[containerIndex] as ContentModelFormatContainer)?.tagName == 'blockquote',\n isFirst\n );\n}\n\nfunction retrieveTableFormat(tableContext: TableSelectionContext, result: ContentModelFormatState) {\n const tableFormat = updateTableMetadata(tableContext.table);\n\n result.isInTable = true;\n result.tableHasHeader = tableContext.table.rows.some(row =>\n row.cells.some(cell => cell.isHeader)\n );\n\n if (tableFormat) {\n result.tableFormat = tableFormat;\n }\n}\n\nfunction retrieveImageFormat(image: ContentModelImage, result: ContentModelFormatState) {\n const { format } = image;\n const borderKey = 'borderTop';\n const extractedBorder = extractBorderValues(format[borderKey]);\n const borderColor = extractedBorder.color;\n const borderWidth = extractedBorder.width;\n const borderStyle = extractedBorder.style;\n result.imageFormat = {\n borderColor,\n borderWidth,\n borderStyle,\n boxShadow: format.boxShadow,\n borderRadius: format.borderRadius,\n };\n}\n\nfunction mergeValue(\n format: ContentModelFormatState,\n key: K,\n newValue: ContentModelFormatState[K] | undefined,\n isFirst: boolean\n) {\n if (isFirst) {\n if (newValue !== undefined) {\n format[key] = newValue;\n }\n } else if (newValue !== format[key]) {\n delete format[key];\n }\n}\n","import { addBlock, setParagraphNotImplicit } from 'roosterjs-content-model-dom';\nimport { arrayPush } from 'roosterjs-editor-dom';\nimport { ContentModelBlock, ContentModelBlockGroup } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport interface WrapBlockStep1Result {\n parent: ContentModelBlockGroup;\n wrapper: T;\n}\n\n/**\n * @internal\n */\nexport function wrapBlockStep1(\n step1Result: WrapBlockStep1Result[],\n parent: ContentModelBlockGroup | null,\n blockToWrap: ContentModelBlock,\n creator: () => T,\n canMerge: (target: ContentModelBlock) => target is T\n) {\n const index = parent?.blocks.indexOf(blockToWrap) ?? -1;\n\n if (parent && index >= 0) {\n parent.blocks.splice(index, 1);\n\n const prevBlock = parent.blocks[index - 1];\n const wrapper = canMerge(prevBlock) ? prevBlock : createAndAdd(parent, index, creator);\n\n setParagraphNotImplicit(blockToWrap);\n addBlock(wrapper, blockToWrap);\n\n // Use reverse order, so that we can merge from last to first to avoid modifying unmerged quotes\n step1Result.unshift({ parent, wrapper });\n }\n}\n\n/**\n * @internal\n */\nexport function wrapBlockStep2(\n step1Result: WrapBlockStep1Result[],\n canMerge: (target: ContentModelBlock, current: T) => target is T\n) {\n step1Result.forEach(({ parent, wrapper }) => {\n const index = parent.blocks.indexOf(wrapper);\n const nextBlock = parent.blocks[index + 1];\n\n if (index >= 0 && canMerge(nextBlock, wrapper)) {\n wrapper.blocks.forEach(setParagraphNotImplicit);\n arrayPush(wrapper.blocks, nextBlock.blocks);\n parent.blocks.splice(index + 1, 1);\n }\n });\n}\n\nfunction createAndAdd(\n parent: ContentModelBlockGroup,\n index: number,\n creator: () => T\n): T {\n const block = creator();\n\n parent.blocks.splice(index, 0, block);\n return block;\n}\n","import { ContentModelDocument } from 'roosterjs-content-model-types';\nimport { deleteExpandedSelection } from './utils/deleteExpandedSelection';\nimport {\n DeleteResult,\n DeleteSelectionContext,\n DeleteSelectionResult,\n DeleteSelectionStep,\n ValidDeleteSelectionContext,\n OnDeleteEntity,\n} from './utils/DeleteSelectionStep';\n\n/**\n * @internal\n */\nexport function deleteSelection(\n model: ContentModelDocument,\n onDeleteEntity: OnDeleteEntity,\n additionalSteps: (DeleteSelectionStep | null)[] = []\n): DeleteSelectionResult {\n const context = deleteExpandedSelection(model, onDeleteEntity);\n\n additionalSteps.forEach(step => {\n if (\n step &&\n isValidDeleteSelectionContext(context) &&\n context.deleteResult == DeleteResult.NotDeleted\n ) {\n step(context, onDeleteEntity);\n }\n });\n\n mergeParagraphAfterDelete(context);\n\n return context;\n}\n\nfunction isValidDeleteSelectionContext(\n context: DeleteSelectionContext\n): context is ValidDeleteSelectionContext {\n return !!context.insertPoint;\n}\n\n// If we end up with multiple paragraphs impacted, we need to merge them\nfunction mergeParagraphAfterDelete(context: DeleteSelectionContext) {\n const { insertPoint, deleteResult, lastParagraph, lastTableContext } = context;\n\n if (\n insertPoint &&\n deleteResult != DeleteResult.NotDeleted &&\n deleteResult != DeleteResult.NothingToDelete &&\n lastParagraph &&\n lastParagraph != insertPoint.paragraph &&\n lastTableContext == insertPoint.tableContext\n ) {\n insertPoint.paragraph.segments.push(...lastParagraph.segments);\n lastParagraph.segments = [];\n }\n}\n","import { DeleteResult, DeleteSelectionStep } from '../utils/DeleteSelectionStep';\nimport { deleteSegment } from '../utils/deleteSegment';\n\n/**\n * @internal\n */\nexport const deleteAllSegmentBefore: DeleteSelectionStep = (context, onDeleteEntity) => {\n const { paragraph, marker } = context.insertPoint;\n const index = paragraph.segments.indexOf(marker);\n\n for (let i = index - 1; i >= 0; i--) {\n const segment = paragraph.segments[i];\n\n segment.isSelected = true;\n\n if (deleteSegment(paragraph, segment, onDeleteEntity)) {\n context.deleteResult = DeleteResult.Range;\n }\n }\n};\n","import { BlockAndPath, getLeafSiblingBlock } from '../../block/getLeafSiblingBlock';\nimport { ContentModelSegment } from 'roosterjs-content-model-types';\nimport { createInsertPoint } from '../utils/createInsertPoint';\nimport { deleteBlock } from '../utils/deleteBlock';\nimport { DeleteResult, DeleteSelectionStep } from '../utils/DeleteSelectionStep';\nimport { deleteSegment } from '../utils/deleteSegment';\n\nfunction getDeleteCollapsedSelection(direction: 'forward' | 'backward'): DeleteSelectionStep {\n return (context, onDeleteEntity) => {\n const isForward = direction == 'forward';\n const { paragraph, marker, path, tableContext } = context.insertPoint;\n const segments = paragraph.segments;\n\n fixupBr(segments);\n\n const index = segments.indexOf(marker) + (isForward ? 1 : -1);\n const segmentToDelete = segments[index];\n let blockToDelete: BlockAndPath | null;\n\n if (segmentToDelete) {\n if (deleteSegment(paragraph, segmentToDelete, onDeleteEntity, direction)) {\n context.deleteResult = DeleteResult.SingleChar;\n }\n } else if ((blockToDelete = getLeafSiblingBlock(path, paragraph, isForward))) {\n const { block, path, siblingSegment } = blockToDelete;\n\n if (block.blockType == 'Paragraph') {\n if (siblingSegment) {\n // When selection is under general segment, need to check if it has a sibling sibling, and delete from it\n if (deleteSegment(block, siblingSegment, onDeleteEntity, direction)) {\n context.deleteResult = DeleteResult.Range;\n }\n } else {\n if (isForward) {\n context.lastParagraph = block;\n } else {\n if (block.segments[block.segments.length - 1]?.segmentType == 'Br') {\n block.segments.pop();\n }\n\n context.insertPoint = createInsertPoint(marker, block, path, tableContext);\n context.lastParagraph = paragraph;\n delete block.cachedElement;\n }\n\n context.deleteResult = DeleteResult.Range;\n }\n\n // When go across table, getLeafSiblingBlock will return null, when we are here, we must be in the same table context\n context.lastTableContext = tableContext;\n } else {\n if (\n deleteBlock(\n path[0].blocks,\n block,\n onDeleteEntity,\n undefined /*replacement*/,\n direction\n )\n ) {\n context.deleteResult = DeleteResult.Range;\n }\n }\n } else {\n // We have nothing to delete, in this case we don't want browser handle it as well.\n // Because when Backspace on an empty document, it will also delete the only DIV and SPAN element, causes\n // editor is really empty. We don't want that happen. So the handling should stop here.\n context.deleteResult = DeleteResult.NothingToDelete;\n }\n };\n}\n\n/**\n * If the last segment is BR, remove it for now. We may add it back later when normalize model.\n * So that if this is an empty paragraph, it will start to delete next block\n */\nfunction fixupBr(segments: ContentModelSegment[]) {\n if (segments[segments.length - 1]?.segmentType == 'Br') {\n const segmentsWithoutBr = segments.filter(x => x.segmentType != 'SelectionMarker');\n\n if (segmentsWithoutBr[segmentsWithoutBr.length - 2]?.segmentType != 'Br') {\n segments.pop();\n }\n }\n}\n\n/**\n * @internal if we didn't delete anything, and we want to delete forward, now perform it\n */\nexport const forwardDeleteCollapsedSelection = getDeleteCollapsedSelection('forward');\n\n/**\n * @internal if we didn't delete anything, and we want to delete backward, now perform it\n */\nexport const backwardDeleteCollapsedSelection = getDeleteCollapsedSelection('backward');\n","import { ContentModelParagraph } from 'roosterjs-content-model-types';\nimport {\n isPunctuation,\n isSpace,\n isWhiteSpacePreserved,\n normalizeText,\n} from 'roosterjs-content-model-dom';\nimport {\n DeleteResult,\n DeleteSelectionContext,\n DeleteSelectionStep,\n} from '../utils/DeleteSelectionStep';\n\nconst enum DeleteWordState {\n Start,\n Punctuation,\n Text,\n NonText,\n Space,\n End,\n}\n\ninterface CharInfo {\n text: boolean;\n space: boolean;\n punctuation: boolean;\n}\n\nfunction getDeleteWordSelection(direction: 'forward' | 'backward'): DeleteSelectionStep {\n return context => {\n const { marker, paragraph } = context.insertPoint;\n const startIndex = paragraph.segments.indexOf(marker);\n const deleteNext = direction == 'forward';\n\n let iterator = iterateSegments(paragraph, startIndex, deleteNext, context);\n let curr = iterator.next();\n\n for (let state = DeleteWordState.Start; state != DeleteWordState.End && !curr.done; ) {\n const { punctuation, space, text } = curr.value;\n\n // This is a state machine of how to delete a whole word together with space and punctuations.\n // For a full state machine chart, see\n // Forward delete: https://github.com/microsoft/roosterjs/blob/master/assets/design-charts/ForwardDeleteWord.png\n // Backward delete: https://github.com/microsoft/roosterjs/blob/master/assets/design-charts/BackwardDeleteWord.png\n switch (state) {\n case DeleteWordState.Start:\n state = space\n ? DeleteWordState.Space\n : punctuation\n ? DeleteWordState.Punctuation\n : DeleteWordState.Text;\n curr = iterator.next(true /*delete*/);\n break;\n\n case DeleteWordState.Punctuation:\n if (deleteNext && space) {\n state = DeleteWordState.NonText;\n curr = iterator.next(true /*delete*/);\n } else if (punctuation) {\n curr = iterator.next(true /*delete*/);\n } else {\n state = DeleteWordState.End;\n }\n break;\n\n case DeleteWordState.Text:\n if (deleteNext && space) {\n state = DeleteWordState.NonText;\n curr = iterator.next(true /*delete*/);\n } else if (text) {\n curr = iterator.next(true /*delete*/);\n } else {\n state = DeleteWordState.End;\n }\n break;\n\n case DeleteWordState.NonText:\n if (punctuation || !space) {\n state = DeleteWordState.End;\n } else {\n curr = iterator.next(true /*delete*/);\n }\n break;\n\n case DeleteWordState.Space:\n if (space) {\n curr = iterator.next(true /*delete*/);\n } else if (punctuation) {\n state = deleteNext ? DeleteWordState.NonText : DeleteWordState.Punctuation;\n curr = iterator.next(true /*delete*/);\n } else {\n state = deleteNext ? DeleteWordState.End : DeleteWordState.Text;\n }\n break;\n }\n }\n };\n}\n\nfunction* iterateSegments(\n paragraph: ContentModelParagraph,\n markerIndex: number,\n forward: boolean,\n context: DeleteSelectionContext\n): Generator {\n const step = forward ? 1 : -1;\n const segments = paragraph.segments;\n const preserveWhiteSpace = isWhiteSpacePreserved(paragraph);\n\n for (let i = markerIndex + step; i >= 0 && i < segments.length; i += step) {\n const segment = segments[i];\n\n switch (segment.segmentType) {\n case 'Text':\n for (\n let j = forward ? 0 : segment.text.length - 1;\n j >= 0 && j < segment.text.length;\n j += step\n ) {\n const c = segment.text[j];\n const punctuation = isPunctuation(c);\n const space = isSpace(c);\n const text = !punctuation && !space;\n\n if (yield { punctuation, space, text }) {\n let newText = segment.text;\n\n newText = newText.substring(0, j) + newText.substring(j + 1);\n\n if (!preserveWhiteSpace) {\n newText = normalizeText(newText, forward);\n }\n\n context.deleteResult = DeleteResult.Range;\n\n if (newText) {\n segment.text = newText;\n\n if (step > 0) {\n j -= step;\n }\n } else {\n segments.splice(i, 1);\n\n if (step > 0) {\n i -= step;\n }\n\n break;\n }\n }\n }\n break;\n\n case 'Image':\n if (\n yield { punctuation: true, space: false, text: false } // Treat image as punctuation since they have the same behavior.\n ) {\n segments.splice(i, 1);\n\n if (step > 0) {\n i -= step;\n }\n\n context.deleteResult = DeleteResult.Range;\n }\n break;\n\n case 'SelectionMarker':\n break;\n\n default:\n return null;\n }\n }\n\n return null;\n}\n\n/**\n * @internal\n */\nexport const forwardDeleteWordSelection = getDeleteWordSelection('forward');\n\n/**\n * @internal\n */\nexport const backwardDeleteWordSelection = getDeleteWordSelection('backward');\n","import { InsertPoint } from '../../../publicTypes/selection/InsertPoint';\nimport { TableSelectionContext } from '../../../publicTypes/selection/TableSelectionContext';\nimport {\n ContentModelBlockGroup,\n ContentModelParagraph,\n ContentModelSelectionMarker,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function createInsertPoint(\n marker: ContentModelSelectionMarker,\n paragraph: ContentModelParagraph,\n path: ContentModelBlockGroup[],\n tableContext: TableSelectionContext | undefined\n): InsertPoint {\n return {\n marker,\n paragraph,\n path,\n tableContext,\n };\n}\n","import { ContentModelBlock } from 'roosterjs-content-model-types';\nimport { EntityOperation } from 'roosterjs-editor-types';\nimport { OnDeleteEntity } from './DeleteSelectionStep';\n\n/**\n * @internal\n */\nexport function deleteBlock(\n blocks: ContentModelBlock[],\n blockToDelete: ContentModelBlock,\n onDeleteEntity: OnDeleteEntity,\n replacement?: ContentModelBlock,\n direction?: 'forward' | 'backward'\n): boolean {\n const index = blocks.indexOf(blockToDelete);\n\n switch (blockToDelete.blockType) {\n case 'Table':\n case 'Divider':\n replacement ? blocks.splice(index, 1, replacement) : blocks.splice(index, 1);\n return true;\n\n case 'Entity':\n const operation = blockToDelete.isSelected\n ? EntityOperation.Overwrite\n : direction == 'forward'\n ? EntityOperation.RemoveFromStart\n : direction == 'backward'\n ? EntityOperation.RemoveFromEnd\n : undefined;\n\n if (operation !== undefined && !onDeleteEntity(blockToDelete, operation)) {\n replacement ? blocks.splice(index, 1, replacement) : blocks.splice(index, 1);\n }\n\n return true;\n\n case 'BlockGroup':\n switch (blockToDelete.blockGroupType) {\n case 'General':\n if (replacement) {\n blocks.splice(index, 1, replacement);\n return true;\n } else {\n // no op, let browser handle it\n return false;\n }\n\n case 'ListItem':\n case 'FormatContainer':\n blocks.splice(index, 1);\n return true;\n }\n }\n\n return false;\n}\n","import { ContentModelDocument } from 'roosterjs-content-model-types';\nimport { createInsertPoint } from '../utils/createInsertPoint';\nimport { deleteBlock } from '../utils/deleteBlock';\nimport { DeleteResult, DeleteSelectionContext, OnDeleteEntity } from '../utils/DeleteSelectionStep';\nimport { deleteSegment } from '../utils/deleteSegment';\nimport { iterateSelections, IterateSelectionsOption } from '../../selection/iterateSelections';\nimport {\n createBr,\n createParagraph,\n createSelectionMarker,\n setParagraphNotImplicit,\n} from 'roosterjs-content-model-dom';\n\nconst DeleteSelectionIteratingOptions: IterateSelectionsOption = {\n contentUnderSelectedTableCell: 'ignoreForTableOrCell', // When a table cell is selected, we replace all content for this cell, so no need to go into its content\n contentUnderSelectedGeneralElement: 'generalElementOnly', // When a general element is selected, we replace the whole element so no need to go into its content\n includeListFormatHolder: 'never',\n};\n\n/**\n * @internal\n * Iterate the model and find all selected content if any, delete them, and keep/create an insert point\n * at the first deleted position so that we know where to put cursor to after delete\n */\nexport function deleteExpandedSelection(\n model: ContentModelDocument,\n onDeleteEntity: OnDeleteEntity\n): DeleteSelectionContext {\n const context: DeleteSelectionContext = {\n deleteResult: DeleteResult.NotDeleted,\n insertPoint: null,\n };\n\n iterateSelections(\n [model],\n (path, tableContext, block, segments) => {\n // Set paragraph, format and index for default position where we will put cursor to.\n // Later we can overwrite these info when process the selections\n let paragraph = createParagraph(\n true /*implicit*/,\n undefined /*blockFormat*/,\n model.format\n );\n let markerFormat = model.format;\n let insertMarkerIndex = 0;\n\n if (segments) {\n // Delete segments inside a paragraph\n if (segments[0] && block?.blockType == 'Paragraph') {\n // Now that we have found a paragraph with selections, we can overwrite the default paragraph with this one\n // so we can put cursor here after delete\n paragraph = block;\n insertMarkerIndex = paragraph.segments.indexOf(segments[0]);\n markerFormat = segments[0].format;\n\n context.lastParagraph = paragraph;\n context.lastTableContext = tableContext;\n\n segments.forEach((segment, i) => {\n if (\n i == 0 &&\n !context.insertPoint &&\n segment.segmentType == 'SelectionMarker'\n ) {\n // First time we hit a selection and it is a selection marker, just mark it and not need to delete\n // because this is possible a collapsed selection, then it will be handled later\n context.insertPoint = createInsertPoint(\n segment,\n block,\n path,\n tableContext\n );\n } else if (deleteSegment(block, segment, onDeleteEntity)) {\n context.deleteResult = DeleteResult.Range;\n }\n });\n\n // Since we are operating on this paragraph and it possible we delete everything from this paragraph,\n // Need to make it \"not implicit\" so that it will always have a container element, so that when we do normalization\n // of this paragraph, a BR can be added if need\n if (context.deleteResult == DeleteResult.Range) {\n setParagraphNotImplicit(block);\n }\n }\n } else if (block) {\n // Delete a whole block (divider, table, ...)\n const blocks = path[0].blocks;\n\n if (deleteBlock(blocks, block, onDeleteEntity, paragraph)) {\n context.deleteResult = DeleteResult.Range;\n }\n } else if (tableContext) {\n // Delete a whole table cell\n const { table, colIndex, rowIndex } = tableContext;\n const row = table.rows[rowIndex];\n const cell = row.cells[colIndex];\n\n path = [cell, ...path];\n paragraph.segments.push(createBr(model.format));\n cell.blocks = [paragraph];\n\n delete cell.cachedElement;\n delete row.cachedElement;\n context.deleteResult = DeleteResult.Range;\n }\n\n if (!context.insertPoint) {\n // If we have not got a insert point after delete and we have a paragraph to put an insert point in, create insert point now\n const marker = createSelectionMarker(markerFormat);\n\n setParagraphNotImplicit(paragraph);\n paragraph.segments.splice(insertMarkerIndex, 0, marker);\n context.insertPoint = createInsertPoint(marker, paragraph, path, tableContext);\n }\n },\n DeleteSelectionIteratingOptions\n );\n\n return context;\n}\n","import { ContentModelParagraph, ContentModelSegment } from 'roosterjs-content-model-types';\nimport { deleteSingleChar } from './deleteSingleChar';\nimport { EntityOperation } from 'roosterjs-editor-types';\nimport { OnDeleteEntity } from './DeleteSelectionStep';\nimport {\n isWhiteSpacePreserved,\n normalizeSingleSegment,\n normalizeText,\n} from 'roosterjs-content-model-dom';\n\n/**\n * @internal\n */\nexport function deleteSegment(\n paragraph: ContentModelParagraph,\n segmentToDelete: ContentModelSegment,\n onDeleteEntity: OnDeleteEntity,\n direction?: 'forward' | 'backward'\n): boolean {\n const segments = paragraph.segments;\n const index = segments.indexOf(segmentToDelete);\n const preserveWhiteSpace = isWhiteSpacePreserved(paragraph);\n const isForward = direction == 'forward';\n const isBackward = direction == 'backward';\n\n if (!preserveWhiteSpace) {\n normalizePreviousSegment(segments, index);\n }\n\n switch (segmentToDelete.segmentType) {\n case 'Br':\n case 'Image':\n case 'SelectionMarker':\n segments.splice(index, 1);\n return true;\n\n case 'Entity':\n const operation = segmentToDelete.isSelected\n ? EntityOperation.Overwrite\n : isForward\n ? EntityOperation.RemoveFromStart\n : isBackward\n ? EntityOperation.RemoveFromEnd\n : undefined;\n if (operation !== undefined && !onDeleteEntity(segmentToDelete, operation)) {\n segments.splice(index, 1);\n }\n\n return true;\n\n case 'Text':\n let text = segmentToDelete.text;\n\n if (text.length == 0 || segmentToDelete.isSelected) {\n segments.splice(index, 1);\n } else if (direction) {\n text = deleteSingleChar(text, isForward); // isForward ? text.substring(1) : text.substring(0, text.length - 1);\n\n if (!preserveWhiteSpace) {\n text = normalizeText(text, isForward);\n }\n\n if (text == '') {\n segments.splice(index, 1);\n } else {\n segmentToDelete.text = text;\n }\n }\n\n return true;\n\n case 'General':\n if (segmentToDelete.isSelected) {\n segments.splice(index, 1);\n return true;\n } else {\n // No op if a general segment is not selected, let browser handle general segment\n // TODO: Need to revisit this\n return false;\n }\n }\n}\n\nfunction normalizePreviousSegment(segments: ContentModelSegment[], currentIndex: number) {\n let index = currentIndex - 1;\n\n while (segments[index]?.segmentType == 'SelectionMarker') {\n index--;\n }\n\n const segment = segments[index];\n\n if (segment) {\n normalizeSingleSegment(segment);\n }\n}\n","/**\n * @internal\n */\nexport function deleteSingleChar(text: string, isForward: boolean) {\n // In case of emoji that occupies multiple characters, we need to delete the whole emoji\n const array = [...text];\n let deleteLength = 0;\n\n for (\n let i = isForward ? 0 : array.length - 1,\n deleteState: 'notDeleted' | 'waiting' | 'done' = 'notDeleted';\n i >= 0 && i < array.length && deleteState != 'done';\n i += isForward ? 1 : -1\n ) {\n switch (array[i]) {\n case '\\u200D': // ZERO WIDTH JOINER\n case '\\u20E3': // COMBINING ENCLOSING KEYCAP\n case '\\uFE0E': // VARIATION SELECTOR-15\n case '\\uFE0F': // VARIATION SELECTOR-16\n deleteState = 'notDeleted';\n deleteLength++;\n break;\n\n default:\n if (deleteState == 'notDeleted') {\n deleteState = 'waiting';\n deleteLength++;\n } else if (deleteState == 'waiting') {\n deleteState = 'done';\n }\n break;\n }\n }\n\n array.splice(isForward ? 0 : array.length - deleteLength, deleteLength);\n\n return array.join('');\n}\n","import { ContentModelSegmentFormat } from 'roosterjs-content-model-types';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { NodePosition } from 'roosterjs-editor-types';\n\n/**\n * @internal\n * Get pending segment format from editor if any, otherwise null\n * @param editor The editor to get format from\n */\nexport function getPendingFormat(editor: IContentModelEditor): ContentModelSegmentFormat | null {\n return getPendingFormatHolder(editor).format;\n}\n\n/**\n * @internal\n * Set pending segment format to editor\n * @param editor The editor to set pending format to\n * @param format The format to set.\n * @param position Cursor position when set this format\n */\nexport function setPendingFormat(\n editor: IContentModelEditor,\n format: ContentModelSegmentFormat,\n position: NodePosition\n) {\n const holder = getPendingFormatHolder(editor);\n\n holder.format = format;\n holder.position = position;\n}\n\n/**\n * @internal Clear pending format if any\n * @param editor The editor to set pending format to\n */\nexport function clearPendingFormat(editor: IContentModelEditor) {\n const holder = getPendingFormatHolder(editor);\n\n holder.format = null;\n holder.position = null;\n}\n\n/**\n * @internal\n * Check if this editor can apply pending format\n * @param editor The editor to get format from\n */\nexport function canApplyPendingFormat(editor: IContentModelEditor): boolean {\n const holder = getPendingFormatHolder(editor);\n let result = false;\n\n if (holder.format && holder.position) {\n const position = editor.getFocusedPosition();\n\n if (position?.equalTo(holder.position)) {\n result = true;\n }\n }\n\n return result;\n}\ninterface PendingFormatHolder {\n format: ContentModelSegmentFormat | null;\n position: NodePosition | null;\n}\n\nconst PendingFormatHolderKey = '__ContentModelPendingFormat';\n\nfunction getPendingFormatHolder(editor: IContentModelEditor): PendingFormatHolder {\n return editor.getCustomData(PendingFormatHolderKey, () => ({\n format: null,\n position: null,\n }));\n}\n","import { Border } from '../../publicTypes/interface/Border';\nimport { ContentModelImage } from 'roosterjs-content-model-types';\nimport { extractBorderValues } from '../../domUtils/borderValues';\nimport { parseValueWithUnit } from 'roosterjs-content-model-dom';\n\n/**\n * @internal\n */\nexport default function applyImageBorderFormat(\n image: ContentModelImage,\n border: Border | null,\n borderRadius?: string\n) {\n if (border) {\n const format = image.format;\n const { width, style, color } = border;\n const borderKey = 'borderTop';\n const extractedBorder = extractBorderValues(format[borderKey]);\n const borderColor = extractedBorder.color;\n const borderWidth = extractedBorder.width;\n const borderStyle = extractedBorder.style;\n let borderFormat = '';\n\n if (width) {\n borderFormat = parseValueWithUnit(width) + 'px';\n } else if (borderWidth) {\n borderFormat = borderWidth;\n } else {\n borderFormat = '1px';\n }\n\n if (style) {\n borderFormat = `${borderFormat} ${style}`;\n } else if (borderStyle) {\n borderFormat = `${borderFormat} ${borderStyle}`;\n } else {\n borderFormat = `${borderFormat} solid`;\n }\n\n if (color) {\n borderFormat = `${borderFormat} ${color}`;\n } else if (borderColor) {\n borderFormat = `${borderFormat} ${borderColor}`;\n }\n image.format.borderLeft = borderFormat;\n image.format.borderTop = borderFormat;\n image.format.borderBottom = borderFormat;\n image.format.borderRight = borderFormat;\n } else {\n delete image.format.borderLeft;\n delete image.format.borderTop;\n delete image.format.borderBottom;\n delete image.format.borderRight;\n }\n\n if (borderRadius) {\n image.format.borderRadius = borderRadius;\n }\n}\n","import {\n ContentModelBlockGroup,\n ContentModelDocument,\n ContentModelListItem,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function findListItemsInSameThread(\n model: ContentModelDocument,\n currentItem: ContentModelListItem\n): ContentModelListItem[] {\n const items: (ContentModelListItem | null)[] = [];\n\n findListItems(model, items);\n\n return filterListItems(items, currentItem);\n}\n\nfunction findListItems(group: ContentModelBlockGroup, result: (ContentModelListItem | null)[]) {\n group.blocks.forEach(block => {\n switch (block.blockType) {\n case 'BlockGroup':\n if (block.blockGroupType == 'ListItem') {\n result.push(block);\n } else {\n pushNullIfNecessary(result);\n findListItems(block, result);\n pushNullIfNecessary(result);\n }\n break;\n\n case 'Paragraph':\n pushNullIfNecessary(result);\n\n block.segments.forEach(segment => {\n if (segment.segmentType == 'General') {\n findListItems(segment, result);\n }\n });\n\n pushNullIfNecessary(result);\n break;\n\n case 'Table':\n pushNullIfNecessary(result);\n\n block.rows.forEach(row =>\n row.cells.forEach(cell => {\n findListItems(cell, result);\n })\n );\n pushNullIfNecessary(result);\n\n break;\n }\n });\n}\n\nfunction pushNullIfNecessary(result: (ContentModelListItem | null)[]) {\n const last = result[result.length - 1];\n\n if (!last || last !== null) {\n result.push(null);\n }\n}\n\nfunction filterListItems(\n items: (ContentModelListItem | null)[],\n currentItem: ContentModelListItem\n) {\n const result: ContentModelListItem[] = [];\n const currentIndex = items.indexOf(currentItem);\n const levelLength = currentItem.levels.length;\n const isOrderedList = currentItem.levels[levelLength - 1]?.listType == 'OL';\n\n if (currentIndex >= 0) {\n for (let i = currentIndex; i >= 0; i--) {\n const item = items[i];\n\n if (!item) {\n if (isOrderedList) {\n continue;\n } else {\n break;\n }\n }\n\n const startNumberOverride = hasStartNumberOverride(item, levelLength);\n\n if (areListTypesCompatible(items, currentIndex, i)) {\n result.unshift(item);\n\n if (isOrderedList && startNumberOverride) {\n break;\n }\n } else if (!isOrderedList || startNumberOverride) {\n break;\n }\n }\n\n for (let i = currentIndex + 1; i < items.length; i++) {\n const item = items[i];\n\n if (!item) {\n if (isOrderedList) {\n continue;\n } else {\n break;\n }\n }\n\n const startNumberOverride = hasStartNumberOverride(item, levelLength);\n\n if (areListTypesCompatible(items, currentIndex, i) && !startNumberOverride) {\n result.push(item);\n } else if (!isOrderedList || startNumberOverride) {\n break;\n }\n }\n }\n\n return result;\n}\n\nfunction areListTypesCompatible(\n listItems: (ContentModelListItem | null)[],\n currentIndex: number,\n compareToIndex: number\n): boolean {\n const currentLevels = listItems[currentIndex]!.levels;\n const compareToLevels = listItems[compareToIndex]!.levels;\n\n return (\n currentLevels.length <= compareToLevels.length &&\n currentLevels.every(\n (currentLevel, i) => currentLevel.listType == compareToLevels[i].listType\n )\n );\n}\n\nfunction hasStartNumberOverride(item: ContentModelListItem, levelLength: number): boolean {\n return item.levels.slice(0, levelLength).some(level => level.startNumberOverride !== undefined);\n}\n","import { getOperationalBlocks, OperationalBlocks } from '../selection/collectSelections';\nimport { isBlockGroupOfType } from '../common/isBlockGroupOfType';\nimport {\n createListItem,\n normalizeContentModel,\n setParagraphNotImplicit,\n} from 'roosterjs-content-model-dom';\nimport {\n ContentModelBlock,\n ContentModelDocument,\n ContentModelListItem,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function setListType(model: ContentModelDocument, listType: 'OL' | 'UL') {\n const paragraphOrListItems = getOperationalBlocks(\n model,\n ['ListItem'],\n [] // Set stop types to be empty so we can find list items even cross the boundary of table, then we can always operation on the list item if any\n );\n const alreadyInExpectedType = paragraphOrListItems.every(\n ({ block }) =>\n (isBlockGroupOfType(block, 'ListItem') &&\n block.levels[block.levels.length - 1]?.listType == listType) ||\n !shouldTurnOnList(paragraphOrListItems, block)\n );\n let existingListItems: ContentModelListItem[] = [];\n let hasIgnoredParagraphBefore = false;\n\n paragraphOrListItems.forEach(({ block, parent }, itemIndex) => {\n if (isBlockGroupOfType(block, 'ListItem')) {\n const level = block.levels.pop();\n\n if (!alreadyInExpectedType && level) {\n level.listType = listType;\n block.levels.push(level);\n } else if (block.blocks.length == 1) {\n setParagraphNotImplicit(block.blocks[0]);\n }\n } else {\n const index = parent.blocks.indexOf(block);\n\n if (index >= 0) {\n if (shouldTurnOnList(paragraphOrListItems, block)) {\n const prevBlock = parent.blocks[index - 1];\n const segmentFormat =\n (block.blockType == 'Paragraph' && block.segments[0]?.format) || {};\n const newListItem = createListItem(\n [\n {\n listType,\n startNumberOverride:\n itemIndex > 0 ||\n (prevBlock?.blockType == 'BlockGroup' &&\n prevBlock.blockGroupType == 'ListItem' &&\n prevBlock.levels[0]?.listType == 'OL')\n ? undefined\n : 1,\n direction: block.format.direction,\n textAlign: block.format.textAlign,\n marginTop: hasIgnoredParagraphBefore ? '0' : undefined,\n },\n ],\n // For list bullet, we only want to carry over these formats from segments:\n {\n fontFamily: segmentFormat.fontFamily,\n fontSize: segmentFormat.fontSize,\n textColor: segmentFormat.textColor,\n }\n );\n\n // Since there is only one paragraph under the list item, no need to keep its paragraph element (DIV).\n // TODO: Do we need to keep the CSS styles applied to original DIV?\n if (block.blockType == 'Paragraph') {\n block.isImplicit = true;\n }\n\n newListItem.blocks.push(block);\n\n parent.blocks.splice(index, 1, newListItem);\n existingListItems.push(newListItem);\n } else {\n hasIgnoredParagraphBefore = true;\n\n existingListItems.forEach(x => (x.levels[0].marginBottom = '0'));\n existingListItems = [];\n }\n }\n }\n });\n\n normalizeContentModel(model);\n\n return paragraphOrListItems.length > 0;\n}\n\nfunction shouldTurnOnList(\n blocks: OperationalBlocks[],\n block: ContentModelBlock\n): boolean {\n return (\n blocks.length == 1 ||\n (block.blockType == 'Paragraph' &&\n block.segments.length > 0 &&\n block.segments.some(x => x.segmentType != 'Br' && x.segmentType != 'SelectionMarker'))\n );\n}\n","import { ContentModelDocument, ContentModelSegment } from 'roosterjs-content-model-types';\nimport { getSelectedParagraphs } from './collectSelections';\nimport { setSelection } from './setSelection';\n\n/**\n * @internal\n */\nexport function adjustSegmentSelection(\n model: ContentModelDocument,\n firstMatcher: (target: ContentModelSegment) => boolean,\n siblingMatcher: (target: ContentModelSegment, ref: ContentModelSegment) => boolean\n): boolean {\n const paragraphs = getSelectedParagraphs(model);\n let first: ContentModelSegment | undefined;\n let last: ContentModelSegment | undefined;\n let changed = false;\n\n paragraphs.forEach(p => {\n const index = first ? 0 : p.segments.findIndex(x => firstMatcher(x));\n const segments = p.segments;\n\n if (!first) {\n first = segments[index];\n\n for (let i = index; i > 0; i--) {\n if (siblingMatcher(segments[i - 1], first)) {\n first = segments[i - 1];\n changed = changed || !segments[i - 1].isSelected;\n } else {\n changed = changed || !!segments[i - 1].isSelected;\n break;\n }\n }\n }\n\n if (first) {\n for (let i = index; i < p.segments.length; i++) {\n if (i == index || siblingMatcher(segments[i], last || segments[index])) {\n last = segments[i];\n changed = changed || !segments[i].isSelected;\n } else {\n changed = changed || !!segments[i].isSelected;\n break;\n }\n }\n }\n });\n\n if (first && last) {\n setSelection(model, first, last);\n }\n\n return changed;\n}\n","import { createText, isPunctuation, isSpace } from 'roosterjs-content-model-dom';\nimport { iterateSelections } from '../../modelApi/selection/iterateSelections';\nimport {\n ContentModelDocument,\n ContentModelParagraph,\n ContentModelSegment,\n ContentModelText,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function adjustWordSelection(\n model: ContentModelDocument,\n marker: ContentModelSegment\n): ContentModelSegment[] {\n let markerBlock: ContentModelParagraph | undefined;\n\n iterateSelections([model], (path, tableContext, block, segments) => {\n //Find the block with the selection marker\n if (block?.blockType == 'Paragraph' && segments?.length == 1 && segments[0] == marker) {\n markerBlock = block;\n }\n return true;\n });\n\n if (markerBlock) {\n const segments: ContentModelSegment[] = [];\n let markerSelectionIndex = markerBlock.segments.indexOf(marker);\n for (let i = markerSelectionIndex - 1; i >= 0; i--) {\n const currentSegment = markerBlock.segments[i];\n if (currentSegment.segmentType == 'Text') {\n const found = findDelimiter(currentSegment, false /*moveRightward*/);\n if (found > -1) {\n if (found == currentSegment.text.length) {\n break;\n }\n splitTextSegment(markerBlock.segments, currentSegment, i, found);\n segments.push(markerBlock.segments[i + 1]);\n break;\n } else {\n segments.push(markerBlock.segments[i]);\n }\n } else {\n break;\n }\n }\n markerSelectionIndex = markerBlock.segments.indexOf(marker);\n segments.push(marker);\n\n // Marker is at start of word\n if (segments.length <= 1) {\n return segments;\n }\n\n for (let i = markerSelectionIndex + 1; i < markerBlock.segments.length; i++) {\n const currentSegment = markerBlock.segments[i];\n if (currentSegment.segmentType == 'Text') {\n const found = findDelimiter(currentSegment, true /*moveRightward*/);\n if (found > -1) {\n if (found == 0) {\n break;\n }\n splitTextSegment(markerBlock.segments, currentSegment, i, found);\n segments.push(markerBlock.segments[i]);\n break;\n } else {\n segments.push(markerBlock.segments[i]);\n }\n } else {\n break;\n }\n }\n\n // Marker is at end of word\n if (segments[segments.length - 1] == marker) {\n return [marker];\n }\n\n return segments;\n } else {\n return [marker];\n }\n}\n\n/*\n// These are unicode characters mostly from the Category Space Separator (Zs)\nhttps://unicode.org/Public/UNIDATA/Scripts.txt\n\n\\u2000 = EN QUAD\n\\u2009 = THIN SPACE\n\\u200a = HAIR SPACE\n​\\u200b = ZERO WIDTH SPACE\n​\\u202f = NARROW NO-BREAK SPACE\n\\u205f​ = MEDIUM MATHEMATICAL SPACE\n\\u3000 = IDEOGRAPHIC SPACE\n*/\nfunction findDelimiter(segment: ContentModelText, moveRightward: boolean): number {\n const word = segment.text;\n let offset = -1;\n if (moveRightward) {\n for (let i = 0; i < word.length; i++) {\n const char = word[i];\n\n if (isPunctuation(char) || isSpace(char)) {\n offset = i;\n break;\n }\n }\n } else {\n for (let i = word.length - 1; i >= 0; i--) {\n const char = word[i];\n\n if (isPunctuation(char) || isSpace(char)) {\n offset = i + 1;\n break;\n }\n }\n }\n return offset;\n}\n\nfunction splitTextSegment(\n segments: ContentModelSegment[],\n textSegment: ContentModelText,\n index: number,\n found: number\n) {\n const text = textSegment.text;\n const newSegment = createText(text.substring(0, found), segments[index].format);\n\n if (textSegment.code) {\n newSegment.code = {\n format: { ...textSegment.code.format },\n };\n }\n\n if (textSegment.link) {\n newSegment.link = {\n format: { ...textSegment.link.format },\n dataset: { ...textSegment.link.dataset },\n };\n }\n\n textSegment.text = text.substring(found, text.length);\n segments.splice(index, 0, newSegment);\n}\n","import { addSegment, createSelectionMarker } from 'roosterjs-content-model-dom';\nimport { ContentModelTableRow } from 'roosterjs-content-model-types';\nimport { TableSelectionCoordinates } from '../table/getSelectedCells';\n\n/**\n * @internal\n */\nexport function collapseTableSelection(\n rows: ContentModelTableRow[],\n selection: TableSelectionCoordinates\n) {\n const { firstCol, firstRow } = selection;\n const cell = rows[firstRow]?.cells[firstCol];\n if (cell) {\n addSegment(cell, createSelectionMarker());\n }\n}\n","import { isBlockGroupOfType } from '../common/isBlockGroupOfType';\nimport { iterateSelections, IterateSelectionsOption } from './iterateSelections';\nimport { TableSelectionContext } from '../../publicTypes/selection/TableSelectionContext';\nimport {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelBlockGroupType,\n ContentModelDocument,\n ContentModelListItem,\n ContentModelParagraph,\n ContentModelSegment,\n ContentModelTable,\n} from 'roosterjs-content-model-types';\nimport {\n getClosestAncestorBlockGroupIndex,\n TypeOfBlockGroup,\n} from '../common/getClosestAncestorBlockGroupIndex';\n\n/**\n * @internal\n */\nexport type OperationalBlocks = {\n parent: ContentModelBlockGroup;\n block: ContentModelBlock | T;\n};\n\n/**\n * @internal\n */\nexport function getSelectedSegmentsAndParagraphs(\n model: ContentModelDocument,\n includingFormatHolder: boolean\n): [ContentModelSegment, ContentModelParagraph | null][] {\n const selections = collectSelections(model, {\n includeListFormatHolder: includingFormatHolder ? 'allSegments' : 'never',\n });\n const result: [ContentModelSegment, ContentModelParagraph | null][] = [];\n\n selections.forEach(({ segments, block }) => {\n if (segments && ((includingFormatHolder && !block) || block?.blockType == 'Paragraph')) {\n segments.forEach(segment => {\n if (segment.segmentType != 'Entity' || !segment.isReadonly) {\n result.push([segment, block?.blockType == 'Paragraph' ? block : null]);\n }\n });\n }\n });\n\n return result;\n}\n\n/**\n * @internal\n */\nexport function getSelectedSegments(\n model: ContentModelDocument,\n includingFormatHolder: boolean\n): ContentModelSegment[] {\n return getSelectedSegmentsAndParagraphs(model, includingFormatHolder).map(x => x[0]);\n}\n\n/**\n * @internal\n */\nexport function getSelectedParagraphs(model: ContentModelDocument): ContentModelParagraph[] {\n const selections = collectSelections(model, { includeListFormatHolder: 'never' });\n const result: ContentModelParagraph[] = [];\n\n removeUnmeaningfulSelections(selections);\n\n selections.forEach(({ block }) => {\n if (block?.blockType == 'Paragraph') {\n result.push(block);\n }\n });\n\n return result;\n}\n\n/**\n * @internal\n */\nexport function getOperationalBlocks(\n model: ContentModelDocument,\n blockGroupTypes: TypeOfBlockGroup[],\n stopTypes: ContentModelBlockGroupType[],\n deepFirst?: boolean\n): OperationalBlocks[] {\n const result: OperationalBlocks[] = [];\n const findSequence = deepFirst ? blockGroupTypes.map(type => [type]) : [blockGroupTypes];\n const selections = collectSelections(model, {\n includeListFormatHolder: 'never',\n contentUnderSelectedTableCell: 'ignoreForTable', // When whole table is selected, we treat the table as a single block\n });\n\n removeUnmeaningfulSelections(selections);\n\n selections.forEach(({ path, block }) => {\n for (let i = 0; i < findSequence.length; i++) {\n const groupIndex = getClosestAncestorBlockGroupIndex(path, findSequence[i], stopTypes);\n\n if (groupIndex >= 0) {\n if (result.filter(x => x.block == path[groupIndex]).length <= 0) {\n result.push({\n parent: path[groupIndex + 1],\n block: path[groupIndex] as T,\n });\n }\n break;\n } else if (i == findSequence.length - 1 && block) {\n result.push({\n parent: path[0],\n block: block,\n });\n break;\n }\n }\n });\n\n return result;\n}\n\n/**\n * @internal\n */\nexport function getFirstSelectedTable(model: ContentModelDocument): ContentModelTable | undefined {\n const selections = collectSelections(model, { includeListFormatHolder: 'never' });\n let table: ContentModelTable | undefined;\n\n removeUnmeaningfulSelections(selections);\n\n selections.forEach(({ block, tableContext }) => {\n if (!table) {\n table = block?.blockType == 'Table' ? block : tableContext?.table;\n }\n });\n\n return table;\n}\n\n/**\n * @internal\n */\nexport function getFirstSelectedListItem(\n model: ContentModelDocument\n): ContentModelListItem | undefined {\n let listItem: ContentModelListItem | undefined;\n\n getOperationalBlocks(model, ['ListItem'], ['TableCell']).forEach(r => {\n if (!listItem && isBlockGroupOfType(r.block, 'ListItem')) {\n listItem = r.block;\n }\n });\n\n return listItem;\n}\n\ninterface SelectionInfo {\n path: ContentModelBlockGroup[];\n segments?: ContentModelSegment[];\n block?: ContentModelBlock;\n tableContext?: TableSelectionContext;\n}\n\nfunction collectSelections(\n model: ContentModelDocument,\n option?: IterateSelectionsOption\n): SelectionInfo[] {\n const selections: SelectionInfo[] = [];\n\n iterateSelections(\n [model],\n (path, tableContext, block, segments) => {\n selections.push({\n path,\n tableContext,\n block,\n segments,\n });\n },\n option\n );\n\n return selections;\n}\n\nfunction removeUnmeaningfulSelections(selections: SelectionInfo[]) {\n if (\n selections.length > 1 &&\n isOnlySelectionMarkerSelected(selections, false /*checkFirstParagraph*/)\n ) {\n selections.pop();\n }\n\n // Remove head paragraph if first selection marker is the only selection\n if (\n selections.length > 1 &&\n isOnlySelectionMarkerSelected(selections, true /*checkFirstParagraph*/)\n ) {\n selections.shift();\n }\n}\n\nfunction isOnlySelectionMarkerSelected(\n selections: SelectionInfo[],\n checkFirstParagraph: boolean\n): boolean {\n const selection = selections[checkFirstParagraph ? 0 : selections.length - 1];\n\n if (\n selection.block?.blockType == 'Paragraph' &&\n selection.segments &&\n selection.segments.length > 0\n ) {\n const allSegments = selection.block.segments;\n const segment = selection.segments[0];\n\n return (\n selection.segments.length == 1 &&\n segment.segmentType == 'SelectionMarker' &&\n segment == allSegments[checkFirstParagraph ? allSegments.length - 1 : 0]\n );\n } else {\n return false;\n }\n}\n","import { TableSelectionContext } from '../../publicTypes/selection/TableSelectionContext';\nimport {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelBlockWithCache,\n ContentModelSegment,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport interface IterateSelectionsOption {\n /**\n * For selected table cell, this property determines how do we handle its content.\n * include: No matter if table cell is selected, always invoke callback function for selected content (default value)\n * ignoreForTable: When the whole table is selected we invoke callback for the table (using block parameter) but skip\n * all its cells and content, otherwise keep invoking callback for table cell and content\n * ignoreForTableOrCell: If whole table is selected, same with ignoreForTable, or if a table cell is selected, only\n * invoke callback for the table cell itself but not for its content, otherwise keep invoking callback for content.\n * @default include\n */\n contentUnderSelectedTableCell?: 'include' | 'ignoreForTable' | 'ignoreForTableOrCell';\n\n /**\n * For a selected general element, this property determines how do we handle its content.\n * contentOnly: (Default) When the whole general element is selected, we only invoke callback for its selected content\n * generalElementOnly: When the whole general element is selected, we only invoke callback for the general element (using block or\n * segment parameter depends on if it is a block or segment), but skip all its content.\n * both: When general element is selected, we invoke callback first for its content, then for general element itself\n */\n contentUnderSelectedGeneralElement?: 'contentOnly' | 'generalElementOnly' | 'both';\n\n /**\n * Whether call the callback for the list item format holder segment\n * anySegment: call the callback if any segment is selected under a list item\n * allSegments: call the callback only when all segments under the list item are selected\n * never: never call the callback for list item format holder\n * @default allSegments\n */\n includeListFormatHolder?: 'anySegment' | 'allSegments' | 'never';\n}\n\n/**\n * @internal\n * @returns True to stop iterating, otherwise keep going\n */\nexport type IterateSelectionsCallback = (\n path: ContentModelBlockGroup[],\n tableContext?: TableSelectionContext,\n block?: ContentModelBlock,\n segments?: ContentModelSegment[]\n) => void | boolean;\n\n/**\n * @internal\n * @returns True to stop iterating, otherwise keep going\n */\nexport function iterateSelections(\n path: ContentModelBlockGroup[],\n callback: IterateSelectionsCallback,\n option?: IterateSelectionsOption,\n table?: TableSelectionContext,\n treatAllAsSelect?: boolean\n) {\n const internalCallback: IterateSelectionsCallback = (path, tableContext, block, segments) => {\n if (!!(block as ContentModelBlockWithCache)?.cachedElement) {\n // TODO: This is a temporary solution. A better solution would be making all results from iterationSelection() to be readonly,\n // use a util function to change it to be editable before edit them where we clear its cached element\n delete (block as ContentModelBlockWithCache).cachedElement;\n }\n\n return callback(path, tableContext, block, segments);\n };\n\n internalIterateSelections(path, internalCallback, option, table, treatAllAsSelect);\n}\n\nfunction internalIterateSelections(\n path: ContentModelBlockGroup[],\n callback: IterateSelectionsCallback,\n option?: IterateSelectionsOption,\n table?: TableSelectionContext,\n treatAllAsSelect?: boolean\n): boolean {\n const parent = path[0];\n const includeListFormatHolder = option?.includeListFormatHolder || 'allSegments';\n const contentUnderSelectedTableCell = option?.contentUnderSelectedTableCell || 'include';\n const contentUnderSelectedGeneralElement =\n option?.contentUnderSelectedGeneralElement || 'contentOnly';\n\n let hasSelectedSegment = false;\n let hasUnselectedSegment = false;\n\n for (let i = 0; i < parent.blocks.length; i++) {\n const block = parent.blocks[i];\n\n switch (block.blockType) {\n case 'BlockGroup':\n const newPath = [block, ...path];\n\n if (block.blockGroupType == 'General') {\n const isSelected = treatAllAsSelect || block.isSelected;\n const handleGeneralContent =\n !isSelected ||\n contentUnderSelectedGeneralElement == 'both' ||\n contentUnderSelectedGeneralElement == 'contentOnly';\n const handleGeneralElement =\n isSelected &&\n (contentUnderSelectedGeneralElement == 'both' ||\n contentUnderSelectedGeneralElement == 'generalElementOnly' ||\n block.blocks.length == 0);\n\n if (\n (handleGeneralContent &&\n internalIterateSelections(\n newPath,\n callback,\n option,\n table,\n isSelected\n )) ||\n (handleGeneralElement && callback(path, table, block))\n ) {\n return true;\n }\n } else if (\n internalIterateSelections(newPath, callback, option, table, treatAllAsSelect)\n ) {\n return true;\n }\n break;\n\n case 'Table':\n const rows = block.rows;\n const isWholeTableSelected = rows.every(row =>\n row.cells.every(cell => cell.isSelected)\n );\n\n if (contentUnderSelectedTableCell != 'include' && isWholeTableSelected) {\n if (callback(path, table, block)) {\n return true;\n }\n } else {\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n const row = rows[rowIndex];\n\n for (let colIndex = 0; colIndex < row.cells.length; colIndex++) {\n const cell = row.cells[colIndex];\n if (!cell) {\n continue;\n }\n\n const newTable: TableSelectionContext = {\n table: block,\n rowIndex,\n colIndex,\n isWholeTableSelected,\n };\n\n if (cell.isSelected && callback(path, newTable)) {\n return true;\n }\n\n if (\n !cell.isSelected ||\n contentUnderSelectedTableCell != 'ignoreForTableOrCell'\n ) {\n const newPath = [cell, ...path];\n const isSelected = treatAllAsSelect || cell.isSelected;\n\n if (\n internalIterateSelections(\n newPath,\n callback,\n option,\n newTable,\n isSelected\n )\n ) {\n return true;\n }\n }\n }\n }\n }\n\n break;\n\n case 'Paragraph':\n const segments: ContentModelSegment[] = [];\n\n for (let i = 0; i < block.segments.length; i++) {\n const segment = block.segments[i];\n const isSelected = treatAllAsSelect || segment.isSelected;\n\n if (segment.segmentType == 'General') {\n const handleGeneralContent =\n !isSelected ||\n contentUnderSelectedGeneralElement == 'both' ||\n contentUnderSelectedGeneralElement == 'contentOnly';\n const handleGeneralElement =\n isSelected &&\n (contentUnderSelectedGeneralElement == 'both' ||\n contentUnderSelectedGeneralElement == 'generalElementOnly' ||\n segment.blocks.length == 0);\n\n if (\n handleGeneralContent &&\n internalIterateSelections(\n [segment, ...path],\n callback,\n option,\n table,\n isSelected\n )\n ) {\n return true;\n }\n\n if (handleGeneralElement) {\n segments.push(segment);\n }\n } else if (isSelected) {\n segments.push(segment);\n }\n\n if (isSelected) {\n hasSelectedSegment = true;\n } else {\n hasUnselectedSegment = true;\n }\n }\n\n if (segments.length > 0 && callback(path, table, block, segments)) {\n return true;\n }\n break;\n\n case 'Divider':\n case 'Entity':\n if ((treatAllAsSelect || block.isSelected) && callback(path, table, block)) {\n return true;\n }\n\n break;\n }\n }\n\n if (\n includeListFormatHolder != 'never' &&\n parent.blockGroupType == 'ListItem' &&\n hasSelectedSegment &&\n (!hasUnselectedSegment || includeListFormatHolder == 'anySegment') &&\n // When whole list item is selected, also add its format holder as selected segment\n callback(path, table, undefined /*block*/, [parent.formatHolder])\n ) {\n return true;\n }\n\n return false;\n}\n","import { Coordinates } from 'roosterjs-editor-types';\nimport { isGeneralSegment } from 'roosterjs-content-model-dom';\nimport {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelSegment,\n ContentModelTable,\n Selectable,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function setSelection(group: ContentModelBlockGroup, start?: Selectable, end?: Selectable) {\n setSelectionToBlockGroup(group, false /*isInSelection*/, start || null, end || null);\n}\n\nfunction setSelectionToBlockGroup(\n group: ContentModelBlockGroup,\n isInSelection: boolean,\n start: Selectable | null,\n end: Selectable | null\n): boolean {\n return handleSelection(isInSelection, group, start, end, isInSelection => {\n if (isGeneralSegment(group)) {\n setIsSelected(group, isInSelection);\n }\n\n group.blocks.forEach(block => {\n isInSelection = setSelectionToBlock(block, isInSelection, start, end);\n });\n\n return isInSelection;\n });\n}\n\nfunction setSelectionToBlock(\n block: ContentModelBlock,\n isInSelection: boolean,\n start: Selectable | null,\n end: Selectable | null\n) {\n switch (block.blockType) {\n case 'BlockGroup':\n return setSelectionToBlockGroup(block, isInSelection, start, end);\n\n case 'Table':\n return setSelectionToTable(block, isInSelection, start, end);\n\n case 'Divider':\n case 'Entity':\n return handleSelection(isInSelection, block, start, end, isInSelection => {\n if (isInSelection) {\n block.isSelected = true;\n } else {\n delete block.isSelected;\n }\n\n return isInSelection;\n });\n\n case 'Paragraph':\n const segmentsToDelete: number[] = [];\n\n block.segments.forEach((segment, i) => {\n isInSelection = handleSelection(\n isInSelection,\n segment,\n start,\n end,\n isInSelection => {\n return setSelectionToSegment(\n segment,\n isInSelection,\n segmentsToDelete,\n start,\n end,\n i\n );\n }\n );\n });\n\n while (segmentsToDelete.length > 0) {\n const index = segmentsToDelete.pop()!;\n\n if (index >= 0) {\n block.segments.splice(index, 1);\n }\n }\n\n return isInSelection;\n\n default:\n return isInSelection;\n }\n}\n\nfunction setSelectionToTable(\n table: ContentModelTable,\n isInSelection: boolean,\n start: Selectable | null,\n end: Selectable | null\n): boolean {\n const startCo = findCell(table, start);\n const endCo = end ? findCell(table, end) : startCo;\n\n if (!isInSelection && startCo && endCo) {\n for (let row = 0; row < table.rows.length; row++) {\n for (let col = 0; col < table.rows[row].cells.length; col++) {\n const isSelected =\n row >= startCo.y && row <= endCo.y && col >= startCo.x && col <= endCo.x;\n\n setIsSelected(table.rows[row].cells[col], isSelected);\n }\n }\n } else {\n table.rows.forEach(row =>\n row.cells.forEach(cell => {\n isInSelection = setSelectionToBlockGroup(cell, isInSelection, start, end);\n })\n );\n }\n\n return isInSelection;\n}\n\nfunction findCell(table: ContentModelTable, cell: Selectable | null): Coordinates | undefined {\n let x = -1;\n let y = -1;\n\n if (cell) {\n for (let row = 0; y < 0 && row < table.rows.length; row++) {\n for (let col = 0; x < 0 && col < table.rows[row].cells.length; col++) {\n if (table.rows[row].cells[col] == cell) {\n x = col;\n y = row;\n }\n }\n }\n }\n\n return x >= 0 && y >= 0 ? { x, y } : undefined;\n}\n\nfunction setSelectionToSegment(\n segment: ContentModelSegment,\n isInSelection: boolean,\n segmentsToDelete: number[],\n start: Selectable | null,\n end: Selectable | null,\n i: number\n) {\n switch (segment.segmentType) {\n case 'SelectionMarker':\n if (!isInSelection || (segment != start && segment != end)) {\n // Delete the selection marker when\n // 1. It is not in selection any more. Or\n // 2. It is in middle of selection, so no need to have it\n segmentsToDelete.push(i);\n }\n return isInSelection;\n\n case 'General':\n setIsSelected(segment, isInSelection);\n\n return segment != start && segment != end\n ? setSelectionToBlockGroup(segment, isInSelection, start, end)\n : isInSelection;\n\n case 'Image':\n setIsSelected(segment, isInSelection);\n segment.isSelectedAsImageSelection = start == segment && (!end || end == segment);\n return isInSelection;\n default:\n setIsSelected(segment, isInSelection);\n return isInSelection;\n }\n}\n\nfunction setIsSelected(selectable: Selectable, value: boolean) {\n if (value) {\n selectable.isSelected = true;\n } else {\n delete selectable.isSelected;\n }\n\n return value;\n}\n\nfunction handleSelection(\n isInSelection: boolean,\n model: ContentModelBlockGroup | ContentModelBlock | ContentModelSegment,\n start: Selectable | null,\n end: Selectable | null,\n callback: (isInSelection: boolean) => boolean\n) {\n isInSelection = isInSelection || model == start;\n isInSelection = callback(isInSelection);\n return isInSelection && !!end && model != end;\n}\n","import { ContentModelTable } from 'roosterjs-content-model-types';\nimport { TableOperation } from 'roosterjs-editor-types';\nimport type { CompatibleTableOperation } from 'roosterjs-editor-types/lib/compatibleTypes';\n\n/**\n * @internal\n */\nexport function alignTable(\n table: ContentModelTable,\n operation:\n | TableOperation.AlignCenter\n | TableOperation.AlignLeft\n | TableOperation.AlignRight\n | CompatibleTableOperation.AlignCenter\n | CompatibleTableOperation.AlignLeft\n | CompatibleTableOperation.AlignRight\n) {\n table.format.marginLeft = operation == TableOperation.AlignLeft ? '' : 'auto';\n table.format.marginRight = operation == TableOperation.AlignRight ? '' : 'auto';\n\n delete table.cachedElement;\n}\n","import { ContentModelTable } from 'roosterjs-content-model-types';\nimport { getSelectedCells } from './getSelectedCells';\nimport { TableOperation } from 'roosterjs-editor-types';\nimport type { CompatibleTableOperation } from 'roosterjs-editor-types/lib/compatibleTypes';\n\nconst TextAlignValueMap: Partial> = {\n [TableOperation.AlignCellLeft]: 'start',\n [TableOperation.AlignCellCenter]: 'center',\n [TableOperation.AlignCellRight]: 'end',\n};\n\nconst VerticalAlignValueMap: Partial> = {\n [TableOperation.AlignCellTop]: 'top',\n [TableOperation.AlignCellMiddle]: 'middle',\n [TableOperation.AlignCellBottom]: 'bottom',\n};\n\n/**\n * @internal\n */\nexport function alignTableCell(\n table: ContentModelTable,\n operation:\n | TableOperation.AlignCellCenter\n | TableOperation.AlignCellLeft\n | TableOperation.AlignCellRight\n | TableOperation.AlignCellTop\n | TableOperation.AlignCellMiddle\n | TableOperation.AlignCellBottom\n | CompatibleTableOperation.AlignCellCenter\n | CompatibleTableOperation.AlignCellLeft\n | CompatibleTableOperation.AlignCellRight\n | CompatibleTableOperation.AlignCellTop\n | CompatibleTableOperation.AlignCellMiddle\n | CompatibleTableOperation.AlignCellBottom\n) {\n const sel = getSelectedCells(table);\n\n if (sel) {\n const textAlign = TextAlignValueMap[operation];\n const verticalAlign = VerticalAlignValueMap[operation];\n\n for (let rowIndex = sel.firstRow; rowIndex <= sel.lastRow; rowIndex++) {\n for (let colIndex = sel.firstCol; colIndex <= sel.lastCol; colIndex++) {\n const cell = table.rows[rowIndex]?.cells[colIndex];\n const format = cell?.format;\n\n if (format) {\n delete cell.cachedElement;\n\n format.textAlign = textAlign || format.textAlign;\n format.verticalAlign = verticalAlign || format.verticalAlign;\n }\n }\n }\n }\n}\n","import { BorderKeys } from 'roosterjs-content-model-dom';\nimport { combineBorderValue, extractBorderValues } from '../../domUtils/borderValues';\nimport { setTableCellBackgroundColor } from './setTableCellBackgroundColor';\nimport { TableBorderFormat } from 'roosterjs-editor-types';\nimport { updateTableCellMetadata } from '../../domUtils/metadata/updateTableCellMetadata';\nimport { updateTableMetadata } from '../../domUtils/metadata/updateTableMetadata';\nimport {\n BorderFormat,\n ContentModelTable,\n ContentModelTableRow,\n TableMetadataFormat,\n} from 'roosterjs-content-model-types';\n\nconst DEFAULT_FORMAT: Required = {\n topBorderColor: '#ABABAB',\n bottomBorderColor: '#ABABAB',\n verticalBorderColor: '#ABABAB',\n hasHeaderRow: false,\n hasFirstColumn: false,\n hasBandedRows: false,\n hasBandedColumns: false,\n bgColorEven: null,\n bgColorOdd: '#ABABAB20',\n headerRowColor: '#ABABAB',\n tableBorderFormat: TableBorderFormat.DEFAULT,\n};\n\n/**\n * @internal\n */\nexport function applyTableFormat(\n table: ContentModelTable,\n newFormat?: TableMetadataFormat,\n keepCellShade?: boolean\n) {\n const { rows } = table;\n\n updateTableMetadata(table, format => {\n const effectiveMetadata = {\n ...DEFAULT_FORMAT,\n ...format,\n ...(newFormat || {}),\n };\n\n const bgColorOverrides = updateBgColorOverrides(rows, !keepCellShade);\n\n delete table.cachedElement;\n\n clearCache(rows);\n formatBorders(rows, effectiveMetadata);\n formatBackgroundColors(rows, effectiveMetadata, bgColorOverrides);\n setFirstColumnFormat(rows, effectiveMetadata, bgColorOverrides);\n setHeaderRowFormat(rows, effectiveMetadata, bgColorOverrides);\n\n return effectiveMetadata;\n });\n}\n\nfunction clearCache(rows: ContentModelTableRow[]) {\n rows.forEach(row => {\n row.cells.forEach(cell => {\n delete cell.cachedElement;\n });\n\n delete row.cachedElement;\n });\n}\n\nfunction updateBgColorOverrides(rows: ContentModelTableRow[], forceClear: boolean): boolean[][] {\n const result: boolean[][] = [];\n\n rows.forEach(row => {\n const currentRow: boolean[] = [];\n\n result.push(currentRow);\n\n row.cells.forEach(cell => {\n updateTableCellMetadata(cell, metadata => {\n if (metadata && forceClear) {\n currentRow.push(false);\n delete metadata.bgColorOverride;\n } else {\n currentRow.push(!!metadata?.bgColorOverride);\n }\n\n return metadata;\n });\n });\n });\n\n return result;\n}\n\ntype ShouldUseTransparentBorder = (indexProp: {\n firstRow: boolean;\n lastRow: boolean;\n firstColumn: boolean;\n lastColumn: boolean;\n}) => [boolean, boolean, boolean, boolean];\n\nconst BorderFormatters: Record = {\n [TableBorderFormat.DEFAULT]: _ => [false, false, false, false],\n [TableBorderFormat.LIST_WITH_SIDE_BORDERS]: ({ lastColumn, firstColumn }) => [\n false,\n !lastColumn,\n false,\n !firstColumn,\n ],\n [TableBorderFormat.FIRST_COLUMN_HEADER_EXTERNAL]: ({\n firstColumn,\n firstRow,\n lastColumn,\n lastRow,\n }) => [\n !firstRow,\n (!lastColumn && !firstColumn) || (firstColumn && firstRow),\n !lastRow && !firstRow,\n !firstColumn,\n ],\n [TableBorderFormat.NO_HEADER_BORDERS]: ({ firstRow, firstColumn, lastColumn }) => [\n firstRow,\n firstRow || lastColumn,\n false,\n firstRow || firstColumn,\n ],\n [TableBorderFormat.NO_SIDE_BORDERS]: ({ firstColumn, lastColumn }) => [\n false,\n lastColumn,\n false,\n firstColumn,\n ],\n [TableBorderFormat.ESPECIAL_TYPE_1]: ({ firstRow, firstColumn }) => [\n firstColumn && !firstRow,\n firstRow,\n firstColumn && !firstRow,\n firstRow && !firstColumn,\n ],\n [TableBorderFormat.ESPECIAL_TYPE_2]: ({ firstRow, firstColumn }) => [\n !firstRow,\n firstRow || !firstColumn,\n !firstRow,\n !firstColumn,\n ],\n [TableBorderFormat.ESPECIAL_TYPE_3]: ({ firstColumn, firstRow }) => [\n true,\n firstRow || !firstColumn,\n !firstRow,\n true,\n ],\n [TableBorderFormat.CLEAR]: () => [true, true, true, true],\n};\n\nfunction formatBorders(rows: ContentModelTableRow[], format: TableMetadataFormat) {\n rows.forEach((row, rowIndex) => {\n row.cells.forEach((cell, cellIndex) => {\n const transparentBorderMatrix = BorderFormatters[\n format.tableBorderFormat as TableBorderFormat\n ]({\n firstRow: rowIndex === 0,\n lastRow: rowIndex === rows.length - 1,\n firstColumn: cellIndex === 0,\n lastColumn: cellIndex === row.cells.length - 1,\n });\n\n const formatColor = [\n format.topBorderColor,\n format.verticalBorderColor,\n format.bottomBorderColor,\n format.verticalBorderColor,\n ];\n\n transparentBorderMatrix.forEach((alwaysUseTransparent, i) => {\n const borderColor = (!alwaysUseTransparent && formatColor[i]) || '';\n\n cell.format[BorderKeys[i]] = combineBorderValue({\n style: getBorderStyleFromColor(borderColor),\n width: '1px',\n color: borderColor,\n });\n });\n });\n });\n}\n\nfunction formatBackgroundColors(\n rows: ContentModelTableRow[],\n format: TableMetadataFormat,\n bgColorOverrides: boolean[][]\n) {\n const { hasBandedRows, hasBandedColumns, bgColorOdd, bgColorEven } = format;\n\n rows.forEach((row, rowIndex) => {\n row.cells.forEach((cell, colIndex) => {\n if (!bgColorOverrides[rowIndex][colIndex]) {\n const color =\n hasBandedRows || hasBandedColumns\n ? (hasBandedColumns && colIndex % 2 != 0) ||\n (hasBandedRows && rowIndex % 2 != 0)\n ? bgColorOdd\n : bgColorEven\n : bgColorEven;\n\n setTableCellBackgroundColor(cell, color);\n }\n });\n });\n}\n\nfunction setFirstColumnFormat(\n rows: ContentModelTableRow[],\n format: Partial,\n bgColorOverrides: boolean[][]\n) {\n rows.forEach((row, rowIndex) => {\n row.cells.forEach((cell, cellIndex) => {\n if (format.hasFirstColumn && cellIndex === 0) {\n cell.isHeader = true;\n\n if (rowIndex !== 0 && !bgColorOverrides[rowIndex][cellIndex]) {\n setBorderColor(cell.format, 'borderTop');\n setTableCellBackgroundColor(cell, null /*color*/);\n }\n\n if (rowIndex !== rows.length - 1 && rowIndex !== 0) {\n setBorderColor(cell.format, 'borderBottom');\n }\n } else {\n cell.isHeader = false;\n }\n });\n });\n}\n\nfunction setHeaderRowFormat(\n rows: ContentModelTableRow[],\n format: TableMetadataFormat,\n bgColorOverrides: boolean[][]\n) {\n const rowIndex = 0;\n\n rows[rowIndex]?.cells.forEach((cell, cellIndex) => {\n cell.isHeader = format.hasHeaderRow;\n\n if (format.hasHeaderRow && format.headerRowColor) {\n if (!bgColorOverrides[rowIndex][cellIndex]) {\n setTableCellBackgroundColor(cell, format.headerRowColor);\n }\n\n setBorderColor(cell.format, 'borderTop', format.headerRowColor);\n setBorderColor(cell.format, 'borderRight', format.headerRowColor);\n setBorderColor(cell.format, 'borderLeft', format.headerRowColor);\n }\n });\n}\n\nfunction setBorderColor(format: BorderFormat, key: keyof BorderFormat, value?: string) {\n const border = extractBorderValues(format[key]);\n border.color = value || '';\n border.style = getBorderStyleFromColor(border.color);\n format[key] = combineBorderValue(border);\n}\n\nfunction getBorderStyleFromColor(color?: string): string {\n return !color || color == 'transparent' ? 'none' : 'solid';\n}\n","import { ContentModelTableRow } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function canMergeCells(\n rows: ContentModelTableRow[],\n firstRow: number,\n firstCol: number,\n lastRow: number,\n lastCol: number\n): boolean {\n const noSpanAbove =\n firstCol == lastCol ||\n rows[firstRow].cells.every(\n (cell, colIndex) => colIndex < firstCol || colIndex > lastCol || !cell.spanAbove\n );\n const noSpanLeft =\n firstRow == lastRow ||\n rows.every(\n (row, rowIndex) =>\n rowIndex < firstRow || rowIndex > lastRow || !row.cells[firstCol].spanLeft\n );\n\n const noDifferentBelowSpan = rows[lastRow].cells\n .map((_, colIndex) =>\n colIndex >= firstCol && colIndex <= lastCol\n ? getBelowSpanCount(rows, lastRow, colIndex)\n : -1\n )\n .every((x, _, a) => x < 0 || x == a[firstCol]);\n const noDifferentRightSpan = rows\n .map((_, rowIndex) =>\n rowIndex >= firstRow && rowIndex <= lastRow\n ? getRightSpanCount(rows, rowIndex, lastCol)\n : -1\n )\n .every((x, _, a) => x < 0 || x == a[firstRow]);\n\n return noSpanAbove && noSpanLeft && noDifferentBelowSpan && noDifferentRightSpan;\n}\n\nfunction getBelowSpanCount(rows: ContentModelTableRow[], rowIndex: number, colIndex: number) {\n let spanCount = 0;\n\n for (let row = rowIndex + 1; row < rows.length; row++) {\n if (rows[row]?.cells[colIndex]?.spanAbove) {\n spanCount++;\n } else {\n break;\n }\n }\n\n return spanCount;\n}\n\nfunction getRightSpanCount(rows: ContentModelTableRow[], rowIndex: number, colIndex: number) {\n let spanCount = 0;\n\n for (let col = colIndex + 1; col < rows[rowIndex]?.cells.length; col++) {\n if (rows[rowIndex]?.cells[col]?.spanLeft) {\n spanCount++;\n } else {\n break;\n }\n }\n\n return spanCount;\n}\n","import { addBlock, createTable, createTableCell } from 'roosterjs-content-model-dom';\nimport { ContentModelBlockGroup, ContentModelTable } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function createTableStructure(\n parent: ContentModelBlockGroup,\n columns: number,\n rows: number\n): ContentModelTable {\n const table = createTable(rows);\n\n addBlock(parent, table);\n\n table.rows.forEach(row => {\n for (let i = 0; i < columns; i++) {\n const cell = createTableCell();\n\n row.cells.push(cell);\n }\n });\n\n return table;\n}\n","import { ContentModelTable } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function deleteTable(table: ContentModelTable) {\n table.rows = [];\n delete table.cachedElement;\n}\n","import { collapseTableSelection } from '../selection/collapseTableSelection';\nimport { ContentModelTable } from 'roosterjs-content-model-types';\nimport { getSelectedCells } from './getSelectedCells';\n\n/**\n * @internal\n */\nexport function deleteTableColumn(table: ContentModelTable) {\n const sel = getSelectedCells(table);\n\n if (sel) {\n for (let rowIndex = 0; rowIndex < table.rows.length; rowIndex++) {\n const cellInNextCol = table.rows[rowIndex].cells[sel.lastCol + 1];\n\n if (cellInNextCol) {\n cellInNextCol.spanLeft =\n cellInNextCol.spanLeft && table.rows[rowIndex].cells[sel.firstCol].spanLeft;\n }\n\n table.rows[rowIndex].cells.splice(sel.firstCol, sel.lastCol - sel.firstCol + 1);\n }\n\n table.widths.splice(sel.firstCol, sel.lastCol - sel.firstCol + 1);\n collapseTableSelection(table.rows, sel);\n }\n}\n","import { collapseTableSelection } from '../selection/collapseTableSelection';\nimport { ContentModelTable } from 'roosterjs-content-model-types';\nimport { getSelectedCells } from './getSelectedCells';\n\n/**\n * @internal\n */\nexport function deleteTableRow(table: ContentModelTable) {\n const sel = getSelectedCells(table);\n\n if (sel) {\n table.rows[sel.firstRow].cells.forEach((cell, colIndex) => {\n const cellInNextRow = table.rows[sel.lastRow + 1]?.cells[colIndex];\n\n if (cellInNextRow) {\n cellInNextRow.spanAbove = cellInNextRow.spanAbove && cell.spanAbove;\n }\n });\n\n table.rows.splice(sel.firstRow, sel.lastRow - sel.firstRow + 1);\n\n collapseTableSelection(table.rows, sel);\n }\n}\n","import hasSelectionInBlockGroup from '../../publicApi/selection/hasSelectionInBlockGroup';\nimport { ContentModelTable } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport interface TableSelectionCoordinates {\n firstRow: number;\n firstCol: number;\n lastRow: number;\n lastCol: number;\n}\n\n/**\n * @internal\n */\nexport function getSelectedCells(table: ContentModelTable): TableSelectionCoordinates | null {\n let firstRow = -1;\n let firstCol = -1;\n let lastRow = -1;\n let lastCol = -1;\n let hasSelection = false;\n\n table.rows.forEach((row, rowIndex) =>\n row.cells.forEach((cell, colIndex) => {\n if (hasSelectionInBlockGroup(cell)) {\n hasSelection = true;\n\n if (firstRow < 0) {\n firstRow = rowIndex;\n }\n\n if (firstCol < 0) {\n firstCol = colIndex;\n }\n\n lastRow = Math.max(lastRow, rowIndex);\n lastCol = Math.max(lastCol, colIndex);\n }\n })\n );\n\n return hasSelection ? { firstRow, firstCol, lastRow, lastCol } : null;\n}\n","import { ContentModelTable } from 'roosterjs-content-model-types';\nimport { createTableCell } from 'roosterjs-content-model-dom';\nimport { getSelectedCells } from './getSelectedCells';\nimport { TableOperation } from 'roosterjs-editor-types';\nimport type { CompatibleTableOperation } from 'roosterjs-editor-types/lib/compatibleTypes';\n\n/**\n * @internal\n */\nexport function insertTableColumn(\n table: ContentModelTable,\n operation:\n | TableOperation.InsertLeft\n | TableOperation.InsertRight\n | CompatibleTableOperation.InsertLeft\n | CompatibleTableOperation.InsertRight\n) {\n const sel = getSelectedCells(table);\n const insertLeft = operation == TableOperation.InsertLeft;\n\n if (sel) {\n for (let i = sel?.firstCol; i <= sel.lastCol; i++) {\n table.rows.forEach(row => {\n const cell = row.cells[insertLeft ? sel.firstCol : sel.lastCol];\n\n row.cells.splice(\n insertLeft ? sel.firstCol : sel.lastCol + 1,\n 0,\n createTableCell(cell.spanLeft, cell.spanAbove, cell.isHeader, cell.format)\n );\n });\n table.widths.splice(\n insertLeft ? sel.firstCol : sel.lastCol + 1,\n 0,\n table.widths[insertLeft ? sel.firstCol : sel.lastCol]\n );\n }\n }\n}\n","import { ContentModelTable } from 'roosterjs-content-model-types';\nimport { createTableCell } from 'roosterjs-content-model-dom';\nimport { getSelectedCells } from './getSelectedCells';\nimport { TableOperation } from 'roosterjs-editor-types';\nimport type { CompatibleTableOperation } from 'roosterjs-editor-types/lib/compatibleTypes';\n\n/**\n * @internal\n */\nexport function insertTableRow(\n table: ContentModelTable,\n operation:\n | TableOperation.InsertAbove\n | TableOperation.InsertBelow\n | CompatibleTableOperation.InsertAbove\n | CompatibleTableOperation.InsertBelow\n) {\n const sel = getSelectedCells(table);\n const insertAbove = operation == TableOperation.InsertAbove;\n\n if (sel) {\n for (let i = sel.firstRow; i <= sel.lastRow; i++) {\n const sourceRow = table.rows[insertAbove ? sel.firstRow : sel.lastRow];\n\n table.rows.splice(insertAbove ? sel.firstRow : sel.lastRow + 1, 0, {\n format: { ...sourceRow.format },\n cells: sourceRow.cells.map(cell =>\n createTableCell(cell.spanLeft, cell.spanAbove, cell.isHeader, cell.format)\n ),\n height: sourceRow.height,\n });\n }\n }\n}\n","import { canMergeCells } from './canMergeCells';\nimport { getSelectedCells } from './getSelectedCells';\nimport { ContentModelTable } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function mergeTableCells(table: ContentModelTable) {\n const sel = getSelectedCells(table);\n\n if (sel && canMergeCells(table.rows, sel.firstRow, sel.firstCol, sel.lastRow, sel.lastCol)) {\n for (let rowIndex = sel.firstRow; rowIndex <= sel.lastRow; rowIndex++) {\n for (let colIndex = sel.firstCol; colIndex <= sel.lastCol; colIndex++) {\n const cell = table.rows[rowIndex].cells[colIndex];\n\n if (cell) {\n cell.spanLeft = colIndex > sel.firstCol;\n cell.spanAbove = rowIndex > sel.firstRow;\n\n delete cell.cachedElement;\n }\n }\n\n delete table.rows[rowIndex].cachedElement;\n }\n }\n}\n","import { canMergeCells } from './canMergeCells';\nimport { ContentModelTable } from 'roosterjs-content-model-types';\nimport { getSelectedCells } from './getSelectedCells';\nimport { TableOperation } from 'roosterjs-editor-types';\nimport type { CompatibleTableOperation } from 'roosterjs-editor-types/lib/compatibleTypes';\n\n/**\n * @internal\n */\nexport function mergeTableColumn(\n table: ContentModelTable,\n operation:\n | TableOperation.MergeLeft\n | TableOperation.MergeRight\n | CompatibleTableOperation.MergeLeft\n | CompatibleTableOperation.MergeRight\n) {\n const sel = getSelectedCells(table);\n const mergeLeft = operation == TableOperation.MergeLeft;\n\n if (sel) {\n const mergingColIndex = mergeLeft ? sel.firstCol : sel.lastCol + 1;\n\n if (mergingColIndex > 0 && mergingColIndex < table.rows[0].cells.length) {\n for (let rowIndex = sel.firstRow; rowIndex <= sel.lastRow; rowIndex++) {\n const cell = table.rows[rowIndex]?.cells[mergingColIndex];\n\n if (\n cell &&\n canMergeCells(\n table.rows,\n rowIndex,\n mergingColIndex - 1,\n rowIndex,\n mergingColIndex\n )\n ) {\n cell.spanLeft = true;\n\n let newSelectedCol = mergingColIndex;\n\n while (table.rows[rowIndex]?.cells[newSelectedCol]?.spanLeft) {\n delete table.rows[rowIndex].cells[newSelectedCol].cachedElement;\n newSelectedCol--;\n }\n\n if (table.rows[rowIndex]?.cells[newSelectedCol]) {\n table.rows[rowIndex].cells[newSelectedCol].isSelected = true;\n\n delete table.rows[rowIndex].cells[newSelectedCol].cachedElement;\n }\n\n delete cell.cachedElement;\n }\n\n delete table.rows[rowIndex].cachedElement;\n }\n }\n }\n}\n","import { canMergeCells } from './canMergeCells';\nimport { ContentModelTable } from 'roosterjs-content-model-types';\nimport { getSelectedCells } from './getSelectedCells';\nimport { TableOperation } from 'roosterjs-editor-types';\nimport type { CompatibleTableOperation } from 'roosterjs-editor-types/lib/compatibleTypes';\n\n/**\n * @internal\n */\nexport function mergeTableRow(\n table: ContentModelTable,\n operation:\n | TableOperation.MergeAbove\n | TableOperation.MergeBelow\n | CompatibleTableOperation.MergeAbove\n | CompatibleTableOperation.MergeBelow\n) {\n const sel = getSelectedCells(table);\n const mergeAbove = operation == TableOperation.MergeAbove;\n\n if (sel) {\n const mergingRowIndex = mergeAbove ? sel.firstRow : sel.lastRow + 1;\n\n if (mergingRowIndex > 0 && mergingRowIndex < table.rows.length) {\n for (let colIndex = sel.firstCol; colIndex <= sel.lastCol; colIndex++) {\n const cell = table.rows[mergingRowIndex].cells[colIndex];\n\n if (\n cell &&\n canMergeCells(\n table.rows,\n mergingRowIndex - 1,\n colIndex,\n mergingRowIndex,\n colIndex\n )\n ) {\n cell.spanAbove = true;\n\n let newSelectedRow = mergingRowIndex;\n\n while (table.rows[newSelectedRow]?.cells[colIndex]?.spanAbove) {\n delete table.rows[newSelectedRow].cells[colIndex].cachedElement;\n delete table.rows[newSelectedRow].cachedElement;\n newSelectedRow--;\n }\n\n if (table.rows[newSelectedRow]?.cells[colIndex]) {\n table.rows[newSelectedRow].cells[colIndex].isSelected = true;\n\n delete table.rows[newSelectedRow].cells[colIndex].cachedElement;\n delete table.rows[newSelectedRow].cachedElement;\n }\n\n delete cell.cachedElement;\n }\n }\n }\n }\n}\n","import { addSegment, createBr } from 'roosterjs-content-model-dom';\nimport { arrayPush } from 'roosterjs-editor-dom';\nimport {\n ContentModelSegment,\n ContentModelSegmentFormat,\n ContentModelTable,\n ContentModelTableCell,\n} from 'roosterjs-content-model-types';\n\nconst MIN_HEIGHT = 22;\n\n/**\n * @internal\n */\nexport function normalizeTable(\n table: ContentModelTable,\n defaultSegmentFormat?: ContentModelSegmentFormat\n) {\n // Always collapse border and use border box for table in roosterjs to make layout simpler\n const format = table.format;\n\n if (!format.borderCollapse || !format.useBorderBox) {\n format.borderCollapse = true;\n format.useBorderBox = true;\n }\n\n // Make sure all first cells are not spanned\n // Make sure all inner cells are not header\n // Make sure all cells have content and width\n table.rows.forEach((row, rowIndex) => {\n row.cells.forEach((cell, colIndex) => {\n if (cell.blocks.length == 0) {\n addSegment(cell, createBr(defaultSegmentFormat));\n }\n\n if (rowIndex == 0) {\n cell.spanAbove = false;\n } else if (rowIndex > 0 && cell.isHeader) {\n cell.isHeader = false;\n delete cell.cachedElement;\n }\n\n if (colIndex == 0) {\n cell.spanLeft = false;\n }\n\n cell.format.useBorderBox = true;\n });\n\n // Make sure table has correct width and height array\n if (row.height < MIN_HEIGHT) {\n row.height = MIN_HEIGHT;\n }\n });\n\n const columns = Math.max(...table.rows.map(row => row.cells.length));\n\n for (let i = 0; i < columns; i++) {\n if (table.widths[i] === undefined) {\n table.widths[i] = getTableCellWidth(columns);\n }\n }\n\n // Move blocks from spanned cell to its main cell if any,\n // and remove rows/columns if all cells in it are spanned\n const colCount = table.rows[0]?.cells.length || 0;\n\n for (let colIndex = colCount - 1; colIndex > 0; colIndex--) {\n table.rows.forEach(row => {\n const cell = row.cells[colIndex];\n const leftCell = row.cells[colIndex - 1];\n if (cell && leftCell && cell.spanLeft) {\n tryMoveBlocks(leftCell, cell);\n }\n });\n\n if (table.rows.every(row => row.cells[colIndex]?.spanLeft)) {\n table.rows.forEach(row => row.cells.splice(colIndex, 1));\n table.widths.splice(\n colIndex - 1,\n 2,\n table.widths[colIndex - 1] + table.widths[colIndex]\n );\n }\n }\n\n for (let rowIndex = table.rows.length - 1; rowIndex > 0; rowIndex--) {\n const row = table.rows[rowIndex];\n\n row.cells.forEach((cell, colIndex) => {\n const aboveCell = table.rows[rowIndex - 1]?.cells[colIndex];\n if (aboveCell && cell.spanAbove) {\n tryMoveBlocks(aboveCell, cell);\n }\n });\n\n if (row.cells.every(cell => cell.spanAbove)) {\n table.rows[rowIndex - 1].height += row.height;\n table.rows.splice(rowIndex, 1);\n }\n }\n}\n\nfunction getTableCellWidth(columns: number): number {\n if (columns <= 4) {\n return 120;\n } else if (columns <= 6) {\n return 100;\n } else {\n return 70;\n }\n}\n\nfunction tryMoveBlocks(targetCell: ContentModelTableCell, sourceCell: ContentModelTableCell) {\n const onlyHasEmptyOrBr = sourceCell.blocks.every(\n block => block.blockType == 'Paragraph' && hasOnlyBrSegment(block.segments)\n );\n\n if (!onlyHasEmptyOrBr) {\n arrayPush(targetCell.blocks, sourceCell.blocks);\n sourceCell.blocks = [];\n }\n}\n\nfunction hasOnlyBrSegment(segments: ContentModelSegment[]): boolean {\n segments = segments.filter(s => s.segmentType != 'SelectionMarker');\n\n return segments.length == 0 || (segments.length == 1 && segments[0].segmentType == 'Br');\n}\n","import { ContentModelTableCell } from 'roosterjs-content-model-types';\nimport { parseColor } from 'roosterjs-editor-dom';\nimport { updateTableCellMetadata } from '../../domUtils/metadata/updateTableCellMetadata';\n\n// Using the HSL (hue, saturation and lightness) representation for RGB color values.\n// If the value of the lightness is less than 20, the color is dark.\n// If the value of the lightness is more than 80, the color is bright\nconst DARK_COLORS_LIGHTNESS = 20;\nconst BRIGHT_COLORS_LIGHTNESS = 80;\nconst White = '#ffffff';\nconst Black = '#000000';\n\n/**\n * @internal\n */\nexport function setTableCellBackgroundColor(\n cell: ContentModelTableCell,\n color: string | null | undefined,\n isColorOverride?: boolean\n) {\n if (color) {\n cell.format.backgroundColor = color;\n\n if (isColorOverride) {\n updateTableCellMetadata(cell, metadata => {\n metadata = metadata || {};\n metadata.bgColorOverride = true;\n return metadata;\n });\n }\n\n const lightness = calculateLightness(color);\n\n if (lightness < DARK_COLORS_LIGHTNESS) {\n cell.format.textColor = White;\n } else if (lightness > BRIGHT_COLORS_LIGHTNESS) {\n cell.format.textColor = Black;\n } else {\n delete cell.format.textColor;\n }\n } else {\n delete cell.format.backgroundColor;\n delete cell.format.textColor;\n }\n\n delete cell.cachedElement;\n}\n\nfunction calculateLightness(color: string) {\n const colorValues = parseColor(color);\n\n // Use the values of r,g,b to calculate the lightness in the HSl representation\n //First calculate the fraction of the light in each color, since in css the value of r,g,b is in the interval of [0,255], we have\n if (colorValues) {\n const red = colorValues[0] / 255;\n const green = colorValues[1] / 255;\n const blue = colorValues[2] / 255;\n\n //Then the lightness in the HSL representation is the average between maximum fraction of r,g,b and the minimum fraction\n return (Math.max(red, green, blue) + Math.min(red, green, blue)) * 50;\n } else {\n return 255;\n }\n}\n","import { ContentModelTable } from 'roosterjs-content-model-types';\nimport { createTableCell } from 'roosterjs-content-model-dom';\nimport { getSelectedCells } from './getSelectedCells';\n\nconst MIN_WIDTH = 30;\n\n/**\n * @internal\n */\nexport function splitTableCellHorizontally(table: ContentModelTable) {\n const sel = getSelectedCells(table);\n\n if (sel) {\n for (let colIndex = sel.lastCol; colIndex >= sel.firstCol; colIndex--) {\n if (\n table.rows.every(\n (row, rowIndex) =>\n rowIndex < sel.firstRow ||\n rowIndex > sel.lastRow ||\n row.cells[colIndex + 1]?.spanLeft\n )\n ) {\n table.rows.forEach((row, rowIndex) => {\n delete row.cells[colIndex].cachedElement;\n\n if (rowIndex >= sel.firstRow && rowIndex <= sel.lastRow) {\n row.cells[colIndex + 1].spanLeft = false;\n delete row.cells[colIndex + 1].cachedElement;\n }\n });\n } else {\n table.rows.forEach((row, rowIndex) => {\n const cell = row.cells[colIndex];\n if (cell) {\n const newCell = createTableCell(\n cell.spanLeft,\n cell.spanAbove,\n cell.isHeader,\n cell.format\n );\n\n newCell.dataset = { ...cell.dataset };\n\n if (rowIndex < sel.firstRow || rowIndex > sel.lastRow) {\n newCell.spanLeft = true;\n } else {\n newCell.isSelected = cell.isSelected;\n }\n row.cells.splice(colIndex + 1, 0, newCell);\n\n delete row.cells[colIndex].cachedElement;\n }\n });\n\n const newWidth = Math.max(table.widths[colIndex] / 2, MIN_WIDTH);\n\n table.widths.splice(colIndex, 1, newWidth, newWidth);\n }\n }\n }\n}\n","import { ContentModelTable, ContentModelTableRow } from 'roosterjs-content-model-types';\nimport { createTableCell } from 'roosterjs-content-model-dom';\nimport { getSelectedCells } from './getSelectedCells';\n\nconst MIN_HEIGHT = 22;\n\n/**\n * @internal\n */\nexport function splitTableCellVertically(table: ContentModelTable) {\n const sel = getSelectedCells(table);\n\n if (sel) {\n for (let rowIndex = sel.lastRow; rowIndex >= sel.firstRow; rowIndex--) {\n const row = table.rows[rowIndex];\n const belowRow = table.rows[rowIndex + 1];\n\n row.cells.forEach(cell => {\n delete cell.cachedElement;\n });\n\n delete row.cachedElement;\n\n if (\n belowRow?.cells.every(\n (belowCell, colIndex) =>\n colIndex < sel.firstCol || colIndex > sel.lastCol || belowCell.spanAbove\n )\n ) {\n belowRow.cells.forEach((belowCell, colIndex) => {\n if (colIndex >= sel.firstCol && colIndex <= sel.lastCol) {\n belowCell.spanAbove = false;\n delete belowCell.cachedElement;\n }\n });\n\n delete belowRow.cachedElement;\n } else {\n const newHeight = Math.max((row.height /= 2), MIN_HEIGHT);\n const newRow: ContentModelTableRow = {\n format: { ...row.format },\n height: newHeight,\n cells: row.cells.map((cell, colIndex) => {\n const newCell = createTableCell(\n cell.spanLeft,\n cell.spanAbove,\n cell.isHeader,\n cell.format\n );\n\n newCell.dataset = { ...cell.dataset };\n\n if (colIndex < sel.firstCol || colIndex > sel.lastCol) {\n newCell.spanAbove = true;\n } else {\n newCell.isSelected = cell.isSelected;\n }\n\n return newCell;\n }),\n };\n\n row.height = newHeight;\n table.rows.splice(rowIndex + 1, 0, newRow);\n }\n }\n }\n}\n","import { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { setModelAlignment } from '../../modelApi/block/setModelAlignment';\n\n/**\n * Set text alignment of selected paragraphs\n * @param editor The editor to set alignment\n * @param alignment Alignment value: left, center or right\n */\nexport default function setAlignment(\n editor: IContentModelEditor,\n alignment: 'left' | 'center' | 'right'\n) {\n formatWithContentModel(editor, 'setAlignment', model => setModelAlignment(model, alignment));\n}\n","import { formatParagraphWithContentModel } from '../utils/formatParagraphWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Set text direction of selected paragraphs (Left to right or Right to left)\n * @param editor The editor to set alignment\n * @param direction Direction value: ltr (Left to right) or rtl (Right to left)\n */\nexport default function setDirection(editor: IContentModelEditor, direction: 'ltr' | 'rtl') {\n formatParagraphWithContentModel(editor, 'setDirection', para => {\n const isOldValueRtl = para.format.direction == 'rtl';\n const isNewValueRtl = direction == 'rtl';\n\n if (isOldValueRtl != isNewValueRtl) {\n para.format.direction = direction;\n\n // Adjust margin when change direction\n // TODO: make margin and padding direction-aware, like what we did for textAlign. So no need to adjust them here\n // TODO: Do we also need to handle border here?\n const marginLeft = para.format.marginLeft;\n const paddingLeft = para.format.paddingLeft;\n\n para.format.marginLeft = para.format.marginRight;\n para.format.marginRight = marginLeft;\n\n para.format.paddingLeft = para.format.paddingRight;\n para.format.paddingRight = paddingLeft;\n }\n });\n}\n","import { defaultImplicitFormatMap } from 'roosterjs-content-model-dom';\nimport { formatParagraphWithContentModel } from '../utils/formatParagraphWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport {\n ContentModelParagraphDecorator,\n ContentModelSegmentFormat,\n} from 'roosterjs-content-model-types';\n\ntype HeaderLevelTags = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\n/**\n * Set header level of selected paragraphs\n * @param editor The editor to set header level to\n * @param headerLevel Level of header, from 1 to 6. Set to 0 means set it back to a regular paragraph\n */\nexport default function setHeaderLevel(\n editor: IContentModelEditor,\n headerLevel: 0 | 1 | 2 | 3 | 4 | 5 | 6\n) {\n formatParagraphWithContentModel(editor, 'setHeaderLevel', para => {\n const tagName =\n headerLevel > 0\n ? (('h' + headerLevel) as HeaderLevelTags | null)\n : getExistingHeaderHeaderTag(para.decorator);\n const headerStyle =\n (tagName && (defaultImplicitFormatMap[tagName] as ContentModelSegmentFormat)) || {};\n\n if (headerLevel > 0) {\n para.decorator = {\n tagName: tagName!,\n format: { ...headerStyle },\n };\n\n // Remove existing formats since tags have default font size and weight\n para.segments.forEach(segment => {\n delete segment.format.fontSize;\n delete segment.format.fontWeight;\n });\n } else if (tagName) {\n delete para.decorator;\n }\n });\n}\n\nfunction getExistingHeaderHeaderTag(\n decorator?: ContentModelParagraphDecorator\n): HeaderLevelTags | null {\n const tag = decorator?.tagName || '';\n const level = parseInt(tag.substring(1));\n\n return level >= 1 && level <= 6 ? (tag as HeaderLevelTags) : null;\n}\n","import { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { setModelIndentation } from '../../modelApi/block/setModelIndentation';\n\n/**\n * Indent or outdent to selected paragraphs\n * @param editor The editor to operate on\n * @param indentation Whether indent or outdent\n * @param length The length of pixel to indent/outdent @default 40\n */\nexport default function setIndentation(\n editor: IContentModelEditor,\n indentation: 'indent' | 'outdent',\n length?: number\n) {\n formatWithContentModel(\n editor,\n 'setIndentation',\n model => setModelIndentation(model, indentation, length),\n {\n preservePendingFormat: true,\n }\n );\n}\n","import { createParagraphDecorator } from 'roosterjs-content-model-dom';\nimport { formatParagraphWithContentModel } from '../utils/formatParagraphWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Toggles the current block(s) margin properties.\n * null deletes any existing value, undefined is ignored\n * @param editor The editor to operate on\n * @param marginTop value for top margin\n * @param marginBottom value for bottom margin\n */\nexport default function setParagraphMargin(\n editor: IContentModelEditor,\n marginTop?: string | null,\n marginBottom?: string | null\n) {\n formatParagraphWithContentModel(editor, 'setParagraphMargin', para => {\n if (!para.decorator) {\n para.decorator = createParagraphDecorator('p');\n }\n\n if (marginTop) {\n para.format.marginTop = marginTop;\n } else if (marginTop === null) {\n delete para.format.marginTop;\n }\n\n if (marginBottom) {\n para.format.marginBottom = marginBottom;\n } else if (marginBottom === null) {\n delete para.format.marginBottom;\n }\n });\n}\n","import { formatParagraphWithContentModel } from '../utils/formatParagraphWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Sets current selected block(s) line-height property and wipes such property from child segments\n * @param editor The editor to operate on\n * @param spacing Unitless/px value to set line height\n */\nexport default function setSpacing(editor: IContentModelEditor, spacing: number | string) {\n formatParagraphWithContentModel(editor, 'setSpacing', paragraph => {\n paragraph.format.lineHeight = spacing.toString();\n paragraph.segments.forEach(segment => {\n if (segment.format.lineHeight) {\n delete segment.format.lineHeight;\n }\n });\n });\n}\n","import { ContentModelFormatContainerFormat } from 'roosterjs-content-model-types';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { toggleModelBlockQuote } from '../../modelApi/block/toggleModelBlockQuote';\n\nconst DefaultQuoteFormat: ContentModelFormatContainerFormat = {\n borderLeft: '3px solid rgb(200, 200, 200)', // TODO: Support RTL\n textColor: 'rgb(102, 102, 102)',\n};\nconst BuildInQuoteFormat: ContentModelFormatContainerFormat = {\n marginTop: '1em',\n marginBottom: '1em',\n marginLeft: '40px',\n marginRight: '40px',\n paddingLeft: '10px',\n};\n\n/**\n * Toggle BLOCKQUOTE state of selected paragraphs.\n * If any selected paragraph is not under a BLOCKQUOTE, wrap them into a BLOCKQUOTE.\n * Otherwise, unwrap all related BLOCKQUOTEs.\n * @param editor The editor object to toggle BLOCKQUOTE onto\n * @param quoteFormat @optional Block format for the new quote object\n */\nexport default function toggleBlockQuote(\n editor: IContentModelEditor,\n quoteFormat: ContentModelFormatContainerFormat = DefaultQuoteFormat\n) {\n const fullQuoteFormat = {\n ...BuildInQuoteFormat,\n ...quoteFormat,\n };\n\n formatWithContentModel(\n editor,\n 'toggleBlockQuote',\n model => toggleModelBlockQuote(model, fullQuoteFormat),\n {\n preservePendingFormat: true,\n }\n );\n}\n","import { Browser } from 'roosterjs-editor-dom';\nimport { ChangeSource, EntityOperationEvent, Keys } from 'roosterjs-editor-types';\nimport { deleteAllSegmentBefore } from '../../modelApi/edit/deleteSteps/deleteAllSegmentBefore';\nimport { deleteSelection } from '../../modelApi/edit/deleteSelection';\nimport { DeleteSelectionStep } from '../../modelApi/edit/utils/DeleteSelectionStep';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport {\n getOnDeleteEntityCallback,\n handleKeyboardEventResult,\n shouldDeleteAllSegmentsBefore,\n shouldDeleteWord,\n} from '../../editor/utils/handleKeyboardEventCommon';\nimport {\n backwardDeleteWordSelection,\n forwardDeleteWordSelection,\n} from '../../modelApi/edit/deleteSteps/deleteWordSelection';\nimport {\n backwardDeleteCollapsedSelection,\n forwardDeleteCollapsedSelection,\n} from '../../modelApi/edit/deleteSteps/deleteCollapsedSelection';\n\n/**\n * @internal\n * Handle KeyDown event\n * Currently only DELETE and BACKSPACE keys are supported\n */\nexport default function handleKeyDownEvent(\n editor: IContentModelEditor,\n rawEvent: KeyboardEvent,\n triggeredEntityEvents: EntityOperationEvent[]\n) {\n const which = rawEvent.which;\n\n formatWithContentModel(\n editor,\n which == Keys.DELETE ? 'handleDeleteKey' : 'handleBackspaceKey',\n model => {\n const result = deleteSelection(\n model,\n getOnDeleteEntityCallback(editor, rawEvent, triggeredEntityEvents),\n getDeleteSteps(rawEvent)\n ).deleteResult;\n\n return handleKeyboardEventResult(editor, model, rawEvent, result);\n },\n {\n skipUndoSnapshot: true, // No need to add undo snapshot for each key down event. We will trigger a ContentChanged event and let UndoPlugin decide when to add undo snapshot\n changeSource: ChangeSource.Keyboard,\n getChangeData: () => which,\n }\n );\n}\n\nfunction getDeleteSteps(rawEvent: KeyboardEvent): (DeleteSelectionStep | null)[] {\n const isForward = rawEvent.which == Keys.DELETE;\n const deleteAllSegmentBeforeStep =\n shouldDeleteAllSegmentsBefore(rawEvent) && !isForward ? deleteAllSegmentBefore : null;\n const deleteWordSelection = shouldDeleteWord(rawEvent, !!Browser.isMac)\n ? isForward\n ? forwardDeleteWordSelection\n : backwardDeleteWordSelection\n : null;\n const deleteCollapsedSelection = isForward\n ? forwardDeleteCollapsedSelection\n : backwardDeleteCollapsedSelection;\n return [deleteAllSegmentBeforeStep, deleteWordSelection, deleteCollapsedSelection];\n}\n","import { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getPendingFormat } from '../../modelApi/format/pendingFormat';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { iterateSelections } from '../../modelApi/selection/iterateSelections';\nimport {\n createText,\n normalizeContentModel,\n setParagraphNotImplicit,\n} from 'roosterjs-content-model-dom';\n\nconst ANSI_SPACE = '\\u0020';\nconst NON_BREAK_SPACE = '\\u00A0';\n\n/**\n * Apply pending format to the text user just input\n * @param editor The editor to get format from\n * @param data The text user just input\n */\nexport default function applyPendingFormat(editor: IContentModelEditor, data: string) {\n const format = getPendingFormat(editor);\n\n if (format) {\n let isChanged = false;\n\n formatWithContentModel(\n editor,\n 'applyPendingFormat',\n model => {\n iterateSelections([model], (_, __, block, segments) => {\n if (\n block?.blockType == 'Paragraph' &&\n segments?.length == 1 &&\n segments[0].segmentType == 'SelectionMarker'\n ) {\n const marker = segments[0];\n const index = block.segments.indexOf(marker);\n const previousSegment = block.segments[index - 1];\n\n if (previousSegment?.segmentType == 'Text') {\n const text = previousSegment.text;\n const subStr = text.substr(-data.length, data.length);\n\n // For space, there can be (space) or   ( ), we treat them as the same\n if (\n subStr == data ||\n (data == ANSI_SPACE && subStr == NON_BREAK_SPACE)\n ) {\n marker.format = { ...format };\n previousSegment.text = text.substring(0, text.length - data.length);\n\n const newText = createText(\n data == ANSI_SPACE ? NON_BREAK_SPACE : data,\n {\n ...previousSegment.format,\n ...format,\n }\n );\n\n block.segments.splice(index, 0, newText);\n setParagraphNotImplicit(block);\n isChanged = true;\n }\n }\n }\n return true;\n });\n\n if (isChanged) {\n normalizeContentModel(model);\n }\n\n return isChanged;\n },\n {\n skipUndoSnapshot: true,\n }\n );\n }\n}\n","import { clearModelFormat } from '../../modelApi/common/clearModelFormat';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { normalizeContentModel } from 'roosterjs-content-model-dom';\nimport {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelSegment,\n ContentModelTable,\n} from 'roosterjs-content-model-types';\n\n/**\n * Clear format of selection\n * @param editor The editor to clear format from\n */\nexport default function clearFormat(editor: IContentModelEditor) {\n formatWithContentModel(editor, 'clearFormat', model => {\n const blocksToClear: [ContentModelBlockGroup[], ContentModelBlock][] = [];\n const segmentsToClear: ContentModelSegment[] = [];\n const tablesToClear: [ContentModelTable, boolean][] = [];\n\n clearModelFormat(model, blocksToClear, segmentsToClear, tablesToClear);\n\n normalizeContentModel(model);\n\n return blocksToClear.length > 0 || segmentsToClear.length > 0 || tablesToClear.length > 0;\n });\n}\n","import { FormatState } from 'roosterjs-editor-types';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getPendingFormat } from '../../modelApi/format/pendingFormat';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { retrieveModelFormatState } from '../../modelApi/common/retrieveModelFormatState';\n\n/**\n * Get current format state\n * @param editor The editor to get format from\n */\nexport default function getFormatState(editor: IContentModelEditor): FormatState {\n let result: FormatState = {\n ...editor.getUndoState(),\n\n isDarkMode: editor.isDarkMode(),\n zoomScale: editor.getZoomScale(),\n };\n\n formatWithContentModel(\n editor,\n 'getFormatState',\n model => {\n const pendingFormat = getPendingFormat(editor);\n\n retrieveModelFormatState(model, pendingFormat, result);\n\n return false;\n },\n {\n useReducedModel: true,\n }\n );\n\n return result;\n}\n","import { ContentModelSegmentFormat } from 'roosterjs-content-model-types';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getPendingFormat } from '../../modelApi/format/pendingFormat';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { iterateSelections } from '../../modelApi/selection/iterateSelections';\n\n/**\n * Get current segment format. This is usually used by format painter\n * @param editor The editor to get format from\n */\nexport default function getSegmentFormat(\n editor: IContentModelEditor\n): ContentModelSegmentFormat | null {\n let result = getPendingFormat(editor);\n\n if (!result) {\n formatWithContentModel(\n editor,\n 'getSegmentFormat',\n model => {\n iterateSelections(\n [model],\n (path, tableContext, block, segments) => {\n result = segments?.[0]?.format || null;\n return true;\n },\n {\n includeListFormatHolder: 'never',\n }\n );\n\n return false;\n },\n {\n useReducedModel: true,\n }\n );\n }\n\n return result;\n}\n","import { adjustSegmentSelection } from '../../modelApi/selection/adjustSegmentSelection';\nimport { ContentModelImage } from 'roosterjs-content-model-types';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Adjust selection to make sure select an image if any\n * @return Content Model Image object if an image is select, or null\n */\nexport default function adjustImageSelection(\n editor: IContentModelEditor\n): ContentModelImage | null {\n let image: ContentModelImage | null = null;\n\n formatWithContentModel(editor, 'adjustImageSelection', model =>\n adjustSegmentSelection(\n model,\n target => {\n if (target.isSelected && target.segmentType == 'Image') {\n image = target;\n return true;\n } else {\n return false;\n }\n },\n (target, ref) => target == ref\n )\n );\n\n return image;\n}\n","import formatImageWithContentModel from '../utils/formatImageWithContentModel';\nimport { ContentModelImage } from 'roosterjs-content-model-types';\nimport { getMetadata, readFile } from 'roosterjs-editor-dom';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { SelectionRangeTypes } from 'roosterjs-editor-types';\n\n/**\n * Change the selected image src\n * @param editor The editor instance\n * @param file The image file\n */\nexport default function changeImage(editor: IContentModelEditor, file: File) {\n const selection = editor.getSelectionRangeEx();\n readFile(file, dataUrl => {\n if (\n dataUrl &&\n !editor.isDisposed() &&\n selection.type === SelectionRangeTypes.ImageSelection\n ) {\n formatImageWithContentModel(\n editor,\n 'changeImage',\n (image: ContentModelImage) => {\n image.src = dataUrl;\n image.dataset = {};\n image.format.width = '';\n image.format.height = '';\n },\n {\n image: selection.image,\n previousSrc: selection.image.src,\n newSrc: dataUrl,\n originalSrc: getImageSrc(selection.image),\n }\n );\n }\n });\n}\n\nconst getImageSrc = (image: HTMLImageElement) => {\n const obj = getMetadata<{ src: string }>(image);\n return (obj && obj.src) || '';\n};\n","import { addSegment, createContentModelDocument, createImage } from 'roosterjs-content-model-dom';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getOnDeleteEntityCallback } from '../../editor/utils/handleKeyboardEventCommon';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { mergeModel } from '../../modelApi/common/mergeModel';\nimport { readFile } from 'roosterjs-editor-dom';\n\n/**\n * Insert an image into current selected position\n * @param editor The editor to operate on\n * @param file Image Blob file or source string\n */\nexport default function insertImage(editor: IContentModelEditor, imageFileOrSrc: File | string) {\n if (typeof imageFileOrSrc == 'string') {\n insertImageWithSrc(editor, imageFileOrSrc);\n } else {\n readFile(imageFileOrSrc, dataUrl => {\n if (dataUrl && !editor.isDisposed()) {\n insertImageWithSrc(editor, dataUrl);\n }\n });\n }\n}\n\nfunction insertImageWithSrc(editor: IContentModelEditor, src: string) {\n formatWithContentModel(editor, 'insertImage', model => {\n const image = createImage(src);\n const doc = createContentModelDocument();\n\n addSegment(doc, image);\n mergeModel(model, doc, getOnDeleteEntityCallback(editor), {\n mergeFormat: 'mergeAll',\n });\n\n return true;\n });\n}\n","import formatImageWithContentModel from '../utils/formatImageWithContentModel';\nimport { ContentModelImage } from 'roosterjs-content-model-types';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Set image alt text for all selected images at selection. If no images is contained\n * in selection, do nothing.\n * @param editor The editor instance\n * @param altText The image alt text\n */\nexport default function setImageAltText(editor: IContentModelEditor, altText: string) {\n formatImageWithContentModel(editor, 'setImageAltText', (image: ContentModelImage) => {\n image.alt = altText;\n });\n}\n","import applyImageBorderFormat from '../../modelApi/image/applyImageBorderFormat';\nimport formatImageWithContentModel from '../utils/formatImageWithContentModel';\nimport { Border } from '../../publicTypes/interface/Border';\nimport { ContentModelImage } from 'roosterjs-content-model-types';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Set image border style for all selected images at selection.\n * @param editor The editor instance\n * @param border the border format object. Ex: { color: 'red', width: '10px', style: 'solid'}, if one of the value in object is undefined\n * its value will not be changed. Passing null instead of an object will remove the border\n * @param borderRadius the border radius value, if undefined, the border radius will keep the actual value\n */\nexport default function setImageBorder(\n editor: IContentModelEditor,\n border: Border | null,\n borderRadius?: string\n) {\n formatImageWithContentModel(editor, 'setImageBorder', (image: ContentModelImage) => {\n applyImageBorderFormat(image, border, borderRadius);\n });\n}\n","import formatImageWithContentModel from '../utils/formatImageWithContentModel';\nimport { ContentModelImage } from 'roosterjs-content-model-types';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Set image box shadow for all selected images at selection.\n * @param editor The editor instance\n * @param boxShadow The image box boxShadow\n * @param margin The image margin for all sides (eg. \"4px\"), null to remove margin\n */\nexport default function setImageBoxShadow(\n editor: IContentModelEditor,\n boxShadow: string,\n margin?: string | null\n) {\n formatImageWithContentModel(editor, 'setImageBoxShadow', (image: ContentModelImage) => {\n image.format.boxShadow = boxShadow;\n if (margin) {\n image.format.marginBottom = margin;\n image.format.marginLeft = margin;\n image.format.marginRight = margin;\n image.format.marginTop = margin;\n } else if (margin === null) {\n delete image.format.marginBottom;\n delete image.format.marginLeft;\n delete image.format.marginRight;\n delete image.format.marginTop;\n }\n });\n}\n","export { default as insertTable } from './table/insertTable';\nexport { default as formatTable } from './table/formatTable';\nexport { default as setTableCellShade } from './table/setTableCellShade';\nexport { default as editTable } from './table/editTable';\nexport { default as toggleBullet } from './list/toggleBullet';\nexport { default as toggleNumbering } from './list/toggleNumbering';\nexport { default as toggleBold } from './segment/toggleBold';\nexport { default as toggleItalic } from './segment/toggleItalic';\nexport { default as toggleUnderline } from './segment/toggleUnderline';\nexport { default as toggleStrikethrough } from './segment/toggleStrikethrough';\nexport { default as toggleSubscript } from './segment/toggleSubscript';\nexport { default as toggleSuperscript } from './segment/toggleSuperscript';\nexport { default as setBackgroundColor } from './segment/setBackgroundColor';\nexport { default as setFontName } from './segment/setFontName';\nexport { default as setFontSize } from './segment/setFontSize';\nexport { default as setTextColor } from './segment/setTextColor';\nexport { default as changeFontSize } from './segment/changeFontSize';\nexport { default as applySegmentFormat } from './segment/applySegmentFormat';\nexport { default as changeCapitalization } from './segment/changeCapitalization';\nexport { default as insertImage } from './image/insertImage';\nexport { default as setListStyle } from './list/setListStyle';\nexport { default as setListStartNumber } from './list/setListStartNumber';\nexport { default as hasSelectionInBlock } from './selection/hasSelectionInBlock';\nexport { default as hasSelectionInSegment } from './selection/hasSelectionInSegment';\nexport { default as hasSelectionInBlockGroup } from './selection/hasSelectionInBlockGroup';\nexport { default as setIndentation } from './block/setIndentation';\nexport { default as setAlignment } from './block/setAlignment';\nexport { default as setDirection } from './block/setDirection';\nexport { default as setHeaderLevel } from './block/setHeaderLevel';\nexport { default as toggleBlockQuote } from './block/toggleBlockQuote';\nexport { default as setSpacing } from './block/setSpacing';\nexport { default as setImageBorder } from './image/setImageBorder';\nexport { default as setImageBoxShadow } from './image/setImageBoxShadow';\nexport { default as changeImage } from './image/changeImage';\nexport { default as getFormatState } from './format/getFormatState';\nexport { default as getSegmentFormat } from './format/getSegmentFormat';\nexport { default as applyPendingFormat } from './format/applyPendingFormat';\nexport { default as clearFormat } from './format/clearFormat';\nexport { default as insertLink } from './link/insertLink';\nexport { default as removeLink } from './link/removeLink';\nexport { default as adjustLinkSelection } from './link/adjustLinkSelection';\nexport { default as setImageAltText } from './image/setImageAltText';\nexport { default as adjustImageSelection } from './image/adjustImageSelection';\nexport { default as setParagraphMargin } from './block/setParagraphMargin';\nexport { default as toggleCode } from './segment/toggleCode';\nexport { default as paste } from './utils/paste';\n","import { adjustSegmentSelection } from '../../modelApi/selection/adjustSegmentSelection';\nimport { adjustWordSelection } from '../../modelApi/selection/adjustWordSelection';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getSelectedSegments } from '../../modelApi/selection/collectSelections';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { setSelection } from '../../modelApi/selection/setSelection';\n\n/**\n * Adjust selection to make sure select a hyperlink if any, or a word if original selection is collapsed\n * @return A combination of existing link display text and url if any. If there is no existing link, return selected text and null\n */\nexport default function adjustLinkSelection(editor: IContentModelEditor): [string, string | null] {\n let text = '';\n let url: string | null = null;\n\n formatWithContentModel(editor, 'adjustLinkSelection', model => {\n let changed = adjustSegmentSelection(\n model,\n target => !!target.isSelected && !!target.link,\n (target, ref) => !!target.link && target.link.format.href == ref.link!.format.href\n );\n let segments = getSelectedSegments(model, false /*includingFormatHolder*/);\n const firstSegment = segments[0];\n\n if (segments.length == 1 && firstSegment.segmentType == 'SelectionMarker') {\n segments = adjustWordSelection(model, firstSegment);\n\n if (segments.length > 1) {\n changed = true;\n setSelection(model, segments[0], segments[segments.length - 1]);\n }\n }\n\n text = segments.map(x => (x.segmentType == 'Text' ? x.text : '')).join('');\n url = segments[0]?.link?.format.href || null;\n\n return changed;\n });\n\n return [text, url];\n}\n","import { ChangeSource } from 'roosterjs-editor-types';\nimport { ContentModelLink } from 'roosterjs-content-model-types';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getOnDeleteEntityCallback } from '../../editor/utils/handleKeyboardEventCommon';\nimport { getPendingFormat } from '../../modelApi/format/pendingFormat';\nimport { getSelectedSegments } from '../../modelApi/selection/collectSelections';\nimport { HtmlSanitizer, matchLink } from 'roosterjs-editor-dom';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { mergeModel } from '../../modelApi/common/mergeModel';\nimport {\n addLink,\n addSegment,\n createContentModelDocument,\n createText,\n} from 'roosterjs-content-model-dom';\n\n// Regex matching Uri scheme\nconst URI_REGEX = /^[a-zA-Z]+:/i;\n// Regex matching begin of email address\nconst MAILTO_REGEX = /^[\\w.%+-]+@/i;\n// Regex matching begin of ftp, i.e. ftp.microsoft.com\nconst FTP_REGEX = /^ftp\\./i;\n\n/**\n * Insert a hyperlink at cursor.\n * When there is a selection, hyperlink will be applied to the selection,\n * otherwise a hyperlink will be inserted to the cursor position.\n * @param editor Editor object\n * @param link Link address, can be http(s), mailto, notes, file, unc, ftp, news, telnet, gopher, wais.\n * When protocol is not specified, a best matched protocol will be predicted.\n * @param anchorTitle Optional alt text of the link, will be shown when hover on the link\n * @param displayText Optional display text for the link.\n * @param target Optional display target for the link (\"_blank\"|\"_self\"|\"_parent\"|\"_top\"|\"{framename}\")\n * If specified, the display text of link will be replaced with this text.\n * If not specified and there wasn't a link, the link url will be used as display text.\n */\nexport default function insertLink(\n editor: IContentModelEditor,\n link: string,\n anchorTitle?: string,\n displayText?: string,\n target?: string\n) {\n let url = (checkXss(link) || '').trim();\n if (url) {\n const linkData = matchLink(url);\n const link: ContentModelLink = {\n dataset: {},\n format: {\n href: linkData ? linkData.normalizedUrl : applyLinkPrefix(url),\n anchorTitle,\n target,\n underline: true,\n },\n };\n\n const links: ContentModelLink[] = [];\n let anchorNode: Node | undefined;\n\n formatWithContentModel(\n editor,\n 'insertLink',\n model => {\n const segments = getSelectedSegments(model, false /*includingFormatHolder*/);\n const originalText = segments\n .map(x => (x.segmentType == 'Text' ? x.text : ''))\n .join('');\n const text = displayText || originalText || '';\n\n if (\n segments.some(x => x.segmentType != 'SelectionMarker') &&\n originalText == text\n ) {\n segments.forEach(x => {\n addLink(x, link);\n\n if (x.link) {\n links.push(x.link);\n }\n });\n } else if (\n segments.every(x => x.segmentType == 'SelectionMarker') ||\n (!!text && text != originalText)\n ) {\n const segment = createText(text || (linkData ? linkData.originalUrl : url), {\n ...(segments[0]?.format || {}),\n ...(getPendingFormat(editor) || {}),\n });\n const doc = createContentModelDocument();\n\n addLink(segment, link);\n addSegment(doc, segment);\n\n if (segment.link) {\n links.push(segment.link);\n }\n\n mergeModel(model, doc, getOnDeleteEntityCallback(editor), {\n mergeFormat: 'mergeAll',\n });\n }\n\n return segments.length > 0;\n },\n {\n changeSource: ChangeSource.CreateLink,\n onNodeCreated: (modelElement, node) => {\n if (!anchorNode && links.indexOf(modelElement as ContentModelLink) >= 0) {\n anchorNode = node;\n }\n },\n getChangeData: () => anchorNode,\n }\n );\n }\n}\n\n// TODO: This is copied from original code. We may need to integrate this logic into matchLink() later.\nfunction applyLinkPrefix(url: string): string {\n if (!url) {\n return url;\n }\n\n // Add link prefix per rule:\n // (a) if the url always starts with a URI scheme, leave it as it is\n // (b) if the url is an email address, xxx@... add mailto: prefix\n // (c) if the url starts with ftp., add ftp:// prefix\n // (d) rest, add http:// prefix\n let prefix = '';\n if (url.search(URI_REGEX) < 0) {\n if (url.search(MAILTO_REGEX) == 0) {\n prefix = 'mailto:';\n } else if (url.search(FTP_REGEX) == 0) {\n prefix = 'ftp://';\n } else {\n // fallback to http://\n prefix = 'http://';\n }\n }\n\n return prefix + url;\n}\n\n// TODO: This is copied from original code. However, ContentModel should be able to filter out malicious\n// attributes later, so no need to use HtmlSanitizer here\nfunction checkXss(link: string): string {\n const sanitizer = new HtmlSanitizer();\n const a = document.createElement('a');\n\n a.href = link || '';\n\n sanitizer.sanitize(a);\n // We use getAttribute because some browsers will try to make the href property a valid link.\n // This has unintended side effects when the link lacks a protocol.\n return a.getAttribute('href') || '';\n}\n","import { adjustSegmentSelection } from '../../modelApi/selection/adjustSegmentSelection';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getSelectedSegments } from '../../modelApi/selection/collectSelections';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Remove link at selection. If no links at selection, do nothing.\n * If selection contains multiple links, all of the link styles will be removed.\n * If only part of a link is selected, the whole link style will be removed.\n * @param editor The editor instance\n */\nexport default function removeLink(editor: IContentModelEditor) {\n formatWithContentModel(editor, 'removeLink', model => {\n adjustSegmentSelection(\n model,\n target => !!target.isSelected && !!target.link,\n (target, ref) =>\n target.isSelected || // Expand the selection to any link that is involved. So we can remove multiple links together\n (!!target.link && target.link.format.href == ref.link!.format.href)\n );\n\n const segments = getSelectedSegments(model, false /*includingFormatHolder*/);\n let isChanged = false;\n\n segments.forEach(segment => {\n if (segment.link) {\n isChanged = true;\n\n delete segment.link;\n }\n });\n\n return isChanged;\n });\n}\n","import { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getFirstSelectedListItem } from '../../modelApi/selection/collectSelections';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Set start number of a list item\n * @param editor The editor to operate on\n * @param value The number to set to, must be equal or greater than 1\n */\nexport default function setListStartNumber(editor: IContentModelEditor, value: number) {\n formatWithContentModel(editor, 'setListStartNumber', model => {\n const listItem = getFirstSelectedListItem(model);\n const level = listItem?.levels[listItem?.levels.length - 1];\n\n if (level) {\n level.startNumberOverride = value;\n\n return true;\n } else {\n return false;\n }\n });\n}\n","import { findListItemsInSameThread } from '../../modelApi/list/findListItemsInSameThread';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getFirstSelectedListItem } from '../../modelApi/selection/collectSelections';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { ListMetadataFormat } from 'roosterjs-content-model-types';\n\n/**\n * Set style of list items with in same thread of current item\n * @param editor The editor to operate on\n * @param style The target list item style to set\n */\nexport default function setListStyle(editor: IContentModelEditor, style: ListMetadataFormat) {\n formatWithContentModel(editor, 'setListStyle', model => {\n const listItem = getFirstSelectedListItem(model);\n\n if (listItem) {\n const listItems = findListItemsInSameThread(model, listItem);\n const levelIndex = listItem.levels.length - 1;\n\n listItems.forEach(listItem => {\n if (style.orderedStyleType !== undefined) {\n listItem.levels[levelIndex].orderedStyleType = style.orderedStyleType;\n }\n\n if (style.unorderedStyleType !== undefined) {\n listItem.levels[levelIndex].unorderedStyleType = style.unorderedStyleType;\n }\n });\n\n return true;\n } else {\n return false;\n }\n });\n}\n","import { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { setListType } from '../../modelApi/list/setListType';\n\n/**\n * Toggle bullet list type\n * - When there are some blocks not in bullet list, set all blocks to the given type\n * - When all blocks are already in bullet list, turn off / outdent there list type\n * @param editor The editor to operate on\n */\nexport default function toggleBullet(editor: IContentModelEditor) {\n formatWithContentModel(editor, 'toggleBullet', model => setListType(model, 'UL'), {\n preservePendingFormat: true,\n });\n}\n","import { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { setListType } from '../../modelApi/list/setListType';\n\n/**\n * Toggle numbering list type\n * - When there are some blocks not in numbering list, set all blocks to the given type\n * - When all blocks are already in numbering list, turn off / outdent there list type\n * @param editor The editor to operate on\n */\nexport default function toggleNumbering(editor: IContentModelEditor) {\n formatWithContentModel(editor, 'toggleNumbering', model => setListType(model, 'OL'), {\n preservePendingFormat: true,\n });\n}\n","import { ContentModelSegmentFormat } from 'roosterjs-content-model-types';\nimport { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Bulk apply segment format to all selected content. This is usually used for format painter.\n * @param editor The editor to operate on\n * @param newFormat The segment format to apply\n */\nexport default function applySegmentFormat(\n editor: IContentModelEditor,\n newFormat: ContentModelSegmentFormat\n) {\n formatSegmentWithContentModel(\n editor,\n 'applySegmentFormat',\n format => {\n format.backgroundColor = newFormat.backgroundColor;\n format.fontFamily = newFormat.fontFamily;\n format.fontSize = newFormat.fontSize;\n format.fontWeight = newFormat.fontWeight;\n format.italic = newFormat.italic;\n format.strikethrough = newFormat.strikethrough;\n format.superOrSubScriptSequence = newFormat.superOrSubScriptSequence;\n format.textColor = newFormat.textColor;\n format.underline = newFormat.underline;\n },\n undefined /* segmentHasStyleCallback*/,\n true /*includingFormatHandler*/\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Change the capitalization of text in the selection\n * @param editor The editor instance\n * @param capitalization The case option\n * @param language Optional parameter for language string that should comply to \"IETF BCP 47 Tags for\n * Identifying Languages\". For example: 'en' or 'en-US' for English, 'tr' for Turkish.\n * Default is the host environment’s current locale.\n */\nexport default function changeCapitalization(\n editor: IContentModelEditor,\n capitalization: 'sentence' | 'lowerCase' | 'upperCase' | 'capitalize',\n language?: string\n) {\n formatSegmentWithContentModel(editor, 'changeCapitalization', (_, __, segment) => {\n if (segment?.segmentType == 'Text') {\n switch (capitalization) {\n case 'lowerCase':\n segment.text = segment.text.toLocaleLowerCase(language);\n break;\n\n case 'upperCase':\n segment.text = segment.text.toLocaleUpperCase(language);\n break;\n\n case 'capitalize':\n const wordArray = segment.text.toLocaleLowerCase(language).split(' ');\n\n for (let i = 0; i < wordArray.length; i++) {\n wordArray[i] =\n wordArray[i].charAt(0).toLocaleUpperCase(language) +\n wordArray[i].slice(1);\n }\n\n segment.text = wordArray.join(' ');\n break;\n\n case 'sentence':\n // TODO: Add rules on punctuation for internationalization - TASK 104769\n const punctuationMarks = '[\\\\.\\\\!\\\\?]';\n // Find a match of a word character either:\n // - At the beginning of a string with or without preceding whitespace, for\n // example: ' hello world' and 'hello world' strings would both match 'h'.\n // - Or preceded by a punctuation mark and at least one whitespace, for\n // example 'yes. hello world' would match 'y' and 'h'.\n const regex = new RegExp('^\\\\s*\\\\w|' + punctuationMarks + '\\\\s+\\\\w', 'g');\n\n segment.text = segment.text\n .toLocaleLowerCase(language)\n .replace(regex, match => match.toLocaleUpperCase(language));\n break;\n }\n }\n });\n}\n","import { ContentModelSegmentFormat } from 'roosterjs-content-model-types';\nimport { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { parseValueWithUnit } from 'roosterjs-content-model-dom';\n\n/**\n * Default font size sequence, in pt. Suggest editor UI use this sequence as your font size list,\n * So that when increase/decrease font size, the font size can match the sequence of your font size picker\n */\nconst FONT_SIZES = [8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72];\nconst MIN_FONT_SIZE = 1;\nconst MAX_FONT_SIZE = 1000;\n\n/**\n * Increase or decrease font size in selection\n * @param editor The editor instance\n * @param change Whether increase or decrease font size\n * @param fontSizes A sorted font size array, in pt. Default value is FONT_SIZES\n */\nexport default function changeFontSize(\n editor: IContentModelEditor,\n change: 'increase' | 'decrease'\n) {\n formatSegmentWithContentModel(\n editor,\n 'changeFontSize',\n format => changeFontSizeInternal(format, change),\n undefined /* segmentHasStyleCallback*/,\n true /*includingFormatHandler*/\n );\n}\n\nfunction changeFontSizeInternal(\n format: ContentModelSegmentFormat,\n change: 'increase' | 'decrease'\n) {\n if (format.fontSize) {\n let sizeInPt = parseValueWithUnit(format.fontSize, undefined /*element*/, 'pt');\n\n if (sizeInPt > 0) {\n const newSize = getNewFontSize(sizeInPt, change == 'increase' ? 1 : -1, FONT_SIZES);\n\n format.fontSize = newSize + 'pt';\n }\n }\n}\n\nfunction getNewFontSize(pt: number, changeBase: 1 | -1, fontSizes: number[]): number {\n pt = changeBase == 1 ? Math.floor(pt) : Math.ceil(pt);\n let last = fontSizes[fontSizes.length - 1];\n if (pt <= fontSizes[0]) {\n pt = Math.max(pt + changeBase, MIN_FONT_SIZE);\n } else if (pt > last || (pt == last && changeBase == 1)) {\n pt = pt / 10;\n pt = changeBase == 1 ? Math.floor(pt) : Math.ceil(pt);\n pt = Math.min(Math.max((pt + changeBase) * 10, last), MAX_FONT_SIZE);\n } else if (changeBase == 1) {\n for (let i = 0; i < fontSizes.length; i++) {\n if (pt < fontSizes[i]) {\n pt = fontSizes[i];\n break;\n }\n }\n } else {\n for (let i = fontSizes.length - 1; i >= 0; i--) {\n if (pt > fontSizes[i]) {\n pt = fontSizes[i];\n break;\n }\n }\n }\n return pt;\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Set background color\n * @param editor The editor to operate on\n * @param backgroundColor The color to set. Pass null to remove existing color.\n */\nexport default function setBackgroundColor(\n editor: IContentModelEditor,\n backgroundColor: string | null\n) {\n formatSegmentWithContentModel(\n editor,\n 'setBackgroundColor',\n backgroundColor === null\n ? format => {\n delete format.backgroundColor;\n }\n : format => {\n format.backgroundColor = backgroundColor;\n }\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Set font name\n * @param editor The editor to operate on\n * @param fontName The font name to set\n */\nexport default function setFontName(editor: IContentModelEditor, fontName: string) {\n formatSegmentWithContentModel(\n editor,\n 'setFontName',\n (format, _, segment) => {\n format.fontFamily = fontName;\n\n if (segment?.code) {\n segment.code.format.fontFamily = fontName;\n }\n },\n undefined /* segmentHasStyleCallback*/,\n true /*includingFormatHandler*/\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Set font size\n * @param editor The editor to operate on\n * @param fontSize The font size to set\n */\nexport default function setFontSize(editor: IContentModelEditor, fontSize: string) {\n formatSegmentWithContentModel(\n editor,\n 'setFontSize',\n format => {\n format.fontSize = fontSize;\n },\n undefined /* segmentHasStyleCallback*/,\n true /*includingFormatHandler*/\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Set text color\n * @param editor The editor to operate on\n * @param textColor The text color to set. Pass null to remove existing color.\n */\nexport default function setTextColor(editor: IContentModelEditor, textColor: string | null) {\n formatSegmentWithContentModel(\n editor,\n 'setTextColor',\n textColor === null\n ? (format, _, segment) => {\n delete format.textColor;\n\n if (segment?.link) {\n delete segment.link.format.textColor;\n }\n }\n : (format, _, segment) => {\n format.textColor = textColor;\n\n if (segment?.link) {\n segment.link.format.textColor = textColor;\n }\n },\n undefined /* segmentHasStyleCallback*/,\n true /*includingFormatHandler*/\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Toggle bold style\n * @param editor The editor to operate on\n */\nexport default function toggleBold(editor: IContentModelEditor) {\n formatSegmentWithContentModel(\n editor,\n 'toggleBold',\n (format, isTurningOn) => {\n format.fontWeight = isTurningOn ? 'bold' : 'normal';\n },\n (format, _, paragraph) =>\n isBold(\n typeof format.fontWeight == 'undefined'\n ? paragraph?.decorator?.format.fontWeight\n : format.fontWeight\n )\n );\n}\n\n/**\n * @internal\n */\nexport function isBold(boldStyle?: string): boolean {\n return (\n !!boldStyle && (boldStyle == 'bold' || boldStyle == 'bolder' || parseInt(boldStyle) >= 600)\n );\n}\n","import { addCode } from 'roosterjs-content-model-dom';\nimport { ContentModelCode } from 'roosterjs-content-model-types';\nimport { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\nconst DefaultCode: ContentModelCode = {\n format: {\n fontFamily: 'monospace',\n },\n};\n\n/**\n * Toggle italic style\n * @param editor The editor to operate on\n */\nexport default function toggleCode(editor: IContentModelEditor) {\n formatSegmentWithContentModel(\n editor,\n 'toggleCode',\n (_, isTurningOn, segment) => {\n if (segment) {\n if (isTurningOn) {\n addCode(segment, DefaultCode);\n } else {\n delete segment.code;\n }\n }\n },\n (_, segment) => !!segment?.code\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Toggle italic style\n * @param editor The editor to operate on\n */\nexport default function toggleItalic(editor: IContentModelEditor) {\n formatSegmentWithContentModel(\n editor,\n 'toggleItalic',\n (format, isTurningOn) => {\n format.italic = !!isTurningOn;\n },\n format => !!format.italic\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Toggle strikethrough style\n * @param editor The editor to operate on\n */\nexport default function toggleStrikethrough(editor: IContentModelEditor) {\n formatSegmentWithContentModel(\n editor,\n 'toggleStrikethrough',\n (format, isTurningOn) => {\n format.strikethrough = !!isTurningOn;\n },\n format => !!format.strikethrough\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Toggle subscript style\n * @param editor The editor to operate on\n */\nexport default function toggleSubscript(editor: IContentModelEditor) {\n formatSegmentWithContentModel(\n editor,\n 'toggleSubscript',\n (format, isTurningOn) => {\n format.superOrSubScriptSequence = isTurningOn ? 'sub' : '';\n },\n format => format.superOrSubScriptSequence?.split(' ').pop() == 'sub'\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Toggle superscript style\n * @param editor The editor to operate on\n */\nexport default function toggleSuperscript(editor: IContentModelEditor) {\n formatSegmentWithContentModel(\n editor,\n 'toggleSuperscript',\n (format, isTurningOn) => {\n format.superOrSubScriptSequence = isTurningOn ? 'super' : '';\n },\n format => format.superOrSubScriptSequence?.split(' ').pop() == 'super'\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Toggle underline style\n * @param editor The editor to operate on\n */\nexport default function toggleUnderline(editor: IContentModelEditor) {\n formatSegmentWithContentModel(\n editor,\n 'toggleUnderline',\n (format, isTurningOn, segment) => {\n format.underline = !!isTurningOn;\n\n if (segment?.link) {\n segment.link.format.underline = !!isTurningOn;\n }\n },\n format => !!format.underline\n );\n}\n","import hasSelectionInBlockGroup from './hasSelectionInBlockGroup';\nimport hasSelectionInSegment from './hasSelectionInSegment';\nimport { ContentModelBlock } from 'roosterjs-content-model-types';\n\n/**\n * Check if there is selection within the given block\n * @param block The block to check\n */\nexport default function hasSelectionInBlock(block: ContentModelBlock): boolean {\n switch (block.blockType) {\n case 'Paragraph':\n return block.segments.some(hasSelectionInSegment);\n\n case 'Table':\n return block.rows.some(row => row.cells.some(hasSelectionInBlockGroup));\n\n case 'BlockGroup':\n return hasSelectionInBlockGroup(block);\n\n case 'Divider':\n case 'Entity':\n return !!block.isSelected;\n\n default:\n return false;\n }\n}\n","import hasSelectionInBlock from './hasSelectionInBlock';\nimport { ContentModelBlockGroup } from 'roosterjs-content-model-types';\n\n/**\n * Check if there is selection within the given block\n * @param block The block to check\n */\nexport default function hasSelectionInBlockGroup(group: ContentModelBlockGroup): boolean {\n if (group.blockGroupType == 'TableCell' && group.isSelected) {\n return true;\n }\n\n if (group.blocks.some(hasSelectionInBlock)) {\n return true;\n }\n\n return false;\n}\n","import hasSelectionInBlock from './hasSelectionInBlock';\nimport { ContentModelSegment } from 'roosterjs-content-model-types';\n\n/**\n * Check if there is selection within the given segment\n * @param segment The segment to check\n */\nexport default function hasSelectionInSegment(segment: ContentModelSegment): boolean {\n return (\n segment.isSelected ||\n (segment.segmentType == 'General' && segment.blocks.some(hasSelectionInBlock))\n );\n}\n","import { alignTable } from '../../modelApi/table/alignTable';\nimport { alignTableCell } from '../../modelApi/table/alignTableCell';\nimport { applyTableFormat } from '../../modelApi/table/applyTableFormat';\nimport { deleteTable } from '../../modelApi/table/deleteTable';\nimport { deleteTableColumn } from '../../modelApi/table/deleteTableColumn';\nimport { deleteTableRow } from '../../modelApi/table/deleteTableRow';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getFirstSelectedTable } from '../../modelApi/selection/collectSelections';\nimport { hasMetadata } from 'roosterjs-content-model-dom';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { insertTableColumn } from '../../modelApi/table/insertTableColumn';\nimport { insertTableRow } from '../../modelApi/table/insertTableRow';\nimport { mergeTableCells } from '../../modelApi/table/mergeTableCells';\nimport { mergeTableColumn } from '../../modelApi/table/mergeTableColumn';\nimport { mergeTableRow } from '../../modelApi/table/mergeTableRow';\nimport { normalizeTable } from '../../modelApi/table/normalizeTable';\nimport { splitTableCellHorizontally } from '../../modelApi/table/splitTableCellHorizontally';\nimport { splitTableCellVertically } from '../../modelApi/table/splitTableCellVertically';\nimport { TableOperation } from 'roosterjs-editor-types';\n\n/**\n * Format current focused table with the given format\n * @param editor The editor instance\n * @param operation The table operation to apply\n */\nexport default function editTable(editor: IContentModelEditor, operation: TableOperation) {\n formatWithContentModel(editor, 'editTable', model => {\n const tableModel = getFirstSelectedTable(model);\n\n if (tableModel) {\n switch (operation) {\n case TableOperation.AlignCellBottom:\n case TableOperation.AlignCellCenter:\n case TableOperation.AlignCellLeft:\n case TableOperation.AlignCellMiddle:\n case TableOperation.AlignCellRight:\n case TableOperation.AlignCellTop:\n alignTableCell(tableModel, operation);\n break;\n\n case TableOperation.AlignCenter:\n case TableOperation.AlignLeft:\n case TableOperation.AlignRight:\n alignTable(tableModel, operation);\n break;\n\n case TableOperation.DeleteColumn:\n deleteTableColumn(tableModel);\n break;\n\n case TableOperation.DeleteRow:\n deleteTableRow(tableModel);\n break;\n\n case TableOperation.DeleteTable:\n deleteTable(tableModel);\n break;\n\n case TableOperation.InsertAbove:\n case TableOperation.InsertBelow:\n insertTableRow(tableModel, operation);\n break;\n\n case TableOperation.InsertLeft:\n case TableOperation.InsertRight:\n insertTableColumn(tableModel, operation);\n break;\n\n case TableOperation.MergeAbove:\n case TableOperation.MergeBelow:\n mergeTableRow(tableModel, operation);\n break;\n\n case TableOperation.MergeCells:\n mergeTableCells(tableModel);\n break;\n\n case TableOperation.MergeLeft:\n case TableOperation.MergeRight:\n mergeTableColumn(tableModel, operation);\n break;\n\n case TableOperation.SplitHorizontally:\n splitTableCellHorizontally(tableModel);\n break;\n\n case TableOperation.SplitVertically:\n splitTableCellVertically(tableModel);\n break;\n }\n\n normalizeTable(tableModel);\n\n if (hasMetadata(tableModel)) {\n applyTableFormat(tableModel, undefined /*newFormat*/, true /*keepCellShade*/);\n }\n\n return true;\n } else {\n return false;\n }\n });\n}\n","import { applyTableFormat } from '../../modelApi/table/applyTableFormat';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getFirstSelectedTable } from '../../modelApi/selection/collectSelections';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { TableMetadataFormat } from 'roosterjs-content-model-types';\n\n/**\n * Format current focused table with the given format\n * @param editor The editor instance\n * @param format The table format to apply\n * @param keepCellShade Whether keep existing shade color when apply format if there is a manually set shade color\n */\nexport default function formatTable(\n editor: IContentModelEditor,\n format: TableMetadataFormat,\n keepCellShade?: boolean\n) {\n formatWithContentModel(editor, 'formatTable', model => {\n const tableModel = getFirstSelectedTable(model);\n\n if (tableModel) {\n applyTableFormat(tableModel, format, keepCellShade);\n\n return true;\n } else {\n return false;\n }\n });\n}\n","import { applyTableFormat } from '../../modelApi/table/applyTableFormat';\nimport { createContentModelDocument, createSelectionMarker } from 'roosterjs-content-model-dom';\nimport { createTableStructure } from '../../modelApi/table/createTableStructure';\nimport { deleteSelection } from '../../modelApi/edit/deleteSelection';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getOnDeleteEntityCallback } from '../../editor/utils/handleKeyboardEventCommon';\nimport { getPendingFormat } from '../../modelApi/format/pendingFormat';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { mergeModel } from '../../modelApi/common/mergeModel';\nimport { normalizeTable } from '../../modelApi/table/normalizeTable';\nimport { setSelection } from '../../modelApi/selection/setSelection';\nimport { TableMetadataFormat } from 'roosterjs-content-model-types';\n\n/**\n * Insert table into editor at current selection\n * @param editor The editor instance\n * @param columns Number of columns in table, it also controls the default table cell width:\n * if columns <= 4, width = 120px; if columns <= 6, width = 100px; else width = 70px\n * @param rows Number of rows in table\n * @param format (Optional) The table format. If not passed, the default format will be applied:\n * background color: #FFF; border color: #ABABAB\n */\nexport default function insertTable(\n editor: IContentModelEditor,\n columns: number,\n rows: number,\n format?: TableMetadataFormat\n) {\n formatWithContentModel(editor, 'insertTable', model => {\n const onDeleteEntity = getOnDeleteEntityCallback(editor);\n const insertPosition = deleteSelection(model, onDeleteEntity).insertPoint;\n\n if (insertPosition) {\n const doc = createContentModelDocument();\n const table = createTableStructure(doc, columns, rows);\n\n normalizeTable(table, getPendingFormat(editor) || insertPosition.marker.format);\n applyTableFormat(table, format);\n mergeModel(model, doc, onDeleteEntity, {\n insertPosition,\n mergeFormat: 'mergeAll',\n });\n\n const firstBlock = table.rows[0]?.cells[0]?.blocks[0];\n\n if (firstBlock?.blockType == 'Paragraph') {\n const marker = createSelectionMarker(firstBlock.segments[0]?.format);\n firstBlock.segments.unshift(marker);\n setSelection(model, marker);\n }\n\n return true;\n } else {\n return false;\n }\n });\n}\n","import hasSelectionInBlockGroup from '../selection/hasSelectionInBlockGroup';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getFirstSelectedTable } from '../../modelApi/selection/collectSelections';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { normalizeTable } from '../../modelApi/table/normalizeTable';\nimport { setTableCellBackgroundColor } from '../../modelApi/table/setTableCellBackgroundColor';\n\n/**\n * Set table cell shade color\n * @param editor The editor instance\n * @param color The color to set. Pass null to remove existing shade color\n */\nexport default function setTableCellShade(editor: IContentModelEditor, color: string | null) {\n formatWithContentModel(editor, 'setTableCellShade', model => {\n const table = getFirstSelectedTable(model);\n\n if (table) {\n normalizeTable(table);\n\n table.rows.forEach(row =>\n row.cells.forEach(cell => {\n if (hasSelectionInBlockGroup(cell)) {\n setTableCellBackgroundColor(cell, color, true /*isColorOverride*/);\n }\n })\n );\n\n return true;\n } else {\n return false;\n }\n });\n}\n","import { ContentModelImage } from 'roosterjs-content-model-types';\nimport { EditImageEventData, PluginEventType } from 'roosterjs-editor-types';\nimport { formatSegmentWithContentModel } from './formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * @internal\n */\nexport default function formatImageWithContentModel(\n editor: IContentModelEditor,\n apiName: string,\n callback: (segment: ContentModelImage) => void,\n eventChangeData?: EditImageEventData\n) {\n formatSegmentWithContentModel(\n editor,\n apiName,\n (_, __, segment) => {\n if (segment?.segmentType == 'Image') {\n callback(segment);\n if (eventChangeData) {\n editor.triggerPluginEvent(PluginEventType.EditImage, eventChangeData);\n }\n }\n },\n undefined /** segmentHasStyleCallback **/,\n undefined /** includingFormatHolder */\n );\n}\n","import { ContentModelParagraph } from 'roosterjs-content-model-types';\nimport { formatWithContentModel } from './formatWithContentModel';\nimport { getSelectedParagraphs } from '../../modelApi/selection/collectSelections';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * @internal\n */\nexport function formatParagraphWithContentModel(\n editor: IContentModelEditor,\n apiName: string,\n setStyleCallback: (paragraph: ContentModelParagraph) => void\n) {\n formatWithContentModel(\n editor,\n apiName,\n model => {\n const paragraphs = getSelectedParagraphs(model);\n\n paragraphs.forEach(setStyleCallback);\n\n return paragraphs.length > 0;\n },\n {\n preservePendingFormat: true,\n }\n );\n}\n","import { adjustWordSelection } from '../../modelApi/selection/adjustWordSelection';\nimport { formatWithContentModel } from './formatWithContentModel';\nimport { getPendingFormat, setPendingFormat } from '../../modelApi/format/pendingFormat';\nimport { getSelectedSegmentsAndParagraphs } from '../../modelApi/selection/collectSelections';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport {\n ContentModelParagraph,\n ContentModelSegment,\n ContentModelSegmentFormat,\n} from 'roosterjs-content-model-types';\n/**\n * @internal\n */\nexport function formatSegmentWithContentModel(\n editor: IContentModelEditor,\n apiName: string,\n toggleStyleCallback: (\n format: ContentModelSegmentFormat,\n isTuringOn: boolean,\n segment: ContentModelSegment | null\n ) => void,\n segmentHasStyleCallback?: (\n format: ContentModelSegmentFormat,\n segment: ContentModelSegment | null,\n paragraph: ContentModelParagraph | null\n ) => boolean,\n includingFormatHolder?: boolean\n) {\n formatWithContentModel(editor, apiName, model => {\n let segmentAndParagraphs = getSelectedSegmentsAndParagraphs(model, !!includingFormatHolder);\n const pendingFormat = getPendingFormat(editor);\n let isCollapsedSelection =\n segmentAndParagraphs.length == 1 &&\n segmentAndParagraphs[0][0].segmentType == 'SelectionMarker';\n\n if (isCollapsedSelection) {\n const para = segmentAndParagraphs[0][1];\n\n segmentAndParagraphs = adjustWordSelection(model, segmentAndParagraphs[0][0]).map(x => [\n x,\n para,\n ]);\n\n if (segmentAndParagraphs.length > 1) {\n isCollapsedSelection = false;\n }\n }\n\n const formatsAndSegments: [\n ContentModelSegmentFormat,\n ContentModelSegment | null,\n ContentModelParagraph | null\n ][] = pendingFormat\n ? [[pendingFormat, null, null]]\n : segmentAndParagraphs.map(item => [item[0].format, item[0], item[1]]);\n\n const isTurningOff = segmentHasStyleCallback\n ? formatsAndSegments.every(([format, segment, paragraph]) =>\n segmentHasStyleCallback(format, segment, paragraph)\n )\n : false;\n\n formatsAndSegments.forEach(([format, segment]) =>\n toggleStyleCallback(format, !isTurningOff, segment)\n );\n\n if (!pendingFormat && isCollapsedSelection) {\n const pos = editor.getFocusedPosition();\n\n if (pos) {\n setPendingFormat(editor, segmentAndParagraphs[0][0].format, pos);\n }\n }\n\n if (isCollapsedSelection) {\n editor.focus();\n return false;\n } else {\n return formatsAndSegments.length > 0;\n }\n });\n}\n","import { ChangeSource } from 'roosterjs-editor-types';\nimport {\n ContentModelDocument,\n DomToModelOption,\n OnNodeCreated,\n} from 'roosterjs-content-model-types';\nimport { getPendingFormat, setPendingFormat } from '../../modelApi/format/pendingFormat';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { reducedModelChildProcessor } from '../../domToModel/processors/reducedModelChildProcessor';\n\n/**\n * @internal\n */\nexport interface FormatWithContentModelOptions {\n /**\n * When set to true, it will only create Content Model for selected content\n */\n useReducedModel?: boolean;\n\n /**\n * When set to true, if there is pending format, it will be preserved after this format operation is done\n */\n preservePendingFormat?: boolean;\n\n /**\n * When pass true, skip adding undo snapshot when write Content Model back to DOM\n */\n skipUndoSnapshot?: boolean;\n\n /**\n * Change source used for triggering a ContentChanged event. @default ChangeSource.Format.\n */\n changeSource?: string;\n\n /**\n * An optional callback that will be called when a DOM node is created\n * @param modelElement The related Content Model element\n * @param node The node created for this model element\n */\n onNodeCreated?: OnNodeCreated;\n\n /**\n * Optional callback to get an object used for change data in ContentChangedEvent\n */\n getChangeData?: () => any;\n}\n\n/**\n * @internal\n */\nexport function formatWithContentModel(\n editor: IContentModelEditor,\n apiName: string,\n callback: (model: ContentModelDocument) => boolean,\n options?: FormatWithContentModelOptions\n) {\n const {\n useReducedModel,\n onNodeCreated,\n preservePendingFormat,\n getChangeData,\n skipUndoSnapshot,\n changeSource,\n } = options || {};\n const domToModelOption: DomToModelOption | undefined = useReducedModel\n ? {\n processorOverride: {\n child: reducedModelChildProcessor,\n },\n }\n : undefined;\n const model = editor.createContentModel(domToModelOption);\n\n if (callback(model)) {\n const callback = () => {\n editor.focus();\n if (model) {\n editor.setContentModel(model, { onNodeCreated });\n }\n\n if (preservePendingFormat) {\n const pendingFormat = getPendingFormat(editor);\n const pos = editor.getFocusedPosition();\n\n if (pendingFormat && pos) {\n setPendingFormat(editor, pendingFormat, pos);\n }\n }\n\n return getChangeData?.();\n };\n\n if (skipUndoSnapshot) {\n callback();\n\n if (changeSource) {\n editor.triggerContentChangedEvent(changeSource, getChangeData?.());\n }\n } else {\n editor.addUndoSnapshot(\n callback,\n changeSource || ChangeSource.Format,\n false /*canUndoByBackspace*/,\n {\n formatApiName: apiName,\n }\n );\n }\n\n editor.cacheContentModel?.(model);\n }\n}\n","import ContentModelBeforePasteEvent from '../../publicTypes/event/ContentModelBeforePasteEvent';\nimport { BeforePasteEvent, NodePosition } from 'roosterjs-editor-types';\nimport { ContentModelBlockFormat, FormatParser } from 'roosterjs-content-model-types';\nimport { domToContentModel } from 'roosterjs-content-model-dom';\nimport { formatWithContentModel } from './formatWithContentModel';\nimport { getOnDeleteEntityCallback } from '../../editor/utils/handleKeyboardEventCommon';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { mergeModel } from '../../modelApi/common/mergeModel';\nimport {\n createDefaultHtmlSanitizerOptions,\n getPasteType,\n handleImagePaste,\n handleTextPaste,\n moveChildNodes,\n Position,\n retrieveMetadataFromClipboard,\n sanitizePasteContent,\n} from 'roosterjs-editor-dom';\nimport {\n ChangeSource,\n ClipboardData,\n GetContentMode,\n PasteType,\n PluginEventType,\n} from 'roosterjs-editor-types';\n\n/**\n * Paste into editor using a clipboardData object\n * @param clipboardData Clipboard data retrieved from clipboard\n * @param pasteAsText Force pasting as plain text. Default value is false\n * @param applyCurrentStyle True if apply format of current selection to the pasted content,\n * false to keep original format. Default value is false. When pasteAsText is true, this parameter is ignored\n * @param pasteAsImage: When set to true, if the clipboardData contains a imageDataUri will paste the image to the editor\n */\nexport default function paste(\n editor: IContentModelEditor,\n clipboardData: ClipboardData,\n pasteAsText: boolean = false,\n applyCurrentFormat: boolean = false,\n pasteAsImage: boolean = false\n) {\n if (clipboardData.snapshotBeforePaste) {\n // Restore original content before paste a new one\n editor.setContent(clipboardData.snapshotBeforePaste);\n } else {\n clipboardData.snapshotBeforePaste = editor.getContent(GetContentMode.RawHTMLWithSelection);\n }\n\n const range = editor.getSelectionRange();\n const position = range && Position.getStart(range);\n const event = createBeforePasteEvent(\n editor,\n clipboardData,\n getPasteType(pasteAsText, applyCurrentFormat, pasteAsImage)\n );\n\n const fragment = createFragmentFromClipboardData(\n editor,\n clipboardData,\n position,\n pasteAsText,\n pasteAsImage,\n event\n );\n\n const pasteModel = domToContentModel(\n fragment,\n {\n isDarkMode: editor.isDarkMode(),\n darkColorHandler: editor.getDarkColorHandler(),\n defaultFormat: editor.getDefaultFormat(),\n },\n {\n ...event.domToModelOption,\n disableCacheElement: true,\n additionalFormatParsers: {\n ...event.domToModelOption,\n block: [...(applyCurrentFormat ? [blockElementParser] : [])],\n listLevel: [...(applyCurrentFormat ? [blockElementParser] : [])],\n },\n }\n );\n\n if (pasteModel) {\n formatWithContentModel(\n editor,\n 'Paste',\n model => {\n mergeModel(model, pasteModel, getOnDeleteEntityCallback(editor), {\n mergeFormat: applyCurrentFormat ? 'keepSourceEmphasisFormat' : 'none',\n });\n return true;\n },\n {\n changeSource: ChangeSource.Paste,\n getChangeData: () => clipboardData,\n }\n );\n }\n}\n\nfunction createBeforePasteEvent(\n editor: IContentModelEditor,\n clipboardData: ClipboardData,\n pasteType: PasteType\n): ContentModelBeforePasteEvent {\n const options = createDefaultHtmlSanitizerOptions();\n\n // Remove \"caret-color\" style generated by Safari to make sure caret shows in right color after paste\n options.cssStyleCallbacks['caret-color'] = () => false;\n\n return {\n eventType: PluginEventType.BeforePaste,\n clipboardData,\n fragment: editor.getDocument().createDocumentFragment(),\n sanitizingOption: options,\n htmlBefore: '',\n htmlAfter: '',\n htmlAttributes: {},\n domToModelOption: {},\n pasteType: pasteType,\n };\n}\n\nfunction createFragmentFromClipboardData(\n editor: IContentModelEditor,\n clipboardData: ClipboardData,\n position: NodePosition | null,\n pasteAsText: boolean,\n pasteAsImage: boolean,\n event: BeforePasteEvent\n) {\n const { fragment } = event;\n const { rawHtml, text, imageDataUri } = clipboardData;\n const trustedHTMLHandler = editor.getTrustedHTMLHandler();\n\n let doc: Document | undefined = rawHtml\n ? new DOMParser().parseFromString(trustedHTMLHandler(rawHtml), 'text/html')\n : undefined;\n\n // Step 2: Retrieve Metadata from Html and the Html that was copied.\n retrieveMetadataFromClipboard(doc, event, editor.getTrustedHTMLHandler());\n\n // Step 3: Fill the BeforePasteEvent object, especially the fragment for paste\n if ((pasteAsImage && imageDataUri) || (!pasteAsText && !text && imageDataUri)) {\n // Paste image\n handleImagePaste(imageDataUri, fragment);\n } else if (!pasteAsText && rawHtml && doc ? doc.body : false) {\n moveChildNodes(fragment, doc?.body);\n } else if (text) {\n // Paste text\n handleTextPaste(text, position, fragment);\n }\n\n // Step 4: Trigger BeforePasteEvent so that plugins can do proper change before paste\n editor.triggerPluginEvent(PluginEventType.BeforePaste, event, true /* broadcast */);\n\n // Step 5. Sanitize the fragment before paste to make sure the content is safe\n sanitizePasteContent(event, position);\n\n return fragment;\n}\n\n/**\n * For block elements that have background color style, remove the background color when user selects the merge current format\n * paste option\n */\nconst blockElementParser: FormatParser = (\n format: ContentModelBlockFormat,\n element: HTMLElement\n) => {\n if (element.style.backgroundColor) {\n element.style.backgroundColor = '';\n delete format.backgroundColor;\n }\n};\n","import { EditorPlugin } from 'roosterjs-editor-types';\nimport { getDarkColor } from 'roosterjs-color-utils';\nimport {\n ContentModelEditor,\n ContentModelEditorOptions,\n ContentModelPastePlugin,\n IContentModelEditor,\n} from 'roosterjs-content-model-editor';\n\n/**\n * Create a Content Model Editor using the given options\n * @param contentDiv The html div element needed for creating the editor\n * @param additionalPlugins The additional user defined plugins. Currently the default plugins that are already included are\n * ContentEdit, HyperLink and Paste, user don't need to add those.\n * @param initialContent The initial content to show in editor. It can't be removed by undo, user need to manually remove it if needed.\n * @returns The ContentModelEditor instance\n */\nexport function createContentModelEditor(\n contentDiv: HTMLDivElement,\n additionalPlugins?: EditorPlugin[],\n initialContent?: string\n): IContentModelEditor {\n let plugins: EditorPlugin[] = [new ContentModelPastePlugin()];\n\n if (additionalPlugins) {\n plugins = plugins.concat(additionalPlugins);\n }\n\n let options: ContentModelEditorOptions = {\n plugins: plugins,\n initialContent: initialContent,\n getDarkColor: getDarkColor,\n defaultFormat: {\n fontFamily: 'Calibri,Arial,Helvetica,sans-serif',\n fontSize: '11pt',\n textColor: '#000000',\n },\n };\n return new ContentModelEditor(contentDiv, options);\n}\n","export { createContentModelEditor } from './createContentModelEditor';\nexport * from 'roosterjs-content-model-types';\nexport * from 'roosterjs-content-model-dom';\nexport * from 'roosterjs-content-model-editor';\n","module.exports = roosterjs;","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(2594);\n"],"names":["editorContext","options","selectionRoot","context","isDarkMode","blockFormat","segmentFormat","zoomScaleFormat","isInSelection","listFormat","levels","threadItemCounts","link","format","dataset","code","blockDecorator","tagName","elementProcessors","defaultProcessorMap","processorOverride","defaultStyles","defaultStyleMap","defaultStyleOverride","formatParsers","getFormatParsers","formatParserOverride","additionalFormatParsers","defaultElementProcessors","defaultFormatParsers","allowCacheElement","disableCacheElement","range","selectionRange","type","regularRange","ranges","commonAncestorContainer","regularSelection","startContainer","startOffset","endContainer","endOffset","isSelectionCollapsed","collapsed","coordinates","table","tableSelection","firstCell","lastCell","image","imageSelection","selectionRootNode","a","linkProcessor","b","knownElementProcessor","blockquote","br","brProcessor","codeProcessor","div","em","font","fontProcessor","i","img","imageProcessor","h1","headingProcessor","h2","h3","h4","h5","h6","hr","hrProcessor","li","listItemProcessor","ol","listProcessor","p","pProcessor","pre","formatContainerProcessor","s","span","strike","strong","sub","sup","tableProcessor","u","ul","generalProcessor","textProcessor","element","elementProcessor","entity","entityProcessor","child","childProcessor","delimiter","delimiterProcessor","root","option","model","createContentModelDocument","defaultFormat","createDomToModelContext","safeInstanceOf","parseFormat","rootDirectionFormatHandler","parse","zoomScaleFormatHandler","includeRoot","normalizeContentModel","SegmentDecoratorTags","group","decorator","undefined","isSegmentDecorator","indexOf","block","container","ContextStyles","forEach","style","paragraph","createParagraph","addBlock","createBr","isSelected","addSegment","processChildNode","isNodeOfType","display","handleRegularSelection","index","nodeStartOffset","nodeEndOffset","addSelectionMarker","parent","getRegularSelectionOffsets","firstChild","nextSibling","stackFormat","toLowerCase","processor","className","getEntityFromElement","contentEditable","tryGetProcessorForEntity","getDelimiterFromElement","tryGetProcessorForDelimiter","isReadonly","id","isBlockEntity","isBlockElement","segment","wrapperToUse","cloneNode","backgroundColor","color","entityModel","createEntity","FontSizes","size","intSize","fontFamily","getAttribute","fontSize","parseInt","Number","isNaN","length","textColor","segmentOnBlock","getDefaultStyle","formatContainer","createFormatContainer","zeroFontSize","blocks","blockType","isImplicit","shouldFallbackToParagraph","Object","assign","setParagraphNotImplicit","generalBlockProcessor","createGeneralBlock","isSelectedBefore","generalSegmentProcessor","createGeneralSegment","addDecorators","createParagraphDecorator","blockProcessor","divider","createDivider","imageFormat","createImage","src","alt","title","isSelectedAsImageSelection","FormatContainerTriggerStyles","ByPassFormatContainerTags","isBlock","defaultStyle","bgcolor","getPropertyValue","some","key","marginLeft","marginRight","shouldUseFormatContainer","href","segmentUnderLink","hasAttribute","listParent","listItem","createListItem","listItemElement","push","currentBlocks","lastItem","level","updateListMetadata","metadata","processMetadata","listLevel","originalListParent","pop","calcSizes","positions","result","lastPos","tableElement","createTable","rows","selectedTable","hasTableSelection","cachedElement","tableBorder","columnPositions","rowPositions","zoomScale","row","tr","tableRow","parentElement","parentTag","sourceCol","targetCol","cells","td","hasSelectionBeforeCell","colEnd","colSpan","rowEnd","rowSpan","needCalcWidth","needCalcHeight","rect","getBoundingClientRect","width","height","segmentOnTableCell","cellFormat","tableCell","hasTd","cell","createTableCell","spannedRow","hasSelectionAfterCell","y","x","widths","heights","textNode","txt","nodeValue","txtStartOffset","txtEndOffset","addTextSegment","substring","WhiteSpaceValuesNeedToHandle","text","lastBlock","lastSegment","segments","segmentType","areSameFormats","hasSpacesOnly","whiteSpace","textModel","createText","marker","createSelectionMarker","f1","f2","keys1","getObjectKeys","keys2","every","tag","currentContainer","BLOCK_DISPLAY_STYLES","parsers","parser","SkippedStylesForBlock","SkippedStylesForTable","stackFormatInternal","processType","callback","linkFormat","codeFormat","decoratorFormat","underline","stackLinkInternal","stackCodeInternal","node","expectedType","nodeType","ListStyleDefinitionMetadata","createObjectDefinition","orderedStyleType","createNumberDefinition","unorderedStyleType","list","updateMetadata","EditingInfoDatasetName","definition","metadataString","obj","JSON","validate","stringify","SPACE_TEXT_REGEX","SPACES_REGEX","char","charCodeAt","test","isForward","replace","directionFormatHandler","_","dir","direction","apply","displayFormatHandler","htmlAlignFormatHandler","htmlAlign","calcAlign","textAlign","setAttribute","ResultMap","lineHeightFormatHandler","lineHeight","MarginKeys","marginFormatHandler","value","parseValueWithUnit","implicitFormat","PaddingKeys","paddingFormatHandler","textAlignFormatHandler","flexDirection","alignSelf","whiteSpaceFormatHandler","backgroundColorFormatHandler","getColor","darkColorHandler","setColor","borderBoxFormatHandler","boxSizing","useBorderBox","BorderKeys","borderFormatHandler","boxShadowFormatHandler","boxShadow","datasetFormatHandler","idFormatHandler","PercentageRegex","tryParseSize","attrName","attrValue","sizeFormatHandler","maxWidth","maxHeight","minWidth","minHeight","verticalAlignFormatHandler","verticalAlign","wordBreakFormatHandler","wordBreak","defaultFormatHandlerMap","bold","boldFormatHandler","border","borderBox","fontFamilyFormatHandler","fontSizeFormatHandler","italic","italicFormatHandler","letterSpacing","letterSpacingFormatHandler","linkFormatHandler","listItemMetadata","listItemMetadataFormatHandler","listItemThread","listItemThreadFormatHandler","listLevelMetadata","listLevelMetadataFormatHandler","listLevelThread","listLevelThreadFormatHandler","listStylePosition","listStylePositionFormatHandler","listType","listTypeFormatHandler","margin","padding","strikeFormatHandler","superOrSubScript","superOrSubScriptFormatHandler","tableLayout","tableLayoutFormatHandler","tableSpacing","tableSpacingFormatHandler","textColorFormatHandler","textColorOnTableCell","textColorOnTableCellFormatHandler","underlineFormatHandler","styleBasedSegmentFormats","elementBasedSegmentFormats","sharedBlockFormats","sharedContainerFormats","defaultFormatKeysPerCategory","styleBasedSegment","elementBasedSegment","tableCellBorder","reduce","defaultFormatAppliers","override","additionalParsers","map","formatKey","concat","additionalAppliers","OrderedMapPlaceholderRegex","DefaultOrderedListStyles","DefaultUnorderedListStyles","CharCodeOfA","RomanValues","M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I","getOrderedListStyleValue","template","listNumber","match","subStr","convertDecimalsToAlpha","convertDecimalsToRoman","decimal","isLowerCase","alpha","String","fromCharCode","Math","floor","romanValue","timesRomanCharAppear","repeat","toLocaleLowerCase","parentNode","depth","nodeStack","listStyleType","getTagOfNode","OrderedMap","UnorderedMap","isLiUnderOl","displayForDummyItem","splice","startNumberOverride","OLTypeToStyleMap","A","getKeyFromValue","filter","listStyle","start","startNumber","ownerDocument","defaultView","getComputedStyle","originalWidth","visualWidth","offsetWidth","round","fontWeight","blockFontWeight","createElement","moveChildNodes","appendChild","isSuperOrSubScript","fontStyle","name","target","rel","anchorId","relationship","anchorTitle","anchorClass","textDecoration","strikethrough","superOrSubScriptSequence","split","join","trim","reverse","wrapper","implicitColor","BorderCollapsed","borderCollapse","borderSpacing","isBackground","darkColor","findLightColorFromDarkColor","tryGetFontColor","parseColorValue","lightModeColor","effectiveColor","registerColor","blockElement","address","article","aside","marginTop","marginBottom","center","dd","dl","dt","fieldset","figcaption","figure","footer","form","header","main","nav","section","th","PseudoTagNames","defaultImplicitFormatMap","ltr","rtl","end","initial","justify","align","MarginValueRegex","getFontSize","styleInPt","ptToPx","parseFloat","pt","resultUnit","px","exec","numStr","unit","num","domToContentModel","contentModelToDom","get","hasMetadata","addCode","addLink","isGeneralSegment","unwrapBlock","isWhiteSpacePreserved","normalizeSingleSegment","isPunctuation","isSpace","normalizeText","newSegment","isBlockEmpty","isBlockGroupEmpty","blockGroupType","isSegmentEmpty","isBlockGroup","isSegment","WHITESPACE_PRE_VALUES","normalizeParagraph","r","c","last","secondLast","noMarkerSegments","normalizeAllSegments","j","removeEmptySegments","SPACE","NONE_BREAK_SPACE","LEADING_SPACE_REGEX","TRAILING_SPACE_REGEX","resetNormalizeSegmentContext","textSegments","ignoreLeadingSpaces","ignoreTrailingSpaces","lastInlineSegment","lastTextSegment","normalizeSegment","normalizeTextSegments","normalizeLastTextSegment","first","substr","groupToUnwrap","formatHolder","keys","rowCount","spanLeftOrColSpan","spanAboveOrRowSpan","isHeader","spanLeft","spanAbove","calcPosition","pos","Position","toArray","childNodes","normalize","doc","modelToDomContext","createModelToDomContext","modelHandlers","blockGroupChildren","startPosition","endPosition","createRange","areAllCollapsed","extractSelectionRange","current","formatAppliers","getFormatAppliers","formatApplierOverride","additionalFormatAppliers","defaultContentModelHandlers","modelHandlerOverride","defaultImplicitFormatOverride","defaultModelHandlers","onNodeCreated","handleBlock","handleBlockGroupChildren","handleBr","handleEntity","general","handleGeneralModel","handleDivider","handleImage","handleList","handleListItem","handleParagraph","handleFormatContainer","handleSegment","segmentDecorator","handleSegmentDecorator","handleTable","handleText","refNode","handlers","childBlock","next","removeChild","handleSegmentCommon","reuseCachedElement","insertBefore","applyFormat","isInlineEntity","commitEntity","wrap","addDelimiterForEntity","after","addDelimiters","imageModel","document","widthNum","heightNum","handleMetadata","newList","layer","stackLevel","itemLevel","unwrap","needParagraphWrapper","formatOnWrapper","handleSegments","firstSegment","optimize","codeNode","tableNode","tbody","col","max","createTextNode","OptimizeTags","hasSameAttributes","element1","element2","attr1","attributes","attr2","classList","contains","removeUnnecessarySpan","mergeNode","lastChild","newNode","appliers","applier","segmentNode","containerNode","tagNameOrFormat","newFormat","startNode","createNodeStack","stackChild","getChildIndex","tablePreProcessor","n","hasSelectionInTable","shouldUseTableProcessor","BorderStyles","BorderSizeRegex","combinedBorder","v","NumberDefinition","ImageMetadataFormatDefinition","widthPx","heightPx","leftPercent","rightPercent","topPercent","bottomPercent","angleRad","createStringDefinition","naturalHeight","naturalWidth","TableCellMetadataFormatDefinition","bgColorOverride","createBooleanDefinition","NullStringDefinition","BooleanDefinition","TableFormatDefinition","topBorderColor","bottomBorderColor","verticalBorderColor","hasHeaderRow","headerRowColor","hasFirstColumn","hasBandedColumns","hasBandedRows","bgColorEven","bgColorOdd","tableBorderFormat","contentDiv","createContentModelEditorCore","createContentModel","core","this","getCore","api","setContentModel","cacheContentModel","reuseModel","lifecycle","shadowEditFragment","cachedModel","getContentModelDefaultFormat","EditorBase","cloneModel","getSelectionRangeEx","defaultDomToModelOptions","createEditorContext","internalCreateContentModel","defaultModelToDomOptions","select","switchShadowEdit","editorCore","isOn","getSelectionRange","shadowEditSelectionPath","getSelectionPath","createDocumentFragment","state","editor","disposer","onPaste","event","clipboardData","isClipboardEvent","dataTransfer","items","preventDefault","extractClipboardItems","allowedCustomPasteType","then","isDisposed","Browser","isAndroid","deleteSelection","getOnDeleteEntityCallback","removeContentForAndroid","getName","initialize","addDomEventHandler","paste","e","copy","onCutCopy","cut","dispose","getState","isCut","selection","pasteModel","iterateSelections","path","tableContext","getTempDiv","getDarkColorHandler","newRange","tempDiv","querySelector","elementToSelect","childElementCount","selectionExToRange","triggerPluginEvent","clonedRoot","rawEvent","addRangeToSelection","runAsync","focus","addUndoSnapshot","getCustomData","getDocument","body","promoteToContentModelEditorCore","cmCore","textColors","backgroundColors","getDefaultSegmentFormat","promoteDefaultFormat","experimentalFeatures","isFeatureEnabled","promoteContentModelInfo","originalApi","promoteCoreApi","modifiedOptions","plugins","corePluginOverride","typeInContainer","copyPaste","createEditorCore","triggeredEntityEvents","editWithContentModel","hasDefaultFormat","onPluginEvent","eventType","handleEntityOperationEvent","handleKeyDownEvent","which","defaultPrevented","rangeEx","shouldDeleteWithContentModel","isCharacterValue","tryApplyDefaultFormat","startPos","getStart","formatWithContentModel","deleteResult","insertPoint","blockCount","blockIndex","previousBlock","applyDefaultFormat","currentFormat","pendingFormat","getPendingFormat","setPendingFormat","isModifierKey","canDeleteBefore","canDeleteAfter","previousSibling","isComposing","isInIME","checkAndApplyPendingFormat","data","clearPendingFormat","canApplyPendingFormat","unknownTagReplacement","ev","domToModelOption","getPasteSource","processPastedContentFromWordDesktop","processPastedContentWacComponents","pasteType","processPastedContentFromExcel","getTrustedHTMLHandler","sanitizingOption","additionalTagReplacements","processPastedContentFromPowerPoint","parseLink","parseDeprecatedColor","LAST_TD_END_REGEX","LAST_TR_END_REGEX","LAST_TR_REGEX","LAST_TABLE_REGEX","DEFAULT_BORDER_STYLE","excelHandler","html","htmlBefore","trMatch","tableMatch","trustedHTMLHandler","fragment","DOMParser","parseFromString","Array","from","replaceChildren","borderStyle","borderBottom","borderLeft","borderRight","borderTop","LIST_CONTAINER_ELEMENT_CLASS_NAME","EMPTY_TEXT_RUN","TEMP_ELEMENTS_CLASSES","CLASSES_TO_KEEP","LIST_ELEMENT_TAGS","LIST_ELEMENT_SELECTOR","wacSubSuperParser","wacElementProcessor","elementTag","matchesSelector","removeProperty","previousElementSibling","findClosestElementAncestor","shouldClearListContext","wacLiElementProcessor","lastblock","currentLevel","wacListItemParser","wacListLevelParser","paddingLeft","setProcessor","wacListProcessor","additionalAllowedCssClasses","isWrappedInContainer","toUpperCase","PERCENTAGE_REGEX","removeNonValidLineHeight","parsedLineHeight","listLevelParser","wordDesktopElementProcessor","listItemElementParser","chainSanitizerCallback","cssStyleCallbacks","elementCallbacks","styles","getStyles","processWordList","processWordComments","MSO_COMMENT_ANCHOR_HREF_REGEX","MSO_LIST","MSO_LIST_IGNORE","startNumberOverrideParser","fakeBullet","wordKnownLevels","wordLevel","wordList","has","getFakeBulletText","isIgnoreNode","textContent","listAttribute","Map","wordListStyle","listProps","isFakeBullet","getFakeBulletTagName","newLevel","processAsListItem","set","entry","DeprecatedColorList","property","SUPPORTED_PROTOCOLS","INVALID_LINKS_REGEX","url","URL","protocol","removeAttribute","operation","isMac","altKey","metaKey","ctrlKey","default","combineBorderValue","extractBorderValues","updateImageMetadata","updateTableCellMetadata","updateTableMetadata","isNext","newPath","nextBlock","unshift","shift","para","find","siblingSegment","left","right","TableAlignMap","alignment","paragraphOrListItemOrTable","getOperationalBlocks","newAligment","alignTable","indentation","paragraphOrListItem","isIndent","isBlockGroupOfType","isRtl","originalValue","newValue","ceil","isQuote","paragraphOfQuote","blockAndParent","canMergeQuote","wrapBlockStep1","wrapBlockStep2","clearContainerFormat","containerPathIndex","getClosestAncestorBlockGroupIndex","containerIndex","newContainer","clearListFormat","clearBlockFormat","blocksToClear","segmentsToClear","tablesToClear","arrayPush","colIndex","rowIndex","isWholeTableSelected","clearTableCellFormat","includeListFormatHolder","isOnlySelectionMarkerSelected","adjustWordSelection","isWholeBlockSelected","defaultSegmentFormat","clearSegmentsFormat","applyTableFormat","createTablesFormat","cloneBlock","cloneBlockBase","cloneBlockGroupBase","cloneFormatContainer","cloneGeneralBlock","item","cloneSelectionMarker","cloneEntity","newParagraph","cloneSegment","cloneModelWithFormat","cloneParagraph","cloneTableRow","cloneModelWithDataset","cloneTable","cloneSegmentBase","textSegment","cloneTableCell","newModel","blockGroupTypes","stopTypes","input","mergeParagraph","markerPosition","newPara","mergeToCurrentParagraph","splitParagraph","segmentIndex","mergeTable","newTable","source","newCell","k","leftCell","aboveCell","normalizeTable","insertBlock","mergeList","listItemIndex","newParaFormat","paraIndex","newListItem","applyDefaultFormatOption","mergeSegmentFormat","targetformat","sourceFormat","onDeleteEntity","insertPosition","mergeFormat","mergeValue","isFirst","formatState","firstTableContext","firstBlock","isFirstImage","isFirstSegment","retrieveStructureFormat","isMultilineSelection","headerLevel","validHeaderLevel","retrieveParagraphFormat","extractedBorder","borderColor","borderWidth","mergedFormat","superOrSubscript","isBold","retrieveSegmentFormat","canUnlink","canAddImageAltText","borderRadius","canMergeTableCell","tableFormat","isInTable","tableHasHeader","retrieveTableFormat","step1Result","blockToWrap","creator","canMerge","prevBlock","createAndAdd","additionalSteps","deleteExpandedSelection","step","isValidDeleteSelectionContext","lastParagraph","lastTableContext","mergeParagraphAfterDelete","deleteAllSegmentBefore","deleteSegment","getDeleteCollapsedSelection","segmentsWithoutBr","fixupBr","blockToDelete","segmentToDelete","getLeafSiblingBlock","createInsertPoint","deleteBlock","forwardDeleteCollapsedSelection","backwardDeleteCollapsedSelection","DeleteWordState","getDeleteWordSelection","startIndex","deleteNext","iterator","markerIndex","forward","preserveWhiteSpace","punctuation","space","newText","iterateSegments","curr","done","forwardDeleteWordSelection","backwardDeleteWordSelection","replacement","DeleteSelectionIteratingOptions","contentUnderSelectedTableCell","contentUnderSelectedGeneralElement","markerFormat","insertMarkerIndex","isBackward","currentIndex","normalizePreviousSegment","deleteSingleChar","array","deleteLength","deleteState","getPendingFormatHolder","position","holder","getFocusedPosition","equalTo","PendingFormatHolderKey","borderFormat","findListItems","pushNullIfNecessary","areListTypesCompatible","listItems","compareToIndex","currentLevels","compareToLevels","hasStartNumberOverride","levelLength","slice","currentItem","isOrderedList","filterListItems","shouldTurnOnList","paragraphOrListItems","alreadyInExpectedType","existingListItems","hasIgnoredParagraphBefore","itemIndex","firstMatcher","siblingMatcher","paragraphs","getSelectedParagraphs","changed","findIndex","setSelection","findDelimiter","moveRightward","word","offset","splitTextSegment","found","markerBlock","markerSelectionIndex","currentSegment","firstCol","getSelectedSegmentsAndParagraphs","includingFormatHolder","selections","collectSelections","deepFirst","findSequence","removeUnmeaningfulSelections","groupIndex","checkFirstParagraph","allSegments","internalIterateSelections","treatAllAsSelect","hasSelectedSegment","hasUnselectedSegment","handleGeneralContent","handleGeneralElement","setSelectionToBlockGroup","handleSelection","setIsSelected","startCo","findCell","endCo","setSelectionToTable","segmentsToDelete","setSelectionToSegment","setSelectionToBlock","selectable","TextAlignValueMap","VerticalAlignValueMap","sel","getSelectedCells","firstRow","lastRow","lastCol","DEFAULT_FORMAT","keepCellShade","effectiveMetadata","bgColorOverrides","forceClear","currentRow","updateBgColorOverrides","clearCache","cellIndex","transparentBorderMatrix","BorderFormatters","firstColumn","lastColumn","formatColor","alwaysUseTransparent","getBorderStyleFromColor","formatBorders","setTableCellBackgroundColor","formatBackgroundColors","setBorderColor","setFirstColumnFormat","setHeaderRowFormat","noSpanAbove","noSpanLeft","noDifferentBelowSpan","spanCount","getBelowSpanCount","noDifferentRightSpan","getRightSpanCount","columns","cellInNextCol","collapseTableSelection","cellInNextRow","hasSelection","insertLeft","insertAbove","sourceRow","canMergeCells","mergingColIndex","newSelectedCol","mergingRowIndex","newSelectedRow","getTableCellWidth","tryMoveBlocks","targetCell","sourceCell","isColorOverride","lightness","colorValues","parseColor","red","green","blue","min","calculateLightness","newWidth","belowRow","belowCell","newHeight","newRow","setModelAlignment","formatParagraphWithContentModel","paddingRight","headerStyle","setModelIndentation","preservePendingFormat","spacing","toString","DefaultQuoteFormat","BuildInQuoteFormat","quoteFormat","fullQuoteFormat","toggleModelBlockQuote","shouldDeleteAllSegmentsBefore","shouldDeleteWord","getDeleteSteps","handleKeyboardEventResult","skipUndoSnapshot","changeSource","getChangeData","__","previousSegment","clearModelFormat","getUndoState","getZoomScale","retrieveModelFormatState","useReducedModel","adjustSegmentSelection","ref","file","readFile","dataUrl","previousSrc","newSrc","originalSrc","getImageSrc","getMetadata","insertImageWithSrc","mergeModel","imageFileOrSrc","altText","getSelectedSegments","URI_REGEX","MAILTO_REGEX","FTP_REGEX","applyLinkPrefix","prefix","search","displayText","sanitizer","HtmlSanitizer","sanitize","checkXss","matchLink","normalizedUrl","originalText","originalUrl","modelElement","isChanged","getFirstSelectedListItem","findListItemsInSameThread","setListType","formatSegmentWithContentModel","capitalization","language","toLocaleUpperCase","wordArray","charAt","regex","RegExp","FONT_SIZES","change","sizeInPt","newSize","changeBase","fontSizes","getNewFontSize","changeFontSizeInternal","fontName","boldStyle","isTurningOn","DefaultCode","tableModel","getFirstSelectedTable","alignTableCell","deleteTableColumn","deleteTableRow","deleteTable","insertTableRow","insertTableColumn","mergeTableRow","mergeTableCells","mergeTableColumn","splitTableCellHorizontally","splitTableCellVertically","createTableStructure","apiName","eventChangeData","setStyleCallback","toggleStyleCallback","segmentHasStyleCallback","segmentAndParagraphs","isCollapsedSelection","formatsAndSegments","isTurningOff","reducedModelChildProcessor","triggerContentChangedEvent","formatApiName","pasteAsText","applyCurrentFormat","pasteAsImage","snapshotBeforePaste","setContent","getContent","createDefaultHtmlSanitizerOptions","htmlAfter","htmlAttributes","createBeforePasteEvent","getPasteType","rawHtml","imageDataUri","retrieveMetadataFromClipboard","handleImagePaste","handleTextPaste","sanitizePasteContent","createFragmentFromClipboardData","getDefaultFormat","blockElementParser","additionalPlugins","initialContent","ContentModelPastePlugin","getDarkColor","ContentModelEditor","createContentModelEditor","module","exports","roosterjs","extendStatics","d","setPrototypeOf","__proto__","prototype","hasOwnProperty","call","__extends","TypeError","constructor","create","__assign","t","arguments","__rest","getOwnPropertySymbols","propertyIsEnumerable","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__param","paramIndex","__esDecorate","ctor","descriptorIn","contextIn","initializers","extraInitializers","accept","f","kind","descriptor","access","addInitializer","init","__runInitializers","thisArg","useValue","__propKey","__setFunctionName","description","configurable","__metadata","metadataKey","metadataValue","__awaiter","_arguments","P","generator","Promise","resolve","reject","fulfilled","rejected","__generator","g","label","sent","trys","ops","verb","Symbol","op","__createBinding","o","m","k2","__esModule","writable","enumerable","__exportStar","__values","__read","ar","error","__spread","__spreadArrays","il","jl","__spreadArray","to","pack","l","__await","__asyncGenerator","asyncIterator","q","resume","fulfill","settle","__asyncDelegator","__asyncValues","__makeTemplateObject","cooked","raw","__setModuleDefault","__importStar","mod","__importDefault","__classPrivateFieldGet","receiver","__classPrivateFieldSet","__classPrivateFieldIn","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","prop","toStringTag","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"rooster-content-model-min.js","mappings":"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","sources":["webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/context/createDomToModelContext.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/context/defaultProcessors.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/domToContentModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/blockProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/brProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/childProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/codeProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/delimiterProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/elementProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/entityProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/fontProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/formatContainerProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/generalProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/headingProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/hrProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/imageProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/knownElementProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/linkProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/listItemProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/listProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/pProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/tableProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/processors/textProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/addSelectionMarker.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/areSameFormats.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/getBoundingClientRect.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/getDefaultStyle.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/getRegularSelectionOffsets.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/isBlockElement.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/parseFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domToModel/utils/stackFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domUtils/isNodeOfType.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domUtils/metadata/updateListMetadata.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domUtils/metadata/updateMetadata.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/domUtils/stringUtil.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/directionFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/displayFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/htmlAlignFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/lineHeightFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/marginFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/paddingFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/textAlignFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/block/whiteSpaceFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/backgroundColorFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/borderBoxFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/borderFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/boxShadowFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/datasetFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/idFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/sizeFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/verticalAlignFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/common/wordBreakFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/defaultFormatHandlers.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listItemMetadataFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listItemThreadFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listLevelMetadataFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listLevelThreadFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listStylePositionFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/list/listTypeFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/root/rootDirectionFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/root/zoomScaleFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/boldFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/fontFamilyFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/fontSizeFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/italicFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/letterSpacingFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/linkFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/strikeFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/superOrSubScriptFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/textColorFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/segment/underlineFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/tableLayoutFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/tableSpacingFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/table/textColorOnTableCellFormatHandler.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/color.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/defaultStyles.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/dir.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/formatHandlers/utils/parseValueWithUnit.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/index.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/block/setParagraphNotImplicit.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/addBlock.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/addDecorators.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/addSegment.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/isEmpty.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/isGeneralSegment.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/isWhiteSpacePreserved.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/normalizeContentModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/normalizeParagraph.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/normalizeSegment.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/common/unwrapBlock.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createBr.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createContentModelDocument.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createDivider.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createEntity.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createFormatContainer.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createGeneralBlock.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createGeneralSegment.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createImage.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createListItem.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createParagraph.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createParagraphDecorator.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createSelectionMarker.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createTable.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createTableCell.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelApi/creators/createText.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/contentModelToDom.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/context/createModelToDomContext.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/context/defaultContentModelHandlers.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBlock.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBlockGroupChildren.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBr.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleDivider.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleEntity.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleFormatContainer.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleGeneralModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleImage.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleList.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleListItem.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleParagraph.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleSegment.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleSegmentDecorator.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleTable.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/handlers/handleText.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/mergeNode.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/optimize.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/optimizers/removeUnnecessarySpan.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/applyFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/handleSegmentCommon.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/reuseCachedElement.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-dom/lib/modelToDom/utils/stackFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/domToModel/processors/reducedModelChildProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/domToModel/processors/tablePreProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/domUtils/borderValues.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/updateImageMetadata.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/updateTableCellMetadata.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/domUtils/metadata/updateTableMetadata.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/ContentModelEditor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/createContentModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/createEditorContext.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/setContentModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/coreApi/switchShadowEdit.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/corePlugins/ContentModelCopyPastePlugin.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/corePlugins/ContentModelTypeInContainerPlugin.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/createContentModelEditorCore.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/isContentModelEditor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/ContentModelEditPlugin.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/ContentModelFormatPlugin.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/ContentModelPastePlugin.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/Excel/processPastedContentFromExcel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/PowerPoint/processPastedContentFromPowerPoint.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WacComponents/processPastedContentWacComponents.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/processPastedContentFromWordDesktop.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/processWordComments.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/WordDesktop/processWordLists.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/addParser.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/deprecatedColorParser.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/linkParser.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/plugins/PastePlugin/utils/setProcessor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/editor/utils/handleKeyboardEventCommon.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/index.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/getLeafSiblingBlock.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/setModelAlignment.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/setModelIndentation.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/block/toggleModelBlockQuote.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/clearModelFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/cloneModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/getClosestAncestorBlockGroupIndex.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/isBlockGroupOfType.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/mergeModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/retrieveModelFormatState.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/common/wrapBlock.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/deleteAllSegmentBefore.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/deleteCollapsedSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/deleteSteps/deleteWordSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/createInsertPoint.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteBlock.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteExpandedSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteSegment.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/edit/utils/deleteSingleChar.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/format/pendingFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/image/applyImageBorderFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/list/findListItemsInSameThread.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/list/setListType.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/adjustSegmentSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/adjustWordSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/collapseTableSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/collectSelections.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/iterateSelections.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/selection/setSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/alignTable.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/alignTableCell.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/applyTableFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/canMergeCells.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/createTableStructure.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/deleteTable.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/deleteTableColumn.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/deleteTableRow.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/getSelectedCells.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/insertTableColumn.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/insertTableRow.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/mergeTableCells.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/mergeTableColumn.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/mergeTableRow.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/normalizeTable.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/setTableCellBackgroundColor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/splitTableCellHorizontally.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/modelApi/table/splitTableCellVertically.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setAlignment.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setDirection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setHeaderLevel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setIndentation.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setParagraphMargin.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/setSpacing.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/block/toggleBlockQuote.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/editing/handleKeyDownEvent.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/applyPendingFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/clearFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/getFormatState.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/format/getSegmentFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/adjustImageSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/changeImage.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/insertImage.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/setImageAltText.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/setImageBorder.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/image/setImageBoxShadow.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/index.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/adjustLinkSelection.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/insertLink.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/link/removeLink.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/setListStartNumber.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/setListStyle.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/toggleBullet.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/list/toggleNumbering.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/applySegmentFormat.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/changeCapitalization.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/changeFontSize.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setBackgroundColor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setFontName.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setFontSize.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/setTextColor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleBold.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleCode.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleItalic.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleStrikethrough.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleSubscript.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleSuperscript.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/segment/toggleUnderline.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/hasSelectionInBlock.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/hasSelectionInBlockGroup.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/selection/hasSelectionInSegment.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/table/editTable.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/table/formatTable.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/table/insertTable.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/table/setTableCellShade.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatImageWithContentModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatParagraphWithContentModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatSegmentWithContentModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/formatWithContentModel.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model-editor/lib/publicApi/utils/paste.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model/lib/createContentModelEditor.ts","webpack://roosterjsContentModel/./packages-content-model/roosterjs-content-model/lib/index.ts","webpack://roosterjsContentModel/external var \"roosterjs\"","webpack://roosterjsContentModel/./node_modules/tslib/tslib.es6.mjs","webpack://roosterjsContentModel/webpack/bootstrap","webpack://roosterjsContentModel/webpack/runtime/define property getters","webpack://roosterjsContentModel/webpack/runtime/hasOwnProperty shorthand","webpack://roosterjsContentModel/webpack/runtime/make namespace object","webpack://roosterjsContentModel/webpack/startup"],"sourcesContent":["import { defaultFormatParsers, getFormatParsers } from '../../formatHandlers/defaultFormatHandlers';\nimport { defaultProcessorMap } from './defaultProcessors';\nimport { defaultStyleMap } from '../../formatHandlers/utils/defaultStyles';\nimport { DomToModelContext, DomToModelOption, EditorContext } from 'roosterjs-content-model-types';\nimport { SelectionRangeTypes } from 'roosterjs-editor-types';\n\n/**\n * Create context object form DOM to Content Model conversion\n * @param editorContext Context of editor\n * @param options Options for this context\n */\nexport function createDomToModelContext(\n editorContext?: EditorContext,\n options?: DomToModelOption\n): DomToModelContext {\n const context: DomToModelContext = {\n ...(editorContext || {\n isDarkMode: false,\n }),\n\n blockFormat: {},\n segmentFormat: {},\n zoomScaleFormat: {},\n isInSelection: false,\n\n listFormat: {\n levels: [],\n threadItemCounts: [],\n },\n link: {\n format: {},\n dataset: {},\n },\n code: {\n format: {},\n },\n blockDecorator: {\n format: {},\n tagName: '',\n },\n\n elementProcessors: {\n ...defaultProcessorMap,\n ...(options?.processorOverride || {}),\n },\n\n defaultStyles: {\n ...defaultStyleMap,\n ...(options?.defaultStyleOverride || {}),\n },\n\n formatParsers: getFormatParsers(\n options?.formatParserOverride,\n options?.additionalFormatParsers\n ),\n\n defaultElementProcessors: defaultProcessorMap,\n defaultFormatParsers: defaultFormatParsers,\n allowCacheElement: !options?.disableCacheElement,\n };\n\n const range = options?.selectionRange;\n let selectionRoot: Node | undefined;\n\n switch (range?.type) {\n case SelectionRangeTypes.Normal:\n const regularRange = range.ranges[0];\n if (regularRange) {\n selectionRoot = regularRange.commonAncestorContainer;\n context.regularSelection = {\n startContainer: regularRange.startContainer,\n startOffset: regularRange.startOffset,\n endContainer: regularRange.endContainer,\n endOffset: regularRange.endOffset,\n isSelectionCollapsed: regularRange.collapsed,\n };\n }\n break;\n\n case SelectionRangeTypes.TableSelection:\n if (range.coordinates && range.table) {\n selectionRoot = range.table;\n context.tableSelection = {\n table: range.table,\n firstCell: { ...range.coordinates.firstCell },\n lastCell: { ...range.coordinates.lastCell },\n };\n }\n\n break;\n\n case SelectionRangeTypes.ImageSelection:\n selectionRoot = range.image;\n context.imageSelection = {\n image: range.image,\n };\n break;\n }\n\n if (selectionRoot) {\n context.selectionRootNode = selectionRoot;\n }\n\n return context;\n}\n","import { brProcessor } from '../processors/brProcessor';\nimport { childProcessor } from '../processors/childProcessor';\nimport { codeProcessor } from '../processors/codeProcessor';\nimport { delimiterProcessor } from '../processors/delimiterProcessor';\nimport { elementProcessor } from '../processors/elementProcessor';\nimport { ElementProcessorMap } from 'roosterjs-content-model-types';\nimport { entityProcessor } from '../processors/entityProcessor';\nimport { fontProcessor } from '../processors/fontProcessor';\nimport { formatContainerProcessor } from '../processors/formatContainerProcessor';\nimport { generalProcessor } from '../processors/generalProcessor';\nimport { headingProcessor } from '../processors/headingProcessor';\nimport { hrProcessor } from '../processors/hrProcessor';\nimport { imageProcessor } from '../processors/imageProcessor';\nimport { knownElementProcessor } from '../processors/knownElementProcessor';\nimport { linkProcessor } from '../processors/linkProcessor';\nimport { listItemProcessor } from '../processors/listItemProcessor';\nimport { listProcessor } from '../processors/listProcessor';\nimport { pProcessor } from '../processors/pProcessor';\nimport { tableProcessor } from '../processors/tableProcessor';\nimport { textProcessor } from '../processors/textProcessor';\n\n/**\n * @internal\n */\nexport const defaultProcessorMap: ElementProcessorMap = {\n a: linkProcessor,\n b: knownElementProcessor,\n blockquote: knownElementProcessor,\n br: brProcessor,\n code: codeProcessor,\n div: knownElementProcessor,\n em: knownElementProcessor,\n font: fontProcessor,\n i: knownElementProcessor,\n img: imageProcessor,\n h1: headingProcessor,\n h2: headingProcessor,\n h3: headingProcessor,\n h4: headingProcessor,\n h5: headingProcessor,\n h6: headingProcessor,\n hr: hrProcessor,\n li: listItemProcessor,\n ol: listProcessor,\n p: pProcessor,\n pre: formatContainerProcessor,\n s: knownElementProcessor,\n span: knownElementProcessor,\n strike: knownElementProcessor,\n strong: knownElementProcessor,\n sub: knownElementProcessor,\n sup: knownElementProcessor,\n table: tableProcessor,\n u: knownElementProcessor,\n ul: listProcessor,\n\n '*': generalProcessor,\n '#text': textProcessor,\n element: elementProcessor,\n entity: entityProcessor,\n child: childProcessor,\n delimiter: delimiterProcessor,\n};\n","import { createContentModelDocument } from '../modelApi/creators/createContentModelDocument';\nimport { createDomToModelContext } from './context/createDomToModelContext';\nimport { normalizeContentModel } from '../modelApi/common/normalizeContentModel';\nimport { parseFormat } from './utils/parseFormat';\nimport { rootDirectionFormatHandler } from '../formatHandlers/root/rootDirectionFormatHandler';\nimport { safeInstanceOf } from 'roosterjs-editor-dom';\nimport { zoomScaleFormatHandler } from '../formatHandlers/root/zoomScaleFormatHandler';\nimport {\n ContentModelDocument,\n DomToModelOption,\n EditorContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * Create Content Model from DOM tree in this editor\n * @param root Root element of DOM tree to create Content Model from\n * @param editorContext Context of content model editor\n * @param option The option to customize the behavior of DOM to Content Model conversion\n * @returns A ContentModelDocument object that contains all the models created from the give root element\n */\nexport function domToContentModel(\n root: HTMLElement | DocumentFragment,\n editorContext: EditorContext,\n option: DomToModelOption\n): ContentModelDocument {\n const model = createContentModelDocument(editorContext.defaultFormat);\n const context = createDomToModelContext(editorContext, option);\n\n if (safeInstanceOf(root, 'DocumentFragment')) {\n context.elementProcessors.child(model, root, context);\n } else {\n // Need to calculate direction (ltr or rtl), use it as initial value\n parseFormat(root, [rootDirectionFormatHandler.parse], context.blockFormat, context);\n\n // Need to calculate zoom scale value from root element, use this value to calculate sizes for elements\n parseFormat(root, [zoomScaleFormatHandler.parse], context.zoomScaleFormat, context);\n\n const processor = option.includeRoot\n ? context.elementProcessors.element\n : context.elementProcessors.child;\n\n processor(model, root, context);\n }\n\n normalizeContentModel(model);\n\n return model;\n}\n","import { addBlock } from '../../modelApi/common/addBlock';\nimport { ContextStyles } from './formatContainerProcessor';\nimport { createParagraph } from '../../modelApi/creators/createParagraph';\nimport { parseFormat } from '../utils/parseFormat';\nimport {\n ContentModelBlockGroup,\n ContentModelSegmentFormat,\n DomToModelContext,\n} from 'roosterjs-content-model-types';\n\nconst SegmentDecoratorTags = ['A', 'CODE'];\n\n/**\n * @internal\n */\nexport function blockProcessor(\n group: ContentModelBlockGroup,\n element: HTMLElement,\n context: DomToModelContext,\n segmentFormat?: ContentModelSegmentFormat\n) {\n const decorator = context.blockDecorator.tagName ? context.blockDecorator : undefined;\n const isSegmentDecorator = SegmentDecoratorTags.indexOf(element.tagName) >= 0;\n\n parseFormat(element, context.formatParsers.block, context.blockFormat, context);\n\n const blockFormat = { ...context.blockFormat };\n\n parseFormat(element, context.formatParsers.container, blockFormat, context);\n\n ContextStyles.forEach(style => {\n if (blockFormat[style]) {\n context.blockFormat[style] = blockFormat[style];\n }\n });\n\n if (!isSegmentDecorator) {\n const paragraph = createParagraph(\n false /*isImplicit*/,\n blockFormat,\n segmentFormat,\n decorator\n );\n\n addBlock(group, paragraph);\n }\n\n context.elementProcessors.child(group, element, context);\n}\n","import { addSegment } from '../../modelApi/common/addSegment';\nimport { createBr } from '../../modelApi/creators/createBr';\nimport { ElementProcessor } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const brProcessor: ElementProcessor = (group, element, context) => {\n const br = createBr(context.segmentFormat);\n\n if (context.isInSelection) {\n br.isSelected = true;\n }\n\n addSegment(group, br, context.blockFormat);\n};\n","import { addSelectionMarker } from '../utils/addSelectionMarker';\nimport { getRegularSelectionOffsets } from '../utils/getRegularSelectionOffsets';\nimport { isNodeOfType } from '../../domUtils/isNodeOfType';\nimport { NodeType } from 'roosterjs-editor-types';\nimport {\n ContentModelBlockGroup,\n DomToModelContext,\n ElementProcessor,\n} from 'roosterjs-content-model-types';\n\n/**\n * Content Model Element Processor for child elements\n * @param group The parent block group\n * @param parent Parent DOM node to process\n * @param context DOM to Content Model context\n */\nexport const childProcessor: ElementProcessor = (\n group: ContentModelBlockGroup,\n parent: ParentNode,\n context: DomToModelContext\n) => {\n const [nodeStartOffset, nodeEndOffset] = getRegularSelectionOffsets(context, parent);\n let index = 0;\n\n for (let child = parent.firstChild; child; child = child.nextSibling) {\n handleRegularSelection(index, context, group, nodeStartOffset, nodeEndOffset);\n\n processChildNode(group, child, context);\n\n index++;\n }\n\n handleRegularSelection(index, context, group, nodeStartOffset, nodeEndOffset);\n};\n\n/**\n * Helper function for processing child node\n * @param group The parent block group\n * @param parent Parent DOM node to process\n * @param context DOM to Content Model context\n *\n */\nexport function processChildNode(\n group: ContentModelBlockGroup,\n child: Node,\n context: DomToModelContext\n) {\n if (isNodeOfType(child, NodeType.Element) && child.style.display != 'none') {\n context.elementProcessors.element(group, child, context);\n } else if (isNodeOfType(child, NodeType.Text)) {\n context.elementProcessors['#text'](group, child, context);\n }\n}\n\n/**\n * Helper function to handle regular (range based) selection when process child node\n * @param index Index of current child node in its parent\n * @param context DOM to Content Model context\n * @param group The parent block group\n * @param nodeStartOffset Start offset of current regular selection\n * @param nodeEndOffset End offset of current regular selection\n */\nexport function handleRegularSelection(\n index: number,\n context: DomToModelContext,\n group: ContentModelBlockGroup,\n nodeStartOffset: number,\n nodeEndOffset: number\n) {\n if (index == nodeStartOffset) {\n context.isInSelection = true;\n\n addSelectionMarker(group, context);\n }\n\n if (index == nodeEndOffset) {\n if (!context.regularSelection!.isSelectionCollapsed) {\n addSelectionMarker(group, context);\n }\n context.isInSelection = false;\n }\n}\n","import { ElementProcessor } from 'roosterjs-content-model-types';\nimport { knownElementProcessor } from './knownElementProcessor';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\n\n/**\n * @internal\n */\nexport const codeProcessor: ElementProcessor = (group, element, context) => {\n stackFormat(context, { code: 'codeDefault' }, () => {\n parseFormat(element, context.formatParsers.code, context.code.format, context);\n\n knownElementProcessor(group, element, context);\n });\n};\n","import { ElementProcessor } from 'roosterjs-content-model-types';\nimport { getRegularSelectionOffsets } from '../utils/getRegularSelectionOffsets';\nimport { handleRegularSelection } from './childProcessor';\n\n/**\n * @internal\n * @param group\n * @param element\n * @param context\n */\nexport const delimiterProcessor: ElementProcessor = (group, element, context) => {\n let index = 0;\n const [nodeStartOffset, nodeEndOffset] = getRegularSelectionOffsets(context, element);\n\n for (let child = element.firstChild; child; child = child.nextSibling) {\n handleRegularSelection(index, context, group, nodeStartOffset, nodeEndOffset);\n index++;\n }\n\n handleRegularSelection(index, context, group, nodeStartOffset, nodeEndOffset);\n};\n","import { getDelimiterFromElement, getEntityFromElement } from 'roosterjs-editor-dom';\nimport {\n DomToModelContext,\n ElementProcessor,\n ElementProcessorMap,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * @param group\n * @param element\n * @param context\n */\nexport const elementProcessor: ElementProcessor = (group, element, context) => {\n const tagName = element.tagName.toLowerCase() as keyof ElementProcessorMap;\n const processor = (tryGetProcessorForEntity(element, context) ||\n tryGetProcessorForDelimiter(element, context) ||\n context.elementProcessors[tagName] ||\n (tagName.indexOf(':') >= 0 && context.elementProcessors.child) ||\n context.elementProcessors['*']) as ElementProcessor;\n processor(group, element, context);\n};\n\nfunction tryGetProcessorForEntity(element: HTMLElement, context: DomToModelContext) {\n return (element.className && getEntityFromElement(element)) ||\n element.contentEditable == 'false' // For readonly element, treat as an entity\n ? context.elementProcessors.entity\n : null;\n}\n\nfunction tryGetProcessorForDelimiter(element: Node, context: DomToModelContext) {\n return getDelimiterFromElement(element) ? context.elementProcessors.delimiter : null;\n}\n","import { addBlock } from '../../modelApi/common/addBlock';\nimport { addSegment } from '../../modelApi/common/addSegment';\nimport { createEntity } from '../../modelApi/creators/createEntity';\nimport { ElementProcessor } from 'roosterjs-content-model-types';\nimport { getEntityFromElement } from 'roosterjs-editor-dom';\nimport { isBlockElement } from '../utils/isBlockElement';\nimport { stackFormat } from '../utils/stackFormat';\n\n/**\n * Content Model Element Processor for entity\n * @param group The parent block group\n * @param parent Parent DOM node to process\n * @param context DOM to Content Model context\n */\nexport const entityProcessor: ElementProcessor = (group, element, context) => {\n const entity = getEntityFromElement(element);\n\n // In Content Model we also treat read only element as an entity since we cannot edit it\n const { id, type, isReadonly } = entity || { isReadonly: true };\n const isBlockEntity = isBlockElement(element, context);\n\n stackFormat(\n context,\n { segment: isBlockEntity ? 'empty' : undefined, paragraph: 'empty' },\n () => {\n const wrapperToUse = context.allowCacheElement\n ? element\n : (element.cloneNode(true /* deep */) as HTMLElement);\n\n if (!context.allowCacheElement) {\n wrapperToUse.style.backgroundColor = element.style.backgroundColor || 'inherit';\n wrapperToUse.style.color = element.style.color || 'inherit';\n }\n\n const entityModel = createEntity(\n wrapperToUse,\n isReadonly,\n context.segmentFormat,\n id,\n type\n );\n\n // TODO: Need to handle selection for editable entity\n if (context.isInSelection) {\n entityModel.isSelected = true;\n }\n\n if (isBlockEntity) {\n addBlock(group, entityModel);\n } else {\n addSegment(group, entityModel);\n }\n }\n );\n};\n","import { ElementProcessor } from 'roosterjs-content-model-types';\nimport { isBlockElement } from '../utils/isBlockElement';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\n\nconst FontSizes = ['10px', '13px', '16px', '18px', '24px', '32px', '48px'];\n\nfunction getFontSize(size: string | null) {\n const intSize = parseInt(size || '');\n\n if (Number.isNaN(intSize)) {\n return undefined;\n } else if (intSize < 1) {\n return FontSizes[0];\n } else if (intSize > FontSizes.length) {\n return FontSizes[FontSizes.length - 1];\n } else {\n return FontSizes[intSize - 1];\n }\n}\n\n/**\n * @internal\n */\nexport const fontProcessor: ElementProcessor = (group, element, context) => {\n stackFormat(\n context,\n {\n segment: isBlockElement(element, context) ? 'shallowCloneForBlock' : 'shallowClone',\n },\n () => {\n const fontFamily = element.getAttribute('face');\n const fontSize = getFontSize(element.getAttribute('size'));\n const textColor = element.getAttribute('color');\n const format = context.segmentFormat;\n\n if (fontFamily) {\n format.fontFamily = fontFamily;\n }\n\n if (fontSize) {\n format.fontSize = fontSize;\n }\n\n if (textColor) {\n format.textColor = textColor;\n }\n\n parseFormat(element, context.formatParsers.segment, context.segmentFormat, context);\n\n context.elementProcessors.child(group, element, context);\n }\n );\n};\n","import { addBlock } from '../../modelApi/common/addBlock';\nimport { createFormatContainer } from '../../modelApi/creators/createFormatContainer';\nimport { createParagraph } from '../../modelApi/creators/createParagraph';\nimport { getDefaultStyle } from '../utils/getDefaultStyle';\nimport { parseFormat } from '../utils/parseFormat';\nimport { setParagraphNotImplicit } from '../../modelApi/block/setParagraphNotImplicit';\nimport { stackFormat } from '../utils/stackFormat';\nimport {\n ContentModelFormatContainer,\n ContentModelFormatContainerFormat,\n ContentModelParagraph,\n ElementProcessor,\n MarginFormat,\n PaddingFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const ContextStyles: (keyof (MarginFormat & PaddingFormat))[] = [\n 'marginLeft',\n 'marginRight',\n 'paddingLeft',\n 'paddingRight',\n];\n\n/**\n * @internal\n */\nexport const formatContainerProcessor: ElementProcessor = (\n group,\n element,\n context\n) => {\n stackFormat(context, { segment: 'shallowCloneForBlock', paragraph: 'shallowClone' }, () => {\n parseFormat(element, context.formatParsers.block, context.blockFormat, context);\n parseFormat(element, context.formatParsers.segmentOnBlock, context.segmentFormat, context);\n\n const format: ContentModelFormatContainerFormat = {\n ...context.blockFormat,\n };\n\n parseFormat(element, context.formatParsers.container, format, context);\n\n const tagName =\n getDefaultStyle(element, context).display == 'block'\n ? element.tagName.toLowerCase()\n : 'div';\n const formatContainer = createFormatContainer(tagName, format);\n\n // It is possible to inherit margin left/right styles from parent DIV or other containers,\n // since we are going into a deeper level of format container now,\n // the container will render these styles so no need to keep them in context format\n ContextStyles.forEach(style => {\n delete context.blockFormat[style];\n });\n\n context.elementProcessors.child(formatContainer, element, context);\n\n if (element.style.fontSize && parseInt(element.style.fontSize) == 0) {\n formatContainer.zeroFontSize = true;\n }\n\n if (shouldFallbackToParagraph(formatContainer)) {\n // For DIV container that only has one paragraph child, container style can be merged into paragraph\n // and no need to have this container\n const paragraph = formatContainer.blocks[0] as ContentModelParagraph;\n\n if (formatContainer.zeroFontSize) {\n paragraph.segmentFormat = Object.assign({}, paragraph.segmentFormat, {\n fontSize: '0',\n });\n }\n\n Object.assign(paragraph.format, formatContainer.format);\n setParagraphNotImplicit(paragraph);\n addBlock(group, paragraph);\n } else {\n addBlock(group, formatContainer);\n }\n });\n\n addBlock(group, createParagraph(true /*isImplicit*/, context.blockFormat));\n};\n\nfunction shouldFallbackToParagraph(formatContainer: ContentModelFormatContainer) {\n const firstChild = formatContainer.blocks[0];\n\n return (\n formatContainer.tagName == 'div' &&\n formatContainer.blocks.length == 1 &&\n firstChild.blockType == 'Paragraph' &&\n firstChild.isImplicit\n );\n}\n","import { addBlock } from '../../modelApi/common/addBlock';\nimport { addDecorators } from '../../modelApi/common/addDecorators';\nimport { addSegment } from '../../modelApi/common/addSegment';\nimport { createGeneralBlock } from '../../modelApi/creators/createGeneralBlock';\nimport { createGeneralSegment } from '../../modelApi/creators/createGeneralSegment';\nimport { ElementProcessor } from 'roosterjs-content-model-types';\nimport { isBlockElement } from '../utils/isBlockElement';\nimport { stackFormat } from '../utils/stackFormat';\n\nconst generalBlockProcessor: ElementProcessor = (group, element, context) => {\n const block = createGeneralBlock(element);\n const isSelectedBefore = context.isInSelection;\n\n stackFormat(\n context,\n {\n segment: 'empty',\n paragraph: 'empty',\n link: 'empty',\n },\n () => {\n addBlock(group, block);\n\n context.elementProcessors.child(block, element, context);\n }\n );\n\n if (isSelectedBefore && context.isInSelection) {\n block.isSelected = true;\n }\n};\n\nconst generalSegmentProcessor: ElementProcessor = (group, element, context) => {\n const segment = createGeneralSegment(element, context.segmentFormat);\n const isSelectedBefore = context.isInSelection;\n\n addDecorators(segment, context);\n addSegment(group, segment);\n\n stackFormat(\n context,\n {\n segment:\n 'empty' /*clearFormat, General segment will include all properties and styles when generate back to HTML, so no need to carry over existing segment format*/,\n },\n () => {\n context.elementProcessors.child(segment, element, context);\n }\n );\n\n if (isSelectedBefore && context.isInSelection) {\n segment.isSelected = true;\n }\n};\n\n/**\n * @internal\n */\nexport const generalProcessor: ElementProcessor = (group, element, context) => {\n const processor = isBlockElement(element, context)\n ? generalBlockProcessor\n : generalSegmentProcessor;\n\n processor(group, element, context);\n};\n","import { addBlock } from '../../modelApi/common/addBlock';\nimport { blockProcessor } from './blockProcessor';\nimport { ContentModelSegmentFormat, ElementProcessor } from 'roosterjs-content-model-types';\nimport { createParagraph } from '../../modelApi/creators/createParagraph';\nimport { createParagraphDecorator } from '../../modelApi/creators/createParagraphDecorator';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\n\n/**\n * @internal\n */\nexport const headingProcessor: ElementProcessor = (group, element, context) => {\n stackFormat(\n context,\n { segment: 'shallowCloneForBlock', paragraph: 'shallowClone', blockDecorator: 'empty' },\n () => {\n const segmentFormat: ContentModelSegmentFormat = {};\n\n parseFormat(element, context.formatParsers.segmentOnBlock, segmentFormat, context);\n\n context.blockDecorator = createParagraphDecorator(element.tagName, segmentFormat);\n\n blockProcessor(group, element, context);\n }\n );\n\n addBlock(group, createParagraph(true /*isImplicit*/, context.blockFormat));\n};\n","import { addBlock } from '../../modelApi/common/addBlock';\nimport { createDivider } from '../../modelApi/creators/createDivider';\nimport { ElementProcessor } from 'roosterjs-content-model-types';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\n\n/**\n * @internal\n */\nexport const hrProcessor: ElementProcessor = (group, element, context) => {\n stackFormat(\n context,\n {\n paragraph: 'shallowClone',\n },\n () => {\n parseFormat(element, context.formatParsers.divider, context.blockFormat, context);\n\n const hr = createDivider('hr', context.blockFormat);\n\n if (element.size) {\n hr.size = element.size;\n }\n\n if (context.isInSelection) {\n hr.isSelected = true;\n }\n\n addBlock(group, hr);\n }\n );\n};\n","import { addDecorators } from '../../modelApi/common/addDecorators';\nimport { addSegment } from '../../modelApi/common/addSegment';\nimport { ContentModelImageFormat, ElementProcessor } from 'roosterjs-content-model-types';\nimport { createImage } from '../../modelApi/creators/createImage';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\n\n/**\n * @internal\n */\nexport const imageProcessor: ElementProcessor = (group, element, context) => {\n stackFormat(context, { segment: 'shallowClone' }, () => {\n const imageFormat: ContentModelImageFormat = context.segmentFormat;\n\n parseFormat(element, context.formatParsers.segment, imageFormat, context);\n parseFormat(element, context.formatParsers.image, imageFormat, context);\n parseFormat(element, context.formatParsers.block, context.blockFormat, context);\n\n const image = createImage(element.src, imageFormat);\n const alt = element.alt;\n const title = element.title;\n\n parseFormat(element, context.formatParsers.dataset, image.dataset, context);\n addDecorators(image, context);\n\n if (alt) {\n image.alt = alt;\n }\n if (title) {\n image.title = title;\n }\n if (context.isInSelection) {\n image.isSelected = true;\n }\n if (context.imageSelection?.image == element) {\n image.isSelectedAsImageSelection = true;\n image.isSelected = true;\n }\n\n addSegment(group, image);\n });\n};\n","import { addBlock } from '../../modelApi/common/addBlock';\nimport { blockProcessor } from './blockProcessor';\nimport { createParagraph } from '../../modelApi/creators/createParagraph';\nimport { formatContainerProcessor } from './formatContainerProcessor';\nimport { getDefaultStyle } from '../utils/getDefaultStyle';\nimport { isBlockElement } from '../utils/isBlockElement';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\nimport {\n ContentModelSegmentFormat,\n DomToModelContext,\n ElementProcessor,\n} from 'roosterjs-content-model-types';\n\nconst FormatContainerTriggerStyles: (keyof CSSStyleDeclaration)[] = [\n 'marginBottom',\n 'marginTop',\n 'paddingBottom',\n 'paddingTop',\n 'paddingLeft',\n 'paddingRight',\n 'borderTopWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'width',\n 'height',\n 'maxWidth',\n 'maxHeight',\n 'minWidth',\n 'minHeight',\n];\nconst ByPassFormatContainerTags = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'P', 'A'];\nconst SegmentDecoratorTags = ['A', 'CODE'];\n\n/**\n * @internal\n */\nexport const knownElementProcessor: ElementProcessor = (group, element, context) => {\n const isBlock = isBlockElement(element, context);\n\n if (\n (isBlock || element.style.display == 'inline-block') && // For inline-block here, we will also check if it should be represented as Format Container\n shouldUseFormatContainer(element, context)\n ) {\n formatContainerProcessor(group, element, context);\n } else if (isBlock) {\n const decorator = context.blockDecorator.tagName ? context.blockDecorator : undefined;\n const isSegmentDecorator = SegmentDecoratorTags.indexOf(element.tagName) >= 0;\n\n stackFormat(context, { segment: 'shallowCloneForBlock', paragraph: 'shallowClone' }, () => {\n const segmentFormat: ContentModelSegmentFormat = {};\n\n parseFormat(element, context.formatParsers.segmentOnBlock, segmentFormat, context);\n Object.assign(context.segmentFormat, segmentFormat);\n\n blockProcessor(group, element, context, segmentFormat);\n });\n\n if (isBlock && !isSegmentDecorator) {\n addBlock(\n group,\n createParagraph(\n true /*isImplicit*/,\n context.blockFormat,\n undefined /*segmentFormat*/,\n decorator\n )\n );\n }\n } else {\n stackFormat(\n context,\n {\n segment: 'shallowClone',\n paragraph: 'shallowClone',\n link: 'cloneFormat',\n },\n () => {\n parseFormat(element, context.formatParsers.segment, context.segmentFormat, context);\n\n if (context.link.format.href && element.tagName != 'A') {\n parseFormat(\n element,\n context.formatParsers.segmentUnderLink,\n context.link.format,\n context\n );\n }\n\n context.elementProcessors.child(group, element, context);\n }\n );\n }\n};\n\nfunction shouldUseFormatContainer(element: HTMLElement, context: DomToModelContext) {\n // For those tags that we know we should not use format container, just return false\n if (ByPassFormatContainerTags.indexOf(element.tagName) >= 0) {\n return false;\n }\n\n const style = element.style;\n const defaultStyle = getDefaultStyle(element, context);\n\n const bgcolor = style.getPropertyValue('background-color');\n\n // For block element with background, we need to use format container\n if (bgcolor && bgcolor != 'transparent') {\n return true;\n }\n\n // For block element with positive value of border width or top/bottom margin/padding,\n // we need to use format container\n if (\n FormatContainerTriggerStyles.some(\n key => parseInt((style[key] as string) || (defaultStyle[key] as string) || '') > 0\n )\n ) {\n return true;\n }\n\n // For margin left/right with value \"auto\", we need to use format container\n if (style.marginLeft == 'auto' || style.marginRight == 'auto') {\n return true;\n }\n\n // For element with \"align\" attribute, we need to use format container\n if (element.getAttribute('align')) {\n return true;\n }\n\n return false;\n}\n","import { ElementProcessor } from 'roosterjs-content-model-types';\nimport { knownElementProcessor } from './knownElementProcessor';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\n\n/**\n * @internal\n */\nexport const linkProcessor: ElementProcessor = (group, element, context) => {\n if (element.hasAttribute('href')) {\n stackFormat(context, { link: 'linkDefault' }, () => {\n parseFormat(element, context.formatParsers.link, context.link.format, context);\n parseFormat(element, context.formatParsers.dataset, context.link.dataset, context);\n\n knownElementProcessor(group, element, context);\n });\n } else {\n // A tag without href, can be treated as normal SPAN tag\n knownElementProcessor(group, element, context);\n }\n};\n","import { createListItem } from '../../modelApi/creators/createListItem';\nimport { ElementProcessor } from 'roosterjs-content-model-types';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\n\n/**\n * @internal\n */\nexport const listItemProcessor: ElementProcessor = (group, element, context) => {\n const { listFormat } = context;\n\n if (listFormat.listParent && listFormat.levels.length > 0) {\n stackFormat(\n context,\n {\n segment: 'shallowCloneForBlock',\n },\n () => {\n parseFormat(\n element,\n context.formatParsers.segmentOnBlock,\n context.segmentFormat,\n context\n );\n\n const listItem = createListItem(listFormat.levels, context.segmentFormat);\n parseFormat(\n element,\n context.formatParsers.listItemElement,\n listItem.format,\n context\n );\n\n listFormat.listParent!.blocks.push(listItem);\n\n parseFormat(\n element,\n context.formatParsers.listItem,\n listItem.levels[listItem.levels.length - 1],\n context\n );\n\n context.elementProcessors.child(listItem, element, context);\n\n const firstChild = listItem.blocks[0];\n\n if (\n listItem.blocks.length == 1 &&\n firstChild.blockType == 'Paragraph' &&\n firstChild.isImplicit\n ) {\n Object.assign(listItem.format, firstChild.format);\n firstChild.format = {};\n }\n }\n );\n } else {\n const currentBlocks = listFormat.listParent?.blocks;\n const lastItem = currentBlocks?.[currentBlocks?.length - 1];\n\n context.elementProcessors['*'](\n lastItem?.blockType == 'BlockGroup' ? lastItem : group,\n element,\n context\n );\n }\n};\n","import { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\nimport { updateListMetadata } from '../../domUtils/metadata/updateListMetadata';\nimport {\n ContentModelListItemLevelFormat,\n DatasetFormat,\n DomToModelContext,\n ElementProcessor,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const listProcessor: ElementProcessor = (\n group,\n element,\n context\n) => {\n stackFormat(\n context,\n {\n segment: 'shallowCloneForBlock',\n paragraph: 'shallowCloneForGroup',\n },\n () => {\n const level: ContentModelListItemLevelFormat = { ...context.blockFormat };\n const { listFormat } = context;\n\n processMetadata(element, context, level);\n parseFormat(element, context.formatParsers.listLevel, level, context);\n parseFormat(element, context.formatParsers.segment, context.segmentFormat, context);\n\n const originalListParent = listFormat.listParent;\n\n listFormat.listParent = listFormat.listParent || group;\n listFormat.levels.push(level);\n\n try {\n context.elementProcessors.child(group, element, context);\n } finally {\n listFormat.levels.pop();\n listFormat.listParent = originalListParent;\n }\n }\n );\n};\n\nfunction processMetadata(\n element: HTMLOListElement | HTMLUListElement,\n context: DomToModelContext,\n level: ContentModelListItemLevelFormat\n) {\n const dataset: DatasetFormat = {};\n parseFormat(element, context.formatParsers.dataset, dataset, context);\n updateListMetadata({ dataset }, metadata => {\n Object.assign(level, metadata || {});\n return null;\n });\n}\n","import { addBlock } from '../../modelApi/common/addBlock';\nimport { blockProcessor } from './blockProcessor';\nimport { ContentModelSegmentFormat, ElementProcessor } from 'roosterjs-content-model-types';\nimport { createParagraph } from '../../modelApi/creators/createParagraph';\nimport { createParagraphDecorator } from '../../modelApi/creators/createParagraphDecorator';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\n\n/**\n * @internal\n */\nexport const pProcessor: ElementProcessor = (group, element, context) => {\n stackFormat(\n context,\n { blockDecorator: 'empty', segment: 'shallowCloneForBlock', paragraph: 'shallowClone' },\n () => {\n context.blockDecorator = createParagraphDecorator(element.tagName);\n\n const segmentFormat: ContentModelSegmentFormat = {};\n\n parseFormat(element, context.formatParsers.segmentOnBlock, segmentFormat, context);\n Object.assign(context.segmentFormat, segmentFormat);\n\n blockProcessor(group, element, context, segmentFormat);\n }\n );\n\n addBlock(group, createParagraph(true /*isImplicit*/, context.blockFormat));\n};\n","import { addBlock } from '../../modelApi/common/addBlock';\nimport { createTable } from '../../modelApi/creators/createTable';\nimport { createTableCell } from '../../modelApi/creators/createTableCell';\nimport { getBoundingClientRect } from '../utils/getBoundingClientRect';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\nimport {\n ContentModelTableCellFormat,\n DatasetFormat,\n ElementProcessor,\n} from 'roosterjs-content-model-types';\n\n/**\n * Content Model Element Processor for table\n *\n * For Table with merged/splitted cells, HTML uses colSpan and rowSpan attributes to specify how it should be rendered.\n * To make it easier to edit a table, we will use a different way to describe table.\n *\n * 1. For a m * n table (m rows, n columns), we always create a m * n array for the cells.\n * 2. For a regular table cell, it is mapped to one item of this array\n * 3. For a merged/splitted table cell, it will has colSpan/rowSpan value. We also created TableCell model for those spanned\n * cells, and use \"spanLeft\" and \"spanAbove\" to mark its state\n * 4. When edit table, we always edit on this mapped m * n array because it always has an item for each cell\n * 5. When write back to DOM, we create TD/TH elements for those non-spanned cells, and mark its colSpan/rowSpan value according\n * its neighbour cell's spanLeft/spanAbove attribute\n * @param group The parent block group\n * @param parent Parent DOM node to process\n * @param context DOM to Content Model context\n */\nexport const tableProcessor: ElementProcessor = (\n group,\n tableElement,\n context\n) => {\n stackFormat(\n context,\n { segment: 'shallowCloneForBlock', paragraph: 'shallowCloneForGroup' },\n () => {\n parseFormat(tableElement, context.formatParsers.block, context.blockFormat, context);\n\n const table = createTable(tableElement.rows.length, context.blockFormat);\n const { table: selectedTable, firstCell, lastCell } = context.tableSelection || {};\n const hasTableSelection = selectedTable == tableElement && !!firstCell && !!lastCell;\n\n if (context.allowCacheElement) {\n table.cachedElement = tableElement;\n }\n\n parseFormat(tableElement, context.formatParsers.table, table.format, context);\n parseFormat(tableElement, context.formatParsers.tableBorder, table.format, context);\n parseFormat(\n tableElement,\n context.formatParsers.segmentOnBlock,\n context.segmentFormat,\n context\n );\n parseFormat(tableElement, context.formatParsers.dataset, table.dataset, context);\n addBlock(group, table);\n\n const columnPositions: number[] = [0];\n const rowPositions: number[] = [0];\n const zoomScale = context.zoomScaleFormat.zoomScale || 1;\n\n for (let row = 0; row < tableElement.rows.length; row++) {\n const tr = tableElement.rows[row];\n const tableRow = table.rows[row];\n\n if (context.allowCacheElement) {\n tableRow.cachedElement = tr;\n }\n\n parseFormat(tr, context.formatParsers.tableRow, tableRow.format, context);\n\n stackFormat(context, { paragraph: 'shallowClone', segment: 'shallowClone' }, () => {\n const parent = tr.parentElement;\n const parentTag = parent?.tagName;\n\n if (\n parent &&\n (parentTag == 'TBODY' || parentTag == 'THEAD' || parentTag == 'TFOOT')\n ) {\n // If there is TBODY around TR, retrieve format from TBODY first, in case some format are declared there\n parseFormat(\n parent,\n context.formatParsers.block,\n context.blockFormat,\n context\n );\n parseFormat(\n parent,\n context.formatParsers.segmentOnBlock,\n context.segmentFormat,\n context\n );\n }\n\n parseFormat(tr, context.formatParsers.block, context.blockFormat, context);\n parseFormat(\n tr,\n context.formatParsers.segmentOnBlock,\n context.segmentFormat,\n context\n );\n\n for (\n let sourceCol = 0, targetCol = 0;\n sourceCol < tr.cells.length;\n sourceCol++\n ) {\n for (; tableRow.cells[targetCol]; targetCol++) {}\n\n const td = tr.cells[sourceCol];\n const hasSelectionBeforeCell = context.isInSelection;\n const colEnd = targetCol + td.colSpan;\n const rowEnd = row + td.rowSpan;\n const needCalcWidth = columnPositions[colEnd] === undefined;\n const needCalcHeight = rowPositions[rowEnd] === undefined;\n\n if (needCalcWidth || needCalcHeight) {\n const rect = getBoundingClientRect(td);\n\n if (rect.width > 0 || rect.height > 0) {\n if (needCalcWidth) {\n columnPositions[colEnd] =\n columnPositions[targetCol] + rect.width / zoomScale;\n }\n\n if (needCalcHeight) {\n rowPositions[rowEnd] =\n rowPositions[row] + rect.height / zoomScale;\n }\n }\n }\n\n stackFormat(\n context,\n { paragraph: 'shallowClone', segment: 'shallowClone' },\n () => {\n parseFormat(\n td,\n context.formatParsers.block,\n context.blockFormat,\n context\n );\n parseFormat(\n td,\n context.formatParsers.segmentOnTableCell,\n context.segmentFormat,\n context\n );\n\n const cellFormat: ContentModelTableCellFormat = {\n ...context.blockFormat,\n };\n const dataset: DatasetFormat = {};\n\n parseFormat(\n td,\n context.formatParsers.tableCell,\n cellFormat,\n context\n );\n parseFormat(\n td,\n context.formatParsers.tableBorder,\n cellFormat,\n context\n );\n parseFormat(td, context.formatParsers.dataset, dataset, context);\n\n for (\n let colSpan = 1;\n colSpan <= td.colSpan;\n colSpan++, targetCol++\n ) {\n for (let rowSpan = 1; rowSpan <= td.rowSpan; rowSpan++) {\n const hasTd = colSpan == 1 && rowSpan == 1;\n const cell = createTableCell(\n colSpan > 1,\n rowSpan > 1,\n td.tagName == 'TH',\n cellFormat\n );\n\n cell.dataset = { ...dataset };\n\n const spannedRow = table.rows[row + rowSpan - 1];\n\n if (spannedRow) {\n spannedRow.cells[targetCol] = cell;\n }\n\n if (hasTd) {\n if (context.allowCacheElement) {\n cell.cachedElement = td;\n }\n\n const { listParent, levels } = context.listFormat;\n\n context.listFormat.listParent = undefined;\n context.listFormat.levels = [];\n\n try {\n context.elementProcessors.child(cell, td, context);\n } finally {\n context.listFormat.listParent = listParent;\n context.listFormat.levels = levels;\n }\n }\n\n const hasSelectionAfterCell = context.isInSelection;\n\n if (\n (hasSelectionBeforeCell && hasSelectionAfterCell) ||\n (hasTableSelection &&\n row >= firstCell.y &&\n row <= lastCell.y &&\n targetCol >= firstCell.x &&\n targetCol <= lastCell.x)\n ) {\n cell.isSelected = true;\n }\n }\n }\n }\n );\n }\n });\n }\n\n table.widths = calcSizes(columnPositions);\n\n const heights = calcSizes(rowPositions);\n\n table.rows.forEach((row, i) => {\n if (heights[i] > 0) {\n row.height = heights[i];\n }\n });\n }\n );\n};\n\nfunction calcSizes(positions: number[]): number[] {\n let result: number[] = [];\n let lastPos = positions[positions.length - 1];\n\n for (let i = positions.length - 2; i >= 0; i--) {\n if (positions[i] === undefined) {\n result[i] = 0;\n } else {\n result[i] = lastPos - positions[i];\n lastPos = positions[i];\n }\n }\n\n return result;\n}\n","import { addDecorators } from '../../modelApi/common/addDecorators';\nimport { addSegment } from '../../modelApi/common/addSegment';\nimport { addSelectionMarker } from '../utils/addSelectionMarker';\nimport { areSameFormats } from '../utils/areSameFormats';\nimport {\n ContentModelBlockGroup,\n DomToModelContext,\n ElementProcessor,\n} from 'roosterjs-content-model-types';\nimport { createText } from '../../modelApi/creators/createText';\nimport { getRegularSelectionOffsets } from '../utils/getRegularSelectionOffsets';\nimport { hasSpacesOnly } from '../../domUtils/stringUtil';\n\n/**\n * @internal\n */\nexport const textProcessor: ElementProcessor = (\n group: ContentModelBlockGroup,\n textNode: Text,\n context: DomToModelContext\n) => {\n let txt = textNode.nodeValue || '';\n let [txtStartOffset, txtEndOffset] = getRegularSelectionOffsets(context, textNode);\n\n if (txtStartOffset >= 0) {\n addTextSegment(group, txt.substring(0, txtStartOffset), context);\n context.isInSelection = true;\n\n addSelectionMarker(group, context);\n\n txt = txt.substring(txtStartOffset);\n txtEndOffset -= txtStartOffset;\n }\n\n if (txtEndOffset >= 0) {\n addTextSegment(group, txt.substring(0, txtEndOffset), context);\n\n if (!context.regularSelection!.isSelectionCollapsed) {\n addSelectionMarker(group, context);\n }\n\n context.isInSelection = false;\n txt = txt.substring(txtEndOffset);\n }\n\n addTextSegment(group, txt, context);\n};\n\n// When we see these values of white-space style, need to preserve spaces and line-breaks and let browser handle it for us.\nconst WhiteSpaceValuesNeedToHandle = ['pre', 'pre-wrap', 'pre-line', 'break-spaces'];\n\nfunction addTextSegment(group: ContentModelBlockGroup, text: string, context: DomToModelContext) {\n if (text) {\n const lastBlock = group.blocks[group.blocks.length - 1];\n const paragraph = lastBlock?.blockType == 'Paragraph' ? lastBlock : null;\n const lastSegment = paragraph?.segments[paragraph.segments.length - 1];\n\n if (\n lastSegment?.segmentType == 'Text' &&\n !!lastSegment.isSelected == !!context.isInSelection &&\n areSameFormats(lastSegment.format, context.segmentFormat) &&\n areSameFormats(lastSegment.link || {}, context.link.format || {}) &&\n areSameFormats(lastSegment.code || {}, context.code.format || {})\n ) {\n lastSegment.text += text;\n } else if (\n !hasSpacesOnly(text) ||\n paragraph?.segments.length! > 0 ||\n WhiteSpaceValuesNeedToHandle.indexOf(paragraph?.format.whiteSpace || '') >= 0\n ) {\n const textModel = createText(text, context.segmentFormat);\n\n if (context.isInSelection) {\n textModel.isSelected = true;\n }\n\n addDecorators(textModel, context);\n\n addSegment(group, textModel, context.blockFormat);\n }\n }\n}\n","import { addDecorators } from '../../modelApi/common/addDecorators';\nimport { addSegment } from '../../modelApi/common/addSegment';\nimport { ContentModelBlockGroup, DomToModelContext } from 'roosterjs-content-model-types';\nimport { createSelectionMarker } from '../../modelApi/creators/createSelectionMarker';\n\n/**\n * @internal\n */\nexport function addSelectionMarker(group: ContentModelBlockGroup, context: DomToModelContext) {\n const marker = createSelectionMarker(context.segmentFormat);\n\n addDecorators(marker, context);\n\n addSegment(group, marker, context.blockFormat);\n}\n","import { ContentModelFormatBase } from 'roosterjs-content-model-types';\nimport { getObjectKeys } from 'roosterjs-editor-dom';\n\n/**\n * Check if the two given formats object are equal. This is a check to value but not to reference\n * @param f1 The first format object to check\n * @param f2 The second format object to check\n */\nexport function areSameFormats(f1: T, f2: T) {\n if (f1 == f2) {\n return true;\n } else {\n const keys1 = getObjectKeys(f1);\n const keys2 = getObjectKeys(f2);\n\n return keys1.length == keys2.length && keys1.every(key => f1[key] == f2[key]);\n }\n}\n","/**\n * @internal\n */\nexport function getBoundingClientRect(element: Element): DOMRect {\n return element.getBoundingClientRect();\n}\n","import { DefaultStyleMap, DomToModelContext } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Get default CSS style of given element\n * @param element The element to get default style from\n * @param context The context of DOM to Content Model conversion\n * @returns A valid CSS style object\n */\nexport function getDefaultStyle(\n element: HTMLElement,\n context: DomToModelContext\n): Partial {\n let tag = element.tagName.toLowerCase() as keyof DefaultStyleMap;\n\n return context.defaultStyles[tag] || {};\n}\n","import { DomToModelContext } from 'roosterjs-content-model-types';\n\n/**\n * Get offset numbers of a regular (range based) selection.\n * If the selection start/end position is not in the given node, it will return -1 for the related value\n * @param context DOM to Content Model context used for retrieve the selection\n * @param currentContainer The container node to check\n * @returns a tuple of start and end offsets. -1 means selection is not directly under the given node\n */\nexport function getRegularSelectionOffsets(\n context: DomToModelContext,\n currentContainer: Node\n): [number, number] {\n let startOffset =\n context.regularSelection?.startContainer == currentContainer\n ? context.regularSelection.startOffset!\n : -1;\n let endOffset =\n context.regularSelection?.endContainer == currentContainer\n ? context.regularSelection.endOffset!\n : -1;\n\n return [startOffset, endOffset];\n}\n","import { DomToModelContext } from 'roosterjs-content-model-types';\nimport { getDefaultStyle } from './getDefaultStyle';\n\nconst BLOCK_DISPLAY_STYLES = ['block', 'list-item', 'table', 'table-cell', 'flex'];\n\n/**\n * @internal\n * Check if the given element will be layout as a block\n * @param element The element to check\n * @param context The context of DOM to Content Model conversion\n */\nexport function isBlockElement(element: HTMLElement, context: DomToModelContext): boolean {\n const display = element.style.display || getDefaultStyle(element, context).display || '';\n\n return BLOCK_DISPLAY_STYLES.indexOf(display) >= 0;\n}\n","import { getDefaultStyle } from './getDefaultStyle';\nimport {\n ContentModelFormatBase,\n DomToModelContext,\n FormatParser,\n} from 'roosterjs-content-model-types';\n\n/**\n * Parse formats of the given HTML element using specified format parsers\n * @param element The element to parse format from\n * @param parsers The parses we are using to parse format\n * @param format The format object to hold result format\n * @param context DOM to Content Model context\n */\nexport function parseFormat(\n element: HTMLElement,\n parsers: (FormatParser | null)[],\n format: T,\n context: DomToModelContext\n) {\n const defaultStyle = getDefaultStyle(element, context);\n\n parsers.forEach(parser => {\n parser?.(format, element, context, defaultStyle);\n });\n}\n","import { getObjectKeys } from 'roosterjs-editor-dom';\nimport {\n ContentModelBlockFormat,\n ContentModelCode,\n ContentModelFormatBase,\n ContentModelLink,\n ContentModelParagraphDecorator,\n ContentModelSegmentFormat,\n DomToModelContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport interface StackFormatOptions {\n segment?: 'shallowClone' | 'shallowCloneForBlock' | 'empty';\n paragraph?: 'shallowClone' | 'shallowCloneForGroup' | 'empty';\n blockDecorator?: 'empty';\n link?: 'linkDefault' | 'cloneFormat' | 'empty';\n code?: 'codeDefault' | 'empty';\n}\n\n// Some styles, such as background color, won't be inherited by block element if it was originally\n// declared from an inline element. So we need to skip them.\n// e.g.\n// \n// line 1 <---------------------------- in red here\n//
          line 2
          <---------------------- not in red here\n//
          \nconst SkippedStylesForBlock: (keyof ContentModelSegmentFormat)[] = ['backgroundColor'];\nconst SkippedStylesForTable: (keyof ContentModelBlockFormat)[] = [\n 'marginLeft',\n 'marginRight',\n 'paddingLeft',\n 'paddingRight',\n];\n\n/**\n * @internal\n */\nexport function stackFormat(\n context: DomToModelContext,\n options: StackFormatOptions,\n callback: () => void\n) {\n const {\n segmentFormat,\n blockFormat,\n link: linkFormat,\n code: codeFormat,\n blockDecorator: decoratorFormat,\n } = context;\n const { segment, paragraph, link, code, blockDecorator } = options;\n\n try {\n context.segmentFormat = stackFormatInternal(segmentFormat, segment);\n context.blockFormat = stackFormatInternal(blockFormat, paragraph);\n context.link = stackLinkInternal(linkFormat, link);\n context.code = stackCodeInternal(codeFormat, code);\n context.blockDecorator = stackDecoratorInternal(decoratorFormat, blockDecorator);\n\n callback();\n } finally {\n context.segmentFormat = segmentFormat;\n context.blockFormat = blockFormat;\n context.link = linkFormat;\n context.code = codeFormat;\n context.blockDecorator = decoratorFormat;\n }\n}\n\nfunction stackLinkInternal(\n linkFormat: ContentModelLink,\n link?: 'linkDefault' | 'cloneFormat' | 'empty'\n) {\n switch (link) {\n case 'linkDefault':\n return {\n format: {\n underline: true,\n },\n dataset: {},\n };\n\n case 'empty':\n return {\n format: {},\n dataset: {},\n };\n\n case 'cloneFormat':\n default:\n return {\n dataset: linkFormat.dataset,\n format: { ...linkFormat.format },\n };\n }\n}\n\nfunction stackCodeInternal(codeFormat: ContentModelCode, code?: 'codeDefault' | 'empty') {\n switch (code) {\n case 'codeDefault':\n return {\n format: {\n fontFamily: 'monospace',\n },\n };\n case 'empty':\n return {\n format: {},\n };\n default:\n return codeFormat;\n }\n}\n\nfunction stackDecoratorInternal(\n format: ContentModelParagraphDecorator,\n decorator?: 'decoratorDefault' | 'empty'\n) {\n switch (decorator) {\n case 'empty':\n return {\n format: {},\n tagName: '',\n };\n default:\n return format;\n }\n}\n\nfunction stackFormatInternal(\n format: T,\n processType?: 'shallowClone' | 'shallowCloneForBlock' | 'shallowCloneForGroup' | 'empty'\n): T | {} {\n switch (processType) {\n case 'empty':\n return {};\n\n case undefined:\n return format;\n\n default:\n const result = { ...format };\n\n getObjectKeys(format).forEach(key => {\n if (\n (processType == 'shallowCloneForBlock' &&\n SkippedStylesForBlock.indexOf(key as keyof ContentModelSegmentFormat) >=\n 0) ||\n (processType == 'shallowCloneForGroup' &&\n SkippedStylesForTable.indexOf(key as keyof ContentModelBlockFormat) >= 0)\n ) {\n delete result[key];\n }\n });\n\n return result;\n }\n}\n","import { NodeType } from 'roosterjs-editor-types';\n\n/**\n * A type map from node type number to its type declaration. This is used by utility function isNodeOfType()\n */\nexport interface NodeTypeMap {\n /**\n * Attribute node\n */\n [NodeType.Attribute]: Attr;\n\n /**\n * Comment node\n */\n [NodeType.Comment]: Comment;\n\n /**\n * DocumentFragment node\n */\n [NodeType.DocumentFragment]: DocumentFragment;\n\n /**\n * Document node\n */\n [NodeType.Document]: Document;\n\n /**\n * DocumentType node\n */\n [NodeType.DocumentType]: DocumentType;\n\n /**\n * HTMLElement node\n */\n [NodeType.Element]: HTMLElement;\n /**\n * ProcessingInstruction node\n */\n [NodeType.ProcessingInstruction]: ProcessingInstruction;\n\n /**\n * Text node\n */\n [NodeType.Text]: Text;\n}\n\n/**\n * Type checker for Node. Return true if it of the specified node type\n * @param node The node to check\n * @param expectedType The type to check\n */\nexport function isNodeOfType(\n node: Node | null | undefined,\n expectedType: T\n): node is NodeTypeMap[T] {\n return !!node && node.nodeType == expectedType;\n}\n","import { BulletListType, NumberingListType } from 'roosterjs-editor-types';\nimport { ContentModelWithDataset, ListMetadataFormat } from 'roosterjs-content-model-types';\nimport { createNumberDefinition, createObjectDefinition } from 'roosterjs-editor-dom';\nimport { updateMetadata } from './updateMetadata';\n\nconst ListStyleDefinitionMetadata = createObjectDefinition(\n {\n orderedStyleType: createNumberDefinition(\n true /** isOptional */,\n undefined /** value **/,\n NumberingListType.Min,\n NumberingListType.Max\n ),\n unorderedStyleType: createNumberDefinition(\n true /** isOptional */,\n undefined /** value **/,\n BulletListType.Min,\n BulletListType.Max\n ),\n },\n true /** isOptional */,\n true /** allowNull */\n);\n\n/**\n * @internal\n * Update list metadata with a callback\n * @param list The list Content Model (metadata holder)\n * @param callback The callback function used for updating metadata\n */\nexport function updateListMetadata(\n list: ContentModelWithDataset,\n callback?: (format: ListMetadataFormat | null) => ListMetadataFormat | null\n): ListMetadataFormat | null {\n return updateMetadata(list, callback, ListStyleDefinitionMetadata);\n}\n","import { ContentModelWithDataset } from 'roosterjs-content-model-types';\nimport { Definition } from 'roosterjs-editor-types';\nimport { validate } from 'roosterjs-editor-dom';\n\nconst EditingInfoDatasetName = 'editingInfo';\n\n/**\n * Update metadata of the given model\n * @param model The model to update metadata to\n * @param callback A callback function to update metadata\n * @param definition @optional Metadata definition used for verify the metadata object\n * @returns The metadata object if any, or null\n */\nexport function updateMetadata(\n model: ContentModelWithDataset,\n callback?: (metadata: T | null) => T | null,\n definition?: Definition\n): T | null {\n const metadataString = model.dataset[EditingInfoDatasetName];\n let obj: T | null = null;\n\n try {\n obj = JSON.parse(metadataString) as T;\n } catch {}\n\n if (definition && !validate(obj, definition)) {\n obj = null;\n }\n\n if (callback) {\n obj = callback(obj);\n\n if (!obj) {\n delete model.dataset[EditingInfoDatasetName];\n } else if (!definition || validate(obj, definition)) {\n model.dataset[EditingInfoDatasetName] = JSON.stringify(obj);\n }\n }\n\n return obj;\n}\n\n/**\n * Check if the given model has metadata\n * @param model The content model to check\n */\nexport function hasMetadata(model: ContentModelWithDataset | HTMLElement): boolean {\n return !!model.dataset[EditingInfoDatasetName];\n}\n","// A regex to match text that only has space and CR\n// We use real space char \" \" (\\u0020) here but not \"\\s\" since \"\\s\" will also match \" \" (\\u00A0) which is something we need to keep\nconst SPACE_TEXT_REGEX = /^[\\r\\n\\t ]*$/;\n\nconst SPACES_REGEX = /[\\u2000\\u2009\\u200a​\\u200b​\\u202f\\u205f​\\u3000\\s\\t\\r\\n]/gm;\nconst PUNCTUATIONS = '.,?!:\"()[]\\\\/';\n\n/**\n * Check if the given character is punctuation\n * @param char The character to check\n */\nexport function isPunctuation(char: string) {\n return PUNCTUATIONS.indexOf(char) >= 0;\n}\n\n/**\n * Check if the give character is a space. A space can be normal ASCII pace (32) or non-break space (160) or other kinds of spaces\n * such as ZeroWidthSpace, ...\n * @param char The character to check\n */\nexport function isSpace(char: string) {\n const code = char?.charCodeAt(0) ?? 0;\n return code == 160 || code == 32 || SPACES_REGEX.test(char);\n}\n\n/**\n * @internal\n * Check if the given string only has space, including line breaks.\n * @param txt The string to check\n */\nexport function hasSpacesOnly(txt: string): boolean {\n return SPACE_TEXT_REGEX.test(txt);\n}\n\n/**\n * Normalize spaces of the given string. After normalization, all leading (for forward) or trailing (for backward) spaces\n * will be replaces with non-break space (160)\n * @param txt The string to normalize\n * @param isForward Whether normalize forward or backward\n */\nexport function normalizeText(txt: string, isForward: boolean): string {\n return txt.replace(isForward ? /^\\u0020+/ : /\\u0020+$/, '\\u00A0');\n}\n","import { DirectionFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n */\nexport const directionFormatHandler: FormatHandler = {\n parse: (format, element, _, defaultStyle) => {\n const dir = element.style.direction || element.dir || defaultStyle.direction;\n\n if (dir) {\n format.direction = dir == 'rtl' ? 'rtl' : 'ltr';\n }\n },\n apply: (format, element) => {\n if (format.direction) {\n element.style.direction = format.direction;\n }\n },\n};\n","import { DisplayFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n */\nexport const displayFormatHandler: FormatHandler = {\n parse: (format, element) => {\n const display = element.style.display;\n\n if (display) {\n format.display = display;\n }\n },\n apply: (format, element) => {\n if (format.display) {\n element.style.display = format.display;\n }\n },\n};\n","import { calcAlign, ResultMap } from '../utils/dir';\nimport { DirectionFormat, HtmlAlignFormat, TextAlignFormat } from 'roosterjs-content-model-types';\nimport { directionFormatHandler } from './directionFormatHandler';\nimport { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n */\nexport const htmlAlignFormatHandler: FormatHandler<\n DirectionFormat & HtmlAlignFormat & TextAlignFormat\n> = {\n parse: (format, element, context, defaultStyle) => {\n directionFormatHandler.parse(format, element, context, defaultStyle);\n\n const htmlAlign = element.getAttribute('align');\n\n if (htmlAlign) {\n format.htmlAlign = calcAlign(htmlAlign, format.direction);\n delete format.textAlign;\n delete context.blockFormat.textAlign;\n }\n },\n apply: (format, element) => {\n const dir: 'ltr' | 'rtl' = format.direction == 'rtl' ? 'rtl' : 'ltr';\n\n if (format.htmlAlign) {\n element.setAttribute('align', ResultMap[format.htmlAlign][dir]);\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { LineHeightFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const lineHeightFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const lineHeight = element.style.lineHeight || defaultStyle.lineHeight;\n\n if (lineHeight && lineHeight != 'inherit') {\n format.lineHeight = lineHeight;\n }\n },\n apply: (format, element) => {\n if (format.lineHeight) {\n element.style.lineHeight = format.lineHeight;\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { MarginFormat } from 'roosterjs-content-model-types';\nimport { parseValueWithUnit } from '../utils/parseValueWithUnit';\n\nconst MarginKeys: (keyof MarginFormat & keyof CSSStyleDeclaration)[] = [\n 'marginTop',\n 'marginRight',\n 'marginBottom',\n 'marginLeft',\n];\n\n/**\n * @internal\n */\nexport const marginFormatHandler: FormatHandler = {\n parse: (format, element, _, defaultStyle) => {\n MarginKeys.forEach(key => {\n const value = element.style[key] || defaultStyle[key];\n\n if (value) {\n switch (key) {\n case 'marginTop':\n case 'marginBottom':\n format[key] = value;\n break;\n\n case 'marginLeft':\n case 'marginRight':\n format[key] = format[key]\n ? parseValueWithUnit(format[key] || '', element) +\n parseValueWithUnit(value, element) +\n 'px'\n : value;\n break;\n }\n }\n });\n },\n apply: (format, element, context) => {\n MarginKeys.forEach(key => {\n const value = format[key];\n\n if (value != context.implicitFormat[key]) {\n element.style[key] = value || '0';\n }\n });\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { PaddingFormat } from 'roosterjs-content-model-types';\n\nconst PaddingKeys: (keyof PaddingFormat & keyof CSSStyleDeclaration)[] = [\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n];\n\n/**\n * @internal\n */\nexport const paddingFormatHandler: FormatHandler = {\n parse: (format, element) => {\n PaddingKeys.forEach(key => {\n const value = element.style[key];\n\n if (value) {\n format[key] = value;\n }\n });\n },\n apply: (format, element) => {\n PaddingKeys.forEach(key => {\n const value = format[key];\n if (value) {\n element.style[key] = value;\n }\n });\n },\n};\n","import { calcAlign, ResultMap } from '../utils/dir';\nimport { DirectionFormat, TextAlignFormat } from 'roosterjs-content-model-types';\nimport { directionFormatHandler } from './directionFormatHandler';\nimport { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n */\nexport const textAlignFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n directionFormatHandler.parse(format, element, context, defaultStyle);\n\n let textAlign = element.style.textAlign || defaultStyle.textAlign;\n\n if (\n element.tagName == 'LI' &&\n element.parentElement?.style.display === 'flex' &&\n element.parentElement.style.flexDirection === 'column' &&\n element.style.alignSelf\n ) {\n // For LI element with flex style applied, we use its \"align-self\" style value instead since LI has a different implementation for align\n textAlign = element.style.alignSelf;\n }\n\n if (textAlign) {\n format.textAlign = calcAlign(textAlign, format.direction);\n }\n },\n apply: (format, element) => {\n const dir: 'ltr' | 'rtl' = format.direction == 'rtl' ? 'rtl' : 'ltr';\n\n if (format.textAlign) {\n const parent = element.parentElement;\n const parentTag = parent?.tagName;\n\n if (element.tagName == 'LI' && parent && (parentTag == 'OL' || parentTag == 'UL')) {\n element.style.alignSelf = format.textAlign;\n element.parentElement.style.flexDirection = 'column';\n element.parentElement.style.display = 'flex';\n } else {\n element.style.textAlign = ResultMap[format.textAlign][dir];\n }\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { WhiteSpaceFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const whiteSpaceFormatHandler: FormatHandler = {\n parse: (format, element, _, defaultStyle) => {\n const whiteSpace = element.style.whiteSpace || defaultStyle.whiteSpace;\n\n if (whiteSpace) {\n format.whiteSpace = whiteSpace;\n }\n },\n apply: (format, element, context) => {\n const whiteSpace = context.implicitFormat.whiteSpace;\n if (format.whiteSpace != whiteSpace) {\n element.style.whiteSpace = format.whiteSpace || 'normal';\n }\n },\n};\n","import { BackgroundColorFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\nimport { getColor, setColor } from '../utils/color';\n\n/**\n * @internal\n */\nexport const backgroundColorFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const backgroundColor =\n getColor(\n element,\n true /*isBackground*/,\n context.darkColorHandler,\n context.isDarkMode\n ) || defaultStyle.backgroundColor;\n\n if (backgroundColor) {\n format.backgroundColor = backgroundColor;\n }\n },\n apply: (format, element, context) => {\n if (format.backgroundColor) {\n setColor(\n element,\n format.backgroundColor,\n true /*isBackground*/,\n context.darkColorHandler,\n context.isDarkMode\n );\n }\n },\n};\n","import { BorderBoxFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n */\nexport const borderBoxFormatHandler: FormatHandler = {\n parse: (format, element) => {\n if (element.style?.boxSizing == 'border-box') {\n format.useBorderBox = true;\n }\n },\n apply: (format, element) => {\n if (format.useBorderBox) {\n element.style.boxSizing = 'border-box';\n }\n },\n};\n","import { BorderFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\n\n/**\n * Keys of border items\n */\nexport const BorderKeys: (keyof BorderFormat & keyof CSSStyleDeclaration)[] = [\n 'borderTop',\n 'borderRight',\n 'borderBottom',\n 'borderLeft',\n 'borderRadius',\n];\n\n/**\n * @internal\n */\nexport const borderFormatHandler: FormatHandler = {\n parse: (format, element) => {\n BorderKeys.forEach(key => {\n const value = element.style[key];\n\n if (value) {\n format[key] = value == 'none' ? '' : value;\n }\n });\n },\n apply: (format, element) => {\n BorderKeys.forEach(key => {\n const value = format[key];\n\n if (value) {\n element.style[key] = value;\n }\n });\n },\n};\n","import { BoxShadowFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n */\nexport const boxShadowFormatHandler: FormatHandler = {\n parse: (format, element) => {\n if (element.style?.boxShadow) {\n format.boxShadow = element.style.boxShadow;\n }\n },\n apply: (format, element) => {\n if (format.boxShadow) {\n element.style.boxShadow = format.boxShadow;\n }\n },\n};\n","import { DatasetFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\nimport { getObjectKeys } from 'roosterjs-editor-dom';\n\n/**\n * @internal\n */\nexport const datasetFormatHandler: FormatHandler = {\n parse: (format, element) => {\n const dataset = element.dataset;\n\n getObjectKeys(dataset).forEach(key => {\n format[key] = dataset[key] || '';\n });\n },\n\n apply: (format, element) => {\n getObjectKeys(format).forEach(key => {\n element.dataset[key] = format[key];\n });\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { IdFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const idFormatHandler: FormatHandler = {\n parse: (format, element) => {\n if (element.id) {\n format.id = element.id;\n }\n },\n apply: (format, element) => {\n if (format.id) {\n element.id = format.id;\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { SizeFormat } from 'roosterjs-content-model-types';\n\nconst PercentageRegex = /[\\d\\.]+%/;\n\n/**\n * @internal\n */\nexport const sizeFormatHandler: FormatHandler = {\n parse: (format, element, context) => {\n const width = element.style.width || tryParseSize(element, 'width');\n const height = element.style.height || tryParseSize(element, 'height');\n const maxWidth = element.style.maxWidth;\n const maxHeight = element.style.maxHeight;\n const minWidth = element.style.minWidth;\n const minHeight = element.style.minHeight;\n\n if (width) {\n format.width = width;\n }\n if (height) {\n format.height = height;\n }\n if (maxWidth) {\n format.maxWidth = maxWidth;\n }\n if (maxHeight) {\n format.maxHeight = maxHeight;\n }\n if (minWidth) {\n format.minWidth = minWidth;\n }\n if (minHeight) {\n format.minHeight = minHeight;\n }\n },\n apply: (format, element) => {\n if (format.width) {\n element.style.width = format.width;\n }\n if (format.height) {\n element.style.height = format.height;\n }\n if (format.maxWidth) {\n element.style.maxWidth = format.maxWidth;\n }\n if (format.maxHeight) {\n element.style.maxHeight = format.maxHeight;\n }\n if (format.minWidth) {\n element.style.minWidth = format.minWidth;\n }\n if (format.minHeight) {\n element.style.minHeight = format.minHeight;\n }\n },\n};\n\nfunction tryParseSize(element: HTMLElement, attrName: 'width' | 'height'): string | undefined {\n const attrValue = element.getAttribute(attrName);\n const value = parseInt(attrValue || '');\n\n return attrValue && PercentageRegex.test(attrValue)\n ? attrValue\n : Number.isNaN(value)\n ? undefined\n : value + 'px';\n}\n","import { FormatHandler } from '../FormatHandler';\nimport { VerticalAlignFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const verticalAlignFormatHandler: FormatHandler = {\n parse: (format, element) => {\n const align = element.style.verticalAlign || element.getAttribute('valign');\n\n switch (align) {\n case 'baseline':\n case 'initial':\n case 'super':\n case 'sub':\n case 'text-top':\n case 'text-bottom':\n case 'top':\n format.verticalAlign = 'top';\n break;\n\n case 'bottom':\n format.verticalAlign = 'bottom';\n break;\n }\n },\n apply: (format, element) => {\n if (format.verticalAlign) {\n element.style.verticalAlign = format.verticalAlign;\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { WordBreakFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const wordBreakFormatHandler: FormatHandler = {\n parse: (format, element, _, defaultStyle) => {\n const wordBreak = element.style.wordBreak || defaultStyle.wordBreak;\n\n if (wordBreak) {\n format.wordBreak = wordBreak;\n }\n },\n apply: (format, element) => {\n if (format.wordBreak) {\n element.style.wordBreak = format.wordBreak;\n }\n },\n};\n","import { backgroundColorFormatHandler } from './common/backgroundColorFormatHandler';\nimport { boldFormatHandler } from './segment/boldFormatHandler';\nimport { borderBoxFormatHandler } from './common/borderBoxFormatHandler';\nimport { borderFormatHandler } from './common/borderFormatHandler';\nimport { boxShadowFormatHandler } from './common/boxShadowFormatHandler';\nimport { datasetFormatHandler } from './common/datasetFormatHandler';\nimport { directionFormatHandler } from './block/directionFormatHandler';\nimport { displayFormatHandler } from './block/displayFormatHandler';\nimport { fontFamilyFormatHandler } from './segment/fontFamilyFormatHandler';\nimport { fontSizeFormatHandler } from './segment/fontSizeFormatHandler';\nimport { FormatHandler } from './FormatHandler';\nimport { getObjectKeys } from 'roosterjs-editor-dom';\nimport { htmlAlignFormatHandler } from './block/htmlAlignFormatHandler';\nimport { idFormatHandler } from './common/idFormatHandler';\nimport { italicFormatHandler } from './segment/italicFormatHandler';\nimport { letterSpacingFormatHandler } from './segment/letterSpacingFormatHandler';\nimport { lineHeightFormatHandler } from './block/lineHeightFormatHandler';\nimport { linkFormatHandler } from './segment/linkFormatHandler';\nimport { listItemMetadataFormatHandler } from './list/listItemMetadataFormatHandler';\nimport { listItemThreadFormatHandler } from './list/listItemThreadFormatHandler';\nimport { listLevelMetadataFormatHandler } from './list/listLevelMetadataFormatHandler';\nimport { listLevelThreadFormatHandler } from './list/listLevelThreadFormatHandler';\nimport { listStylePositionFormatHandler } from './list/listStylePositionFormatHandler';\nimport { listTypeFormatHandler } from './list/listTypeFormatHandler';\nimport { marginFormatHandler } from './block/marginFormatHandler';\nimport { paddingFormatHandler } from './block/paddingFormatHandler';\nimport { sizeFormatHandler } from './common/sizeFormatHandler';\nimport { strikeFormatHandler } from './segment/strikeFormatHandler';\nimport { superOrSubScriptFormatHandler } from './segment/superOrSubScriptFormatHandler';\nimport { tableLayoutFormatHandler } from './table/tableLayoutFormatHandler';\nimport { tableSpacingFormatHandler } from './table/tableSpacingFormatHandler';\nimport { textAlignFormatHandler } from './block/textAlignFormatHandler';\nimport { textColorFormatHandler } from './segment/textColorFormatHandler';\nimport { textColorOnTableCellFormatHandler } from './table/textColorOnTableCellFormatHandler';\nimport { underlineFormatHandler } from './segment/underlineFormatHandler';\nimport { verticalAlignFormatHandler } from './common/verticalAlignFormatHandler';\nimport { whiteSpaceFormatHandler } from './block/whiteSpaceFormatHandler';\nimport { wordBreakFormatHandler } from './common/wordBreakFormatHandler';\nimport {\n ContentModelFormatMap,\n FormatHandlerTypeMap,\n FormatKey,\n FormatApplier,\n FormatAppliers,\n FormatAppliersPerCategory,\n FormatParser,\n FormatParsers,\n FormatParsersPerCategory,\n} from 'roosterjs-content-model-types';\n\ntype FormatHandlers = {\n [Key in FormatKey]: FormatHandler;\n};\n\nconst defaultFormatHandlerMap: FormatHandlers = {\n backgroundColor: backgroundColorFormatHandler,\n bold: boldFormatHandler,\n border: borderFormatHandler,\n borderBox: borderBoxFormatHandler,\n boxShadow: boxShadowFormatHandler,\n dataset: datasetFormatHandler,\n direction: directionFormatHandler,\n display: displayFormatHandler,\n fontFamily: fontFamilyFormatHandler,\n fontSize: fontSizeFormatHandler,\n htmlAlign: htmlAlignFormatHandler,\n id: idFormatHandler,\n italic: italicFormatHandler,\n letterSpacing: letterSpacingFormatHandler,\n lineHeight: lineHeightFormatHandler,\n link: linkFormatHandler,\n listItemMetadata: listItemMetadataFormatHandler,\n listItemThread: listItemThreadFormatHandler,\n listLevelMetadata: listLevelMetadataFormatHandler,\n listLevelThread: listLevelThreadFormatHandler,\n listStylePosition: listStylePositionFormatHandler,\n listType: listTypeFormatHandler,\n margin: marginFormatHandler,\n padding: paddingFormatHandler,\n size: sizeFormatHandler,\n strike: strikeFormatHandler,\n superOrSubScript: superOrSubScriptFormatHandler,\n tableLayout: tableLayoutFormatHandler,\n tableSpacing: tableSpacingFormatHandler,\n textAlign: textAlignFormatHandler,\n textColor: textColorFormatHandler,\n textColorOnTableCell: textColorOnTableCellFormatHandler,\n underline: underlineFormatHandler,\n verticalAlign: verticalAlignFormatHandler,\n whiteSpace: whiteSpaceFormatHandler,\n wordBreak: wordBreakFormatHandler,\n};\n\nconst styleBasedSegmentFormats: (keyof FormatHandlerTypeMap)[] = [\n 'letterSpacing',\n 'fontFamily',\n 'fontSize',\n];\n\nconst elementBasedSegmentFormats: (keyof FormatHandlerTypeMap)[] = [\n 'strike',\n 'underline',\n 'superOrSubScript',\n 'italic',\n 'bold',\n];\nconst sharedBlockFormats: (keyof FormatHandlerTypeMap)[] = [\n 'direction',\n 'textAlign',\n 'lineHeight',\n 'whiteSpace',\n];\nconst sharedContainerFormats: (keyof FormatHandlerTypeMap)[] = [\n 'backgroundColor',\n 'margin',\n 'padding',\n 'border',\n];\n\nconst defaultFormatKeysPerCategory: {\n [key in keyof ContentModelFormatMap]: (keyof FormatHandlerTypeMap)[];\n} = {\n block: sharedBlockFormats,\n listItem: ['listItemThread', 'listItemMetadata'],\n listItemElement: [...sharedBlockFormats, 'direction', 'textAlign', 'lineHeight', 'margin'],\n listLevel: [\n 'listType',\n 'listLevelThread',\n 'listLevelMetadata',\n 'direction',\n 'textAlign',\n 'margin',\n 'padding',\n 'listStylePosition',\n 'backgroundColor',\n ],\n styleBasedSegment: [...styleBasedSegmentFormats, 'textColor', 'backgroundColor', 'lineHeight'],\n elementBasedSegment: elementBasedSegmentFormats,\n segment: [\n ...styleBasedSegmentFormats,\n ...elementBasedSegmentFormats,\n 'textColor',\n 'backgroundColor',\n 'lineHeight',\n ],\n segmentOnBlock: [...styleBasedSegmentFormats, ...elementBasedSegmentFormats, 'textColor'],\n segmentOnTableCell: [\n ...styleBasedSegmentFormats,\n ...elementBasedSegmentFormats,\n 'textColorOnTableCell',\n ],\n tableCell: [\n 'border',\n 'backgroundColor',\n 'padding',\n 'verticalAlign',\n 'wordBreak',\n 'textColor',\n 'htmlAlign',\n 'size',\n ],\n tableRow: ['backgroundColor'],\n table: [\n 'id',\n 'border',\n 'backgroundColor',\n 'display',\n 'htmlAlign',\n 'margin',\n 'size',\n 'tableLayout',\n ],\n tableBorder: ['borderBox', 'tableSpacing'],\n tableCellBorder: ['borderBox'],\n image: ['id', 'size', 'margin', 'padding', 'borderBox', 'border', 'boxShadow', 'display'],\n link: [\n 'link',\n 'textColor',\n 'underline',\n 'display',\n 'margin',\n 'padding',\n 'backgroundColor',\n 'border',\n 'size',\n 'textAlign',\n ],\n segmentUnderLink: ['textColor'],\n code: ['fontFamily', 'display'],\n dataset: ['dataset'],\n divider: [...sharedBlockFormats, ...sharedContainerFormats, 'display', 'size', 'htmlAlign'],\n container: [...sharedContainerFormats, 'htmlAlign', 'size', 'display'],\n};\n\n/**\n * @internal\n */\nexport const defaultFormatParsers: FormatParsers = getObjectKeys(defaultFormatHandlerMap).reduce(\n (result, key) => {\n result[key] = defaultFormatHandlerMap[key].parse as FormatParser;\n return result;\n },\n {}\n);\n\n/**\n * @internal\n */\nexport const defaultFormatAppliers: FormatAppliers = getObjectKeys(defaultFormatHandlerMap).reduce(\n (result, key) => {\n result[key] = defaultFormatHandlerMap[key].apply as FormatApplier;\n return result;\n },\n {}\n);\n\n/**\n * @internal\n */\nexport function getFormatParsers(\n override: Partial = {},\n additionalParsers: Partial = {}\n): FormatParsersPerCategory {\n return getObjectKeys(defaultFormatKeysPerCategory).reduce((result, key) => {\n const value = defaultFormatKeysPerCategory[key]\n .map(\n formatKey =>\n (override[formatKey] === undefined\n ? defaultFormatParsers[formatKey]\n : override[formatKey]) as FormatParser\n )\n .concat((additionalParsers[key] as FormatParser[]) || []);\n\n result[key] = value;\n\n return result;\n }, {} as FormatParsersPerCategory);\n}\n\n/**\n * @internal\n */\nexport function getFormatAppliers(\n override: Partial = {},\n additionalAppliers: Partial = {}\n): FormatAppliersPerCategory {\n return getObjectKeys(defaultFormatKeysPerCategory).reduce((result, key) => {\n const value = defaultFormatKeysPerCategory[key]\n .map(\n formatKey =>\n (override[formatKey] === undefined\n ? defaultFormatAppliers[formatKey]\n : override[formatKey]) as FormatApplier\n )\n .concat((additionalAppliers[key] as FormatApplier[]) || []);\n\n result[key] = value;\n\n return result;\n }, {} as FormatAppliersPerCategory);\n}\n","import { FormatHandler } from '../FormatHandler';\nimport { getObjectKeys, getTagOfNode } from 'roosterjs-editor-dom';\nimport { isNodeOfType } from '../../domUtils/isNodeOfType';\nimport { ListMetadataFormat } from 'roosterjs-content-model-types';\nimport { NodeType } from 'roosterjs-editor-types';\nimport { OrderedMap, UnorderedMap } from './listLevelMetadataFormatHandler';\n\nconst OrderedMapPlaceholderRegex = /\\$\\{(\\w+)\\}/;\nconst DefaultOrderedListStyles = ['decimal', 'lower-alpha', 'lower-roman'];\nconst DefaultUnorderedListStyles = ['disc', 'circle', 'square'];\nconst CharCodeOfA = 65;\nconst RomanValues: Record = {\n M: 1000,\n CM: 900,\n D: 500,\n CD: 400,\n C: 100,\n XC: 90,\n L: 50,\n XL: 40,\n X: 10,\n IX: 9,\n V: 5,\n IV: 4,\n I: 1,\n};\n\n/**\n * @internal\n */\nexport const listItemMetadataFormatHandler: FormatHandler = {\n parse: () => {\n // TODO: Handle list style override\n },\n apply: (format, element, context) => {\n const parent = element.parentNode;\n const depth = context.listFormat.nodeStack.length - 2; // Minus two for the parent element and convert length to index\n\n if (depth >= 0 && isNodeOfType(parent, NodeType.Element) && !parent.style.listStyleType) {\n const parentTag = getTagOfNode(parent);\n const style =\n parentTag == 'OL'\n ? getOrderedListStyleValue(\n OrderedMap[format.orderedStyleType!],\n context.listFormat.threadItemCounts[depth]\n ) ?? DefaultOrderedListStyles[depth % DefaultOrderedListStyles.length]\n : UnorderedMap[format.unorderedStyleType!] ??\n DefaultUnorderedListStyles[depth % DefaultUnorderedListStyles.length];\n\n if (style && (depth > 0 || (style != 'decimal' && style != 'disc'))) {\n element.style.listStyleType = style;\n }\n }\n },\n};\n\n/**\n * @internal\n * Export for test only\n */\nexport function getOrderedListStyleValue(\n template: string | undefined,\n listNumber: number\n): string | undefined {\n return template\n ? template.replace(OrderedMapPlaceholderRegex, (match, subStr) => {\n switch (subStr) {\n case 'Number':\n return listNumber + '';\n case 'LowerAlpha':\n return convertDecimalsToAlpha(listNumber, true /*isLowerCase*/);\n case 'UpperAlpha':\n return convertDecimalsToAlpha(listNumber, false /*isLowerCase*/);\n case 'LowerRoman':\n return convertDecimalsToRoman(listNumber, true /*isLowerCase*/);\n case 'UpperRoman':\n return convertDecimalsToRoman(listNumber, false /*isLowerCase*/);\n }\n\n return '';\n })\n : undefined;\n}\n\nfunction convertDecimalsToAlpha(decimal: number, isLowerCase?: boolean): string {\n let alpha = '';\n decimal--;\n\n while (decimal >= 0) {\n alpha = String.fromCharCode((decimal % 26) + CharCodeOfA) + alpha;\n decimal = Math.floor(decimal / 26) - 1;\n }\n return isLowerCase ? alpha.toLowerCase() : alpha;\n}\n\nfunction convertDecimalsToRoman(decimal: number, isLowerCase?: boolean) {\n let romanValue = '';\n for (let i of getObjectKeys(RomanValues)) {\n let timesRomanCharAppear = Math.floor(decimal / RomanValues[i]);\n decimal = decimal - timesRomanCharAppear * RomanValues[i];\n romanValue = romanValue + i.repeat(timesRomanCharAppear);\n }\n return isLowerCase ? romanValue.toLocaleLowerCase() : romanValue;\n}\n","import { FormatHandler } from '../FormatHandler';\nimport { ListThreadFormat } from 'roosterjs-content-model-types';\nimport { safeInstanceOf } from 'roosterjs-editor-dom';\n\n/**\n * @internal\n */\nexport const listItemThreadFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyles) => {\n const { listFormat } = context;\n const depth = listFormat.levels.length;\n const display = element.style.display || defaultStyles.display;\n\n if (display && display != 'list-item') {\n format.displayForDummyItem = display;\n } else if (isLiUnderOl(element) && depth > 0) {\n listFormat.threadItemCounts[depth - 1]++;\n listFormat.threadItemCounts.splice(depth);\n listFormat.levels.forEach(level => {\n // Delete restart number so next list item doesn't need to have this value.\n // Then it will be treated as a continuous list item to the previous one\n delete level.startNumberOverride;\n });\n }\n },\n apply: (format, element, context) => {\n if (format.displayForDummyItem) {\n element.style.display = format.displayForDummyItem;\n } else if (isLiUnderOl(element)) {\n const { listFormat } = context;\n const { threadItemCounts } = listFormat;\n const index = listFormat.nodeStack.length - 2; // The first one is always the parent of list, then minus another 1 to convert length to index\n\n if (index >= 0) {\n threadItemCounts.splice(index + 1);\n threadItemCounts[index] = (threadItemCounts[index] ?? 0) + 1;\n }\n }\n },\n};\n\nfunction isLiUnderOl(element: HTMLElement) {\n return (\n safeInstanceOf(element, 'HTMLLIElement') &&\n safeInstanceOf(element.parentNode, 'HTMLOListElement')\n );\n}\n","import { BulletListType, NumberingListType } from 'roosterjs-editor-types';\nimport { FormatHandler } from '../FormatHandler';\nimport { getObjectKeys, getTagOfNode, safeInstanceOf } from 'roosterjs-editor-dom';\nimport { ListMetadataFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const OrderedMap: Record = {\n [NumberingListType.Decimal]: 'decimal',\n [NumberingListType.DecimalDash]: '\"${Number}- \"',\n [NumberingListType.DecimalParenthesis]: '\"${Number}) \"',\n [NumberingListType.DecimalDoubleParenthesis]: '\"(${Number}) \"',\n [NumberingListType.LowerAlpha]: 'lower-alpha',\n [NumberingListType.LowerAlphaDash]: '\"${LowerAlpha}- \"',\n [NumberingListType.LowerAlphaParenthesis]: '\"${LowerAlpha}) \"',\n [NumberingListType.LowerAlphaDoubleParenthesis]: '\"(${LowerAlpha}) \"',\n [NumberingListType.UpperAlpha]: 'upper-alpha',\n [NumberingListType.UpperAlphaDash]: '\"${UpperAlpha}- \"',\n [NumberingListType.UpperAlphaParenthesis]: '\"${UpperAlpha}) \"',\n [NumberingListType.UpperAlphaDoubleParenthesis]: '\"(${UpperAlpha}) \"',\n [NumberingListType.LowerRoman]: 'lower-roman',\n [NumberingListType.LowerRomanDash]: '\"${LowerRoman}- \"',\n [NumberingListType.LowerRomanParenthesis]: '\"${LowerRoman}) \"',\n [NumberingListType.LowerRomanDoubleParenthesis]: '\"(${LowerRoman}) \"',\n [NumberingListType.UpperRoman]: 'upper-roman',\n [NumberingListType.UpperRomanDash]: '\"${UpperRoman}- \"',\n [NumberingListType.UpperRomanParenthesis]: '\"${UpperRoman}) \"',\n [NumberingListType.UpperRomanDoubleParenthesis]: '\"(${UpperRoman}) \"',\n};\n\n/**\n * @internal\n */\nexport const UnorderedMap: Record = {\n [BulletListType.Disc]: 'disc',\n [BulletListType.Square]: '\"∎ \"',\n [BulletListType.Circle]: 'circle',\n [BulletListType.Dash]: '\"- \"',\n [BulletListType.LongArrow]: '\"➔ \"',\n [BulletListType.DoubleLongArrow]: '\"➔ \"',\n [BulletListType.ShortArrow]: '\"➢ \"',\n [BulletListType.UnfilledArrow]: '\"➪ \"',\n [BulletListType.Hyphen]: '\"— \"',\n};\n\nconst OLTypeToStyleMap: Record = {\n '1': 'decimal',\n a: 'lower-alpha',\n A: 'upper-alpha',\n i: 'lower-roman',\n I: 'upper-roman',\n};\n\n/**\n * @internal\n */\nexport const listLevelMetadataFormatHandler: FormatHandler = {\n parse: (format, element) => {\n const listStyle =\n element.style.listStyleType ||\n (safeInstanceOf(element, 'HTMLOListElement') && OLTypeToStyleMap[element.type]);\n const tag = getTagOfNode(element);\n\n if (listStyle) {\n if (tag == 'OL' && format.orderedStyleType === undefined) {\n const value = getKeyFromValue(OrderedMap, listStyle);\n format.orderedStyleType =\n typeof value === 'undefined' ? undefined : parseInt(value);\n } else if (tag == 'UL' && format.unorderedStyleType === undefined) {\n const value = getKeyFromValue(UnorderedMap, listStyle);\n format.unorderedStyleType =\n typeof value === 'undefined' ? undefined : parseInt(value);\n }\n }\n },\n apply: (format, element) => {\n const tag = getTagOfNode(element);\n const listType =\n tag == 'OL'\n ? OrderedMap[format.orderedStyleType!]\n : UnorderedMap[format.unorderedStyleType!];\n\n if (listType && listType.indexOf('\"') < 0) {\n element.style.listStyleType = listType;\n }\n },\n};\n\nfunction getKeyFromValue(\n map: Record,\n value: V | undefined\n): string | undefined {\n const result =\n value === undefined ? undefined : getObjectKeys(map).filter(key => map[key] == value)[0];\n\n // During run time the key is always string\n return (result as any) as string | undefined;\n}\n","import { FormatHandler } from '../FormatHandler';\nimport { ListThreadFormat } from 'roosterjs-content-model-types';\nimport { safeInstanceOf } from 'roosterjs-editor-dom';\n\n/**\n * @internal\n */\nexport const listLevelThreadFormatHandler: FormatHandler = {\n parse: (format, element, context) => {\n if (safeInstanceOf(element, 'HTMLOListElement')) {\n const { listFormat } = context;\n const { threadItemCounts, levels } = listFormat;\n const depth = levels.length;\n\n if (\n typeof threadItemCounts[depth] === 'number' &&\n element.start != threadItemCounts[depth] + 1\n ) {\n format.startNumberOverride = element.start;\n }\n\n threadItemCounts[depth] = element.start - 1;\n }\n },\n apply: (format, element, context) => {\n const {\n listFormat: { threadItemCounts, nodeStack },\n } = context;\n const depth = nodeStack.length - 1; // The first one is always the parent of list\n\n if (depth >= 0 && safeInstanceOf(element, 'HTMLOListElement')) {\n const startNumber = format.startNumberOverride;\n\n if (typeof startNumber === 'number') {\n threadItemCounts[depth] = startNumber - 1;\n } else if (typeof threadItemCounts[depth] != 'number') {\n threadItemCounts[depth] = 0;\n }\n\n threadItemCounts.splice(depth + 1);\n element.start = threadItemCounts[depth] + 1;\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { ListStylePositionFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const listStylePositionFormatHandler: FormatHandler = {\n parse: (format, element) => {\n const listStylePosition = element.style.listStylePosition;\n\n if (listStylePosition) {\n format.listStylePosition = listStylePosition;\n }\n },\n apply: (format, element) => {\n if (format.listStylePosition) {\n element.style.listStylePosition = format.listStylePosition;\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { getTagOfNode } from 'roosterjs-editor-dom';\nimport { ListTypeFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const listTypeFormatHandler: FormatHandler = {\n parse: (format, element) => {\n const tag = getTagOfNode(element);\n\n if (tag == 'OL' || tag == 'UL') {\n format.listType = tag;\n }\n },\n apply: () => {},\n};\n","import { DirectionFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n */\nexport const rootDirectionFormatHandler: FormatHandler = {\n parse: (format, element) => {\n const style = element.ownerDocument.defaultView?.getComputedStyle(element);\n\n if (style?.direction == 'rtl') {\n format.direction = 'rtl';\n }\n },\n apply: () => {},\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { ZoomScaleFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const zoomScaleFormatHandler: FormatHandler = {\n parse: (format, element) => {\n const originalWidth = element.getBoundingClientRect().width;\n const visualWidth = element.offsetWidth;\n\n format.zoomScale =\n visualWidth > 0 && originalWidth > 0\n ? Math.round((originalWidth / visualWidth) * 100) / 100\n : 1;\n },\n apply: () => {},\n};\n","import { BoldFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\nimport { moveChildNodes } from 'roosterjs-editor-dom';\n\n/**\n * @internal\n */\nexport const boldFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const fontWeight = element.style.fontWeight || defaultStyle.fontWeight;\n\n if (fontWeight) {\n format.fontWeight = fontWeight;\n }\n },\n apply: (format, element, context) => {\n if (typeof format.fontWeight === 'undefined') {\n return;\n }\n\n const blockFontWeight = context.implicitFormat.fontWeight;\n\n if (\n (blockFontWeight && blockFontWeight != format.fontWeight) ||\n (!blockFontWeight && format.fontWeight && format.fontWeight != 'normal')\n ) {\n if (format.fontWeight == 'bold') {\n const b = element.ownerDocument.createElement('b');\n moveChildNodes(b, element);\n element.appendChild(b);\n } else {\n element.style.fontWeight = format.fontWeight || 'normal';\n }\n }\n },\n};\n","import { FontFamilyFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n */\nexport const fontFamilyFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const fontFamily = element.style.fontFamily || defaultStyle.fontFamily;\n\n if (fontFamily && fontFamily != 'inherit') {\n format.fontFamily = fontFamily;\n }\n },\n apply: (format, element, context) => {\n if (format.fontFamily && format.fontFamily != context.implicitFormat.fontFamily) {\n element.style.fontFamily = format.fontFamily;\n }\n },\n};\n","import { FontSizeFormat } from 'roosterjs-content-model-types';\nimport { FormatHandler } from '../FormatHandler';\nimport { isSuperOrSubScript } from './superOrSubScriptFormatHandler';\n\n/**\n * @internal\n */\nexport const fontSizeFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const fontSize = element.style.fontSize || defaultStyle.fontSize;\n const verticalAlign = element.style.verticalAlign || defaultStyle.verticalAlign;\n\n // when font size is 'smaller' and the style is for superscript/subscript,\n // the font size will be handled by superOrSubScript handler\n if (fontSize && !isSuperOrSubScript(fontSize, verticalAlign) && fontSize != 'inherit') {\n format.fontSize = fontSize;\n }\n },\n apply: (format, element, context) => {\n if (format.fontSize && format.fontSize != context.implicitFormat.fontSize) {\n element.style.fontSize = format.fontSize;\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { ItalicFormat } from 'roosterjs-content-model-types';\nimport { moveChildNodes } from 'roosterjs-editor-dom';\n\n/**\n * @internal\n */\nexport const italicFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const fontStyle = element.style.fontStyle || defaultStyle.fontStyle;\n\n if (fontStyle == 'italic' || fontStyle == 'oblique') {\n format.italic = true;\n } else if (fontStyle == 'initial' || fontStyle == 'normal') {\n format.italic = false;\n }\n },\n apply: (format, element, context) => {\n if (typeof format.italic === 'undefined') {\n return;\n }\n\n const implicitItalic = context.implicitFormat.italic;\n\n if (!!implicitItalic != !!format.italic) {\n if (format.italic) {\n const i = element.ownerDocument.createElement('i');\n moveChildNodes(i, element);\n element.appendChild(i);\n } else {\n element.style.fontStyle = 'normal';\n }\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { LetterSpacingFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const letterSpacingFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const letterSpacing = element.style.letterSpacing || defaultStyle.letterSpacing;\n\n if (letterSpacing) {\n format.letterSpacing = letterSpacing;\n }\n },\n apply: (format, element, context) => {\n if (format.letterSpacing) {\n element.style.letterSpacing = format.letterSpacing;\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { LinkFormat } from 'roosterjs-content-model-types';\nimport { safeInstanceOf } from 'roosterjs-editor-dom';\n\n/**\n * @internal\n */\nexport const linkFormatHandler: FormatHandler = {\n parse: (format, element) => {\n if (safeInstanceOf(element, 'HTMLAnchorElement')) {\n const name = element.name;\n const href = element.getAttribute('href'); // Use getAttribute to get original HREF but not the resolved absolute url\n const target = element.target;\n const rel = element.rel;\n const id = element.id;\n const className = element.className;\n const title = element.title;\n\n if (name) {\n format.name = name;\n }\n\n if (href) {\n format.href = href;\n }\n\n if (target) {\n format.target = target;\n }\n\n if (id) {\n format.anchorId = id;\n }\n\n if (rel) {\n format.relationship = rel;\n }\n\n if (title) {\n format.anchorTitle = title;\n }\n\n if (className) {\n format.anchorClass = className;\n }\n }\n },\n apply: (format, element) => {\n if (safeInstanceOf(element, 'HTMLAnchorElement') && format.href) {\n element.href = format.href;\n\n if (format.name) {\n element.name = format.name;\n }\n\n if (format.target) {\n element.target = format.target;\n }\n\n if (format.anchorId) {\n element.id = format.anchorId;\n }\n\n if (format.anchorClass) {\n element.className = format.anchorClass;\n }\n\n if (format.anchorTitle) {\n element.title = format.anchorTitle;\n }\n\n if (format.relationship) {\n element.rel = format.relationship;\n }\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { moveChildNodes } from 'roosterjs-editor-dom';\nimport { StrikeFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const strikeFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const textDecoration = element.style.textDecoration || defaultStyle.textDecoration;\n\n if (textDecoration?.indexOf('line-through')! >= 0) {\n format.strikethrough = true;\n }\n },\n apply: (format, element) => {\n if (format.strikethrough) {\n const strike = element.ownerDocument.createElement('s');\n moveChildNodes(strike, element);\n element.appendChild(strike);\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { moveChildNodes } from 'roosterjs-editor-dom';\nimport { SuperOrSubScriptFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const superOrSubScriptFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const verticalAlign = element.style.verticalAlign || defaultStyle.verticalAlign;\n const fontSize = element.style.fontSize || defaultStyle.fontSize;\n\n if (isSuperOrSubScript(fontSize, verticalAlign)) {\n format.superOrSubScriptSequence = (format.superOrSubScriptSequence || '')\n .split(' ')\n .concat(verticalAlign)\n .join(' ')\n .trim();\n }\n },\n apply: (format, element) => {\n if (format.superOrSubScriptSequence) {\n format.superOrSubScriptSequence\n .split(' ')\n .reverse()\n .forEach(value => {\n const tagName = value == 'super' ? 'sup' : value == 'sub' ? 'sub' : null;\n\n if (tagName) {\n const wrapper = element.ownerDocument.createElement(tagName);\n moveChildNodes(wrapper, element);\n element.appendChild(wrapper);\n }\n });\n }\n },\n};\n\n/**\n * @internal\n */\nexport function isSuperOrSubScript(\n fontSize: string | undefined,\n verticalAlign: string | undefined\n): verticalAlign is 'sub' | 'super' {\n return fontSize == 'smaller' && (verticalAlign == 'sub' || verticalAlign == 'super');\n}\n","import { FormatHandler } from '../FormatHandler';\nimport { getColor, setColor } from '../utils/color';\nimport { TextColorFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const textColorFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const textColor =\n getColor(\n element,\n false /*isBackground*/,\n context.darkColorHandler,\n context.isDarkMode\n ) || defaultStyle.color;\n\n if (textColor && textColor != 'inherit') {\n format.textColor = textColor;\n }\n },\n apply: (format, element, context) => {\n const implicitColor = context.implicitFormat.textColor;\n\n if (format.textColor && format.textColor != implicitColor) {\n setColor(\n element,\n format.textColor,\n false /*isBackground*/,\n context.darkColorHandler,\n context.isDarkMode\n );\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { moveChildNodes } from 'roosterjs-editor-dom';\nimport { UnderlineFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const underlineFormatHandler: FormatHandler = {\n parse: (format, element, context, defaultStyle) => {\n const textDecoration = element.style.textDecoration || defaultStyle.textDecoration;\n\n if (textDecoration?.indexOf('underline')! >= 0) {\n format.underline = true;\n } else if (element.tagName == 'A' && textDecoration == 'none') {\n format.underline = false;\n }\n },\n apply: (format, element, context) => {\n if (typeof format.underline === 'undefined') {\n return;\n }\n\n const blockUnderline = context.implicitFormat.underline;\n\n if (!!blockUnderline != !!format.underline) {\n if (format.underline) {\n const u = element.ownerDocument.createElement('u');\n moveChildNodes(u, element);\n element.appendChild(u);\n } else {\n element.style.textDecoration = 'none';\n }\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { TableLayoutFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const tableLayoutFormatHandler: FormatHandler = {\n parse: (format, element) => {\n const tableLayout = element.style.tableLayout;\n if (tableLayout && tableLayout != 'inherit') {\n format.tableLayout = tableLayout;\n }\n },\n apply: (format, element) => {\n if (format.tableLayout) {\n element.style.tableLayout = format.tableLayout;\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { SpacingFormat } from 'roosterjs-content-model-types';\n\nconst BorderCollapsed = 'collapse';\n\n/**\n * @internal\n */\nexport const tableSpacingFormatHandler: FormatHandler = {\n parse: (format, element) => {\n if (element.style.borderCollapse == BorderCollapsed) {\n format.borderCollapse = true;\n }\n },\n apply: (format, element) => {\n if (format.borderCollapse) {\n element.style.borderCollapse = BorderCollapsed;\n element.style.borderSpacing = '0';\n element.style.boxSizing = 'border-box';\n }\n },\n};\n","import { FormatHandler } from '../FormatHandler';\nimport { TextColorFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const textColorOnTableCellFormatHandler: FormatHandler = {\n parse: (format, element) => {\n if (element.style.color) {\n // Delete color from format since text color on TD/TH will be handled by separate code\n // and text color on segment format context need to be reset so that it will not inherit\n // value outer container\n delete format.textColor;\n }\n },\n apply: () => {},\n};\n","import { DarkColorHandler } from 'roosterjs-editor-types';\nimport { getTagOfNode } from 'roosterjs-editor-dom';\n\n/**\n * @internal\n */\nexport function getColor(\n element: HTMLElement,\n isBackground: boolean,\n darkColorHandler: DarkColorHandler | undefined | null,\n isDarkMode: boolean\n): string | undefined {\n let color: string | undefined;\n\n if (!color) {\n color =\n (darkColorHandler &&\n tryGetFontColor(element, isDarkMode, darkColorHandler, isBackground)) ||\n (isBackground ? element.style.backgroundColor : element.style.color) ||\n element.getAttribute(isBackground ? 'bgcolor' : 'color') ||\n undefined;\n }\n\n if (darkColorHandler) {\n color = darkColorHandler.parseColorValue(color).lightModeColor;\n }\n\n return color;\n}\n\n/**\n * @internal\n */\nexport function setColor(\n element: HTMLElement,\n lightModeColor: string,\n isBackground: boolean,\n darkColorHandler: DarkColorHandler | undefined | null,\n isDarkMode: boolean\n) {\n const effectiveColor = darkColorHandler\n ? darkColorHandler.registerColor(lightModeColor, isDarkMode)\n : lightModeColor;\n\n if (isBackground) {\n element.style.backgroundColor = effectiveColor;\n } else {\n element.style.color = effectiveColor;\n }\n}\n\n/**\n * There is a known issue that when input with IME in Chrome, it is possible Chrome insert a new FONT tag with colors.\n * If editor is in dark mode, this color will cause the FONT tag doesn't have light mode color info so that after convert\n * to light mode the color will be wrong.\n * To workaround it, we check if this is a known color (for light mode with VariableBasedDarkColor enabled, all used colors\n * are stored in darkColorHandler), then use the related light mode color instead.\n */\nfunction tryGetFontColor(\n element: HTMLElement,\n isDarkMode: boolean,\n darkColorHandler: DarkColorHandler,\n isBackground: boolean\n) {\n let darkColor: string | null;\n\n return getTagOfNode(element) == 'FONT' &&\n !element.style.getPropertyValue(isBackground ? 'background-color' : 'color') &&\n isDarkMode &&\n (darkColor = element.getAttribute(isBackground ? 'bgcolor' : 'color'))\n ? darkColorHandler.findLightColorFromDarkColor(darkColor)\n : null;\n}\n","import { DefaultImplicitFormatMap, DefaultStyleMap } from 'roosterjs-content-model-types';\n\nconst blockElement: Partial = {\n display: 'block',\n};\n\n/**\n * @internal\n */\nexport const defaultStyleMap: DefaultStyleMap = {\n address: blockElement,\n article: blockElement,\n aside: blockElement,\n b: {\n fontWeight: 'bold',\n },\n blockquote: {\n display: 'block',\n marginTop: '1em',\n marginBottom: '1em',\n marginLeft: '40px',\n marginRight: '40px',\n },\n br: blockElement,\n center: {\n display: 'block',\n textAlign: 'center',\n },\n dd: blockElement,\n div: blockElement,\n dl: blockElement,\n dt: blockElement,\n em: {\n fontStyle: 'italic',\n },\n fieldset: blockElement,\n figcaption: blockElement,\n figure: blockElement,\n footer: blockElement,\n form: blockElement,\n h1: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '2em',\n },\n h2: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '1.5em',\n },\n h3: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '1.17em',\n },\n h4: {\n display: 'block',\n fontWeight: 'bold',\n },\n h5: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '0.83em',\n },\n h6: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '0.67em',\n },\n header: blockElement,\n hr: blockElement,\n i: {\n fontStyle: 'italic',\n },\n li: {\n display: 'list-item',\n },\n main: blockElement,\n nav: blockElement,\n ol: blockElement,\n p: {\n display: 'block',\n marginTop: '1em',\n marginBottom: '1em',\n },\n pre: {\n display: 'block',\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n marginTop: '1em',\n marginBottom: '1em',\n },\n s: {\n textDecoration: 'line-through',\n },\n section: blockElement,\n strike: {\n textDecoration: 'line-through',\n },\n strong: {\n fontWeight: 'bold',\n },\n sub: {\n verticalAlign: 'sub',\n fontSize: 'smaller',\n },\n sup: {\n verticalAlign: 'super',\n fontSize: 'smaller',\n },\n table: {\n display: 'table',\n boxSizing: 'border-box',\n },\n td: {\n display: 'table-cell',\n },\n th: {\n display: 'table-cell',\n },\n u: {\n textDecoration: 'underline',\n },\n ul: blockElement,\n};\n\n/**\n * @internal\n */\nexport const enum PseudoTagNames {\n childOfPre = 'pre *', // This value is not a CSS selector, it just to tell this will impact elements under PRE tag. Any unique value here can work actually\n}\n\n/**\n * A map from tag name to its default implicit formats\n */\nexport const defaultImplicitFormatMap: DefaultImplicitFormatMap = {\n a: {\n underline: true,\n },\n blockquote: {\n marginTop: '1em',\n marginBottom: '1em',\n marginLeft: '40px',\n marginRight: '40px',\n },\n code: {\n fontFamily: 'monospace',\n },\n h1: {\n fontWeight: 'bold',\n fontSize: '2em',\n },\n h2: {\n fontWeight: 'bold',\n fontSize: '1.5em',\n },\n h3: {\n fontWeight: 'bold',\n fontSize: '1.17em',\n },\n h4: {\n fontWeight: 'bold',\n fontSize: '1em', // Set this default value here to overwrite existing font size when change header level\n },\n h5: {\n fontWeight: 'bold',\n fontSize: '0.83em',\n },\n h6: {\n fontWeight: 'bold',\n fontSize: '0.67em',\n },\n p: {\n marginTop: '1em',\n marginBottom: '1em',\n },\n pre: {\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n marginTop: '1em',\n marginBottom: '1em',\n },\n\n // For PRE tag, the following styles will be included from the PRE tag.\n // Adding this implicit style here so no need to generate these style for child elements\n [PseudoTagNames.childOfPre]: {\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n },\n};\n","/**\n * @internal\n */\nexport const ResultMap = {\n start: {\n ltr: 'left',\n rtl: 'right',\n },\n center: {\n ltr: 'center',\n rtl: 'center',\n },\n end: {\n ltr: 'right',\n rtl: 'left',\n },\n initial: {\n ltr: 'initial',\n rtl: 'initial',\n },\n justify: {\n ltr: 'justify',\n rtl: 'justify',\n },\n};\n\n/**\n * @internal\n */\nexport function calcAlign(align: string, dir?: 'ltr' | 'rtl') {\n switch (align) {\n case 'center':\n return 'center';\n\n case 'left':\n return dir == 'rtl' ? 'end' : 'start';\n\n case 'right':\n return dir == 'rtl' ? 'start' : 'end';\n\n case 'start':\n case 'end':\n return align;\n\n case 'justify':\n case 'initial':\n return align;\n\n default:\n return undefined;\n }\n}\n","import { getComputedStyle } from 'roosterjs-editor-dom';\n\nconst MarginValueRegex = /(-?\\d+(\\.\\d+)?)([a-z]+|%)/;\n\n/**\n * Parse unit value with its unit\n * @param value The source value to parse\n * @param element The source element which has this unit value.\n * @param resultUnit Unit for result, can be px or pt. @default px\n */\nexport function parseValueWithUnit(\n value: string = '',\n element?: HTMLElement,\n resultUnit: 'px' | 'pt' = 'px'\n): number {\n const match = MarginValueRegex.exec(value);\n let result = 0;\n\n if (match) {\n const [_, numStr, __, unit] = match;\n const num = parseFloat(numStr);\n\n switch (unit) {\n case 'px':\n result = num;\n break;\n case 'pt':\n result = ptToPx(num);\n break;\n case 'em':\n result = element ? getFontSize(element) * num : 0;\n break;\n case 'ex':\n result = element ? (getFontSize(element) * num) / 2 : 0;\n break;\n case '%':\n result = element ? (element.offsetWidth * num) / 100 : 0;\n break;\n default:\n // TODO: Support more unit if need\n break;\n }\n }\n\n if (result > 0 && resultUnit == 'pt') {\n result = pxToPt(result);\n }\n\n return result;\n}\n\nfunction getFontSize(element: HTMLElement) {\n const styleInPt = getComputedStyle(element, 'font-size');\n const floatInPt = parseFloat(styleInPt);\n const floatInPx = ptToPx(floatInPt);\n\n return floatInPx;\n}\n\nfunction ptToPx(pt: number): number {\n return Math.round((pt * 4000) / 3) / 1000;\n}\n\nfunction pxToPt(px: number) {\n return Math.round((px * 3000) / 4) / 1000;\n}\n","export { domToContentModel } from './domToModel/domToContentModel';\nexport { contentModelToDom } from './modelToDom/contentModelToDom';\n\nexport {\n childProcessor,\n handleRegularSelection,\n processChildNode,\n} from './domToModel/processors/childProcessor';\nexport { entityProcessor } from './domToModel/processors/entityProcessor';\nexport { tableProcessor } from './domToModel/processors/tableProcessor';\nexport { getRegularSelectionOffsets } from './domToModel/utils/getRegularSelectionOffsets';\nexport { parseFormat } from './domToModel/utils/parseFormat';\nexport { areSameFormats } from './domToModel/utils/areSameFormats';\n\nexport { updateMetadata, hasMetadata } from './domUtils/metadata/updateMetadata';\nexport { isNodeOfType, NodeTypeMap } from './domUtils/isNodeOfType';\n\nexport { createBr } from './modelApi/creators/createBr';\nexport { createListItem } from './modelApi/creators/createListItem';\nexport { createFormatContainer } from './modelApi/creators/createFormatContainer';\nexport { createParagraph } from './modelApi/creators/createParagraph';\nexport { createSelectionMarker } from './modelApi/creators/createSelectionMarker';\nexport { createTable } from './modelApi/creators/createTable';\nexport { createTableCell } from './modelApi/creators/createTableCell';\nexport { createText } from './modelApi/creators/createText';\nexport { createImage } from './modelApi/creators/createImage';\nexport { createContentModelDocument } from './modelApi/creators/createContentModelDocument';\nexport { createParagraphDecorator } from './modelApi/creators/createParagraphDecorator';\nexport { createGeneralSegment } from './modelApi/creators/createGeneralSegment';\nexport { createGeneralBlock } from './modelApi/creators/createGeneralBlock';\nexport { createEntity } from './modelApi/creators/createEntity';\nexport { createDivider } from './modelApi/creators/createDivider';\n\nexport { addBlock } from './modelApi/common/addBlock';\nexport { addCode } from './modelApi/common/addDecorators';\nexport { addLink } from './modelApi/common/addDecorators';\nexport { normalizeContentModel } from './modelApi/common/normalizeContentModel';\nexport { isGeneralSegment } from './modelApi/common/isGeneralSegment';\nexport { unwrapBlock } from './modelApi/common/unwrapBlock';\nexport { addSegment } from './modelApi/common/addSegment';\nexport { isWhiteSpacePreserved } from './modelApi/common/isWhiteSpacePreserved';\nexport { normalizeSingleSegment } from './modelApi/common/normalizeSegment';\n\nexport { setParagraphNotImplicit } from './modelApi/block/setParagraphNotImplicit';\n\nexport { parseValueWithUnit } from './formatHandlers/utils/parseValueWithUnit';\nexport { BorderKeys } from './formatHandlers/common/borderFormatHandler';\nexport { defaultImplicitFormatMap } from './formatHandlers/utils/defaultStyles';\n\nexport { isPunctuation, isSpace, normalizeText } from './domUtils/stringUtil';\n\nexport { createDomToModelContext } from './domToModel/context/createDomToModelContext';\n","import { ContentModelBlock } from 'roosterjs-content-model-types';\n\n/**\n * For a given block, if it is a paragraph, set it to be not-implicit\n * @param block The block to check\n */\nexport function setParagraphNotImplicit(block: ContentModelBlock) {\n if (block.blockType == 'Paragraph' && block.isImplicit) {\n block.isImplicit = false;\n }\n}\n","import type { ContentModelBlock, ContentModelBlockGroup } from 'roosterjs-content-model-types';\n\n/**\n * Add a given block to block group\n * @param group The block group to add block into\n * @param block The block to add\n */\nexport function addBlock(group: ContentModelBlockGroup, block: ContentModelBlock) {\n group.blocks.push(block);\n}\n","import {\n ContentModelCode,\n ContentModelLink,\n ContentModelSegment,\n DomToModelDecoratorContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function addLink(segment: ContentModelSegment, link: ContentModelLink) {\n if (link.format.href) {\n segment.link = {\n format: { ...link.format },\n dataset: { ...link.dataset },\n };\n }\n}\n\n/**\n * Add a code decorator into segment if any\n * @param segment The segment to add decorator to\n * @param code The code decorator to add\n */\nexport function addCode(segment: ContentModelSegment, code: ContentModelCode) {\n if (code.format.fontFamily) {\n segment.code = {\n format: { ...code.format },\n };\n }\n}\n\n/**\n * @internal\n */\nexport function addDecorators(segment: ContentModelSegment, context: DomToModelDecoratorContext) {\n addLink(segment, context.link);\n addCode(segment, context.code);\n}\n","import { addBlock } from './addBlock';\nimport { createParagraph } from '../creators/createParagraph';\nimport type {\n ContentModelBlockFormat,\n ContentModelBlockGroup,\n ContentModelParagraph,\n ContentModelSegment,\n} from 'roosterjs-content-model-types';\n\n/**\n * Add a given segment into a paragraph from its parent group. If the last block of the given group is not paragraph, create a new paragraph.\n * @param group The parent block group of the paragraph to add segment into\n * @param newSegment The segment to add\n * @param blockFormat The block format used for creating a new paragraph when need\n */\nexport function addSegment(\n group: ContentModelBlockGroup,\n newSegment: ContentModelSegment,\n blockFormat?: ContentModelBlockFormat\n) {\n const lastBlock = group.blocks[group.blocks.length - 1];\n let paragraph: ContentModelParagraph;\n\n if (lastBlock?.blockType == 'Paragraph') {\n paragraph = lastBlock;\n } else {\n paragraph = createParagraph(true, blockFormat);\n addBlock(group, paragraph);\n }\n\n const lastSegment = paragraph.segments[paragraph.segments.length - 1];\n\n if (newSegment.segmentType == 'SelectionMarker') {\n if (!lastSegment || !lastSegment.isSelected) {\n paragraph.segments.push(newSegment);\n }\n } else {\n if (newSegment.isSelected && lastSegment?.segmentType == 'SelectionMarker') {\n paragraph.segments.pop();\n }\n\n paragraph.segments.push(newSegment);\n }\n}\n","import {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelSegment,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function isBlockEmpty(block: ContentModelBlock): boolean {\n switch (block.blockType) {\n case 'Paragraph':\n return block.segments.length == 0;\n\n case 'Table':\n return block.rows.every(row => row.cells.length == 0);\n\n case 'BlockGroup':\n return isBlockGroupEmpty(block);\n\n case 'Entity':\n return false;\n\n default:\n return false;\n }\n}\n\n/**\n * @internal\n */\nexport function isBlockGroupEmpty(group: ContentModelBlockGroup): boolean {\n switch (group.blockGroupType) {\n case 'FormatContainer':\n // Format Container of DIV is a container for style, so we always treat it as not empty\n return group.tagName == 'div' ? false : group.blocks.every(isBlockEmpty);\n\n case 'ListItem':\n return group.blocks.every(isBlockEmpty);\n\n case 'Document':\n case 'General':\n case 'TableCell':\n return false;\n\n default:\n return true;\n }\n}\n\n/**\n * @internal\n */\nexport function isSegmentEmpty(segment: ContentModelSegment): boolean {\n switch (segment.segmentType) {\n case 'Text':\n return !segment.text;\n\n case 'Image':\n return !segment.src;\n\n default:\n return false;\n }\n}\n\n/**\n * @internal\n */\nexport function isEmpty(\n model: ContentModelBlock | ContentModelBlockGroup | ContentModelSegment\n): boolean {\n if (isBlockGroup(model)) {\n return isBlockGroupEmpty(model);\n } else if (isBlock(model)) {\n return isBlockEmpty(model);\n } else if (isSegment(model)) {\n return isSegmentEmpty(model);\n }\n\n return false;\n}\n\nfunction isSegment(\n model: ContentModelBlock | ContentModelBlockGroup | ContentModelSegment\n): model is ContentModelSegment {\n return typeof (model).segmentType === 'string';\n}\n\nfunction isBlock(\n model: ContentModelBlock | ContentModelBlockGroup | ContentModelSegment\n): model is ContentModelBlock {\n return typeof (model).blockType === 'string';\n}\n\nfunction isBlockGroup(\n model: ContentModelBlock | ContentModelBlockGroup | ContentModelSegment\n): model is ContentModelBlockGroup {\n return typeof (model).blockGroupType === 'string';\n}\n","import { ContentModelBlockGroup, ContentModelGeneralSegment } from 'roosterjs-content-model-types';\n\n/**\n * Check if the given block group is a general segment\n * @param group The group to check\n */\nexport function isGeneralSegment(\n group: ContentModelBlockGroup | ContentModelGeneralSegment\n): group is ContentModelGeneralSegment {\n return (\n group.blockGroupType == 'General' &&\n (group).segmentType == 'General'\n );\n}\n","import { ContentModelParagraph } from 'roosterjs-content-model-types';\n\n// According to https://developer.mozilla.org/en-US/docs/Web/CSS/white-space, these style values will need to preserve white spaces\nconst WHITESPACE_PRE_VALUES = ['pre', 'pre-wrap', 'break-spaces'];\n\n/**\n * Check if we have white-space to be preserved for a given paragraph\n * @param paragraph The paragraph to check\n */\nexport function isWhiteSpacePreserved(paragraph: ContentModelParagraph): boolean {\n return (\n (paragraph.format.whiteSpace &&\n WHITESPACE_PRE_VALUES.indexOf(paragraph.format.whiteSpace) >= 0) ||\n false\n );\n}\n","import { ContentModelBlockGroup } from 'roosterjs-content-model-types';\nimport { isBlockEmpty } from './isEmpty';\nimport { normalizeParagraph } from './normalizeParagraph';\nimport { unwrapBlock } from './unwrapBlock';\n\n/**\n * For a given content model, normalize it to make the model be consistent.\n * This process includes:\n * - For a list item without any list level, unwrap the list item\n * - For a paragraph, make sure it has BR at the end if it is an empty paragraph\n * - For text segments under paragraph, make sure its space values are correct (use nbsp to replace space when necessary)\n * - For an empty block, remove it\n * @param group The root level block group of content model to normalize\n */\nexport function normalizeContentModel(group: ContentModelBlockGroup) {\n for (let i = group.blocks.length - 1; i >= 0; i--) {\n const block = group.blocks[i];\n\n switch (block.blockType) {\n case 'BlockGroup':\n if (block.blockGroupType == 'ListItem' && block.levels.length == 0) {\n i += block.blocks.length;\n unwrapBlock(group, block);\n } else {\n normalizeContentModel(block);\n }\n break;\n case 'Paragraph':\n normalizeParagraph(block);\n break;\n case 'Table':\n for (let r = 0; r < block.rows.length; r++) {\n for (let c = 0; c < block.rows[r].cells.length; c++) {\n if (block.rows[r].cells[c]) {\n normalizeContentModel(block.rows[r].cells[c]);\n }\n }\n }\n break;\n }\n\n if (isBlockEmpty(block)) {\n group.blocks.splice(i, 1);\n }\n }\n}\n","import { ContentModelParagraph } from 'roosterjs-content-model-types';\nimport { createBr } from '../creators/createBr';\nimport { isSegmentEmpty } from './isEmpty';\nimport { isWhiteSpacePreserved } from './isWhiteSpacePreserved';\nimport { normalizeAllSegments } from './normalizeSegment';\n\n/**\n * @internal\n */\nexport function normalizeParagraph(paragraph: ContentModelParagraph) {\n const segments = paragraph.segments;\n\n if (!paragraph.isImplicit && segments.length > 0) {\n const last = segments[segments.length - 1];\n const secondLast = segments[segments.length - 2];\n\n if (\n last.segmentType == 'SelectionMarker' &&\n (!secondLast || secondLast.segmentType == 'Br')\n ) {\n segments.push(createBr(last.format));\n } else if (segments.length > 1 && segments[segments.length - 1].segmentType == 'Br') {\n const noMarkerSegments = segments.filter(x => x.segmentType != 'SelectionMarker');\n\n // When there is content with a
          tag at the end, we can remove the BR.\n // But if there are more than one
          at the end, do not remove them.\n if (\n noMarkerSegments.length > 1 &&\n noMarkerSegments[noMarkerSegments.length - 2].segmentType != 'Br'\n ) {\n segments.pop();\n }\n }\n }\n\n if (!isWhiteSpacePreserved(paragraph)) {\n normalizeAllSegments(paragraph);\n }\n\n removeEmptySegments(paragraph);\n}\n\nfunction removeEmptySegments(block: ContentModelParagraph) {\n for (let j = block.segments.length - 1; j >= 0; j--) {\n if (isSegmentEmpty(block.segments[j])) {\n block.segments.splice(j, 1);\n }\n }\n}\n","import { hasSpacesOnly } from '../../domUtils/stringUtil';\nimport {\n ContentModelParagraph,\n ContentModelSegment,\n ContentModelText,\n} from 'roosterjs-content-model-types';\n\nconst SPACE = '\\u0020';\nconst NONE_BREAK_SPACE = '\\u00A0';\nconst LEADING_SPACE_REGEX = /^\\u0020+/;\nconst TRAILING_SPACE_REGEX = /\\u0020+$/;\n\n/**\n * @internal\n */\nexport function normalizeAllSegments(paragraph: ContentModelParagraph) {\n const context = resetNormalizeSegmentContext();\n\n paragraph.segments.forEach(segment => {\n normalizeSegment(segment, context);\n });\n\n normalizeTextSegments(context.textSegments, context.lastInlineSegment);\n normalizeLastTextSegment(context.lastTextSegment, context.lastInlineSegment);\n}\n\n/**\n * Normalize a given segment, make sure its spaces are correctly represented by space and non-break space\n * @param segment The segment to normalize\n * @param ignoreTrailingSpaces Whether we should ignore the trailing space of the text segment @default false\n */\nexport function normalizeSingleSegment(\n segment: ContentModelSegment,\n ignoreTrailingSpaces: boolean = false\n) {\n const context = resetNormalizeSegmentContext();\n\n context.ignoreTrailingSpaces = ignoreTrailingSpaces;\n normalizeSegment(segment, context);\n}\n\n/**\n * @internal Export for test only\n */\nexport interface NormalizeSegmentContext {\n textSegments: ContentModelText[];\n ignoreLeadingSpaces: boolean;\n ignoreTrailingSpaces: boolean;\n lastTextSegment: ContentModelText | undefined;\n lastInlineSegment: ContentModelSegment | undefined;\n}\n\n/**\n * @internal Export for test only\n */\nexport function createNormalizeSegmentContext(): NormalizeSegmentContext {\n return resetNormalizeSegmentContext();\n}\n\nfunction resetNormalizeSegmentContext(\n context?: Partial\n): NormalizeSegmentContext {\n return Object.assign(context ?? {}, {\n textSegments: [],\n ignoreLeadingSpaces: true,\n ignoreTrailingSpaces: true,\n lastInlineSegment: undefined,\n lastTextSegment: undefined,\n });\n}\n\n/**\n * @internal Export for test only\n */\nexport function normalizeSegment(segment: ContentModelSegment, context: NormalizeSegmentContext) {\n switch (segment.segmentType) {\n case 'Br':\n normalizeTextSegments(context.textSegments, context.lastInlineSegment);\n normalizeLastTextSegment(context.lastTextSegment, context.lastInlineSegment);\n\n // Line ends, reset all states\n resetNormalizeSegmentContext(context);\n break;\n\n case 'Entity':\n case 'General':\n case 'Image':\n // Here \"inline segment\" means a segment showing some content inline such as text, image, or other inline HTML elements\n // BR will end current line, so it is not treated as \"inline\" here.\n // We will do some normalization to the trailing spaces for non-inline-segments\n context.lastInlineSegment = segment;\n context.ignoreLeadingSpaces = false;\n break;\n\n case 'Text':\n context.textSegments.push(segment);\n context.lastInlineSegment = segment;\n context.lastTextSegment = segment;\n\n const first = segment.text.substring(0, 1);\n const last = segment.text.substr(-1);\n\n if (!hasSpacesOnly(segment.text)) {\n if (first == SPACE) {\n // 1. Multiple leading space => single   or empty (depends on if previous segment ends with space)\n segment.text = segment.text.replace(\n LEADING_SPACE_REGEX,\n context.ignoreLeadingSpaces ? '' : NONE_BREAK_SPACE\n );\n }\n\n if (last == SPACE) {\n // 2. Multiple trailing space => single space\n segment.text = segment.text.replace(\n TRAILING_SPACE_REGEX,\n context.ignoreTrailingSpaces ? SPACE : NONE_BREAK_SPACE\n );\n }\n }\n\n context.ignoreLeadingSpaces = last == SPACE;\n\n break;\n }\n}\n\nfunction normalizeTextSegments(\n segments: ContentModelText[],\n lastInlineSegment: ContentModelSegment | undefined\n) {\n segments.forEach(segment => {\n // 3. Segment ends with   replace it with space if the previous char is not space so that next segment can wrap\n // Only do this for segments that is not the last one since the last space will be removed in step 4\n if (segment != lastInlineSegment) {\n const text = segment.text;\n\n if (\n text.substr(-1) == NONE_BREAK_SPACE &&\n text.length > 1 &&\n text.substr(-2, 1) != SPACE\n ) {\n segment.text = text.substring(0, text.length - 1) + SPACE;\n }\n }\n });\n}\n\nfunction normalizeLastTextSegment(\n segment: ContentModelText | undefined,\n lastInlineSegment: ContentModelSegment | undefined\n) {\n if (segment && segment == lastInlineSegment && segment?.text.substr(-1) == SPACE) {\n // 4. last text segment of the paragraph, remove trailing space\n segment.text = segment.text.replace(TRAILING_SPACE_REGEX, '');\n }\n}\n","import { ContentModelBlock, ContentModelBlockGroup } from 'roosterjs-content-model-types';\nimport { setParagraphNotImplicit } from '../block/setParagraphNotImplicit';\n\n/**\n * Unwrap a given block group, move its child blocks to be under its parent group\n * @param parent Parent block group of the unwrapping group\n * @param groupToUnwrap The block group to unwrap\n */\nexport function unwrapBlock(\n parent: ContentModelBlockGroup | null,\n groupToUnwrap: ContentModelBlockGroup & ContentModelBlock\n) {\n const index = parent?.blocks.indexOf(groupToUnwrap) ?? -1;\n\n if (index >= 0) {\n groupToUnwrap.blocks.forEach(setParagraphNotImplicit);\n\n parent?.blocks.splice(index, 1, ...groupToUnwrap.blocks);\n }\n}\n","import { ContentModelBr, ContentModelSegmentFormat } from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelBr model\n * @param format @optional The format of this model\n */\nexport function createBr(format?: ContentModelSegmentFormat): ContentModelBr {\n return {\n segmentType: 'Br',\n format: format ? { ...format } : {},\n };\n}\n","import { ContentModelDocument, ContentModelSegmentFormat } from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelDocument model\n * @param defaultFormat @optional Default format of this model\n */\nexport function createContentModelDocument(\n defaultFormat?: ContentModelSegmentFormat\n): ContentModelDocument {\n const result: ContentModelDocument = {\n blockGroupType: 'Document',\n blocks: [],\n };\n\n if (defaultFormat) {\n result.format = defaultFormat;\n }\n\n return result;\n}\n","import { ContentModelBlockFormat, ContentModelDivider } from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelDivider model\n * @param tagName Tag name of this divider. Currently only hr and div are supported\n * @param format @optional The format of this model\n */\nexport function createDivider(\n tagName: 'hr' | 'div',\n format?: ContentModelBlockFormat\n): ContentModelDivider {\n return {\n blockType: 'Divider',\n tagName,\n format: format ? { ...format } : {},\n };\n}\n","import { ContentModelEntity, ContentModelSegmentFormat } from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelEntity model\n * @param wrapper Wrapper element of this entity\n * @param isReadonly Whether this is a readonly entity\n * @param segmentFormat Segment format of this entity\n * @param id @optional Id of this entity\n * @param type @optional Type of this entity\n */\nexport function createEntity(\n wrapper: HTMLElement,\n isReadonly: boolean,\n segmentFormat?: ContentModelSegmentFormat,\n id?: string,\n type?: string\n): ContentModelEntity {\n return {\n segmentType: 'Entity',\n blockType: 'Entity',\n format: {\n ...(segmentFormat || {}),\n },\n id,\n type,\n isReadonly,\n wrapper,\n };\n}\n","import {\n ContentModelFormatContainer,\n ContentModelFormatContainerFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelFormatContainer model\n * @param tag Tag name of this format container, in lower case\n * @param format @optional The format of this model\n */\nexport function createFormatContainer(\n tag: Lowercase,\n format?: ContentModelFormatContainerFormat\n): ContentModelFormatContainer {\n return {\n blockType: 'BlockGroup',\n blockGroupType: 'FormatContainer',\n tagName: tag,\n blocks: [],\n format: { ...(format || {}) },\n };\n}\n","import { ContentModelGeneralBlock } from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelGeneralBlock model\n * @param element Original element of this model\n */\nexport function createGeneralBlock(element: HTMLElement): ContentModelGeneralBlock {\n return {\n blockType: 'BlockGroup',\n blockGroupType: 'General',\n element: element,\n blocks: [],\n format: {},\n };\n}\n","import {\n ContentModelGeneralSegment,\n ContentModelSegmentFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelGeneralSegment model\n * @param element The original DOM element\n * @param format @optional The format of this model\n */\nexport function createGeneralSegment(\n element: HTMLElement,\n format?: ContentModelSegmentFormat\n): ContentModelGeneralSegment {\n return {\n blockType: 'BlockGroup',\n blockGroupType: 'General',\n segmentType: 'General',\n format: format ? { ...format } : {},\n blocks: [],\n element: element,\n };\n}\n","import { ContentModelImage, ContentModelImageFormat } from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelImage model\n * @param src Image source\n * @param format @optional The format of this model\n */\nexport function createImage(src: string, format?: ContentModelImageFormat): ContentModelImage {\n return {\n segmentType: 'Image',\n src: src,\n format: format ? { ...format } : {},\n dataset: {},\n };\n}\n","import { createSelectionMarker } from './createSelectionMarker';\nimport {\n ContentModelListItem,\n ContentModelListItemLevelFormat,\n ContentModelSegmentFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelListItem model\n * @param levels Existing list levels\n * @param format @optional The format of this model\n */\nexport function createListItem(\n levels: ContentModelListItemLevelFormat[],\n format?: ContentModelSegmentFormat\n): ContentModelListItem {\n return {\n blockType: 'BlockGroup',\n blockGroupType: 'ListItem',\n blocks: [],\n levels: levels ? levels.map(level => ({ ...level })) : [],\n formatHolder: createSelectionMarker(format),\n format: {},\n };\n}\n","import type {\n ContentModelBlockFormat,\n ContentModelParagraph,\n ContentModelParagraphDecorator,\n ContentModelSegmentFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelParagraph model\n * @param isImplicit @optional Whether this is an implicit paragraph. An implicit paragraph is a paragraph that will not render with DOM element container\n * @param blockFormat @optional Format of this paragraph\n * @param segmentFormat @optional Segment format applied to this block\n * @param decorator @optional Decorator of this paragraph\n */\nexport function createParagraph(\n isImplicit?: boolean,\n blockFormat?: ContentModelBlockFormat,\n segmentFormat?: ContentModelSegmentFormat,\n decorator?: ContentModelParagraphDecorator\n): ContentModelParagraph {\n const result: ContentModelParagraph = {\n blockType: 'Paragraph',\n segments: [],\n format: blockFormat ? { ...blockFormat } : {},\n };\n\n if (segmentFormat && Object.keys(segmentFormat).length > 0) {\n result.segmentFormat = { ...segmentFormat };\n }\n\n if (isImplicit) {\n result.isImplicit = true;\n }\n\n if (decorator) {\n result.decorator = {\n tagName: decorator.tagName,\n format: { ...decorator.format },\n };\n }\n\n return result;\n}\n","import {\n ContentModelParagraphDecorator,\n ContentModelSegmentFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelParagraphDecorator model\n * @param tagName Tag name of this decorator\n * @param format @optional The format of this model\n */\nexport function createParagraphDecorator(\n tagName: string,\n format?: ContentModelSegmentFormat\n): ContentModelParagraphDecorator {\n return {\n tagName: tagName.toLocaleLowerCase(),\n format: { ...(format || {}) },\n };\n}\n","import {\n ContentModelSegmentFormat,\n ContentModelSelectionMarker,\n} from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelSelectionMarker model\n * @param format @optional The format of this model\n */\nexport function createSelectionMarker(\n format?: ContentModelSegmentFormat\n): ContentModelSelectionMarker {\n return {\n segmentType: 'SelectionMarker',\n isSelected: true,\n format: format ? { ...format } : {},\n };\n}\n","import {\n ContentModelTable,\n ContentModelTableFormat,\n ContentModelTableRow,\n} from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelTable model\n * @param rowCount Count of rows of this table\n * @param format @optional The format of this model\n */\nexport function createTable(rowCount: number, format?: ContentModelTableFormat): ContentModelTable {\n const rows: ContentModelTableRow[] = [];\n\n for (let i = 0; i < rowCount; i++) {\n rows.push({\n height: 0,\n format: {},\n cells: [],\n });\n }\n\n return {\n blockType: 'Table',\n rows,\n format: { ...(format || {}) },\n widths: [],\n dataset: {},\n };\n}\n","import { ContentModelTableCell, ContentModelTableCellFormat } from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelTableCell model\n * @param spanLeftOrColSpan @optional Whether this is a table cell merged with its left cell, or colspan number @default false\n * @param spanAboveOrRowSpan Whether this is a table cell merged with its upper cell, or rowSpan number @default false\n * @param isHeader @optional Whether this is a header cell @default false\n * @param format @optional The format of this model\n */\nexport function createTableCell(\n spanLeftOrColSpan?: boolean | number,\n spanAboveOrRowSpan?: boolean | number,\n isHeader?: boolean,\n format?: ContentModelTableCellFormat\n): ContentModelTableCell {\n const spanLeft =\n typeof spanLeftOrColSpan === 'number' ? spanLeftOrColSpan > 1 : !!spanLeftOrColSpan;\n const spanAbove =\n typeof spanAboveOrRowSpan === 'number' ? spanAboveOrRowSpan > 1 : !!spanAboveOrRowSpan;\n return {\n blockGroupType: 'TableCell',\n blocks: [],\n format: format ? { ...format } : {},\n spanLeft,\n spanAbove,\n isHeader: !!isHeader,\n dataset: {},\n };\n}\n","import { ContentModelSegmentFormat, ContentModelText } from 'roosterjs-content-model-types';\n\n/**\n * Create a ContentModelText model\n * @param text Text of this model\n * @param format @optional The format of this model\n */\nexport function createText(text: string, format?: ContentModelSegmentFormat): ContentModelText {\n return {\n segmentType: 'Text',\n text: text,\n format: format ? { ...format } : {},\n };\n}\n","import { createModelToDomContext } from './context/createModelToDomContext';\nimport { createRange, Position, toArray } from 'roosterjs-editor-dom';\nimport { isNodeOfType } from '../domUtils/isNodeOfType';\nimport {\n ContentModelDocument,\n EditorContext,\n ModelToDomBlockAndSegmentNode,\n ModelToDomContext,\n ModelToDomOption,\n} from 'roosterjs-content-model-types';\nimport {\n NodePosition,\n NodeType,\n SelectionRangeEx,\n SelectionRangeTypes,\n} from 'roosterjs-editor-types';\n\n/**\n * Create DOM tree fragment from Content Model document\n * @param doc Document object of the target DOM tree\n * @param root Target node that will become the container of new DOM tree.\n * When a DOM node with existing node is passed, it will be merged with content model so that unchanged blocks\n * won't be touched.\n * @param model The content model document to generate DOM tree from\n * @param editorContext Content for Content Model editor\n * @param option Additional options to customize the behavior of Content Model to DOM conversion\n * @returns A tuple of the following 3 objects:\n * 1. Document Fragment that contains the DOM tree generated from the given model\n * 2. A SelectionRangeEx object that contains selection info from the model if any, or null\n * 3. An array entity DOM wrapper and its placeholder node pair for reusable root level entities.\n */\nexport function contentModelToDom(\n doc: Document,\n root: Node,\n model: ContentModelDocument,\n editorContext: EditorContext,\n option?: ModelToDomOption\n): SelectionRangeEx | null {\n const modelToDomContext = createModelToDomContext(editorContext, option);\n\n modelToDomContext.modelHandlers.blockGroupChildren(doc, root, model, modelToDomContext);\n\n const range = extractSelectionRange(modelToDomContext);\n\n root.normalize();\n\n return range;\n}\n\nfunction extractSelectionRange(context: ModelToDomContext): SelectionRangeEx | null {\n const {\n regularSelection: { start, end },\n tableSelection,\n imageSelection,\n } = context;\n\n let startPosition: NodePosition | undefined;\n let endPosition: NodePosition | undefined;\n\n if (imageSelection?.image) {\n return {\n type: SelectionRangeTypes.ImageSelection,\n ranges: [createRange(imageSelection.image)],\n areAllCollapsed: false,\n image: imageSelection.image,\n };\n } else if (\n (startPosition = start && calcPosition(start)) &&\n (endPosition = end && calcPosition(end))\n ) {\n const range = createRange(startPosition, endPosition);\n\n return {\n type: SelectionRangeTypes.Normal,\n ranges: [createRange(startPosition, endPosition)],\n areAllCollapsed: range.collapsed,\n };\n } else if (tableSelection?.table) {\n return {\n type: SelectionRangeTypes.TableSelection,\n ranges: [],\n areAllCollapsed: false,\n table: tableSelection.table,\n coordinates: {\n firstCell: tableSelection.firstCell,\n lastCell: tableSelection.lastCell,\n },\n };\n } else {\n return null;\n }\n}\n\nfunction calcPosition(pos: ModelToDomBlockAndSegmentNode): NodePosition | undefined {\n let result: NodePosition | undefined;\n\n if (pos.block) {\n if (!pos.segment) {\n result = new Position(pos.block, 0);\n } else if (isNodeOfType(pos.segment, NodeType.Text)) {\n result = new Position(pos.segment, pos.segment.nodeValue?.length || 0);\n } else {\n result = new Position(\n pos.segment.parentNode!,\n toArray(pos.segment.parentNode!.childNodes as NodeListOf).indexOf(\n pos.segment!\n ) + 1\n );\n }\n }\n\n if (isNodeOfType(result?.node, NodeType.DocumentFragment)) {\n result = result?.normalize();\n }\n\n return result;\n}\n","import { defaultContentModelHandlers } from './defaultContentModelHandlers';\nimport { defaultImplicitFormatMap } from '../../formatHandlers/utils/defaultStyles';\nimport { EditorContext, ModelToDomContext, ModelToDomOption } from 'roosterjs-content-model-types';\nimport {\n defaultFormatAppliers,\n getFormatAppliers,\n} from '../../formatHandlers/defaultFormatHandlers';\n\n/**\n * @internal\n * @param editorContext\n * @returns\n */\nexport function createModelToDomContext(\n editorContext?: EditorContext,\n options?: ModelToDomOption\n): ModelToDomContext {\n options = options || {};\n\n return {\n ...(editorContext || {\n isDarkMode: false,\n }),\n regularSelection: {\n current: {\n block: null,\n segment: null,\n },\n },\n listFormat: {\n threadItemCounts: [],\n nodeStack: [],\n },\n implicitFormat: {},\n formatAppliers: getFormatAppliers(\n options.formatApplierOverride,\n options.additionalFormatAppliers\n ),\n modelHandlers: {\n ...defaultContentModelHandlers,\n ...(options.modelHandlerOverride || {}),\n },\n defaultImplicitFormatMap: {\n ...defaultImplicitFormatMap,\n ...(options.defaultImplicitFormatOverride || {}),\n },\n\n defaultModelHandlers: defaultContentModelHandlers,\n defaultFormatAppliers: defaultFormatAppliers,\n onNodeCreated: options.onNodeCreated,\n };\n}\n","import { ContentModelHandlerMap } from 'roosterjs-content-model-types';\nimport { handleBlock } from '../handlers/handleBlock';\nimport { handleBlockGroupChildren } from '../handlers/handleBlockGroupChildren';\nimport { handleBr } from '../handlers/handleBr';\nimport { handleDivider } from '../handlers/handleDivider';\nimport { handleEntity } from '../handlers/handleEntity';\nimport { handleFormatContainer } from '../handlers/handleFormatContainer';\nimport { handleGeneralModel } from '../handlers/handleGeneralModel';\nimport { handleImage } from '../handlers/handleImage';\nimport { handleList } from '../handlers/handleList';\nimport { handleListItem } from '../handlers/handleListItem';\nimport { handleParagraph } from '../handlers/handleParagraph';\nimport { handleSegment } from '../handlers/handleSegment';\nimport { handleSegmentDecorator } from '../handlers/handleSegmentDecorator';\nimport { handleTable } from '../handlers/handleTable';\nimport { handleText } from '../handlers/handleText';\n\n/**\n * @internal\n */\nexport const defaultContentModelHandlers: ContentModelHandlerMap = {\n block: handleBlock,\n blockGroupChildren: handleBlockGroupChildren,\n br: handleBr,\n entity: handleEntity,\n general: handleGeneralModel,\n divider: handleDivider,\n image: handleImage,\n list: handleList,\n listItem: handleListItem,\n paragraph: handleParagraph,\n formatContainer: handleFormatContainer,\n segment: handleSegment,\n segmentDecorator: handleSegmentDecorator,\n table: handleTable,\n text: handleText,\n};\n","import {\n ContentModelBlock,\n ContentModelBlockHandler,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleBlock: ContentModelBlockHandler = (\n doc: Document,\n parent: Node,\n block: ContentModelBlock,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n const handlers = context.modelHandlers;\n\n switch (block.blockType) {\n case 'Table':\n refNode = handlers.table(doc, parent, block, context, refNode);\n break;\n case 'Paragraph':\n refNode = handlers.paragraph(doc, parent, block, context, refNode);\n break;\n case 'Entity':\n refNode = handlers.entity(doc, parent, block, context, refNode);\n break;\n case 'Divider':\n refNode = handlers.divider(doc, parent, block, context, refNode);\n break;\n case 'BlockGroup':\n switch (block.blockGroupType) {\n case 'General':\n refNode = handlers.general(doc, parent, block, context, refNode);\n break;\n\n case 'FormatContainer':\n refNode = handlers.formatContainer(doc, parent, block, context, refNode);\n break;\n\n case 'ListItem':\n refNode = handlers.listItem(doc, parent, block, context, refNode);\n break;\n }\n\n break;\n }\n\n return refNode;\n};\n","import {\n ContentModelBlockGroup,\n ContentModelHandler,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleBlockGroupChildren: ContentModelHandler = (\n doc: Document,\n parent: Node,\n group: ContentModelBlockGroup,\n context: ModelToDomContext\n) => {\n const { listFormat } = context;\n const nodeStack = listFormat.nodeStack;\n let refNode: Node | null = parent.firstChild;\n\n try {\n group.blocks.forEach((childBlock, index) => {\n // When process list, we need a node stack.\n // When there are two continuous lists, they should share the same stack\n // so that list items with same type/threadId can be merged into the same list element\n // In other cases, clear the stack so that two separate lists won't share the same list element\n if (\n index == 0 ||\n childBlock.blockType != 'BlockGroup' ||\n childBlock.blockGroupType != 'ListItem'\n ) {\n listFormat.nodeStack = [];\n }\n\n refNode = context.modelHandlers.block(doc, parent, childBlock, context, refNode);\n });\n\n // Remove all rest node if any since they don't appear in content model\n while (refNode) {\n const next = refNode.nextSibling;\n\n refNode.parentNode?.removeChild(refNode);\n refNode = next;\n }\n } finally {\n listFormat.nodeStack = nodeStack;\n }\n};\n","import { handleSegmentCommon } from '../utils/handleSegmentCommon';\nimport {\n ContentModelBr,\n ContentModelHandler,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleBr: ContentModelHandler = (\n doc: Document,\n parent: Node,\n segment: ContentModelBr,\n context: ModelToDomContext\n) => {\n const br = doc.createElement('br');\n const element = doc.createElement('span');\n element.appendChild(br);\n parent.appendChild(element);\n\n handleSegmentCommon(doc, br, element, segment, context);\n};\n","import { applyFormat } from '../utils/applyFormat';\nimport { reuseCachedElement } from '../utils/reuseCachedElement';\nimport {\n ContentModelBlockHandler,\n ContentModelDivider,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleDivider: ContentModelBlockHandler = (\n doc: Document,\n parent: Node,\n divider: ContentModelDivider,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n let element = divider.cachedElement;\n\n if (element) {\n refNode = reuseCachedElement(parent, element, refNode);\n } else {\n element = doc.createElement(divider.tagName);\n\n divider.cachedElement = element;\n parent.insertBefore(element, refNode);\n\n applyFormat(element, context.formatAppliers.divider, divider.format, context);\n\n if (divider.size) {\n element.setAttribute('size', divider.size);\n }\n }\n\n context.onNodeCreated?.(divider, element);\n\n return refNode;\n};\n","import { applyFormat } from '../utils/applyFormat';\nimport { Entity } from 'roosterjs-editor-types';\nimport { reuseCachedElement } from '../utils/reuseCachedElement';\nimport {\n ContentModelBlockHandler,\n ContentModelEntity,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\nimport {\n addDelimiters,\n commitEntity,\n getObjectKeys,\n isBlockElement,\n wrap,\n} from 'roosterjs-editor-dom';\n\n/**\n * @internal\n */\nexport const handleEntity: ContentModelBlockHandler = (\n doc: Document,\n parent: Node,\n entityModel: ContentModelEntity,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n const { wrapper, id, type, isReadonly, format } = entityModel;\n const entity: Entity | null =\n id && type\n ? {\n wrapper,\n id,\n type,\n isReadonly: !!isReadonly,\n }\n : null;\n const isInlineEntity = !isBlockElement(wrapper);\n\n if (entity) {\n // Commit the entity attributes in case there is any change\n commitEntity(wrapper, entity.type, entity.isReadonly, entity.id);\n }\n\n refNode = reuseCachedElement(parent, wrapper, refNode);\n\n if (isInlineEntity && getObjectKeys(format).length > 0) {\n const span = wrap(wrapper, 'span');\n\n applyFormat(span, context.formatAppliers.segment, format, context);\n }\n\n if (context.addDelimiterForEntity && isInlineEntity && isReadonly) {\n const [after] = addDelimiters(wrapper);\n\n context.regularSelection.current.segment = after;\n }\n\n context.onNodeCreated?.(entityModel, wrapper);\n\n return refNode;\n};\n","import { applyFormat } from '../utils/applyFormat';\nimport { isBlockGroupEmpty } from '../../modelApi/common/isEmpty';\nimport { PseudoTagNames } from '../../formatHandlers/utils/defaultStyles';\nimport { reuseCachedElement } from '../utils/reuseCachedElement';\nimport { stackFormat } from '../utils/stackFormat';\nimport {\n ContentModelBlockHandler,\n ContentModelFormatContainer,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleFormatContainer: ContentModelBlockHandler = (\n doc: Document,\n parent: Node,\n container: ContentModelFormatContainer,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n let element = container.cachedElement;\n\n if (element) {\n refNode = reuseCachedElement(parent, element, refNode);\n\n context.modelHandlers.blockGroupChildren(doc, element, container, context);\n } else if (!isBlockGroupEmpty(container)) {\n const containerNode = doc.createElement(container.tagName);\n\n container.cachedElement = containerNode;\n parent.insertBefore(containerNode, refNode);\n\n stackFormat(context, container.tagName, () => {\n applyFormat(containerNode, context.formatAppliers.container, container.format, context);\n applyFormat(\n containerNode,\n context.formatAppliers.segmentOnBlock,\n container.format,\n context\n );\n\n applyFormat(containerNode, context.formatAppliers.container, container.format, context);\n });\n\n if (container.tagName == 'pre') {\n stackFormat(context, PseudoTagNames.childOfPre, () => {\n context.modelHandlers.blockGroupChildren(doc, containerNode, container, context);\n });\n } else {\n context.modelHandlers.blockGroupChildren(doc, containerNode, container, context);\n }\n\n element = containerNode;\n }\n\n if (element) {\n context.onNodeCreated?.(container, element);\n }\n\n return refNode;\n};\n","import { handleSegmentCommon } from '../utils/handleSegmentCommon';\nimport { isGeneralSegment } from '../../modelApi/common/isGeneralSegment';\nimport { isNodeOfType } from '../../domUtils/isNodeOfType';\nimport { NodeType } from 'roosterjs-editor-types';\nimport { reuseCachedElement } from '../utils/reuseCachedElement';\nimport { wrap } from 'roosterjs-editor-dom';\nimport {\n ContentModelBlockHandler,\n ContentModelGeneralBlock,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleGeneralModel: ContentModelBlockHandler = (\n doc: Document,\n parent: Node,\n group: ContentModelGeneralBlock,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n let node: Node = group.element;\n\n if (refNode && node.parentNode == parent) {\n refNode = reuseCachedElement(parent, node, refNode);\n } else {\n node = node.cloneNode();\n group.element = node as HTMLElement;\n\n parent.insertBefore(node, refNode);\n }\n\n if (isGeneralSegment(group) && isNodeOfType(node, NodeType.Element)) {\n const element = wrap(node, 'span');\n\n handleSegmentCommon(doc, node, element, group, context);\n } else {\n context.onNodeCreated?.(group, node);\n }\n\n context.modelHandlers.blockGroupChildren(doc, node, group, context);\n\n return refNode;\n};\n","import { applyFormat } from '../utils/applyFormat';\nimport { handleSegmentCommon } from '../utils/handleSegmentCommon';\nimport { parseValueWithUnit } from '../../formatHandlers/utils/parseValueWithUnit';\nimport {\n ContentModelHandler,\n ContentModelImage,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleImage: ContentModelHandler = (\n doc: Document,\n parent: Node,\n imageModel: ContentModelImage,\n context: ModelToDomContext\n) => {\n const img = doc.createElement('img');\n const element = document.createElement('span');\n\n parent.appendChild(element);\n element.appendChild(img);\n\n img.src = imageModel.src;\n\n if (imageModel.alt) {\n img.alt = imageModel.alt;\n }\n\n if (imageModel.title) {\n img.title = imageModel.title;\n }\n\n applyFormat(img, context.formatAppliers.image, imageModel.format, context);\n applyFormat(img, context.formatAppliers.dataset, imageModel.dataset, context);\n\n const { width, height } = imageModel.format;\n const widthNum = width ? parseValueWithUnit(width) : 0;\n const heightNum = height ? parseValueWithUnit(height) : 0;\n\n if (widthNum > 0) {\n img.width = widthNum;\n }\n\n if (heightNum > 0) {\n img.height = heightNum;\n }\n\n if (imageModel.isSelectedAsImageSelection) {\n context.imageSelection = {\n image: img,\n };\n }\n\n handleSegmentCommon(doc, img, element, imageModel, context);\n};\n","import { applyFormat } from '../utils/applyFormat';\nimport { updateListMetadata } from '../../domUtils/metadata/updateListMetadata';\nimport {\n ContentModelBlockHandler,\n ContentModelListItem,\n ContentModelListItemLevelFormat,\n DatasetFormat,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleList: ContentModelBlockHandler = (\n doc: Document,\n parent: Node,\n listItem: ContentModelListItem,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n let layer = 0;\n const { nodeStack } = context.listFormat;\n\n if (nodeStack.length == 0) {\n nodeStack.push({\n node: parent,\n });\n }\n\n // Skip existing list levels that has same properties so we can reuse them\n for (; layer < listItem.levels.length && layer + 1 < nodeStack.length; layer++) {\n const stackLevel = nodeStack[layer + 1];\n const itemLevel = listItem.levels[layer];\n\n if (\n stackLevel.listType != itemLevel.listType ||\n stackLevel.orderedStyleType != itemLevel.orderedStyleType ||\n stackLevel.unorderedStyleType != itemLevel.unorderedStyleType ||\n (itemLevel.listType == 'OL' && typeof itemLevel.startNumberOverride === 'number')\n ) {\n break;\n }\n }\n\n // Cut off remained list levels that we can't reuse\n nodeStack.splice(layer + 1);\n\n // Create new list levels that are after reused ones\n for (; layer < listItem.levels.length; layer++) {\n const level = listItem.levels[layer];\n const newList = doc.createElement(level.listType || 'UL');\n const lastParent = nodeStack[nodeStack.length - 1].node;\n\n lastParent.insertBefore(newList, layer == 0 ? refNode : null);\n\n applyFormat(newList, context.formatAppliers.listLevel, level, context);\n\n handleMetadata(level, newList, context);\n\n nodeStack.push({ node: newList, ...level });\n\n context.onNodeCreated?.(level, newList);\n }\n\n return refNode;\n};\n\nfunction handleMetadata(\n level: ContentModelListItemLevelFormat,\n newList: HTMLElement,\n context: ModelToDomContext\n) {\n const dataset: DatasetFormat = {};\n\n updateListMetadata({ dataset }, () =>\n typeof level.orderedStyleType === 'number' || typeof level.unorderedStyleType === 'number'\n ? {\n orderedStyleType: level.orderedStyleType,\n unorderedStyleType: level.unorderedStyleType,\n }\n : null\n );\n applyFormat(newList, context.formatAppliers.dataset, dataset, context);\n}\n","import { applyFormat } from '../utils/applyFormat';\nimport { setParagraphNotImplicit } from '../../modelApi/block/setParagraphNotImplicit';\nimport { unwrap } from 'roosterjs-editor-dom';\nimport {\n ContentModelBlockHandler,\n ContentModelListItem,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleListItem: ContentModelBlockHandler = (\n doc: Document,\n parent: Node,\n listItem: ContentModelListItem,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n refNode = context.modelHandlers.list(doc, parent, listItem, context, refNode);\n\n const { nodeStack } = context.listFormat;\n\n let listParent = nodeStack?.[nodeStack?.length - 1]?.node || parent;\n const li = doc.createElement('li');\n const level = listItem.levels[listItem.levels.length - 1];\n\n // It is possible listParent is the same with parent param.\n // This happens when outdent a list item to cause it has no list level\n listParent.insertBefore(li, refNode?.parentNode == listParent ? refNode : null);\n\n if (level) {\n applyFormat(li, context.formatAppliers.listItemElement, listItem.format, context);\n applyFormat(li, context.formatAppliers.segment, listItem.formatHolder.format, context);\n applyFormat(li, context.formatAppliers.listItem, level, context);\n\n context.modelHandlers.blockGroupChildren(doc, li, listItem, context);\n } else {\n // There is no level for this list item, that means it should be moved out of the list\n // For each paragraph, make it not implicit so it will have a DIV around it, to avoid more paragraphs connected together\n listItem.blocks.forEach(setParagraphNotImplicit);\n\n context.modelHandlers.blockGroupChildren(doc, li, listItem, context);\n\n unwrap(li);\n }\n\n context.onNodeCreated?.(listItem, li);\n\n return refNode;\n};\n","import { applyFormat } from '../utils/applyFormat';\nimport { getObjectKeys, unwrap } from 'roosterjs-editor-dom';\nimport { optimize } from '../optimizers/optimize';\nimport { reuseCachedElement } from '../utils/reuseCachedElement';\nimport { stackFormat } from '../utils/stackFormat';\nimport {\n ContentModelBlockHandler,\n ContentModelParagraph,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\nconst DefaultParagraphTag = 'div';\n\n/**\n * @internal\n */\nexport const handleParagraph: ContentModelBlockHandler = (\n doc: Document,\n parent: Node,\n paragraph: ContentModelParagraph,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n let container = paragraph.cachedElement;\n\n if (container) {\n refNode = reuseCachedElement(parent, container, refNode);\n } else {\n stackFormat(context, paragraph.decorator?.tagName || null, () => {\n const needParagraphWrapper =\n !paragraph.isImplicit ||\n !!paragraph.decorator ||\n (getObjectKeys(paragraph.format).length > 0 &&\n paragraph.segments.some(segment => segment.segmentType != 'SelectionMarker'));\n const formatOnWrapper = needParagraphWrapper\n ? {\n ...(paragraph.decorator?.format || {}),\n ...paragraph.segmentFormat,\n }\n : {};\n\n container = doc.createElement(paragraph.decorator?.tagName || DefaultParagraphTag);\n\n parent.insertBefore(container, refNode);\n\n context.regularSelection.current = {\n block: needParagraphWrapper ? container : container.parentNode,\n segment: null,\n };\n\n const handleSegments = () => {\n const parent = container;\n\n if (parent) {\n const firstSegment = paragraph.segments[0];\n\n if (firstSegment?.segmentType == 'SelectionMarker') {\n // Make sure there is a segment created before selection marker.\n // If selection marker is the first selected segment in a paragraph, create a dummy text node,\n // so after rewrite, the regularSelection object can have a valid segment object set to the text node.\n context.modelHandlers.text(\n doc,\n parent,\n {\n ...firstSegment,\n segmentType: 'Text',\n text: '',\n },\n context\n );\n }\n\n paragraph.segments.forEach(segment => {\n context.modelHandlers.segment(doc, parent, segment, context);\n });\n }\n };\n\n if (needParagraphWrapper) {\n stackFormat(context, formatOnWrapper, handleSegments);\n\n applyFormat(container, context.formatAppliers.block, paragraph.format, context);\n applyFormat(container, context.formatAppliers.container, paragraph.format, context);\n applyFormat(\n container,\n context.formatAppliers.segmentOnBlock,\n formatOnWrapper,\n context\n );\n } else {\n handleSegments();\n }\n\n optimize(container);\n\n // It is possible the next sibling node is changed during processing child segments\n // e.g. When this paragraph is an implicit paragraph and it contains an inline entity segment\n // The segment will be appended to container as child then the container will be removed\n // since this paragraph it is implicit. In that case container.nextSibling will become original\n // inline entity's next sibling. So reset refNode to its real next sibling (after change) here\n // to make sure the value is correct.\n refNode = container.nextSibling;\n\n if (needParagraphWrapper) {\n paragraph.cachedElement = container;\n } else {\n unwrap(container);\n }\n });\n }\n\n if (container) {\n context.onNodeCreated?.(paragraph, container);\n }\n\n return refNode;\n};\n","import {\n ContentModelHandler,\n ContentModelSegment,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleSegment: ContentModelHandler = (\n doc: Document,\n parent: Node,\n segment: ContentModelSegment,\n context: ModelToDomContext\n) => {\n const regularSelection = context.regularSelection;\n\n // If start position is not set yet, and current segment is in selection, set start position\n if (segment.isSelected && !regularSelection.start) {\n regularSelection.start = {\n ...regularSelection.current,\n };\n }\n\n switch (segment.segmentType) {\n case 'Text':\n context.modelHandlers.text(doc, parent, segment, context);\n break;\n\n case 'Br':\n context.modelHandlers.br(doc, parent, segment, context);\n break;\n\n case 'Image':\n context.modelHandlers.image(doc, parent, segment, context);\n break;\n\n case 'General':\n context.modelHandlers.general(doc, parent, segment, context, null /*refNode*/);\n break;\n\n case 'Entity':\n context.modelHandlers.entity(doc, parent, segment, context, null /*refNode*/);\n break;\n }\n\n // If end position is not set, or it is not finalized, and current segment is still in selection, set end position\n // If there is other selection, we will overwrite regularSelection.end when we process that segment\n if (segment.isSelected && regularSelection.start) {\n regularSelection.end = {\n ...regularSelection.current,\n };\n }\n};\n","import { applyFormat } from '../utils/applyFormat';\nimport { ContentModelHandler, ContentModelSegment } from 'roosterjs-content-model-types';\nimport { moveChildNodes } from 'roosterjs-editor-dom';\nimport { stackFormat } from '../utils/stackFormat';\n\n/**\n * @internal\n */\nexport const handleSegmentDecorator: ContentModelHandler = (\n doc,\n parent,\n segment,\n context\n) => {\n const { code, link } = segment;\n\n if (link) {\n stackFormat(context, 'a', () => {\n const a = document.createElement('a');\n\n moveChildNodes(a, parent);\n parent.appendChild(a);\n\n applyFormat(a, context.formatAppliers.link, link.format, context);\n applyFormat(a, context.formatAppliers.dataset, link.dataset, context);\n\n context.onNodeCreated?.(link, a);\n });\n }\n\n if (code) {\n stackFormat(context, 'code', () => {\n const codeNode = document.createElement('code');\n\n moveChildNodes(codeNode, parent);\n parent.appendChild(codeNode);\n\n applyFormat(codeNode, context.formatAppliers.code, code.format, context);\n\n context.onNodeCreated?.(code, codeNode);\n });\n }\n};\n","import { applyFormat } from '../utils/applyFormat';\nimport { hasMetadata } from '../../domUtils/metadata/updateMetadata';\nimport { isBlockEmpty } from '../../modelApi/common/isEmpty';\nimport { moveChildNodes } from 'roosterjs-editor-dom';\nimport { reuseCachedElement } from '../utils/reuseCachedElement';\nimport {\n ContentModelBlockHandler,\n ContentModelTable,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleTable: ContentModelBlockHandler = (\n doc: Document,\n parent: Node,\n table: ContentModelTable,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n if (isBlockEmpty(table)) {\n // Empty table, do not create TABLE element and just return\n return refNode;\n }\n\n let tableNode = table.cachedElement;\n\n if (tableNode) {\n refNode = reuseCachedElement(parent, tableNode, refNode);\n\n moveChildNodes(tableNode);\n } else {\n tableNode = doc.createElement('table');\n\n table.cachedElement = tableNode;\n parent.insertBefore(tableNode, refNode);\n\n applyFormat(tableNode, context.formatAppliers.block, table.format, context);\n applyFormat(tableNode, context.formatAppliers.table, table.format, context);\n applyFormat(tableNode, context.formatAppliers.tableBorder, table.format, context);\n applyFormat(tableNode, context.formatAppliers.dataset, table.dataset, context);\n }\n\n context.onNodeCreated?.(table, tableNode);\n\n const tbody = doc.createElement('tbody');\n tableNode.appendChild(tbody);\n\n for (let row = 0; row < table.rows.length; row++) {\n const tableRow = table.rows[row];\n\n if (tableRow.cells.length == 0) {\n // Skip empty row\n continue;\n }\n\n const tr = tableRow.cachedElement || doc.createElement('tr');\n tbody.appendChild(tr);\n moveChildNodes(tr);\n\n if (!tableRow.cachedElement) {\n tableRow.cachedElement = tr;\n applyFormat(tr, context.formatAppliers.tableRow, tableRow.format, context);\n }\n\n context.onNodeCreated?.(tableRow, tr);\n\n for (let col = 0; col < tableRow.cells.length; col++) {\n const cell = tableRow.cells[col];\n\n if (cell.isSelected) {\n context.tableSelection = context.tableSelection || {\n table: tableNode,\n firstCell: { x: col, y: row },\n lastCell: { x: col, y: row },\n };\n\n if (context.tableSelection.table == tableNode) {\n const lastCell = context.tableSelection.lastCell;\n\n lastCell.x = Math.max(lastCell.x, col);\n lastCell.y = Math.max(lastCell.y, row);\n }\n }\n\n if (!cell.spanAbove && !cell.spanLeft) {\n let td = cell.cachedElement || doc.createElement(cell.isHeader ? 'th' : 'td');\n\n tr.appendChild(td);\n\n let rowSpan = 1;\n let colSpan = 1;\n let width = table.widths[col];\n let height = tableRow.height;\n\n for (; table.rows[row + rowSpan]?.cells[col]?.spanAbove; rowSpan++) {\n height += table.rows[row + rowSpan].height;\n }\n for (; tableRow.cells[col + colSpan]?.spanLeft; colSpan++) {\n width += table.widths[col + colSpan];\n }\n\n if (rowSpan > 1) {\n td.rowSpan = rowSpan;\n }\n\n if (colSpan > 1) {\n td.colSpan = colSpan;\n }\n\n if (!cell.cachedElement || (cell.format.useBorderBox && hasMetadata(table))) {\n if (width > 0 && !td.style.width) {\n td.style.width = width + 'px';\n }\n\n if (height > 0 && !td.style.height) {\n td.style.height = height + 'px';\n }\n }\n\n if (!cell.cachedElement) {\n cell.cachedElement = td;\n applyFormat(td, context.formatAppliers.block, cell.format, context);\n applyFormat(td, context.formatAppliers.tableCell, cell.format, context);\n applyFormat(td, context.formatAppliers.tableCellBorder, cell.format, context);\n applyFormat(td, context.formatAppliers.dataset, cell.dataset, context);\n }\n\n context.modelHandlers.blockGroupChildren(doc, td, cell, context);\n\n context.onNodeCreated?.(cell, td);\n }\n }\n }\n\n return refNode;\n};\n","import { handleSegmentCommon } from '../utils/handleSegmentCommon';\nimport {\n ContentModelHandler,\n ContentModelText,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleText: ContentModelHandler = (\n doc: Document,\n parent: Node,\n segment: ContentModelText,\n context: ModelToDomContext\n) => {\n const txt = doc.createTextNode(segment.text);\n const element = doc.createElement('span');\n\n parent.appendChild(element);\n element.appendChild(txt);\n\n handleSegmentCommon(doc, txt, element, segment, context);\n};\n","import { isNodeOfType } from '../../domUtils/isNodeOfType';\nimport { NodeType } from 'roosterjs-editor-types';\n\nconst OptimizeTags = ['SPAN', 'B', 'EM', 'I', 'U', 'SUB', 'SUP', 'STRIKE', 'S', 'A', 'CODE'];\n\n/**\n * @internal\n */\nexport function mergeNode(root: Node) {\n for (let child = root.firstChild; child; ) {\n const next = child.nextSibling;\n\n if (\n next &&\n isNodeOfType(child, NodeType.Element) &&\n isNodeOfType(next, NodeType.Element) &&\n child.tagName == next.tagName &&\n OptimizeTags.indexOf(child.tagName) >= 0 &&\n hasSameAttributes(child, next)\n ) {\n while (next.firstChild) {\n child.appendChild(next.firstChild);\n }\n\n next.parentNode!.removeChild(next);\n } else {\n child = next;\n }\n }\n}\n\nfunction hasSameAttributes(element1: HTMLElement, element2: HTMLElement) {\n const attr1 = element1.attributes;\n const attr2 = element2.attributes;\n\n if (attr1.length != attr2.length) {\n return false;\n }\n\n for (let i = 0; i < attr1.length; i++) {\n if (attr1[i].name != attr2[i].name || attr1[i].value != attr2[i].value) {\n return false;\n }\n }\n\n return true;\n}\n","import { EntityClasses, NodeType } from 'roosterjs-editor-types';\nimport { isNodeOfType } from '../../domUtils/isNodeOfType';\nimport { mergeNode } from './mergeNode';\nimport { removeUnnecessarySpan } from './removeUnnecessarySpan';\n\n/**\n * @internal\n */\nexport function optimize(root: Node) {\n /**\n * Do no do any optimization to entity\n */\n if (\n isNodeOfType(root, NodeType.Element) &&\n root.classList.contains(EntityClasses.ENTITY_INFO_NAME)\n ) {\n return;\n }\n\n removeUnnecessarySpan(root);\n mergeNode(root);\n\n for (let child = root.firstChild; child; child = child.nextSibling) {\n optimize(child);\n }\n}\n","import { isNodeOfType } from '../../domUtils/isNodeOfType';\nimport { NodeType } from 'roosterjs-editor-types';\n\n/**\n * @internal\n */\nexport function removeUnnecessarySpan(root: Node) {\n for (let child = root.firstChild; child; ) {\n if (\n isNodeOfType(child, NodeType.Element) &&\n child.tagName == 'SPAN' &&\n child.attributes.length == 0\n ) {\n const node = child;\n let refNode = child.nextSibling;\n child = child.nextSibling;\n\n while (node.lastChild) {\n const newNode = node.lastChild;\n root.insertBefore(newNode, refNode);\n refNode = newNode;\n }\n\n root.removeChild(node);\n } else {\n child = child.nextSibling;\n }\n }\n}\n","import {\n ContentModelFormatBase,\n FormatApplier,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Apply formats to the given HTML element using specified appliers\n * @param element The element to apply formats to\n * @param appliers The appliers we are using to apply formats\n * @param format The format object we get format info from\n * @param context Content Model to DOM context\n */\nexport function applyFormat(\n element: HTMLElement,\n appliers: (FormatApplier | null)[],\n format: T,\n context: ModelToDomContext\n) {\n appliers.forEach(applier => {\n applier?.(format, element, context);\n });\n}\n","import { applyFormat } from './applyFormat';\nimport { ContentModelSegment, ModelToDomContext } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function handleSegmentCommon(\n doc: Document,\n segmentNode: Node,\n containerNode: HTMLElement,\n segment: ContentModelSegment,\n context: ModelToDomContext\n) {\n if (!segmentNode.firstChild) {\n context.regularSelection.current.segment = segmentNode;\n }\n\n applyFormat(containerNode, context.formatAppliers.styleBasedSegment, segment.format, context);\n\n context.modelHandlers.segmentDecorator(doc, containerNode, segment, context);\n\n applyFormat(containerNode, context.formatAppliers.elementBasedSegment, segment.format, context);\n\n context.onNodeCreated?.(segment, segmentNode);\n}\n","import { getEntityFromElement } from 'roosterjs-editor-dom';\nimport { isNodeOfType } from '../../domUtils/isNodeOfType';\nimport { NodeType } from 'roosterjs-editor-types';\n\n/**\n * @internal\n */\nexport function reuseCachedElement(parent: Node, element: Node, refNode: Node | null): Node | null {\n if (element.parentNode == parent) {\n // Remove nodes before the one we are hitting since they don't appear in Content Model at this position.\n // But we don't want to touch entity since it would better to keep entity at its place unless it is removed\n // In that case we will remove it after we have handled all other nodes\n while (refNode && refNode != element && !isEntity(refNode)) {\n const next = refNode.nextSibling;\n\n refNode.parentNode?.removeChild(refNode);\n refNode = next;\n }\n\n if (refNode && refNode == element) {\n refNode = refNode.nextSibling;\n } else {\n parent.insertBefore(element, refNode);\n }\n } else {\n parent.insertBefore(element, refNode);\n }\n\n return refNode;\n}\n\n/**\n * @internal\n */\nexport function removeNode(node: Node): Node | null {\n const next = node.nextSibling;\n node.parentNode?.removeChild(node);\n\n return next;\n}\n\nfunction isEntity(node: Node) {\n return isNodeOfType(node, NodeType.Element) && !!getEntityFromElement(node);\n}\n","import {\n ContentModelBlockFormat,\n ContentModelSegmentFormat,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function stackFormat(\n context: ModelToDomContext,\n tagNameOrFormat: string | (ContentModelSegmentFormat & ContentModelBlockFormat) | null,\n callback: () => void\n) {\n const newFormat =\n typeof tagNameOrFormat === 'string'\n ? context.defaultImplicitFormatMap[tagNameOrFormat]\n : tagNameOrFormat;\n\n if (newFormat) {\n const implicitFormat = context.implicitFormat;\n\n try {\n context.implicitFormat = {\n ...implicitFormat,\n ...newFormat,\n };\n\n callback();\n } finally {\n context.implicitFormat = implicitFormat;\n }\n } else {\n callback();\n }\n}\n","import { contains, getTagOfNode } from 'roosterjs-editor-dom';\nimport { ContentModelBlockGroup, DomToModelContext } from 'roosterjs-content-model-types';\nimport {\n getRegularSelectionOffsets,\n handleRegularSelection,\n processChildNode,\n} from 'roosterjs-content-model-dom';\n\n/**\n * @internal\n */\nexport interface FormatStateContext extends DomToModelContext {\n /**\n * An optional stack of parent elements to process. When provided, the child nodes of current parent element will be ignored,\n * but use the top element in this stack instead in childProcessor.\n */\n nodeStack?: Node[];\n}\n\n/**\n * @internal\n * In order to get format, we can still use the regular child processor. However, to improve performance, we don't need to create\n * content model for the whole doc, instead we only need to traverse the tree path that can arrive current selected node.\n * This \"reduced\" child processor will first create a node stack that stores DOM node from root to current common ancestor node of selection,\n * then use this stack as a faked DOM tree to create a reduced content model which we can use to retrieve format state\n */\nexport function reducedModelChildProcessor(\n group: ContentModelBlockGroup,\n parent: ParentNode,\n context: FormatStateContext\n) {\n if (context.selectionRootNode) {\n if (!context.nodeStack) {\n context.nodeStack = createNodeStack(parent, context.selectionRootNode);\n }\n\n const stackChild = context.nodeStack.pop();\n\n if (stackChild) {\n const [nodeStartOffset, nodeEndOffset] = getRegularSelectionOffsets(context, parent);\n\n // If selection is not on this node, skip getting node index to save some time since we don't need it here\n const index =\n nodeStartOffset >= 0 || nodeEndOffset >= 0 ? getChildIndex(parent, stackChild) : -1;\n\n if (index >= 0) {\n handleRegularSelection(index, context, group, nodeStartOffset, nodeEndOffset);\n }\n\n processChildNode(group, stackChild, context);\n\n if (index >= 0) {\n handleRegularSelection(index + 1, context, group, nodeStartOffset, nodeEndOffset);\n }\n } else {\n // No child node from node stack, that means we have reached the deepest node of selection.\n // Now we can use default child processor to perform full sub tree scanning for content model,\n // So that all selected node will be included.\n context.defaultElementProcessors.child(group, parent, context);\n }\n }\n}\n\nfunction createNodeStack(root: Node, startNode: Node): Node[] {\n const result: Node[] = [];\n let node: Node | null = startNode;\n\n while (node && contains(root, node)) {\n if (getTagOfNode(node) == 'TABLE') {\n // For table, we can't do a reduced model creation since we need to handle their cells and indexes,\n // so clean up whatever we already have, and just put table into the stack\n result.splice(0, result.length, node);\n } else {\n result.push(node);\n }\n\n node = node.parentNode;\n }\n\n return result;\n}\n\nfunction getChildIndex(parent: ParentNode, stackChild: Node) {\n let index = 0;\n let child = parent.firstChild;\n\n while (child && child != stackChild) {\n index++;\n child = child.nextSibling;\n }\n return index;\n}\n","import { contains } from 'roosterjs-editor-dom';\nimport { DomToModelContext, ElementProcessor } from 'roosterjs-content-model-types';\nimport { entityProcessor, hasMetadata, tableProcessor } from 'roosterjs-content-model-dom';\n\n/**\n * @internal\n */\nexport const tablePreProcessor: ElementProcessor = (group, element, context) => {\n const processor = shouldUseTableProcessor(element, context) ? tableProcessor : entityProcessor;\n\n processor(group, element, context);\n};\n\nfunction shouldUseTableProcessor(element: HTMLTableElement, context: DomToModelContext) {\n // Treat table as a real table when:\n // 1. It is a roosterjs table (has metadata)\n // 2. Table is in selection\n // 3. There is selection inside table (or whole table is selected)\n // Otherwise, we treat the table as entity so we will not change it when write back\n return hasMetadata(element) || context.isInSelection || hasSelectionInTable(element, context);\n}\n\nfunction hasSelectionInTable(element: HTMLTableElement, context: DomToModelContext) {\n const selectedNodes = [\n context.imageSelection?.image,\n context.tableSelection?.table,\n context.regularSelection?.startContainer,\n context.regularSelection?.endContainer,\n ];\n\n return selectedNodes.some(n => contains(element, n, true /*treatSameNodeAsContain*/));\n}\n","import { Border } from '../publicTypes/interface/Border';\n\nconst BorderStyles = [\n 'none',\n 'hidden',\n 'dotted',\n 'dashed',\n 'solid',\n 'double',\n 'groove',\n 'ridge',\n 'inset',\n 'outset',\n];\nconst BorderSizeRegex = /^(thin|medium|thick|[\\d\\.]+\\w*)$/;\n\n/**\n * Extract an integrated border string with border width, style, color to value tuple\n * @param combinedBorder The integrated border style string\n * @returns An array with the splitted values\n */\nexport function extractBorderValues(combinedBorder?: string): Border {\n const result: Border = {};\n const values = (combinedBorder || '').replace(/, /g, ',').split(' ');\n\n values.forEach(v => {\n if (BorderStyles.indexOf(v) >= 0 && !result.style) {\n result.style = v;\n } else if (BorderSizeRegex.test(v) && !result.width) {\n result.width = v;\n } else if (v && !result.color) {\n result.color = v; // TODO: Do we need to use a regex to match all possible colors?\n }\n });\n\n return result;\n}\n\n/**\n * Combine border value array back to string\n * @param values Input string values\n * @param initialValue Initial value for those items without valid value\n */\nexport function combineBorderValue(value: Border): string {\n return [value.width || '', value.style || '', value.color || ''].join(' ').trim() || 'none';\n}\n","import { ContentModelImage, ImageMetadataFormat } from 'roosterjs-content-model-types';\nimport { updateMetadata } from 'roosterjs-content-model-dom';\nimport {\n createNumberDefinition,\n createObjectDefinition,\n createStringDefinition,\n} from 'roosterjs-editor-dom';\n\nconst NumberDefinition = createNumberDefinition();\n\nconst ImageMetadataFormatDefinition = createObjectDefinition>({\n widthPx: NumberDefinition,\n heightPx: NumberDefinition,\n leftPercent: NumberDefinition,\n rightPercent: NumberDefinition,\n topPercent: NumberDefinition,\n bottomPercent: NumberDefinition,\n angleRad: NumberDefinition,\n src: createStringDefinition(),\n naturalHeight: NumberDefinition,\n naturalWidth: NumberDefinition,\n});\n\n/**\n * Update image metadata with a callback\n * @param image The image Content Model\n * @param callback The callback function used for updating metadata\n */\nexport function updateImageMetadata(\n image: ContentModelImage,\n callback?: (format: ImageMetadataFormat | null) => ImageMetadataFormat | null\n): ImageMetadataFormat | null {\n return updateMetadata(image, callback, ImageMetadataFormatDefinition);\n}\n","import { ContentModelTableCell } from 'roosterjs-content-model-types';\nimport { createBooleanDefinition, createObjectDefinition } from 'roosterjs-editor-dom';\nimport { TableCellMetadataFormat } from 'roosterjs-editor-types';\nimport { updateMetadata } from 'roosterjs-content-model-dom';\n\nconst TableCellMetadataFormatDefinition = createObjectDefinition>(\n {\n bgColorOverride: createBooleanDefinition(true /** isOptional */),\n },\n false /* isOptional */,\n true /** allowNull */\n);\n\n/**\n * Update table cell metadata with a callback\n * @param cell The table cell Content Model\n * @param callback The callback function used for updating metadata\n */\nexport function updateTableCellMetadata(\n cell: ContentModelTableCell,\n callback?: (format: TableCellMetadataFormat | null) => TableCellMetadataFormat | null\n): TableCellMetadataFormat | null {\n return updateMetadata(cell, callback, TableCellMetadataFormatDefinition);\n}\n","import { ContentModelTable, TableMetadataFormat } from 'roosterjs-content-model-types';\nimport { TableBorderFormat } from 'roosterjs-editor-types';\nimport { updateMetadata } from 'roosterjs-content-model-dom';\nimport {\n createBooleanDefinition,\n createNumberDefinition,\n createObjectDefinition,\n createStringDefinition,\n} from 'roosterjs-editor-dom';\n\nconst NullStringDefinition = createStringDefinition(\n false /** isOptional */,\n undefined /** value */,\n true /** allowNull */\n);\n\nconst BooleanDefinition = createBooleanDefinition(false /** isOptional */);\n\nconst TableFormatDefinition = createObjectDefinition>(\n {\n topBorderColor: NullStringDefinition,\n bottomBorderColor: NullStringDefinition,\n verticalBorderColor: NullStringDefinition,\n hasHeaderRow: BooleanDefinition,\n headerRowColor: NullStringDefinition,\n hasFirstColumn: BooleanDefinition,\n hasBandedColumns: BooleanDefinition,\n hasBandedRows: BooleanDefinition,\n bgColorEven: NullStringDefinition,\n bgColorOdd: NullStringDefinition,\n tableBorderFormat: createNumberDefinition(\n false /** isOptional */,\n undefined /* value */,\n TableBorderFormat.DEFAULT /* first table border format, TODO: Use Min/Max to specify valid values */,\n TableBorderFormat.CLEAR /* last table border format, , TODO: Use Min/Max to specify valid values */\n ),\n },\n false /* isOptional */,\n true /** allowNull */\n);\n\n/**\n * Update table metadata with a callback\n * @param table The table Content Model\n * @param callback The callback function used for updating metadata\n */\nexport function updateTableMetadata(\n table: ContentModelTable,\n callback?: (format: TableMetadataFormat | null) => TableMetadataFormat | null\n): TableMetadataFormat | null {\n return updateMetadata(table, callback, TableFormatDefinition);\n}\n","import {\n ContentModelDocument,\n ContentModelSegmentFormat,\n DomToModelOption,\n ModelToDomOption,\n} from 'roosterjs-content-model-types';\nimport { ContentModelEditorCore } from '../publicTypes/ContentModelEditorCore';\nimport { ContentModelEditorOptions, IContentModelEditor } from '../publicTypes/IContentModelEditor';\nimport { createContentModelEditorCore } from './createContentModelEditorCore';\nimport { EditorBase } from 'roosterjs-editor-core';\n\n/**\n * Editor for Content Model.\n * (This class is still under development, and may still be changed in the future with some breaking changes)\n */\nexport default class ContentModelEditor\n extends EditorBase\n implements IContentModelEditor {\n /**\n * Creates an instance of Editor\n * @param contentDiv The DIV HTML element which will be the container element of editor\n * @param options An optional options object to customize the editor\n */\n constructor(contentDiv: HTMLDivElement, options: ContentModelEditorOptions = {}) {\n super(contentDiv, options, createContentModelEditorCore);\n }\n\n /**\n * Create Content Model from DOM tree in this editor\n * @param option The option to customize the behavior of DOM to Content Model conversion\n */\n createContentModel(option?: DomToModelOption): ContentModelDocument {\n const core = this.getCore();\n\n return core.api.createContentModel(core, option);\n }\n\n /**\n * Set content with content model\n * @param model The content model to set\n * @param option Additional options to customize the behavior of Content Model to DOM conversion\n */\n setContentModel(model: ContentModelDocument, option?: ModelToDomOption) {\n const core = this.getCore();\n\n core.api.setContentModel(core, model, option);\n }\n\n /**\n * Cache a content model object. Next time when format with content model, we can reuse it.\n * @param model\n */\n cacheContentModel(model: ContentModelDocument | null) {\n const core = this.getCore();\n\n if (core.reuseModel && !core.lifecycle.shadowEditFragment) {\n core.cachedModel = model || undefined;\n }\n }\n\n /**\n * Get default format as ContentModelSegmentFormat.\n * This is a replacement of IEditor.getDefaultFormat for Content Model.\n * @returns The default format\n */\n getContentModelDefaultFormat(): ContentModelSegmentFormat {\n const core = this.getCore();\n\n return core.defaultFormat;\n }\n}\n","import { cloneModel } from '../../modelApi/common/cloneModel';\nimport { domToContentModel } from 'roosterjs-content-model-dom';\nimport { DomToModelOption } from 'roosterjs-content-model-types';\nimport { tablePreProcessor } from '../../domToModel/processors/tablePreProcessor';\nimport {\n ContentModelEditorCore,\n CreateContentModel,\n} from '../../publicTypes/ContentModelEditorCore';\n\n/**\n * @internal\n * Create Content Model from DOM tree in this editor\n * @param option The option to customize the behavior of DOM to Content Model conversion\n */\nexport const createContentModel: CreateContentModel = (core, option) => {\n let cachedModel = core.reuseModel ? core.cachedModel : null;\n\n if (cachedModel && core.lifecycle.shadowEditFragment) {\n // When in shadow edit, use a cloned model so we won't pollute the cached one\n cachedModel = cloneModel(cachedModel);\n }\n\n return cachedModel || internalCreateContentModel(core, option);\n};\n\nfunction internalCreateContentModel(\n core: ContentModelEditorCore,\n option: DomToModelOption | undefined\n) {\n const context: DomToModelOption = {\n selectionRange: core.api.getSelectionRangeEx(core),\n ...core.defaultDomToModelOptions,\n ...(option || {}),\n processorOverride: {\n table: tablePreProcessor,\n ...(option?.processorOverride || {}),\n },\n };\n\n if (!core.reuseModel) {\n context.disableCacheElement = true;\n }\n\n return domToContentModel(core.contentDiv, core.api.createEditorContext(core), context);\n}\n","import { CreateEditorContext } from '../../publicTypes/ContentModelEditorCore';\n\n/**\n * @internal\n * Create a EditorContext object used by ContentModel API\n */\nexport const createEditorContext: CreateEditorContext = core => {\n return {\n isDarkMode: core.lifecycle.isDarkMode,\n defaultFormat: core.defaultFormat,\n darkColorHandler: core.darkColorHandler,\n addDelimiterForEntity: core.addDelimiterForEntity,\n };\n};\n","import { contentModelToDom } from 'roosterjs-content-model-dom';\nimport { SetContentModel } from '../../publicTypes/ContentModelEditorCore';\n\n/**\n * @internal\n * Set content with content model\n * @param model The content model to set\n * @param option Additional options to customize the behavior of Content Model to DOM conversion\n */\nexport const setContentModel: SetContentModel = (core, model, option) => {\n const range = contentModelToDom(\n core.contentDiv.ownerDocument,\n core.contentDiv,\n model,\n core.api.createEditorContext(core),\n {\n ...core.defaultModelToDomOptions,\n ...(option || {}),\n }\n );\n\n if (!core.lifecycle.shadowEditFragment) {\n core.api.select(core, range);\n }\n};\n","import { ContentModelEditorCore } from '../../publicTypes/ContentModelEditorCore';\nimport { getSelectionPath } from 'roosterjs-editor-dom';\nimport { SwitchShadowEdit } from 'roosterjs-editor-types';\n\n/**\n * @internal\n * Switch the Shadow Edit mode of editor On/Off\n * @param editorCore The EditorCore object\n * @param isOn True to switch On, False to switch Off\n */\nexport const switchShadowEdit: SwitchShadowEdit = (editorCore, isOn): void => {\n // TODO: Use strong-typed editor core object\n const core = editorCore as ContentModelEditorCore;\n\n if (isOn != !!core.lifecycle.shadowEditFragment) {\n if (isOn) {\n if (!core.cachedModel) {\n core.cachedModel = core.api.createContentModel(core);\n }\n\n const range = core.api.getSelectionRange(core, true /*tryGetFromCache*/);\n\n core.lifecycle.shadowEditSelectionPath =\n range && getSelectionPath(core.contentDiv, range);\n core.lifecycle.shadowEditFragment = core.contentDiv.ownerDocument.createDocumentFragment();\n } else {\n if (core.cachedModel) {\n core.api.setContentModel(core, core.cachedModel);\n }\n\n core.lifecycle.shadowEditFragment = null;\n core.lifecycle.shadowEditSelectionPath = null;\n }\n }\n};\n","import paste from '../../publicApi/utils/paste';\nimport { cloneModel } from '../../modelApi/common/cloneModel';\nimport { contentModelToDom } from 'roosterjs-content-model-dom';\nimport { deleteSelection } from '../../modelApi/edit/deleteSelection';\nimport { getOnDeleteEntityCallback } from '../utils/handleKeyboardEventCommon';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { iterateSelections } from '../../modelApi/selection/iterateSelections';\nimport type {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelDecorator,\n ContentModelListItemLevelFormat,\n ContentModelSegment,\n ContentModelTableRow,\n} from 'roosterjs-content-model-types';\nimport {\n addRangeToSelection,\n createElement,\n moveChildNodes,\n createRange,\n extractClipboardItems,\n toArray,\n Browser,\n wrap,\n safeInstanceOf,\n} from 'roosterjs-editor-dom';\nimport {\n ChangeSource,\n CopyPastePluginState,\n IEditor,\n PluginEventType,\n PluginWithState,\n KnownCreateElementDataIndex,\n ClipboardData,\n SelectionRangeTypes,\n SelectionRangeEx,\n} from 'roosterjs-editor-types';\n\n/**\n * Copy and paste plugin for handling onCopy and onPaste event\n */\nexport default class ContentModelCopyPastePlugin implements PluginWithState {\n private editor: IContentModelEditor | null = null;\n private disposer: (() => void) | null = null;\n\n /**\n * Construct a new instance of CopyPastePlugin\n * @param options The editor options\n */\n constructor(private state: CopyPastePluginState) {}\n\n /**\n * Get a friendly name of this plugin\n */\n getName() {\n return 'ContentModelCopyPaste';\n }\n\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n initialize(editor: IEditor) {\n this.editor = editor as IContentModelEditor;\n this.disposer = this.editor.addDomEventHandler({\n paste: e => this.onPaste(e),\n copy: e => this.onCutCopy(e, false /*isCut*/),\n cut: e => this.onCutCopy(e, true /*isCut*/),\n });\n }\n\n /**\n * Dispose this plugin\n */\n dispose() {\n if (this.disposer) {\n this.disposer();\n }\n this.disposer = null;\n this.editor = null;\n }\n\n /**\n * Get plugin state object\n */\n getState() {\n return this.state;\n }\n\n private onCutCopy(event: Event, isCut: boolean) {\n if (!this.editor) {\n return;\n }\n const selection = this.editor.getSelectionRangeEx();\n if (selection && !selection.areAllCollapsed) {\n const model = this.editor.createContentModel({\n disableCacheElement: true,\n });\n\n const pasteModel = cloneModel(model);\n if (selection.type === SelectionRangeTypes.TableSelection) {\n iterateSelections([pasteModel], (path, tableContext) => {\n if (tableContext?.table) {\n const table = tableContext?.table;\n table.rows = table.rows\n .map(row => {\n return {\n ...row,\n cells: row.cells.filter(cell => cell.isSelected),\n };\n })\n .filter(row => row.cells.length > 0);\n return true;\n }\n return false;\n });\n }\n const tempDiv = this.getTempDiv(this.editor);\n const selectionAfterPaste = contentModelToDom(\n tempDiv.ownerDocument,\n tempDiv,\n pasteModel,\n {\n isDarkMode: false /* To force light mode on paste */,\n darkColorHandler: this.editor.getDarkColorHandler(),\n },\n {\n onNodeCreated,\n }\n );\n\n let newRange: Range | null = selectionExToRange(selectionAfterPaste, tempDiv);\n if (newRange) {\n const cutCopyEvent = this.editor.triggerPluginEvent(PluginEventType.BeforeCutCopy, {\n clonedRoot: tempDiv,\n range: newRange,\n rawEvent: event as ClipboardEvent,\n isCut,\n });\n\n if (cutCopyEvent.range) {\n addRangeToSelection(newRange);\n }\n\n this.editor.runAsync(editor => {\n cleanUpAndRestoreSelection(tempDiv);\n editor.focus();\n if (selectionAfterPaste) {\n this.editor?.select(selectionAfterPaste);\n }\n if (isCut) {\n editor.addUndoSnapshot(() => {\n deleteSelection(\n model,\n getOnDeleteEntityCallback(editor as IContentModelEditor)\n );\n this.editor?.setContentModel(model);\n }, ChangeSource.Cut);\n }\n });\n }\n }\n }\n\n private onPaste = (event: Event) => {\n if (this.editor && isClipboardEvent(event)) {\n const editor = this.editor;\n\n const dataTransfer = event.clipboardData;\n\n if (dataTransfer?.items) {\n event.preventDefault();\n extractClipboardItems(toArray(dataTransfer.items), {\n allowedCustomPasteType: this.state.allowedCustomPasteType,\n }).then((clipboardData: ClipboardData) => {\n if (!editor.isDisposed()) {\n removeContentForAndroid(editor);\n paste(editor, clipboardData);\n }\n });\n }\n }\n };\n\n private getTempDiv(editor: IEditor) {\n const div = editor.getCustomData(\n 'CopyPasteTempDiv',\n () => {\n const tempDiv = createElement(\n KnownCreateElementDataIndex.CopyPasteTempDiv,\n editor.getDocument()\n ) as HTMLDivElement;\n\n editor.getDocument().body.appendChild(tempDiv);\n\n return tempDiv;\n },\n tempDiv => tempDiv.parentNode?.removeChild(tempDiv)\n );\n\n div.style.backgroundColor = 'white';\n div.style.color = 'black';\n div.childNodes.forEach(node => div.removeChild(node));\n\n div.style.display = '';\n div.focus();\n\n return div;\n }\n}\n\nfunction cleanUpAndRestoreSelection(tempDiv: HTMLDivElement) {\n tempDiv.style.backgroundColor = '';\n tempDiv.style.color = '';\n tempDiv.style.display = 'none';\n moveChildNodes(tempDiv);\n}\nfunction isClipboardEvent(event: Event): event is ClipboardEvent {\n return !!(event as ClipboardEvent).clipboardData;\n}\nfunction removeContentForAndroid(editor: IContentModelEditor) {\n if (Browser.isAndroid) {\n const model = editor.createContentModel();\n deleteSelection(model, getOnDeleteEntityCallback(editor));\n editor.setContentModel(model);\n }\n}\nfunction selectionExToRange(\n selection: SelectionRangeEx | null,\n tempDiv: HTMLDivElement\n): Range | null {\n if (!selection) {\n return null;\n }\n let newRange: Range | null = null;\n if (selection.type === SelectionRangeTypes.TableSelection && selection.coordinates) {\n const table = tempDiv.querySelector(`#${selection.table.id}`) as HTMLTableElement;\n const elementToSelect =\n table.parentElement?.childElementCount == 1 ? table.parentElement : table;\n newRange = createRange(elementToSelect);\n } else if (selection.type === SelectionRangeTypes.ImageSelection) {\n const image = tempDiv.querySelector('#' + selection.image.id);\n\n if (image) {\n newRange = createRange(image);\n }\n } else {\n newRange = selection.ranges[0];\n }\n\n return newRange;\n}\n\n/**\n * @internal\n * Exported only for unit testing\n */\nexport const onNodeCreated = (\n _:\n | ContentModelBlock\n | ContentModelBlockGroup\n | ContentModelSegment\n | ContentModelDecorator\n | ContentModelListItemLevelFormat\n | ContentModelTableRow,\n node: Node\n): void => {\n if (safeInstanceOf(node, 'HTMLTableElement')) {\n wrap(node, 'div');\n }\n};\n","import { EditorPlugin } from 'roosterjs-editor-types';\n\n/**\n * Dummy plugin, just to skip original TypeInContainerPlugin's behavior\n */\nexport default class ContentModelTypeInContainerPlugin implements EditorPlugin {\n /**\n * Get name of this plugin\n */\n getName() {\n return 'ContentModelTypeInContainer';\n }\n\n /**\n * The first method that editor will call to a plugin when editor is initializing.\n * It will pass in the editor instance, plugin should take this chance to save the\n * editor reference so that it can call to any editor method or format API later.\n * @param editor The editor object\n */\n initialize() {}\n\n /**\n * The last method that editor will call to a plugin before it is disposed.\n * Plugin can take this chance to clear the reference to editor. After this method is\n * called, plugin should not call to any editor method since it will result in error.\n */\n dispose() {}\n}\n","import ContentModelCopyPastePlugin from './corePlugins/ContentModelCopyPastePlugin';\nimport ContentModelEditPlugin from './plugins/ContentModelEditPlugin';\nimport ContentModelFormatPlugin from './plugins/ContentModelFormatPlugin';\nimport ContentModelTypeInContainerPlugin from './corePlugins/ContentModelTypeInContainerPlugin';\nimport { ContentModelEditorCore } from '../publicTypes/ContentModelEditorCore';\nimport { ContentModelEditorOptions } from '../publicTypes/IContentModelEditor';\nimport { ContentModelSegmentFormat } from 'roosterjs-content-model-types';\nimport { CoreCreator, EditorCore, ExperimentalFeatures } from 'roosterjs-editor-types';\nimport { createContentModel } from './coreApi/createContentModel';\nimport { createEditorContext } from './coreApi/createEditorContext';\nimport { createEditorCore, isFeatureEnabled } from 'roosterjs-editor-core';\nimport { setContentModel } from './coreApi/setContentModel';\nimport { switchShadowEdit } from './coreApi/switchShadowEdit';\n\n/**\n * Editor Core creator for Content Model editor\n */\nexport const createContentModelEditorCore: CoreCreator<\n ContentModelEditorCore,\n ContentModelEditorOptions\n> = (contentDiv, options) => {\n const modifiedOptions: ContentModelEditorOptions = {\n ...options,\n plugins: [\n ...(options.plugins || []),\n new ContentModelFormatPlugin(),\n new ContentModelEditPlugin(),\n ],\n corePluginOverride: {\n typeInContainer: isFeatureEnabled(\n options.experimentalFeatures,\n ExperimentalFeatures.EditWithContentModel\n )\n ? new ContentModelTypeInContainerPlugin()\n : undefined,\n copyPaste: isFeatureEnabled(\n options.experimentalFeatures,\n ExperimentalFeatures.ContentModelPaste\n )\n ? new ContentModelCopyPastePlugin({\n allowedCustomPasteType: options.allowedCustomPasteType || [],\n })\n : undefined,\n ...(options.corePluginOverride || {}),\n },\n };\n\n const core = createEditorCore(contentDiv, modifiedOptions) as ContentModelEditorCore;\n\n promoteToContentModelEditorCore(core, modifiedOptions);\n\n return core;\n};\n\n/**\n * Creator Content Model Editor Core from Editor Core\n * @param core The original EditorCore object\n * @param options Options of this editor\n */\nexport function promoteToContentModelEditorCore(\n core: EditorCore,\n options: ContentModelEditorOptions\n) {\n const cmCore = core as ContentModelEditorCore;\n\n promoteDefaultFormat(cmCore);\n promoteContentModelInfo(cmCore, options);\n promoteCoreApi(cmCore);\n}\n\nfunction promoteDefaultFormat(cmCore: ContentModelEditorCore) {\n cmCore.lifecycle.defaultFormat = cmCore.lifecycle.defaultFormat || {};\n cmCore.defaultFormat = getDefaultSegmentFormat(cmCore);\n}\n\nfunction promoteContentModelInfo(\n cmCore: ContentModelEditorCore,\n options: ContentModelEditorOptions\n) {\n const experimentalFeatures = cmCore.lifecycle.experimentalFeatures;\n\n cmCore.defaultDomToModelOptions = options.defaultDomToModelOptions || {};\n cmCore.defaultModelToDomOptions = options.defaultModelToDomOptions || {};\n cmCore.reuseModel = isFeatureEnabled(\n experimentalFeatures,\n ExperimentalFeatures.ReusableContentModel\n );\n cmCore.addDelimiterForEntity = isFeatureEnabled(\n experimentalFeatures,\n ExperimentalFeatures.InlineEntityReadOnlyDelimiters\n );\n}\n\nfunction promoteCoreApi(cmCore: ContentModelEditorCore) {\n cmCore.api.createEditorContext = createEditorContext;\n cmCore.api.createContentModel = createContentModel;\n cmCore.api.setContentModel = setContentModel;\n\n if (\n isFeatureEnabled(\n cmCore.lifecycle.experimentalFeatures,\n ExperimentalFeatures.ReusableContentModel\n )\n ) {\n // Only use Content Model shadow edit when reuse model is enabled because it relies on cached model for the original model\n cmCore.api.switchShadowEdit = switchShadowEdit;\n }\n cmCore.originalApi.createEditorContext = createEditorContext;\n cmCore.originalApi.createContentModel = createContentModel;\n cmCore.originalApi.setContentModel = setContentModel;\n}\n\nfunction getDefaultSegmentFormat(core: EditorCore): ContentModelSegmentFormat {\n const format = core.lifecycle.defaultFormat ?? {};\n\n return {\n fontWeight: format.bold ? 'bold' : undefined,\n italic: format.italic || undefined,\n underline: format.underline || undefined,\n fontFamily: format.fontFamily || undefined,\n fontSize: format.fontSize || undefined,\n textColor: format.textColors?.lightModeColor || format.textColor || undefined,\n backgroundColor:\n format.backgroundColors?.lightModeColor || format.backgroundColor || undefined,\n };\n}\n","import { IContentModelEditor } from '../publicTypes/IContentModelEditor';\nimport { IEditor } from 'roosterjs-editor-types';\n\n/**\n * Check if the given editor object is Content Model editor\n * @param editor The editor to check\n * @returns True if the given editor is Content Model editor, otherwise false\n */\nexport default function isContentModelEditor(editor: IEditor): editor is IContentModelEditor {\n const contentModelEditor = editor as IContentModelEditor;\n\n return !!contentModelEditor.createContentModel;\n}\n","import handleKeyDownEvent from '../../publicApi/editing/handleKeyDownEvent';\nimport { ContentModelSegmentFormat } from 'roosterjs-content-model-types';\nimport { DeleteResult } from '../../modelApi/edit/utils/DeleteSelectionStep';\nimport { deleteSelection } from '../../modelApi/edit/deleteSelection';\nimport { formatWithContentModel } from '../../publicApi/utils/formatWithContentModel';\nimport { getOnDeleteEntityCallback } from '../utils/handleKeyboardEventCommon';\nimport { getPendingFormat, setPendingFormat } from '../../modelApi/format/pendingFormat';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { isNodeOfType, normalizeContentModel } from 'roosterjs-content-model-dom';\nimport {\n getObjectKeys,\n isBlockElement,\n isCharacterValue,\n isModifierKey,\n Position,\n} from 'roosterjs-editor-dom';\nimport {\n EditorPlugin,\n EntityOperationEvent,\n ExperimentalFeatures,\n IEditor,\n Keys,\n NodePosition,\n NodeType,\n PluginEvent,\n PluginEventType,\n SelectionRangeTypes,\n} from 'roosterjs-editor-types';\n\n// During IME input, KeyDown event will have \"Process\" as key\nconst ProcessKey = 'Process';\n\n/**\n * ContentModel plugins helps editor to do editing operation on top of content model.\n * This includes:\n * 1. Delete Key\n * 2. Backspace Key\n */\nexport default class ContentModelEditPlugin implements EditorPlugin {\n private editor: IContentModelEditor | null = null;\n private triggeredEntityEvents: EntityOperationEvent[] = [];\n private editWithContentModel = false;\n private hasDefaultFormat = false;\n\n /**\n * Get name of this plugin\n */\n getName() {\n return 'ContentModelEdit';\n }\n\n /**\n * The first method that editor will call to a plugin when editor is initializing.\n * It will pass in the editor instance, plugin should take this chance to save the\n * editor reference so that it can call to any editor method or format API later.\n * @param editor The editor object\n */\n initialize(editor: IEditor) {\n // TODO: Later we may need a different interface for Content Model editor plugin\n this.editor = editor as IContentModelEditor;\n this.editWithContentModel = this.editor.isFeatureEnabled(\n ExperimentalFeatures.EditWithContentModel\n );\n\n const defaultFormat = this.editor.getContentModelDefaultFormat();\n this.hasDefaultFormat =\n getObjectKeys(defaultFormat).filter(x => typeof defaultFormat[x] !== 'undefined')\n .length > 0;\n }\n\n /**\n * The last method that editor will call to a plugin before it is disposed.\n * Plugin can take this chance to clear the reference to editor. After this method is\n * called, plugin should not call to any editor method since it will result in error.\n */\n dispose() {\n this.editor = null;\n }\n\n /**\n * Core method for a plugin. Once an event happens in editor, editor will call this\n * method of each plugin to handle the event as long as the event is not handled\n * exclusively by another plugin.\n * @param event The event to handle:\n */\n onPluginEvent(event: PluginEvent) {\n if (this.editor) {\n switch (event.eventType) {\n case PluginEventType.EntityOperation:\n this.handleEntityOperationEvent(this.editor, event);\n break;\n\n case PluginEventType.KeyDown:\n this.handleKeyDownEvent(this.editor, event.rawEvent);\n break;\n\n case PluginEventType.ContentChanged:\n case PluginEventType.MouseUp:\n this.editor.cacheContentModel(null);\n break;\n }\n }\n }\n\n private handleEntityOperationEvent(editor: IContentModelEditor, event: EntityOperationEvent) {\n if (event.rawEvent?.type == 'keydown') {\n // If we see an entity operation event triggered from keydown event, it means the event can be triggered from original\n // EntityFeatures or EntityPlugin, so we don't need to trigger the same event again from ContentModel.\n // TODO: This is a temporary solution. Once Content Model can fully replace Entity Features, we can remove this.\n this.triggeredEntityEvents.push(event);\n }\n }\n\n private handleKeyDownEvent(editor: IContentModelEditor, rawEvent: KeyboardEvent) {\n const which = rawEvent.which;\n\n if (!this.editWithContentModel || rawEvent.defaultPrevented) {\n // Other plugins already handled this event, so it is most likely content is already changed, we need to clear cached content model\n editor.cacheContentModel(null /*model*/);\n } else if (!rawEvent.defaultPrevented) {\n // TODO: Consider use ContentEditFeature and need to hide other conflict features that are not based on Content Model\n switch (which) {\n case Keys.BACKSPACE:\n case Keys.DELETE:\n const rangeEx = editor.getSelectionRangeEx();\n const range =\n rangeEx.type == SelectionRangeTypes.Normal ? rangeEx.ranges[0] : null;\n\n if (this.shouldDeleteWithContentModel(range, rawEvent)) {\n handleKeyDownEvent(editor, rawEvent, this.triggeredEntityEvents);\n } else {\n editor.cacheContentModel(null);\n }\n\n break;\n\n default:\n if (\n (isCharacterValue(rawEvent) || rawEvent.key == ProcessKey) &&\n this.hasDefaultFormat\n ) {\n this.tryApplyDefaultFormat(editor);\n }\n\n editor.cacheContentModel(null);\n break;\n }\n }\n\n if (this.triggeredEntityEvents.length > 0) {\n this.triggeredEntityEvents = [];\n }\n }\n\n private tryApplyDefaultFormat(editor: IContentModelEditor) {\n const rangeEx = editor.getSelectionRangeEx();\n const range = rangeEx?.type == SelectionRangeTypes.Normal ? rangeEx.ranges[0] : null;\n const startPos = range ? Position.getStart(range) : null;\n let node: Node | null = startPos?.node ?? null;\n\n while (node && editor.contains(node)) {\n if (isNodeOfType(node, NodeType.Element) && node.getAttribute?.('style')) {\n return;\n } else if (isBlockElement(node)) {\n break;\n } else {\n node = node.parentNode;\n }\n }\n\n formatWithContentModel(editor, 'input', model => {\n const result = deleteSelection(\n model,\n getOnDeleteEntityCallback(\n editor,\n undefined /*rawEvent*/,\n this.triggeredEntityEvents\n )\n );\n\n if (result.deleteResult == DeleteResult.Range) {\n normalizeContentModel(model);\n editor.addUndoSnapshot();\n\n return true;\n } else if (\n result.deleteResult == DeleteResult.NotDeleted &&\n result.insertPoint &&\n startPos\n ) {\n const { paragraph, path, marker } = result.insertPoint;\n const blocks = path[0].blocks;\n const blockCount = blocks.length;\n const blockIndex = blocks.indexOf(paragraph);\n\n if (\n paragraph.isImplicit &&\n paragraph.segments.length == 1 &&\n paragraph.segments[0] == marker &&\n blockCount > 0 &&\n blockIndex == blockCount - 1\n ) {\n // Focus is in the last paragraph which is implicit and there is not other segments.\n // This can happen when focus is moved after all other content under current block group.\n // We need to check if browser will merge focus into previous paragraph by checking if\n // previous block is block. If previous block is paragraph, browser will most likely merge\n // the input into previous paragraph, then nothing need to do here. Otherwise we need to\n // apply pending format since this input event will start a new real paragraph.\n const previousBlock = blocks[blockIndex - 1];\n\n if (previousBlock?.blockType != 'Paragraph') {\n this.applyDefaultFormat(editor, marker.format, startPos);\n }\n } else if (paragraph.segments.every(x => x.segmentType != 'Text')) {\n this.applyDefaultFormat(editor, marker.format, startPos);\n }\n\n // We didn't do any change but just apply default format to pending format, so no need to write back\n return false;\n } else {\n return false;\n }\n });\n }\n\n private applyDefaultFormat(\n editor: IContentModelEditor,\n currentFormat: ContentModelSegmentFormat,\n startPos: NodePosition\n ) {\n const pendingFormat = getPendingFormat(editor) || {};\n const defaultFormat = editor.getContentModelDefaultFormat();\n const newFormat: ContentModelSegmentFormat = {\n ...defaultFormat,\n ...pendingFormat,\n ...currentFormat,\n };\n\n setPendingFormat(editor, newFormat, startPos);\n }\n\n private shouldDeleteWithContentModel(range: Range | null, rawEvent: KeyboardEvent) {\n return !(\n range?.collapsed &&\n range.startContainer.nodeType == NodeType.Text &&\n !isModifierKey(rawEvent) &&\n (this.canDeleteBefore(rawEvent, range) || this.canDeleteAfter(rawEvent, range))\n );\n }\n\n private canDeleteBefore(rawEvent: KeyboardEvent, range: Range) {\n return (\n rawEvent.which == Keys.BACKSPACE &&\n (range.startOffset > 1 || range.startContainer.previousSibling)\n );\n }\n\n private canDeleteAfter(rawEvent: KeyboardEvent, range: Range) {\n return (\n rawEvent.which == Keys.DELETE &&\n (range.startOffset < (range.startContainer.nodeValue?.length ?? 0) - 1 ||\n range.startContainer.nextSibling)\n );\n }\n}\n","import applyPendingFormat from '../../publicApi/format/applyPendingFormat';\nimport { canApplyPendingFormat, clearPendingFormat } from '../../modelApi/format/pendingFormat';\nimport { EditorPlugin, IEditor, Keys, PluginEvent, PluginEventType } from 'roosterjs-editor-types';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * ContentModelFormat plugins helps editor to do formatting on top of content model.\n * This includes:\n * 1. Handle pending format changes when selection is collapsed\n */\nexport default class ContentModelFormatPlugin implements EditorPlugin {\n private editor: IContentModelEditor | null = null;\n\n /**\n * Get name of this plugin\n */\n getName() {\n return 'ContentModelFormat';\n }\n\n /**\n * The first method that editor will call to a plugin when editor is initializing.\n * It will pass in the editor instance, plugin should take this chance to save the\n * editor reference so that it can call to any editor method or format API later.\n * @param editor The editor object\n */\n initialize(editor: IEditor) {\n // TODO: Later we may need a different interface for Content Model editor plugin\n this.editor = editor as IContentModelEditor;\n }\n\n /**\n * The last method that editor will call to a plugin before it is disposed.\n * Plugin can take this chance to clear the reference to editor. After this method is\n * called, plugin should not call to any editor method since it will result in error.\n */\n dispose() {\n this.editor = null;\n }\n\n /**\n * Core method for a plugin. Once an event happens in editor, editor will call this\n * method of each plugin to handle the event as long as the event is not handled\n * exclusively by another plugin.\n * @param event The event to handle:\n */\n onPluginEvent(event: PluginEvent) {\n if (!this.editor) {\n return;\n }\n\n switch (event.eventType) {\n case PluginEventType.Input:\n // In Safari, isComposing will be undefined but isInIME() works\n if (!event.rawEvent.isComposing && !this.editor.isInIME()) {\n this.checkAndApplyPendingFormat(event.rawEvent.data);\n }\n\n break;\n\n case PluginEventType.CompositionEnd:\n this.checkAndApplyPendingFormat(event.rawEvent.data);\n break;\n\n case PluginEventType.KeyDown:\n if (event.rawEvent.which >= Keys.PAGEUP && event.rawEvent.which <= Keys.DOWN) {\n clearPendingFormat(this.editor);\n }\n\n break;\n\n case PluginEventType.MouseUp:\n case PluginEventType.ContentChanged:\n if (!canApplyPendingFormat(this.editor)) {\n clearPendingFormat(this.editor);\n }\n break;\n }\n }\n\n private checkAndApplyPendingFormat(data: string | null) {\n if (this.editor && data) {\n applyPendingFormat(this.editor, data);\n clearPendingFormat(this.editor);\n }\n }\n}\n","import addParser from './utils/addParser';\nimport ContentModelBeforePasteEvent from '../../../publicTypes/event/ContentModelBeforePasteEvent';\nimport { getPasteSource } from 'roosterjs-editor-dom';\nimport { IContentModelEditor } from '../../../publicTypes/IContentModelEditor';\nimport { parseDeprecatedColor } from './utils/deprecatedColorParser';\nimport { parseLink } from './utils/linkParser';\nimport { processPastedContentFromExcel } from './Excel/processPastedContentFromExcel';\nimport { processPastedContentFromPowerPoint } from './PowerPoint/processPastedContentFromPowerPoint';\nimport { processPastedContentFromWordDesktop } from './WordDesktop/processPastedContentFromWordDesktop';\nimport { processPastedContentWacComponents } from './WacComponents/processPastedContentWacComponents';\nimport {\n EditorPlugin,\n IEditor,\n KnownPasteSourceType,\n PasteType,\n PluginEvent,\n PluginEventType,\n} from 'roosterjs-editor-types';\n\nconst GOOGLE_SHEET_NODE_NAME = 'google-sheets-html-origin';\n\n/**\n * Paste plugin, handles BeforePaste event and reformat some special content, including:\n * 1. Content copied from Word\n * 2. Content copied from Excel\n * 3. Content copied from Word Online or OneNote Online\n * 4. Content copied from Power Point\n * (This class is still under development, and may still be changed in the future with some breaking changes)\n */\nexport default class ContentModelFormatPlugin implements EditorPlugin {\n private editor: IContentModelEditor | null = null;\n\n /**\n * Construct a new instance of Paste class\n * @param unknownTagReplacement Replace solution of unknown tags, default behavior is to replace with SPAN\n */\n constructor(private unknownTagReplacement: string = 'SPAN') {}\n\n /**\n * Get name of this plugin\n */\n getName() {\n return 'ContentModelPaste';\n }\n\n /**\n * The first method that editor will call to a plugin when editor is initializing.\n * It will pass in the editor instance, plugin should take this chance to save the\n * editor reference so that it can call to any editor method or format API later.\n * @param editor The editor object\n */\n initialize(editor: IEditor) {\n // TODO: Later we may need a different interface for Content Model editor plugin\n this.editor = editor as IContentModelEditor;\n }\n\n /**\n * The last method that editor will call to a plugin before it is disposed.\n * Plugin can take this chance to clear the reference to editor. After this method is\n * called, plugin should not call to any editor method since it will result in error.\n */\n dispose() {\n this.editor = null;\n }\n\n /**\n * Core method for a plugin. Once an event happens in editor, editor will call this\n * method of each plugin to handle the event as long as the event is not handled\n * exclusively by another plugin.\n * @param event The event to handle:\n */\n onPluginEvent(event: PluginEvent) {\n if (!this.editor || event.eventType != PluginEventType.BeforePaste) {\n return;\n }\n\n const ev = event as ContentModelBeforePasteEvent;\n if (!ev.domToModelOption) {\n return;\n }\n const pasteSource = getPasteSource(event, false);\n switch (pasteSource) {\n case KnownPasteSourceType.WordDesktop:\n processPastedContentFromWordDesktop(ev);\n break;\n case KnownPasteSourceType.WacComponents:\n processPastedContentWacComponents(ev);\n break;\n case KnownPasteSourceType.ExcelOnline:\n if (\n event.pasteType === PasteType.Normal ||\n event.pasteType === PasteType.MergeFormat\n ) {\n // Handle HTML copied from Excel\n processPastedContentFromExcel(ev, this.editor.getTrustedHTMLHandler());\n }\n break;\n case KnownPasteSourceType.GoogleSheets:\n event.sanitizingOption.additionalTagReplacements[GOOGLE_SHEET_NODE_NAME] = '*';\n break;\n case KnownPasteSourceType.PowerPointDesktop:\n processPastedContentFromPowerPoint(ev, this.editor.getTrustedHTMLHandler());\n break;\n }\n\n addParser(ev.domToModelOption, 'link', parseLink);\n parseDeprecatedColor(ev.sanitizingOption);\n\n event.sanitizingOption.unknownTagReplacement = this.unknownTagReplacement;\n }\n}\n","import addParser from '../utils/addParser';\nimport ContentModelBeforePasteEvent from '../../../../publicTypes/event/ContentModelBeforePasteEvent';\nimport { getTagOfNode, moveChildNodes } from 'roosterjs-editor-dom';\nimport { TrustedHTMLHandler } from 'roosterjs-editor-types';\n\nconst LAST_TD_END_REGEX = /<\\/\\s*td\\s*>((?!<\\/\\s*tr\\s*>)[\\s\\S])*$/i;\nconst LAST_TR_END_REGEX = /<\\/\\s*tr\\s*>((?!<\\/\\s*table\\s*>)[\\s\\S])*$/i;\nconst LAST_TR_REGEX = /]*>[^<]*/i;\nconst LAST_TABLE_REGEX = /]*>[^<]*/i;\nconst DEFAULT_BORDER_STYLE = 'solid 1px #d4d4d4';\n\n/**\n * @internal\n * Convert pasted content from Excel, add borders when source doc doesn't have a border\n * @param event The BeforePaste event\n */\n\nexport function processPastedContentFromExcel(\n event: ContentModelBeforePasteEvent,\n trustedHTMLHandler: TrustedHTMLHandler\n) {\n const { fragment, htmlBefore, clipboardData } = event;\n const html = clipboardData.html ? excelHandler(clipboardData.html, htmlBefore) : undefined;\n\n if (html && clipboardData.html != html) {\n const doc = new DOMParser().parseFromString(trustedHTMLHandler(html), 'text/html');\n moveChildNodes(fragment, doc?.body);\n }\n\n // For Excel Online\n const firstChild = fragment.firstChild;\n if (firstChild && firstChild.childNodes.length > 0 && getTagOfNode(firstChild) == 'DIV') {\n const tableFound = Array.from(firstChild.childNodes).every((child: Node) => {\n // Tables pasted from Excel Online should be of the format: 0 to N META tags and 1 TABLE tag\n return getTagOfNode(child) == 'META'\n ? true\n : getTagOfNode(child) == 'TABLE' && child == firstChild.lastChild;\n });\n\n // Extract Table from Div\n if (tableFound && firstChild.lastChild) {\n event.fragment.replaceChildren(firstChild.lastChild);\n }\n }\n\n addParser(event.domToModelOption, 'tableCell', (format, element) => {\n if (element.style.borderStyle === 'none') {\n format.borderBottom = DEFAULT_BORDER_STYLE;\n format.borderLeft = DEFAULT_BORDER_STYLE;\n format.borderRight = DEFAULT_BORDER_STYLE;\n format.borderTop = DEFAULT_BORDER_STYLE;\n }\n });\n}\n\n/**\n * @internal Export for test only\n * @param html Source html\n */\n\nexport function excelHandler(html: string, htmlBefore: string): string {\n if (html.match(LAST_TD_END_REGEX)) {\n const trMatch = htmlBefore.match(LAST_TR_REGEX);\n const tr = trMatch ? trMatch[0] : '';\n html = tr + html + '';\n }\n if (html.match(LAST_TR_END_REGEX)) {\n let tableMatch = htmlBefore.match(LAST_TABLE_REGEX);\n let table = tableMatch ? tableMatch[0] : '';\n html = table + html + '
          ';\n }\n\n return html;\n}\n","import { BeforePasteEvent, TrustedHTMLHandler } from 'roosterjs-editor-types';\nimport { moveChildNodes } from 'roosterjs-editor-dom';\n\n/**\n * @internal\n * Convert pasted content from PowerPoint\n * @param event The BeforePaste event\n */\n\nexport function processPastedContentFromPowerPoint(\n event: BeforePasteEvent,\n trustedHTMLHandler: TrustedHTMLHandler\n) {\n const { fragment, clipboardData } = event;\n\n if (clipboardData.html && !clipboardData.text && clipboardData.image) {\n // It is possible that PowerPoint copied both image and HTML but not plain text.\n // We always prefer HTML if any.\n const doc = new DOMParser().parseFromString(\n trustedHTMLHandler(clipboardData.html),\n 'text/html'\n );\n\n moveChildNodes(fragment, doc?.body);\n }\n}\n","import addParser from '../utils/addParser';\nimport ContentModelBeforePasteEvent from '../../../../publicTypes/event/ContentModelBeforePasteEvent';\nimport { findClosestElementAncestor, getTagOfNode, matchesSelector } from 'roosterjs-editor-dom';\nimport { setProcessor } from '../utils/setProcessor';\nimport {\n ContentModelBlockGroup,\n ContentModelListItemLevelFormat,\n ContentModelSegmentFormat,\n DomToModelContext,\n ElementProcessor,\n FormatParser,\n} from 'roosterjs-content-model-types';\n\nconst WAC_IDENTIFY_SELECTOR =\n 'ul[class^=\"BulletListStyle\"]>.OutlineElement,ol[class^=\"NumberListStyle\"]>.OutlineElement,span.WACImageContainer,span.WACImageBorder';\nconst LIST_CONTAINER_ELEMENT_CLASS_NAME = 'ListContainerWrapper';\n\nconst EMPTY_TEXT_RUN = 'EmptyTextRun';\nconst END_OF_PARAGRAPH = 'EOP';\nconst PARAGRAPH = 'Paragraph';\n\nconst TEMP_ELEMENTS_CLASSES = [\n 'TableInsertRowGapBlank',\n 'TableColumnResizeHandle',\n 'TableCellTopBorderHandle',\n 'TableCellLeftBorderHandle',\n 'TableHoverColumnHandle',\n 'TableHoverRowHandle',\n 'ListMarkerWrappingSpan',\n];\n\nconst CLASSES_TO_KEEP = [\n 'OutlineElement',\n 'NumberListStyle',\n 'WACImageContainer',\n 'ListContainerWrapper',\n 'BulletListStyle',\n END_OF_PARAGRAPH,\n EMPTY_TEXT_RUN,\n ...TEMP_ELEMENTS_CLASSES,\n 'TableCellContent',\n PARAGRAPH,\n 'WACImageContainer',\n 'WACImageBorder',\n];\n\nconst LIST_ELEMENT_TAGS = ['UL', 'OL', 'LI'];\nconst LIST_ELEMENT_SELECTOR = LIST_ELEMENT_TAGS.join(',');\n\n/**\n * Wac components do not use sub and super tags, instead only add vertical align to a span.\n * This parser normalize the content for content model\n */\nconst wacSubSuperParser: FormatParser = (\n format: ContentModelSegmentFormat,\n element: HTMLElement\n): void => {\n const verticalAlign = element.style.verticalAlign;\n if (verticalAlign === 'super') {\n format.superOrSubScriptSequence = 'super';\n }\n if (verticalAlign === 'sub') {\n format.superOrSubScriptSequence = 'sub';\n }\n};\n\n/**\n * This processor does:\n * 1) Remove the display and margin of the element.\n * 2) When an element should be ignored but should handle the child elements call the default child processor.\n * 3) Removes the End of Paragraph element to avoid empty lines, we should only remove this if the previous element of the EOP is an EmptyTextRun\n * 4) Finally call the default processor.\n * @returns\n */\nconst wacElementProcessor: ElementProcessor = (\n group: ContentModelBlockGroup,\n element: HTMLElement,\n context: DomToModelContext\n): void => {\n const elementTag = getTagOfNode(element);\n if (matchesSelector(element, WAC_IDENTIFY_SELECTOR)) {\n element.style.removeProperty('display');\n element.style.removeProperty('margin');\n }\n\n if (element.classList.contains(LIST_CONTAINER_ELEMENT_CLASS_NAME)) {\n context.elementProcessors.child(group, element, context);\n return;\n }\n\n if (\n (element.classList.contains(END_OF_PARAGRAPH) &&\n element.previousElementSibling?.classList.contains(EMPTY_TEXT_RUN)) ||\n TEMP_ELEMENTS_CLASSES.some(className => element.classList.contains(className))\n ) {\n return;\n } else if (shouldClearListContext(elementTag, element, context)) {\n const { listFormat } = context;\n listFormat.levels = [];\n listFormat.listParent = undefined;\n }\n\n context.defaultElementProcessors.element(group, element, context);\n};\n\n/**\n * This processor calls the default list processor and then sets the correct list level and list bullet.\n */\nconst wacLiElementProcessor: ElementProcessor = (\n group: ContentModelBlockGroup,\n element: HTMLLIElement,\n context: DomToModelContext\n): void => {\n context.defaultElementProcessors.li?.(group, element, context);\n const { listFormat } = context;\n const listParent = listFormat.listParent;\n if (listParent) {\n const lastblock = listParent.blocks[listParent.blocks.length - 1];\n if (\n lastblock.blockType == 'BlockGroup' &&\n lastblock.blockGroupType == 'ListItem' &&\n context.listFormat.listParent !== lastblock\n ) {\n const currentLevel = lastblock.levels[lastblock.levels.length - 1];\n\n // Get item level from 'data-aria-level' attribute\n let level = parseInt(element.getAttribute('data-aria-level') ?? '');\n if (level > 0) {\n if (level > lastblock.levels.length) {\n while (level != lastblock.levels.length) {\n lastblock.levels.push(currentLevel);\n }\n } else {\n lastblock.levels.splice(level, lastblock.levels.length - 1);\n lastblock.levels[level - 1] = currentLevel;\n }\n }\n }\n }\n};\n\n/**\n * This parsers does:\n * 1) Sets the display for dummy item to undefined when the current style is block.\n * 2) Removes the Margin Left\n */\nconst wacListItemParser: FormatParser = (\n format: ContentModelListItemLevelFormat,\n element: HTMLElement\n): void => {\n if (element.style.display === 'block') {\n format.displayForDummyItem = undefined;\n }\n\n format.marginLeft = undefined;\n};\n\n/**\n * Wac usually adds padding to lists which is unwanted so remove it.\n */\nconst wacListLevelParser: FormatParser = (\n format: ContentModelListItemLevelFormat\n): void => {\n format.marginLeft = undefined;\n format.paddingLeft = undefined;\n};\n\n/**\n * This function returns whether we need to clear the list format.\n * Word Online wraps lists inside divs to have this structure:\n *\n *
          \n *
            ...
          \n *
          \n *
          \n *

          ...

          \n *
          \n *
          \n *
            ...
          \n *
          \n *\n * So if a elements is not contained inside of a list we should clear the list context to prevent normal text to be\n * transformed into list\n * For the above scenario, if we do not clear the format, the content inside of the second div would be transformed to a list too.\n */\nfunction shouldClearListContext(\n elementTag: string,\n element: HTMLElement,\n context: DomToModelContext\n) {\n return (\n context.listFormat.levels.length > 0 &&\n LIST_ELEMENT_TAGS.every(tag => tag != elementTag) &&\n !findClosestElementAncestor(element, undefined, LIST_ELEMENT_SELECTOR)\n );\n}\n\n/**\n * @internal\n * Convert pasted content from Office Online\n * Once it is known that the document is from WAC\n * We need to remove the display property and margin from all the list item\n * @param ev ContentModelBeforePasteEvent\n */\nexport function processPastedContentWacComponents(ev: ContentModelBeforePasteEvent) {\n addParser(ev.domToModelOption, 'segment', wacSubSuperParser);\n addParser(ev.domToModelOption, 'listItem', wacListItemParser);\n addParser(ev.domToModelOption, 'listLevel', wacListLevelParser);\n\n setProcessor(ev.domToModelOption, 'element', wacElementProcessor);\n setProcessor(ev.domToModelOption, 'li', wacLiElementProcessor);\n setProcessor(ev.domToModelOption, 'ol', wacListProcessor);\n setProcessor(ev.domToModelOption, 'ul', wacListProcessor);\n ev.sanitizingOption.additionalAllowedCssClasses.push(...CLASSES_TO_KEEP);\n}\n\n/**\n * List items from word have this format when using List items:\n * @example\n
          \n
            \n
            \n
            \n
              \n
              \n
              \n
                \n
                \n * Due to this the div between each of the lists we need to restore the list context to use the previous list,\n * otherwise it could create a new list instead under the same list element\n */\nconst wacListProcessor: ElementProcessor = (\n group: ContentModelBlockGroup,\n element: HTMLOListElement | HTMLUListElement,\n context: DomToModelContext\n): void => {\n const lastBlock = group.blocks[group.blocks.length - 1];\n const isWrappedInContainer = findClosestElementAncestor(\n element,\n undefined,\n `.${LIST_CONTAINER_ELEMENT_CLASS_NAME}`\n );\n if (\n isWrappedInContainer?.previousElementSibling?.classList.contains(\n LIST_CONTAINER_ELEMENT_CLASS_NAME\n )\n ) {\n if (lastBlock?.blockType === 'BlockGroup' && lastBlock.blockGroupType == 'ListItem') {\n context.listFormat = {\n threadItemCounts: [],\n levels: lastBlock.levels,\n listParent: group,\n };\n }\n }\n if (element.tagName.toUpperCase() === 'OL') {\n context.defaultElementProcessors.ol?.(group, element as HTMLOListElement, context);\n } else {\n context.defaultElementProcessors.ul?.(group, element as HTMLUListElement, context);\n }\n};\n","import addParser from '../utils/addParser';\nimport ContentModelBeforePasteEvent from '../../../../publicTypes/event/ContentModelBeforePasteEvent';\nimport { chainSanitizerCallback, getStyles, moveChildNodes } from 'roosterjs-editor-dom';\nimport { processWordComments } from './processWordComments';\nimport { processWordList } from './processWordLists';\nimport { setProcessor } from '../utils/setProcessor';\nimport {\n ContentModelBlockFormat,\n ContentModelListItemFormat,\n ContentModelListItemLevelFormat,\n DomToModelContext,\n ElementProcessor,\n FormatParser,\n} from 'roosterjs-content-model-types';\n\nconst PERCENTAGE_REGEX = /%/;\nconst DEFAULT_BROWSER_LINE_HEIGHT_PERCENTAGE = 120;\n\n/**\n * @internal\n * Handles Pasted content when source is Word Desktop\n * @param ev ContentModelBeforePasteEvent\n */\nexport function processPastedContentFromWordDesktop(ev: ContentModelBeforePasteEvent) {\n setProcessor(ev.domToModelOption, 'element', wordDesktopElementProcessor);\n addParser(ev.domToModelOption, 'block', removeNonValidLineHeight);\n addParser(ev.domToModelOption, 'listLevel', listLevelParser);\n addParser(ev.domToModelOption, 'listItemElement', listItemElementParser);\n\n // Remove \"border:none\" for image to fix image resize behavior\n // We found a problem that when paste an image with \"border:none\" then the resize border will be\n // displayed incorrectly when resize it. So we need to drop this style\n chainSanitizerCallback(\n ev.sanitizingOption.cssStyleCallbacks,\n 'border',\n (value, element) => element.tagName != 'IMG' || value != 'none'\n );\n\n // Preserve when its innerHTML is \" \" to avoid dropping an empty line\n chainSanitizerCallback(ev.sanitizingOption.elementCallbacks, 'O:P', element => {\n moveChildNodes(element);\n element.appendChild(element.ownerDocument.createTextNode('\\u00A0')); //  \n return true;\n });\n}\n\n/**\n * @internal\n * Exported only for unit test\n */\nexport const wordDesktopElementProcessor: ElementProcessor = (\n group,\n element,\n context\n) => {\n const styles = getStyles(element);\n // Process Word Lists or Word Commands, otherwise use the default processor on this element.\n if (\n !(processWordList(styles, group, element, context) || processWordComments(styles, element))\n ) {\n context.defaultElementProcessors.element(group, element, context);\n }\n};\n\nfunction removeNonValidLineHeight(\n format: ContentModelBlockFormat,\n element: HTMLElement,\n context: DomToModelContext,\n defaultStyle: Readonly>\n): void {\n //If the line height is less than the browser default line height, line between the text is going to be too narrow\n let parsedLineHeight: number;\n if (\n PERCENTAGE_REGEX.test(element.style.lineHeight) &&\n !isNaN((parsedLineHeight = parseInt(element.style.lineHeight))) &&\n parsedLineHeight < DEFAULT_BROWSER_LINE_HEIGHT_PERCENTAGE\n ) {\n format.lineHeight = defaultStyle.lineHeight;\n }\n}\n\nfunction listLevelParser(\n format: ContentModelListItemLevelFormat,\n element: HTMLElement,\n context: DomToModelContext,\n defaultStyle: Readonly>\n): void {\n if (element.style.marginLeft != '') {\n format.marginLeft = defaultStyle.marginLeft;\n }\n\n format.marginBottom = undefined;\n}\n\nconst listItemElementParser: FormatParser = (\n format: ContentModelListItemFormat,\n element: HTMLElement\n): void => {\n if (element.style.marginLeft) {\n format.marginLeft = undefined;\n }\n if (element.style.marginRight) {\n format.marginRight = undefined;\n }\n};\n","import { safeInstanceOf } from 'roosterjs-editor-dom';\n\nconst MSO_COMMENT_ANCHOR_HREF_REGEX = /#_msocom_/;\nconst MSO_SPECIAL_CHARACTER = 'mso-special-character';\nconst MSO_SPECIAL_CHARACTER_COMMENT = 'comment';\nconst MSO_ELEMENT = 'mso-element';\nconst MSO_ELEMENT_COMMENT_LIST = 'comment-list';\n\n/**\n * @internal\n * Check whether the element contain Word attributes related to comments and if it does we should no process\n * this element.\n * @returns\n */\nexport function processWordComments(styles: Record, element: HTMLElement) {\n return (\n styles[MSO_SPECIAL_CHARACTER] == MSO_SPECIAL_CHARACTER_COMMENT ||\n (safeInstanceOf(element, 'HTMLAnchorElement') &&\n MSO_COMMENT_ANCHOR_HREF_REGEX.test(element.href)) ||\n styles[MSO_ELEMENT] == MSO_ELEMENT_COMMENT_LIST\n );\n}\n","import { addBlock, createListItem, parseFormat } from 'roosterjs-content-model-dom';\nimport { getStyles } from 'roosterjs-editor-dom';\nimport { NodeType } from 'roosterjs-editor-types';\nimport {\n ContentModelBlockGroup,\n ContentModelListItemLevelFormat,\n DomToModelContext,\n DomToModelListFormat,\n FormatParser,\n} from 'roosterjs-content-model-types';\n\n/** Word list metadata style name */\nconst MSO_LIST = 'mso-list';\nconst MSO_LIST_IGNORE = 'ignore';\nconst LOOKUP_DEPTH = 5;\nconst OL_TAG = 'OL';\nconst WORD_FIRST_LIST = 'l0';\n\ninterface WordDesktopListFormat extends DomToModelListFormat {\n wordLevel?: number | '';\n wordList?: string;\n wordKnownLevels?: Map;\n}\n\n/**\n * @internal\n * @param styles\n * @param group\n * @param element\n * @param context\n * @returns\n */\nexport function processWordList(\n styles: Record,\n group: ContentModelBlockGroup,\n element: HTMLElement,\n context: DomToModelContext\n) {\n const listFormat = context.listFormat as WordDesktopListFormat;\n if (!listFormat.wordKnownLevels) {\n listFormat.wordKnownLevels = new Map();\n }\n const wordListStyle = styles[MSO_LIST] || '';\n\n // If the element contains Ignore style, do not process it,\n // Usually this element contains the fake bullet used in Word Desktop.\n if (wordListStyle.toLowerCase() === MSO_LIST_IGNORE) {\n return true;\n }\n\n const listProps = wordListStyle.split(' ');\n // Try get the list metadata from word, which follows this format: l1 level1 lfo2\n // If we are able to get the level property means we can process this element to be a list\n listFormat.wordLevel = listProps[1] && parseInt(listProps[1].substr('level'.length));\n\n listFormat.wordList = listProps[0] || WORD_FIRST_LIST;\n if (listFormat.levels.length == 0) {\n listFormat.levels = listFormat.wordKnownLevels.get(listFormat.wordList) || [];\n }\n\n if (wordListStyle && group && typeof listFormat.wordLevel === 'number') {\n const { wordLevel } = listFormat;\n // Retrieve the Fake bullet on the element and also the list type\n const fakeBullet = getFakeBulletText(element);\n const listType = getFakeBulletTagName(fakeBullet);\n\n // Create the new level of the list item and parse the format\n const newLevel: ContentModelListItemLevelFormat = {\n listType,\n };\n parseFormat(element, context.formatParsers.listLevel, newLevel, context);\n\n // If the list format is in a different level, update the array so we get the new item\n // To be in the same level as the provided level metadata.\n if (wordLevel > listFormat.levels.length) {\n while (wordLevel != listFormat.levels.length) {\n listFormat.levels.push(newLevel);\n }\n } else {\n listFormat.levels.splice(wordLevel, listFormat.levels.length - 1);\n listFormat.levels[wordLevel - 1] = newLevel;\n }\n\n listFormat.listParent = group;\n\n processAsListItem(listFormat, context, element, group, fakeBullet);\n\n if (\n listFormat.levels.length > 0 &&\n listFormat.wordKnownLevels.get(listFormat.wordList) != listFormat.levels\n ) {\n listFormat.wordKnownLevels.set(listFormat.wordList, [...listFormat.levels]);\n }\n return true;\n }\n\n return false;\n}\n\nfunction processAsListItem(\n listFormat: WordDesktopListFormat,\n context: DomToModelContext,\n element: HTMLElement,\n group: ContentModelBlockGroup,\n fakeBullet: string\n) {\n const listItem = createListItem(listFormat.levels, context.segmentFormat);\n\n parseFormat(element, context.formatParsers.segmentOnBlock, context.segmentFormat, context);\n parseFormat(element, context.formatParsers.listItemElement, listItem.format, context);\n parseFormat(\n element,\n [startNumberOverrideParser(fakeBullet)],\n listItem.levels[listItem.levels.length - 1],\n context\n );\n\n context.elementProcessors.child(listItem, element, context);\n addBlock(group, listItem);\n}\n\nfunction startNumberOverrideParser(\n fakeBullet: string\n): FormatParser | null {\n return (format, _, context) => {\n const {\n wordKnownLevels,\n wordLevel,\n wordList,\n } = context.listFormat as WordDesktopListFormat;\n if (format.listType == OL_TAG && typeof wordLevel === 'number' && wordList) {\n const start = parseInt(fakeBullet);\n if (start != undefined && !isNaN(start) && !wordKnownLevels?.has(wordList)) {\n format.startNumberOverride = start;\n }\n }\n };\n}\n\n/**\n * Check whether the string is a fake bullet from word Desktop\n */\nfunction isFakeBullet(fakeBullet: string): boolean {\n return ['o', '·', '§', '-'].indexOf(fakeBullet) >= 0;\n}\n\n/** Given a fake bullet text, returns the type of list that should be used for it */\nfunction getFakeBulletTagName(fakeBullet: string): 'UL' | 'OL' {\n return isFakeBullet(fakeBullet) ? 'UL' : 'OL';\n}\n\n/**\n * Finds the fake bullet text out of the specified node and returns it. For images, it will return\n * a bullet string. If not found, it returns null...\n */\nfunction getFakeBulletText(node: Node, levels?: number): string {\n // Word uses the following format for their bullets:\n // <p style=\"mso-list:l1 level1 lfo2\">\n // <span style=\"...\">\n // <span style=\"mso-list:Ignore\">1.<span style=\"...\">      </span></span>\n // </span>\n // Content here...\n // </p>\n //\n // Basically, we need to locate the mso-list:Ignore SPAN, which holds either one text or image node. That\n // text or image node will be the fake bullet we are looking for\n let result: string = '';\n levels = levels || LOOKUP_DEPTH;\n let child: Node | null = node.firstChild;\n while (!result && child) {\n // Check if this is the node that holds the fake bullets (mso-list: Ignore)\n if (isIgnoreNode(child)) {\n // Yes... this is the node that holds either the text or image data\n result = child.textContent?.trim() ?? '';\n\n // This is the case for image case\n if (result.length == 0) {\n result = 'o';\n }\n } else if (child.nodeType == NodeType.Element && levels > 1) {\n // If this is an element and we are not in the last level, try to get the fake bullet\n // out of the child\n result = getFakeBulletText(child, levels - 1);\n }\n\n child = child.nextSibling;\n }\n\n return result;\n}\n/**\n * Checks if the specified node is marked as a mso-list: Ignore. These\n * nodes need to be ignored when a list item is converted into standard\n * HTML lists\n */\nfunction isIgnoreNode(node: Node): boolean {\n if (node.nodeType == NodeType.Element) {\n let listAttribute = getStyles(node as HTMLElement)[MSO_LIST];\n if (\n listAttribute &&\n listAttribute.length > 0 &&\n listAttribute.trim().toLowerCase() == MSO_LIST_IGNORE\n ) {\n return true;\n }\n }\n\n return false;\n}\n","import {\n ContentModelFormatMap,\n DomToModelOption,\n FormatParser,\n FormatParsersPerCategory,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport default function addParser(\n domToModelOption: DomToModelOption,\n entry: TKey,\n additionalFormatParsers: FormatParser\n) {\n if (!domToModelOption.additionalFormatParsers) {\n domToModelOption.additionalFormatParsers = {};\n }\n if (!domToModelOption.additionalFormatParsers[entry]) {\n domToModelOption.additionalFormatParsers[entry] = [];\n }\n\n domToModelOption.additionalFormatParsers[entry]?.push(additionalFormatParsers);\n}\n","import { chainSanitizerCallback } from 'roosterjs-editor-dom';\nimport { HtmlSanitizerOptions } from 'roosterjs-editor-types';\n\nconst DeprecatedColorList: string[] = [\n 'activeborder',\n 'activecaption',\n 'appworkspace',\n 'background',\n 'buttonhighlight',\n 'buttonshadow',\n 'captiontext',\n 'inactiveborder',\n 'inactivecaption',\n 'inactivecaptiontext',\n 'infobackground',\n 'infotext',\n 'menu',\n 'menutext',\n 'scrollbar',\n 'threeddarkshadow',\n 'threedface',\n 'threedhighlight',\n 'threedlightshadow',\n 'threedfhadow',\n 'window',\n 'windowframe',\n 'windowtext',\n];\n\n/**\n * @internal\n */\nexport function parseDeprecatedColor(sanitizingOption: Required) {\n ['color', 'background-color'].forEach(property => {\n chainSanitizerCallback(\n sanitizingOption.cssStyleCallbacks,\n property,\n (value: string) => DeprecatedColorList.indexOf(value) < 0\n );\n });\n}\n","import { ContentModelHyperLinkFormat, FormatParser } from 'roosterjs-content-model-types';\nimport { safeInstanceOf } from 'roosterjs-editor-dom';\n\nconst SUPPORTED_PROTOCOLS = ['http:', 'https:', 'notes:', 'mailto:', 'onenote:'];\nconst INVALID_LINKS_REGEX = /^file:\\/\\/\\/[a-zA-Z\\/]/i;\n\n/**\n * @internal\n */\nexport const parseLink: FormatParser = (format, element) => {\n if (!safeInstanceOf(element, 'HTMLAnchorElement')) {\n return;\n }\n\n let url: URL | undefined;\n try {\n url = new URL(element.href);\n } catch {\n url = undefined;\n }\n\n if (\n (url && SUPPORTED_PROTOCOLS.indexOf(url.protocol) === -1) ||\n INVALID_LINKS_REGEX.test(element.href)\n ) {\n element.removeAttribute('href');\n format.href = '';\n }\n};\n","import { DomToModelOption, ElementProcessorMap } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function setProcessor(\n domToModelOption: DomToModelOption,\n entry: TKey,\n processorOverride: Partial[TKey]\n) {\n if (!domToModelOption.processorOverride) {\n domToModelOption.processorOverride = {};\n }\n\n domToModelOption.processorOverride[entry] = processorOverride;\n}\n","import { ContentModelDocument } from 'roosterjs-content-model-types';\nimport { DeleteResult, OnDeleteEntity } from '../../modelApi/edit/utils/DeleteSelectionStep';\nimport { EntityOperationEvent, PluginEventType } from 'roosterjs-editor-types';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { normalizeContentModel } from 'roosterjs-content-model-dom';\n\n/**\n * @internal\n */\nexport function getOnDeleteEntityCallback(\n editor: IContentModelEditor,\n rawEvent?: KeyboardEvent,\n triggeredEntityEvents: EntityOperationEvent[] = []\n): OnDeleteEntity {\n return (entity, operation) => {\n if (entity.id && entity.type) {\n // Only trigger entity operation event when the same event was not triggered before.\n // TODO: This is a temporary solution as the event deletion is handled by both original EntityPlugin/EntityFeatures and ContentModel.\n // Later when Content Model can fully replace Content Edit Features, we can remove this check.\n if (!triggeredEntityEvents.some(x => x.entity.wrapper == entity.wrapper)) {\n editor.triggerPluginEvent(PluginEventType.EntityOperation, {\n entity: {\n id: entity.id,\n isReadonly: entity.isReadonly,\n type: entity.type,\n wrapper: entity.wrapper,\n },\n operation,\n rawEvent: rawEvent,\n });\n }\n }\n\n // If entity is still in editor and default behavior of event is prevented, that means plugin wants to keep this entity\n // Return true to tell caller we should keep it.\n return !!rawEvent?.defaultPrevented && editor.contains(entity.wrapper);\n };\n}\n\n/**\n * @internal\n * @return True means content is changed, so need to rewrite content model to editor. Otherwise false\n */\nexport function handleKeyboardEventResult(\n editor: IContentModelEditor,\n model: ContentModelDocument,\n rawEvent: KeyboardEvent,\n result: DeleteResult\n): boolean {\n switch (result) {\n case DeleteResult.NotDeleted:\n // We have not delete anything, we will let browser handle this event, so clear cached model if any since the content will be changed by browser\n editor.cacheContentModel(null);\n return false;\n\n case DeleteResult.NothingToDelete:\n // We known there is nothing to delete, no need to let browser keep handling the event\n rawEvent.preventDefault();\n return false;\n\n case DeleteResult.Range:\n case DeleteResult.SingleChar:\n // We have deleted what we need from content model, no need to let browser keep handling the event\n rawEvent.preventDefault();\n normalizeContentModel(model);\n\n if (result == DeleteResult.Range) {\n // A range is about to be deleted, so add an undo snapshot immediately\n editor.addUndoSnapshot();\n }\n\n // Trigger an event to let plugins know the content is about to be changed by Content Model keyboard editing.\n // So plugins can do proper handling. e.g. UndoPlugin can decide whether take a snapshot before this change happens.\n editor.triggerPluginEvent(PluginEventType.BeforeKeyboardEditing, {\n rawEvent,\n });\n\n return true;\n }\n}\n\n/**\n * @internal\n */\nexport function shouldDeleteWord(rawEvent: KeyboardEvent, isMac: boolean) {\n return (\n (isMac && rawEvent.altKey && !rawEvent.metaKey) ||\n (!isMac && rawEvent.ctrlKey && !rawEvent.altKey)\n );\n}\n\n/**\n * @internal\n */\nexport function shouldDeleteAllSegmentsBefore(rawEvent: KeyboardEvent) {\n return rawEvent.metaKey && !rawEvent.altKey;\n}\n","export * from './publicTypes/index';\nexport * from './publicApi/index';\n\nexport { default as ContentModelEditor } from './editor/ContentModelEditor';\nexport { default as isContentModelEditor } from './editor/isContentModelEditor';\nexport { default as ContentModelFormatPlugin } from './editor/plugins/ContentModelFormatPlugin';\nexport { default as ContentModelEditPlugin } from './editor/plugins/ContentModelEditPlugin';\nexport { default as ContentModelPastePlugin } from './editor/plugins/PastePlugin/ContentModelPastePlugin';\nexport { default as ContentModelTypeInContainerPlugin } from './editor/corePlugins/ContentModelTypeInContainerPlugin';\nexport { default as ContentModelCopyPastePlugin } from './editor/corePlugins/ContentModelCopyPastePlugin';\nexport {\n createContentModelEditorCore,\n promoteToContentModelEditorCore,\n} from './editor/createContentModelEditorCore';\nexport { combineBorderValue, extractBorderValues } from './domUtils/borderValues';\nexport { updateImageMetadata } from './domUtils/metadata/updateImageMetadata';\nexport { updateTableCellMetadata } from './domUtils/metadata/updateTableCellMetadata';\nexport { updateTableMetadata } from './domUtils/metadata/updateTableMetadata';\n\nexport { IContentModelEditor, ContentModelEditorOptions } from './publicTypes/IContentModelEditor';\n","import { isGeneralSegment } from 'roosterjs-content-model-dom';\nimport {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelParagraph,\n ContentModelSegment,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport type BlockAndPath = {\n /**\n * The sibling block\n */\n block: ContentModelBlock;\n\n /**\n * Path of this sibling block\n */\n path: ContentModelBlockGroup[];\n\n /**\n * If the input block is under a general segment, it is possible there are sibling segments under the same paragraph.\n * Use this property to return the sibling sibling under the same paragraph\n */\n siblingSegment?: ContentModelSegment;\n};\n\n/**\n * @internal\n */\nexport function getLeafSiblingBlock(\n path: ContentModelBlockGroup[],\n block: ContentModelBlock,\n isNext: boolean\n): BlockAndPath | null {\n const newPath = [...path];\n\n while (newPath.length > 0) {\n let group = newPath[0];\n const index = group.blocks.indexOf(block);\n\n if (index < 0) {\n break;\n }\n\n let nextBlock = group.blocks[index + (isNext ? 1 : -1)];\n\n if (nextBlock) {\n while (nextBlock.blockType == 'BlockGroup') {\n const child = nextBlock.blocks[isNext ? 0 : nextBlock.blocks.length - 1];\n\n if (!child) {\n return { block: nextBlock, path: newPath };\n } else if (child.blockType != 'BlockGroup') {\n newPath.unshift(nextBlock);\n return { block: child, path: newPath };\n } else {\n newPath.unshift(nextBlock);\n nextBlock = child;\n }\n }\n\n return { block: nextBlock, path: newPath };\n } else if (isGeneralSegment(group)) {\n // For general segment, we need to check if there is sibling segment under the same paragraph\n // First let's find the parent paragraph of this segment\n newPath.shift();\n\n let segmentIndex = -1;\n const segment = group;\n const para = newPath[0]?.blocks.find(\n x => x.blockType == 'Paragraph' && (segmentIndex = x.segments.indexOf(segment)) >= 0\n ) as ContentModelParagraph;\n\n if (para) {\n // Now we have found the parent paragraph, so let's check if it has a sibling segment\n const siblingSegment = para.segments[segmentIndex + (isNext ? 1 : -1)];\n\n if (siblingSegment) {\n // Return this block, path and segment since we have found it\n return { block: para, path: newPath, siblingSegment };\n } else {\n // No sibling segment, let's keep go upper level\n block = para;\n }\n } else {\n // Parent sibling is not found (in theory this should never happen), just return null\n break;\n }\n } else if (group.blockGroupType != 'Document' && group.blockGroupType != 'TableCell') {\n newPath.shift();\n block = group;\n } else {\n break;\n }\n }\n\n return null;\n}\n","import { alignTable } from '../table/alignTable';\nimport { ContentModelDocument, ContentModelListItem } from 'roosterjs-content-model-types';\nimport { getOperationalBlocks } from '../selection/collectSelections';\nimport { TableOperation } from 'roosterjs-editor-types';\n\nconst ResultMap: Record<\n 'left' | 'center' | 'right',\n Record<'ltr' | 'rtl', 'start' | 'center' | 'end'>\n> = {\n left: {\n ltr: 'start',\n rtl: 'end',\n },\n center: {\n ltr: 'center',\n rtl: 'center',\n },\n right: {\n ltr: 'end',\n rtl: 'start',\n },\n};\n\nconst TableAlignMap: Record<\n 'left' | 'center' | 'right',\n Record<\n 'ltr' | 'rtl',\n TableOperation.AlignLeft | TableOperation.AlignCenter | TableOperation.AlignRight\n >\n> = {\n left: {\n ltr: TableOperation.AlignLeft,\n rtl: TableOperation.AlignRight,\n },\n center: {\n ltr: TableOperation.AlignCenter,\n rtl: TableOperation.AlignCenter,\n },\n right: {\n ltr: TableOperation.AlignRight,\n rtl: TableOperation.AlignLeft,\n },\n};\n\n/**\n * @internal\n */\nexport function setModelAlignment(\n model: ContentModelDocument,\n alignment: 'left' | 'center' | 'right'\n) {\n const paragraphOrListItemOrTable = getOperationalBlocks(\n model,\n ['ListItem'],\n ['TableCell']\n );\n\n paragraphOrListItemOrTable.forEach(({ block }) => {\n const newAligment = ResultMap[alignment][block.format.direction == 'rtl' ? 'rtl' : 'ltr'];\n if (block.blockType === 'Table') {\n alignTable(\n block,\n TableAlignMap[alignment][block.format.direction == 'rtl' ? 'rtl' : 'ltr']\n );\n } else if (block) {\n const { format } = block;\n format.textAlign = newAligment;\n }\n });\n\n return paragraphOrListItemOrTable.length > 0;\n}\n","import { getOperationalBlocks } from '../selection/collectSelections';\nimport { isBlockGroupOfType } from '../common/isBlockGroupOfType';\nimport { parseValueWithUnit } from 'roosterjs-content-model-dom';\nimport {\n ContentModelDocument,\n ContentModelListItem,\n ContentModelListItemLevelFormat,\n} from 'roosterjs-content-model-types';\n\nconst IndentStepInPixel = 40;\n\n/**\n * @internal\n */\nexport function setModelIndentation(\n model: ContentModelDocument,\n indentation: 'indent' | 'outdent',\n length: number = IndentStepInPixel\n) {\n const paragraphOrListItem = getOperationalBlocks(\n model,\n ['ListItem'],\n ['TableCell']\n );\n const isIndent = indentation == 'indent';\n\n paragraphOrListItem.forEach(({ block }) => {\n if (isBlockGroupOfType(block, 'ListItem')) {\n if (isIndent) {\n const newLevel: ContentModelListItemLevelFormat = {\n ...block.levels[block.levels.length - 1],\n };\n\n // New level is totally new, no need to have these attributes for now\n delete newLevel.startNumberOverride;\n delete newLevel.orderedStyleType;\n delete newLevel.unorderedStyleType;\n\n block.levels.push(newLevel);\n } else {\n block.levels.pop();\n }\n } else if (block) {\n const { format } = block;\n const { marginLeft, marginRight, direction } = format;\n const isRtl = direction == 'rtl';\n const originalValue = parseValueWithUnit(isRtl ? marginRight : marginLeft);\n let newValue = (isIndent ? Math.ceil : Math.floor)(originalValue / length) * length;\n\n if (newValue == originalValue) {\n newValue = Math.max(newValue + length * (isIndent ? 1 : -1), 0);\n }\n\n if (isRtl) {\n format.marginRight = newValue + 'px';\n } else {\n format.marginLeft = newValue + 'px';\n }\n }\n });\n\n return paragraphOrListItem.length > 0;\n}\n","import { areSameFormats, createFormatContainer, unwrapBlock } from 'roosterjs-content-model-dom';\nimport { getOperationalBlocks, OperationalBlocks } from '../selection/collectSelections';\nimport { isBlockGroupOfType } from '../common/isBlockGroupOfType';\nimport { wrapBlockStep1, WrapBlockStep1Result, wrapBlockStep2 } from '../common/wrapBlock';\nimport {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelDocument,\n ContentModelFormatContainer,\n ContentModelFormatContainerFormat,\n ContentModelListItem,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function toggleModelBlockQuote(\n model: ContentModelDocument,\n format: ContentModelFormatContainerFormat\n): boolean {\n const paragraphOfQuote = getOperationalBlocks<\n ContentModelFormatContainer | ContentModelListItem\n >(model, ['FormatContainer', 'ListItem'], ['TableCell'], true /*deepFirst*/);\n\n if (areAllBlockQuotes(paragraphOfQuote)) {\n // All selections are already in quote, we need to unquote them\n paragraphOfQuote.forEach(({ block, parent }) => {\n unwrapBlock(parent, block);\n });\n } else {\n const step1Results: WrapBlockStep1Result[] = [];\n const creator = () => createFormatContainer('blockquote', format);\n const canMerge = (\n target: ContentModelBlock,\n current?: ContentModelFormatContainer\n ): target is ContentModelFormatContainer =>\n canMergeQuote(target, current?.format || format);\n\n paragraphOfQuote.forEach(({ block, parent }) => {\n if (isQuote(block)) {\n // Already in quote, no op\n } else {\n wrapBlockStep1(step1Results, parent, block, creator, canMerge);\n }\n });\n\n wrapBlockStep2(step1Results, canMerge);\n }\n\n return paragraphOfQuote.length > 0;\n}\n\nfunction canMergeQuote(\n target: ContentModelBlock,\n format: ContentModelFormatContainerFormat\n): target is ContentModelFormatContainer {\n return isQuote(target) && areSameFormats(format, target.format);\n}\n\nfunction isQuote(block: ContentModelBlock): block is ContentModelFormatContainer {\n return (\n isBlockGroupOfType(block, 'FormatContainer') &&\n block.tagName == 'blockquote'\n );\n}\n\nfunction areAllBlockQuotes(\n blockAndParents: OperationalBlocks[]\n): blockAndParents is { block: ContentModelFormatContainer; parent: ContentModelBlockGroup }[] {\n return blockAndParents.every(blockAndParent => isQuote(blockAndParent.block));\n}\n","import { adjustWordSelection } from '../selection/adjustWordSelection';\nimport { applyTableFormat } from '../table/applyTableFormat';\nimport { arrayPush } from 'roosterjs-editor-dom';\nimport { createFormatContainer } from 'roosterjs-content-model-dom';\nimport { getClosestAncestorBlockGroupIndex } from './getClosestAncestorBlockGroupIndex';\nimport { iterateSelections } from '../selection/iterateSelections';\nimport { TableSelectionContext } from '../../publicTypes/selection/TableSelectionContext';\nimport { updateTableCellMetadata } from '../../domUtils/metadata/updateTableCellMetadata';\nimport { updateTableMetadata } from '../../domUtils/metadata/updateTableMetadata';\nimport {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelDocument,\n ContentModelFormatContainer,\n ContentModelListItem,\n ContentModelSegment,\n ContentModelSegmentFormat,\n ContentModelTable,\n Selectable,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function clearModelFormat(\n model: ContentModelDocument,\n blocksToClear: [ContentModelBlockGroup[], ContentModelBlock][],\n segmentsToClear: ContentModelSegment[],\n tablesToClear: [ContentModelTable, boolean][]\n) {\n iterateSelections(\n [model],\n (path, tableContext, block, segments) => {\n if (segments) {\n arrayPush(segmentsToClear, segments);\n }\n\n if (block) {\n blocksToClear.push([path, block]);\n } else if (tableContext) {\n clearTableCellFormat(tableContext, tablesToClear);\n }\n },\n {\n // When there is a default format to apply, we know how to handle segment format under list.\n // So no need to clear format of list number.\n // Otherwise, we will clear all format of selected text. And since they are under LI tag, we\n // also need to clear the format of LI (format holder) so that the format is really cleared\n includeListFormatHolder: model.format ? 'never' : 'anySegment',\n }\n );\n\n const marker = segmentsToClear[0];\n\n // 2. If selection is collapsed, add selection to whole word to clear if any\n if (\n blocksToClear.length == 1 &&\n isOnlySelectionMarkerSelected(blocksToClear[0][1]) &&\n blocksToClear.length == 1\n ) {\n segmentsToClear.splice(0, segmentsToClear.length, ...adjustWordSelection(model, marker));\n clearListFormat(blocksToClear[0][0]);\n } else if (blocksToClear.length > 1 || blocksToClear.some(x => isWholeBlockSelected(x[1]))) {\n // 2. If a full block or multiple blocks are selected, clear block format\n for (let i = blocksToClear.length - 1; i >= 0; i--) {\n const [path, block] = blocksToClear[i];\n\n clearBlockFormat(path, block);\n clearListFormat(path);\n clearContainerFormat(path, block);\n }\n }\n\n // 3. Finally clear format for segments\n clearSegmentsFormat(segmentsToClear, model.format);\n\n // 4. Clear format for table if any\n createTablesFormat(tablesToClear);\n}\n\nfunction createTablesFormat(tablesToClear: [ContentModelTable, boolean][]) {\n tablesToClear.forEach(x => {\n const [table, isWholeTableSelected] = x;\n if (isWholeTableSelected) {\n table.format = {\n useBorderBox: table.format.useBorderBox,\n borderCollapse: table.format.borderCollapse,\n };\n updateTableMetadata(table, () => null);\n }\n\n applyTableFormat(table, undefined /*newFormat*/, true);\n });\n}\n\nfunction clearSegmentsFormat(\n segmentsToClear: ContentModelSegment[],\n defaultSegmentFormat: ContentModelSegmentFormat | undefined\n) {\n segmentsToClear.forEach(x => {\n x.format = { ...(defaultSegmentFormat || {}) };\n\n if (x.link) {\n delete x.link.format.textColor;\n }\n\n delete x.code;\n });\n}\n\nfunction clearTableCellFormat(\n tableContext: TableSelectionContext | undefined,\n tablesToClear: [ContentModelTable, boolean][]\n) {\n if (tableContext) {\n const { table, colIndex, rowIndex, isWholeTableSelected } = tableContext;\n const cell = table.rows[rowIndex].cells[colIndex];\n\n if (cell.isSelected) {\n updateTableCellMetadata(cell, () => null);\n cell.isHeader = false;\n cell.format = {\n useBorderBox: cell.format.useBorderBox,\n };\n }\n\n if (!tablesToClear.find(x => x[0] == table)) {\n tablesToClear.push([table, isWholeTableSelected]);\n }\n }\n}\n\nfunction clearContainerFormat(path: ContentModelBlockGroup[], block: ContentModelBlock) {\n const containerPathIndex = getClosestAncestorBlockGroupIndex(\n path,\n ['FormatContainer'],\n ['TableCell']\n );\n\n if (containerPathIndex >= 0 && containerPathIndex < path.length - 1) {\n const container = path[containerPathIndex] as ContentModelFormatContainer;\n const containerIndex = path[containerPathIndex + 1].blocks.indexOf(container);\n const blockIndex = container.blocks.indexOf(block);\n\n if (blockIndex >= 0 && containerIndex >= 0) {\n const newContainer = createFormatContainer(container.tagName, container.format);\n\n container.blocks.splice(blockIndex, 1);\n newContainer.blocks = container.blocks.splice(blockIndex);\n\n path[containerPathIndex + 1].blocks.splice(containerIndex + 1, 0, block, newContainer);\n }\n }\n}\n\nfunction clearListFormat(path: ContentModelBlockGroup[]) {\n const listItem = path[getClosestAncestorBlockGroupIndex(path, ['ListItem'], ['TableCell'])] as\n | ContentModelListItem\n | undefined;\n\n if (listItem) {\n listItem.levels = [];\n }\n}\n\nfunction clearBlockFormat(path: ContentModelBlockGroup[], block: ContentModelBlock) {\n if (block.blockType == 'Divider') {\n const index = path[0].blocks.indexOf(block);\n\n if (index >= 0) {\n path[0].blocks.splice(index, 1);\n }\n } else if (block.blockType == 'Paragraph') {\n block.format = {};\n delete block.decorator;\n }\n}\n\nfunction isOnlySelectionMarkerSelected(block: ContentModelBlock) {\n const segments = block.blockType == 'Paragraph' ? block.segments.filter(x => x.isSelected) : [];\n\n return segments.length == 1 && segments[0].segmentType == 'SelectionMarker';\n}\n\nfunction isWholeBlockSelected(block: ContentModelBlock) {\n return (\n (block as Selectable).isSelected ||\n (block.blockType == 'Paragraph' && block.segments.every(x => x.isSelected))\n );\n}\n","import type {\n ContentModelBlock,\n ContentModelBlockBase,\n ContentModelBlockGroupBase,\n ContentModelBlockGroupType,\n ContentModelBlockType,\n ContentModelDivider,\n ContentModelDocument,\n ContentModelEntity,\n ContentModelFormatBase,\n ContentModelFormatContainer,\n ContentModelGeneralBlock,\n ContentModelImage,\n ContentModelListItem,\n ContentModelParagraph,\n ContentModelSegment,\n ContentModelSegmentBase,\n ContentModelSegmentType,\n ContentModelSelectionMarker,\n ContentModelTable,\n ContentModelTableCell,\n ContentModelWithDataset,\n ContentModelWithFormat,\n ContentModelGeneralSegment,\n ContentModelText,\n ContentModelTableRow,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function cloneModel(model: ContentModelDocument): ContentModelDocument {\n const newModel: ContentModelDocument = cloneBlockGroupBase(model);\n\n if (model.format) {\n newModel.format = Object.assign({}, model.format);\n }\n\n return newModel;\n}\n\nfunction cloneBlock(block: ContentModelBlock): ContentModelBlock {\n switch (block.blockType) {\n case 'BlockGroup':\n switch (block.blockGroupType) {\n case 'FormatContainer':\n return cloneFormatContainer(block);\n case 'General':\n return cloneGeneralBlock(block);\n case 'ListItem':\n return cloneListItem(block);\n }\n break;\n case 'Divider':\n return cloneDivider(block);\n case 'Entity':\n return cloneEntity(block);\n case 'Paragraph':\n return cloneParagraph(block);\n case 'Table':\n return cloneTable(block);\n }\n}\n\nfunction cloneSegment(segment: ContentModelSegment): ContentModelSegment {\n switch (segment.segmentType) {\n case 'Br':\n return cloneSegmentBase(segment);\n case 'Entity':\n return cloneEntity(segment);\n case 'General':\n return cloneGeneralSegment(segment);\n case 'Image':\n return cloneImage(segment);\n case 'SelectionMarker':\n return cloneSelectionMarker(segment);\n case 'Text':\n return cloneText(segment);\n }\n}\n\nfunction cloneModelWithFormat(\n model: ContentModelWithFormat\n): ContentModelWithFormat {\n return {\n format: Object.assign({}, model.format),\n };\n}\n\nfunction cloneModelWithDataset(model: ContentModelWithDataset): ContentModelWithDataset {\n return {\n dataset: Object.assign({}, model.dataset),\n };\n}\n\nfunction cloneBlockBase(\n block: ContentModelBlockBase\n): ContentModelBlockBase {\n const { blockType } = block;\n\n return Object.assign(\n {\n blockType,\n },\n cloneModelWithFormat(block)\n );\n}\n\nfunction cloneBlockGroupBase(\n group: ContentModelBlockGroupBase\n): ContentModelBlockGroupBase {\n const { blockGroupType, blocks } = group;\n\n return {\n blockGroupType: blockGroupType,\n blocks: blocks.map(cloneBlock),\n };\n}\n\nfunction cloneSegmentBase(\n segment: ContentModelSegmentBase\n): ContentModelSegmentBase {\n const { segmentType, isSelected, code, link } = segment;\n\n const newSegment: ContentModelSegmentBase = Object.assign(\n {\n segmentType,\n isSelected,\n },\n cloneModelWithFormat(segment)\n );\n\n if (code) {\n newSegment.code = cloneModelWithFormat(code);\n }\n if (link) {\n newSegment.link = Object.assign(cloneModelWithFormat(link), cloneModelWithDataset(link));\n }\n\n return newSegment;\n}\n\nfunction cloneEntity(entity: ContentModelEntity): ContentModelEntity {\n const { wrapper, isReadonly, type, id } = entity;\n\n return Object.assign(\n { wrapper, isReadonly, type, id },\n cloneBlockBase(entity),\n cloneSegmentBase(entity)\n );\n}\n\nfunction cloneParagraph(paragraph: ContentModelParagraph): ContentModelParagraph {\n const { cachedElement, segments, isImplicit, decorator, segmentFormat } = paragraph;\n\n const newParagraph: ContentModelParagraph = Object.assign(\n {\n cachedElement,\n isImplicit,\n segments: segments.map(cloneSegment),\n segmentFormat: segmentFormat ? { ...segmentFormat } : undefined,\n },\n cloneBlockBase(paragraph),\n cloneModelWithFormat(paragraph)\n );\n\n if (decorator) {\n newParagraph.decorator = Object.assign(\n {\n tagName: decorator.tagName,\n },\n cloneModelWithFormat(decorator)\n );\n }\n\n return newParagraph;\n}\n\nfunction cloneTable(table: ContentModelTable): ContentModelTable {\n const { cachedElement, widths, rows } = table;\n\n return Object.assign(\n {\n cachedElement,\n widths: Array.from(widths),\n rows: rows.map(cloneTableRow),\n },\n cloneBlockBase(table),\n cloneModelWithDataset(table)\n );\n}\n\nfunction cloneTableRow(row: ContentModelTableRow): ContentModelTableRow {\n const { height, cells, cachedElement } = row;\n\n return Object.assign(\n {\n height,\n cachedElement,\n cells: cells.map(cloneTableCell),\n },\n cloneModelWithFormat(row)\n );\n}\n\nfunction cloneTableCell(cell: ContentModelTableCell): ContentModelTableCell {\n const { cachedElement, isSelected, spanAbove, spanLeft, isHeader } = cell;\n\n return Object.assign(\n { cachedElement, isSelected, spanAbove, spanLeft, isHeader },\n cloneBlockGroupBase(cell),\n cloneModelWithFormat(cell),\n cloneModelWithDataset(cell)\n );\n}\n\nfunction cloneFormatContainer(container: ContentModelFormatContainer): ContentModelFormatContainer {\n const { tagName, cachedElement } = container;\n const newContainer: ContentModelFormatContainer = Object.assign(\n { tagName, cachedElement },\n cloneBlockBase(container),\n cloneBlockGroupBase(container)\n );\n\n if (container.zeroFontSize) {\n newContainer.zeroFontSize = true;\n }\n\n return newContainer;\n}\n\nfunction cloneListItem(item: ContentModelListItem): ContentModelListItem {\n const { formatHolder, levels } = item;\n\n return Object.assign(\n {\n formatHolder: cloneSelectionMarker(formatHolder),\n levels: levels.map(x => Object.assign({}, x)),\n },\n cloneBlockBase(item),\n cloneBlockGroupBase(item)\n );\n}\n\nfunction cloneDivider(divider: ContentModelDivider): ContentModelDivider {\n const { tagName, isSelected, cachedElement } = divider;\n\n return Object.assign({ isSelected, tagName, cachedElement }, cloneBlockBase(divider));\n}\n\nfunction cloneGeneralBlock(general: ContentModelGeneralBlock): ContentModelGeneralBlock {\n const { element } = general;\n\n return Object.assign({ element }, cloneBlockBase(general), cloneBlockGroupBase(general));\n}\n\nfunction cloneSelectionMarker(marker: ContentModelSelectionMarker): ContentModelSelectionMarker {\n return Object.assign({ isSelected: marker.isSelected }, cloneSegmentBase(marker));\n}\n\nfunction cloneImage(image: ContentModelImage): ContentModelImage {\n const { src, alt, title, isSelectedAsImageSelection } = image;\n\n return Object.assign(\n { src, alt, title, isSelectedAsImageSelection },\n cloneSegmentBase(image),\n cloneModelWithDataset(image)\n );\n}\n\nfunction cloneGeneralSegment(general: ContentModelGeneralSegment): ContentModelGeneralSegment {\n return Object.assign(cloneGeneralBlock(general), cloneSegmentBase(general));\n}\n\nfunction cloneText(textSegment: ContentModelText): ContentModelText {\n const { text } = textSegment;\n return Object.assign({ text }, cloneSegmentBase(textSegment));\n}\n","import {\n ContentModelBlockGroup,\n ContentModelBlockGroupBase,\n ContentModelBlockGroupType,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport type TypeOfBlockGroup<\n T extends ContentModelBlockGroup\n> = T extends ContentModelBlockGroupBase ? U : never;\n\n/**\n * @internal\n */\nexport function getClosestAncestorBlockGroupIndex(\n path: ContentModelBlockGroup[],\n blockGroupTypes: TypeOfBlockGroup[],\n stopTypes: ContentModelBlockGroupType[] = []\n): number {\n for (let i = 0; i < path.length; i++) {\n const group = path[i];\n\n if ((blockGroupTypes as string[]).indexOf(group.blockGroupType) >= 0) {\n return i;\n } else if (stopTypes.indexOf(group.blockGroupType) >= 0) {\n // Do not go across boundary specified by stopTypes.\n // For example, in most case we will set table as the boundary,\n // in order to allow modify list item under a table when the table itself is in another list item\n // Although this is not very likely to happen in most case, but we still need to handle it\n return -1;\n }\n }\n\n return -1;\n}\n","import { ContentModelBlock, ContentModelBlockGroup } from 'roosterjs-content-model-types';\nimport { TypeOfBlockGroup } from './getClosestAncestorBlockGroupIndex';\n\n/**\n * @internal\n */\nexport function isBlockGroupOfType(\n input: ContentModelBlock | ContentModelBlockGroup | null | undefined,\n type: TypeOfBlockGroup\n): input is T {\n const item = input;\n\n return item?.blockGroupType == type;\n}\n","import { addSegment } from 'roosterjs-content-model-dom';\nimport { applyTableFormat } from '../table/applyTableFormat';\nimport { deleteSelection } from '../edit/deleteSelection';\nimport { getClosestAncestorBlockGroupIndex } from './getClosestAncestorBlockGroupIndex';\nimport { InsertPoint } from '../../publicTypes/selection/InsertPoint';\nimport { normalizeTable } from '../table/normalizeTable';\nimport { OnDeleteEntity } from '../edit/utils/DeleteSelectionStep';\nimport {\n createListItem,\n createParagraph,\n createSelectionMarker,\n createTableCell,\n normalizeContentModel,\n} from 'roosterjs-content-model-dom';\nimport {\n ContentModelBlock,\n ContentModelBlockFormat,\n ContentModelBlockGroup,\n ContentModelDocument,\n ContentModelListItem,\n ContentModelParagraph,\n ContentModelSegmentFormat,\n ContentModelTable,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Options to specify how to merge models\n */\nexport interface MergeModelOption {\n /**\n * When there is only a table to merge, whether merge this table into current table (if any), or just directly insert (nested table).\n * This is usually used when paste table inside a table\n * @default false\n */\n mergeTable?: boolean;\n\n /**\n * Use this insert position to merge instead of querying selection from target model\n * @default undefined\n */\n insertPosition?: InsertPoint;\n\n /**\n * Use this to decide whether to change the source model format when doing the merge.\n * 'mergeAll': segment format of the insert position will be merged into the content that is merged into current model.\n * If the source model already has some format, it will not be overwritten.\n * 'keepSourceEmphasisFormat': format of the insert position will be set into the content that is merged into current model.\n * If the source model already has emphasis format, such as, fontWeight, Italic or underline different than the default style, it will not be overwritten.\n * 'none' the source segment format will not be modified.\n * @default undefined\n */\n mergeFormat?: 'mergeAll' | 'keepSourceEmphasisFormat' | 'none';\n}\n\n/**\n * @internal\n */\nexport function mergeModel(\n target: ContentModelDocument,\n source: ContentModelDocument,\n onDeleteEntity: OnDeleteEntity,\n options?: MergeModelOption\n) {\n const insertPosition =\n options?.insertPosition ?? deleteSelection(target, onDeleteEntity).insertPoint;\n\n if (insertPosition) {\n if (options?.mergeFormat && options.mergeFormat != 'none') {\n const newFormat: ContentModelSegmentFormat = {\n ...(target.format || {}),\n ...insertPosition.marker.format,\n };\n\n applyDefaultFormat(source, newFormat, options?.mergeFormat);\n }\n\n for (let i = 0; i < source.blocks.length; i++) {\n const block = source.blocks[i];\n\n switch (block.blockType) {\n case 'Paragraph':\n mergeParagraph(insertPosition, block, i == 0);\n break;\n\n case 'Divider':\n case 'Entity':\n insertBlock(insertPosition, block);\n break;\n\n case 'Table':\n if (source.blocks.length == 1 && options?.mergeTable) {\n mergeTable(insertPosition, block, source);\n } else {\n insertBlock(insertPosition, block);\n }\n break;\n\n case 'BlockGroup':\n switch (block.blockGroupType) {\n case 'General':\n case 'FormatContainer':\n insertBlock(insertPosition, block);\n break;\n case 'ListItem':\n mergeList(insertPosition, block);\n break;\n }\n break;\n }\n }\n }\n\n normalizeContentModel(target);\n}\n\nfunction mergeParagraph(\n markerPosition: InsertPoint,\n newPara: ContentModelParagraph,\n mergeToCurrentParagraph: boolean\n) {\n const { paragraph, marker } = markerPosition;\n const newParagraph = mergeToCurrentParagraph\n ? paragraph\n : splitParagraph(markerPosition, newPara.format);\n const segmentIndex = newParagraph.segments.indexOf(marker);\n\n if (segmentIndex >= 0) {\n newParagraph.segments.splice(segmentIndex, 0, ...newPara.segments);\n }\n\n if (newPara.decorator) {\n newParagraph.decorator = { ...newPara.decorator };\n }\n}\n\nfunction mergeTable(\n markerPosition: InsertPoint,\n newTable: ContentModelTable,\n source: ContentModelDocument\n) {\n const { tableContext } = markerPosition;\n\n if (tableContext && source.blocks.length == 1 && source.blocks[0] == newTable) {\n const { table, colIndex, rowIndex } = tableContext;\n for (let i = 0; i < newTable.rows.length; i++) {\n for (let j = 0; j < newTable.rows[i].cells.length; j++) {\n const newCell = newTable.rows[i].cells[j];\n\n if (i == 0 && colIndex + j >= table.rows[0].cells.length) {\n for (let k = 0; k < table.rows.length; k++) {\n const leftCell = table.rows[k]?.cells[colIndex + j - 1];\n table.rows[k].cells[colIndex + j] = createTableCell(\n false /*spanLeft*/,\n false /*spanAbove*/,\n leftCell?.isHeader,\n leftCell?.format\n );\n }\n }\n\n if (j == 0 && rowIndex + i >= table.rows.length) {\n if (!table.rows[rowIndex + i]) {\n table.rows[rowIndex + i] = {\n cells: [],\n format: {},\n height: 0,\n };\n }\n\n for (let k = 0; k < table.rows[rowIndex].cells.length; k++) {\n const aboveCell = table.rows[rowIndex + i - 1]?.cells[k];\n table.rows[rowIndex + i].cells[k] = createTableCell(\n false /*spanLeft*/,\n false /*spanAbove*/,\n false /*isHeader*/,\n aboveCell?.format\n );\n }\n }\n\n table.rows[rowIndex + i].cells[colIndex + j] = newCell;\n\n if (i == 0 && j == 0) {\n addSegment(newCell, createSelectionMarker());\n }\n }\n }\n\n normalizeTable(table, markerPosition.marker.format);\n applyTableFormat(table, undefined /*newFormat*/, true /*keepCellShade*/);\n } else {\n insertBlock(markerPosition, newTable);\n }\n}\n\nfunction mergeList(markerPosition: InsertPoint, newList: ContentModelListItem) {\n splitParagraph(markerPosition, newList.format);\n\n const { path, paragraph } = markerPosition;\n\n const listItemIndex = getClosestAncestorBlockGroupIndex(path, ['ListItem']);\n const listItem = path[listItemIndex] as ContentModelListItem;\n const listParent = path[listItemIndex + 1]; // It is ok here when index is -1, that means there is no list and we just insert a new paragraph and use path[0] as its parent\n const blockIndex = listParent.blocks.indexOf(listItem || paragraph);\n\n if (blockIndex >= 0) {\n listParent.blocks.splice(blockIndex, 0, newList);\n }\n\n if (listItem) {\n listItem?.levels.forEach((level, i) => {\n newList.levels[i] = { ...level };\n });\n }\n}\n\nfunction splitParagraph(markerPosition: InsertPoint, newParaFormat: ContentModelBlockFormat) {\n const { paragraph, marker, path } = markerPosition;\n const segmentIndex = paragraph.segments.indexOf(marker);\n const paraIndex = path[0].blocks.indexOf(paragraph);\n const newParagraph = createParagraph(\n false /*isImplicit*/,\n { ...paragraph.format, ...newParaFormat },\n paragraph.segmentFormat\n );\n\n if (segmentIndex >= 0) {\n newParagraph.segments = paragraph.segments.splice(segmentIndex);\n }\n\n if (paraIndex >= 0) {\n path[0].blocks.splice(paraIndex + 1, 0, newParagraph);\n }\n\n const listItemIndex = getClosestAncestorBlockGroupIndex(\n path,\n ['ListItem'],\n ['FormatContainer', 'TableCell']\n );\n const listItem = path[listItemIndex] as ContentModelListItem;\n\n if (listItem) {\n const listParent = listItemIndex >= 0 ? path[listItemIndex + 1] : null;\n const blockIndex = listParent ? listParent.blocks.indexOf(listItem) : -1;\n\n if (blockIndex >= 0 && listParent) {\n const newListItem = createListItem(listItem.levels, listItem.formatHolder.format);\n\n if (paraIndex >= 0) {\n newListItem.blocks = listItem.blocks.splice(paraIndex + 1);\n }\n\n if (blockIndex >= 0) {\n listParent.blocks.splice(blockIndex + 1, 0, newListItem);\n }\n\n path[listItemIndex] = newListItem;\n }\n }\n\n markerPosition.paragraph = newParagraph;\n\n return newParagraph;\n}\n\nfunction insertBlock(markerPosition: InsertPoint, block: ContentModelBlock) {\n const { path } = markerPosition;\n const newPara = splitParagraph(markerPosition, block.format);\n const blockIndex = path[0].blocks.indexOf(newPara);\n\n if (blockIndex >= 0) {\n path[0].blocks.splice(blockIndex, 0, block);\n }\n}\n\nfunction applyDefaultFormat(\n group: ContentModelBlockGroup,\n format: ContentModelSegmentFormat,\n applyDefaultFormatOption: 'mergeAll' | 'keepSourceEmphasisFormat'\n) {\n group.blocks.forEach(block => {\n switch (block.blockType) {\n case 'BlockGroup':\n if (block.blockGroupType == 'ListItem') {\n block.formatHolder.format = mergeSegmentFormat(\n applyDefaultFormatOption,\n format,\n block.formatHolder.format\n );\n }\n applyDefaultFormat(block, format, applyDefaultFormatOption);\n break;\n\n case 'Table':\n block.rows.forEach(row =>\n row.cells.forEach(cell => {\n applyDefaultFormat(cell, format, applyDefaultFormatOption);\n })\n );\n break;\n\n case 'Paragraph':\n const paragraphFormat = block.decorator?.format || {};\n block.segments.forEach(segment => {\n if (segment.segmentType == 'General') {\n applyDefaultFormat(segment, format, applyDefaultFormatOption);\n }\n\n segment.format = mergeSegmentFormat(applyDefaultFormatOption, format, {\n ...paragraphFormat,\n ...segment.format,\n });\n });\n\n if (applyDefaultFormatOption === 'keepSourceEmphasisFormat') {\n delete block.decorator;\n }\n break;\n }\n });\n}\n\nfunction mergeSegmentFormat(\n applyDefaultFormatOption: 'mergeAll' | 'keepSourceEmphasisFormat',\n targetformat: ContentModelSegmentFormat,\n sourceFormat: ContentModelSegmentFormat\n): ContentModelSegmentFormat {\n return applyDefaultFormatOption == 'mergeAll'\n ? { ...targetformat, ...sourceFormat }\n : {\n ...targetformat,\n ...getSemanticFormat(sourceFormat),\n };\n}\n\nfunction getSemanticFormat(segmentFormat: ContentModelSegmentFormat): ContentModelSegmentFormat {\n const result: ContentModelSegmentFormat = {};\n\n const { fontWeight, italic, underline } = segmentFormat;\n\n if (fontWeight && fontWeight != 'normal') {\n result.fontWeight = fontWeight;\n }\n if (italic) {\n result.italic = italic;\n }\n if (underline) {\n result.underline = underline;\n }\n\n return result;\n}\n","import { ContentModelFormatState } from '../../publicTypes/format/formatState/ContentModelFormatState';\nimport { extractBorderValues } from '../../domUtils/borderValues';\nimport { getClosestAncestorBlockGroupIndex } from './getClosestAncestorBlockGroupIndex';\nimport { isBold } from '../../publicApi/segment/toggleBold';\nimport { iterateSelections } from '../selection/iterateSelections';\nimport { TableSelectionContext } from '../../publicTypes/selection/TableSelectionContext';\nimport { updateTableMetadata } from '../../domUtils/metadata/updateTableMetadata';\nimport {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelDocument,\n ContentModelFormatContainer,\n ContentModelImage,\n ContentModelListItem,\n ContentModelParagraph,\n ContentModelSegmentFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function retrieveModelFormatState(\n model: ContentModelDocument,\n pendingFormat: ContentModelSegmentFormat | null,\n formatState: ContentModelFormatState\n) {\n let firstTableContext: TableSelectionContext | undefined;\n let firstBlock: ContentModelBlock | undefined;\n let isFirst = true;\n let isFirstImage = true;\n let isFirstSegment = true;\n\n iterateSelections(\n [model],\n (path, tableContext, block, segments) => {\n // Structure formats\n retrieveStructureFormat(formatState, path, isFirst);\n\n // Multiple line format\n if (block) {\n if (firstBlock) {\n formatState.isMultilineSelection = true;\n } else {\n firstBlock = block;\n }\n }\n\n if (block?.blockType == 'Paragraph') {\n // Paragraph formats\n retrieveParagraphFormat(formatState, block, isFirst);\n\n // Segment formats\n segments?.forEach(segment => {\n if (isFirstSegment || segment.segmentType != 'SelectionMarker') {\n retrieveSegmentFormat(\n formatState,\n isFirst,\n Object.assign(\n {},\n model.format,\n block.format,\n block.decorator?.format,\n segment.format,\n segment.code?.format,\n segment.link?.format,\n pendingFormat\n )\n );\n\n mergeValue(formatState, 'isCodeInline', !!segment?.code, isFirst);\n }\n\n // We only care the format of selection marker when it is the first selected segment. This is because when selection marker\n // is after some other selected segments, it mostly like appears at the beginning of a seconde line when the whole first line\n // is selected (e.g. triple-click on a line) then the second selection marker doesn't contain a correct format, so we need to\n // ignore it\n isFirstSegment = false;\n\n formatState.canUnlink = formatState.canUnlink || !!segment.link;\n formatState.canAddImageAltText =\n formatState.canAddImageAltText ||\n segments.some(segment => segment.segmentType == 'Image');\n\n isFirst = false;\n\n if (segment.segmentType === 'Image') {\n if (isFirstImage) {\n retrieveImageFormat(segment, formatState);\n isFirstImage = false;\n } else {\n formatState.imageFormat = undefined;\n }\n }\n });\n\n isFirst = false;\n }\n\n if (tableContext) {\n if (firstTableContext) {\n const { table, colIndex, rowIndex } = firstTableContext;\n\n // Merge table format\n if (\n tableContext.table == table &&\n (tableContext.colIndex != colIndex || tableContext.rowIndex != rowIndex)\n ) {\n formatState.canMergeTableCell = true;\n formatState.isMultilineSelection = true;\n }\n } else {\n // Table formats\n retrieveTableFormat(tableContext, formatState);\n firstTableContext = tableContext;\n }\n }\n\n // TODO: Support Code block in format state for Content Model\n },\n {\n includeListFormatHolder: 'never',\n }\n );\n}\n\nfunction retrieveSegmentFormat(\n result: ContentModelFormatState,\n isFirst: boolean,\n mergedFormat: ContentModelSegmentFormat\n) {\n const superOrSubscript = mergedFormat.superOrSubScriptSequence?.split(' ')?.pop();\n\n mergeValue(result, 'isBold', isBold(mergedFormat.fontWeight), isFirst);\n mergeValue(result, 'isItalic', mergedFormat.italic, isFirst);\n mergeValue(result, 'isUnderline', mergedFormat.underline, isFirst);\n mergeValue(result, 'isStrikeThrough', mergedFormat.strikethrough, isFirst);\n mergeValue(result, 'isSuperscript', superOrSubscript == 'super', isFirst);\n mergeValue(result, 'isSubscript', superOrSubscript == 'sub', isFirst);\n\n mergeValue(result, 'fontName', mergedFormat.fontFamily, isFirst);\n mergeValue(result, 'fontSize', mergedFormat.fontSize, isFirst);\n mergeValue(result, 'backgroundColor', mergedFormat.backgroundColor, isFirst);\n mergeValue(result, 'textColor', mergedFormat.textColor, isFirst);\n\n //TODO: handle block owning segments with different line-heights\n mergeValue(result, 'lineHeight', mergedFormat.lineHeight, isFirst);\n}\n\nfunction retrieveParagraphFormat(\n result: ContentModelFormatState,\n paragraph: ContentModelParagraph,\n isFirst: boolean\n) {\n const headerLevel = parseInt((paragraph.decorator?.tagName || '').substring(1));\n const validHeaderLevel = headerLevel >= 1 && headerLevel <= 6 ? headerLevel : undefined;\n\n mergeValue(result, 'marginBottom', paragraph.format.marginBottom, isFirst);\n mergeValue(result, 'marginTop', paragraph.format.marginTop, isFirst);\n mergeValue(result, 'headerLevel', validHeaderLevel, isFirst);\n mergeValue(result, 'textAlign', paragraph.format.textAlign, isFirst);\n mergeValue(result, 'direction', paragraph.format.direction, isFirst);\n}\n\nfunction retrieveStructureFormat(\n result: ContentModelFormatState,\n path: ContentModelBlockGroup[],\n isFirst: boolean\n) {\n const listItemIndex = getClosestAncestorBlockGroupIndex(path, ['ListItem'], []);\n const containerIndex = getClosestAncestorBlockGroupIndex(path, ['FormatContainer'], []);\n\n if (listItemIndex >= 0) {\n const listItem = path[listItemIndex] as ContentModelListItem;\n const listType = listItem?.levels[listItem.levels.length - 1]?.listType;\n\n mergeValue(result, 'isBullet', listType == 'UL', isFirst);\n mergeValue(result, 'isNumbering', listType == 'OL', isFirst);\n }\n\n mergeValue(\n result,\n 'isBlockQuote',\n containerIndex >= 0 &&\n (path[containerIndex] as ContentModelFormatContainer)?.tagName == 'blockquote',\n isFirst\n );\n}\n\nfunction retrieveTableFormat(tableContext: TableSelectionContext, result: ContentModelFormatState) {\n const tableFormat = updateTableMetadata(tableContext.table);\n\n result.isInTable = true;\n result.tableHasHeader = tableContext.table.rows.some(row =>\n row.cells.some(cell => cell.isHeader)\n );\n\n if (tableFormat) {\n result.tableFormat = tableFormat;\n }\n}\n\nfunction retrieveImageFormat(image: ContentModelImage, result: ContentModelFormatState) {\n const { format } = image;\n const borderKey = 'borderTop';\n const extractedBorder = extractBorderValues(format[borderKey]);\n const borderColor = extractedBorder.color;\n const borderWidth = extractedBorder.width;\n const borderStyle = extractedBorder.style;\n result.imageFormat = {\n borderColor,\n borderWidth,\n borderStyle,\n boxShadow: format.boxShadow,\n borderRadius: format.borderRadius,\n };\n}\n\nfunction mergeValue(\n format: ContentModelFormatState,\n key: K,\n newValue: ContentModelFormatState[K] | undefined,\n isFirst: boolean\n) {\n if (isFirst) {\n if (newValue !== undefined) {\n format[key] = newValue;\n }\n } else if (newValue !== format[key]) {\n delete format[key];\n }\n}\n","import { addBlock, setParagraphNotImplicit } from 'roosterjs-content-model-dom';\nimport { arrayPush } from 'roosterjs-editor-dom';\nimport { ContentModelBlock, ContentModelBlockGroup } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport interface WrapBlockStep1Result {\n parent: ContentModelBlockGroup;\n wrapper: T;\n}\n\n/**\n * @internal\n */\nexport function wrapBlockStep1(\n step1Result: WrapBlockStep1Result[],\n parent: ContentModelBlockGroup | null,\n blockToWrap: ContentModelBlock,\n creator: () => T,\n canMerge: (target: ContentModelBlock) => target is T\n) {\n const index = parent?.blocks.indexOf(blockToWrap) ?? -1;\n\n if (parent && index >= 0) {\n parent.blocks.splice(index, 1);\n\n const prevBlock = parent.blocks[index - 1];\n const wrapper = canMerge(prevBlock) ? prevBlock : createAndAdd(parent, index, creator);\n\n setParagraphNotImplicit(blockToWrap);\n addBlock(wrapper, blockToWrap);\n\n // Use reverse order, so that we can merge from last to first to avoid modifying unmerged quotes\n step1Result.unshift({ parent, wrapper });\n }\n}\n\n/**\n * @internal\n */\nexport function wrapBlockStep2(\n step1Result: WrapBlockStep1Result[],\n canMerge: (target: ContentModelBlock, current: T) => target is T\n) {\n step1Result.forEach(({ parent, wrapper }) => {\n const index = parent.blocks.indexOf(wrapper);\n const nextBlock = parent.blocks[index + 1];\n\n if (index >= 0 && canMerge(nextBlock, wrapper)) {\n wrapper.blocks.forEach(setParagraphNotImplicit);\n arrayPush(wrapper.blocks, nextBlock.blocks);\n parent.blocks.splice(index + 1, 1);\n }\n });\n}\n\nfunction createAndAdd(\n parent: ContentModelBlockGroup,\n index: number,\n creator: () => T\n): T {\n const block = creator();\n\n parent.blocks.splice(index, 0, block);\n return block;\n}\n","import { ContentModelDocument } from 'roosterjs-content-model-types';\nimport { deleteExpandedSelection } from './utils/deleteExpandedSelection';\nimport {\n DeleteResult,\n DeleteSelectionContext,\n DeleteSelectionResult,\n DeleteSelectionStep,\n ValidDeleteSelectionContext,\n OnDeleteEntity,\n} from './utils/DeleteSelectionStep';\n\n/**\n * @internal\n */\nexport function deleteSelection(\n model: ContentModelDocument,\n onDeleteEntity: OnDeleteEntity,\n additionalSteps: (DeleteSelectionStep | null)[] = []\n): DeleteSelectionResult {\n const context = deleteExpandedSelection(model, onDeleteEntity);\n\n additionalSteps.forEach(step => {\n if (\n step &&\n isValidDeleteSelectionContext(context) &&\n context.deleteResult == DeleteResult.NotDeleted\n ) {\n step(context, onDeleteEntity);\n }\n });\n\n mergeParagraphAfterDelete(context);\n\n return context;\n}\n\nfunction isValidDeleteSelectionContext(\n context: DeleteSelectionContext\n): context is ValidDeleteSelectionContext {\n return !!context.insertPoint;\n}\n\n// If we end up with multiple paragraphs impacted, we need to merge them\nfunction mergeParagraphAfterDelete(context: DeleteSelectionContext) {\n const { insertPoint, deleteResult, lastParagraph, lastTableContext } = context;\n\n if (\n insertPoint &&\n deleteResult != DeleteResult.NotDeleted &&\n deleteResult != DeleteResult.NothingToDelete &&\n lastParagraph &&\n lastParagraph != insertPoint.paragraph &&\n lastTableContext == insertPoint.tableContext\n ) {\n insertPoint.paragraph.segments.push(...lastParagraph.segments);\n lastParagraph.segments = [];\n }\n}\n","import { DeleteResult, DeleteSelectionStep } from '../utils/DeleteSelectionStep';\nimport { deleteSegment } from '../utils/deleteSegment';\n\n/**\n * @internal\n */\nexport const deleteAllSegmentBefore: DeleteSelectionStep = (context, onDeleteEntity) => {\n const { paragraph, marker } = context.insertPoint;\n const index = paragraph.segments.indexOf(marker);\n\n for (let i = index - 1; i >= 0; i--) {\n const segment = paragraph.segments[i];\n\n segment.isSelected = true;\n\n if (deleteSegment(paragraph, segment, onDeleteEntity)) {\n context.deleteResult = DeleteResult.Range;\n }\n }\n};\n","import { BlockAndPath, getLeafSiblingBlock } from '../../block/getLeafSiblingBlock';\nimport { ContentModelSegment } from 'roosterjs-content-model-types';\nimport { createInsertPoint } from '../utils/createInsertPoint';\nimport { deleteBlock } from '../utils/deleteBlock';\nimport { DeleteResult, DeleteSelectionStep } from '../utils/DeleteSelectionStep';\nimport { deleteSegment } from '../utils/deleteSegment';\n\nfunction getDeleteCollapsedSelection(direction: 'forward' | 'backward'): DeleteSelectionStep {\n return (context, onDeleteEntity) => {\n const isForward = direction == 'forward';\n const { paragraph, marker, path, tableContext } = context.insertPoint;\n const segments = paragraph.segments;\n\n fixupBr(segments);\n\n const index = segments.indexOf(marker) + (isForward ? 1 : -1);\n const segmentToDelete = segments[index];\n let blockToDelete: BlockAndPath | null;\n\n if (segmentToDelete) {\n if (deleteSegment(paragraph, segmentToDelete, onDeleteEntity, direction)) {\n context.deleteResult = DeleteResult.SingleChar;\n }\n } else if ((blockToDelete = getLeafSiblingBlock(path, paragraph, isForward))) {\n const { block, path, siblingSegment } = blockToDelete;\n\n if (block.blockType == 'Paragraph') {\n if (siblingSegment) {\n // When selection is under general segment, need to check if it has a sibling sibling, and delete from it\n if (deleteSegment(block, siblingSegment, onDeleteEntity, direction)) {\n context.deleteResult = DeleteResult.Range;\n }\n } else {\n if (isForward) {\n context.lastParagraph = block;\n } else {\n if (block.segments[block.segments.length - 1]?.segmentType == 'Br') {\n block.segments.pop();\n }\n\n context.insertPoint = createInsertPoint(marker, block, path, tableContext);\n context.lastParagraph = paragraph;\n delete block.cachedElement;\n }\n\n context.deleteResult = DeleteResult.Range;\n }\n\n // When go across table, getLeafSiblingBlock will return null, when we are here, we must be in the same table context\n context.lastTableContext = tableContext;\n } else {\n if (\n deleteBlock(\n path[0].blocks,\n block,\n onDeleteEntity,\n undefined /*replacement*/,\n direction\n )\n ) {\n context.deleteResult = DeleteResult.Range;\n }\n }\n } else {\n // We have nothing to delete, in this case we don't want browser handle it as well.\n // Because when Backspace on an empty document, it will also delete the only DIV and SPAN element, causes\n // editor is really empty. We don't want that happen. So the handling should stop here.\n context.deleteResult = DeleteResult.NothingToDelete;\n }\n };\n}\n\n/**\n * If the last segment is BR, remove it for now. We may add it back later when normalize model.\n * So that if this is an empty paragraph, it will start to delete next block\n */\nfunction fixupBr(segments: ContentModelSegment[]) {\n if (segments[segments.length - 1]?.segmentType == 'Br') {\n const segmentsWithoutBr = segments.filter(x => x.segmentType != 'SelectionMarker');\n\n if (segmentsWithoutBr[segmentsWithoutBr.length - 2]?.segmentType != 'Br') {\n segments.pop();\n }\n }\n}\n\n/**\n * @internal if we didn't delete anything, and we want to delete forward, now perform it\n */\nexport const forwardDeleteCollapsedSelection = getDeleteCollapsedSelection('forward');\n\n/**\n * @internal if we didn't delete anything, and we want to delete backward, now perform it\n */\nexport const backwardDeleteCollapsedSelection = getDeleteCollapsedSelection('backward');\n","import { ContentModelParagraph } from 'roosterjs-content-model-types';\nimport {\n isPunctuation,\n isSpace,\n isWhiteSpacePreserved,\n normalizeText,\n} from 'roosterjs-content-model-dom';\nimport {\n DeleteResult,\n DeleteSelectionContext,\n DeleteSelectionStep,\n} from '../utils/DeleteSelectionStep';\n\nconst enum DeleteWordState {\n Start,\n Punctuation,\n Text,\n NonText,\n Space,\n End,\n}\n\ninterface CharInfo {\n text: boolean;\n space: boolean;\n punctuation: boolean;\n}\n\nfunction getDeleteWordSelection(direction: 'forward' | 'backward'): DeleteSelectionStep {\n return context => {\n const { marker, paragraph } = context.insertPoint;\n const startIndex = paragraph.segments.indexOf(marker);\n const deleteNext = direction == 'forward';\n\n let iterator = iterateSegments(paragraph, startIndex, deleteNext, context);\n let curr = iterator.next();\n\n for (let state = DeleteWordState.Start; state != DeleteWordState.End && !curr.done; ) {\n const { punctuation, space, text } = curr.value;\n\n // This is a state machine of how to delete a whole word together with space and punctuations.\n // For a full state machine chart, see\n // Forward delete: https://github.com/microsoft/roosterjs/blob/master/assets/design-charts/ForwardDeleteWord.png\n // Backward delete: https://github.com/microsoft/roosterjs/blob/master/assets/design-charts/BackwardDeleteWord.png\n switch (state) {\n case DeleteWordState.Start:\n state = space\n ? DeleteWordState.Space\n : punctuation\n ? DeleteWordState.Punctuation\n : DeleteWordState.Text;\n curr = iterator.next(true /*delete*/);\n break;\n\n case DeleteWordState.Punctuation:\n if (deleteNext && space) {\n state = DeleteWordState.NonText;\n curr = iterator.next(true /*delete*/);\n } else if (punctuation) {\n curr = iterator.next(true /*delete*/);\n } else {\n state = DeleteWordState.End;\n }\n break;\n\n case DeleteWordState.Text:\n if (deleteNext && space) {\n state = DeleteWordState.NonText;\n curr = iterator.next(true /*delete*/);\n } else if (text) {\n curr = iterator.next(true /*delete*/);\n } else {\n state = DeleteWordState.End;\n }\n break;\n\n case DeleteWordState.NonText:\n if (punctuation || !space) {\n state = DeleteWordState.End;\n } else {\n curr = iterator.next(true /*delete*/);\n }\n break;\n\n case DeleteWordState.Space:\n if (space) {\n curr = iterator.next(true /*delete*/);\n } else if (punctuation) {\n state = deleteNext ? DeleteWordState.NonText : DeleteWordState.Punctuation;\n curr = iterator.next(true /*delete*/);\n } else {\n state = deleteNext ? DeleteWordState.End : DeleteWordState.Text;\n }\n break;\n }\n }\n };\n}\n\nfunction* iterateSegments(\n paragraph: ContentModelParagraph,\n markerIndex: number,\n forward: boolean,\n context: DeleteSelectionContext\n): Generator {\n const step = forward ? 1 : -1;\n const segments = paragraph.segments;\n const preserveWhiteSpace = isWhiteSpacePreserved(paragraph);\n\n for (let i = markerIndex + step; i >= 0 && i < segments.length; i += step) {\n const segment = segments[i];\n\n switch (segment.segmentType) {\n case 'Text':\n for (\n let j = forward ? 0 : segment.text.length - 1;\n j >= 0 && j < segment.text.length;\n j += step\n ) {\n const c = segment.text[j];\n const punctuation = isPunctuation(c);\n const space = isSpace(c);\n const text = !punctuation && !space;\n\n if (yield { punctuation, space, text }) {\n let newText = segment.text;\n\n newText = newText.substring(0, j) + newText.substring(j + 1);\n\n if (!preserveWhiteSpace) {\n newText = normalizeText(newText, forward);\n }\n\n context.deleteResult = DeleteResult.Range;\n\n if (newText) {\n segment.text = newText;\n\n if (step > 0) {\n j -= step;\n }\n } else {\n segments.splice(i, 1);\n\n if (step > 0) {\n i -= step;\n }\n\n break;\n }\n }\n }\n break;\n\n case 'Image':\n if (\n yield { punctuation: true, space: false, text: false } // Treat image as punctuation since they have the same behavior.\n ) {\n segments.splice(i, 1);\n\n if (step > 0) {\n i -= step;\n }\n\n context.deleteResult = DeleteResult.Range;\n }\n break;\n\n case 'SelectionMarker':\n break;\n\n default:\n return null;\n }\n }\n\n return null;\n}\n\n/**\n * @internal\n */\nexport const forwardDeleteWordSelection = getDeleteWordSelection('forward');\n\n/**\n * @internal\n */\nexport const backwardDeleteWordSelection = getDeleteWordSelection('backward');\n","import { InsertPoint } from '../../../publicTypes/selection/InsertPoint';\nimport { TableSelectionContext } from '../../../publicTypes/selection/TableSelectionContext';\nimport {\n ContentModelBlockGroup,\n ContentModelParagraph,\n ContentModelSelectionMarker,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function createInsertPoint(\n marker: ContentModelSelectionMarker,\n paragraph: ContentModelParagraph,\n path: ContentModelBlockGroup[],\n tableContext: TableSelectionContext | undefined\n): InsertPoint {\n return {\n marker,\n paragraph,\n path,\n tableContext,\n };\n}\n","import { ContentModelBlock } from 'roosterjs-content-model-types';\nimport { EntityOperation } from 'roosterjs-editor-types';\nimport { OnDeleteEntity } from './DeleteSelectionStep';\n\n/**\n * @internal\n */\nexport function deleteBlock(\n blocks: ContentModelBlock[],\n blockToDelete: ContentModelBlock,\n onDeleteEntity: OnDeleteEntity,\n replacement?: ContentModelBlock,\n direction?: 'forward' | 'backward'\n): boolean {\n const index = blocks.indexOf(blockToDelete);\n\n switch (blockToDelete.blockType) {\n case 'Table':\n case 'Divider':\n replacement ? blocks.splice(index, 1, replacement) : blocks.splice(index, 1);\n return true;\n\n case 'Entity':\n const operation = blockToDelete.isSelected\n ? EntityOperation.Overwrite\n : direction == 'forward'\n ? EntityOperation.RemoveFromStart\n : direction == 'backward'\n ? EntityOperation.RemoveFromEnd\n : undefined;\n\n if (operation !== undefined && !onDeleteEntity(blockToDelete, operation)) {\n replacement ? blocks.splice(index, 1, replacement) : blocks.splice(index, 1);\n }\n\n return true;\n\n case 'BlockGroup':\n switch (blockToDelete.blockGroupType) {\n case 'General':\n if (replacement) {\n blocks.splice(index, 1, replacement);\n return true;\n } else {\n // no op, let browser handle it\n return false;\n }\n\n case 'ListItem':\n case 'FormatContainer':\n blocks.splice(index, 1);\n return true;\n }\n }\n\n return false;\n}\n","import { ContentModelDocument } from 'roosterjs-content-model-types';\nimport { createInsertPoint } from '../utils/createInsertPoint';\nimport { deleteBlock } from '../utils/deleteBlock';\nimport { DeleteResult, DeleteSelectionContext, OnDeleteEntity } from '../utils/DeleteSelectionStep';\nimport { deleteSegment } from '../utils/deleteSegment';\nimport { iterateSelections, IterateSelectionsOption } from '../../selection/iterateSelections';\nimport {\n createBr,\n createParagraph,\n createSelectionMarker,\n setParagraphNotImplicit,\n} from 'roosterjs-content-model-dom';\n\nconst DeleteSelectionIteratingOptions: IterateSelectionsOption = {\n contentUnderSelectedTableCell: 'ignoreForTableOrCell', // When a table cell is selected, we replace all content for this cell, so no need to go into its content\n contentUnderSelectedGeneralElement: 'generalElementOnly', // When a general element is selected, we replace the whole element so no need to go into its content\n includeListFormatHolder: 'never',\n};\n\n/**\n * @internal\n * Iterate the model and find all selected content if any, delete them, and keep/create an insert point\n * at the first deleted position so that we know where to put cursor to after delete\n */\nexport function deleteExpandedSelection(\n model: ContentModelDocument,\n onDeleteEntity: OnDeleteEntity\n): DeleteSelectionContext {\n const context: DeleteSelectionContext = {\n deleteResult: DeleteResult.NotDeleted,\n insertPoint: null,\n };\n\n iterateSelections(\n [model],\n (path, tableContext, block, segments) => {\n // Set paragraph, format and index for default position where we will put cursor to.\n // Later we can overwrite these info when process the selections\n let paragraph = createParagraph(\n true /*implicit*/,\n undefined /*blockFormat*/,\n model.format\n );\n let markerFormat = model.format;\n let insertMarkerIndex = 0;\n\n if (segments) {\n // Delete segments inside a paragraph\n if (segments[0] && block?.blockType == 'Paragraph') {\n // Now that we have found a paragraph with selections, we can overwrite the default paragraph with this one\n // so we can put cursor here after delete\n paragraph = block;\n insertMarkerIndex = paragraph.segments.indexOf(segments[0]);\n markerFormat = segments[0].format;\n\n context.lastParagraph = paragraph;\n context.lastTableContext = tableContext;\n\n segments.forEach((segment, i) => {\n if (\n i == 0 &&\n !context.insertPoint &&\n segment.segmentType == 'SelectionMarker'\n ) {\n // First time we hit a selection and it is a selection marker, just mark it and not need to delete\n // because this is possible a collapsed selection, then it will be handled later\n context.insertPoint = createInsertPoint(\n segment,\n block,\n path,\n tableContext\n );\n } else if (deleteSegment(block, segment, onDeleteEntity)) {\n context.deleteResult = DeleteResult.Range;\n }\n });\n\n // Since we are operating on this paragraph and it possible we delete everything from this paragraph,\n // Need to make it \"not implicit\" so that it will always have a container element, so that when we do normalization\n // of this paragraph, a BR can be added if need\n if (context.deleteResult == DeleteResult.Range) {\n setParagraphNotImplicit(block);\n }\n }\n } else if (block) {\n // Delete a whole block (divider, table, ...)\n const blocks = path[0].blocks;\n\n if (deleteBlock(blocks, block, onDeleteEntity, paragraph)) {\n context.deleteResult = DeleteResult.Range;\n }\n } else if (tableContext) {\n // Delete a whole table cell\n const { table, colIndex, rowIndex } = tableContext;\n const row = table.rows[rowIndex];\n const cell = row.cells[colIndex];\n\n path = [cell, ...path];\n paragraph.segments.push(createBr(model.format));\n cell.blocks = [paragraph];\n\n delete cell.cachedElement;\n delete row.cachedElement;\n context.deleteResult = DeleteResult.Range;\n }\n\n if (!context.insertPoint) {\n // If we have not got a insert point after delete and we have a paragraph to put an insert point in, create insert point now\n const marker = createSelectionMarker(markerFormat);\n\n setParagraphNotImplicit(paragraph);\n paragraph.segments.splice(insertMarkerIndex, 0, marker);\n context.insertPoint = createInsertPoint(marker, paragraph, path, tableContext);\n }\n },\n DeleteSelectionIteratingOptions\n );\n\n return context;\n}\n","import { ContentModelParagraph, ContentModelSegment } from 'roosterjs-content-model-types';\nimport { deleteSingleChar } from './deleteSingleChar';\nimport { EntityOperation } from 'roosterjs-editor-types';\nimport { OnDeleteEntity } from './DeleteSelectionStep';\nimport {\n isWhiteSpacePreserved,\n normalizeSingleSegment,\n normalizeText,\n} from 'roosterjs-content-model-dom';\n\n/**\n * @internal\n */\nexport function deleteSegment(\n paragraph: ContentModelParagraph,\n segmentToDelete: ContentModelSegment,\n onDeleteEntity: OnDeleteEntity,\n direction?: 'forward' | 'backward'\n): boolean {\n const segments = paragraph.segments;\n const index = segments.indexOf(segmentToDelete);\n const preserveWhiteSpace = isWhiteSpacePreserved(paragraph);\n const isForward = direction == 'forward';\n const isBackward = direction == 'backward';\n\n if (!preserveWhiteSpace) {\n normalizePreviousSegment(segments, index);\n }\n\n switch (segmentToDelete.segmentType) {\n case 'Br':\n case 'Image':\n case 'SelectionMarker':\n segments.splice(index, 1);\n return true;\n\n case 'Entity':\n const operation = segmentToDelete.isSelected\n ? EntityOperation.Overwrite\n : isForward\n ? EntityOperation.RemoveFromStart\n : isBackward\n ? EntityOperation.RemoveFromEnd\n : undefined;\n if (operation !== undefined && !onDeleteEntity(segmentToDelete, operation)) {\n segments.splice(index, 1);\n }\n\n return true;\n\n case 'Text':\n let text = segmentToDelete.text;\n\n if (text.length == 0 || segmentToDelete.isSelected) {\n segments.splice(index, 1);\n } else if (direction) {\n text = deleteSingleChar(text, isForward); // isForward ? text.substring(1) : text.substring(0, text.length - 1);\n\n if (!preserveWhiteSpace) {\n text = normalizeText(text, isForward);\n }\n\n if (text == '') {\n segments.splice(index, 1);\n } else {\n segmentToDelete.text = text;\n }\n }\n\n return true;\n\n case 'General':\n if (segmentToDelete.isSelected) {\n segments.splice(index, 1);\n return true;\n } else {\n // No op if a general segment is not selected, let browser handle general segment\n // TODO: Need to revisit this\n return false;\n }\n }\n}\n\nfunction normalizePreviousSegment(segments: ContentModelSegment[], currentIndex: number) {\n let index = currentIndex - 1;\n\n while (segments[index]?.segmentType == 'SelectionMarker') {\n index--;\n }\n\n const segment = segments[index];\n\n if (segment) {\n normalizeSingleSegment(segment);\n }\n}\n","/**\n * @internal\n */\nexport function deleteSingleChar(text: string, isForward: boolean) {\n // In case of emoji that occupies multiple characters, we need to delete the whole emoji\n const array = [...text];\n let deleteLength = 0;\n\n for (\n let i = isForward ? 0 : array.length - 1,\n deleteState: 'notDeleted' | 'waiting' | 'done' = 'notDeleted';\n i >= 0 && i < array.length && deleteState != 'done';\n i += isForward ? 1 : -1\n ) {\n switch (array[i]) {\n case '\\u200D': // ZERO WIDTH JOINER\n case '\\u20E3': // COMBINING ENCLOSING KEYCAP\n case '\\uFE0E': // VARIATION SELECTOR-15\n case '\\uFE0F': // VARIATION SELECTOR-16\n deleteState = 'notDeleted';\n deleteLength++;\n break;\n\n default:\n if (deleteState == 'notDeleted') {\n deleteState = 'waiting';\n deleteLength++;\n } else if (deleteState == 'waiting') {\n deleteState = 'done';\n }\n break;\n }\n }\n\n array.splice(isForward ? 0 : array.length - deleteLength, deleteLength);\n\n return array.join('');\n}\n","import { ContentModelSegmentFormat } from 'roosterjs-content-model-types';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { NodePosition } from 'roosterjs-editor-types';\n\n/**\n * @internal\n * Get pending segment format from editor if any, otherwise null\n * @param editor The editor to get format from\n */\nexport function getPendingFormat(editor: IContentModelEditor): ContentModelSegmentFormat | null {\n return getPendingFormatHolder(editor).format;\n}\n\n/**\n * @internal\n * Set pending segment format to editor\n * @param editor The editor to set pending format to\n * @param format The format to set.\n * @param position Cursor position when set this format\n */\nexport function setPendingFormat(\n editor: IContentModelEditor,\n format: ContentModelSegmentFormat,\n position: NodePosition\n) {\n const holder = getPendingFormatHolder(editor);\n\n holder.format = format;\n holder.position = position;\n}\n\n/**\n * @internal Clear pending format if any\n * @param editor The editor to set pending format to\n */\nexport function clearPendingFormat(editor: IContentModelEditor) {\n const holder = getPendingFormatHolder(editor);\n\n holder.format = null;\n holder.position = null;\n}\n\n/**\n * @internal\n * Check if this editor can apply pending format\n * @param editor The editor to get format from\n */\nexport function canApplyPendingFormat(editor: IContentModelEditor): boolean {\n const holder = getPendingFormatHolder(editor);\n let result = false;\n\n if (holder.format && holder.position) {\n const position = editor.getFocusedPosition();\n\n if (position?.equalTo(holder.position)) {\n result = true;\n }\n }\n\n return result;\n}\ninterface PendingFormatHolder {\n format: ContentModelSegmentFormat | null;\n position: NodePosition | null;\n}\n\nconst PendingFormatHolderKey = '__ContentModelPendingFormat';\n\nfunction getPendingFormatHolder(editor: IContentModelEditor): PendingFormatHolder {\n return editor.getCustomData(PendingFormatHolderKey, () => ({\n format: null,\n position: null,\n }));\n}\n","import { Border } from '../../publicTypes/interface/Border';\nimport { ContentModelImage } from 'roosterjs-content-model-types';\nimport { extractBorderValues } from '../../domUtils/borderValues';\nimport { parseValueWithUnit } from 'roosterjs-content-model-dom';\n\n/**\n * @internal\n */\nexport default function applyImageBorderFormat(\n image: ContentModelImage,\n border: Border | null,\n borderRadius?: string\n) {\n if (border) {\n const format = image.format;\n const { width, style, color } = border;\n const borderKey = 'borderTop';\n const extractedBorder = extractBorderValues(format[borderKey]);\n const borderColor = extractedBorder.color;\n const borderWidth = extractedBorder.width;\n const borderStyle = extractedBorder.style;\n let borderFormat = '';\n\n if (width) {\n borderFormat = parseValueWithUnit(width) + 'px';\n } else if (borderWidth) {\n borderFormat = borderWidth;\n } else {\n borderFormat = '1px';\n }\n\n if (style) {\n borderFormat = `${borderFormat} ${style}`;\n } else if (borderStyle) {\n borderFormat = `${borderFormat} ${borderStyle}`;\n } else {\n borderFormat = `${borderFormat} solid`;\n }\n\n if (color) {\n borderFormat = `${borderFormat} ${color}`;\n } else if (borderColor) {\n borderFormat = `${borderFormat} ${borderColor}`;\n }\n image.format.borderLeft = borderFormat;\n image.format.borderTop = borderFormat;\n image.format.borderBottom = borderFormat;\n image.format.borderRight = borderFormat;\n } else {\n delete image.format.borderLeft;\n delete image.format.borderTop;\n delete image.format.borderBottom;\n delete image.format.borderRight;\n }\n\n if (borderRadius) {\n image.format.borderRadius = borderRadius;\n }\n}\n","import {\n ContentModelBlockGroup,\n ContentModelDocument,\n ContentModelListItem,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function findListItemsInSameThread(\n model: ContentModelDocument,\n currentItem: ContentModelListItem\n): ContentModelListItem[] {\n const items: (ContentModelListItem | null)[] = [];\n\n findListItems(model, items);\n\n return filterListItems(items, currentItem);\n}\n\nfunction findListItems(group: ContentModelBlockGroup, result: (ContentModelListItem | null)[]) {\n group.blocks.forEach(block => {\n switch (block.blockType) {\n case 'BlockGroup':\n if (block.blockGroupType == 'ListItem') {\n result.push(block);\n } else {\n pushNullIfNecessary(result);\n findListItems(block, result);\n pushNullIfNecessary(result);\n }\n break;\n\n case 'Paragraph':\n pushNullIfNecessary(result);\n\n block.segments.forEach(segment => {\n if (segment.segmentType == 'General') {\n findListItems(segment, result);\n }\n });\n\n pushNullIfNecessary(result);\n break;\n\n case 'Table':\n pushNullIfNecessary(result);\n\n block.rows.forEach(row =>\n row.cells.forEach(cell => {\n findListItems(cell, result);\n })\n );\n pushNullIfNecessary(result);\n\n break;\n }\n });\n}\n\nfunction pushNullIfNecessary(result: (ContentModelListItem | null)[]) {\n const last = result[result.length - 1];\n\n if (!last || last !== null) {\n result.push(null);\n }\n}\n\nfunction filterListItems(\n items: (ContentModelListItem | null)[],\n currentItem: ContentModelListItem\n) {\n const result: ContentModelListItem[] = [];\n const currentIndex = items.indexOf(currentItem);\n const levelLength = currentItem.levels.length;\n const isOrderedList = currentItem.levels[levelLength - 1]?.listType == 'OL';\n\n if (currentIndex >= 0) {\n for (let i = currentIndex; i >= 0; i--) {\n const item = items[i];\n\n if (!item) {\n if (isOrderedList) {\n continue;\n } else {\n break;\n }\n }\n\n const startNumberOverride = hasStartNumberOverride(item, levelLength);\n\n if (areListTypesCompatible(items, currentIndex, i)) {\n result.unshift(item);\n\n if (isOrderedList && startNumberOverride) {\n break;\n }\n } else if (!isOrderedList || startNumberOverride) {\n break;\n }\n }\n\n for (let i = currentIndex + 1; i < items.length; i++) {\n const item = items[i];\n\n if (!item) {\n if (isOrderedList) {\n continue;\n } else {\n break;\n }\n }\n\n const startNumberOverride = hasStartNumberOverride(item, levelLength);\n\n if (areListTypesCompatible(items, currentIndex, i) && !startNumberOverride) {\n result.push(item);\n } else if (!isOrderedList || startNumberOverride) {\n break;\n }\n }\n }\n\n return result;\n}\n\nfunction areListTypesCompatible(\n listItems: (ContentModelListItem | null)[],\n currentIndex: number,\n compareToIndex: number\n): boolean {\n const currentLevels = listItems[currentIndex]!.levels;\n const compareToLevels = listItems[compareToIndex]!.levels;\n\n return (\n currentLevels.length <= compareToLevels.length &&\n currentLevels.every(\n (currentLevel, i) => currentLevel.listType == compareToLevels[i].listType\n )\n );\n}\n\nfunction hasStartNumberOverride(item: ContentModelListItem, levelLength: number): boolean {\n return item.levels.slice(0, levelLength).some(level => level.startNumberOverride !== undefined);\n}\n","import { getOperationalBlocks, OperationalBlocks } from '../selection/collectSelections';\nimport { isBlockGroupOfType } from '../common/isBlockGroupOfType';\nimport {\n createListItem,\n normalizeContentModel,\n setParagraphNotImplicit,\n} from 'roosterjs-content-model-dom';\nimport {\n ContentModelBlock,\n ContentModelDocument,\n ContentModelListItem,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function setListType(model: ContentModelDocument, listType: 'OL' | 'UL') {\n const paragraphOrListItems = getOperationalBlocks(\n model,\n ['ListItem'],\n [] // Set stop types to be empty so we can find list items even cross the boundary of table, then we can always operation on the list item if any\n );\n const alreadyInExpectedType = paragraphOrListItems.every(\n ({ block }) =>\n (isBlockGroupOfType(block, 'ListItem') &&\n block.levels[block.levels.length - 1]?.listType == listType) ||\n !shouldTurnOnList(paragraphOrListItems, block)\n );\n let existingListItems: ContentModelListItem[] = [];\n let hasIgnoredParagraphBefore = false;\n\n paragraphOrListItems.forEach(({ block, parent }, itemIndex) => {\n if (isBlockGroupOfType(block, 'ListItem')) {\n const level = block.levels.pop();\n\n if (!alreadyInExpectedType && level) {\n level.listType = listType;\n block.levels.push(level);\n } else if (block.blocks.length == 1) {\n setParagraphNotImplicit(block.blocks[0]);\n }\n } else {\n const index = parent.blocks.indexOf(block);\n\n if (index >= 0) {\n if (shouldTurnOnList(paragraphOrListItems, block)) {\n const prevBlock = parent.blocks[index - 1];\n const segmentFormat =\n (block.blockType == 'Paragraph' && block.segments[0]?.format) || {};\n const newListItem = createListItem(\n [\n {\n listType,\n startNumberOverride:\n itemIndex > 0 ||\n (prevBlock?.blockType == 'BlockGroup' &&\n prevBlock.blockGroupType == 'ListItem' &&\n prevBlock.levels[0]?.listType == 'OL')\n ? undefined\n : 1,\n direction: block.format.direction,\n textAlign: block.format.textAlign,\n marginTop: hasIgnoredParagraphBefore ? '0' : undefined,\n },\n ],\n // For list bullet, we only want to carry over these formats from segments:\n {\n fontFamily: segmentFormat.fontFamily,\n fontSize: segmentFormat.fontSize,\n textColor: segmentFormat.textColor,\n }\n );\n\n // Since there is only one paragraph under the list item, no need to keep its paragraph element (DIV).\n // TODO: Do we need to keep the CSS styles applied to original DIV?\n if (block.blockType == 'Paragraph') {\n block.isImplicit = true;\n }\n\n newListItem.blocks.push(block);\n\n parent.blocks.splice(index, 1, newListItem);\n existingListItems.push(newListItem);\n } else {\n hasIgnoredParagraphBefore = true;\n\n existingListItems.forEach(x => (x.levels[0].marginBottom = '0'));\n existingListItems = [];\n }\n }\n }\n });\n\n normalizeContentModel(model);\n\n return paragraphOrListItems.length > 0;\n}\n\nfunction shouldTurnOnList(\n blocks: OperationalBlocks[],\n block: ContentModelBlock\n): boolean {\n return (\n blocks.length == 1 ||\n (block.blockType == 'Paragraph' &&\n block.segments.length > 0 &&\n block.segments.some(x => x.segmentType != 'Br' && x.segmentType != 'SelectionMarker'))\n );\n}\n","import { ContentModelDocument, ContentModelSegment } from 'roosterjs-content-model-types';\nimport { getSelectedParagraphs } from './collectSelections';\nimport { setSelection } from './setSelection';\n\n/**\n * @internal\n */\nexport function adjustSegmentSelection(\n model: ContentModelDocument,\n firstMatcher: (target: ContentModelSegment) => boolean,\n siblingMatcher: (target: ContentModelSegment, ref: ContentModelSegment) => boolean\n): boolean {\n const paragraphs = getSelectedParagraphs(model);\n let first: ContentModelSegment | undefined;\n let last: ContentModelSegment | undefined;\n let changed = false;\n\n paragraphs.forEach(p => {\n const index = first ? 0 : p.segments.findIndex(x => firstMatcher(x));\n const segments = p.segments;\n\n if (!first) {\n first = segments[index];\n\n for (let i = index; i > 0; i--) {\n if (siblingMatcher(segments[i - 1], first)) {\n first = segments[i - 1];\n changed = changed || !segments[i - 1].isSelected;\n } else {\n changed = changed || !!segments[i - 1].isSelected;\n break;\n }\n }\n }\n\n if (first) {\n for (let i = index; i < p.segments.length; i++) {\n if (i == index || siblingMatcher(segments[i], last || segments[index])) {\n last = segments[i];\n changed = changed || !segments[i].isSelected;\n } else {\n changed = changed || !!segments[i].isSelected;\n break;\n }\n }\n }\n });\n\n if (first && last) {\n setSelection(model, first, last);\n }\n\n return changed;\n}\n","import { createText, isPunctuation, isSpace } from 'roosterjs-content-model-dom';\nimport { iterateSelections } from '../../modelApi/selection/iterateSelections';\nimport {\n ContentModelDocument,\n ContentModelParagraph,\n ContentModelSegment,\n ContentModelText,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function adjustWordSelection(\n model: ContentModelDocument,\n marker: ContentModelSegment\n): ContentModelSegment[] {\n let markerBlock: ContentModelParagraph | undefined;\n\n iterateSelections([model], (path, tableContext, block, segments) => {\n //Find the block with the selection marker\n if (block?.blockType == 'Paragraph' && segments?.length == 1 && segments[0] == marker) {\n markerBlock = block;\n }\n return true;\n });\n\n if (markerBlock) {\n const segments: ContentModelSegment[] = [];\n let markerSelectionIndex = markerBlock.segments.indexOf(marker);\n for (let i = markerSelectionIndex - 1; i >= 0; i--) {\n const currentSegment = markerBlock.segments[i];\n if (currentSegment.segmentType == 'Text') {\n const found = findDelimiter(currentSegment, false /*moveRightward*/);\n if (found > -1) {\n if (found == currentSegment.text.length) {\n break;\n }\n splitTextSegment(markerBlock.segments, currentSegment, i, found);\n segments.push(markerBlock.segments[i + 1]);\n break;\n } else {\n segments.push(markerBlock.segments[i]);\n }\n } else {\n break;\n }\n }\n markerSelectionIndex = markerBlock.segments.indexOf(marker);\n segments.push(marker);\n\n // Marker is at start of word\n if (segments.length <= 1) {\n return segments;\n }\n\n for (let i = markerSelectionIndex + 1; i < markerBlock.segments.length; i++) {\n const currentSegment = markerBlock.segments[i];\n if (currentSegment.segmentType == 'Text') {\n const found = findDelimiter(currentSegment, true /*moveRightward*/);\n if (found > -1) {\n if (found == 0) {\n break;\n }\n splitTextSegment(markerBlock.segments, currentSegment, i, found);\n segments.push(markerBlock.segments[i]);\n break;\n } else {\n segments.push(markerBlock.segments[i]);\n }\n } else {\n break;\n }\n }\n\n // Marker is at end of word\n if (segments[segments.length - 1] == marker) {\n return [marker];\n }\n\n return segments;\n } else {\n return [marker];\n }\n}\n\n/*\n// These are unicode characters mostly from the Category Space Separator (Zs)\nhttps://unicode.org/Public/UNIDATA/Scripts.txt\n\n\\u2000 = EN QUAD\n\\u2009 = THIN SPACE\n\\u200a = HAIR SPACE\n​\\u200b = ZERO WIDTH SPACE\n​\\u202f = NARROW NO-BREAK SPACE\n\\u205f​ = MEDIUM MATHEMATICAL SPACE\n\\u3000 = IDEOGRAPHIC SPACE\n*/\nfunction findDelimiter(segment: ContentModelText, moveRightward: boolean): number {\n const word = segment.text;\n let offset = -1;\n if (moveRightward) {\n for (let i = 0; i < word.length; i++) {\n const char = word[i];\n\n if (isPunctuation(char) || isSpace(char)) {\n offset = i;\n break;\n }\n }\n } else {\n for (let i = word.length - 1; i >= 0; i--) {\n const char = word[i];\n\n if (isPunctuation(char) || isSpace(char)) {\n offset = i + 1;\n break;\n }\n }\n }\n return offset;\n}\n\nfunction splitTextSegment(\n segments: ContentModelSegment[],\n textSegment: ContentModelText,\n index: number,\n found: number\n) {\n const text = textSegment.text;\n const newSegment = createText(text.substring(0, found), segments[index].format);\n\n if (textSegment.code) {\n newSegment.code = {\n format: { ...textSegment.code.format },\n };\n }\n\n if (textSegment.link) {\n newSegment.link = {\n format: { ...textSegment.link.format },\n dataset: { ...textSegment.link.dataset },\n };\n }\n\n textSegment.text = text.substring(found, text.length);\n segments.splice(index, 0, newSegment);\n}\n","import { addSegment, createSelectionMarker } from 'roosterjs-content-model-dom';\nimport { ContentModelTableRow } from 'roosterjs-content-model-types';\nimport { TableSelectionCoordinates } from '../table/getSelectedCells';\n\n/**\n * @internal\n */\nexport function collapseTableSelection(\n rows: ContentModelTableRow[],\n selection: TableSelectionCoordinates\n) {\n const { firstCol, firstRow } = selection;\n const cell = rows[firstRow]?.cells[firstCol];\n if (cell) {\n addSegment(cell, createSelectionMarker());\n }\n}\n","import { isBlockGroupOfType } from '../common/isBlockGroupOfType';\nimport { iterateSelections, IterateSelectionsOption } from './iterateSelections';\nimport { TableSelectionContext } from '../../publicTypes/selection/TableSelectionContext';\nimport {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelBlockGroupType,\n ContentModelDocument,\n ContentModelListItem,\n ContentModelParagraph,\n ContentModelSegment,\n ContentModelTable,\n} from 'roosterjs-content-model-types';\nimport {\n getClosestAncestorBlockGroupIndex,\n TypeOfBlockGroup,\n} from '../common/getClosestAncestorBlockGroupIndex';\n\n/**\n * @internal\n */\nexport type OperationalBlocks = {\n parent: ContentModelBlockGroup;\n block: ContentModelBlock | T;\n};\n\n/**\n * @internal\n */\nexport function getSelectedSegmentsAndParagraphs(\n model: ContentModelDocument,\n includingFormatHolder: boolean\n): [ContentModelSegment, ContentModelParagraph | null][] {\n const selections = collectSelections(model, {\n includeListFormatHolder: includingFormatHolder ? 'allSegments' : 'never',\n });\n const result: [ContentModelSegment, ContentModelParagraph | null][] = [];\n\n selections.forEach(({ segments, block }) => {\n if (segments && ((includingFormatHolder && !block) || block?.blockType == 'Paragraph')) {\n segments.forEach(segment => {\n if (segment.segmentType != 'Entity' || !segment.isReadonly) {\n result.push([segment, block?.blockType == 'Paragraph' ? block : null]);\n }\n });\n }\n });\n\n return result;\n}\n\n/**\n * @internal\n */\nexport function getSelectedSegments(\n model: ContentModelDocument,\n includingFormatHolder: boolean\n): ContentModelSegment[] {\n return getSelectedSegmentsAndParagraphs(model, includingFormatHolder).map(x => x[0]);\n}\n\n/**\n * @internal\n */\nexport function getSelectedParagraphs(model: ContentModelDocument): ContentModelParagraph[] {\n const selections = collectSelections(model, { includeListFormatHolder: 'never' });\n const result: ContentModelParagraph[] = [];\n\n removeUnmeaningfulSelections(selections);\n\n selections.forEach(({ block }) => {\n if (block?.blockType == 'Paragraph') {\n result.push(block);\n }\n });\n\n return result;\n}\n\n/**\n * @internal\n */\nexport function getOperationalBlocks(\n model: ContentModelDocument,\n blockGroupTypes: TypeOfBlockGroup[],\n stopTypes: ContentModelBlockGroupType[],\n deepFirst?: boolean\n): OperationalBlocks[] {\n const result: OperationalBlocks[] = [];\n const findSequence = deepFirst ? blockGroupTypes.map(type => [type]) : [blockGroupTypes];\n const selections = collectSelections(model, {\n includeListFormatHolder: 'never',\n contentUnderSelectedTableCell: 'ignoreForTable', // When whole table is selected, we treat the table as a single block\n });\n\n removeUnmeaningfulSelections(selections);\n\n selections.forEach(({ path, block }) => {\n for (let i = 0; i < findSequence.length; i++) {\n const groupIndex = getClosestAncestorBlockGroupIndex(path, findSequence[i], stopTypes);\n\n if (groupIndex >= 0) {\n if (result.filter(x => x.block == path[groupIndex]).length <= 0) {\n result.push({\n parent: path[groupIndex + 1],\n block: path[groupIndex] as T,\n });\n }\n break;\n } else if (i == findSequence.length - 1 && block) {\n result.push({\n parent: path[0],\n block: block,\n });\n break;\n }\n }\n });\n\n return result;\n}\n\n/**\n * @internal\n */\nexport function getFirstSelectedTable(model: ContentModelDocument): ContentModelTable | undefined {\n const selections = collectSelections(model, { includeListFormatHolder: 'never' });\n let table: ContentModelTable | undefined;\n\n removeUnmeaningfulSelections(selections);\n\n selections.forEach(({ block, tableContext }) => {\n if (!table) {\n table = block?.blockType == 'Table' ? block : tableContext?.table;\n }\n });\n\n return table;\n}\n\n/**\n * @internal\n */\nexport function getFirstSelectedListItem(\n model: ContentModelDocument\n): ContentModelListItem | undefined {\n let listItem: ContentModelListItem | undefined;\n\n getOperationalBlocks(model, ['ListItem'], ['TableCell']).forEach(r => {\n if (!listItem && isBlockGroupOfType(r.block, 'ListItem')) {\n listItem = r.block;\n }\n });\n\n return listItem;\n}\n\ninterface SelectionInfo {\n path: ContentModelBlockGroup[];\n segments?: ContentModelSegment[];\n block?: ContentModelBlock;\n tableContext?: TableSelectionContext;\n}\n\nfunction collectSelections(\n model: ContentModelDocument,\n option?: IterateSelectionsOption\n): SelectionInfo[] {\n const selections: SelectionInfo[] = [];\n\n iterateSelections(\n [model],\n (path, tableContext, block, segments) => {\n selections.push({\n path,\n tableContext,\n block,\n segments,\n });\n },\n option\n );\n\n return selections;\n}\n\nfunction removeUnmeaningfulSelections(selections: SelectionInfo[]) {\n if (\n selections.length > 1 &&\n isOnlySelectionMarkerSelected(selections, false /*checkFirstParagraph*/)\n ) {\n selections.pop();\n }\n\n // Remove head paragraph if first selection marker is the only selection\n if (\n selections.length > 1 &&\n isOnlySelectionMarkerSelected(selections, true /*checkFirstParagraph*/)\n ) {\n selections.shift();\n }\n}\n\nfunction isOnlySelectionMarkerSelected(\n selections: SelectionInfo[],\n checkFirstParagraph: boolean\n): boolean {\n const selection = selections[checkFirstParagraph ? 0 : selections.length - 1];\n\n if (\n selection.block?.blockType == 'Paragraph' &&\n selection.segments &&\n selection.segments.length > 0\n ) {\n const allSegments = selection.block.segments;\n const segment = selection.segments[0];\n\n return (\n selection.segments.length == 1 &&\n segment.segmentType == 'SelectionMarker' &&\n segment == allSegments[checkFirstParagraph ? allSegments.length - 1 : 0]\n );\n } else {\n return false;\n }\n}\n","import { TableSelectionContext } from '../../publicTypes/selection/TableSelectionContext';\nimport {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelBlockWithCache,\n ContentModelSegment,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport interface IterateSelectionsOption {\n /**\n * For selected table cell, this property determines how do we handle its content.\n * include: No matter if table cell is selected, always invoke callback function for selected content (default value)\n * ignoreForTable: When the whole table is selected we invoke callback for the table (using block parameter) but skip\n * all its cells and content, otherwise keep invoking callback for table cell and content\n * ignoreForTableOrCell: If whole table is selected, same with ignoreForTable, or if a table cell is selected, only\n * invoke callback for the table cell itself but not for its content, otherwise keep invoking callback for content.\n * @default include\n */\n contentUnderSelectedTableCell?: 'include' | 'ignoreForTable' | 'ignoreForTableOrCell';\n\n /**\n * For a selected general element, this property determines how do we handle its content.\n * contentOnly: (Default) When the whole general element is selected, we only invoke callback for its selected content\n * generalElementOnly: When the whole general element is selected, we only invoke callback for the general element (using block or\n * segment parameter depends on if it is a block or segment), but skip all its content.\n * both: When general element is selected, we invoke callback first for its content, then for general element itself\n */\n contentUnderSelectedGeneralElement?: 'contentOnly' | 'generalElementOnly' | 'both';\n\n /**\n * Whether call the callback for the list item format holder segment\n * anySegment: call the callback if any segment is selected under a list item\n * allSegments: call the callback only when all segments under the list item are selected\n * never: never call the callback for list item format holder\n * @default allSegments\n */\n includeListFormatHolder?: 'anySegment' | 'allSegments' | 'never';\n}\n\n/**\n * @internal\n * @returns True to stop iterating, otherwise keep going\n */\nexport type IterateSelectionsCallback = (\n path: ContentModelBlockGroup[],\n tableContext?: TableSelectionContext,\n block?: ContentModelBlock,\n segments?: ContentModelSegment[]\n) => void | boolean;\n\n/**\n * @internal\n * @returns True to stop iterating, otherwise keep going\n */\nexport function iterateSelections(\n path: ContentModelBlockGroup[],\n callback: IterateSelectionsCallback,\n option?: IterateSelectionsOption,\n table?: TableSelectionContext,\n treatAllAsSelect?: boolean\n) {\n const internalCallback: IterateSelectionsCallback = (path, tableContext, block, segments) => {\n if (!!(block as ContentModelBlockWithCache)?.cachedElement) {\n // TODO: This is a temporary solution. A better solution would be making all results from iterationSelection() to be readonly,\n // use a util function to change it to be editable before edit them where we clear its cached element\n delete (block as ContentModelBlockWithCache).cachedElement;\n }\n\n return callback(path, tableContext, block, segments);\n };\n\n internalIterateSelections(path, internalCallback, option, table, treatAllAsSelect);\n}\n\nfunction internalIterateSelections(\n path: ContentModelBlockGroup[],\n callback: IterateSelectionsCallback,\n option?: IterateSelectionsOption,\n table?: TableSelectionContext,\n treatAllAsSelect?: boolean\n): boolean {\n const parent = path[0];\n const includeListFormatHolder = option?.includeListFormatHolder || 'allSegments';\n const contentUnderSelectedTableCell = option?.contentUnderSelectedTableCell || 'include';\n const contentUnderSelectedGeneralElement =\n option?.contentUnderSelectedGeneralElement || 'contentOnly';\n\n let hasSelectedSegment = false;\n let hasUnselectedSegment = false;\n\n for (let i = 0; i < parent.blocks.length; i++) {\n const block = parent.blocks[i];\n\n switch (block.blockType) {\n case 'BlockGroup':\n const newPath = [block, ...path];\n\n if (block.blockGroupType == 'General') {\n const isSelected = treatAllAsSelect || block.isSelected;\n const handleGeneralContent =\n !isSelected ||\n contentUnderSelectedGeneralElement == 'both' ||\n contentUnderSelectedGeneralElement == 'contentOnly';\n const handleGeneralElement =\n isSelected &&\n (contentUnderSelectedGeneralElement == 'both' ||\n contentUnderSelectedGeneralElement == 'generalElementOnly' ||\n block.blocks.length == 0);\n\n if (\n (handleGeneralContent &&\n internalIterateSelections(\n newPath,\n callback,\n option,\n table,\n isSelected\n )) ||\n (handleGeneralElement && callback(path, table, block))\n ) {\n return true;\n }\n } else if (\n internalIterateSelections(newPath, callback, option, table, treatAllAsSelect)\n ) {\n return true;\n }\n break;\n\n case 'Table':\n const rows = block.rows;\n const isWholeTableSelected = rows.every(row =>\n row.cells.every(cell => cell.isSelected)\n );\n\n if (contentUnderSelectedTableCell != 'include' && isWholeTableSelected) {\n if (callback(path, table, block)) {\n return true;\n }\n } else {\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n const row = rows[rowIndex];\n\n for (let colIndex = 0; colIndex < row.cells.length; colIndex++) {\n const cell = row.cells[colIndex];\n if (!cell) {\n continue;\n }\n\n const newTable: TableSelectionContext = {\n table: block,\n rowIndex,\n colIndex,\n isWholeTableSelected,\n };\n\n if (cell.isSelected && callback(path, newTable)) {\n return true;\n }\n\n if (\n !cell.isSelected ||\n contentUnderSelectedTableCell != 'ignoreForTableOrCell'\n ) {\n const newPath = [cell, ...path];\n const isSelected = treatAllAsSelect || cell.isSelected;\n\n if (\n internalIterateSelections(\n newPath,\n callback,\n option,\n newTable,\n isSelected\n )\n ) {\n return true;\n }\n }\n }\n }\n }\n\n break;\n\n case 'Paragraph':\n const segments: ContentModelSegment[] = [];\n\n for (let i = 0; i < block.segments.length; i++) {\n const segment = block.segments[i];\n const isSelected = treatAllAsSelect || segment.isSelected;\n\n if (segment.segmentType == 'General') {\n const handleGeneralContent =\n !isSelected ||\n contentUnderSelectedGeneralElement == 'both' ||\n contentUnderSelectedGeneralElement == 'contentOnly';\n const handleGeneralElement =\n isSelected &&\n (contentUnderSelectedGeneralElement == 'both' ||\n contentUnderSelectedGeneralElement == 'generalElementOnly' ||\n segment.blocks.length == 0);\n\n if (\n handleGeneralContent &&\n internalIterateSelections(\n [segment, ...path],\n callback,\n option,\n table,\n isSelected\n )\n ) {\n return true;\n }\n\n if (handleGeneralElement) {\n segments.push(segment);\n }\n } else if (isSelected) {\n segments.push(segment);\n }\n\n if (isSelected) {\n hasSelectedSegment = true;\n } else {\n hasUnselectedSegment = true;\n }\n }\n\n if (segments.length > 0 && callback(path, table, block, segments)) {\n return true;\n }\n break;\n\n case 'Divider':\n case 'Entity':\n if ((treatAllAsSelect || block.isSelected) && callback(path, table, block)) {\n return true;\n }\n\n break;\n }\n }\n\n if (\n includeListFormatHolder != 'never' &&\n parent.blockGroupType == 'ListItem' &&\n hasSelectedSegment &&\n (!hasUnselectedSegment || includeListFormatHolder == 'anySegment') &&\n // When whole list item is selected, also add its format holder as selected segment\n callback(path, table, undefined /*block*/, [parent.formatHolder])\n ) {\n return true;\n }\n\n return false;\n}\n","import { Coordinates } from 'roosterjs-editor-types';\nimport { isGeneralSegment } from 'roosterjs-content-model-dom';\nimport {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelSegment,\n ContentModelTable,\n Selectable,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function setSelection(group: ContentModelBlockGroup, start?: Selectable, end?: Selectable) {\n setSelectionToBlockGroup(group, false /*isInSelection*/, start || null, end || null);\n}\n\nfunction setSelectionToBlockGroup(\n group: ContentModelBlockGroup,\n isInSelection: boolean,\n start: Selectable | null,\n end: Selectable | null\n): boolean {\n return handleSelection(isInSelection, group, start, end, isInSelection => {\n if (isGeneralSegment(group)) {\n setIsSelected(group, isInSelection);\n }\n\n group.blocks.forEach(block => {\n isInSelection = setSelectionToBlock(block, isInSelection, start, end);\n });\n\n return isInSelection;\n });\n}\n\nfunction setSelectionToBlock(\n block: ContentModelBlock,\n isInSelection: boolean,\n start: Selectable | null,\n end: Selectable | null\n) {\n switch (block.blockType) {\n case 'BlockGroup':\n return setSelectionToBlockGroup(block, isInSelection, start, end);\n\n case 'Table':\n return setSelectionToTable(block, isInSelection, start, end);\n\n case 'Divider':\n case 'Entity':\n return handleSelection(isInSelection, block, start, end, isInSelection => {\n if (isInSelection) {\n block.isSelected = true;\n } else {\n delete block.isSelected;\n }\n\n return isInSelection;\n });\n\n case 'Paragraph':\n const segmentsToDelete: number[] = [];\n\n block.segments.forEach((segment, i) => {\n isInSelection = handleSelection(\n isInSelection,\n segment,\n start,\n end,\n isInSelection => {\n return setSelectionToSegment(\n segment,\n isInSelection,\n segmentsToDelete,\n start,\n end,\n i\n );\n }\n );\n });\n\n while (segmentsToDelete.length > 0) {\n const index = segmentsToDelete.pop()!;\n\n if (index >= 0) {\n block.segments.splice(index, 1);\n }\n }\n\n return isInSelection;\n\n default:\n return isInSelection;\n }\n}\n\nfunction setSelectionToTable(\n table: ContentModelTable,\n isInSelection: boolean,\n start: Selectable | null,\n end: Selectable | null\n): boolean {\n const startCo = findCell(table, start);\n const endCo = end ? findCell(table, end) : startCo;\n\n if (!isInSelection && startCo && endCo) {\n for (let row = 0; row < table.rows.length; row++) {\n for (let col = 0; col < table.rows[row].cells.length; col++) {\n const isSelected =\n row >= startCo.y && row <= endCo.y && col >= startCo.x && col <= endCo.x;\n\n setIsSelected(table.rows[row].cells[col], isSelected);\n }\n }\n } else {\n table.rows.forEach(row =>\n row.cells.forEach(cell => {\n isInSelection = setSelectionToBlockGroup(cell, isInSelection, start, end);\n })\n );\n }\n\n return isInSelection;\n}\n\nfunction findCell(table: ContentModelTable, cell: Selectable | null): Coordinates | undefined {\n let x = -1;\n let y = -1;\n\n if (cell) {\n for (let row = 0; y < 0 && row < table.rows.length; row++) {\n for (let col = 0; x < 0 && col < table.rows[row].cells.length; col++) {\n if (table.rows[row].cells[col] == cell) {\n x = col;\n y = row;\n }\n }\n }\n }\n\n return x >= 0 && y >= 0 ? { x, y } : undefined;\n}\n\nfunction setSelectionToSegment(\n segment: ContentModelSegment,\n isInSelection: boolean,\n segmentsToDelete: number[],\n start: Selectable | null,\n end: Selectable | null,\n i: number\n) {\n switch (segment.segmentType) {\n case 'SelectionMarker':\n if (!isInSelection || (segment != start && segment != end)) {\n // Delete the selection marker when\n // 1. It is not in selection any more. Or\n // 2. It is in middle of selection, so no need to have it\n segmentsToDelete.push(i);\n }\n return isInSelection;\n\n case 'General':\n setIsSelected(segment, isInSelection);\n\n return segment != start && segment != end\n ? setSelectionToBlockGroup(segment, isInSelection, start, end)\n : isInSelection;\n\n case 'Image':\n setIsSelected(segment, isInSelection);\n segment.isSelectedAsImageSelection = start == segment && (!end || end == segment);\n return isInSelection;\n default:\n setIsSelected(segment, isInSelection);\n return isInSelection;\n }\n}\n\nfunction setIsSelected(selectable: Selectable, value: boolean) {\n if (value) {\n selectable.isSelected = true;\n } else {\n delete selectable.isSelected;\n }\n\n return value;\n}\n\nfunction handleSelection(\n isInSelection: boolean,\n model: ContentModelBlockGroup | ContentModelBlock | ContentModelSegment,\n start: Selectable | null,\n end: Selectable | null,\n callback: (isInSelection: boolean) => boolean\n) {\n isInSelection = isInSelection || model == start;\n isInSelection = callback(isInSelection);\n return isInSelection && !!end && model != end;\n}\n","import { ContentModelTable } from 'roosterjs-content-model-types';\nimport { TableOperation } from 'roosterjs-editor-types';\nimport type { CompatibleTableOperation } from 'roosterjs-editor-types/lib/compatibleTypes';\n\n/**\n * @internal\n */\nexport function alignTable(\n table: ContentModelTable,\n operation:\n | TableOperation.AlignCenter\n | TableOperation.AlignLeft\n | TableOperation.AlignRight\n | CompatibleTableOperation.AlignCenter\n | CompatibleTableOperation.AlignLeft\n | CompatibleTableOperation.AlignRight\n) {\n table.format.marginLeft = operation == TableOperation.AlignLeft ? '' : 'auto';\n table.format.marginRight = operation == TableOperation.AlignRight ? '' : 'auto';\n\n delete table.cachedElement;\n}\n","import { ContentModelTable } from 'roosterjs-content-model-types';\nimport { getSelectedCells } from './getSelectedCells';\nimport { TableOperation } from 'roosterjs-editor-types';\nimport type { CompatibleTableOperation } from 'roosterjs-editor-types/lib/compatibleTypes';\n\nconst TextAlignValueMap: Partial> = {\n [TableOperation.AlignCellLeft]: 'start',\n [TableOperation.AlignCellCenter]: 'center',\n [TableOperation.AlignCellRight]: 'end',\n};\n\nconst VerticalAlignValueMap: Partial> = {\n [TableOperation.AlignCellTop]: 'top',\n [TableOperation.AlignCellMiddle]: 'middle',\n [TableOperation.AlignCellBottom]: 'bottom',\n};\n\n/**\n * @internal\n */\nexport function alignTableCell(\n table: ContentModelTable,\n operation:\n | TableOperation.AlignCellCenter\n | TableOperation.AlignCellLeft\n | TableOperation.AlignCellRight\n | TableOperation.AlignCellTop\n | TableOperation.AlignCellMiddle\n | TableOperation.AlignCellBottom\n | CompatibleTableOperation.AlignCellCenter\n | CompatibleTableOperation.AlignCellLeft\n | CompatibleTableOperation.AlignCellRight\n | CompatibleTableOperation.AlignCellTop\n | CompatibleTableOperation.AlignCellMiddle\n | CompatibleTableOperation.AlignCellBottom\n) {\n const sel = getSelectedCells(table);\n\n if (sel) {\n const textAlign = TextAlignValueMap[operation];\n const verticalAlign = VerticalAlignValueMap[operation];\n\n for (let rowIndex = sel.firstRow; rowIndex <= sel.lastRow; rowIndex++) {\n for (let colIndex = sel.firstCol; colIndex <= sel.lastCol; colIndex++) {\n const cell = table.rows[rowIndex]?.cells[colIndex];\n const format = cell?.format;\n\n if (format) {\n delete cell.cachedElement;\n\n format.textAlign = textAlign || format.textAlign;\n format.verticalAlign = verticalAlign || format.verticalAlign;\n }\n }\n }\n }\n}\n","import { BorderKeys } from 'roosterjs-content-model-dom';\nimport { combineBorderValue, extractBorderValues } from '../../domUtils/borderValues';\nimport { setTableCellBackgroundColor } from './setTableCellBackgroundColor';\nimport { TableBorderFormat } from 'roosterjs-editor-types';\nimport { updateTableCellMetadata } from '../../domUtils/metadata/updateTableCellMetadata';\nimport { updateTableMetadata } from '../../domUtils/metadata/updateTableMetadata';\nimport {\n BorderFormat,\n ContentModelTable,\n ContentModelTableRow,\n TableMetadataFormat,\n} from 'roosterjs-content-model-types';\n\nconst DEFAULT_FORMAT: Required = {\n topBorderColor: '#ABABAB',\n bottomBorderColor: '#ABABAB',\n verticalBorderColor: '#ABABAB',\n hasHeaderRow: false,\n hasFirstColumn: false,\n hasBandedRows: false,\n hasBandedColumns: false,\n bgColorEven: null,\n bgColorOdd: '#ABABAB20',\n headerRowColor: '#ABABAB',\n tableBorderFormat: TableBorderFormat.DEFAULT,\n};\n\n/**\n * @internal\n */\nexport function applyTableFormat(\n table: ContentModelTable,\n newFormat?: TableMetadataFormat,\n keepCellShade?: boolean\n) {\n const { rows } = table;\n\n updateTableMetadata(table, format => {\n const effectiveMetadata = {\n ...DEFAULT_FORMAT,\n ...format,\n ...(newFormat || {}),\n };\n\n const bgColorOverrides = updateBgColorOverrides(rows, !keepCellShade);\n\n delete table.cachedElement;\n\n clearCache(rows);\n formatBorders(rows, effectiveMetadata);\n formatBackgroundColors(rows, effectiveMetadata, bgColorOverrides);\n setFirstColumnFormat(rows, effectiveMetadata, bgColorOverrides);\n setHeaderRowFormat(rows, effectiveMetadata, bgColorOverrides);\n\n return effectiveMetadata;\n });\n}\n\nfunction clearCache(rows: ContentModelTableRow[]) {\n rows.forEach(row => {\n row.cells.forEach(cell => {\n delete cell.cachedElement;\n });\n\n delete row.cachedElement;\n });\n}\n\nfunction updateBgColorOverrides(rows: ContentModelTableRow[], forceClear: boolean): boolean[][] {\n const result: boolean[][] = [];\n\n rows.forEach(row => {\n const currentRow: boolean[] = [];\n\n result.push(currentRow);\n\n row.cells.forEach(cell => {\n updateTableCellMetadata(cell, metadata => {\n if (metadata && forceClear) {\n currentRow.push(false);\n delete metadata.bgColorOverride;\n } else {\n currentRow.push(!!metadata?.bgColorOverride);\n }\n\n return metadata;\n });\n });\n });\n\n return result;\n}\n\ntype ShouldUseTransparentBorder = (indexProp: {\n firstRow: boolean;\n lastRow: boolean;\n firstColumn: boolean;\n lastColumn: boolean;\n}) => [boolean, boolean, boolean, boolean];\n\nconst BorderFormatters: Record = {\n [TableBorderFormat.DEFAULT]: _ => [false, false, false, false],\n [TableBorderFormat.LIST_WITH_SIDE_BORDERS]: ({ lastColumn, firstColumn }) => [\n false,\n !lastColumn,\n false,\n !firstColumn,\n ],\n [TableBorderFormat.FIRST_COLUMN_HEADER_EXTERNAL]: ({\n firstColumn,\n firstRow,\n lastColumn,\n lastRow,\n }) => [\n !firstRow,\n (!lastColumn && !firstColumn) || (firstColumn && firstRow),\n !lastRow && !firstRow,\n !firstColumn,\n ],\n [TableBorderFormat.NO_HEADER_BORDERS]: ({ firstRow, firstColumn, lastColumn }) => [\n firstRow,\n firstRow || lastColumn,\n false,\n firstRow || firstColumn,\n ],\n [TableBorderFormat.NO_SIDE_BORDERS]: ({ firstColumn, lastColumn }) => [\n false,\n lastColumn,\n false,\n firstColumn,\n ],\n [TableBorderFormat.ESPECIAL_TYPE_1]: ({ firstRow, firstColumn }) => [\n firstColumn && !firstRow,\n firstRow,\n firstColumn && !firstRow,\n firstRow && !firstColumn,\n ],\n [TableBorderFormat.ESPECIAL_TYPE_2]: ({ firstRow, firstColumn }) => [\n !firstRow,\n firstRow || !firstColumn,\n !firstRow,\n !firstColumn,\n ],\n [TableBorderFormat.ESPECIAL_TYPE_3]: ({ firstColumn, firstRow }) => [\n true,\n firstRow || !firstColumn,\n !firstRow,\n true,\n ],\n [TableBorderFormat.CLEAR]: () => [true, true, true, true],\n};\n\nfunction formatBorders(rows: ContentModelTableRow[], format: TableMetadataFormat) {\n rows.forEach((row, rowIndex) => {\n row.cells.forEach((cell, cellIndex) => {\n const transparentBorderMatrix = BorderFormatters[\n format.tableBorderFormat as TableBorderFormat\n ]({\n firstRow: rowIndex === 0,\n lastRow: rowIndex === rows.length - 1,\n firstColumn: cellIndex === 0,\n lastColumn: cellIndex === row.cells.length - 1,\n });\n\n const formatColor = [\n format.topBorderColor,\n format.verticalBorderColor,\n format.bottomBorderColor,\n format.verticalBorderColor,\n ];\n\n transparentBorderMatrix.forEach((alwaysUseTransparent, i) => {\n const borderColor = (!alwaysUseTransparent && formatColor[i]) || '';\n\n cell.format[BorderKeys[i]] = combineBorderValue({\n style: getBorderStyleFromColor(borderColor),\n width: '1px',\n color: borderColor,\n });\n });\n });\n });\n}\n\nfunction formatBackgroundColors(\n rows: ContentModelTableRow[],\n format: TableMetadataFormat,\n bgColorOverrides: boolean[][]\n) {\n const { hasBandedRows, hasBandedColumns, bgColorOdd, bgColorEven } = format;\n\n rows.forEach((row, rowIndex) => {\n row.cells.forEach((cell, colIndex) => {\n if (!bgColorOverrides[rowIndex][colIndex]) {\n const color =\n hasBandedRows || hasBandedColumns\n ? (hasBandedColumns && colIndex % 2 != 0) ||\n (hasBandedRows && rowIndex % 2 != 0)\n ? bgColorOdd\n : bgColorEven\n : bgColorEven;\n\n setTableCellBackgroundColor(cell, color);\n }\n });\n });\n}\n\nfunction setFirstColumnFormat(\n rows: ContentModelTableRow[],\n format: Partial,\n bgColorOverrides: boolean[][]\n) {\n rows.forEach((row, rowIndex) => {\n row.cells.forEach((cell, cellIndex) => {\n if (format.hasFirstColumn && cellIndex === 0) {\n cell.isHeader = true;\n\n if (rowIndex !== 0 && !bgColorOverrides[rowIndex][cellIndex]) {\n setBorderColor(cell.format, 'borderTop');\n setTableCellBackgroundColor(cell, null /*color*/);\n }\n\n if (rowIndex !== rows.length - 1 && rowIndex !== 0) {\n setBorderColor(cell.format, 'borderBottom');\n }\n } else {\n cell.isHeader = false;\n }\n });\n });\n}\n\nfunction setHeaderRowFormat(\n rows: ContentModelTableRow[],\n format: TableMetadataFormat,\n bgColorOverrides: boolean[][]\n) {\n const rowIndex = 0;\n\n rows[rowIndex]?.cells.forEach((cell, cellIndex) => {\n cell.isHeader = format.hasHeaderRow;\n\n if (format.hasHeaderRow && format.headerRowColor) {\n if (!bgColorOverrides[rowIndex][cellIndex]) {\n setTableCellBackgroundColor(cell, format.headerRowColor);\n }\n\n setBorderColor(cell.format, 'borderTop', format.headerRowColor);\n setBorderColor(cell.format, 'borderRight', format.headerRowColor);\n setBorderColor(cell.format, 'borderLeft', format.headerRowColor);\n }\n });\n}\n\nfunction setBorderColor(format: BorderFormat, key: keyof BorderFormat, value?: string) {\n const border = extractBorderValues(format[key]);\n border.color = value || '';\n border.style = getBorderStyleFromColor(border.color);\n format[key] = combineBorderValue(border);\n}\n\nfunction getBorderStyleFromColor(color?: string): string {\n return !color || color == 'transparent' ? 'none' : 'solid';\n}\n","import { ContentModelTableRow } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function canMergeCells(\n rows: ContentModelTableRow[],\n firstRow: number,\n firstCol: number,\n lastRow: number,\n lastCol: number\n): boolean {\n const noSpanAbove =\n firstCol == lastCol ||\n rows[firstRow].cells.every(\n (cell, colIndex) => colIndex < firstCol || colIndex > lastCol || !cell.spanAbove\n );\n const noSpanLeft =\n firstRow == lastRow ||\n rows.every(\n (row, rowIndex) =>\n rowIndex < firstRow || rowIndex > lastRow || !row.cells[firstCol].spanLeft\n );\n\n const noDifferentBelowSpan = rows[lastRow].cells\n .map((_, colIndex) =>\n colIndex >= firstCol && colIndex <= lastCol\n ? getBelowSpanCount(rows, lastRow, colIndex)\n : -1\n )\n .every((x, _, a) => x < 0 || x == a[firstCol]);\n const noDifferentRightSpan = rows\n .map((_, rowIndex) =>\n rowIndex >= firstRow && rowIndex <= lastRow\n ? getRightSpanCount(rows, rowIndex, lastCol)\n : -1\n )\n .every((x, _, a) => x < 0 || x == a[firstRow]);\n\n return noSpanAbove && noSpanLeft && noDifferentBelowSpan && noDifferentRightSpan;\n}\n\nfunction getBelowSpanCount(rows: ContentModelTableRow[], rowIndex: number, colIndex: number) {\n let spanCount = 0;\n\n for (let row = rowIndex + 1; row < rows.length; row++) {\n if (rows[row]?.cells[colIndex]?.spanAbove) {\n spanCount++;\n } else {\n break;\n }\n }\n\n return spanCount;\n}\n\nfunction getRightSpanCount(rows: ContentModelTableRow[], rowIndex: number, colIndex: number) {\n let spanCount = 0;\n\n for (let col = colIndex + 1; col < rows[rowIndex]?.cells.length; col++) {\n if (rows[rowIndex]?.cells[col]?.spanLeft) {\n spanCount++;\n } else {\n break;\n }\n }\n\n return spanCount;\n}\n","import { addBlock, createTable, createTableCell } from 'roosterjs-content-model-dom';\nimport { ContentModelBlockGroup, ContentModelTable } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function createTableStructure(\n parent: ContentModelBlockGroup,\n columns: number,\n rows: number\n): ContentModelTable {\n const table = createTable(rows);\n\n addBlock(parent, table);\n\n table.rows.forEach(row => {\n for (let i = 0; i < columns; i++) {\n const cell = createTableCell();\n\n row.cells.push(cell);\n }\n });\n\n return table;\n}\n","import { ContentModelTable } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function deleteTable(table: ContentModelTable) {\n table.rows = [];\n delete table.cachedElement;\n}\n","import { collapseTableSelection } from '../selection/collapseTableSelection';\nimport { ContentModelTable } from 'roosterjs-content-model-types';\nimport { getSelectedCells } from './getSelectedCells';\n\n/**\n * @internal\n */\nexport function deleteTableColumn(table: ContentModelTable) {\n const sel = getSelectedCells(table);\n\n if (sel) {\n for (let rowIndex = 0; rowIndex < table.rows.length; rowIndex++) {\n const cellInNextCol = table.rows[rowIndex].cells[sel.lastCol + 1];\n\n if (cellInNextCol) {\n cellInNextCol.spanLeft =\n cellInNextCol.spanLeft && table.rows[rowIndex].cells[sel.firstCol].spanLeft;\n }\n\n table.rows[rowIndex].cells.splice(sel.firstCol, sel.lastCol - sel.firstCol + 1);\n }\n\n table.widths.splice(sel.firstCol, sel.lastCol - sel.firstCol + 1);\n collapseTableSelection(table.rows, sel);\n }\n}\n","import { collapseTableSelection } from '../selection/collapseTableSelection';\nimport { ContentModelTable } from 'roosterjs-content-model-types';\nimport { getSelectedCells } from './getSelectedCells';\n\n/**\n * @internal\n */\nexport function deleteTableRow(table: ContentModelTable) {\n const sel = getSelectedCells(table);\n\n if (sel) {\n table.rows[sel.firstRow].cells.forEach((cell, colIndex) => {\n const cellInNextRow = table.rows[sel.lastRow + 1]?.cells[colIndex];\n\n if (cellInNextRow) {\n cellInNextRow.spanAbove = cellInNextRow.spanAbove && cell.spanAbove;\n }\n });\n\n table.rows.splice(sel.firstRow, sel.lastRow - sel.firstRow + 1);\n\n collapseTableSelection(table.rows, sel);\n }\n}\n","import hasSelectionInBlockGroup from '../../publicApi/selection/hasSelectionInBlockGroup';\nimport { ContentModelTable } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport interface TableSelectionCoordinates {\n firstRow: number;\n firstCol: number;\n lastRow: number;\n lastCol: number;\n}\n\n/**\n * @internal\n */\nexport function getSelectedCells(table: ContentModelTable): TableSelectionCoordinates | null {\n let firstRow = -1;\n let firstCol = -1;\n let lastRow = -1;\n let lastCol = -1;\n let hasSelection = false;\n\n table.rows.forEach((row, rowIndex) =>\n row.cells.forEach((cell, colIndex) => {\n if (hasSelectionInBlockGroup(cell)) {\n hasSelection = true;\n\n if (firstRow < 0) {\n firstRow = rowIndex;\n }\n\n if (firstCol < 0) {\n firstCol = colIndex;\n }\n\n lastRow = Math.max(lastRow, rowIndex);\n lastCol = Math.max(lastCol, colIndex);\n }\n })\n );\n\n return hasSelection ? { firstRow, firstCol, lastRow, lastCol } : null;\n}\n","import { ContentModelTable } from 'roosterjs-content-model-types';\nimport { createTableCell } from 'roosterjs-content-model-dom';\nimport { getSelectedCells } from './getSelectedCells';\nimport { TableOperation } from 'roosterjs-editor-types';\nimport type { CompatibleTableOperation } from 'roosterjs-editor-types/lib/compatibleTypes';\n\n/**\n * @internal\n */\nexport function insertTableColumn(\n table: ContentModelTable,\n operation:\n | TableOperation.InsertLeft\n | TableOperation.InsertRight\n | CompatibleTableOperation.InsertLeft\n | CompatibleTableOperation.InsertRight\n) {\n const sel = getSelectedCells(table);\n const insertLeft = operation == TableOperation.InsertLeft;\n\n if (sel) {\n for (let i = sel?.firstCol; i <= sel.lastCol; i++) {\n table.rows.forEach(row => {\n const cell = row.cells[insertLeft ? sel.firstCol : sel.lastCol];\n\n row.cells.splice(\n insertLeft ? sel.firstCol : sel.lastCol + 1,\n 0,\n createTableCell(cell.spanLeft, cell.spanAbove, cell.isHeader, cell.format)\n );\n });\n table.widths.splice(\n insertLeft ? sel.firstCol : sel.lastCol + 1,\n 0,\n table.widths[insertLeft ? sel.firstCol : sel.lastCol]\n );\n }\n }\n}\n","import { ContentModelTable } from 'roosterjs-content-model-types';\nimport { createTableCell } from 'roosterjs-content-model-dom';\nimport { getSelectedCells } from './getSelectedCells';\nimport { TableOperation } from 'roosterjs-editor-types';\nimport type { CompatibleTableOperation } from 'roosterjs-editor-types/lib/compatibleTypes';\n\n/**\n * @internal\n */\nexport function insertTableRow(\n table: ContentModelTable,\n operation:\n | TableOperation.InsertAbove\n | TableOperation.InsertBelow\n | CompatibleTableOperation.InsertAbove\n | CompatibleTableOperation.InsertBelow\n) {\n const sel = getSelectedCells(table);\n const insertAbove = operation == TableOperation.InsertAbove;\n\n if (sel) {\n for (let i = sel.firstRow; i <= sel.lastRow; i++) {\n const sourceRow = table.rows[insertAbove ? sel.firstRow : sel.lastRow];\n\n table.rows.splice(insertAbove ? sel.firstRow : sel.lastRow + 1, 0, {\n format: { ...sourceRow.format },\n cells: sourceRow.cells.map(cell =>\n createTableCell(cell.spanLeft, cell.spanAbove, cell.isHeader, cell.format)\n ),\n height: sourceRow.height,\n });\n }\n }\n}\n","import { canMergeCells } from './canMergeCells';\nimport { getSelectedCells } from './getSelectedCells';\nimport { ContentModelTable } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function mergeTableCells(table: ContentModelTable) {\n const sel = getSelectedCells(table);\n\n if (sel && canMergeCells(table.rows, sel.firstRow, sel.firstCol, sel.lastRow, sel.lastCol)) {\n for (let rowIndex = sel.firstRow; rowIndex <= sel.lastRow; rowIndex++) {\n for (let colIndex = sel.firstCol; colIndex <= sel.lastCol; colIndex++) {\n const cell = table.rows[rowIndex].cells[colIndex];\n\n if (cell) {\n cell.spanLeft = colIndex > sel.firstCol;\n cell.spanAbove = rowIndex > sel.firstRow;\n\n delete cell.cachedElement;\n }\n }\n\n delete table.rows[rowIndex].cachedElement;\n }\n }\n}\n","import { canMergeCells } from './canMergeCells';\nimport { ContentModelTable } from 'roosterjs-content-model-types';\nimport { getSelectedCells } from './getSelectedCells';\nimport { TableOperation } from 'roosterjs-editor-types';\nimport type { CompatibleTableOperation } from 'roosterjs-editor-types/lib/compatibleTypes';\n\n/**\n * @internal\n */\nexport function mergeTableColumn(\n table: ContentModelTable,\n operation:\n | TableOperation.MergeLeft\n | TableOperation.MergeRight\n | CompatibleTableOperation.MergeLeft\n | CompatibleTableOperation.MergeRight\n) {\n const sel = getSelectedCells(table);\n const mergeLeft = operation == TableOperation.MergeLeft;\n\n if (sel) {\n const mergingColIndex = mergeLeft ? sel.firstCol : sel.lastCol + 1;\n\n if (mergingColIndex > 0 && mergingColIndex < table.rows[0].cells.length) {\n for (let rowIndex = sel.firstRow; rowIndex <= sel.lastRow; rowIndex++) {\n const cell = table.rows[rowIndex]?.cells[mergingColIndex];\n\n if (\n cell &&\n canMergeCells(\n table.rows,\n rowIndex,\n mergingColIndex - 1,\n rowIndex,\n mergingColIndex\n )\n ) {\n cell.spanLeft = true;\n\n let newSelectedCol = mergingColIndex;\n\n while (table.rows[rowIndex]?.cells[newSelectedCol]?.spanLeft) {\n delete table.rows[rowIndex].cells[newSelectedCol].cachedElement;\n newSelectedCol--;\n }\n\n if (table.rows[rowIndex]?.cells[newSelectedCol]) {\n table.rows[rowIndex].cells[newSelectedCol].isSelected = true;\n\n delete table.rows[rowIndex].cells[newSelectedCol].cachedElement;\n }\n\n delete cell.cachedElement;\n }\n\n delete table.rows[rowIndex].cachedElement;\n }\n }\n }\n}\n","import { canMergeCells } from './canMergeCells';\nimport { ContentModelTable } from 'roosterjs-content-model-types';\nimport { getSelectedCells } from './getSelectedCells';\nimport { TableOperation } from 'roosterjs-editor-types';\nimport type { CompatibleTableOperation } from 'roosterjs-editor-types/lib/compatibleTypes';\n\n/**\n * @internal\n */\nexport function mergeTableRow(\n table: ContentModelTable,\n operation:\n | TableOperation.MergeAbove\n | TableOperation.MergeBelow\n | CompatibleTableOperation.MergeAbove\n | CompatibleTableOperation.MergeBelow\n) {\n const sel = getSelectedCells(table);\n const mergeAbove = operation == TableOperation.MergeAbove;\n\n if (sel) {\n const mergingRowIndex = mergeAbove ? sel.firstRow : sel.lastRow + 1;\n\n if (mergingRowIndex > 0 && mergingRowIndex < table.rows.length) {\n for (let colIndex = sel.firstCol; colIndex <= sel.lastCol; colIndex++) {\n const cell = table.rows[mergingRowIndex].cells[colIndex];\n\n if (\n cell &&\n canMergeCells(\n table.rows,\n mergingRowIndex - 1,\n colIndex,\n mergingRowIndex,\n colIndex\n )\n ) {\n cell.spanAbove = true;\n\n let newSelectedRow = mergingRowIndex;\n\n while (table.rows[newSelectedRow]?.cells[colIndex]?.spanAbove) {\n delete table.rows[newSelectedRow].cells[colIndex].cachedElement;\n delete table.rows[newSelectedRow].cachedElement;\n newSelectedRow--;\n }\n\n if (table.rows[newSelectedRow]?.cells[colIndex]) {\n table.rows[newSelectedRow].cells[colIndex].isSelected = true;\n\n delete table.rows[newSelectedRow].cells[colIndex].cachedElement;\n delete table.rows[newSelectedRow].cachedElement;\n }\n\n delete cell.cachedElement;\n }\n }\n }\n }\n}\n","import { addSegment, createBr } from 'roosterjs-content-model-dom';\nimport { arrayPush } from 'roosterjs-editor-dom';\nimport {\n ContentModelSegment,\n ContentModelSegmentFormat,\n ContentModelTable,\n ContentModelTableCell,\n} from 'roosterjs-content-model-types';\n\nconst MIN_HEIGHT = 22;\n\n/**\n * @internal\n */\nexport function normalizeTable(\n table: ContentModelTable,\n defaultSegmentFormat?: ContentModelSegmentFormat\n) {\n // Always collapse border and use border box for table in roosterjs to make layout simpler\n const format = table.format;\n\n if (!format.borderCollapse || !format.useBorderBox) {\n format.borderCollapse = true;\n format.useBorderBox = true;\n }\n\n // Make sure all first cells are not spanned\n // Make sure all inner cells are not header\n // Make sure all cells have content and width\n table.rows.forEach((row, rowIndex) => {\n row.cells.forEach((cell, colIndex) => {\n if (cell.blocks.length == 0) {\n addSegment(cell, createBr(defaultSegmentFormat));\n }\n\n if (rowIndex == 0) {\n cell.spanAbove = false;\n } else if (rowIndex > 0 && cell.isHeader) {\n cell.isHeader = false;\n delete cell.cachedElement;\n }\n\n if (colIndex == 0) {\n cell.spanLeft = false;\n }\n\n cell.format.useBorderBox = true;\n });\n\n // Make sure table has correct width and height array\n if (row.height < MIN_HEIGHT) {\n row.height = MIN_HEIGHT;\n }\n });\n\n const columns = Math.max(...table.rows.map(row => row.cells.length));\n\n for (let i = 0; i < columns; i++) {\n if (table.widths[i] === undefined) {\n table.widths[i] = getTableCellWidth(columns);\n }\n }\n\n // Move blocks from spanned cell to its main cell if any,\n // and remove rows/columns if all cells in it are spanned\n const colCount = table.rows[0]?.cells.length || 0;\n\n for (let colIndex = colCount - 1; colIndex > 0; colIndex--) {\n table.rows.forEach(row => {\n const cell = row.cells[colIndex];\n const leftCell = row.cells[colIndex - 1];\n if (cell && leftCell && cell.spanLeft) {\n tryMoveBlocks(leftCell, cell);\n }\n });\n\n if (table.rows.every(row => row.cells[colIndex]?.spanLeft)) {\n table.rows.forEach(row => row.cells.splice(colIndex, 1));\n table.widths.splice(\n colIndex - 1,\n 2,\n table.widths[colIndex - 1] + table.widths[colIndex]\n );\n }\n }\n\n for (let rowIndex = table.rows.length - 1; rowIndex > 0; rowIndex--) {\n const row = table.rows[rowIndex];\n\n row.cells.forEach((cell, colIndex) => {\n const aboveCell = table.rows[rowIndex - 1]?.cells[colIndex];\n if (aboveCell && cell.spanAbove) {\n tryMoveBlocks(aboveCell, cell);\n }\n });\n\n if (row.cells.every(cell => cell.spanAbove)) {\n table.rows[rowIndex - 1].height += row.height;\n table.rows.splice(rowIndex, 1);\n }\n }\n}\n\nfunction getTableCellWidth(columns: number): number {\n if (columns <= 4) {\n return 120;\n } else if (columns <= 6) {\n return 100;\n } else {\n return 70;\n }\n}\n\nfunction tryMoveBlocks(targetCell: ContentModelTableCell, sourceCell: ContentModelTableCell) {\n const onlyHasEmptyOrBr = sourceCell.blocks.every(\n block => block.blockType == 'Paragraph' && hasOnlyBrSegment(block.segments)\n );\n\n if (!onlyHasEmptyOrBr) {\n arrayPush(targetCell.blocks, sourceCell.blocks);\n sourceCell.blocks = [];\n }\n}\n\nfunction hasOnlyBrSegment(segments: ContentModelSegment[]): boolean {\n segments = segments.filter(s => s.segmentType != 'SelectionMarker');\n\n return segments.length == 0 || (segments.length == 1 && segments[0].segmentType == 'Br');\n}\n","import { ContentModelTableCell } from 'roosterjs-content-model-types';\nimport { parseColor } from 'roosterjs-editor-dom';\nimport { updateTableCellMetadata } from '../../domUtils/metadata/updateTableCellMetadata';\n\n// Using the HSL (hue, saturation and lightness) representation for RGB color values.\n// If the value of the lightness is less than 20, the color is dark.\n// If the value of the lightness is more than 80, the color is bright\nconst DARK_COLORS_LIGHTNESS = 20;\nconst BRIGHT_COLORS_LIGHTNESS = 80;\nconst White = '#ffffff';\nconst Black = '#000000';\n\n/**\n * @internal\n */\nexport function setTableCellBackgroundColor(\n cell: ContentModelTableCell,\n color: string | null | undefined,\n isColorOverride?: boolean\n) {\n if (color) {\n cell.format.backgroundColor = color;\n\n if (isColorOverride) {\n updateTableCellMetadata(cell, metadata => {\n metadata = metadata || {};\n metadata.bgColorOverride = true;\n return metadata;\n });\n }\n\n const lightness = calculateLightness(color);\n\n if (lightness < DARK_COLORS_LIGHTNESS) {\n cell.format.textColor = White;\n } else if (lightness > BRIGHT_COLORS_LIGHTNESS) {\n cell.format.textColor = Black;\n } else {\n delete cell.format.textColor;\n }\n } else {\n delete cell.format.backgroundColor;\n delete cell.format.textColor;\n }\n\n delete cell.cachedElement;\n}\n\nfunction calculateLightness(color: string) {\n const colorValues = parseColor(color);\n\n // Use the values of r,g,b to calculate the lightness in the HSl representation\n //First calculate the fraction of the light in each color, since in css the value of r,g,b is in the interval of [0,255], we have\n if (colorValues) {\n const red = colorValues[0] / 255;\n const green = colorValues[1] / 255;\n const blue = colorValues[2] / 255;\n\n //Then the lightness in the HSL representation is the average between maximum fraction of r,g,b and the minimum fraction\n return (Math.max(red, green, blue) + Math.min(red, green, blue)) * 50;\n } else {\n return 255;\n }\n}\n","import { ContentModelTable } from 'roosterjs-content-model-types';\nimport { createTableCell } from 'roosterjs-content-model-dom';\nimport { getSelectedCells } from './getSelectedCells';\n\nconst MIN_WIDTH = 30;\n\n/**\n * @internal\n */\nexport function splitTableCellHorizontally(table: ContentModelTable) {\n const sel = getSelectedCells(table);\n\n if (sel) {\n for (let colIndex = sel.lastCol; colIndex >= sel.firstCol; colIndex--) {\n if (\n table.rows.every(\n (row, rowIndex) =>\n rowIndex < sel.firstRow ||\n rowIndex > sel.lastRow ||\n row.cells[colIndex + 1]?.spanLeft\n )\n ) {\n table.rows.forEach((row, rowIndex) => {\n delete row.cells[colIndex].cachedElement;\n\n if (rowIndex >= sel.firstRow && rowIndex <= sel.lastRow) {\n row.cells[colIndex + 1].spanLeft = false;\n delete row.cells[colIndex + 1].cachedElement;\n }\n });\n } else {\n table.rows.forEach((row, rowIndex) => {\n const cell = row.cells[colIndex];\n if (cell) {\n const newCell = createTableCell(\n cell.spanLeft,\n cell.spanAbove,\n cell.isHeader,\n cell.format\n );\n\n newCell.dataset = { ...cell.dataset };\n\n if (rowIndex < sel.firstRow || rowIndex > sel.lastRow) {\n newCell.spanLeft = true;\n } else {\n newCell.isSelected = cell.isSelected;\n }\n row.cells.splice(colIndex + 1, 0, newCell);\n\n delete row.cells[colIndex].cachedElement;\n }\n });\n\n const newWidth = Math.max(table.widths[colIndex] / 2, MIN_WIDTH);\n\n table.widths.splice(colIndex, 1, newWidth, newWidth);\n }\n }\n }\n}\n","import { ContentModelTable, ContentModelTableRow } from 'roosterjs-content-model-types';\nimport { createTableCell } from 'roosterjs-content-model-dom';\nimport { getSelectedCells } from './getSelectedCells';\n\nconst MIN_HEIGHT = 22;\n\n/**\n * @internal\n */\nexport function splitTableCellVertically(table: ContentModelTable) {\n const sel = getSelectedCells(table);\n\n if (sel) {\n for (let rowIndex = sel.lastRow; rowIndex >= sel.firstRow; rowIndex--) {\n const row = table.rows[rowIndex];\n const belowRow = table.rows[rowIndex + 1];\n\n row.cells.forEach(cell => {\n delete cell.cachedElement;\n });\n\n delete row.cachedElement;\n\n if (\n belowRow?.cells.every(\n (belowCell, colIndex) =>\n colIndex < sel.firstCol || colIndex > sel.lastCol || belowCell.spanAbove\n )\n ) {\n belowRow.cells.forEach((belowCell, colIndex) => {\n if (colIndex >= sel.firstCol && colIndex <= sel.lastCol) {\n belowCell.spanAbove = false;\n delete belowCell.cachedElement;\n }\n });\n\n delete belowRow.cachedElement;\n } else {\n const newHeight = Math.max((row.height /= 2), MIN_HEIGHT);\n const newRow: ContentModelTableRow = {\n format: { ...row.format },\n height: newHeight,\n cells: row.cells.map((cell, colIndex) => {\n const newCell = createTableCell(\n cell.spanLeft,\n cell.spanAbove,\n cell.isHeader,\n cell.format\n );\n\n newCell.dataset = { ...cell.dataset };\n\n if (colIndex < sel.firstCol || colIndex > sel.lastCol) {\n newCell.spanAbove = true;\n } else {\n newCell.isSelected = cell.isSelected;\n }\n\n return newCell;\n }),\n };\n\n row.height = newHeight;\n table.rows.splice(rowIndex + 1, 0, newRow);\n }\n }\n }\n}\n","import { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { setModelAlignment } from '../../modelApi/block/setModelAlignment';\n\n/**\n * Set text alignment of selected paragraphs\n * @param editor The editor to set alignment\n * @param alignment Alignment value: left, center or right\n */\nexport default function setAlignment(\n editor: IContentModelEditor,\n alignment: 'left' | 'center' | 'right'\n) {\n formatWithContentModel(editor, 'setAlignment', model => setModelAlignment(model, alignment));\n}\n","import { formatParagraphWithContentModel } from '../utils/formatParagraphWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Set text direction of selected paragraphs (Left to right or Right to left)\n * @param editor The editor to set alignment\n * @param direction Direction value: ltr (Left to right) or rtl (Right to left)\n */\nexport default function setDirection(editor: IContentModelEditor, direction: 'ltr' | 'rtl') {\n formatParagraphWithContentModel(editor, 'setDirection', para => {\n const isOldValueRtl = para.format.direction == 'rtl';\n const isNewValueRtl = direction == 'rtl';\n\n if (isOldValueRtl != isNewValueRtl) {\n para.format.direction = direction;\n\n // Adjust margin when change direction\n // TODO: make margin and padding direction-aware, like what we did for textAlign. So no need to adjust them here\n // TODO: Do we also need to handle border here?\n const marginLeft = para.format.marginLeft;\n const paddingLeft = para.format.paddingLeft;\n\n para.format.marginLeft = para.format.marginRight;\n para.format.marginRight = marginLeft;\n\n para.format.paddingLeft = para.format.paddingRight;\n para.format.paddingRight = paddingLeft;\n }\n });\n}\n","import { defaultImplicitFormatMap } from 'roosterjs-content-model-dom';\nimport { formatParagraphWithContentModel } from '../utils/formatParagraphWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport {\n ContentModelParagraphDecorator,\n ContentModelSegmentFormat,\n} from 'roosterjs-content-model-types';\n\ntype HeaderLevelTags = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\n/**\n * Set header level of selected paragraphs\n * @param editor The editor to set header level to\n * @param headerLevel Level of header, from 1 to 6. Set to 0 means set it back to a regular paragraph\n */\nexport default function setHeaderLevel(\n editor: IContentModelEditor,\n headerLevel: 0 | 1 | 2 | 3 | 4 | 5 | 6\n) {\n formatParagraphWithContentModel(editor, 'setHeaderLevel', para => {\n const tagName =\n headerLevel > 0\n ? (('h' + headerLevel) as HeaderLevelTags | null)\n : getExistingHeaderHeaderTag(para.decorator);\n const headerStyle =\n (tagName && (defaultImplicitFormatMap[tagName] as ContentModelSegmentFormat)) || {};\n\n if (headerLevel > 0) {\n para.decorator = {\n tagName: tagName!,\n format: { ...headerStyle },\n };\n\n // Remove existing formats since tags have default font size and weight\n para.segments.forEach(segment => {\n delete segment.format.fontSize;\n delete segment.format.fontWeight;\n });\n } else if (tagName) {\n delete para.decorator;\n }\n });\n}\n\nfunction getExistingHeaderHeaderTag(\n decorator?: ContentModelParagraphDecorator\n): HeaderLevelTags | null {\n const tag = decorator?.tagName || '';\n const level = parseInt(tag.substring(1));\n\n return level >= 1 && level <= 6 ? (tag as HeaderLevelTags) : null;\n}\n","import { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { setModelIndentation } from '../../modelApi/block/setModelIndentation';\n\n/**\n * Indent or outdent to selected paragraphs\n * @param editor The editor to operate on\n * @param indentation Whether indent or outdent\n * @param length The length of pixel to indent/outdent @default 40\n */\nexport default function setIndentation(\n editor: IContentModelEditor,\n indentation: 'indent' | 'outdent',\n length?: number\n) {\n formatWithContentModel(\n editor,\n 'setIndentation',\n model => setModelIndentation(model, indentation, length),\n {\n preservePendingFormat: true,\n }\n );\n}\n","import { createParagraphDecorator } from 'roosterjs-content-model-dom';\nimport { formatParagraphWithContentModel } from '../utils/formatParagraphWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Toggles the current block(s) margin properties.\n * null deletes any existing value, undefined is ignored\n * @param editor The editor to operate on\n * @param marginTop value for top margin\n * @param marginBottom value for bottom margin\n */\nexport default function setParagraphMargin(\n editor: IContentModelEditor,\n marginTop?: string | null,\n marginBottom?: string | null\n) {\n formatParagraphWithContentModel(editor, 'setParagraphMargin', para => {\n if (!para.decorator) {\n para.decorator = createParagraphDecorator('p');\n }\n\n if (marginTop) {\n para.format.marginTop = marginTop;\n } else if (marginTop === null) {\n delete para.format.marginTop;\n }\n\n if (marginBottom) {\n para.format.marginBottom = marginBottom;\n } else if (marginBottom === null) {\n delete para.format.marginBottom;\n }\n });\n}\n","import { formatParagraphWithContentModel } from '../utils/formatParagraphWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Sets current selected block(s) line-height property and wipes such property from child segments\n * @param editor The editor to operate on\n * @param spacing Unitless/px value to set line height\n */\nexport default function setSpacing(editor: IContentModelEditor, spacing: number | string) {\n formatParagraphWithContentModel(editor, 'setSpacing', paragraph => {\n paragraph.format.lineHeight = spacing.toString();\n paragraph.segments.forEach(segment => {\n if (segment.format.lineHeight) {\n delete segment.format.lineHeight;\n }\n });\n });\n}\n","import { ContentModelFormatContainerFormat } from 'roosterjs-content-model-types';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { toggleModelBlockQuote } from '../../modelApi/block/toggleModelBlockQuote';\n\nconst DefaultQuoteFormat: ContentModelFormatContainerFormat = {\n borderLeft: '3px solid rgb(200, 200, 200)', // TODO: Support RTL\n textColor: 'rgb(102, 102, 102)',\n};\nconst BuildInQuoteFormat: ContentModelFormatContainerFormat = {\n marginTop: '1em',\n marginBottom: '1em',\n marginLeft: '40px',\n marginRight: '40px',\n paddingLeft: '10px',\n};\n\n/**\n * Toggle BLOCKQUOTE state of selected paragraphs.\n * If any selected paragraph is not under a BLOCKQUOTE, wrap them into a BLOCKQUOTE.\n * Otherwise, unwrap all related BLOCKQUOTEs.\n * @param editor The editor object to toggle BLOCKQUOTE onto\n * @param quoteFormat @optional Block format for the new quote object\n */\nexport default function toggleBlockQuote(\n editor: IContentModelEditor,\n quoteFormat: ContentModelFormatContainerFormat = DefaultQuoteFormat\n) {\n const fullQuoteFormat = {\n ...BuildInQuoteFormat,\n ...quoteFormat,\n };\n\n formatWithContentModel(\n editor,\n 'toggleBlockQuote',\n model => toggleModelBlockQuote(model, fullQuoteFormat),\n {\n preservePendingFormat: true,\n }\n );\n}\n","import { Browser } from 'roosterjs-editor-dom';\nimport { ChangeSource, EntityOperationEvent, Keys } from 'roosterjs-editor-types';\nimport { deleteAllSegmentBefore } from '../../modelApi/edit/deleteSteps/deleteAllSegmentBefore';\nimport { deleteSelection } from '../../modelApi/edit/deleteSelection';\nimport { DeleteSelectionStep } from '../../modelApi/edit/utils/DeleteSelectionStep';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport {\n getOnDeleteEntityCallback,\n handleKeyboardEventResult,\n shouldDeleteAllSegmentsBefore,\n shouldDeleteWord,\n} from '../../editor/utils/handleKeyboardEventCommon';\nimport {\n backwardDeleteWordSelection,\n forwardDeleteWordSelection,\n} from '../../modelApi/edit/deleteSteps/deleteWordSelection';\nimport {\n backwardDeleteCollapsedSelection,\n forwardDeleteCollapsedSelection,\n} from '../../modelApi/edit/deleteSteps/deleteCollapsedSelection';\n\n/**\n * @internal\n * Handle KeyDown event\n * Currently only DELETE and BACKSPACE keys are supported\n */\nexport default function handleKeyDownEvent(\n editor: IContentModelEditor,\n rawEvent: KeyboardEvent,\n triggeredEntityEvents: EntityOperationEvent[]\n) {\n const which = rawEvent.which;\n\n formatWithContentModel(\n editor,\n which == Keys.DELETE ? 'handleDeleteKey' : 'handleBackspaceKey',\n model => {\n const result = deleteSelection(\n model,\n getOnDeleteEntityCallback(editor, rawEvent, triggeredEntityEvents),\n getDeleteSteps(rawEvent)\n ).deleteResult;\n\n return handleKeyboardEventResult(editor, model, rawEvent, result);\n },\n {\n skipUndoSnapshot: true, // No need to add undo snapshot for each key down event. We will trigger a ContentChanged event and let UndoPlugin decide when to add undo snapshot\n changeSource: ChangeSource.Keyboard,\n getChangeData: () => which,\n }\n );\n}\n\nfunction getDeleteSteps(rawEvent: KeyboardEvent): (DeleteSelectionStep | null)[] {\n const isForward = rawEvent.which == Keys.DELETE;\n const deleteAllSegmentBeforeStep =\n shouldDeleteAllSegmentsBefore(rawEvent) && !isForward ? deleteAllSegmentBefore : null;\n const deleteWordSelection = shouldDeleteWord(rawEvent, !!Browser.isMac)\n ? isForward\n ? forwardDeleteWordSelection\n : backwardDeleteWordSelection\n : null;\n const deleteCollapsedSelection = isForward\n ? forwardDeleteCollapsedSelection\n : backwardDeleteCollapsedSelection;\n return [deleteAllSegmentBeforeStep, deleteWordSelection, deleteCollapsedSelection];\n}\n","import { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getPendingFormat } from '../../modelApi/format/pendingFormat';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { iterateSelections } from '../../modelApi/selection/iterateSelections';\nimport {\n createText,\n normalizeContentModel,\n setParagraphNotImplicit,\n} from 'roosterjs-content-model-dom';\n\nconst ANSI_SPACE = '\\u0020';\nconst NON_BREAK_SPACE = '\\u00A0';\n\n/**\n * Apply pending format to the text user just input\n * @param editor The editor to get format from\n * @param data The text user just input\n */\nexport default function applyPendingFormat(editor: IContentModelEditor, data: string) {\n const format = getPendingFormat(editor);\n\n if (format) {\n let isChanged = false;\n\n formatWithContentModel(\n editor,\n 'applyPendingFormat',\n model => {\n iterateSelections([model], (_, __, block, segments) => {\n if (\n block?.blockType == 'Paragraph' &&\n segments?.length == 1 &&\n segments[0].segmentType == 'SelectionMarker'\n ) {\n const marker = segments[0];\n const index = block.segments.indexOf(marker);\n const previousSegment = block.segments[index - 1];\n\n if (previousSegment?.segmentType == 'Text') {\n const text = previousSegment.text;\n const subStr = text.substr(-data.length, data.length);\n\n // For space, there can be (space) or   ( ), we treat them as the same\n if (\n subStr == data ||\n (data == ANSI_SPACE && subStr == NON_BREAK_SPACE)\n ) {\n marker.format = { ...format };\n previousSegment.text = text.substring(0, text.length - data.length);\n\n const newText = createText(\n data == ANSI_SPACE ? NON_BREAK_SPACE : data,\n {\n ...previousSegment.format,\n ...format,\n }\n );\n\n block.segments.splice(index, 0, newText);\n setParagraphNotImplicit(block);\n isChanged = true;\n }\n }\n }\n return true;\n });\n\n if (isChanged) {\n normalizeContentModel(model);\n }\n\n return isChanged;\n },\n {\n skipUndoSnapshot: true,\n }\n );\n }\n}\n","import { clearModelFormat } from '../../modelApi/common/clearModelFormat';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { normalizeContentModel } from 'roosterjs-content-model-dom';\nimport {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelSegment,\n ContentModelTable,\n} from 'roosterjs-content-model-types';\n\n/**\n * Clear format of selection\n * @param editor The editor to clear format from\n */\nexport default function clearFormat(editor: IContentModelEditor) {\n formatWithContentModel(editor, 'clearFormat', model => {\n const blocksToClear: [ContentModelBlockGroup[], ContentModelBlock][] = [];\n const segmentsToClear: ContentModelSegment[] = [];\n const tablesToClear: [ContentModelTable, boolean][] = [];\n\n clearModelFormat(model, blocksToClear, segmentsToClear, tablesToClear);\n\n normalizeContentModel(model);\n\n return blocksToClear.length > 0 || segmentsToClear.length > 0 || tablesToClear.length > 0;\n });\n}\n","import { FormatState } from 'roosterjs-editor-types';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getPendingFormat } from '../../modelApi/format/pendingFormat';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { retrieveModelFormatState } from '../../modelApi/common/retrieveModelFormatState';\n\n/**\n * Get current format state\n * @param editor The editor to get format from\n */\nexport default function getFormatState(editor: IContentModelEditor): FormatState {\n let result: FormatState = {\n ...editor.getUndoState(),\n\n isDarkMode: editor.isDarkMode(),\n zoomScale: editor.getZoomScale(),\n };\n\n formatWithContentModel(\n editor,\n 'getFormatState',\n model => {\n const pendingFormat = getPendingFormat(editor);\n\n retrieveModelFormatState(model, pendingFormat, result);\n\n return false;\n },\n {\n useReducedModel: true,\n }\n );\n\n return result;\n}\n","import { ContentModelSegmentFormat } from 'roosterjs-content-model-types';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getPendingFormat } from '../../modelApi/format/pendingFormat';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { iterateSelections } from '../../modelApi/selection/iterateSelections';\n\n/**\n * Get current segment format. This is usually used by format painter\n * @param editor The editor to get format from\n */\nexport default function getSegmentFormat(\n editor: IContentModelEditor\n): ContentModelSegmentFormat | null {\n let result = getPendingFormat(editor);\n\n if (!result) {\n formatWithContentModel(\n editor,\n 'getSegmentFormat',\n model => {\n iterateSelections(\n [model],\n (path, tableContext, block, segments) => {\n result = segments?.[0]?.format || null;\n return true;\n },\n {\n includeListFormatHolder: 'never',\n }\n );\n\n return false;\n },\n {\n useReducedModel: true,\n }\n );\n }\n\n return result;\n}\n","import { adjustSegmentSelection } from '../../modelApi/selection/adjustSegmentSelection';\nimport { ContentModelImage } from 'roosterjs-content-model-types';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Adjust selection to make sure select an image if any\n * @return Content Model Image object if an image is select, or null\n */\nexport default function adjustImageSelection(\n editor: IContentModelEditor\n): ContentModelImage | null {\n let image: ContentModelImage | null = null;\n\n formatWithContentModel(editor, 'adjustImageSelection', model =>\n adjustSegmentSelection(\n model,\n target => {\n if (target.isSelected && target.segmentType == 'Image') {\n image = target;\n return true;\n } else {\n return false;\n }\n },\n (target, ref) => target == ref\n )\n );\n\n return image;\n}\n","import formatImageWithContentModel from '../utils/formatImageWithContentModel';\nimport { ContentModelImage } from 'roosterjs-content-model-types';\nimport { getMetadata, readFile } from 'roosterjs-editor-dom';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { SelectionRangeTypes } from 'roosterjs-editor-types';\n\n/**\n * Change the selected image src\n * @param editor The editor instance\n * @param file The image file\n */\nexport default function changeImage(editor: IContentModelEditor, file: File) {\n const selection = editor.getSelectionRangeEx();\n readFile(file, dataUrl => {\n if (\n dataUrl &&\n !editor.isDisposed() &&\n selection.type === SelectionRangeTypes.ImageSelection\n ) {\n formatImageWithContentModel(\n editor,\n 'changeImage',\n (image: ContentModelImage) => {\n image.src = dataUrl;\n image.dataset = {};\n image.format.width = '';\n image.format.height = '';\n },\n {\n image: selection.image,\n previousSrc: selection.image.src,\n newSrc: dataUrl,\n originalSrc: getImageSrc(selection.image),\n }\n );\n }\n });\n}\n\nconst getImageSrc = (image: HTMLImageElement) => {\n const obj = getMetadata<{ src: string }>(image);\n return (obj && obj.src) || '';\n};\n","import { addSegment, createContentModelDocument, createImage } from 'roosterjs-content-model-dom';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getOnDeleteEntityCallback } from '../../editor/utils/handleKeyboardEventCommon';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { mergeModel } from '../../modelApi/common/mergeModel';\nimport { readFile } from 'roosterjs-editor-dom';\n\n/**\n * Insert an image into current selected position\n * @param editor The editor to operate on\n * @param file Image Blob file or source string\n */\nexport default function insertImage(editor: IContentModelEditor, imageFileOrSrc: File | string) {\n if (typeof imageFileOrSrc == 'string') {\n insertImageWithSrc(editor, imageFileOrSrc);\n } else {\n readFile(imageFileOrSrc, dataUrl => {\n if (dataUrl && !editor.isDisposed()) {\n insertImageWithSrc(editor, dataUrl);\n }\n });\n }\n}\n\nfunction insertImageWithSrc(editor: IContentModelEditor, src: string) {\n formatWithContentModel(editor, 'insertImage', model => {\n const image = createImage(src);\n const doc = createContentModelDocument();\n\n addSegment(doc, image);\n mergeModel(model, doc, getOnDeleteEntityCallback(editor), {\n mergeFormat: 'mergeAll',\n });\n\n return true;\n });\n}\n","import formatImageWithContentModel from '../utils/formatImageWithContentModel';\nimport { ContentModelImage } from 'roosterjs-content-model-types';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Set image alt text for all selected images at selection. If no images is contained\n * in selection, do nothing.\n * @param editor The editor instance\n * @param altText The image alt text\n */\nexport default function setImageAltText(editor: IContentModelEditor, altText: string) {\n formatImageWithContentModel(editor, 'setImageAltText', (image: ContentModelImage) => {\n image.alt = altText;\n });\n}\n","import applyImageBorderFormat from '../../modelApi/image/applyImageBorderFormat';\nimport formatImageWithContentModel from '../utils/formatImageWithContentModel';\nimport { Border } from '../../publicTypes/interface/Border';\nimport { ContentModelImage } from 'roosterjs-content-model-types';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Set image border style for all selected images at selection.\n * @param editor The editor instance\n * @param border the border format object. Ex: { color: 'red', width: '10px', style: 'solid'}, if one of the value in object is undefined\n * its value will not be changed. Passing null instead of an object will remove the border\n * @param borderRadius the border radius value, if undefined, the border radius will keep the actual value\n */\nexport default function setImageBorder(\n editor: IContentModelEditor,\n border: Border | null,\n borderRadius?: string\n) {\n formatImageWithContentModel(editor, 'setImageBorder', (image: ContentModelImage) => {\n applyImageBorderFormat(image, border, borderRadius);\n });\n}\n","import formatImageWithContentModel from '../utils/formatImageWithContentModel';\nimport { ContentModelImage } from 'roosterjs-content-model-types';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Set image box shadow for all selected images at selection.\n * @param editor The editor instance\n * @param boxShadow The image box boxShadow\n * @param margin The image margin for all sides (eg. \"4px\"), null to remove margin\n */\nexport default function setImageBoxShadow(\n editor: IContentModelEditor,\n boxShadow: string,\n margin?: string | null\n) {\n formatImageWithContentModel(editor, 'setImageBoxShadow', (image: ContentModelImage) => {\n image.format.boxShadow = boxShadow;\n if (margin) {\n image.format.marginBottom = margin;\n image.format.marginLeft = margin;\n image.format.marginRight = margin;\n image.format.marginTop = margin;\n } else if (margin === null) {\n delete image.format.marginBottom;\n delete image.format.marginLeft;\n delete image.format.marginRight;\n delete image.format.marginTop;\n }\n });\n}\n","export { default as insertTable } from './table/insertTable';\nexport { default as formatTable } from './table/formatTable';\nexport { default as setTableCellShade } from './table/setTableCellShade';\nexport { default as editTable } from './table/editTable';\nexport { default as toggleBullet } from './list/toggleBullet';\nexport { default as toggleNumbering } from './list/toggleNumbering';\nexport { default as toggleBold } from './segment/toggleBold';\nexport { default as toggleItalic } from './segment/toggleItalic';\nexport { default as toggleUnderline } from './segment/toggleUnderline';\nexport { default as toggleStrikethrough } from './segment/toggleStrikethrough';\nexport { default as toggleSubscript } from './segment/toggleSubscript';\nexport { default as toggleSuperscript } from './segment/toggleSuperscript';\nexport { default as setBackgroundColor } from './segment/setBackgroundColor';\nexport { default as setFontName } from './segment/setFontName';\nexport { default as setFontSize } from './segment/setFontSize';\nexport { default as setTextColor } from './segment/setTextColor';\nexport { default as changeFontSize } from './segment/changeFontSize';\nexport { default as applySegmentFormat } from './segment/applySegmentFormat';\nexport { default as changeCapitalization } from './segment/changeCapitalization';\nexport { default as insertImage } from './image/insertImage';\nexport { default as setListStyle } from './list/setListStyle';\nexport { default as setListStartNumber } from './list/setListStartNumber';\nexport { default as hasSelectionInBlock } from './selection/hasSelectionInBlock';\nexport { default as hasSelectionInSegment } from './selection/hasSelectionInSegment';\nexport { default as hasSelectionInBlockGroup } from './selection/hasSelectionInBlockGroup';\nexport { default as setIndentation } from './block/setIndentation';\nexport { default as setAlignment } from './block/setAlignment';\nexport { default as setDirection } from './block/setDirection';\nexport { default as setHeaderLevel } from './block/setHeaderLevel';\nexport { default as toggleBlockQuote } from './block/toggleBlockQuote';\nexport { default as setSpacing } from './block/setSpacing';\nexport { default as setImageBorder } from './image/setImageBorder';\nexport { default as setImageBoxShadow } from './image/setImageBoxShadow';\nexport { default as changeImage } from './image/changeImage';\nexport { default as getFormatState } from './format/getFormatState';\nexport { default as getSegmentFormat } from './format/getSegmentFormat';\nexport { default as applyPendingFormat } from './format/applyPendingFormat';\nexport { default as clearFormat } from './format/clearFormat';\nexport { default as insertLink } from './link/insertLink';\nexport { default as removeLink } from './link/removeLink';\nexport { default as adjustLinkSelection } from './link/adjustLinkSelection';\nexport { default as setImageAltText } from './image/setImageAltText';\nexport { default as adjustImageSelection } from './image/adjustImageSelection';\nexport { default as setParagraphMargin } from './block/setParagraphMargin';\nexport { default as toggleCode } from './segment/toggleCode';\nexport { default as paste } from './utils/paste';\n","import { adjustSegmentSelection } from '../../modelApi/selection/adjustSegmentSelection';\nimport { adjustWordSelection } from '../../modelApi/selection/adjustWordSelection';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getSelectedSegments } from '../../modelApi/selection/collectSelections';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { setSelection } from '../../modelApi/selection/setSelection';\n\n/**\n * Adjust selection to make sure select a hyperlink if any, or a word if original selection is collapsed\n * @return A combination of existing link display text and url if any. If there is no existing link, return selected text and null\n */\nexport default function adjustLinkSelection(editor: IContentModelEditor): [string, string | null] {\n let text = '';\n let url: string | null = null;\n\n formatWithContentModel(editor, 'adjustLinkSelection', model => {\n let changed = adjustSegmentSelection(\n model,\n target => !!target.isSelected && !!target.link,\n (target, ref) => !!target.link && target.link.format.href == ref.link!.format.href\n );\n let segments = getSelectedSegments(model, false /*includingFormatHolder*/);\n const firstSegment = segments[0];\n\n if (segments.length == 1 && firstSegment.segmentType == 'SelectionMarker') {\n segments = adjustWordSelection(model, firstSegment);\n\n if (segments.length > 1) {\n changed = true;\n setSelection(model, segments[0], segments[segments.length - 1]);\n }\n }\n\n text = segments.map(x => (x.segmentType == 'Text' ? x.text : '')).join('');\n url = segments[0]?.link?.format.href || null;\n\n return changed;\n });\n\n return [text, url];\n}\n","import { ChangeSource } from 'roosterjs-editor-types';\nimport { ContentModelLink } from 'roosterjs-content-model-types';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getOnDeleteEntityCallback } from '../../editor/utils/handleKeyboardEventCommon';\nimport { getPendingFormat } from '../../modelApi/format/pendingFormat';\nimport { getSelectedSegments } from '../../modelApi/selection/collectSelections';\nimport { HtmlSanitizer, matchLink } from 'roosterjs-editor-dom';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { mergeModel } from '../../modelApi/common/mergeModel';\nimport {\n addLink,\n addSegment,\n createContentModelDocument,\n createText,\n} from 'roosterjs-content-model-dom';\n\n// Regex matching Uri scheme\nconst URI_REGEX = /^[a-zA-Z]+:/i;\n// Regex matching begin of email address\nconst MAILTO_REGEX = /^[\\w.%+-]+@/i;\n// Regex matching begin of ftp, i.e. ftp.microsoft.com\nconst FTP_REGEX = /^ftp\\./i;\n\n/**\n * Insert a hyperlink at cursor.\n * When there is a selection, hyperlink will be applied to the selection,\n * otherwise a hyperlink will be inserted to the cursor position.\n * @param editor Editor object\n * @param link Link address, can be http(s), mailto, notes, file, unc, ftp, news, telnet, gopher, wais.\n * When protocol is not specified, a best matched protocol will be predicted.\n * @param anchorTitle Optional alt text of the link, will be shown when hover on the link\n * @param displayText Optional display text for the link.\n * @param target Optional display target for the link (\"_blank\"|\"_self\"|\"_parent\"|\"_top\"|\"{framename}\")\n * If specified, the display text of link will be replaced with this text.\n * If not specified and there wasn't a link, the link url will be used as display text.\n */\nexport default function insertLink(\n editor: IContentModelEditor,\n link: string,\n anchorTitle?: string,\n displayText?: string,\n target?: string\n) {\n let url = (checkXss(link) || '').trim();\n if (url) {\n const linkData = matchLink(url);\n const link: ContentModelLink = {\n dataset: {},\n format: {\n href: linkData ? linkData.normalizedUrl : applyLinkPrefix(url),\n anchorTitle,\n target,\n underline: true,\n },\n };\n\n const links: ContentModelLink[] = [];\n let anchorNode: Node | undefined;\n\n formatWithContentModel(\n editor,\n 'insertLink',\n model => {\n const segments = getSelectedSegments(model, false /*includingFormatHolder*/);\n const originalText = segments\n .map(x => (x.segmentType == 'Text' ? x.text : ''))\n .join('');\n const text = displayText || originalText || '';\n\n if (\n segments.some(x => x.segmentType != 'SelectionMarker') &&\n originalText == text\n ) {\n segments.forEach(x => {\n addLink(x, link);\n\n if (x.link) {\n links.push(x.link);\n }\n });\n } else if (\n segments.every(x => x.segmentType == 'SelectionMarker') ||\n (!!text && text != originalText)\n ) {\n const segment = createText(text || (linkData ? linkData.originalUrl : url), {\n ...(segments[0]?.format || {}),\n ...(getPendingFormat(editor) || {}),\n });\n const doc = createContentModelDocument();\n\n addLink(segment, link);\n addSegment(doc, segment);\n\n if (segment.link) {\n links.push(segment.link);\n }\n\n mergeModel(model, doc, getOnDeleteEntityCallback(editor), {\n mergeFormat: 'mergeAll',\n });\n }\n\n return segments.length > 0;\n },\n {\n changeSource: ChangeSource.CreateLink,\n onNodeCreated: (modelElement, node) => {\n if (!anchorNode && links.indexOf(modelElement as ContentModelLink) >= 0) {\n anchorNode = node;\n }\n },\n getChangeData: () => anchorNode,\n }\n );\n }\n}\n\n// TODO: This is copied from original code. We may need to integrate this logic into matchLink() later.\nfunction applyLinkPrefix(url: string): string {\n if (!url) {\n return url;\n }\n\n // Add link prefix per rule:\n // (a) if the url always starts with a URI scheme, leave it as it is\n // (b) if the url is an email address, xxx@... add mailto: prefix\n // (c) if the url starts with ftp., add ftp:// prefix\n // (d) rest, add http:// prefix\n let prefix = '';\n if (url.search(URI_REGEX) < 0) {\n if (url.search(MAILTO_REGEX) == 0) {\n prefix = 'mailto:';\n } else if (url.search(FTP_REGEX) == 0) {\n prefix = 'ftp://';\n } else {\n // fallback to http://\n prefix = 'http://';\n }\n }\n\n return prefix + url;\n}\n\n// TODO: This is copied from original code. However, ContentModel should be able to filter out malicious\n// attributes later, so no need to use HtmlSanitizer here\nfunction checkXss(link: string): string {\n const sanitizer = new HtmlSanitizer();\n const a = document.createElement('a');\n\n a.href = link || '';\n\n sanitizer.sanitize(a);\n // We use getAttribute because some browsers will try to make the href property a valid link.\n // This has unintended side effects when the link lacks a protocol.\n return a.getAttribute('href') || '';\n}\n","import { adjustSegmentSelection } from '../../modelApi/selection/adjustSegmentSelection';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getSelectedSegments } from '../../modelApi/selection/collectSelections';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Remove link at selection. If no links at selection, do nothing.\n * If selection contains multiple links, all of the link styles will be removed.\n * If only part of a link is selected, the whole link style will be removed.\n * @param editor The editor instance\n */\nexport default function removeLink(editor: IContentModelEditor) {\n formatWithContentModel(editor, 'removeLink', model => {\n adjustSegmentSelection(\n model,\n target => !!target.isSelected && !!target.link,\n (target, ref) =>\n target.isSelected || // Expand the selection to any link that is involved. So we can remove multiple links together\n (!!target.link && target.link.format.href == ref.link!.format.href)\n );\n\n const segments = getSelectedSegments(model, false /*includingFormatHolder*/);\n let isChanged = false;\n\n segments.forEach(segment => {\n if (segment.link) {\n isChanged = true;\n\n delete segment.link;\n }\n });\n\n return isChanged;\n });\n}\n","import { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getFirstSelectedListItem } from '../../modelApi/selection/collectSelections';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Set start number of a list item\n * @param editor The editor to operate on\n * @param value The number to set to, must be equal or greater than 1\n */\nexport default function setListStartNumber(editor: IContentModelEditor, value: number) {\n formatWithContentModel(editor, 'setListStartNumber', model => {\n const listItem = getFirstSelectedListItem(model);\n const level = listItem?.levels[listItem?.levels.length - 1];\n\n if (level) {\n level.startNumberOverride = value;\n\n return true;\n } else {\n return false;\n }\n });\n}\n","import { findListItemsInSameThread } from '../../modelApi/list/findListItemsInSameThread';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getFirstSelectedListItem } from '../../modelApi/selection/collectSelections';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { ListMetadataFormat } from 'roosterjs-content-model-types';\n\n/**\n * Set style of list items with in same thread of current item\n * @param editor The editor to operate on\n * @param style The target list item style to set\n */\nexport default function setListStyle(editor: IContentModelEditor, style: ListMetadataFormat) {\n formatWithContentModel(editor, 'setListStyle', model => {\n const listItem = getFirstSelectedListItem(model);\n\n if (listItem) {\n const listItems = findListItemsInSameThread(model, listItem);\n const levelIndex = listItem.levels.length - 1;\n\n listItems.forEach(listItem => {\n if (style.orderedStyleType !== undefined) {\n listItem.levels[levelIndex].orderedStyleType = style.orderedStyleType;\n }\n\n if (style.unorderedStyleType !== undefined) {\n listItem.levels[levelIndex].unorderedStyleType = style.unorderedStyleType;\n }\n });\n\n return true;\n } else {\n return false;\n }\n });\n}\n","import { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { setListType } from '../../modelApi/list/setListType';\n\n/**\n * Toggle bullet list type\n * - When there are some blocks not in bullet list, set all blocks to the given type\n * - When all blocks are already in bullet list, turn off / outdent there list type\n * @param editor The editor to operate on\n */\nexport default function toggleBullet(editor: IContentModelEditor) {\n formatWithContentModel(editor, 'toggleBullet', model => setListType(model, 'UL'), {\n preservePendingFormat: true,\n });\n}\n","import { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { setListType } from '../../modelApi/list/setListType';\n\n/**\n * Toggle numbering list type\n * - When there are some blocks not in numbering list, set all blocks to the given type\n * - When all blocks are already in numbering list, turn off / outdent there list type\n * @param editor The editor to operate on\n */\nexport default function toggleNumbering(editor: IContentModelEditor) {\n formatWithContentModel(editor, 'toggleNumbering', model => setListType(model, 'OL'), {\n preservePendingFormat: true,\n });\n}\n","import { ContentModelSegmentFormat } from 'roosterjs-content-model-types';\nimport { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Bulk apply segment format to all selected content. This is usually used for format painter.\n * @param editor The editor to operate on\n * @param newFormat The segment format to apply\n */\nexport default function applySegmentFormat(\n editor: IContentModelEditor,\n newFormat: ContentModelSegmentFormat\n) {\n formatSegmentWithContentModel(\n editor,\n 'applySegmentFormat',\n format => {\n format.backgroundColor = newFormat.backgroundColor;\n format.fontFamily = newFormat.fontFamily;\n format.fontSize = newFormat.fontSize;\n format.fontWeight = newFormat.fontWeight;\n format.italic = newFormat.italic;\n format.strikethrough = newFormat.strikethrough;\n format.superOrSubScriptSequence = newFormat.superOrSubScriptSequence;\n format.textColor = newFormat.textColor;\n format.underline = newFormat.underline;\n },\n undefined /* segmentHasStyleCallback*/,\n true /*includingFormatHandler*/\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Change the capitalization of text in the selection\n * @param editor The editor instance\n * @param capitalization The case option\n * @param language Optional parameter for language string that should comply to \"IETF BCP 47 Tags for\n * Identifying Languages\". For example: 'en' or 'en-US' for English, 'tr' for Turkish.\n * Default is the host environment’s current locale.\n */\nexport default function changeCapitalization(\n editor: IContentModelEditor,\n capitalization: 'sentence' | 'lowerCase' | 'upperCase' | 'capitalize',\n language?: string\n) {\n formatSegmentWithContentModel(editor, 'changeCapitalization', (_, __, segment) => {\n if (segment?.segmentType == 'Text') {\n switch (capitalization) {\n case 'lowerCase':\n segment.text = segment.text.toLocaleLowerCase(language);\n break;\n\n case 'upperCase':\n segment.text = segment.text.toLocaleUpperCase(language);\n break;\n\n case 'capitalize':\n const wordArray = segment.text.toLocaleLowerCase(language).split(' ');\n\n for (let i = 0; i < wordArray.length; i++) {\n wordArray[i] =\n wordArray[i].charAt(0).toLocaleUpperCase(language) +\n wordArray[i].slice(1);\n }\n\n segment.text = wordArray.join(' ');\n break;\n\n case 'sentence':\n // TODO: Add rules on punctuation for internationalization - TASK 104769\n const punctuationMarks = '[\\\\.\\\\!\\\\?]';\n // Find a match of a word character either:\n // - At the beginning of a string with or without preceding whitespace, for\n // example: ' hello world' and 'hello world' strings would both match 'h'.\n // - Or preceded by a punctuation mark and at least one whitespace, for\n // example 'yes. hello world' would match 'y' and 'h'.\n const regex = new RegExp('^\\\\s*\\\\w|' + punctuationMarks + '\\\\s+\\\\w', 'g');\n\n segment.text = segment.text\n .toLocaleLowerCase(language)\n .replace(regex, match => match.toLocaleUpperCase(language));\n break;\n }\n }\n });\n}\n","import { ContentModelSegmentFormat } from 'roosterjs-content-model-types';\nimport { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { parseValueWithUnit } from 'roosterjs-content-model-dom';\n\n/**\n * Default font size sequence, in pt. Suggest editor UI use this sequence as your font size list,\n * So that when increase/decrease font size, the font size can match the sequence of your font size picker\n */\nconst FONT_SIZES = [8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72];\nconst MIN_FONT_SIZE = 1;\nconst MAX_FONT_SIZE = 1000;\n\n/**\n * Increase or decrease font size in selection\n * @param editor The editor instance\n * @param change Whether increase or decrease font size\n * @param fontSizes A sorted font size array, in pt. Default value is FONT_SIZES\n */\nexport default function changeFontSize(\n editor: IContentModelEditor,\n change: 'increase' | 'decrease'\n) {\n formatSegmentWithContentModel(\n editor,\n 'changeFontSize',\n format => changeFontSizeInternal(format, change),\n undefined /* segmentHasStyleCallback*/,\n true /*includingFormatHandler*/\n );\n}\n\nfunction changeFontSizeInternal(\n format: ContentModelSegmentFormat,\n change: 'increase' | 'decrease'\n) {\n if (format.fontSize) {\n let sizeInPt = parseValueWithUnit(format.fontSize, undefined /*element*/, 'pt');\n\n if (sizeInPt > 0) {\n const newSize = getNewFontSize(sizeInPt, change == 'increase' ? 1 : -1, FONT_SIZES);\n\n format.fontSize = newSize + 'pt';\n }\n }\n}\n\nfunction getNewFontSize(pt: number, changeBase: 1 | -1, fontSizes: number[]): number {\n pt = changeBase == 1 ? Math.floor(pt) : Math.ceil(pt);\n let last = fontSizes[fontSizes.length - 1];\n if (pt <= fontSizes[0]) {\n pt = Math.max(pt + changeBase, MIN_FONT_SIZE);\n } else if (pt > last || (pt == last && changeBase == 1)) {\n pt = pt / 10;\n pt = changeBase == 1 ? Math.floor(pt) : Math.ceil(pt);\n pt = Math.min(Math.max((pt + changeBase) * 10, last), MAX_FONT_SIZE);\n } else if (changeBase == 1) {\n for (let i = 0; i < fontSizes.length; i++) {\n if (pt < fontSizes[i]) {\n pt = fontSizes[i];\n break;\n }\n }\n } else {\n for (let i = fontSizes.length - 1; i >= 0; i--) {\n if (pt > fontSizes[i]) {\n pt = fontSizes[i];\n break;\n }\n }\n }\n return pt;\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Set background color\n * @param editor The editor to operate on\n * @param backgroundColor The color to set. Pass null to remove existing color.\n */\nexport default function setBackgroundColor(\n editor: IContentModelEditor,\n backgroundColor: string | null\n) {\n formatSegmentWithContentModel(\n editor,\n 'setBackgroundColor',\n backgroundColor === null\n ? format => {\n delete format.backgroundColor;\n }\n : format => {\n format.backgroundColor = backgroundColor;\n }\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Set font name\n * @param editor The editor to operate on\n * @param fontName The font name to set\n */\nexport default function setFontName(editor: IContentModelEditor, fontName: string) {\n formatSegmentWithContentModel(\n editor,\n 'setFontName',\n (format, _, segment) => {\n format.fontFamily = fontName;\n\n if (segment?.code) {\n segment.code.format.fontFamily = fontName;\n }\n },\n undefined /* segmentHasStyleCallback*/,\n true /*includingFormatHandler*/\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Set font size\n * @param editor The editor to operate on\n * @param fontSize The font size to set\n */\nexport default function setFontSize(editor: IContentModelEditor, fontSize: string) {\n formatSegmentWithContentModel(\n editor,\n 'setFontSize',\n format => {\n format.fontSize = fontSize;\n },\n undefined /* segmentHasStyleCallback*/,\n true /*includingFormatHandler*/\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Set text color\n * @param editor The editor to operate on\n * @param textColor The text color to set. Pass null to remove existing color.\n */\nexport default function setTextColor(editor: IContentModelEditor, textColor: string | null) {\n formatSegmentWithContentModel(\n editor,\n 'setTextColor',\n textColor === null\n ? (format, _, segment) => {\n delete format.textColor;\n\n if (segment?.link) {\n delete segment.link.format.textColor;\n }\n }\n : (format, _, segment) => {\n format.textColor = textColor;\n\n if (segment?.link) {\n segment.link.format.textColor = textColor;\n }\n },\n undefined /* segmentHasStyleCallback*/,\n true /*includingFormatHandler*/\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Toggle bold style\n * @param editor The editor to operate on\n */\nexport default function toggleBold(editor: IContentModelEditor) {\n formatSegmentWithContentModel(\n editor,\n 'toggleBold',\n (format, isTurningOn) => {\n format.fontWeight = isTurningOn ? 'bold' : 'normal';\n },\n (format, _, paragraph) =>\n isBold(\n typeof format.fontWeight == 'undefined'\n ? paragraph?.decorator?.format.fontWeight\n : format.fontWeight\n )\n );\n}\n\n/**\n * @internal\n */\nexport function isBold(boldStyle?: string): boolean {\n return (\n !!boldStyle && (boldStyle == 'bold' || boldStyle == 'bolder' || parseInt(boldStyle) >= 600)\n );\n}\n","import { addCode } from 'roosterjs-content-model-dom';\nimport { ContentModelCode } from 'roosterjs-content-model-types';\nimport { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\nconst DefaultCode: ContentModelCode = {\n format: {\n fontFamily: 'monospace',\n },\n};\n\n/**\n * Toggle italic style\n * @param editor The editor to operate on\n */\nexport default function toggleCode(editor: IContentModelEditor) {\n formatSegmentWithContentModel(\n editor,\n 'toggleCode',\n (_, isTurningOn, segment) => {\n if (segment) {\n if (isTurningOn) {\n addCode(segment, DefaultCode);\n } else {\n delete segment.code;\n }\n }\n },\n (_, segment) => !!segment?.code\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Toggle italic style\n * @param editor The editor to operate on\n */\nexport default function toggleItalic(editor: IContentModelEditor) {\n formatSegmentWithContentModel(\n editor,\n 'toggleItalic',\n (format, isTurningOn) => {\n format.italic = !!isTurningOn;\n },\n format => !!format.italic\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Toggle strikethrough style\n * @param editor The editor to operate on\n */\nexport default function toggleStrikethrough(editor: IContentModelEditor) {\n formatSegmentWithContentModel(\n editor,\n 'toggleStrikethrough',\n (format, isTurningOn) => {\n format.strikethrough = !!isTurningOn;\n },\n format => !!format.strikethrough\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Toggle subscript style\n * @param editor The editor to operate on\n */\nexport default function toggleSubscript(editor: IContentModelEditor) {\n formatSegmentWithContentModel(\n editor,\n 'toggleSubscript',\n (format, isTurningOn) => {\n format.superOrSubScriptSequence = isTurningOn ? 'sub' : '';\n },\n format => format.superOrSubScriptSequence?.split(' ').pop() == 'sub'\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Toggle superscript style\n * @param editor The editor to operate on\n */\nexport default function toggleSuperscript(editor: IContentModelEditor) {\n formatSegmentWithContentModel(\n editor,\n 'toggleSuperscript',\n (format, isTurningOn) => {\n format.superOrSubScriptSequence = isTurningOn ? 'super' : '';\n },\n format => format.superOrSubScriptSequence?.split(' ').pop() == 'super'\n );\n}\n","import { formatSegmentWithContentModel } from '../utils/formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * Toggle underline style\n * @param editor The editor to operate on\n */\nexport default function toggleUnderline(editor: IContentModelEditor) {\n formatSegmentWithContentModel(\n editor,\n 'toggleUnderline',\n (format, isTurningOn, segment) => {\n format.underline = !!isTurningOn;\n\n if (segment?.link) {\n segment.link.format.underline = !!isTurningOn;\n }\n },\n format => !!format.underline\n );\n}\n","import hasSelectionInBlockGroup from './hasSelectionInBlockGroup';\nimport hasSelectionInSegment from './hasSelectionInSegment';\nimport { ContentModelBlock } from 'roosterjs-content-model-types';\n\n/**\n * Check if there is selection within the given block\n * @param block The block to check\n */\nexport default function hasSelectionInBlock(block: ContentModelBlock): boolean {\n switch (block.blockType) {\n case 'Paragraph':\n return block.segments.some(hasSelectionInSegment);\n\n case 'Table':\n return block.rows.some(row => row.cells.some(hasSelectionInBlockGroup));\n\n case 'BlockGroup':\n return hasSelectionInBlockGroup(block);\n\n case 'Divider':\n case 'Entity':\n return !!block.isSelected;\n\n default:\n return false;\n }\n}\n","import hasSelectionInBlock from './hasSelectionInBlock';\nimport { ContentModelBlockGroup } from 'roosterjs-content-model-types';\n\n/**\n * Check if there is selection within the given block\n * @param block The block to check\n */\nexport default function hasSelectionInBlockGroup(group: ContentModelBlockGroup): boolean {\n if (group.blockGroupType == 'TableCell' && group.isSelected) {\n return true;\n }\n\n if (group.blocks.some(hasSelectionInBlock)) {\n return true;\n }\n\n return false;\n}\n","import hasSelectionInBlock from './hasSelectionInBlock';\nimport { ContentModelSegment } from 'roosterjs-content-model-types';\n\n/**\n * Check if there is selection within the given segment\n * @param segment The segment to check\n */\nexport default function hasSelectionInSegment(segment: ContentModelSegment): boolean {\n return (\n segment.isSelected ||\n (segment.segmentType == 'General' && segment.blocks.some(hasSelectionInBlock))\n );\n}\n","import { alignTable } from '../../modelApi/table/alignTable';\nimport { alignTableCell } from '../../modelApi/table/alignTableCell';\nimport { applyTableFormat } from '../../modelApi/table/applyTableFormat';\nimport { deleteTable } from '../../modelApi/table/deleteTable';\nimport { deleteTableColumn } from '../../modelApi/table/deleteTableColumn';\nimport { deleteTableRow } from '../../modelApi/table/deleteTableRow';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getFirstSelectedTable } from '../../modelApi/selection/collectSelections';\nimport { hasMetadata } from 'roosterjs-content-model-dom';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { insertTableColumn } from '../../modelApi/table/insertTableColumn';\nimport { insertTableRow } from '../../modelApi/table/insertTableRow';\nimport { mergeTableCells } from '../../modelApi/table/mergeTableCells';\nimport { mergeTableColumn } from '../../modelApi/table/mergeTableColumn';\nimport { mergeTableRow } from '../../modelApi/table/mergeTableRow';\nimport { normalizeTable } from '../../modelApi/table/normalizeTable';\nimport { splitTableCellHorizontally } from '../../modelApi/table/splitTableCellHorizontally';\nimport { splitTableCellVertically } from '../../modelApi/table/splitTableCellVertically';\nimport { TableOperation } from 'roosterjs-editor-types';\n\n/**\n * Format current focused table with the given format\n * @param editor The editor instance\n * @param operation The table operation to apply\n */\nexport default function editTable(editor: IContentModelEditor, operation: TableOperation) {\n formatWithContentModel(editor, 'editTable', model => {\n const tableModel = getFirstSelectedTable(model);\n\n if (tableModel) {\n switch (operation) {\n case TableOperation.AlignCellBottom:\n case TableOperation.AlignCellCenter:\n case TableOperation.AlignCellLeft:\n case TableOperation.AlignCellMiddle:\n case TableOperation.AlignCellRight:\n case TableOperation.AlignCellTop:\n alignTableCell(tableModel, operation);\n break;\n\n case TableOperation.AlignCenter:\n case TableOperation.AlignLeft:\n case TableOperation.AlignRight:\n alignTable(tableModel, operation);\n break;\n\n case TableOperation.DeleteColumn:\n deleteTableColumn(tableModel);\n break;\n\n case TableOperation.DeleteRow:\n deleteTableRow(tableModel);\n break;\n\n case TableOperation.DeleteTable:\n deleteTable(tableModel);\n break;\n\n case TableOperation.InsertAbove:\n case TableOperation.InsertBelow:\n insertTableRow(tableModel, operation);\n break;\n\n case TableOperation.InsertLeft:\n case TableOperation.InsertRight:\n insertTableColumn(tableModel, operation);\n break;\n\n case TableOperation.MergeAbove:\n case TableOperation.MergeBelow:\n mergeTableRow(tableModel, operation);\n break;\n\n case TableOperation.MergeCells:\n mergeTableCells(tableModel);\n break;\n\n case TableOperation.MergeLeft:\n case TableOperation.MergeRight:\n mergeTableColumn(tableModel, operation);\n break;\n\n case TableOperation.SplitHorizontally:\n splitTableCellHorizontally(tableModel);\n break;\n\n case TableOperation.SplitVertically:\n splitTableCellVertically(tableModel);\n break;\n }\n\n normalizeTable(tableModel);\n\n if (hasMetadata(tableModel)) {\n applyTableFormat(tableModel, undefined /*newFormat*/, true /*keepCellShade*/);\n }\n\n return true;\n } else {\n return false;\n }\n });\n}\n","import { applyTableFormat } from '../../modelApi/table/applyTableFormat';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getFirstSelectedTable } from '../../modelApi/selection/collectSelections';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { TableMetadataFormat } from 'roosterjs-content-model-types';\n\n/**\n * Format current focused table with the given format\n * @param editor The editor instance\n * @param format The table format to apply\n * @param keepCellShade Whether keep existing shade color when apply format if there is a manually set shade color\n */\nexport default function formatTable(\n editor: IContentModelEditor,\n format: TableMetadataFormat,\n keepCellShade?: boolean\n) {\n formatWithContentModel(editor, 'formatTable', model => {\n const tableModel = getFirstSelectedTable(model);\n\n if (tableModel) {\n applyTableFormat(tableModel, format, keepCellShade);\n\n return true;\n } else {\n return false;\n }\n });\n}\n","import { applyTableFormat } from '../../modelApi/table/applyTableFormat';\nimport { createContentModelDocument, createSelectionMarker } from 'roosterjs-content-model-dom';\nimport { createTableStructure } from '../../modelApi/table/createTableStructure';\nimport { deleteSelection } from '../../modelApi/edit/deleteSelection';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getOnDeleteEntityCallback } from '../../editor/utils/handleKeyboardEventCommon';\nimport { getPendingFormat } from '../../modelApi/format/pendingFormat';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { mergeModel } from '../../modelApi/common/mergeModel';\nimport { normalizeTable } from '../../modelApi/table/normalizeTable';\nimport { setSelection } from '../../modelApi/selection/setSelection';\nimport { TableMetadataFormat } from 'roosterjs-content-model-types';\n\n/**\n * Insert table into editor at current selection\n * @param editor The editor instance\n * @param columns Number of columns in table, it also controls the default table cell width:\n * if columns <= 4, width = 120px; if columns <= 6, width = 100px; else width = 70px\n * @param rows Number of rows in table\n * @param format (Optional) The table format. If not passed, the default format will be applied:\n * background color: #FFF; border color: #ABABAB\n */\nexport default function insertTable(\n editor: IContentModelEditor,\n columns: number,\n rows: number,\n format?: TableMetadataFormat\n) {\n formatWithContentModel(editor, 'insertTable', model => {\n const onDeleteEntity = getOnDeleteEntityCallback(editor);\n const insertPosition = deleteSelection(model, onDeleteEntity).insertPoint;\n\n if (insertPosition) {\n const doc = createContentModelDocument();\n const table = createTableStructure(doc, columns, rows);\n\n normalizeTable(table, getPendingFormat(editor) || insertPosition.marker.format);\n applyTableFormat(table, format);\n mergeModel(model, doc, onDeleteEntity, {\n insertPosition,\n mergeFormat: 'mergeAll',\n });\n\n const firstBlock = table.rows[0]?.cells[0]?.blocks[0];\n\n if (firstBlock?.blockType == 'Paragraph') {\n const marker = createSelectionMarker(firstBlock.segments[0]?.format);\n firstBlock.segments.unshift(marker);\n setSelection(model, marker);\n }\n\n return true;\n } else {\n return false;\n }\n });\n}\n","import hasSelectionInBlockGroup from '../selection/hasSelectionInBlockGroup';\nimport { formatWithContentModel } from '../utils/formatWithContentModel';\nimport { getFirstSelectedTable } from '../../modelApi/selection/collectSelections';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { normalizeTable } from '../../modelApi/table/normalizeTable';\nimport { setTableCellBackgroundColor } from '../../modelApi/table/setTableCellBackgroundColor';\n\n/**\n * Set table cell shade color\n * @param editor The editor instance\n * @param color The color to set. Pass null to remove existing shade color\n */\nexport default function setTableCellShade(editor: IContentModelEditor, color: string | null) {\n formatWithContentModel(editor, 'setTableCellShade', model => {\n const table = getFirstSelectedTable(model);\n\n if (table) {\n normalizeTable(table);\n\n table.rows.forEach(row =>\n row.cells.forEach(cell => {\n if (hasSelectionInBlockGroup(cell)) {\n setTableCellBackgroundColor(cell, color, true /*isColorOverride*/);\n }\n })\n );\n\n return true;\n } else {\n return false;\n }\n });\n}\n","import { ContentModelImage } from 'roosterjs-content-model-types';\nimport { EditImageEventData, PluginEventType } from 'roosterjs-editor-types';\nimport { formatSegmentWithContentModel } from './formatSegmentWithContentModel';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * @internal\n */\nexport default function formatImageWithContentModel(\n editor: IContentModelEditor,\n apiName: string,\n callback: (segment: ContentModelImage) => void,\n eventChangeData?: EditImageEventData\n) {\n formatSegmentWithContentModel(\n editor,\n apiName,\n (_, __, segment) => {\n if (segment?.segmentType == 'Image') {\n callback(segment);\n if (eventChangeData) {\n editor.triggerPluginEvent(PluginEventType.EditImage, eventChangeData);\n }\n }\n },\n undefined /** segmentHasStyleCallback **/,\n undefined /** includingFormatHolder */\n );\n}\n","import { ContentModelParagraph } from 'roosterjs-content-model-types';\nimport { formatWithContentModel } from './formatWithContentModel';\nimport { getSelectedParagraphs } from '../../modelApi/selection/collectSelections';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\n\n/**\n * @internal\n */\nexport function formatParagraphWithContentModel(\n editor: IContentModelEditor,\n apiName: string,\n setStyleCallback: (paragraph: ContentModelParagraph) => void\n) {\n formatWithContentModel(\n editor,\n apiName,\n model => {\n const paragraphs = getSelectedParagraphs(model);\n\n paragraphs.forEach(setStyleCallback);\n\n return paragraphs.length > 0;\n },\n {\n preservePendingFormat: true,\n }\n );\n}\n","import { adjustWordSelection } from '../../modelApi/selection/adjustWordSelection';\nimport { formatWithContentModel } from './formatWithContentModel';\nimport { getPendingFormat, setPendingFormat } from '../../modelApi/format/pendingFormat';\nimport { getSelectedSegmentsAndParagraphs } from '../../modelApi/selection/collectSelections';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport {\n ContentModelParagraph,\n ContentModelSegment,\n ContentModelSegmentFormat,\n} from 'roosterjs-content-model-types';\n/**\n * @internal\n */\nexport function formatSegmentWithContentModel(\n editor: IContentModelEditor,\n apiName: string,\n toggleStyleCallback: (\n format: ContentModelSegmentFormat,\n isTuringOn: boolean,\n segment: ContentModelSegment | null\n ) => void,\n segmentHasStyleCallback?: (\n format: ContentModelSegmentFormat,\n segment: ContentModelSegment | null,\n paragraph: ContentModelParagraph | null\n ) => boolean,\n includingFormatHolder?: boolean\n) {\n formatWithContentModel(editor, apiName, model => {\n let segmentAndParagraphs = getSelectedSegmentsAndParagraphs(model, !!includingFormatHolder);\n const pendingFormat = getPendingFormat(editor);\n let isCollapsedSelection =\n segmentAndParagraphs.length == 1 &&\n segmentAndParagraphs[0][0].segmentType == 'SelectionMarker';\n\n if (isCollapsedSelection) {\n const para = segmentAndParagraphs[0][1];\n\n segmentAndParagraphs = adjustWordSelection(model, segmentAndParagraphs[0][0]).map(x => [\n x,\n para,\n ]);\n\n if (segmentAndParagraphs.length > 1) {\n isCollapsedSelection = false;\n }\n }\n\n const formatsAndSegments: [\n ContentModelSegmentFormat,\n ContentModelSegment | null,\n ContentModelParagraph | null\n ][] = pendingFormat\n ? [[pendingFormat, null, null]]\n : segmentAndParagraphs.map(item => [item[0].format, item[0], item[1]]);\n\n const isTurningOff = segmentHasStyleCallback\n ? formatsAndSegments.every(([format, segment, paragraph]) =>\n segmentHasStyleCallback(format, segment, paragraph)\n )\n : false;\n\n formatsAndSegments.forEach(([format, segment]) =>\n toggleStyleCallback(format, !isTurningOff, segment)\n );\n\n if (!pendingFormat && isCollapsedSelection) {\n const pos = editor.getFocusedPosition();\n\n if (pos) {\n setPendingFormat(editor, segmentAndParagraphs[0][0].format, pos);\n }\n }\n\n if (isCollapsedSelection) {\n editor.focus();\n return false;\n } else {\n return formatsAndSegments.length > 0;\n }\n });\n}\n","import { ChangeSource } from 'roosterjs-editor-types';\nimport {\n ContentModelDocument,\n DomToModelOption,\n OnNodeCreated,\n} from 'roosterjs-content-model-types';\nimport { getPendingFormat, setPendingFormat } from '../../modelApi/format/pendingFormat';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { reducedModelChildProcessor } from '../../domToModel/processors/reducedModelChildProcessor';\n\n/**\n * @internal\n */\nexport interface FormatWithContentModelOptions {\n /**\n * When set to true, it will only create Content Model for selected content\n */\n useReducedModel?: boolean;\n\n /**\n * When set to true, if there is pending format, it will be preserved after this format operation is done\n */\n preservePendingFormat?: boolean;\n\n /**\n * When pass true, skip adding undo snapshot when write Content Model back to DOM\n */\n skipUndoSnapshot?: boolean;\n\n /**\n * Change source used for triggering a ContentChanged event. @default ChangeSource.Format.\n */\n changeSource?: string;\n\n /**\n * An optional callback that will be called when a DOM node is created\n * @param modelElement The related Content Model element\n * @param node The node created for this model element\n */\n onNodeCreated?: OnNodeCreated;\n\n /**\n * Optional callback to get an object used for change data in ContentChangedEvent\n */\n getChangeData?: () => any;\n}\n\n/**\n * @internal\n */\nexport function formatWithContentModel(\n editor: IContentModelEditor,\n apiName: string,\n callback: (model: ContentModelDocument) => boolean,\n options?: FormatWithContentModelOptions\n) {\n const {\n useReducedModel,\n onNodeCreated,\n preservePendingFormat,\n getChangeData,\n skipUndoSnapshot,\n changeSource,\n } = options || {};\n const domToModelOption: DomToModelOption | undefined = useReducedModel\n ? {\n processorOverride: {\n child: reducedModelChildProcessor,\n },\n }\n : undefined;\n const model = editor.createContentModel(domToModelOption);\n\n if (callback(model)) {\n const callback = () => {\n editor.focus();\n if (model) {\n editor.setContentModel(model, { onNodeCreated });\n }\n\n if (preservePendingFormat) {\n const pendingFormat = getPendingFormat(editor);\n const pos = editor.getFocusedPosition();\n\n if (pendingFormat && pos) {\n setPendingFormat(editor, pendingFormat, pos);\n }\n }\n\n return getChangeData?.();\n };\n\n if (skipUndoSnapshot) {\n callback();\n\n if (changeSource) {\n editor.triggerContentChangedEvent(changeSource, getChangeData?.());\n }\n } else {\n editor.addUndoSnapshot(\n callback,\n changeSource || ChangeSource.Format,\n false /*canUndoByBackspace*/,\n {\n formatApiName: apiName,\n }\n );\n }\n\n editor.cacheContentModel?.(model);\n }\n}\n","import ContentModelBeforePasteEvent from '../../publicTypes/event/ContentModelBeforePasteEvent';\nimport { BeforePasteEvent, NodePosition } from 'roosterjs-editor-types';\nimport { ContentModelBlockFormat, FormatParser } from 'roosterjs-content-model-types';\nimport { domToContentModel } from 'roosterjs-content-model-dom';\nimport { formatWithContentModel } from './formatWithContentModel';\nimport { getOnDeleteEntityCallback } from '../../editor/utils/handleKeyboardEventCommon';\nimport { IContentModelEditor } from '../../publicTypes/IContentModelEditor';\nimport { mergeModel } from '../../modelApi/common/mergeModel';\nimport {\n createDefaultHtmlSanitizerOptions,\n getPasteType,\n handleImagePaste,\n handleTextPaste,\n moveChildNodes,\n Position,\n retrieveMetadataFromClipboard,\n sanitizePasteContent,\n} from 'roosterjs-editor-dom';\nimport {\n ChangeSource,\n ClipboardData,\n GetContentMode,\n PasteType,\n PluginEventType,\n} from 'roosterjs-editor-types';\n\n/**\n * Paste into editor using a clipboardData object\n * @param clipboardData Clipboard data retrieved from clipboard\n * @param pasteAsText Force pasting as plain text. Default value is false\n * @param applyCurrentStyle True if apply format of current selection to the pasted content,\n * false to keep original format. Default value is false. When pasteAsText is true, this parameter is ignored\n * @param pasteAsImage: When set to true, if the clipboardData contains a imageDataUri will paste the image to the editor\n */\nexport default function paste(\n editor: IContentModelEditor,\n clipboardData: ClipboardData,\n pasteAsText: boolean = false,\n applyCurrentFormat: boolean = false,\n pasteAsImage: boolean = false\n) {\n if (clipboardData.snapshotBeforePaste) {\n // Restore original content before paste a new one\n editor.setContent(clipboardData.snapshotBeforePaste);\n } else {\n clipboardData.snapshotBeforePaste = editor.getContent(GetContentMode.RawHTMLWithSelection);\n }\n\n const range = editor.getSelectionRange();\n const position = range && Position.getStart(range);\n const event = createBeforePasteEvent(\n editor,\n clipboardData,\n getPasteType(pasteAsText, applyCurrentFormat, pasteAsImage)\n );\n\n const fragment = createFragmentFromClipboardData(\n editor,\n clipboardData,\n position,\n pasteAsText,\n pasteAsImage,\n event\n );\n\n const pasteModel = domToContentModel(\n fragment,\n {\n isDarkMode: editor.isDarkMode(),\n darkColorHandler: editor.getDarkColorHandler(),\n defaultFormat: editor.getDefaultFormat(),\n },\n {\n ...event.domToModelOption,\n disableCacheElement: true,\n additionalFormatParsers: {\n ...event.domToModelOption,\n block: [...(applyCurrentFormat ? [blockElementParser] : [])],\n listLevel: [...(applyCurrentFormat ? [blockElementParser] : [])],\n },\n }\n );\n\n if (pasteModel) {\n formatWithContentModel(\n editor,\n 'Paste',\n model => {\n mergeModel(model, pasteModel, getOnDeleteEntityCallback(editor), {\n mergeFormat: applyCurrentFormat ? 'keepSourceEmphasisFormat' : 'none',\n });\n return true;\n },\n {\n changeSource: ChangeSource.Paste,\n getChangeData: () => clipboardData,\n }\n );\n }\n}\n\nfunction createBeforePasteEvent(\n editor: IContentModelEditor,\n clipboardData: ClipboardData,\n pasteType: PasteType\n): ContentModelBeforePasteEvent {\n const options = createDefaultHtmlSanitizerOptions();\n\n // Remove \"caret-color\" style generated by Safari to make sure caret shows in right color after paste\n options.cssStyleCallbacks['caret-color'] = () => false;\n\n return {\n eventType: PluginEventType.BeforePaste,\n clipboardData,\n fragment: editor.getDocument().createDocumentFragment(),\n sanitizingOption: options,\n htmlBefore: '',\n htmlAfter: '',\n htmlAttributes: {},\n domToModelOption: {},\n pasteType: pasteType,\n };\n}\n\nfunction createFragmentFromClipboardData(\n editor: IContentModelEditor,\n clipboardData: ClipboardData,\n position: NodePosition | null,\n pasteAsText: boolean,\n pasteAsImage: boolean,\n event: BeforePasteEvent\n) {\n const { fragment } = event;\n const { rawHtml, text, imageDataUri } = clipboardData;\n const trustedHTMLHandler = editor.getTrustedHTMLHandler();\n\n let doc: Document | undefined = rawHtml\n ? new DOMParser().parseFromString(trustedHTMLHandler(rawHtml), 'text/html')\n : undefined;\n\n // Step 2: Retrieve Metadata from Html and the Html that was copied.\n retrieveMetadataFromClipboard(doc, event, editor.getTrustedHTMLHandler());\n\n // Step 3: Fill the BeforePasteEvent object, especially the fragment for paste\n if ((pasteAsImage && imageDataUri) || (!pasteAsText && !text && imageDataUri)) {\n // Paste image\n handleImagePaste(imageDataUri, fragment);\n } else if (!pasteAsText && rawHtml && doc ? doc.body : false) {\n moveChildNodes(fragment, doc?.body);\n } else if (text) {\n // Paste text\n handleTextPaste(text, position, fragment);\n }\n\n // Step 4: Trigger BeforePasteEvent so that plugins can do proper change before paste\n editor.triggerPluginEvent(PluginEventType.BeforePaste, event, true /* broadcast */);\n\n // Step 5. Sanitize the fragment before paste to make sure the content is safe\n sanitizePasteContent(event, position);\n\n return fragment;\n}\n\n/**\n * For block elements that have background color style, remove the background color when user selects the merge current format\n * paste option\n */\nconst blockElementParser: FormatParser = (\n format: ContentModelBlockFormat,\n element: HTMLElement\n) => {\n if (element.style.backgroundColor) {\n element.style.backgroundColor = '';\n delete format.backgroundColor;\n }\n};\n","import { EditorPlugin } from 'roosterjs-editor-types';\nimport { getDarkColor } from 'roosterjs-color-utils';\nimport {\n ContentModelEditor,\n ContentModelEditorOptions,\n ContentModelPastePlugin,\n IContentModelEditor,\n} from 'roosterjs-content-model-editor';\n\n/**\n * Create a Content Model Editor using the given options\n * @param contentDiv The html div element needed for creating the editor\n * @param additionalPlugins The additional user defined plugins. Currently the default plugins that are already included are\n * ContentEdit, HyperLink and Paste, user don't need to add those.\n * @param initialContent The initial content to show in editor. It can't be removed by undo, user need to manually remove it if needed.\n * @returns The ContentModelEditor instance\n */\nexport function createContentModelEditor(\n contentDiv: HTMLDivElement,\n additionalPlugins?: EditorPlugin[],\n initialContent?: string\n): IContentModelEditor {\n let plugins: EditorPlugin[] = [new ContentModelPastePlugin()];\n\n if (additionalPlugins) {\n plugins = plugins.concat(additionalPlugins);\n }\n\n let options: ContentModelEditorOptions = {\n plugins: plugins,\n initialContent: initialContent,\n getDarkColor: getDarkColor,\n defaultFormat: {\n fontFamily: 'Calibri,Arial,Helvetica,sans-serif',\n fontSize: '11pt',\n textColor: '#000000',\n },\n };\n return new ContentModelEditor(contentDiv, options);\n}\n","export { createContentModelEditor } from './createContentModelEditor';\nexport * from 'roosterjs-content-model-types';\nexport * from 'roosterjs-content-model-dom';\nexport * from 'roosterjs-content-model-editor';\n","module.exports = roosterjs;","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(2594);\n"],"names":["editorContext","options","selectionRoot","context","isDarkMode","blockFormat","segmentFormat","zoomScaleFormat","isInSelection","listFormat","levels","threadItemCounts","link","format","dataset","code","blockDecorator","tagName","elementProcessors","defaultProcessorMap","processorOverride","defaultStyles","defaultStyleMap","defaultStyleOverride","formatParsers","getFormatParsers","formatParserOverride","additionalFormatParsers","defaultElementProcessors","defaultFormatParsers","allowCacheElement","disableCacheElement","range","selectionRange","type","regularRange","ranges","commonAncestorContainer","regularSelection","startContainer","startOffset","endContainer","endOffset","isSelectionCollapsed","collapsed","coordinates","table","tableSelection","firstCell","lastCell","image","imageSelection","selectionRootNode","a","linkProcessor","b","knownElementProcessor","blockquote","br","brProcessor","codeProcessor","div","em","font","fontProcessor","i","img","imageProcessor","h1","headingProcessor","h2","h3","h4","h5","h6","hr","hrProcessor","li","listItemProcessor","ol","listProcessor","p","pProcessor","pre","formatContainerProcessor","s","span","strike","strong","sub","sup","tableProcessor","u","ul","generalProcessor","textProcessor","element","elementProcessor","entity","entityProcessor","child","childProcessor","delimiter","delimiterProcessor","root","option","model","createContentModelDocument","defaultFormat","createDomToModelContext","safeInstanceOf","parseFormat","rootDirectionFormatHandler","parse","zoomScaleFormatHandler","includeRoot","normalizeContentModel","SegmentDecoratorTags","group","decorator","undefined","isSegmentDecorator","indexOf","block","container","ContextStyles","forEach","style","paragraph","createParagraph","addBlock","createBr","isSelected","addSegment","processChildNode","isNodeOfType","display","handleRegularSelection","index","nodeStartOffset","nodeEndOffset","addSelectionMarker","parent","getRegularSelectionOffsets","firstChild","nextSibling","stackFormat","toLowerCase","processor","className","getEntityFromElement","contentEditable","tryGetProcessorForEntity","getDelimiterFromElement","tryGetProcessorForDelimiter","isReadonly","id","isBlockEntity","isBlockElement","segment","wrapperToUse","cloneNode","backgroundColor","color","entityModel","createEntity","FontSizes","size","intSize","fontFamily","getAttribute","fontSize","parseInt","Number","isNaN","length","textColor","segmentOnBlock","getDefaultStyle","formatContainer","createFormatContainer","zeroFontSize","blocks","blockType","isImplicit","shouldFallbackToParagraph","Object","assign","setParagraphNotImplicit","generalBlockProcessor","createGeneralBlock","isSelectedBefore","generalSegmentProcessor","createGeneralSegment","addDecorators","createParagraphDecorator","blockProcessor","divider","createDivider","imageFormat","createImage","src","alt","title","isSelectedAsImageSelection","FormatContainerTriggerStyles","ByPassFormatContainerTags","isBlock","defaultStyle","bgcolor","getPropertyValue","some","key","marginLeft","marginRight","shouldUseFormatContainer","href","segmentUnderLink","hasAttribute","listParent","listItem","createListItem","listItemElement","push","currentBlocks","lastItem","level","updateListMetadata","metadata","processMetadata","listLevel","originalListParent","pop","calcSizes","positions","result","lastPos","tableElement","createTable","rows","selectedTable","hasTableSelection","cachedElement","tableBorder","columnPositions","rowPositions","zoomScale","row","tr","tableRow","parentElement","parentTag","sourceCol","targetCol","cells","td","hasSelectionBeforeCell","colEnd","colSpan","rowEnd","rowSpan","needCalcWidth","needCalcHeight","rect","getBoundingClientRect","width","height","segmentOnTableCell","cellFormat","tableCell","hasTd","cell","createTableCell","spannedRow","hasSelectionAfterCell","y","x","widths","heights","textNode","txt","nodeValue","txtStartOffset","txtEndOffset","addTextSegment","substring","WhiteSpaceValuesNeedToHandle","text","lastBlock","lastSegment","segments","segmentType","areSameFormats","hasSpacesOnly","whiteSpace","textModel","createText","marker","createSelectionMarker","f1","f2","keys1","getObjectKeys","keys2","every","tag","currentContainer","BLOCK_DISPLAY_STYLES","parsers","parser","SkippedStylesForBlock","SkippedStylesForTable","stackFormatInternal","processType","callback","linkFormat","codeFormat","decoratorFormat","underline","stackLinkInternal","stackCodeInternal","node","expectedType","nodeType","ListStyleDefinitionMetadata","createObjectDefinition","orderedStyleType","createNumberDefinition","unorderedStyleType","list","updateMetadata","EditingInfoDatasetName","definition","metadataString","obj","JSON","validate","stringify","SPACE_TEXT_REGEX","SPACES_REGEX","char","charCodeAt","test","isForward","replace","directionFormatHandler","_","dir","direction","apply","displayFormatHandler","htmlAlignFormatHandler","htmlAlign","calcAlign","textAlign","setAttribute","ResultMap","lineHeightFormatHandler","lineHeight","MarginKeys","marginFormatHandler","value","parseValueWithUnit","implicitFormat","PaddingKeys","paddingFormatHandler","textAlignFormatHandler","flexDirection","alignSelf","whiteSpaceFormatHandler","backgroundColorFormatHandler","getColor","darkColorHandler","setColor","borderBoxFormatHandler","boxSizing","useBorderBox","BorderKeys","borderFormatHandler","boxShadowFormatHandler","boxShadow","datasetFormatHandler","idFormatHandler","PercentageRegex","tryParseSize","attrName","attrValue","sizeFormatHandler","maxWidth","maxHeight","minWidth","minHeight","verticalAlignFormatHandler","verticalAlign","wordBreakFormatHandler","wordBreak","defaultFormatHandlerMap","bold","boldFormatHandler","border","borderBox","fontFamilyFormatHandler","fontSizeFormatHandler","italic","italicFormatHandler","letterSpacing","letterSpacingFormatHandler","linkFormatHandler","listItemMetadata","listItemMetadataFormatHandler","listItemThread","listItemThreadFormatHandler","listLevelMetadata","listLevelMetadataFormatHandler","listLevelThread","listLevelThreadFormatHandler","listStylePosition","listStylePositionFormatHandler","listType","listTypeFormatHandler","margin","padding","strikeFormatHandler","superOrSubScript","superOrSubScriptFormatHandler","tableLayout","tableLayoutFormatHandler","tableSpacing","tableSpacingFormatHandler","textColorFormatHandler","textColorOnTableCell","textColorOnTableCellFormatHandler","underlineFormatHandler","styleBasedSegmentFormats","elementBasedSegmentFormats","sharedBlockFormats","sharedContainerFormats","defaultFormatKeysPerCategory","styleBasedSegment","elementBasedSegment","tableCellBorder","reduce","defaultFormatAppliers","override","additionalParsers","map","formatKey","concat","additionalAppliers","OrderedMapPlaceholderRegex","DefaultOrderedListStyles","DefaultUnorderedListStyles","CharCodeOfA","RomanValues","M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I","getOrderedListStyleValue","template","listNumber","match","subStr","convertDecimalsToAlpha","convertDecimalsToRoman","decimal","isLowerCase","alpha","String","fromCharCode","Math","floor","romanValue","timesRomanCharAppear","repeat","toLocaleLowerCase","parentNode","depth","nodeStack","listStyleType","getTagOfNode","OrderedMap","UnorderedMap","isLiUnderOl","displayForDummyItem","splice","startNumberOverride","OLTypeToStyleMap","A","getKeyFromValue","filter","listStyle","start","startNumber","ownerDocument","defaultView","getComputedStyle","originalWidth","visualWidth","offsetWidth","round","fontWeight","blockFontWeight","createElement","moveChildNodes","appendChild","isSuperOrSubScript","fontStyle","name","target","rel","anchorId","relationship","anchorTitle","anchorClass","textDecoration","strikethrough","superOrSubScriptSequence","split","join","trim","reverse","wrapper","implicitColor","BorderCollapsed","borderCollapse","borderSpacing","isBackground","darkColor","findLightColorFromDarkColor","tryGetFontColor","parseColorValue","lightModeColor","effectiveColor","registerColor","blockElement","address","article","aside","marginTop","marginBottom","center","dd","dl","dt","fieldset","figcaption","figure","footer","form","header","main","nav","section","th","PseudoTagNames","defaultImplicitFormatMap","ltr","rtl","end","initial","justify","align","MarginValueRegex","getFontSize","styleInPt","ptToPx","parseFloat","pt","resultUnit","px","exec","numStr","unit","num","domToContentModel","contentModelToDom","get","hasMetadata","addCode","addLink","isGeneralSegment","unwrapBlock","isWhiteSpacePreserved","normalizeSingleSegment","isPunctuation","isSpace","normalizeText","newSegment","isBlockEmpty","isBlockGroupEmpty","blockGroupType","isSegmentEmpty","isBlockGroup","isSegment","WHITESPACE_PRE_VALUES","normalizeParagraph","r","c","last","secondLast","noMarkerSegments","normalizeAllSegments","j","removeEmptySegments","SPACE","NONE_BREAK_SPACE","LEADING_SPACE_REGEX","TRAILING_SPACE_REGEX","resetNormalizeSegmentContext","textSegments","ignoreLeadingSpaces","ignoreTrailingSpaces","lastInlineSegment","lastTextSegment","normalizeSegment","normalizeTextSegments","normalizeLastTextSegment","first","substr","groupToUnwrap","formatHolder","keys","rowCount","spanLeftOrColSpan","spanAboveOrRowSpan","isHeader","spanLeft","spanAbove","calcPosition","pos","Position","toArray","childNodes","normalize","doc","modelToDomContext","createModelToDomContext","modelHandlers","blockGroupChildren","startPosition","endPosition","createRange","areAllCollapsed","extractSelectionRange","current","formatAppliers","getFormatAppliers","formatApplierOverride","additionalFormatAppliers","defaultContentModelHandlers","modelHandlerOverride","defaultImplicitFormatOverride","defaultModelHandlers","onNodeCreated","handleBlock","handleBlockGroupChildren","handleBr","handleEntity","general","handleGeneralModel","handleDivider","handleImage","handleList","handleListItem","handleParagraph","handleFormatContainer","handleSegment","segmentDecorator","handleSegmentDecorator","handleTable","handleText","refNode","handlers","childBlock","next","removeChild","handleSegmentCommon","reuseCachedElement","insertBefore","applyFormat","isInlineEntity","commitEntity","wrap","addDelimiterForEntity","after","addDelimiters","imageModel","document","widthNum","heightNum","handleMetadata","newList","layer","stackLevel","itemLevel","unwrap","needParagraphWrapper","formatOnWrapper","handleSegments","firstSegment","optimize","codeNode","tableNode","tbody","col","max","createTextNode","OptimizeTags","hasSameAttributes","element1","element2","attr1","attributes","attr2","classList","contains","removeUnnecessarySpan","mergeNode","lastChild","newNode","appliers","applier","segmentNode","containerNode","tagNameOrFormat","newFormat","startNode","createNodeStack","stackChild","getChildIndex","tablePreProcessor","n","hasSelectionInTable","shouldUseTableProcessor","BorderStyles","BorderSizeRegex","combinedBorder","v","NumberDefinition","ImageMetadataFormatDefinition","widthPx","heightPx","leftPercent","rightPercent","topPercent","bottomPercent","angleRad","createStringDefinition","naturalHeight","naturalWidth","TableCellMetadataFormatDefinition","bgColorOverride","createBooleanDefinition","NullStringDefinition","BooleanDefinition","TableFormatDefinition","topBorderColor","bottomBorderColor","verticalBorderColor","hasHeaderRow","headerRowColor","hasFirstColumn","hasBandedColumns","hasBandedRows","bgColorEven","bgColorOdd","tableBorderFormat","contentDiv","createContentModelEditorCore","createContentModel","core","this","getCore","api","setContentModel","cacheContentModel","reuseModel","lifecycle","shadowEditFragment","cachedModel","getContentModelDefaultFormat","EditorBase","cloneModel","getSelectionRangeEx","defaultDomToModelOptions","createEditorContext","internalCreateContentModel","defaultModelToDomOptions","select","switchShadowEdit","editorCore","isOn","getSelectionRange","shadowEditSelectionPath","getSelectionPath","createDocumentFragment","state","editor","disposer","onPaste","event","clipboardData","isClipboardEvent","dataTransfer","items","preventDefault","extractClipboardItems","allowedCustomPasteType","then","isDisposed","Browser","isAndroid","deleteSelection","getOnDeleteEntityCallback","removeContentForAndroid","getName","initialize","addDomEventHandler","paste","e","copy","onCutCopy","cut","dispose","getState","isCut","selection","pasteModel","iterateSelections","path","tableContext","getTempDiv","getDarkColorHandler","newRange","tempDiv","querySelector","elementToSelect","childElementCount","selectionExToRange","triggerPluginEvent","clonedRoot","rawEvent","addRangeToSelection","runAsync","focus","addUndoSnapshot","getCustomData","getDocument","body","promoteToContentModelEditorCore","cmCore","textColors","backgroundColors","getDefaultSegmentFormat","promoteDefaultFormat","experimentalFeatures","isFeatureEnabled","promoteContentModelInfo","originalApi","promoteCoreApi","modifiedOptions","plugins","corePluginOverride","typeInContainer","copyPaste","createEditorCore","triggeredEntityEvents","editWithContentModel","hasDefaultFormat","onPluginEvent","eventType","handleEntityOperationEvent","handleKeyDownEvent","which","defaultPrevented","rangeEx","shouldDeleteWithContentModel","isCharacterValue","tryApplyDefaultFormat","startPos","getStart","formatWithContentModel","deleteResult","insertPoint","blockCount","blockIndex","previousBlock","applyDefaultFormat","currentFormat","pendingFormat","getPendingFormat","setPendingFormat","isModifierKey","canDeleteBefore","canDeleteAfter","previousSibling","isComposing","isInIME","checkAndApplyPendingFormat","data","clearPendingFormat","canApplyPendingFormat","unknownTagReplacement","ev","domToModelOption","getPasteSource","processPastedContentFromWordDesktop","processPastedContentWacComponents","pasteType","processPastedContentFromExcel","getTrustedHTMLHandler","sanitizingOption","additionalTagReplacements","processPastedContentFromPowerPoint","parseLink","parseDeprecatedColor","LAST_TD_END_REGEX","LAST_TR_END_REGEX","LAST_TR_REGEX","LAST_TABLE_REGEX","DEFAULT_BORDER_STYLE","excelHandler","html","htmlBefore","trMatch","tableMatch","trustedHTMLHandler","fragment","DOMParser","parseFromString","Array","from","replaceChildren","borderStyle","borderBottom","borderLeft","borderRight","borderTop","LIST_CONTAINER_ELEMENT_CLASS_NAME","EMPTY_TEXT_RUN","TEMP_ELEMENTS_CLASSES","CLASSES_TO_KEEP","LIST_ELEMENT_TAGS","LIST_ELEMENT_SELECTOR","wacSubSuperParser","wacElementProcessor","elementTag","matchesSelector","removeProperty","previousElementSibling","findClosestElementAncestor","shouldClearListContext","wacLiElementProcessor","lastblock","currentLevel","wacListItemParser","wacListLevelParser","paddingLeft","setProcessor","wacListProcessor","additionalAllowedCssClasses","isWrappedInContainer","toUpperCase","PERCENTAGE_REGEX","removeNonValidLineHeight","parsedLineHeight","listLevelParser","wordDesktopElementProcessor","listItemElementParser","chainSanitizerCallback","cssStyleCallbacks","elementCallbacks","styles","getStyles","processWordList","processWordComments","MSO_COMMENT_ANCHOR_HREF_REGEX","MSO_LIST","MSO_LIST_IGNORE","startNumberOverrideParser","fakeBullet","wordKnownLevels","wordLevel","wordList","has","getFakeBulletText","isIgnoreNode","textContent","listAttribute","Map","wordListStyle","listProps","isFakeBullet","getFakeBulletTagName","newLevel","processAsListItem","set","entry","DeprecatedColorList","property","SUPPORTED_PROTOCOLS","INVALID_LINKS_REGEX","url","URL","protocol","removeAttribute","operation","isMac","altKey","metaKey","ctrlKey","default","combineBorderValue","extractBorderValues","updateImageMetadata","updateTableCellMetadata","updateTableMetadata","isNext","newPath","nextBlock","unshift","shift","para","find","siblingSegment","left","right","TableAlignMap","alignment","paragraphOrListItemOrTable","getOperationalBlocks","newAligment","alignTable","indentation","paragraphOrListItem","isIndent","isBlockGroupOfType","isRtl","originalValue","newValue","ceil","isQuote","paragraphOfQuote","blockAndParent","canMergeQuote","wrapBlockStep1","wrapBlockStep2","clearContainerFormat","containerPathIndex","getClosestAncestorBlockGroupIndex","containerIndex","newContainer","clearListFormat","clearBlockFormat","blocksToClear","segmentsToClear","tablesToClear","arrayPush","colIndex","rowIndex","isWholeTableSelected","clearTableCellFormat","includeListFormatHolder","isOnlySelectionMarkerSelected","adjustWordSelection","isWholeBlockSelected","defaultSegmentFormat","clearSegmentsFormat","applyTableFormat","createTablesFormat","cloneBlock","cloneBlockBase","cloneBlockGroupBase","cloneFormatContainer","cloneGeneralBlock","item","cloneSelectionMarker","cloneEntity","newParagraph","cloneSegment","cloneModelWithFormat","cloneParagraph","cloneTableRow","cloneModelWithDataset","cloneTable","cloneSegmentBase","textSegment","cloneTableCell","newModel","blockGroupTypes","stopTypes","input","mergeParagraph","markerPosition","newPara","mergeToCurrentParagraph","splitParagraph","segmentIndex","mergeTable","newTable","source","newCell","k","leftCell","aboveCell","normalizeTable","insertBlock","mergeList","listItemIndex","newParaFormat","paraIndex","newListItem","applyDefaultFormatOption","mergeSegmentFormat","targetformat","sourceFormat","onDeleteEntity","insertPosition","mergeFormat","mergeValue","isFirst","formatState","firstTableContext","firstBlock","isFirstImage","isFirstSegment","retrieveStructureFormat","isMultilineSelection","headerLevel","validHeaderLevel","retrieveParagraphFormat","extractedBorder","borderColor","borderWidth","mergedFormat","superOrSubscript","isBold","retrieveSegmentFormat","canUnlink","canAddImageAltText","borderRadius","canMergeTableCell","tableFormat","isInTable","tableHasHeader","retrieveTableFormat","step1Result","blockToWrap","creator","canMerge","prevBlock","createAndAdd","additionalSteps","deleteExpandedSelection","step","isValidDeleteSelectionContext","lastParagraph","lastTableContext","mergeParagraphAfterDelete","deleteAllSegmentBefore","deleteSegment","getDeleteCollapsedSelection","segmentsWithoutBr","fixupBr","blockToDelete","segmentToDelete","getLeafSiblingBlock","createInsertPoint","deleteBlock","forwardDeleteCollapsedSelection","backwardDeleteCollapsedSelection","DeleteWordState","getDeleteWordSelection","startIndex","deleteNext","iterator","markerIndex","forward","preserveWhiteSpace","punctuation","space","newText","iterateSegments","curr","done","forwardDeleteWordSelection","backwardDeleteWordSelection","replacement","DeleteSelectionIteratingOptions","contentUnderSelectedTableCell","contentUnderSelectedGeneralElement","markerFormat","insertMarkerIndex","isBackward","currentIndex","normalizePreviousSegment","deleteSingleChar","array","deleteLength","deleteState","getPendingFormatHolder","position","holder","getFocusedPosition","equalTo","PendingFormatHolderKey","borderFormat","findListItems","pushNullIfNecessary","areListTypesCompatible","listItems","compareToIndex","currentLevels","compareToLevels","hasStartNumberOverride","levelLength","slice","currentItem","isOrderedList","filterListItems","shouldTurnOnList","paragraphOrListItems","alreadyInExpectedType","existingListItems","hasIgnoredParagraphBefore","itemIndex","firstMatcher","siblingMatcher","paragraphs","getSelectedParagraphs","changed","findIndex","setSelection","findDelimiter","moveRightward","word","offset","splitTextSegment","found","markerBlock","markerSelectionIndex","currentSegment","firstCol","getSelectedSegmentsAndParagraphs","includingFormatHolder","selections","collectSelections","deepFirst","findSequence","removeUnmeaningfulSelections","groupIndex","checkFirstParagraph","allSegments","internalIterateSelections","treatAllAsSelect","hasSelectedSegment","hasUnselectedSegment","handleGeneralContent","handleGeneralElement","setSelectionToBlockGroup","handleSelection","setIsSelected","startCo","findCell","endCo","setSelectionToTable","segmentsToDelete","setSelectionToSegment","setSelectionToBlock","selectable","TextAlignValueMap","VerticalAlignValueMap","sel","getSelectedCells","firstRow","lastRow","lastCol","DEFAULT_FORMAT","keepCellShade","effectiveMetadata","bgColorOverrides","forceClear","currentRow","updateBgColorOverrides","clearCache","cellIndex","transparentBorderMatrix","BorderFormatters","firstColumn","lastColumn","formatColor","alwaysUseTransparent","getBorderStyleFromColor","formatBorders","setTableCellBackgroundColor","formatBackgroundColors","setBorderColor","setFirstColumnFormat","setHeaderRowFormat","noSpanAbove","noSpanLeft","noDifferentBelowSpan","spanCount","getBelowSpanCount","noDifferentRightSpan","getRightSpanCount","columns","cellInNextCol","collapseTableSelection","cellInNextRow","hasSelection","insertLeft","insertAbove","sourceRow","canMergeCells","mergingColIndex","newSelectedCol","mergingRowIndex","newSelectedRow","getTableCellWidth","tryMoveBlocks","targetCell","sourceCell","isColorOverride","lightness","colorValues","parseColor","red","green","blue","min","calculateLightness","newWidth","belowRow","belowCell","newHeight","newRow","setModelAlignment","formatParagraphWithContentModel","paddingRight","headerStyle","setModelIndentation","preservePendingFormat","spacing","toString","DefaultQuoteFormat","BuildInQuoteFormat","quoteFormat","fullQuoteFormat","toggleModelBlockQuote","shouldDeleteAllSegmentsBefore","shouldDeleteWord","getDeleteSteps","handleKeyboardEventResult","skipUndoSnapshot","changeSource","getChangeData","__","previousSegment","clearModelFormat","getUndoState","getZoomScale","retrieveModelFormatState","useReducedModel","adjustSegmentSelection","ref","file","readFile","dataUrl","previousSrc","newSrc","originalSrc","getImageSrc","getMetadata","insertImageWithSrc","mergeModel","imageFileOrSrc","altText","getSelectedSegments","URI_REGEX","MAILTO_REGEX","FTP_REGEX","applyLinkPrefix","prefix","search","displayText","sanitizer","HtmlSanitizer","sanitize","checkXss","matchLink","normalizedUrl","originalText","originalUrl","modelElement","isChanged","getFirstSelectedListItem","findListItemsInSameThread","setListType","formatSegmentWithContentModel","capitalization","language","toLocaleUpperCase","wordArray","charAt","regex","RegExp","FONT_SIZES","change","sizeInPt","newSize","changeBase","fontSizes","getNewFontSize","changeFontSizeInternal","fontName","boldStyle","isTurningOn","DefaultCode","tableModel","getFirstSelectedTable","alignTableCell","deleteTableColumn","deleteTableRow","deleteTable","insertTableRow","insertTableColumn","mergeTableRow","mergeTableCells","mergeTableColumn","splitTableCellHorizontally","splitTableCellVertically","createTableStructure","apiName","eventChangeData","setStyleCallback","toggleStyleCallback","segmentHasStyleCallback","segmentAndParagraphs","isCollapsedSelection","formatsAndSegments","isTurningOff","reducedModelChildProcessor","triggerContentChangedEvent","formatApiName","pasteAsText","applyCurrentFormat","pasteAsImage","snapshotBeforePaste","setContent","getContent","createDefaultHtmlSanitizerOptions","htmlAfter","htmlAttributes","createBeforePasteEvent","getPasteType","rawHtml","imageDataUri","retrieveMetadataFromClipboard","handleImagePaste","handleTextPaste","sanitizePasteContent","createFragmentFromClipboardData","getDefaultFormat","blockElementParser","additionalPlugins","initialContent","ContentModelPastePlugin","getDarkColor","ContentModelEditor","createContentModelEditor","module","exports","roosterjs","extendStatics","d","setPrototypeOf","__proto__","prototype","hasOwnProperty","call","__extends","TypeError","constructor","create","__assign","t","arguments","__rest","getOwnPropertySymbols","propertyIsEnumerable","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__param","paramIndex","__esDecorate","ctor","descriptorIn","contextIn","initializers","extraInitializers","accept","f","kind","descriptor","access","addInitializer","init","__runInitializers","thisArg","useValue","__propKey","__setFunctionName","description","configurable","__metadata","metadataKey","metadataValue","__awaiter","_arguments","P","generator","Promise","resolve","reject","fulfilled","rejected","__generator","g","label","sent","trys","ops","verb","Symbol","op","__createBinding","o","m","k2","__esModule","writable","enumerable","__exportStar","__values","__read","ar","error","__spread","__spreadArrays","il","jl","__spreadArray","to","pack","l","__await","__asyncGenerator","asyncIterator","q","resume","fulfill","settle","__asyncDelegator","__asyncValues","__makeTemplateObject","cooked","raw","__setModuleDefault","__importStar","mod","__importDefault","__classPrivateFieldGet","receiver","__classPrivateFieldSet","__classPrivateFieldIn","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","prop","toStringTag","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file