{"version":3,"sources":["../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/getSelectionRange.js","../../../../node_modules/.pnpm/redux-persist@6.0.0_react@17.0.1_redux@4.0.5/node_modules/redux-persist/es/integration/react.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/clipboard/extractClipboardItems.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/entity/getEntitySelector.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/edit/deleteSelectedContent.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/utils/blockWrap.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/Paste/index.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/toggleBold.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/toggleNumbering.js","../../../../node_modules/.pnpm/roosterjs@8.17.0/node_modules/roosterjs/lib/index.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/setFontName.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/snapshots/createSnapshots.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/wordConverter.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/selection/getPositionRect.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/table/applyTableFormat.js","../../../../node_modules/.pnpm/scheduler@0.20.2/node_modules/scheduler/cjs/scheduler.production.min.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/htmlSanitizer/chainSanitizerCallback.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/list/VList.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/table/VTable.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/Alignment.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/utils/execCommand.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/event/cacheGetEventData.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/listFeatures.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/htmlSanitizer/HtmlSanitizer.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/moveChildNodes.js","../../../../node_modules/.pnpm/roosterjs-color-utils@1.0.0/node_modules/roosterjs-color-utils/lib/index.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/event/PluginEventType.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/HyperLink.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ContentEdit/ContentEdit.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/setAlignment.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/corePlugins/EditPlugin.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/entity/commitEntity.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/CustomReplace.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ContentEdit/index.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/region/mergeBlocksInRegion.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/inlineElements/getFirstLastInlineElement.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/toggleSuperscript.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/selectTable.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/resizeByPercentage.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/splitParentNode.js","../../../../node_modules/.pnpm/redux-persist@6.0.0_react@17.0.1_redux@4.0.5/node_modules/redux-persist/lib/storage/getStorage.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/convertPastedContentFromWord.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/corePlugins/createCorePlugins.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/DarkModeDatasetNames.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/style/setStyles.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/list/VListItem.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/corePlugins/MouseUpPlugin.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/snapshots/canMoveCurrentSnapshot.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/safeInstanceOf.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/table/insertTable.js","../../../../node_modules/.pnpm/resolve-pathname@3.0.0/node_modules/resolve-pathname/esm/resolve-pathname.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/Paste/lineMerge/handleLineMerge.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/event/clearEventDataCache.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/ColorTransformDirection.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/getTagOfNode.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/Paste/Paste.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/isNodeAfter.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/utils/collapseSelectedBlocks.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/checkEditInfoState.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/index.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/Paste.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/getPendableFormatState.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/hasFocus.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/ImageEdit.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/arrayPush.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/selection/Position.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/inlineElements/PartialInlineElement.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/setColor.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/selection/setHtmlWithSelectionPath.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/toggleHeader.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/utils/blockFormat.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/setIndentation.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/shortcutFeatures.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/matchLink.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/removeLink.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/edit/getTextContent.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/insertImage.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/clipboard/extractClipboardItemsForIE.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/setDirection.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/EntityOperation.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/coreApiMap.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/replaceWithNode.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/GetContentMode.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ImageEdit/imageEditors/Cropper.js","../../../../node_modules/.pnpm/roosterjs@8.17.0/node_modules/roosterjs/lib/createEditor.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/index.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/snapshots/clearProceedingSnapshots.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/ensureTypeInContainer.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableResizer.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/changeElementTag.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/applyChange.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/addUndoSnapshot.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/inlineElements/getInlineElementAtNode.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/getContent.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/Paste/officeOnlineConverter/convertPastedContentFromWordOnline.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/htmlSanitizer/getInheritableStyles.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableInserter.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ContentEdit/getAllFeatures.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/style/getStyles.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/splitTextNode.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/browser/DocumentPosition.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/tableFeatures.js","../../../../node_modules/.pnpm/regenerator-runtime@0.13.11/node_modules/regenerator-runtime/runtime.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/insertNode.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/toggleSubscript.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ImageResize/ImageResize.js","../../../../node_modules/.pnpm/roosterjs-color-utils@1.0.0/node_modules/roosterjs-color-utils/lib/utils/getDarkColor.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/rotateElement.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/contains.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/switchShadowEdit.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/clearBlockFormat.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/ContentEdit.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/applyFormat.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ImageResize/index.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/blockElements/NodeBlockElement.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/corePlugins/EntityPlugin.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/Paste/pptConverter/convertPastedContentFromPowerPoint.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ImageEdit/index.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/Watermark.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/Indentation.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/list/VListChain.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/Watermark/index.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/Paste/officeOnlineConverter/ListItemBlock.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/insertEntity.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/setTextColor.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/setImageAltText.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ImageEdit/ImageEdit.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/ExperimentalFeatures.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/blockElements/getBlockElementAtNode.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/utils/applyInlineStyle.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/getGeneratedImageSize.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/event/isModifierKey.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/browser/NodeType.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/contentTraverser/SelectionBlockScoper.js","../../../../node_modules/.pnpm/redux@4.0.5/node_modules/redux/es/redux.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/structuredNodeFeatures.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/WordConverterArguments.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/editor/Editor.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/CustomReplace/CustomReplace.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/Watermark/Watermark.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/snapshots/addSnapshot.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/toggleBullet.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/toArray.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/clipboard/extractClipboardEvent.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/Paste/commonConverter/convertPastedContentForLI.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ImageEdit/imageEditors/Rotator.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/getPendableFormatState.js","../../../../node_modules/.pnpm/resolve-pathname@2.2.0/node_modules/resolve-pathname/index.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/TableCellSelection/TableCellSelection.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/toggleStrikethrough.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/getCellCoordinates.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/setBackgroundColor.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/cursorFeatures.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/converterUtils.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/region/collapseNodesInRegion.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/region/getSelectedBlockElementsInRegion.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/getStyleBasedFormatState.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/experiment/experimentCommitListChains.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/list/setListItemStyle.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/region/isNodeInRegion.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/snapshots/canUndoAutoComplete.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/list/getListTypeFromNode.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/Capitalization.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/markdownFeatures.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/list/createVListFromRegion.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/restoreUndoSnapshot.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/entityFeatures.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/TableCellSelection/index.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/getComputedStyles.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/ImageResize.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/queryElements.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/HyperLink/HyperLink.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/resetImage.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/getTargetSizeByPercentage.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/toggleUnderline.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/index.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/focus.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/interface/SelectionRangeEx.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/selectRange.js","../../../../node_modules/.pnpm/redux-persist@6.0.0_react@17.0.1_redux@4.0.5/node_modules/redux-persist/es/constants.js","../../../../node_modules/.pnpm/redux-persist@6.0.0_react@17.0.1_redux@4.0.5/node_modules/redux-persist/es/stateReconciler/autoMergeLevel1.js","../../../../node_modules/.pnpm/redux-persist@6.0.0_react@17.0.1_redux@4.0.5/node_modules/redux-persist/es/createPersistoid.js","../../../../node_modules/.pnpm/redux-persist@6.0.0_react@17.0.1_redux@4.0.5/node_modules/redux-persist/es/getStoredState.js","../../../../node_modules/.pnpm/redux-persist@6.0.0_react@17.0.1_redux@4.0.5/node_modules/redux-persist/es/purgeStoredState.js","../../../../node_modules/.pnpm/redux-persist@6.0.0_react@17.0.1_redux@4.0.5/node_modules/redux-persist/es/persistReducer.js","../../../../node_modules/.pnpm/redux-persist@6.0.0_react@17.0.1_redux@4.0.5/node_modules/redux-persist/es/persistStore.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/corePlugins/CopyPastePlugin.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/toggleBlockQuote.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/browser/DocumentCommand.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/editInfo.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/Picker.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/readFile.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/inlineElements/EmptyInlineElement.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/changeFontSize.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/Picker/index.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/browser/ContentType.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/Browser.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/Paste/excelConverter/convertPastedContentFromExcel.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/selection/createRange.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/index.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/triggerEvent.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/ClearFormatMode.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/clearFormat.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/forEachSelectedCell.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/toggleCodeBlock.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/TableBorderFormat.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/CutPasteListChain/CutPasteListChain.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/utils/toggleListType.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/createElement.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/table/editTable.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/fromHtml.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/corePlugins/PendingFormatStatePlugin.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/createLink.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/inlineElements/getInlineElementBeforeAfter.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/CutPasteListChain.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/findClosestElementAncestor.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableEditorFeature.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/ListType.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/TableResize/editors/CellResizer.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ImageEdit/imageEditors/Resizer.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/region/getSelectionRangeInRegion.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/getInnerHTML.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/FontSizeChange.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/event/isCtrlOrMetaPressed.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/list/getRootListNode.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/ContextMenu.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/index.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/snapshots/moveCurrentSnapshot.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/normalizeTableSelection.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/isBlockElement.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/EntityClasses.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/pluginUtils/DragAndDropHelper.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/inlineElements/ImageInlineElement.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/setFontSize.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/htmlSanitizer/getAllowedValues.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/LevelLists.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/corePlugins/DOMEventPlugin.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/blockElements/StartEndBlockElement.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/getLeafSibling.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/CutPasteListChain/index.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/htmlSanitizer/cloneObject.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/corePlugins/TypeInContainerPlugin.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/KnownCreateElementDataIndex.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/region/getRegionsFromRange.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/getLeafNode.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/htmlSanitizer/createDefaultHtmlSanitizerOptions.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/contentTraverser/BodyScoper.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/contentTraverser/ContentTraverser.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/setContent.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/isResizedTo.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/inlineElements/applyTextStyle.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/ContentPosition.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/selection/isPositionAtBeginningOf.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/wrap.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/TableResize/TableResize.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/attachDomEvent.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/isNodeEmpty.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/RegionType.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/selection/getSelectionPath.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/shouldSkipNode.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ContextMenu/ContextMenu.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/htmlSanitizer/getPredefinedCssForElement.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/isVoidHtmlElement.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableSelector.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/ChangeSource.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/generateDataURL.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/matchesSelector.js","../../../../node_modules/.pnpm/scheduler@0.20.2/node_modules/scheduler/index.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/corePlugins/UndoPlugin.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/TableResize/editors/TableEditor.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/table/applyCellShading.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/toggleItalic.js","../../../../node_modules/.pnpm/redux-persist@6.0.0_react@17.0.1_redux@4.0.5/node_modules/redux-persist/lib/storage/createWebStorage.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/quoteFeatures.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/contentTraverser/SelectionScoper.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/selection/getHtmlWithSelectionPath.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/HyperLink/index.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/ImageEditOperation.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/normalizeRect.js","../../../../node_modules/.pnpm/redux-thunk@2.3.0_redux@4.0.5/node_modules/redux-thunk/es/index.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/entity/getEntityFromElement.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/Paste/wordConverter/WordCustomData.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/edit/adjustInsertPosition.js","../../../../node_modules/.pnpm/redux-persist@6.0.0_react@17.0.1_redux@4.0.5/node_modules/redux-persist/lib/storage/index.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/TableResize.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/TableResize/index.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/unwrap.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/Paste/imageConverter/convertPasteContentForSingleImage.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/blockElements/getFirstLastBlockElement.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/setOrderedListNumbering.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/createPasteFragment.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/event/isCharacterValue.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/browser/Keys.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/TableOperation.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/utils/applyListItemWrap.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/Picker/PickerPlugin.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/QueryScope.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/corePlugins/LifecyclePlugin.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/utils/collapseNodes.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/CustomReplace/index.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ContentEdit/features/autoLinkFeatures.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/inlineElements/LinkInlineElement.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/inlineElements/NodeInlineElement.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/transformColor.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/TableCellSelection.js","../../../../node_modules/.pnpm/roosterjs-editor-core@8.17.0/node_modules/roosterjs-editor-core/lib/coreApi/getSelectionRangeEx.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/table/tableFormatInfo.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/selection/addRangeToSelection.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/table/formatTable.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/getFormatState.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/TableCellSelection/utils/removeCellsOutsideSelection.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/canRegenerateImage.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/PositionType.js","../../../../node_modules/.pnpm/roosterjs-editor-api@8.17.0/node_modules/roosterjs-editor-api/lib/format/changeCapitalization.js","../../../../node_modules/.pnpm/roosterjs-editor-types@8.17.0/node_modules/roosterjs-editor-types/lib/enum/Direction.js","../../../../node_modules/.pnpm/roosterjs-editor-plugins@8.17.0/node_modules/roosterjs-editor-plugins/lib/plugins/ContextMenu/index.js","../../../../node_modules/.pnpm/roosterjs-editor-dom@8.17.0/node_modules/roosterjs-editor-dom/lib/contentTraverser/PositionContentSearcher.js"],"names":["Object","defineProperty","exports","value","getSelectionRange","roosterjs_editor_dom_1","__webpack_require__","core","tryGetFromCache","_a","result","lifecycle","shadowEditFragment","shadowEditSelectionPath","createRange","contentDiv","start","end","api","hasFocus","selection","ownerDocument","defaultView","getSelection","rangeCount","range","getRangeAt","contains","domEvent","selectionRange","react__WEBPACK_IMPORTED_MODULE_0__","_typeof","obj","Symbol","iterator","constructor","prototype","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","key","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","_assertThisInitialized","self","ReferenceError","_setPrototypeOf","p","_defineProperty","PersistGate","_PureComponent","_getPrototypeOf2","_this","call","instance","Constructor","TypeError","_classCallCheck","this","_len","arguments","args","Array","_key","apply","concat","bootstrapped","persistor","getState","onBeforeLift","Promise","resolve","finally","setState","_unsubscribe","protoProps","staticProps","subClass","superClass","create","_inherits","subscribe","handlePersistorState","children","state","loading","__assign","assign","t","s","n","hasOwnProperty","readFile_1","Browser_1","CLIPBOARD_HTML_HEADER_REGEX","OTHER_TEXT_TYPE","EDGE_LINK_PREVIEW","ContentHandlers","data","rawHtml","Browser","isEdge","html","headerValues","exec","parseInt","substring","workaroundForEdge","text","type","customValues","tryParseLinkPreview","linkPreview","JSON","parse","default","items","options","types","image","contentHandlers","allowLinkPreview","all","map","item","indexOf","kind","customType_1","allowedCustomPasteType","textType","index","undefined","getAllowedCustomType","handler_1","getAsString","push","getAsFile","dataUrl","imageDataUri","then","id","arrayPush_1","collapseNodesInRegion_1","getRegionsFromRange_1","getSelectionRangeInRegion_1","mergeBlocksInRegion_1","Position_1","queryElements_1","safeInstanceOf_1","splitTextNode_1","ensureBeforeAndAfter","node","offset","isStart","newNode","nodeBefore","childNodes","nodeAfter","previousSibling","nextSibling","emptyNode","createTextNode","parentNode","insertBefore","root","nodesToDelete","nodesPairToMerge","region","regionRange","startContainer","endContainer","startOffset","endOffset","beforeEnd","afterEnd","_b","beforeStart","afterStart","nodes","filter","x","forEach","removeChild","blockFormat_1","editor","wrapFunction","beforeRunCallback","blocks","getSelectedBlockElementsInRegion","collapseNodesInRegion","NodeTag","getTagOfNode","wrap","toArray","isNodeInRegion","some","splitBalancedNodeRange","Paste","Paste_1","get","execCommand_1","toggleListType_1","startNumber","__createBinding","m","k","k2","__exportStar","createEditor","createEditor_1","applyListItemWrap_1","fontName","element","isInnerNode","style","fontFamily","maxSize","snapshots","totalSize","currentIndex","autoCompleteIndex","createWordConverter","WordCustomData_1","nextUniqueId","numBulletsConverted","numNumberedConverted","wordConverterArgs","wordCustomData","createCustomData","createElement_1","createRange_1","normalizeRect_1","position","rect","getBoundingClientRect","normalize","rects","getClientRects","nodeType","span","tag","insertNode","changeElementTag_1","setColor_1","TRANSPARENT","TABLE_CELL_TAG_NAME","TABLE_HEADER_TAG_NAME","CELL_SHADE","hasCellShade","cell","td","dataset","getBorderStyle","table","cells","format","borderCollapse","row","rowIndex","cellIndex","isFirstRow","isLastRow","isFirstColumn","isLastColumn","borderTop","topBorderColor","borderLeft","verticalBorderColor","borderRight","borderBottom","bottomBorderColor","setBorderColors","tableBorderFormat","borderLeftColor","borderRightColor","borderTopColor","borderBottomColor","formatBorders","setBordersType","color","bgColorEven","bgColorOdd","hasBandedRows","hasBandedColumns","shouldColorWholeTable","backgroundColor","setCellColor","hasFirstColumn","scope","setFirstColumnFormat","hasHeaderRow","headerRowColor","setHeaderRowFormat","f","g","h","performance","now","l","unstable_now","Date","q","window","MessageChannel","u","w","a","b","setTimeout","clearTimeout","unstable_shouldYield","unstable_forceFrameRate","y","console","z","cancelAnimationFrame","requestAnimationFrame","error","A","B","C","D","E","Math","floor","F","G","port2","port1","onmessage","postMessage","H","c","d","e","I","J","K","pop","v","r","sortIndex","L","M","N","O","P","Q","R","S","T","callback","startTime","expirationTime","U","V","priorityLevel","W","unstable_IdlePriority","unstable_ImmediatePriority","unstable_LowPriority","unstable_NormalPriority","unstable_Profiling","unstable_UserBlockingPriority","unstable_cancelCallback","unstable_continueExecution","unstable_getCurrentPriorityLevel","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_requestPaint","unstable_runWithPriority","unstable_scheduleCallback","delay","unstable_wrapCallback","name","newCallback","originalCallback_1","_i","__spreadArray","to","from","pack","ar","slice","getListTypeFromNode_1","getTagOfNode_1","isBlockElement_1","isNodeEmpty_1","splitParentNode_1","toArray_1","unwrap_1","VListItem_1","wrap_1","VList","rootList","Error","moveChildNodesToLi","moveLiToList","populateItems","getLastItemNumber","getStart","getListType","getLevel","isDummy","writeBack","lastList","doc","listStack","createDocumentFragment","placeholder","replaceChild","getNewListStart","splice","topList","removeAttribute","split","separator","getNode","setNewListStart","setIndentation","indentation","softOutdent","findListItems","setIsDummy","outdent","indent","changeListType","targetType","needChangeType","appendItem","nodeTag","mergeVList","list","listStartPos","listEndPos","startIndex","isAfter","endIndex","max","min","listTypes","newListTypes","isListElement","nodeValue","trim","bind","currentItem","child","appendChild","li","furtherNodes","applyTableFormat_1","moveChildNodes_1","tableFormatInfo_1","DEFAULT_FORMAT","VTable","normalizeSize","zoomScale","trs","tagName","parentElement","getTableFromTd","currentTd_1","rows","tr","sourceCol","targetCol","col","colSpan","rowSpan","hasTd","spanLeft","spanAbove","width","height","formatInfo","getTableFormatInfo","skipApplyFormat","cloneNode","recalculateSpans","saveTableInfo","applyFormat","deleteCellShadeDataset","edit","operation","currentRow","currentCell","cloneCell","newRow_1","countSpanAbove","colIndex","nextCell","getCell","newCell","getTd","forEachCellOfCurrentColumn","newCol_1","countSpanLeft","forEachCellOfColumn","forEachCellOfCurrentRow","rowStep","aboveCell","belowCell","colStep","leftCell","rightCell","splitRow","marginLeft","marginRight","textAlign","verticalAlign","getCellsWithBorder","borderPos","getLeftCells","j","cellRect","found","right","left","forEachCellOfRow","getCurrentTd","isNaN","normalizeEmptyTableCells","innerHTML","document","createElement","normalizeTableCellSize","func","setHTMLElementSizeInPx","sizeTransformer","newWidth","newHeight","boxSizing","firstChild","Alignment","command","focus","formatter","getDocument","execCommand","getSelectionRangeEx","areAllCollapsed","addUndoSnapshot","formatState","getPendableFormatState","formatName","keys","PendableFormatCommandMap","triggerPluginEvent","tempRange","ranges","select","coordinates","event","getter","eventDataCache","ListFeatures","roosterjs_editor_api_1","IndentWhenTab","shouldHandleEvent","rawEvent","shiftKey","cacheGetListElement","handleEvent","preventDefault","OutdentWhenShiftTab","MergeInNewLine","getElementAtCursor","collapsed","isPositionAtBeginningOf","Position","blockFormat","vList","createVListFromRegion","toggleListAndPreventDefault","defaultDisabled","OutdentWhenBackOn1stEmptyLine","isNodeEmpty","MaintainListChainWhenDelete","getEnd","isAtEnd","cacheGetEventData","pos","traverser","getBodyTraverser","getNextBlockElement","getStartNode","getCacheNextSibling","chains","getListChains","runAsync","experimentCommitListChains","OutdentWhenEnterOnEmptyLine","isIE","isChrome","AutoBullet","searcher","getContentSearcherOfCursor","isAListPattern","getSubStringBefore","getNearestNonTextInlineElement","insertContent","regions","textBeforeCursor","textRange","getRangeFromText","prepareAutoBullet","toggleBullet","toggleNumbering","getSelectedRegions","num","deleteContents","MaintainListChain","queryElements","test","VListChain","createListChains","block","getBlockElementAtNode","endNode","getEndNode","br","isBlockElement","includeSiblingLists","listInfo","listElement","toggleListType","autoBullet","indentWhenTab","outdentWhenShiftTab","outdentWhenBackspaceOnEmptyFirstLine","outdentWhenEnterOnEmptyLine","mergeInNewLineWhenBackspaceOnFirstChar","maintainListChain","maintainListChainWhenDelete","getInheritableStyles_1","getPredefinedCssForElement_1","getStyles_1","setStyles_1","cloneObject_1","getAllowedValues_1","HtmlSanitizer","elementCallbacks","cloneObject","styleCallbacks","getStyleCallbacks","cssStyleCallbacks","attributeCallbacks","tagReplacements","getTagReplacement","additionalTagReplacements","allowedAttributes","getAllowedAttributes","additionalAllowedAttributes","allowedCssClassesRegex","getAllowedCssClassesRegex","additionalAllowedCssClasses","defaultStyleValues","getDefaultStyleValues","additionalDefaultStyleValues","additionalPredefinedCssForElement","additionalGlobalStyleNodes","preserveHtmlComments","unknownTagReplacement","convertInlineCss","additionalStyleNodes","sanitizeHtml","sanitizer","currentStyles","currentElementOrStyle","convertCssOnly","DOMParser","parseFromString","body","convertGlobalCssToInlineCss","sanitize","rootNode","processNode","styleNodes","querySelectorAll","styleSheets_1","reverse","sheet","styleSheet","_loop_1","styleRule","cssRules","cssText","CSSRule","STYLE_RULE","selectorText","selector","setAttribute","getAttribute","currentStyle","context","isElement","isText","isFragment","isComment","shouldKeep","replacement","toLowerCase","whiteSpace","thisStyle","processAttributes","preprocessCss","processCss","next","replace","predefinedStyles","styles","isInheritable","keep","substr","attributes","attribute","name_1","newValue","processCssClass","match","originalValue","calculatedValue","originalClasses","calculatedClasses","className","join","source","keepExistingChildren","getDarkColor_1","getDarkColor","PluginEventType","getAllFeatures_1","ContentEdit","settingsOverride","additionalFeatures","getName","initialize","features","allFeatures","feature","hasSettingForKey","addContentEditFeature","dispose","alignment","isATable","isFeatureEnabled","vTable","firstCell","lastCell","rowsLength","firstX","firstY","lastX","lastY","isWholeTableSelected","alignTable","align","alignText","EditPlugin","onPluginEvent","hasFunctionKey","ctrlOrMeta","eventType","isCtrlOrMetaPressed","altKey","which","allowFunctionKeys","CONTENT_EDITABLE","wrapper","isReadonly","contentEditable","getAllFeatures","ContentEdit_1","contains_1","getBlockElementAtNode_1","isNodeInRegion_1","collapseNodes_1","refNode","targetNode","blockRoot","collapseToSingleElement","commonContainer","collapse","parent_1","nodeToRemove","nodeToMerge","getLastInlineElement","getFirstInlineElement","getInlineElementAtNode_1","getLeafNode_1","getFirstLeafNode","getLastLeafNode","selectTable","STYLE_ID","ensureUniqueId","el","idPrefix","getElement","getElementById","cont_1","generateCssFromCell","contentDivSelector","tableId","middleElSelector","cellTag","removeImportant","styles_1","getStyles","modifiedStyles_1","setStyles","div","styleElement","deleteRule","unselect","tr1","td1","tr2","td2","firstSelected","lastSelected","css","isFirst","tableChildren","cont","indexes","tdCount","thCount","midElement","ind","endsWith","querySelector","rowRange","Range","setStartBefore","setEndAfter","buildCss","head","insertRule","selectRange","applyChange_1","getTargetSizeByPercentage_1","isResizedTo_1","editInfo_1","percentage","minWidth","minHeight","img","src","editInfo","getEditInfoFromImage","isDisposed","lastSrc_1","widthPx","heightPx","onload","onerror","isNodeAfter_1","splitParentNode","splitBefore","newParent","isArray","temp","noop","__esModule","storageType","storage","testKey","setItem","getItem","removeItem","hasStorage","noopStorage","wordConverter_1","WordConverterArguments_1","converterUtils_1","sanitizingOption","fragment","chainSanitizerCallback","moveChildNodes","wordConverter","elements","createWordConverterArguments","processNodesDiscovery","processNodeConvert","getPluginState","CopyPastePlugin_1","DOMEventPlugin_1","EditPlugin_1","EntityPlugin_1","LifecyclePlugin_1","MouseUpPlugin_1","PendingFormatStatePlugin_1","TypeInContainerPlugin_1","UndoPlugin_1","corePluginOverride","typeInContainer","pendingFormatState","_placeholder","typeAfterLink","undo","mouseUp","copyPaste","entity","corePlugins","DarkModeDatasetNames","trimmedName","trimmedValue","setListItemStyle_1","orderListStyles","VListItem","newListStart","display","dummy","isOrphanItem","canMerge","every","mergeItems","wrapIfNotBlockNode","listType","originalRoot","nextLevel","newList","createListElement","fontSize","getChildrenAndUnwrap","newRoot","listStyleType","checkFirst","checkLast","MouseUpPlugin","onMouseUp","removeMouseUpEventListener","isClicking","mouseDownX","pageX","mouseDownY","pageY","mouseUpEventListerAdded","addEventListener","removeEventListener","step","newIndex","getTargetWindow","commonAncestorContainer","toString","typeName","targetWindow","mainWindow","mainWindowType","getTableCellWidth","columns","cellSpacing","cellPadding","vtable","isAbsolute","pathname","charAt","spliceOne","__webpack_exports__","hasTrailingSlash","toParts","fromParts","isToAbs","isFromAbs","mustEndAbs","last","up","part","unshift","processBlock","changeElementTag","lastChild","checkAndAddBr","blockElement","sibling","getNextLeafSibling","getPreviousLeafSibling","ContentTraverser","createBodyTraverser","currentBlockElement","ColorTransformDirection","toUpperCase","convertPasteContentForSingleImage_1","convertPastedContentForLI_1","convertPastedContentFromExcel_1","convertPastedContentFromPowerPoint_1","convertPastedContentFromWord_1","handleLineMerge_1","convertPastedContentFromWordOnline_1","htmlAttributes","clipboardData","trustedHTMLHandler","getTrustedHTMLHandler","wacListElements","margin","isWordOnlineWithList","htmlFirstLevelChildTags","node1","node2","compareDocumentPosition","isEmptyBlockUnderTR","startNode","forEachCallback","getSelectionTraverser","ImageEditInfoState","ROTATE_KEYS","CROP_KEYS","ROTATE_CROP_KEYS","ALL_KEYS","areSameNumber","n1","n2","abs","compareTo","applyCellShading","toggleHeader","toggleUnderline","toggleSuperscript","toggleSubscript","toggleStrikethrough","toggleCodeBlock","toggleBlockQuote","setOrderedListNumbering","toggleItalic","toggleBold","changeCapitalization","setImageAltText","setFontSize","setFontName","setDirection","setTextColor","setBackgroundColor","setAlignment","rotateElement","replaceWithNode","removeLink","formatTable","editTable","insertTable","insertImage","insertEntity","getElementBasedFormatState","getFormatState","createLink","clearFormat","clearBlockFormat","FONT_SIZES","changeFontSize","changeFontSize_1","clearBlockFormat_1","clearFormat_1","createLink_1","getFormatState_1","insertEntity_1","insertImage_1","insertTable_1","editTable_1","formatTable_1","removeLink_1","replaceWithNode_1","rotateElement_1","setAlignment_1","setBackgroundColor_1","setTextColor_1","setDirection_1","setFontName_1","setFontSize_1","setImageAltText_1","setIndentation_1","changeCapitalization_1","toggleBold_1","toggleBullet_1","toggleItalic_1","toggleNumbering_1","setOrderedListNumbering_1","toggleBlockQuote_1","toggleCodeBlock_1","toggleStrikethrough_1","toggleSubscript_1","toggleSuperscript_1","toggleUnderline_1","toggleHeader_1","applyCellShading_1","experimentCommitListChains_1","isBold","isItalic","isUnderline","isStrikeThrough","isSubscript","isSuperscript","reduce","queryCommandState","activeElement","mainArray","itemsArray","findClosestElementAncestor_1","nodeOrPosition","offsetOrPosType","isFromEndOfRange","getIndexOfNode","getEndOffset","newOffset","nextNode","equalTo","move","applyTextStyle_1","getLeafSibling_1","PartialInlineElement","inlineElement","getDecoratedInline","getContainerNode","getParentBlock","getTextContent","getStartPosition","getEndPosition","isTextualInlineElement","thisStart","otherEnd","applyStyle","styler","container","previousNode","isBackgroundColor","isDarkMode","colorString","modeIndependentColor","setProperty","darkModeColor","lightModeColor","dataSetName","LastCommentRegex","lastComment","path","alternativeComment","_c","pathCommentValue","pathCommentNode","_d","getSelectionPath","level","round","wrapped","header","replaceNode","font-size","chains_1","quote","findClosestElementAncestor","unwrap","handler","blockGroups","group","ShortcutFeatures","createCommand","winKey","macKey","action","commands","redo","DefaultShortcut","cacheGetCommand","stopPropagation","metaKey","ctrlKey","cmd","isMac","defaultShortcut","httpExcludeRegEx","domainPortWithUrlRegEx","domainPortRegEx","linkMatchRules","http","RegExp","except","normalizeUrl","url","https","mailto","notes","file","unc","ftp","news","telnet","gopher","wais","schema","rule","matches","scheme","originalUrl","normalizedUrl","ContentTraverser_1","textContent","insertImageWithSrc","maxWidth","imageFile","readFile","dataTransfer","getData","files","nextStep","getTempDiv","removeTempDiv","div_1","collapseSelectedBlocks_1","direction","EntityOperation","coreApiMap","addUndoSnapshot_1","attachDomEvent_1","createPasteFragment_1","ensureTypeInContainer_1","focus_1","getContent_1","getPendableFormatState_1","getSelectionRange_1","getSelectionRangeEx_1","getStyleBasedFormatState_1","hasFocus_1","insertNode_1","restoreUndoSnapshot_1","selectRange_1","selectTable_1","setContent_1","switchShadowEdit_1","transformColor_1","triggerEvent_1","attachDomEvent","createPasteFragment","ensureTypeInContainer","getContent","getStyleBasedFormatState","restoreUndoSnapshot","setContent","switchShadowEdit","transformColor","triggerEvent","textOrRange","exactMatch","backupRange","updateCursor","replaceSelection","insertOnNewLine","GetContentMode","getCropHTML","Cropper","Resizer_1","CROP_HANDLE_SIZE","CROP_HANDLE_WIDTH","Xs","Ys","ROTATION","sw","nw","ne","se","crop","basePercentage","deltaValue","fullValue","currentPercentage","minValue","maxValue","getCropHandleHTML","layer","dir","getCropHandleHTMLInternal","onDragStart","onDragging","base","dx","dy","rotateCoordinate","angleRad","leftPercent","rightPercent","topPercent","bottomPercent","widthPercent","heightPercent","fullWidth","fullHeight","newLeft","newRight","newTop","newBottom","overlayHTML","containerHTML","leftOrRight","topOrBottom","rotation","getCropHTMLInternal","roosterjs_editor_core_1","roosterjs_color_utils_1","roosterjs_editor_plugins_1","additionalPlugins","initialContent","plugins","HyperLink","defaultFormat","textColor","Editor","SelectionRangeTypes","TableBorderFormat","KnownCreateElementDataIndex","ClearFormatMode","ImageEditOperation","TableOperation","RegionType","QueryScope","PositionType","ListType","Capitalization","Indentation","FontSizeChange","ExperimentalFeatures","EntityClasses","Direction","ContentPosition","ChangeSource","ContentType","ContentTypePrefix","NodeType","Keys","DocumentPosition","DocumentCommand","DocumentCommand_1","DocumentPosition_1","Keys_1","NodeType_1","ContentType_1","Alignment_1","ChangeSource_1","ColorTransformDirection_1","ContentPosition_1","DarkModeDatasetNames_1","Direction_1","EntityClasses_1","EntityOperation_1","ExperimentalFeatures_1","FontSizeChange_1","GetContentMode_1","Indentation_1","Capitalization_1","ListType_1","PositionType_1","QueryScope_1","RegionType_1","TableOperation_1","ImageEditOperation_1","ClearFormatMode_1","KnownCreateElementDataIndex_1","TableBorderFormat_1","PluginEventType_1","SelectionRangeEx_1","canMoveCurrentSnapshot_1","removedSize","keyboardEvent","formatNode","shouldSetNodeStyles","safeInstanceOf","innerText","wasNodeJustCreatedByKeyboardEvent","DragAndDropHelper_1","TABLE_RESIZER_LENGTH","MIN_CELL_WIDTH","MIN_CELL_HEIGHT","onStart","originalRect","initValue","deltaX","deltaY","isRTL","ratioX","ratioY","shouldResizeX","shouldResizeY","wordBreak","setResizeDivPosition","trigger","normalizeRect","top","bottom","onDragEnd","featureHandler","getComputedStyles_1","newTag","origianlTag","newElement","attr","marginTop","marginBottom","checkEditInfoState_1","generateDataURL_1","getGeneratedImageSize_1","previousSrc","wasResized","newSrc","initEditInfo","srcChanged","originalSrc","deleteEditInfo","saveEditInfo","targetWidth","targetHeight","setImageSize","changeSource","canUndoByBackspace","undoState","isNested","isShadowEdit","snapshotsService","addSnapshot","hasNewContent","event_1","autoCompletePosition","ImageInlineElement_1","LinkInlineElement_1","NodeInlineElement_1","parent","parentBlock","nodeChain","currentNode","resolveInlineElement","mode","content","triggerExtractContentEvent","includeSelectionMarker","clonedRoot","clonedNode","originalRange","getHtmlWithSelectionPath","ListItemBlock_1","WORD_ONLINE_IDENTIFYING_SELECTOR","LIST_CONTAINER_ELEMENT_CLASS_NAME","IMAGE_CONTAINER_ELEMENT_CLASS_NAME","insertConvertedListToDoc","convertedListElement","listItemBlock","insertPositionNode","startElement","replaceRegex","prevParent","nextParent","sanitizeListItemContainer","curListItemBlock","listElements","curItem","listItemContainers","lastItemInCurBlock","endElement","createListItemBlock","getListItemBlocks","itemBlock","collapseNodes","section","flattenListBlock","listItemContainer","getContainerListType","itemLevel","listRootElement","itemToInsert","curListLevel","lastElementChild","lastChildTag","firstElementChild","insertListItem","parentContainer","getImageNodes","childNode","INHERITABLE_PROPERTIES","win","getComputedStyle","getPropertyValue","INSERTER_COLOR","INSERTER_COLOR_DARK_MODE","INSERTER_SIDE_LENGTH","INSERTER_BORDER_SIZE","isHorizontal","onInsert","tdRect","tableRect","document_1","isDark","inserterColor","getInsertElementData","getDefaultFormat","TableInsertHandler","insertTd","getZoomScale","autoLinkFeatures_1","cursorFeatures_1","entityFeatures_1","listFeatures_1","markdownFeatures_1","quoteFeatures_1","shortcutFeatures_1","structuredNodeFeatures_1","tableFeatures_1","QuoteFeatures","TableFeatures","StructuredNodeFeatures","AutoLinkFeatures","CursorFeatures","MarkdownFeatures","EntityFeatures","pair","valueIndex","textNode","returnFirstPart","firstPart","secondPart","TabInTable","cacheGetTableCell","shift","UpDownInTable","isUp","hasShiftKey","targetTd","anchorNode_1","anchorNode","anchorOffset_1","anchorOffset","newContainer","newPos","isVoidHtmlElement","selection_1","setBaseAndExtent","isSafari","getFocusedPosition","firstTd","tabInTable","upDownInTable","runtime","Op","hasOwn","desc","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","err","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","makeInvokeMethod","tryCatch","fn","arg","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","values","Gp","defineIteratorMethods","method","_invoke","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","reject","invoke","record","__await","unwrapped","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","done","methodName","info","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","async","iter","val","object","skipTempReset","prev","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","module","regeneratorRuntime","accidentalStrictMode","globalThis","Function","option","insertedNode_1","isBegin","getFirstLastBlockElement","insertedNode","rangeToRestore","cloneRange","getInitialRange","adjustInsertPosition","nodeForCursor","__extends","extendStatics","String","__","ImageResize","_super","selectionBorderColor","forcePreserveRatio","resizableImageSelector","borderColor","preserveRatio","imageSelector","showResizeHandle","setEditingImage","hideResizeHandle","selectImageAfterUnSelect","Color","baseLValue","computedColor","colorLab","lab","array","newLValue","rgb","alpha","angle","transform","contained","treatSameNodeAsContain","internalContains","isOn","shadowEditTableSelectionPath","wasInShadowEdit","selectionPath","tableSelectionRange","tableElement","elementStyle","textColors","backgroundColors","bold","italic","underline","fontWeight","fontStyle","textDecoration","ImageResize_1","NodeBlockElement","equals","ENTITY_ID_REGEX","ALLOWED_CSS_CLASSES","REMOVE_ENTITY_OPERATIONS","EntityPlugin","handleCutEvent","checkRemoveEntityForRange","knownEntityElements","shadowEntityCache","willHandleEventExclusively","shadowRoot","handleMouseUpEvent","handleKeyDownEvent","isCut","handleBeforePasteEvent","handleContentChangedEvent","handleExtractContentWithDomEvent","handleContextMenuEvent","handleBeforeSetContentEvent","handleEntityOperationEvent","entityElement","getEntitySelector","workaroundSelectionIssueForIE","isCharacterValue","arrayPush","cacheShadowEntities","setIsEntityKnown","knownIds","getEntityFromElement","getExistingEntities","isEntityKnown","commitEntity","handleNewEntity","cancelAsyncRun","editableEntityElements","isContentEditable","inSelectionEntityElements_1","isFullyCovered","contentForShadowEntity","cache","createShadowRoot","newWrapper","shadowEntityOnly","shadowContentContainer","attachShadow","delegatesFocus","baseId","newId","isKnown","workaroundButton","getCustomData","button","onblur","addRangeToSelection","resetImage","isResizedTo","resizeByPercentage","canRegenerateImage","ImageEdit","ImageEdit_1","canRegenerateImage_1","resizeByPercentage_1","resetImage_1","getRootListNode_1","VList_1","CHAIN_NAME_PREFIX","lastChainIndex","lastNumber","lastNumberBeforeCursor","nameGenerator","ol","chain","canAppendToTail","afterCurrentNode","append","canAppendAtCursor","createVListAtBlock","applyChainName","commit","lists","getLists","vlist","isAfterCurrentNode","Watermark","Watermark_1","listItem","contentNode","isBlock","currentRange","contentPosition","existingEntity","triggerContentChangedEvent","shouldApplyInlineStyle","setColor","altText","Cropper_1","Rotator_1","DIRECTIONS","DirectionRad","PI","DirectionOrder","FeatureToOperationMap","DefaultOptions","minRotateDeg","rotateIconHTML","ImageEditHTMLMap","getCornerResizeHTML","getSideResizeHTML","getRotateHTML","allowedOperations","onBlur","removeWrapper","updateWrapper","getImageWrapper","cropContainers","getEditElements","cropOverlays","rotateCenter","rotateHandle","resizeHandles","cropHandles","isCropping","originalWidth","originalHeight","visibleWidth","visibleHeight","marginHorizontal","marginVertical","cropLeftPx","cropRightPx","cropTopPx","cropBottomPx","getPx","setSize","updateHandleCursor","elementClass","clientWidth","clientHeight","doubleCheckResize","updateRotateHandlePosition","getRelativeDistanceToEditor","disposer","addDomEventHandler","clearDndHelpers","matchesSelector","operationOrSelect","selectImage","lastSrc","isFixedNumberValue","checkIfImageWasResized","createWrapper","dndHelpers","createDndHelpers","Resizer","Rotator","rotateHandleBackColor","htmlData","thisOperation","dragAndDrop","commonContext","helper","rotateHandles","radIndex","idx","handleRadIndexCalculator","originalDirection","originalIndex","handles","cursor","numberValue","NodeBlockElement_1","StartEndBlockElement_1","findHeadTailLeafNode","containerBlockNode","isTail","getBlockContext","headNode","tailNode","ZERO_WIDTH_SPACE","applyTextStyle","firstNode","lastNode","contentTraverser","currentInlineElement","nextInlineElement","getNextInlineElement","beforeCrop","cos","sin","CTRL_CHAR_CODE","ALT_CHAR_CODE","META_CHAR_CODE","isCtrlKey","isAltKey","isMetaKey","EmptyInlineElement_1","getInlineElementBeforeAfter_1","getFirstLastInlineElement_1","SelectionBlockScoper","startFrom","getStartBlockElement","getStartInlineElement","blockNode","getFirstLastInlineElementFromBlockElement","startInline","getInlineElementAfter","isBlockInScope","trimInlineElement","applyMiddleware","combineReducers","compose","createStore","symbol_observable__WEBPACK_IMPORTED_MODULE_0__","randomString","random","ActionTypes","INIT","REPLACE","PROBE_UNKNOWN_ACTION","isPlainObject","proto","reducer","preloadedState","enhancer","_ref2","currentReducer","currentState","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","listener","isSubscribed","dispatch","listeners","replaceReducer","nextReducer","_ref","outerSubscribe","observer","observeState","unsubscribe","getUndefinedStateErrorMessage","actionType","reducers","reducerKeys","finalReducers","shapeAssertionError","finalReducerKeys","assertReducerShape","hasChanged","nextState","previousStateForKey","nextStateForKey","errorMessage","ownKeys","enumerableOnly","getOwnPropertySymbols","sym","getOwnPropertyDescriptor","funcs","middlewares","store","_dispatch","middlewareAPI","middleware","getOwnPropertyDescriptors","defineProperties","_objectSpread2","CHILD_PARENT_TAG_MAP","TD","TH","LI","CHILD_SELECTOR","InsertLineBeforeStructuredNodeFeature","cacheGetStructuredElement","getPreviousBlockElement","insertLineBeforeStructuredNodeFeature","LevelLists_1","listItems","currentListIdsByLevels","createLevelLists","lastProcessedItem","coreApiMap_1","createCorePlugins_1","coreApiOverride","size","plugin","deleteNode","existingNode","toNode","transformColorForDarkMode","scopeOrCallback","selectionEx","canSplitParent","isEmpty","allNodes","fragment_1","deleteSelectedContent","paste","pasteAsText","applyCurrentFormat","snapshotBeforePaste","arg1","arg2","arg3","arg4","sel","focusNode","focusOffset","isPositionAtBeginning","getRegionsFromRange","nameOrMap","eventsToMap","broadcast","getUndoState","canUndo","canMove","canRedo","getScrollContainer","scrollContainer","customData","isInIME","createSelectionTraverser","getBlockTraverser","createBlockTraverser","PositionContentSearcher","setEditorDomAttribute","getEditorDomAttribute","addScroll","editorRect","elementRect","scrollLeft","scrollTop","forceGetStateFromDOM","setDarkModeState","nextDarkMode","currentContent","startShadowEdit","stopShadowEdit","isInShadowEdit","experimentalFeatures","getSizeTransformer","setZoomScale","scale","oldValue","oldZoomScale","newZoomScale","makeReplacement","sourceString","replacementHTML","matchSourceCaseSensitive","shouldReplace","defaultReplacements","CustomReplacePlugin","replacements","updateReplacements","newReplacements","longestReplacementLength","replacementEndCharacters","endChars","Set","replacements_1","lastChar","add","toLocaleLowerCase","toLocaleUpperCase","getReplacementEndCharacters","has","stringToSearch","getMatchingReplacement","getWordBefore","matchingText","matchingRange","parsingSpan","nodeToInsert","originalStringToSearch","lowerCaseStringToSearch","sourceMatch","replacementMatch","ENTITY_TYPE","watermark","showHideWatermark","watermarks","isShowing","removeWatermark","blur","spellcheck","clearProceedingSnapshots_1","snapshot","isAutoCompleteSnapshot","removeCount","collection","extractClipboardItems_1","extractClipboardItemsForIE_1","isPureLiNode","hasLi_1","ROTATE_SIZE","ROTATE_GAP","DEG_PER_RAD","DEFAULT_ROTATE_HANDLE_HEIGHT","ROTATE_ICON_MARGIN","getRotateIconHTML","namespace","stroke","distance","newX","newY","angleInRad","atan2","angleInDeg","cosAngle","adjustedDistance","Number","MAX_SAFE_INTEGER","rotateGap","rotateTop","cachedPendableFormatState","pendableFormatState","cachedPosition","pendableFormatPosition","currentPosition","isSamePosition","pendableKeys","PendableStyleCheckers","CssFalsyCheckers","queryCommandStateFromDOM","normalizeTableSelection_1","forEachSelectedCell_1","getCellCoordinates_1","removeCellsOutsideSelection_1","TABLE_CELL_SELECTOR","TableCellSelection","onMouseMove","tableSelection","lastTarget","updateSelection","firstTarget","setData","firstTable","prepareSelection","isNewTDContainingFirstTable","targetTable","selectionInsideTableMouseMove","restoreSelection","DeleteTableContents","_","deleteNodeContents","tableRange","startedSelection","handleBeforeCutCopy","handleMouseDownEvent","handleKeyUpEvent","handleScrollEvent","getCellCoordinates","clonedTable","clonedVTable","removeCellsOutsideSelection","selectNode","forEachSelectedCell","getCellAtCursor","shouldConvertToTableSelection","handleKeySelectionInsideTable","clearState","getNextTD","isBeginAboveEnd","targetPosition","coord","first","getTableAtCursor","firstCord","lastCord","firstTargetRange","selectNodeContents","isNewTargetTableContained","isFirstTargetTableContained","eventTarget","Node","TEXT_NODE","r1","r2","cellInput","indexY","indexX","applyInlineStyle_1","NoCycleCursorMove","rtl","noCycleCursorMove","LOOKUP_DEPTH","UNIQUE_LIST_ID_CUSTOM_DATA","MSO_LIST_STYLE_NAME","LINE_BREAKS","getOrCreateListForNode","metadata","listMetadata","recurringGetOrCreateListAtNode","possibleList","getRealPreviousSibling","listId","getObject","uniqueListId","setObject","convertListIfNeeded","cleanupListIgnore","levels","nodesToRemove","isEmptySpan","fixWordListComments","isIgnoreNode","getListItemMetadata","listAttribute","getStyleValue","listProps","wordListId","originalNode","isFakeBullet","fakeBullet","getFakeBulletText","removeComments","nextElement","endComment","getRealNextSibling","newSpan","prevSibling","isEmptyTextNode","styleName","resetCurrentLists","ll","currentUniqueListId","itemMetadata","levelInfo","listsMetadata","ignore","numberOfItems","secondFakeBullet","firstFakeBullet","nodesOrBlockElements","shouldSkipNode_1","regionBase","createBlockIfEmpty","skipTags","getComputedStyles","ogTextColorNode","ogBackgroundColorNode","elementsStyles","childStyle","getInlineChildElementsStyle","stylesToApply","styleValues","getListTypeFromNode","generateBasicMarkdownFeature","triggerCharacter","elementTag","useShiftKey","cacheGetRangeForMarkdownOperation","textContentRange","setStart","setEnd","elementToWrap","extractContents","nonPrintedSpaceTextNode","handleMarkdownEvent","startPosition","endPosition","forEachTextInlineElement","textInlineElement","inlineTextContent","contentIndex","MarkdownBold","MarkdownItalic","MarkdownStrikethrough","MarkdownInlineCode","markdownBold","markdownItalic","markdownStrikethru","markdownInlineCode","getSelectedBlockElementsInRegion_1","ListSelector","tryIncludeSiblingNode","isNext","getLeafSibling","fullSelectionStart","fullSelectionEnd","nodeForItem","listNode","createVListFromItemNode","isRestoring","ClickOnEntityFeature","cacheGetReadonlyEntityElement","EscapeFromEntityFeature","EnterBeforeReadonlyEntityFeature","cacheGetNeighborEntityElement","BackspaceAfterEntityFeature","DeleteBeforeEntityFeature","collapseOnly","entityNode","getPreviousInlineElement","clickOnEntity","escapeFromEntity","enterBeforeReadonlyEntity","backspaceAfterEntity","deleteBeforeEntity","TableCellSelection_1","styleNames","styleNames_1","px2Pt","px","parseFloat","checkPosition","targets","startContainer_1","endContainer_1","nodeContainedByRangeOnly","targetPositions","isIntersectWithNodeRange","getTooltipCallback","onLinkClick","href","trackedLink","onMouse","tryGetHref","updateLinkHrefIfShouldUpdate","resetLinkTracking","mouseover","mouseout","isContentEditValue","shouldCheckUpdateLink","anchor","originalHref","doesLinkDisplayMatchHref","srcElement","isFirefox","open","updateLinkHref","escapedDisplay","linkData_1","matchLink","naturalWidth","naturalHeight","KnownCreateElementData","getInnerHTML","splitTextNode","fromHtml","getBrowserInfo","extractClipboardItemsForIE","extractClipboardItems","extractClipboardEvent","NodeInlineElement","LinkInlineElement","ImageInlineElement","getInlineElementAtNode","isModifierKey","clearEventDataCache","createDefaultHtmlSanitizerOptions","getInheritableStyles","canUndoAutoComplete","createSnapshots","moveCurrentSnapsnot","moveCurrentSnapshot","clearProceedingSnapshots","canMoveCurrentSnapshot","setHtmlWithSelectionPath","getPositionRect","mergeBlocksInRegion","getSelectionRangeInRegion","setListItemStyle","getFirstLastBlockElement_1","PositionContentSearcher_1","PartialInlineElement_1","extractClipboardEvent_1","applyFormat_1","fromHtml_1","isVoidHtmlElement_1","matchLink_1","getInnerHTML_1","matchesSelector_1","VTable_1","createVListFromRegion_1","VListChain_1","getPositionRect_1","isPositionAtBeginningOf_1","getSelectionPath_1","getHtmlWithSelectionPath_1","setHtmlWithSelectionPath_1","addRangeToSelection_1","addSnapshot_1","moveCurrentSnapshot_1","createSnapshots_1","canUndoAutoComplete_1","HtmlSanitizer_1","createDefaultHtmlSanitizerOptions_1","chainSanitizerCallback_1","commitEntity_1","getEntityFromElement_1","getEntitySelector_1","cacheGetEventData_1","clearEventDataCache_1","isModifierKey_1","isCharacterValue_1","isCtrlOrMetaPressed_1","adjustInsertPosition_1","deleteSelectedContent_1","getTextContent_1","skipSameRange","formatState_1","restorePendingFormatState","KEY_PREFIX","FLUSH","REHYDRATE","PAUSE","PERSIST","PURGE","REGISTER","DEFAULT_VERSION","symbols","autoMergeLevel1","inboundState","originalState","reducedState","debug","newState","_objectSpread","createPersistoid","config","serialize","blacklist","whitelist","transforms","throttle","storageKey","keyPrefix","defaultSerialize","writeFailHandler","lastState","stagedState","keysToProcess","timeIterator","writePromise","processNextKey","clearInterval","endState","subState","transformer","in","onWriteFail","passWhitelistBlacklist","update","setInterval","flush","stringify","getStoredState_getStoredState","deserialize","defaultDeserialize","serialized","rawState","reduceRight","out","serial","warnIfRemoveError","persistReducer_ownKeys","persistReducer_objectSpread","persistReducer_defineProperty","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","DEFAULT_TIMEOUT","persistReducer","baseReducer","version","stateReconciler","getStoredState","timeout","_persistoid","_purge","_paused","conditionalUpdate","_persist","rehydrated","restState","_sealed","_rehydrate","payload","rehydrate","register","restoredState","migrate","migratedState","migrateErr","purgeStoredState","_newState","_toConsumableArray","arr","arr2","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","persistStore_ownKeys","persistStore_objectSpread","persistStore_defineProperty","initialState","registry","persistStore_persistorReducer","firstIndex","persistStore","cb","boostrappedCb","_pStore","redux","rehydrateAction","purge","results","purgeResult","flushResult","pause","persist","manualPersist","CopyPastePlugin","onPaste","cleanUpAndRestoreSelection","copy","onCutCopy","cut","originalRange_1","tempDiv_1","newRange","forceInLightMode","tempDiv","isAndroid","blockWrap_1","BLOCKQUOTE_TAG","DEFAULT_STYLER","paddingLeft","IMAGE_EDIT_INFO_NAME","json","safeParseJSON","getInitialEditInfo","reader_1","FileReader","readAsDataURL","EmptyInlineElement","getNewFontSize","MIN_FONT_SIZE","MAX_FONT_SIZE","pt","changeBase","fontSizes","ceil","change","lineHeight","PickerPlugin","PickerPlugin_1","isAndroidRegex","userAgent","appVersion","isIE11OrGreater","isWebKit","isWin","isIEOrEdge","navigator","excelHandler","LAST_TD_END_REGEX","LAST_TR_END_REGEX","LAST_TR_REGEX","LAST_TABLE_REGEX","DEFAULT_BORDER_STYLE","htmlBefore","trMatch","tableMatch","borderStyle","border","getFocusablePosition","isNodePosition","getPositionFromPath","Editor_1","allowedEventsInShadowEdit","pluginEvent","handledExclusively","STYLES_TO_REMOVE","TAGS_TO_UNWRAP","ATTRIBUTES_TO_PRESERVE","TAGS_TO_STOP_UNWRAP","clearNodeFormat","areAllChildrenBlock","returnBlockElement","isTableCell","removeNonBorderStyles","clearAttribute","nonborderStyles","formatType","isDefaultFormatEmpty","removeProperty","setColorIgnoredElements_1","clearInlineFormat","transverser","isMultiBlockSelection","clearAutoDetectFormat","PRE_TAG","CODE_TAG","SELECTOR","code","pre","CutPasteListChain","onDrop","cacheListChains","expectedChangeSource","contenteditable","elementData","createElementNS","datasetName","attrName","childElement","cellToSelect","currentCol","newRow","newCol","calculateCellToSelect","PendingFormatStatePlugin","clear","getCurrentPosition","URI_REGEX","MAILTO_REGEX","FTP_REGEX","getAnchorNodeAtCursor","updateAnchorDisplayText","displayText","link","checkXss","linkData","normalizedUrl_1","prefix","search","applyLinkPrefix","originalUrl_1","currentInline","title","getInlineElementBeforeAfter","getInlineElementBefore","isPartial","closest","disposeTableEditFeature","resizer","CELL_RESIZER_WIDTH","currentCells","nextCells","onDraggingHorizontal","onDraggingVertical","getHorizontalDistance","canResizeColumns","isLastCell","isShiftPressed","newWidthList","Map","set","toLeft","setHorizontalPosition","setVerticalPosition","onEnd","setPosition","RESIZE_HANDLE_SIZE","RESIZE_HANDLE_MARGIN","hypotenuse","sqrt","getResizeHandleHTML","ratio","horizontalOnly","verticalOnly","shouldPreserveRatio","actualWidth","actualHeight","resizeBorderColor","isRegion","regionStart","regionEnd","tempNode","isCtrlOrMetaPressedImpl","ancestor","newFirst","newLast","fixCoordinates","rowsCells","BLOCK_ELEMENT_TAGS","BLOCK_DISPLAY_STYLES","DragAndDropHelper","onSubmit","onMouseDown","addDocumentEvents","initX","initY","removeDocumentEvents","containerNode","HTML_TAG_REPLACEMENT","abbr","address","area","article","aside","bdi","bdo","blockquote","canvas","caption","center","cite","colgroup","datalist","dd","del","details","dfn","dialog","dl","dt","em","fieldset","figcaption","figure","font","footer","h1","h2","h3","h4","h5","h6","hgroup","hr","input","ins","kbd","label","legend","main","menu","menuitem","meter","nav","optgroup","output","picture","progress","rp","rt","ruby","samp","small","strike","strong","sub","summary","sup","tbody","template","textarea","tfoot","th","thead","time","tt","ul","var","wbr","xmp","form","applet","audio","basefont","embed","frame","frameset","iframe","meta","noscript","param","script","slot","track","video","ALLOWED_HTML_ATTRIBUTES","DEFAULT_STYLE_VALUES","background-color","border-bottom-color","border-bottom-style","border-bottom-width","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left-color","border-left-style","border-left-width","border-right-color","border-right-style","border-right-width","border-top-color","border-top-style","border-top-width","outline-color","outline-style","outline-width","overflow","text-decoration","-webkit-text-stroke-width","word-wrap","margin-left","margin-right","padding","padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","vertical-align","float","removeValue","removeWidthForLiAndDiv","additionalReplacements","additionalAttributes","additionalCssClasses","patterns","additionalDefaultStyles","callbacks","DOMEventPlugin","onFocus","onKeyDownDocument","defaultPrevented","cacheSelection","onMouseDownDocument","onScroll","onKeyboardEvent","onInputEvent","onContextMenuEvent","allItems","elementBeforeCursor","eventTargetNode","contextMenuProviders","provider","getContextMenuItems","stopPrintableKeyboardEventPropagation","allowKeyboardEventPropagation","isContextMenuProvider","eventHandlers","keypress","getEventHandler","keydown","keyup","mousedown","contextmenu","compositionstart","compositionend","drop","pluginEventType","beforeDispatch","STRUCTURE_NODE_TAGS","StartEndBlockElement","blockContext","ignoreSpace","getSibling","getChild","curNode","shouldContinue","CutPasteListChain_1","cloneObjectImpl","existingObj","TypeInContainerPlugin","shouldAlwaysApplyDefaultFormat","getRegionCreator","regionTypeData","outerSelector","innerSelector","fullRange","firstNodeOfRegion","lastNodeOfRegion","firstNodeValid","lastNodeValid","bothValid","areNodesValid","boundaryTree","allBoundaries","innerNode","inSelectionOuterNode","thisInnerNode","thisOuterNode","boundary","outerNode","boundaries","buildBoundaryTree","iterateNodes","creator","started","ended","previousOuterNode","newRegions","getLeafNode","BodyScoper","BodyScoper_1","SelectionBlockScoper_1","SelectionScoper_1","scoper","currentBlock","getPreviousNextBlockElement","current","leaf","newBlock","getPreviousNextInlineElement","newInline","previousInlineElement","getNextPreviousInlineElement","contentChanged","newContent","STYLET_AGS","callStylerWithInnerNode","formatNodes","parentTag","newNode_1","areAllPreviousNodesEmpty","nodes_1","TableEditor_1","TableResize","tableRectMap","buttons","ensureTableRects","editorWindow","scrollX","scrollY","currentTable","setTableEditor","tableEditor","invalidateTableRects","onMouseMoveDisposer","mousemove","eventMap","disposers","eventName","handlerObj","extractHandler","onEvent","VISIBLE_ELEMENT_TAGS","VISIBLE_CHILD_ELEMENT_SELECTOR","trimContent","getPositionPath","isPreviousText","CRLF","CRLF_SPACE","shouldSkipNode","ContextMenu","onDismiss","isMenuShowing","dismiss","allowDefaultMenu","initContainer","render","PREDEFINED_CSS_FOR_ELEMENT","font-weight","EM","font-style","margin-top","margin-bottom","PRE","white-space","STRIKE","SUB","SUP","HTML_VOID_ELEMENTS","TABLE_SELECTOR_LENGTH","TABLE_SELECTOR_ID","setSelectorDivPosition","onFinishDragging","imageWidth","imageHeight","getContext","translate","rotate","drawImage","toDataURL","msMatchesSelector","MAX_SIZE_LIMIT","UndoPlugin","undoSnapshotService","createUndoSnapshots","onKeyDown","onKeyPress","clearRedoForInput","evt","lastKeyPress","clearRedo","delta","CellResizer_1","TableInserter_1","TableResizer_1","TableSelector_1","TableEditorFeature_1","TableEditor","onChanged","onFinishEditing","onStartTableResize","onStartResize","onStartCellResize","disposeTableResizer","onInserted","onSelect","lastCellIndex_1","tableResizer","tableSelector","disposeCellResizers","disposeTableInserter","disposeTableSelector","lessThanBottom","isOnRightHalf","setInserterTd","setResizingTd","horizontalResizer","verticalResizer","inserter","horizontalInserter","verticalInserter","newInserter","TEMP_BACKGROUND_COLOR","_getStorage","QUOTE_TAG","STRUCTURED_TAGS","UnquoteWhenBackOnEmpty1stLine","childOfQuote","cacheGetQuoteChild","splitQuote","UnquoteWhenEnterOnEmptyLine","shouldClearFormat","isStyledBlockquote","unquoteWhenBackspaceOnEmptyFirstLine","unquoteWhenEnterOnEmptyLine","SelectionScoper","startBlock","inScope","selStartBlock","selEndBlock","inline","startPartial","endPartial","isDOMChanged","HyperLink_1","clientRect","createThunkMiddleware","extraArgument","thunk","withExtraArgument","isEntity","NODE_ID_ATTRIBUTE_NAME","getAndSetNodeId","nextNodeId","dict","adjustSteps","safeRemove","normalizedPosition","splitter","rootNodeToInsert","rootNodes","hasBrNextToRoot","tdNode","trNode","newTable","shouldInsertListAsText","inlineElementBefore","inlineElementAfter","_default","TableResize_1","processStyles","applyCurrentStyle","htmlAfter","createBeforePasteEvent","attrs","COMMENT_NODE","lastIndexOf","format_1","pendableFormat","styleBasedFormat","getCurrentFormat","line","lines","formatCallback","parentNodes","applyStyleToListItems","ESC_CHAR_CODE","LEFT_ARROW_CHAR_CODE","UP_ARROW_CHAR_CODE","RIGHT_ARROW_CHAR_CODE","DOWN_ARROW_CHAR_CODE","DELETE_CHAR_CODE","UNIDENTIFIED_CODE","dataProvider","pickerOptions","isPendingInputEventHandling","onInitalize","htmlNode","wordToReplace","getWord","lastKnownRange","setIsSuggesting","handleAutoComplete","isSuggesting","onDispose","onContentChanged","elementIds_1","elementIdPrefix","eventHandledOnKeyDown","isAndroidKeyboardEvent","currentInputLength","calcInputLength","onKeyDownEvent","onAndroidInputEvent","shouldHandleKeyUpEvent","onKeyUpDomEvent","setLastKnownRange","onIsSuggestingChanged","setAriaOwns","setAriaActiveDescendant","cancelDefaultKeyDownEvent","stopImmediatePropagation","getIdValue","getNamedItem","getWordBeforeCursor","replacementNode","getRangeUntilAt","startPos","endPos","textInline","hasMatched","nodeContent","nodeIndex","trimmedWordBeforeCursor","wordBeforeCursorWithoutTriggerChar","wordBeforeCursor","queryStringUpdated","blockSuggestions","setCursorPoint","rangeNode","nodeBeforeCursor","setRangeStart","nodeBeforeNodeBeforeCursor","detach","targetPoint","bufferZone","shiftHighlight","getSelectedIndex","selectOption","tryRemoveNode","nodeAfterCursor","nodeId","onRemove","newInputLength","inputType","getInlineElementBeforeCursor","replacementNode_1","wordFromRange","wordFromCache","nodeOffset","suggestionsLabel","selectedIndex","suggestionLabelPrefix","charCode","CONTENT_EDITABLE_ATTRIBUTE_NAME","COMMANDS","DARK_MODE_DEFAULT_FORMAT","LifecyclePlugin","contentDivFormat","initializer","userSelect","webkitUserSelect","adjustColor","doNotAdjustEditorColor","inDarkMode","onExternalContentTransform","recalculateDefaultFormat","adjustBrowserBehavior","baseFormat","ref","CustomReplace","CustomReplace_1","TRAILING_PUNCTUATION_REGEX","MINIMUM_LENGTH","AutoLink","cacheGetLinkData","UnlinkWhenBackspaceAfterLink","word","trailingPunctuation","candidate_1","str","autoLink","unlinkWhenBackspaceAfterLink","ColorAttributeEnum","ColorAttributeName","transformToLightMode","names","getValueOrDefault","defaultValue","includeSelf","elementsToTransform","allChildren","getElementsByTagName","getAll","transformFunction","computedValues","styleColor","attrColor","newColor","transformToDarkMode","createNormalSelectionEx","checkAllCollapsed","shadowRange","TABLE_STYLE_INFO","stateValues","checkIfTableFormatIsValid","needAddRange","removeAllRanges","addRange","listTag","headerTag","isBullet","isNumbering","headerLevel","canUnlink","canAddImageAltText","isBlockQuote","resultCells","getImageData","capitalization","language","getCapitalizedText","originalText","wordArray","regex","ContextMenu_1","WHITESPACE_REGEX","inlineElements","traverse","inlineBefore","inlineAfter","textIndex","charCodeAt","nearestNonTextInlineElement","traversingComplete","previousInline"],"mappings":"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","file":"static/js/vendor.initial~f7db8c8b.bb1062da.chunk.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getSelectionRange = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * Get current or cached selection range\n * @param core The EditorCore object\n * @param tryGetFromCache Set to true to retrieve the selection range from cache if editor doesn't own the focus now\n * @returns A Range object of the selection range\n */\nvar getSelectionRange = function (core, tryGetFromCache) {\n var _a;\n var result = null;\n if (core.lifecycle.shadowEditFragment) {\n result =\n core.lifecycle.shadowEditSelectionPath &&\n (0, roosterjs_editor_dom_1.createRange)(core.contentDiv, core.lifecycle.shadowEditSelectionPath.start, core.lifecycle.shadowEditSelectionPath.end);\n return result;\n }\n else {\n if (!tryGetFromCache || core.api.hasFocus(core)) {\n var selection = (_a = core.contentDiv.ownerDocument.defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();\n if (selection && selection.rangeCount > 0) {\n var range = selection.getRangeAt(0);\n if ((0, roosterjs_editor_dom_1.contains)(core.contentDiv, range)) {\n result = range;\n }\n }\n }\n if (!result && tryGetFromCache) {\n result = core.domEvent.selectionRange;\n }\n return result;\n }\n};\nexports.getSelectionRange = getSelectionRange;\n//# sourceMappingURL=getSelectionRange.js.map","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport React, { PureComponent } from 'react'; // eslint-disable-line import/no-unresolved\n\nexport var PersistGate =\n/*#__PURE__*/\nfunction (_PureComponent) {\n _inherits(PersistGate, _PureComponent);\n\n function PersistGate() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, PersistGate);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(PersistGate)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n bootstrapped: false\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_unsubscribe\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"handlePersistorState\", function () {\n var persistor = _this.props.persistor;\n\n var _persistor$getState = persistor.getState(),\n bootstrapped = _persistor$getState.bootstrapped;\n\n if (bootstrapped) {\n if (_this.props.onBeforeLift) {\n Promise.resolve(_this.props.onBeforeLift()).finally(function () {\n return _this.setState({\n bootstrapped: true\n });\n });\n } else {\n _this.setState({\n bootstrapped: true\n });\n }\n\n _this._unsubscribe && _this._unsubscribe();\n }\n });\n\n return _this;\n }\n\n _createClass(PersistGate, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this._unsubscribe = this.props.persistor.subscribe(this.handlePersistorState);\n this.handlePersistorState();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this._unsubscribe && this._unsubscribe();\n }\n }, {\n key: \"render\",\n value: function render() {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof this.props.children === 'function' && this.props.loading) console.error('redux-persist: PersistGate expects either a function child or loading prop, but not both. The loading prop will be ignored.');\n }\n\n if (typeof this.props.children === 'function') {\n return this.props.children(this.state.bootstrapped);\n }\n\n return this.state.bootstrapped ? this.props.children : this.props.loading;\n }\n }]);\n\n return PersistGate;\n}(PureComponent);\n\n_defineProperty(PersistGate, \"defaultProps\", {\n children: null,\n loading: null\n});","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(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))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar readFile_1 = require(\"../utils/readFile\");\nvar Browser_1 = require(\"../utils/Browser\");\n// HTML header to indicate where is the HTML content started from.\n// Sample header:\n// Version:0.9\n// StartHTML:71\n// EndHTML:170\n// StartFragment:140\n// EndFragment:160\n// StartSelection:140\n// EndSelection:160\nvar CLIPBOARD_HTML_HEADER_REGEX = /^Version:[0-9\\.]+\\s+StartHTML:\\s*([0-9]+)\\s+EndHTML:\\s*([0-9]+)\\s+/i;\nvar OTHER_TEXT_TYPE = \"text/\" /* Text */ + '*';\nvar EDGE_LINK_PREVIEW = 'link-preview';\nvar ContentHandlers = (_a = {},\n _a[\"text/html\" /* HTML */] = function (data, value) {\n return (data.rawHtml = Browser_1.Browser.isEdge ? workaroundForEdge(value) : value);\n },\n _a[\"text/plain\" /* PlainText */] = function (data, value) { return (data.text = value); },\n _a[OTHER_TEXT_TYPE] = function (data, value, type) { return !!type && (data.customValues[type] = value); },\n _a);\n/**\n * Extract clipboard items to be a ClipboardData object for IE\n * @param items The clipboard items retrieve from a DataTransfer object\n * @param callback Callback function when data is ready\n * @returns An object with the following properties:\n * types: Available types from the clipboard event\n * text: Plain text from the clipboard event\n * image: Image file from the clipboard event\n * html: Html string from the clipboard event. When set to null, it means there's no HTML found from the event.\n * When set to undefined, it means can't retrieve HTML string, there may be HTML string but direct retrieving is\n * not supported by browser.\n */\nfunction extractClipboardItems(items, options) {\n var data = {\n types: [],\n text: '',\n image: null,\n rawHtml: null,\n customValues: {},\n };\n var contentHandlers = __assign({}, ContentHandlers);\n if (options === null || options === void 0 ? void 0 : options.allowLinkPreview) {\n contentHandlers[\"text/\" /* Text */ + EDGE_LINK_PREVIEW] = tryParseLinkPreview;\n }\n return Promise.all((items || []).map(function (item) {\n var type = item.type;\n if (type.indexOf(\"image/\" /* Image */) == 0 && !data.image && item.kind == 'file') {\n data.types.push(type);\n data.image = item.getAsFile();\n return new Promise(function (resolve) {\n if (data.image) {\n (0, readFile_1.default)(data.image, function (dataUrl) {\n data.imageDataUri = dataUrl;\n resolve();\n });\n }\n else {\n resolve();\n }\n });\n }\n else {\n var customType_1 = getAllowedCustomType(type, options === null || options === void 0 ? void 0 : options.allowedCustomPasteType);\n var handler_1 = contentHandlers[type] || (customType_1 ? contentHandlers[OTHER_TEXT_TYPE] : null);\n return new Promise(function (resolve) {\n return handler_1\n ? item.getAsString(function (value) {\n data.types.push(type);\n handler_1(data, value, customType_1);\n resolve();\n })\n : resolve();\n });\n }\n })).then(function () { return data; });\n}\nexports.default = extractClipboardItems;\n/**\n * Edge sometimes doesn't remove the headers, which cause we paste more things then expected.\n * So we need to remove it in our code\n * @param html The HTML string got from clipboard\n */\nfunction workaroundForEdge(html) {\n var headerValues = CLIPBOARD_HTML_HEADER_REGEX.exec(html);\n if ((headerValues === null || headerValues === void 0 ? void 0 : headerValues.length) == 3) {\n var start = parseInt(headerValues[1]);\n var end = parseInt(headerValues[2]);\n if (start > 0 && end > start) {\n html = html.substring(start, end);\n }\n }\n return html;\n}\nfunction tryParseLinkPreview(data, value) {\n try {\n data.customValues[EDGE_LINK_PREVIEW] = value;\n data.linkPreview = JSON.parse(value);\n }\n catch (_a) { }\n}\nfunction getAllowedCustomType(type, allowedCustomPasteType) {\n var textType = type.indexOf(\"text/\" /* Text */) == 0\n ? type.substring(\"text/\" /* Text */.length)\n : null;\n var index = allowedCustomPasteType && textType ? allowedCustomPasteType.indexOf(textType) : -1;\n return textType && index >= 0 ? textType : undefined;\n}\n//# sourceMappingURL=extractClipboardItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Get a selector string for specified entity type and id\n * @param type (Optional) Type of entity\n * @param id (Optional) Id of entity\n */\nfunction getEntitySelector(type, id) {\n var typeSelector = type ? \".\" + \"_EType_\" /* ENTITY_TYPE_PREFIX */ + type : '';\n var idSelector = id ? \".\" + \"_EId_\" /* ENTITY_ID_PREFIX */ + id : '';\n return '.' + \"_Entity\" /* ENTITY_INFO_NAME */ + typeSelector + idSelector;\n}\nexports.default = getEntitySelector;\n//# sourceMappingURL=getEntitySelector.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar arrayPush_1 = require(\"../utils/arrayPush\");\nvar collapseNodesInRegion_1 = require(\"../region/collapseNodesInRegion\");\nvar getRegionsFromRange_1 = require(\"../region/getRegionsFromRange\");\nvar getSelectionRangeInRegion_1 = require(\"../region/getSelectionRangeInRegion\");\nvar mergeBlocksInRegion_1 = require(\"../region/mergeBlocksInRegion\");\nvar Position_1 = require(\"../selection/Position\");\nvar queryElements_1 = require(\"../utils/queryElements\");\nvar safeInstanceOf_1 = require(\"../utils/safeInstanceOf\");\nvar splitTextNode_1 = require(\"../utils/splitTextNode\");\n/**\n * Delete selected content, and return the new position to select\n * @param core The EditorCore object.\n * @param range The range to delete\n */\nfunction deleteSelectedContent(root, range) {\n var nodeBefore = null;\n // 1. TABLE and TR node in selected should be deleted. It is possible we don't detect them from step 2\n // since table cells will fall in to different regions\n var nodesToDelete = (0, queryElements_1.default)(root, 'table,tr', null /*callback*/, 2 /* InSelection */, range);\n // 2. Loop all selected regions, find out those nodes need to be deleted and merged.\n // We don't delete them directly here because delete node from one region may cause selection range\n // another region becomes invalid. So we delay the process of deletion.\n var regions = (0, getRegionsFromRange_1.default)(root, range, 0 /* Table */);\n var nodesPairToMerge = regions\n .map(function (region) {\n var regionRange = (0, getSelectionRangeInRegion_1.default)(region);\n if (!regionRange) {\n return null;\n }\n var startContainer = regionRange.startContainer, endContainer = regionRange.endContainer, startOffset = regionRange.startOffset, endOffset = regionRange.endOffset;\n // Make sure there are node before and after the merging point.\n // This is required by mergeBlocksInRegion API.\n // This may create some empty text node as anchor\n var _a = ensureBeforeAndAfter(endContainer, endOffset, false /*isStart*/), beforeEnd = _a[0], afterEnd = _a[1];\n var _b = ensureBeforeAndAfter(startContainer, startOffset, true /*isStart*/), beforeStart = _b[0], afterStart = _b[1];\n nodeBefore = nodeBefore || beforeStart;\n // Find out all nodes to be deleted\n var nodes = (0, collapseNodesInRegion_1.default)(region, [afterStart, beforeEnd]);\n (0, arrayPush_1.default)(nodesToDelete, nodes);\n return { region: region, beforeStart: beforeStart, afterEnd: afterEnd };\n })\n .filter(function (x) { return !!x; });\n // 3. Delete all nodes that we found\n nodesToDelete.forEach(function (node) { var _a; return (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(node); });\n // 4. Merge lines for each region, so that after we don't see extra line breaks\n nodesPairToMerge.forEach(function (nodes) {\n return (0, mergeBlocksInRegion_1.default)(nodes.region, nodes.beforeStart, nodes.afterEnd);\n });\n return nodeBefore && new Position_1.default(nodeBefore, -1 /* End */);\n}\nexports.default = deleteSelectedContent;\nfunction ensureBeforeAndAfter(node, offset, isStart) {\n var _a;\n if ((0, safeInstanceOf_1.default)(node, 'Text')) {\n var newNode = (0, splitTextNode_1.default)(node, offset, isStart);\n return isStart ? [newNode, node] : [node, newNode];\n }\n else {\n var nodeBefore = node.childNodes[offset - 1];\n var nodeAfter = node.childNodes[offset];\n // Condition 1: node child nodes\n // (\"I\" means cursor; \"o\" means a DOM node, \"[ ]\" means a parent node)\n // [ I ]\n // need to use parent node instead to convert to condition 2\n if (!nodeBefore && !nodeAfter) {\n if (isStart) {\n nodeAfter = node;\n nodeBefore = nodeAfter.previousSibling;\n }\n else {\n nodeBefore = node;\n nodeAfter = nodeBefore.nextSibling;\n }\n }\n // Condition 2: Either nodeBefore or nodeAfter is null (XOR case)\n // [ o I ] or [ I o]\n // need to add empty text node to convert to condition 3\n if ((nodeBefore || nodeAfter) && (!nodeBefore || !nodeAfter)) {\n var emptyNode = node.ownerDocument.createTextNode('');\n (_a = (nodeBefore || nodeAfter).parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(emptyNode, nodeAfter);\n if (nodeBefore) {\n nodeAfter = emptyNode;\n }\n else {\n nodeBefore = emptyNode;\n }\n }\n // Condition 3: Both nodeBefore and nodeAfter are not null\n // [o I o]\n // return the nodes\n return [nodeBefore, nodeAfter];\n }\n}\n//# sourceMappingURL=deleteSelectedContent.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar blockFormat_1 = require(\"./blockFormat\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * Toggle a tag at selection, if selection already contains elements of such tag,\n * the elements will be untagged and other elements will take no effect\n * @param editor The editor instance\n * @param wrapFunction The wrap function\n * @param beforeRunCallback A callback function to run before looping all regions. If it returns false,\n * the loop for regions will be skipped\n */\nfunction blockWrap(editor, wrapFunction, beforeRunCallback) {\n (0, blockFormat_1.default)(editor, function (region) {\n var blocks = (0, roosterjs_editor_dom_1.getSelectedBlockElementsInRegion)(region, true /*createBlockIfEmpty*/);\n var nodes = (0, roosterjs_editor_dom_1.collapseNodesInRegion)(region, blocks);\n if (nodes.length > 0) {\n if (nodes.length == 1) {\n var NodeTag = (0, roosterjs_editor_dom_1.getTagOfNode)(nodes[0]);\n if (NodeTag == 'BR') {\n nodes = [(0, roosterjs_editor_dom_1.wrap)(nodes[0])];\n }\n else if (NodeTag == 'LI' || NodeTag == 'TD') {\n nodes = (0, roosterjs_editor_dom_1.toArray)(nodes[0].childNodes);\n }\n }\n while (nodes[0] &&\n (0, roosterjs_editor_dom_1.isNodeInRegion)(region, nodes[0].parentNode) &&\n nodes.some(function (node) { return (0, roosterjs_editor_dom_1.getTagOfNode)(node) == 'LI'; })) {\n nodes = [(0, roosterjs_editor_dom_1.splitBalancedNodeRange)(nodes)];\n }\n wrapFunction(nodes);\n }\n }, beforeRunCallback);\n}\nexports.default = blockWrap;\n//# sourceMappingURL=blockWrap.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Paste = void 0;\nvar Paste_1 = require(\"./Paste\");\nObject.defineProperty(exports, \"Paste\", { enumerable: true, get: function () { return Paste_1.default; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar execCommand_1 = require(\"../utils/execCommand\");\n/**\n * Toggle bold at selection\n * If selection is collapsed, it will only affect the following input after caret\n * If selection contains only bold text, the bold style will be removed\n * If selection contains only normal text, bold style will be added to the whole selected text\n * If selection contains both bold and normal text, bold style will be added to the whole selected text\n * @param editor The editor instance\n */\nfunction toggleBold(editor) {\n (0, execCommand_1.default)(editor, \"bold\" /* Bold */);\n}\nexports.default = toggleBold;\n//# sourceMappingURL=toggleBold.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar toggleListType_1 = require(\"../utils/toggleListType\");\n/**\n * Toggle numbering at selection\n * If selection contains numbering in deep level, toggle numbering will decrease the numbering level by one\n * If selection contains bullet list, toggle numbering will convert the bullet list into number list\n * If selection contains both bullet/numbering and normal text, the behavior is decided by corresponding\n * realization of browser execCommand API\n * @param editor The editor instance\n * @param startNumber (Optional) Start number of the list\n */\nfunction toggleNumbering(editor, startNumber) {\n (0, toggleListType_1.default)(editor, 1 /* Ordered */, startNumber);\n}\nexports.default = toggleNumbering;\n//# sourceMappingURL=toggleNumbering.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createEditor = void 0;\nvar createEditor_1 = require(\"./createEditor\");\nObject.defineProperty(exports, \"createEditor\", { enumerable: true, get: function () { return createEditor_1.default; } });\n__exportStar(require(\"roosterjs-editor-types\"), exports);\n__exportStar(require(\"roosterjs-editor-dom\"), exports);\n__exportStar(require(\"roosterjs-editor-core\"), exports);\n__exportStar(require(\"roosterjs-editor-api\"), exports);\n__exportStar(require(\"roosterjs-editor-plugins\"), exports);\n__exportStar(require(\"roosterjs-color-utils\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar applyListItemWrap_1 = require(\"../utils/applyListItemWrap\");\n/**\n * Set font name at selection\n * @param editor The editor instance\n * @param fontName The fontName string, should be a valid CSS font-family style.\n * Currently there's no validation to the string, if the passed string is invalid, it won't take affect\n */\nfunction setFontName(editor, fontName) {\n // The browser provided execCommand creates a HTML tag with face attribute. is not HTML5 standard\n // (http://www.w3schools.com/tags/tag_font.asp).\n (0, applyListItemWrap_1.default)(editor, 'font-family', function (element, isInnerNode) {\n element.style.fontFamily = isInnerNode ? '' : fontName;\n });\n}\nexports.default = setFontName;\n//# sourceMappingURL=setFontName.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Create initial snapshots\n * @param maxSize max size of all snapshots\n */\nfunction createSnapshots(maxSize) {\n return {\n snapshots: [],\n totalSize: 0,\n currentIndex: -1,\n autoCompleteIndex: -1,\n maxSize: maxSize,\n };\n}\nexports.default = createSnapshots;\n//# sourceMappingURL=createSnapshots.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createWordConverter = void 0;\nvar WordCustomData_1 = require(\"./WordCustomData\");\n/**\n * @internal\n * create an empty WordConverter\n */\nfunction createWordConverter() {\n return {\n nextUniqueId: 1,\n numBulletsConverted: 0,\n numNumberedConverted: 0,\n wordConverterArgs: null,\n wordCustomData: (0, WordCustomData_1.createCustomData)(),\n };\n}\nexports.createWordConverter = createWordConverter;\n//# sourceMappingURL=wordConverter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar createElement_1 = require(\"../utils/createElement\");\nvar createRange_1 = require(\"./createRange\");\nvar normalizeRect_1 = require(\"../utils/normalizeRect\");\n/**\n * Get bounding rect of this position\n * @param position The position to get rect from\n */\nfunction getPositionRect(position) {\n var _a;\n if (!position) {\n return null;\n }\n var range = (0, createRange_1.default)(position);\n // 1) try to get rect using range.getBoundingClientRect()\n var rect = range.getBoundingClientRect && (0, normalizeRect_1.default)(range.getBoundingClientRect());\n if (rect) {\n return rect;\n }\n // 2) try to get rect using range.getClientRects\n position = position.normalize();\n var rects = range.getClientRects && range.getClientRects();\n rect = rects && rects.length == 1 ? (0, normalizeRect_1.default)(rects[0]) : null;\n if (rect) {\n return rect;\n }\n // 3) if node is text node, try inserting a SPAN and get the rect of SPAN for others\n if (position.node.nodeType == 3 /* Text */ && position.node.ownerDocument) {\n var span = (0, createElement_1.default)({ tag: 'span', children: ['\\u200b'] }, position.node.ownerDocument);\n range = (0, createRange_1.default)(position);\n range.insertNode(span);\n rect = span.getBoundingClientRect && (0, normalizeRect_1.default)(span.getBoundingClientRect());\n (_a = span.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(span);\n if (rect) {\n return rect;\n }\n }\n // 4) try getBoundingClientRect on element\n var element = position.element;\n if (element && element.getBoundingClientRect) {\n rect = (0, normalizeRect_1.default)(element.getBoundingClientRect());\n if (rect) {\n return rect;\n }\n }\n return null;\n}\nexports.default = getPositionRect;\n//# sourceMappingURL=getPositionRect.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar changeElementTag_1 = require(\"../utils/changeElementTag\");\nvar setColor_1 = require(\"../utils/setColor\");\nvar TRANSPARENT = 'transparent';\nvar TABLE_CELL_TAG_NAME = 'TD';\nvar TABLE_HEADER_TAG_NAME = 'TH';\nvar CELL_SHADE = 'cellShade';\n/**\n * @internal\n * Apply the given table format to this virtual table\n * @param format Table format to apply\n */\nfunction applyTableFormat(table, cells, format) {\n if (!format) {\n return;\n }\n table.style.borderCollapse = 'collapse';\n setBordersType(cells, format);\n setCellColor(cells, format);\n setFirstColumnFormat(cells, format);\n setHeaderRowFormat(cells, format);\n}\nexports.default = applyTableFormat;\n/**\n * Check if the cell has shade\n * @param cell\n * @returns\n */\nfunction hasCellShade(cell) {\n if (!cell.td) {\n return false;\n }\n var colorShade = cell.td.dataset[CELL_SHADE];\n return colorShade ? true : false;\n}\n/**\n * Set color to the table\n * @param format the format that must be applied\n */\nfunction setCellColor(cells, format) {\n var color = function (index) { return (index % 2 === 0 ? format.bgColorEven : format.bgColorOdd); };\n var hasBandedRows = format.hasBandedRows, hasBandedColumns = format.hasBandedColumns, bgColorOdd = format.bgColorOdd, bgColorEven = format.bgColorEven;\n var shouldColorWholeTable = !hasBandedRows && bgColorOdd === bgColorEven ? true : false;\n cells.forEach(function (row, index) {\n row.forEach(function (cell) {\n if (cell.td && !hasCellShade(cell)) {\n if (hasBandedRows) {\n var backgroundColor = color(index);\n (0, setColor_1.default)(cell.td, backgroundColor || TRANSPARENT, true /** isBackgroundColor*/);\n }\n else if (shouldColorWholeTable) {\n (0, setColor_1.default)(cell.td, format.bgColorOdd || TRANSPARENT, true /** isBackgroundColor*/);\n }\n else {\n (0, setColor_1.default)(cell.td, TRANSPARENT, true /** isBackgroundColor*/);\n }\n }\n });\n });\n if (hasBandedColumns) {\n cells.forEach(function (row) {\n row.forEach(function (cell, index) {\n var backgroundColor = color(index);\n if (cell.td && backgroundColor && !hasCellShade(cell)) {\n (0, setColor_1.default)(cell.td, backgroundColor, true /** isBackgroundColor*/);\n }\n });\n });\n }\n}\n/**\n * Set color to borders of an table\n * @param format\n * @returns\n */\nfunction setBorderColors(td, format) {\n td.style.borderTop = getBorderStyle(format.topBorderColor);\n td.style.borderLeft = getBorderStyle(format.verticalBorderColor);\n td.style.borderRight = getBorderStyle(format.verticalBorderColor);\n td.style.borderBottom = getBorderStyle(format.bottomBorderColor);\n}\n/**\n * Format the border type\n * @returns\n */\nfunction formatBorders(format, td, isFirstRow, isLastRow, isFirstColumn, isLastColumn) {\n setBorderColors(td, format);\n switch (format.tableBorderFormat) {\n case 0 /* DEFAULT */:\n return;\n case 1 /* LIST_WITH_SIDE_BORDERS */:\n if (!isFirstColumn) {\n td.style.borderLeftColor = TRANSPARENT;\n }\n if (!isLastColumn) {\n td.style.borderRightColor = TRANSPARENT;\n }\n break;\n case 4 /* FIRST_COLUMN_HEADER_EXTERNAL */:\n if (!isFirstRow) {\n td.style.borderTopColor = TRANSPARENT;\n }\n if (!isLastRow && !isFirstRow) {\n td.style.borderBottomColor = TRANSPARENT;\n }\n if (!isFirstColumn) {\n td.style.borderLeftColor = TRANSPARENT;\n }\n if (!isLastColumn && !isFirstColumn) {\n td.style.borderRightColor = TRANSPARENT;\n }\n if (isFirstColumn && isFirstRow) {\n td.style.borderRightColor = TRANSPARENT;\n }\n break;\n case 2 /* NO_HEADER_BORDERS */:\n if (isFirstRow) {\n td.style.borderTopColor = TRANSPARENT;\n td.style.borderRightColor = TRANSPARENT;\n td.style.borderLeftColor = TRANSPARENT;\n }\n if (isFirstColumn) {\n td.style.borderLeftColor = TRANSPARENT;\n }\n if (isLastColumn) {\n td.style.borderRightColor = TRANSPARENT;\n }\n break;\n case 3 /* NO_SIDE_BORDERS */:\n if (isFirstColumn) {\n td.style.borderLeftColor = TRANSPARENT;\n }\n if (isLastColumn) {\n td.style.borderRightColor = TRANSPARENT;\n }\n break;\n case 5 /* ESPECIAL_TYPE_1 */:\n if (isFirstRow) {\n td.style.borderRightColor = TRANSPARENT;\n td.style.borderLeftColor = TRANSPARENT;\n }\n if (isFirstColumn) {\n td.style.borderBottomColor = TRANSPARENT;\n td.style.borderTopColor = TRANSPARENT;\n }\n if (isFirstRow && isFirstColumn) {\n td.style.borderLeftColor = format.verticalBorderColor || TRANSPARENT;\n td.style.borderBottomColor = format.bottomBorderColor || TRANSPARENT;\n td.style.borderTopColor = format.topBorderColor || TRANSPARENT;\n }\n break;\n case 6 /* ESPECIAL_TYPE_2 */:\n if (isFirstRow) {\n td.style.borderRightColor = TRANSPARENT;\n td.style.borderLeftColor = TRANSPARENT;\n }\n if (isFirstColumn) {\n td.style.borderBottomColor = TRANSPARENT;\n td.style.borderTopColor = TRANSPARENT;\n }\n if (isFirstRow && isFirstColumn) {\n td.style.borderLeftColor = format.verticalBorderColor || TRANSPARENT;\n td.style.borderBottomColor = format.bottomBorderColor || TRANSPARENT;\n td.style.borderTopColor = format.topBorderColor || TRANSPARENT;\n }\n if (!isFirstRow && !isFirstColumn) {\n td.style.borderLeftColor = TRANSPARENT;\n td.style.borderBottomColor = TRANSPARENT;\n td.style.borderTopColor = TRANSPARENT;\n td.style.borderRightColor = TRANSPARENT;\n }\n break;\n case 7 /* ESPECIAL_TYPE_3 */:\n if (isFirstRow) {\n td.style.borderLeftColor = TRANSPARENT;\n td.style.borderTopColor = TRANSPARENT;\n td.style.borderRightColor = TRANSPARENT;\n }\n if (isFirstColumn) {\n td.style.borderLeftColor = TRANSPARENT;\n td.style.borderTopColor = TRANSPARENT;\n td.style.borderBottomColor = TRANSPARENT;\n }\n if (!isFirstRow && !isFirstColumn) {\n td.style.borderLeftColor = TRANSPARENT;\n td.style.borderBottomColor = TRANSPARENT;\n td.style.borderTopColor = TRANSPARENT;\n td.style.borderRightColor = TRANSPARENT;\n }\n if (isFirstRow && isFirstColumn) {\n td.style.borderBottomColor = format.bottomBorderColor || TRANSPARENT;\n }\n break;\n }\n}\n/**\n * Organize the borders of table according to a border type\n * @param format\n * @returns\n */\nfunction setBordersType(cells, format) {\n cells.forEach(function (row, rowIndex) {\n row.forEach(function (cell, cellIndex) {\n if (cell.td) {\n formatBorders(format, cell.td, rowIndex === 0, rowIndex === cells.length - 1, cellIndex === 0, cellIndex === row.length - 1);\n }\n });\n });\n}\n/**\n * Apply custom design to the first table column\n * @param format\n * @returns\n */\nfunction setFirstColumnFormat(cells, format) {\n if (!format.hasFirstColumn) {\n cells.forEach(function (row) {\n row.forEach(function (cell, cellIndex) {\n if (cell.td && cellIndex === 0) {\n cell.td = (0, changeElementTag_1.default)(cell.td, TABLE_CELL_TAG_NAME);\n cell.td.scope = '';\n }\n });\n });\n return;\n }\n cells.forEach(function (row, rowIndex) {\n row.forEach(function (cell, cellIndex) {\n if (cell.td && cellIndex === 0) {\n if (rowIndex !== 0) {\n cell.td.style.borderTopColor = TRANSPARENT;\n (0, setColor_1.default)(cell.td, TRANSPARENT, true /** isBackgroundColor*/);\n }\n if (rowIndex !== cells.length - 1 && rowIndex !== 0) {\n cell.td.style.borderBottomColor = TRANSPARENT;\n }\n cell.td = (0, changeElementTag_1.default)(cell.td, TABLE_HEADER_TAG_NAME);\n cell.td.scope = 'col';\n }\n });\n });\n}\n/**\n * Apply custom design to the Header Row\n * @param format\n * @returns\n */\nfunction setHeaderRowFormat(cells, format) {\n var _a, _b;\n if (!format.hasHeaderRow) {\n (_a = cells[0]) === null || _a === void 0 ? void 0 : _a.forEach(function (cell) {\n if (cell.td) {\n cell.td = (0, changeElementTag_1.default)(cell.td, TABLE_CELL_TAG_NAME);\n cell.td.scope = '';\n }\n });\n return;\n }\n (_b = cells[0]) === null || _b === void 0 ? void 0 : _b.forEach(function (cell) {\n if (cell.td && format.headerRowColor) {\n (0, setColor_1.default)(cell.td, format.headerRowColor, true /** isBackgroundColor*/);\n cell.td.style.borderRightColor = format.headerRowColor;\n cell.td.style.borderLeftColor = format.headerRowColor;\n cell.td.style.borderTopColor = format.headerRowColor;\n cell.td = (0, changeElementTag_1.default)(cell.td, TABLE_HEADER_TAG_NAME);\n cell.td.scope = 'row';\n }\n });\n}\nfunction getBorderStyle(style) {\n var color = style ? style : 'transparent';\n return 'solid 1px ' + color;\n}\n//# sourceMappingURL=applyTableFormat.js.map","/** @license React v0.20.2\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f,g,h,k;if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}\nif(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var t=null,u=null,w=function(){if(null!==t)try{var a=exports.unstable_now();t(!0,a);t=null}catch(b){throw setTimeout(w,0),b;}};f=function(a){null!==t?setTimeout(f,0,a):(t=a,setTimeout(w,0))};g=function(a,b){u=setTimeout(a,b)};h=function(){clearTimeout(u)};exports.unstable_shouldYield=function(){return!1};k=exports.unstable_forceFrameRate=function(){}}else{var x=window.setTimeout,y=window.clearTimeout;if(\"undefined\"!==typeof console){var z=\nwindow.cancelAnimationFrame;\"function\"!==typeof window.requestAnimationFrame&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\");\"function\"!==typeof z&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\")}var A=!1,B=null,C=-1,D=5,E=0;exports.unstable_shouldYield=function(){return exports.unstable_now()>=\nE};k=function(){};exports.unstable_forceFrameRate=function(a){0>a||125>>1,e=a[d];if(void 0!==e&&0I(n,c))void 0!==r&&0>I(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>I(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function I(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var L=[],M=[],N=1,O=null,P=3,Q=!1,R=!1,S=!1;\nfunction T(a){for(var b=J(M);null!==b;){if(null===b.callback)K(M);else if(b.startTime<=a)K(M),b.sortIndex=b.expirationTime,H(L,b);else break;b=J(M)}}function U(a){S=!1;T(a);if(!R)if(null!==J(L))R=!0,f(V);else{var b=J(M);null!==b&&g(U,b.startTime-a)}}\nfunction V(a,b){R=!1;S&&(S=!1,h());Q=!0;var c=P;try{T(b);for(O=J(L);null!==O&&(!(O.expirationTime>b)||a&&!exports.unstable_shouldYield());){var d=O.callback;if(\"function\"===typeof d){O.callback=null;P=O.priorityLevel;var e=d(O.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?O.callback=e:O===J(L)&&K(L);T(b)}else K(L);O=J(L)}if(null!==O)var m=!0;else{var n=J(M);null!==n&&g(U,n.startTime-b);m=!1}return m}finally{O=null,P=c,Q=!1}}var W=k;exports.unstable_IdlePriority=5;\nexports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){R||Q||(R=!0,f(V))};exports.unstable_getCurrentPriorityLevel=function(){return P};exports.unstable_getFirstCallbackNode=function(){return J(L)};\nexports.unstable_next=function(a){switch(P){case 1:case 2:case 3:var b=3;break;default:b=P}var c=P;P=b;try{return a()}finally{P=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=W;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=P;P=a;try{return b()}finally{P=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();\"object\"===typeof c&&null!==c?(c=c.delay,c=\"number\"===typeof c&&0d?(a.sortIndex=c,H(M,a),null===J(L)&&a===J(M)&&(S?h():S=!0,g(U,c-d))):(a.sortIndex=e,H(L,a),R||Q||(R=!0,f(V)));return a};\nexports.unstable_wrapCallback=function(a){var b=P;return function(){var c=P;P=b;try{return a.apply(this,arguments)}finally{P=c}}};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Chain all callback for an attribute together\n * @param map The source callback map\n * @param name Name of the property to chain\n * @param newCallback A new callback to process the given name on the given map.\n * If the same property got multiple callbacks, the final return value will be the return\n * value of the latest callback\n */\nfunction chainSanitizerCallback(map, name, newCallback) {\n if (!map[name]) {\n map[name] = newCallback;\n }\n else {\n var originalCallback_1 = map[name];\n map[name] = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n originalCallback_1.apply(void 0, args);\n return newCallback.apply(void 0, args);\n };\n }\n}\nexports.default = chainSanitizerCallback;\n//# sourceMappingURL=chainSanitizerCallback.js.map","\"use strict\";\nvar __spreadArray = (this && this.__spreadArray) || function (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};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar changeElementTag_1 = require(\"../utils/changeElementTag\");\nvar getListTypeFromNode_1 = require(\"./getListTypeFromNode\");\nvar getTagOfNode_1 = require(\"../utils/getTagOfNode\");\nvar isBlockElement_1 = require(\"../utils/isBlockElement\");\nvar isNodeEmpty_1 = require(\"../utils/isNodeEmpty\");\nvar Position_1 = require(\"../selection/Position\");\nvar queryElements_1 = require(\"../utils/queryElements\");\nvar safeInstanceOf_1 = require(\"../utils/safeInstanceOf\");\nvar splitParentNode_1 = require(\"../utils/splitParentNode\");\nvar toArray_1 = require(\"../utils/toArray\");\nvar unwrap_1 = require(\"../utils/unwrap\");\nvar VListItem_1 = require(\"./VListItem\");\nvar wrap_1 = require(\"../utils/wrap\");\n/**\n * Represent a bullet or a numbering list\n *\n * @example\n * A VList is a logical representation of list items, it contains an item array with node and list type stack.\n * e.g. We have a list like this\n * ```html\n *
    \n *
  1. item 1
  2. \n *
  3. item 2
  4. \n *
      \n *
    • item 2.1
    • \n *
    • item 2.2
    • \n *
        \n *
\n * ```\n *\n * A VList of this list will be like this:\n * ```javascript\n * {\n * rootList: (OL node),\n * items: [{\n * node: (LI node with 'item 1'),\n * listTypes: [null, OL],\n * }, {\n * node: (LI node with 'item 2'),\n * listTypes: [null, OL],\n * }, {\n * node: (LI node with 'item 2.1),\n * listTypes: [null, OL, UL],\n * }, {\n * node: (LI node with 'item 2.2'),\n * listTypes: [null, OL, UL],\n * }\n * ]\n * }\n * ```\n *\n * When we want to outdent item 2.1, we just need to remove the last \"UL\" from listTypes of item 2.1, then\n * the writeBack() function will handle everything related to DOM change\n */\nvar VList = /** @class */ (function () {\n /**\n * Create a new instance of VList class\n * @param rootList The root list element, can be either OL or UL tag\n */\n function VList(rootList) {\n this.rootList = rootList;\n this.items = [];\n if (!rootList) {\n throw new Error('rootList must not be null');\n }\n // Before populate items, we need to normalize the list to make sure it is in a correct format\n // otherwise further action may mass thing up.\n //\n // There are two kinds of normalization to perform.\n // 1. Move nodes directly under OL/UL into a LI node, unless it is an orphan node\n // Please see comment for VListItem.isOrphanItem() for more information about orphan node\n // e.g.:\n // ```HTML\n //
    \n //
  1. item 1
  2. \n //
    item 2
    \n //
\n // ```\n // After this step, it should become:\n // ```html\n //
    \n //
  1. item 1\n //
    item 2
    \n //
  2. \n //
\n // ```\n moveChildNodesToLi(this.rootList);\n (0, queryElements_1.default)(this.rootList, 'ol,ul', moveChildNodesToLi);\n // 2. Move LI node embedded into another LI node out to directly under OL/UL node\n // Ideally browser we do this for us automatically when out the HTML into DOM. However after\n // step 1, it is possible that we move some LI node into another one. e.g:\n // ```HTML\n //
    \n //
  1. item 1
  2. \n //
    \n // item 1.1\n //
  3. item 3
  4. \n //
    \n //
\n // ```\n // See that the second LI tag is not directly under OL, so after step 1, this will become:\n // ```html\n //
    \n //
  1. item 1\n //
    \n // item 1.1\n //
  2. item 2
  3. \n // \n //
  4. \n //
\n // ```\n // Now we have a LI tag embedded into another LI tag. So we need step 2 to move the inner LI tag out to be:\n // ```html\n //
    \n //
  1. item1\n //
    item 1.1
    \n //
  2. \n //
  3. item2
  4. \n //
\n // ```\n (0, queryElements_1.default)(this.rootList, 'li', moveLiToList);\n this.populateItems(this.rootList);\n }\n /**\n * Check if this list contains the given node\n * @param node The node to check\n */\n VList.prototype.contains = function (node) {\n // We don't check if the node is contained by this.rootList here, because after some operation,\n // it is possible a node is logically contained by this list but the container list item hasn't\n // been put under this.rootList in DOM tree yet.\n return this.items.some(function (item) { return item.contains(node); });\n };\n /**\n * Get list number of the last item in this VList.\n * If there is no order list item, result will be undefined\n */\n VList.prototype.getLastItemNumber = function () {\n var start = getStart(this.rootList);\n return start === undefined\n ? start\n : start -\n 1 +\n this.items.filter(function (item) {\n return item.getListType() == 1 /* Ordered */ &&\n item.getLevel() == 1 &&\n !item.isDummy();\n }).length;\n };\n /**\n * Write the result back into DOM tree\n * After that, this VList becomes unavailable because we set this.rootList to null\n */\n VList.prototype.writeBack = function () {\n var _this = this;\n if (!this.rootList) {\n throw new Error('rootList must not be null');\n }\n var doc = this.rootList.ownerDocument;\n var listStack = [doc.createDocumentFragment()];\n var placeholder = doc.createTextNode('');\n var start = getStart(this.rootList) || 1;\n var lastList;\n // Use a placeholder to hold the position since the root list may be moved into document fragment later\n this.rootList.parentNode.replaceChild(placeholder, this.rootList);\n this.items.forEach(function (item) {\n if (item.getNewListStart() && item.getNewListStart() != start) {\n listStack.splice(1, listStack.length - 1);\n start = item.getNewListStart();\n }\n item.writeBack(listStack, _this.rootList);\n var topList = listStack[1];\n if ((0, safeInstanceOf_1.default)(topList, 'HTMLOListElement')) {\n if (lastList != topList) {\n if (start == 1) {\n topList.removeAttribute('start');\n }\n else {\n topList.start = start;\n }\n }\n if (item.getLevel() == 1) {\n start++;\n }\n }\n lastList = topList;\n });\n // Restore the content to the position of placeholder\n placeholder.parentNode.replaceChild(listStack[0], placeholder);\n // Set rootList to null to avoid this to be called again for the same VList, because\n // after change the rootList may not be available any more (e.g. outdent all items).\n this.rootList = null;\n };\n /**\n * Sets the New List Start Property, that is going to be used to create a new List in the WriteBack function\n * @param separator The HTML element that indicates when to split the VList\n * @param startNumber The start number of the new List\n */\n VList.prototype.split = function (separator, startNumber) {\n if (!this.rootList) {\n throw new Error('rootList must not be null');\n }\n //Traverse the items of the VList, when the separator is found, set the New List Start Property\n for (var index = 0; index < this.items.length; index++) {\n if (this.items[index].getNode() == separator) {\n this.items[index].setNewListStart(startNumber);\n return;\n }\n }\n };\n VList.prototype.setIndentation = function (start, end, indentation, softOutdent) {\n this.findListItems(start, end, function (item) {\n return indentation == 1 /* Decrease */\n ? softOutdent && !item.isDummy()\n ? item.setIsDummy(true /*isDummy*/)\n : item.outdent()\n : item.indent();\n });\n };\n /**\n * Change list type of the given range of this list.\n * If some of the items are not real list item yet, this will make them to be list item with given type\n * If all items in the given range are already in the type to change to, this becomes an outdent operation\n * @param start Start position to operate from\n * @param end End position to operate to\n * @param targetType Target list type\n */\n VList.prototype.changeListType = function (start, end, targetType) {\n var needChangeType = false;\n this.findListItems(start, end, function (item) {\n needChangeType = needChangeType || item.getListType() != targetType;\n });\n this.findListItems(start, end, function (item) {\n return needChangeType ? item.changeListType(targetType) : item.outdent();\n });\n };\n /**\n * Append a new item to this VList\n * @param node node of the item to append. If it is not wrapped with LI tag, it will be wrapped\n * @param type Type of this list item, can be ListType.None\n */\n VList.prototype.appendItem = function (node, type) {\n var nodeTag = (0, getTagOfNode_1.default)(node);\n // Change DIV tag to SPAN. Otherwise we cannot create new list item by Enter key in Safari\n if (nodeTag == 'DIV') {\n node = (0, changeElementTag_1.default)(node, 'LI');\n }\n else if (nodeTag != 'LI') {\n node = (0, wrap_1.default)(node, 'LI');\n }\n this.items.push(type == 0 /* None */ ? new VListItem_1.default(node) : new VListItem_1.default(node, type));\n };\n /**\n * Merge the given VList into current VList.\n * - All list items will be removed from the given VList and added into this list.\n * - The root node of the given VList will be removed from DOM tree\n * - If there are orphan items in the given VList, they will be merged into the last item\n * of this list if any.\n * @param list The vList to merge from\n */\n VList.prototype.mergeVList = function (list) {\n var _this = this;\n var _a;\n if (list && list != this) {\n list.items.forEach(function (item) { return _this.items.push(item); });\n list.items.splice(0, list.items.length);\n (_a = list.rootList.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(list.rootList);\n }\n };\n VList.prototype.findListItems = function (start, end, callback) {\n if (this.items.length == 0) {\n return [];\n }\n var listStartPos = new Position_1.default(this.items[0].getNode(), 0 /* Begin */);\n var listEndPos = new Position_1.default(this.items[this.items.length - 1].getNode(), -1 /* End */);\n var startIndex = listStartPos.isAfter(start) ? 0 : -1;\n var endIndex = this.items.length - (end.isAfter(listEndPos) ? 1 : 0);\n this.items.forEach(function (item, index) {\n startIndex = item.contains(start.node) ? index : startIndex;\n endIndex = item.contains(end.node) ? index : endIndex;\n });\n startIndex = endIndex < this.items.length ? Math.max(0, startIndex) : startIndex;\n endIndex = startIndex >= 0 ? Math.min(this.items.length - 1, endIndex) : endIndex;\n var result = startIndex <= endIndex ? this.items.slice(startIndex, endIndex + 1) : [];\n if (callback) {\n result.forEach(callback);\n }\n return result;\n };\n VList.prototype.populateItems = function (list, listTypes) {\n var _this = this;\n if (listTypes === void 0) { listTypes = []; }\n var type = (0, getListTypeFromNode_1.default)(list);\n var items = (0, toArray_1.default)(list.childNodes);\n items.forEach(function (item) {\n var newListTypes = __spreadArray(__spreadArray([], listTypes, true), [type], false);\n if ((0, getListTypeFromNode_1.isListElement)(item)) {\n _this.populateItems(item, newListTypes);\n }\n else if (item.nodeType != 3 /* Text */ || item.nodeValue.trim() != '') {\n _this.items.push(new (VListItem_1.default.bind.apply(VListItem_1.default, __spreadArray([void 0, item], newListTypes, false)))());\n }\n });\n };\n return VList;\n}());\nexports.default = VList;\n//Normalization\n// Step 1: Move all non-LI direct children under list into LI\n// e.g.\n// From:
  • line 1
  • line 2
\n// To:
  • line 1
    line 2
\nfunction moveChildNodesToLi(list) {\n var currentItem = null;\n (0, toArray_1.default)(list.childNodes).forEach(function (child) {\n if ((0, getTagOfNode_1.default)(child) == 'LI') {\n currentItem = child;\n }\n else if ((0, getListTypeFromNode_1.isListElement)(child)) {\n currentItem = null;\n }\n else if (currentItem && !(0, isNodeEmpty_1.default)(child, true /*trimContent*/)) {\n currentItem.appendChild((0, isBlockElement_1.default)(child) ? child : (0, wrap_1.default)(child));\n }\n });\n}\n// Step 2: Move nested LI up to under list directly\n// e.g.\n// From:
  • line 1
  • line 2
  • line 3
\n// To:
  • line 1
  • line 2
    line 3
\nfunction moveLiToList(li) {\n while (!(0, getListTypeFromNode_1.isListElement)(li.parentNode)) {\n (0, splitParentNode_1.default)(li, true /*splitBefore*/);\n var furtherNodes = (0, toArray_1.default)(li.parentNode.childNodes).slice(1);\n if (furtherNodes.length > 0) {\n if (!(0, isBlockElement_1.default)(furtherNodes[0])) {\n furtherNodes = [(0, wrap_1.default)(furtherNodes)];\n }\n furtherNodes.forEach(function (node) { return li.appendChild(node); });\n }\n (0, unwrap_1.default)(li.parentNode);\n }\n}\nfunction getStart(list) {\n return (0, safeInstanceOf_1.default)(list, 'HTMLOListElement') ? list.start : undefined;\n}\n//# sourceMappingURL=VList.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(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))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar applyTableFormat_1 = require(\"./applyTableFormat\");\nvar moveChildNodes_1 = require(\"../utils/moveChildNodes\");\nvar normalizeRect_1 = require(\"../utils/normalizeRect\");\nvar safeInstanceOf_1 = require(\"../utils/safeInstanceOf\");\nvar toArray_1 = require(\"../utils/toArray\");\nvar tableFormatInfo_1 = require(\"./tableFormatInfo\");\nvar CELL_SHADE = 'cellShade';\nvar DEFAULT_FORMAT = {\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: 0 /* DEFAULT */,\n};\n/**\n * A virtual table class, represent an HTML table, by expand all merged cells to each separated cells\n */\nvar VTable = /** @class */ (function () {\n /**\n * Create a new instance of VTable object using HTML TABLE or TD node\n * @param node The HTML Table or TD node\n * @param normalizeSize Whether table size needs to be normalized\n * @param zoomScale When the table is under a zoomed container, pass in the zoom scale here\n */\n function VTable(node, normalizeSize, zoomScale) {\n var _this = this;\n this.trs = [];\n this.table = (0, safeInstanceOf_1.default)(node, 'HTMLTableElement') ? node : getTableFromTd(node);\n if (this.table) {\n var currentTd_1 = (0, safeInstanceOf_1.default)(node, 'HTMLTableElement') ? null : node;\n var trs = (0, toArray_1.default)(this.table.rows);\n this.cells = trs.map(function (row) { return []; });\n trs.forEach(function (tr, rowIndex) {\n _this.trs[rowIndex % 2] = tr;\n for (var sourceCol = 0, targetCol = 0; sourceCol < tr.cells.length; sourceCol++) {\n // Skip the cells which already initialized\n for (; _this.cells[rowIndex][targetCol]; targetCol++) { }\n var td = tr.cells[sourceCol];\n if (td == currentTd_1) {\n _this.col = targetCol;\n _this.row = rowIndex;\n }\n for (var colSpan = 0; colSpan < td.colSpan; colSpan++, targetCol++) {\n for (var rowSpan = 0; rowSpan < td.rowSpan; rowSpan++) {\n var hasTd = colSpan + rowSpan == 0;\n var rect = td.getBoundingClientRect();\n _this.cells[rowIndex + rowSpan][targetCol] = {\n td: hasTd ? td : null,\n spanLeft: colSpan > 0,\n spanAbove: rowSpan > 0,\n width: hasTd ? rect.width : undefined,\n height: hasTd ? rect.height : undefined,\n };\n }\n }\n }\n });\n this.formatInfo = (0, tableFormatInfo_1.getTableFormatInfo)(this.table);\n if (normalizeSize) {\n this.normalizeSize(typeof zoomScale == 'number' ? function (n) { return n / zoomScale; } : zoomScale);\n }\n }\n }\n /**\n * Write the virtual table back to DOM tree to represent the change of VTable\n * @param skipApplyFormat Do not reapply table format when write back.\n * Only use this parameter when you are pretty sure there is no format or table structure change during the process.\n */\n VTable.prototype.writeBack = function (skipApplyFormat) {\n var _this = this;\n if (this.cells) {\n (0, moveChildNodes_1.default)(this.table);\n this.cells.forEach(function (row, r) {\n var tr = cloneNode(_this.trs[r % 2] || _this.trs[0]);\n _this.table.appendChild(tr);\n row.forEach(function (cell, c) {\n if (cell.td) {\n _this.recalculateSpans(r, c);\n tr.appendChild(cell.td);\n }\n });\n });\n if (this.formatInfo && !skipApplyFormat) {\n (0, tableFormatInfo_1.saveTableInfo)(this.table, this.formatInfo);\n (0, applyTableFormat_1.default)(this.table, this.cells, this.formatInfo);\n }\n }\n else if (this.table) {\n this.table.parentNode.removeChild(this.table);\n }\n };\n /**\n * Apply the given table format to this virtual table\n * @param format Table format to apply\n */\n VTable.prototype.applyFormat = function (format) {\n if (!this.table) {\n return;\n }\n this.formatInfo = __assign(__assign(__assign({}, DEFAULT_FORMAT), (this.formatInfo || {})), (format || {}));\n this.deleteCellShadeDataset(this.cells);\n };\n /**\n * Remove the cellShade dataset to apply a new style format at the cell.\n * @param cells\n */\n VTable.prototype.deleteCellShadeDataset = function (cells) {\n cells.forEach(function (row) {\n row.forEach(function (cell) {\n if (cell.td && cell.td.dataset[CELL_SHADE]) {\n delete cell.td.dataset[CELL_SHADE];\n }\n });\n });\n };\n /**\n * Edit table with given operation.\n * @param operation Table operation\n */\n VTable.prototype.edit = function (operation) {\n var _this = this;\n if (!this.table) {\n return;\n }\n var currentRow = this.cells[this.row];\n var currentCell = currentRow[this.col];\n var style = currentCell.td.style;\n switch (operation) {\n case 0 /* InsertAbove */:\n this.cells.splice(this.row, 0, currentRow.map(cloneCell));\n break;\n case 1 /* InsertBelow */:\n var newRow_1 = this.row + this.countSpanAbove(this.row, this.col);\n this.cells.splice(newRow_1, 0, this.cells[newRow_1 - 1].map(function (cell, colIndex) {\n var nextCell = _this.getCell(newRow_1, colIndex);\n if (nextCell.spanAbove) {\n return cloneCell(nextCell);\n }\n else if (cell.spanLeft) {\n var newCell = cloneCell(cell);\n newCell.spanAbove = false;\n return newCell;\n }\n else {\n return {\n td: cloneNode(_this.getTd(_this.row, colIndex)),\n };\n }\n }));\n break;\n case 2 /* InsertLeft */:\n this.forEachCellOfCurrentColumn(function (cell, row) {\n row.splice(_this.col, 0, cloneCell(cell));\n });\n break;\n case 3 /* InsertRight */:\n var newCol_1 = this.col + this.countSpanLeft(this.row, this.col);\n this.forEachCellOfColumn(newCol_1 - 1, function (cell, row, i) {\n var nextCell = _this.getCell(i, newCol_1);\n var newCell;\n if (nextCell.spanLeft) {\n newCell = cloneCell(nextCell);\n }\n else if (cell.spanAbove) {\n newCell = cloneCell(cell);\n newCell.spanLeft = false;\n }\n else {\n newCell = {\n td: cloneNode(_this.getTd(i, _this.col)),\n };\n }\n row.splice(newCol_1, 0, newCell);\n });\n break;\n case 6 /* DeleteRow */:\n this.forEachCellOfCurrentRow(function (cell, i) {\n var nextCell = _this.getCell(_this.row + 1, i);\n if (cell.td && cell.td.rowSpan > 1 && nextCell.spanAbove) {\n nextCell.td = cell.td;\n }\n });\n this.cells.splice(this.row, 1);\n break;\n case 5 /* DeleteColumn */:\n this.forEachCellOfCurrentColumn(function (cell, row, i) {\n var nextCell = _this.getCell(i, _this.col + 1);\n if (cell.td && cell.td.colSpan > 1 && nextCell.spanLeft) {\n nextCell.td = cell.td;\n }\n row.splice(_this.col, 1);\n });\n break;\n case 7 /* MergeAbove */:\n case 8 /* MergeBelow */:\n var rowStep = operation == 7 /* MergeAbove */ ? -1 : 1;\n for (var rowIndex = this.row + rowStep; rowIndex >= 0 && rowIndex < this.cells.length; rowIndex += rowStep) {\n var cell = this.getCell(rowIndex, this.col);\n if (cell.td && !cell.spanAbove) {\n var aboveCell = rowIndex < this.row ? cell : currentCell;\n var belowCell = rowIndex < this.row ? currentCell : cell;\n if (aboveCell.td.colSpan == belowCell.td.colSpan) {\n (0, moveChildNodes_1.default)(aboveCell.td, belowCell.td, true /*keepExistingChildren*/);\n belowCell.td = null;\n belowCell.spanAbove = true;\n }\n break;\n }\n }\n break;\n case 9 /* MergeLeft */:\n case 10 /* MergeRight */:\n var colStep = operation == 9 /* MergeLeft */ ? -1 : 1;\n for (var colIndex = this.col + colStep; colIndex >= 0 && colIndex < this.cells[this.row].length; colIndex += colStep) {\n var cell = this.getCell(this.row, colIndex);\n if (cell.td && !cell.spanLeft) {\n var leftCell = colIndex < this.col ? cell : currentCell;\n var rightCell = colIndex < this.col ? currentCell : cell;\n if (leftCell.td.rowSpan == rightCell.td.rowSpan) {\n (0, moveChildNodes_1.default)(leftCell.td, rightCell.td, true /*keepExistingChildren*/);\n rightCell.td = null;\n rightCell.spanLeft = true;\n }\n break;\n }\n }\n break;\n case 4 /* DeleteTable */:\n this.cells = null;\n break;\n case 12 /* SplitVertically */:\n if (currentCell.td.rowSpan > 1) {\n this.getCell(this.row + 1, this.col).td = cloneNode(currentCell.td);\n }\n else {\n var splitRow = currentRow.map(function (cell) {\n return {\n td: cell == currentCell ? cloneNode(cell.td) : null,\n spanAbove: cell != currentCell,\n spanLeft: cell.spanLeft,\n };\n });\n this.cells.splice(this.row + 1, 0, splitRow);\n }\n break;\n case 11 /* SplitHorizontally */:\n if (currentCell.td.colSpan > 1) {\n this.getCell(this.row, this.col + 1).td = cloneNode(currentCell.td);\n }\n else {\n this.forEachCellOfCurrentColumn(function (cell, row) {\n row.splice(_this.col + 1, 0, {\n td: row == currentRow ? cloneNode(cell.td) : null,\n spanAbove: cell.spanAbove,\n spanLeft: row != currentRow,\n });\n });\n }\n break;\n case 13 /* AlignCenter */:\n this.table.style.marginLeft = 'auto';\n this.table.style.marginRight = 'auto';\n break;\n case 14 /* AlignLeft */:\n this.table.style.marginLeft = '';\n this.table.style.marginRight = 'auto';\n break;\n case 15 /* AlignRight */:\n this.table.style.marginLeft = 'auto';\n this.table.style.marginRight = '';\n break;\n case 17 /* AlignCellCenter */:\n style.textAlign = 'center';\n break;\n case 16 /* AlignCellLeft */:\n style.textAlign = 'left';\n break;\n case 18 /* AlignCellRight */:\n style.textAlign = 'right';\n break;\n case 19 /* AlignCellTop */:\n style.verticalAlign = 'top';\n break;\n case 20 /* AlignCellMiddle */:\n style.verticalAlign = 'middle';\n break;\n case 21 /* AlignCellBottom */:\n style.verticalAlign = 'bottom';\n break;\n }\n };\n /**\n * Loop each cell of current column and invoke a callback function\n * @param callback The callback function to invoke\n */\n VTable.prototype.forEachCellOfCurrentColumn = function (callback) {\n this.forEachCellOfColumn(this.col, callback);\n };\n /**\n * Loop each table cell and get all the cells that share the same border from one side\n * The result is an array of table cell elements\n * @param borderPos The position of the border\n * @param getLeftCells Get left-hand-side or right-hand-side cells of the border\n *\n * Example, consider having a 3 by 4 table as below with merged and split cells\n *\n * | 1 | 4 | 7 | 8 |\n * | 5 | 9 |\n * | 3 | 10 |\n *\n * input => borderPos: the 3rd border, getLeftCells: true\n * output => [4, 5, 3]\n *\n * input => borderPos: the 3rd border, getLeftCells: false\n * output => [7, 9, 10]\n *\n * input => borderPos: the 2nd border, getLeftCells: true\n * output => [1]\n *\n * input => borderPos: the 2nd border, getLeftCells: false\n * output => [4]\n */\n VTable.prototype.getCellsWithBorder = function (borderPos, getLeftCells) {\n var cells = [];\n for (var i = 0; i < this.cells.length; i++) {\n for (var j = 0; j < this.cells[i].length; j++) {\n var cell = this.getCell(i, j);\n if (cell.td) {\n var cellRect = (0, normalizeRect_1.default)(cell.td.getBoundingClientRect());\n if (cellRect) {\n var found = false;\n if (getLeftCells) {\n if (cellRect.right == borderPos) {\n found = true;\n cells.push(cell.td);\n }\n else if (found) {\n break;\n }\n }\n else {\n if (cellRect.left == borderPos) {\n found = true;\n cells.push(cell.td);\n }\n else if (found) {\n break;\n }\n }\n }\n }\n }\n }\n return cells;\n };\n /**\n * Loop each cell of current row and invoke a callback function\n * @param callback The callback function to invoke\n */\n VTable.prototype.forEachCellOfCurrentRow = function (callback) {\n this.forEachCellOfRow(this.row, callback);\n };\n /**\n * Get a table cell using its row and column index. This function will always return an object\n * even if the given indexes don't exist in table.\n * @param row The row index\n * @param col The column index\n */\n VTable.prototype.getCell = function (row, col) {\n return (this.cells && this.cells[row] && this.cells[row][col]) || {};\n };\n /**\n * Get current HTML table cell object. If the current table cell is a virtual expanded cell, return its root cell\n */\n VTable.prototype.getCurrentTd = function () {\n return this.getTd(this.row, this.col);\n };\n /**\n * Get the Table Cell in a provided coordinate\n * @param row row of the cell\n * @param col column of the cell\n */\n VTable.prototype.getTd = function (row, col) {\n if (this.cells) {\n row = Math.min(this.cells.length - 1, row);\n col = this.cells[row] ? Math.min(this.cells[row].length - 1, col) : col;\n if (!isNaN(row) && !isNaN(col)) {\n while (row >= 0 && col >= 0) {\n var cell = this.getCell(row, col);\n if (cell.td) {\n return cell.td;\n }\n else if (cell.spanLeft) {\n col--;\n }\n else if (cell.spanAbove) {\n row--;\n }\n else {\n break;\n }\n }\n }\n }\n return null;\n };\n VTable.prototype.forEachCellOfColumn = function (col, callback) {\n for (var i = 0; i < this.cells.length; i++) {\n callback(this.getCell(i, col), this.cells[i], i);\n }\n };\n VTable.prototype.forEachCellOfRow = function (row, callback) {\n for (var i = 0; i < this.cells[row].length; i++) {\n callback(this.getCell(row, i), i);\n }\n };\n VTable.prototype.recalculateSpans = function (row, col) {\n var td = this.getCell(row, col).td;\n if (td) {\n td.colSpan = this.countSpanLeft(row, col);\n td.rowSpan = this.countSpanAbove(row, col);\n if (td.colSpan == 1) {\n td.removeAttribute('colSpan');\n }\n if (td.rowSpan == 1) {\n td.removeAttribute('rowSpan');\n }\n }\n };\n VTable.prototype.countSpanLeft = function (row, col) {\n var result = 1;\n for (var i = col + 1; i < this.cells[row].length; i++) {\n var cell = this.getCell(row, i);\n if (cell.td || !cell.spanLeft) {\n break;\n }\n result++;\n }\n return result;\n };\n VTable.prototype.countSpanAbove = function (row, col) {\n var result = 1;\n for (var i = row + 1; i < this.cells.length; i++) {\n var cell = this.getCell(i, col);\n if (cell.td || !cell.spanAbove) {\n break;\n }\n result++;\n }\n return result;\n };\n VTable.prototype.normalizeEmptyTableCells = function () {\n for (var i = 0, row = void 0; (row = this.table.rows[i]); i++) {\n for (var j = 0, cell = void 0; (cell = row.cells[j]); j++) {\n if (cell) {\n if (!cell.innerHTML || !cell.innerHTML.trim()) {\n cell.appendChild(document.createElement('br'));\n }\n }\n }\n }\n };\n /* normalize width/height for each cell in the table */\n VTable.prototype.normalizeTableCellSize = function (zoomScale) {\n // remove width/height for each row\n for (var i = 0, row = void 0; (row = this.table.rows[i]); i++) {\n row.removeAttribute('width');\n row.style.width = null;\n row.removeAttribute('height');\n row.style.height = null;\n }\n // set width/height for each cell\n for (var i = 0; i < this.cells.length; i++) {\n for (var j = 0; j < this.cells[i].length; j++) {\n var cell = this.cells[i][j];\n if (cell) {\n var func = typeof zoomScale == 'number' ? function (n) { return n / zoomScale; } : zoomScale;\n setHTMLElementSizeInPx(cell.td, (func === null || func === void 0 ? void 0 : func(cell.width)) || cell.width, (func === null || func === void 0 ? void 0 : func(cell.height)) || cell.height);\n }\n }\n }\n };\n VTable.prototype.normalizeSize = function (sizeTransformer) {\n this.normalizeEmptyTableCells();\n this.normalizeTableCellSize(sizeTransformer);\n var rect = this.table.getBoundingClientRect();\n // Make sure table width/height is fixed to avoid shifting effect\n setHTMLElementSizeInPx(this.table, (sizeTransformer === null || sizeTransformer === void 0 ? void 0 : sizeTransformer(rect.width)) || rect.width, (sizeTransformer === null || sizeTransformer === void 0 ? void 0 : sizeTransformer(rect.height)) || rect.height);\n };\n return VTable;\n}());\nexports.default = VTable;\nfunction setHTMLElementSizeInPx(element, newWidth, newHeight) {\n if (!!element) {\n element.removeAttribute('width');\n element.removeAttribute('height');\n element.style.boxSizing = 'border-box';\n element.style.width = newWidth + \"px\";\n element.style.height = newHeight + \"px\";\n }\n}\nfunction getTableFromTd(td) {\n var result = td;\n for (; result && result.tagName != 'TABLE'; result = result.parentElement) { }\n return result;\n}\n/**\n * Clone a table cell\n * @param cell The cell to clone\n */\nfunction cloneCell(cell) {\n return {\n td: cloneNode(cell.td),\n spanAbove: cell.spanAbove,\n spanLeft: cell.spanLeft,\n };\n}\n/**\n * Clone a node without its children.\n * @param node The node to clone\n */\nfunction cloneNode(node) {\n var newNode = node ? node.cloneNode(false /*deep*/) : null;\n if ((0, safeInstanceOf_1.default)(newNode, 'HTMLTableCellElement')) {\n newNode.removeAttribute('id');\n if (!newNode.firstChild) {\n newNode.appendChild(node.ownerDocument.createElement('br'));\n }\n }\n return newNode;\n}\n//# sourceMappingURL=VTable.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Alignment = void 0;\n/**\n * enum for setting block alignment, used by setAlignment API\n */\nvar Alignment;\n(function (Alignment) {\n /**\n * Align left\n */\n Alignment[Alignment[\"Left\"] = 0] = \"Left\";\n /**\n * Align center\n */\n Alignment[Alignment[\"Center\"] = 1] = \"Center\";\n /**\n * Align right\n */\n Alignment[Alignment[\"Right\"] = 2] = \"Right\";\n})(Alignment = exports.Alignment || (exports.Alignment = {}));\n//# sourceMappingURL=Alignment.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * Execute a document command\n * @param editor The editor instance\n * @param command The command to execute\n * @param addUndoSnapshotWhenCollapsed Optional, set to true to always add undo snapshot even current selection is collapsed.\n * Default value is false.\n * @param doWorkaroundForList Optional, set to true to do workaround for list in order to keep current format.\n * Default value is false.\n */\nfunction execCommand(editor, command) {\n editor.focus();\n var formatter = function () { return editor.getDocument().execCommand(command, false, null); };\n var selection = editor.getSelectionRangeEx();\n if (selection && selection.areAllCollapsed) {\n editor.addUndoSnapshot();\n var formatState = editor.getPendableFormatState(false /* forceGetStateFromDom */);\n formatter();\n var formatName = Object.keys(roosterjs_editor_dom_1.PendableFormatCommandMap).filter(function (x) { return roosterjs_editor_dom_1.PendableFormatCommandMap[x] == command; })[0];\n if (formatName) {\n formatState[formatName] = !formatState[formatName];\n editor.triggerPluginEvent(13 /* PendingFormatStateChanged */, {\n formatState: formatState,\n });\n }\n }\n else {\n editor.addUndoSnapshot(function () {\n var tempRange;\n selection.ranges.forEach(function (range) {\n if (selection.type == 1 /* TableSelection */) {\n editor.select(range);\n }\n formatter();\n tempRange = range;\n });\n if (tempRange && selection.type == 1 /* TableSelection */) {\n editor.select(selection.table, selection.coordinates);\n }\n }, \"Format\" /* Format */);\n }\n}\nexports.default = execCommand;\n//# sourceMappingURL=execCommand.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Gets the cached event data by cache key from event object if there is already one.\n * Otherwise, call getter function to create one, and cache it.\n * @param event The event object\n * @param key Cache key string, need to be unique\n * @param getter Getter function to get the object when it is not in cache yet\n */\nfunction cacheGetEventData(event, key, getter) {\n var result = event && event.eventDataCache && event.eventDataCache.hasOwnProperty(key)\n ? event.eventDataCache[key]\n : getter();\n if (event) {\n event.eventDataCache = event.eventDataCache || {};\n event.eventDataCache[key] = result;\n }\n return result;\n}\nexports.default = cacheGetEventData;\n//# sourceMappingURL=cacheGetEventData.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ListFeatures = void 0;\nvar roosterjs_editor_api_1 = require(\"roosterjs-editor-api\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * IndentWhenTab edit feature, provides the ability to indent current list when user press TAB\n */\nvar IndentWhenTab = {\n keys: [9 /* TAB */],\n shouldHandleEvent: function (event, editor) {\n return !event.rawEvent.shiftKey && cacheGetListElement(event, editor);\n },\n handleEvent: function (event, editor) {\n (0, roosterjs_editor_api_1.setIndentation)(editor, 0 /* Increase */);\n event.rawEvent.preventDefault();\n },\n};\n/**\n * OutdentWhenShiftTab edit feature, provides the ability to outdent current list when user press Shift+TAB\n */\nvar OutdentWhenShiftTab = {\n keys: [9 /* TAB */],\n shouldHandleEvent: function (event, editor) {\n return event.rawEvent.shiftKey && cacheGetListElement(event, editor);\n },\n handleEvent: function (event, editor) {\n (0, roosterjs_editor_api_1.setIndentation)(editor, 1 /* Decrease */);\n event.rawEvent.preventDefault();\n },\n};\n/**\n * MergeInNewLine edit feature, provides the ability to merge current line into a new line when user press\n * BACKSPACE at beginning of a list item\n */\nvar MergeInNewLine = {\n keys: [8 /* BACKSPACE */],\n shouldHandleEvent: function (event, editor) {\n var li = editor.getElementAtCursor('LI', null /*startFrom*/, event);\n var range = editor.getSelectionRange();\n return li && (range === null || range === void 0 ? void 0 : range.collapsed) && (0, roosterjs_editor_dom_1.isPositionAtBeginningOf)(roosterjs_editor_dom_1.Position.getStart(range), li);\n },\n handleEvent: function (event, editor) {\n var li = editor.getElementAtCursor('LI', null /*startFrom*/, event);\n if (li.previousSibling) {\n (0, roosterjs_editor_api_1.blockFormat)(editor, function (region, start, end) {\n var vList = (0, roosterjs_editor_dom_1.createVListFromRegion)(region, false /*includeSiblingList*/, li);\n vList.setIndentation(start, end, 1 /* Decrease */, true /*softOutdent*/);\n vList.writeBack();\n event.rawEvent.preventDefault();\n });\n }\n else {\n toggleListAndPreventDefault(event, editor);\n }\n },\n defaultDisabled: true,\n};\n/**\n * OutdentWhenBackOn1stEmptyLine edit feature, provides the ability to outdent current item if user press\n * BACKSPACE at the first and empty line of a list\n */\nvar OutdentWhenBackOn1stEmptyLine = {\n keys: [8 /* BACKSPACE */],\n shouldHandleEvent: function (event, editor) {\n var li = editor.getElementAtCursor('LI', null /*startFrom*/, event);\n return li && (0, roosterjs_editor_dom_1.isNodeEmpty)(li) && !li.previousSibling;\n },\n handleEvent: toggleListAndPreventDefault,\n};\n/**\n * MaintainListChainWhenDelete edit feature, provides the ability to indent the list if user press\n * DELETE before the first item of a list\n */\nvar MaintainListChainWhenDelete = {\n keys: [46 /* DELETE */],\n shouldHandleEvent: function (event, editor) {\n var li = editor.getElementAtCursor('LI', null /*startFrom*/, event);\n if (li) {\n return false;\n }\n var isAtEnd = roosterjs_editor_dom_1.Position.getEnd(editor.getSelectionRange()).isAtEnd;\n var nextSibling = isAtEnd ? getCacheNextSibling(event, editor) : null;\n var isAtEndAndBeforeLI = editor.getElementAtCursor('LI', nextSibling, event);\n return isAtEndAndBeforeLI;\n },\n handleEvent: function (event, editor) {\n var chains = getListChains(editor);\n editor.runAsync(function (editor) { return (0, roosterjs_editor_api_1.experimentCommitListChains)(editor, chains); });\n },\n};\n/**\n * OutdentWhenEnterOnEmptyLine edit feature, provides the ability to outdent current item if user press\n * ENTER at the beginning of an empty line of a list\n */\nvar OutdentWhenEnterOnEmptyLine = {\n keys: [13 /* ENTER */],\n shouldHandleEvent: function (event, editor) {\n var li = editor.getElementAtCursor('LI', null /*startFrom*/, event);\n return !event.rawEvent.shiftKey && li && (0, roosterjs_editor_dom_1.isNodeEmpty)(li);\n },\n handleEvent: function (event, editor) {\n editor.addUndoSnapshot(function () { return toggleListAndPreventDefault(event, editor, false /* includeSiblingLists */); }, null /*changeSource*/, true /*canUndoByBackspace*/);\n },\n defaultDisabled: !roosterjs_editor_dom_1.Browser.isIE && !roosterjs_editor_dom_1.Browser.isChrome,\n};\n/**\n * AutoBullet edit feature, provides the ability to automatically convert current line into a list.\n * When user input \"1. \", convert into a numbering list\n * When user input \"- \" or \"* \", convert into a bullet list\n */\nvar AutoBullet = {\n keys: [32 /* SPACE */],\n shouldHandleEvent: function (event, editor) {\n if (!cacheGetListElement(event, editor)) {\n var searcher = editor.getContentSearcherOfCursor(event);\n var textBeforeCursor = searcher.getSubStringBefore(4);\n // Auto list is triggered if:\n // 1. Text before cursor exactly matches '*', '-' or '1.'\n // 2. There's no non-text inline entities before cursor\n return isAListPattern(textBeforeCursor) && !searcher.getNearestNonTextInlineElement();\n }\n return false;\n },\n handleEvent: function (event, editor) {\n editor.insertContent(' ');\n event.rawEvent.preventDefault();\n editor.addUndoSnapshot(function () {\n var _a;\n var regions;\n var searcher = editor.getContentSearcherOfCursor();\n var textBeforeCursor = searcher.getSubStringBefore(4);\n var textRange = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/);\n if (!textRange) {\n // no op if the range can't be found\n }\n else if (textBeforeCursor.indexOf('*') == 0 ||\n textBeforeCursor.indexOf('-') == 0) {\n prepareAutoBullet(editor, textRange);\n (0, roosterjs_editor_api_1.toggleBullet)(editor);\n }\n else if (isAListPattern(textBeforeCursor)) {\n prepareAutoBullet(editor, textRange);\n (0, roosterjs_editor_api_1.toggleNumbering)(editor);\n }\n else if ((regions = editor.getSelectedRegions()) && regions.length == 1) {\n var num = parseInt(textBeforeCursor);\n prepareAutoBullet(editor, textRange);\n (0, roosterjs_editor_api_1.toggleNumbering)(editor, num);\n }\n (_a = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/)) === null || _a === void 0 ? void 0 : _a.deleteContents();\n }, null /*changeSource*/, true /*canUndoByBackspace*/);\n },\n};\n/**\n * Maintain the list numbers in list chain\n * e.g. we have two lists:\n * 1, 2, 3 and 4, 5, 6\n * Now we delete list item 2, so the first one becomes \"1, 2\".\n * This edit feature can maintain the list number of the second list to become \"3, 4, 5\"\n */\nvar MaintainListChain = {\n keys: [13 /* ENTER */, 9 /* TAB */, 46 /* DELETE */, 8 /* BACKSPACE */, 258 /* RANGE */],\n shouldHandleEvent: function (event, editor) {\n return editor.queryElements('li', 1 /* OnSelection */).length > 0;\n },\n handleEvent: function (event, editor) {\n var chains = getListChains(editor);\n editor.runAsync(function (editor) { return (0, roosterjs_editor_api_1.experimentCommitListChains)(editor, chains); });\n },\n};\n/**\n * Validate if a block of text is considered a list pattern\n * The regex expression will look for patterns of the form:\n * 1. 1> 1) 1- (1)\n * @returns if a text is considered a list pattern\n */\nfunction isAListPattern(textBeforeCursor) {\n var REGEX = /^(\\*|-|[0-9]{1,2}\\.|[0-9]{1,2}\\>|[0-9]{1,2}\\)|[0-9]{1,2}\\-|\\([0-9]{1,2}\\))$/;\n return REGEX.test(textBeforeCursor);\n}\nfunction getListChains(editor) {\n return roosterjs_editor_dom_1.VListChain.createListChains(editor.getSelectedRegions());\n}\nfunction getCacheNextSibling(event, editor) {\n var element = (0, roosterjs_editor_dom_1.cacheGetEventData)(event, 'nextSibling', function () {\n var _a;\n var range = editor.getSelectionRange();\n var pos = roosterjs_editor_dom_1.Position.getEnd(range).normalize();\n var traverser = editor.getBodyTraverser(pos.node);\n return (_a = traverser === null || traverser === void 0 ? void 0 : traverser.getNextBlockElement()) === null || _a === void 0 ? void 0 : _a.getStartNode();\n });\n return element;\n}\nfunction prepareAutoBullet(editor, range) {\n var block = editor.getBlockElementAtNode(range.startContainer);\n var endNode = block === null || block === void 0 ? void 0 : block.getEndNode();\n if (endNode && (0, roosterjs_editor_dom_1.getTagOfNode)(endNode) != 'BR') {\n var br = editor.getDocument().createElement('BR');\n if ((0, roosterjs_editor_dom_1.isBlockElement)(endNode)) {\n endNode.appendChild(br);\n }\n else {\n endNode.parentNode.insertBefore(br, endNode.nextSibling);\n }\n editor.select(range.startContainer, range.startOffset);\n }\n}\nfunction toggleListAndPreventDefault(event, editor, includeSiblingLists) {\n if (includeSiblingLists === void 0) { includeSiblingLists = true; }\n var listInfo = cacheGetListElement(event, editor);\n if (listInfo) {\n var listElement = listInfo[0];\n var tag = (0, roosterjs_editor_dom_1.getTagOfNode)(listElement);\n if (tag == 'UL' || tag == 'OL') {\n (0, roosterjs_editor_api_1.toggleListType)(editor, tag == 'UL' ? 2 /* Unordered */ : 1 /* Ordered */, null /* startNumber */, includeSiblingLists);\n }\n editor.focus();\n event.rawEvent.preventDefault();\n }\n}\nfunction cacheGetListElement(event, editor) {\n var li = editor.getElementAtCursor('LI,TABLE', null /*startFrom*/, event);\n var listElement = li && (0, roosterjs_editor_dom_1.getTagOfNode)(li) == 'LI' && editor.getElementAtCursor('UL,OL', li);\n return listElement ? [listElement, li] : null;\n}\n/**\n * @internal\n */\nexports.ListFeatures = {\n autoBullet: AutoBullet,\n indentWhenTab: IndentWhenTab,\n outdentWhenShiftTab: OutdentWhenShiftTab,\n outdentWhenBackspaceOnEmptyFirstLine: OutdentWhenBackOn1stEmptyLine,\n outdentWhenEnterOnEmptyLine: OutdentWhenEnterOnEmptyLine,\n mergeInNewLineWhenBackspaceOnFirstChar: MergeInNewLine,\n maintainListChain: MaintainListChain,\n maintainListChainWhenDelete: MaintainListChainWhenDelete,\n};\n//# sourceMappingURL=listFeatures.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar changeElementTag_1 = require(\"../utils/changeElementTag\");\nvar getInheritableStyles_1 = require(\"./getInheritableStyles\");\nvar getPredefinedCssForElement_1 = require(\"./getPredefinedCssForElement\");\nvar getStyles_1 = require(\"../style/getStyles\");\nvar getTagOfNode_1 = require(\"../utils/getTagOfNode\");\nvar safeInstanceOf_1 = require(\"../utils/safeInstanceOf\");\nvar setStyles_1 = require(\"../style/setStyles\");\nvar toArray_1 = require(\"../utils/toArray\");\nvar cloneObject_1 = require(\"./cloneObject\");\nvar getAllowedValues_1 = require(\"./getAllowedValues\");\n/**\n * HTML sanitizer class provides two features:\n * 1. Convert global CSS to inline CSS\n * 2. Sanitize an HTML document, remove unnecessary/dangerous attribute/nodes\n */\nvar HtmlSanitizer = /** @class */ (function () {\n /**\n * Construct a new instance of HtmlSanitizer\n * @param options Options for HtmlSanitizer\n */\n function HtmlSanitizer(options) {\n options = options || {};\n this.elementCallbacks = (0, cloneObject_1.cloneObject)(options.elementCallbacks);\n this.styleCallbacks = (0, getAllowedValues_1.getStyleCallbacks)(options.cssStyleCallbacks);\n this.attributeCallbacks = (0, cloneObject_1.cloneObject)(options.attributeCallbacks);\n this.tagReplacements = (0, getAllowedValues_1.getTagReplacement)(options.additionalTagReplacements);\n this.allowedAttributes = (0, getAllowedValues_1.getAllowedAttributes)(options.additionalAllowedAttributes);\n this.allowedCssClassesRegex = (0, getAllowedValues_1.getAllowedCssClassesRegex)(options.additionalAllowedCssClasses);\n this.defaultStyleValues = (0, getAllowedValues_1.getDefaultStyleValues)(options.additionalDefaultStyleValues);\n this.additionalPredefinedCssForElement = options.additionalPredefinedCssForElement || null;\n this.additionalGlobalStyleNodes = options.additionalGlobalStyleNodes || [];\n this.preserveHtmlComments = options.preserveHtmlComments || false;\n this.unknownTagReplacement = options.unknownTagReplacement || null;\n }\n /**\n * @deprecated Use new HtmlSanitizer().convertGlobalCssToInlineCss() instead\n * Convert global CSS to inline CSS if any\n * @param html HTML source\n * @param additionalStyleNodes (Optional) additional HTML STYLE elements used as global CSS\n */\n HtmlSanitizer.convertInlineCss = function (html, additionalStyleNodes) {\n var sanitizer = new HtmlSanitizer({\n additionalGlobalStyleNodes: additionalStyleNodes,\n });\n return sanitizer.exec(html, true /*convertCssOnly*/);\n };\n /**\n * @deprecated Use new HtmlSanitizer().sanitize() instead\n * Sanitize HTML string, remove any unused HTML node/attribute/CSS.\n * @param html HTML source string\n * @param options Options used for this sanitizing process\n */\n HtmlSanitizer.sanitizeHtml = function (html, options) {\n options = options || {};\n var sanitizer = new HtmlSanitizer(options);\n var currentStyles = (0, safeInstanceOf_1.default)(options.currentElementOrStyle, 'HTMLElement')\n ? (0, getInheritableStyles_1.default)(options.currentElementOrStyle)\n : options.currentElementOrStyle;\n return sanitizer.exec(html, options.convertCssOnly, currentStyles);\n };\n /**\n * @deprecated Use HtmlSanitizer.convertGlobalCssToInlineCss() and HtmlSanitizer.sanitize() instead\n * Sanitize HTML string\n * This function will do the following work:\n * 1. Convert global CSS into inline CSS\n * 2. Remove dangerous HTML tags and attributes\n * 3. Remove useless CSS properties\n * @param html The input HTML\n * @param convertInlineCssOnly Whether only convert inline css and skip html content sanitizing\n * @param currentStyles Current inheritable CSS styles\n */\n HtmlSanitizer.prototype.exec = function (html, convertCssOnly, currentStyles) {\n var parser = new DOMParser();\n var doc = parser.parseFromString(html || '', 'text/html');\n if (doc && doc.body && doc.body.firstChild) {\n this.convertGlobalCssToInlineCss(doc);\n if (!convertCssOnly) {\n this.sanitize(doc.body, currentStyles);\n }\n }\n return (doc && doc.body && doc.body.innerHTML) || '';\n };\n /**\n * Sanitize an HTML element, remove unnecessary or dangerous elements/attribute/CSS rules\n * @param rootNode Root node to sanitize\n * @param currentStyles Current CSS styles. Inheritable styles in the given node which has\n * the same value with current styles will be ignored.\n */\n HtmlSanitizer.prototype.sanitize = function (rootNode, currentStyles) {\n if (!rootNode) {\n return '';\n }\n currentStyles = (0, cloneObject_1.cloneObject)(currentStyles, (0, getInheritableStyles_1.default)(null));\n this.processNode(rootNode, currentStyles, {});\n };\n /**\n * Convert global CSS into inline CSS\n * @param rootNode The HTML Document\n */\n HtmlSanitizer.prototype.convertGlobalCssToInlineCss = function (rootNode) {\n var styleNodes = (0, toArray_1.default)(rootNode.querySelectorAll('style'));\n var styleSheets = this.additionalGlobalStyleNodes\n .reverse()\n .map(function (node) { return node.sheet; })\n .concat(styleNodes.map(function (node) { return node.sheet; }).reverse())\n .filter(function (sheet) { return sheet; });\n for (var _i = 0, styleSheets_1 = styleSheets; _i < styleSheets_1.length; _i++) {\n var styleSheet = styleSheets_1[_i];\n var _loop_1 = function (j) {\n // Skip any none-style rule, i.e. @page\n var styleRule = styleSheet.cssRules[j];\n var text = styleRule && styleRule.style ? styleRule.style.cssText : null;\n if (styleRule.type != CSSRule.STYLE_RULE || !text || !styleRule.selectorText) {\n return \"continue\";\n }\n // Make sure the selector is not empty\n for (var _a = 0, _b = styleRule.selectorText.split(','); _a < _b.length; _a++) {\n var selector = _b[_a];\n if (!selector || !selector.trim() || selector.indexOf(':') >= 0) {\n continue;\n }\n var nodes = (0, toArray_1.default)(rootNode.querySelectorAll(selector));\n // Always put existing styles after so that they have higher priority\n // Which means if both global style and inline style apply to the same element,\n // inline style will have higher priority\n nodes.forEach(function (node) {\n return node.setAttribute('style', text + (node.getAttribute('style') || ''));\n });\n }\n };\n for (var j = styleSheet.cssRules.length - 1; j >= 0; j--) {\n _loop_1(j);\n }\n }\n styleNodes.forEach(function (node) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n });\n };\n HtmlSanitizer.prototype.processNode = function (node, currentStyle, context) {\n var _a;\n var nodeType = node.nodeType;\n var isElement = nodeType == 1 /* Element */;\n var isText = nodeType == 3 /* Text */;\n var isFragment = nodeType == 11 /* DocumentFragment */;\n var isComment = nodeType == 8 /* Comment */;\n var shouldKeep = false;\n if (isElement) {\n var tag = (0, getTagOfNode_1.default)(node);\n var callback = this.elementCallbacks[tag];\n var replacement = this.tagReplacements[tag.toLowerCase()];\n if (replacement === undefined) {\n replacement = this.unknownTagReplacement;\n }\n if (callback) {\n shouldKeep = callback(node, context);\n }\n else if (tag.indexOf(':') > 0) {\n shouldKeep = true;\n }\n else if (tag == replacement || replacement == '*') {\n shouldKeep = true;\n }\n else if (replacement && /^[a-zA-Z][\\w\\-]*$/.test(replacement)) {\n node = (0, changeElementTag_1.default)(node, replacement);\n shouldKeep = true;\n }\n }\n else if (isText) {\n var whiteSpace = currentStyle['white-space'];\n shouldKeep =\n whiteSpace == 'pre' ||\n whiteSpace == 'pre-line' ||\n whiteSpace == 'pre-wrap' ||\n !/^[\\r\\n]*$/g.test(node.nodeValue || '');\n }\n else if (isFragment) {\n shouldKeep = true;\n }\n else if (isComment) {\n shouldKeep = this.preserveHtmlComments;\n }\n else {\n shouldKeep = false;\n }\n if (!shouldKeep) {\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(node);\n }\n else if (isText &&\n (currentStyle['white-space'] == 'pre' || currentStyle['white-space'] == 'pre-wrap')) {\n node.nodeValue = (node.nodeValue || '')\n .replace(/^ /gm, '\\u00A0')\n .replace(/ {2}/g, ' \\u00A0');\n }\n else if (isElement || isFragment) {\n var thisStyle = (0, cloneObject_1.cloneObject)(currentStyle);\n var element = node;\n if (isElement) {\n this.processAttributes(element, context);\n this.preprocessCss(element, thisStyle);\n this.processCss(element, thisStyle, context);\n }\n var child = element.firstChild;\n var next = void 0;\n for (; child; child = next) {\n next = child.nextSibling;\n this.processNode(child, thisStyle, context);\n }\n }\n };\n HtmlSanitizer.prototype.preprocessCss = function (element, thisStyle) {\n var predefinedStyles = (0, getPredefinedCssForElement_1.default)(element, this.additionalPredefinedCssForElement);\n if (predefinedStyles) {\n Object.keys(predefinedStyles).forEach(function (name) {\n thisStyle[name] = predefinedStyles[name];\n });\n }\n };\n HtmlSanitizer.prototype.processCss = function (element, thisStyle, context) {\n var _this = this;\n var styles = (0, getStyles_1.default)(element);\n Object.keys(styles).forEach(function (name) {\n var value = styles[name];\n var callback = _this.styleCallbacks[name];\n var isInheritable = thisStyle[name] != undefined;\n var keep = (!callback || callback(value, element, thisStyle, context)) &&\n value != 'inherit' &&\n value.indexOf('expression') < 0 &&\n name.substr(0, 1) != '-' &&\n _this.defaultStyleValues[name] != value &&\n ((isInheritable && value != thisStyle[name]) ||\n (!isInheritable && value != 'initial' && value != 'normal'));\n if (keep && isInheritable) {\n thisStyle[name] = value;\n }\n if (!keep) {\n delete styles[name];\n }\n });\n (0, setStyles_1.default)(element, styles);\n };\n HtmlSanitizer.prototype.processAttributes = function (element, context) {\n for (var i = element.attributes.length - 1; i >= 0; i--) {\n var attribute = element.attributes[i];\n var name_1 = attribute.name.toLowerCase().trim();\n var value = attribute.value;\n var callback = this.attributeCallbacks[name_1];\n var newValue = callback\n ? callback(value, element, context)\n : this.allowedAttributes.indexOf(name_1) >= 0 || name_1.indexOf('data-') == 0\n ? value\n : null;\n if (name_1 == 'class' && this.allowedCssClassesRegex) {\n newValue = this.processCssClass(value, newValue);\n }\n if (newValue === null ||\n newValue === undefined ||\n newValue.match(/s\\n*c\\n*r\\n*i\\n*p\\n*t\\n*:/i) // match script: with any NewLine inside. Browser will ignore those NewLine char and still treat it as script prefix\n ) {\n element.removeAttribute(name_1);\n }\n else {\n attribute.value = newValue;\n }\n }\n };\n HtmlSanitizer.prototype.processCssClass = function (originalValue, calculatedValue) {\n var _this = this;\n var originalClasses = originalValue ? originalValue.split(' ') : [];\n var calculatedClasses = calculatedValue ? calculatedValue.split(' ') : [];\n originalClasses.forEach(function (className) {\n var _a;\n if (((_a = _this.allowedCssClassesRegex) === null || _a === void 0 ? void 0 : _a.test(className)) &&\n calculatedClasses.indexOf(className) < 0) {\n calculatedClasses.push(className);\n }\n });\n return (calculatedClasses === null || calculatedClasses === void 0 ? void 0 : calculatedClasses.length) > 0 ? calculatedClasses.join(' ') : null;\n };\n return HtmlSanitizer;\n}());\nexports.default = HtmlSanitizer;\n//# sourceMappingURL=HtmlSanitizer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Replace all child nodes of the given target node to the child nodes of source node.\n * @param target Target node, all child nodes of this node will be removed if keepExistingChildren is not set to true\n * @param source (Optional) source node, all child nodes of this node will be move to target node\n * @param keepExistingChildren (Optional) When set to true, all existing child nodes of target will be kept\n */\nfunction moveChildNodes(target, source, keepExistingChildren) {\n if (!target) {\n return;\n }\n while (!keepExistingChildren && target.firstChild) {\n target.removeChild(target.firstChild);\n }\n while (source === null || source === void 0 ? void 0 : source.firstChild) {\n target.appendChild(source.firstChild);\n }\n}\nexports.default = moveChildNodes;\n//# sourceMappingURL=moveChildNodes.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar getDarkColor_1 = require(\"./utils/getDarkColor\");\nexports.getDarkColor = getDarkColor_1.default;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PluginEventType = void 0;\n/**\n * Editor plugin event type\n */\nvar PluginEventType;\n(function (PluginEventType) {\n /**\n * HTML KeyDown event\n */\n PluginEventType[PluginEventType[\"KeyDown\"] = 0] = \"KeyDown\";\n /**\n * HTML KeyPress event\n */\n PluginEventType[PluginEventType[\"KeyPress\"] = 1] = \"KeyPress\";\n /**\n * HTML KeyUp event\n */\n PluginEventType[PluginEventType[\"KeyUp\"] = 2] = \"KeyUp\";\n /**\n * HTML Input / TextInput event\n */\n PluginEventType[PluginEventType[\"Input\"] = 3] = \"Input\";\n /**\n * HTML CompositionEnd event\n */\n PluginEventType[PluginEventType[\"CompositionEnd\"] = 4] = \"CompositionEnd\";\n /**\n * HTML MouseDown event\n */\n PluginEventType[PluginEventType[\"MouseDown\"] = 5] = \"MouseDown\";\n /**\n * HTML MouseUp event\n */\n PluginEventType[PluginEventType[\"MouseUp\"] = 6] = \"MouseUp\";\n /**\n * Content changed event\n */\n PluginEventType[PluginEventType[\"ContentChanged\"] = 7] = \"ContentChanged\";\n /**\n * Extract Content with a DOM tree event\n * This event is triggered when getContent() is called with triggerExtractContentEvent = true\n * Plugin can handle this event to remove the UI only markups to return clean HTML\n * by operating on a cloned DOM tree\n */\n PluginEventType[PluginEventType[\"ExtractContentWithDom\"] = 8] = \"ExtractContentWithDom\";\n /**\n * Before Paste event, provide a chance to change copied content\n */\n PluginEventType[PluginEventType[\"BeforeCutCopy\"] = 9] = \"BeforeCutCopy\";\n /**\n * Before Paste event, provide a chance to change paste content\n */\n PluginEventType[PluginEventType[\"BeforePaste\"] = 10] = \"BeforePaste\";\n /**\n * Let plugin know editor is ready now\n */\n PluginEventType[PluginEventType[\"EditorReady\"] = 11] = \"EditorReady\";\n /**\n * Let plugin know editor is about to dispose\n */\n PluginEventType[PluginEventType[\"BeforeDispose\"] = 12] = \"BeforeDispose\";\n /**\n * Pending format state (bold, italic, underline, ... with collapsed selection) is changed\n */\n PluginEventType[PluginEventType[\"PendingFormatStateChanged\"] = 13] = \"PendingFormatStateChanged\";\n /**\n * Scroll event triggered by scroll container\n */\n PluginEventType[PluginEventType[\"Scroll\"] = 14] = \"Scroll\";\n /**\n * Operating on an entity. See enum EntityOperation for more details about each operation\n */\n PluginEventType[PluginEventType[\"EntityOperation\"] = 15] = \"EntityOperation\";\n /**\n * HTML ContextMenu event\n */\n PluginEventType[PluginEventType[\"ContextMenu\"] = 16] = \"ContextMenu\";\n /**\n * Editor has entered shadow edit mode\n */\n PluginEventType[PluginEventType[\"EnteredShadowEdit\"] = 17] = \"EnteredShadowEdit\";\n /**\n * Editor is about to leave shadow edit mode\n */\n PluginEventType[PluginEventType[\"LeavingShadowEdit\"] = 18] = \"LeavingShadowEdit\";\n /**\n * Content of image is being changed from client side\n */\n PluginEventType[PluginEventType[\"EditImage\"] = 19] = \"EditImage\";\n /**\n * Content of editor is about to be cleared by SetContent API, handle this event to cache anything you need\n * before it is gone\n */\n PluginEventType[PluginEventType[\"BeforeSetContent\"] = 20] = \"BeforeSetContent\";\n /**\n * Zoom scale value is changed, triggered by Editor.setZoomScale() when set a different scale number\n */\n PluginEventType[PluginEventType[\"ZoomChanged\"] = 21] = \"ZoomChanged\";\n})(PluginEventType = exports.PluginEventType || (exports.PluginEventType = {}));\n//# sourceMappingURL=PluginEventType.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./plugins/HyperLink/index\"), exports);\n//# sourceMappingURL=HyperLink.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar getAllFeatures_1 = require(\"./getAllFeatures\");\n/**\n * An editor plugin to handle content edit event.\n * The following cases are included:\n * 1. Auto increase/decrease indentation on Tab, Shift+tab\n * 2. Enter, Backspace on empty list item\n * 3. Enter, Backspace on empty blockquote line\n * 4. Auto bullet/numbering\n * 5. Auto link\n * 6. Tab in table\n * 7. Up/Down in table\n * 8. Manage list style\n */\nvar ContentEdit = /** @class */ (function () {\n /**\n * Create instance of ContentEdit plugin\n * @param settingsOverride An optional feature set to override default feature settings\n * @param additionalFeatures Optional. More features to add\n */\n function ContentEdit(settingsOverride, additionalFeatures) {\n this.settingsOverride = settingsOverride;\n this.additionalFeatures = additionalFeatures;\n }\n /**\n * Get a friendly name of this plugin\n */\n ContentEdit.prototype.getName = function () {\n return 'ContentEdit';\n };\n /**\n * Initialize this plugin\n * @param editor The editor instance\n */\n ContentEdit.prototype.initialize = function (editor) {\n var _this = this;\n var features = [];\n var allFeatures = (0, getAllFeatures_1.default)();\n Object.keys(allFeatures).forEach(function (key) {\n var feature = allFeatures[key];\n var hasSettingForKey = _this.settingsOverride && _this.settingsOverride[key] !== undefined;\n if ((hasSettingForKey && _this.settingsOverride[key]) ||\n (!hasSettingForKey && !feature.defaultDisabled)) {\n features.push(feature);\n }\n });\n features\n .concat(this.additionalFeatures || [])\n .forEach(function (feature) { return editor.addContentEditFeature(feature); });\n };\n /**\n * Dispose this plugin\n */\n ContentEdit.prototype.dispose = function () { };\n return ContentEdit;\n}());\nexports.default = ContentEdit;\n//# sourceMappingURL=ContentEdit.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar execCommand_1 = require(\"../utils/execCommand\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * Set content alignment\n * @param editor The editor instance\n * @param alignment The alignment option:\n * Alignment.Center, Alignment.Left, Alignment.Right\n */\nfunction setAlignment(editor, alignment) {\n var selection = editor.getSelectionRangeEx();\n var isATable = selection && selection.type === 1 /* TableSelection */;\n editor.addUndoSnapshot(function () {\n if (editor.isFeatureEnabled(\"TableAlignment\" /* TableAlignment */) &&\n isATable &&\n isWholeTableSelected(selection)) {\n alignTable(selection, alignment);\n }\n else {\n alignText(editor, alignment);\n }\n }, \"Format\" /* Format */);\n}\nexports.default = setAlignment;\n/**\n * Align text using the margins\n * @param editor\n * @param element\n * @param alignment\n * @param addUndoSnapshot\n * @returns\n */\nfunction alignTable(selection, alignment) {\n var table = selection.table;\n if (alignment == 1 /* Center */) {\n table.style.marginLeft = 'auto';\n table.style.marginRight = 'auto';\n }\n else if (alignment == 2 /* Right */) {\n table.style.marginLeft = 'auto';\n table.style.marginRight = '';\n }\n else {\n table.style.marginLeft = '';\n table.style.marginRight = 'auto';\n }\n}\n/**\n * Align text using the text-align\n * @param editor\n * @param alignment\n * @returns\n */\nfunction alignText(editor, alignment) {\n var align = 'left';\n var command = \"justifyLeft\" /* JustifyLeft */;\n if (alignment == 1 /* Center */) {\n command = \"justifyCenter\" /* JustifyCenter */;\n align = 'center';\n }\n else if (alignment == 2 /* Right */) {\n command = \"justifyRight\" /* JustifyRight */;\n align = 'right';\n }\n (0, execCommand_1.default)(editor, command);\n editor.queryElements('[align]', 1 /* OnSelection */, function (node) { return (node.style.textAlign = align); });\n}\n/**\n * Check if the whole table is selected\n * @param selection\n * @returns\n */\nfunction isWholeTableSelected(selection) {\n if (!selection) {\n return false;\n }\n var vTable = new roosterjs_editor_dom_1.VTable(selection.table);\n var _a = selection.coordinates, firstCell = _a.firstCell, lastCell = _a.lastCell;\n var rowsLength = vTable.cells.length - 1;\n var colIndex = vTable.cells[rowsLength].length - 1;\n var firstX = firstCell.x;\n var firstY = firstCell.y;\n var lastX = lastCell.x;\n var lastY = lastCell.y;\n return firstX == 0 && firstY == 0 && lastX == colIndex && lastY == rowsLength;\n}\n//# sourceMappingURL=setAlignment.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * Edit Component helps handle Content edit features\n */\nvar EditPlugin = /** @class */ (function () {\n /**\n * Construct a new instance of EditPlugin\n * @param options The editor options\n */\n function EditPlugin() {\n this.state = {\n features: {},\n };\n }\n /**\n * Get a friendly name of this plugin\n */\n EditPlugin.prototype.getName = function () {\n return 'Edit';\n };\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n EditPlugin.prototype.initialize = function (editor) {\n this.editor = editor;\n };\n /**\n * Dispose this plugin\n */\n EditPlugin.prototype.dispose = function () {\n this.editor = null;\n };\n /**\n * Get plugin state object\n */\n EditPlugin.prototype.getState = function () {\n return this.state;\n };\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n EditPlugin.prototype.onPluginEvent = function (event) {\n var hasFunctionKey = false;\n var features;\n var ctrlOrMeta = false;\n if (event.eventType == 0 /* KeyDown */) {\n var rawEvent = event.rawEvent;\n var range = this.editor.getSelectionRange();\n ctrlOrMeta = (0, roosterjs_editor_dom_1.isCtrlOrMetaPressed)(rawEvent);\n hasFunctionKey = ctrlOrMeta || rawEvent.altKey;\n features =\n this.state.features[rawEvent.which] ||\n (range && !range.collapsed && this.state.features[258 /* RANGE */]);\n }\n else if (event.eventType == 7 /* ContentChanged */) {\n features = this.state.features[257 /* CONTENTCHANGED */];\n }\n for (var i = 0; i < (features === null || features === void 0 ? void 0 : features.length); i++) {\n var feature = features[i];\n if ((feature.allowFunctionKeys || !hasFunctionKey) &&\n feature.shouldHandleEvent(event, this.editor, ctrlOrMeta)) {\n feature.handleEvent(event, this.editor);\n break;\n }\n }\n };\n return EditPlugin;\n}());\nexports.default = EditPlugin;\n//# sourceMappingURL=EditPlugin.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar CONTENT_EDITABLE = 'contenteditable';\n/**\n * Commit information of an entity (type, isReadonly, id) into the wrapper node as CSS Classes\n * @param wrapper The entity wrapper element\n * @param type Entity type\n * @param isReadonly Whether this is a readonly entity\n * @param id Optional Id of the entity\n */\nfunction commitEntity(wrapper, type, isReadonly, id) {\n if (wrapper) {\n wrapper.className = \"_Entity\" /* ENTITY_INFO_NAME */ + \" \" + \"_EType_\" /* ENTITY_TYPE_PREFIX */ + type + \" \" + (id ? \"\" + \"_EId_\" /* ENTITY_ID_PREFIX */ + id + \" \" : '') + \"_EReadonly_\" /* ENTITY_READONLY_PREFIX */ + (isReadonly ? '1' : '0');\n if (isReadonly) {\n wrapper.contentEditable = 'false';\n }\n else if (wrapper.getAttribute(CONTENT_EDITABLE)) {\n wrapper.removeAttribute(CONTENT_EDITABLE);\n }\n }\n}\nexports.default = commitEntity;\n//# sourceMappingURL=commitEntity.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./plugins/CustomReplace/index\"), exports);\n//# sourceMappingURL=CustomReplace.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getAllFeatures = exports.ContentEdit = void 0;\nvar ContentEdit_1 = require(\"./ContentEdit\");\nObject.defineProperty(exports, \"ContentEdit\", { enumerable: true, get: function () { return ContentEdit_1.default; } });\nvar getAllFeatures_1 = require(\"./getAllFeatures\");\nObject.defineProperty(exports, \"getAllFeatures\", { enumerable: true, get: function () { return getAllFeatures_1.default; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(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))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar changeElementTag_1 = require(\"../utils/changeElementTag\");\nvar contains_1 = require(\"../utils/contains\");\nvar getBlockElementAtNode_1 = require(\"../blockElements/getBlockElementAtNode\");\nvar getPredefinedCssForElement_1 = require(\"../htmlSanitizer/getPredefinedCssForElement\");\nvar getStyles_1 = require(\"../style/getStyles\");\nvar isNodeInRegion_1 = require(\"./isNodeInRegion\");\nvar safeInstanceOf_1 = require(\"../utils/safeInstanceOf\");\nvar setStyles_1 = require(\"../style/setStyles\");\nvar collapseNodes_1 = require(\"../utils/collapseNodes\");\n/**\n * Merge a BlockElement of given node after another node\n * @param region Region to operate in\n * @param refNode The node to merge after\n * @param targetNode The node of target block element\n */\nfunction mergeBlocksInRegion(region, refNode, targetNode) {\n var _a, _b;\n var block;\n if (!(0, isNodeInRegion_1.default)(region, refNode) ||\n !(0, isNodeInRegion_1.default)(region, targetNode) ||\n !(block = (0, getBlockElementAtNode_1.default)(region.rootNode, targetNode)) ||\n block.contains(refNode)) {\n return;\n }\n var blockRoot = block.collapseToSingleElement();\n var commonContainer = (0, collapseNodes_1.collapse)(region.rootNode, blockRoot, refNode, false /*isStart*/, true /*canSplitParent*/);\n // Copy styles of parent nodes into blockRoot\n for (var node = blockRoot; (0, contains_1.default)(commonContainer, node);) {\n var parent_1 = node.parentNode;\n if ((0, safeInstanceOf_1.default)(parent_1, 'HTMLElement')) {\n var styles = __assign(__assign(__assign({}, ((0, getPredefinedCssForElement_1.default)(parent_1) || {})), (0, getStyles_1.default)(parent_1)), (0, getStyles_1.default)(blockRoot));\n (0, setStyles_1.default)(blockRoot, styles);\n }\n node = parent_1;\n }\n var nodeToRemove = null;\n var nodeToMerge = blockRoot.childNodes.length == 1 && blockRoot.attributes.length == 0\n ? blockRoot.firstChild\n : (0, changeElementTag_1.default)(blockRoot, 'SPAN');\n // Remove empty node\n for (var node = nodeToMerge; (0, contains_1.default)(commonContainer, node) && node.parentNode.childNodes.length == 1; node = node.parentNode) {\n // If the only child is the one which is about to be removed, this node should also be removed\n nodeToRemove = node.parentNode;\n }\n // Finally, merge blocks, and remove empty nodes\n (_a = refNode.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(nodeToMerge, refNode.nextSibling);\n (_b = nodeToRemove === null || nodeToRemove === void 0 ? void 0 : nodeToRemove.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(nodeToRemove);\n}\nexports.default = mergeBlocksInRegion;\n//# sourceMappingURL=mergeBlocksInRegion.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getLastInlineElement = exports.getFirstInlineElement = void 0;\nvar getInlineElementAtNode_1 = require(\"./getInlineElementAtNode\");\nvar getLeafNode_1 = require(\"../utils/getLeafNode\");\n/**\n * @internal\n * Get the first inline element inside the given node\n */\nfunction getFirstInlineElement(rootNode) {\n // getFirstLeafNode can return null for empty container\n // do check null before passing on to get inline from the node\n var node = (0, getLeafNode_1.getFirstLeafNode)(rootNode);\n return node ? (0, getInlineElementAtNode_1.default)(rootNode, node) : null;\n}\nexports.getFirstInlineElement = getFirstInlineElement;\n/**\n * @internal\n * Get the last inline element inside the given node\n */\nfunction getLastInlineElement(rootNode) {\n // getLastLeafNode can return null for empty container\n // do check null before passing on to get inline from the node\n var node = (0, getLeafNode_1.getLastLeafNode)(rootNode);\n return node ? (0, getInlineElementAtNode_1.default)(rootNode, node) : null;\n}\nexports.getLastInlineElement = getLastInlineElement;\n//# sourceMappingURL=getFirstLastInlineElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar execCommand_1 = require(\"../utils/execCommand\");\n/**\n * Toggle superscript at selection\n * If selection is collapsed, it will only affect the input after caret\n * If selection contains only superscript text, the superscript style will be removed\n * If selection contains only normal text, superscript style will be added to the whole selected text\n * If selection contains both superscript and normal text, the superscript style will be removed from whole selected text\n * If selection contains any subscript text, the behavior is determined by corresponding realization of browser\n * execCommand API\n * @param editor The editor instance\n */\nfunction toggleSuperscript(editor) {\n (0, execCommand_1.default)(editor, \"superscript\" /* Superscript */);\n}\nexports.default = toggleSuperscript;\n//# sourceMappingURL=toggleSuperscript.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.selectTable = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar TABLE_ID = 'tableSelected';\nvar CONTENT_DIV_ID = 'contentDiv_';\nvar STYLE_ID = 'tableStyle';\n/**\n * @internal\n * Select a table and save data of the selected range\n * @param core The EditorCore object\n * @param table table to select\n * @param coordinates first and last cell of the selection, if this parameter is null, instead of\n * selecting, will unselect the table.\n * @returns true if successful\n */\nvar selectTable = function (core, table, coordinates) {\n unselect(core);\n if (coordinates && table) {\n ensureUniqueId(table, TABLE_ID);\n ensureUniqueId(core.contentDiv, CONTENT_DIV_ID);\n var ranges = select(core, table, coordinates);\n core.api.selectRange(core, (0, roosterjs_editor_dom_1.createRange)(new roosterjs_editor_dom_1.Position(table.rows.item(coordinates.firstCell.y).cells.item(coordinates.firstCell.x), 0 /* Begin */)));\n return {\n type: 1 /* TableSelection */,\n ranges: ranges,\n table: table,\n areAllCollapsed: ranges.filter(function (range) { return range === null || range === void 0 ? void 0 : range.collapsed; }).length == ranges.length,\n coordinates: coordinates,\n };\n }\n return null;\n};\nexports.selectTable = selectTable;\nfunction buildCss(table, coordinates, contentDivSelector) {\n var tr1 = coordinates.firstCell.y;\n var td1 = coordinates.firstCell.x;\n var tr2 = coordinates.lastCell.y;\n var td2 = coordinates.lastCell.x;\n var ranges = [];\n var firstSelected = null;\n var lastSelected = null;\n var css = '';\n var isFirst = true;\n var vTable = new roosterjs_editor_dom_1.VTable(table);\n // Get whether table has thead, tbody or tfoot.\n var tableChildren = (0, roosterjs_editor_dom_1.toArray)(table.childNodes).filter(function (node) { return ['THEAD', 'TBODY', 'TFOOT'].indexOf((0, roosterjs_editor_dom_1.getTagOfNode)(node)) > -1; });\n // Set the start and end of each of the table childs, so we can build the selector according the element between the table and the row.\n var cont = 0;\n var indexes = tableChildren.map(function (node) {\n var result = {\n el: (0, roosterjs_editor_dom_1.getTagOfNode)(node),\n start: cont,\n end: node.childNodes.length + cont,\n };\n cont = result.end;\n return result;\n });\n vTable.cells.forEach(function (row, rowIndex) {\n var tdCount = 0;\n var thCount = 0;\n firstSelected = null;\n lastSelected = null;\n //Get current TBODY/THEAD/TFOOT\n var midElement = indexes.filter(function (ind) { return ind.start <= rowIndex && ind.end > rowIndex; })[0];\n var middleElSelector = midElement ? '>' + midElement.el + '>' : '>';\n var currentRow = midElement && rowIndex + 1 >= midElement.start\n ? rowIndex + 1 - midElement.start\n : rowIndex + 1;\n for (var cellIndex = 0; cellIndex < row.length; cellIndex++) {\n if (row[cellIndex].td) {\n var tag = (0, roosterjs_editor_dom_1.getTagOfNode)(row[cellIndex].td);\n if (tag == 'TD') {\n tdCount++;\n }\n if (tag == 'TH') {\n thCount++;\n }\n if (rowIndex >= tr1 && rowIndex <= tr2 && cellIndex >= td1 && cellIndex <= td2) {\n if (isFirst) {\n isFirst = false;\n }\n else if (!css.endsWith(',')) {\n css += ',';\n }\n removeImportant(row[cellIndex].td);\n var selector = generateCssFromCell(contentDivSelector, table.id, middleElSelector, currentRow, tag, tag == 'TD' ? tdCount : thCount);\n css += selector;\n firstSelected = firstSelected || table.querySelector(selector);\n lastSelected = table.querySelector(selector);\n }\n }\n }\n if (firstSelected && lastSelected) {\n var rowRange = new Range();\n rowRange.setStartBefore(firstSelected);\n rowRange.setEndAfter(lastSelected);\n ranges.push(rowRange);\n }\n });\n css += '{background-color: rgba(198,198,198,0.7) !important;}';\n return { css: css, ranges: ranges };\n}\nfunction select(core, table, coordinates) {\n var doc = core.contentDiv.ownerDocument;\n var contentDivSelector = '#' + core.contentDiv.id;\n var _a = buildCss(table, coordinates, contentDivSelector), css = _a.css, ranges = _a.ranges;\n var styleElement = doc.getElementById(STYLE_ID + core.contentDiv.id);\n if (!styleElement) {\n styleElement = doc.createElement('style');\n doc.head.appendChild(styleElement);\n styleElement.id = STYLE_ID + core.contentDiv.id;\n }\n styleElement.sheet.insertRule(css);\n return ranges;\n}\nfunction unselect(core) {\n var _a;\n var div = core.contentDiv;\n var styleElement = div.ownerDocument.getElementById(STYLE_ID + div.id);\n if ((_a = styleElement === null || styleElement === void 0 ? void 0 : styleElement.sheet) === null || _a === void 0 ? void 0 : _a.cssRules) {\n while (styleElement.sheet.cssRules.length > 0) {\n styleElement.sheet.deleteRule(0);\n }\n }\n}\nfunction ensureUniqueId(el, idPrefix) {\n if (el && !el.id) {\n var doc = el.ownerDocument;\n var getElement = function (doc) { return doc.getElementById(idPrefix + cont_1); };\n var cont_1 = 0;\n //Ensure that there are no elements with the same ID\n var element = getElement(doc);\n while (element) {\n element = getElement(doc);\n cont_1++;\n }\n el.id = idPrefix + cont_1;\n }\n}\nfunction generateCssFromCell(contentDivSelector, tableId, middleElSelector, rowIndex, cellTag, index) {\n return (contentDivSelector +\n ' #' +\n tableId +\n middleElSelector +\n ' tr:nth-child(' +\n rowIndex +\n ')>' +\n cellTag +\n ':nth-child(' +\n index +\n ')');\n}\nfunction removeImportant(cell) {\n if (cell) {\n var styles_1 = (0, roosterjs_editor_dom_1.getStyles)(cell);\n var modifiedStyles_1 = 0;\n ['background-color', 'background'].forEach(function (style) {\n var _a;\n if (((_a = styles_1[style]) === null || _a === void 0 ? void 0 : _a.indexOf('!important')) > -1) {\n var index = styles_1[style].indexOf('!');\n styles_1[style] = styles_1[style].substring(0, index);\n modifiedStyles_1++;\n }\n });\n if (modifiedStyles_1 > 0) {\n (0, roosterjs_editor_dom_1.setStyles)(cell, styles_1);\n }\n }\n}\n//# sourceMappingURL=selectTable.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar applyChange_1 = require(\"../editInfoUtils/applyChange\");\nvar getTargetSizeByPercentage_1 = require(\"../editInfoUtils/getTargetSizeByPercentage\");\nvar isResizedTo_1 = require(\"./isResizedTo\");\nvar editInfo_1 = require(\"../editInfoUtils/editInfo\");\n/**\n * Resize the image by percentage of its natural size. If the image is cropped or rotated,\n * the final size will also calculated with crop and rotate info.\n * @param editor The editor that contains the image\n * @param image The image to resize\n * @param percentage Percentage to resize to\n * @param minWidth Minimum width\n * @param minHeight Minimum height\n */\nfunction resizeByPercentage(editor, image, percentage, minWidth, minHeight) {\n var editInfo = (0, editInfo_1.getEditInfoFromImage)(image);\n if (!(0, isResizedTo_1.default)(image, percentage)) {\n loadImage(image, editInfo.src, function () {\n if (!editor.isDisposed() && editor.contains(image)) {\n var lastSrc_1 = image.getAttribute('src');\n var _a = (0, getTargetSizeByPercentage_1.default)(editInfo, percentage), width = _a.width, height = _a.height;\n editInfo.widthPx = Math.max(width, minWidth);\n editInfo.heightPx = Math.max(height, minHeight);\n editor.addUndoSnapshot(function () {\n (0, applyChange_1.default)(editor, image, editInfo, lastSrc_1, true /*wasResized*/);\n }, \"ImageResize\" /* ImageResize */);\n }\n });\n }\n}\nexports.default = resizeByPercentage;\nfunction loadImage(img, src, callback) {\n img.onload = function () {\n img.onload = null;\n img.onerror = null;\n callback();\n };\n img.onerror = function () {\n img.onload = null;\n img.onerror = null;\n callback();\n };\n img.src = src;\n}\n//# sourceMappingURL=resizeByPercentage.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splitBalancedNodeRange = void 0;\nvar isNodeAfter_1 = require(\"./isNodeAfter\");\n/**\n * Split parent node of the given node before/after the given node.\n * When a parent node contains [A,B,C] and pass B as the given node,\n * If split before, the new nodes will be [A][B,C] and returns [A];\n * otherwise, it will be [A,B][C] and returns [C].\n * @param node The node to split before/after\n * @param splitBefore Whether split before or after\n * @param removeEmptyNewNode If the new node is empty (even then only child is space or ZER_WIDTH_SPACE),\n * we remove it. @default false\n * @returns The new parent node\n */\nfunction splitParentNode(node, splitBefore) {\n var _a;\n if (!node || !node.parentNode) {\n return null;\n }\n var parentNode = node.parentNode;\n var newParent = parentNode.cloneNode(false /*deep*/);\n newParent.removeAttribute('id');\n if (splitBefore) {\n while (parentNode.firstChild && parentNode.firstChild != node) {\n newParent.appendChild(parentNode.firstChild);\n }\n }\n else {\n while (node.nextSibling) {\n newParent.appendChild(node.nextSibling);\n }\n }\n // When the only child of new parent is ZERO_WIDTH_SPACE, we can still prevent keeping it by set removeEmptyNewNode to true\n if (newParent.firstChild && newParent.innerHTML != '') {\n (_a = parentNode.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(newParent, splitBefore ? parentNode : parentNode.nextSibling);\n }\n else {\n newParent = null;\n }\n return newParent;\n}\nexports.default = splitParentNode;\n/**\n * Split parent node by a balanced node range\n * @param nodes The nodes to split from. If only one node is passed, split it from all its siblings.\n * If two or nodes are passed, will split before the first one and after the last one, all other nodes will be ignored\n * @returns The parent node of the given node range if the given nodes are balanced, otherwise null\n */\nfunction splitBalancedNodeRange(nodes) {\n var start = Array.isArray(nodes) ? nodes[0] : nodes;\n var end = Array.isArray(nodes) ? nodes[nodes.length - 1] : nodes;\n var parentNode = start && end && start.parentNode == end.parentNode ? start.parentNode : null;\n if (parentNode) {\n if ((0, isNodeAfter_1.default)(start, end)) {\n var temp = end;\n end = start;\n start = temp;\n }\n splitParentNode(start, true /*splitBefore*/);\n splitParentNode(end, false /*splitBefore*/);\n }\n return parentNode;\n}\nexports.splitBalancedNodeRange = splitBalancedNodeRange;\n//# sourceMappingURL=splitParentNode.js.map","\"use strict\";\n\nexports.__esModule = true;\nexports.default = getStorage;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction noop() {}\n\nvar noopStorage = {\n getItem: noop,\n setItem: noop,\n removeItem: noop\n};\n\nfunction hasStorage(storageType) {\n if ((typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) !== 'object' || !(storageType in self)) {\n return false;\n }\n\n try {\n var storage = self[storageType];\n var testKey = \"redux-persist \".concat(storageType, \" test\");\n storage.setItem(testKey, 'test');\n storage.getItem(testKey);\n storage.removeItem(testKey);\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') console.warn(\"redux-persist \".concat(storageType, \" test failed, persistence will be disabled.\"));\n return false;\n }\n\n return true;\n}\n\nfunction getStorage(type) {\n var storageType = \"\".concat(type, \"Storage\");\n if (hasStorage(storageType)) return self[storageType];else {\n if (process.env.NODE_ENV !== 'production') {\n console.error(\"redux-persist failed to create sync storage. falling back to noop storage.\");\n }\n\n return noopStorage;\n }\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar wordConverter_1 = require(\"./wordConverter\");\nvar WordConverterArguments_1 = require(\"./WordConverterArguments\");\nvar converterUtils_1 = require(\"./converterUtils\");\n/**\n * @internal\n * Converts all the Word generated list items in the specified node into standard HTML UL and OL tags\n */\nfunction convertPastedContentFromWord(event) {\n var sanitizingOption = event.sanitizingOption, fragment = event.fragment;\n // Preserve when its innerHTML is \" \" to avoid dropping an empty line\n (0, roosterjs_editor_dom_1.chainSanitizerCallback)(sanitizingOption.elementCallbacks, 'O:P', function (element) {\n (0, roosterjs_editor_dom_1.moveChildNodes)(element);\n element.appendChild(element.ownerDocument.createTextNode('\\u00A0')); //  \n return true;\n });\n var wordConverter = (0, wordConverter_1.createWordConverter)();\n // First find all the nodes that we need to check for list item information\n // This call will return all the p and header elements under the root node.. These are the elements that\n // Word uses a list items, so we'll only process them and avoid walking the whole tree.\n var elements = fragment.querySelectorAll('p');\n if (elements.length > 0) {\n wordConverter.wordConverterArgs = (0, WordConverterArguments_1.createWordConverterArguments)(elements);\n if ((0, converterUtils_1.processNodesDiscovery)(wordConverter)) {\n (0, converterUtils_1.processNodeConvert)(wordConverter);\n }\n }\n}\nexports.default = convertPastedContentFromWord;\n//# sourceMappingURL=convertPastedContentFromWord.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPluginState = void 0;\nvar CopyPastePlugin_1 = require(\"./CopyPastePlugin\");\nvar DOMEventPlugin_1 = require(\"./DOMEventPlugin\");\nvar EditPlugin_1 = require(\"./EditPlugin\");\nvar EntityPlugin_1 = require(\"./EntityPlugin\");\nvar LifecyclePlugin_1 = require(\"./LifecyclePlugin\");\nvar MouseUpPlugin_1 = require(\"./MouseUpPlugin\");\nvar PendingFormatStatePlugin_1 = require(\"./PendingFormatStatePlugin\");\nvar TypeInContainerPlugin_1 = require(\"./TypeInContainerPlugin\");\nvar UndoPlugin_1 = require(\"./UndoPlugin\");\n/**\n * @internal\n * Create Core Plugins\n * @param contentDiv Content DIV of editor\n * @param options Editor options\n */\nfunction createCorePlugins(contentDiv, options) {\n var map = options.corePluginOverride || {};\n // The order matters, some plugin needs to be put before/after others to make sure event\n // can be handled in right order\n return {\n typeInContainer: map.typeInContainer || new TypeInContainerPlugin_1.default(),\n edit: map.edit || new EditPlugin_1.default(),\n pendingFormatState: map.pendingFormatState || new PendingFormatStatePlugin_1.default(),\n _placeholder: null,\n typeAfterLink: null,\n undo: map.undo || new UndoPlugin_1.default(options),\n domEvent: map.domEvent || new DOMEventPlugin_1.default(options, contentDiv),\n mouseUp: map.mouseUp || new MouseUpPlugin_1.default(),\n copyPaste: map.copyPaste || new CopyPastePlugin_1.default(options),\n entity: map.entity || new EntityPlugin_1.default(),\n lifecycle: map.lifecycle || new LifecyclePlugin_1.default(options, contentDiv),\n };\n}\nexports.default = createCorePlugins;\n/**\n * @internal\n * Get plugin state of core plugins\n * @param corePlugins CorePlugins object\n */\nfunction getPluginState(corePlugins) {\n return {\n domEvent: corePlugins.domEvent.getState(),\n pendingFormatState: corePlugins.pendingFormatState.getState(),\n edit: corePlugins.edit.getState(),\n lifecycle: corePlugins.lifecycle.getState(),\n undo: corePlugins.undo.getState(),\n entity: corePlugins.entity.getState(),\n copyPaste: corePlugins.copyPaste.getState(),\n };\n}\nexports.getPluginState = getPluginState;\n//# sourceMappingURL=createCorePlugins.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DarkModeDatasetNames = void 0;\n/**\n * Constants string for dataset names used by dark mode\n */\nvar DarkModeDatasetNames;\n(function (DarkModeDatasetNames) {\n /**\n * Original style text color\n */\n DarkModeDatasetNames[\"OriginalStyleColor\"] = \"ogsc\";\n /**\n * Original style background color\n */\n DarkModeDatasetNames[\"OriginalStyleBackgroundColor\"] = \"ogsb\";\n /**\n * Original attribute text color\n */\n DarkModeDatasetNames[\"OriginalAttributeColor\"] = \"ogac\";\n /**\n * Original attribute background color\n */\n DarkModeDatasetNames[\"OriginalAttributeBackgroundColor\"] = \"ogab\";\n})(DarkModeDatasetNames = exports.DarkModeDatasetNames || (exports.DarkModeDatasetNames = {}));\n//# sourceMappingURL=DarkModeDatasetNames.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Set styles to an HTML element. If styles are empty, remove 'style' attribute\n * @param element The element to set styles\n * @param styles The styles to set, in name-value pair format\n */\nfunction setStyles(element, styles) {\n if (element) {\n var style = Object.keys(styles || {})\n .map(function (name) {\n var value = styles[name];\n var trimmedName = name ? name.trim() : null;\n var trimmedValue = value ? value.trim() : null;\n return trimmedName && trimmedValue ? trimmedName + \":\" + trimmedValue : null;\n })\n .filter(function (x) { return x; })\n .join(';');\n if (style) {\n element.setAttribute('style', style);\n }\n else {\n element.removeAttribute('style');\n }\n }\n}\nexports.default = setStyles;\n//# sourceMappingURL=setStyles.js.map","\"use strict\";\nvar __spreadArray = (this && this.__spreadArray) || function (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};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar contains_1 = require(\"../utils/contains\");\nvar getListTypeFromNode_1 = require(\"./getListTypeFromNode\");\nvar getTagOfNode_1 = require(\"../utils/getTagOfNode\");\nvar isBlockElement_1 = require(\"../utils/isBlockElement\");\nvar moveChildNodes_1 = require(\"../utils/moveChildNodes\");\nvar safeInstanceOf_1 = require(\"../utils/safeInstanceOf\");\nvar setListItemStyle_1 = require(\"./setListItemStyle\");\nvar toArray_1 = require(\"../utils/toArray\");\nvar unwrap_1 = require(\"../utils/unwrap\");\nvar wrap_1 = require(\"../utils/wrap\");\nvar orderListStyles = [null, 'lower-alpha', 'lower-roman'];\n/**\n * !!! Never directly create instance of this class. It should be created within VList class !!!\n *\n * Represent a list item.\n *\n * A list item is normally wrapped using a LI tag. But this class is only a logical item,\n * it can be a LI tag, or another other type of node which means it is actually not a list item.\n * That can happen after we do \"outdent\" on a 1-level list item, then it becomes not a list item.\n */\nvar VListItem = /** @class */ (function () {\n /**\n * Construct a new instance of VListItem class\n * @param node The DOM node for this item\n * @param listTypes An array represents list types of all parent and current level.\n * Skip this parameter for a non-list item.\n */\n function VListItem(node) {\n var listTypes = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n listTypes[_i - 1] = arguments[_i];\n }\n this.newListStart = undefined;\n if (!node) {\n throw new Error('node must not be null');\n }\n this.node = (0, safeInstanceOf_1.default)(node, 'HTMLLIElement')\n ? node\n : (0, wrap_1.default)(node, 4 /* BlockListItem */);\n var display = this.node.style.display;\n this.dummy = display != 'list-item' && display != '';\n // Always add a None list type in front of all other types to represent non-list scenario.\n this.listTypes = __spreadArray([0 /* None */], listTypes, true);\n }\n /**\n * Get type of current list item\n */\n VListItem.prototype.getListType = function () {\n return this.listTypes[this.listTypes.length - 1];\n };\n /**\n * Get the levels of this list item.\n */\n VListItem.prototype.getLevel = function () {\n return this.listTypes.length - 1;\n };\n /**\n * Get DOM node of this list item\n */\n VListItem.prototype.getNode = function () {\n return this.node;\n };\n /**\n * Get the Start Number of the new List\n */\n VListItem.prototype.getNewListStart = function () {\n return this.newListStart;\n };\n /**\n * Check if a given node is contained by this list item\n * @param node The node to check\n */\n VListItem.prototype.contains = function (node) {\n return (0, contains_1.default)(this.node, node, true /*treatSameNodeAsContain*/);\n };\n /**\n * Check if this item is a dummy item.\n * A dummy item is also represented by LI tag, but it won't render a bullet (for Unordered list) or a number (for Ordered list)\n * normally it has CSS style display set to a value other than \"list-item\"\n */\n VListItem.prototype.isDummy = function () {\n return this.dummy;\n };\n /**\n * @deprecated Always return false\n */\n VListItem.prototype.isOrphanItem = function () {\n return false;\n };\n /**\n * @deprecated\n */\n VListItem.prototype.canMerge = function (item) {\n if (!(item === null || item === void 0 ? void 0 : item.isOrphanItem()) || this.listTypes.length != item.listTypes.length) {\n return false;\n }\n return this.listTypes.every(function (type, index) { return item.listTypes[index] == type; });\n };\n /**\n * @deprecated\n */\n VListItem.prototype.mergeItems = function (items) {\n var _this = this;\n var nodesToWrap = (items === null || items === void 0 ? void 0 : items.map(function (item) { return item.node; })) || [];\n var targetNodes = wrapIfNotBlockNode(nodesToWrap, true /*checkFirst*/, false /*checkLast*/);\n targetNodes.forEach(function (node) { return _this.node.appendChild(node); });\n };\n /**\n * Indent this item\n * If this is not an list item, it will be no op\n */\n VListItem.prototype.indent = function () {\n var listType = this.getListType();\n if (listType != 0 /* None */) {\n this.listTypes.push(listType);\n }\n };\n /**\n * Outdent this item\n * If this item is already not an list item, it will be no op\n */\n VListItem.prototype.outdent = function () {\n if (this.listTypes.length > 1) {\n this.listTypes.pop();\n }\n };\n /**\n * Change list type of this item\n * @param targetType The target list type to change to\n */\n VListItem.prototype.changeListType = function (targetType) {\n if (targetType == 0 /* None */) {\n this.listTypes = [targetType];\n }\n else {\n this.outdent();\n this.listTypes.push(targetType);\n }\n };\n /**\n * Set whether the item is a dummy item\n * @param isDummy Whether the item is a dummy item\n */\n VListItem.prototype.setIsDummy = function (isDummy) {\n this.dummy = isDummy;\n };\n /**\n * Set the start Number of the new list\n * @param isDummy Whether the item is a dummy item\n */\n VListItem.prototype.setNewListStart = function (startNumber) {\n this.newListStart = startNumber;\n };\n /**\n * Write the change result back into DOM\n * @param listStack current stack of list elements\n * @param originalRoot Original list root element. It will be reused when write back if possible\n */\n VListItem.prototype.writeBack = function (listStack, originalRoot) {\n var nextLevel = 1;\n // 1. Determine list elements that we can reuse\n // e.g.:\n // passed in listStack: Fragment > OL > UL > OL\n // local listTypes: null > OL > UL > UL > OL\n // then Fragment > OL > UL can be reused\n for (; nextLevel < listStack.length; nextLevel++) {\n if ((0, getListTypeFromNode_1.default)(listStack[nextLevel]) !== this.listTypes[nextLevel]) {\n listStack.splice(nextLevel);\n break;\n }\n }\n // 2. Add new list elements\n // e.g.:\n // passed in listStack: Fragment > OL > UL\n // local listTypes: null > OL > UL > UL > OL\n // then we need to create a UL and a OL tag\n for (; nextLevel < this.listTypes.length; nextLevel++) {\n var newList = createListElement(listStack[0], this.listTypes[nextLevel], nextLevel, originalRoot);\n listStack[listStack.length - 1].appendChild(newList);\n listStack.push(newList);\n }\n // 3. Add current node into deepest list element\n listStack[listStack.length - 1].appendChild(this.node);\n this.node.style.display = this.dummy ? 'block' : null;\n // 4. Inherit styles of the child element to the li, so we are able to apply the styles to the ::marker\n if (this.listTypes.length > 1) {\n if (!(this.node.style.fontSize || this.node.style.color || this.node.style.fontFamily)) {\n var stylesToInherit = ['font-size', 'font-family', 'color'];\n (0, setListItemStyle_1.default)(this.node, stylesToInherit);\n }\n }\n // 5. If this is not a list item now, need to unwrap the LI node and do proper handling\n if (this.listTypes.length <= 1) {\n wrapIfNotBlockNode((0, getTagOfNode_1.default)(this.node) == 'LI' ? getChildrenAndUnwrap(this.node) : [this.node], true /*checkFirst*/, true /*checkLast*/);\n }\n };\n return VListItem;\n}());\nexports.default = VListItem;\nfunction createListElement(newRoot, listType, nextLevel, originalRoot) {\n var doc = newRoot.ownerDocument;\n var result;\n // Try to reuse the existing root element\n // It can be reused when\n // 1. Current list item is level 1 (top level), AND\n // 2. Original root exists, AND\n // 3. They have the same list type AND\n // 4. The original root is not used yet\n if (nextLevel == 1 && originalRoot && listType == (0, getListTypeFromNode_1.default)(originalRoot)) {\n if ((0, contains_1.default)(newRoot, originalRoot)) {\n // If it is already used, let's clone one and remove ID to avoid duplicating ID\n result = originalRoot.cloneNode(false /*deep*/);\n result.removeAttribute('id');\n }\n else {\n // Remove all child nodes, they will be added back later when write back other items\n (0, moveChildNodes_1.default)(originalRoot);\n result = originalRoot;\n }\n }\n else {\n // Can't be reused, can't clone, let's create a new one\n result = doc.createElement(listType == 1 /* Ordered */ ? 'ol' : 'ul');\n }\n if (listType == 1 /* Ordered */ && nextLevel > 1) {\n result.style.listStyleType = orderListStyles[(nextLevel - 1) % orderListStyles.length];\n }\n return result;\n}\nfunction wrapIfNotBlockNode(nodes, checkFirst, checkLast) {\n if (nodes.length > 0 &&\n (!checkFirst || !(0, isBlockElement_1.default)(nodes[0])) &&\n (!checkLast || !(0, isBlockElement_1.default)(nodes[nodes.length]))) {\n nodes = [(0, wrap_1.default)(nodes)];\n }\n return nodes;\n}\nfunction getChildrenAndUnwrap(node) {\n var result = (0, toArray_1.default)(node.childNodes);\n (0, unwrap_1.default)(node);\n return result;\n}\n//# sourceMappingURL=VListItem.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * @internal\n * MouseUpPlugin help trigger MouseUp event even when mouse up happens outside editor\n * as long as the mouse was pressed within Editor before\n */\nvar MouseUpPlugin = /** @class */ (function () {\n function MouseUpPlugin() {\n var _this = this;\n this.onMouseUp = function (rawEvent) {\n if (_this.editor) {\n _this.removeMouseUpEventListener();\n _this.editor.triggerPluginEvent(6 /* MouseUp */, {\n rawEvent: rawEvent,\n isClicking: _this.mouseDownX == rawEvent.pageX && _this.mouseDownY == rawEvent.pageY,\n });\n }\n };\n }\n /**\n * Get a friendly name of this plugin\n */\n MouseUpPlugin.prototype.getName = function () {\n return 'MouseUp';\n };\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n MouseUpPlugin.prototype.initialize = function (editor) {\n this.editor = editor;\n };\n /**\n * Dispose this plugin\n */\n MouseUpPlugin.prototype.dispose = function () {\n this.removeMouseUpEventListener();\n this.editor = null;\n };\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n MouseUpPlugin.prototype.onPluginEvent = function (event) {\n if (event.eventType == 5 /* MouseDown */ && !this.mouseUpEventListerAdded) {\n this.editor\n .getDocument()\n .addEventListener('mouseup', this.onMouseUp, true /*setCapture*/);\n this.mouseUpEventListerAdded = true;\n this.mouseDownX = event.rawEvent.pageX;\n this.mouseDownY = event.rawEvent.pageY;\n }\n };\n MouseUpPlugin.prototype.removeMouseUpEventListener = function () {\n if (this.mouseUpEventListerAdded) {\n this.mouseUpEventListerAdded = false;\n this.editor.getDocument().removeEventListener('mouseup', this.onMouseUp, true);\n }\n };\n return MouseUpPlugin;\n}());\nexports.default = MouseUpPlugin;\n//# sourceMappingURL=MouseUpPlugin.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Check whether can move current snapshot with the given step\n * @param snapshots The snapshots data structure to check\n * @param step The step to check, can be positive, negative or 0\n * @returns True if can move current snapshot with the given step, otherwise false\n */\nfunction canMoveCurrentSnapshot(snapshots, step) {\n var newIndex = snapshots.currentIndex + step;\n return newIndex >= 0 && newIndex < snapshots.snapshots.length;\n}\nexports.default = canMoveCurrentSnapshot;\n//# sourceMappingURL=canMoveCurrentSnapshot.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getTargetWindow = void 0;\n// NOTE: Type TargetWindow is an auto-generated type.\n// Run node ./tools/generateTargetWindow.js to generate it.\n/**\n * @internal Export for test only\n * Try get window from the given node or range\n * @param source Source node or range\n */\nfunction getTargetWindow(source) {\n var node = source && (source.commonAncestorContainer || source);\n var document = node &&\n (node.ownerDocument ||\n (Object.prototype.toString.apply(node) == '[object HTMLDocument]'\n ? node\n : null));\n // If document exists but document.defaultView doesn't exist, it is a detached object, just use current window instead\n var targetWindow = document && (document.defaultView || window);\n return targetWindow;\n}\nexports.getTargetWindow = getTargetWindow;\n/**\n * Check if the given object is instance of the target type\n * @param obj Object to check\n * @param typeName Target type name\n */\nfunction safeInstanceOf(obj, typeName) {\n var targetWindow = getTargetWindow(obj);\n var targetType = targetWindow && targetWindow[typeName];\n var mainWindow = window;\n var mainWindowType = mainWindow && mainWindow[typeName];\n return ((mainWindowType && obj instanceof mainWindowType) ||\n (targetType && obj instanceof targetType));\n}\nexports.default = safeInstanceOf;\n//# sourceMappingURL=safeInstanceOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\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 */\nfunction insertTable(editor, columns, rows, format) {\n var document = editor.getDocument();\n var fragment = document.createDocumentFragment();\n var table = document.createElement('table');\n fragment.appendChild(table);\n table.cellSpacing = '0';\n table.cellPadding = '1';\n for (var i = 0; i < rows; i++) {\n var tr = document.createElement('tr');\n table.appendChild(tr);\n for (var j = 0; j < columns; j++) {\n var td = document.createElement('td');\n tr.appendChild(td);\n td.appendChild(document.createElement('br'));\n td.style.width = getTableCellWidth(columns);\n }\n }\n editor.focus();\n editor.addUndoSnapshot(function () {\n var vtable = new roosterjs_editor_dom_1.VTable(table);\n vtable.applyFormat(format);\n vtable.writeBack();\n editor.insertNode(fragment);\n editor.runAsync(function (editor) {\n return editor.select(new roosterjs_editor_dom_1.Position(table, 0 /* Begin */).normalize());\n });\n }, \"Format\" /* Format */);\n}\nexports.default = insertTable;\nfunction getTableCellWidth(columns) {\n if (columns <= 4) {\n return '120px';\n }\n else if (columns <= 6) {\n return '100px';\n }\n else {\n return '70px';\n }\n}\n//# sourceMappingURL=insertTable.js.map","function isAbsolute(pathname) {\n return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n list[i] = list[k];\n }\n\n list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n if (from === undefined) from = '';\n\n var toParts = (to && to.split('/')) || [];\n var fromParts = (from && from.split('/')) || [];\n\n var isToAbs = to && isAbsolute(to);\n var isFromAbs = from && isAbsolute(from);\n var mustEndAbs = isToAbs || isFromAbs;\n\n if (to && isAbsolute(to)) {\n // to is absolute\n fromParts = toParts;\n } else if (toParts.length) {\n // to is relative, drop the filename\n fromParts.pop();\n fromParts = fromParts.concat(toParts);\n }\n\n if (!fromParts.length) return '/';\n\n var hasTrailingSlash;\n if (fromParts.length) {\n var last = fromParts[fromParts.length - 1];\n hasTrailingSlash = last === '.' || last === '..' || last === '';\n } else {\n hasTrailingSlash = false;\n }\n\n var up = 0;\n for (var i = fromParts.length; i >= 0; i--) {\n var part = fromParts[i];\n\n if (part === '.') {\n spliceOne(fromParts, i);\n } else if (part === '..') {\n spliceOne(fromParts, i);\n up++;\n } else if (up) {\n spliceOne(fromParts, i);\n up--;\n }\n }\n\n if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n if (\n mustEndAbs &&\n fromParts[0] !== '' &&\n (!fromParts[0] || !isAbsolute(fromParts[0]))\n )\n fromParts.unshift('');\n\n var result = fromParts.join('/');\n\n if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n return result;\n}\n\nexport default resolvePathname;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * Process pasted content, if there are multiple blocks that are not wrapped by a shared ancestor node,\n * change the tag of first and last node to be SPAN so that it will be merged into current block\n * @param root Root node of content to process\n */\nfunction handleLineMerge(root) {\n var traverser = roosterjs_editor_dom_1.ContentTraverser.createBodyTraverser(root);\n var blocks = [];\n for (var block = traverser === null || traverser === void 0 ? void 0 : traverser.currentBlockElement; block; block = traverser.getNextBlockElement()) {\n blocks.push({\n start: block.getStartNode(),\n end: block.getEndNode(),\n });\n }\n if (blocks.length > 0) {\n processBlock(blocks[0]);\n processBlock(blocks[blocks.length - 1]);\n checkAndAddBr(root, blocks[0], true /*isFirst*/);\n checkAndAddBr(root, blocks[blocks.length - 1], false /*isFirst*/);\n }\n}\nexports.default = handleLineMerge;\nfunction processBlock(block) {\n var _a, _b;\n var start = block.start, end = block.end;\n if (start == end && (0, roosterjs_editor_dom_1.getTagOfNode)(start) == 'DIV') {\n var node = (0, roosterjs_editor_dom_1.changeElementTag)(start, 'SPAN');\n block.start = node;\n block.end = node;\n if ((0, roosterjs_editor_dom_1.getTagOfNode)(node.lastChild) == 'BR') {\n node.removeChild(node.lastChild);\n }\n }\n else if ((0, roosterjs_editor_dom_1.getTagOfNode)(end) == 'BR') {\n var node = end.ownerDocument.createTextNode('');\n (_a = end.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(node, end);\n block.end = node;\n (_b = end.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(end);\n }\n}\nfunction checkAndAddBr(root, block, isFirst) {\n var _a;\n var blockElement = (0, roosterjs_editor_dom_1.getBlockElementAtNode)(root, block.start);\n var sibling = isFirst\n ? (0, roosterjs_editor_dom_1.getNextLeafSibling)(root, block.end)\n : (0, roosterjs_editor_dom_1.getPreviousLeafSibling)(root, block.start);\n if (blockElement === null || blockElement === void 0 ? void 0 : blockElement.contains(sibling)) {\n (_a = (isFirst ? block.end : block.start).parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(block.start.ownerDocument.createElement('br'), isFirst ? block.end.nextSibling : block.start);\n }\n}\n//# sourceMappingURL=handleLineMerge.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Clear a cached object by its key from an event object\n * @param event The event object\n * @param key The cache key\n */\nfunction clearEventDataCache(event, key) {\n if (event && event.eventDataCache) {\n if (key && event.eventDataCache.hasOwnProperty(key)) {\n delete event.eventDataCache[key];\n }\n else if (!key) {\n event.eventDataCache = {};\n }\n }\n}\nexports.default = clearEventDataCache;\n//# sourceMappingURL=clearEventDataCache.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ColorTransformDirection = void 0;\n/**\n * Represents the mode of color transformation\n */\nvar ColorTransformDirection;\n(function (ColorTransformDirection) {\n /**\n * Transform from light to dark\n */\n ColorTransformDirection[ColorTransformDirection[\"LightToDark\"] = 0] = \"LightToDark\";\n /**\n * Transform from dark to light\n */\n ColorTransformDirection[ColorTransformDirection[\"DarkToLight\"] = 1] = \"DarkToLight\";\n})(ColorTransformDirection = exports.ColorTransformDirection || (exports.ColorTransformDirection = {}));\n//# sourceMappingURL=ColorTransformDirection.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Get the html tag of a node, or empty if it is not an element\n * @param node The node to get tag of\n * @returns Tag name in upper case if the given node is an Element, or empty string otherwise\n */\nfunction getTagOfNode(node) {\n return node && node.nodeType == 1 /* Element */ ? node.tagName.toUpperCase() : '';\n}\nexports.default = getTagOfNode;\n//# sourceMappingURL=getTagOfNode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar convertPasteContentForSingleImage_1 = require(\"./imageConverter/convertPasteContentForSingleImage\");\nvar convertPastedContentForLI_1 = require(\"./commonConverter/convertPastedContentForLI\");\nvar convertPastedContentFromExcel_1 = require(\"./excelConverter/convertPastedContentFromExcel\");\nvar convertPastedContentFromPowerPoint_1 = require(\"./pptConverter/convertPastedContentFromPowerPoint\");\nvar convertPastedContentFromWord_1 = require(\"./wordConverter/convertPastedContentFromWord\");\nvar handleLineMerge_1 = require(\"./lineMerge/handleLineMerge\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar convertPastedContentFromWordOnline_1 = require(\"./officeOnlineConverter/convertPastedContentFromWordOnline\");\nvar WORD_ATTRIBUTE_NAME = 'xmlns:w';\nvar WORD_ATTRIBUTE_VALUE = 'urn:schemas-microsoft-com:office:word';\nvar EXCEL_ATTRIBUTE_NAME = 'xmlns:x';\nvar EXCEL_ATTRIBUTE_VALUE = 'urn:schemas-microsoft-com:office:excel';\nvar PROG_ID_NAME = 'ProgId';\nvar EXCEL_ONLINE_ATTRIBUTE_VALUE = 'Excel.Sheet';\nvar POWERPOINT_ATTRIBUTE_VALUE = 'PowerPoint.Slide';\nvar GOOGLE_SHEET_NODE_NAME = 'google-sheets-html-origin';\nvar WAC_IDENTIFY_SELECTOR = 'ul[class^=\"BulletListStyle\"]>.OutlineElement,ol[class^=\"NumberListStyle\"]>.OutlineElement,span.WACImageContainer';\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 */\nvar Paste = /** @class */ (function () {\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 function Paste(unknownTagReplacement) {\n if (unknownTagReplacement === void 0) { unknownTagReplacement = 'SPAN'; }\n this.unknownTagReplacement = unknownTagReplacement;\n }\n /**\n * Get a friendly name of this plugin\n */\n Paste.prototype.getName = function () {\n return 'Paste';\n };\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n Paste.prototype.initialize = function (editor) {\n this.editor = editor;\n };\n /**\n * Dispose this plugin\n */\n Paste.prototype.dispose = function () {\n this.editor = null;\n };\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n Paste.prototype.onPluginEvent = function (event) {\n var _a;\n if (event.eventType == 10 /* BeforePaste */) {\n var htmlAttributes = event.htmlAttributes, fragment = event.fragment, sanitizingOption = event.sanitizingOption, clipboardData = event.clipboardData;\n var trustedHTMLHandler = this.editor.getTrustedHTMLHandler();\n var wacListElements = void 0;\n if (htmlAttributes[WORD_ATTRIBUTE_NAME] == WORD_ATTRIBUTE_VALUE) {\n // Handle HTML copied from Word\n (0, convertPastedContentFromWord_1.default)(event);\n }\n else if (htmlAttributes[EXCEL_ATTRIBUTE_NAME] == EXCEL_ATTRIBUTE_VALUE ||\n htmlAttributes[PROG_ID_NAME] == EXCEL_ONLINE_ATTRIBUTE_VALUE) {\n // Handle HTML copied from Excel\n (0, convertPastedContentFromExcel_1.default)(event, trustedHTMLHandler);\n }\n else if (htmlAttributes[PROG_ID_NAME] == POWERPOINT_ATTRIBUTE_VALUE) {\n (0, convertPastedContentFromPowerPoint_1.default)(event, trustedHTMLHandler);\n }\n else if ((wacListElements = (0, roosterjs_editor_dom_1.toArray)(fragment.querySelectorAll(WAC_IDENTIFY_SELECTOR))) &&\n wacListElements.length > 0) {\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 wacListElements.forEach(function (el) {\n el.style.display = null;\n el.style.margin = null;\n });\n // call conversion function if the pasted content is from word online and\n // has list element in the pasted content.\n if ((0, convertPastedContentFromWordOnline_1.isWordOnlineWithList)(fragment)) {\n (0, convertPastedContentFromWordOnline_1.default)(fragment);\n }\n }\n else if (fragment.querySelector(GOOGLE_SHEET_NODE_NAME)) {\n sanitizingOption.additionalTagReplacements[GOOGLE_SHEET_NODE_NAME] = '*';\n }\n else if (this.editor.isFeatureEnabled(\"ConvertSingleImageBody\" /* ConvertSingleImageBody */) &&\n ((_a = clipboardData.htmlFirstLevelChildTags) === null || _a === void 0 ? void 0 : _a.length) == 1 &&\n clipboardData.htmlFirstLevelChildTags[0] == 'IMG') {\n (0, convertPasteContentForSingleImage_1.default)(event, trustedHTMLHandler);\n }\n else {\n (0, convertPastedContentForLI_1.default)(fragment);\n (0, handleLineMerge_1.default)(fragment);\n }\n // Replace unknown tags with SPAN\n sanitizingOption.unknownTagReplacement = this.unknownTagReplacement;\n }\n };\n return Paste;\n}());\nexports.default = Paste;\n//# sourceMappingURL=Paste.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * @internal\n * Checks if node1 is after node2\n * @param node1 The node to check if it is after another node\n * @param node2 The node to check if another node is after this one\n * @returns True if node1 is after node2, otherwise false\n */\nfunction isNodeAfter(node1, node2) {\n return !!(node1 &&\n node2 &&\n (node2.compareDocumentPosition(node1) & 4 /* Following */) ==\n 4 /* Following */);\n}\nexports.default = isNodeAfter;\n//# sourceMappingURL=isNodeAfter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * Collapse all selected blocks, return single HTML elements for each block\n * @param editor The editor instance\n * @param forEachCallback A callback function to invoke for each of the collapsed element\n */\nfunction collapseSelectedBlocks(editor, forEachCallback) {\n var traverser = editor.getSelectionTraverser();\n var block = traverser && traverser.currentBlockElement;\n var blocks = [];\n while (block) {\n if (!isEmptyBlockUnderTR(block)) {\n blocks.push(block);\n }\n block = traverser.getNextBlockElement();\n }\n blocks.forEach(function (block) {\n var element = block.collapseToSingleElement();\n forEachCallback(element);\n });\n}\nexports.default = collapseSelectedBlocks;\nfunction isEmptyBlockUnderTR(block) {\n var startNode = block.getStartNode();\n return (startNode == block.getEndNode() &&\n startNode.nodeType == 3 /* Text */ &&\n ['TR', 'TABLE'].indexOf((0, roosterjs_editor_dom_1.getTagOfNode)(startNode.parentNode)) >= 0);\n}\n//# sourceMappingURL=collapseSelectedBlocks.js.map","\"use strict\";\nvar __spreadArray = (this && this.__spreadArray) || function (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};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ImageEditInfoState = void 0;\nvar RESIZE_KEYS = ['widthPx', 'heightPx'];\nvar ROTATE_KEYS = ['angleRad'];\nvar CROP_KEYS = [\n 'leftPercent',\n 'rightPercent',\n 'topPercent',\n 'bottomPercent',\n];\nvar ROTATE_CROP_KEYS = __spreadArray(__spreadArray([], ROTATE_KEYS, true), CROP_KEYS, true);\nvar ALL_KEYS = __spreadArray(__spreadArray([], ROTATE_CROP_KEYS, true), RESIZE_KEYS, true);\n/**\n * @internal\n * State of an edit info object for image editing.\n * It is returned by checkEditInfoState() function\n */\nvar ImageEditInfoState;\n(function (ImageEditInfoState) {\n /**\n * Invalid edit info. It means the given edit info object is either null,\n * or not all its member are of correct type\n */\n ImageEditInfoState[ImageEditInfoState[\"Invalid\"] = 0] = \"Invalid\";\n /**\n * The edit info shows that it is only potentially edited by resizing action.\n * Image is not rotated or cropped, or event not changed at all.\n */\n ImageEditInfoState[ImageEditInfoState[\"ResizeOnly\"] = 1] = \"ResizeOnly\";\n /**\n * When compare with another edit info, this value can be returned when both current\n * edit info and the other one are not been rotated, and they have same cropping\n * percentages. So that they can share the same image src, only width and height\n * need to be adjusted.\n */\n ImageEditInfoState[ImageEditInfoState[\"SameWithLast\"] = 2] = \"SameWithLast\";\n /**\n * When this value is returned, it means the image is edited by either cropping or\n * rotation, or both. Image source can't be reused, need to generate a new image src\n * data uri.\n */\n ImageEditInfoState[ImageEditInfoState[\"FullyChanged\"] = 3] = \"FullyChanged\";\n})(ImageEditInfoState = exports.ImageEditInfoState || (exports.ImageEditInfoState = {}));\n/**\n * @internal\n * Check the state of an edit info\n * @param editInfo The edit info to check\n * @param compareTo An optional edit info to compare to\n * @returns If the source edit info is not valid (wrong type, missing field, ...), returns Invalid.\n * If the source edit info doesn't contain any rotation or cropping, returns ResizeOnly\n * If the compare edit info exists, and both of them don't contain rotation, and the have same cropping values,\n * returns SameWithLast. Otherwise, returns FullyChanged\n */\nfunction checkEditInfoState(editInfo, compareTo) {\n if (!editInfo || !editInfo.src || ALL_KEYS.some(function (key) { return !isNumber(editInfo[key]); })) {\n return 0 /* Invalid */;\n }\n else if (ROTATE_CROP_KEYS.every(function (key) { return areSameNumber(editInfo[key], 0); })) {\n return 1 /* ResizeOnly */;\n }\n else if (compareTo &&\n ROTATE_KEYS.every(function (key) { return areSameNumber(editInfo[key], 0); }) &&\n ROTATE_KEYS.every(function (key) { return areSameNumber(compareTo[key], 0); }) &&\n CROP_KEYS.every(function (key) { return areSameNumber(editInfo[key], compareTo[key]); })) {\n return 2 /* SameWithLast */;\n }\n else {\n return 3 /* FullyChanged */;\n }\n}\nexports.default = checkEditInfoState;\nfunction isNumber(o) {\n return typeof o === 'number';\n}\nfunction areSameNumber(n1, n2) {\n return Math.abs(n1 - n2) < 1e-3;\n}\n//# sourceMappingURL=checkEditInfoState.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.experimentCommitListChains = exports.blockFormat = exports.toggleListType = exports.applyCellShading = exports.toggleHeader = exports.toggleUnderline = exports.toggleSuperscript = exports.toggleSubscript = exports.toggleStrikethrough = exports.toggleCodeBlock = exports.toggleBlockQuote = exports.setOrderedListNumbering = exports.toggleNumbering = exports.toggleItalic = exports.toggleBullet = exports.toggleBold = exports.changeCapitalization = exports.setIndentation = exports.setImageAltText = exports.setFontSize = exports.setFontName = exports.setDirection = exports.setTextColor = exports.setBackgroundColor = exports.setAlignment = exports.rotateElement = exports.replaceWithNode = exports.removeLink = exports.formatTable = exports.editTable = exports.insertTable = exports.insertImage = exports.insertEntity = exports.getElementBasedFormatState = exports.getFormatState = exports.createLink = exports.clearFormat = exports.clearBlockFormat = exports.FONT_SIZES = exports.changeFontSize = void 0;\nvar changeFontSize_1 = require(\"./format/changeFontSize\");\nObject.defineProperty(exports, \"changeFontSize\", { enumerable: true, get: function () { return changeFontSize_1.default; } });\nObject.defineProperty(exports, \"FONT_SIZES\", { enumerable: true, get: function () { return changeFontSize_1.FONT_SIZES; } });\nvar clearBlockFormat_1 = require(\"./format/clearBlockFormat\");\nObject.defineProperty(exports, \"clearBlockFormat\", { enumerable: true, get: function () { return clearBlockFormat_1.default; } });\nvar clearFormat_1 = require(\"./format/clearFormat\");\nObject.defineProperty(exports, \"clearFormat\", { enumerable: true, get: function () { return clearFormat_1.default; } });\nvar createLink_1 = require(\"./format/createLink\");\nObject.defineProperty(exports, \"createLink\", { enumerable: true, get: function () { return createLink_1.default; } });\nvar getFormatState_1 = require(\"./format/getFormatState\");\nObject.defineProperty(exports, \"getFormatState\", { enumerable: true, get: function () { return getFormatState_1.default; } });\nObject.defineProperty(exports, \"getElementBasedFormatState\", { enumerable: true, get: function () { return getFormatState_1.getElementBasedFormatState; } });\nvar insertEntity_1 = require(\"./format/insertEntity\");\nObject.defineProperty(exports, \"insertEntity\", { enumerable: true, get: function () { return insertEntity_1.default; } });\nvar insertImage_1 = require(\"./format/insertImage\");\nObject.defineProperty(exports, \"insertImage\", { enumerable: true, get: function () { return insertImage_1.default; } });\nvar insertTable_1 = require(\"./table/insertTable\");\nObject.defineProperty(exports, \"insertTable\", { enumerable: true, get: function () { return insertTable_1.default; } });\nvar editTable_1 = require(\"./table/editTable\");\nObject.defineProperty(exports, \"editTable\", { enumerable: true, get: function () { return editTable_1.default; } });\nvar formatTable_1 = require(\"./table/formatTable\");\nObject.defineProperty(exports, \"formatTable\", { enumerable: true, get: function () { return formatTable_1.default; } });\nvar removeLink_1 = require(\"./format/removeLink\");\nObject.defineProperty(exports, \"removeLink\", { enumerable: true, get: function () { return removeLink_1.default; } });\nvar replaceWithNode_1 = require(\"./format/replaceWithNode\");\nObject.defineProperty(exports, \"replaceWithNode\", { enumerable: true, get: function () { return replaceWithNode_1.default; } });\nvar rotateElement_1 = require(\"./format/rotateElement\");\nObject.defineProperty(exports, \"rotateElement\", { enumerable: true, get: function () { return rotateElement_1.default; } });\nvar setAlignment_1 = require(\"./format/setAlignment\");\nObject.defineProperty(exports, \"setAlignment\", { enumerable: true, get: function () { return setAlignment_1.default; } });\nvar setBackgroundColor_1 = require(\"./format/setBackgroundColor\");\nObject.defineProperty(exports, \"setBackgroundColor\", { enumerable: true, get: function () { return setBackgroundColor_1.default; } });\nvar setTextColor_1 = require(\"./format/setTextColor\");\nObject.defineProperty(exports, \"setTextColor\", { enumerable: true, get: function () { return setTextColor_1.default; } });\nvar setDirection_1 = require(\"./format/setDirection\");\nObject.defineProperty(exports, \"setDirection\", { enumerable: true, get: function () { return setDirection_1.default; } });\nvar setFontName_1 = require(\"./format/setFontName\");\nObject.defineProperty(exports, \"setFontName\", { enumerable: true, get: function () { return setFontName_1.default; } });\nvar setFontSize_1 = require(\"./format/setFontSize\");\nObject.defineProperty(exports, \"setFontSize\", { enumerable: true, get: function () { return setFontSize_1.default; } });\nvar setImageAltText_1 = require(\"./format/setImageAltText\");\nObject.defineProperty(exports, \"setImageAltText\", { enumerable: true, get: function () { return setImageAltText_1.default; } });\nvar setIndentation_1 = require(\"./format/setIndentation\");\nObject.defineProperty(exports, \"setIndentation\", { enumerable: true, get: function () { return setIndentation_1.default; } });\nvar changeCapitalization_1 = require(\"./format/changeCapitalization\");\nObject.defineProperty(exports, \"changeCapitalization\", { enumerable: true, get: function () { return changeCapitalization_1.default; } });\nvar toggleBold_1 = require(\"./format/toggleBold\");\nObject.defineProperty(exports, \"toggleBold\", { enumerable: true, get: function () { return toggleBold_1.default; } });\nvar toggleBullet_1 = require(\"./format/toggleBullet\");\nObject.defineProperty(exports, \"toggleBullet\", { enumerable: true, get: function () { return toggleBullet_1.default; } });\nvar toggleItalic_1 = require(\"./format/toggleItalic\");\nObject.defineProperty(exports, \"toggleItalic\", { enumerable: true, get: function () { return toggleItalic_1.default; } });\nvar toggleNumbering_1 = require(\"./format/toggleNumbering\");\nObject.defineProperty(exports, \"toggleNumbering\", { enumerable: true, get: function () { return toggleNumbering_1.default; } });\nvar setOrderedListNumbering_1 = require(\"./format/setOrderedListNumbering\");\nObject.defineProperty(exports, \"setOrderedListNumbering\", { enumerable: true, get: function () { return setOrderedListNumbering_1.default; } });\nvar toggleBlockQuote_1 = require(\"./format/toggleBlockQuote\");\nObject.defineProperty(exports, \"toggleBlockQuote\", { enumerable: true, get: function () { return toggleBlockQuote_1.default; } });\nvar toggleCodeBlock_1 = require(\"./format/toggleCodeBlock\");\nObject.defineProperty(exports, \"toggleCodeBlock\", { enumerable: true, get: function () { return toggleCodeBlock_1.default; } });\nvar toggleStrikethrough_1 = require(\"./format/toggleStrikethrough\");\nObject.defineProperty(exports, \"toggleStrikethrough\", { enumerable: true, get: function () { return toggleStrikethrough_1.default; } });\nvar toggleSubscript_1 = require(\"./format/toggleSubscript\");\nObject.defineProperty(exports, \"toggleSubscript\", { enumerable: true, get: function () { return toggleSubscript_1.default; } });\nvar toggleSuperscript_1 = require(\"./format/toggleSuperscript\");\nObject.defineProperty(exports, \"toggleSuperscript\", { enumerable: true, get: function () { return toggleSuperscript_1.default; } });\nvar toggleUnderline_1 = require(\"./format/toggleUnderline\");\nObject.defineProperty(exports, \"toggleUnderline\", { enumerable: true, get: function () { return toggleUnderline_1.default; } });\nvar toggleHeader_1 = require(\"./format/toggleHeader\");\nObject.defineProperty(exports, \"toggleHeader\", { enumerable: true, get: function () { return toggleHeader_1.default; } });\nvar applyCellShading_1 = require(\"./table/applyCellShading\");\nObject.defineProperty(exports, \"applyCellShading\", { enumerable: true, get: function () { return applyCellShading_1.default; } });\nvar toggleListType_1 = require(\"./utils/toggleListType\");\nObject.defineProperty(exports, \"toggleListType\", { enumerable: true, get: function () { return toggleListType_1.default; } });\nvar blockFormat_1 = require(\"./utils/blockFormat\");\nObject.defineProperty(exports, \"blockFormat\", { enumerable: true, get: function () { return blockFormat_1.default; } });\nvar experimentCommitListChains_1 = require(\"./experiment/experimentCommitListChains\");\nObject.defineProperty(exports, \"experimentCommitListChains\", { enumerable: true, get: function () { return experimentCommitListChains_1.default; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./plugins/Paste/index\"), exports);\n//# sourceMappingURL=Paste.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PendableFormatCommandMap = void 0;\n/**\n * A map from pendable format name to document command\n */\nexports.PendableFormatCommandMap = {\n /**\n * Bold\n */\n isBold: \"bold\" /* Bold */,\n /**\n * Italic\n */\n isItalic: \"italic\" /* Italic */,\n /**\n * Underline\n */\n isUnderline: \"underline\" /* Underline */,\n /**\n * StrikeThrough\n */\n isStrikeThrough: \"strikeThrough\" /* StrikeThrough */,\n /**\n * Subscript\n */\n isSubscript: \"subscript\" /* Subscript */,\n /**\n * Superscript\n */\n isSuperscript: \"superscript\" /* Superscript */,\n};\n/**\n * Get Pendable Format State at cursor.\n * @param document The HTML Document to get format state from\n * @returns A PendableFormatState object which contains the values of pendable format states\n */\nfunction getPendableFormatState(document) {\n var keys = Object.keys(exports.PendableFormatCommandMap);\n return keys.reduce(function (state, key) {\n state[key] = document.queryCommandState(exports.PendableFormatCommandMap[key]);\n return state;\n }, {});\n}\nexports.default = getPendableFormatState;\n//# sourceMappingURL=getPendableFormatState.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hasFocus = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * Check if the editor has focus now\n * @param core The EditorCore object\n * @returns True if the editor has focus, otherwise false\n */\nvar hasFocus = function (core) {\n var activeElement = core.contentDiv.ownerDocument.activeElement;\n return (activeElement && (0, roosterjs_editor_dom_1.contains)(core.contentDiv, activeElement, true /*treatSameNodeAsContain*/));\n};\nexports.hasFocus = hasFocus;\n//# sourceMappingURL=hasFocus.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./plugins/ImageEdit/index\"), exports);\n//# sourceMappingURL=ImageEdit.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * A type-safe wrapper for Array.prototype.push.apply()\n * @param mainArray The main array to push items into\n * @param itemsArray The items to push to main array\n */\nfunction arrayPush(mainArray, itemsArray) {\n Array.prototype.push.apply(mainArray, itemsArray);\n}\nexports.default = arrayPush;\n//# sourceMappingURL=arrayPush.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar findClosestElementAncestor_1 = require(\"../utils/findClosestElementAncestor\");\nvar isNodeAfter_1 = require(\"../utils/isNodeAfter\");\n/**\n * Represent a position in DOM tree by the node and its offset index\n */\nvar Position = /** @class */ (function () {\n function Position(nodeOrPosition, offsetOrPosType, isFromEndOfRange) {\n if (offsetOrPosType === void 0) { offsetOrPosType = 0; }\n this.isFromEndOfRange = isFromEndOfRange;\n if (nodeOrPosition.node) {\n this.node = nodeOrPosition.node;\n offsetOrPosType = nodeOrPosition.offset;\n }\n else {\n this.node = nodeOrPosition;\n }\n switch (offsetOrPosType) {\n case -2 /* Before */:\n this.offset = getIndexOfNode(this.node);\n this.node = this.node.parentNode; // TODO: how to handle parentNode is null?\n this.isAtEnd = false;\n break;\n case -3 /* After */:\n this.offset = getIndexOfNode(this.node) + 1;\n this.isAtEnd = !this.node.nextSibling;\n this.node = this.node.parentNode; // TODO: how to handle parentNode is null?\n break;\n case -1 /* End */:\n this.offset = getEndOffset(this.node);\n this.isAtEnd = true;\n break;\n default:\n var endOffset = getEndOffset(this.node);\n this.offset = Math.max(0, Math.min(offsetOrPosType, endOffset));\n this.isAtEnd = offsetOrPosType > 0 && offsetOrPosType >= endOffset;\n break;\n }\n this.element = (0, findClosestElementAncestor_1.default)(this.node); // TODO: how to handle parent element is null?\n }\n /**\n * Normalize this position to the leaf node, return the normalize result.\n * If current position is already using leaf node, return this position object itself\n */\n Position.prototype.normalize = function () {\n if (this.node.nodeType == 3 /* Text */ || !this.node.firstChild) {\n return this;\n }\n var node = this.node;\n var newOffset = this.isAtEnd\n ? -1 /* End */\n : this.offset;\n while (node.nodeType == 1 /* Element */ || node.nodeType == 11 /* DocumentFragment */) {\n var nextNode = this.isFromEndOfRange\n ? newOffset == -1 /* End */\n ? node.lastChild\n : node.childNodes[newOffset - 1]\n : newOffset == 0 /* Begin */\n ? node.firstChild\n : newOffset == -1 /* End */\n ? node.lastChild\n : node.childNodes[newOffset];\n if (nextNode) {\n node = nextNode;\n newOffset =\n this.isAtEnd || this.isFromEndOfRange ? -1 /* End */ : 0 /* Begin */;\n }\n else {\n break;\n }\n }\n return new Position(node, newOffset, this.isFromEndOfRange);\n };\n /**\n * Check if this position is equal to the given position\n * @param position The position to check\n */\n Position.prototype.equalTo = function (position) {\n return (position &&\n (this == position ||\n (this.node == position.node &&\n this.offset == position.offset &&\n this.isAtEnd == position.isAtEnd)));\n };\n /**\n * Checks if this position is after the given position\n */\n Position.prototype.isAfter = function (position) {\n return this.node == position.node\n ? (this.isAtEnd && !position.isAtEnd) || this.offset > position.offset\n : (0, isNodeAfter_1.default)(this.node, position.node);\n };\n /**\n * Move this position with offset, returns a new position with a valid offset in the same node\n * @param offset Offset to move with\n */\n Position.prototype.move = function (offset) {\n return new Position(this.node, Math.max(this.offset + offset, 0));\n };\n /**\n * Get start position of the given Range\n * @param range The range to get position from\n */\n Position.getStart = function (range) {\n return new Position(range.startContainer, range.startOffset);\n };\n /**\n * Get end position of the given Range\n * @param range The range to get position from\n */\n Position.getEnd = function (range) {\n // For collapsed range, always return the same value of start container to make sure\n // end position is not before start position\n return range.collapsed\n ? Position.getStart(range)\n : new Position(range.endContainer, range.endOffset, true /*isFromEndOfRange*/);\n };\n return Position;\n}());\nexports.default = Position;\nfunction getIndexOfNode(node) {\n var i = 0;\n while ((node = (node === null || node === void 0 ? void 0 : node.previousSibling) || null)) {\n i++;\n }\n return i;\n}\nfunction getEndOffset(node) {\n var _a;\n if (node.nodeType == 3 /* Text */) {\n return ((_a = node.nodeValue) === null || _a === void 0 ? void 0 : _a.length) || 0;\n }\n else if (node.nodeType == 1 /* Element */) {\n return node.childNodes.length;\n }\n else {\n return 1;\n }\n}\n//# sourceMappingURL=Position.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar applyTextStyle_1 = require(\"./applyTextStyle\");\nvar createRange_1 = require(\"../selection/createRange\");\nvar Position_1 = require(\"../selection/Position\");\nvar getLeafSibling_1 = require(\"../utils/getLeafSibling\");\n/**\n * This is a special version of inline element that identifies a section of an inline element\n * We often have the need to cut an inline element in half and perform some operation only on half of an inline element\n * i.e. users select only some text of a text node and apply format, in that case, format has to happen on partial of an inline element\n * PartialInlineElement is implemented in a way that decorate another full inline element with its own override on methods like isAfter\n * It also offers some special methods that others don't have, i.e. nextInlineElement etc.\n */\nvar PartialInlineElement = /** @class */ (function () {\n function PartialInlineElement(inlineElement, start, end) {\n this.inlineElement = inlineElement;\n this.start = start;\n this.end = end;\n }\n /**\n * Get the full inline element that this partial inline decorates\n */\n PartialInlineElement.prototype.getDecoratedInline = function () {\n return this.inlineElement;\n };\n /**\n * Gets the container node\n */\n PartialInlineElement.prototype.getContainerNode = function () {\n return this.inlineElement.getContainerNode();\n };\n /**\n * Gets the parent block\n */\n PartialInlineElement.prototype.getParentBlock = function () {\n return this.inlineElement.getParentBlock();\n };\n /**\n * Gets the text content\n */\n PartialInlineElement.prototype.getTextContent = function () {\n var range = (0, createRange_1.default)(this.getStartPosition(), this.getEndPosition());\n return range.toString();\n };\n /**\n * Get start position of this inline element.\n */\n PartialInlineElement.prototype.getStartPosition = function () {\n return this.start || this.inlineElement.getStartPosition();\n };\n /**\n * Get end position of this inline element.\n */\n PartialInlineElement.prototype.getEndPosition = function () {\n return this.end || this.inlineElement.getEndPosition();\n };\n Object.defineProperty(PartialInlineElement.prototype, \"nextInlineElement\", {\n /**\n * Get next partial inline element if it is not at the end boundary yet\n */\n get: function () {\n return this.end && new PartialInlineElement(this.inlineElement, this.end, null);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PartialInlineElement.prototype, \"previousInlineElement\", {\n /**\n * Get previous partial inline element if it is not at the begin boundary yet\n */\n get: function () {\n return this.start && new PartialInlineElement(this.inlineElement, null, this.start);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Checks if it contains a position\n */\n PartialInlineElement.prototype.contains = function (pos) {\n return pos && pos.isAfter(this.getStartPosition()) && this.getEndPosition().isAfter(pos);\n };\n /**\n * Checks if this inline element is a textual inline element\n */\n PartialInlineElement.prototype.isTextualInlineElement = function () {\n return this.inlineElement && this.inlineElement.isTextualInlineElement();\n };\n /**\n * Check if this inline element is after the other inline element\n */\n PartialInlineElement.prototype.isAfter = function (inlineElement) {\n var thisStart = this.getStartPosition();\n var otherEnd = inlineElement && inlineElement.getEndPosition();\n return otherEnd && (thisStart.isAfter(otherEnd) || thisStart.equalTo(otherEnd));\n };\n /**\n * apply style\n */\n PartialInlineElement.prototype.applyStyle = function (styler) {\n var from = this.getStartPosition().normalize();\n var to = this.getEndPosition().normalize();\n var container = this.getContainerNode();\n if (from.isAtEnd) {\n var nextNode = (0, getLeafSibling_1.getNextLeafSibling)(container, from.node);\n from = nextNode ? new Position_1.default(nextNode, 0 /* Begin */) : null;\n }\n if (to.offset == 0) {\n var previousNode = (0, getLeafSibling_1.getPreviousLeafSibling)(container, to.node);\n to = previousNode ? new Position_1.default(previousNode, -1 /* End */) : null;\n }\n (0, applyTextStyle_1.default)(container, styler, from, to);\n };\n return PartialInlineElement;\n}());\nexports.default = PartialInlineElement;\n//# sourceMappingURL=PartialInlineElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Set text color or background color to the given element\n * @param element The element to set color to\n * @param color The color to set, it can be a string of color name/value or a ModeIndependentColor object\n * @param isBackgroundColor Whether set background color or text color\n * @param isDarkMode Whether current mode is dark mode. @default false\n */\nfunction setColor(element, color, isBackgroundColor, isDarkMode) {\n var colorString = typeof color === 'string' ? color.trim() : '';\n var modeIndependentColor = typeof color === 'string' ? null : color;\n if (colorString || modeIndependentColor) {\n element.style.setProperty(isBackgroundColor ? 'background-color' : 'color', (isDarkMode\n ? modeIndependentColor === null || modeIndependentColor === void 0 ? void 0 : modeIndependentColor.darkModeColor\n : modeIndependentColor === null || modeIndependentColor === void 0 ? void 0 : modeIndependentColor.lightModeColor) || colorString);\n if (element.dataset) {\n var dataSetName = isBackgroundColor\n ? \"ogsb\" /* OriginalStyleBackgroundColor */\n : \"ogsc\" /* OriginalStyleColor */;\n if (!isDarkMode) {\n delete element.dataset[dataSetName];\n }\n else if (modeIndependentColor) {\n element.dataset[dataSetName] = modeIndependentColor.lightModeColor;\n }\n }\n }\n}\nexports.default = setColor;\n//# sourceMappingURL=setColor.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar createRange_1 = require(\"./createRange\");\nvar LastCommentRegex = /$/;\n/**\n * Restore inner Html of a root element from given html string. If the string contains selection path,\n * remove the selection path and return a range represented by the path\n * @param root The root element\n * @param html The html to restore\n * @returns A selection range if the html contains a valid selection path, otherwise null\n */\nfunction setHtmlWithSelectionPath(rootNode, html, trustedHTMLHandler) {\n if (!rootNode) {\n return null;\n }\n html = html || '';\n var lastComment = LastCommentRegex.exec(html);\n rootNode.innerHTML = (trustedHTMLHandler === null || trustedHTMLHandler === void 0 ? void 0 : trustedHTMLHandler(html)) || html;\n var path = getSelectionPath(rootNode, (lastComment === null || lastComment === void 0 ? void 0 : lastComment[1]) || '');\n return path && (0, createRange_1.default)(rootNode, path.start, path.end);\n}\nexports.default = setHtmlWithSelectionPath;\nfunction getSelectionPath(root, alternativeComment) {\n var _a, _b, _c;\n var pathCommentValue = '';\n var pathCommentNode = null;\n var path = null;\n if (((_a = root.lastChild) === null || _a === void 0 ? void 0 : _a.nodeType) == 8 /* Comment */) {\n pathCommentNode = root.lastChild;\n pathCommentValue = pathCommentNode.nodeValue || '';\n }\n else {\n pathCommentValue = alternativeComment;\n }\n if (pathCommentValue) {\n try {\n path = JSON.parse(pathCommentValue);\n if (path && ((_b = path.start) === null || _b === void 0 ? void 0 : _b.length) > 0 && ((_c = path.end) === null || _c === void 0 ? void 0 : _c.length) > 0) {\n if (pathCommentNode) {\n root.removeChild(pathCommentNode);\n }\n }\n else {\n path = null;\n }\n }\n catch (_d) { }\n }\n return path;\n}\n//# sourceMappingURL=setHtmlWithSelectionPath.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * Toggle header at selection\n * @param editor The editor instance\n * @param level The header level, can be a number from 0 to 6, in which 1 ~ 6 refers to\n * the HTML header element <H1> to <H6>, 0 means no header\n * if passed in param is outside the range, will be rounded to nearest number in the range\n */\nfunction toggleHeader(editor, level) {\n level = Math.min(Math.max(Math.round(level), 0), 6);\n editor.addUndoSnapshot(function () {\n editor.focus();\n var wrapped = false;\n editor.queryElements('H1,H2,H3,H4,H5,H6', 1 /* OnSelection */, function (header) {\n if (!wrapped) {\n editor.getDocument().execCommand(\"formatBlock\" /* FormatBlock */, false, '
');\n wrapped = true;\n }\n var div = editor.getDocument().createElement('div');\n (0, roosterjs_editor_dom_1.moveChildNodes)(div, header);\n editor.replaceNode(header, div);\n });\n if (level > 0) {\n var traverser = editor.getSelectionTraverser();\n var blockElement = traverser ? traverser.currentBlockElement : null;\n var sanitizer = new roosterjs_editor_dom_1.HtmlSanitizer({\n cssStyleCallbacks: {\n 'font-size': function () { return false; },\n },\n });\n while (blockElement) {\n var element = blockElement.collapseToSingleElement();\n sanitizer.sanitize(element);\n blockElement = traverser.getNextBlockElement();\n }\n editor.getDocument().execCommand(\"formatBlock\" /* FormatBlock */, false, \"\");\n }\n }, \"Format\" /* Format */);\n}\nexports.default = toggleHeader;\n//# sourceMappingURL=toggleHeader.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar experimentCommitListChains_1 = require(\"../experiment/experimentCommitListChains\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * Split selection into regions, and perform a block-wise formatting action for each region.\n */\nfunction blockFormat(editor, callback, beforeRunCallback) {\n editor.focus();\n var selection = editor.getSelectionRangeEx();\n editor.addUndoSnapshot(function (start, end) {\n if (!beforeRunCallback || beforeRunCallback()) {\n var regions = editor.getSelectedRegions();\n var chains_1 = roosterjs_editor_dom_1.VListChain.createListChains(regions, start === null || start === void 0 ? void 0 : start.node);\n regions.forEach(function (region) { return callback(region, start, end, chains_1); });\n (0, experimentCommitListChains_1.default)(editor, chains_1);\n }\n if (selection.type == 0 /* Normal */) {\n editor.select(start, end);\n }\n else {\n editor.select(selection.table, selection.coordinates);\n }\n }, \"Format\" /* Format */);\n}\nexports.default = blockFormat;\n//# sourceMappingURL=blockFormat.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar blockFormat_1 = require(\"../utils/blockFormat\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * Set indentation at selection\n * If selection contains bullet/numbering list, increase/decrease indentation will\n * increase/decrease the list level by one.\n * @param editor The editor instance\n * @param indentation The indentation option:\n * Indentation.Increase to increase indentation or Indentation.Decrease to decrease indentation\n */\nfunction setIndentation(editor, indentation) {\n var handler = indentation == 0 /* Increase */ ? indent : outdent;\n (0, blockFormat_1.default)(editor, function (region, start, end) {\n var blocks = (0, roosterjs_editor_dom_1.getSelectedBlockElementsInRegion)(region, true /*createBlockIfEmpty*/);\n var blockGroups = [[]];\n for (var i = 0; i < blocks.length; i++) {\n var startNode = blocks[i].getStartNode();\n var vList = (0, roosterjs_editor_dom_1.createVListFromRegion)(region, true /*includeSiblingLists*/, startNode);\n if (vList) {\n blockGroups.push([]);\n while (blocks[i + 1] && vList.contains(blocks[i + 1].getStartNode())) {\n i++;\n }\n vList.setIndentation(start, end, indentation);\n vList.writeBack();\n }\n else {\n blockGroups[blockGroups.length - 1].push(blocks[i]);\n }\n }\n blockGroups.forEach(function (group) { return handler(region, group); });\n });\n}\nexports.default = setIndentation;\nfunction indent(region, blocks) {\n var nodes = (0, roosterjs_editor_dom_1.collapseNodesInRegion)(region, blocks);\n (0, roosterjs_editor_dom_1.wrap)(nodes, 2 /* BlockquoteWrapper */);\n}\nfunction outdent(region, blocks) {\n blocks.forEach(function (blockElement) {\n var node = blockElement.collapseToSingleElement();\n var quote = (0, roosterjs_editor_dom_1.findClosestElementAncestor)(node, region.rootNode, 'blockquote');\n if (quote) {\n if (node == quote) {\n node = (0, roosterjs_editor_dom_1.wrap)((0, roosterjs_editor_dom_1.toArray)(node.childNodes));\n }\n while ((0, roosterjs_editor_dom_1.isNodeInRegion)(region, node) && (0, roosterjs_editor_dom_1.getTagOfNode)(node) != 'BLOCKQUOTE') {\n node = (0, roosterjs_editor_dom_1.splitBalancedNodeRange)(node);\n }\n if ((0, roosterjs_editor_dom_1.isNodeInRegion)(region, node)) {\n (0, roosterjs_editor_dom_1.unwrap)(node);\n }\n }\n });\n}\n//# sourceMappingURL=setIndentation.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ShortcutFeatures = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar roosterjs_editor_api_1 = require(\"roosterjs-editor-api\");\nfunction createCommand(winKey, macKey, action) {\n return {\n winKey: winKey,\n macKey: macKey,\n action: action,\n };\n}\nvar commands = [\n createCommand(4096 /* Ctrl */ | 66 /* B */, 8192 /* Meta */ | 66 /* B */, roosterjs_editor_api_1.toggleBold),\n createCommand(4096 /* Ctrl */ | 73 /* I */, 8192 /* Meta */ | 73 /* I */, roosterjs_editor_api_1.toggleItalic),\n createCommand(4096 /* Ctrl */ | 85 /* U */, 8192 /* Meta */ | 85 /* U */, roosterjs_editor_api_1.toggleUnderline),\n createCommand(4096 /* Ctrl */ | 90 /* Z */, 8192 /* Meta */ | 90 /* Z */, function (editor) { return editor.undo(); }),\n createCommand(4096 /* Ctrl */ | 89 /* Y */, 8192 /* Meta */ | 16384 /* Shift */ | 90 /* Z */, function (editor) { return editor.redo(); }),\n createCommand(4096 /* Ctrl */ | 190 /* PERIOD */, 8192 /* Meta */ | 190 /* PERIOD */, roosterjs_editor_api_1.toggleBullet),\n createCommand(4096 /* Ctrl */ | 191 /* FORWARD_SLASH */, 8192 /* Meta */ | 191 /* FORWARD_SLASH */, roosterjs_editor_api_1.toggleNumbering),\n createCommand(4096 /* Ctrl */ | 16384 /* Shift */ | 190 /* PERIOD */, 8192 /* Meta */ | 16384 /* Shift */ | 190 /* PERIOD */, function (editor) { return (0, roosterjs_editor_api_1.changeFontSize)(editor, 0 /* Increase */); }),\n createCommand(4096 /* Ctrl */ | 16384 /* Shift */ | 188 /* COMMA */, 8192 /* Meta */ | 16384 /* Shift */ | 188 /* COMMA */, function (editor) { return (0, roosterjs_editor_api_1.changeFontSize)(editor, 1 /* Decrease */); }),\n];\n/**\n * DefaultShortcut edit feature, provides shortcuts for the following features:\n * Ctrl/Meta+B: toggle bold style\n * Ctrl/Meta+I: toggle italic style\n * Ctrl/Meta+U: toggle underline style\n * Ctrl/Meta+Z: undo\n * Ctrl+Y/Meta+Shift+Z: redo\n * Ctrl/Meta+PERIOD: toggle bullet list\n * Ctrl/Meta+/: toggle numbering list\n * Ctrl/Meta+Shift+>: increase font size\n * Ctrl/Meta+Shift+<: decrease font size\n */\nvar DefaultShortcut = {\n allowFunctionKeys: true,\n keys: [66 /* B */, 73 /* I */, 85 /* U */, 89 /* Y */, 90 /* Z */, 188 /* COMMA */, 190 /* PERIOD */, 191 /* FORWARD_SLASH */],\n shouldHandleEvent: cacheGetCommand,\n handleEvent: function (event, editor) {\n var command = cacheGetCommand(event);\n if (command) {\n command.action(editor);\n event.rawEvent.preventDefault();\n event.rawEvent.stopPropagation();\n }\n },\n};\nfunction cacheGetCommand(event) {\n return (0, roosterjs_editor_dom_1.cacheGetEventData)(event, 'DEFAULT_SHORT_COMMAND', function () {\n var e = event.rawEvent;\n var key = \n // Need to check ALT key to be false since in some language (e.g. Polski) uses AltGr to input some special characters\n // In that case, ctrlKey and altKey are both true in Edge, but we should not trigger any shortcut function here\n event.eventType == 0 /* KeyDown */ && !e.altKey\n ? e.which |\n (e.metaKey && 8192 /* Meta */) |\n (e.shiftKey && 16384 /* Shift */) |\n (e.ctrlKey && 4096 /* Ctrl */)\n : 0;\n return key && commands.filter(function (cmd) { return (roosterjs_editor_dom_1.Browser.isMac ? cmd.macKey : cmd.winKey) == key; })[0];\n });\n}\n/**\n * @internal\n */\nexports.ShortcutFeatures = {\n defaultShortcut: DefaultShortcut,\n};\n//# sourceMappingURL=shortcutFeatures.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// http exclude matching regex\n// invalid URL example (in particular on IE and Edge):\n// - http://www.bing.com%00, %00 before ? (question mark) is considered invalid. IE/Edge throws invalid argument exception\n// - http://www.bing.com%1, %1 is invalid\n// - http://www.bing.com%g, %g is invalid (IE and Edge expects a two hex value after a %)\n// - http://www.bing.com%, % as ending is invalid (IE and Edge expects a two hex value after a %)\n// All above % cases if they're after ? (question mark) is then considered valid again\n// Similar for @, it needs to be after / (forward slash), or ? (question mark). Otherwise IE/Edge will throw security exception\n// - http://www.bing.com@name, @name before ? (question mark) is considered invalid\n// - http://www.bing.com/@name, is valid sine it is after / (forward slash)\n// - http://www.bing.com?@name, is also valid since it is after ? (question mark)\n// The regex below is essentially a break down of:\n// ^[^?]+%[^0-9a-f]+ => to exclude URL like www.bing.com%%\n// ^[^?]+%[0-9a-f][^0-9a-f]+ => to exclude URL like www.bing.com%1\n// ^[^?]+%00 => to exclude URL like www.bing.com%00\n// ^[^?]+%$ => to exclude URL like www.bing.com%\n// ^https?:\\/\\/[^?\\/]+@ => to exclude URL like http://www.bing.com@name\n// ^www\\.[^?\\/]+@ => to exclude URL like www.bing.com@name\n// , => to exclude url like www.bing,,com\nvar httpExcludeRegEx = /^[^?]+%[^0-9a-f]+|^[^?]+%[0-9a-f][^0-9a-f]+|^[^?]+%00|^[^?]+%$|^https?:\\/\\/[^?\\/]+@|^www\\.[^?\\/]+@/i;\n// via https://tools.ietf.org/html/rfc1035 Page 7\nvar labelRegEx = '[a-z0-9](?:[a-z0-9-]*[a-z0-9])?'; // We're using case insensitive regexps below so don't bother including A-Z\nvar domainNameRegEx = \"(?:\" + labelRegEx + \"\\\\.)*\" + labelRegEx;\nvar domainPortRegEx = domainNameRegEx + \"(?:\\\\:[0-9]+)?\";\nvar domainPortWithUrlRegEx = domainPortRegEx + \"(?:[\\\\/\\\\?]\\\\S*)?\";\nvar linkMatchRules = {\n http: {\n match: new RegExp(\"^(?:microsoft-edge:)?http:\\\\/\\\\/\" + domainPortWithUrlRegEx + \"|www\\\\.\" + domainPortWithUrlRegEx, 'i'),\n except: httpExcludeRegEx,\n normalizeUrl: function (url) {\n return new RegExp('^(?:microsoft-edge:)?http:\\\\/\\\\/', 'i').test(url) ? url : 'http://' + url;\n },\n },\n https: {\n match: new RegExp(\"^(?:microsoft-edge:)?https:\\\\/\\\\/\" + domainPortWithUrlRegEx, 'i'),\n except: httpExcludeRegEx,\n },\n mailto: { match: new RegExp('^mailto:\\\\S+@\\\\S+\\\\.\\\\S+', 'i') },\n notes: { match: new RegExp('^notes:\\\\/\\\\/\\\\S+', 'i') },\n file: { match: new RegExp('^file:\\\\/\\\\/\\\\/?\\\\S+', 'i') },\n unc: { match: new RegExp('^\\\\\\\\\\\\\\\\\\\\S+', 'i') },\n ftp: {\n match: new RegExp(\"^ftp:\\\\/\\\\/\" + domainPortWithUrlRegEx + \"|ftp\\\\.\" + domainPortWithUrlRegEx, 'i'),\n normalizeUrl: function (url) { return (new RegExp('^ftp:\\\\/\\\\/', 'i').test(url) ? url : 'ftp://' + url); },\n },\n news: { match: new RegExp(\"^news:(\\\\/\\\\/)?\" + domainPortWithUrlRegEx, 'i') },\n telnet: { match: new RegExp(\"^telnet:(\\\\/\\\\/)?\" + domainPortWithUrlRegEx, 'i') },\n gopher: { match: new RegExp(\"^gopher:\\\\/\\\\/\" + domainPortWithUrlRegEx, 'i') },\n wais: { match: new RegExp(\"^wais:(\\\\/\\\\/)?\" + domainPortWithUrlRegEx, 'i') },\n};\n/**\n * Try to match a given string with link match rules, return matched link\n * @param url Input url to match\n * @param option Link match option, exact or partial. If it is exact match, we need\n * to check the length of matched link and url\n * @param rules Optional link match rules, if not passed, only the default link match\n * rules will be applied\n * @returns The matched link data, or null if no match found.\n * The link data includes an original url and a normalized url\n */\nfunction matchLink(url) {\n if (url) {\n for (var _i = 0, _a = Object.keys(linkMatchRules); _i < _a.length; _i++) {\n var schema = _a[_i];\n var rule = linkMatchRules[schema];\n var matches = url.match(rule.match);\n if (matches && matches[0] == url && (!rule.except || !rule.except.test(url))) {\n return {\n scheme: schema,\n originalUrl: url,\n normalizedUrl: rule.normalizeUrl ? rule.normalizeUrl(url) : url,\n };\n }\n }\n }\n return null;\n}\nexports.default = matchLink;\n//# sourceMappingURL=matchLink.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\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 */\nfunction removeLink(editor) {\n editor.focus();\n editor.addUndoSnapshot(function (start, end) {\n editor.queryElements('a[href]', 1 /* OnSelection */, roosterjs_editor_dom_1.unwrap);\n editor.select(start, end);\n }, \"Format\" /* Format */);\n}\nexports.default = removeLink;\n//# sourceMappingURL=removeLink.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ContentTraverser_1 = require(\"../contentTraverser/ContentTraverser\");\n/**\n * get block element's text content.\n * @param rootNode Root node that the get the textContent of.\n * @returns text content of given text content.\n */\nfunction getTextContent(rootNode) {\n var traverser = ContentTraverser_1.default.createBodyTraverser(rootNode);\n var block = traverser && traverser.currentBlockElement;\n var textContent = [];\n while (block) {\n textContent.push(block.getTextContent());\n block = traverser.getNextBlockElement();\n }\n return textContent.join('\\n');\n}\nexports.default = getTextContent;\n//# sourceMappingURL=getTextContent.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nfunction insertImage(editor, imageFile) {\n if (typeof imageFile == 'string') {\n insertImageWithSrc(editor, imageFile);\n }\n else {\n (0, roosterjs_editor_dom_1.readFile)(imageFile, function (dataUrl) {\n if (dataUrl && !editor.isDisposed()) {\n insertImageWithSrc(editor, dataUrl);\n }\n });\n }\n}\nexports.default = insertImage;\nfunction insertImageWithSrc(editor, src) {\n editor.addUndoSnapshot(function () {\n var image = editor.getDocument().createElement('img');\n image.src = src;\n image.style.maxWidth = '100%';\n editor.insertNode(image);\n }, \"Format\" /* Format */);\n}\n//# sourceMappingURL=insertImage.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar readFile_1 = require(\"../utils/readFile\");\nvar toArray_1 = require(\"../utils/toArray\");\n/**\n * Extract clipboard items to be a ClipboardData object for IE\n * @param dataTransfer The clipboard items retrieve from a DataTransfer object\n * @param callback Callback function when data is ready\n * @returns An object with the following properties:\n * types: Available types from the clipboard event\n * text: Plain text from the clipboard event\n * image: Image file from the clipboard event\n * html: Html string from the clipboard event. When set to null, it means there's no HTML found from the event.\n * When set to undefined, it means can't retrieve HTML string, there may be HTML string but direct retrieving is\n * not supported by browser.\n */\nfunction extractClipboardItemsForIE(dataTransfer, callback, options) {\n var _a, _b, _c;\n var clipboardData = {\n types: dataTransfer.types ? (0, toArray_1.default)(dataTransfer.types) : [],\n text: dataTransfer.getData('text'),\n image: null,\n rawHtml: null,\n customValues: {},\n };\n for (var i = 0; i < (dataTransfer.files ? dataTransfer.files.length : 0); i++) {\n var file = dataTransfer.files.item(i);\n if (((_a = file === null || file === void 0 ? void 0 : file.type) === null || _a === void 0 ? void 0 : _a.indexOf(\"image/\" /* Image */)) == 0) {\n clipboardData.image = file;\n break;\n }\n }\n var nextStep = function () {\n if (clipboardData.image) {\n (0, readFile_1.default)(clipboardData.image, function (dataUrl) {\n clipboardData.imageDataUri = dataUrl;\n callback(clipboardData);\n });\n }\n else {\n callback(clipboardData);\n }\n };\n if ((options === null || options === void 0 ? void 0 : options.getTempDiv) && (options === null || options === void 0 ? void 0 : options.removeTempDiv)) {\n var div_1 = options.getTempDiv();\n div_1.contentEditable = 'true';\n div_1.innerHTML = '';\n div_1.focus();\n (_c = (_b = div_1.ownerDocument) === null || _b === void 0 ? void 0 : _b.defaultView) === null || _c === void 0 ? void 0 : _c.setTimeout(function () {\n var _a;\n clipboardData.rawHtml = div_1.innerHTML;\n (_a = options.removeTempDiv) === null || _a === void 0 ? void 0 : _a.call(options, div_1);\n nextStep();\n }, 0);\n }\n else {\n clipboardData.rawHtml = undefined;\n nextStep();\n }\n}\nexports.default = extractClipboardItemsForIE;\n//# sourceMappingURL=extractClipboardItemsForIE.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar collapseSelectedBlocks_1 = require(\"../utils/collapseSelectedBlocks\");\n/**\n * Change direction for the blocks/paragraph at selection\n * @param editor The editor instance\n * @param direction The direction option:\n * Direction.LeftToRight refers to 'ltr', Direction.RightToLeft refers to 'rtl'\n */\nfunction setDirection(editor, direction) {\n editor.focus();\n editor.addUndoSnapshot(function (start, end) {\n (0, collapseSelectedBlocks_1.default)(editor, function (element) {\n element.setAttribute('dir', direction == 0 /* LeftToRight */ ? 'ltr' : 'rtl');\n element.style.textAlign = direction == 0 /* LeftToRight */ ? 'left' : 'right';\n });\n editor.select(start, end);\n }, \"Format\" /* Format */);\n}\nexports.default = setDirection;\n//# sourceMappingURL=setDirection.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EntityOperation = void 0;\n/**\n * Define possible operations to an entity\n */\nvar EntityOperation;\n(function (EntityOperation) {\n /**\n * Notify plugins that there is a new plugin was added into editor.\n * Plugin can handle this event to entity hydration.\n * This event will be only fired once for each entity DOM node.\n * After undo, or copy/paste, since new DOM nodes were added, this event will be fired\n * for those entities represented by newly added nodes.\n */\n EntityOperation[EntityOperation[\"NewEntity\"] = 0] = \"NewEntity\";\n /**\n * Notify plugins that user is clicking target to an entity\n */\n EntityOperation[EntityOperation[\"Click\"] = 1] = \"Click\";\n /**\n * Notify plugins that user is triggering context menu to an entity\n */\n EntityOperation[EntityOperation[\"ContextMenu\"] = 2] = \"ContextMenu\";\n /**\n * Notify plugins that user is escaping from an entity by pressing ESC key\n */\n EntityOperation[EntityOperation[\"Escape\"] = 3] = \"Escape\";\n /**\n * Notify plugins that user is removing an entity from its start position using DELETE key\n */\n EntityOperation[EntityOperation[\"RemoveFromStart\"] = 4] = \"RemoveFromStart\";\n /**\n * Notify plugins that user is remove an entity from its end position using BACKSPACE key\n */\n EntityOperation[EntityOperation[\"RemoveFromEnd\"] = 5] = \"RemoveFromEnd\";\n /**\n * Notify plugins that an entity is being overwritten.\n * This can be caused by key in, cut, paste, delete, backspace ... on a selection\n * which contains some entities.\n */\n EntityOperation[EntityOperation[\"Overwrite\"] = 6] = \"Overwrite\";\n /**\n * Notify plugins that an entity is being partially overwritten.\n * This happens when user selected part of the entity then do key press, or cut, paste, delete, backspace, ...\n */\n EntityOperation[EntityOperation[\"PartialOverwrite\"] = 7] = \"PartialOverwrite\";\n /**\n * Notify plugins that editor is generating HTML content for save.\n * Plugin should use this event to remove any temporary content, and only leave DOM nodes that\n * should be saved as HTML string.\n * This event will provide a cloned DOM tree for each entity, do NOT compare the DOM nodes with cached nodes\n * because it will always return false.\n */\n EntityOperation[EntityOperation[\"ReplaceTemporaryContent\"] = 8] = \"ReplaceTemporaryContent\";\n /**\n * Notify plugins that editor has attached shadow root for an entity.\n * Plugins can handle this event to do extra operations to the shadow root\n */\n EntityOperation[EntityOperation[\"AddShadowRoot\"] = 9] = \"AddShadowRoot\";\n /**\n * Notify plugins that editor has removed the shadow root of an entity\n * Plugins can handle this event to do any necessary clean up for shadow root\n */\n EntityOperation[EntityOperation[\"RemoveShadowRoot\"] = 10] = \"RemoveShadowRoot\";\n})(EntityOperation = exports.EntityOperation || (exports.EntityOperation = {}));\n//# sourceMappingURL=EntityOperation.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.coreApiMap = void 0;\nvar addUndoSnapshot_1 = require(\"./addUndoSnapshot\");\nvar attachDomEvent_1 = require(\"./attachDomEvent\");\nvar createPasteFragment_1 = require(\"./createPasteFragment\");\nvar ensureTypeInContainer_1 = require(\"./ensureTypeInContainer\");\nvar focus_1 = require(\"./focus\");\nvar getContent_1 = require(\"./getContent\");\nvar getPendableFormatState_1 = require(\"./getPendableFormatState\");\nvar getSelectionRange_1 = require(\"./getSelectionRange\");\nvar getSelectionRangeEx_1 = require(\"./getSelectionRangeEx\");\nvar getStyleBasedFormatState_1 = require(\"./getStyleBasedFormatState\");\nvar hasFocus_1 = require(\"./hasFocus\");\nvar insertNode_1 = require(\"./insertNode\");\nvar restoreUndoSnapshot_1 = require(\"./restoreUndoSnapshot\");\nvar selectRange_1 = require(\"./selectRange\");\nvar selectTable_1 = require(\"./selectTable\");\nvar setContent_1 = require(\"./setContent\");\nvar switchShadowEdit_1 = require(\"./switchShadowEdit\");\nvar transformColor_1 = require(\"./transformColor\");\nvar triggerEvent_1 = require(\"./triggerEvent\");\n/**\n * @internal\n */\nexports.coreApiMap = {\n attachDomEvent: attachDomEvent_1.attachDomEvent,\n addUndoSnapshot: addUndoSnapshot_1.addUndoSnapshot,\n createPasteFragment: createPasteFragment_1.createPasteFragment,\n ensureTypeInContainer: ensureTypeInContainer_1.ensureTypeInContainer,\n focus: focus_1.focus,\n getContent: getContent_1.getContent,\n getSelectionRange: getSelectionRange_1.getSelectionRange,\n getSelectionRangeEx: getSelectionRangeEx_1.getSelectionRangeEx,\n getStyleBasedFormatState: getStyleBasedFormatState_1.getStyleBasedFormatState,\n getPendableFormatState: getPendableFormatState_1.getPendableFormatState,\n hasFocus: hasFocus_1.hasFocus,\n insertNode: insertNode_1.insertNode,\n restoreUndoSnapshot: restoreUndoSnapshot_1.restoreUndoSnapshot,\n selectRange: selectRange_1.selectRange,\n setContent: setContent_1.setContent,\n switchShadowEdit: switchShadowEdit_1.switchShadowEdit,\n transformColor: transformColor_1.transformColor,\n triggerEvent: triggerEvent_1.triggerEvent,\n selectTable: selectTable_1.selectTable,\n};\n//# sourceMappingURL=coreApiMap.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction replaceWithNode(editor, textOrRange, node, exactMatch, searcher) {\n // Make sure the text and node is valid\n if (!textOrRange || !node) {\n return false;\n }\n var range;\n if (typeof textOrRange == 'string') {\n searcher = searcher || editor.getContentSearcherOfCursor();\n range = searcher && searcher.getRangeFromText(textOrRange, exactMatch);\n }\n else {\n range = textOrRange;\n }\n if (range) {\n var backupRange = editor.getSelectionRange();\n // If the range to replace is right before current cursor, it is actually an exact match\n if (backupRange.collapsed &&\n range.endContainer == backupRange.startContainer &&\n range.endOffset == backupRange.startOffset) {\n exactMatch = true;\n }\n editor.insertNode(node, {\n position: 5 /* Range */,\n updateCursor: exactMatch,\n replaceSelection: true,\n insertOnNewLine: false,\n range: range,\n });\n return true;\n }\n return false;\n}\nexports.default = replaceWithNode;\n//# sourceMappingURL=replaceWithNode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GetContentMode = void 0;\n/**\n * Represents a mode number to indicate what kind of content to retrieve when call Editor.getContent()\n */\nvar GetContentMode;\n(function (GetContentMode) {\n /**\n * The clean content without any temporary content only for editor.\n * This is the default value. Call to Editor.getContent() with trigger an ExtractContentWithDom event\n * so that plugins can remove their temporary content, and will return the HTML content\n * which is ready for save to storage.\n */\n GetContentMode[GetContentMode[\"CleanHTML\"] = 0] = \"CleanHTML\";\n /**\n * Retrieve the raw HTML string in current editor. Temporary content will be included.\n */\n GetContentMode[GetContentMode[\"RawHTMLOnly\"] = 1] = \"RawHTMLOnly\";\n /**\n * Retrieve the raw HTML string in current editor with a selection marker. This can be used for\n * save current editor state and call to SetContent with this result can fully restore editor state\n * including current selection\n */\n GetContentMode[GetContentMode[\"RawHTMLWithSelection\"] = 2] = \"RawHTMLWithSelection\";\n /**\n * Get plain text content only, all format will be ignored\n */\n GetContentMode[GetContentMode[\"PlainText\"] = 3] = \"PlainText\";\n /**\n * A fast way to get plain text content, the line-end positions may not be exactly same with HTML content,\n * but the text content should be the same. This is used for quickly retrieve text content and check\n * text only\n */\n GetContentMode[GetContentMode[\"PlainTextFast\"] = 4] = \"PlainTextFast\";\n})(GetContentMode = exports.GetContentMode || (exports.GetContentMode = {}));\n//# sourceMappingURL=GetContentMode.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(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))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getCropHTML = exports.Cropper = void 0;\nvar Resizer_1 = require(\"./Resizer\");\nvar CROP_HANDLE_SIZE = 22;\nvar CROP_HANDLE_WIDTH = 7;\nvar Xs = ['w', 'e'];\nvar Ys = ['s', 'n'];\nvar ROTATION = {\n sw: 0,\n nw: 90,\n ne: 180,\n se: 270,\n};\n/**\n * @internal\n * Crop handle for DragAndDropHelper\n */\nexports.Cropper = {\n onDragStart: function (_a) {\n var editInfo = _a.editInfo;\n return (__assign({}, editInfo));\n },\n onDragging: function (_a, e, base, dx, dy) {\n var _b;\n var editInfo = _a.editInfo, x = _a.x, y = _a.y, options = _a.options;\n _b = (0, Resizer_1.rotateCoordinate)(dx, dy, editInfo.angleRad), dx = _b[0], dy = _b[1];\n var widthPx = editInfo.widthPx, heightPx = editInfo.heightPx, leftPercent = editInfo.leftPercent, rightPercent = editInfo.rightPercent, topPercent = editInfo.topPercent, bottomPercent = editInfo.bottomPercent;\n var minWidth = options.minWidth, minHeight = options.minHeight;\n var widthPercent = 1 - leftPercent - rightPercent;\n var heightPercent = 1 - topPercent - bottomPercent;\n if (widthPercent > 0 && heightPercent > 0) {\n var fullWidth = widthPx / widthPercent;\n var fullHeight = heightPx / heightPercent;\n var newLeft = x != 'e'\n ? crop(base.leftPercent, dx, fullWidth, rightPercent, minWidth)\n : leftPercent;\n var newRight = x != 'w'\n ? crop(base.rightPercent, -dx, fullWidth, leftPercent, minWidth)\n : rightPercent;\n var newTop = y != 's'\n ? crop(base.topPercent, dy, fullHeight, bottomPercent, minHeight)\n : topPercent;\n var newBottom = y != 'n'\n ? crop(base.bottomPercent, -dy, fullHeight, topPercent, minHeight)\n : bottomPercent;\n editInfo.leftPercent = newLeft;\n editInfo.rightPercent = newRight;\n editInfo.topPercent = newTop;\n editInfo.bottomPercent = newBottom;\n editInfo.widthPx = fullWidth * (1 - newLeft - newRight);\n editInfo.heightPx = fullHeight * (1 - newTop - newBottom);\n return true;\n }\n else {\n return false;\n }\n },\n};\nfunction crop(basePercentage, deltaValue, fullValue, currentPercentage, minValue) {\n var maxValue = fullValue * (1 - currentPercentage) - minValue;\n var newValue = fullValue * basePercentage + deltaValue;\n var validValue = Math.max(Math.min(newValue, maxValue), 0);\n return validValue / fullValue;\n}\n/**\n * @internal\n * Get HTML for crop elements, including 4 overlays (to show dark shadow), 1 container and 4 crop handles\n */\nfunction getCropHTML() {\n var overlayHTML = {\n tag: 'div',\n style: 'position:absolute;background-color:rgb(0,0,0,0.5);pointer-events:none',\n className: \"r_cropO\" /* CropOverlay */,\n };\n var containerHTML = {\n tag: 'div',\n style: 'position:absolute;overflow:hidden',\n className: \"r_cropC\" /* CropContainer */,\n children: [],\n };\n Xs.forEach(function (x) { return Ys.forEach(function (y) { return containerHTML.children.push(getCropHTMLInternal(x, y)); }); });\n return [containerHTML, overlayHTML, overlayHTML, overlayHTML, overlayHTML];\n}\nexports.getCropHTML = getCropHTML;\nfunction getCropHTMLInternal(x, y) {\n var leftOrRight = x == 'w' ? 'left' : 'right';\n var topOrBottom = y == 'n' ? 'top' : 'bottom';\n var rotation = ROTATION[y + x];\n return {\n tag: 'div',\n className: \"r_cropH\" /* CropHandle */,\n style: \"position:absolute;pointer-events:auto;cursor:\" + y + x + \"-resize;\" + leftOrRight + \":0;\" + topOrBottom + \":0;width:\" + CROP_HANDLE_SIZE + \"px;height:\" + CROP_HANDLE_SIZE + \"px;transform:rotate(\" + rotation + \"deg)\",\n dataset: { x: x, y: y },\n children: getCropHandleHTML(),\n };\n}\nfunction getCropHandleHTML() {\n var result = [];\n [0, 1].forEach(function (layer) {\n return [0, 1].forEach(function (dir) {\n result.push(getCropHandleHTMLInternal(layer, dir));\n });\n });\n return result;\n}\nfunction getCropHandleHTMLInternal(layer, dir) {\n var position = dir == 0\n ? \"right:\" + layer + \"px;height:\" + (CROP_HANDLE_WIDTH - layer * 2) + \"px;\"\n : \"top:\" + layer + \"px;width:\" + (CROP_HANDLE_WIDTH - layer * 2) + \"px;\";\n var bgColor = layer == 0 ? 'white' : 'black';\n return {\n tag: 'div',\n style: \"position:absolute;left:\" + layer + \"px;bottom:\" + layer + \"px;\" + position + \";background-color:\" + bgColor,\n };\n}\n//# sourceMappingURL=Cropper.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_core_1 = require(\"roosterjs-editor-core\");\nvar roosterjs_color_utils_1 = require(\"roosterjs-color-utils\");\nvar roosterjs_editor_plugins_1 = require(\"roosterjs-editor-plugins\");\n/**\n * Create an editor instance with most common 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 editor instance\n */\nfunction createEditor(contentDiv, additionalPlugins, initialContent) {\n var plugins = [new roosterjs_editor_plugins_1.HyperLink(), new roosterjs_editor_plugins_1.Paste(), new roosterjs_editor_plugins_1.ContentEdit()];\n if (additionalPlugins) {\n plugins = plugins.concat(additionalPlugins);\n }\n var options = {\n plugins: plugins,\n initialContent: initialContent,\n getDarkColor: roosterjs_color_utils_1.getDarkColor,\n defaultFormat: {\n fontFamily: 'Calibri,Arial,Helvetica,sans-serif',\n fontSize: '11pt',\n textColor: '#000000',\n },\n };\n return new roosterjs_editor_core_1.Editor(contentDiv, options);\n}\nexports.default = createEditor;\n//# sourceMappingURL=createEditor.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SelectionRangeTypes = exports.PluginEventType = exports.TableBorderFormat = exports.KnownCreateElementDataIndex = exports.ClearFormatMode = exports.ImageEditOperation = exports.TableOperation = exports.RegionType = exports.QueryScope = exports.PositionType = exports.ListType = exports.Capitalization = exports.Indentation = exports.GetContentMode = exports.FontSizeChange = exports.ExperimentalFeatures = exports.EntityOperation = exports.EntityClasses = exports.Direction = exports.DarkModeDatasetNames = exports.ContentPosition = exports.ColorTransformDirection = exports.ChangeSource = exports.Alignment = exports.ContentType = exports.ContentTypePrefix = exports.NodeType = exports.Keys = exports.DocumentPosition = exports.DocumentCommand = void 0;\nvar DocumentCommand_1 = require(\"./browser/DocumentCommand\");\nObject.defineProperty(exports, \"DocumentCommand\", { enumerable: true, get: function () { return DocumentCommand_1.DocumentCommand; } });\nvar DocumentPosition_1 = require(\"./browser/DocumentPosition\");\nObject.defineProperty(exports, \"DocumentPosition\", { enumerable: true, get: function () { return DocumentPosition_1.DocumentPosition; } });\nvar Keys_1 = require(\"./browser/Keys\");\nObject.defineProperty(exports, \"Keys\", { enumerable: true, get: function () { return Keys_1.Keys; } });\nvar NodeType_1 = require(\"./browser/NodeType\");\nObject.defineProperty(exports, \"NodeType\", { enumerable: true, get: function () { return NodeType_1.NodeType; } });\nvar ContentType_1 = require(\"./browser/ContentType\");\nObject.defineProperty(exports, \"ContentTypePrefix\", { enumerable: true, get: function () { return ContentType_1.ContentTypePrefix; } });\nObject.defineProperty(exports, \"ContentType\", { enumerable: true, get: function () { return ContentType_1.ContentType; } });\n// Enum\nvar Alignment_1 = require(\"./enum/Alignment\");\nObject.defineProperty(exports, \"Alignment\", { enumerable: true, get: function () { return Alignment_1.Alignment; } });\nvar ChangeSource_1 = require(\"./enum/ChangeSource\");\nObject.defineProperty(exports, \"ChangeSource\", { enumerable: true, get: function () { return ChangeSource_1.ChangeSource; } });\nvar ColorTransformDirection_1 = require(\"./enum/ColorTransformDirection\");\nObject.defineProperty(exports, \"ColorTransformDirection\", { enumerable: true, get: function () { return ColorTransformDirection_1.ColorTransformDirection; } });\nvar ContentPosition_1 = require(\"./enum/ContentPosition\");\nObject.defineProperty(exports, \"ContentPosition\", { enumerable: true, get: function () { return ContentPosition_1.ContentPosition; } });\nvar DarkModeDatasetNames_1 = require(\"./enum/DarkModeDatasetNames\");\nObject.defineProperty(exports, \"DarkModeDatasetNames\", { enumerable: true, get: function () { return DarkModeDatasetNames_1.DarkModeDatasetNames; } });\nvar Direction_1 = require(\"./enum/Direction\");\nObject.defineProperty(exports, \"Direction\", { enumerable: true, get: function () { return Direction_1.Direction; } });\nvar EntityClasses_1 = require(\"./enum/EntityClasses\");\nObject.defineProperty(exports, \"EntityClasses\", { enumerable: true, get: function () { return EntityClasses_1.EntityClasses; } });\nvar EntityOperation_1 = require(\"./enum/EntityOperation\");\nObject.defineProperty(exports, \"EntityOperation\", { enumerable: true, get: function () { return EntityOperation_1.EntityOperation; } });\nvar ExperimentalFeatures_1 = require(\"./enum/ExperimentalFeatures\");\nObject.defineProperty(exports, \"ExperimentalFeatures\", { enumerable: true, get: function () { return ExperimentalFeatures_1.ExperimentalFeatures; } });\nvar FontSizeChange_1 = require(\"./enum/FontSizeChange\");\nObject.defineProperty(exports, \"FontSizeChange\", { enumerable: true, get: function () { return FontSizeChange_1.FontSizeChange; } });\nvar GetContentMode_1 = require(\"./enum/GetContentMode\");\nObject.defineProperty(exports, \"GetContentMode\", { enumerable: true, get: function () { return GetContentMode_1.GetContentMode; } });\nvar Indentation_1 = require(\"./enum/Indentation\");\nObject.defineProperty(exports, \"Indentation\", { enumerable: true, get: function () { return Indentation_1.Indentation; } });\nvar Capitalization_1 = require(\"./enum/Capitalization\");\nObject.defineProperty(exports, \"Capitalization\", { enumerable: true, get: function () { return Capitalization_1.Capitalization; } });\nvar ListType_1 = require(\"./enum/ListType\");\nObject.defineProperty(exports, \"ListType\", { enumerable: true, get: function () { return ListType_1.ListType; } });\nvar PositionType_1 = require(\"./enum/PositionType\");\nObject.defineProperty(exports, \"PositionType\", { enumerable: true, get: function () { return PositionType_1.PositionType; } });\nvar QueryScope_1 = require(\"./enum/QueryScope\");\nObject.defineProperty(exports, \"QueryScope\", { enumerable: true, get: function () { return QueryScope_1.QueryScope; } });\nvar RegionType_1 = require(\"./enum/RegionType\");\nObject.defineProperty(exports, \"RegionType\", { enumerable: true, get: function () { return RegionType_1.RegionType; } });\nvar TableOperation_1 = require(\"./enum/TableOperation\");\nObject.defineProperty(exports, \"TableOperation\", { enumerable: true, get: function () { return TableOperation_1.TableOperation; } });\nvar ImageEditOperation_1 = require(\"./enum/ImageEditOperation\");\nObject.defineProperty(exports, \"ImageEditOperation\", { enumerable: true, get: function () { return ImageEditOperation_1.ImageEditOperation; } });\nvar ClearFormatMode_1 = require(\"./enum/ClearFormatMode\");\nObject.defineProperty(exports, \"ClearFormatMode\", { enumerable: true, get: function () { return ClearFormatMode_1.ClearFormatMode; } });\nvar KnownCreateElementDataIndex_1 = require(\"./enum/KnownCreateElementDataIndex\");\nObject.defineProperty(exports, \"KnownCreateElementDataIndex\", { enumerable: true, get: function () { return KnownCreateElementDataIndex_1.KnownCreateElementDataIndex; } });\nvar TableBorderFormat_1 = require(\"./enum/TableBorderFormat\");\nObject.defineProperty(exports, \"TableBorderFormat\", { enumerable: true, get: function () { return TableBorderFormat_1.TableBorderFormat; } });\nvar PluginEventType_1 = require(\"./event/PluginEventType\");\nObject.defineProperty(exports, \"PluginEventType\", { enumerable: true, get: function () { return PluginEventType_1.PluginEventType; } });\nvar SelectionRangeEx_1 = require(\"./interface/SelectionRangeEx\");\nObject.defineProperty(exports, \"SelectionRangeTypes\", { enumerable: true, get: function () { return SelectionRangeEx_1.SelectionRangeTypes; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar canMoveCurrentSnapshot_1 = require(\"./canMoveCurrentSnapshot\");\n/**\n * Clear all snapshots after the current one\n * @param snapshots The snapshots data structure to clear\n */\nfunction clearProceedingSnapshots(snapshots) {\n if ((0, canMoveCurrentSnapshot_1.default)(snapshots, 1)) {\n var removedSize = 0;\n for (var i = snapshots.currentIndex + 1; i < snapshots.snapshots.length; i++) {\n removedSize += snapshots.snapshots[i].length;\n }\n snapshots.snapshots.splice(snapshots.currentIndex + 1);\n snapshots.totalSize -= removedSize;\n snapshots.autoCompleteIndex = -1;\n }\n}\nexports.default = clearProceedingSnapshots;\n//# sourceMappingURL=clearProceedingSnapshots.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ensureTypeInContainer = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * When typing goes directly under content div, many things can go wrong\n * We fix it by wrapping it with a div and reposition cursor within the div\n */\nvar ensureTypeInContainer = function (core, position, keyboardEvent) {\n position = position.normalize();\n var block = (0, roosterjs_editor_dom_1.getBlockElementAtNode)(core.contentDiv, position.node);\n var formatNode;\n if (block) {\n formatNode = block.collapseToSingleElement();\n // if the block is empty, apply default format\n // Otherwise, leave it as it is as we don't want to change the style for existing data\n // unless the block was just created by the keyboard event (e.g. ctrl+a & start typing)\n var shouldSetNodeStyles = (0, roosterjs_editor_dom_1.isNodeEmpty)(formatNode) ||\n (keyboardEvent && wasNodeJustCreatedByKeyboardEvent(keyboardEvent, formatNode));\n formatNode = formatNode && shouldSetNodeStyles ? formatNode : null;\n }\n else {\n // Only reason we don't get the selection block is that we have an empty content div\n // which can happen when users removes everything (i.e. select all and DEL, or backspace from very end to begin)\n // The fix is to add a DIV wrapping, apply default format and move cursor over\n formatNode = (0, roosterjs_editor_dom_1.createElement)(1 /* EmptyLine */, core.contentDiv.ownerDocument);\n core.api.insertNode(core, formatNode, {\n position: 1 /* End */,\n updateCursor: false,\n replaceSelection: false,\n insertOnNewLine: false,\n });\n // element points to a wrapping node we added \"

\". We should move the selection left to
\n position = new roosterjs_editor_dom_1.Position(formatNode.firstChild, 0 /* Begin */);\n }\n if (formatNode) {\n (0, roosterjs_editor_dom_1.applyFormat)(formatNode, core.lifecycle.defaultFormat, core.lifecycle.isDarkMode);\n }\n // If this is triggered by a keyboard event, let's select the new position\n if (keyboardEvent) {\n core.api.selectRange(core, (0, roosterjs_editor_dom_1.createRange)(position));\n }\n};\nexports.ensureTypeInContainer = ensureTypeInContainer;\nfunction wasNodeJustCreatedByKeyboardEvent(event, formatNode) {\n return ((0, roosterjs_editor_dom_1.safeInstanceOf)(event.target, 'Node') &&\n event.target.contains(formatNode) &&\n event.key === formatNode.innerText);\n}\n//# sourceMappingURL=ensureTypeInContainer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar DragAndDropHelper_1 = require(\"../../../pluginUtils/DragAndDropHelper\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar TABLE_RESIZER_LENGTH = 12;\nvar MIN_CELL_WIDTH = 30;\nvar MIN_CELL_HEIGHT = 20;\n/**\n * @internal\n */\nfunction createTableResizer(table, zoomScale, isRTL, onStart, onDragEnd) {\n var document = table.ownerDocument;\n var div = (0, roosterjs_editor_dom_1.createElement)(isRTL\n ? 10 /* TableResizerRTL */\n : 9 /* TableResizerLTR */, document);\n div.style.width = TABLE_RESIZER_LENGTH + \"px\";\n div.style.height = TABLE_RESIZER_LENGTH + \"px\";\n document.body.appendChild(div);\n var context = {\n isRTL: isRTL,\n table: table,\n zoomScale: zoomScale,\n onStart: onStart,\n };\n setResizeDivPosition(context, div);\n var featureHandler = new DragAndDropHelper_1.default(div, context, setResizeDivPosition, {\n onDragStart: onDragStart,\n onDragging: onDragging,\n onDragEnd: onDragEnd,\n }, zoomScale);\n return { node: table, div: div, featureHandler: featureHandler };\n}\nexports.default = createTableResizer;\nfunction onDragStart(context) {\n context.onStart();\n return {\n originalRect: context.table.getBoundingClientRect(),\n vTable: new roosterjs_editor_dom_1.VTable(context.table, true /*normalizeTable*/, context.zoomScale),\n };\n}\nfunction onDragging(context, event, initValue, deltaX, deltaY) {\n var isRTL = context.isRTL, zoomScale = context.zoomScale;\n var originalRect = initValue.originalRect, vTable = initValue.vTable;\n var ratioX = 1.0 + (deltaX / originalRect.width) * zoomScale * (isRTL ? -1 : 1);\n var ratioY = 1.0 + (deltaY / originalRect.height) * zoomScale;\n var shouldResizeX = Math.abs(ratioX - 1.0) > 1e-3;\n var shouldResizeY = Math.abs(ratioY - 1.0) > 1e-3;\n if (shouldResizeX || shouldResizeY) {\n for (var i = 0; i < vTable.cells.length; i++) {\n for (var j = 0; j < vTable.cells[i].length; j++) {\n var cell = vTable.cells[i][j];\n if (cell.td) {\n if (shouldResizeX) {\n // the width of some external table is fixed, we need to make it resizable\n vTable.table.style.width = null;\n var newWidth = (cell.width * ratioX) / zoomScale;\n cell.td.style.boxSizing = 'border-box';\n if (newWidth >= MIN_CELL_WIDTH) {\n cell.td.style.wordBreak = 'break-word';\n cell.td.style.whiteSpace = 'normal';\n cell.td.style.width = newWidth + \"px\";\n }\n }\n if (shouldResizeY) {\n // the height of some external table is fixed, we need to make it resizable\n vTable.table.style.height = null;\n if (j == 0) {\n var newHeight = (cell.height * ratioY) / zoomScale;\n if (newHeight >= MIN_CELL_HEIGHT) {\n cell.td.style.height = newHeight + \"px\";\n }\n }\n else {\n cell.td.style.height = null;\n }\n }\n }\n }\n }\n // To avoid apply format styles when the table is being resizing, the skipApplyFormat is set to true.\n vTable.writeBack(true /**skipApplyFormat*/);\n return true;\n }\n else {\n return false;\n }\n}\nfunction setResizeDivPosition(context, trigger) {\n var table = context.table, isRTL = context.isRTL;\n var rect = (0, roosterjs_editor_dom_1.normalizeRect)(table.getBoundingClientRect());\n if (rect) {\n trigger.style.top = rect.bottom + \"px\";\n trigger.style.left = isRTL\n ? rect.left - TABLE_RESIZER_LENGTH - 2 + \"px\"\n : rect.right + \"px\";\n }\n}\n//# sourceMappingURL=TableResizer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar getComputedStyles_1 = require(\"./getComputedStyles\");\nvar getTagOfNode_1 = require(\"./getTagOfNode\");\nvar moveChildNodes_1 = require(\"./moveChildNodes\");\nfunction changeElementTag(element, newTag) {\n var _a;\n if (!element || !newTag) {\n return null;\n }\n var origianlTag = (0, getTagOfNode_1.default)(element);\n if (origianlTag == newTag.toUpperCase()) {\n // Already in the target tag, no need to change\n return element;\n }\n var newElement = element.ownerDocument.createElement(newTag);\n for (var i = 0; i < element.attributes.length; i++) {\n var attr = element.attributes[i];\n newElement.setAttribute(attr.name, attr.value);\n }\n (0, moveChildNodes_1.default)(newElement, element);\n if (origianlTag == 'P' || (0, getTagOfNode_1.default)(newElement) == 'P') {\n _a = (0, getComputedStyles_1.default)(element, [\n 'margin-top',\n 'margin-bottom',\n ]), newElement.style.marginTop = _a[0], newElement.style.marginBottom = _a[1];\n }\n if (element.parentNode) {\n element.parentNode.replaceChild(newElement, element);\n }\n return newElement;\n}\nexports.default = changeElementTag;\n//# sourceMappingURL=changeElementTag.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar checkEditInfoState_1 = require(\"./checkEditInfoState\");\nvar generateDataURL_1 = require(\"./generateDataURL\");\nvar getGeneratedImageSize_1 = require(\"./getGeneratedImageSize\");\nvar editInfo_1 = require(\"./editInfo\");\n/**\n * @internal\n * Apply changes from the edit info of an image, write result to the image\n * @param editor The editor object that contains the image\n * @param image The image to apply the change\n * @param editInfo Edit info that contains the changed information of the image\n * @param previousSrc Last src value of the image before the change was made\n * @returns True if the image is changed, otherwise false\n */\nfunction applyChange(editor, image, editInfo, previousSrc, wasResized) {\n var newSrc = '';\n var initEditInfo = (0, editInfo_1.getEditInfoFromImage)(image);\n var state = (0, checkEditInfoState_1.default)(editInfo, initEditInfo);\n switch (state) {\n case 1 /* ResizeOnly */:\n // For resize only case, no need to generate a new image, just reuse the original one\n newSrc = editInfo.src;\n break;\n case 2 /* SameWithLast */:\n // For SameWithLast case, image may be resized but the content is still the same with last one,\n // so no need to create a new image, but just reuse last one\n newSrc = previousSrc;\n break;\n case 3 /* FullyChanged */:\n // For other cases (cropped, rotated, ...) we need to create a new image to reflect the change\n newSrc = (0, generateDataURL_1.default)(image, editInfo);\n break;\n }\n var srcChanged = newSrc != previousSrc;\n if (srcChanged) {\n // If the src is changed, fire an EditImage event so that plugins knows that a new image is used, and can\n // replace the new src with some other string and it will be used and set to the image\n var event_1 = editor.triggerPluginEvent(19 /* EditImage */, {\n image: image,\n originalSrc: editInfo.src,\n previousSrc: previousSrc,\n newSrc: newSrc,\n });\n newSrc = event_1.newSrc;\n }\n if (newSrc == editInfo.src) {\n // If newSrc is the same with original one, it means there is only size change, but no rotation, no cropping,\n // so we don't need to keep edit info, we can delete it\n (0, editInfo_1.deleteEditInfo)(image);\n }\n else {\n // Otherwise, save the new edit info to the image so that next time when we edit the same image, we know\n // the edit info\n (0, editInfo_1.saveEditInfo)(image, editInfo);\n }\n // Write back the change to image, and set its new size\n var _a = (0, getGeneratedImageSize_1.default)(editInfo), targetWidth = _a.targetWidth, targetHeight = _a.targetHeight;\n image.src = newSrc;\n setImageSize(image, wasResized, targetWidth, targetHeight);\n return (srcChanged ||\n editInfo.widthPx != initEditInfo.widthPx ||\n editInfo.heightPx != initEditInfo.heightPx);\n}\nexports.default = applyChange;\n/**\n * @param img The current image.\n * @param wasResized the current resize state of the image\n */\nfunction setImageSize(image, wasResized, targetWidth, targetHeight) {\n if (wasResized) {\n image.style.maxWidth = 'initial';\n image.width = targetWidth;\n image.height = targetHeight;\n image.style.width = targetWidth + 'px';\n image.style.height = targetHeight + 'px';\n }\n else {\n image.style.maxWidth = '100%';\n image.style.height = 'initial';\n image.style.width = 'initial';\n image.removeAttribute('height');\n image.removeAttribute('width');\n }\n}\n//# sourceMappingURL=applyChange.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addUndoSnapshot = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * Call an editing callback with adding undo snapshots around, and trigger a ContentChanged event if change source is specified.\n * Undo snapshot will not be added if this call is nested inside another addUndoSnapshot() call.\n * @param core The EditorCore object\n * @param callback The editing callback, accepting current selection start and end position, returns an optional object used as the data field of ContentChangedEvent.\n * @param changeSource The ChangeSource string of ContentChangedEvent. @default ChangeSource.Format. Set to null to avoid triggering ContentChangedEvent\n * @param canUndoByBackspace True if this action can be undone when user press Backspace key (aka Auto Complete).\n */\nvar addUndoSnapshot = function (core, callback, changeSource, canUndoByBackspace) {\n var undoState = core.undo;\n var isNested = undoState.isNested;\n var isShadowEdit = !!core.lifecycle.shadowEditFragment;\n var data;\n if (!isNested) {\n undoState.isNested = true;\n if (!isShadowEdit) {\n undoState.snapshotsService.addSnapshot(core.api.getContent(core, 2 /* RawHTMLWithSelection */), canUndoByBackspace);\n undoState.hasNewContent = false;\n }\n }\n try {\n if (callback) {\n var range = core.api.getSelectionRange(core, true /*tryGetFromCache*/);\n data = callback(range && roosterjs_editor_dom_1.Position.getStart(range).normalize(), range && roosterjs_editor_dom_1.Position.getEnd(range).normalize());\n if (!isNested && !isShadowEdit) {\n undoState.snapshotsService.addSnapshot(core.api.getContent(core, 2 /* RawHTMLWithSelection */), false /*isAutoCompleteSnapshot*/);\n undoState.hasNewContent = false;\n }\n }\n }\n finally {\n if (!isNested) {\n undoState.isNested = false;\n }\n }\n if (callback && changeSource) {\n var event_1 = {\n eventType: 7 /* ContentChanged */,\n source: changeSource,\n data: data,\n };\n core.api.triggerEvent(core, event_1, true /*broadcast*/);\n }\n if (canUndoByBackspace) {\n var range = core.api.getSelectionRange(core, false /*tryGetFromCache*/);\n if (range) {\n core.undo.hasNewContent = false;\n core.undo.autoCompletePosition = roosterjs_editor_dom_1.Position.getStart(range);\n }\n }\n};\nexports.addUndoSnapshot = addUndoSnapshot;\n//# sourceMappingURL=addUndoSnapshot.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar getBlockElementAtNode_1 = require(\"../blockElements/getBlockElementAtNode\");\nvar getTagOfNode_1 = require(\"../utils/getTagOfNode\");\nvar ImageInlineElement_1 = require(\"./ImageInlineElement\");\nvar LinkInlineElement_1 = require(\"./LinkInlineElement\");\nvar NodeInlineElement_1 = require(\"./NodeInlineElement\");\nvar safeInstanceOf_1 = require(\"../utils/safeInstanceOf\");\nfunction getInlineElementAtNode(parent, node) {\n // An inline element has to be in a block element, get the block first and then resolve through the factory\n var parentBlock = (0, safeInstanceOf_1.default)(parent, 'Node') ? (0, getBlockElementAtNode_1.default)(parent, node) : parent;\n return node && parentBlock && resolveInlineElement(node, parentBlock);\n}\nexports.default = getInlineElementAtNode;\n/**\n * Resolve an inline element by a leaf node\n * @param node The node to resolve from\n * @param parentBlock The parent block element\n */\nfunction resolveInlineElement(node, parentBlock) {\n var nodeChain = [node];\n for (var parent_1 = node.parentNode; parent_1 && parentBlock.contains(parent_1); parent_1 = parent_1.parentNode) {\n nodeChain.push(parent_1);\n }\n var inlineElement;\n for (var i = nodeChain.length - 1; i >= 0 && !inlineElement; i--) {\n var currentNode = nodeChain[i];\n var tag = (0, getTagOfNode_1.default)(currentNode);\n if (tag == 'A') {\n inlineElement = new LinkInlineElement_1.default(currentNode, parentBlock);\n }\n else if (tag == 'IMG') {\n inlineElement = new ImageInlineElement_1.default(currentNode, parentBlock);\n }\n }\n return inlineElement || new NodeInlineElement_1.default(node, parentBlock);\n}\n//# sourceMappingURL=getInlineElementAtNode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getContent = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * Get current editor content as HTML string\n * @param core The EditorCore object\n * @param mode specify what kind of HTML content to retrieve\n * @returns HTML string representing current editor content\n */\nvar getContent = function (core, mode) {\n var content = '';\n var triggerExtractContentEvent = mode == 0 /* CleanHTML */;\n var includeSelectionMarker = mode == 2 /* RawHTMLWithSelection */;\n // When there is fragment for shadow edit, always use the cached fragment as document since HTML node in editor\n // has been changed by uncommitted shadow edit which should be ignored.\n var root = core.lifecycle.shadowEditFragment || core.contentDiv;\n if (mode == 4 /* PlainTextFast */) {\n content = root.textContent;\n }\n else if (mode == 3 /* PlainText */) {\n content = (0, roosterjs_editor_dom_1.getTextContent)(root);\n }\n else if (triggerExtractContentEvent || core.lifecycle.isDarkMode) {\n var clonedRoot = cloneNode(root);\n clonedRoot.normalize();\n var originalRange = core.api.getSelectionRange(core, true /*tryGetFromCache*/);\n var path = !includeSelectionMarker\n ? null\n : core.lifecycle.shadowEditFragment\n ? core.lifecycle.shadowEditSelectionPath\n : originalRange\n ? (0, roosterjs_editor_dom_1.getSelectionPath)(core.contentDiv, originalRange)\n : null;\n var range = path && (0, roosterjs_editor_dom_1.createRange)(clonedRoot, path.start, path.end);\n if (core.lifecycle.isDarkMode) {\n core.api.transformColor(core, clonedRoot, false /*includeSelf*/, null /*callback*/, 1 /* DarkToLight */);\n }\n if (triggerExtractContentEvent) {\n core.api.triggerEvent(core, {\n eventType: 8 /* ExtractContentWithDom */,\n clonedRoot: clonedRoot,\n }, true /*broadcast*/);\n content = clonedRoot.innerHTML;\n }\n else if (range) {\n // range is not null, which means we want to include a selection path in the content\n content = (0, roosterjs_editor_dom_1.getHtmlWithSelectionPath)(clonedRoot, range);\n }\n else {\n content = clonedRoot.innerHTML;\n }\n }\n else {\n content = (0, roosterjs_editor_dom_1.getHtmlWithSelectionPath)(root, includeSelectionMarker && core.api.getSelectionRange(core, true /*tryGetFromCache*/));\n }\n return content;\n};\nexports.getContent = getContent;\nfunction cloneNode(node) {\n var clonedNode;\n if ((0, roosterjs_editor_dom_1.safeInstanceOf)(node, 'DocumentFragment')) {\n clonedNode = node.ownerDocument.createElement('div');\n clonedNode.appendChild(node.cloneNode(true /*deep*/));\n }\n else {\n clonedNode = node.cloneNode(true /*deep*/);\n }\n return clonedNode;\n}\n//# sourceMappingURL=getContent.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isWordOnlineWithList = void 0;\nvar ListItemBlock_1 = require(\"./ListItemBlock\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar WORD_ONLINE_IDENTIFYING_SELECTOR = 'div.ListContainerWrapper>ul[class^=\"BulletListStyle\"],div.ListContainerWrapper>ol[class^=\"NumberListStyle\"],span.WACImageContainer > img';\nvar LIST_CONTAINER_ELEMENT_CLASS_NAME = 'ListContainerWrapper';\nvar IMAGE_CONTAINER_ELEMENT_CLASS_NAME = 'WACImageContainer';\n/**\n * @internal\n */\nfunction isWordOnlineWithList(fragment) {\n return !!(fragment && fragment.querySelector(WORD_ONLINE_IDENTIFYING_SELECTOR));\n}\nexports.isWordOnlineWithList = isWordOnlineWithList;\n// Word Online pasted content DOM structure as of July 12th 2019\n//\n// \n//
----------> this layer may exist depend on the content user paste\n//
----------> text content\n//

\n//
\n//
----------> list items: for unordered list, all the items on the same level is under the same wrapper\n//
    list items in the same list can be divided into different ListItemWrapper\n//
  • list items in the same list can also be divided into different Outline Group;\n//
  • \n//
\n//
\n//
\n//
\n//
----------> list items: for ordered list, each items has it's own wrapper\n//
    \n//
  1. \n//
\n//
\n//
\n//
    \n//
  1. \n//
\n//
\n//
\n// \n//\n//\n/**\n * @internal\n * Convert text copied from word online into text that's workable with rooster editor\n * @param fragment Document fragment that is being pasted into editor.\n */\nfunction convertPastedContentFromWordOnline(fragment) {\n sanitizeListItemContainer(fragment);\n var listItemBlocks = getListItemBlocks(fragment);\n listItemBlocks.forEach(function (itemBlock) {\n // There are cases where consecutive List Elements are separated into different nodes:\n //
\n //
\n //
    \n //
    \n //
    \n //
      \n //
      \n //
      \n //
      \n //
      \n //
        \n //
        \n //
        \n // in the above case we want to collapse the two root level div into one and unwrap the list item nodes.\n // after the following flattening the list will become following:\n //\n //
        \n //
          \n //
          \n //
          \n //
            \n //
            \n //
            \n //
              \n //
              \n // Then we are start processing.\n flattenListBlock(fragment, itemBlock);\n // Find the node to insertBefore, which is next sibling node of the end of a listItemBlock.\n itemBlock.insertPositionNode = itemBlock.endElement.nextSibling;\n var convertedListElement;\n var doc = fragment.ownerDocument;\n itemBlock.listItemContainers.forEach(function (listItemContainer) {\n var listType = getContainerListType(listItemContainer); // list type that is contained by iterator.\n // Initialize processed element with proper listType if this is the first element\n if (!convertedListElement) {\n convertedListElement = doc.createElement(listType);\n }\n // Get all list items(
            1. ) in the current iterator element.\n var currentListItems = (0, roosterjs_editor_dom_1.toArray)(listItemContainer.querySelectorAll('li'));\n currentListItems.forEach(function (item) {\n // If item is in root level and the type of list changes then\n // insert the current list into body and then reinitialize the convertedListElement\n // Word Online is using data-aria-level to determine the the depth of the list item.\n var itemLevel = parseInt(item.getAttribute('data-aria-level'));\n // In first level list, there are cases where a consecutive list item DIV may have different list type\n // When that happens we need to insert the processed elements into the document, then change the list type\n // and keep the processing going.\n if ((0, roosterjs_editor_dom_1.getTagOfNode)(convertedListElement) != listType && itemLevel == 1) {\n insertConvertedListToDoc(convertedListElement, fragment, itemBlock);\n convertedListElement = doc.createElement(listType);\n }\n insertListItem(convertedListElement, item, listType, doc);\n });\n });\n insertConvertedListToDoc(convertedListElement, fragment, itemBlock);\n // Once we finish the process the list items and put them into a list.\n // After inserting the processed element,\n // we need to remove all the non processed node from the parent node.\n var parentContainer = itemBlock.startElement.parentNode;\n if (parentContainer) {\n itemBlock.listItemContainers.forEach(function (listItemContainer) {\n parentContainer.removeChild(listItemContainer);\n });\n }\n });\n var imageNodes = getImageNodes(fragment);\n imageNodes.forEach(function (node) {\n // Structure when pasting Word Wac Image as of 10/22/2021\n // \n // \n // \n // \n // \n //\n // Since the second span inside of WACImageContainer have style display block it displays an additional space at the bottom of the image.\n // Removing the nodes that are not img will resolve the additional space\n if ((0, roosterjs_editor_dom_1.safeInstanceOf)(node, 'HTMLSpanElement')) {\n node.childNodes.forEach(function (childNode) {\n if ((0, roosterjs_editor_dom_1.getTagOfNode)(childNode) != 'IMG') {\n childNode.parentElement.removeChild(childNode);\n }\n });\n }\n });\n}\nexports.default = convertPastedContentFromWordOnline;\n/**\n * The node processing is based on the premise of only ol/ul is in ListContainerWrapper class\n * However the html might be malformed, this function is to split all the other elements out of ListContainerWrapper\n * @param fragment pasted document that contains all the list element.\n */\nfunction sanitizeListItemContainer(fragment) {\n var listItemContainerListEl = (0, roosterjs_editor_dom_1.toArray)(fragment.querySelectorAll(WORD_ONLINE_IDENTIFYING_SELECTOR));\n listItemContainerListEl.forEach(function (el) {\n var replaceRegex = new RegExp(\"\\\\b\" + LIST_CONTAINER_ELEMENT_CLASS_NAME + \"\\\\b\", 'g');\n if (el.previousSibling) {\n var prevParent = (0, roosterjs_editor_dom_1.splitParentNode)(el, true);\n prevParent.className = prevParent.className.replace(replaceRegex, '');\n }\n if (el.nextSibling) {\n var nextParent = (0, roosterjs_editor_dom_1.splitParentNode)(el, false);\n nextParent.className = nextParent.className.replace(replaceRegex, '');\n }\n });\n}\n/**\n * Take all the list items in the document, and group the consecutive list times in a list block;\n * @param fragment pasted document that contains all the list element.\n */\nfunction getListItemBlocks(fragment) {\n var listElements = fragment.querySelectorAll('.' + LIST_CONTAINER_ELEMENT_CLASS_NAME);\n var result = [];\n var curListItemBlock;\n for (var i = 0; i < listElements.length; i++) {\n var curItem = listElements[i];\n if (!curListItemBlock) {\n curListItemBlock = (0, ListItemBlock_1.createListItemBlock)(curItem);\n }\n else {\n var listItemContainers = curListItemBlock.listItemContainers;\n var lastItemInCurBlock = listItemContainers[listItemContainers.length - 1];\n if (curItem == lastItemInCurBlock.nextSibling ||\n (0, roosterjs_editor_dom_1.getFirstLeafNode)(curItem) ==\n (0, roosterjs_editor_dom_1.getNextLeafSibling)(lastItemInCurBlock.parentNode, lastItemInCurBlock)) {\n listItemContainers.push(curItem);\n curListItemBlock.endElement = curItem;\n }\n else {\n curListItemBlock.endElement = lastItemInCurBlock;\n result.push(curListItemBlock);\n curListItemBlock = (0, ListItemBlock_1.createListItemBlock)(curItem);\n }\n }\n }\n if ((curListItemBlock === null || curListItemBlock === void 0 ? void 0 : curListItemBlock.listItemContainers.length) > 0) {\n result.push(curListItemBlock);\n }\n return result;\n}\n/**\n * Flatten the list items, so that all the consecutive list items are under the same parent.\n * @param fragment Root element of that contains the element.\n * @param listItemBlock The list item block needed to be flattened.\n */\nfunction flattenListBlock(fragment, listItemBlock) {\n var collapsedListItemSections = (0, roosterjs_editor_dom_1.collapseNodes)(fragment, listItemBlock.startElement, listItemBlock.endElement, true);\n collapsedListItemSections.forEach(function (section) {\n if ((0, roosterjs_editor_dom_1.getTagOfNode)(section.firstChild) == 'DIV') {\n (0, roosterjs_editor_dom_1.unwrap)(section);\n }\n });\n}\n/**\n * Get the list type that the container contains. If there is no list in the container\n * return null;\n * @param listItemContainer Container that contains a list\n */\nfunction getContainerListType(listItemContainer) {\n var tag = (0, roosterjs_editor_dom_1.getTagOfNode)(listItemContainer.firstChild);\n return tag == 'UL' || tag == 'OL' ? tag : null;\n}\n/**\n * Insert list item into the correct position of a list\n * @param listRootElement Root element of the list that is accepting a coming element.\n * @param itemToInsert List item that needed to be inserted.\n * @param listType Type of list(ul/ol)\n */\nfunction insertListItem(listRootElement, itemToInsert, listType, doc) {\n if (!listType) {\n return;\n }\n // Get item level from 'data-aria-level' attribute\n var itemLevel = parseInt(itemToInsert.getAttribute('data-aria-level'));\n var curListLevel = listRootElement; // Level iterator to find the correct place for the current element.\n // if the itemLevel is 1 it means the level iterator is at the correct place.\n while (itemLevel > 1) {\n if (!curListLevel.firstChild) {\n // If the current level is empty, create empty list within the current level\n // then move the level iterator into the next level.\n curListLevel.appendChild(doc.createElement(listType));\n curListLevel = curListLevel.firstElementChild;\n }\n else {\n // If the current level is not empty, the last item in the needs to be a UL or OL\n // and the level iterator should move to the UL/OL at the last position.\n var lastChild = curListLevel.lastElementChild;\n var lastChildTag = (0, roosterjs_editor_dom_1.getTagOfNode)(lastChild);\n if (lastChildTag == 'UL' || lastChildTag == 'OL') {\n // If the last child is a list(UL/OL), then move the level iterator to last child.\n curListLevel = lastChild;\n }\n else {\n // If the last child is not a list, then append a new list to the level\n // and move the level iterator to the new level.\n curListLevel.appendChild(doc.createElement(listType));\n curListLevel = curListLevel.lastElementChild;\n }\n }\n itemLevel--;\n }\n // Once the level iterator is at the right place, then append the list item in the level.\n curListLevel.appendChild(itemToInsert);\n}\n/**\n * Insert the converted list item into the correct place.\n * @param convertedListElement List element that is converted from list item block\n * @param fragment Root element of that contains the converted listItemBlock\n * @param listItemBlock List item block that was converted.\n */\nfunction insertConvertedListToDoc(convertedListElement, fragment, listItemBlock) {\n if (!convertedListElement) {\n return;\n }\n var insertPositionNode = listItemBlock.insertPositionNode;\n if (insertPositionNode) {\n var parentNode = insertPositionNode.parentNode;\n if (parentNode) {\n parentNode.insertBefore(convertedListElement, insertPositionNode);\n }\n }\n else {\n var parentNode = listItemBlock.startElement.parentNode;\n if (parentNode) {\n parentNode.appendChild(convertedListElement);\n }\n else {\n fragment.appendChild(convertedListElement);\n }\n }\n}\nfunction getImageNodes(fragment) {\n return fragment.querySelectorAll('.' + IMAGE_CONTAINER_ELEMENT_CLASS_NAME);\n}\n//# sourceMappingURL=convertPastedContentFromWordOnline.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Inheritable CSS properties\n// Ref: https://www.w3.org/TR/CSS21/propidx.html\nvar INHERITABLE_PROPERTIES = ('border-spacing,caption-side,color,' +\n 'cursor,direction,empty-cells,font-family,font-size,font-style,font-variant,font-weight,' +\n 'font,letter-spacing,line-height,list-style-image,list-style-position,list-style-type,' +\n 'list-style,orphans,quotes,text-align,text-indent,text-transform,visibility,white-space,' +\n 'widows,word-spacing').split(',');\n/**\n * Get inheritable CSS style values from the given element\n * @param element The element to get style from\n */\nfunction getInheritableStyles(element) {\n var win = element && element.ownerDocument && element.ownerDocument.defaultView;\n var styles = win && element && win.getComputedStyle(element);\n var result = {};\n INHERITABLE_PROPERTIES.forEach(function (name) { return (result[name] = (styles && styles.getPropertyValue(name)) || ''); });\n return result;\n}\nexports.default = getInheritableStyles;\n//# sourceMappingURL=getInheritableStyles.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar INSERTER_COLOR = '#4A4A4A';\nvar INSERTER_COLOR_DARK_MODE = 'white';\nvar INSERTER_SIDE_LENGTH = 12;\nvar INSERTER_BORDER_SIZE = 1;\n/**\n * @internal\n */\nfunction createTableInserter(editor, td, isRTL, isHorizontal, onInsert) {\n var table = editor.getElementAtCursor('table', td);\n var tdRect = (0, roosterjs_editor_dom_1.normalizeRect)(td.getBoundingClientRect());\n var tableRect = table ? (0, roosterjs_editor_dom_1.normalizeRect)(table.getBoundingClientRect()) : null;\n // set inserter position\n if (tdRect && tableRect) {\n var document_1 = td.ownerDocument;\n var div = (0, roosterjs_editor_dom_1.createElement)(getInsertElementData(isHorizontal, editor.isDarkMode(), isRTL, editor.getDefaultFormat().backgroundColor || 'white'), document_1);\n if (isHorizontal) {\n div.style.left = (isRTL\n ? tdRect.right\n : tdRect.left - (INSERTER_SIDE_LENGTH - 1 + 2 * INSERTER_BORDER_SIZE)) + \"px\";\n div.style.top = tdRect.bottom - 8 + \"px\";\n div.firstChild.style.width = tableRect.right - tableRect.left + \"px\";\n }\n else {\n div.style.left = (isRTL ? tdRect.left : tdRect.right - 8) + \"px\";\n div.style.top = tdRect.top - (INSERTER_SIDE_LENGTH - 1 + 2 * INSERTER_BORDER_SIZE) + \"px\";\n div.firstChild.style.height = tableRect.bottom - tableRect.top + \"px\";\n }\n document_1.body.appendChild(div);\n var handler = new TableInsertHandler(div, td, isHorizontal, editor, onInsert);\n return { div: div, featureHandler: handler, node: td };\n }\n}\nexports.default = createTableInserter;\nvar TableInsertHandler = /** @class */ (function () {\n function TableInsertHandler(div, td, isHorizontal, editor, onInsert) {\n var _this = this;\n this.div = div;\n this.td = td;\n this.isHorizontal = isHorizontal;\n this.editor = editor;\n this.onInsert = onInsert;\n this.insertTd = function () {\n var vtable = new roosterjs_editor_dom_1.VTable(_this.td);\n if (!_this.isHorizontal) {\n vtable.normalizeTableCellSize(_this.editor.getZoomScale());\n // Since adding new column will cause table width to change, we need to remove width properties\n vtable.table.removeAttribute('width');\n vtable.table.style.width = null;\n }\n vtable.edit(_this.isHorizontal ? 1 /* InsertBelow */ : 3 /* InsertRight */);\n vtable.writeBack();\n //Adding replaceNode to transform color when the theme is switched to dark.\n _this.editor.replaceNode(vtable.table, vtable.table, true /**transformColorForDarkMode*/);\n _this.onInsert();\n };\n this.div.addEventListener('click', this.insertTd);\n }\n TableInsertHandler.prototype.dispose = function () {\n this.div.removeEventListener('click', this.insertTd);\n this.div = null;\n this.editor = null;\n };\n return TableInsertHandler;\n}());\nfunction getInsertElementData(isHorizontal, isDark, isRTL, backgroundColor) {\n var inserterColor = isDark ? INSERTER_COLOR_DARK_MODE : INSERTER_COLOR;\n var outerDivStyle = \"position: fixed; width: \" + INSERTER_SIDE_LENGTH + \"px; height: \" + INSERTER_SIDE_LENGTH + \"px; font-size: 16px; color: \" + inserterColor + \"; line-height: 10px; vertical-align: middle; text-align: center; cursor: pointer; border: solid \" + INSERTER_BORDER_SIZE + \"px \" + inserterColor + \"; border-radius: 50%; background-color: \" + backgroundColor;\n var leftOrRight = isRTL ? 'right' : 'left';\n var childBaseStyles = \"position: absolute; box-sizing: border-box; background-color: \" + backgroundColor + \";\";\n var childInfo = {\n tag: 'div',\n style: childBaseStyles +\n (isHorizontal\n ? leftOrRight + \": 12px; top: 5px; height: 3px; border-top: 1px solid \" + inserterColor + \"; border-bottom: 1px solid \" + inserterColor + \"; border-right: 1px solid \" + inserterColor + \"; border-left: 0px;\"\n : \"left: 5px; top: 12px; width: 3px; border-left: 1px solid \" + inserterColor + \"; border-right: 1px solid \" + inserterColor + \"; border-bottom: 1px solid \" + inserterColor + \"; border-top: 0px;\"),\n };\n return {\n tag: 'div',\n style: outerDivStyle,\n children: [childInfo, '+'],\n };\n}\n//# sourceMappingURL=TableInserter.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(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))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar autoLinkFeatures_1 = require(\"./features/autoLinkFeatures\");\nvar cursorFeatures_1 = require(\"./features/cursorFeatures\");\nvar entityFeatures_1 = require(\"./features/entityFeatures\");\nvar listFeatures_1 = require(\"./features/listFeatures\");\nvar markdownFeatures_1 = require(\"./features/markdownFeatures\");\nvar quoteFeatures_1 = require(\"./features/quoteFeatures\");\nvar shortcutFeatures_1 = require(\"./features/shortcutFeatures\");\nvar structuredNodeFeatures_1 = require(\"./features/structuredNodeFeatures\");\nvar tableFeatures_1 = require(\"./features/tableFeatures\");\nvar allFeatures = __assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign({}, listFeatures_1.ListFeatures), quoteFeatures_1.QuoteFeatures), tableFeatures_1.TableFeatures), structuredNodeFeatures_1.StructuredNodeFeatures), autoLinkFeatures_1.AutoLinkFeatures), shortcutFeatures_1.ShortcutFeatures), cursorFeatures_1.CursorFeatures), markdownFeatures_1.MarkdownFeatures), entityFeatures_1.EntityFeatures);\n/**\n * Get all content edit features provided by roosterjs\n */\nfunction getAllFeatures() {\n return allFeatures;\n}\nexports.default = getAllFeatures;\n//# sourceMappingURL=getAllFeatures.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Get CSS styles of a given element in name-value pair format\n * @param element The element to get styles from\n */\nfunction getStyles(element) {\n var result = {};\n var style = (element === null || element === void 0 ? void 0 : element.getAttribute('style')) || '';\n style.split(';').forEach(function (pair) {\n var valueIndex = pair.indexOf(':');\n var name = pair.slice(0, valueIndex);\n var value = pair.slice(valueIndex + 1);\n if (name && value) {\n result[name.trim()] = value.trim();\n }\n });\n return result;\n}\nexports.default = getStyles;\n//# sourceMappingURL=getStyles.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Split a text node into two parts by an offset number, and return one of them\n * @param textNode The text node to split\n * @param offset The offset number to split at\n * @param returnFirstPart True to return the first part, then the passed in textNode will become the second part.\n * Otherwise return the second part, and the passed in textNode will become the first part\n */\nfunction splitTextNode(textNode, offset, returnFirstPart) {\n var _a, _b, _c;\n var firstPart = ((_a = textNode.nodeValue) === null || _a === void 0 ? void 0 : _a.substring(0, offset)) || '';\n var secondPart = ((_b = textNode.nodeValue) === null || _b === void 0 ? void 0 : _b.substring(offset)) || '';\n var newNode = textNode.ownerDocument.createTextNode(returnFirstPart ? firstPart : secondPart);\n textNode.nodeValue = returnFirstPart ? secondPart : firstPart;\n (_c = textNode.parentNode) === null || _c === void 0 ? void 0 : _c.insertBefore(newNode, returnFirstPart ? textNode : textNode.nextSibling);\n return newNode;\n}\nexports.default = splitTextNode;\n//# sourceMappingURL=splitTextNode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DocumentPosition = void 0;\n/**\n * The is essentially an enum representing result from browser compareDocumentPosition API\n * https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n */\nvar DocumentPosition;\n(function (DocumentPosition) {\n /**\n * Same node\n */\n DocumentPosition[DocumentPosition[\"Same\"] = 0] = \"Same\";\n /**\n * Node is disconnected from document\n */\n DocumentPosition[DocumentPosition[\"Disconnected\"] = 1] = \"Disconnected\";\n /**\n * Node is preceding the comparing node\n */\n DocumentPosition[DocumentPosition[\"Preceding\"] = 2] = \"Preceding\";\n /**\n * Node is following the comparing node\n */\n DocumentPosition[DocumentPosition[\"Following\"] = 4] = \"Following\";\n /**\n * Node contains the comparing node\n */\n DocumentPosition[DocumentPosition[\"Contains\"] = 8] = \"Contains\";\n /**\n * Node is contained by the comparing node\n */\n DocumentPosition[DocumentPosition[\"ContainedBy\"] = 16] = \"ContainedBy\";\n})(DocumentPosition = exports.DocumentPosition || (exports.DocumentPosition = {}));\n//# sourceMappingURL=DocumentPosition.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TableFeatures = void 0;\nvar roosterjs_editor_api_1 = require(\"roosterjs-editor-api\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * TabInTable edit feature, provides the ability to jump between cells when user press TAB in table\n */\nvar TabInTable = {\n keys: [9 /* TAB */],\n shouldHandleEvent: cacheGetTableCell,\n handleEvent: function (event, editor) {\n var shift = event.rawEvent.shiftKey;\n var td = cacheGetTableCell(event, editor);\n for (var vtable = new roosterjs_editor_dom_1.VTable(td), step = shift ? -1 : 1, row = vtable.row, col = vtable.col + step;; col += step) {\n if (col < 0 || col >= vtable.cells[row].length) {\n row += step;\n if (row < 0) {\n editor.select(vtable.table, -2 /* Before */);\n break;\n }\n else if (row >= vtable.cells.length) {\n (0, roosterjs_editor_api_1.editTable)(editor, 1 /* InsertBelow */);\n break;\n }\n col = shift ? vtable.cells[row].length - 1 : 0;\n }\n var cell = vtable.getCell(row, col);\n if (cell.td) {\n editor.select(cell.td, 0 /* Begin */);\n break;\n }\n }\n event.rawEvent.preventDefault();\n },\n};\n/**\n * UpDownInTable edit feature, provides the ability to jump to cell above/below when user press UP/DOWN\n * in table\n */\nvar UpDownInTable = {\n keys: [38 /* UP */, 40 /* DOWN */],\n shouldHandleEvent: cacheGetTableCell,\n handleEvent: function (event, editor) {\n var _a;\n var td = cacheGetTableCell(event, editor);\n var vtable = new roosterjs_editor_dom_1.VTable(td);\n var isUp = event.rawEvent.which == 38 /* UP */;\n var step = isUp ? -1 : 1;\n var hasShiftKey = event.rawEvent.shiftKey;\n var selection = (_a = editor.getDocument().defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();\n var targetTd = null;\n if (selection) {\n var anchorNode_1 = selection.anchorNode, anchorOffset_1 = selection.anchorOffset;\n for (var row = vtable.row; row >= 0 && row < vtable.cells.length; row += step) {\n var cell = vtable.getCell(row, vtable.col);\n if (cell.td && cell.td != td) {\n targetTd = cell.td;\n break;\n }\n }\n editor.runAsync(function (editor) {\n var _a;\n var newContainer = editor.getElementAtCursor();\n if ((0, roosterjs_editor_dom_1.contains)(vtable.table, newContainer) &&\n !(0, roosterjs_editor_dom_1.contains)(td, newContainer, true /*treatSameNodeAsContain*/)) {\n var newPos = targetTd\n ? new roosterjs_editor_dom_1.Position(targetTd, 0 /* Begin */)\n : new roosterjs_editor_dom_1.Position(vtable.table, isUp ? -2 /* Before */ : -3 /* After */);\n if (hasShiftKey) {\n newPos =\n newPos.node.nodeType == 1 /* Element */ &&\n (0, roosterjs_editor_dom_1.isVoidHtmlElement)(newPos.node)\n ? new roosterjs_editor_dom_1.Position(newPos.node, newPos.isAtEnd ? -3 /* After */ : -2 /* Before */)\n : newPos;\n var selection_1 = (_a = editor.getDocument().defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();\n selection_1 === null || selection_1 === void 0 ? void 0 : selection_1.setBaseAndExtent(anchorNode_1, anchorOffset_1, newPos.node, newPos.offset);\n }\n else {\n editor.select(newPos);\n }\n }\n });\n }\n },\n defaultDisabled: !roosterjs_editor_dom_1.Browser.isChrome && !roosterjs_editor_dom_1.Browser.isSafari,\n};\nfunction cacheGetTableCell(event, editor) {\n return (0, roosterjs_editor_dom_1.cacheGetEventData)(event, 'TABLE_CELL_FOR_TABLE_FEATURES', function () {\n var pos = editor.getFocusedPosition();\n var firstTd = pos && editor.getElementAtCursor('TD,TH,LI', pos.node);\n return (firstTd && ((0, roosterjs_editor_dom_1.getTagOfNode)(firstTd) == 'LI' ? null : firstTd));\n });\n}\n/**\n * @internal\n */\nexports.TableFeatures = {\n tabInTable: TabInTable,\n upDownInTable: UpDownInTable,\n};\n//# sourceMappingURL=tableFeatures.js.map","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; };\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n defineProperty(generator, \"_invoke\", { value: makeInvokeMethod(innerFn, self, context) });\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n defineProperty(Gp, \"constructor\", { value: GeneratorFunctionPrototype, configurable: true });\n defineProperty(\n GeneratorFunctionPrototype,\n \"constructor\",\n { value: GeneratorFunction, configurable: true }\n );\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n defineProperty(this, \"_invoke\", { value: enqueue });\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var methodName = context.method;\n var method = delegate.iterator[methodName];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method, or a missing .next mehtod, always terminate the\n // yield* loop.\n context.delegate = null;\n\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (methodName === \"throw\" && delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n if (methodName !== \"return\") {\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a '\" + methodName + \"' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(val) {\n var object = Object(val);\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.insertNode = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nfunction getInitialRange(core, option) {\n // Selection start replaces based on the current selection.\n // Range inserts based on a provided range.\n // Both have the potential to use the current selection to restore cursor position\n // So in both cases we need to store the selection state.\n var range = core.api.getSelectionRange(core, true /*tryGetFromCache*/);\n var rangeToRestore = null;\n if (option.position == 5 /* Range */) {\n rangeToRestore = range;\n range = option.range;\n }\n else if (range) {\n rangeToRestore = range.cloneRange();\n }\n return { range: range, rangeToRestore: rangeToRestore };\n}\n/**\n * @internal\n * Insert a DOM node into editor content\n * @param core The EditorCore object. No op if null.\n * @param option An insert option object to specify how to insert the node\n */\nvar insertNode = function (core, node, option) {\n option = option || {\n position: 3 /* SelectionStart */,\n insertOnNewLine: false,\n updateCursor: true,\n replaceSelection: true,\n };\n var contentDiv = core.contentDiv;\n if (option.updateCursor) {\n core.api.focus(core);\n }\n if (option.position == 4 /* Outside */) {\n contentDiv.parentNode.insertBefore(node, contentDiv.nextSibling);\n return true;\n }\n core.api.transformColor(core, node, true /*includeSelf*/, function () {\n switch (option.position) {\n case 0 /* Begin */:\n case 1 /* End */: {\n var isBegin = option.position == 0 /* Begin */;\n var block = (0, roosterjs_editor_dom_1.getFirstLastBlockElement)(contentDiv, isBegin);\n var insertedNode_1;\n if (block) {\n var refNode = isBegin ? block.getStartNode() : block.getEndNode();\n if (option.insertOnNewLine ||\n refNode.nodeType == 3 /* Text */ ||\n (0, roosterjs_editor_dom_1.isVoidHtmlElement)(refNode)) {\n // For insert on new line, or refNode is text or void html element (HR, BR etc.)\n // which cannot have children, i.e.
              hello
              world
              . 'hello', 'world' are the\n // first and last node. Insert before 'hello' or after 'world', but still inside DIV\n if ((0, roosterjs_editor_dom_1.safeInstanceOf)(node, 'DocumentFragment')) {\n // if the node to be inserted is DocumentFragment, use its childNodes as insertedNode\n // because insertBefore() returns an empty DocumentFragment\n insertedNode_1 = (0, roosterjs_editor_dom_1.toArray)(node.childNodes);\n refNode.parentNode.insertBefore(node, isBegin ? refNode : refNode.nextSibling);\n }\n else {\n insertedNode_1 = refNode.parentNode.insertBefore(node, isBegin ? refNode : refNode.nextSibling);\n }\n }\n else {\n // if the refNode can have child, use appendChild (which is like to insert as first/last child)\n // i.e.
              hello
              , the content will be inserted before/after hello\n insertedNode_1 = refNode.insertBefore(node, isBegin ? refNode.firstChild : null);\n }\n }\n else {\n // No first block, this can happen when editor is empty. Use appendChild to insert the content in contentDiv\n insertedNode_1 = contentDiv.appendChild(node);\n }\n // Final check to see if the inserted node is a block. If not block and the ask is to insert on new line,\n // add a DIV wrapping\n if (insertedNode_1 && option.insertOnNewLine) {\n var nodes = Array.isArray(insertedNode_1) ? insertedNode_1 : [insertedNode_1];\n if (!(0, roosterjs_editor_dom_1.isBlockElement)(nodes[0]) || !(0, roosterjs_editor_dom_1.isBlockElement)(nodes[nodes.length - 1])) {\n (0, roosterjs_editor_dom_1.wrap)(nodes);\n }\n }\n break;\n }\n case 2 /* DomEnd */:\n // Use appendChild to insert the node at the end of the content div.\n var insertedNode = contentDiv.appendChild(node);\n // Final check to see if the inserted node is a block. If not block and the ask is to insert on new line,\n // add a DIV wrapping\n if (insertedNode && option.insertOnNewLine && !(0, roosterjs_editor_dom_1.isBlockElement)(insertedNode)) {\n (0, roosterjs_editor_dom_1.wrap)(insertedNode);\n }\n break;\n case 5 /* Range */:\n case 3 /* SelectionStart */:\n var _a = getInitialRange(core, option), range = _a.range, rangeToRestore = _a.rangeToRestore;\n if (!range) {\n return;\n }\n // if to replace the selection and the selection is not collapsed, remove the the content at selection first\n if (option.replaceSelection && !range.collapsed) {\n range.deleteContents();\n }\n var pos = roosterjs_editor_dom_1.Position.getStart(range);\n var blockElement = void 0;\n if (option.insertOnNewLine &&\n (blockElement = (0, roosterjs_editor_dom_1.getBlockElementAtNode)(contentDiv, pos.normalize().node))) {\n pos = new roosterjs_editor_dom_1.Position(blockElement.getEndNode(), -3 /* After */);\n }\n else {\n pos = (0, roosterjs_editor_dom_1.adjustInsertPosition)(contentDiv, node, pos, range);\n }\n var nodeForCursor = node.nodeType == 11 /* DocumentFragment */ ? node.lastChild : node;\n range = (0, roosterjs_editor_dom_1.createRange)(pos);\n range.insertNode(node);\n if (option.updateCursor && nodeForCursor) {\n rangeToRestore = (0, roosterjs_editor_dom_1.createRange)(new roosterjs_editor_dom_1.Position(nodeForCursor, -3 /* After */).normalize());\n }\n core.api.selectRange(core, rangeToRestore);\n break;\n }\n }, 0 /* LightToDark */);\n return true;\n};\nexports.insertNode = insertNode;\n//# sourceMappingURL=insertNode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar execCommand_1 = require(\"../utils/execCommand\");\n/**\n * Toggle subscript at selection\n * If selection is collapsed, it will only affect the input after caret\n * If selection contains only subscript text, the subscript style will be removed\n * If selection contains only normal text, subscript style will be added to the whole selected text\n * If selection contains both subscript and normal text, the subscript style will be removed from whole selected text\n * If selection contains any superscript text, the behavior is determined by corresponding realization of browser\n * execCommand API\n * @param editor The editor instance\n */\nfunction toggleSubscript(editor) {\n (0, execCommand_1.default)(editor, \"subscript\" /* Subscript */);\n}\nexports.default = toggleSubscript;\n//# sourceMappingURL=toggleSubscript.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ImageEdit_1 = require(\"../ImageEdit/ImageEdit\");\n/**\n * @deprecated Use ImageEdit plugin instead\n */\nvar ImageResize = /** @class */ (function (_super) {\n __extends(ImageResize, _super);\n /**\n * Create a new instance of ImageResize\n * @param minWidth Minimum width of image when resize in pixel, default value is 10\n * @param minHeight Minimum height of image when resize in pixel, default value is 10\n * @param selectionBorderColor Color of resize border and handles, default value is #DB626C\n * @param forcePreserveRatio Whether always preserve width/height ratio when resize, default value is false\n * @param resizableImageSelector Selector for picking which image is resizable (e.g. for all images not placeholders), note\n * that the tag must be IMG regardless what the selector is\n */\n function ImageResize(minWidth, minHeight, selectionBorderColor, forcePreserveRatio, resizableImageSelector) {\n if (minWidth === void 0) { minWidth = 10; }\n if (minHeight === void 0) { minHeight = 10; }\n if (selectionBorderColor === void 0) { selectionBorderColor = '#DB626C'; }\n if (forcePreserveRatio === void 0) { forcePreserveRatio = false; }\n if (resizableImageSelector === void 0) { resizableImageSelector = 'img'; }\n return _super.call(this, {\n minHeight: minHeight,\n minWidth: minWidth,\n borderColor: selectionBorderColor,\n preserveRatio: forcePreserveRatio,\n imageSelector: resizableImageSelector,\n }) || this;\n }\n /**\n * @deprecated\n */\n ImageResize.prototype.showResizeHandle = function (img) {\n this.setEditingImage(img, 3 /* Resize */);\n };\n /**\n * @deprecated\n */\n ImageResize.prototype.hideResizeHandle = function (selectImageAfterUnSelect) {\n this.setEditingImage(null /*image*/, selectImageAfterUnSelect);\n };\n return ImageResize;\n}(ImageEdit_1.default));\nexports.default = ImageResize;\n//# sourceMappingURL=ImageResize.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Color = require(\"color\");\nvar baseLValue = 21.247; // L-value of #333333\n/**\n * Get dark mode color for a given color\n * @param color The color to calculate from\n */\nfunction getDarkColor(color) {\n try {\n var computedColor = Color(color || undefined);\n var colorLab = computedColor.lab().array();\n var newLValue = (100 - colorLab[0]) * ((100 - baseLValue) / 100) + baseLValue;\n color = Color.lab(newLValue, colorLab[1], colorLab[2])\n .rgb()\n .alpha(computedColor.alpha())\n .toString();\n }\n catch (_a) { }\n return color;\n}\nexports.default = getDarkColor;\n//# sourceMappingURL=getDarkColor.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Rotate an element visually\n * @param editor The editor instance\n * @param element The element that should be rotated\n * @param angle The degree at which to rotate the element from it's center\n */\nfunction rotateElement(editor, element, angle) {\n if (element) {\n editor.addUndoSnapshot(function () {\n element.style.transform = \"rotate(\" + angle + \"deg)\";\n }, \"Format\" /* Format */);\n }\n}\nexports.default = rotateElement;\n//# sourceMappingURL=rotateElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar safeInstanceOf_1 = require(\"./safeInstanceOf\");\nfunction contains(container, contained, treatSameNodeAsContain) {\n if (!container || !contained) {\n return false;\n }\n if (treatSameNodeAsContain && container == contained) {\n return true;\n }\n if ((0, safeInstanceOf_1.default)(contained, 'Range')) {\n contained = contained && contained.commonAncestorContainer;\n treatSameNodeAsContain = true;\n }\n if (contained && contained.nodeType == 3 /* Text */) {\n contained = contained.parentNode;\n treatSameNodeAsContain = true;\n }\n if (container.nodeType != 1 /* Element */ && container.nodeType != 11 /* DocumentFragment */) {\n return !!treatSameNodeAsContain && container == contained;\n }\n return (!!(treatSameNodeAsContain || container != contained) &&\n internalContains(container, contained));\n}\nexports.default = contains;\nfunction internalContains(container, contained) {\n if (container.contains) {\n return container.contains(contained);\n }\n else {\n while (contained) {\n if (contained == container) {\n return true;\n }\n contained = contained.parentNode;\n }\n return false;\n }\n}\n//# sourceMappingURL=contains.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.switchShadowEdit = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n */\nvar switchShadowEdit = function (core, isOn) {\n var lifecycle = core.lifecycle, contentDiv = core.contentDiv;\n var shadowEditFragment = lifecycle.shadowEditFragment, shadowEditSelectionPath = lifecycle.shadowEditSelectionPath, shadowEditTableSelectionPath = lifecycle.shadowEditTableSelectionPath;\n var wasInShadowEdit = !!shadowEditFragment;\n if (isOn) {\n if (!wasInShadowEdit) {\n var selection = core.api.getSelectionRangeEx(core);\n var range = core.api.getSelectionRange(core, true /*tryGetFromCache*/);\n shadowEditSelectionPath = range && (0, roosterjs_editor_dom_1.getSelectionPath)(contentDiv, range);\n shadowEditTableSelectionPath =\n (selection === null || selection === void 0 ? void 0 : selection.type) == 1 /* TableSelection */ &&\n selection.ranges.map(function (range) { return (0, roosterjs_editor_dom_1.getSelectionPath)(contentDiv, range); });\n shadowEditFragment = core.contentDiv.ownerDocument.createDocumentFragment();\n (0, roosterjs_editor_dom_1.moveChildNodes)(shadowEditFragment, contentDiv);\n shadowEditFragment.normalize();\n core.api.triggerEvent(core, {\n eventType: 17 /* EnteredShadowEdit */,\n fragment: shadowEditFragment,\n selectionPath: shadowEditSelectionPath,\n }, false /*broadcast*/);\n lifecycle.shadowEditFragment = shadowEditFragment;\n lifecycle.shadowEditSelectionPath = shadowEditSelectionPath;\n lifecycle.shadowEditTableSelectionPath = shadowEditTableSelectionPath;\n }\n (0, roosterjs_editor_dom_1.moveChildNodes)(contentDiv);\n contentDiv.appendChild(lifecycle.shadowEditFragment.cloneNode(true /*deep*/));\n }\n else {\n lifecycle.shadowEditFragment = null;\n lifecycle.shadowEditSelectionPath = null;\n if (wasInShadowEdit) {\n core.api.triggerEvent(core, {\n eventType: 18 /* LeavingShadowEdit */,\n }, false /*broadcast*/);\n (0, roosterjs_editor_dom_1.moveChildNodes)(contentDiv);\n contentDiv.appendChild(shadowEditFragment);\n core.api.focus(core);\n if (shadowEditSelectionPath) {\n core.api.selectRange(core, (0, roosterjs_editor_dom_1.createRange)(contentDiv, shadowEditSelectionPath.start, shadowEditSelectionPath.end));\n }\n if (core.domEvent.tableSelectionRange) {\n var _a = core.domEvent.tableSelectionRange, table = _a.table, coordinates = _a.coordinates;\n var tableId = table.id;\n var tableElement = core.contentDiv.querySelector('#' + tableId);\n if (table) {\n core.domEvent.tableSelectionRange = core.api.selectTable(core, tableElement, coordinates);\n }\n }\n }\n }\n};\nexports.switchShadowEdit = switchShadowEdit;\n//# sourceMappingURL=switchShadowEdit.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar clearFormat_1 = require(\"./clearFormat\");\n/**\n * @deprecated Use clearFormat instead and pass the ClearFormatMode.Block as parameter\n * @param editor The editor instance\n */\nfunction clearBlockFormat(editor) {\n (0, clearFormat_1.default)(editor, 1 /* Block */);\n}\nexports.default = clearBlockFormat;\n//# sourceMappingURL=clearBlockFormat.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./plugins/ContentEdit/index\"), exports);\n//# sourceMappingURL=ContentEdit.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar setColor_1 = require(\"./setColor\");\n/**\n * Apply format to an HTML element\n * @param element The HTML element to apply format to\n * @param format The format to apply\n */\nfunction applyFormat(element, format, isDarkMode) {\n if (format) {\n var elementStyle = element.style;\n var fontFamily = format.fontFamily, fontSize = format.fontSize, textColor = format.textColor, textColors = format.textColors, backgroundColor = format.backgroundColor, backgroundColors = format.backgroundColors, bold = format.bold, italic = format.italic, underline = format.underline;\n if (fontFamily) {\n elementStyle.fontFamily = fontFamily;\n }\n if (fontSize) {\n elementStyle.fontSize = fontSize;\n }\n if (textColors) {\n (0, setColor_1.default)(element, textColors, false /*isBackground*/, isDarkMode);\n }\n else if (textColor) {\n (0, setColor_1.default)(element, textColor, false /*isBackground*/, isDarkMode);\n }\n if (backgroundColors) {\n (0, setColor_1.default)(element, backgroundColors, true /*isBackground*/, isDarkMode);\n }\n else if (backgroundColor) {\n (0, setColor_1.default)(element, backgroundColor, true /*isBackground*/, isDarkMode);\n }\n if (bold) {\n elementStyle.fontWeight = 'bold';\n }\n if (italic) {\n elementStyle.fontStyle = 'italic';\n }\n if (underline) {\n elementStyle.textDecoration = 'underline';\n }\n }\n}\nexports.default = applyFormat;\n//# sourceMappingURL=applyFormat.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ImageResize = void 0;\nvar ImageResize_1 = require(\"./ImageResize\");\nObject.defineProperty(exports, \"ImageResize\", { enumerable: true, get: function () { return ImageResize_1.default; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar contains_1 = require(\"../utils/contains\");\nvar isNodeAfter_1 = require(\"../utils/isNodeAfter\");\n/**\n * @internal\n * This presents a content block that can be represented by a single html block type element.\n * In most cases, it corresponds to an HTML block level element, i.e. P, DIV, LI, TD etc.\n */\nvar NodeBlockElement = /** @class */ (function () {\n function NodeBlockElement(element) {\n this.element = element;\n }\n /**\n * Collapse this element to a single DOM element.\n * If the content nodes are separated in different root nodes, wrap them to a single node\n * If the content nodes are included in root node with other nodes, split root node\n */\n NodeBlockElement.prototype.collapseToSingleElement = function () {\n return this.element;\n };\n /**\n * Get the start node of the block\n * For NodeBlockElement, start and end essentially refers to same node\n */\n NodeBlockElement.prototype.getStartNode = function () {\n return this.element;\n };\n /**\n * Get the end node of the block\n * For NodeBlockElement, start and end essentially refers to same node\n */\n NodeBlockElement.prototype.getEndNode = function () {\n return this.element;\n };\n /**\n * Checks if it refers to same block\n */\n NodeBlockElement.prototype.equals = function (blockElement) {\n // Ideally there is only one unique way to generate a block so we only need to compare the startNode\n return this.element == blockElement.getStartNode();\n };\n /**\n * Checks if a block is after the current block\n */\n NodeBlockElement.prototype.isAfter = function (blockElement) {\n // if the block's startNode is after current node endEnd, we say it is after\n return (0, isNodeAfter_1.default)(this.element, blockElement.getEndNode());\n };\n /**\n * Checks if a certain html node is within the block\n */\n NodeBlockElement.prototype.contains = function (node) {\n return (0, contains_1.default)(this.element, node, true /*treatSameNodeAsContain*/);\n };\n /**\n * Get the text content of this block element\n */\n NodeBlockElement.prototype.getTextContent = function () {\n return this.element ? this.element.textContent : '';\n };\n return NodeBlockElement;\n}());\nexports.default = NodeBlockElement;\n//# sourceMappingURL=NodeBlockElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar ENTITY_ID_REGEX = /_(\\d{1,8})$/;\nvar ENTITY_CSS_REGEX = '^' + \"_Entity\" /* ENTITY_INFO_NAME */ + '$';\nvar ENTITY_ID_CSS_REGEX = '^' + \"_EId_\" /* ENTITY_ID_PREFIX */;\nvar ENTITY_TYPE_CSS_REGEX = '^' + \"_EType_\" /* ENTITY_TYPE_PREFIX */;\nvar ENTITY_READONLY_CSS_REGEX = '^' + \"_EReadonly_\" /* ENTITY_READONLY_PREFIX */;\nvar ALLOWED_CSS_CLASSES = [\n ENTITY_CSS_REGEX,\n ENTITY_ID_CSS_REGEX,\n ENTITY_TYPE_CSS_REGEX,\n ENTITY_READONLY_CSS_REGEX,\n];\nvar REMOVE_ENTITY_OPERATIONS = [\n 6 /* Overwrite */,\n 7 /* PartialOverwrite */,\n 4 /* RemoveFromStart */,\n 5 /* RemoveFromEnd */,\n];\n/**\n * @internal\n * Entity Plugin helps handle all operations related to an entity and generate entity specified events\n */\nvar EntityPlugin = /** @class */ (function () {\n /**\n * Construct a new instance of EntityPlugin\n */\n function EntityPlugin() {\n var _this = this;\n this.handleCutEvent = function (event) {\n var range = _this.editor.getSelectionRange();\n if (range && !range.collapsed) {\n _this.checkRemoveEntityForRange(event);\n }\n };\n this.state = {\n knownEntityElements: [],\n shadowEntityCache: {},\n };\n }\n /**\n * Get a friendly name of this plugin\n */\n EntityPlugin.prototype.getName = function () {\n return 'Entity';\n };\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n EntityPlugin.prototype.initialize = function (editor) {\n this.editor = editor;\n };\n /**\n * Check if the plugin should handle the given event exclusively.\n * Handle an event exclusively means other plugin will not receive this event in\n * onPluginEvent method.\n * If two plugins will return true in willHandleEventExclusively() for the same event,\n * the final result depends on the order of the plugins are added into editor\n * @param event The event to check\n */\n EntityPlugin.prototype.willHandleEventExclusively = function (event) {\n var _a;\n return (event.eventType == 1 /* KeyPress */ &&\n !!((_a = event.rawEvent.target) === null || _a === void 0 ? void 0 : _a.shadowRoot));\n };\n /**\n * Dispose this plugin\n */\n EntityPlugin.prototype.dispose = function () {\n this.editor = null;\n this.state.knownEntityElements = [];\n };\n /**\n * Get plugin state object\n */\n EntityPlugin.prototype.getState = function () {\n return this.state;\n };\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n EntityPlugin.prototype.onPluginEvent = function (event) {\n switch (event.eventType) {\n case 6 /* MouseUp */:\n this.handleMouseUpEvent(event);\n break;\n case 0 /* KeyDown */:\n this.handleKeyDownEvent(event.rawEvent);\n break;\n case 9 /* BeforeCutCopy */:\n if (event.isCut) {\n this.handleCutEvent(event.rawEvent);\n }\n break;\n case 10 /* BeforePaste */:\n this.handleBeforePasteEvent(event.sanitizingOption);\n break;\n case 7 /* ContentChanged */:\n this.handleContentChangedEvent(event);\n break;\n case 11 /* EditorReady */:\n this.handleContentChangedEvent();\n break;\n case 8 /* ExtractContentWithDom */:\n this.handleExtractContentWithDomEvent(event.clonedRoot);\n break;\n case 16 /* ContextMenu */:\n this.handleContextMenuEvent(event.rawEvent);\n break;\n case 20 /* BeforeSetContent */:\n this.handleBeforeSetContentEvent();\n break;\n case 15 /* EntityOperation */:\n this.handleEntityOperationEvent(event);\n break;\n }\n };\n EntityPlugin.prototype.handleContextMenuEvent = function (event) {\n var node = event.target;\n var entityElement = node && this.editor.getElementAtCursor((0, roosterjs_editor_dom_1.getEntitySelector)(), node);\n if (entityElement) {\n event.preventDefault();\n this.triggerEvent(entityElement, 2 /* ContextMenu */, event);\n }\n };\n EntityPlugin.prototype.handleMouseUpEvent = function (event) {\n var rawEvent = event.rawEvent, isClicking = event.isClicking;\n var node = rawEvent.target;\n var entityElement;\n if (isClicking &&\n node &&\n !!(entityElement = this.editor.getElementAtCursor((0, roosterjs_editor_dom_1.getEntitySelector)(), node))) {\n this.triggerEvent(entityElement, 1 /* Click */, rawEvent);\n workaroundSelectionIssueForIE(this.editor);\n }\n };\n EntityPlugin.prototype.handleKeyDownEvent = function (event) {\n if ((0, roosterjs_editor_dom_1.isCharacterValue)(event) ||\n event.which == 8 /* BACKSPACE */ ||\n event.which == 46 /* DELETE */ ||\n event.which == 13 /* ENTER */) {\n var range = this.editor.getSelectionRange();\n if (range && !range.collapsed) {\n this.checkRemoveEntityForRange(event);\n }\n }\n };\n EntityPlugin.prototype.handleBeforePasteEvent = function (sanitizingOption) {\n var range = this.editor.getSelectionRange();\n if (!range.collapsed) {\n this.checkRemoveEntityForRange(null /*rawEvent*/);\n }\n (0, roosterjs_editor_dom_1.arrayPush)(sanitizingOption.additionalAllowedCssClasses, ALLOWED_CSS_CLASSES);\n };\n EntityPlugin.prototype.handleBeforeSetContentEvent = function () {\n this.cacheShadowEntities(this.state.shadowEntityCache);\n };\n EntityPlugin.prototype.handleContentChangedEvent = function (event) {\n var _this = this;\n // 1. find removed entities\n for (var i = this.state.knownEntityElements.length - 1; i >= 0; i--) {\n var element = this.state.knownEntityElements[i];\n if (!this.editor.contains(element)) {\n this.setIsEntityKnown(element, false /*isKnown*/);\n if (element.shadowRoot) {\n this.triggerEvent(element, 10 /* RemoveShadowRoot */);\n }\n }\n }\n // 2. collect all new entities\n var knownIds = this.state.knownEntityElements\n .map(function (e) { var _a; return (_a = (0, roosterjs_editor_dom_1.getEntityFromElement)(e)) === null || _a === void 0 ? void 0 : _a.id; })\n .filter(function (x) { return !!x; });\n var newEntities = (event === null || event === void 0 ? void 0 : event.source) == \"InsertEntity\" /* InsertEntity */ && event.data\n ? [event.data]\n : this.getExistingEntities().filter(function (_a) {\n var wrapper = _a.wrapper;\n return !_this.isEntityKnown(wrapper);\n });\n // 3. Add new entities to known entity list, and hydrate\n newEntities.forEach(function (entity) {\n var wrapper = entity.wrapper, type = entity.type, id = entity.id, isReadonly = entity.isReadonly;\n entity.id = _this.ensureUniqueId(type, id, knownIds);\n (0, roosterjs_editor_dom_1.commitEntity)(wrapper, type, isReadonly, entity.id); // Use entity.id here because it is newly updated\n _this.handleNewEntity(entity);\n });\n Object.keys(this.state.shadowEntityCache).forEach(function (id) {\n _this.triggerEvent(_this.state.shadowEntityCache[id], 6 /* Overwrite */);\n delete _this.state.shadowEntityCache[id];\n });\n };\n EntityPlugin.prototype.handleEntityOperationEvent = function (event) {\n var _this = this;\n var _a;\n if (REMOVE_ENTITY_OPERATIONS.indexOf(event.operation) >= 0) {\n (_a = this.cancelAsyncRun) === null || _a === void 0 ? void 0 : _a.call(this);\n this.cancelAsyncRun = this.editor.runAsync(function () {\n _this.cancelAsyncRun = null;\n _this.handleContentChangedEvent();\n });\n }\n };\n EntityPlugin.prototype.handleExtractContentWithDomEvent = function (root) {\n var _this = this;\n (0, roosterjs_editor_dom_1.toArray)(root.querySelectorAll((0, roosterjs_editor_dom_1.getEntitySelector)())).forEach(function (element) {\n element.removeAttribute('contentEditable');\n _this.triggerEvent(element, 8 /* ReplaceTemporaryContent */);\n });\n };\n EntityPlugin.prototype.checkRemoveEntityForRange = function (event) {\n var _this = this;\n var editableEntityElements = [];\n var selector = (0, roosterjs_editor_dom_1.getEntitySelector)();\n this.editor.queryElements(selector, 1 /* OnSelection */, function (element) {\n if (element.isContentEditable) {\n editableEntityElements.push(element);\n }\n else {\n _this.triggerEvent(element, 6 /* Overwrite */, event);\n }\n });\n // For editable entities, we need to check if it is fully or partially covered by current selection,\n // and trigger different events;\n if (editableEntityElements.length > 0) {\n var inSelectionEntityElements_1 = this.editor.queryElements(selector, 2 /* InSelection */);\n editableEntityElements.forEach(function (element) {\n var isFullyCovered = inSelectionEntityElements_1.indexOf(element) >= 0;\n _this.triggerEvent(element, isFullyCovered ? 6 /* Overwrite */ : 7 /* PartialOverwrite */, event);\n });\n }\n };\n EntityPlugin.prototype.triggerEvent = function (element, operation, rawEvent, contentForShadowEntity) {\n var entity = element && (0, roosterjs_editor_dom_1.getEntityFromElement)(element);\n if (entity) {\n this.editor.triggerPluginEvent(15 /* EntityOperation */, {\n operation: operation,\n rawEvent: rawEvent,\n entity: entity,\n contentForShadowEntity: contentForShadowEntity,\n });\n }\n };\n EntityPlugin.prototype.handleNewEntity = function (entity) {\n var wrapper = entity.wrapper;\n var fragment = this.editor.getDocument().createDocumentFragment();\n var cache = this.state.shadowEntityCache[entity.id];\n delete this.state.shadowEntityCache[entity.id];\n if (cache === null || cache === void 0 ? void 0 : cache.shadowRoot) {\n (0, roosterjs_editor_dom_1.moveChildNodes)(fragment, cache.shadowRoot);\n }\n this.triggerEvent(wrapper, 0 /* NewEntity */, undefined /*rawEvent*/, fragment);\n // If there is element to hydrate for shadow entity, create shadow root and mount these elements to shadow root\n // Then trigger AddShadowRoot so that plugins can do further actions\n if (fragment.firstChild) {\n if (wrapper.shadowRoot) {\n (0, roosterjs_editor_dom_1.moveChildNodes)(wrapper.shadowRoot, fragment);\n }\n else {\n this.createShadowRoot(wrapper, fragment);\n }\n }\n else if (wrapper.shadowRoot) {\n // If no elements to hydrate, remove existing shadow root by cloning a new node\n this.triggerEvent(wrapper, 10 /* RemoveShadowRoot */);\n var newWrapper = wrapper.cloneNode();\n (0, roosterjs_editor_dom_1.moveChildNodes)(newWrapper, wrapper);\n this.editor.replaceNode(wrapper, newWrapper);\n entity.wrapper = newWrapper;\n }\n this.setIsEntityKnown(entity.wrapper, true /*isKnown*/);\n };\n EntityPlugin.prototype.getExistingEntities = function (shadowEntityOnly) {\n return this.editor\n .queryElements((0, roosterjs_editor_dom_1.getEntitySelector)())\n .map(roosterjs_editor_dom_1.getEntityFromElement)\n .filter(function (x) { return !!x && (!shadowEntityOnly || !!x.wrapper.shadowRoot); });\n };\n EntityPlugin.prototype.createShadowRoot = function (wrapper, shadowContentContainer) {\n if (wrapper.attachShadow) {\n var shadowRoot = wrapper.attachShadow({\n mode: 'open',\n delegatesFocus: true,\n });\n wrapper.contentEditable = 'false';\n this.triggerEvent(wrapper, 9 /* AddShadowRoot */);\n (0, roosterjs_editor_dom_1.moveChildNodes)(shadowRoot, shadowContentContainer);\n return shadowRoot;\n }\n };\n EntityPlugin.prototype.cacheShadowEntities = function (cache) {\n this.getExistingEntities(true /*shadowEntityOnly*/).forEach(function (_a) {\n var wrapper = _a.wrapper, id = _a.id;\n cache[id] = wrapper;\n });\n };\n EntityPlugin.prototype.ensureUniqueId = function (type, id, knownIds) {\n var match = ENTITY_ID_REGEX.exec(id);\n var baseId = (match ? id.substr(0, id.length - match[0].length) : id) || type;\n // Make sure entity id is unique\n var newId = '';\n for (var num = (match && parseInt(match[1])) || 0;; num++) {\n newId = num > 0 ? baseId + \"_\" + num : baseId;\n if (knownIds.indexOf(newId) < 0) {\n knownIds.push(newId);\n break;\n }\n }\n return newId;\n };\n EntityPlugin.prototype.setIsEntityKnown = function (wrapper, isKnown) {\n var index = this.state.knownEntityElements.indexOf(wrapper);\n if (isKnown && index < 0) {\n this.state.knownEntityElements.push(wrapper);\n }\n else if (!isKnown && index >= 0) {\n this.state.knownEntityElements.splice(index, 1);\n }\n };\n EntityPlugin.prototype.isEntityKnown = function (wrapper) {\n return this.state.knownEntityElements.indexOf(wrapper) >= 0;\n };\n return EntityPlugin;\n}());\nexports.default = EntityPlugin;\n/**\n * IE will show a resize border around the readonly content within content editable DIV\n * This is a workaround to remove it by temporarily move focus out of editor\n */\nvar workaroundSelectionIssueForIE = roosterjs_editor_dom_1.Browser.isIE\n ? function (editor) {\n editor.runAsync(function (editor) {\n var workaroundButton = editor.getCustomData('ENTITY_IE_FOCUS_BUTTON', function () {\n var button = (0, roosterjs_editor_dom_1.createElement)({\n tag: 'button',\n style: 'overflow:hidden;position:fixed;width:0;height:0;top:-1000px',\n }, editor.getDocument());\n button.onblur = function () {\n button.style.display = 'none';\n };\n editor.insertNode(button, {\n position: 4 /* Outside */,\n });\n return button;\n });\n workaroundButton.style.display = '';\n (0, roosterjs_editor_dom_1.addRangeToSelection)((0, roosterjs_editor_dom_1.createRange)(workaroundButton, 0));\n });\n }\n : function () { };\n//# sourceMappingURL=EntityPlugin.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * Convert pasted content from PowerPoint\n * @param event The BeforePaste event\n */\nfunction convertPastedContentFromPowerPoint(event, trustedHTMLHandler) {\n var fragment = event.fragment, clipboardData = event.clipboardData;\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 var doc = new DOMParser().parseFromString(trustedHTMLHandler(clipboardData.html), 'text/html');\n (0, roosterjs_editor_dom_1.moveChildNodes)(fragment, doc === null || doc === void 0 ? void 0 : doc.body);\n }\n}\nexports.default = convertPastedContentFromPowerPoint;\n//# sourceMappingURL=convertPastedContentFromPowerPoint.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resetImage = exports.isResizedTo = exports.resizeByPercentage = exports.canRegenerateImage = exports.ImageEdit = void 0;\nvar ImageEdit_1 = require(\"./ImageEdit\");\nObject.defineProperty(exports, \"ImageEdit\", { enumerable: true, get: function () { return ImageEdit_1.default; } });\nvar canRegenerateImage_1 = require(\"./api/canRegenerateImage\");\nObject.defineProperty(exports, \"canRegenerateImage\", { enumerable: true, get: function () { return canRegenerateImage_1.default; } });\nvar resizeByPercentage_1 = require(\"./api/resizeByPercentage\");\nObject.defineProperty(exports, \"resizeByPercentage\", { enumerable: true, get: function () { return resizeByPercentage_1.default; } });\nvar isResizedTo_1 = require(\"./api/isResizedTo\");\nObject.defineProperty(exports, \"isResizedTo\", { enumerable: true, get: function () { return isResizedTo_1.default; } });\nvar resetImage_1 = require(\"./api/resetImage\");\nObject.defineProperty(exports, \"resetImage\", { enumerable: true, get: function () { return resetImage_1.default; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./plugins/Watermark/index\"), exports);\n//# sourceMappingURL=Watermark.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Indentation = void 0;\n/**\n * The enum used for increase or decrease indentation of a block\n * Used by setIndentation API\n */\nvar Indentation;\n(function (Indentation) {\n /**\n * Increase indentation\n */\n Indentation[Indentation[\"Increase\"] = 0] = \"Increase\";\n /**\n * Decrease indentation\n */\n Indentation[Indentation[\"Decrease\"] = 1] = \"Decrease\";\n})(Indentation = exports.Indentation || (exports.Indentation = {}));\n//# sourceMappingURL=Indentation.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar arrayPush_1 = require(\"../utils/arrayPush\");\nvar getRootListNode_1 = require(\"./getRootListNode\");\nvar isNodeAfter_1 = require(\"../utils/isNodeAfter\");\nvar isNodeInRegion_1 = require(\"../region/isNodeInRegion\");\nvar queryElements_1 = require(\"../utils/queryElements\");\nvar VList_1 = require(\"./VList\");\nvar CHAIN_NAME_PREFIX = '__List_Chain_';\nvar CHAIN_DATASET_NAME = 'listchain';\nvar AFTER_CURSOR_DATASET_NAME = 'listchainafter';\nvar lastChainIndex = 0;\n/**\n * Represent a chain of list nodes.\n * A chain of lists is a virtual link of lists that have continuous numbers, when editor one of them,\n * all others should also be updated in order to main the list number to be continuous.\n */\nvar VListChain = /** @class */ (function () {\n /**\n * Construct a new instance of VListChain class\n * @param editor Editor object\n */\n function VListChain(region, name) {\n this.region = region;\n this.name = name;\n this.lastNumber = 0;\n this.lastNumberBeforeCursor = 0;\n }\n /**\n * Create an array of VListChain from current region in editor\n * @param region The region to create VListChain from\n * @param currentNode Optional current node, used for mark lists that are after this node\n * @param nameGenerator Used by test code only\n */\n VListChain.createListChains = function (region, currentNode, nameGenerator) {\n var regions = Array.isArray(region) ? region : region ? [region] : [];\n var result = [];\n regions.forEach(function (region) {\n var chains = [];\n var lastList;\n (0, queryElements_1.default)(region.rootNode, 'ol', function (ol) {\n var list = (0, getRootListNode_1.default)(region, 'ol', ol);\n if (lastList != list) {\n var chain = chains.filter(function (c) { return c.canAppendToTail(list); })[0] ||\n new VListChain(region, (nameGenerator || createListChainName)());\n var index = chains.indexOf(chain);\n var afterCurrentNode = currentNode && (0, isNodeAfter_1.default)(list, currentNode);\n if (!afterCurrentNode) {\n // Make sure current one is at the front if current block has not been met, so that\n // the first chain is always the nearest one from current node\n if (index >= 0) {\n chains.splice(index, 1);\n }\n chains.unshift(chain);\n }\n else if (index < 0) {\n chains.push(chain);\n }\n chain.append(list, afterCurrentNode);\n lastList = list;\n }\n });\n (0, arrayPush_1.default)(result, chains);\n });\n return result;\n };\n /**\n * Check if a list with the given start number can be appended next to the last list before cursor\n * @param startNumber The start number of the new list\n */\n VListChain.prototype.canAppendAtCursor = function (startNumber) {\n return startNumber > 1 && this.lastNumberBeforeCursor + 1 == startNumber;\n };\n /**\n * Create a VList to wrap the block of the given node, and append to current chain\n * @param container The container node to create list at\n * @param startNumber Start number of the new list\n */\n VListChain.prototype.createVListAtBlock = function (container, startNumber) {\n if (container) {\n var list = container.ownerDocument.createElement('ol');\n list.start = startNumber;\n this.applyChainName(list);\n container.parentNode.insertBefore(list, container);\n var vList = new VList_1.default(list);\n vList.appendItem(container, 0 /* None */);\n return vList;\n }\n else {\n return null;\n }\n };\n /**\n * After change the lists, commit the change to all lists in this chain to update the list number,\n * and clear the temporary dataset values added to list node\n */\n VListChain.prototype.commit = function () {\n var lists = this.getLists();\n var lastNumber = 0;\n for (var i = 0; i < lists.length; i++) {\n var list = lists[i];\n list.start = lastNumber + 1;\n var vlist = new VList_1.default(list);\n lastNumber = vlist.getLastItemNumber();\n delete list.dataset[CHAIN_DATASET_NAME];\n delete list.dataset[AFTER_CURSOR_DATASET_NAME];\n vlist.writeBack();\n }\n };\n /**\n * Check if the given list node is can be appended into current list chain\n * @param list The list node to check\n */\n VListChain.prototype.canAppendToTail = function (list) {\n return this.lastNumber + 1 == list.start;\n };\n /**\n * Append the given list node into this VListChain\n * @param list The list node to append\n * @param isAfterCurrentNode Whether this list is after current node\n */\n VListChain.prototype.append = function (list, isAfterCurrentNode) {\n this.applyChainName(list);\n this.lastNumber = new VList_1.default(list).getLastItemNumber();\n if (isAfterCurrentNode) {\n list.dataset[AFTER_CURSOR_DATASET_NAME] = 'true';\n }\n else {\n this.lastNumberBeforeCursor = this.lastNumber;\n }\n };\n VListChain.prototype.applyChainName = function (list) {\n list.dataset[CHAIN_DATASET_NAME] = this.name;\n };\n VListChain.prototype.getLists = function () {\n var _this = this;\n return (0, queryElements_1.default)(this.region.rootNode, \"ol[data-\" + CHAIN_DATASET_NAME + \"=\" + this.name + \"]\").filter(function (node) { return (0, isNodeInRegion_1.default)(_this.region, node); });\n };\n return VListChain;\n}());\nexports.default = VListChain;\nfunction createListChainName() {\n return CHAIN_NAME_PREFIX + lastChainIndex++;\n}\n//# sourceMappingURL=VListChain.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Watermark = void 0;\nvar Watermark_1 = require(\"./Watermark\");\nObject.defineProperty(exports, \"Watermark\", { enumerable: true, get: function () { return Watermark_1.default; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createListItemBlock = void 0;\n/**\n * @internal\n * Initialize an empty ListItemBlock\n */\nfunction createListItemBlock(listItem) {\n if (listItem === void 0) { listItem = null; }\n return {\n startElement: listItem,\n endElement: listItem,\n insertPositionNode: null,\n listItemContainers: listItem ? [listItem] : [],\n };\n}\nexports.createListItemBlock = createListItemBlock;\n//# sourceMappingURL=ListItemBlock.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * Insert an entity into editor.\n * @param editor The editor to insert entity into.\n * @param type Type of the entity\n * @param contentNode Root element of the entity\n * @param isBlock Whether the entity will be shown as a block\n * @param isReadonly Whether the entity will be a readonly entity\n * @param position (Optional) The position to insert into. If not specified, current position will be used.\n * If isBlock is true, entity will be insert below this position\n */\nfunction insertEntity(editor, type, contentNode, isBlock, isReadonly, position) {\n var wrapper = (0, roosterjs_editor_dom_1.wrap)(contentNode, isBlock ? 'DIV' : 'SPAN');\n // For inline & readonly entity, we need to set display to \"inline-block\" otherwise\n // there will be some weird behavior when move cursor around the entity node.\n // And we should only do this for readonly entity since \"inline-block\" has some side effect\n // in IE that there will be a resize border around the inline-block element. We made some\n // workaround for readonly entity for this issue but for editable entity, keep it as \"inline\"\n // will just work fine.\n if (!isBlock && isReadonly) {\n wrapper.style.display = 'inline-block';\n }\n (0, roosterjs_editor_dom_1.commitEntity)(wrapper, type, isReadonly);\n if (!editor.contains(wrapper)) {\n var currentRange = void 0;\n var contentPosition = void 0;\n if (typeof position == 'number') {\n contentPosition = position;\n }\n else if (position) {\n currentRange = editor.getSelectionRange();\n var node = position.normalize().node;\n var existingEntity = node && editor.getElementAtCursor((0, roosterjs_editor_dom_1.getEntitySelector)(), node);\n // Do not insert entity into another entity\n if (existingEntity) {\n position = new roosterjs_editor_dom_1.Position(existingEntity, -3 /* After */);\n }\n editor.select(position);\n contentPosition = 3 /* SelectionStart */;\n }\n else {\n editor.focus();\n contentPosition = 3 /* SelectionStart */;\n }\n editor.insertNode(wrapper, {\n updateCursor: false,\n insertOnNewLine: isBlock,\n replaceSelection: true,\n position: contentPosition,\n });\n if (contentPosition == 3 /* SelectionStart */) {\n if (currentRange) {\n editor.select(currentRange);\n }\n else if (!isBlock) {\n editor.select(wrapper, -3 /* After */);\n }\n }\n }\n if (isBlock) {\n // Insert an extra empty line for block entity to make sure\n // user can still put cursor below the entity.\n var br = editor.getDocument().createElement('BR');\n wrapper.parentNode.insertBefore(br, wrapper.nextSibling);\n }\n var entity = (0, roosterjs_editor_dom_1.getEntityFromElement)(wrapper);\n editor.triggerContentChangedEvent(\"InsertEntity\" /* InsertEntity */, entity);\n return entity;\n}\nexports.default = insertEntity;\n//# sourceMappingURL=insertEntity.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar applyListItemWrap_1 = require(\"../utils/applyListItemWrap\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * Set text color at selection\n * @param editor The editor instance\n * @param color One of two options:\n * The color string, can be any of the predefined color names (e.g, 'red')\n * or hexadecimal color string (e.g, '#FF0000') or rgb value (e.g, 'rgb(255, 0, 0)') supported by browser.\n * Currently there's no validation to the string, if the passed string is invalid, it won't take affect\n * Alternatively, you can pass a @typedef ModeIndependentColor. If in light mode, the lightModeColor property will be used.\n * If in dark mode, the darkModeColor will be used and the lightModeColor will be used when converting back to light mode.\n * @param shouldApplyInlineStyle Optional callback function to be invoked to verify if the current element should have the inline Style applied\n */\nfunction setTextColor(editor, color, shouldApplyInlineStyle) {\n (0, applyListItemWrap_1.default)(editor, 'color', function (element, isInnerNode) {\n if (!shouldApplyInlineStyle || shouldApplyInlineStyle(element)) {\n (0, roosterjs_editor_dom_1.setColor)(element, isInnerNode ? '' : color, false /*isBackground*/, editor.isDarkMode());\n }\n });\n}\nexports.default = setTextColor;\n//# sourceMappingURL=setTextColor.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Set image alt text for all selected images at selection. If no images is contained\n * in selection, do nothing.\n * The alt attribute provides alternative information for an image if a user for some reason\n * cannot view it (because of slow connection, an error in the src attribute, or if the user\n * uses a screen reader). See https://www.w3schools.com/tags/att_img_alt.asp\n * @param editor The editor instance\n * @param altText The image alt text\n */\nfunction setImageAltText(editor, altText) {\n editor.focus();\n editor.addUndoSnapshot(function () {\n editor.queryElements('img', 1 /* OnSelection */, function (node) {\n return node.setAttribute('alt', altText);\n });\n }, \"Format\" /* Format */);\n}\nexports.default = setImageAltText;\n//# sourceMappingURL=setImageAltText.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(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))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (this && this.__spreadArray) || function (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};\nvar _a, _b;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar applyChange_1 = require(\"./editInfoUtils/applyChange\");\nvar canRegenerateImage_1 = require(\"./api/canRegenerateImage\");\nvar DragAndDropHelper_1 = require(\"../../pluginUtils/DragAndDropHelper\");\nvar getGeneratedImageSize_1 = require(\"./editInfoUtils/getGeneratedImageSize\");\nvar Cropper_1 = require(\"./imageEditors/Cropper\");\nvar editInfo_1 = require(\"./editInfoUtils/editInfo\");\nvar Rotator_1 = require(\"./imageEditors/Rotator\");\nvar roosterjs_editor_api_1 = require(\"roosterjs-editor-api\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar Resizer_1 = require(\"./imageEditors/Resizer\");\nvar SHIFT_KEYCODE = 16;\nvar CTRL_KEYCODE = 17;\nvar ALT_KEYCODE = 18;\nvar DIRECTIONS = 8;\nvar DirectionRad = (Math.PI * 2) / DIRECTIONS;\nvar DirectionOrder = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'];\n/**\n * Map the experimental features to image edit operations to help determine which operation is allowed\n */\nvar FeatureToOperationMap = (_a = {},\n _a[\"SingleDirectionResize\" /* SingleDirectionResize */] = 2 /* SideResize */,\n _a[\"ImageRotate\" /* ImageRotate */] = 4 /* Rotate */,\n _a[\"ImageCrop\" /* ImageCrop */] = 8 /* Crop */,\n _a);\n/**\n * Default image edit options\n */\nvar DefaultOptions = {\n borderColor: '#DB626C',\n minWidth: 10,\n minHeight: 10,\n preserveRatio: false,\n minRotateDeg: 5,\n imageSelector: 'img',\n rotateIconHTML: null,\n};\n/**\n * Map the image edit operation to a function that returns editing elements HTML to help\n * build image editing UI\n */\nvar ImageEditHTMLMap = (_b = {},\n _b[1 /* CornerResize */] = Resizer_1.getCornerResizeHTML,\n _b[2 /* SideResize */] = Resizer_1.getSideResizeHTML,\n _b[4 /* Rotate */] = Rotator_1.getRotateHTML,\n _b[8 /* Crop */] = Cropper_1.getCropHTML,\n _b);\n/**\n * Image edit entity name\n */\nvar IMAGE_EDIT_WRAPPER_ENTITY_TYPE = 'IMAGE_EDIT_WRAPPER';\n/**\n * Default background colors for rotate handle\n */\nvar LIGHT_MODE_BGCOLOR = 'white';\nvar DARK_MODE_BGCOLOR = '#333';\n/**\n * ImageEdit plugin provides the ability to edit an inline image in editor, including image resizing, rotation and cropping\n */\nvar ImageEdit = /** @class */ (function () {\n /**\n * Create a new instance of ImageEdit\n * @param options Image editing options\n */\n function ImageEdit(options) {\n var _this = this;\n // Allowed editing operations\n this.allowedOperations = 1 /* CornerResize */;\n /**\n * quit editing mode when editor lose focus\n */\n this.onBlur = function () {\n _this.setEditingImage(null);\n };\n /**\n * Remove the temp wrapper of the image\n * @param wrapper The wrapper object to remove. If not specified, remove all existing wrappers.\n */\n this.removeWrapper = function (wrapper) {\n var parent = wrapper === null || wrapper === void 0 ? void 0 : wrapper.parentNode;\n var img = wrapper === null || wrapper === void 0 ? void 0 : wrapper.querySelector('img');\n if (img && parent) {\n img.style.position = '';\n img.style.margin = null;\n img.style.textAlign = null;\n parent.insertBefore(img, wrapper);\n parent.removeChild(wrapper);\n }\n };\n /**\n * Update image edit elements to reflect current editing result\n * @param context\n */\n this.updateWrapper = function (context) {\n var wrapper = _this.getImageWrapper(_this.image);\n if (wrapper) {\n // Prepare: get related editing elements\n var cropContainers = getEditElements(wrapper, \"r_cropC\" /* CropContainer */);\n var cropOverlays = getEditElements(wrapper, \"r_cropO\" /* CropOverlay */);\n var rotateCenter = getEditElements(wrapper, \"r_rotateC\" /* RotateCenter */)[0];\n var rotateHandle = getEditElements(wrapper, \"r_rotateH\" /* RotateHandle */)[0];\n var resizeHandles = getEditElements(wrapper, \"r_resizeH\" /* ResizeHandle */);\n var cropHandles = getEditElements(wrapper, \"r_cropH\" /* CropHandle */);\n // Cropping and resizing will show different UI, so check if it is cropping here first\n var isCropping = cropContainers.length == 1 && cropOverlays.length == 4;\n var _a = _this.editInfo, angleRad = _a.angleRad, bottomPercent = _a.bottomPercent, leftPercent = _a.leftPercent, rightPercent = _a.rightPercent, topPercent = _a.topPercent;\n // Width/height of the image\n var _b = (0, getGeneratedImageSize_1.default)(_this.editInfo, isCropping), targetWidth = _b.targetWidth, targetHeight = _b.targetHeight, originalWidth = _b.originalWidth, originalHeight = _b.originalHeight, visibleWidth = _b.visibleWidth, visibleHeight = _b.visibleHeight;\n var marginHorizontal = (targetWidth - visibleWidth) / 2;\n var marginVertical = (targetHeight - visibleHeight) / 2;\n var cropLeftPx = originalWidth * leftPercent;\n var cropRightPx = originalWidth * rightPercent;\n var cropTopPx = originalHeight * topPercent;\n var cropBottomPx = originalHeight * bottomPercent;\n // Update size and margin of the wrapper\n wrapper.style.width = getPx(visibleWidth);\n wrapper.style.height = getPx(visibleHeight);\n wrapper.style.margin = marginVertical + \"px \" + marginHorizontal + \"px\";\n wrapper.style.transform = \"rotate(\" + angleRad + \"rad)\";\n // Update the text-alignment to avoid the image to overflow if the parent element have align center or right\n // or if the direction is Right To Left\n wrapper.style.textAlign = isRtl(wrapper.parentNode) ? 'right' : 'left';\n // Update size of the image\n _this.image.style.width = getPx(originalWidth);\n _this.image.style.height = getPx(originalHeight);\n if (isCropping) {\n // For crop, we also need to set position of the overlays\n setSize(cropContainers[0], cropLeftPx, cropTopPx, cropRightPx, cropBottomPx, undefined, undefined);\n setSize(cropOverlays[0], 0, 0, cropRightPx, undefined, undefined, cropTopPx);\n setSize(cropOverlays[1], undefined, 0, 0, cropBottomPx, cropRightPx, undefined);\n setSize(cropOverlays[2], cropLeftPx, undefined, 0, 0, undefined, cropBottomPx);\n setSize(cropOverlays[3], 0, cropTopPx, undefined, 0, cropLeftPx, undefined);\n updateHandleCursor(cropHandles, angleRad);\n }\n else {\n // For rotate/resize, set the margin of the image so that cropped part won't be visible\n _this.image.style.margin = -cropTopPx + \"px 0 0 \" + -cropLeftPx + \"px\";\n // Double check resize\n if ((context === null || context === void 0 ? void 0 : context.elementClass) == \"r_resizeH\" /* ResizeHandle */) {\n var clientWidth = wrapper.clientWidth;\n var clientHeight = wrapper.clientHeight;\n _this.wasResized = true;\n (0, Resizer_1.doubleCheckResize)(_this.editInfo, _this.options.preserveRatio, clientWidth, clientHeight);\n _this.updateWrapper();\n }\n (0, Rotator_1.updateRotateHandlePosition)(_this.editInfo, _this.editor.getRelativeDistanceToEditor(wrapper, true /*addScroll*/), marginVertical, rotateCenter, rotateHandle);\n updateHandleCursor(resizeHandles, angleRad);\n }\n }\n };\n this.options = __assign(__assign({}, DefaultOptions), (options || {}));\n }\n /**\n * Get a friendly name of this plugin\n */\n ImageEdit.prototype.getName = function () {\n return 'ImageEdit';\n };\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n ImageEdit.prototype.initialize = function (editor) {\n var _this = this;\n this.editor = editor;\n this.disposer = editor.addDomEventHandler('blur', this.onBlur);\n // Read current enabled features from editor to determine which editing operations are allowed\n Object.keys(FeatureToOperationMap).forEach(function (key) {\n _this.allowedOperations |= _this.editor.isFeatureEnabled(key)\n ? FeatureToOperationMap[key]\n : 0;\n });\n };\n /**\n * Dispose this plugin\n */\n ImageEdit.prototype.dispose = function () {\n this.clearDndHelpers();\n this.disposer();\n this.disposer = null;\n this.editor = null;\n };\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n ImageEdit.prototype.onPluginEvent = function (e) {\n switch (e.eventType) {\n case 5 /* MouseDown */:\n this.setEditingImage(null);\n break;\n case 6 /* MouseUp */:\n var target = e.rawEvent.target;\n if (e.isClicking &&\n e.rawEvent.button == 0 &&\n (0, roosterjs_editor_dom_1.safeInstanceOf)(target, 'HTMLImageElement') &&\n target.isContentEditable &&\n (0, roosterjs_editor_dom_1.matchesSelector)(target, this.options.imageSelector)) {\n this.setEditingImage(target, 7 /* ResizeAndRotate */);\n }\n break;\n case 0 /* KeyDown */:\n var key = e.rawEvent.which;\n if (key == 46 /* DELETE */ || key == 8 /* BACKSPACE */) {\n // Set current editing image to null and select the image if any, and do not prevent default of the event\n // so that browser will delete the selected image for us\n this.setEditingImage(null, true /*selectImage*/);\n }\n else if (key == 27 /* ESCAPE */ && this.image) {\n // Press ESC should cancel current editing operation, resume back to original edit info\n this.editInfo = (0, editInfo_1.getEditInfoFromImage)(this.image);\n this.setEditingImage(null);\n e.rawEvent.preventDefault();\n }\n else if (key != SHIFT_KEYCODE && key != CTRL_KEYCODE && key != ALT_KEYCODE) {\n // For other key, just unselect current image and select it. If this is an input key, the image will be replaced\n this.setEditingImage(null, true /*selectImage*/);\n }\n break;\n case 7 /* ContentChanged */:\n if (e.source != \"InsertEntity\" /* InsertEntity */ ||\n e.data.type != IMAGE_EDIT_WRAPPER_ENTITY_TYPE) {\n // After contentChanged event, the current image wrapper may not be valid any more, remove all of them if any\n this.editor.queryElements((0, roosterjs_editor_dom_1.getEntitySelector)(IMAGE_EDIT_WRAPPER_ENTITY_TYPE), this.removeWrapper);\n }\n break;\n case 15 /* EntityOperation */:\n if (e.entity.type == IMAGE_EDIT_WRAPPER_ENTITY_TYPE) {\n if (e.operation == 8 /* ReplaceTemporaryContent */) {\n this.removeWrapper(e.entity.wrapper);\n }\n else if (e.operation == 1 /* Click */) {\n e.rawEvent.preventDefault();\n }\n }\n break;\n case 8 /* ExtractContentWithDom */:\n // When extract content, remove all image info since they may not be valid when load the content again\n (0, roosterjs_editor_dom_1.toArray)(e.clonedRoot.querySelectorAll(this.options.imageSelector)).forEach(function (img) {\n (0, editInfo_1.deleteEditInfo)(img);\n });\n break;\n }\n };\n ImageEdit.prototype.setEditingImage = function (image, operationOrSelect) {\n var _this = this;\n var operation = typeof operationOrSelect === 'number' ? operationOrSelect : 0 /* None */;\n var selectImage = typeof operationOrSelect === 'number' ? false : !!operationOrSelect;\n if (this.image) {\n // When there is image in editing, clean up any cached objects and elements\n this.clearDndHelpers();\n // Apply the changes, and add undo snapshot if necessary\n if ((0, applyChange_1.default)(this.editor, this.image, this.editInfo, this.lastSrc, this.wasResized)) {\n this.editor.addUndoSnapshot(function () { return _this.image; }, \"ImageResize\" /* ImageResize */);\n }\n // Remove editing wrapper\n var wrapper = this.getImageWrapper(this.image);\n if (wrapper) {\n this.removeWrapper(wrapper);\n }\n if (selectImage) {\n this.editor.select(this.image);\n }\n this.image = null;\n this.editInfo = null;\n this.lastSrc = null;\n }\n if (!this.image && (image === null || image === void 0 ? void 0 : image.isContentEditable)) {\n // If there is new image to edit, enter editing mode for this image\n this.editor.addUndoSnapshot();\n this.image = image;\n // Get initial edit info\n this.editInfo = (0, editInfo_1.getEditInfoFromImage)(image);\n //Check if the image was resized by the user\n this.wasResized = checkIfImageWasResized(this.image);\n operation =\n ((0, canRegenerateImage_1.default)(image) ? operation : 3 /* Resize */) &\n this.allowedOperations;\n // Create and update editing wrapper and elements\n var wrapper = this.createWrapper(operation);\n this.updateWrapper();\n // Init drag and drop\n this.dndHelpers = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], this.createDndHelpers(\"r_resizeH\" /* ResizeHandle */, Resizer_1.Resizer), true), this.createDndHelpers(\"r_rotateH\" /* RotateHandle */, Rotator_1.Rotator), true), this.createDndHelpers(\"r_cropH\" /* CropHandle */, Cropper_1.Cropper), true), this.createDndHelpers(\"r_cropC\" /* CropContainer */, Cropper_1.Cropper), true);\n // Put cursor next to the image\n this.editor.select(wrapper, -3 /* After */);\n }\n };\n /**\n * Create editing wrapper for the image\n */\n ImageEdit.prototype.createWrapper = function (operation) {\n var _this = this;\n // Wrap the image with an entity so that we can easily retrieve it later\n var wrapper = (0, roosterjs_editor_api_1.insertEntity)(this.editor, IMAGE_EDIT_WRAPPER_ENTITY_TYPE, (0, roosterjs_editor_dom_1.wrap)(this.image, 6 /* ImageEditWrapper */), false /*isBlock*/, true /*isReadonly*/).wrapper;\n wrapper.style.position = 'relative';\n wrapper.style.maxWidth = '100%';\n wrapper.style.verticalAlign = 'bottom';\n wrapper.style.display = roosterjs_editor_dom_1.Browser.isSafari ? 'inline-block' : 'inline-flex';\n // Cache current src so that we can compare it after edit see if src is changed\n this.lastSrc = this.image.getAttribute('src');\n // Set image src to original src to help show editing UI, also it will be used when regenerate image dataURL after editing\n this.image.src = this.editInfo.src;\n this.image.style.position = 'absolute';\n this.image.style.maxWidth = null;\n // Get HTML for all edit elements (resize handle, rotate handle, crop handle and overlay, ...) and create HTML element\n var options = {\n borderColor: this.options.borderColor,\n rotateIconHTML: this.options.rotateIconHTML,\n rotateHandleBackColor: this.editor.isDarkMode()\n ? DARK_MODE_BGCOLOR\n : LIGHT_MODE_BGCOLOR,\n };\n var htmlData = [];\n Object.keys(ImageEditHTMLMap).forEach(function (thisOperation) {\n if ((operation & thisOperation) == thisOperation) {\n (0, roosterjs_editor_dom_1.arrayPush)(htmlData, ImageEditHTMLMap[thisOperation](options));\n }\n });\n htmlData.forEach(function (data) {\n var element = (0, roosterjs_editor_dom_1.createElement)(data, _this.image.ownerDocument);\n if (element) {\n wrapper.appendChild(element);\n }\n });\n return wrapper;\n };\n /**\n * Get image wrapper from image\n * @param image The image to get wrapper from\n */\n ImageEdit.prototype.getImageWrapper = function (image) {\n var _a;\n // Get the image wrapper from image using Entity API\n var entity = (0, roosterjs_editor_dom_1.getEntityFromElement)((_a = image === null || image === void 0 ? void 0 : image.parentNode) === null || _a === void 0 ? void 0 : _a.parentNode);\n return (entity === null || entity === void 0 ? void 0 : entity.type) == IMAGE_EDIT_WRAPPER_ENTITY_TYPE ? entity.wrapper : null;\n };\n /**\n * Create drag and drop helpers\n * @param wrapper\n * @param elementClass\n * @param dragAndDrop\n */\n ImageEdit.prototype.createDndHelpers = function (elementClass, dragAndDrop) {\n var _this = this;\n var commonContext = {\n editInfo: this.editInfo,\n options: this.options,\n elementClass: elementClass,\n };\n var wrapper = this.getImageWrapper(this.image);\n return wrapper\n ? getEditElements(wrapper, elementClass).map(function (element) {\n return new DragAndDropHelper_1.default(element, __assign(__assign({}, commonContext), { x: element.dataset.x, y: element.dataset.y }), _this.updateWrapper, dragAndDrop, _this.editor.getZoomScale());\n })\n : [];\n };\n /**\n * Clean up drag and drop helpers\n */\n ImageEdit.prototype.clearDndHelpers = function () {\n var _a;\n (_a = this.dndHelpers) === null || _a === void 0 ? void 0 : _a.forEach(function (helper) { return helper.dispose(); });\n this.dndHelpers = null;\n };\n return ImageEdit;\n}());\nexports.default = ImageEdit;\nfunction setSize(element, left, top, right, bottom, width, height) {\n element.style.left = getPx(left);\n element.style.top = getPx(top);\n element.style.right = getPx(right);\n element.style.bottom = getPx(bottom);\n element.style.width = getPx(width);\n element.style.height = getPx(height);\n}\nfunction getPx(value) {\n return value === undefined ? null : value + 'px';\n}\nfunction getEditElements(wrapper, elementClass) {\n return (0, roosterjs_editor_dom_1.toArray)(wrapper.querySelectorAll('.' + elementClass));\n}\nfunction isRtl(element) {\n return (0, roosterjs_editor_dom_1.safeInstanceOf)(element, 'HTMLElement')\n ? (0, roosterjs_editor_dom_1.getComputedStyle)(element, 'direction') == 'rtl'\n : false;\n}\nfunction handleRadIndexCalculator(angleRad) {\n var idx = Math.round(angleRad / DirectionRad) % DIRECTIONS;\n return idx < 0 ? idx + DIRECTIONS : idx;\n}\nfunction rotateHandles(element, angleRad) {\n var radIndex = handleRadIndexCalculator(angleRad);\n var originalDirection = element.dataset.y + element.dataset.x;\n var originalIndex = DirectionOrder.indexOf(originalDirection);\n var rotatedIndex = originalIndex >= 0 && originalIndex + radIndex;\n return DirectionOrder[rotatedIndex % DIRECTIONS];\n}\n/**\n * Rotate the resizer and cropper handles according to the image position.\n * @param handles The resizer handles.\n * @param angleRad The angle that the image was rotated.\n */\nfunction updateHandleCursor(handles, angleRad) {\n handles.map(function (handle) {\n handle.style.cursor = rotateHandles(handle, angleRad) + \"-resize\";\n });\n}\n/**\n * Check if the current image was resized by the user\n * @param image the current image\n * @returns if the user resized the image, returns true, otherwise, returns false\n */\nfunction checkIfImageWasResized(image) {\n var width = image.width, height = image.height, style = image.style;\n var isMaxWidthInitial = style.maxWidth === '' || style.maxWidth === 'initial' || style.maxWidth === 'auto';\n if (isMaxWidthInitial &&\n (isFixedNumberValue(style.height) ||\n isFixedNumberValue(style.width) ||\n isFixedNumberValue(width) ||\n isFixedNumberValue(height))) {\n return true;\n }\n else {\n return false;\n }\n}\nfunction isFixedNumberValue(value) {\n var numberValue = typeof value === 'string' ? parseInt(value) : value;\n return !isNaN(numberValue);\n}\n//# sourceMappingURL=ImageEdit.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ExperimentalFeatures = void 0;\n/**\n * Experimental feature flags\n */\nvar ExperimentalFeatures;\n(function (ExperimentalFeatures) {\n /**\n * @deprecated This feature is always enabled\n */\n ExperimentalFeatures[\"NewIndentation\"] = \"NewIndentation\";\n /**\n * @deprecated This feature is always enabled\n */\n ExperimentalFeatures[\"NewBullet\"] = \"NewBullet\";\n /**\n * @deprecated This feature is always enabled\n */\n ExperimentalFeatures[\"NewNumbering\"] = \"NewNumbering\";\n /**\n * @deprecated This feature is always enabled\n */\n ExperimentalFeatures[\"ListChain\"] = \"ListChain\";\n /**\n * @deprecated This feature is always enabled\n */\n ExperimentalFeatures[\"MergePastedLine\"] = \"MergePastedLine\";\n /**\n * Resize an image horizontally or vertically\n */\n ExperimentalFeatures[\"SingleDirectionResize\"] = \"SingleDirectionResize\";\n /**\n * Try retrieve link preview information when paste\n */\n ExperimentalFeatures[\"PasteWithLinkPreview\"] = \"PasteWithLinkPreview\";\n /**\n * Rotate an inline image (requires ImageEdit plugin)\n */\n ExperimentalFeatures[\"ImageRotate\"] = \"ImageRotate\";\n /**\n * Crop an inline image (requires ImageEdit plugin)\n */\n ExperimentalFeatures[\"ImageCrop\"] = \"ImageCrop\";\n /**\n * Check if the element has a style attribute, if not, apply the default format\n */\n ExperimentalFeatures[\"AlwaysApplyDefaultFormat\"] = \"AlwaysApplyDefaultFormat\";\n /**\n * Paste the Html instead of the Img when the Html Body only have one IMG Child node\n */\n ExperimentalFeatures[\"ConvertSingleImageBody\"] = \"ConvertSingleImageBody\";\n /**\n * Align table elements to left, center and right using setAlignment API\n */\n ExperimentalFeatures[\"TableAlignment\"] = \"TableAlignment\";\n})(ExperimentalFeatures = exports.ExperimentalFeatures || (exports.ExperimentalFeatures = {}));\n//# sourceMappingURL=ExperimentalFeatures.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar collapseNodes_1 = require(\"../utils/collapseNodes\");\nvar contains_1 = require(\"../utils/contains\");\nvar getTagOfNode_1 = require(\"../utils/getTagOfNode\");\nvar isBlockElement_1 = require(\"../utils/isBlockElement\");\nvar NodeBlockElement_1 = require(\"./NodeBlockElement\");\nvar StartEndBlockElement_1 = require(\"./StartEndBlockElement\");\n/**\n * This produces a block element from a a node\n * It needs to account for various HTML structure. Examples:\n * 1) <root><div>abc</div></root>\n * This is most common the case, user passes in a node pointing to abc, and get back a block representing <div>abc</div>\n * 2) <root><p><br></p></root>\n * Common content for empty block, user passes node pointing to <br>, and get back a block representing <p><br></p>\n * 3) <root>abc</root>\n * Not common, but does happen. It is still a block in user's view. User passes in abc, and get back a start-end block representing abc\n * NOTE: abc could be just one node. However, since it is not a html block, it is more appropriate to use start-end block although they point to same node\n * 4) <root><div>abc<br>123</div></root>\n * A bit tricky, but can happen when user use Ctrl+Enter which simply inserts a <BR> to create a link break. There're two blocks:\n * block1: 1) abc<br> block2: 123\n * 5) <root><div>abc<div>123</div></div></root>\n * Nesting div and there is text node in same level as a DIV. Two blocks: 1) abc 2) <div>123</div>\n * 6) <root><div>abc<span>123<br>456</span></div></root>\n * This is really tricky. Essentially there is a <BR> in middle of a span breaking the span into two blocks;\n * block1: abc<span>123<br> block2: 456\n * In summary, given any arbitrary node (leaf), to identify the head and tail of the block, following rules need to be followed:\n * 1) to identify the head, it needs to crawl DOM tre left/up till a block node or BR is encountered\n * 2) same for identifying tail\n * 3) should also apply a block ceiling, meaning as it crawls up, it should stop at a block node\n * @param rootNode Root node of the scope, the block element will be inside of this node\n * @param node The node to get BlockElement start from\n */\nfunction getBlockElementAtNode(rootNode, node) {\n if (!(0, contains_1.default)(rootNode, node)) {\n return null;\n }\n // Identify the containing block. This serves as ceiling for traversing down below\n // NOTE: this container block could be just the rootNode,\n // which cannot be used to create block element. We will special case handle it later on\n var containerBlockNode = StartEndBlockElement_1.default.getBlockContext(node);\n if (containerBlockNode == node) {\n return new NodeBlockElement_1.default(containerBlockNode);\n }\n // Find the head and leaf node in the block\n var headNode = findHeadTailLeafNode(node, containerBlockNode, false /*isTail*/);\n var tailNode = findHeadTailLeafNode(node, containerBlockNode, true /*isTail*/);\n // At this point, we have the head and tail of a block, here are some examples and where head and tail point to\n // 1) <root><div>hello<br></div></root>, head: hello, tail: <br>\n // 2) <root><div>hello<span style=\"font-family: Arial\">world</span></div></root>, head: hello, tail: world\n // Both are actually completely and exclusively wrapped in a parent div, and can be represented with a Node block\n // So we shall try to collapse as much as we can to the nearest common ancestor\n var nodes = (0, collapseNodes_1.default)(rootNode, headNode, tailNode, false /*canSplitParent*/);\n headNode = nodes[0];\n tailNode = nodes[nodes.length - 1];\n if (headNode.parentNode != tailNode.parentNode) {\n // Un-Balanced start and end, create a start-end block\n return new StartEndBlockElement_1.default(rootNode, headNode, tailNode);\n }\n else {\n // Balanced start and end (point to same parent), need to see if further collapsing can be done\n while (!headNode.previousSibling && !tailNode.nextSibling) {\n var parentNode = headNode.parentNode;\n if (parentNode == containerBlockNode) {\n // Has reached the container block\n if (containerBlockNode != rootNode) {\n // If the container block is not the root, use the container block\n headNode = tailNode = parentNode;\n }\n break;\n }\n else if (parentNode != rootNode) {\n // Continue collapsing to parent\n headNode = tailNode = parentNode;\n }\n else {\n break;\n }\n }\n // If head and tail are same and it is a block element, create NodeBlock, otherwise start-end block\n return headNode == tailNode && (0, isBlockElement_1.default)(headNode)\n ? new NodeBlockElement_1.default(headNode)\n : new StartEndBlockElement_1.default(rootNode, headNode, tailNode);\n }\n}\nexports.default = getBlockElementAtNode;\n/**\n * Given a node and container block, identify the first/last leaf node\n * A leaf node is defined as deepest first/last node in a block\n * i.e. <div><span style=\"font-family: Arial\">abc</span></div>, abc is the head leaf of the block\n * Often <br> or a child <div> is used to create a block. In that case, the leaf after the sibling div or br should be the head leaf\n * i.e. <div>123<br>abc</div>, abc is the head of a block because of a previous sibling <br>\n * i.e. <div><div>123</div>abc</div>, abc is also the head of a block because of a previous sibling <div>\n */\nfunction findHeadTailLeafNode(node, containerBlockNode, isTail) {\n var result = node;\n if ((0, getTagOfNode_1.default)(result) == 'BR' && isTail) {\n return result;\n }\n while (result) {\n var sibling = node;\n while (!(sibling = isTail ? node.nextSibling : node.previousSibling)) {\n node = node.parentNode;\n if (node == containerBlockNode) {\n return result;\n }\n }\n while (sibling) {\n if ((0, isBlockElement_1.default)(sibling)) {\n return result;\n }\n else if ((0, getTagOfNode_1.default)(sibling) == 'BR') {\n return isTail ? sibling : result;\n }\n node = sibling;\n sibling = isTail ? node.firstChild : node.lastChild;\n }\n result = node;\n }\n return result;\n}\n//# sourceMappingURL=getBlockElementAtNode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar ZERO_WIDTH_SPACE = '\\u200B';\n/**\n * @internal\n * Apply inline style to current selection\n * @param editor The editor instance\n * @param callback The callback function to apply style\n */\nfunction applyInlineStyle(editor, callback) {\n editor.focus();\n var selection = editor.getSelectionRangeEx();\n if (selection && selection.areAllCollapsed) {\n var range = selection.ranges[0];\n var node = range.startContainer;\n var isEmptySpan = (0, roosterjs_editor_dom_1.getTagOfNode)(node) == 'SPAN' &&\n (!node.firstChild ||\n ((0, roosterjs_editor_dom_1.getTagOfNode)(node.firstChild) == 'BR' && !node.firstChild.nextSibling));\n if (isEmptySpan) {\n editor.addUndoSnapshot();\n callback(node);\n }\n else {\n var isZWSNode = node &&\n node.nodeType == 3 /* Text */ &&\n node.nodeValue == ZERO_WIDTH_SPACE &&\n (0, roosterjs_editor_dom_1.getTagOfNode)(node.parentNode) == 'SPAN';\n if (!isZWSNode) {\n editor.addUndoSnapshot();\n // Create a new text node to hold the selection.\n // Some content is needed to position selection into the span\n // for here, we inject ZWS - zero width space\n node = editor.getDocument().createTextNode(ZERO_WIDTH_SPACE);\n range.insertNode(node);\n }\n (0, roosterjs_editor_dom_1.applyTextStyle)(node, callback);\n editor.select(node, -1 /* End */);\n }\n }\n else {\n // This is start and end node that get the style. The start and end needs to be recorded so that selection\n // can be re-applied post-applying style\n editor.addUndoSnapshot(function () {\n var firstNode;\n var lastNode;\n selection.ranges.forEach(function (range) {\n var contentTraverser = editor.getSelectionTraverser(range);\n var inlineElement = contentTraverser && contentTraverser.currentInlineElement;\n while (inlineElement) {\n var nextInlineElement = contentTraverser.getNextInlineElement();\n inlineElement.applyStyle(function (element, isInnerNode) {\n callback(element, isInnerNode);\n firstNode = firstNode || element;\n lastNode = element;\n });\n inlineElement = nextInlineElement;\n }\n });\n if (firstNode && lastNode && selection.type == 0 /* Normal */) {\n editor.select(firstNode, -2 /* Before */, lastNode, -3 /* After */);\n }\n }, \"Format\" /* Format */);\n }\n}\nexports.default = applyInlineStyle;\n//# sourceMappingURL=applyInlineStyle.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * @internal\n * Calculate the target size of an image.\n * For image that is not rotated, target size is the same with resizing/cropping size.\n * For image that is rotated, target size is calculated from resizing/cropping size and its rotate angle\n * Say an image is resized to 100w*100h, cropped 25% on each side, then rotated 45deg, so that cropped size\n * will be (both height and width) 100*(1-0.25-0,25) = 50px, then final image size will be 50*sqrt(2) = 71px\n * @param editInfo The edit info to calculate size from\n * @param beforeCrop True to calculate the full size of original image before crop, false to calculate the size\n * after crop\n * @returns A GeneratedImageSize object which contains original, visible and target target width and height of the image\n */\nfunction getGeneratedImageSize(editInfo, beforeCrop) {\n var width = editInfo.widthPx, height = editInfo.heightPx, angle = editInfo.angleRad, left = editInfo.leftPercent, right = editInfo.rightPercent, top = editInfo.topPercent, bottom = editInfo.bottomPercent;\n // Original image size before crop and rotate\n var originalWidth = width / (1 - left - right);\n var originalHeight = height / (1 - top - bottom);\n // Visible size\n var visibleWidth = beforeCrop ? originalWidth : width;\n var visibleHeight = beforeCrop ? originalHeight : height;\n // Target size after crop and rotate\n var targetWidth = Math.abs(visibleWidth * Math.cos(angle)) + Math.abs(visibleHeight * Math.sin(angle));\n var targetHeight = Math.abs(visibleWidth * Math.sin(angle)) + Math.abs(visibleHeight * Math.cos(angle));\n return {\n targetWidth: targetWidth,\n targetHeight: targetHeight,\n originalWidth: originalWidth,\n originalHeight: originalHeight,\n visibleWidth: visibleWidth,\n visibleHeight: visibleHeight,\n };\n}\nexports.default = getGeneratedImageSize;\n//# sourceMappingURL=getGeneratedImageSize.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar CTRL_CHAR_CODE = 'Control';\nvar ALT_CHAR_CODE = 'Alt';\nvar META_CHAR_CODE = 'Meta';\n/**\n * Returns true when the event was fired from a modifier key, otherwise false\n * @param event The keyboard event object\n */\nfunction isModifierKey(event) {\n var isCtrlKey = event.ctrlKey || event.key === CTRL_CHAR_CODE;\n var isAltKey = event.altKey || event.key === ALT_CHAR_CODE;\n var isMetaKey = event.metaKey || event.key === META_CHAR_CODE;\n return isCtrlKey || isAltKey || isMetaKey;\n}\nexports.default = isModifierKey;\n//# sourceMappingURL=isModifierKey.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NodeType = void 0;\n/**\n * The is essentially an enum represents the type of the node\n * https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\n * Values not listed here are deprecated.\n */\nvar NodeType;\n(function (NodeType) {\n /**\n * An Element node such as <p> or <div>.\n */\n NodeType[NodeType[\"Element\"] = 1] = \"Element\";\n /**\n * The actual Text of Element or Attr.\n */\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\n /**\n * A ProcessingInstruction of an XML document such as <?xml-stylesheet ... ?> declaration.\n */\n NodeType[NodeType[\"ProcessingInstruction\"] = 7] = \"ProcessingInstruction\";\n /**\n * A Comment node.\n */\n NodeType[NodeType[\"Comment\"] = 8] = \"Comment\";\n /**\n * A Document node.\n */\n NodeType[NodeType[\"Document\"] = 9] = \"Document\";\n /**\n * A DocumentType node e.g. <!DOCTYPE html> for HTML5 documents.\n */\n NodeType[NodeType[\"DocumentType\"] = 10] = \"DocumentType\";\n /**\n * A DocumentFragment node.\n */\n NodeType[NodeType[\"DocumentFragment\"] = 11] = \"DocumentFragment\";\n})(NodeType = exports.NodeType || (exports.NodeType = {}));\n//# sourceMappingURL=NodeType.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar EmptyInlineElement_1 = require(\"../inlineElements/EmptyInlineElement\");\nvar getBlockElementAtNode_1 = require(\"../blockElements/getBlockElementAtNode\");\nvar getInlineElementAtNode_1 = require(\"../inlineElements/getInlineElementAtNode\");\nvar NodeBlockElement_1 = require(\"../blockElements/NodeBlockElement\");\nvar Position_1 = require(\"../selection/Position\");\nvar safeInstanceOf_1 = require(\"../utils/safeInstanceOf\");\nvar getInlineElementBeforeAfter_1 = require(\"../inlineElements/getInlineElementBeforeAfter\");\nvar getFirstLastInlineElement_1 = require(\"../inlineElements/getFirstLastInlineElement\");\n/**\n * @internal\n * This provides traversing content in a selection start block\n * This is commonly used for those cursor context sensitive plugin,\n * they want to know text being typed at cursor\n * This provides a scope for parsing from cursor position up to begin of the selection block\n */\nvar SelectionBlockScoper = /** @class */ (function () {\n /**\n * Create a new instance of SelectionBlockScoper class\n * @param rootNode The root node of the whole scope\n * @param position Position of the selection start\n * @param startFrom Where to start, can be Begin, End, SelectionStart\n */\n function SelectionBlockScoper(rootNode, position, startFrom) {\n this.rootNode = rootNode;\n this.startFrom = startFrom;\n position = (0, safeInstanceOf_1.default)(position, 'Range') ? Position_1.default.getStart(position) : position;\n this.position = position.normalize();\n this.block = (0, getBlockElementAtNode_1.default)(this.rootNode, this.position.node);\n }\n /**\n * Get the start block element\n */\n SelectionBlockScoper.prototype.getStartBlockElement = function () {\n return this.block;\n };\n /**\n * Get the start inline element\n * The start inline refers to inline before the selection start\n * The reason why we choose the one before rather after is, when cursor is at the end of a paragraph,\n * the one after likely will point to inline in next paragraph which may be null if the cursor is at bottom of editor\n */\n SelectionBlockScoper.prototype.getStartInlineElement = function () {\n if (this.block) {\n switch (this.startFrom) {\n case 0 /* Begin */:\n case 1 /* End */:\n case 2 /* DomEnd */:\n return getFirstLastInlineElementFromBlockElement(this.block, this.startFrom == 0 /* Begin */);\n case 3 /* SelectionStart */:\n // Get the inline before selection start point, and ensure it falls in the selection block\n var startInline = (0, getInlineElementBeforeAfter_1.getInlineElementAfter)(this.rootNode, this.position);\n return startInline && this.block.contains(startInline.getContainerNode())\n ? startInline\n : new EmptyInlineElement_1.default(this.position, this.block);\n }\n }\n return null;\n };\n /**\n * Check if the given block element is in current scope\n * @param blockElement The block element to check\n */\n SelectionBlockScoper.prototype.isBlockInScope = function (blockElement) {\n return this.block && blockElement ? this.block.equals(blockElement) : false;\n };\n /**\n * Trim the incoming inline element, and return an inline element\n * This just tests and return the inline element if it is in block\n * This is a block scoper, which is not like selection scoper where it may cut an inline element in half\n * A block scoper does not cut an inline in half\n */\n SelectionBlockScoper.prototype.trimInlineElement = function (inlineElement) {\n return this.block && inlineElement && this.block.contains(inlineElement.getContainerNode())\n ? inlineElement\n : null;\n };\n return SelectionBlockScoper;\n}());\nexports.default = SelectionBlockScoper;\n/**\n * Get first/last InlineElement of the given BlockElement\n * @param block The BlockElement to get InlineElement from\n * @param isFirst True to get first InlineElement, false to get last InlineElement\n */\nfunction getFirstLastInlineElementFromBlockElement(block, isFirst) {\n if (block instanceof NodeBlockElement_1.default) {\n var blockNode = block.getStartNode();\n return isFirst ? (0, getFirstLastInlineElement_1.getFirstInlineElement)(blockNode) : (0, getFirstLastInlineElement_1.getLastInlineElement)(blockNode);\n }\n else {\n return (0, getInlineElementAtNode_1.default)(block, isFirst ? block.getStartNode() : block.getEndNode());\n }\n}\n//# sourceMappingURL=SelectionBlockScoper.js.map","import $$observable from 'symbol-observable';\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n INIT: \"@@redux/INIT\" + randomString(),\n REPLACE: \"@@redux/REPLACE\" + randomString(),\n PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n if (typeof obj !== 'object' || obj === null) return false;\n var proto = obj;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error('It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function.');\n }\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error('Expected the enhancer to be a function.');\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error('Expected the reducer to be a function.');\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n\n\n function getState() {\n if (isDispatching) {\n throw new Error('You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n\n return currentState;\n }\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n\n\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error('Expected the listener to be a function.');\n }\n\n if (isDispatching) {\n throw new Error('You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api-reference/store#subscribelistener for more details.');\n }\n\n var isSubscribed = true;\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n if (isDispatching) {\n throw new Error('You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api-reference/store#subscribelistener for more details.');\n }\n\n isSubscribed = false;\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n currentListeners = null;\n };\n }\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n\n\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error('Actions may not have an undefined \"type\" property. ' + 'Have you misspelled a constant?');\n }\n\n if (isDispatching) {\n throw new Error('Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n\n\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error('Expected the nextReducer to be a function.');\n }\n\n currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n\n dispatch({\n type: ActionTypes.REPLACE\n });\n }\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n\n\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n throw new TypeError('Expected the observer to be an object.');\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n } // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n\n\n dispatch({\n type: ActionTypes.INIT\n });\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUndefinedStateErrorMessage(key, action) {\n var actionType = action && action.type;\n var actionDescription = actionType && \"action \\\"\" + String(actionType) + \"\\\"\" || 'an action';\n return \"Given \" + actionDescription + \", reducer \\\"\" + key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\";\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return \"The \" + argumentName + \" has unexpected type of \\\"\" + {}.toString.call(inputState).match(/\\s([a-z|A-Z]+)/)[1] + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n\n if (unexpectedKeys.length > 0) {\n return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n\n if (typeof initialState === 'undefined') {\n throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n }\n\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle \" + ActionTypes.INIT + \" or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n }\n });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n\n var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n // keys multiple times.\n\n var unexpectedKeyCache;\n\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError;\n\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination(state, action) {\n if (state === void 0) {\n state = {};\n }\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n\n if (typeof nextStateForKey === 'undefined') {\n var errorMessage = getUndefinedStateErrorMessage(_key, action);\n throw new Error(errorMessage);\n }\n\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(this, arguments));\n };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error(\"bindActionCreators expected an object or a function, instead received \" + (actionCreators === null ? 'null' : typeof actionCreators) + \". \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n }\n\n var boundActionCreators = {};\n\n for (var key in actionCreators) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n\n return boundActionCreators;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n keys.push.apply(keys, Object.getOwnPropertySymbols(object));\n }\n\n if (enumerableOnly) keys = keys.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function () {\n var store = createStore.apply(void 0, arguments);\n\n var _dispatch = function dispatch() {\n throw new Error('Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n };\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch() {\n return _dispatch.apply(void 0, arguments);\n }\n };\n var chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(void 0, chain)(store.dispatch);\n return _objectSpread2({}, store, {\n dispatch: _dispatch\n });\n };\n };\n}\n\n/*\n * This is a dummy function to check if the function name has been altered by minification.\n * If the function has been minified and NODE_ENV !== 'production', warn the user.\n */\n\nfunction isCrushed() {}\n\nif (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {\n warning('You are currently using minified code outside of NODE_ENV === \"production\". ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or setting mode to production in webpack (https://webpack.js.org/concepts/mode/) ' + 'to ensure you have the correct code for your production build.');\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore };\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StructuredNodeFeatures = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar CHILD_PARENT_TAG_MAP = {\n TD: 'TABLE',\n TH: 'TABLE',\n LI: 'OL,UL',\n};\nvar CHILD_SELECTOR = Object.keys(CHILD_PARENT_TAG_MAP).join(',');\n/**\n * InsertLineBeforeStructuredNode edit feature, provides the ability to insert an empty line before\n * a structured element (bullet/numbering list, blockquote, table) if the element is at beginning of\n * document\n */\nvar InsertLineBeforeStructuredNodeFeature = {\n keys: [13 /* ENTER */],\n shouldHandleEvent: cacheGetStructuredElement,\n handleEvent: function (event, editor) {\n var element = cacheGetStructuredElement(event, editor);\n var div = (0, roosterjs_editor_dom_1.createElement)(1 /* EmptyLine */, editor.getDocument());\n editor.addUndoSnapshot(function () {\n element.parentNode.insertBefore(div, element);\n // Select the new line when we are in table. This is the same behavior with Word\n if ((0, roosterjs_editor_dom_1.getTagOfNode)(element) == 'TABLE') {\n editor.select(new roosterjs_editor_dom_1.Position(div, 0 /* Begin */).normalize());\n }\n });\n event.rawEvent.preventDefault();\n },\n defaultDisabled: true,\n};\nfunction cacheGetStructuredElement(event, editor) {\n return (0, roosterjs_editor_dom_1.cacheGetEventData)(event, 'FIRST_STRUCTURE', function () {\n // Provide a chance to keep browser default behavior by pressing SHIFT\n var element = event.rawEvent.shiftKey ? null : editor.getElementAtCursor(CHILD_SELECTOR);\n if (element) {\n var range = editor.getSelectionRange();\n if (range &&\n range.collapsed &&\n (0, roosterjs_editor_dom_1.isPositionAtBeginningOf)(roosterjs_editor_dom_1.Position.getStart(range), element) &&\n !editor.getBodyTraverser(element).getPreviousBlockElement()) {\n return editor.getElementAtCursor(CHILD_PARENT_TAG_MAP[(0, roosterjs_editor_dom_1.getTagOfNode)(element)]);\n }\n }\n return null;\n });\n}\n/**\n * @internal\n */\nexports.StructuredNodeFeatures = {\n insertLineBeforeStructuredNodeFeature: InsertLineBeforeStructuredNodeFeature,\n};\n//# sourceMappingURL=structuredNodeFeatures.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createWordConverterArguments = void 0;\nvar LevelLists_1 = require(\"./LevelLists\");\n/**\n * @internal\n * create an empty WordConverterArguments\n */\nfunction createWordConverterArguments(nodes) {\n return {\n nodes: nodes,\n currentIndex: 0,\n lists: {},\n listItems: [],\n currentListIdsByLevels: [(0, LevelLists_1.createLevelLists)()],\n lastProcessedItem: null,\n };\n}\nexports.createWordConverterArguments = createWordConverterArguments;\n//# sourceMappingURL=WordConverterArguments.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(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))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar coreApiMap_1 = require(\"../coreApi/coreApiMap\");\nvar createCorePlugins_1 = require(\"../corePlugins/createCorePlugins\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * RoosterJs core editor class\n */\nvar Editor = /** @class */ (function () {\n //#region Lifecycle\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 function Editor(contentDiv, options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n // 1. Make sure all parameters are valid\n if ((0, roosterjs_editor_dom_1.getTagOfNode)(contentDiv) != 'DIV') {\n throw new Error('contentDiv must be an HTML DIV element');\n }\n // 2. Store options values to local variables\n var corePlugins = (0, createCorePlugins_1.default)(contentDiv, options);\n var plugins = [];\n Object.keys(corePlugins).forEach(function (name) {\n if (name == '_placeholder') {\n (0, roosterjs_editor_dom_1.arrayPush)(plugins, options.plugins);\n }\n else {\n plugins.push(corePlugins[name]);\n }\n });\n var zoomScale = options.zoomScale > 0 ? options.zoomScale : 1;\n this.core = __assign(__assign({ contentDiv: contentDiv, api: __assign(__assign({}, coreApiMap_1.coreApiMap), (options.coreApiOverride || {})), plugins: plugins.filter(function (x) { return !!x; }) }, (0, createCorePlugins_1.getPluginState)(corePlugins)), { trustedHTMLHandler: options.trustedHTMLHandler || (function (html) { return html; }), zoomScale: zoomScale, sizeTransformer: options.sizeTransformer || (function (size) { return size / zoomScale; }) });\n // 3. Initialize plugins\n this.core.plugins.forEach(function (plugin) { return plugin.initialize(_this); });\n // 4. Ensure user will type in a container node, not the editor content DIV\n this.ensureTypeInContainer(new roosterjs_editor_dom_1.Position(this.core.contentDiv, 0 /* Begin */).normalize());\n }\n /**\n * Dispose this editor, dispose all plugins and custom data\n */\n Editor.prototype.dispose = function () {\n for (var i = this.core.plugins.length - 1; i >= 0; i--) {\n this.core.plugins[i].dispose();\n }\n this.core = null;\n };\n /**\n * Get whether this editor is disposed\n * @returns True if editor is disposed, otherwise false\n */\n Editor.prototype.isDisposed = function () {\n return !this.core;\n };\n //#endregion\n //#region Node API\n /**\n * Insert node into editor\n * @param node The node to insert\n * @param option Insert options. Default value is:\n * position: ContentPosition.SelectionStart\n * updateCursor: true\n * replaceSelection: true\n * insertOnNewLine: false\n * @returns true if node is inserted. Otherwise false\n */\n Editor.prototype.insertNode = function (node, option) {\n return node ? this.core.api.insertNode(this.core, node, option) : false;\n };\n /**\n * Delete a node from editor content\n * @param node The node to delete\n * @returns true if node is deleted. Otherwise false\n */\n Editor.prototype.deleteNode = function (node) {\n // Only remove the node when it falls within editor\n if (node && this.contains(node)) {\n node.parentNode.removeChild(node);\n return true;\n }\n return false;\n };\n /**\n * Replace a node in editor content with another node\n * @param existingNode The existing node to be replaced\n * @param toNode node to replace to\n * @param transformColorForDarkMode (optional) Whether to transform new node to dark mode. Default is false\n * @returns true if node is replaced. Otherwise false\n */\n Editor.prototype.replaceNode = function (existingNode, toNode, transformColorForDarkMode) {\n // Only replace the node when it falls within editor\n if (this.contains(existingNode) && toNode) {\n this.core.api.transformColor(this.core, transformColorForDarkMode ? toNode : null, true /*includeSelf*/, function () { return existingNode.parentNode.replaceChild(toNode, existingNode); }, 0 /* LightToDark */);\n return true;\n }\n return false;\n };\n /**\n * Get BlockElement at given node\n * @param node The node to create InlineElement\n * @returns The BlockElement result\n */\n Editor.prototype.getBlockElementAtNode = function (node) {\n return (0, roosterjs_editor_dom_1.getBlockElementAtNode)(this.core.contentDiv, node);\n };\n Editor.prototype.contains = function (arg) {\n return (0, roosterjs_editor_dom_1.contains)(this.core.contentDiv, arg);\n };\n Editor.prototype.queryElements = function (selector, scopeOrCallback, callback) {\n var _this = this;\n if (scopeOrCallback === void 0) { scopeOrCallback = 0 /* Body */; }\n var result = [];\n var scope = scopeOrCallback instanceof Function ? 0 /* Body */ : scopeOrCallback;\n callback = scopeOrCallback instanceof Function ? scopeOrCallback : callback;\n var selectionEx = scope == 0 /* Body */ ? null : this.getSelectionRangeEx();\n if (selectionEx) {\n selectionEx.ranges.forEach(function (range) {\n result.push.apply(result, (0, roosterjs_editor_dom_1.queryElements)(_this.core.contentDiv, selector, callback, scope, range));\n });\n }\n else {\n return (0, roosterjs_editor_dom_1.queryElements)(this.core.contentDiv, selector, callback, scope, null);\n }\n return result;\n };\n /**\n * Collapse nodes within the given start and end nodes to their common ancestor node,\n * split parent nodes if necessary\n * @param start The start node\n * @param end The end node\n * @param canSplitParent True to allow split parent node there are nodes before start or after end under the same parent\n * and the returned nodes will be all nodes from start through end after splitting\n * False to disallow split parent\n * @returns When canSplitParent is true, returns all node from start through end after splitting,\n * otherwise just return start and end\n */\n Editor.prototype.collapseNodes = function (start, end, canSplitParent) {\n return (0, roosterjs_editor_dom_1.collapseNodes)(this.core.contentDiv, start, end, canSplitParent);\n };\n //#endregion\n //#region Content API\n /**\n * Check whether the editor contains any visible content\n * @param trim Whether trim the content string before check. Default is false\n * @returns True if there's no visible content, otherwise false\n */\n Editor.prototype.isEmpty = function (trim) {\n return (0, roosterjs_editor_dom_1.isNodeEmpty)(this.core.contentDiv, trim);\n };\n /**\n * Get current editor content as HTML string\n * @param mode specify what kind of HTML content to retrieve\n * @returns HTML string representing current editor content\n */\n Editor.prototype.getContent = function (mode) {\n if (mode === void 0) { mode = 0 /* CleanHTML */; }\n return this.core.api.getContent(this.core, mode);\n };\n /**\n * Set HTML content to this editor. All existing content will be replaced. A ContentChanged event will be triggered\n * @param content HTML content to set in\n * @param triggerContentChangedEvent True to trigger a ContentChanged event. Default value is true\n */\n Editor.prototype.setContent = function (content, triggerContentChangedEvent) {\n if (triggerContentChangedEvent === void 0) { triggerContentChangedEvent = true; }\n this.core.api.setContent(this.core, content, triggerContentChangedEvent);\n };\n /**\n * Insert HTML content into editor\n * @param HTML content to insert\n * @param option Insert options. Default value is:\n * position: ContentPosition.SelectionStart\n * updateCursor: true\n * replaceSelection: true\n * insertOnNewLine: false\n */\n Editor.prototype.insertContent = function (content, option) {\n var _a;\n if (content) {\n var doc = this.getDocument();\n var body = (_a = new DOMParser().parseFromString(this.core.trustedHTMLHandler(content), 'text/html')) === null || _a === void 0 ? void 0 : _a.body;\n var allNodes = (body === null || body === void 0 ? void 0 : body.childNodes) ? (0, roosterjs_editor_dom_1.toArray)(body.childNodes) : [];\n // If it is to insert on new line, and there are more than one node in the collection, wrap all nodes with\n // a parent DIV before calling insertNode on each top level sub node. Otherwise, every sub node may get wrapped\n // separately to show up on its own line\n if (option && option.insertOnNewLine && allNodes.length > 1) {\n allNodes = [(0, roosterjs_editor_dom_1.wrap)(allNodes)];\n }\n var fragment_1 = doc.createDocumentFragment();\n allNodes.forEach(function (node) { return fragment_1.appendChild(node); });\n this.insertNode(fragment_1, option);\n }\n };\n /**\n * Delete selected content\n */\n Editor.prototype.deleteSelectedContent = function () {\n var range = this.getSelectionRange();\n return range && !range.collapsed && (0, roosterjs_editor_dom_1.deleteSelectedContent)(this.core.contentDiv, range);\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 */\n Editor.prototype.paste = function (clipboardData, pasteAsText, applyCurrentFormat) {\n var _this = this;\n if (!clipboardData) {\n return;\n }\n if (clipboardData.snapshotBeforePaste) {\n // Restore original content before paste a new one\n this.setContent(clipboardData.snapshotBeforePaste);\n }\n else {\n clipboardData.snapshotBeforePaste = this.getContent(2 /* RawHTMLWithSelection */);\n }\n var range = this.getSelectionRange();\n var pos = range && roosterjs_editor_dom_1.Position.getStart(range);\n var fragment = this.core.api.createPasteFragment(this.core, clipboardData, pos, pasteAsText, applyCurrentFormat);\n this.addUndoSnapshot(function () {\n _this.insertNode(fragment);\n return clipboardData;\n }, \"Paste\" /* Paste */);\n };\n //#endregion\n //#region Focus and Selection\n /**\n * Get current selection range from Editor.\n * It does a live pull on the selection, if nothing retrieved, return whatever we have in cache.\n * @param tryGetFromCache Set to true to retrieve the selection range from cache if editor doesn't own the focus now.\n * Default value is true\n * @returns current selection range, or null if editor never got focus before\n */\n Editor.prototype.getSelectionRange = function (tryGetFromCache) {\n if (tryGetFromCache === void 0) { tryGetFromCache = true; }\n return this.core.api.getSelectionRange(this.core, tryGetFromCache);\n };\n /**\n * Get current selection range from Editor.\n * It does a live pull on the selection, if nothing retrieved, return whatever we have in cache.\n * @param tryGetFromCache Set to true to retrieve the selection range from cache if editor doesn't own the focus now.\n * Default value is true\n * @returns current selection range, or null if editor never got focus before\n */\n Editor.prototype.getSelectionRangeEx = function () {\n return this.core.api.getSelectionRangeEx(this.core);\n };\n /**\n * Get current selection in a serializable format\n * It does a live pull on the selection, if nothing retrieved, return whatever we have in cache.\n * @returns current selection path, or null if editor never got focus before\n */\n Editor.prototype.getSelectionPath = function () {\n var range = this.getSelectionRange();\n return range && (0, roosterjs_editor_dom_1.getSelectionPath)(this.core.contentDiv, range);\n };\n /**\n * Check if focus is in editor now\n * @returns true if focus is in editor, otherwise false\n */\n Editor.prototype.hasFocus = function () {\n return this.core.api.hasFocus(this.core);\n };\n /**\n * Focus to this editor, the selection was restored to where it was before, no unexpected scroll.\n */\n Editor.prototype.focus = function () {\n this.core.api.focus(this.core);\n };\n Editor.prototype.select = function (arg1, arg2, arg3, arg4) {\n var _a;\n if (!!((_a = arg1) === null || _a === void 0 ? void 0 : _a.rows)) {\n var selection = this.core.api.selectTable(this.core, arg1, arg2);\n this.core.domEvent.tableSelectionRange = selection;\n return !!selection;\n }\n else {\n this.core.api.selectTable(this.core, null);\n this.core.domEvent.tableSelectionRange = null;\n }\n var range = !arg1\n ? null\n : (0, roosterjs_editor_dom_1.safeInstanceOf)(arg1, 'Range')\n ? arg1\n : Array.isArray(arg1.start) && Array.isArray(arg1.end)\n ? (0, roosterjs_editor_dom_1.createRange)(this.core.contentDiv, arg1.start, arg1.end)\n : (0, roosterjs_editor_dom_1.createRange)(arg1, arg2, arg3, arg4);\n return this.contains(range) && this.core.api.selectRange(this.core, range);\n };\n /**\n * Get current focused position. Return null if editor doesn't have focus at this time.\n */\n Editor.prototype.getFocusedPosition = function () {\n var _a;\n var sel = (_a = this.getDocument().defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();\n if (this.contains(sel && sel.focusNode)) {\n return new roosterjs_editor_dom_1.Position(sel.focusNode, sel.focusOffset);\n }\n var range = this.getSelectionRange();\n if (range) {\n return roosterjs_editor_dom_1.Position.getStart(range);\n }\n return null;\n };\n /**\n * Get an HTML element from current cursor position.\n * When expectedTags is not specified, return value is the current node (if it is HTML element)\n * or its parent node (if current node is a Text node).\n * When expectedTags is specified, return value is the first ancestor of current node which has\n * one of the expected tags.\n * If no element found within editor by the given tag, return null.\n * @param selector Optional, an HTML selector to find HTML element with.\n * @param startFrom Start search from this node. If not specified, start from current focused position\n * @param event Optional, if specified, editor will try to get cached result from the event object first.\n * If it is not cached before, query from DOM and cache the result into the event object\n */\n Editor.prototype.getElementAtCursor = function (selector, startFrom, event) {\n var _this = this;\n event = startFrom ? null : event; // Only use cache when startFrom is not specified, for different start position can have different result\n return (0, roosterjs_editor_dom_1.cacheGetEventData)(event, 'GET_ELEMENT_AT_CURSOR_' + selector, function () {\n if (!startFrom) {\n var position = _this.getFocusedPosition();\n startFrom = position && position.node;\n }\n return (startFrom && (0, roosterjs_editor_dom_1.findClosestElementAncestor)(startFrom, _this.core.contentDiv, selector));\n });\n };\n /**\n * Check if this position is at beginning of the editor.\n * This will return true if all nodes between the beginning of target node and the position are empty.\n * @param position The position to check\n * @returns True if position is at beginning of the editor, otherwise false\n */\n Editor.prototype.isPositionAtBeginning = function (position) {\n return (0, roosterjs_editor_dom_1.isPositionAtBeginningOf)(position, this.core.contentDiv);\n };\n /**\n * Get impacted regions from selection\n */\n Editor.prototype.getSelectedRegions = function (type) {\n var _this = this;\n if (type === void 0) { type = 0 /* Table */; }\n var selection = this.getSelectionRangeEx();\n var result = [];\n selection.ranges.forEach(function (range) {\n result.push.apply(result, (range ? (0, roosterjs_editor_dom_1.getRegionsFromRange)(_this.core.contentDiv, range, type) : []));\n });\n return result.filter(function (value, index, self) {\n return self.indexOf(value) === index;\n });\n };\n //#endregion\n //#region EVENT API\n Editor.prototype.addDomEventHandler = function (nameOrMap, handler) {\n var _a;\n var eventsToMap = typeof nameOrMap == 'string' ? (_a = {}, _a[nameOrMap] = handler, _a) : nameOrMap;\n return this.core.api.attachDomEvent(this.core, eventsToMap);\n };\n /**\n * Trigger an event to be dispatched to all plugins\n * @param eventType Type of the event\n * @param data data of the event with given type, this is the rest part of PluginEvent with the given type\n * @param broadcast indicates if the event needs to be dispatched to all plugins\n * True means to all, false means to allow exclusive handling from one plugin unless no one wants that\n * @returns the event object which is really passed into plugins. Some plugin may modify the event object so\n * the result of this function provides a chance to read the modified result\n */\n Editor.prototype.triggerPluginEvent = function (eventType, data, broadcast) {\n var event = __assign({ eventType: eventType }, data);\n this.core.api.triggerEvent(this.core, event, broadcast);\n return event;\n };\n /**\n * Trigger a ContentChangedEvent\n * @param source Source of this event, by default is 'SetContent'\n * @param data additional data for this event\n */\n Editor.prototype.triggerContentChangedEvent = function (source, data) {\n if (source === void 0) { source = \"SetContent\" /* SetContent */; }\n this.triggerPluginEvent(7 /* ContentChanged */, {\n source: source,\n data: data,\n });\n };\n //#endregion\n //#region Undo API\n /**\n * Undo last edit operation\n */\n Editor.prototype.undo = function () {\n this.focus();\n this.core.api.restoreUndoSnapshot(this.core, -1 /*step*/);\n };\n /**\n * Redo next edit operation\n */\n Editor.prototype.redo = function () {\n this.focus();\n this.core.api.restoreUndoSnapshot(this.core, 1 /*step*/);\n };\n /**\n * Add undo snapshot, and execute a format callback function, then add another undo snapshot, then trigger\n * ContentChangedEvent with given change source.\n * If this function is called nested, undo snapshot will only be added in the outside one\n * @param callback The callback function to perform formatting, returns a data object which will be used as\n * the data field in ContentChangedEvent if changeSource is not null.\n * @param changeSource The change source to use when fire ContentChangedEvent. When the value is not null,\n * a ContentChangedEvent will be fired with change source equal to this value\n * @param canUndoByBackspace True if this action can be undone when user press Backspace key (aka Auto Complete).\n */\n Editor.prototype.addUndoSnapshot = function (callback, changeSource, canUndoByBackspace) {\n this.core.api.addUndoSnapshot(this.core, callback, changeSource, canUndoByBackspace);\n };\n /**\n * Whether there is an available undo/redo snapshot\n */\n Editor.prototype.getUndoState = function () {\n var _a = this.core.undo, hasNewContent = _a.hasNewContent, snapshotsService = _a.snapshotsService;\n return {\n canUndo: hasNewContent || snapshotsService.canMove(-1 /*previousSnapshot*/),\n canRedo: snapshotsService.canMove(1 /*nextSnapshot*/),\n };\n };\n //#endregion\n //#region Misc\n /**\n * Get document which contains this editor\n * @returns The HTML document which contains this editor\n */\n Editor.prototype.getDocument = function () {\n return this.core.contentDiv.ownerDocument;\n };\n /**\n * Get the scroll container of the editor\n */\n Editor.prototype.getScrollContainer = function () {\n return this.core.domEvent.scrollContainer;\n };\n /**\n * Get custom data related to this editor\n * @param key Key of the custom data\n * @param getter Getter function. If custom data for the given key doesn't exist,\n * call this function to get one and store it if it is specified. Otherwise return undefined\n * @param disposer An optional disposer function to dispose this custom data when\n * dispose editor.\n */\n Editor.prototype.getCustomData = function (key, getter, disposer) {\n return (this.core.lifecycle.customData[key] = this.core.lifecycle.customData[key] || {\n value: getter ? getter() : undefined,\n disposer: disposer,\n }).value;\n };\n /**\n * Check if editor is in IME input sequence\n * @returns True if editor is in IME input sequence, otherwise false\n */\n Editor.prototype.isInIME = function () {\n return this.core.domEvent.isInIME;\n };\n /**\n * Get default format of this editor\n * @returns Default format object of this editor\n */\n Editor.prototype.getDefaultFormat = function () {\n return this.core.lifecycle.defaultFormat;\n };\n /**\n * Get a content traverser for the whole editor\n * @param startNode The node to start from. If not passed, it will start from the beginning of the body\n */\n Editor.prototype.getBodyTraverser = function (startNode) {\n return roosterjs_editor_dom_1.ContentTraverser.createBodyTraverser(this.core.contentDiv, startNode);\n };\n /**\n * Get a content traverser for current selection\n */\n Editor.prototype.getSelectionTraverser = function (range) {\n range = range !== null && range !== void 0 ? range : this.getSelectionRange();\n return range && roosterjs_editor_dom_1.ContentTraverser.createSelectionTraverser(this.core.contentDiv, range);\n };\n /**\n * Get a content traverser for current block element start from specified position\n * @param startFrom Start position of the traverser. Default value is ContentPosition.SelectionStart\n */\n Editor.prototype.getBlockTraverser = function (startFrom) {\n if (startFrom === void 0) { startFrom = 3 /* SelectionStart */; }\n var range = this.getSelectionRange();\n return (range && roosterjs_editor_dom_1.ContentTraverser.createBlockTraverser(this.core.contentDiv, range, startFrom));\n };\n /**\n * Get a text traverser of current selection\n * @param event Optional, if specified, editor will try to get cached result from the event object first.\n * If it is not cached before, query from DOM and cache the result into the event object\n */\n Editor.prototype.getContentSearcherOfCursor = function (event) {\n var _this = this;\n return (0, roosterjs_editor_dom_1.cacheGetEventData)(event, 'ContentSearcher', function () {\n var range = _this.getSelectionRange();\n return (range && new roosterjs_editor_dom_1.PositionContentSearcher(_this.core.contentDiv, roosterjs_editor_dom_1.Position.getStart(range)));\n });\n };\n /**\n * Run a callback function asynchronously\n * @param callback The callback function to run\n * @returns a function to cancel this async run\n */\n Editor.prototype.runAsync = function (callback) {\n var _this = this;\n var win = this.core.contentDiv.ownerDocument.defaultView || window;\n var handle = win.requestAnimationFrame(function () {\n if (!_this.isDisposed() && callback) {\n callback(_this);\n }\n });\n return function () {\n win.cancelAnimationFrame(handle);\n };\n };\n /**\n * Set DOM attribute of editor content DIV\n * @param name Name of the attribute\n * @param value Value of the attribute\n */\n Editor.prototype.setEditorDomAttribute = function (name, value) {\n if (value === null) {\n this.core.contentDiv.removeAttribute(name);\n }\n else {\n this.core.contentDiv.setAttribute(name, value);\n }\n };\n /**\n * get DOM attribute of editor content DIV\n * @param name Name of the attribute\n */\n Editor.prototype.getEditorDomAttribute = function (name) {\n return this.core.contentDiv.getAttribute(name);\n };\n /**\n * Get current relative distance from top-left corner of the given element to top-left corner of editor content DIV.\n * @param element The element to calculate from. If the given element is not in editor, return value will be null\n * @param addScroll When pass true, The return value will also add scrollLeft and scrollTop if any. So the value\n * may be different than what user is seeing from the view. When pass false, scroll position will be ignored.\n * @returns An [x, y] array which contains the left and top distances, or null if the given element is not in editor.\n */\n Editor.prototype.getRelativeDistanceToEditor = function (element, addScroll) {\n if (this.contains(element)) {\n var contentDiv = this.core.contentDiv;\n var editorRect = contentDiv.getBoundingClientRect();\n var elementRect = element.getBoundingClientRect();\n if (editorRect && elementRect) {\n var x = elementRect.left - (editorRect === null || editorRect === void 0 ? void 0 : editorRect.left);\n var y = elementRect.top - (editorRect === null || editorRect === void 0 ? void 0 : editorRect.top);\n if (addScroll) {\n x += contentDiv.scrollLeft;\n y += contentDiv.scrollTop;\n }\n return [x, y];\n }\n }\n return null;\n };\n /**\n * Add a Content Edit feature.\n * @param feature The feature to add\n */\n Editor.prototype.addContentEditFeature = function (feature) {\n var _this = this;\n feature === null || feature === void 0 ? void 0 : feature.keys.forEach(function (key) {\n var array = _this.core.edit.features[key] || [];\n array.push(feature);\n _this.core.edit.features[key] = array;\n });\n };\n /**\n * Get style based format state from current selection, including font name/size and colors\n */\n Editor.prototype.getStyleBasedFormatState = function (node) {\n if (!node) {\n var range = this.getSelectionRange();\n node = range && roosterjs_editor_dom_1.Position.getStart(range).normalize().node;\n }\n return this.core.api.getStyleBasedFormatState(this.core, node);\n };\n /**\n * Get the pendable format such as underline and bold\n * @param forceGetStateFromDOM If set to true, will force get the format state from DOM tree.\n * @returns The pending format state\n */\n Editor.prototype.getPendableFormatState = function (forceGetStateFromDOM) {\n return this.core.api.getPendableFormatState(this.core, forceGetStateFromDOM);\n };\n /**\n * Ensure user will type into a container element rather than into the editor content DIV directly\n * @param position The position that user is about to type to\n * @param keyboardEvent Optional keyboard event object\n */\n Editor.prototype.ensureTypeInContainer = function (position, keyboardEvent) {\n this.core.api.ensureTypeInContainer(this.core, position, keyboardEvent);\n };\n //#endregion\n //#region Dark mode APIs\n /**\n * Set the dark mode state and transforms the content to match the new state.\n * @param nextDarkMode The next status of dark mode. True if the editor should be in dark mode, false if not.\n */\n Editor.prototype.setDarkModeState = function (nextDarkMode) {\n if (this.isDarkMode() == nextDarkMode) {\n return;\n }\n var currentContent = this.getContent(0 /* CleanHTML */);\n this.triggerContentChangedEvent(nextDarkMode ? \"SwitchToDarkMode\" /* SwitchToDarkMode */ : \"SwitchToLightMode\" /* SwitchToLightMode */);\n this.setContent(currentContent);\n };\n /**\n * Check if the editor is in dark mode\n * @returns True if the editor is in dark mode, otherwise false\n */\n Editor.prototype.isDarkMode = function () {\n return this.core.lifecycle.isDarkMode;\n };\n /**\n * Make the editor in \"Shadow Edit\" mode.\n * In Shadow Edit mode, all format change will finally be ignored.\n * This can be used for building a live preview feature for format button, to allow user\n * see format result without really apply it.\n * This function can be called repeated. If editor is already in shadow edit mode, we can still\n * use this function to do more shadow edit operation.\n */\n Editor.prototype.startShadowEdit = function () {\n this.core.api.switchShadowEdit(this.core, true /*isOn*/);\n };\n /**\n * Leave \"Shadow Edit\" mode, all changes made during shadow edit will be discarded\n */\n Editor.prototype.stopShadowEdit = function () {\n this.core.api.switchShadowEdit(this.core, false /*isOn*/);\n };\n /**\n * Check if editor is in Shadow Edit mode\n */\n Editor.prototype.isInShadowEdit = function () {\n return !!this.core.lifecycle.shadowEditFragment;\n };\n /**\n * Check if the given experimental feature is enabled\n * @param feature The feature to check\n */\n Editor.prototype.isFeatureEnabled = function (feature) {\n return this.core.lifecycle.experimentalFeatures.indexOf(feature) >= 0;\n };\n /**\n * Get a function to convert HTML string to trusted HTML string.\n * By default it will just return the input HTML directly. To override this behavior,\n * pass your own trusted HTML handler to EditorOptions.trustedHTMLHandler\n * See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/trusted-types\n */\n Editor.prototype.getTrustedHTMLHandler = function () {\n return this.core.trustedHTMLHandler;\n };\n /**\n * @deprecated Use getZoomScale() instead\n */\n Editor.prototype.getSizeTransformer = function () {\n return this.core.sizeTransformer;\n };\n /**\n * Get current zoom scale, default value is 1\n * When editor is put under a zoomed container, need to pass the zoom scale number using EditorOptions.zoomScale\n * to let editor behave correctly especially for those mouse drag/drop behaviors\n * @returns current zoom scale number\n */\n Editor.prototype.getZoomScale = function () {\n return this.core.zoomScale;\n };\n /**\n * Set current zoom scale, default value is 1\n * When editor is put under a zoomed container, need to pass the zoom scale number using EditorOptions.zoomScale\n * to let editor behave correctly especially for those mouse drag/drop behaviors\n * @param scale The new scale number to set. It should be positive number and no greater than 10, otherwise it will be ignored.\n */\n Editor.prototype.setZoomScale = function (scale) {\n if (scale > 0 && scale <= 10) {\n var oldValue = this.core.zoomScale;\n this.core.zoomScale = scale;\n if (oldValue != scale) {\n this.triggerPluginEvent(21 /* ZoomChanged */, {\n oldZoomScale: oldValue,\n newZoomScale: scale,\n }, true /*broadcast*/);\n }\n }\n };\n return Editor;\n}());\nexports.default = Editor;\n//# sourceMappingURL=Editor.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar makeReplacement = function (sourceString, replacementHTML, matchSourceCaseSensitive, shouldReplace) { return ({\n sourceString: sourceString,\n replacementHTML: replacementHTML,\n matchSourceCaseSensitive: matchSourceCaseSensitive,\n shouldReplace: shouldReplace,\n}); };\nvar defaultReplacements = [\n makeReplacement(':)', '🙂', true),\n makeReplacement(';)', '😉', true),\n makeReplacement(':O', '😲', true),\n makeReplacement(':o', '😯', true),\n makeReplacement('<3', '❤️', true),\n];\n/**\n * Wrapper for CustomReplaceContentEditFeature that provides an API for updating the\n * content edit feature\n */\nvar CustomReplacePlugin = /** @class */ (function () {\n /**\n * Create instance of CustomReplace plugin\n * @param replacements Replacement rules. If not passed, a default replacement rule set will be applied\n */\n function CustomReplacePlugin(replacements) {\n if (replacements === void 0) { replacements = defaultReplacements; }\n this.updateReplacements(replacements);\n }\n /**\n * Set the replacements that this plugin is looking for.\n * @param newReplacements new set of replacements for this plugin\n */\n CustomReplacePlugin.prototype.updateReplacements = function (newReplacements) {\n this.replacements = newReplacements;\n this.longestReplacementLength = getLongestReplacementSourceLength(this.replacements);\n this.replacementEndCharacters = getReplacementEndCharacters(this.replacements);\n };\n /**\n * Get a friendly name of this plugin\n */\n CustomReplacePlugin.prototype.getName = function () {\n return 'CustomReplace';\n };\n /**\n * Initialize this plugin\n * @param editor The editor instance\n */\n CustomReplacePlugin.prototype.initialize = function (editor) {\n this.editor = editor;\n };\n /**\n * Dispose this plugin\n */\n CustomReplacePlugin.prototype.dispose = function () {\n this.editor = null;\n };\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n CustomReplacePlugin.prototype.onPluginEvent = function (event) {\n var _this = this;\n if (event.eventType != 3 /* Input */ || this.editor.isInIME()) {\n return;\n }\n // Exit early on input events that do not insert a replacement's final character.\n if (!event.rawEvent.data || !this.replacementEndCharacters.has(event.rawEvent.data)) {\n return;\n }\n // Get the matching replacement\n var range = this.editor.getSelectionRange();\n if (range == null) {\n return;\n }\n var searcher = this.editor.getContentSearcherOfCursor(event);\n var stringToSearch = searcher.getSubStringBefore(this.longestReplacementLength);\n var replacement = this.getMatchingReplacement(stringToSearch);\n if (replacement == null) {\n return;\n }\n if (replacement.shouldReplace &&\n !replacement.shouldReplace(replacement, searcher.getWordBefore())) {\n return;\n }\n // Reconstruct a selection of the text on the document that matches the\n // replacement we selected.\n var matchingText = searcher.getSubStringBefore(replacement.sourceString.length);\n var matchingRange = searcher.getRangeFromText(matchingText, true /* exactMatch */);\n // parse the html string off the dom and inline the resulting element.\n var document = this.editor.getDocument();\n var parsingSpan = document.createElement('span');\n parsingSpan.innerHTML = this.editor.getTrustedHTMLHandler()(replacement.replacementHTML);\n var nodeToInsert = parsingSpan.childNodes.length == 1 ? parsingSpan.childNodes[0] : parsingSpan;\n // Switch the node for the selection range\n this.editor.addUndoSnapshot(function () {\n matchingRange.deleteContents();\n matchingRange.insertNode(nodeToInsert);\n _this.editor.select(nodeToInsert, -1 /* End */);\n }, null /*changeSource*/, true /*canUndoByBackspace*/);\n };\n CustomReplacePlugin.prototype.getMatchingReplacement = function (stringToSearch) {\n if (stringToSearch.length == 0) {\n return null;\n }\n var originalStringToSearch = stringToSearch.replace(/\\s/g, ' ');\n var lowerCaseStringToSearch = originalStringToSearch.toLocaleLowerCase();\n for (var _i = 0, _a = this.replacements; _i < _a.length; _i++) {\n var replacement = _a[_i];\n var _b = replacement.matchSourceCaseSensitive\n ? [originalStringToSearch, replacement.sourceString]\n : [lowerCaseStringToSearch, replacement.sourceString.toLocaleLowerCase()], sourceMatch = _b[0], replacementMatch = _b[1];\n if (sourceMatch.substring(sourceMatch.length - replacementMatch.length) ==\n replacementMatch) {\n return replacement;\n }\n }\n return null;\n };\n return CustomReplacePlugin;\n}());\nexports.default = CustomReplacePlugin;\nfunction getLongestReplacementSourceLength(replacements) {\n return Math.max.apply(null, replacements.map(function (replacement) { return replacement.sourceString.length; }));\n}\nfunction getReplacementEndCharacters(replacements) {\n var endChars = new Set();\n for (var _i = 0, replacements_1 = replacements; _i < replacements_1.length; _i++) {\n var replacement = replacements_1[_i];\n var sourceString = replacement.sourceString;\n if (sourceString.length == 0) {\n continue;\n }\n var lastChar = sourceString[sourceString.length - 1];\n if (!replacement.matchSourceCaseSensitive) {\n endChars.add(lastChar.toLocaleLowerCase());\n endChars.add(lastChar.toLocaleUpperCase());\n }\n else {\n endChars.add(lastChar);\n }\n }\n return endChars;\n}\n//# sourceMappingURL=CustomReplace.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar roosterjs_editor_api_1 = require(\"roosterjs-editor-api\");\nvar ENTITY_TYPE = 'WATERMARK_WRAPPER';\n/**\n * A watermark plugin to manage watermark string for roosterjs\n */\nvar Watermark = /** @class */ (function () {\n /**\n * Create an instance of Watermark plugin\n * @param watermark The watermark string\n */\n function Watermark(watermark, format) {\n var _this = this;\n this.watermark = watermark;\n this.format = format;\n this.showHideWatermark = function () {\n var hasFocus = _this.editor.hasFocus();\n var watermarks = _this.editor.queryElements((0, roosterjs_editor_dom_1.getEntitySelector)(ENTITY_TYPE));\n var isShowing = watermarks.length > 0;\n if (hasFocus && isShowing) {\n watermarks.forEach(_this.removeWatermark);\n _this.editor.focus();\n }\n else if (!hasFocus && !isShowing && _this.editor.isEmpty()) {\n (0, roosterjs_editor_api_1.insertEntity)(_this.editor, ENTITY_TYPE, _this.editor.getDocument().createTextNode(_this.watermark), false /*isBlock*/, false /*isReadonly*/, 0 /* Begin */);\n }\n };\n this.removeWatermark = function (wrapper) {\n var parentNode = wrapper.parentNode;\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.removeChild(wrapper);\n // After remove watermark node, if it leaves an empty DIV, append a BR node into it to make it a regular empty line\n if (_this.editor.contains(parentNode) &&\n (0, roosterjs_editor_dom_1.getTagOfNode)(parentNode) == 'DIV' &&\n !parentNode.firstChild) {\n parentNode.appendChild(_this.editor.getDocument().createElement('BR'));\n }\n };\n this.format = this.format || {\n fontSize: '14px',\n textColors: {\n lightModeColor: '#AAAAAA',\n darkModeColor: '#6B6B6B',\n },\n };\n }\n /**\n * Get a friendly name of this plugin\n */\n Watermark.prototype.getName = function () {\n return 'Watermark';\n };\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n Watermark.prototype.initialize = function (editor) {\n this.editor = editor;\n this.disposer = this.editor.addDomEventHandler({\n focus: this.showHideWatermark,\n blur: this.showHideWatermark,\n });\n };\n /**\n * Dispose this plugin\n */\n Watermark.prototype.dispose = function () {\n this.disposer();\n this.disposer = null;\n this.editor = null;\n };\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n Watermark.prototype.onPluginEvent = function (event) {\n var _a;\n if (event.eventType == 11 /* EditorReady */ ||\n (event.eventType == 7 /* ContentChanged */ &&\n ((_a = event.data) === null || _a === void 0 ? void 0 : _a.type) != ENTITY_TYPE)) {\n this.showHideWatermark();\n }\n else if (event.eventType == 15 /* EntityOperation */ &&\n event.entity.type == ENTITY_TYPE) {\n var operation = event.operation, wrapper = event.entity.wrapper;\n if (operation == 8 /* ReplaceTemporaryContent */) {\n this.removeWatermark(wrapper);\n }\n else if (event.operation == 0 /* NewEntity */) {\n (0, roosterjs_editor_dom_1.applyFormat)(wrapper, this.format, this.editor.isDarkMode());\n wrapper.spellcheck = false;\n }\n }\n };\n return Watermark;\n}());\nexports.default = Watermark;\n//# sourceMappingURL=Watermark.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar clearProceedingSnapshots_1 = require(\"./clearProceedingSnapshots\");\n/**\n * Add a new snapshot to the given snapshots data structure\n * @param snapshots The snapshots data structure to add new snapshot into\n * @param snapshot The snapshot to add\n * @param isAutoCompleteSnapshot Whether this is a snapshot before auto complete action\n */\nfunction addSnapshot(snapshots, snapshot, isAutoCompleteSnapshot) {\n if (snapshots.currentIndex < 0 || snapshot != snapshots.snapshots[snapshots.currentIndex]) {\n (0, clearProceedingSnapshots_1.default)(snapshots);\n snapshots.snapshots.push(snapshot);\n snapshots.currentIndex++;\n snapshots.totalSize += snapshot.length;\n var removeCount = 0;\n while (removeCount < snapshots.snapshots.length &&\n snapshots.totalSize > snapshots.maxSize) {\n snapshots.totalSize -= snapshots.snapshots[removeCount].length;\n removeCount++;\n }\n if (removeCount > 0) {\n snapshots.snapshots.splice(0, removeCount);\n snapshots.currentIndex -= removeCount;\n snapshots.autoCompleteIndex -= removeCount;\n }\n if (isAutoCompleteSnapshot) {\n snapshots.autoCompleteIndex = snapshots.currentIndex;\n }\n }\n}\nexports.default = addSnapshot;\n//# sourceMappingURL=addSnapshot.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar toggleListType_1 = require(\"../utils/toggleListType\");\n/**\n * Toggle bullet at selection\n * If selection contains bullet in deep level, toggle bullet will decrease the bullet level by one\n * If selection contains number list, toggle bullet will convert the number list into bullet list\n * If selection contains both bullet/numbering and normal text, the behavior is decided by corresponding\n * browser execCommand API\n * @param editor The editor instance\n */\nfunction toggleBullet(editor) {\n (0, toggleListType_1.default)(editor, 2 /* Unordered */);\n}\nexports.default = toggleBullet;\n//# sourceMappingURL=toggleBullet.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction toArray(collection) {\n return [].slice.call(collection);\n}\nexports.default = toArray;\n//# sourceMappingURL=toArray.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar extractClipboardItems_1 = require(\"./extractClipboardItems\");\nvar extractClipboardItemsForIE_1 = require(\"./extractClipboardItemsForIE\");\nvar toArray_1 = require(\"../utils/toArray\");\n/**\n * @deprecated Use extractClipboardItems and extractClipboardItemsForIE instead\n * Extract a Clipboard event\n * @param event The paste event\n * @param callback Callback function when data is ready\n * @param options Options to retrieve more items from the event, including HTML string and other customized items\n * @returns An object with the following properties:\n * types: Available types from the clipboard event\n * text: Plain text from the clipboard event\n * image: Image file from the clipboard event\n * html: Html string from the clipboard event. When set to null, it means there's no HTML found from the event.\n * When set to undefined, it means can't retrieve HTML string, there may be HTML string but direct retrieving is\n * not supported by browser.\n */\nfunction extractClipboardEvent(event, callback, options) {\n var _a;\n var dataTransfer = event.clipboardData ||\n ((_a = event.target.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView).clipboardData;\n if (dataTransfer.items) {\n event.preventDefault();\n (0, extractClipboardItems_1.default)((0, toArray_1.default)(dataTransfer.items), options).then(callback);\n }\n else {\n (0, extractClipboardItemsForIE_1.default)(dataTransfer, callback, options);\n }\n}\nexports.default = extractClipboardEvent;\n//# sourceMappingURL=extractClipboardEvent.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * Convert content copied from Teams to be well-formed\n */\nfunction convertPastedContentForLI(fragment) {\n // Sometimes it is possible that we get LI nodes directly under DIV.\n // In that case we need to convert DIV to UL. It is also possible to be OL, but we don't know it.\n // So always assume it is UL here, and later user can change it.\n if (isPureLiNode(fragment)) {\n (0, roosterjs_editor_dom_1.wrap)((0, roosterjs_editor_dom_1.toArray)(fragment.childNodes), 'UL');\n }\n else if ((0, roosterjs_editor_dom_1.safeInstanceOf)(fragment.firstChild, 'HTMLElement') &&\n isPureLiNode(fragment.firstChild)) {\n (0, roosterjs_editor_dom_1.changeElementTag)(fragment.firstChild, 'UL');\n }\n}\nexports.default = convertPastedContentForLI;\nfunction isPureLiNode(node) {\n if (node && !node.nextSibling && ['OL', 'UL', 'MENU'].indexOf((0, roosterjs_editor_dom_1.getTagOfNode)(node)) < 0) {\n var hasLi_1 = false;\n if ((0, roosterjs_editor_dom_1.toArray)(node.childNodes).every(function (childNode) {\n var _a;\n if ((0, roosterjs_editor_dom_1.safeInstanceOf)(childNode, 'Text') && !((_a = childNode.nodeValue) === null || _a === void 0 ? void 0 : _a.trim())) {\n return true;\n }\n else if ((0, roosterjs_editor_dom_1.getTagOfNode)(childNode) == 'LI') {\n hasLi_1 = true;\n return true;\n }\n else {\n return false;\n }\n }) &&\n hasLi_1) {\n return true;\n }\n }\n return false;\n}\n//# sourceMappingURL=convertPastedContentForLI.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(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))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRotateHTML = exports.updateRotateHandlePosition = exports.Rotator = void 0;\nvar ROTATE_SIZE = 32;\nvar ROTATE_GAP = 15;\nvar DEG_PER_RAD = 180 / Math.PI;\nvar DEFAULT_ROTATE_HANDLE_HEIGHT = ROTATE_SIZE / 2 + ROTATE_GAP;\nvar ROTATE_ICON_MARGIN = 8;\n/**\n * @internal\n * The rotate drag and drop handler\n */\nexports.Rotator = {\n onDragStart: function (_a) {\n var editInfo = _a.editInfo;\n return (__assign({}, editInfo));\n },\n onDragging: function (_a, e, base, deltaX, deltaY) {\n var editInfo = _a.editInfo, options = _a.options;\n var distance = editInfo.heightPx / 2 + DEFAULT_ROTATE_HANDLE_HEIGHT;\n var newX = distance * Math.sin(base.angleRad) + deltaX;\n var newY = distance * Math.cos(base.angleRad) - deltaY;\n var angleInRad = Math.atan2(newX, newY);\n if (!e.altKey) {\n var angleInDeg = angleInRad * DEG_PER_RAD;\n var adjustedAngleInDeg = Math.round(angleInDeg / options.minRotateDeg) * options.minRotateDeg;\n angleInRad = adjustedAngleInDeg / DEG_PER_RAD;\n }\n if (editInfo.angleRad != angleInRad) {\n editInfo.angleRad = angleInRad;\n return true;\n }\n else {\n return false;\n }\n },\n};\n/**\n * @internal\n * Move rotate handle. When image is very close to the border of editor, rotate handle may not be visible.\n * Fix it by reduce the distance from image to rotate handle\n */\nfunction updateRotateHandlePosition(editInfo, distance, marginVertical, rotateCenter, rotateHandle) {\n if (rotateCenter && rotateHandle && distance) {\n var angleRad = editInfo.angleRad, heightPx = editInfo.heightPx;\n var cosAngle = Math.cos(angleRad);\n var adjustedDistance = cosAngle <= 0\n ? Number.MAX_SAFE_INTEGER\n : (distance[1] + heightPx / 2 + marginVertical) / cosAngle - heightPx / 2;\n var rotateGap = Math.max(Math.min(ROTATE_GAP, adjustedDistance), 0);\n var rotateTop = Math.max(Math.min(ROTATE_SIZE, adjustedDistance - rotateGap), 0);\n rotateCenter.style.top = -rotateGap + 'px';\n rotateCenter.style.height = rotateGap + 'px';\n rotateHandle.style.top = -rotateTop + 'px';\n }\n}\nexports.updateRotateHandlePosition = updateRotateHandlePosition;\n/**\n * @internal\n * Get HTML for rotate elements, including the rotate handle with icon, and a line between the handle and the image\n */\nfunction getRotateHTML(_a) {\n var borderColor = _a.borderColor, rotateHandleBackColor = _a.rotateHandleBackColor;\n var handleLeft = ROTATE_SIZE / 2;\n return [\n {\n tag: 'div',\n className: \"r_rotateC\" /* RotateCenter */,\n style: \"position:absolute;left:50%;width:1px;background-color:\" + borderColor,\n children: [\n {\n tag: 'div',\n className: \"r_rotateH\" /* RotateHandle */,\n style: \"position:absolute;background-color:\" + rotateHandleBackColor + \";border:solid 1px \" + borderColor + \";border-radius:50%;width:\" + ROTATE_SIZE + \"px;height:\" + ROTATE_SIZE + \"px;left:-\" + handleLeft + \"px;cursor:move\",\n children: [getRotateIconHTML(borderColor)],\n },\n ],\n },\n ];\n}\nexports.getRotateHTML = getRotateHTML;\nfunction getRotateIconHTML(borderColor) {\n var _a;\n return {\n tag: 'svg',\n namespace: 'http://www.w3.org/2000/svg',\n style: \"width:16px;height:16px;margin: \" + ROTATE_ICON_MARGIN + \"px \" + ROTATE_ICON_MARGIN + \"px\",\n children: [\n {\n tag: 'path',\n namespace: 'http://www.w3.org/2000/svg',\n attributes: (_a = {\n d: 'M 10.5,10.0 A 3.8,3.8 0 1 1 6.7,6.3',\n transform: 'matrix(1.1 1.1 -1.1 1.1 11.6 -10.8)'\n },\n _a['fill-opacity'] = '0',\n _a.stroke = borderColor,\n _a),\n },\n {\n tag: 'path',\n namespace: 'http://www.w3.org/2000/svg',\n attributes: {\n d: 'M12.0 3.648l.884-.884.53 2.298-2.298-.53z',\n stroke: borderColor,\n },\n },\n ],\n };\n}\n//# sourceMappingURL=Rotator.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPendableFormatState = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * @param core The EditorCore object\n * @param forceGetStateFromDOM If set to true, will force get the format state from DOM tree.\n * @returns The cached format state if it exists. If the cached position do not exist, search for pendable elements in the DOM tree and return the pendable format state.\n */\nvar getPendableFormatState = function (core, forceGetStateFromDOM) {\n var _a;\n var range = core.api.getSelectionRange(core, true /* tryGetFromCache*/);\n var cachedPendableFormatState = core.pendingFormatState.pendableFormatState;\n var cachedPosition = (_a = core.pendingFormatState.pendableFormatPosition) === null || _a === void 0 ? void 0 : _a.normalize();\n var currentPosition = range && roosterjs_editor_dom_1.Position.getStart(range).normalize();\n var isSamePosition = currentPosition && range.collapsed && currentPosition.equalTo(cachedPosition);\n if (range && cachedPendableFormatState && isSamePosition && !forceGetStateFromDOM) {\n return cachedPendableFormatState;\n }\n else {\n return currentPosition ? queryCommandStateFromDOM(core, currentPosition) : {};\n }\n};\nexports.getPendableFormatState = getPendableFormatState;\nvar PendableStyleCheckers = {\n isBold: function (tag, style) {\n return tag == 'B' ||\n tag == 'STRONG' ||\n parseInt(style.fontWeight) >= 700 ||\n ['bold', 'bolder'].indexOf(style.fontWeight) >= 0;\n },\n isUnderline: function (tag, style) { return tag == 'U' || style.textDecoration.indexOf('underline') >= 0; },\n isItalic: function (tag, style) { return tag == 'I' || tag == 'EM' || style.fontStyle === 'italic'; },\n isSubscript: function (tag, style) { return tag == 'SUB' || style.verticalAlign === 'sub'; },\n isSuperscript: function (tag, style) { return tag == 'SUP' || style.verticalAlign === 'super'; },\n isStrikeThrough: function (tag, style) {\n return tag == 'S' || tag == 'STRIKE' || style.textDecoration.indexOf('line-through') >= 0;\n },\n};\n/**\n * CssFalsyCheckers checks for non pendable format that might overlay a pendable format, then it can prevent getPendableFormatState return falsy pendable format states.\n */\nvar CssFalsyCheckers = {\n isBold: function (style) {\n return (style.fontWeight !== '' && parseInt(style.fontWeight) < 700) ||\n style.fontWeight === 'normal';\n },\n isUnderline: function (style) {\n return style.textDecoration !== '' && style.textDecoration.indexOf('underline') < 0;\n },\n isItalic: function (style) { return style.fontStyle !== '' && style.fontStyle !== 'italic'; },\n isSubscript: function (style) { return style.verticalAlign !== '' && style.verticalAlign !== 'sub'; },\n isSuperscript: function (style) { return style.verticalAlign !== '' && style.verticalAlign !== 'super'; },\n isStrikeThrough: function (style) {\n return style.textDecoration !== '' && style.textDecoration.indexOf('line-through') < 0;\n },\n};\nfunction queryCommandStateFromDOM(core, currentPosition) {\n var node = currentPosition.node;\n var formatState = {};\n var pendableKeys = [];\n var _loop_1 = function () {\n var tag = (0, roosterjs_editor_dom_1.getTagOfNode)(node);\n var style = node.nodeType == 1 /* Element */ && node.style;\n if (tag && style) {\n Object.keys(PendableStyleCheckers).forEach(function (key) {\n if (!(pendableKeys.indexOf(key) >= 0)) {\n formatState[key] = formatState[key] || PendableStyleCheckers[key](tag, style);\n if (CssFalsyCheckers[key](style)) {\n pendableKeys.push(key);\n }\n }\n });\n }\n node = node.parentNode;\n };\n while ((0, roosterjs_editor_dom_1.contains)(core.contentDiv, node)) {\n _loop_1();\n }\n return formatState;\n}\n//# sourceMappingURL=getPendableFormatState.js.map","function isAbsolute(pathname) {\n return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n list[i] = list[k];\n }\n\n list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to) {\n var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n var toParts = to && to.split('/') || [];\n var fromParts = from && from.split('/') || [];\n\n var isToAbs = to && isAbsolute(to);\n var isFromAbs = from && isAbsolute(from);\n var mustEndAbs = isToAbs || isFromAbs;\n\n if (to && isAbsolute(to)) {\n // to is absolute\n fromParts = toParts;\n } else if (toParts.length) {\n // to is relative, drop the filename\n fromParts.pop();\n fromParts = fromParts.concat(toParts);\n }\n\n if (!fromParts.length) return '/';\n\n var hasTrailingSlash = void 0;\n if (fromParts.length) {\n var last = fromParts[fromParts.length - 1];\n hasTrailingSlash = last === '.' || last === '..' || last === '';\n } else {\n hasTrailingSlash = false;\n }\n\n var up = 0;\n for (var i = fromParts.length; i >= 0; i--) {\n var part = fromParts[i];\n\n if (part === '.') {\n spliceOne(fromParts, i);\n } else if (part === '..') {\n spliceOne(fromParts, i);\n up++;\n } else if (up) {\n spliceOne(fromParts, i);\n up--;\n }\n }\n\n if (!mustEndAbs) for (; up--; up) {\n fromParts.unshift('..');\n }if (mustEndAbs && fromParts[0] !== '' && (!fromParts[0] || !isAbsolute(fromParts[0]))) fromParts.unshift('');\n\n var result = fromParts.join('/');\n\n if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n return result;\n}\n\nexport default resolvePathname;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar normalizeTableSelection_1 = require(\"./utils/normalizeTableSelection\");\nvar forEachSelectedCell_1 = require(\"./utils/forEachSelectedCell\");\nvar getCellCoordinates_1 = require(\"./utils/getCellCoordinates\");\nvar removeCellsOutsideSelection_1 = require(\"./utils/removeCellsOutsideSelection\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar TABLE_CELL_SELECTOR = 'td,th';\nvar LEFT_CLICK = 1;\nvar RIGHT_CLICK = 3;\n/**\n * TableCellSelectionPlugin help highlight table cells\n */\nvar TableCellSelection = /** @class */ (function () {\n function TableCellSelection() {\n var _this = this;\n this.onMouseMove = function (event) {\n if (!_this.editor.contains(event.target)) {\n return;\n }\n //If already in table selection and the new target is contained in the last target cell, no need to\n //Apply selection styles again.\n if (_this.tableSelection && (0, roosterjs_editor_dom_1.contains)(_this.lastTarget, event.target, true)) {\n updateSelection(_this.editor, _this.firstTarget, 0);\n event.preventDefault();\n return;\n }\n if ((0, roosterjs_editor_dom_1.getTagOfNode)(event.target) == 'TABLE') {\n event.preventDefault();\n return;\n }\n _this.setData(event.target);\n // If there is a first target, but is not inside a table, no more actions to perform.\n if (_this.firstTarget && !_this.firstTable) {\n return;\n }\n //Ignore if\n // Is a DIV that only contains a Table\n // If the event target is not contained in the editor.\n if ((_this.lastTarget.lastChild == _this.lastTarget.firstChild &&\n (0, roosterjs_editor_dom_1.getTagOfNode)(_this.lastTarget.lastChild) == 'TABLE' &&\n (0, roosterjs_editor_dom_1.getTagOfNode)(_this.lastTarget) == 'DIV') ||\n !_this.editor.contains(_this.lastTarget)) {\n event.preventDefault();\n return;\n }\n _this.prepareSelection();\n var isNewTDContainingFirstTable = (0, roosterjs_editor_dom_1.safeInstanceOf)(_this.lastTarget, 'HTMLTableCellElement')\n ? (0, roosterjs_editor_dom_1.contains)(_this.lastTarget, _this.firstTable)\n : false;\n if ((_this.firstTable && _this.firstTable == _this.targetTable) ||\n isNewTDContainingFirstTable) {\n //When starting selection inside of a table and ends inside of the same table.\n _this.selectionInsideTableMouseMove(event);\n }\n else if (_this.tableSelection) {\n _this.restoreSelection();\n }\n if (_this.tableSelection) {\n updateSelection(_this.editor, _this.firstTarget, 0);\n event.preventDefault();\n }\n };\n this.onMouseUp = function () {\n if (_this.editor) {\n _this.removeMouseUpEventListener();\n }\n };\n //#endregion\n //#region Content Edit Features\n /**\n * When press Backspace, delete the contents inside of the selection, if it is Table Selection\n */\n this.DeleteTableContents = {\n keys: [46 /* DELETE */, 8 /* BACKSPACE */],\n shouldHandleEvent: function (_, editor) {\n var selection = editor.getSelectionRangeEx();\n return selection.type == 1 /* TableSelection */;\n },\n handleEvent: function (_, editor) {\n var selection = editor.getSelectionRangeEx();\n if (selection.type == 1 /* TableSelection */) {\n editor.addUndoSnapshot(function () {\n editor.getSelectedRegions().forEach(function (region) {\n if ((0, roosterjs_editor_dom_1.safeInstanceOf)(region.rootNode, 'HTMLTableCellElement')) {\n deleteNodeContents(region.rootNode, editor);\n }\n });\n });\n }\n },\n };\n this.lastTarget = null;\n this.firstTarget = null;\n this.tableSelection = false;\n this.tableRange = {\n firstCell: null,\n lastCell: null,\n };\n this.startedSelection = false;\n }\n /**\n * Get a friendly name of this plugin\n */\n TableCellSelection.prototype.getName = function () {\n return 'TableCellSelection';\n };\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n TableCellSelection.prototype.initialize = function (editor) {\n this.editor = editor;\n this.editor.addContentEditFeature(this.DeleteTableContents);\n };\n /**\n * Dispose this plugin\n */\n TableCellSelection.prototype.dispose = function () {\n this.editor.select(null);\n this.removeMouseUpEventListener();\n this.editor = null;\n };\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n TableCellSelection.prototype.onPluginEvent = function (event) {\n if (this.editor) {\n switch (event.eventType) {\n case 17 /* EnteredShadowEdit */:\n var selection = this.editor.getSelectionRangeEx();\n if (selection.type == 1 /* TableSelection */) {\n this.tableRange = selection.coordinates;\n this.firstTable = selection.table;\n this.tableSelection = true;\n this.editor.select(selection.table, null);\n }\n break;\n case 18 /* LeavingShadowEdit */:\n if (this.firstTable && this.tableSelection && this.tableRange) {\n var table = this.editor.queryElements('#' + this.firstTable.id);\n if (table.length == 1) {\n this.firstTable = table[0];\n this.editor.select(this.firstTable, this.tableRange);\n }\n }\n break;\n case 9 /* BeforeCutCopy */:\n this.handleBeforeCutCopy(event);\n break;\n case 5 /* MouseDown */:\n if (!this.startedSelection) {\n this.handleMouseDownEvent(event);\n }\n break;\n case 0 /* KeyDown */:\n if (!this.startedSelection) {\n this.handleKeyDownEvent(event);\n }\n else {\n event.rawEvent.preventDefault();\n }\n break;\n case 2 /* KeyUp */:\n if (!this.startedSelection) {\n this.handleKeyUpEvent(event);\n }\n else {\n event.rawEvent.preventDefault();\n }\n break;\n case 14 /* Scroll */:\n if (this.startedSelection) {\n this.handleScrollEvent();\n }\n break;\n }\n }\n };\n /**\n * Handle Scroll Event and mantains the selection range,\n * Since when we scroll the cursor does not trigger the on Mouse Move event\n * The table selection gets removed.\n */\n TableCellSelection.prototype.handleScrollEvent = function () {\n this.setData(this.editor.getElementAtCursor());\n if (this.firstTable == this.targetTable) {\n if (this.tableSelection) {\n this.vTable.selection.lastCell = (0, getCellCoordinates_1.getCellCoordinates)(this.vTable, this.lastTarget);\n this.selectTable();\n this.tableRange.lastCell = this.vTable.selection.lastCell;\n updateSelection(this.editor, this.firstTarget, 0);\n }\n }\n else if (this.tableSelection) {\n this.restoreSelection();\n }\n };\n /**\n * Handles the Before Copy Event.\n * Clear the selection range from the cloned Root.\n * @param event plugin event\n */\n TableCellSelection.prototype.handleBeforeCutCopy = function (event) {\n var _this = this;\n var selection = this.editor.getSelectionRangeEx();\n if (selection.type == 1 /* TableSelection */) {\n var clonedTable = event.clonedRoot.querySelector('table#' + selection.table.id);\n if (clonedTable) {\n var clonedVTable = new roosterjs_editor_dom_1.VTable(clonedTable);\n clonedVTable.selection = this.tableRange;\n (0, removeCellsOutsideSelection_1.removeCellsOutsideSelection)(clonedVTable);\n clonedVTable.writeBack();\n event.range.selectNode(clonedTable);\n if (event.isCut) {\n (0, forEachSelectedCell_1.forEachSelectedCell)(this.vTable, function (cell) {\n if (cell === null || cell === void 0 ? void 0 : cell.td) {\n deleteNodeContents(cell.td, _this.editor);\n }\n });\n }\n }\n }\n };\n //#region Key events\n /**\n * Handles the on key event.\n * @param event the plugin event\n */\n TableCellSelection.prototype.handleKeyDownEvent = function (event) {\n var _this = this;\n var _a = event.rawEvent, shiftKey = _a.shiftKey, ctrlKey = _a.ctrlKey, metaKey = _a.metaKey, which = _a.which;\n if ((shiftKey && (ctrlKey || metaKey)) || which == 16 /* SHIFT */) {\n return;\n }\n if (shiftKey) {\n if (!this.firstTarget) {\n var pos = this.editor.getFocusedPosition();\n var cell = getCellAtCursor(this.editor, pos.node);\n this.firstTarget = this.firstTarget || cell;\n }\n //If first target is not a table cell, we should ignore this plugin\n if (!(0, roosterjs_editor_dom_1.safeInstanceOf)(this.firstTarget, 'HTMLTableCellElement')) {\n return;\n }\n this.editor.runAsync(function (editor) {\n var pos = editor.getFocusedPosition();\n _this.setData(_this.tableSelection ? _this.lastTarget : pos.node);\n if (_this.firstTable == _this.targetTable) {\n if (!_this.shouldConvertToTableSelection() && !_this.tableSelection) {\n return;\n }\n //When selection start and end is inside of the same table\n _this.handleKeySelectionInsideTable(event);\n }\n else if (_this.tableSelection) {\n if (_this.firstTable) {\n _this.editor.select(_this.firstTable, null);\n }\n _this.tableSelection = false;\n }\n });\n }\n };\n TableCellSelection.prototype.handleKeyUpEvent = function (event) {\n var _a = event.rawEvent, shiftKey = _a.shiftKey, which = _a.which;\n if (!shiftKey && which != 16 /* SHIFT */ && this.firstTarget) {\n this.clearState();\n }\n };\n TableCellSelection.prototype.handleKeySelectionInsideTable = function (event) {\n this.firstTarget = getCellAtCursor(this.editor, this.firstTarget);\n this.lastTarget = getCellAtCursor(this.editor, this.lastTarget);\n updateSelection(this.editor, this.firstTarget, 0);\n this.vTable = this.vTable || new roosterjs_editor_dom_1.VTable(this.firstTable);\n this.tableRange.firstCell = (0, getCellCoordinates_1.getCellCoordinates)(this.vTable, this.firstTarget);\n this.tableRange.lastCell = this.getNextTD(event);\n if (!this.tableRange.lastCell ||\n this.tableRange.lastCell.y > this.vTable.cells.length - 1 ||\n this.tableRange.lastCell.y == -1) {\n //When selection is moving from inside of a table to outside\n this.lastTarget = this.editor.getElementAtCursor(TABLE_CELL_SELECTOR + ',div', this.firstTable);\n if ((0, roosterjs_editor_dom_1.safeInstanceOf)(this.lastTarget, 'HTMLTableCellElement')) {\n this.prepareSelection();\n }\n else {\n var position = new roosterjs_editor_dom_1.Position(this.targetTable, this.tableRange.lastCell.y == null || this.tableRange.lastCell.y == -1\n ? -2 /* Before */\n : -3 /* After */);\n var sel = this.editor.getDocument().defaultView.getSelection();\n var anchorNode = sel.anchorNode, anchorOffset = sel.anchorOffset;\n this.editor.select(sel.getRangeAt(0));\n sel.setBaseAndExtent(anchorNode, anchorOffset, position.node, position.offset);\n this.lastTarget = position.node;\n event.rawEvent.preventDefault();\n return;\n }\n }\n this.vTable.selection = this.tableRange;\n this.selectTable();\n var isBeginAboveEnd = this.isAfter(this.firstTarget, this.lastTarget);\n var targetPosition = new roosterjs_editor_dom_1.Position(this.lastTarget, isBeginAboveEnd ? 0 /* Begin */ : -1 /* End */);\n updateSelection(this.editor, targetPosition.node, targetPosition.offset);\n this.tableSelection = true;\n event.rawEvent.preventDefault();\n };\n //#endregion\n //#region Mouse events\n TableCellSelection.prototype.handleMouseDownEvent = function (event) {\n var _this = this;\n var _a = event.rawEvent, which = _a.which, shiftKey = _a.shiftKey;\n if (which == RIGHT_CLICK && this.tableSelection) {\n //If the user is right clicking To open context menu\n var td = this.editor.getElementAtCursor(TABLE_CELL_SELECTOR);\n var coord = (0, getCellCoordinates_1.getCellCoordinates)(this.vTable, td);\n if (coord) {\n var _b = (0, normalizeTableSelection_1.default)(this.vTable), firstCell = _b.firstCell, lastCell = _b.lastCell;\n if (coord.y >= firstCell.y &&\n coord.y <= lastCell.y &&\n coord.x >= firstCell.x &&\n coord.x <= lastCell.x) {\n this.firstTarget = this.vTable.getCell(firstCell.y, firstCell.x).td;\n this.lastTarget = this.vTable.getCell(lastCell.y, lastCell.x).td;\n if (this.firstTarget && this.lastTarget) {\n var selection = this.editor.getDocument().defaultView.getSelection();\n selection.setBaseAndExtent(this.firstTarget, 0, this.lastTarget, 0);\n this.selectTable();\n }\n return;\n }\n }\n }\n this.editor.getDocument().addEventListener('mouseup', this.onMouseUp, true /*setCapture*/);\n if (which == LEFT_CLICK && !shiftKey) {\n this.clearState();\n this.editor\n .getDocument()\n .addEventListener('mousemove', this.onMouseMove, true /*setCapture*/);\n this.startedSelection = true;\n }\n if (which == LEFT_CLICK && shiftKey) {\n this.editor.runAsync(function (editor) {\n var sel = editor.getDocument().defaultView.getSelection();\n var first = getCellAtCursor(editor, sel.anchorNode);\n var last = getCellAtCursor(editor, sel.focusNode);\n var firstTable = getTableAtCursor(editor, first);\n var targetTable = getTableAtCursor(editor, first);\n if (firstTable == targetTable &&\n (0, roosterjs_editor_dom_1.safeInstanceOf)(first, 'HTMLTableCellElement') &&\n (0, roosterjs_editor_dom_1.safeInstanceOf)(last, 'HTMLTableCellElement')) {\n _this.vTable = new roosterjs_editor_dom_1.VTable(first);\n var firstCord = (0, getCellCoordinates_1.getCellCoordinates)(_this.vTable, first);\n var lastCord = (0, getCellCoordinates_1.getCellCoordinates)(_this.vTable, last);\n _this.vTable.selection = {\n firstCell: firstCord,\n lastCell: lastCord,\n };\n _this.firstTarget = first;\n _this.lastTarget = last;\n _this.selectTable();\n _this.tableRange = _this.vTable.selection;\n _this.tableSelection = true;\n _this.firstTable = firstTable;\n _this.targetTable = targetTable;\n updateSelection(editor, first, 0);\n }\n });\n }\n };\n TableCellSelection.prototype.restoreSelection = function () {\n if (this.firstTable) {\n this.editor.select(this.firstTable, null);\n }\n this.tableSelection = false;\n var isBeginAboveEnd = this.isAfter(this.firstTarget, this.lastTarget);\n var targetPosition = new roosterjs_editor_dom_1.Position(this.lastTarget, isBeginAboveEnd ? -1 /* End */ : 0 /* Begin */);\n var firstTargetRange = new Range();\n if (this.firstTarget) {\n firstTargetRange.selectNodeContents(this.firstTarget);\n }\n updateSelection(this.editor, this.firstTarget, isBeginAboveEnd\n ? roosterjs_editor_dom_1.Position.getEnd(firstTargetRange).offset\n : roosterjs_editor_dom_1.Position.getStart(firstTargetRange).offset, targetPosition.element, targetPosition.offset);\n };\n /**\n * @internal\n * Public only for unit testing\n * @param event mouse event\n */\n TableCellSelection.prototype.selectionInsideTableMouseMove = function (event) {\n var _a;\n if (this.lastTarget != this.firstTarget) {\n updateSelection(this.editor, this.firstTarget, 0);\n if (this.firstTable != this.targetTable &&\n ((_a = this.targetTable) === null || _a === void 0 ? void 0 : _a.contains(this.firstTable))) {\n //If selection started in a table that is inside of another table and moves to parent table\n //Make the firstTarget the TD of the parent table.\n this.firstTarget = this.editor.getElementAtCursor(TABLE_CELL_SELECTOR, this.lastTarget);\n }\n if (this.firstTable) {\n this.tableSelection = true;\n this.vTable = this.vTable || new roosterjs_editor_dom_1.VTable(this.firstTable);\n this.tableRange.firstCell = (0, getCellCoordinates_1.getCellCoordinates)(this.vTable, this.firstTarget);\n this.tableRange.lastCell = (0, getCellCoordinates_1.getCellCoordinates)(this.vTable, this.lastTarget);\n this.vTable.selection = this.tableRange;\n this.selectTable();\n }\n event.preventDefault();\n }\n else if (this.lastTarget == this.firstTarget && this.tableSelection) {\n this.vTable = new roosterjs_editor_dom_1.VTable(this.firstTable);\n this.tableRange.firstCell = (0, getCellCoordinates_1.getCellCoordinates)(this.vTable, this.firstTarget);\n this.tableRange.lastCell = this.tableRange.firstCell;\n this.vTable.selection = this.tableRange;\n this.selectTable();\n }\n };\n TableCellSelection.prototype.removeMouseUpEventListener = function () {\n if (this.startedSelection) {\n this.startedSelection = false;\n this.editor.getDocument().removeEventListener('mouseup', this.onMouseUp, true);\n this.editor.getDocument().removeEventListener('mousemove', this.onMouseMove, true);\n }\n };\n //#endregion\n //#region utils\n TableCellSelection.prototype.clearState = function () {\n this.editor.select(null);\n this.vTable = null;\n this.firstTarget = null;\n this.lastTarget = null;\n this.tableRange = {\n firstCell: null,\n lastCell: null,\n };\n this.tableSelection = false;\n this.firstTable = null;\n this.targetTable = null;\n };\n TableCellSelection.prototype.getNextTD = function (event) {\n this.lastTarget = this.editor.getElementAtCursor(TABLE_CELL_SELECTOR, this.lastTarget);\n if ((0, roosterjs_editor_dom_1.safeInstanceOf)(this.lastTarget, 'HTMLTableCellElement')) {\n var coordinates = (0, getCellCoordinates_1.getCellCoordinates)(this.vTable, this.lastTarget);\n if (this.tableSelection) {\n switch (event.rawEvent.which) {\n case 39 /* RIGHT */:\n coordinates.x += this.lastTarget.colSpan;\n if (this.vTable.cells[coordinates.y][coordinates.x] == null) {\n coordinates.x = this.vTable.cells[coordinates.y].length - 1;\n coordinates.y++;\n }\n break;\n case 37 /* LEFT */:\n if (coordinates.x == 0) {\n coordinates.y--;\n }\n else {\n coordinates.x--;\n }\n break;\n case 38 /* UP */:\n coordinates.y--;\n break;\n case 40 /* DOWN */:\n coordinates.y++;\n break;\n }\n }\n if (coordinates.y >= 0 && coordinates.x >= 0) {\n this.lastTarget = this.vTable.getTd(coordinates.y, coordinates.x);\n }\n return coordinates;\n }\n return null;\n };\n //Check if the selection started in a inner table.\n TableCellSelection.prototype.prepareSelection = function () {\n var _a, _b, _c, _d;\n var isNewTargetTableContained = this.lastTarget != this.firstTarget &&\n ((_a = this.firstTable) === null || _a === void 0 ? void 0 : _a.contains((0, roosterjs_editor_dom_1.findClosestElementAncestor)(this.targetTable, this.firstTable, TABLE_CELL_SELECTOR)));\n if (isNewTargetTableContained && this.tableSelection) {\n while (isNewTargetTableContained) {\n this.lastTarget = (0, roosterjs_editor_dom_1.findClosestElementAncestor)(this.targetTable, this.firstTable, TABLE_CELL_SELECTOR);\n this.targetTable = getTableAtCursor(this.editor, this.lastTarget);\n isNewTargetTableContained =\n this.lastTarget != this.firstTarget &&\n ((_b = this.firstTable) === null || _b === void 0 ? void 0 : _b.contains((0, roosterjs_editor_dom_1.findClosestElementAncestor)(this.targetTable, this.firstTable, TABLE_CELL_SELECTOR)));\n }\n }\n var isFirstTargetTableContained = this.lastTarget != this.firstTarget &&\n ((_c = this.targetTable) === null || _c === void 0 ? void 0 : _c.contains((0, roosterjs_editor_dom_1.findClosestElementAncestor)(this.firstTable, this.targetTable, TABLE_CELL_SELECTOR)));\n if (isFirstTargetTableContained && this.tableSelection) {\n while (isFirstTargetTableContained) {\n this.firstTarget = (0, roosterjs_editor_dom_1.findClosestElementAncestor)(this.firstTable, this.targetTable, TABLE_CELL_SELECTOR);\n this.firstTable = this.editor.getElementAtCursor('table', this.firstTarget);\n isFirstTargetTableContained =\n this.lastTarget != this.firstTarget &&\n ((_d = this.targetTable) === null || _d === void 0 ? void 0 : _d.contains((0, roosterjs_editor_dom_1.findClosestElementAncestor)(this.firstTable, this.targetTable, TABLE_CELL_SELECTOR)));\n }\n }\n };\n TableCellSelection.prototype.setData = function (eventTarget) {\n var pos = this.editor.getFocusedPosition();\n if (pos) {\n this.firstTarget = this.firstTarget || getCellAtCursor(this.editor, pos.node);\n if (this.firstTarget.nodeType == Node.TEXT_NODE) {\n this.firstTarget = this.editor.getElementAtCursor(TABLE_CELL_SELECTOR, this.firstTarget);\n }\n if (!this.editor.contains(this.firstTarget) && this.lastTarget) {\n this.firstTarget = this.lastTarget;\n }\n }\n this.firstTable = getTableAtCursor(this.editor, this.firstTarget);\n this.lastTarget = getCellAtCursor(this.editor, eventTarget);\n this.targetTable = getTableAtCursor(this.editor, this.lastTarget);\n };\n TableCellSelection.prototype.isAfter = function (node1, node2) {\n var _a, _b, _c, _d;\n if (node1 && node2) {\n if (node2.contains(node1)) {\n var r1 = (_b = (_a = node1).getBoundingClientRect) === null || _b === void 0 ? void 0 : _b.call(_a);\n var r2 = (_d = (_c = node2).getBoundingClientRect) === null || _d === void 0 ? void 0 : _d.call(_c);\n if (r1 && r2) {\n return r1.top > r2.top && r1.bottom < r2.bottom;\n }\n }\n var position = new roosterjs_editor_dom_1.Position(node1, -1 /* End */);\n return position.isAfter(new roosterjs_editor_dom_1.Position(node2, -1 /* End */));\n }\n return false;\n };\n // if the user selected all the text in a cell and started selecting another TD, we should convert to vSelection\n TableCellSelection.prototype.shouldConvertToTableSelection = function () {\n var _this = this;\n if (!this.firstTable || !this.editor) {\n return false;\n }\n var regions = this.editor.getSelectedRegions();\n if (regions.length == 1) {\n return false;\n }\n var result = true;\n regions.forEach(function (value) {\n if (!(0, roosterjs_editor_dom_1.contains)(_this.firstTable, value.rootNode)) {\n result = false;\n }\n });\n return result;\n };\n TableCellSelection.prototype.selectTable = function () {\n var _a;\n if (this.editor && this.vTable) {\n (_a = this.editor) === null || _a === void 0 ? void 0 : _a.select(this.vTable.table, (0, normalizeTableSelection_1.default)(this.vTable));\n }\n };\n return TableCellSelection;\n}());\nexports.default = TableCellSelection;\nfunction deleteNodeContents(element, editor) {\n var range = new Range();\n range.selectNodeContents(element);\n range.deleteContents();\n element.appendChild(editor.getDocument().createElement('br'));\n}\nfunction updateSelection(editor, start, offset, end, endOffset) {\n var selection = editor.getDocument().defaultView.getSelection();\n end = end || start;\n endOffset = endOffset || offset;\n selection.setBaseAndExtent(start, offset, end, endOffset);\n}\nfunction getCellAtCursor(editor, node) {\n if (editor) {\n return editor.getElementAtCursor(TABLE_CELL_SELECTOR, node) || node;\n }\n return node;\n}\nfunction getTableAtCursor(editor, node) {\n if (editor) {\n return editor.getElementAtCursor('table', node);\n }\n return null;\n}\n//# sourceMappingURL=TableCellSelection.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar execCommand_1 = require(\"../utils/execCommand\");\n/**\n * Toggle strikethrough at selection\n * If selection is collapsed, it will only affect the input after caret\n * If selection contains only strikethrough text, the strikethrough style will be removed\n * If selection contains only normal text, strikethrough style will be added to the whole selected text\n * If selection contains both strikethrough and normal text, strikethrough style will be added to the whole selected text\n * @param editor The editor instance\n */\nfunction toggleStrikethrough(editor) {\n (0, execCommand_1.default)(editor, \"strikeThrough\" /* StrikeThrough */);\n}\nexports.default = toggleStrikethrough;\n//# sourceMappingURL=toggleStrikethrough.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getCellCoordinates = void 0;\n/**\n * @internal\n * Gets the coordinates of a cell\n * @param cellInput The cell the to find the coordinates\n * @returns Coordinates of the cell, null if not found\n */\nfunction getCellCoordinates(vTable, cellInput) {\n var result;\n if (vTable === null || vTable === void 0 ? void 0 : vTable.cells) {\n for (var indexY = 0; indexY < vTable.cells.length; indexY++) {\n for (var indexX = 0; indexX < vTable.cells[indexY].length; indexX++) {\n if (cellInput == vTable.cells[indexY][indexX].td) {\n result = {\n x: indexX,\n y: indexY,\n };\n }\n }\n }\n }\n return result;\n}\nexports.getCellCoordinates = getCellCoordinates;\n//# sourceMappingURL=getCellCoordinates.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar applyInlineStyle_1 = require(\"../utils/applyInlineStyle\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * Set background color at current selection\n * @param editor The editor instance\n * @param color One of two options:\n * The color string, can be any of the predefined color names (e.g, 'red')\n * or hexadecimal color string (e.g, '#FF0000') or rgb value (e.g, 'rgb(255, 0, 0)') supported by browser.\n * Currently there's no validation to the string, if the passed string is invalid, it won't take effect\n * Alternatively, you can pass a @typedef ModeIndependentColor. If in light mode, the lightModeColor property will be used.\n * If in dark mode, the darkModeColor will be used and the lightModeColor will be used when converting back to light mode.\n **/\nfunction setBackgroundColor(editor, color) {\n (0, applyInlineStyle_1.default)(editor, function (element, isInnerNode) {\n (0, roosterjs_editor_dom_1.setColor)(element, isInnerNode ? '' : color, true /*isBackground*/, editor.isDarkMode());\n });\n}\nexports.default = setBackgroundColor;\n//# sourceMappingURL=setBackgroundColor.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CursorFeatures = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar NoCycleCursorMove = {\n keys: [37 /* LEFT */, 39 /* RIGHT */],\n allowFunctionKeys: true,\n shouldHandleEvent: function (event, editor, ctrlOrMeta) {\n var range;\n var position;\n if (!ctrlOrMeta ||\n !(range = editor.getSelectionRange()) ||\n !range.collapsed ||\n !(position = roosterjs_editor_dom_1.Position.getStart(range)) ||\n !editor.isPositionAtBeginning(position)) {\n return false;\n }\n var rtl = (0, roosterjs_editor_dom_1.getComputedStyle)(position.element, 'direction') == 'rtl';\n var rawEvent = event.rawEvent;\n return (!rtl && rawEvent.which == 37 /* LEFT */) || (rtl && rawEvent.which == 39 /* RIGHT */);\n },\n handleEvent: function (event) {\n event.rawEvent.preventDefault();\n },\n defaultDisabled: !roosterjs_editor_dom_1.Browser.isChrome,\n};\n/**\n * @internal\n */\nexports.CursorFeatures = {\n noCycleCursorMove: NoCycleCursorMove,\n};\n//# sourceMappingURL=cursorFeatures.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.processNodeConvert = exports.processNodesDiscovery = void 0;\nvar LevelLists_1 = require(\"./LevelLists\");\nvar WordCustomData_1 = require(\"./WordCustomData\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/** Word list metadata style name */\nvar LOOKUP_DEPTH = 5;\n/** Name for the word list id property in the custom data */\nvar UNIQUE_LIST_ID_CUSTOM_DATA = 'UniqueListId';\n/** Word list metadata style name */\nvar MSO_LIST_STYLE_NAME = 'mso-list';\n/** Regular expression to match line breaks */\nvar LINE_BREAKS = /[\\n|\\r]/gi;\n/**\n * @internal\n * Handles the pass 1: Discovery\n * During discovery, we'll parse the metadata out of the elements and store it in the list items dictionary.\n * We'll detect cases where the list items for a particular ordered list are not next to each other. Word does these\n * for numbered headers, and we don't want to convert those, because the numbering would be completely wrong.\n */\nfunction processNodesDiscovery(wordConverter) {\n var args = wordConverter.wordConverterArgs;\n while (args.currentIndex < args.nodes.length) {\n var node = args.nodes.item(args.currentIndex);\n // Try to get the list metadata for the specified node\n var itemMetadata = getListItemMetadata(node);\n if (itemMetadata) {\n var levelInfo = args.currentListIdsByLevels[itemMetadata.level - 1] || (0, LevelLists_1.createLevelLists)();\n args.currentListIdsByLevels[itemMetadata.level - 1] = levelInfo;\n // We need to drop some list information if this is not an item next to another\n if (args.lastProcessedItem && getRealPreviousSibling(node) != args.lastProcessedItem) {\n // This list item is not next to the previous one. This means that there is some content in between them\n // so we need to reset our list of list ids per level\n resetCurrentLists(args);\n }\n // Get the list metadata for the list that will hold this item\n var listMetadata = levelInfo.listsMetadata[itemMetadata.wordListId];\n if (!listMetadata) {\n // Get the first item fake bullet.. This will be used later to check what is the right type of list\n var firstFakeBullet = getFakeBulletText(node, LOOKUP_DEPTH);\n // This is a the first item of a list.. We'll create the list metadata using the information\n // we already have from this first item\n listMetadata = {\n numberOfItems: 0,\n uniqueListId: wordConverter.nextUniqueId++,\n firstFakeBullet: firstFakeBullet,\n // If the bullet we got is empty or not found, we ignore the list out.. this means\n // that this is not an item we need to convert of that the format doesn't match what\n // we are expecting\n ignore: !firstFakeBullet || firstFakeBullet.length == 0,\n // We'll use the first fake bullet to try to figure out which type of list we create. If this list has a second\n // item, we'll perform a better comparison, but for one item lists, this will be check that will determine the list type\n tagName: getFakeBulletTagName(firstFakeBullet),\n };\n levelInfo.listsMetadata[itemMetadata.wordListId] = listMetadata;\n args.lists[listMetadata.uniqueListId.toString()] = listMetadata;\n }\n else if (!listMetadata.ignore && listMetadata.numberOfItems == 1) {\n // This is the second item we've seen for this list.. we'll compare the 2 fake bullet\n // items we have an decide if we create ordered or unordered lists based on this.\n // This is the best way we can do this since we cannot read the metadata that Word\n // puts in the head of the HTML...\n var secondFakeBullet = getFakeBulletText(node, LOOKUP_DEPTH);\n listMetadata.tagName =\n listMetadata.firstFakeBullet == secondFakeBullet ? 'UL' : 'OL';\n }\n // Set the unique id to the list\n itemMetadata.uniqueListId = listMetadata.uniqueListId;\n // Check if we need to ignore this list... we'll either know already that we need to ignore\n // it, or we'll know it because the previous list items are not next to this one\n if (listMetadata.ignore ||\n (listMetadata.tagName == 'OL' &&\n listMetadata.numberOfItems > 0 &&\n levelInfo.currentUniqueListId != itemMetadata.uniqueListId)) {\n // We need to ignore this item... and we also need to forget about the lists that\n // are not at the root level\n listMetadata.ignore = true;\n args.currentListIdsByLevels[0].currentUniqueListId = -1;\n args.currentListIdsByLevels = args.currentListIdsByLevels.slice(0, 1);\n }\n else {\n // This is an item we don't need to ignore... If added lists deep under this one before\n // we'll drop their ids from the list of ids per level.. this is because this list item\n // breaks the deeper lists.\n if (args.currentListIdsByLevels.length > itemMetadata.level) {\n args.currentListIdsByLevels = args.currentListIdsByLevels.slice(0, itemMetadata.level);\n }\n levelInfo.currentUniqueListId = itemMetadata.uniqueListId;\n // Add the list item into the list of items to be processed\n args.listItems.push(itemMetadata);\n listMetadata.numberOfItems++;\n }\n args.lastProcessedItem = node;\n }\n else {\n // Here, we know that this is not a list item, but we'll want to check if it is one \"no bullet\" list items...\n // these can be created by creating a bullet and hitting delete on it it... The content will continue to be indented, but there will\n // be no bullet and the list will continue correctly after that. Visually, it looks like the previous item has multiple lines, but\n // the HTML generated has multiple paragraphs with the same class. We'll merge these when we find them, so the logic doesn't skips\n // the list conversion thinking that the list items are not together...\n var last = args.lastProcessedItem;\n if (last &&\n getRealPreviousSibling(node) == last &&\n node.tagName == last.tagName &&\n node.className == last.className) {\n // Add 2 line breaks and move all the nodes to the last item\n last.appendChild(last.ownerDocument.createElement('br'));\n last.appendChild(last.ownerDocument.createElement('br'));\n (0, roosterjs_editor_dom_1.moveChildNodes)(last, node, true /*keepExistingChildren*/);\n // Remove the item that we don't need anymore\n node.parentNode.removeChild(node);\n }\n }\n // Move to the next element are return true if more elements need to be processed\n args.currentIndex++;\n }\n return args.listItems.length > 0;\n}\nexports.processNodesDiscovery = processNodesDiscovery;\n/**\n * @internal\n * Handles the pass 2: Conversion\n * During conversion, we'll go over the elements that belong to a list that we've marked as a list to convert, and we'll perform the\n * conversion needed\n */\nfunction processNodeConvert(wordConverter) {\n var args = wordConverter.wordConverterArgs;\n args.currentIndex = 0;\n while (args.currentIndex < args.listItems.length) {\n var metadata = args.listItems[args.currentIndex];\n var node = metadata.originalNode;\n var listMetadata = args.lists[metadata.uniqueListId.toString()];\n if (!listMetadata.ignore) {\n // We have a list item that we need to convert, get or create the list\n // that hold this item out\n var list = getOrCreateListForNode(wordConverter, node, metadata, listMetadata);\n if (list) {\n // Clean the element out.. this call gets rid of the fake bullet and unneeded nodes\n cleanupListIgnore(node, LOOKUP_DEPTH);\n // Create a new list item and transfer the children\n var li = node.ownerDocument.createElement('LI');\n (0, roosterjs_editor_dom_1.moveChildNodes)(li, node);\n // Append the list item into the list\n list.appendChild(li);\n // Remove the node we just converted\n node.parentNode.removeChild(node);\n if (listMetadata.tagName == 'UL') {\n wordConverter.numBulletsConverted++;\n }\n else {\n wordConverter.numNumberedConverted++;\n }\n }\n }\n args.currentIndex++;\n }\n return wordConverter.numBulletsConverted > 0 || wordConverter.numNumberedConverted > 0;\n}\nexports.processNodeConvert = processNodeConvert;\n/**\n * Gets or creates the list (UL or OL) that holds this item out based on the\n * items content and the specified metadata\n */\nfunction getOrCreateListForNode(wordConverter, node, metadata, listMetadata) {\n // First get the last list next to this node under the specified level. This code\n // path will return the list or will create lists if needed\n var list = recurringGetOrCreateListAtNode(node, metadata.level, listMetadata);\n // Here use the unique list ID to detect if we have the right list...\n // it is possible to have 2 different lists next to each other with different formats, so\n // we want to detect this an create separate lists for those cases\n var listId = (0, WordCustomData_1.getObject)(wordConverter.wordCustomData, list, UNIQUE_LIST_ID_CUSTOM_DATA);\n // If we have a list with and ID, but the ID is different than the ID for this list item, this\n // is a completely new list, so we'll append a new list for that\n if ((listId && listId != metadata.uniqueListId) || (!listId && list.firstChild)) {\n var newList = node.ownerDocument.createElement(listMetadata.tagName);\n list.parentNode.insertBefore(newList, list.nextSibling);\n list = newList;\n }\n // Set the list id into the custom data\n (0, WordCustomData_1.setObject)(wordConverter.wordCustomData, list, UNIQUE_LIST_ID_CUSTOM_DATA, metadata.uniqueListId);\n // This call will convert the list if needed to the right type of list required. This can happen\n // on the cases where the first list item for this list is located after a deeper list. for that\n // case, we will have created a UL for it, and we may need to convert it\n return convertListIfNeeded(wordConverter, list, listMetadata);\n}\n/**\n * Converts the list between UL and OL if needed, by using the fake bullet and\n * information already stored in the list itself\n */\nfunction convertListIfNeeded(wordConverter, list, listMetadata) {\n // Check if we need to convert the list out\n if (listMetadata.tagName != (0, roosterjs_editor_dom_1.getTagOfNode)(list)) {\n // We have the wrong list type.. convert it, set the id again and transfer all the children\n var newList = list.ownerDocument.createElement(listMetadata.tagName);\n (0, WordCustomData_1.setObject)(wordConverter.wordCustomData, newList, UNIQUE_LIST_ID_CUSTOM_DATA, (0, WordCustomData_1.getObject)(wordConverter.wordCustomData, list, UNIQUE_LIST_ID_CUSTOM_DATA));\n (0, roosterjs_editor_dom_1.moveChildNodes)(newList, list);\n list.parentNode.insertBefore(newList, list);\n list.parentNode.removeChild(list);\n list = newList;\n }\n return list;\n}\n/**\n * Gets or creates the specified list\n */\nfunction recurringGetOrCreateListAtNode(node, level, listMetadata) {\n var parent = null;\n var possibleList;\n if (level == 1) {\n // Root case, we'll check if the list is the previous sibling of the node\n possibleList = getRealPreviousSibling(node);\n }\n else {\n // If we get here, we are looking for level 2 or deeper... get the upper list\n // and check if the last element is a list\n parent = recurringGetOrCreateListAtNode(node, level - 1, null);\n possibleList = parent.lastChild;\n }\n // Check the element that we got and verify that it is a list\n if (possibleList && possibleList.nodeType == 1 /* Element */) {\n var tag = (0, roosterjs_editor_dom_1.getTagOfNode)(possibleList);\n if (tag == 'UL' || tag == 'OL') {\n // We have a list.. use it\n return possibleList;\n }\n }\n // If we get here, it means we don't have a list and we need to create one\n // this code path will always create new lists as UL lists\n var newList = node.ownerDocument.createElement(listMetadata ? listMetadata.tagName : 'UL');\n if (level == 1) {\n // For level 1, we'll insert the list before the node\n node.parentNode.insertBefore(newList, node);\n }\n else {\n // Any level 2 or above, we insert the list as the last\n // child of the upper level list\n parent.appendChild(newList);\n }\n return newList;\n}\n/**\n * Cleans up the node children by removing the children marked as mso-list: Ignore.\n * This nodes hold the fake bullet information that Word puts in and when\n * conversion is happening, we want to get rid of these elements\n */\nfunction cleanupListIgnore(node, levels) {\n var nodesToRemove = [];\n for (var child = node.firstChild; child; child = child.nextSibling) {\n // Clean up the item internally first if we need to based on the number of levels\n if (child.nodeType == 1 /* Element */ && levels > 1) {\n cleanupListIgnore(child, levels - 1);\n }\n // Try to convert word comments into ignore elements if we haven't done so for this element\n child = fixWordListComments(child, true /*removeComments*/);\n // Check if we can remove this item out\n if (isEmptySpan(child) || isIgnoreNode(child)) {\n nodesToRemove.push(child);\n }\n }\n nodesToRemove.forEach(function (child) { return node.removeChild(child); });\n}\n/**\n * Reads the word list meta dada out of the specified node. If the node\n * is not a Word list item, it returns null.\n */\nfunction getListItemMetadata(node) {\n if (node.nodeType == 1 /* Element */) {\n var listAttribute = getStyleValue(node, MSO_LIST_STYLE_NAME);\n if (listAttribute && listAttribute.length > 0) {\n try {\n // Word mso-list property holds 3 space separated values in the following format: lst1 level1 lfo0\n // Where:\n // (0) List identified for the metadata in the <head> of the document. We cannot read the <head> meta data\n // (1) Level of the list. This also maps to the <head> metadata that we cannot read, but\n // for almost all cases, it maps to the list indentation (or level). We'll use it as the\n // list indentation value\n // (2) Contains a specific list identifier.\n // Example value: \"l0 level1 lfo1\"\n var listProps = listAttribute.split(' ');\n if (listProps.length == 3) {\n return {\n level: parseInt(listProps[1].substr('level'.length)),\n wordListId: listAttribute,\n originalNode: node,\n uniqueListId: 0,\n };\n }\n }\n catch (e) { }\n }\n }\n return null;\n}\nfunction isFakeBullet(fakeBullet) {\n return ['o', '·', '§', '-'].indexOf(fakeBullet) >= 0;\n}\n/** Given a fake bullet text, returns the type of list that should be used for it */\nfunction getFakeBulletTagName(fakeBullet) {\n return isFakeBullet(fakeBullet) ? 'UL' : 'OL';\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, levels) {\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 var result = null;\n var child = node.firstChild;\n while (!result && child) {\n // First, check if we need to convert the Word list comments into real elements\n child = fixWordListComments(child, true /*removeComments*/);\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 // This is the case for image case\n if (result.length == 0) {\n result = 'o';\n }\n }\n else if (child.nodeType == 1 /* 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 child = child.nextSibling;\n }\n return result;\n}\n/**\n * If the specified element is a Word List comments, this code verifies and fixes\n * the markup when needed to ensure that Chrome bullet conversions work as expected\n * -----\n * We'll convert <!--[if !supportLists]--> and <!--[endif]--> comments into\n * <span style=\"mso-list:Ignore\"></span>... Chrome has a bug where it drops the\n * styles of the span, but we'll use these comments to recreate them out\n */\nfunction fixWordListComments(child, removeComments) {\n if (child.nodeType == 8 /* Comment */) {\n var value = child.data;\n if (value && value.trim().toLowerCase() == '[if !supportlists]') {\n // We have a list ignore start, find the end.. We know is not more than\n // 3 nodes away, so we'll optimize our checks\n var nextElement = child;\n var endComment = null;\n for (var j = 0; j < 4; j++) {\n nextElement = getRealNextSibling(nextElement);\n if (!nextElement) {\n break;\n }\n if (nextElement.nodeType == 8 /* Comment */) {\n value = nextElement.data;\n if (value && value.trim().toLowerCase() == '[endif]') {\n endComment = nextElement;\n break;\n }\n }\n }\n // if we found the end node, wrap everything out\n if (endComment) {\n var newSpan = child.ownerDocument.createElement('span');\n newSpan.setAttribute('style', 'mso-list: ignore');\n nextElement = getRealNextSibling(child);\n while (nextElement != endComment) {\n nextElement = nextElement.nextSibling;\n newSpan.appendChild(nextElement.previousSibling);\n }\n // Insert the element out and use that one as the current child\n endComment.parentNode.insertBefore(newSpan, endComment);\n // Remove the comments out if the call specified it out\n if (removeComments) {\n child.parentNode.removeChild(child);\n endComment.parentNode.removeChild(endComment);\n }\n // Last, make sure we return the new element out instead of the comment\n child = newSpan;\n }\n }\n }\n return child;\n}\n/** Finds the real previous sibling, ignoring empty text nodes */\nfunction getRealPreviousSibling(node) {\n var prevSibling = node;\n do {\n prevSibling = prevSibling.previousSibling;\n } while (prevSibling && isEmptyTextNode(prevSibling));\n return prevSibling;\n}\n/** Finds the real next sibling, ignoring empty text nodes */\nfunction getRealNextSibling(node) {\n var nextSibling = node;\n do {\n nextSibling = nextSibling.nextSibling;\n } while (nextSibling && isEmptyTextNode(nextSibling));\n return nextSibling;\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) {\n if (node.nodeType == 1 /* Element */) {\n var listAttribute = getStyleValue(node, MSO_LIST_STYLE_NAME);\n if (listAttribute &&\n listAttribute.length > 0 &&\n listAttribute.trim().toLowerCase() == 'ignore') {\n return true;\n }\n }\n return false;\n}\n/** Checks if the specified node is an empty span. */\nfunction isEmptySpan(node) {\n return (0, roosterjs_editor_dom_1.getTagOfNode)(node) == 'SPAN' && !node.firstChild;\n}\n/** Reads the specified style value from the node */\nfunction getStyleValue(node, styleName) {\n // Word uses non-standard names for the metadata that puts in the style of the element...\n // Most browsers will not provide the information for those nonstandard values through the node.style\n // property, so the only reliable way to read them is to get the attribute directly and do\n // the required parsing..\n return (0, roosterjs_editor_dom_1.getStyles)(node)[styleName] || null;\n}\n/** Checks if the node is an empty text node that can be ignored */\nfunction isEmptyTextNode(node) {\n // No node is empty\n if (!node) {\n return true;\n }\n // Empty text node is empty\n if (node.nodeType == 3 /* Text */) {\n var value = node.nodeValue;\n value = value.replace(LINE_BREAKS, '');\n return value.trim().length == 0;\n }\n // Span or Font with an empty child node is empty\n var tagName = (0, roosterjs_editor_dom_1.getTagOfNode)(node);\n if (node.firstChild == node.lastChild && (tagName == 'SPAN' || tagName == 'FONT')) {\n return isEmptyTextNode(node.firstChild);\n }\n // If not found, then this is not empty\n return false;\n}\n/** Resets the list */\nfunction resetCurrentLists(args) {\n for (var i = 0; i < args.currentListIdsByLevels.length; i++) {\n var ll = args.currentListIdsByLevels[i];\n if (ll) {\n ll.currentUniqueListId = -1;\n }\n }\n}\n//# sourceMappingURL=converterUtils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar collapseNodes_1 = require(\"../utils/collapseNodes\");\nvar isNodeInRegion_1 = require(\"./isNodeInRegion\");\nvar safeInstanceOf_1 = require(\"../utils/safeInstanceOf\");\n/**\n * Collapse nodes within this region to their common ancestor node under this region\n * @param region The region to collapse nodes in.\n * @param nodesOrBlockElements Nodes or block elements to collapse. When take BlockElement[] as input,\n * start node of the first BlockElement and end node of the last BlockElement will be used as the nodes.\n * All nodes not contained by the given region will be ignored.\n */\nfunction collapseNodesInRegion(region, nodesOrBlockElements) {\n if (!nodesOrBlockElements || nodesOrBlockElements.length == 0) {\n return [];\n }\n var nodes = (0, safeInstanceOf_1.default)(nodesOrBlockElements[0], 'Node')\n ? nodesOrBlockElements\n : [\n nodesOrBlockElements[0].getStartNode(),\n nodesOrBlockElements[nodesOrBlockElements.length - 1].getEndNode(),\n ];\n nodes = nodes && nodes.filter(function (node) { return (0, isNodeInRegion_1.default)(region, node); });\n var firstNode = nodes[0];\n var lastNode = nodes[nodes.length - 1];\n if ((0, isNodeInRegion_1.default)(region, firstNode) && (0, isNodeInRegion_1.default)(region, lastNode)) {\n return (0, collapseNodes_1.default)(region.rootNode, firstNode, lastNode, true /*canSplitParent*/);\n }\n else {\n return [];\n }\n}\nexports.default = collapseNodesInRegion;\n//# sourceMappingURL=collapseNodesInRegion.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ContentTraverser_1 = require(\"../contentTraverser/ContentTraverser\");\nvar createElement_1 = require(\"../utils/createElement\");\nvar getBlockElementAtNode_1 = require(\"../blockElements/getBlockElementAtNode\");\nvar getSelectionRangeInRegion_1 = require(\"./getSelectionRangeInRegion\");\nvar shouldSkipNode_1 = require(\"../utils/shouldSkipNode\");\n/**\n * Get all block elements covered by the selection under this region\n * @param regionBase The region to get block elements from\n * @param createBlockIfEmpty When set to true, a new empty block element will be created if there is not\n * any blocks in the region. Default value is false\n */\nfunction getSelectedBlockElementsInRegion(regionBase, createBlockIfEmpty) {\n var range = (0, getSelectionRangeInRegion_1.default)(regionBase);\n var blocks = [];\n if (range) {\n var rootNode = regionBase.rootNode, skipTags = regionBase.skipTags;\n var traverser = ContentTraverser_1.default.createSelectionTraverser(rootNode, range, skipTags);\n for (var block = traverser === null || traverser === void 0 ? void 0 : traverser.currentBlockElement; !!block; block = traverser.getNextBlockElement()) {\n blocks.push(block);\n }\n // Remove meaningless nodes\n blocks = blocks.filter(function (block) {\n var _a;\n var startNode = block.getStartNode();\n var endNode = block.getEndNode();\n if (startNode == endNode && (0, shouldSkipNode_1.default)(startNode, true /*ignoreSpace*/)) {\n (_a = startNode.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(startNode);\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (blocks.length == 0 && regionBase && !regionBase.rootNode.firstChild && createBlockIfEmpty) {\n var newNode = (0, createElement_1.default)(1 /* EmptyLine */, regionBase.rootNode.ownerDocument);\n regionBase.rootNode.appendChild(newNode);\n blocks.push((0, getBlockElementAtNode_1.default)(regionBase.rootNode, newNode));\n }\n return blocks;\n}\nexports.default = getSelectedBlockElementsInRegion;\n//# sourceMappingURL=getSelectedBlockElementsInRegion.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getStyleBasedFormatState = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar ORIGINAL_STYLE_COLOR_SELECTOR = \"[data-\" + \"ogsc\" /* OriginalStyleColor */ + \"],[data-\" + \"ogac\" /* OriginalAttributeColor */ + \"]\";\nvar ORIGINAL_STYLE_BACK_COLOR_SELECTOR = \"[data-\" + \"ogsb\" /* OriginalStyleBackgroundColor */ + \"],[data-\" + \"ogab\" /* OriginalAttributeBackgroundColor */ + \"]\";\n/**\n * @internal\n * Get style based format state from current selection, including font name/size and colors\n * @param core The EditorCore objects\n * @param node The node to get style from\n */\nvar getStyleBasedFormatState = function (core, node) {\n if (!node) {\n return {};\n }\n var styles = node ? (0, roosterjs_editor_dom_1.getComputedStyles)(node) : [];\n var isDarkMode = core.lifecycle.isDarkMode;\n var root = core.contentDiv;\n var ogTextColorNode = isDarkMode && (0, roosterjs_editor_dom_1.findClosestElementAncestor)(node, root, ORIGINAL_STYLE_COLOR_SELECTOR);\n var ogBackgroundColorNode = isDarkMode && (0, roosterjs_editor_dom_1.findClosestElementAncestor)(node, root, ORIGINAL_STYLE_BACK_COLOR_SELECTOR);\n return {\n fontName: styles[0],\n fontSize: styles[1],\n textColor: styles[2],\n backgroundColor: styles[3],\n textColors: ogTextColorNode\n ? {\n darkModeColor: styles[2],\n lightModeColor: ogTextColorNode.dataset[\"ogsc\" /* OriginalStyleColor */] ||\n ogTextColorNode.dataset[\"ogac\" /* OriginalAttributeColor */],\n }\n : undefined,\n backgroundColors: ogBackgroundColorNode\n ? {\n darkModeColor: styles[3],\n lightModeColor: ogBackgroundColorNode.dataset[\"ogsb\" /* OriginalStyleBackgroundColor */] ||\n ogBackgroundColorNode.dataset[\"ogab\" /* OriginalAttributeBackgroundColor */],\n }\n : undefined,\n };\n};\nexports.getStyleBasedFormatState = getStyleBasedFormatState;\n//# sourceMappingURL=getStyleBasedFormatState.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * Commit changes of all list changes when experiment features are allowed\n * @param editor The Editor object\n * @param chains List chains to commit\n */\nfunction experimentCommitListChains(editor, chains) {\n if ((chains === null || chains === void 0 ? void 0 : chains.length) > 0) {\n var range = editor.getSelectionRange();\n var start = range && roosterjs_editor_dom_1.Position.getStart(range);\n var end = range && roosterjs_editor_dom_1.Position.getEnd(range);\n chains.forEach(function (chain) { return chain.commit(); });\n editor.select(start, end);\n }\n}\nexports.default = experimentCommitListChains;\n//# sourceMappingURL=experimentCommitListChains.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ContentTraverser_1 = require(\"../contentTraverser/ContentTraverser\");\nvar findClosestElementAncestor_1 = require(\"../utils/findClosestElementAncestor\");\nvar getStyles_1 = require(\"../style/getStyles\");\nvar safeInstanceOf_1 = require(\"../utils/safeInstanceOf\");\nvar setStyles_1 = require(\"../style/setStyles\");\n/**\n * Set the Style of a List Item provided, with the styles that the inline child elements have\n * If the child inline elements have different styles, it will not modify the styles of the list item\n * @param element the LI Element to set the styles\n * @param styles The styles that should be applied to the element.\n */\nfunction setListItemStyle(element, styles) {\n var elementsStyles = getInlineChildElementsStyle(element);\n var stylesToApply = (0, getStyles_1.default)(element);\n styles.forEach(function (styleName) {\n var styleValues = elementsStyles.map(function (style) {\n return style[styleName] !== undefined ? style[styleName] : '';\n });\n if (styleValues &&\n (styleValues.length == 1 || new Set(styleValues).size == 1) &&\n styleValues[0]) {\n stylesToApply[styleName] = styleValues[0];\n }\n });\n (0, setStyles_1.default)(element, stylesToApply);\n}\nexports.default = setListItemStyle;\nfunction getInlineChildElementsStyle(element) {\n var result = [];\n var contentTraverser = ContentTraverser_1.default.createBodyTraverser(element);\n var currentInlineElement;\n while (contentTraverser.currentInlineElement != currentInlineElement) {\n currentInlineElement = contentTraverser.currentInlineElement;\n var currentNode = currentInlineElement.getContainerNode();\n currentNode = (0, findClosestElementAncestor_1.default)(currentNode);\n if ((0, safeInstanceOf_1.default)(currentNode, 'HTMLElement')) {\n var childStyle = (0, getStyles_1.default)(currentNode);\n if (childStyle) {\n result.push(childStyle);\n }\n }\n contentTraverser.getNextInlineElement();\n }\n return result;\n}\n//# sourceMappingURL=setListItemStyle.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar contains_1 = require(\"../utils/contains\");\n/**\n * Check if a given node is contained by the given region\n * @param region The region to check from\n * @param node The node or block element to check\n */\nfunction isNodeInRegion(region, node) {\n return !!(region &&\n (0, contains_1.default)(region.rootNode, node) &&\n (!region.nodeBefore ||\n region.nodeBefore.compareDocumentPosition(node) == 4 /* Following */) &&\n (!region.nodeAfter ||\n region.nodeAfter.compareDocumentPosition(node) == 2 /* Preceding */));\n}\nexports.default = isNodeInRegion;\n//# sourceMappingURL=isNodeInRegion.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Whether there is a snapshot added before auto complete and it can be undone now\n */\nfunction canUndoAutoComplete(snapshots) {\n return (snapshots.autoCompleteIndex >= 0 &&\n snapshots.currentIndex - snapshots.autoCompleteIndex == 1);\n}\nexports.default = canUndoAutoComplete;\n//# sourceMappingURL=canUndoAutoComplete.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isListElement = void 0;\nvar getTagOfNode_1 = require(\"../utils/getTagOfNode\");\nfunction getListTypeFromNode(node) {\n switch ((0, getTagOfNode_1.default)(node)) {\n case 'OL':\n return 1 /* Ordered */;\n case 'UL':\n return 2 /* Unordered */;\n default:\n return 0 /* None */;\n }\n}\nexports.default = getListTypeFromNode;\n/**\n * @internal\n * Check if the given DOM node is a list element (OL or UL)\n * @param node The node to check\n */\nfunction isListElement(node) {\n return getListTypeFromNode(node) != 0 /* None */;\n}\nexports.isListElement = isListElement;\n//# sourceMappingURL=getListTypeFromNode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Capitalization = void 0;\n/**\n * The enum used for controlling the capitalization of text.\n * Used by changeCapitalization API\n */\nvar Capitalization;\n(function (Capitalization) {\n /**\n * Transforms the first character after punctuation mark followed by space\n * to uppercase and the rest of characters to lowercase.\n */\n Capitalization[\"Sentence\"] = \"sentence\";\n /**\n * Transforms all characters to lowercase\n */\n Capitalization[\"Lowercase\"] = \"lowercase\";\n /**\n * Transforms all characters to uppercase\n */\n Capitalization[\"Uppercase\"] = \"uppercase\";\n /**\n * Transforms the first character of each word to uppercase\n */\n Capitalization[\"CapitalizeEachWord\"] = \"capitalize\";\n})(Capitalization = exports.Capitalization || (exports.Capitalization = {}));\n//# sourceMappingURL=Capitalization.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MarkdownFeatures = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar ZERO_WIDTH_SPACE = '\\u200B';\nfunction generateBasicMarkdownFeature(key, triggerCharacter, elementTag, useShiftKey) {\n return {\n keys: [key],\n shouldHandleEvent: function (event, editor) {\n return event.rawEvent.shiftKey === useShiftKey &&\n !!cacheGetRangeForMarkdownOperation(event, editor, triggerCharacter);\n },\n handleEvent: function (event, editor) {\n // runAsync is here to allow the event to complete so autocomplete will present the trigger character.\n editor.runAsync(function (editor) {\n handleMarkdownEvent(event, editor, triggerCharacter, elementTag);\n });\n },\n };\n}\nfunction cacheGetRangeForMarkdownOperation(event, editor, triggerCharacter) {\n return (0, roosterjs_editor_dom_1.cacheGetEventData)(event, 'MARKDOWN_RANGE', function () {\n var searcher = editor.getContentSearcherOfCursor(event);\n var startPosition;\n var endPosition;\n searcher.forEachTextInlineElement(function (textInlineElement) {\n if (endPosition && startPosition) {\n return true;\n }\n var inlineTextContent = textInlineElement.getTextContent();\n // special case for immediately preceding character being whitespace\n if (inlineTextContent[inlineTextContent.length - 1].trim().length == 0) {\n return false;\n }\n // special case for consecutive trigger characters\n if (inlineTextContent[inlineTextContent.length - 1] === triggerCharacter) {\n return false;\n }\n if (!endPosition) {\n endPosition = textInlineElement.getStartPosition().move(inlineTextContent.length);\n }\n if (inlineTextContent[0] == triggerCharacter) {\n startPosition = textInlineElement.getStartPosition();\n }\n else {\n var contentIndex = inlineTextContent.length - 1;\n for (; contentIndex > 0; contentIndex--) {\n if (startPosition) {\n return true;\n }\n if (inlineTextContent[contentIndex] == triggerCharacter &&\n inlineTextContent[contentIndex - 1].trim().length == 0) {\n startPosition = textInlineElement.getStartPosition().move(contentIndex);\n return true;\n }\n }\n }\n });\n return !!startPosition && !!endPosition && (0, roosterjs_editor_dom_1.createRange)(startPosition, endPosition);\n });\n}\nfunction handleMarkdownEvent(event, editor, triggerCharacter, elementTag) {\n editor.addUndoSnapshot(function () {\n var range = cacheGetRangeForMarkdownOperation(event, editor, triggerCharacter);\n if (!!range) {\n // get the text content range\n var textContentRange = range.cloneRange();\n textContentRange.setStart(textContentRange.startContainer, textContentRange.startOffset + 1);\n // set the removal range to include the typed last character.\n range.setEnd(range.endContainer, range.endOffset + 1);\n // extract content and put it into a new element.\n var elementToWrap = editor.getDocument().createElement(elementTag);\n elementToWrap.appendChild(textContentRange.extractContents());\n range.deleteContents();\n // ZWS here ensures we don't end up inside the newly created node.\n var nonPrintedSpaceTextNode = editor\n .getDocument()\n .createTextNode(ZERO_WIDTH_SPACE);\n range.insertNode(nonPrintedSpaceTextNode);\n range.insertNode(elementToWrap);\n editor.select(nonPrintedSpaceTextNode, -1 /* End */);\n }\n }, \"Format\" /* Format */, true /*canUndoByBackspace*/);\n}\n/**\n * Markdown bold feature. Make bold text with markdown shortcuts.\n */\nvar MarkdownBold = generateBasicMarkdownFeature(56 /* EIGHT_ASTERISK */, '*', 'b', true);\n/**\n * Markdown italics feature. Make italic text with markdown shortcuts.\n */\nvar MarkdownItalic = generateBasicMarkdownFeature(189 /* DASH_UNDERSCORE */, '_', 'i', true);\n/**\n * Markdown strikethrough feature. MAke strikethrough text with markdown shortcuts.\n */\nvar MarkdownStrikethrough = generateBasicMarkdownFeature(192 /* GRAVE_TILDE */, '~', 's', true);\n/**\n * Markdown inline code feature. Marks specific text as inline code with markdown shortcuts.\n */\nvar MarkdownInlineCode = generateBasicMarkdownFeature(192 /* GRAVE_TILDE */, '`', 'code', false);\n/**\n * @internal\n */\nexports.MarkdownFeatures = {\n markdownBold: MarkdownBold,\n markdownItalic: MarkdownItalic,\n markdownStrikethru: MarkdownStrikethrough,\n markdownInlineCode: MarkdownInlineCode,\n};\n//# sourceMappingURL=markdownFeatures.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar createElement_1 = require(\"../utils/createElement\");\nvar getRootListNode_1 = require(\"./getRootListNode\");\nvar getSelectedBlockElementsInRegion_1 = require(\"../region/getSelectedBlockElementsInRegion\");\nvar isNodeInRegion_1 = require(\"../region/isNodeInRegion\");\nvar Position_1 = require(\"../selection/Position\");\nvar safeInstanceOf_1 = require(\"../utils/safeInstanceOf\");\nvar shouldSkipNode_1 = require(\"../utils/shouldSkipNode\");\nvar toArray_1 = require(\"../utils/toArray\");\nvar VList_1 = require(\"./VList\");\nvar wrap_1 = require(\"../utils/wrap\");\nvar getLeafSibling_1 = require(\"../utils/getLeafSibling\");\nvar getListTypeFromNode_1 = require(\"./getListTypeFromNode\");\nvar ListSelector = 'ol,ul';\n/**\n * Create a VList object from the given region.\n * @param region The region to get VList from\n * @param includeSiblingLists True to also try get lists before and after the selection and merge them together,\n * false to only include the list for the selected blocks\n * @param startNode (Optional) When specified, try get VList which will contain this node.\n * If not specified, get VList from selection of this region\n */\nfunction createVListFromRegion(region, includeSiblingLists, startNode) {\n if (!region) {\n return null;\n }\n var nodes = [];\n if (startNode) {\n var list = (0, getRootListNode_1.default)(region, ListSelector, startNode);\n if (list) {\n nodes.push(list);\n }\n }\n else {\n var blocks = (0, getSelectedBlockElementsInRegion_1.default)(region);\n blocks.forEach(function (block) {\n var list = (0, getRootListNode_1.default)(region, ListSelector, block.getStartNode());\n if (list) {\n if (nodes[nodes.length - 1] != list) {\n nodes.push(list);\n }\n if (nodes.length == 1 &&\n (0, safeInstanceOf_1.default)(list, 'HTMLOListElement') &&\n list.start > 1) {\n // Do not include sibling lists if this list is not start from 1\n includeSiblingLists = false;\n }\n }\n else {\n nodes.push(block.collapseToSingleElement());\n }\n });\n if (nodes.length == 0 && !region.rootNode.firstChild) {\n var newNode = (0, createElement_1.default)(1 /* EmptyLine */, region.rootNode.ownerDocument);\n region.rootNode.appendChild(newNode);\n nodes.push(newNode);\n region.fullSelectionStart = new Position_1.default(newNode, 0 /* Begin */);\n region.fullSelectionEnd = new Position_1.default(newNode, -1 /* End */);\n }\n if (includeSiblingLists) {\n tryIncludeSiblingNode(region, nodes, false /*isNext*/);\n tryIncludeSiblingNode(region, nodes, true /*isNext*/);\n }\n nodes = nodes.filter(function (node) { return !(0, shouldSkipNode_1.default)(node, true /*ignoreSpace*/); });\n }\n var vList = null;\n if (nodes.length > 0) {\n var firstNode = nodes.shift();\n vList = (0, getListTypeFromNode_1.isListElement)(firstNode)\n ? new VList_1.default(firstNode)\n : createVListFromItemNode(firstNode);\n nodes.forEach(function (node) {\n if ((0, getListTypeFromNode_1.isListElement)(node)) {\n vList.mergeVList(new VList_1.default(node));\n }\n else {\n vList.appendItem(node, 0 /* None */);\n }\n });\n }\n return vList;\n}\nexports.default = createVListFromRegion;\nfunction tryIncludeSiblingNode(region, nodes, isNext) {\n var node = nodes[isNext ? nodes.length - 1 : 0];\n node = (0, getLeafSibling_1.getLeafSibling)(region.rootNode, node, isNext, region.skipTags, true /*ignoreSpace*/);\n node = (0, getRootListNode_1.default)(region, ListSelector, node);\n if ((0, isNodeInRegion_1.default)(region, node) && (0, getListTypeFromNode_1.isListElement)(node)) {\n if (isNext) {\n if (!(0, safeInstanceOf_1.default)(node, 'HTMLOListElement') || node.start == 1) {\n // Only include sibling list when\n // 1. This is a unordered list, OR\n // 2. This list starts from 1\n nodes.push(node);\n }\n }\n else {\n nodes.unshift(node);\n }\n }\n}\nfunction createVListFromItemNode(node) {\n // Wrap all child nodes under a single one, and put the new list under original root node\n // so that the list can carry over styles under the root node.\n var childNodes = (0, toArray_1.default)(node.childNodes);\n var nodeForItem = childNodes.length == 1 ? childNodes[0] : (0, wrap_1.default)(childNodes, 'SPAN');\n // Create a temporary OL root element for this list.\n var listNode = node.ownerDocument.createElement('ol'); // Either OL or UL is ok here\n node.appendChild(listNode);\n // Create the VList and append items\n var vList = new VList_1.default(listNode);\n vList.appendItem(nodeForItem, 0 /* None */);\n return vList;\n}\n//# sourceMappingURL=createVListFromRegion.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.restoreUndoSnapshot = void 0;\n/**\n * @internal\n * Restore an undo snapshot into editor\n * @param core The editor core object\n * @param step Steps to move, can be 0, positive or negative\n */\nvar restoreUndoSnapshot = function (core, step) {\n if (core.undo.hasNewContent && step < 0) {\n core.api.addUndoSnapshot(core, null /*callback*/, null /*changeSource*/, false /*canUndoByBackspace*/);\n }\n var snapshot = core.undo.snapshotsService.move(step);\n if (snapshot != null) {\n try {\n core.undo.isRestoring = true;\n core.api.setContent(core, snapshot, true /*triggerContentChangedEvent*/);\n }\n finally {\n core.undo.isRestoring = false;\n }\n }\n};\nexports.restoreUndoSnapshot = restoreUndoSnapshot;\n//# sourceMappingURL=restoreUndoSnapshot.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EntityFeatures = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * A content edit feature to trigger EntityOperation event with operation \"Click\" when user\n * clicks on a readonly entity.\n */\nvar ClickOnEntityFeature = {\n keys: [13 /* ENTER */],\n shouldHandleEvent: function (event, editor) { return cacheGetReadonlyEntityElement(event, editor); },\n handleEvent: function (event, editor) {\n cacheGetReadonlyEntityElement(event, editor, 1 /* Click */);\n },\n};\n/**\n * A content edit feature to trigger EntityOperation event with operation \"Escape\" when user\n * presses ESC on a readonly entity.\n */\nvar EscapeFromEntityFeature = {\n keys: [27 /* ESCAPE */],\n shouldHandleEvent: function (event, editor) { return cacheGetReadonlyEntityElement(event, editor); },\n handleEvent: function (event, editor) {\n cacheGetReadonlyEntityElement(event, editor, 3 /* Escape */);\n },\n};\nfunction cacheGetReadonlyEntityElement(event, editor, operation) {\n var element = (0, roosterjs_editor_dom_1.cacheGetEventData)(event, 'READONLY_ENTITY_ELEMENT', function () {\n var node = event.rawEvent.target;\n var entityElement = node && editor.getElementAtCursor((0, roosterjs_editor_dom_1.getEntitySelector)(), node);\n return entityElement && !entityElement.isContentEditable ? entityElement : null;\n });\n if (element && operation !== undefined) {\n editor.triggerPluginEvent(15 /* EntityOperation */, {\n operation: operation,\n rawEvent: event.rawEvent,\n entity: (0, roosterjs_editor_dom_1.getEntityFromElement)(element),\n });\n }\n return element;\n}\n/**\n * A content edit feature to split current line into two lines at the cursor when user presses\n * ENTER right before a readonly entity.\n * Browser's default behavior will insert an extra BR tag before the entity which causes an extra\n * empty line. So we override the default behavior here.\n */\nvar EnterBeforeReadonlyEntityFeature = {\n keys: [13 /* ENTER */],\n shouldHandleEvent: function (event, editor) {\n return cacheGetNeighborEntityElement(event, editor, true /*isNext*/, false /*collapseOnly*/);\n },\n handleEvent: function (event, editor) {\n var _a;\n event.rawEvent.preventDefault();\n var range = editor.getSelectionRange();\n var node = roosterjs_editor_dom_1.Position.getEnd(range).normalize().node;\n var br = editor.getDocument().createElement('BR');\n node.parentNode.insertBefore(br, node.nextSibling);\n var block = editor.getBlockElementAtNode(node);\n var newContainer;\n if (block) {\n newContainer = block.collapseToSingleElement();\n (_a = br.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(br);\n }\n editor.getSelectionRange().deleteContents();\n if (newContainer.nextSibling) {\n editor.select(newContainer.nextSibling, 0 /* Begin */);\n }\n },\n};\n/**\n * A content edit feature to trigger EntityOperation event with operation \"RemoveFromEnd\" when user\n * press BACKSPACE right after an entity\n */\nvar BackspaceAfterEntityFeature = {\n keys: [8 /* BACKSPACE */],\n shouldHandleEvent: function (event, editor) {\n return cacheGetNeighborEntityElement(event, editor, false /*isNext*/, true /*collapseOnly*/);\n },\n handleEvent: function (event, editor) {\n cacheGetNeighborEntityElement(event, editor, false /*isNext*/, true /*collapseOnly*/, 5 /* RemoveFromEnd */);\n },\n};\n/**\n * A content edit feature to trigger EntityOperation event with operation \"RemoveFromStart\" when user\n * press DELETE right after an entity\n */\nvar DeleteBeforeEntityFeature = {\n keys: [46 /* DELETE */],\n shouldHandleEvent: function (event, editor) {\n return cacheGetNeighborEntityElement(event, editor, true /*isNext*/, true /*collapseOnly*/);\n },\n handleEvent: function (event, editor) {\n cacheGetNeighborEntityElement(event, editor, true /*isNext*/, true /*collapseOnly*/, 4 /* RemoveFromStart */);\n },\n};\nfunction cacheGetNeighborEntityElement(event, editor, isNext, collapseOnly, operation) {\n var element = (0, roosterjs_editor_dom_1.cacheGetEventData)(event, 'NEIGHBOR_ENTITY_ELEMENT_' + isNext + '_' + collapseOnly, function () {\n var range = editor.getSelectionRange();\n if (collapseOnly && !range.collapsed) {\n return null;\n }\n range.commonAncestorContainer.normalize();\n var pos = roosterjs_editor_dom_1.Position.getEnd(range).normalize();\n var isAtBeginOrEnd = pos.offset == 0 || pos.isAtEnd;\n var entityNode = null;\n if (isAtBeginOrEnd) {\n var traverser = editor.getBodyTraverser(pos.node);\n var sibling = isNext\n ? pos.offset == 0\n ? traverser.currentInlineElement\n : traverser.getNextInlineElement()\n : pos.isAtEnd\n ? traverser.currentInlineElement\n : traverser.getPreviousInlineElement();\n var node = sibling && sibling.getContainerNode();\n if (!collapseOnly) {\n var block = editor.getBlockElementAtNode(pos.node);\n if (!block || !block.contains(node)) {\n node = null;\n }\n }\n entityNode = node && editor.getElementAtCursor((0, roosterjs_editor_dom_1.getEntitySelector)(), node);\n }\n return entityNode;\n });\n if (element && operation !== undefined) {\n editor.triggerPluginEvent(15 /* EntityOperation */, {\n operation: operation,\n rawEvent: event.rawEvent,\n entity: (0, roosterjs_editor_dom_1.getEntityFromElement)(element),\n });\n }\n return element;\n}\n/**\n * @internal\n */\nexports.EntityFeatures = {\n clickOnEntity: ClickOnEntityFeature,\n escapeFromEntity: EscapeFromEntityFeature,\n enterBeforeReadonlyEntity: EnterBeforeReadonlyEntityFeature,\n backspaceAfterEntity: BackspaceAfterEntityFeature,\n deleteBeforeEntity: DeleteBeforeEntityFeature,\n};\n//# sourceMappingURL=entityFeatures.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TableCellSelection = void 0;\nvar TableCellSelection_1 = require(\"./TableCellSelection\");\nObject.defineProperty(exports, \"TableCellSelection\", { enumerable: true, get: function () { return TableCellSelection_1.default; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getComputedStyle = void 0;\nvar findClosestElementAncestor_1 = require(\"./findClosestElementAncestor\");\n/**\n * Get computed styles of a node\n * @param node The node to get computed styles from\n * @param styleNames Names of style to get, can be a single name or an array.\n * Default value is font-family, font-size, color, background-color\n * @returns An array of the computed styles\n */\nfunction getComputedStyles(node, styleNames) {\n if (styleNames === void 0) { styleNames = ['font-family', 'font-size', 'color', 'background-color']; }\n var element = (0, findClosestElementAncestor_1.default)(node);\n var result = [];\n styleNames = Array.isArray(styleNames) ? styleNames : [styleNames];\n if (element) {\n var win = element.ownerDocument.defaultView || window;\n var styles = win.getComputedStyle(element);\n if (styles) {\n for (var _i = 0, styleNames_1 = styleNames; _i < styleNames_1.length; _i++) {\n var style = styleNames_1[_i];\n var value = styles.getPropertyValue(style) || '';\n value = style != 'font-family' ? value.toLowerCase() : value;\n value = style == 'font-size' ? px2Pt(value) : value;\n result.push(value);\n }\n }\n }\n return result;\n}\nexports.default = getComputedStyles;\n/**\n * A shortcut for getComputedStyles() when only one style is to be retrieved\n * @param node The node to get style from\n * @param styleName The style name\n * @returns The style value\n */\nfunction getComputedStyle(node, styleName) {\n return getComputedStyles(node, styleName)[0] || '';\n}\nexports.getComputedStyle = getComputedStyle;\nfunction px2Pt(px) {\n if (px && px.indexOf('px') == px.length - 2) {\n // Edge may not handle the floating computing well which causes the calculated value is a little less than actual value\n // So add 0.05 to fix it\n return Math.round(parseFloat(px) * 75 + 0.05) / 100 + 'pt';\n }\n return px;\n}\n//# sourceMappingURL=getComputedStyles.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./plugins/ImageResize/index\"), exports);\n//# sourceMappingURL=ImageResize.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar toArray_1 = require(\"./toArray\");\n/**\n * Query HTML elements in the container by a selector string\n * @param container Container element to query from\n * @param selector Selector string to query\n * @param forEachCallback An optional callback to be invoked on each node in query result\n * @param scope The scope of the query, default value is QueryScope.Body\n * @param range The selection range to query with. This is required when scope is not Body\n * @returns HTML Element array of the query result\n */\nfunction queryElements(container, selector, forEachCallback, scope, range) {\n if (scope === void 0) { scope = 0 /* Body */; }\n if (!container || !selector) {\n return [];\n }\n var elements = (0, toArray_1.default)(container.querySelectorAll(selector));\n if (scope != 0 /* Body */ && range) {\n var startContainer_1 = range.startContainer, startOffset = range.startOffset, endContainer_1 = range.endContainer, endOffset = range.endOffset;\n if (startContainer_1.nodeType == 1 /* Element */ && startContainer_1.firstChild) {\n var child = startContainer_1.childNodes[startOffset];\n // range.startOffset can give a value of child.length+1 when selection is after the last child\n // In that case we will use the last child instead\n startContainer_1 = child || startContainer_1.lastChild;\n }\n endContainer_1 =\n endContainer_1.nodeType == 1 /* Element */ && endContainer_1.firstChild && endOffset > 0\n ? endContainer_1.childNodes[endOffset - 1]\n : endContainer_1;\n elements = elements.filter(function (element) {\n return isIntersectWithNodeRange(element, startContainer_1, endContainer_1, scope == 2 /* InSelection */);\n });\n }\n if (forEachCallback) {\n elements.forEach(forEachCallback);\n }\n return elements;\n}\nexports.default = queryElements;\nfunction isIntersectWithNodeRange(node, startNode, endNode, nodeContainedByRangeOnly) {\n var startPosition = node.compareDocumentPosition(startNode);\n var endPosition = node.compareDocumentPosition(endNode);\n var targetPositions = [0 /* Same */, 8 /* Contains */];\n if (!nodeContainedByRangeOnly) {\n targetPositions.push(16 /* ContainedBy */);\n }\n return (checkPosition(startPosition, targetPositions) || // intersectStart\n checkPosition(endPosition, targetPositions) || // intersectEnd\n (checkPosition(startPosition, [2 /* Preceding */]) && // Contains\n checkPosition(endPosition, [4 /* Following */]) &&\n !checkPosition(endPosition, [16 /* ContainedBy */])));\n}\nfunction checkPosition(position, targets) {\n return targets.some(function (target) {\n return target == 0 /* Same */\n ? position == 0 /* Same */\n : (position & target) == target;\n });\n}\n//# sourceMappingURL=queryElements.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * An editor plugin that show a tooltip for existing link\n */\nvar HyperLink = /** @class */ (function () {\n /**\n * Create a new instance of HyperLink class\n * @param getTooltipCallback A callback function to get tooltip text for an existing hyperlink.\n * Default value is to return the href itself. If null, there will be no tooltip text.\n * @param target (Optional) Target window name for hyperlink. If null, will use \"_blank\"\n * @param onLinkClick (Optional) Open link callback (return false to use default behavior)\n */\n function HyperLink(getTooltipCallback, target, onLinkClick) {\n var _this = this;\n if (getTooltipCallback === void 0) { getTooltipCallback = function (href) { return href; }; }\n this.getTooltipCallback = getTooltipCallback;\n this.target = target;\n this.onLinkClick = onLinkClick;\n this.trackedLink = null;\n this.onMouse = function (e) {\n var a = _this.editor.getElementAtCursor('a[href]', e.target);\n var href = _this.tryGetHref(a);\n if (href) {\n _this.editor.setEditorDomAttribute('title', e.type == 'mouseover' ? _this.getTooltipCallback(href, a) : null);\n }\n };\n this.onBlur = function (e) {\n if (_this.trackedLink) {\n _this.updateLinkHrefIfShouldUpdate();\n }\n _this.resetLinkTracking();\n };\n }\n /**\n * Get a friendly name of this plugin\n */\n HyperLink.prototype.getName = function () {\n return 'Hyperlink';\n };\n /**\n * Initialize this plugin\n * @param editor The editor instance\n */\n HyperLink.prototype.initialize = function (editor) {\n this.editor = editor;\n this.disposer =\n this.getTooltipCallback &&\n editor.addDomEventHandler({\n mouseover: this.onMouse,\n mouseout: this.onMouse,\n blur: this.onBlur,\n });\n };\n /**\n * Dispose this plugin\n */\n HyperLink.prototype.dispose = function () {\n if (this.disposer) {\n this.disposer();\n this.disposer = null;\n }\n this.editor = null;\n };\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n HyperLink.prototype.onPluginEvent = function (event) {\n if (event.eventType == 6 /* MouseUp */ ||\n (event.eventType == 2 /* KeyUp */ &&\n (!this.isContentEditValue(event.rawEvent) || event.rawEvent.which == 32 /* SPACE */)) ||\n event.eventType == 7 /* ContentChanged */) {\n var anchor = this.editor.getElementAtCursor('A[href]', null /*startFrom*/, event);\n var shouldCheckUpdateLink = anchor !== this.trackedLink ||\n event.eventType == 2 /* KeyUp */ ||\n event.eventType == 7 /* ContentChanged */;\n if (this.trackedLink &&\n (shouldCheckUpdateLink || this.tryGetHref(this.trackedLink) !== this.originalHref)) {\n // If cursor has moved out of previously tracked link\n // update link href if display text doesn't match href anymore.\n if (shouldCheckUpdateLink) {\n this.updateLinkHrefIfShouldUpdate();\n }\n // If the link's href value was edited, or the cursor has moved out of the\n // previously tracked link, stop tracking the link.\n this.resetLinkTracking();\n }\n // Cache link and href value if its href attribute currently matches its display text\n if (!this.trackedLink && this.doesLinkDisplayMatchHref(anchor)) {\n this.trackedLink = anchor;\n this.originalHref = this.tryGetHref(anchor);\n }\n }\n if (event.eventType == 6 /* MouseUp */) {\n var anchor = this.editor.getElementAtCursor('A', event.rawEvent.srcElement);\n if (anchor) {\n if (this.onLinkClick && this.onLinkClick(anchor, event.rawEvent) !== false) {\n return;\n }\n var href = void 0;\n if (!roosterjs_editor_dom_1.Browser.isFirefox &&\n (href = this.tryGetHref(anchor)) &&\n (0, roosterjs_editor_dom_1.isCtrlOrMetaPressed)(event.rawEvent) &&\n event.rawEvent.button === 0) {\n try {\n var target = this.target || '_blank';\n var window_1 = this.editor.getDocument().defaultView;\n window_1.open(href, target);\n }\n catch (_a) { }\n }\n }\n }\n };\n /**\n * Try get href from an anchor element\n * The reason this is put in a try-catch is that\n * it has been seen that accessing href may throw an exception, in particular on IE/Edge\n */\n HyperLink.prototype.tryGetHref = function (anchor) {\n try {\n return anchor ? anchor.href : null;\n }\n catch (_a) { }\n };\n /**\n * Determines if KeyboardEvent is meant to edit content\n */\n HyperLink.prototype.isContentEditValue = function (event) {\n return ((0, roosterjs_editor_dom_1.isCharacterValue)(event) || event.which == 8 /* BACKSPACE */ || event.which == 46 /* DELETE */);\n };\n /**\n * Updates the href of the tracked link if the display text doesn't match href anymore\n */\n HyperLink.prototype.updateLinkHrefIfShouldUpdate = function () {\n if (!this.doesLinkDisplayMatchHref(this.trackedLink)) {\n this.updateLinkHref();\n }\n };\n /**\n * Clears the tracked link and its original href value so that it's back to default state\n */\n HyperLink.prototype.resetLinkTracking = function () {\n this.trackedLink = null;\n this.originalHref = '';\n };\n /**\n * Compares the normalized URL of inner text of element to its href to see if they match.\n */\n HyperLink.prototype.doesLinkDisplayMatchHref = function (element) {\n if (element) {\n var display = element.innerText.trim();\n // We first escape the display text so that any text passed into the regex is not\n // treated as a special character.\n var escapedDisplay = display.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n var rule = new RegExp(\"^(?:https?:\\\\/\\\\/)?\" + escapedDisplay + \"\\\\/?\", 'i');\n var href = this.tryGetHref(element);\n if (href !== null) {\n return rule.test(href);\n }\n }\n return false;\n };\n /**\n * Update href of an element in place to new display text if it's a valid URL\n */\n HyperLink.prototype.updateLinkHref = function () {\n var _this = this;\n if (this.trackedLink) {\n var linkData_1 = (0, roosterjs_editor_dom_1.matchLink)(this.trackedLink.innerText.trim());\n if (linkData_1 !== null) {\n this.editor.addUndoSnapshot(function () {\n _this.trackedLink.href = linkData_1.normalizedUrl;\n });\n }\n }\n };\n return HyperLink;\n}());\nexports.default = HyperLink;\n//# sourceMappingURL=HyperLink.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar editInfo_1 = require(\"../editInfoUtils/editInfo\");\n/**\n * Remove explicit width & height attributes on the image element.\n * @param editor The editor that contains the image\n * @param image The image to remove w/h from\n */\nfunction resetImage(editor, image) {\n editor.addUndoSnapshot(function () {\n image.style.width = '';\n image.style.height = '';\n image.style.maxWidth = '100%';\n image.removeAttribute('width');\n image.removeAttribute('height');\n (0, editInfo_1.deleteEditInfo)(image);\n }, \"ImageResize\" /* ImageResize */);\n}\nexports.default = resetImage;\n//# sourceMappingURL=resetImage.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * @internal\n * Get target size of an image with a percentage\n * @param editInfo\n * @param percentage\n * @returns [width, height] array\n */\nfunction getTargetSizeByPercentage(editInfo, percentage) {\n var naturalWidth = editInfo.naturalWidth, naturalHeight = editInfo.naturalHeight, left = editInfo.leftPercent, top = editInfo.topPercent, right = editInfo.rightPercent, bottom = editInfo.bottomPercent;\n var width = naturalWidth * (1 - left - right) * percentage;\n var height = naturalHeight * (1 - top - bottom) * percentage;\n return { width: width, height: height };\n}\nexports.default = getTargetSizeByPercentage;\n//# sourceMappingURL=getTargetSizeByPercentage.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar execCommand_1 = require(\"../utils/execCommand\");\n/**\n * Toggle underline at selection\n * If selection is collapsed, it will only affect the input after caret\n * If selection contains only underlined text, the underline style will be removed\n * If selection contains only normal text, underline style will be added to the whole selected text\n * If selection contains both underlined and normal text, the underline style will be added to the whole selected text\n * @param editor The editor instance\n */\nfunction toggleUnderline(editor) {\n (0, execCommand_1.default)(editor, \"underline\" /* Underline */);\n}\nexports.default = toggleUnderline;\n//# sourceMappingURL=toggleUnderline.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KnownCreateElementData = exports.createElement = exports.matchesSelector = exports.setColor = exports.getInnerHTML = exports.readFile = exports.safeInstanceOf = exports.toArray = exports.normalizeRect = exports.splitTextNode = exports.getLastLeafNode = exports.getFirstLeafNode = exports.getPreviousLeafSibling = exports.getNextLeafSibling = exports.wrap = exports.unwrap = exports.splitBalancedNodeRange = exports.splitParentNode = exports.queryElements = exports.matchLink = exports.isVoidHtmlElement = exports.isNodeEmpty = exports.isBlockElement = exports.getTagOfNode = exports.PendableFormatCommandMap = exports.getPendableFormatState = exports.getComputedStyle = exports.getComputedStyles = exports.fromHtml = exports.findClosestElementAncestor = exports.contains = exports.collapseNodes = exports.changeElementTag = exports.applyFormat = exports.getBrowserInfo = exports.Browser = exports.arrayPush = exports.extractClipboardItemsForIE = exports.extractClipboardItems = exports.extractClipboardEvent = exports.applyTextStyle = exports.PartialInlineElement = exports.NodeInlineElement = exports.LinkInlineElement = exports.ImageInlineElement = exports.getInlineElementAtNode = exports.PositionContentSearcher = exports.ContentTraverser = exports.getFirstLastBlockElement = exports.getBlockElementAtNode = void 0;\nexports.getTextContent = exports.deleteSelectedContent = exports.adjustInsertPosition = exports.setStyles = exports.getStyles = exports.isCtrlOrMetaPressed = exports.isCharacterValue = exports.isModifierKey = exports.clearEventDataCache = exports.cacheGetEventData = exports.getEntitySelector = exports.getEntityFromElement = exports.commitEntity = exports.chainSanitizerCallback = exports.createDefaultHtmlSanitizerOptions = exports.getInheritableStyles = exports.HtmlSanitizer = exports.canUndoAutoComplete = exports.createSnapshots = exports.moveCurrentSnapsnot = exports.moveCurrentSnapshot = exports.clearProceedingSnapshots = exports.canMoveCurrentSnapshot = exports.addSnapshot = exports.addRangeToSelection = exports.setHtmlWithSelectionPath = exports.getHtmlWithSelectionPath = exports.getSelectionPath = exports.isPositionAtBeginningOf = exports.getPositionRect = exports.createRange = exports.Position = exports.mergeBlocksInRegion = exports.getSelectionRangeInRegion = exports.isNodeInRegion = exports.collapseNodesInRegion = exports.getSelectedBlockElementsInRegion = exports.getRegionsFromRange = exports.setListItemStyle = exports.VListChain = exports.createVListFromRegion = exports.VListItem = exports.VList = exports.VTable = exports.moveChildNodes = void 0;\nvar getBlockElementAtNode_1 = require(\"./blockElements/getBlockElementAtNode\");\nObject.defineProperty(exports, \"getBlockElementAtNode\", { enumerable: true, get: function () { return getBlockElementAtNode_1.default; } });\nvar getFirstLastBlockElement_1 = require(\"./blockElements/getFirstLastBlockElement\");\nObject.defineProperty(exports, \"getFirstLastBlockElement\", { enumerable: true, get: function () { return getFirstLastBlockElement_1.default; } });\nvar ContentTraverser_1 = require(\"./contentTraverser/ContentTraverser\");\nObject.defineProperty(exports, \"ContentTraverser\", { enumerable: true, get: function () { return ContentTraverser_1.default; } });\nvar PositionContentSearcher_1 = require(\"./contentTraverser/PositionContentSearcher\");\nObject.defineProperty(exports, \"PositionContentSearcher\", { enumerable: true, get: function () { return PositionContentSearcher_1.default; } });\nvar getInlineElementAtNode_1 = require(\"./inlineElements/getInlineElementAtNode\");\nObject.defineProperty(exports, \"getInlineElementAtNode\", { enumerable: true, get: function () { return getInlineElementAtNode_1.default; } });\nvar ImageInlineElement_1 = require(\"./inlineElements/ImageInlineElement\");\nObject.defineProperty(exports, \"ImageInlineElement\", { enumerable: true, get: function () { return ImageInlineElement_1.default; } });\nvar LinkInlineElement_1 = require(\"./inlineElements/LinkInlineElement\");\nObject.defineProperty(exports, \"LinkInlineElement\", { enumerable: true, get: function () { return LinkInlineElement_1.default; } });\nvar NodeInlineElement_1 = require(\"./inlineElements/NodeInlineElement\");\nObject.defineProperty(exports, \"NodeInlineElement\", { enumerable: true, get: function () { return NodeInlineElement_1.default; } });\nvar PartialInlineElement_1 = require(\"./inlineElements/PartialInlineElement\");\nObject.defineProperty(exports, \"PartialInlineElement\", { enumerable: true, get: function () { return PartialInlineElement_1.default; } });\nvar applyTextStyle_1 = require(\"./inlineElements/applyTextStyle\");\nObject.defineProperty(exports, \"applyTextStyle\", { enumerable: true, get: function () { return applyTextStyle_1.default; } });\nvar extractClipboardEvent_1 = require(\"./clipboard/extractClipboardEvent\");\nObject.defineProperty(exports, \"extractClipboardEvent\", { enumerable: true, get: function () { return extractClipboardEvent_1.default; } });\nvar extractClipboardItems_1 = require(\"./clipboard/extractClipboardItems\");\nObject.defineProperty(exports, \"extractClipboardItems\", { enumerable: true, get: function () { return extractClipboardItems_1.default; } });\nvar extractClipboardItemsForIE_1 = require(\"./clipboard/extractClipboardItemsForIE\");\nObject.defineProperty(exports, \"extractClipboardItemsForIE\", { enumerable: true, get: function () { return extractClipboardItemsForIE_1.default; } });\nvar arrayPush_1 = require(\"./utils/arrayPush\");\nObject.defineProperty(exports, \"arrayPush\", { enumerable: true, get: function () { return arrayPush_1.default; } });\nvar Browser_1 = require(\"./utils/Browser\");\nObject.defineProperty(exports, \"Browser\", { enumerable: true, get: function () { return Browser_1.Browser; } });\nObject.defineProperty(exports, \"getBrowserInfo\", { enumerable: true, get: function () { return Browser_1.getBrowserInfo; } });\nvar applyFormat_1 = require(\"./utils/applyFormat\");\nObject.defineProperty(exports, \"applyFormat\", { enumerable: true, get: function () { return applyFormat_1.default; } });\nvar changeElementTag_1 = require(\"./utils/changeElementTag\");\nObject.defineProperty(exports, \"changeElementTag\", { enumerable: true, get: function () { return changeElementTag_1.default; } });\nvar collapseNodes_1 = require(\"./utils/collapseNodes\");\nObject.defineProperty(exports, \"collapseNodes\", { enumerable: true, get: function () { return collapseNodes_1.default; } });\nvar contains_1 = require(\"./utils/contains\");\nObject.defineProperty(exports, \"contains\", { enumerable: true, get: function () { return contains_1.default; } });\nvar findClosestElementAncestor_1 = require(\"./utils/findClosestElementAncestor\");\nObject.defineProperty(exports, \"findClosestElementAncestor\", { enumerable: true, get: function () { return findClosestElementAncestor_1.default; } });\nvar fromHtml_1 = require(\"./utils/fromHtml\");\nObject.defineProperty(exports, \"fromHtml\", { enumerable: true, get: function () { return fromHtml_1.default; } });\nvar getComputedStyles_1 = require(\"./utils/getComputedStyles\");\nObject.defineProperty(exports, \"getComputedStyles\", { enumerable: true, get: function () { return getComputedStyles_1.default; } });\nObject.defineProperty(exports, \"getComputedStyle\", { enumerable: true, get: function () { return getComputedStyles_1.getComputedStyle; } });\nvar getPendableFormatState_1 = require(\"./utils/getPendableFormatState\");\nObject.defineProperty(exports, \"getPendableFormatState\", { enumerable: true, get: function () { return getPendableFormatState_1.default; } });\nObject.defineProperty(exports, \"PendableFormatCommandMap\", { enumerable: true, get: function () { return getPendableFormatState_1.PendableFormatCommandMap; } });\nvar getTagOfNode_1 = require(\"./utils/getTagOfNode\");\nObject.defineProperty(exports, \"getTagOfNode\", { enumerable: true, get: function () { return getTagOfNode_1.default; } });\nvar isBlockElement_1 = require(\"./utils/isBlockElement\");\nObject.defineProperty(exports, \"isBlockElement\", { enumerable: true, get: function () { return isBlockElement_1.default; } });\nvar isNodeEmpty_1 = require(\"./utils/isNodeEmpty\");\nObject.defineProperty(exports, \"isNodeEmpty\", { enumerable: true, get: function () { return isNodeEmpty_1.default; } });\nvar isVoidHtmlElement_1 = require(\"./utils/isVoidHtmlElement\");\nObject.defineProperty(exports, \"isVoidHtmlElement\", { enumerable: true, get: function () { return isVoidHtmlElement_1.default; } });\nvar matchLink_1 = require(\"./utils/matchLink\");\nObject.defineProperty(exports, \"matchLink\", { enumerable: true, get: function () { return matchLink_1.default; } });\nvar queryElements_1 = require(\"./utils/queryElements\");\nObject.defineProperty(exports, \"queryElements\", { enumerable: true, get: function () { return queryElements_1.default; } });\nvar splitParentNode_1 = require(\"./utils/splitParentNode\");\nObject.defineProperty(exports, \"splitParentNode\", { enumerable: true, get: function () { return splitParentNode_1.default; } });\nObject.defineProperty(exports, \"splitBalancedNodeRange\", { enumerable: true, get: function () { return splitParentNode_1.splitBalancedNodeRange; } });\nvar unwrap_1 = require(\"./utils/unwrap\");\nObject.defineProperty(exports, \"unwrap\", { enumerable: true, get: function () { return unwrap_1.default; } });\nvar wrap_1 = require(\"./utils/wrap\");\nObject.defineProperty(exports, \"wrap\", { enumerable: true, get: function () { return wrap_1.default; } });\nvar getLeafSibling_1 = require(\"./utils/getLeafSibling\");\nObject.defineProperty(exports, \"getNextLeafSibling\", { enumerable: true, get: function () { return getLeafSibling_1.getNextLeafSibling; } });\nObject.defineProperty(exports, \"getPreviousLeafSibling\", { enumerable: true, get: function () { return getLeafSibling_1.getPreviousLeafSibling; } });\nvar getLeafNode_1 = require(\"./utils/getLeafNode\");\nObject.defineProperty(exports, \"getFirstLeafNode\", { enumerable: true, get: function () { return getLeafNode_1.getFirstLeafNode; } });\nObject.defineProperty(exports, \"getLastLeafNode\", { enumerable: true, get: function () { return getLeafNode_1.getLastLeafNode; } });\nvar splitTextNode_1 = require(\"./utils/splitTextNode\");\nObject.defineProperty(exports, \"splitTextNode\", { enumerable: true, get: function () { return splitTextNode_1.default; } });\nvar normalizeRect_1 = require(\"./utils/normalizeRect\");\nObject.defineProperty(exports, \"normalizeRect\", { enumerable: true, get: function () { return normalizeRect_1.default; } });\nvar toArray_1 = require(\"./utils/toArray\");\nObject.defineProperty(exports, \"toArray\", { enumerable: true, get: function () { return toArray_1.default; } });\nvar safeInstanceOf_1 = require(\"./utils/safeInstanceOf\");\nObject.defineProperty(exports, \"safeInstanceOf\", { enumerable: true, get: function () { return safeInstanceOf_1.default; } });\nvar readFile_1 = require(\"./utils/readFile\");\nObject.defineProperty(exports, \"readFile\", { enumerable: true, get: function () { return readFile_1.default; } });\nvar getInnerHTML_1 = require(\"./utils/getInnerHTML\");\nObject.defineProperty(exports, \"getInnerHTML\", { enumerable: true, get: function () { return getInnerHTML_1.default; } });\nvar setColor_1 = require(\"./utils/setColor\");\nObject.defineProperty(exports, \"setColor\", { enumerable: true, get: function () { return setColor_1.default; } });\nvar matchesSelector_1 = require(\"./utils/matchesSelector\");\nObject.defineProperty(exports, \"matchesSelector\", { enumerable: true, get: function () { return matchesSelector_1.default; } });\nvar createElement_1 = require(\"./utils/createElement\");\nObject.defineProperty(exports, \"createElement\", { enumerable: true, get: function () { return createElement_1.default; } });\nObject.defineProperty(exports, \"KnownCreateElementData\", { enumerable: true, get: function () { return createElement_1.KnownCreateElementData; } });\nvar moveChildNodes_1 = require(\"./utils/moveChildNodes\");\nObject.defineProperty(exports, \"moveChildNodes\", { enumerable: true, get: function () { return moveChildNodes_1.default; } });\nvar VTable_1 = require(\"./table/VTable\");\nObject.defineProperty(exports, \"VTable\", { enumerable: true, get: function () { return VTable_1.default; } });\nvar VList_1 = require(\"./list/VList\");\nObject.defineProperty(exports, \"VList\", { enumerable: true, get: function () { return VList_1.default; } });\nvar VListItem_1 = require(\"./list/VListItem\");\nObject.defineProperty(exports, \"VListItem\", { enumerable: true, get: function () { return VListItem_1.default; } });\nvar createVListFromRegion_1 = require(\"./list/createVListFromRegion\");\nObject.defineProperty(exports, \"createVListFromRegion\", { enumerable: true, get: function () { return createVListFromRegion_1.default; } });\nvar VListChain_1 = require(\"./list/VListChain\");\nObject.defineProperty(exports, \"VListChain\", { enumerable: true, get: function () { return VListChain_1.default; } });\nvar setListItemStyle_1 = require(\"./list/setListItemStyle\");\nObject.defineProperty(exports, \"setListItemStyle\", { enumerable: true, get: function () { return setListItemStyle_1.default; } });\nvar getRegionsFromRange_1 = require(\"./region/getRegionsFromRange\");\nObject.defineProperty(exports, \"getRegionsFromRange\", { enumerable: true, get: function () { return getRegionsFromRange_1.default; } });\nvar getSelectedBlockElementsInRegion_1 = require(\"./region/getSelectedBlockElementsInRegion\");\nObject.defineProperty(exports, \"getSelectedBlockElementsInRegion\", { enumerable: true, get: function () { return getSelectedBlockElementsInRegion_1.default; } });\nvar collapseNodesInRegion_1 = require(\"./region/collapseNodesInRegion\");\nObject.defineProperty(exports, \"collapseNodesInRegion\", { enumerable: true, get: function () { return collapseNodesInRegion_1.default; } });\nvar isNodeInRegion_1 = require(\"./region/isNodeInRegion\");\nObject.defineProperty(exports, \"isNodeInRegion\", { enumerable: true, get: function () { return isNodeInRegion_1.default; } });\nvar getSelectionRangeInRegion_1 = require(\"./region/getSelectionRangeInRegion\");\nObject.defineProperty(exports, \"getSelectionRangeInRegion\", { enumerable: true, get: function () { return getSelectionRangeInRegion_1.default; } });\nvar mergeBlocksInRegion_1 = require(\"./region/mergeBlocksInRegion\");\nObject.defineProperty(exports, \"mergeBlocksInRegion\", { enumerable: true, get: function () { return mergeBlocksInRegion_1.default; } });\nvar Position_1 = require(\"./selection/Position\");\nObject.defineProperty(exports, \"Position\", { enumerable: true, get: function () { return Position_1.default; } });\nvar createRange_1 = require(\"./selection/createRange\");\nObject.defineProperty(exports, \"createRange\", { enumerable: true, get: function () { return createRange_1.default; } });\nvar getPositionRect_1 = require(\"./selection/getPositionRect\");\nObject.defineProperty(exports, \"getPositionRect\", { enumerable: true, get: function () { return getPositionRect_1.default; } });\nvar isPositionAtBeginningOf_1 = require(\"./selection/isPositionAtBeginningOf\");\nObject.defineProperty(exports, \"isPositionAtBeginningOf\", { enumerable: true, get: function () { return isPositionAtBeginningOf_1.default; } });\nvar getSelectionPath_1 = require(\"./selection/getSelectionPath\");\nObject.defineProperty(exports, \"getSelectionPath\", { enumerable: true, get: function () { return getSelectionPath_1.default; } });\nvar getHtmlWithSelectionPath_1 = require(\"./selection/getHtmlWithSelectionPath\");\nObject.defineProperty(exports, \"getHtmlWithSelectionPath\", { enumerable: true, get: function () { return getHtmlWithSelectionPath_1.default; } });\nvar setHtmlWithSelectionPath_1 = require(\"./selection/setHtmlWithSelectionPath\");\nObject.defineProperty(exports, \"setHtmlWithSelectionPath\", { enumerable: true, get: function () { return setHtmlWithSelectionPath_1.default; } });\nvar addRangeToSelection_1 = require(\"./selection/addRangeToSelection\");\nObject.defineProperty(exports, \"addRangeToSelection\", { enumerable: true, get: function () { return addRangeToSelection_1.default; } });\nvar addSnapshot_1 = require(\"./snapshots/addSnapshot\");\nObject.defineProperty(exports, \"addSnapshot\", { enumerable: true, get: function () { return addSnapshot_1.default; } });\nvar canMoveCurrentSnapshot_1 = require(\"./snapshots/canMoveCurrentSnapshot\");\nObject.defineProperty(exports, \"canMoveCurrentSnapshot\", { enumerable: true, get: function () { return canMoveCurrentSnapshot_1.default; } });\nvar clearProceedingSnapshots_1 = require(\"./snapshots/clearProceedingSnapshots\");\nObject.defineProperty(exports, \"clearProceedingSnapshots\", { enumerable: true, get: function () { return clearProceedingSnapshots_1.default; } });\nvar moveCurrentSnapshot_1 = require(\"./snapshots/moveCurrentSnapshot\");\nObject.defineProperty(exports, \"moveCurrentSnapshot\", { enumerable: true, get: function () { return moveCurrentSnapshot_1.default; } });\nObject.defineProperty(exports, \"moveCurrentSnapsnot\", { enumerable: true, get: function () { return moveCurrentSnapshot_1.moveCurrentSnapsnot; } });\nvar createSnapshots_1 = require(\"./snapshots/createSnapshots\");\nObject.defineProperty(exports, \"createSnapshots\", { enumerable: true, get: function () { return createSnapshots_1.default; } });\nvar canUndoAutoComplete_1 = require(\"./snapshots/canUndoAutoComplete\");\nObject.defineProperty(exports, \"canUndoAutoComplete\", { enumerable: true, get: function () { return canUndoAutoComplete_1.default; } });\nvar HtmlSanitizer_1 = require(\"./htmlSanitizer/HtmlSanitizer\");\nObject.defineProperty(exports, \"HtmlSanitizer\", { enumerable: true, get: function () { return HtmlSanitizer_1.default; } });\nvar getInheritableStyles_1 = require(\"./htmlSanitizer/getInheritableStyles\");\nObject.defineProperty(exports, \"getInheritableStyles\", { enumerable: true, get: function () { return getInheritableStyles_1.default; } });\nvar createDefaultHtmlSanitizerOptions_1 = require(\"./htmlSanitizer/createDefaultHtmlSanitizerOptions\");\nObject.defineProperty(exports, \"createDefaultHtmlSanitizerOptions\", { enumerable: true, get: function () { return createDefaultHtmlSanitizerOptions_1.default; } });\nvar chainSanitizerCallback_1 = require(\"./htmlSanitizer/chainSanitizerCallback\");\nObject.defineProperty(exports, \"chainSanitizerCallback\", { enumerable: true, get: function () { return chainSanitizerCallback_1.default; } });\nvar commitEntity_1 = require(\"./entity/commitEntity\");\nObject.defineProperty(exports, \"commitEntity\", { enumerable: true, get: function () { return commitEntity_1.default; } });\nvar getEntityFromElement_1 = require(\"./entity/getEntityFromElement\");\nObject.defineProperty(exports, \"getEntityFromElement\", { enumerable: true, get: function () { return getEntityFromElement_1.default; } });\nvar getEntitySelector_1 = require(\"./entity/getEntitySelector\");\nObject.defineProperty(exports, \"getEntitySelector\", { enumerable: true, get: function () { return getEntitySelector_1.default; } });\nvar cacheGetEventData_1 = require(\"./event/cacheGetEventData\");\nObject.defineProperty(exports, \"cacheGetEventData\", { enumerable: true, get: function () { return cacheGetEventData_1.default; } });\nvar clearEventDataCache_1 = require(\"./event/clearEventDataCache\");\nObject.defineProperty(exports, \"clearEventDataCache\", { enumerable: true, get: function () { return clearEventDataCache_1.default; } });\nvar isModifierKey_1 = require(\"./event/isModifierKey\");\nObject.defineProperty(exports, \"isModifierKey\", { enumerable: true, get: function () { return isModifierKey_1.default; } });\nvar isCharacterValue_1 = require(\"./event/isCharacterValue\");\nObject.defineProperty(exports, \"isCharacterValue\", { enumerable: true, get: function () { return isCharacterValue_1.default; } });\nvar isCtrlOrMetaPressed_1 = require(\"./event/isCtrlOrMetaPressed\");\nObject.defineProperty(exports, \"isCtrlOrMetaPressed\", { enumerable: true, get: function () { return isCtrlOrMetaPressed_1.default; } });\nvar getStyles_1 = require(\"./style/getStyles\");\nObject.defineProperty(exports, \"getStyles\", { enumerable: true, get: function () { return getStyles_1.default; } });\nvar setStyles_1 = require(\"./style/setStyles\");\nObject.defineProperty(exports, \"setStyles\", { enumerable: true, get: function () { return setStyles_1.default; } });\nvar adjustInsertPosition_1 = require(\"./edit/adjustInsertPosition\");\nObject.defineProperty(exports, \"adjustInsertPosition\", { enumerable: true, get: function () { return adjustInsertPosition_1.default; } });\nvar deleteSelectedContent_1 = require(\"./edit/deleteSelectedContent\");\nObject.defineProperty(exports, \"deleteSelectedContent\", { enumerable: true, get: function () { return deleteSelectedContent_1.default; } });\nvar getTextContent_1 = require(\"./edit/getTextContent\");\nObject.defineProperty(exports, \"getTextContent\", { enumerable: true, get: function () { return getTextContent_1.default; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.focus = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * Focus to editor. If there is a cached selection range, use it as current selection\n * @param core The EditorCore object\n */\nvar focus = function (core) {\n if (!core.lifecycle.shadowEditFragment) {\n if (!core.api.hasFocus(core) ||\n !core.api.getSelectionRange(core, false /*tryGetFromCache*/)) {\n // Focus (document.activeElement indicates) and selection are mostly in sync, but could be out of sync in some extreme cases.\n // i.e. if you programmatically change window selection to point to a non-focusable DOM element (i.e. tabindex=-1 etc.).\n // On Chrome/Firefox, it does not change document.activeElement. On Edge/IE, it change document.activeElement to be body\n // Although on Chrome/Firefox, document.activeElement points to editor, you cannot really type which we don't want (no cursor).\n // So here we always do a live selection pull on DOM and make it point in Editor. The pitfall is, the cursor could be reset\n // to very begin to of editor since we don't really have last saved selection (created on blur which does not fire in this case).\n // It should be better than the case you cannot type\n if (!core.domEvent.selectionRange ||\n !core.api.selectRange(core, core.domEvent.selectionRange, true /*skipSameRange*/)) {\n var node = (0, roosterjs_editor_dom_1.getFirstLeafNode)(core.contentDiv) || core.contentDiv;\n core.api.selectRange(core, (0, roosterjs_editor_dom_1.createRange)(node, 0 /* Begin */), true /*skipSameRange*/);\n }\n }\n // remember to clear cached selection range\n core.domEvent.selectionRange = null;\n // This is more a fallback to ensure editor gets focus if it didn't manage to move focus to editor\n if (!core.api.hasFocus(core)) {\n core.contentDiv.focus();\n }\n }\n};\nexports.focus = focus;\n//# sourceMappingURL=focus.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SelectionRangeTypes = void 0;\n/**\n * Types of Selection Ranges that the SelectionRangeEx can return\n */\nvar SelectionRangeTypes;\n(function (SelectionRangeTypes) {\n /**\n * Normal selection range provided by browser.\n */\n SelectionRangeTypes[SelectionRangeTypes[\"Normal\"] = 0] = \"Normal\";\n /**\n * Selection made inside of a single table.\n */\n SelectionRangeTypes[SelectionRangeTypes[\"TableSelection\"] = 1] = \"TableSelection\";\n})(SelectionRangeTypes = exports.SelectionRangeTypes || (exports.SelectionRangeTypes = {}));\n//# sourceMappingURL=SelectionRangeEx.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.selectRange = void 0;\nvar hasFocus_1 = require(\"./hasFocus\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * Change the editor selection to the given range\n * @param core The EditorCore object\n * @param range The range to select\n * @param skipSameRange When set to true, do nothing if the given range is the same with current selection\n * in editor, otherwise it will always remove current selection range and set to the given one.\n * This parameter is always treat as true in Edge to avoid some weird runtime exception.\n */\nvar selectRange = function (core, range, skipSameRange) {\n if (!core.lifecycle.shadowEditSelectionPath && (0, roosterjs_editor_dom_1.contains)(core.contentDiv, range)) {\n (0, roosterjs_editor_dom_1.addRangeToSelection)(range, skipSameRange);\n if (!(0, hasFocus_1.hasFocus)(core)) {\n core.domEvent.selectionRange = range;\n }\n if (range.collapsed) {\n // If selected, and current selection is collapsed,\n // need to restore pending format state if exists.\n restorePendingFormatState(core);\n }\n return true;\n }\n else {\n return false;\n }\n};\nexports.selectRange = selectRange;\n/**\n * Restore cached pending format state (if exist) to current selection\n */\nfunction restorePendingFormatState(core) {\n var contentDiv = core.contentDiv, pendingFormatState = core.pendingFormatState, getSelectionRange = core.api.getSelectionRange;\n if (pendingFormatState.pendableFormatState) {\n var document_1 = contentDiv.ownerDocument;\n var formatState_1 = (0, roosterjs_editor_dom_1.getPendableFormatState)(document_1);\n Object.keys(roosterjs_editor_dom_1.PendableFormatCommandMap).forEach(function (key) {\n if (!!pendingFormatState.pendableFormatState[key] != formatState_1[key]) {\n document_1.execCommand(roosterjs_editor_dom_1.PendableFormatCommandMap[key], false, null);\n }\n });\n var range = getSelectionRange(core, true /*tryGetFromCache*/);\n pendingFormatState.pendableFormatPosition = range && roosterjs_editor_dom_1.Position.getStart(range);\n }\n}\n//# sourceMappingURL=selectRange.js.map","export var KEY_PREFIX = 'persist:';\nexport var FLUSH = 'persist/FLUSH';\nexport var REHYDRATE = 'persist/REHYDRATE';\nexport var PAUSE = 'persist/PAUSE';\nexport var PERSIST = 'persist/PERSIST';\nexport var PURGE = 'persist/PURGE';\nexport var REGISTER = 'persist/REGISTER';\nexport var DEFAULT_VERSION = -1;","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/*\n autoMergeLevel1: \n - merges 1 level of substate\n - skips substate if already modified\n*/\nexport default function autoMergeLevel1(inboundState, originalState, reducedState, _ref) {\n var debug = _ref.debug;\n\n var newState = _objectSpread({}, reducedState); // only rehydrate if inboundState exists and is an object\n\n\n if (inboundState && _typeof(inboundState) === 'object') {\n Object.keys(inboundState).forEach(function (key) {\n // ignore _persist data\n if (key === '_persist') return; // if reducer modifies substate, skip auto rehydration\n\n if (originalState[key] !== reducedState[key]) {\n if (process.env.NODE_ENV !== 'production' && debug) console.log('redux-persist/stateReconciler: sub state for key `%s` modified, skipping.', key);\n return;\n } // otherwise hard set the new value\n\n\n newState[key] = inboundState[key];\n });\n }\n\n if (process.env.NODE_ENV !== 'production' && debug && inboundState && _typeof(inboundState) === 'object') console.log(\"redux-persist/stateReconciler: rehydrated keys '\".concat(Object.keys(inboundState).join(', '), \"'\"));\n return newState;\n}","import { KEY_PREFIX, REHYDRATE } from './constants';\n// @TODO remove once flow < 0.63 support is no longer required.\nexport default function createPersistoid(config) {\n // defaults\n var blacklist = config.blacklist || null;\n var whitelist = config.whitelist || null;\n var transforms = config.transforms || [];\n var throttle = config.throttle || 0;\n var storageKey = \"\".concat(config.keyPrefix !== undefined ? config.keyPrefix : KEY_PREFIX).concat(config.key);\n var storage = config.storage;\n var serialize;\n\n if (config.serialize === false) {\n serialize = function serialize(x) {\n return x;\n };\n } else if (typeof config.serialize === 'function') {\n serialize = config.serialize;\n } else {\n serialize = defaultSerialize;\n }\n\n var writeFailHandler = config.writeFailHandler || null; // initialize stateful values\n\n var lastState = {};\n var stagedState = {};\n var keysToProcess = [];\n var timeIterator = null;\n var writePromise = null;\n\n var update = function update(state) {\n // add any changed keys to the queue\n Object.keys(state).forEach(function (key) {\n if (!passWhitelistBlacklist(key)) return; // is keyspace ignored? noop\n\n if (lastState[key] === state[key]) return; // value unchanged? noop\n\n if (keysToProcess.indexOf(key) !== -1) return; // is key already queued? noop\n\n keysToProcess.push(key); // add key to queue\n }); //if any key is missing in the new state which was present in the lastState,\n //add it for processing too\n\n Object.keys(lastState).forEach(function (key) {\n if (state[key] === undefined && passWhitelistBlacklist(key) && keysToProcess.indexOf(key) === -1 && lastState[key] !== undefined) {\n keysToProcess.push(key);\n }\n }); // start the time iterator if not running (read: throttle)\n\n if (timeIterator === null) {\n timeIterator = setInterval(processNextKey, throttle);\n }\n\n lastState = state;\n };\n\n function processNextKey() {\n if (keysToProcess.length === 0) {\n if (timeIterator) clearInterval(timeIterator);\n timeIterator = null;\n return;\n }\n\n var key = keysToProcess.shift();\n var endState = transforms.reduce(function (subState, transformer) {\n return transformer.in(subState, key, lastState);\n }, lastState[key]);\n\n if (endState !== undefined) {\n try {\n stagedState[key] = serialize(endState);\n } catch (err) {\n console.error('redux-persist/createPersistoid: error serializing state', err);\n }\n } else {\n //if the endState is undefined, no need to persist the existing serialized content\n delete stagedState[key];\n }\n\n if (keysToProcess.length === 0) {\n writeStagedState();\n }\n }\n\n function writeStagedState() {\n // cleanup any removed keys just before write.\n Object.keys(stagedState).forEach(function (key) {\n if (lastState[key] === undefined) {\n delete stagedState[key];\n }\n });\n writePromise = storage.setItem(storageKey, serialize(stagedState)).catch(onWriteFail);\n }\n\n function passWhitelistBlacklist(key) {\n if (whitelist && whitelist.indexOf(key) === -1 && key !== '_persist') return false;\n if (blacklist && blacklist.indexOf(key) !== -1) return false;\n return true;\n }\n\n function onWriteFail(err) {\n // @TODO add fail handlers (typically storage full)\n if (writeFailHandler) writeFailHandler(err);\n\n if (err && process.env.NODE_ENV !== 'production') {\n console.error('Error storing data', err);\n }\n }\n\n var flush = function flush() {\n while (keysToProcess.length !== 0) {\n processNextKey();\n }\n\n return writePromise || Promise.resolve();\n }; // return `persistoid`\n\n\n return {\n update: update,\n flush: flush\n };\n} // @NOTE in the future this may be exposed via config\n\nfunction defaultSerialize(data) {\n return JSON.stringify(data);\n}","import { KEY_PREFIX } from './constants';\nexport default function getStoredState(config) {\n var transforms = config.transforms || [];\n var storageKey = \"\".concat(config.keyPrefix !== undefined ? config.keyPrefix : KEY_PREFIX).concat(config.key);\n var storage = config.storage;\n var debug = config.debug;\n var deserialize;\n\n if (config.deserialize === false) {\n deserialize = function deserialize(x) {\n return x;\n };\n } else if (typeof config.deserialize === 'function') {\n deserialize = config.deserialize;\n } else {\n deserialize = defaultDeserialize;\n }\n\n return storage.getItem(storageKey).then(function (serialized) {\n if (!serialized) return undefined;else {\n try {\n var state = {};\n var rawState = deserialize(serialized);\n Object.keys(rawState).forEach(function (key) {\n state[key] = transforms.reduceRight(function (subState, transformer) {\n return transformer.out(subState, key, rawState);\n }, deserialize(rawState[key]));\n });\n return state;\n } catch (err) {\n if (process.env.NODE_ENV !== 'production' && debug) console.log(\"redux-persist/getStoredState: Error restoring data \".concat(serialized), err);\n throw err;\n }\n }\n });\n}\n\nfunction defaultDeserialize(serial) {\n return JSON.parse(serial);\n}","import { KEY_PREFIX } from './constants';\nexport default function purgeStoredState(config) {\n var storage = config.storage;\n var storageKey = \"\".concat(config.keyPrefix !== undefined ? config.keyPrefix : KEY_PREFIX).concat(config.key);\n return storage.removeItem(storageKey, warnIfRemoveError);\n}\n\nfunction warnIfRemoveError(err) {\n if (err && process.env.NODE_ENV !== 'production') {\n console.error('redux-persist/purgeStoredState: Error purging data stored state', err);\n }\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport { FLUSH, PAUSE, PERSIST, PURGE, REHYDRATE, DEFAULT_VERSION } from './constants';\nimport autoMergeLevel1 from './stateReconciler/autoMergeLevel1';\nimport createPersistoid from './createPersistoid';\nimport defaultGetStoredState from './getStoredState';\nimport purgeStoredState from './purgeStoredState';\nvar DEFAULT_TIMEOUT = 5000;\n/*\n @TODO add validation / handling for:\n - persisting a reducer which has nested _persist\n - handling actions that fire before reydrate is called\n*/\n\nexport default function persistReducer(config, baseReducer) {\n if (process.env.NODE_ENV !== 'production') {\n if (!config) throw new Error('config is required for persistReducer');\n if (!config.key) throw new Error('key is required in persistor config');\n if (!config.storage) throw new Error(\"redux-persist: config.storage is required. Try using one of the provided storage engines `import storage from 'redux-persist/lib/storage'`\");\n }\n\n var version = config.version !== undefined ? config.version : DEFAULT_VERSION;\n var debug = config.debug || false;\n var stateReconciler = config.stateReconciler === undefined ? autoMergeLevel1 : config.stateReconciler;\n var getStoredState = config.getStoredState || defaultGetStoredState;\n var timeout = config.timeout !== undefined ? config.timeout : DEFAULT_TIMEOUT;\n var _persistoid = null;\n var _purge = false;\n var _paused = true;\n\n var conditionalUpdate = function conditionalUpdate(state) {\n // update the persistoid only if we are rehydrated and not paused\n state._persist.rehydrated && _persistoid && !_paused && _persistoid.update(state);\n return state;\n };\n\n return function (state, action) {\n var _ref = state || {},\n _persist = _ref._persist,\n rest = _objectWithoutProperties(_ref, [\"_persist\"]); // $FlowIgnore need to update State type\n\n\n var restState = rest;\n\n if (action.type === PERSIST) {\n var _sealed = false;\n\n var _rehydrate = function _rehydrate(payload, err) {\n // dev warning if we are already sealed\n if (process.env.NODE_ENV !== 'production' && _sealed) console.error(\"redux-persist: rehydrate for \\\"\".concat(config.key, \"\\\" called after timeout.\"), payload, err); // only rehydrate if we are not already sealed\n\n if (!_sealed) {\n action.rehydrate(config.key, payload, err);\n _sealed = true;\n }\n };\n\n timeout && setTimeout(function () {\n !_sealed && _rehydrate(undefined, new Error(\"redux-persist: persist timed out for persist key \\\"\".concat(config.key, \"\\\"\")));\n }, timeout); // @NOTE PERSIST resumes if paused.\n\n _paused = false; // @NOTE only ever create persistoid once, ensure we call it at least once, even if _persist has already been set\n\n if (!_persistoid) _persistoid = createPersistoid(config); // @NOTE PERSIST can be called multiple times, noop after the first\n\n if (_persist) {\n // We still need to call the base reducer because there might be nested\n // uses of persistReducer which need to be aware of the PERSIST action\n return _objectSpread({}, baseReducer(restState, action), {\n _persist: _persist\n });\n }\n\n if (typeof action.rehydrate !== 'function' || typeof action.register !== 'function') throw new Error('redux-persist: either rehydrate or register is not a function on the PERSIST action. This can happen if the action is being replayed. This is an unexplored use case, please open an issue and we will figure out a resolution.');\n action.register(config.key);\n getStoredState(config).then(function (restoredState) {\n var migrate = config.migrate || function (s, v) {\n return Promise.resolve(s);\n };\n\n migrate(restoredState, version).then(function (migratedState) {\n _rehydrate(migratedState);\n }, function (migrateErr) {\n if (process.env.NODE_ENV !== 'production' && migrateErr) console.error('redux-persist: migration error', migrateErr);\n\n _rehydrate(undefined, migrateErr);\n });\n }, function (err) {\n _rehydrate(undefined, err);\n });\n return _objectSpread({}, baseReducer(restState, action), {\n _persist: {\n version: version,\n rehydrated: false\n }\n });\n } else if (action.type === PURGE) {\n _purge = true;\n action.result(purgeStoredState(config));\n return _objectSpread({}, baseReducer(restState, action), {\n _persist: _persist\n });\n } else if (action.type === FLUSH) {\n action.result(_persistoid && _persistoid.flush());\n return _objectSpread({}, baseReducer(restState, action), {\n _persist: _persist\n });\n } else if (action.type === PAUSE) {\n _paused = true;\n } else if (action.type === REHYDRATE) {\n // noop on restState if purging\n if (_purge) return _objectSpread({}, restState, {\n _persist: _objectSpread({}, _persist, {\n rehydrated: true\n }) // @NOTE if key does not match, will continue to default else below\n\n });\n\n if (action.key === config.key) {\n var reducedState = baseReducer(restState, action);\n var inboundState = action.payload; // only reconcile state if stateReconciler and inboundState are both defined\n\n var reconciledRest = stateReconciler !== false && inboundState !== undefined ? stateReconciler(inboundState, state, reducedState, config) : reducedState;\n\n var _newState = _objectSpread({}, reconciledRest, {\n _persist: _objectSpread({}, _persist, {\n rehydrated: true\n })\n });\n\n return conditionalUpdate(_newState);\n }\n } // if we have not already handled PERSIST, straight passthrough\n\n\n if (!_persist) return baseReducer(state, action); // run base reducer:\n // is state modified ? return original : return updated\n\n var newState = baseReducer(restState, action);\n if (newState === restState) return state;\n return conditionalUpdate(_objectSpread({}, newState, {\n _persist: _persist\n }));\n };\n}","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { createStore } from 'redux';\nimport { FLUSH, PAUSE, PERSIST, PURGE, REGISTER, REHYDRATE } from './constants';\nvar initialState = {\n registry: [],\n bootstrapped: false\n};\n\nvar persistorReducer = function persistorReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n\n switch (action.type) {\n case REGISTER:\n return _objectSpread({}, state, {\n registry: [].concat(_toConsumableArray(state.registry), [action.key])\n });\n\n case REHYDRATE:\n var firstIndex = state.registry.indexOf(action.key);\n\n var registry = _toConsumableArray(state.registry);\n\n registry.splice(firstIndex, 1);\n return _objectSpread({}, state, {\n registry: registry,\n bootstrapped: registry.length === 0\n });\n\n default:\n return state;\n }\n};\n\nexport default function persistStore(store, options, cb) {\n // help catch incorrect usage of passing PersistConfig in as PersistorOptions\n if (process.env.NODE_ENV !== 'production') {\n var optionsToTest = options || {};\n var bannedKeys = ['blacklist', 'whitelist', 'transforms', 'storage', 'keyPrefix', 'migrate'];\n bannedKeys.forEach(function (k) {\n if (!!optionsToTest[k]) console.error(\"redux-persist: invalid option passed to persistStore: \\\"\".concat(k, \"\\\". You may be incorrectly passing persistConfig into persistStore, whereas it should be passed into persistReducer.\"));\n });\n }\n\n var boostrappedCb = cb || false;\n\n var _pStore = createStore(persistorReducer, initialState, options && options.enhancer ? options.enhancer : undefined);\n\n var register = function register(key) {\n _pStore.dispatch({\n type: REGISTER,\n key: key\n });\n };\n\n var rehydrate = function rehydrate(key, payload, err) {\n var rehydrateAction = {\n type: REHYDRATE,\n payload: payload,\n err: err,\n key: key // dispatch to `store` to rehydrate and `persistor` to track result\n\n };\n store.dispatch(rehydrateAction);\n\n _pStore.dispatch(rehydrateAction);\n\n if (boostrappedCb && persistor.getState().bootstrapped) {\n boostrappedCb();\n boostrappedCb = false;\n }\n };\n\n var persistor = _objectSpread({}, _pStore, {\n purge: function purge() {\n var results = [];\n store.dispatch({\n type: PURGE,\n result: function result(purgeResult) {\n results.push(purgeResult);\n }\n });\n return Promise.all(results);\n },\n flush: function flush() {\n var results = [];\n store.dispatch({\n type: FLUSH,\n result: function result(flushResult) {\n results.push(flushResult);\n }\n });\n return Promise.all(results);\n },\n pause: function pause() {\n store.dispatch({\n type: PAUSE\n });\n },\n persist: function persist() {\n store.dispatch({\n type: PERSIST,\n register: register,\n rehydrate: rehydrate\n });\n }\n });\n\n if (!(options && options.manualPersist)) {\n persistor.persist();\n }\n\n return persistor;\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * Copy and paste plugin for handling onCopy and onPaste event\n */\nvar CopyPastePlugin = /** @class */ (function () {\n /**\n * Construct a new instance of CopyPastePlugin\n * @param options The editor options\n */\n function CopyPastePlugin(options) {\n var _this = this;\n this.onPaste = function (event) {\n var range;\n (0, roosterjs_editor_dom_1.extractClipboardEvent)(event, function (clipboardData) { return _this.editor.paste(clipboardData); }, {\n allowLinkPreview: _this.editor.isFeatureEnabled(\"PasteWithLinkPreview\" /* PasteWithLinkPreview */),\n allowedCustomPasteType: _this.state.allowedCustomPasteType,\n getTempDiv: function () {\n range = _this.editor.getSelectionRange();\n return _this.getTempDiv();\n },\n removeTempDiv: function (div) {\n _this.cleanUpAndRestoreSelection(div, range);\n },\n });\n };\n this.state = {\n allowedCustomPasteType: options.allowedCustomPasteType || [],\n };\n }\n /**\n * Get a friendly name of this plugin\n */\n CopyPastePlugin.prototype.getName = function () {\n return 'CopyPaste';\n };\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n CopyPastePlugin.prototype.initialize = function (editor) {\n var _this = this;\n this.editor = editor;\n this.disposer = this.editor.addDomEventHandler({\n paste: this.onPaste,\n copy: function (e) { return _this.onCutCopy(e, false /*isCut*/); },\n cut: function (e) { return _this.onCutCopy(e, true /*isCut*/); },\n });\n };\n /**\n * Dispose this plugin\n */\n CopyPastePlugin.prototype.dispose = function () {\n this.disposer();\n this.disposer = null;\n this.editor = null;\n };\n /**\n * Get plugin state object\n */\n CopyPastePlugin.prototype.getState = function () {\n return this.state;\n };\n CopyPastePlugin.prototype.onCutCopy = function (event, isCut) {\n var _this = this;\n var selection = this.editor.getSelectionRangeEx();\n if (selection && !selection.areAllCollapsed) {\n var originalRange_1 = selection.ranges[0];\n var html = this.editor.getContent(2 /* RawHTMLWithSelection */);\n var tempDiv_1 = this.getTempDiv(true /*forceInLightMode*/);\n var newRange = (0, roosterjs_editor_dom_1.setHtmlWithSelectionPath)(tempDiv_1, html, this.editor.getTrustedHTMLHandler());\n if (newRange) {\n (0, roosterjs_editor_dom_1.addRangeToSelection)(newRange);\n }\n this.editor.triggerPluginEvent(9 /* BeforeCutCopy */, {\n clonedRoot: tempDiv_1,\n range: newRange,\n rawEvent: event,\n isCut: isCut,\n });\n this.editor.runAsync(function (editor) {\n _this.cleanUpAndRestoreSelection(tempDiv_1, originalRange_1);\n if (isCut) {\n editor.addUndoSnapshot(function () {\n var position = _this.editor.deleteSelectedContent();\n editor.focus();\n editor.select(position);\n }, \"Cut\" /* Cut */);\n }\n });\n }\n };\n CopyPastePlugin.prototype.getTempDiv = function (forceInLightMode) {\n var _this = this;\n var div = this.editor.getCustomData('CopyPasteTempDiv', function () {\n var tempDiv = (0, roosterjs_editor_dom_1.createElement)(3 /* CopyPasteTempDiv */, _this.editor.getDocument());\n _this.editor.insertNode(tempDiv, {\n position: 4 /* Outside */,\n });\n return tempDiv;\n }, function (tempDiv) { var _a; return (_a = tempDiv.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(tempDiv); });\n if (forceInLightMode) {\n div.style.backgroundColor = 'white';\n div.style.color = 'black';\n }\n div.style.display = '';\n div.focus();\n return div;\n };\n CopyPastePlugin.prototype.cleanUpAndRestoreSelection = function (tempDiv, range) {\n if (roosterjs_editor_dom_1.Browser.isAndroid) {\n range.collapse();\n }\n this.editor.select(range);\n tempDiv.style.backgroundColor = '';\n tempDiv.style.color = '';\n tempDiv.style.display = 'none';\n (0, roosterjs_editor_dom_1.moveChildNodes)(tempDiv);\n };\n return CopyPastePlugin;\n}());\nexports.default = CopyPastePlugin;\n//# sourceMappingURL=CopyPastePlugin.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar blockWrap_1 = require(\"../utils/blockWrap\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar BLOCKQUOTE_TAG = 'blockquote';\nvar DEFAULT_STYLER = function (element) {\n element.style.borderLeft = '3px solid';\n element.style.borderColor = '#C8C8C8';\n element.style.paddingLeft = '10px';\n element.style.color = '#666666';\n};\n/**\n * Toggle blockquote at selection, if selection already contains any blockquote elements,\n * the blockquote elements will be unquote and other elements will take no effect\n * @param editor The editor instance\n * @param styler (Optional) The custom styler for setting the style for the blockquote element\n */\nfunction toggleBlockQuote(editor, styler) {\n (0, blockWrap_1.default)(editor, function (nodes) {\n var wrapper = (0, roosterjs_editor_dom_1.wrap)(nodes, BLOCKQUOTE_TAG);\n (styler || DEFAULT_STYLER)(wrapper);\n }, function () { return editor.queryElements('blockquote', 1 /* OnSelection */, roosterjs_editor_dom_1.unwrap).length == 0; });\n}\nexports.default = toggleBlockQuote;\n//# sourceMappingURL=toggleBlockQuote.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DocumentCommand = void 0;\n/**\n * Command strings for Document.execCommand() API\n * https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand\n */\nvar DocumentCommand;\n(function (DocumentCommand) {\n /**\n * Changes the browser auto-link behavior (Internet Explorer only)\n */\n DocumentCommand[\"AutoUrlDetect\"] = \"AutoUrlDetect\";\n /**\n * Changes the document background color. In styleWithCss mode, it affects the background color of the containing block instead.\n * This requires a <color> value string to be passed in as a value argument. Note that Internet Explorer uses this to set the\n * text background color.\n */\n DocumentCommand[\"BackColor\"] = \"backColor\";\n /**\n * Toggles bold on/off for the selection or at the insertion point. Internet Explorer uses the <strong> tag instead of <b>.\n */\n DocumentCommand[\"Bold\"] = \"bold\";\n /**\n * Clears all authentication credentials from the cache.\n */\n DocumentCommand[\"ClearAuthenticationCache\"] = \"ClearAuthenticationCache\";\n /**\n * Makes the content document either read-only or editable. This requires a boolean true/false as the value argument.\n * (Not supported by Internet Explorer.)\n */\n DocumentCommand[\"ContentReadOnly\"] = \"contentReadOnly\";\n /**\n * Copies the current selection to the clipboard. Conditions of having this behavior enabled vary from one browser to another,\n * and have evolved over time. Check the compatibility table to determine if you can use it in your case.\n */\n DocumentCommand[\"Copy\"] = \"copy\";\n /**\n * Creates an hyperlink from the selection, but only if there is a selection. Requires a URI string as a value argument for the\n * hyperlink's href. The URI must contain at least a single character, which may be whitespace.\n * (Internet Explorer will create a link with a null value.)\n */\n DocumentCommand[\"CreateLink\"] = \"createLink\";\n /**\n * Removes the current selection and copies it to the clipboard. When this behavior is enabled varies between browsers,\n * and its conditions have evolved over time. Check the compatibility table for usage details.\n */\n DocumentCommand[\"Cut\"] = \"cut\";\n /**\n * Adds a <small> tag around the selection or at the insertion point. (Not supported by Internet Explorer.)\n */\n DocumentCommand[\"DecreaseFontSize\"] = \"decreaseFontSize\";\n /**\n * Changes the paragraph separator used when new paragraphs are created in editable text regions. See Differences in markup\n * generation for more details.\n */\n DocumentCommand[\"DefaultParagraphSeparator\"] = \"defaultParagraphSeparator\";\n /**\n * Deletes the current selection.\n */\n DocumentCommand[\"Delete\"] = \"delete\";\n /**\n * Enables or disables the table row/column insertion and deletion controls. (Not supported by Internet Explorer.)\n */\n DocumentCommand[\"EnableInlineTableEditing\"] = \"enableInlineTableEditing\";\n /**\n * Enables or disables the resize handles on images and other resizable objects. (Not supported by Internet Explorer.)\n */\n DocumentCommand[\"EnableObjectResizing\"] = \"enableObjectResizing\";\n /**\n * Changes the font name for the selection or at the insertion point. This requires a font name string (like \"Arial\")\n * as a value argument.\n */\n DocumentCommand[\"FontName\"] = \"fontName\";\n /**\n * Changes the font size for the selection or at the insertion point. This requires an integer from 1-7 as a value argument.\n */\n DocumentCommand[\"FontSize\"] = \"fontSize\";\n /**\n * Changes a font color for the selection or at the insertion point. This requires a hexadecimal color value string\n * as a value argument.\n */\n DocumentCommand[\"ForeColor\"] = \"foreColor\";\n /**\n * Adds an HTML block-level element around the line containing the current selection, replacing the block element containing\n * the line if one exists (in Firefox, <blockquote> is the exception — it will wrap any containing block element).\n * Requires a tag-name string as a value argument. Virtually all block-level elements can be used.\n * (Internet Explorer supports only heading tags H1–H6, ADDRESS, and PRE, which must be wrapped in angle brackets, such as \"<H1>\".)\n */\n DocumentCommand[\"FormatBlock\"] = \"formatBlock\";\n /**\n * Deletes the character ahead of the cursor's position, identical to hitting the Delete key on a Windows keyboard.\n */\n DocumentCommand[\"ForwardDelete\"] = \"forwardDelete\";\n /**\n * Adds a heading element around a selection or insertion point line. Requires the tag-name strings a value argument (i.e. \"H1\", \"H6\").\n * (Not supported by Internet Explorer and Safari.)\n */\n DocumentCommand[\"Heading\"] = \"heading\";\n /**\n * Changes the background color for the selection or at the insertion point. Requires a color value string as a value argument.\n * useCSS must be true for this to function. (Not supported by Internet Explorer.)\n */\n DocumentCommand[\"HiliteColor\"] = \"hiliteColor\";\n /**\n * Adds a <big> tag around the selection or at the insertion point. (Not supported by Internet Explorer.)\n */\n DocumentCommand[\"IncreaseFontSize\"] = \"increaseFontSize\";\n /**\n * Indents the line containing the selection or insertion point. In Firefox, if the selection spans multiple lines at different\n * levels of indentation, only the least indented lines in the selection will be indented.\n */\n DocumentCommand[\"Indent\"] = \"indent\";\n /**\n * Controls whether the Enter key inserts a <br> element, or splits the current block element into two.\n * (Not supported by Internet Explorer.)\n */\n DocumentCommand[\"InsertBrOnReturn\"] = \"insertBrOnReturn\";\n /**\n * Inserts a <hr> element at the insertion point, or replaces the selection with it.\n */\n DocumentCommand[\"InsertHorizontalRule\"] = \"insertHorizontalRule\";\n /**\n * Inserts an HTML string at the insertion point (deletes selection). Requires a valid HTML string as a value argument.\n * (Not supported by Internet Explorer.)\n */\n DocumentCommand[\"InsertHTML\"] = \"insertHTML\";\n /**\n * Inserts an image at the insertion point (deletes selection). Requires a URL string for the image's src as a value argument.\n * The requirements for this string are the same as createLink.\n */\n DocumentCommand[\"InsertImage\"] = \"insertImage\";\n /**\n * Creates a numbered ordered list for the selection or at the insertion point.\n */\n DocumentCommand[\"InsertOrderedList\"] = \"insertOrderedList\";\n /**\n * Creates a bulleted unordered list for the selection or at the insertion point.\n */\n DocumentCommand[\"InsertUnorderedList\"] = \"insertUnorderedList\";\n /**\n * Inserts a paragraph around the selection or the current line.\n * (Internet Explorer inserts a paragraph at the insertion point and deletes the selection.)\n */\n DocumentCommand[\"InsertParagraph\"] = \"insertParagraph\";\n /**\n * Inserts the given plain text at the insertion point (deletes selection).\n */\n DocumentCommand[\"InsertText\"] = \"insertText\";\n /**\n * Toggles italics on/off for the selection or at the insertion point.\n * (Internet Explorer uses the <em> element instead of <i>.)\n */\n DocumentCommand[\"Italic\"] = \"italic\";\n /**\n * Centers the selection or insertion point.\n */\n DocumentCommand[\"JustifyCenter\"] = \"justifyCenter\";\n /**\n * Justifies the selection or insertion point.\n */\n DocumentCommand[\"JustifyFull\"] = \"justifyFull\";\n /**\n * Justifies the selection or insertion point to the left.\n */\n DocumentCommand[\"JustifyLeft\"] = \"justifyLeft\";\n /**\n * Right-justifies the selection or the insertion point.\n */\n DocumentCommand[\"JustifyRight\"] = \"justifyRight\";\n /**\n * Outdents the line containing the selection or insertion point.\n */\n DocumentCommand[\"Outdent\"] = \"outdent\";\n /**\n * Pastes the clipboard contents at the insertion point (replaces current selection). Disabled for web content. See [1].\n */\n DocumentCommand[\"Paste\"] = \"paste\";\n /**\n * Redoes the previous undo command.\n */\n DocumentCommand[\"Redo\"] = \"redo\";\n /**\n * Removes all formatting from the current selection.\n */\n DocumentCommand[\"RemoveFormat\"] = \"removeFormat\";\n /**\n * Selects all of the content of the editable region.\n */\n DocumentCommand[\"SelectAll\"] = \"selectAll\";\n /**\n * Toggles strikethrough on/off for the selection or at the insertion point.\n */\n DocumentCommand[\"StrikeThrough\"] = \"strikeThrough\";\n /**\n * Toggles subscript on/off for the selection or at the insertion point.\n */\n DocumentCommand[\"Subscript\"] = \"subscript\";\n /**\n * Toggles superscript on/off for the selection or at the insertion point.\n */\n DocumentCommand[\"Superscript\"] = \"superscript\";\n /**\n * Toggles underline on/off for the selection or at the insertion point.\n */\n DocumentCommand[\"Underline\"] = \"underline\";\n /**\n * Undoes the last executed command.\n */\n DocumentCommand[\"Undo\"] = \"undo\";\n /**\n * Removes the anchor element from a selected hyperlink.\n */\n DocumentCommand[\"Unlink\"] = \"unlink\";\n /**\n * Replaces the useCSS command. true modifies/generates style attributes in markup, false generates presentational elements.\n */\n DocumentCommand[\"StyleWithCSS\"] = \"styleWithCSS\";\n})(DocumentCommand = exports.DocumentCommand || (exports.DocumentCommand = {}));\n//# sourceMappingURL=DocumentCommand.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getEditInfoFromImage = exports.deleteEditInfo = exports.saveEditInfo = void 0;\nvar checkEditInfoState_1 = require(\"./checkEditInfoState\");\nvar IMAGE_EDIT_INFO_NAME = 'roosterEditInfo';\n/**\n * @internal\n * Save edit info to image\n * @param image The image to save edit info to\n * @param editInfo The edit info to save\n */\nfunction saveEditInfo(image, editInfo) {\n if (image) {\n image.dataset[IMAGE_EDIT_INFO_NAME] = JSON.stringify(editInfo);\n }\n}\nexports.saveEditInfo = saveEditInfo;\n/**\n * @internal\n * Delete edit info of an image if any\n * @param image The image to delete edit info from\n */\nfunction deleteEditInfo(image) {\n if (image) {\n delete image.dataset[IMAGE_EDIT_INFO_NAME];\n }\n}\nexports.deleteEditInfo = deleteEditInfo;\n/**\n * @internal\n * Get image edit info from an image. If the image doesn't have edit info, create one from this image.\n * When create new edit info, it will have width/height set to the image's current client width/height, and\n * natural width/height set to the image's natural width/height, src set to its current src, and all\n * other fields set to 0.\n * @param image The image to get edit info from\n */\nfunction getEditInfoFromImage(image) {\n var obj = safeParseJSON(image === null || image === void 0 ? void 0 : image.dataset[IMAGE_EDIT_INFO_NAME]);\n return (0, checkEditInfoState_1.default)(obj) == 0 /* Invalid */ ? getInitialEditInfo(image) : obj;\n}\nexports.getEditInfoFromImage = getEditInfoFromImage;\nfunction getInitialEditInfo(image) {\n return {\n src: image.getAttribute('src') || '',\n widthPx: image.clientWidth,\n heightPx: image.clientHeight,\n naturalWidth: image.naturalWidth,\n naturalHeight: image.naturalHeight,\n leftPercent: 0,\n rightPercent: 0,\n topPercent: 0,\n bottomPercent: 0,\n angleRad: 0,\n };\n}\nfunction safeParseJSON(json) {\n try {\n return JSON.parse(json);\n }\n catch (_a) {\n return null;\n }\n}\n//# sourceMappingURL=editInfo.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./plugins/Picker/index\"), exports);\n//# sourceMappingURL=Picker.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Read a file object and invoke a callback function with the data url of this file\n * @param file The file to read\n * @param callback the callback to invoke with data url of the file.\n * If fail to read, dataUrl will be null\n */\nfunction readFile(file, callback) {\n if (file) {\n var reader_1 = new FileReader();\n reader_1.onload = function () {\n callback(reader_1.result);\n };\n reader_1.onerror = function () {\n callback(null);\n };\n reader_1.readAsDataURL(file);\n }\n}\nexports.default = readFile;\n//# sourceMappingURL=readFile.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * @internal\n * Represents an empty InlineElement.\n * This is used for ContentTraverser internally only.\n * An empty InlineElement means current position is at the end of a tag so nothing is included inside this element\n */\nvar EmptyInlineElement = /** @class */ (function () {\n function EmptyInlineElement(position, parentBlock) {\n this.position = position;\n this.parentBlock = parentBlock;\n }\n /**\n * Get the text content of this inline element\n */\n EmptyInlineElement.prototype.getTextContent = function () {\n return '';\n };\n /**\n * Get the container node of this inline element\n */\n EmptyInlineElement.prototype.getContainerNode = function () {\n return this.position.node;\n };\n /**\n * Get the parent block element of this inline element\n */\n EmptyInlineElement.prototype.getParentBlock = function () {\n return this.parentBlock;\n };\n /**\n * Get the start position of this inline element\n */\n EmptyInlineElement.prototype.getStartPosition = function () {\n return this.position;\n };\n /**\n * Get the end position of this inline element\n */\n EmptyInlineElement.prototype.getEndPosition = function () {\n return this.position;\n };\n /**\n * Checks if the given inline element is after this inline element\n */\n EmptyInlineElement.prototype.isAfter = function (inlineElement) {\n return inlineElement && this.position.isAfter(inlineElement.getEndPosition());\n };\n /**\n * Checks if this inline element is a textual inline element\n */\n EmptyInlineElement.prototype.isTextualInlineElement = function () {\n return false;\n };\n /**\n * Checks if the given editor position is contained in this inline element\n */\n EmptyInlineElement.prototype.contains = function (position) {\n return false;\n };\n /**\n * Apply inline style to a region of an inline element.\n */\n EmptyInlineElement.prototype.applyStyle = function (styler) { };\n return EmptyInlineElement;\n}());\nexports.default = EmptyInlineElement;\n//# sourceMappingURL=EmptyInlineElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getNewFontSize = exports.FONT_SIZES = void 0;\nvar applyInlineStyle_1 = require(\"../utils/applyInlineStyle\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\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 */\nexports.FONT_SIZES = [8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72];\nvar MIN_FONT_SIZE = 1;\nvar MAX_FONT_SIZE = 1000;\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 */\nfunction changeFontSize(editor, change, fontSizes) {\n if (fontSizes === void 0) { fontSizes = exports.FONT_SIZES; }\n var changeBase = change == 0 /* Increase */ ? 1 : -1;\n (0, applyInlineStyle_1.default)(editor, function (element) {\n var pt = parseFloat((0, roosterjs_editor_dom_1.getComputedStyle)(element, 'font-size'));\n element.style.fontSize = getNewFontSize(pt, changeBase, fontSizes) + 'pt';\n var lineHeight = (0, roosterjs_editor_dom_1.getComputedStyle)(element, 'line-height');\n if (lineHeight != 'normal') {\n element.style.lineHeight = 'normal';\n }\n });\n}\nexports.default = changeFontSize;\n/**\n * @internal\n * Get new font size after increase/decrease. This is exported for test only\n * @param pt Original font size, in Point\n * @param changeBase Changed value, 1 means increase, -1 means decrease\n * @param fontSizes Known font size array\n */\nfunction getNewFontSize(pt, changeBase, fontSizes) {\n pt = changeBase == 1 ? Math.floor(pt) : Math.ceil(pt);\n var last = fontSizes[fontSizes.length - 1];\n if (pt <= fontSizes[0]) {\n pt = Math.max(pt + changeBase, MIN_FONT_SIZE);\n }\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 }\n else if (changeBase == 1) {\n for (var i = 0; i < fontSizes.length; i++) {\n if (pt < fontSizes[i]) {\n pt = fontSizes[i];\n break;\n }\n }\n }\n else {\n for (var 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}\nexports.getNewFontSize = getNewFontSize;\n//# sourceMappingURL=changeFontSize.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PickerPlugin = void 0;\nvar PickerPlugin_1 = require(\"./PickerPlugin\");\nObject.defineProperty(exports, \"PickerPlugin\", { enumerable: true, get: function () { return PickerPlugin_1.default; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ContentType = exports.ContentTypePrefix = void 0;\n/**\n * Prefix of content types\n */\nvar ContentTypePrefix;\n(function (ContentTypePrefix) {\n /**\n * Text type prefix\n */\n ContentTypePrefix[\"Text\"] = \"text/\";\n /**\n * Image type prefix\n */\n ContentTypePrefix[\"Image\"] = \"image/\";\n})(ContentTypePrefix = exports.ContentTypePrefix || (exports.ContentTypePrefix = {}));\n/**\n * Known content types\n */\nvar ContentType;\n(function (ContentType) {\n /**\n * Plain text content type\n */\n ContentType[\"PlainText\"] = \"text/plain\";\n /**\n * HTML content type\n */\n ContentType[\"HTML\"] = \"text/html\";\n})(ContentType = exports.ContentType || (exports.ContentType = {}));\n//# sourceMappingURL=ContentType.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Browser = exports.getBrowserInfo = void 0;\nvar isAndroidRegex = /android/i;\n/**\n * Get current browser information from user agent string\n * @param userAgent The userAgent string of a browser\n * @param appVersion The appVersion string of a browser\n * @returns The BrowserInfo object calculated from the given userAgent and appVersion\n */\nfunction getBrowserInfo(userAgent, appVersion) {\n // checks whether the browser is running in IE\n // IE11 will use rv in UA instead of MSIE. Unfortunately Firefox also uses this. We should also look for \"Trident\" to confirm this.\n // There have been cases where companies using older version of IE and custom UserAgents have broken this logic (e.g. IE 10 and KellyServices)\n // therefore we should check that the Trident/rv combo is not just from an older IE browser\n var isIE11OrGreater = userAgent.indexOf('rv:') != -1 && userAgent.indexOf('Trident') != -1;\n var isIE = userAgent.indexOf('MSIE') != -1 || isIE11OrGreater;\n // IE11+ may also have 'Chrome', 'Firefox' and 'Safari' in user agent. But it will have 'trident' as well\n var isChrome = false;\n var isFirefox = false;\n var isSafari = false;\n var isEdge = false;\n var isWebKit = userAgent.indexOf('WebKit') != -1;\n if (!isIE) {\n isChrome = userAgent.indexOf('Chrome') != -1;\n isFirefox = userAgent.indexOf('Firefox') != -1;\n if (userAgent.indexOf('Safari') != -1) {\n // Android and Chrome have Safari in the user string\n isSafari = userAgent.indexOf('Chrome') == -1 && userAgent.indexOf('Android') == -1;\n }\n // Sample Edge UA: Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10121\n isEdge = userAgent.indexOf('Edge') != -1;\n // When it is edge, it should not be chrome or firefox. and it is also not webkit\n if (isEdge) {\n isWebKit = isChrome = isFirefox = false;\n }\n }\n var isMac = appVersion.indexOf('Mac') != -1;\n var isWin = appVersion.indexOf('Win') != -1 || appVersion.indexOf('NT') != -1;\n var isAndroid = isAndroidRegex.test(userAgent);\n return {\n isMac: isMac,\n isWin: isWin,\n isWebKit: isWebKit,\n isIE: isIE,\n isIE11OrGreater: isIE11OrGreater,\n isSafari: isSafari,\n isChrome: isChrome,\n isFirefox: isFirefox,\n isEdge: isEdge,\n isIEOrEdge: isIE || isEdge,\n isAndroid: isAndroid,\n };\n}\nexports.getBrowserInfo = getBrowserInfo;\n/**\n * Browser object contains browser and operating system information of current environment\n */\nexports.Browser = window\n ? getBrowserInfo(window.navigator.userAgent, window.navigator.appVersion)\n : {};\n//# sourceMappingURL=Browser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.excelHandler = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar LAST_TD_END_REGEX = /<\\/\\s*td\\s*>((?!<\\/\\s*tr\\s*>)[\\s\\S])*$/i;\nvar LAST_TR_END_REGEX = /<\\/\\s*tr\\s*>((?!<\\/\\s*table\\s*>)[\\s\\S])*$/i;\nvar LAST_TR_REGEX = /]*>[^<]*/i;\nvar LAST_TABLE_REGEX = /]*>[^<]*/i;\nvar DEFAULT_BORDER_STYLE = 'solid 1px #d4d4d4';\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 */\nfunction convertPastedContentFromExcel(event, trustedHTMLHandler) {\n var fragment = event.fragment, sanitizingOption = event.sanitizingOption, htmlBefore = event.htmlBefore, clipboardData = event.clipboardData;\n var html = excelHandler(clipboardData.html, htmlBefore);\n if (clipboardData.html != html) {\n var doc = new DOMParser().parseFromString(trustedHTMLHandler(html), 'text/html');\n (0, roosterjs_editor_dom_1.moveChildNodes)(fragment, doc === null || doc === void 0 ? void 0 : doc.body);\n }\n (0, roosterjs_editor_dom_1.chainSanitizerCallback)(sanitizingOption.elementCallbacks, 'TD', function (element) {\n if (element.style.borderStyle == 'none') {\n element.style.border = DEFAULT_BORDER_STYLE;\n }\n return true;\n });\n}\nexports.default = convertPastedContentFromExcel;\n/**\n * @internal Export for test only\n * @param html Source html\n */\nfunction excelHandler(html, htmlBefore) {\n if (html.match(LAST_TD_END_REGEX)) {\n var trMatch = htmlBefore.match(LAST_TR_REGEX);\n var tr = trMatch ? trMatch[0] : '';\n html = tr + html + '';\n }\n if (html.match(LAST_TR_END_REGEX)) {\n var tableMatch = htmlBefore.match(LAST_TABLE_REGEX);\n var table = tableMatch ? tableMatch[0] : '';\n html = table + html + '
              ';\n }\n return html;\n}\nexports.excelHandler = excelHandler;\n//# sourceMappingURL=convertPastedContentFromExcel.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar isVoidHtmlElement_1 = require(\"../utils/isVoidHtmlElement\");\nvar Position_1 = require(\"./Position\");\nvar safeInstanceOf_1 = require(\"../utils/safeInstanceOf\");\nfunction createRange(arg1, arg2, arg3, arg4) {\n var _a;\n var start = null;\n var end = null;\n if (isNodePosition(arg1)) {\n // function createRange(startPosition: NodePosition, endPosition?: NodePosition): Range;\n start = arg1;\n end = isNodePosition(arg2) ? arg2 : null;\n }\n else if ((0, safeInstanceOf_1.default)(arg1, 'Node')) {\n if (Array.isArray(arg2)) {\n // function createRange(rootNode: Node, startPath: number[], endPath?: number[]): Range;\n start = getPositionFromPath(arg1, arg2);\n end = Array.isArray(arg3) ? getPositionFromPath(arg1, arg3) : null;\n }\n else if (typeof arg2 == 'number') {\n // function createRange(node: Node, offset: number | PositionType): Range;\n // function createRange(startNode: Node, startOffset: number | PositionType, endNode: Node, endOffset: number | PositionType): Range;\n start = new Position_1.default(arg1, arg2);\n end = (0, safeInstanceOf_1.default)(arg3, 'Node') ? new Position_1.default(arg3, arg4) : null;\n }\n else if ((0, safeInstanceOf_1.default)(arg2, 'Node') || !arg2) {\n // function createRange(startNode: Node, endNode?: Node): Range;\n start = new Position_1.default(arg1, -2 /* Before */);\n end = new Position_1.default(arg2 || arg1, -3 /* After */);\n }\n }\n if ((_a = start === null || start === void 0 ? void 0 : start.node) === null || _a === void 0 ? void 0 : _a.ownerDocument) {\n var range = start.node.ownerDocument.createRange();\n start = getFocusablePosition(start);\n end = getFocusablePosition(end || start);\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n else {\n return null;\n }\n}\nexports.default = createRange;\n/**\n * Convert to focusable position\n * If current node is a void element, we need to move up one level to put cursor outside void element\n */\nfunction getFocusablePosition(position) {\n return position.node.nodeType == 1 /* Element */ && (0, isVoidHtmlElement_1.default)(position.node)\n ? new Position_1.default(position.node, position.isAtEnd ? -3 /* After */ : -2 /* Before */)\n : position;\n}\nfunction isNodePosition(arg) {\n return arg && arg.node;\n}\nfunction getPositionFromPath(node, path) {\n if (!node || !path) {\n return null;\n }\n // Iterate with a for loop to avoid mutating the passed in element path stack\n // or needing to copy it.\n var offset = 0;\n for (var i = 0; i < path.length; i++) {\n offset = path[i];\n if (i < path.length - 1 &&\n node &&\n node.nodeType == 1 /* Element */ &&\n node.childNodes.length > offset) {\n node = node.childNodes[offset];\n }\n else {\n break;\n }\n }\n return new Position_1.default(node, offset);\n}\n//# sourceMappingURL=createRange.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Editor = void 0;\n// Classes\nvar Editor_1 = require(\"./editor/Editor\");\nObject.defineProperty(exports, \"Editor\", { enumerable: true, get: function () { return Editor_1.default; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.triggerEvent = void 0;\nvar allowedEventsInShadowEdit = [\n 11 /* EditorReady */,\n 12 /* BeforeDispose */,\n 8 /* ExtractContentWithDom */,\n 21 /* ZoomChanged */,\n];\n/**\n * @internal\n * Trigger a plugin event\n * @param core The EditorCore object\n * @param pluginEvent The event object to trigger\n * @param broadcast Set to true to skip the shouldHandleEventExclusively check\n */\nvar triggerEvent = function (core, pluginEvent, broadcast) {\n if ((!core.lifecycle.shadowEditFragment ||\n allowedEventsInShadowEdit.indexOf(pluginEvent.eventType) >= 0) &&\n (broadcast || !core.plugins.some(function (plugin) { return handledExclusively(pluginEvent, plugin); }))) {\n core.plugins.forEach(function (plugin) {\n if (plugin.onPluginEvent) {\n plugin.onPluginEvent(pluginEvent);\n }\n });\n }\n};\nexports.triggerEvent = triggerEvent;\nfunction handledExclusively(event, plugin) {\n var _a;\n if (plugin.onPluginEvent && ((_a = plugin.willHandleEventExclusively) === null || _a === void 0 ? void 0 : _a.call(plugin, event))) {\n plugin.onPluginEvent(event);\n return true;\n }\n return false;\n}\n//# sourceMappingURL=triggerEvent.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ClearFormatMode = void 0;\n/**\n * Represents the strategy to clear the format of the current editor selection\n */\nvar ClearFormatMode;\n(function (ClearFormatMode) {\n /**\n * Inline format. Remove text format.\n */\n ClearFormatMode[ClearFormatMode[\"Inline\"] = 0] = \"Inline\";\n /**\n * BLock format. Remove text and structure format of the block.\n */\n ClearFormatMode[ClearFormatMode[\"Block\"] = 1] = \"Block\";\n /**\n * Detect Inline or Block format based on the current editor selector.\n */\n ClearFormatMode[ClearFormatMode[\"AutoDetect\"] = 2] = \"AutoDetect\";\n})(ClearFormatMode = exports.ClearFormatMode || (exports.ClearFormatMode = {}));\n//# sourceMappingURL=ClearFormatMode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar blockFormat_1 = require(\"../utils/blockFormat\");\nvar execCommand_1 = require(\"../utils/execCommand\");\nvar setBackgroundColor_1 = require(\"./setBackgroundColor\");\nvar setFontName_1 = require(\"./setFontName\");\nvar setFontSize_1 = require(\"./setFontSize\");\nvar setTextColor_1 = require(\"./setTextColor\");\nvar toggleBold_1 = require(\"./toggleBold\");\nvar toggleItalic_1 = require(\"./toggleItalic\");\nvar toggleUnderline_1 = require(\"./toggleUnderline\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar STYLES_TO_REMOVE = ['font', 'text-decoration', 'color', 'background'];\nvar TAGS_TO_UNWRAP = 'B,I,U,STRONG,EM,SUB,SUP,STRIKE,FONT,CENTER,H1,H2,H3,H4,H5,H6,UL,OL,LI,SPAN,P,BLOCKQUOTE,CODE,S,PRE'.split(',');\nvar ATTRIBUTES_TO_PRESERVE = ['href', 'src'];\nvar TAGS_TO_STOP_UNWRAP = ['TD', 'TH', 'TR', 'TABLE', 'TBODY', 'THEAD'];\n/**\n * @param editor The editor instance\n * @returns if the current selection is composed of two or more block elements\n */\nfunction isMultiBlockSelection(editor) {\n var transverser = editor.getSelectionTraverser();\n var blockElement = transverser.currentBlockElement;\n if (!blockElement) {\n return false;\n }\n var nextBlockElement = transverser.getNextBlockElement();\n //At least two blocks are selected\n return !!nextBlockElement;\n}\nfunction clearNodeFormat(node) {\n // 1. Recursively clear format of all its child nodes\n var areBlockElements = (0, roosterjs_editor_dom_1.toArray)(node.childNodes).map(clearNodeFormat);\n var areAllChildrenBlock = areBlockElements.every(function (b) { return b; });\n var returnBlockElement = (0, roosterjs_editor_dom_1.isBlockElement)(node);\n // 2. Unwrap the tag if necessary\n var tag = (0, roosterjs_editor_dom_1.getTagOfNode)(node);\n if (tag) {\n if (TAGS_TO_UNWRAP.indexOf(tag) >= 0 ||\n (areAllChildrenBlock &&\n !(0, roosterjs_editor_dom_1.isVoidHtmlElement)(node) &&\n TAGS_TO_STOP_UNWRAP.indexOf(tag) < 0)) {\n if (returnBlockElement && !areAllChildrenBlock) {\n (0, roosterjs_editor_dom_1.wrap)(node);\n }\n (0, roosterjs_editor_dom_1.unwrap)(node);\n }\n else {\n // 3. Otherwise, remove all attributes\n clearAttribute(node);\n }\n }\n return returnBlockElement;\n}\nfunction clearAttribute(element) {\n var isTableCell = (0, roosterjs_editor_dom_1.safeInstanceOf)(element, 'HTMLTableCellElement');\n for (var _i = 0, _a = (0, roosterjs_editor_dom_1.toArray)(element.attributes); _i < _a.length; _i++) {\n var attr = _a[_i];\n if (isTableCell && attr.name == 'style') {\n removeNonBorderStyles(element);\n }\n else if (ATTRIBUTES_TO_PRESERVE.indexOf(attr.name.toLowerCase()) < 0 &&\n attr.name.indexOf('data-') != 0) {\n element.removeAttribute(attr.name);\n }\n }\n}\nfunction removeNonBorderStyles(element) {\n var styles = (0, roosterjs_editor_dom_1.getStyles)(element);\n var result = {};\n Object.keys(styles).forEach(function (name) {\n if (name.indexOf('border') < 0) {\n result[name] = styles[name];\n delete styles[name];\n }\n });\n (0, roosterjs_editor_dom_1.setStyles)(element, styles);\n return result;\n}\n/**\n * Clear the format of the selected text or list of blocks\n * If the current selection is compose of multiple block elements then remove the text and struture format for all the selected blocks\n * If the current selection is compose of a partial inline element then only the text format is removed from the current selection\n * @param editor The editor instance\n */\nfunction clearAutoDetectFormat(editor) {\n var isMultiBlock = isMultiBlockSelection(editor);\n if (!isMultiBlock) {\n var transverser = editor.getSelectionTraverser();\n var inlineElement = transverser.currentInlineElement;\n var isPartial = inlineElement instanceof roosterjs_editor_dom_1.PartialInlineElement;\n if (isPartial) {\n clearFormat(editor);\n return;\n }\n }\n clearBlockFormat(editor);\n}\n/**\n * Clear all formats of selected blocks.\n * When selection is collapsed, only clear format of current block.\n * @param editor The editor instance\n */\nfunction clearBlockFormat(editor) {\n (0, blockFormat_1.default)(editor, function (region) {\n var blocks = (0, roosterjs_editor_dom_1.getSelectedBlockElementsInRegion)(region);\n var nodes = (0, roosterjs_editor_dom_1.collapseNodesInRegion)(region, blocks);\n if (editor.contains(region.rootNode)) {\n // If there are styles on table cell, wrap all its children and move down all non-border styles.\n // So that we can preserve styles for unselected blocks as well as border styles for table\n var nonborderStyles = removeNonBorderStyles(region.rootNode);\n if (Object.keys(nonborderStyles).length > 0) {\n var wrapper = (0, roosterjs_editor_dom_1.wrap)((0, roosterjs_editor_dom_1.toArray)(region.rootNode.childNodes));\n (0, roosterjs_editor_dom_1.setStyles)(wrapper, nonborderStyles);\n }\n }\n while (nodes.length > 0 && (0, roosterjs_editor_dom_1.isNodeInRegion)(region, nodes[0].parentNode)) {\n nodes = [(0, roosterjs_editor_dom_1.splitBalancedNodeRange)(nodes)];\n }\n nodes.forEach(clearNodeFormat);\n });\n}\nfunction clearInlineFormat(editor) {\n editor.focus();\n editor.addUndoSnapshot(function () {\n (0, execCommand_1.default)(editor, \"removeFormat\" /* RemoveFormat */);\n editor.queryElements('[class]', 1 /* OnSelection */, function (node) {\n return node.removeAttribute('class');\n });\n var defaultFormat = editor.getDefaultFormat();\n var isDefaultFormatEmpty = Object.keys(defaultFormat).length === 0;\n editor.queryElements('[style]', 2 /* InSelection */, function (node) {\n STYLES_TO_REMOVE.forEach(function (style) { return node.style.removeProperty(style); });\n // when default format is empty, keep the HTML minimum by removing style attribute if there's no style\n // (note: because default format is empty, we're not adding style back in)\n if (isDefaultFormatEmpty && node.getAttribute('style') === '') {\n node.removeAttribute('style');\n }\n });\n if (!isDefaultFormatEmpty) {\n if (defaultFormat.fontFamily) {\n (0, setFontName_1.default)(editor, defaultFormat.fontFamily);\n }\n if (defaultFormat.fontSize) {\n (0, setFontSize_1.default)(editor, defaultFormat.fontSize);\n }\n if (defaultFormat.textColor) {\n var setColorIgnoredElements_1 = editor.queryElements('a *, a', 1 /* OnSelection */);\n var shouldApplyInlineStyle = setColorIgnoredElements_1.length > 0\n ? function (element) { return setColorIgnoredElements_1.indexOf(element) == -1; }\n : null;\n if (defaultFormat.textColors) {\n (0, setTextColor_1.default)(editor, defaultFormat.textColors, shouldApplyInlineStyle);\n }\n else {\n (0, setTextColor_1.default)(editor, defaultFormat.textColor, shouldApplyInlineStyle);\n }\n }\n if (defaultFormat.backgroundColor) {\n if (defaultFormat.backgroundColors) {\n (0, setBackgroundColor_1.default)(editor, defaultFormat.backgroundColors);\n }\n else {\n (0, setBackgroundColor_1.default)(editor, defaultFormat.backgroundColor);\n }\n }\n if (defaultFormat.bold) {\n (0, toggleBold_1.default)(editor);\n }\n if (defaultFormat.italic) {\n (0, toggleItalic_1.default)(editor);\n }\n if (defaultFormat.underline) {\n (0, toggleUnderline_1.default)(editor);\n }\n }\n }, \"Format\" /* Format */);\n}\n/**\n * Clear the format in current selection, after cleaning, the format will be\n * changed to default format. The format that get cleaned include B/I/U/font name/\n * font size/text color/background color/align left/align right/align center/superscript/subscript\n * @param editor The editor instance\n * @param formatType type of format to apply\n */\nfunction clearFormat(editor, formatType) {\n if (formatType === void 0) { formatType = 0 /* Inline */; }\n switch (formatType) {\n case 0 /* Inline */:\n clearInlineFormat(editor);\n break;\n case 1 /* Block */:\n clearBlockFormat(editor);\n break;\n default:\n clearAutoDetectFormat(editor);\n }\n}\nexports.default = clearFormat;\n//# sourceMappingURL=clearFormat.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.forEachSelectedCell = void 0;\n/**\n * @internal\n * Executes an action to all the cells within the selection range.\n * @param callback action to apply on each selected cell\n * @returns the amount of cells modified\n */\nfunction forEachSelectedCell(vTable, callback) {\n var _a;\n var _b = vTable.selection, lastCell = _b.lastCell, firstCell = _b.firstCell;\n for (var y = firstCell.y; y <= lastCell.y; y++) {\n for (var x = firstCell.x; x <= lastCell.x; x++) {\n if ((_a = vTable.cells[y][x]) === null || _a === void 0 ? void 0 : _a.td) {\n callback(vTable.cells[y][x]);\n }\n }\n }\n}\nexports.forEachSelectedCell = forEachSelectedCell;\n//# sourceMappingURL=forEachSelectedCell.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar blockWrap_1 = require(\"../utils/blockWrap\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar PRE_TAG = 'pre';\nvar CODE_TAG = 'code';\nvar SELECTOR = PRE_TAG + \">\" + CODE_TAG;\n/**\n * Toggle code block at selection, if selection already contains any code blocked elements,\n * the code block elements will be no longer be code blocked and other elements will take no affect\n * @param editor The editor instance\n * @param styler (Optional) The custom styler for setting the style for the code block element\n */\nfunction toggleCodeBlock(editor, styler) {\n (0, blockWrap_1.default)(editor, function (nodes) {\n var code = (0, roosterjs_editor_dom_1.wrap)(nodes, CODE_TAG);\n var pre = (0, roosterjs_editor_dom_1.wrap)(code, PRE_TAG);\n styler === null || styler === void 0 ? void 0 : styler(pre);\n }, function () {\n return editor.queryElements(SELECTOR, 1 /* OnSelection */, function (code) {\n if (!code.previousSibling && !code.nextSibling) {\n var parent_1 = code.parentNode;\n (0, roosterjs_editor_dom_1.unwrap)(code);\n (0, roosterjs_editor_dom_1.unwrap)(parent_1);\n }\n }).length == 0;\n });\n}\nexports.default = toggleCodeBlock;\n//# sourceMappingURL=toggleCodeBlock.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TableBorderFormat = void 0;\n/**\n * Table format border\n */\nvar TableBorderFormat;\n(function (TableBorderFormat) {\n /**\n * All border of the table are displayed\n * __ __ __\n * |__|__|__|\n * |__|__|__|\n * |__|__|__|\n */\n TableBorderFormat[TableBorderFormat[\"DEFAULT\"] = 0] = \"DEFAULT\";\n /**\n * Middle vertical border are not displayed\n * __ __ __\n * |__ __ __|\n * |__ __ __|\n * |__ __ __|\n */\n TableBorderFormat[TableBorderFormat[\"LIST_WITH_SIDE_BORDERS\"] = 1] = \"LIST_WITH_SIDE_BORDERS\";\n /**\n * All borders except header rows borders are displayed\n * __ __ __\n * __|__|__\n * __|__|__\n */\n TableBorderFormat[TableBorderFormat[\"NO_HEADER_BORDERS\"] = 2] = \"NO_HEADER_BORDERS\";\n /**\n * The left and right border of the table are not displayed\n * __ __ __\n * __|__|__\n * __|__|__\n * __|__|__\n */\n TableBorderFormat[TableBorderFormat[\"NO_SIDE_BORDERS\"] = 3] = \"NO_SIDE_BORDERS\";\n /**\n * Only the borders that divides the header row, first column and externals are displayed\n * __ __ __\n * |__ __ __|\n * | | |\n * |__|__ __|\n */\n TableBorderFormat[TableBorderFormat[\"FIRST_COLUMN_HEADER_EXTERNAL\"] = 4] = \"FIRST_COLUMN_HEADER_EXTERNAL\";\n /**\n * The header row has no vertical border, except for the first one\n * The first column has no horizontal border, except for the first one\n * __ __ __\n * |__ __ __\n * | |__|__|\n * | |__|__|\n */\n TableBorderFormat[TableBorderFormat[\"ESPECIAL_TYPE_1\"] = 5] = \"ESPECIAL_TYPE_1\";\n /**\n * The header row has no vertical border, except for the first one\n * The only horizontal border of the table is the top and bottom of header row\n * __ __ __\n * |__ __ __\n * | | |\n * | | |\n */\n TableBorderFormat[TableBorderFormat[\"ESPECIAL_TYPE_2\"] = 6] = \"ESPECIAL_TYPE_2\";\n /**\n * The only borders are the bottom of header row and the right border of first column\n * __ __ __\n * |\n * |\n */\n TableBorderFormat[TableBorderFormat[\"ESPECIAL_TYPE_3\"] = 7] = \"ESPECIAL_TYPE_3\";\n})(TableBorderFormat = exports.TableBorderFormat || (exports.TableBorderFormat = {}));\n//# sourceMappingURL=TableBorderFormat.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_api_1 = require(\"roosterjs-editor-api\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * Maintain list numbers of list chain when content is modified by cut/paste/drag&drop\n */\nvar CutPasteListChain = /** @class */ (function () {\n function CutPasteListChain() {\n var _this = this;\n this.onDrop = function () {\n _this.cacheListChains(\"Drop\" /* Drop */);\n };\n }\n /**\n * Get a friendly name of this plugin\n */\n CutPasteListChain.prototype.getName = function () {\n return 'CutPasteListChain';\n };\n /**\n * Initialize this plugin\n * @param editor The editor instance\n */\n CutPasteListChain.prototype.initialize = function (editor) {\n this.editor = editor;\n this.disposer = this.editor.addDomEventHandler('drop', this.onDrop);\n };\n /**\n * Dispose this plugin\n */\n CutPasteListChain.prototype.dispose = function () {\n var _a;\n (_a = this.disposer) === null || _a === void 0 ? void 0 : _a.call(this);\n this.disposer = null;\n this.editor = null;\n };\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n CutPasteListChain.prototype.onPluginEvent = function (event) {\n var _a;\n switch (event.eventType) {\n case 9 /* BeforeCutCopy */:\n if (event.isCut) {\n this.cacheListChains(\"Cut\" /* Cut */);\n }\n break;\n case 10 /* BeforePaste */:\n this.cacheListChains(\"Paste\" /* Paste */);\n break;\n case 7 /* ContentChanged */:\n if (((_a = this.chains) === null || _a === void 0 ? void 0 : _a.length) > 0 && this.expectedChangeSource == event.source) {\n (0, roosterjs_editor_api_1.experimentCommitListChains)(this.editor, this.chains);\n this.chains = null;\n this.expectedChangeSource = null;\n }\n break;\n }\n };\n CutPasteListChain.prototype.cacheListChains = function (source) {\n this.chains = roosterjs_editor_dom_1.VListChain.createListChains(this.editor.getSelectedRegions());\n this.expectedChangeSource = source;\n };\n return CutPasteListChain;\n}());\nexports.default = CutPasteListChain;\n//# sourceMappingURL=CutPasteListChain.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar blockFormat_1 = require(\"../utils/blockFormat\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * Toggle List Type at selection\n * If ListType Provided is Ordered:\n * If selection contains numbering in deep level, toggle numbering will decrease the numbering level by one\n * If selection contains bullet list, toggle numbering will convert the bullet list into number list\n * If selection contains both bullet/numbering and normal text, the behavior is decided by corresponding\n * realization of browser execCommand API\n * If ListType Provided is Unordered:\n * If selection contains bullet in deep level, toggle bullet will decrease the bullet level by one\n * If selection contains number list, toggle bullet will convert the number list into bullet list\n * If selection contains both bullet/numbering and normal text, the behavior is decided by corresponding\n * browser execCommand API\n * @param editor The editor instance\n * @param listType The list type to toggle\n * @param startNumber (Optional) Start number of the list\n * @param includeSiblingLists Sets wether the operation should include Sibling Lists, by default true\n */\nfunction toggleListType(editor, listType, startNumber, includeSiblingLists) {\n if (includeSiblingLists === void 0) { includeSiblingLists = true; }\n (0, blockFormat_1.default)(editor, function (region, start, end, chains) {\n var _a;\n var chain = startNumber > 0 && chains.filter(function (chain) { return chain.canAppendAtCursor(startNumber); })[0];\n var vList = chain && start.equalTo(end)\n ? chain.createVListAtBlock((_a = (0, roosterjs_editor_dom_1.getBlockElementAtNode)(region.rootNode, start.node)) === null || _a === void 0 ? void 0 : _a.collapseToSingleElement(), startNumber)\n : (0, roosterjs_editor_dom_1.createVListFromRegion)(region, includeSiblingLists);\n if (vList) {\n vList.changeListType(start, end, listType);\n vList.writeBack();\n }\n });\n}\nexports.default = toggleListType;\n//# sourceMappingURL=toggleListType.js.map","\"use strict\";\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KnownCreateElementData = void 0;\nvar safeInstanceOf_1 = require(\"./safeInstanceOf\");\nvar Browser_1 = require(\"./Browser\");\n/**\n * All known CreateElementData used by roosterjs to create elements\n */\nexports.KnownCreateElementData = (_a = {},\n _a[0 /* None */] = { tag: '' },\n // Edge can sometimes lose current format when Enter to new line.\n // So here we add an extra SPAN for Edge to workaround this bug\n _a[1 /* EmptyLine */] = Browser_1.Browser.isEdge\n ? { tag: 'div', children: [{ tag: 'span', children: [{ tag: 'br' }] }] }\n : { tag: 'div', children: [{ tag: 'br' }] },\n _a[2 /* BlockquoteWrapper */] = {\n tag: 'blockquote',\n style: 'margin-top:0;margin-bottom:0',\n },\n _a[3 /* CopyPasteTempDiv */] = {\n tag: 'div',\n style: 'width: 1px; height: 1px; overflow: hidden; position: fixed; top: 0; left; 0; -webkit-user-select: text',\n attributes: {\n contenteditable: 'true',\n },\n },\n _a[4 /* BlockListItem */] = { tag: 'li', style: 'display:block' },\n _a[5 /* ContextMenuWrapper */] = {\n tag: 'div',\n style: 'position: fixed; width: 0; height: 0',\n },\n _a[6 /* ImageEditWrapper */] = {\n tag: 'div',\n style: 'width:100%;height:100%;position:relative;overflow:hidden',\n },\n _a[7 /* TableHorizontalResizer */] = {\n tag: 'div',\n style: 'position: fixed; cursor: row-resize; user-select: none',\n },\n _a[8 /* TableVerticalResizer */] = {\n tag: 'div',\n style: 'position: fixed; cursor: col-resize; user-select: none',\n },\n _a[9 /* TableResizerLTR */] = {\n tag: 'div',\n style: 'position: fixed; cursor: nw-resize; user-select: none; border: 1px solid #808080',\n },\n _a[10 /* TableResizerRTL */] = {\n tag: 'div',\n style: 'position: fixed; cursor: ne-resize; user-select: none; border: 1px solid #808080',\n },\n _a[11 /* TableSelector */] = {\n tag: 'div',\n style: 'position: fixed; cursor: all-scroll; user-select: none; border: 1px solid #808080',\n },\n _a);\n/**\n * Create DOM element from the given CreateElementData\n * @param elementData The CreateElementData or an index of a known CreateElementData used for creating this element\n * @param document The document to create the element from\n * @returns The root DOM element just created\n */\nfunction createElement(elementData, document) {\n if (typeof elementData == 'number') {\n elementData = exports.KnownCreateElementData[elementData];\n }\n if (!elementData || !elementData.tag) {\n return null;\n }\n var tag = elementData.tag, namespace = elementData.namespace, className = elementData.className, style = elementData.style, dataset = elementData.dataset, attributes = elementData.attributes, children = elementData.children;\n var result = namespace\n ? document.createElementNS(namespace, tag)\n : document.createElement(tag);\n if (style) {\n result.setAttribute('style', style);\n }\n if (className) {\n result.className = className;\n }\n if (dataset && (0, safeInstanceOf_1.default)(result, 'HTMLElement')) {\n Object.keys(dataset).forEach(function (datasetName) {\n result.dataset[datasetName] = dataset[datasetName];\n });\n }\n if (attributes) {\n Object.keys(attributes).forEach(function (attrName) {\n result.setAttribute(attrName, attributes[attrName]);\n });\n }\n if (children) {\n children.forEach(function (child) {\n if (typeof child === 'string') {\n result.appendChild(document.createTextNode(child));\n }\n else if (child) {\n var childElement = createElement(child, document);\n if (childElement) {\n result.appendChild(childElement);\n }\n }\n });\n }\n return result;\n}\nexports.default = createElement;\n//# sourceMappingURL=createElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * Edit table with given operation. If there is no table at cursor then no op.\n * @param editor The editor instance\n * @param operation Table operation\n */\nfunction editTable(editor, operation) {\n var td = editor.getElementAtCursor('TD,TH');\n if (td) {\n editor.addUndoSnapshot(function (start, end) {\n var vtable = new roosterjs_editor_dom_1.VTable(td);\n vtable.edit(operation);\n vtable.writeBack();\n //Adding replaceNode to transform color when the theme is switched to dark.\n editor.replaceNode(vtable.table, vtable.table, true /**transformColorForDarkMode*/);\n editor.focus();\n var cellToSelect = calculateCellToSelect(operation, vtable.row, vtable.col);\n editor.select(vtable.getCell(cellToSelect.newRow, cellToSelect.newCol).td, 0 /* Begin */);\n }, \"Format\" /* Format */);\n }\n}\nexports.default = editTable;\nfunction calculateCellToSelect(operation, currentRow, currentCol) {\n var newRow = currentRow;\n var newCol = currentCol;\n switch (operation) {\n case 0 /* InsertAbove */:\n newCol = 0;\n break;\n case 1 /* InsertBelow */:\n newRow += 1;\n newCol = 0;\n break;\n case 2 /* InsertLeft */:\n newRow = 0;\n break;\n case 3 /* InsertRight */:\n newRow = 0;\n newCol += 1;\n break;\n }\n return {\n newRow: newRow,\n newCol: newCol,\n };\n}\n//# sourceMappingURL=editTable.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar toArray_1 = require(\"./toArray\");\n/**\n * @deprecated\n * Creates an HTML node array from html\n * @param html the html string to create HTML elements from\n * @param ownerDocument Owner document of the result HTML elements\n * @returns An HTML node array to represent the given html string\n */\nfunction fromHtml(html, ownerDocument) {\n var element = ownerDocument.createElement('DIV');\n element.innerHTML = html;\n return (0, toArray_1.default)(element.childNodes);\n}\nexports.default = fromHtml;\n//# sourceMappingURL=fromHtml.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * PendingFormatStatePlugin handles pending format state management\n */\nvar PendingFormatStatePlugin = /** @class */ (function () {\n /**\n * Construct a new instance of PendingFormatStatePlugin\n * @param options The editor options\n * @param contentDiv The editor content DIV\n */\n function PendingFormatStatePlugin() {\n this.state = {\n pendableFormatPosition: null,\n pendableFormatState: null,\n };\n }\n /**\n * Get a friendly name of this plugin\n */\n PendingFormatStatePlugin.prototype.getName = function () {\n return 'PendingFormatState';\n };\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n PendingFormatStatePlugin.prototype.initialize = function (editor) {\n this.editor = editor;\n };\n /**\n * Dispose this plugin\n */\n PendingFormatStatePlugin.prototype.dispose = function () {\n this.editor = null;\n this.clear();\n };\n /**\n * Get plugin state object\n */\n PendingFormatStatePlugin.prototype.getState = function () {\n return this.state;\n };\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n PendingFormatStatePlugin.prototype.onPluginEvent = function (event) {\n switch (event.eventType) {\n case 13 /* PendingFormatStateChanged */:\n // Got PendingFormatStateChanged event, cache current position and pending format\n this.state.pendableFormatPosition = this.getCurrentPosition();\n this.state.pendableFormatState = event.formatState;\n break;\n case 0 /* KeyDown */:\n case 5 /* MouseDown */:\n case 7 /* ContentChanged */:\n // If content or position is changed (by keyboard, mouse, or code),\n // check if current position is still the same with the cached one (if exist),\n // and clear cached format if position is changed since it is out-of-date now\n if (this.state.pendableFormatPosition &&\n !this.state.pendableFormatPosition.equalTo(this.getCurrentPosition())) {\n this.clear();\n }\n break;\n }\n };\n PendingFormatStatePlugin.prototype.clear = function () {\n this.state.pendableFormatPosition = null;\n this.state.pendableFormatState = null;\n };\n PendingFormatStatePlugin.prototype.getCurrentPosition = function () {\n var range = this.editor.getSelectionRange();\n return range && roosterjs_editor_dom_1.Position.getStart(range).normalize();\n };\n return PendingFormatStatePlugin;\n}());\nexports.default = PendingFormatStatePlugin;\n//# sourceMappingURL=PendingFormatStatePlugin.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n// Regex matching Uri scheme\nvar URI_REGEX = /^[a-zA-Z]+:/i;\n// Regex matching begin of email address\nvar MAILTO_REGEX = /^[\\w.%+-]+@/i;\n// Regex matching begin of ftp, i.e. ftp.microsoft.com\nvar FTP_REGEX = /^ftp\\./i;\nfunction applyLinkPrefix(url) {\n if (!url) {\n return url;\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 var prefix = '';\n if (url.search(URI_REGEX) < 0) {\n if (url.search(MAILTO_REGEX) == 0) {\n prefix = 'mailto:';\n }\n else if (url.search(FTP_REGEX) == 0) {\n prefix = 'ftp://';\n }\n else {\n // fallback to http://\n prefix = 'http://';\n }\n }\n return prefix + url;\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 altText Optional alt text of the link, will be shown when hover on the link\n * @param displayText Optional display text for the link.\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 */\nfunction createLink(editor, link, altText, displayText) {\n editor.focus();\n var url = (checkXss(link) || '').trim();\n if (url) {\n var linkData = (0, roosterjs_editor_dom_1.matchLink)(url);\n // matchLink can match most links, but not all, i.e. if you pass link a link as \"abc\", it won't match\n // we know in that case, users will want to insert a link like http://abc\n // so we have separate logic in applyLinkPrefix to add link prefix depending on the format of the link\n // i.e. if the link starts with something like abc@xxx, we will add mailto: prefix\n // if the link starts with ftp.xxx, we will add ftp:// link. For more, see applyLinkPrefix\n var normalizedUrl_1 = linkData ? linkData.normalizedUrl : applyLinkPrefix(url);\n var originalUrl_1 = linkData ? linkData.originalUrl : url;\n editor.addUndoSnapshot(function () {\n var range = editor.getSelectionRange();\n var anchor = null;\n if (range && range.collapsed) {\n anchor = getAnchorNodeAtCursor(editor);\n // If there is already a link, just change its href\n if (anchor) {\n anchor.href = normalizedUrl_1;\n // Change text content if it is specified\n updateAnchorDisplayText(anchor, displayText);\n }\n else {\n anchor = editor.getDocument().createElement('A');\n anchor.textContent = displayText || originalUrl_1;\n anchor.href = normalizedUrl_1;\n editor.insertNode(anchor);\n }\n }\n else {\n // the selection is not collapsed, use browser execCommand\n editor.getDocument().execCommand(\"createLink\" /* CreateLink */, false, normalizedUrl_1);\n var traverser = editor.getSelectionTraverser();\n var currentInline = traverser.getNextInlineElement();\n while (currentInline) {\n var a = currentInline.getContainerNode();\n a.parentElement.removeChild(a);\n currentInline = traverser.getNextInlineElement();\n }\n anchor = getAnchorNodeAtCursor(editor);\n updateAnchorDisplayText(anchor, displayText);\n }\n if (altText && anchor) {\n anchor.title = altText;\n }\n return anchor;\n }, \"CreateLink\" /* CreateLink */);\n }\n}\nexports.default = createLink;\nfunction getAnchorNodeAtCursor(editor) {\n return editor.queryElements('a[href]', 1 /* OnSelection */)[0];\n}\nfunction updateAnchorDisplayText(anchor, displayText) {\n if (displayText && anchor.textContent != displayText) {\n anchor.textContent = displayText;\n }\n}\nfunction checkXss(link) {\n var sanitizer = new roosterjs_editor_dom_1.HtmlSanitizer();\n var a = document.createElement('a');\n a.href = link || '';\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//# sourceMappingURL=createLink.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getInlineElementBeforeAfter = exports.getInlineElementAfter = exports.getInlineElementBefore = void 0;\nvar getInlineElementAtNode_1 = require(\"./getInlineElementAtNode\");\nvar PartialInlineElement_1 = require(\"./PartialInlineElement\");\nvar shouldSkipNode_1 = require(\"../utils/shouldSkipNode\");\nvar getLeafSibling_1 = require(\"../utils/getLeafSibling\");\n/**\n * @internal\n * Get inline element before a position\n * This is mostly used when we want to get the inline element before selection/cursor\n * There is a possible that the cursor is in middle of an inline element (i.e. mid of a text node)\n * in this case, we only want to return what is before cursor (a partial of an inline) to indicate\n * that we're in middle.\n * @param root Root node of current scope, use for create InlineElement\n * @param position The position to get InlineElement before\n */\nfunction getInlineElementBefore(root, position) {\n return getInlineElementBeforeAfter(root, position, false /*isAfter*/);\n}\nexports.getInlineElementBefore = getInlineElementBefore;\n/**\n * @internal\n * Get inline element after a position\n * This is mostly used when we want to get the inline element after selection/cursor\n * There is a possible that the cursor is in middle of an inline element (i.e. mid of a text node)\n * in this case, we only want to return what is before cursor (a partial of an inline) to indicate\n * that we're in middle.\n * @param root Root node of current scope, use for create InlineElement\n * @param position The position to get InlineElement after\n */\nfunction getInlineElementAfter(root, position) {\n return getInlineElementBeforeAfter(root, position, true /*isAfter*/);\n}\nexports.getInlineElementAfter = getInlineElementAfter;\n/**\n * @internal\n */\nfunction getInlineElementBeforeAfter(root, position, isAfter) {\n if (!root || !position || !position.node) {\n return null;\n }\n position = position.normalize();\n var node = position.node, offset = position.offset, isAtEnd = position.isAtEnd;\n var isPartial = false;\n if ((!isAfter && offset == 0 && !isAtEnd) || (isAfter && isAtEnd)) {\n node = (0, getLeafSibling_1.getLeafSibling)(root, node, isAfter);\n }\n else if (node.nodeType == 3 /* Text */ &&\n ((!isAfter && !isAtEnd) || (isAfter && offset > 0))) {\n isPartial = true;\n }\n if (node && (0, shouldSkipNode_1.default)(node)) {\n node = (0, getLeafSibling_1.getLeafSibling)(root, node, isAfter);\n }\n var inlineElement = (0, getInlineElementAtNode_1.default)(root, node);\n if (inlineElement && (isPartial || inlineElement.contains(position))) {\n inlineElement = isAfter\n ? new PartialInlineElement_1.default(inlineElement, position, null)\n : new PartialInlineElement_1.default(inlineElement, null, position);\n }\n return inlineElement;\n}\nexports.getInlineElementBeforeAfter = getInlineElementBeforeAfter;\n//# sourceMappingURL=getInlineElementBeforeAfter.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./plugins/CutPasteListChain/index\"), exports);\n//# sourceMappingURL=CutPasteListChain.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar contains_1 = require(\"./contains\");\nvar matchesSelector_1 = require(\"./matchesSelector\");\n/**\n * Find closest element ancestor start from the given node which matches the given selector\n * @param node Find ancestor start from this node\n * @param root Root node where the search should stop at. The return value can never be this node\n * @param selector The expected selector. If null, return the first HTML Element found from start node\n * @returns An HTML element which matches the given selector. If the given start node matches the selector,\n * returns the given node\n */\nfunction findClosestElementAncestor(node, root, selector) {\n node = !node ? null : node.nodeType == 1 /* Element */ ? node : node.parentNode;\n var element = node && node.nodeType == 1 /* Element */ ? node : null;\n if (element && selector) {\n if (element.closest) {\n element = element.closest(selector);\n }\n else {\n while (element && element != root && !(0, matchesSelector_1.default)(element, selector)) {\n element = element.parentElement;\n }\n }\n }\n return !root || (0, contains_1.default)(root, element) ? element : null;\n}\nexports.default = findClosestElementAncestor;\n//# sourceMappingURL=findClosestElementAncestor.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.disposeTableEditFeature = void 0;\n/**\n * @internal\n */\nfunction disposeTableEditFeature(resizer) {\n var _a;\n (_a = resizer.div.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(resizer.div);\n resizer.div = null;\n resizer.featureHandler.dispose();\n resizer.featureHandler = null;\n}\nexports.disposeTableEditFeature = disposeTableEditFeature;\n//# sourceMappingURL=TableEditorFeature.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ListType = void 0;\n/**\n * Type of list (numbering or bullet)\n */\nvar ListType;\n(function (ListType) {\n /**\n * None list type\n * It means this is not a list\n */\n ListType[ListType[\"None\"] = 0] = \"None\";\n /**\n * Ordered List type (numbering list)\n * Represented by \"OL\" tag\n */\n ListType[ListType[\"Ordered\"] = 1] = \"Ordered\";\n /**\n * Unordered List type (bullet list)\n * Represented by \"UL\" tag\n */\n ListType[ListType[\"Unordered\"] = 2] = \"Unordered\";\n})(ListType = exports.ListType || (exports.ListType = {}));\n//# sourceMappingURL=ListType.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar DragAndDropHelper_1 = require(\"../../../pluginUtils/DragAndDropHelper\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar CELL_RESIZER_WIDTH = 4;\nvar MIN_CELL_WIDTH = 30;\n/**\n * @internal\n */\nfunction createCellResizer(td, zoomScale, isRTL, isHorizontal, onStart, onEnd) {\n var document = td.ownerDocument;\n var div = (0, roosterjs_editor_dom_1.createElement)(isHorizontal\n ? 7 /* TableHorizontalResizer */\n : 8 /* TableVerticalResizer */, document);\n document.body.appendChild(div);\n var context = { td: td, isRTL: isRTL, zoomScale: zoomScale, onStart: onStart };\n var setPosition = isHorizontal ? setHorizontalPosition : setVerticalPosition;\n setPosition(context, div);\n var handler = {\n onDragStart: onDragStart,\n onDragging: isHorizontal ? onDraggingHorizontal : onDraggingVertical,\n onDragEnd: onEnd,\n };\n var featureHandler = new DragAndDropHelper_1.default(div, context, setPosition, handler, zoomScale);\n return { node: td, div: div, featureHandler: featureHandler };\n}\nexports.default = createCellResizer;\nfunction onDragStart(context) {\n var td = context.td, isRTL = context.isRTL, zoomScale = context.zoomScale, onStart = context.onStart;\n var vTable = new roosterjs_editor_dom_1.VTable(td, true /*normalizeSize*/, zoomScale);\n var rect = (0, roosterjs_editor_dom_1.normalizeRect)(td.getBoundingClientRect());\n if (rect) {\n onStart();\n // calculate and retrieve the cells of the two columns shared by the current vertical resizer\n var currentCells = vTable.getCellsWithBorder(isRTL ? rect.left : rect.right, !isRTL);\n var nextCells = vTable.getCellsWithBorder(isRTL ? rect.left : rect.right, isRTL);\n return {\n vTable: vTable,\n currentCells: currentCells,\n nextCells: nextCells,\n };\n }\n else {\n return { vTable: vTable, currentCells: [], nextCells: [] }; // Just a fallback\n }\n}\nfunction onDraggingHorizontal(context, event, initValue, deltaX, deltaY) {\n var td = context.td, zoomScale = context.zoomScale;\n var vTable = initValue.vTable;\n vTable.table.removeAttribute('height');\n vTable.table.style.height = null;\n vTable.forEachCellOfCurrentRow(function (cell) {\n if (cell.td) {\n cell.td.style.height = cell.td == td ? cell.height / zoomScale + deltaY + \"px\" : null;\n }\n });\n // To avoid apply format styles when the table is being resizing, the skipApplyFormat is set to true.\n vTable.writeBack(true /**skipApplyFormat*/);\n return true;\n}\nfunction onDraggingVertical(context, event, initValue) {\n var isRTL = context.isRTL, zoomScale = context.zoomScale;\n var vTable = initValue.vTable, nextCells = initValue.nextCells, currentCells = initValue.currentCells;\n if (!canResizeColumns(event.pageX, currentCells, nextCells, isRTL, zoomScale)) {\n return false;\n }\n // Since we allow the user to resize the table width on adjusting the border of the last cell,\n // we need to make the table width resizable by setting it as null;\n // We also allow the user to resize the table width if Shift key is pressed\n var isLastCell = nextCells.length == 0;\n var isShiftPressed = event.shiftKey;\n if (isLastCell || isShiftPressed) {\n vTable.table.style.width = null;\n }\n var newWidthList = new Map();\n currentCells.forEach(function (td) {\n var rect = (0, roosterjs_editor_dom_1.normalizeRect)(td.getBoundingClientRect());\n if (rect) {\n td.style.wordBreak = 'break-word';\n td.style.whiteSpace = 'normal';\n td.style.boxSizing = 'border-box';\n var newWidth = getHorizontalDistance(rect, event.pageX, !isRTL) / zoomScale;\n newWidthList.set(td, newWidth);\n }\n });\n newWidthList.forEach(function (newWidth, td) {\n td.style.width = newWidth + \"px\";\n });\n if (!isShiftPressed) {\n nextCells.forEach(function (td) {\n td.style.wordBreak = 'break-word';\n td.style.whiteSpace = 'normal';\n td.style.boxSizing = 'border-box';\n td.style.width = null;\n });\n }\n // To avoid apply format styles when the table is being resizing, the skipApplyFormat is set to true.\n vTable.writeBack(true /**skipApplyFormat*/);\n return true;\n}\nfunction getHorizontalDistance(rect, pos, toLeft) {\n return toLeft ? pos - rect.left : rect.right - pos;\n}\nfunction setHorizontalPosition(context, trigger) {\n var td = context.td;\n var rect = (0, roosterjs_editor_dom_1.normalizeRect)(td.getBoundingClientRect());\n if (rect) {\n trigger.style.top = rect.bottom - CELL_RESIZER_WIDTH + 'px';\n trigger.style.left = rect.left + 'px';\n trigger.style.width = rect.right - rect.left + 'px';\n trigger.style.height = CELL_RESIZER_WIDTH + 'px';\n }\n}\nfunction setVerticalPosition(context, trigger) {\n var td = context.td, isRTL = context.isRTL;\n var rect = (0, roosterjs_editor_dom_1.normalizeRect)(td.getBoundingClientRect());\n if (rect) {\n trigger.style.top = rect.top + 'px';\n trigger.style.left = (isRTL ? rect.left : rect.right) - CELL_RESIZER_WIDTH + 1 + 'px';\n trigger.style.width = CELL_RESIZER_WIDTH + 'px';\n trigger.style.height = rect.bottom - rect.top + 'px';\n }\n}\n/**\n *\n * @param newPos The position to where we want to move the vertical border\n * @returns if the move is allowed, or, if any of the cells on either side of the vertical border is smaller than\n * the minimum width, such move is not allowed\n */\nfunction canResizeColumns(newPos, currentCells, nextCells, isRTL, zoomScale) {\n for (var i = 0; i < currentCells.length; i++) {\n var td = currentCells[i];\n var rect = (0, roosterjs_editor_dom_1.normalizeRect)(td.getBoundingClientRect());\n if (rect) {\n var width = getHorizontalDistance(rect, newPos, !isRTL) / zoomScale;\n if (width < MIN_CELL_WIDTH) {\n return false;\n }\n }\n }\n for (var i = 0; i < nextCells.length; i++) {\n var td = nextCells[i];\n var width = Number.MAX_SAFE_INTEGER;\n if (td) {\n var rect = (0, roosterjs_editor_dom_1.normalizeRect)(td.getBoundingClientRect());\n if (rect) {\n width = getHorizontalDistance(rect, newPos, isRTL) / zoomScale;\n }\n }\n if (width < MIN_CELL_WIDTH) {\n return false;\n }\n }\n return true;\n}\n//# sourceMappingURL=CellResizer.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(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))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getSideResizeHTML = exports.getCornerResizeHTML = exports.doubleCheckResize = exports.rotateCoordinate = exports.Resizer = void 0;\nvar RESIZE_HANDLE_SIZE = 7;\nvar RESIZE_HANDLE_MARGIN = 3;\nvar Xs = ['w', '', 'e'];\nvar Ys = ['s', '', 'n'];\n/**\n * @internal\n * The resize drag and drop handler\n */\nexports.Resizer = {\n onDragStart: function (_a) {\n var editInfo = _a.editInfo;\n return (__assign({}, editInfo));\n },\n onDragging: function (_a, e, base, deltaX, deltaY) {\n var _b;\n var x = _a.x, y = _a.y, editInfo = _a.editInfo, options = _a.options;\n var ratio = base.widthPx > 0 && base.heightPx > 0 ? (base.widthPx * 1.0) / base.heightPx : 0;\n _b = rotateCoordinate(deltaX, deltaY, editInfo.angleRad), deltaX = _b[0], deltaY = _b[1];\n var horizontalOnly = x == '';\n var verticalOnly = y == '';\n var shouldPreserveRatio = !(horizontalOnly || verticalOnly) && (options.preserveRatio || e.shiftKey);\n var newWidth = horizontalOnly\n ? base.widthPx\n : Math.max(base.widthPx + deltaX * (x == 'w' ? -1 : 1), options.minWidth);\n var newHeight = verticalOnly\n ? base.heightPx\n : Math.max(base.heightPx + deltaY * (y == 'n' ? -1 : 1), options.minHeight);\n if (shouldPreserveRatio && ratio > 0) {\n newHeight = Math.min(newHeight, newWidth / ratio);\n newWidth = Math.min(newWidth, newHeight * ratio);\n if (newWidth < newHeight * ratio) {\n newWidth = newHeight * ratio;\n }\n else {\n newHeight = newWidth / ratio;\n }\n }\n editInfo.widthPx = newWidth;\n editInfo.heightPx = newHeight;\n return true;\n },\n};\n/**\n * @internal Calculate the rotated x and y distance for mouse moving\n * @param x Original x distance\n * @param y Original y distance\n * @param angle Rotated angle, in radian\n * @returns rotated x and y distances\n */\nfunction rotateCoordinate(x, y, angle) {\n if (x == 0 && y == 0) {\n return [0, 0];\n }\n var hypotenuse = Math.sqrt(x * x + y * y);\n angle = Math.atan2(y, x) - angle;\n return [hypotenuse * Math.cos(angle), hypotenuse * Math.sin(angle)];\n}\nexports.rotateCoordinate = rotateCoordinate;\n/**\n * @internal\n * Double check if the changed size can satisfy current width of container.\n * When resize an image and preserve ratio, its size can be limited by the size of container.\n * So we need to check the actual size and calculate the size again\n * @param editInfo Edit info of the image\n * @param preserveRatio Whether w/h ratio need to be preserved\n * @param actualWidth Actual width of the image after resize\n * @param actualHeight Actual height of the image after resize\n */\nfunction doubleCheckResize(editInfo, preserveRatio, actualWidth, actualHeight) {\n var widthPx = editInfo.widthPx, heightPx = editInfo.heightPx;\n var ratio = heightPx > 0 ? widthPx / heightPx : 0;\n actualWidth = Math.floor(actualWidth);\n actualHeight = Math.floor(actualHeight);\n widthPx = Math.floor(widthPx);\n heightPx = Math.floor(heightPx);\n editInfo.widthPx = actualWidth;\n editInfo.heightPx = actualHeight;\n if (preserveRatio && ratio > 0 && (widthPx !== actualWidth || heightPx !== actualHeight)) {\n if (actualWidth < widthPx) {\n editInfo.heightPx = actualWidth / ratio;\n }\n else {\n editInfo.widthPx = actualHeight * ratio;\n }\n }\n}\nexports.doubleCheckResize = doubleCheckResize;\n/**\n * @internal\n * Get HTML for resize handles at the corners\n */\nfunction getCornerResizeHTML(_a) {\n var resizeBorderColor = _a.borderColor;\n var result = [];\n Xs.forEach(function (x) {\n return Ys.forEach(function (y) {\n return result.push((x == '') == (y == '') ? getResizeHandleHTML(x, y, resizeBorderColor) : null);\n });\n });\n return result;\n}\nexports.getCornerResizeHTML = getCornerResizeHTML;\n/**\n * @internal\n * Get HTML for resize handles on the sides\n */\nfunction getSideResizeHTML(_a) {\n var resizeBorderColor = _a.borderColor;\n var result = [];\n Xs.forEach(function (x) {\n return Ys.forEach(function (y) {\n return result.push((x == '') != (y == '') ? getResizeHandleHTML(x, y, resizeBorderColor) : null);\n });\n });\n return result;\n}\nexports.getSideResizeHTML = getSideResizeHTML;\nfunction getResizeHandleHTML(x, y, borderColor) {\n var leftOrRight = x == 'w' ? 'left' : 'right';\n var topOrBottom = y == 'n' ? 'top' : 'bottom';\n var leftOrRightValue = x == '' ? '50%' : '0px';\n var topOrBottomValue = y == '' ? '50%' : '0px';\n var direction = y + x;\n return x == '' && y == ''\n ? {\n tag: 'div',\n style: \"position:absolute;left:0;right:0;top:0;bottom:0;border:solid 1px \" + borderColor + \";pointer-events:none\",\n }\n : {\n tag: 'div',\n style: \"position:absolute;\" + leftOrRight + \":\" + leftOrRightValue + \";\" + topOrBottom + \":\" + topOrBottomValue,\n children: [\n {\n tag: 'div',\n style: \"position:relative;width:\" + RESIZE_HANDLE_SIZE + \"px;height:\" + RESIZE_HANDLE_SIZE + \"px;background-color: \" + borderColor + \";cursor:\" + direction + \"-resize;\" + topOrBottom + \":-\" + RESIZE_HANDLE_MARGIN + \"px;\" + leftOrRight + \":-\" + RESIZE_HANDLE_MARGIN + \"px\",\n className: \"r_resizeH\" /* ResizeHandle */,\n dataset: { x: x, y: y },\n },\n ],\n };\n}\n//# sourceMappingURL=Resizer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar createRange_1 = require(\"../selection/createRange\");\nvar Position_1 = require(\"../selection/Position\");\nvar getLeafSibling_1 = require(\"../utils/getLeafSibling\");\n/**\n * Get the selection range in the given region.\n * The original range can cover multiple regions, this function will narrow the original selection\n * of a region into current region\n * @param regionBase The region to get range from\n */\nfunction getSelectionRangeInRegion(regionBase) {\n if (!regionBase) {\n return null;\n }\n var nodeBefore = regionBase.nodeBefore, nodeAfter = regionBase.nodeAfter, rootNode = regionBase.rootNode, skipTags = regionBase.skipTags;\n var startNode = nodeBefore\n ? (0, getLeafSibling_1.getNextLeafSibling)(regionBase.rootNode, nodeBefore, regionBase.skipTags)\n : rootNode.firstChild;\n var endNode = nodeAfter\n ? (0, getLeafSibling_1.getPreviousLeafSibling)(rootNode, nodeAfter, skipTags)\n : rootNode.lastChild;\n var regionRange = startNode && endNode && (0, createRange_1.default)(startNode, endNode);\n if (!isRegion(regionBase)) {\n return regionRange;\n }\n else if (regionRange) {\n var regionStart = Position_1.default.getStart(regionRange).normalize();\n var regionEnd = Position_1.default.getEnd(regionRange).normalize();\n var fullSelectionEnd = regionBase.fullSelectionEnd, fullSelectionStart = regionBase.fullSelectionStart;\n if (!fullSelectionStart.isAfter(regionEnd) && !regionStart.isAfter(fullSelectionEnd)) {\n var start = fullSelectionStart.isAfter(regionStart)\n ? fullSelectionStart\n : regionStart;\n var end = fullSelectionEnd.isAfter(regionEnd) ? regionEnd : fullSelectionEnd;\n return (0, createRange_1.default)(start, end);\n }\n else {\n return null;\n }\n }\n}\nexports.default = getSelectionRangeInRegion;\nfunction isRegion(regionBase) {\n var region = regionBase;\n return !!region.fullSelectionEnd && !!region.fullSelectionStart;\n}\n//# sourceMappingURL=getSelectionRangeInRegion.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar safeInstanceOf_1 = require(\"./safeInstanceOf\");\n/**\n * Get innerHTML of the given node\n * @param node The DOM node to get innerHTML from\n */\nfunction getInnerHTML(node) {\n if ((0, safeInstanceOf_1.default)(node, 'HTMLElement')) {\n return node.innerHTML;\n }\n else if (node) {\n var tempNode = node.ownerDocument.createElement('span');\n tempNode.appendChild(node.cloneNode(true /*deep*/));\n return tempNode.innerHTML;\n }\n else {\n return '';\n }\n}\nexports.default = getInnerHTML;\n//# sourceMappingURL=getInnerHTML.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FontSizeChange = void 0;\n/**\n * The enum used for increase or decrease font size\n * Used by setFontSize API\n */\nvar FontSizeChange;\n(function (FontSizeChange) {\n /**\n * Increase font size\n */\n FontSizeChange[FontSizeChange[\"Increase\"] = 0] = \"Increase\";\n /**\n * Decrease font size\n */\n FontSizeChange[FontSizeChange[\"Decrease\"] = 1] = \"Decrease\";\n})(FontSizeChange = exports.FontSizeChange || (exports.FontSizeChange = {}));\n//# sourceMappingURL=FontSizeChange.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Browser_1 = require(\"../utils/Browser\");\nvar isCtrlOrMetaPressedImpl = Browser_1.Browser.isMac\n ? function (event) { return event.metaKey; }\n : function (event) { return event.ctrlKey; };\n/**\n * Check if Ctrl key (Windows) or Meta key (Mac) is pressed for the given Event\n * @param event A Keyboard event or Mouse event object\n * @returns True if Ctrl key is pressed on Windows or Meta key is pressed on Mac\n */\nfunction isCtrlOrMetaPressed(event) {\n return isCtrlOrMetaPressedImpl(event);\n}\nexports.default = isCtrlOrMetaPressed;\n//# sourceMappingURL=isCtrlOrMetaPressed.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar findClosestElementAncestor_1 = require(\"../utils/findClosestElementAncestor\");\n/**\n * @internal\n * Get Root list node from the given node within the given region\n * @param region Region to scope the search into\n * @param selector The selector to search\n * @param node The start node\n */\nfunction getRootListNode(region, selector, node) {\n var list = region &&\n (0, findClosestElementAncestor_1.default)(node, region.rootNode, selector);\n if (list) {\n var ancestor = void 0;\n while ((ancestor = (0, findClosestElementAncestor_1.default)(list.parentNode, region.rootNode, selector))) {\n list = ancestor;\n }\n }\n return list;\n}\nexports.default = getRootListNode;\n//# sourceMappingURL=getRootListNode.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./plugins/ContextMenu/index\"), exports);\n//# sourceMappingURL=ContextMenu.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./ContentEdit\"), exports);\n__exportStar(require(\"./ContextMenu\"), exports);\n__exportStar(require(\"./CustomReplace\"), exports);\n__exportStar(require(\"./CutPasteListChain\"), exports);\n__exportStar(require(\"./HyperLink\"), exports);\n__exportStar(require(\"./ImageEdit\"), exports);\n__exportStar(require(\"./ImageResize\"), exports);\n__exportStar(require(\"./Paste\"), exports);\n__exportStar(require(\"./Picker\"), exports);\n__exportStar(require(\"./TableResize\"), exports);\n__exportStar(require(\"./Watermark\"), exports);\n__exportStar(require(\"./TableCellSelection\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.moveCurrentSnapsnot = void 0;\nvar canMoveCurrentSnapshot_1 = require(\"./canMoveCurrentSnapshot\");\n/**\n * Move current snapshot with the given step if can move this step. Otherwise no action and return null\n * @param snapshots The snapshots data structure to move\n * @param step The step to move\n * @returns If can move with the given step, returns the snapshot after move, otherwise null\n */\nfunction moveCurrentSnapshot(snapshots, step) {\n if ((0, canMoveCurrentSnapshot_1.default)(snapshots, step)) {\n snapshots.currentIndex += step;\n snapshots.autoCompleteIndex = -1;\n return snapshots.snapshots[snapshots.currentIndex];\n }\n else {\n return null;\n }\n}\nexports.default = moveCurrentSnapshot;\n/**\n * @deprecated\n * For backward compatibility only\n */\nexports.moveCurrentSnapsnot = moveCurrentSnapshot;\n//# sourceMappingURL=moveCurrentSnapshot.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * @internal\n * Make the first Cell of a table selection always be on top of the last cell.\n * @param input Table selection\n * @returns Table Selection where the first cell is always going to be first selected in the table\n * and the last cell always going to be last selected in the table.\n */\nfunction normalizeTableSelection(vTable) {\n if (!vTable || !vTable.selection) {\n return null;\n }\n var _a = vTable.selection, firstCell = _a.firstCell, lastCell = _a.lastCell;\n var rows = vTable.table.rows;\n var newFirst = {\n x: Math.min(firstCell.x, lastCell.x),\n y: Math.min(firstCell.y, lastCell.y),\n };\n var newLast = {\n x: Math.max(firstCell.x, lastCell.x),\n y: Math.max(firstCell.y, lastCell.y),\n };\n var fixCoordinates = function (coord) {\n if (coord.x < 0) {\n coord.x = 0;\n }\n if (coord.y < 0) {\n coord.y = 0;\n }\n if (coord.y >= rows.length) {\n coord.y = rows.length - 1;\n }\n var rowsCells = rows.item(coord.y).cells.length;\n if (coord.x >= rowsCells) {\n coord.x = rowsCells - 1;\n }\n };\n fixCoordinates(firstCell);\n fixCoordinates(lastCell);\n return { firstCell: newFirst, lastCell: newLast };\n}\nexports.default = normalizeTableSelection;\n//# sourceMappingURL=normalizeTableSelection.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar getTagOfNode_1 = require(\"./getTagOfNode\");\nvar BLOCK_ELEMENT_TAGS = 'ADDRESS,ARTICLE,ASIDE,BLOCKQUOTE,CANVAS,DD,DIV,DL,DT,FIELDSET,FIGCAPTION,FIGURE,FOOTER,FORM,H1,H2,H3,H4,H5,H6,HEADER,HR,LI,MAIN,NAV,NOSCRIPT,OL,OUTPUT,P,PRE,SECTION,TABLE,TD,TH,TFOOT,UL,VIDEO'.split(',');\nvar BLOCK_DISPLAY_STYLES = ['block', 'list-item', 'table-cell'];\n/**\n * Checks if the node is a block like element. Block like element are usually those P, DIV, LI, TD etc.\n * @param node The node to check\n * @returns True if the node is a block element, otherwise false\n */\nfunction isBlockElement(node) {\n var tag = (0, getTagOfNode_1.default)(node);\n return !!(tag &&\n (BLOCK_DISPLAY_STYLES.indexOf(node.style.display) >= 0 ||\n BLOCK_ELEMENT_TAGS.indexOf(tag) >= 0));\n}\nexports.default = isBlockElement;\n//# sourceMappingURL=isBlockElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EntityClasses = void 0;\n/**\n * CSS Class names for Entity\n */\nvar EntityClasses;\n(function (EntityClasses) {\n /**\n * Class name to specify this is an entity\n */\n EntityClasses[\"ENTITY_INFO_NAME\"] = \"_Entity\";\n /**\n * Class name to specify the type of an entity\n */\n EntityClasses[\"ENTITY_TYPE_PREFIX\"] = \"_EType_\";\n /**\n * Class name to specify the ID of an entity\n */\n EntityClasses[\"ENTITY_ID_PREFIX\"] = \"_EId_\";\n /**\n * Class name to specify if the entity is readonly\n */\n EntityClasses[\"ENTITY_READONLY_PREFIX\"] = \"_EReadonly_\";\n})(EntityClasses = exports.EntityClasses || (exports.EntityClasses = {}));\n//# sourceMappingURL=EntityClasses.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * @internal\n * A helper class to help manage drag and drop to an HTML element\n */\nvar DragAndDropHelper = /** @class */ (function () {\n /**\n * Create a new instance of DragAndDropHelper class\n * @param trigger The trigger element. When user start drag on this element,\n * events will be fired to the handler object\n * @param context Context object that will be passed to handler function when event is fired,\n * so that the handler object knows which element it is triggered from.\n * @param onSubmit A callback that will be invoked when event handler in handler object returns true\n * @param handler The event handler object, see DragAndDropHandler interface for more information\n */\n function DragAndDropHelper(trigger, context, onSubmit, handler, zoomScale) {\n var _this = this;\n this.trigger = trigger;\n this.context = context;\n this.onSubmit = onSubmit;\n this.handler = handler;\n this.zoomScale = zoomScale;\n this.onMouseDown = function (e) {\n var _a, _b;\n e.preventDefault();\n e.stopPropagation();\n _this.addDocumentEvents();\n _this.initX = e.pageX;\n _this.initY = e.pageY;\n _this.initValue = (_b = (_a = _this.handler).onDragStart) === null || _b === void 0 ? void 0 : _b.call(_a, _this.context, e);\n };\n this.onMouseMove = function (e) {\n var _a, _b, _c;\n e.preventDefault();\n var deltaX = (e.pageX - _this.initX) / _this.zoomScale;\n var deltaY = (e.pageY - _this.initY) / _this.zoomScale;\n if ((_b = (_a = _this.handler).onDragging) === null || _b === void 0 ? void 0 : _b.call(_a, _this.context, e, _this.initValue, deltaX, deltaY)) {\n (_c = _this.onSubmit) === null || _c === void 0 ? void 0 : _c.call(_this, _this.context, _this.trigger);\n }\n };\n this.onMouseUp = function (e) {\n var _a, _b, _c;\n e.preventDefault();\n _this.removeDocumentEvents();\n if ((_b = (_a = _this.handler).onDragEnd) === null || _b === void 0 ? void 0 : _b.call(_a, _this.context, e, _this.initValue)) {\n (_c = _this.onSubmit) === null || _c === void 0 ? void 0 : _c.call(_this, _this.context, _this.trigger);\n }\n };\n trigger.addEventListener('mousedown', this.onMouseDown);\n }\n /**\n * Dispose this object, remove all event listeners that has been attached\n */\n DragAndDropHelper.prototype.dispose = function () {\n this.trigger.removeEventListener('mousedown', this.onMouseDown);\n this.removeDocumentEvents();\n };\n DragAndDropHelper.prototype.addDocumentEvents = function () {\n var doc = this.trigger.ownerDocument;\n doc.addEventListener('mousemove', this.onMouseMove, true /*useCapture*/);\n doc.addEventListener('mouseup', this.onMouseUp, true /*useCapture*/);\n };\n DragAndDropHelper.prototype.removeDocumentEvents = function () {\n var doc = this.trigger.ownerDocument;\n doc.removeEventListener('mousemove', this.onMouseMove, true /*useCapture*/);\n doc.removeEventListener('mouseup', this.onMouseUp, true /*useCapture*/);\n };\n return DragAndDropHelper;\n}());\nexports.default = DragAndDropHelper;\n//# sourceMappingURL=DragAndDropHelper.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar NodeInlineElement_1 = require(\"./NodeInlineElement\");\n/**\n * This is an inline element representing an Html image\n */\nvar ImageInlineElement = /** @class */ (function (_super) {\n __extends(ImageInlineElement, _super);\n function ImageInlineElement(containerNode, parentBlock) {\n return _super.call(this, containerNode, parentBlock) || this;\n }\n return ImageInlineElement;\n}(NodeInlineElement_1.default));\nexports.default = ImageInlineElement;\n//# sourceMappingURL=ImageInlineElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar applyListItemWrap_1 = require(\"../utils/applyListItemWrap\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * Set font size at selection\n * @param editor The editor instance\n * @param fontSize The fontSize string, should be a valid CSS font-size style.\n * Currently there's no validation to the string, if the passed string is invalid, it won't take affect\n */\nfunction setFontSize(editor, fontSize) {\n // The browser provided execCommand only accepts 1-7 point value. In addition, it uses HTML tag with size attribute.\n // is not HTML5 standard (http://www.w3schools.com/tags/tag_font.asp).\n (0, applyListItemWrap_1.default)(editor, 'font-size', function (element, isInnerNode) {\n element.style.fontSize = isInnerNode ? '' : fontSize;\n var lineHeight = (0, roosterjs_editor_dom_1.getComputedStyle)(element, 'line-height');\n if (lineHeight != 'normal') {\n element.style.lineHeight = 'normal';\n }\n });\n}\nexports.default = setFontSize;\n//# sourceMappingURL=setFontSize.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(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))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getStyleCallbacks = exports.getDefaultStyleValues = exports.getAllowedCssClassesRegex = exports.getAllowedAttributes = exports.getTagReplacement = void 0;\nvar cloneObject_1 = require(\"./cloneObject\");\nvar HTML_TAG_REPLACEMENT = {\n // Allowed tags\n a: '*',\n abbr: '*',\n address: '*',\n area: '*',\n article: '*',\n aside: '*',\n b: '*',\n bdi: '*',\n bdo: '*',\n blockquote: '*',\n body: '*',\n br: '*',\n button: '*',\n canvas: '*',\n caption: '*',\n center: '*',\n cite: '*',\n code: '*',\n col: '*',\n colgroup: '*',\n data: '*',\n datalist: '*',\n dd: '*',\n del: '*',\n details: '*',\n dfn: '*',\n dialog: '*',\n dir: '*',\n div: '*',\n dl: '*',\n dt: '*',\n em: '*',\n fieldset: '*',\n figcaption: '*',\n figure: '*',\n font: '*',\n footer: '*',\n h1: '*',\n h2: '*',\n h3: '*',\n h4: '*',\n h5: '*',\n h6: '*',\n head: '*',\n header: '*',\n hgroup: '*',\n hr: '*',\n html: '*',\n i: '*',\n img: '*',\n input: '*',\n ins: '*',\n kbd: '*',\n label: '*',\n legend: '*',\n li: '*',\n main: '*',\n map: '*',\n mark: '*',\n menu: '*',\n menuitem: '*',\n meter: '*',\n nav: '*',\n ol: '*',\n optgroup: '*',\n option: '*',\n output: '*',\n p: '*',\n picture: '*',\n pre: '*',\n progress: '*',\n q: '*',\n rp: '*',\n rt: '*',\n ruby: '*',\n s: '*',\n samp: '*',\n section: '*',\n select: '*',\n small: '*',\n span: '*',\n strike: '*',\n strong: '*',\n sub: '*',\n summary: '*',\n sup: '*',\n table: '*',\n tbody: '*',\n td: '*',\n template: '*',\n textarea: '*',\n tfoot: '*',\n th: '*',\n thead: '*',\n time: '*',\n tr: '*',\n tt: '*',\n u: '*',\n ul: '*',\n var: '*',\n wbr: '*',\n xmp: '*',\n // Replaced tags:\n form: 'SPAN',\n // Disallowed tags\n applet: null,\n audio: null,\n base: null,\n basefont: null,\n embed: null,\n frame: null,\n frameset: null,\n iframe: null,\n link: null,\n meta: null,\n noscript: null,\n object: null,\n param: null,\n script: null,\n slot: null,\n source: null,\n style: null,\n title: null,\n track: null,\n video: null,\n};\nvar ALLOWED_HTML_ATTRIBUTES = ('accept,align,alt,checked,cite,color,cols,colspan,contextmenu,' +\n 'coords,datetime,default,dir,dirname,disabled,download,face,headers,height,hidden,high,href,' +\n 'hreflang,ismap,kind,label,lang,list,low,max,maxlength,media,min,multiple,open,optimum,pattern,' +\n 'placeholder,readonly,rel,required,reversed,rows,rowspan,scope,selected,shape,size,sizes,span,' +\n 'spellcheck,src,srclang,srcset,start,step,style,tabindex,target,title,translate,type,usemap,valign,value,' +\n 'width,wrap').split(',');\nvar DEFAULT_STYLE_VALUES = {\n 'background-color': 'transparent',\n 'border-bottom-color': 'rgb(0, 0, 0)',\n 'border-bottom-style': 'none',\n 'border-bottom-width': '0px',\n 'border-image-outset': '0',\n 'border-image-repeat': 'stretch',\n 'border-image-slice': '100%',\n 'border-image-source': 'none',\n 'border-image-width': '1',\n 'border-left-color': 'rgb(0, 0, 0)',\n 'border-left-style': 'none',\n 'border-left-width': '0px',\n 'border-right-color': 'rgb(0, 0, 0)',\n 'border-right-style': 'none',\n 'border-right-width': '0px',\n 'border-top-color': 'rgb(0, 0, 0)',\n 'border-top-style': 'none',\n 'border-top-width': '0px',\n 'outline-color': 'transparent',\n 'outline-style': 'none',\n 'outline-width': '0px',\n overflow: 'visible',\n 'text-decoration': 'none',\n '-webkit-text-stroke-width': '0px',\n 'word-wrap': 'break-word',\n 'margin-left': '0px',\n 'margin-right': '0px',\n padding: '0px',\n 'padding-top': '0px',\n 'padding-left': '0px',\n 'padding-right': '0px',\n 'padding-bottom': '0px',\n border: '0px',\n 'border-top': '0px',\n 'border-left': '0px',\n 'border-right': '0px',\n 'border-bottom': '0px',\n 'vertical-align': 'baseline',\n float: 'none',\n};\n// This is to preserve entity related CSS classes when paste.\nvar ALLOWED_CSS_CLASSES = [];\n/**\n * @internal\n */\nfunction getTagReplacement(additionalReplacements) {\n var result = __assign({}, HTML_TAG_REPLACEMENT);\n var replacements = additionalReplacements || {};\n Object.keys(replacements).forEach(function (key) {\n if (key) {\n result[key.toLowerCase()] = replacements[key];\n }\n });\n return result;\n}\nexports.getTagReplacement = getTagReplacement;\n/**\n * @internal\n */\nfunction getAllowedAttributes(additionalAttributes) {\n return unique(ALLOWED_HTML_ATTRIBUTES.concat(additionalAttributes || [])).map(function (attr) {\n return attr.toLocaleLowerCase();\n });\n}\nexports.getAllowedAttributes = getAllowedAttributes;\n/**\n * @internal\n */\nfunction getAllowedCssClassesRegex(additionalCssClasses) {\n var patterns = ALLOWED_CSS_CLASSES.concat(additionalCssClasses || []);\n return patterns.length > 0 ? new RegExp(patterns.join('|')) : null;\n}\nexports.getAllowedCssClassesRegex = getAllowedCssClassesRegex;\n/**\n * @internal\n */\nfunction getDefaultStyleValues(additionalDefaultStyles) {\n var result = (0, cloneObject_1.cloneObject)(DEFAULT_STYLE_VALUES);\n if (additionalDefaultStyles) {\n Object.keys(additionalDefaultStyles).forEach(function (name) {\n var value = additionalDefaultStyles[name];\n if (value !== null && value !== undefined) {\n result[name] = value;\n }\n else {\n delete result[name];\n }\n });\n }\n return result;\n}\nexports.getDefaultStyleValues = getDefaultStyleValues;\n/**\n * @internal\n */\nfunction getStyleCallbacks(callbacks) {\n var result = (0, cloneObject_1.cloneObject)(callbacks);\n result.position = result.position || removeValue;\n result.width = result.width || removeWidthForLiAndDiv;\n return result;\n}\nexports.getStyleCallbacks = getStyleCallbacks;\nfunction removeValue() {\n return null;\n}\nfunction removeWidthForLiAndDiv(value, element) {\n var tag = element.tagName;\n return !(tag == 'LI' || tag == 'DIV');\n}\nfunction unique(array) {\n return array.filter(function (value, index, self) { return self.indexOf(value) == index; });\n}\n//# sourceMappingURL=getAllowedValues.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createLevelLists = void 0;\n/**\n * @internal\n * create an empty LevelLists\n */\nfunction createLevelLists() {\n return {\n listsMetadata: {},\n currentUniqueListId: -1,\n };\n}\nexports.createLevelLists = createLevelLists;\n//# sourceMappingURL=LevelLists.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * DOMEventPlugin handles customized DOM events, including:\n * 1. Keyboard event\n * 2. Mouse event\n * 3. IME state\n * 4. Drop event\n * 5. Focus and blur event\n * 6. Input event\n * 7. Scroll event\n * It contains special handling for Safari since Safari cannot get correct selection when onBlur event is triggered in editor.\n */\nvar DOMEventPlugin = /** @class */ (function () {\n /**\n * Construct a new instance of DOMEventPlugin\n * @param options The editor options\n * @param contentDiv The editor content DIV\n */\n function DOMEventPlugin(options, contentDiv) {\n var _this = this;\n var _a;\n this.onDrop = function (e) {\n _this.editor.runAsync(function (editor) {\n editor.addUndoSnapshot(function () { }, \"Drop\" /* Drop */);\n });\n };\n this.onFocus = function () {\n var _a = _this.state.tableSelectionRange || {}, table = _a.table, coordinates = _a.coordinates;\n if (table && coordinates) {\n _this.editor.select(table, coordinates);\n }\n else {\n _this.editor.select(_this.state.selectionRange);\n }\n _this.state.selectionRange = null;\n };\n this.onKeyDownDocument = function (event) {\n if (event.which == 9 /* TAB */ && !event.defaultPrevented) {\n _this.cacheSelection();\n }\n };\n this.onMouseDownDocument = function (event) {\n if (!_this.state.selectionRange && !_this.editor.contains(event.target)) {\n _this.cacheSelection();\n }\n };\n this.cacheSelection = function () {\n if (!_this.state.selectionRange) {\n _this.state.selectionRange = _this.editor.getSelectionRange(false /*tryGetFromCache*/);\n }\n };\n this.onScroll = function (e) {\n _this.editor.triggerPluginEvent(14 /* Scroll */, {\n rawEvent: e,\n scrollContainer: _this.state.scrollContainer,\n });\n };\n this.onKeyboardEvent = function (event) {\n if ((0, roosterjs_editor_dom_1.isCharacterValue)(event)) {\n event.stopPropagation();\n }\n };\n this.onInputEvent = function (event) {\n event.stopPropagation();\n };\n this.onContextMenuEvent = function (event) {\n var allItems = [];\n var searcher = _this.editor.getContentSearcherOfCursor();\n var elementBeforeCursor = searcher === null || searcher === void 0 ? void 0 : searcher.getInlineElementBefore();\n var eventTargetNode = event.target;\n if (event.button != 2) {\n eventTargetNode = elementBeforeCursor === null || elementBeforeCursor === void 0 ? void 0 : elementBeforeCursor.getContainerNode();\n }\n _this.state.contextMenuProviders.forEach(function (provider) {\n var items = provider.getContextMenuItems(eventTargetNode);\n if ((items === null || items === void 0 ? void 0 : items.length) > 0) {\n if (allItems.length > 0) {\n allItems.push(null);\n }\n (0, roosterjs_editor_dom_1.arrayPush)(allItems, items);\n }\n });\n _this.editor.triggerPluginEvent(16 /* ContextMenu */, {\n rawEvent: event,\n items: allItems,\n });\n };\n this.state = {\n isInIME: false,\n scrollContainer: options.scrollContainer || contentDiv,\n selectionRange: null,\n stopPrintableKeyboardEventPropagation: !options.allowKeyboardEventPropagation,\n contextMenuProviders: ((_a = options.plugins) === null || _a === void 0 ? void 0 : _a.filter(isContextMenuProvider)) || [],\n tableSelectionRange: null,\n };\n }\n /**\n * Get a friendly name of this plugin\n */\n DOMEventPlugin.prototype.getName = function () {\n return 'DOMEvent';\n };\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n DOMEventPlugin.prototype.initialize = function (editor) {\n var _a;\n var _this = this;\n var _b, _c, _d;\n this.editor = editor;\n var document = this.editor.getDocument();\n var eventHandlers = (_a = {\n // 1. Keyboard event\n keypress: this.getEventHandler(1 /* KeyPress */),\n keydown: this.getEventHandler(0 /* KeyDown */),\n keyup: this.getEventHandler(2 /* KeyUp */),\n // 2. Mouse event\n mousedown: 5 /* MouseDown */,\n contextmenu: this.onContextMenuEvent,\n // 3. IME state management\n compositionstart: function () { return (_this.state.isInIME = true); },\n compositionend: function (rawEvent) {\n _this.state.isInIME = false;\n editor.triggerPluginEvent(4 /* CompositionEnd */, {\n rawEvent: rawEvent,\n });\n },\n // 4. Drop event\n drop: this.onDrop,\n // 5. Focus management\n focus: this.onFocus\n },\n // 6. Input event\n _a[roosterjs_editor_dom_1.Browser.isIE ? 'textinput' : 'input'] = this.getEventHandler(3 /* Input */),\n _a);\n // 7. onBlur handlers\n if (roosterjs_editor_dom_1.Browser.isSafari) {\n document.addEventListener('mousedown', this.onMouseDownDocument, true /*useCapture*/);\n document.addEventListener('keydown', this.onKeyDownDocument);\n (_b = document.defaultView) === null || _b === void 0 ? void 0 : _b.addEventListener('blur', this.cacheSelection);\n }\n else {\n eventHandlers[roosterjs_editor_dom_1.Browser.isIEOrEdge ? 'beforedeactivate' : 'blur'] = this.cacheSelection;\n }\n this.disposer = editor.addDomEventHandler(eventHandlers);\n // 8. Scroll event\n this.state.scrollContainer.addEventListener('scroll', this.onScroll);\n (_c = document.defaultView) === null || _c === void 0 ? void 0 : _c.addEventListener('scroll', this.onScroll);\n (_d = document.defaultView) === null || _d === void 0 ? void 0 : _d.addEventListener('resize', this.onScroll);\n };\n /**\n * Dispose this plugin\n */\n DOMEventPlugin.prototype.dispose = function () {\n var _a, _b, _c;\n var document = this.editor.getDocument();\n if (roosterjs_editor_dom_1.Browser.isSafari) {\n document.removeEventListener('mousedown', this.onMouseDownDocument, true /*useCapture*/);\n document.removeEventListener('keydown', this.onKeyDownDocument);\n (_a = document.defaultView) === null || _a === void 0 ? void 0 : _a.removeEventListener('blur', this.cacheSelection);\n }\n (_b = document.defaultView) === null || _b === void 0 ? void 0 : _b.removeEventListener('resize', this.onScroll);\n (_c = document.defaultView) === null || _c === void 0 ? void 0 : _c.removeEventListener('scroll', this.onScroll);\n this.state.scrollContainer.removeEventListener('scroll', this.onScroll);\n this.disposer();\n this.disposer = null;\n this.editor = null;\n };\n /**\n * Get plugin state object\n */\n DOMEventPlugin.prototype.getState = function () {\n return this.state;\n };\n DOMEventPlugin.prototype.getEventHandler = function (eventType) {\n return this.state.stopPrintableKeyboardEventPropagation\n ? {\n pluginEventType: eventType,\n beforeDispatch: eventType == 3 /* Input */ ? this.onInputEvent : this.onKeyboardEvent,\n }\n : eventType;\n };\n return DOMEventPlugin;\n}());\nexports.default = DOMEventPlugin;\nfunction isContextMenuProvider(source) {\n var _a;\n return !!((_a = source) === null || _a === void 0 ? void 0 : _a.getContextMenuItems);\n}\n//# sourceMappingURL=DOMEventPlugin.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar collapseNodes_1 = require(\"../utils/collapseNodes\");\nvar contains_1 = require(\"../utils/contains\");\nvar createRange_1 = require(\"../selection/createRange\");\nvar getTagOfNode_1 = require(\"../utils/getTagOfNode\");\nvar isBlockElement_1 = require(\"../utils/isBlockElement\");\nvar isNodeAfter_1 = require(\"../utils/isNodeAfter\");\nvar wrap_1 = require(\"../utils/wrap\");\nvar splitParentNode_1 = require(\"../utils/splitParentNode\");\nvar STRUCTURE_NODE_TAGS = ['TD', 'TH', 'LI', 'BLOCKQUOTE'];\n/**\n * @internal\n * This represents a block that is identified by a start and end node\n * This is for cases like <root>Hello<BR>World</root>\n * in that case, Hello<BR> is a block, World is another block\n * Such block cannot be represented by a NodeBlockElement since they don't chained up\n * to a single parent node, instead they have a start and end\n * This start and end must be in same sibling level and have same parent in DOM tree\n */\nvar StartEndBlockElement = /** @class */ (function () {\n function StartEndBlockElement(rootNode, startNode, endNode) {\n this.rootNode = rootNode;\n this.startNode = startNode;\n this.endNode = endNode;\n }\n StartEndBlockElement.getBlockContext = function (node) {\n while (node && !(0, isBlockElement_1.default)(node)) {\n node = node.parentNode;\n }\n return node;\n };\n /**\n * Collapse this element to a single DOM element.\n * If the content nodes are separated in different root nodes, wrap them to a single node\n * If the content nodes are included in root node with other nodes, split root node\n */\n StartEndBlockElement.prototype.collapseToSingleElement = function () {\n var nodes = (0, collapseNodes_1.default)(StartEndBlockElement.getBlockContext(this.startNode), this.startNode, this.endNode, true /*canSplitParent*/);\n var blockContext = StartEndBlockElement.getBlockContext(this.startNode);\n while (nodes[0] &&\n nodes[0] != blockContext &&\n nodes[0].parentNode != this.rootNode &&\n STRUCTURE_NODE_TAGS.indexOf((0, getTagOfNode_1.default)(nodes[0].parentNode)) < 0) {\n nodes = [(0, splitParentNode_1.splitBalancedNodeRange)(nodes)];\n }\n return nodes.length == 1 && (0, isBlockElement_1.default)(nodes[0])\n ? nodes[0]\n : (0, wrap_1.default)(nodes);\n };\n /**\n * Gets the start node\n */\n StartEndBlockElement.prototype.getStartNode = function () {\n return this.startNode;\n };\n /**\n * Gets the end node\n */\n StartEndBlockElement.prototype.getEndNode = function () {\n return this.endNode;\n };\n /**\n * Checks equals of two blocks\n */\n StartEndBlockElement.prototype.equals = function (blockElement) {\n return (this.startNode == blockElement.getStartNode() &&\n this.endNode == blockElement.getEndNode());\n };\n /**\n * Checks if another block is after this current\n */\n StartEndBlockElement.prototype.isAfter = function (blockElement) {\n return (0, isNodeAfter_1.default)(this.getStartNode(), blockElement.getEndNode());\n };\n /**\n * Checks if an Html node is contained within the block\n */\n StartEndBlockElement.prototype.contains = function (node) {\n return ((0, contains_1.default)(this.startNode, node, true /*treatSameNodeAsContain*/) ||\n (0, contains_1.default)(this.endNode, node, true /*treatSameNodeAsContain*/) ||\n ((0, isNodeAfter_1.default)(node, this.startNode) && (0, isNodeAfter_1.default)(this.endNode, node)));\n };\n /**\n * Get the text content of this block element\n */\n StartEndBlockElement.prototype.getTextContent = function () {\n var range = (0, createRange_1.default)(this.getStartNode(), this.getEndNode());\n return range ? range.toString() : '';\n };\n return StartEndBlockElement;\n}());\nexports.default = StartEndBlockElement;\n//# sourceMappingURL=StartEndBlockElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPreviousLeafSibling = exports.getNextLeafSibling = exports.getLeafSibling = void 0;\nvar contains_1 = require(\"./contains\");\nvar getTagOfNode_1 = require(\"./getTagOfNode\");\nvar shouldSkipNode_1 = require(\"./shouldSkipNode\");\n/**\n * @internal\n * This walks forwards/backwards DOM tree to get next meaningful node\n * @param rootNode Root node to scope the leaf sibling node\n * @param startNode current node to get sibling node from\n * @param isNext True to get next leaf sibling node, false to get previous leaf sibling node\n * @param skipTags (Optional) tags that child elements will be skipped\n * @param ignoreSpace (Optional) Ignore pure space text node when check if the node should be skipped\n */\nfunction getLeafSibling(rootNode, startNode, isNext, skipTags, ignoreSpace) {\n var result = null;\n var getSibling = isNext\n ? function (node) { return (node === null || node === void 0 ? void 0 : node.nextSibling) || null; }\n : function (node) { return (node === null || node === void 0 ? void 0 : node.previousSibling) || null; };\n var getChild = isNext ? function (node) { return node.firstChild; } : function (node) { return node.lastChild; };\n if ((0, contains_1.default)(rootNode, startNode)) {\n var curNode = startNode;\n var shouldContinue = true;\n while (shouldContinue) {\n // Find next/previous node, starting from next/previous sibling, then one level up to find next/previous sibling from parent\n // till a non-null nextSibling/previousSibling is found or the ceiling is encountered (rootNode)\n var parentNode = (curNode === null || curNode === void 0 ? void 0 : curNode.parentNode) || null;\n curNode = getSibling(curNode);\n while (!curNode && parentNode != rootNode) {\n curNode = getSibling(parentNode);\n parentNode = (parentNode === null || parentNode === void 0 ? void 0 : parentNode.parentNode) || null;\n }\n // Now traverse down to get first/last child\n while (curNode &&\n (!skipTags || skipTags.indexOf((0, getTagOfNode_1.default)(curNode)) < 0) &&\n getChild(curNode)) {\n curNode = getChild(curNode);\n }\n // Check special nodes (i.e. node that has a display:none etc.) and continue looping if so\n shouldContinue = !!curNode && (0, shouldSkipNode_1.default)(curNode, ignoreSpace);\n if (!shouldContinue) {\n // Found a good leaf node, assign and exit\n result = curNode;\n break;\n }\n }\n }\n return result;\n}\nexports.getLeafSibling = getLeafSibling;\n/**\n * This walks forwards DOM tree to get next meaningful node\n * @param rootNode Root node to scope the leaf sibling node\n * @param startNode current node to get sibling node from\n * @param skipTags (Optional) tags that child elements will be skipped\n */\nfunction getNextLeafSibling(rootNode, startNode, skipTags) {\n return getLeafSibling(rootNode, startNode, true /*isNext*/, skipTags);\n}\nexports.getNextLeafSibling = getNextLeafSibling;\n/**\n * This walks backwards DOM tree to get next meaningful node\n * @param rootNode Root node to scope the leaf sibling node\n * @param startNode current node to get sibling node from\n * @param skipTags (Optional) tags that child elements will be skipped\n */\nfunction getPreviousLeafSibling(rootNode, startNode, skipTags) {\n return getLeafSibling(rootNode, startNode, false /*isNext*/, skipTags);\n}\nexports.getPreviousLeafSibling = getPreviousLeafSibling;\n//# sourceMappingURL=getLeafSibling.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CutPasteListChain = void 0;\nvar CutPasteListChain_1 = require(\"./CutPasteListChain\");\nObject.defineProperty(exports, \"CutPasteListChain\", { enumerable: true, get: function () { return CutPasteListChain_1.default; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cloneObject = void 0;\nfunction nativeClone(source, existingObj) {\n return Object.assign(existingObj || {}, source);\n}\nfunction customClone(source, existingObj) {\n var result = existingObj || {};\n if (source) {\n for (var _i = 0, _a = Object.keys(source); _i < _a.length; _i++) {\n var key = _a[_i];\n result[key] = source[key];\n }\n }\n return result;\n}\n// @ts-ignore Ignore this error for IE compatibility\nvar cloneObjectImpl = Object.assign ? nativeClone : customClone;\n/**\n * @internal\n */\nfunction cloneObject(source, existingObj) {\n return cloneObjectImpl(source, existingObj);\n}\nexports.cloneObject = cloneObject;\n//# sourceMappingURL=cloneObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * Typing Component helps to ensure typing is always happening under a DOM container\n */\nvar TypeInContainerPlugin = /** @class */ (function () {\n function TypeInContainerPlugin() {\n }\n /**\n * Get a friendly name of this plugin\n */\n TypeInContainerPlugin.prototype.getName = function () {\n return 'TypeInContainer';\n };\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n TypeInContainerPlugin.prototype.initialize = function (editor) {\n this.editor = editor;\n };\n /**\n * Dispose this plugin\n */\n TypeInContainerPlugin.prototype.dispose = function () {\n this.editor = null;\n };\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n TypeInContainerPlugin.prototype.onPluginEvent = function (event) {\n if (event.eventType == 1 /* KeyPress */) {\n // If normalization was not possible before the keypress,\n // check again after the keyboard event has been processed by browser native behavior.\n //\n // This handles the case where the keyboard event that first inserts content happens when\n // there is already content under the selection (e.g. Ctrl+a -> type new content).\n //\n // Only schedule when the range is not collapsed to catch this edge case.\n var range = this.editor.getSelectionRange();\n var shouldAlwaysApplyDefaultFormat = this.editor.isFeatureEnabled(\"AlwaysApplyDefaultFormat\" /* AlwaysApplyDefaultFormat */);\n if (!range ||\n this.editor.contains((0, roosterjs_editor_dom_1.findClosestElementAncestor)(range.startContainer, null /* root */, shouldAlwaysApplyDefaultFormat ? '[style]' : null /*selector*/))) {\n return;\n }\n if (range.collapsed) {\n this.editor.ensureTypeInContainer(roosterjs_editor_dom_1.Position.getStart(range), event.rawEvent);\n }\n else {\n this.editor.runAsync(function (editor) {\n editor.ensureTypeInContainer(editor.getFocusedPosition(), event.rawEvent);\n });\n }\n }\n };\n return TypeInContainerPlugin;\n}());\nexports.default = TypeInContainerPlugin;\n//# sourceMappingURL=TypeInContainerPlugin.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KnownCreateElementDataIndex = void 0;\n/**\n * Index of known CreateElementData used by createElement function\n */\nvar KnownCreateElementDataIndex;\n(function (KnownCreateElementDataIndex) {\n /**\n * Set a none value to help createElement function ignore falsy value\n */\n KnownCreateElementDataIndex[KnownCreateElementDataIndex[\"None\"] = 0] = \"None\";\n /**\n * An empty line without format\n */\n KnownCreateElementDataIndex[KnownCreateElementDataIndex[\"EmptyLine\"] = 1] = \"EmptyLine\";\n /**\n * Wrapper for blockquote\n */\n KnownCreateElementDataIndex[KnownCreateElementDataIndex[\"BlockquoteWrapper\"] = 2] = \"BlockquoteWrapper\";\n /**\n * Temp DIV for copy/paste\n */\n KnownCreateElementDataIndex[KnownCreateElementDataIndex[\"CopyPasteTempDiv\"] = 3] = \"CopyPasteTempDiv\";\n /**\n * ListItem with block style\n */\n KnownCreateElementDataIndex[KnownCreateElementDataIndex[\"BlockListItem\"] = 4] = \"BlockListItem\";\n /**\n * Wrapper element for context menu\n */\n KnownCreateElementDataIndex[KnownCreateElementDataIndex[\"ContextMenuWrapper\"] = 5] = \"ContextMenuWrapper\";\n /**\n * Wrapper element for image edit\n */\n KnownCreateElementDataIndex[KnownCreateElementDataIndex[\"ImageEditWrapper\"] = 6] = \"ImageEditWrapper\";\n /**\n * Table resizer elements\n */\n KnownCreateElementDataIndex[KnownCreateElementDataIndex[\"TableHorizontalResizer\"] = 7] = \"TableHorizontalResizer\";\n KnownCreateElementDataIndex[KnownCreateElementDataIndex[\"TableVerticalResizer\"] = 8] = \"TableVerticalResizer\";\n KnownCreateElementDataIndex[KnownCreateElementDataIndex[\"TableResizerLTR\"] = 9] = \"TableResizerLTR\";\n KnownCreateElementDataIndex[KnownCreateElementDataIndex[\"TableResizerRTL\"] = 10] = \"TableResizerRTL\";\n /**\n * Table Selector element\n */\n KnownCreateElementDataIndex[KnownCreateElementDataIndex[\"TableSelector\"] = 11] = \"TableSelector\";\n})(KnownCreateElementDataIndex = exports.KnownCreateElementDataIndex || (exports.KnownCreateElementDataIndex = {}));\n//# sourceMappingURL=KnownCreateElementDataIndex.js.map","\"use strict\";\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRegionCreator = void 0;\nvar contains_1 = require(\"../utils/contains\");\nvar findClosestElementAncestor_1 = require(\"../utils/findClosestElementAncestor\");\nvar Position_1 = require(\"../selection/Position\");\nvar queryElements_1 = require(\"../utils/queryElements\");\nvar getLeafSibling_1 = require(\"../utils/getLeafSibling\");\nvar regionTypeData = (_a = {},\n _a[0 /* Table */] = {\n skipTags: ['TABLE'],\n outerSelector: 'table',\n innerSelector: 'td,th',\n },\n _a);\n/**\n * Get regions impacted by the given range under the root node\n * @param root Root node to get regions from\n * @param range A selection range. Regions will be created according to this range. Each region will be\n * fully or partially covered by this range.\n * @param type Type of region. Currently we only support TABLE region.\n */\nfunction getRegionsFromRange(root, range, type) {\n var regions = [];\n if (root && range) {\n var _a = regionTypeData[type], innerSelector = _a.innerSelector, skipTags = _a.skipTags;\n var boundaryTree = buildBoundaryTree(root, range, type);\n var start = (0, findClosestElementAncestor_1.default)(range.startContainer, root, innerSelector) || root;\n var end = (0, findClosestElementAncestor_1.default)(range.endContainer, root, innerSelector) || root;\n var creator = getRegionCreator(range, skipTags);\n regions = iterateNodes(creator, boundaryTree, start, end)[0];\n }\n return regions.filter(function (r) { return !!r; });\n}\nexports.default = getRegionsFromRange;\n/**\n * @internal export for test only\n */\nfunction getRegionCreator(fullRange, skipTags) {\n var fullSelectionStart = Position_1.default.getStart(fullRange).normalize();\n var fullSelectionEnd = Position_1.default.getEnd(fullRange).normalize();\n return function (rootNode, nodeBefore, nodeAfter) {\n return areNodesValid(rootNode, nodeBefore, nodeAfter, skipTags)\n ? {\n rootNode: rootNode,\n nodeBefore: nodeBefore,\n nodeAfter: nodeAfter,\n skipTags: skipTags,\n fullSelectionStart: fullSelectionStart,\n fullSelectionEnd: fullSelectionEnd,\n }\n : null;\n };\n}\nexports.getRegionCreator = getRegionCreator;\n/**\n * Step 1: Build boundary tree\n * @param root Root node of the whole scope, normally this will be the root of editable scope\n * @param range Existing selected full range\n * @param type Type of region to create\n */\nfunction buildBoundaryTree(root, range, type) {\n var allBoundaries = [{ innerNode: root, children: [] }];\n var _a = regionTypeData[type], outerSelector = _a.outerSelector, innerSelector = _a.innerSelector;\n var inSelectionOuterNode = (0, queryElements_1.default)(root, outerSelector, null /*callback*/, 2 /* InSelection */, range);\n // According to https://www.w3.org/TR/selectors-api/#queryselectorall, the result of querySelectorAll\n // is in document order, which is what we expect. So we don't need to sort the result here.\n (0, queryElements_1.default)(root, innerSelector, function (thisInnerNode) {\n var thisOuterNode = (0, findClosestElementAncestor_1.default)(thisInnerNode, root, outerSelector);\n if (thisOuterNode && inSelectionOuterNode.indexOf(thisOuterNode) < 0) {\n var boundary = { innerNode: thisInnerNode, children: [] };\n for (var i = allBoundaries.length - 1; i >= 0; i--) {\n var _a = allBoundaries[i], innerNode = _a.innerNode, children = _a.children;\n if ((0, contains_1.default)(innerNode, thisOuterNode)) {\n var child = children.filter(function (c) { return c.outerNode == thisOuterNode; })[0];\n if (!child) {\n child = { outerNode: thisOuterNode, boundaries: [] };\n children.push(child);\n }\n child.boundaries.push(boundary);\n break;\n }\n }\n allBoundaries.push(boundary);\n }\n }, 1 /* OnSelection */, range);\n return allBoundaries[0];\n}\n/**\n * Step 2: Recursively iterate all boundaries and create regions\n * @param creator A region creator function to help create region\n * @param boundary Current root boundary\n * @param start A node where full range start from. This may not be the direct node container of range.startContainer.\n * It is the nearest ancestor which satisfies the InnerSelector of the given region type\n * @param end A node where full range end from. This may not be the direct node container of range.endContainer.\n * It is the nearest ancestor which satisfies the InnerSelector of the given region type\n * @param started Whether we have already hit the start node\n */\nfunction iterateNodes(creator, boundary, start, end, started) {\n var _a;\n started = started || boundary.innerNode == start;\n var ended = false;\n var children = boundary.children, innerNode = boundary.innerNode;\n var regions = [];\n if (children.length == 0) {\n regions.push(creator(innerNode));\n }\n else {\n // Need to run one more time to add region after all children\n for (var i = 0; i <= children.length && !ended; i++) {\n var _b = children[i] || {}, outerNode = _b.outerNode, boundaries = _b.boundaries;\n var previousOuterNode = (_a = children[i - 1]) === null || _a === void 0 ? void 0 : _a.outerNode;\n if (started) {\n regions.push(creator(innerNode, previousOuterNode, outerNode));\n }\n boundaries === null || boundaries === void 0 ? void 0 : boundaries.forEach(function (child) {\n var _a;\n var newRegions;\n _a = iterateNodes(creator, child, start, end, started), newRegions = _a[0], started = _a[1], ended = _a[2];\n regions = regions.concat(newRegions);\n });\n }\n }\n return [regions, started, ended || innerNode == end];\n}\n/**\n * Check if the given nodes combination is valid to create a region.\n * A combination is valid when:\n * 1. Root node is not null and is not empty. And\n * 2. For nodeBefore and nodeAfter, each of them should be either null or contained by root node. And\n * 3. If none of nodeBefore and nodeAfter is null, the should not contain each other, and there should be\n * node between them.\n * @param root Root node of region\n * @param nodeBefore The boundary node before the region under root\n * @param nodeAfter The boundary node after the region under root\n * @param skipTags Tags to skip\n */\nfunction areNodesValid(root, nodeBefore, nodeAfter, skipTags) {\n if (!root) {\n return false;\n }\n else {\n var firstNodeOfRegion = nodeBefore && (0, getLeafSibling_1.getNextLeafSibling)(root, nodeBefore, skipTags);\n var lastNodeOfRegion = nodeAfter && (0, getLeafSibling_1.getPreviousLeafSibling)(root, nodeAfter, skipTags);\n var firstNodeValid = !nodeBefore || ((0, contains_1.default)(root, nodeBefore) && (0, contains_1.default)(root, firstNodeOfRegion));\n var lastNodeValid = !nodeAfter || ((0, contains_1.default)(root, nodeAfter) && (0, contains_1.default)(root, lastNodeOfRegion));\n var bothValid = !nodeBefore ||\n !nodeAfter ||\n (!(0, contains_1.default)(nodeBefore, nodeAfter, true /*treatSameAsContain*/) &&\n !(0, contains_1.default)(nodeBefore, lastNodeOfRegion, true /*treatSameAsContain*/) &&\n !(0, contains_1.default)(nodeAfter, nodeBefore, true /*treatSameAsContain*/) &&\n !(0, contains_1.default)(nodeAfter, firstNodeOfRegion, true /*treatSameAsContain*/));\n return firstNodeValid && lastNodeValid && bothValid;\n }\n}\n//# sourceMappingURL=getRegionsFromRange.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getLastLeafNode = exports.getFirstLeafNode = void 0;\nvar shouldSkipNode_1 = require(\"./shouldSkipNode\");\nvar getLeafSibling_1 = require(\"./getLeafSibling\");\n/**\n * Get first/last leaf node of the given root node.\n * @param rootNode Root node to get leaf node from\n * @param isFirst True to get first leaf node, false to get last leaf node\n */\nfunction getLeafNode(rootNode, isFirst) {\n var getChild = function (node) { return (isFirst ? node.firstChild : node.lastChild); };\n var result = getChild(rootNode);\n while (result && getChild(result)) {\n result = getChild(result);\n }\n if (result && (0, shouldSkipNode_1.default)(result)) {\n result = (0, getLeafSibling_1.getLeafSibling)(rootNode, result, isFirst);\n }\n return result;\n}\n/**\n * Get the first meaningful leaf node\n * @param rootNode Root node to get leaf node from\n */\nfunction getFirstLeafNode(rootNode) {\n return getLeafNode(rootNode, true /*isFirst*/);\n}\nexports.getFirstLeafNode = getFirstLeafNode;\n/**\n * Get the last meaningful leaf node\n * @param rootNode Root node to get leaf node from\n */\nfunction getLastLeafNode(rootNode) {\n return getLeafNode(rootNode, false /*isFirst*/);\n}\nexports.getLastLeafNode = getLastLeafNode;\n//# sourceMappingURL=getLeafNode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Create default value of HtmlSanitizerOptions with every property set\n */\nfunction createDefaultHtmlSanitizerOptions() {\n return {\n elementCallbacks: {},\n attributeCallbacks: {},\n cssStyleCallbacks: {},\n additionalTagReplacements: {},\n additionalAllowedAttributes: [],\n additionalAllowedCssClasses: [],\n additionalDefaultStyleValues: {},\n additionalGlobalStyleNodes: [],\n additionalPredefinedCssForElement: {},\n preserveHtmlComments: false,\n unknownTagReplacement: null,\n };\n}\nexports.default = createDefaultHtmlSanitizerOptions;\n//# sourceMappingURL=createDefaultHtmlSanitizerOptions.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar contains_1 = require(\"../utils/contains\");\nvar getBlockElementAtNode_1 = require(\"../blockElements/getBlockElementAtNode\");\nvar getFirstLastBlockElement_1 = require(\"../blockElements/getFirstLastBlockElement\");\nvar getInlineElementAtNode_1 = require(\"../inlineElements/getInlineElementAtNode\");\nvar getFirstLastInlineElement_1 = require(\"../inlineElements/getFirstLastInlineElement\");\n/**\n * @internal\n * provides a scope object for traversing the entire editor body starting from the beginning\n */\nvar BodyScoper = /** @class */ (function () {\n /**\n * Construct a new instance of BodyScoper class\n * @param rootNode Root node of the body\n * @param startNode The node to start from. If not passed, it will start from the beginning of the body\n */\n function BodyScoper(rootNode, startNode) {\n this.rootNode = rootNode;\n this.startNode = (0, contains_1.default)(rootNode, startNode) ? startNode : null;\n }\n /**\n * Get the start block element\n */\n BodyScoper.prototype.getStartBlockElement = function () {\n return this.startNode\n ? (0, getBlockElementAtNode_1.default)(this.rootNode, this.startNode)\n : (0, getFirstLastBlockElement_1.default)(this.rootNode, true /*isFirst*/);\n };\n /**\n * Get the start inline element\n */\n BodyScoper.prototype.getStartInlineElement = function () {\n return this.startNode\n ? (0, getInlineElementAtNode_1.default)(this.rootNode, this.startNode)\n : (0, getFirstLastInlineElement_1.getFirstInlineElement)(this.rootNode);\n };\n /**\n * Since the scope is global, all blocks under the root node are in scope\n */\n BodyScoper.prototype.isBlockInScope = function (blockElement) {\n return (0, contains_1.default)(this.rootNode, blockElement.getStartNode());\n };\n /**\n * Since we're at body scope, inline elements never need to be trimmed\n */\n BodyScoper.prototype.trimInlineElement = function (inlineElement) {\n return inlineElement;\n };\n return BodyScoper;\n}());\nexports.default = BodyScoper;\n//# sourceMappingURL=BodyScoper.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar BodyScoper_1 = require(\"./BodyScoper\");\nvar EmptyInlineElement_1 = require(\"../inlineElements/EmptyInlineElement\");\nvar getBlockElementAtNode_1 = require(\"../blockElements/getBlockElementAtNode\");\nvar getInlineElementAtNode_1 = require(\"../inlineElements/getInlineElementAtNode\");\nvar PartialInlineElement_1 = require(\"../inlineElements/PartialInlineElement\");\nvar SelectionBlockScoper_1 = require(\"./SelectionBlockScoper\");\nvar SelectionScoper_1 = require(\"./SelectionScoper\");\nvar getInlineElementBeforeAfter_1 = require(\"../inlineElements/getInlineElementBeforeAfter\");\nvar getLeafSibling_1 = require(\"../utils/getLeafSibling\");\n/**\n * The provides traversing of content inside editor.\n * There are two ways to traverse, block by block, or inline element by inline element\n * Block and inline traversing is independent from each other, meaning if you traverse block by block, it does not change\n * the current inline element position\n */\nvar ContentTraverser = /** @class */ (function () {\n /**\n * Create a content traverser for the whole body of given root node\n * @param scoper Traversing scoper object to help scope the traversing\n * @param skipTags (Optional) tags that child elements will be skipped\n */\n function ContentTraverser(scoper, skipTags) {\n this.scoper = scoper;\n this.skipTags = skipTags;\n }\n /**\n * Create a content traverser for the whole body of given root node\n * @param rootNode The root node to traverse in\n * @param startNode The node to start from. If not passed, it will start from the beginning of the body\n * @param skipTags (Optional) tags that child elements will be skipped\n */\n ContentTraverser.createBodyTraverser = function (rootNode, startNode, skipTags) {\n return new ContentTraverser(new BodyScoper_1.default(rootNode, startNode));\n };\n /**\n * Create a content traverser for the given selection\n * @param rootNode The root node to traverse in\n * @param range The selection range to scope the traversing\n * @param skipTags (Optional) tags that child elements will be skipped\n */\n ContentTraverser.createSelectionTraverser = function (rootNode, range, skipTags) {\n return new ContentTraverser(new SelectionScoper_1.default(rootNode, range), skipTags);\n };\n /**\n * Create a content traverser for a block element which contains the given position\n * @param rootNode The root node to traverse in\n * @param position A position inside a block, traversing will be scoped within this block.\n * If passing a range, the start position of this range will be used\n * @param startFrom Start position of traversing. The value can be Begin, End, SelectionStart\n * @param skipTags (Optional) tags that child elements will be skipped\n */\n ContentTraverser.createBlockTraverser = function (rootNode, position, start, skipTags) {\n if (start === void 0) { start = 3 /* SelectionStart */; }\n return new ContentTraverser(new SelectionBlockScoper_1.default(rootNode, position, start));\n };\n Object.defineProperty(ContentTraverser.prototype, \"currentBlockElement\", {\n /**\n * Get current block\n */\n get: function () {\n // Prepare currentBlock from the scoper\n if (!this.currentBlock) {\n this.currentBlock = this.scoper.getStartBlockElement();\n }\n return this.currentBlock;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Get next block element\n */\n ContentTraverser.prototype.getNextBlockElement = function () {\n return this.getPreviousNextBlockElement(true /*isNext*/);\n };\n /**\n * Get previous block element\n */\n ContentTraverser.prototype.getPreviousBlockElement = function () {\n return this.getPreviousNextBlockElement(false /*isNext*/);\n };\n ContentTraverser.prototype.getPreviousNextBlockElement = function (isNext) {\n var current = this.currentBlockElement;\n if (!current) {\n return null;\n }\n var leaf = (0, getLeafSibling_1.getLeafSibling)(this.scoper.rootNode, isNext ? current.getEndNode() : current.getStartNode(), isNext, this.skipTags);\n var newBlock = leaf ? (0, getBlockElementAtNode_1.default)(this.scoper.rootNode, leaf) : null;\n // Make sure this is right block:\n // 1) the block is in scope per scoper\n // 2) the block is after (for next) or before (for previous) the current block\n // Then:\n // 1) Re-position current block to newly found block\n if (newBlock &&\n this.scoper.isBlockInScope(newBlock) &&\n ((isNext && newBlock.isAfter(current)) || (!isNext && current.isAfter(newBlock)))) {\n this.currentBlock = newBlock;\n return this.currentBlock;\n }\n return null;\n };\n Object.defineProperty(ContentTraverser.prototype, \"currentInlineElement\", {\n /**\n * Current inline element getter\n */\n get: function () {\n // Retrieve a start inline from scoper\n if (!this.currentInline) {\n this.currentInline = this.scoper.getStartInlineElement();\n }\n return this.currentInline instanceof EmptyInlineElement_1.default ? null : this.currentInline;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Get next inline element\n */\n ContentTraverser.prototype.getNextInlineElement = function () {\n return this.getPreviousNextInlineElement(true /*isNext*/);\n };\n /**\n * Get previous inline element\n */\n ContentTraverser.prototype.getPreviousInlineElement = function () {\n return this.getPreviousNextInlineElement(false /*isNext*/);\n };\n ContentTraverser.prototype.getPreviousNextInlineElement = function (isNext) {\n var current = this.currentInlineElement || this.currentInline;\n var newInline;\n if (!current) {\n return null;\n }\n if (current instanceof EmptyInlineElement_1.default) {\n newInline = (0, getInlineElementBeforeAfter_1.getInlineElementBeforeAfter)(this.scoper.rootNode, current.getStartPosition(), isNext);\n if (newInline && !current.getParentBlock().contains(newInline.getContainerNode())) {\n newInline = null;\n }\n }\n else {\n newInline = getNextPreviousInlineElement(this.scoper.rootNode, current, isNext);\n newInline =\n newInline &&\n current &&\n ((isNext && newInline.isAfter(current)) || (!isNext && current.isAfter(newInline)))\n ? newInline\n : null;\n }\n // For inline, we need to make sure:\n // 1) it is really next/previous to current\n // 2) pass on the new inline to this.scoper to do the trimming and we still get back an inline\n // Then\n // 1) re-position current inline\n if (newInline && (newInline = this.scoper.trimInlineElement(newInline))) {\n this.currentInline = newInline;\n return this.currentInline;\n }\n return null;\n };\n return ContentTraverser;\n}());\nexports.default = ContentTraverser;\nfunction getNextPreviousInlineElement(rootNode, current, isNext) {\n if (!current) {\n return null;\n }\n if (current instanceof PartialInlineElement_1.default) {\n // if current is partial, get the other half of the inline unless it is no more\n var result = isNext ? current.nextInlineElement : current.previousInlineElement;\n if (result) {\n return result;\n }\n }\n // Get a leaf node after startNode and use that base to find next inline\n var startNode = current.getContainerNode();\n startNode = (0, getLeafSibling_1.getLeafSibling)(rootNode, startNode, isNext);\n return (0, getInlineElementAtNode_1.default)(rootNode, startNode);\n}\n//# sourceMappingURL=ContentTraverser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.setContent = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * Set HTML content to this editor. All existing content will be replaced. A ContentChanged event will be triggered\n * if triggerContentChangedEvent is set to true\n * @param core The EditorCore object\n * @param content HTML content to set in\n * @param triggerContentChangedEvent True to trigger a ContentChanged event. Default value is true\n */\nvar setContent = function (core, content, triggerContentChangedEvent) {\n var contentChanged = false;\n if (core.contentDiv.innerHTML != content) {\n core.api.triggerEvent(core, {\n eventType: 20 /* BeforeSetContent */,\n newContent: content,\n }, true /*broadcast*/);\n var range = (0, roosterjs_editor_dom_1.setHtmlWithSelectionPath)(core.contentDiv, content, core.trustedHTMLHandler);\n core.api.selectRange(core, range);\n contentChanged = true;\n }\n // Convert content even if it hasn't changed.\n core.api.transformColor(core, core.contentDiv, false /*includeSelf*/, null /*callback*/, 0 /* LightToDark */);\n if (triggerContentChangedEvent && (contentChanged || core.lifecycle.isDarkMode)) {\n core.api.triggerEvent(core, {\n eventType: 7 /* ContentChanged */,\n source: \"SetContent\" /* SetContent */,\n }, false /*broadcast*/);\n }\n};\nexports.setContent = setContent;\n//# sourceMappingURL=setContent.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar getTargetSizeByPercentage_1 = require(\"../editInfoUtils/getTargetSizeByPercentage\");\nvar editInfo_1 = require(\"../editInfoUtils/editInfo\");\n/**\n * Check if the image is already resized to the given percentage\n * @param image The image to check\n * @param percentage The percentage to check\n */\nfunction isResizedTo(image, percentage) {\n var editInfo = (0, editInfo_1.getEditInfoFromImage)(image);\n var _a = (0, getTargetSizeByPercentage_1.default)(editInfo, percentage), width = _a.width, height = _a.height;\n return (Math.round(width) == Math.round(editInfo.widthPx) &&\n Math.round(height) == Math.round(editInfo.heightPx));\n}\nexports.default = isResizedTo;\n//# sourceMappingURL=isResizedTo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar getTagOfNode_1 = require(\"../utils/getTagOfNode\");\nvar Position_1 = require(\"../selection/Position\");\nvar splitTextNode_1 = require(\"../utils/splitTextNode\");\nvar wrap_1 = require(\"../utils/wrap\");\nvar getLeafSibling_1 = require(\"../utils/getLeafSibling\");\nvar splitParentNode_1 = require(\"../utils/splitParentNode\");\nvar STYLET_AGS = 'SPAN,B,I,U,EM,STRONG,STRIKE,S,SMALL'.split(',');\n/**\n * Apply style using a styler function to the given container node in the given range\n * @param container The container node to apply style to\n * @param styler The styler function\n * @param from From position\n * @param to To position\n */\nfunction applyTextStyle(container, styler, from, to) {\n if (from === void 0) { from = new Position_1.default(container, 0 /* Begin */).normalize(); }\n if (to === void 0) { to = new Position_1.default(container, -1 /* End */).normalize(); }\n var formatNodes = [];\n while (from && to && to.isAfter(from)) {\n var formatNode = from.node;\n var parentTag = (0, getTagOfNode_1.default)(formatNode.parentNode);\n // The code below modifies DOM. Need to get the next sibling first otherwise you won't be able to reliably get a good next sibling node\n var nextNode = (0, getLeafSibling_1.getNextLeafSibling)(container, formatNode);\n if (formatNode.nodeType == 3 /* Text */ && ['TR', 'TABLE'].indexOf(parentTag) < 0) {\n if (formatNode == to.node && !to.isAtEnd) {\n formatNode = (0, splitTextNode_1.default)(formatNode, to.offset, true /*returnFirstPart*/);\n }\n if (from.offset > 0) {\n formatNode = (0, splitTextNode_1.default)(formatNode, from.offset, false /*returnFirstPart*/);\n }\n formatNodes.push(formatNode);\n }\n from = nextNode && new Position_1.default(nextNode, 0 /* Begin */);\n }\n if (formatNodes.length > 0) {\n if (formatNodes.every(function (node) { return node.parentNode == formatNodes[0].parentNode; })) {\n var newNode_1 = formatNodes.shift();\n formatNodes.forEach(function (node) {\n newNode_1.nodeValue += node.nodeValue;\n node.parentNode.removeChild(node);\n });\n formatNodes = [newNode_1];\n }\n formatNodes.forEach(function (node) {\n // When apply style within style tags like B/I/U/..., we split the tag and apply outside them\n // So that the inner style tag such as U, STRIKE can inherit the style we added\n while ((0, getTagOfNode_1.default)(node) != 'SPAN' &&\n STYLET_AGS.indexOf((0, getTagOfNode_1.default)(node.parentNode)) >= 0) {\n callStylerWithInnerNode(node, styler);\n node = (0, splitParentNode_1.splitBalancedNodeRange)(node);\n }\n if ((0, getTagOfNode_1.default)(node) != 'SPAN') {\n callStylerWithInnerNode(node, styler);\n node = (0, wrap_1.default)(node, 'SPAN');\n }\n styler(node);\n });\n }\n}\nexports.default = applyTextStyle;\nfunction callStylerWithInnerNode(node, styler) {\n if (node && node.nodeType == 1 /* Element */) {\n styler(node, true /*isInnerNode*/);\n }\n}\n//# sourceMappingURL=applyTextStyle.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ContentPosition = void 0;\n/**\n * The position. Mostly used for content insertion and traversing\n * On insertion, we will need to specify where we want the content to be placed (begin, end, selection or outside)\n * On content traversing, we will need to specify the start position of traversing\n */\nvar ContentPosition;\n(function (ContentPosition) {\n /**\n * Begin of the container\n */\n ContentPosition[ContentPosition[\"Begin\"] = 0] = \"Begin\";\n /**\n * End of the container\n */\n ContentPosition[ContentPosition[\"End\"] = 1] = \"End\";\n /**\n * End of the content div domain.\n */\n ContentPosition[ContentPosition[\"DomEnd\"] = 2] = \"DomEnd\";\n /**\n * Selection start\n */\n ContentPosition[ContentPosition[\"SelectionStart\"] = 3] = \"SelectionStart\";\n /**\n * Outside of editor\n */\n ContentPosition[ContentPosition[\"Outside\"] = 4] = \"Outside\";\n /**\n * Manually defined range\n */\n ContentPosition[ContentPosition[\"Range\"] = 5] = \"Range\";\n})(ContentPosition = exports.ContentPosition || (exports.ContentPosition = {}));\n//# sourceMappingURL=ContentPosition.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar contains_1 = require(\"../utils/contains\");\nvar getTagOfNode_1 = require(\"../utils/getTagOfNode\");\nvar isNodeEmpty_1 = require(\"../utils/isNodeEmpty\");\n/**\n * Check if this position is at beginning of the given node.\n * This will return true if all nodes between the beginning of target node and the position are empty.\n * @param position The position to check\n * @param targetNode The node to check\n * @returns True if position is at beginning of the node, otherwise false\n */\nfunction isPositionAtBeginningOf(position, targetNode) {\n if (position) {\n position = position.normalize();\n var node = position.node;\n var offset = position.offset;\n if (offset == 0) {\n while (node && (0, contains_1.default)(targetNode, node) && areAllPreviousNodesEmpty(node)) {\n node = (node === null || node === void 0 ? void 0 : node.parentNode) || null;\n }\n return node == targetNode;\n }\n }\n return false;\n}\nexports.default = isPositionAtBeginningOf;\nfunction areAllPreviousNodesEmpty(node) {\n while (node.previousSibling) {\n node = node.previousSibling;\n if ((0, getTagOfNode_1.default)(node) == 'BR' || !(0, isNodeEmpty_1.default)(node)) {\n return false;\n }\n }\n return true;\n}\n//# sourceMappingURL=isPositionAtBeginningOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar createElement_1 = require(\"./createElement\");\nvar fromHtml_1 = require(\"./fromHtml\");\nvar safeInstanceOf_1 = require(\"./safeInstanceOf\");\nfunction wrap(nodes, wrapper) {\n nodes = !nodes ? [] : (0, safeInstanceOf_1.default)(nodes, 'Node') ? [nodes] : nodes;\n if (nodes.length == 0 || !nodes[0] || !nodes[0].ownerDocument) {\n return null;\n }\n if (!wrapper) {\n wrapper = 'div';\n }\n if (!(0, safeInstanceOf_1.default)(wrapper, 'HTMLElement')) {\n var document_1 = nodes[0].ownerDocument;\n if (typeof wrapper === 'string') {\n wrapper = /^\\w+$/.test(wrapper)\n ? document_1.createElement(wrapper)\n : (0, fromHtml_1.default)(wrapper, document_1)[0]; // This will be removed in next major release\n }\n else {\n wrapper = (0, createElement_1.default)(wrapper, document_1);\n }\n }\n var parentNode = nodes[0].parentNode;\n if (parentNode) {\n parentNode.insertBefore(wrapper, nodes[0]);\n }\n for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {\n var node = nodes_1[_i];\n wrapper.appendChild(node);\n }\n return wrapper;\n}\nexports.default = wrap;\n//# sourceMappingURL=wrap.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar TableEditor_1 = require(\"./editors/TableEditor\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar TABLE_RESIZER_LENGTH = 12;\n/**\n * TableResize plugin, provides the ability to resize a table by drag-and-drop\n */\nvar TableResize = /** @class */ (function () {\n function TableResize() {\n var _this = this;\n this.tableRectMap = null;\n this.onMouseMove = function (e) {\n var _a;\n if (e.buttons > 0) {\n return;\n }\n _this.ensureTableRects();\n var editorWindow = _this.editor.getDocument().defaultView;\n var x = e.pageX - editorWindow.scrollX;\n var y = e.pageY - editorWindow.scrollY;\n var currentTable = null;\n for (var i = _this.tableRectMap.length - 1; i >= 0; i--) {\n var _b = _this.tableRectMap[i], table = _b.table, rect = _b.rect;\n if (x >= rect.left - TABLE_RESIZER_LENGTH &&\n x <= rect.right + TABLE_RESIZER_LENGTH &&\n y >= rect.top - TABLE_RESIZER_LENGTH &&\n y <= rect.bottom + TABLE_RESIZER_LENGTH) {\n currentTable = table;\n break;\n }\n }\n _this.setTableEditor(currentTable);\n (_a = _this.tableEditor) === null || _a === void 0 ? void 0 : _a.onMouseMove(x, y);\n };\n this.invalidateTableRects = function () {\n _this.tableRectMap = null;\n };\n }\n /**\n * Get a friendly name of this plugin\n */\n TableResize.prototype.getName = function () {\n return 'TableResize';\n };\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n TableResize.prototype.initialize = function (editor) {\n this.editor = editor;\n this.onMouseMoveDisposer = this.editor.addDomEventHandler({ mousemove: this.onMouseMove });\n };\n /**\n * Dispose this plugin\n */\n TableResize.prototype.dispose = function () {\n this.onMouseMoveDisposer();\n this.invalidateTableRects();\n this.setTableEditor(null);\n this.editor = null;\n };\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n TableResize.prototype.onPluginEvent = function (e) {\n switch (e.eventType) {\n case 3 /* Input */:\n case 7 /* ContentChanged */:\n case 14 /* Scroll */:\n case 21 /* ZoomChanged */:\n this.setTableEditor(null);\n this.invalidateTableRects();\n break;\n }\n };\n TableResize.prototype.setTableEditor = function (table) {\n if (this.tableEditor && table != this.tableEditor.table) {\n this.tableEditor.dispose();\n this.tableEditor = null;\n }\n if (!this.tableEditor && table) {\n this.tableEditor = new TableEditor_1.default(this.editor, table, this.invalidateTableRects);\n }\n };\n TableResize.prototype.ensureTableRects = function () {\n var _this = this;\n if (!this.tableRectMap) {\n this.tableRectMap = [];\n this.editor.queryElements('table', function (table) {\n if (table.isContentEditable) {\n var rect = (0, roosterjs_editor_dom_1.normalizeRect)(table.getBoundingClientRect());\n if (rect) {\n _this.tableRectMap.push({\n table: table,\n rect: rect,\n });\n }\n }\n });\n }\n };\n return TableResize;\n}());\nexports.default = TableResize;\n//# sourceMappingURL=TableResize.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.attachDomEvent = void 0;\n/**\n * @internal\n * Attach a DOM event to the editor content DIV\n * @param core The EditorCore object\n * @param eventName The DOM event name\n * @param pluginEventType Optional event type. When specified, editor will trigger a plugin event with this name when the DOM event is triggered\n * @param beforeDispatch Optional callback function to be invoked when the DOM event is triggered before trigger plugin event\n */\nvar attachDomEvent = function (core, eventMap) {\n var disposers = Object.keys(eventMap || {}).map(function (eventName) {\n var _a = extractHandler(eventMap[eventName]), pluginEventType = _a.pluginEventType, beforeDispatch = _a.beforeDispatch;\n var onEvent = function (event) {\n if (beforeDispatch) {\n beforeDispatch(event);\n }\n if (pluginEventType != null) {\n core.api.triggerEvent(core, {\n eventType: pluginEventType,\n rawEvent: event,\n }, false /*broadcast*/);\n }\n };\n core.contentDiv.addEventListener(eventName, onEvent);\n return function () {\n core.contentDiv.removeEventListener(eventName, onEvent);\n };\n });\n return function () { return disposers.forEach(function (disposers) { return disposers(); }); };\n};\nexports.attachDomEvent = attachDomEvent;\nfunction extractHandler(handlerObj) {\n var result = {\n pluginEventType: null,\n beforeDispatch: null,\n };\n if (typeof handlerObj === 'number') {\n result.pluginEventType = handlerObj;\n }\n else if (typeof handlerObj === 'function') {\n result.beforeDispatch = handlerObj;\n }\n else if (typeof handlerObj === 'object') {\n result = handlerObj;\n }\n return result;\n}\n//# sourceMappingURL=attachDomEvent.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar getTagOfNode_1 = require(\"./getTagOfNode\");\nvar VISIBLE_ELEMENT_TAGS = ['IMG'];\nvar VISIBLE_CHILD_ELEMENT_SELECTOR = ['TABLE', 'IMG', 'LI'].join(',');\nvar ZERO_WIDTH_SPACE = /\\u200b/g;\n/**\n * Check if a given node has no visible content\n * @param node The node to check\n * @param trimContent Whether trim the text content so that spaces will be treated as empty.\n * Default value is false\n * @returns True if there isn't any visible element inside node, otherwise false\n */\nfunction isNodeEmpty(node, trimContent) {\n if (!node) {\n return false;\n }\n else if (node.nodeType == 3 /* Text */) {\n return trim(node.nodeValue || '', trimContent) == '';\n }\n else if (node.nodeType == 1 /* Element */) {\n var element = node;\n var textContent = trim(element.textContent || '', trimContent);\n if (textContent != '' ||\n VISIBLE_ELEMENT_TAGS.indexOf((0, getTagOfNode_1.default)(element)) >= 0 ||\n element.querySelectorAll(VISIBLE_CHILD_ELEMENT_SELECTOR)[0]) {\n return false;\n }\n }\n return true;\n}\nexports.default = isNodeEmpty;\nfunction trim(s, trim) {\n s = s.replace(ZERO_WIDTH_SPACE, '');\n return trim ? s.trim() : s;\n}\n//# sourceMappingURL=isNodeEmpty.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RegionType = void 0;\n/**\n * Type of all possible regions. Currently we only support region of Table\n */\nvar RegionType;\n(function (RegionType) {\n /**\n * Region split by Table\n */\n RegionType[RegionType[\"Table\"] = 0] = \"Table\";\n})(RegionType = exports.RegionType || (exports.RegionType = {}));\n//# sourceMappingURL=RegionType.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar contains_1 = require(\"../utils/contains\");\nvar Position_1 = require(\"./Position\");\n/**\n * Get path of the given selection range related to the given rootNode\n * @param rootNode The root node where the path start from\n * @param range The range of selection\n */\nfunction getSelectionPath(rootNode, range) {\n if (!range) {\n return null;\n }\n var selectionPath = {\n start: getPositionPath(Position_1.default.getStart(range), rootNode),\n end: getPositionPath(Position_1.default.getEnd(range), rootNode),\n };\n return selectionPath;\n}\nexports.default = getSelectionPath;\n/**\n * Get the path of the node relative to rootNode.\n * The path of the node is an array of integer indices into the childNodes of the given node.\n *\n * The node path will be what the node path will be on a _normalized_ dom\n * (e.g. empty text nodes will be ignored and adjacent text nodes will be concatenated)\n *\n * @param rootNode the node the path will be relative to\n * @param position the position to get indexes from. Follows the same semantics\n * as selectionRange (if node is of type Text, it is an offset into the text of that node.\n * If node is of type Element, it is the index of a child in that Element node.)\n */\nfunction getPositionPath(position, rootNode) {\n var _a, _b;\n if (!position || !rootNode) {\n return [];\n }\n var node = position.node;\n var offset = position.offset;\n var result = [];\n var parent;\n if (!(0, contains_1.default)(rootNode, node, true)) {\n return [];\n }\n if (node.nodeType == 3 /* Text */) {\n parent = node.parentNode;\n while (node.previousSibling && node.previousSibling.nodeType == 3 /* Text */) {\n offset += ((_a = node.previousSibling.nodeValue) === null || _a === void 0 ? void 0 : _a.length) || 0;\n node = node.previousSibling;\n }\n result.unshift(offset);\n }\n else {\n parent = node;\n node = node.childNodes[offset];\n }\n do {\n offset = 0;\n var isPreviousText = false;\n for (var c = (parent === null || parent === void 0 ? void 0 : parent.firstChild) || null; c && c != node; c = c.nextSibling) {\n if (c.nodeType == 3 /* Text */) {\n if (((_b = c.nodeValue) === null || _b === void 0 ? void 0 : _b.length) === 0 || isPreviousText) {\n continue;\n }\n isPreviousText = true;\n }\n else {\n isPreviousText = false;\n }\n offset++;\n }\n result.unshift(offset);\n node = parent;\n parent = (parent === null || parent === void 0 ? void 0 : parent.parentNode) || null;\n } while (node && node != rootNode);\n return result;\n}\n//# sourceMappingURL=getSelectionPath.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar getTagOfNode_1 = require(\"./getTagOfNode\");\nvar getComputedStyles_1 = require(\"./getComputedStyles\");\nvar CRLF = /^[\\r\\n]+$/gm;\nvar CRLF_SPACE = /[\\t\\r\\n\\u0020\\u200B]/gm; // We should only find new line, real space or ZeroWidthSpace (TAB, %20, but not  )\n/**\n * @internal\n * Skip a node when any of following conditions are true\n * - it is neither Element nor Text\n * - it is a text node but is empty\n * - it is a text node but contains just CRLF (noisy text node that often comes in-between elements)\n * - has a display:none\n * - it is just
              \n * @param node The node to check\n * @param ignoreSpace (Optional) True to ignore pure space text node of the node when check.\n * If the value of a node value is only space, set this to true will treat this node can be skipped.\n * Default value is false\n */\nfunction shouldSkipNode(node, ignoreSpace) {\n if (node.nodeType == 3 /* Text */) {\n if (!node.nodeValue || node.textContent == '' || CRLF.test(node.nodeValue)) {\n return true;\n }\n else if (ignoreSpace && node.nodeValue.replace(CRLF_SPACE, '') == '') {\n return true;\n }\n else {\n return false;\n }\n }\n else if (node.nodeType == 1 /* Element */) {\n if ((0, getComputedStyles_1.getComputedStyle)(node, 'display') == 'none') {\n return true;\n }\n var tag = (0, getTagOfNode_1.default)(node);\n if (tag == 'DIV' || tag == 'SPAN') {\n // Empty SPAN/DIV or SPAN/DIV with only meaningless children is meaningless,\n // because it can render nothing. If we keep them here, there may be unexpected\n // LI elements added for those meaningless nodes.\n for (var child = node.firstChild; !!child; child = child.nextSibling) {\n if (!shouldSkipNode(child, ignoreSpace)) {\n return false;\n }\n }\n return true;\n }\n else {\n // There may still be other cases that the node is not meaningful.\n // We can add those cases here once we hit them.\n return false;\n }\n }\n else {\n return true;\n }\n}\nexports.default = shouldSkipNode;\n//# sourceMappingURL=shouldSkipNode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * An editor plugin that support showing a context menu using render() function from options parameter\n */\nvar ContextMenu = /** @class */ (function () {\n /**\n * Create a new instance of ContextMenu class\n * @param options An options object to determine how to show/hide the context menu\n */\n function ContextMenu(options) {\n var _this = this;\n this.options = options;\n this.onDismiss = function () {\n var _a, _b;\n if (_this.container && _this.isMenuShowing) {\n (_b = (_a = _this.options).dismiss) === null || _b === void 0 ? void 0 : _b.call(_a, _this.container);\n _this.isMenuShowing = false;\n }\n };\n }\n /**\n * Get a friendly name of this plugin\n */\n ContextMenu.prototype.getName = function () {\n return 'ContextMenu';\n };\n /**\n * Initialize this plugin\n * @param editor The editor instance\n */\n ContextMenu.prototype.initialize = function (editor) {\n this.editor = editor;\n };\n /**\n * Dispose this plugin\n */\n ContextMenu.prototype.dispose = function () {\n this.onDismiss();\n if (this.container) {\n this.container.parentNode.removeChild(this.container);\n this.container = null;\n }\n this.editor = null;\n };\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n ContextMenu.prototype.onPluginEvent = function (event) {\n if (event.eventType == 16 /* ContextMenu */ && event.items.length > 0) {\n var rawEvent = event.rawEvent, items = event.items;\n this.onDismiss();\n if (!this.options.allowDefaultMenu) {\n rawEvent.preventDefault();\n }\n this.initContainer(rawEvent.pageX, rawEvent.pageY);\n this.options.render(this.container, items, this.onDismiss);\n this.isMenuShowing = true;\n }\n };\n ContextMenu.prototype.initContainer = function (x, y) {\n if (!this.container) {\n this.container = (0, roosterjs_editor_dom_1.createElement)(5 /* ContextMenuWrapper */, this.editor.getDocument());\n this.editor.getDocument().body.appendChild(this.container);\n }\n this.container.style.left = x + 'px';\n this.container.style.top = y + 'px';\n };\n return ContextMenu;\n}());\nexports.default = ContextMenu;\n//# sourceMappingURL=ContextMenu.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar getTagOfNode_1 = require(\"../utils/getTagOfNode\");\nvar PREDEFINED_CSS_FOR_ELEMENT = {\n B: {\n 'font-weight': 'bold',\n },\n EM: {\n 'font-style': 'italic',\n },\n I: {\n 'font-style': 'italic',\n },\n U: {\n 'text-decoration': 'underline',\n },\n P: {\n 'margin-top': '1em',\n 'margin-bottom': '1em',\n },\n PRE: {\n 'white-space': 'pre',\n },\n S: {\n 'text-decoration': 'line-through',\n },\n STRIKE: {\n 'text-decoration': 'line-through',\n },\n SUB: {\n 'vertical-align': 'sub',\n 'font-size': 'smaller',\n },\n SUP: {\n 'vertical-align': 'super',\n 'font-size': 'smaller',\n },\n};\n/**\n * @internal\n * Get a map for browser built-in CSS definitions of elements\n */\nfunction getPredefinedCssForElement(element, additionalPredefinedCssForElement) {\n var tag = (0, getTagOfNode_1.default)(element);\n return PREDEFINED_CSS_FOR_ELEMENT[tag] || (additionalPredefinedCssForElement || {})[tag];\n}\nexports.default = getPredefinedCssForElement;\n//# sourceMappingURL=getPredefinedCssForElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar getTagOfNode_1 = require(\"./getTagOfNode\");\n/**\n * HTML void elements\n * Per https://www.w3.org/TR/html/syntax.html#syntax-elements, cannot have child nodes\n * This regex is used when we move focus to very begin of editor. We should avoid putting focus inside\n * void elements so users don't accidentally create child nodes in them\n */\nvar HTML_VOID_ELEMENTS = 'AREA,BASE,BR,COL,COMMAND,EMBED,HR,IMG,INPUT,KEYGEN,LINK,META,PARAM,SOURCE,TRACK,WBR'.split(',');\n/**\n * Check if the given node is html void element. Void element cannot have children\n * @param node The node to check\n */\nfunction isVoidHtmlElement(node) {\n return !!node && HTML_VOID_ELEMENTS.indexOf((0, getTagOfNode_1.default)(node)) >= 0;\n}\nexports.default = isVoidHtmlElement;\n//# sourceMappingURL=isVoidHtmlElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar DragAndDropHelper_1 = require(\"../../../pluginUtils/DragAndDropHelper\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar TABLE_SELECTOR_LENGTH = 12;\nvar TABLE_SELECTOR_ID = '_Table_Selector';\n/**\n * @internal\n */\nfunction createTableSelector(table, zoomScale, onFinishDragging) {\n var document = table.ownerDocument;\n var div = (0, roosterjs_editor_dom_1.createElement)(11 /* TableSelector */, document);\n div.id = TABLE_SELECTOR_ID;\n div.style.width = TABLE_SELECTOR_LENGTH + \"px\";\n div.style.height = TABLE_SELECTOR_LENGTH + \"px\";\n document.body.appendChild(div);\n var context = {\n table: table,\n zoomScale: zoomScale,\n };\n setSelectorDivPosition(context, div);\n var onDragEnd = function (context, event) {\n if (event.target == div) {\n onFinishDragging(context.table);\n }\n return false;\n };\n var featureHandler = new DragAndDropHelper_1.default(div, context, setSelectorDivPosition, {\n onDragEnd: onDragEnd,\n }, zoomScale);\n return { div: div, featureHandler: featureHandler, node: table };\n}\nexports.default = createTableSelector;\nfunction setSelectorDivPosition(context, trigger) {\n var table = context.table;\n var rect = (0, roosterjs_editor_dom_1.normalizeRect)(table.getBoundingClientRect());\n if (rect) {\n trigger.style.top = rect.top - TABLE_SELECTOR_LENGTH + \"px\";\n trigger.style.left = rect.left - TABLE_SELECTOR_LENGTH - 2 + \"px\";\n }\n}\n//# sourceMappingURL=TableSelector.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ChangeSource = void 0;\n/**\n * Possible change sources. Here are the predefined sources.\n * It can also be other string if the change source can't fall into these sources.\n */\nvar ChangeSource;\n(function (ChangeSource) {\n /**\n * Content changed by auto link\n */\n ChangeSource[\"AutoLink\"] = \"AutoLink\";\n /**\n * Content changed by create link\n */\n ChangeSource[\"CreateLink\"] = \"CreateLink\";\n /**\n * Content changed by format\n */\n ChangeSource[\"Format\"] = \"Format\";\n /**\n * Content changed by image resize\n */\n ChangeSource[\"ImageResize\"] = \"ImageResize\";\n /**\n * Content changed by paste\n */\n ChangeSource[\"Paste\"] = \"Paste\";\n /**\n * Content changed by setContent API\n */\n ChangeSource[\"SetContent\"] = \"SetContent\";\n /**\n * Content changed by cut operation\n */\n ChangeSource[\"Cut\"] = \"Cut\";\n /**\n * Content changed by drag & drop operation\n */\n ChangeSource[\"Drop\"] = \"Drop\";\n /**\n * Insert a new entity into editor\n */\n ChangeSource[\"InsertEntity\"] = \"InsertEntity\";\n /**\n * Editor is switched to dark mode, content color is changed\n */\n ChangeSource[\"SwitchToDarkMode\"] = \"SwitchToDarkMode\";\n /**\n * Editor is switched to light mode, content color is changed\n */\n ChangeSource[\"SwitchToLightMode\"] = \"SwitchToLightMode\";\n /**\n * List chain reorganized numbers of lists\n */\n ChangeSource[\"ListChain\"] = \"ListChain\";\n})(ChangeSource = exports.ChangeSource || (exports.ChangeSource = {}));\n//# sourceMappingURL=ChangeSource.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar getGeneratedImageSize_1 = require(\"./getGeneratedImageSize\");\n/**\n * @internal\n * Generate new dataURL from an image and edit info\n * @param image The image to generate data URL from. It is supposed to have original src loaded\n * @param editInfo Edit info of the image\n * @returns A BASE64 encoded string with image prefix that represents the content of the generated image.\n * If there are rotate/crop/resize info in the edit info, the generated image will also reflect the result.\n * It is possible to throw exception since the original image may not be able to read its content from\n * the code, so better check canRegenerateImage() of the image first.\n * @throws Exception when fail to generate dataURL from canvas\n */\nfunction generateDataURL(image, editInfo) {\n var angle = editInfo.angleRad, width = editInfo.widthPx, height = editInfo.heightPx, bottom = editInfo.bottomPercent, left = editInfo.leftPercent, right = editInfo.rightPercent, top = editInfo.topPercent, naturalWidth = editInfo.naturalWidth, naturalHeight = editInfo.naturalHeight;\n var imageWidth = naturalWidth * (1 - left - right);\n var imageHeight = naturalHeight * (1 - top - bottom);\n var canvas = document.createElement('canvas');\n var _a = (0, getGeneratedImageSize_1.default)(editInfo), targetWidth = _a.targetWidth, targetHeight = _a.targetHeight;\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n var context = canvas.getContext('2d');\n context.translate(targetWidth / 2, targetHeight / 2);\n context.rotate(angle);\n context.drawImage(image, naturalWidth * left, naturalHeight * top, imageWidth, imageHeight, -width / 2, -height / 2, width, height);\n return canvas.toDataURL('image/png', 1.0);\n}\nexports.default = generateDataURL;\n//# sourceMappingURL=generateDataURL.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar safeInstanceOf_1 = require(\"./safeInstanceOf\");\n/**\n * A wrapper function of Element.matches\n * @param element The element to match\n * @param selector The selector to match\n */\nfunction matchesSelector(element, selector) {\n return ((0, safeInstanceOf_1.default)(element, 'HTMLElement') &&\n (element.matches || element.msMatchesSelector).call(element, selector));\n}\nexports.default = matchesSelector;\n//# sourceMappingURL=matchesSelector.js.map","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n// Max stack size that cannot be exceeded. When exceeded, old undo history will be dropped\n// to keep size under limit. This is kept at 10MB\nvar MAX_SIZE_LIMIT = 1e7;\n/**\n * @internal\n * Provides snapshot based undo service for Editor\n */\nvar UndoPlugin = /** @class */ (function () {\n /**\n * Construct a new instance of UndoPlugin\n * @param options The wrapper of the state object\n */\n function UndoPlugin(options) {\n this.state = {\n snapshotsService: options.undoSnapshotService || createUndoSnapshots(),\n isRestoring: false,\n hasNewContent: false,\n isNested: false,\n autoCompletePosition: null,\n };\n }\n /**\n * Get a friendly name of this plugin\n */\n UndoPlugin.prototype.getName = function () {\n return 'Undo';\n };\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n UndoPlugin.prototype.initialize = function (editor) {\n this.editor = editor;\n };\n /**\n * Dispose this plugin\n */\n UndoPlugin.prototype.dispose = function () {\n this.editor = null;\n };\n /**\n * Get plugin state object\n */\n UndoPlugin.prototype.getState = function () {\n return this.state;\n };\n /**\n * Check if the plugin should handle the given event exclusively.\n * @param event The event to check\n */\n UndoPlugin.prototype.willHandleEventExclusively = function (event) {\n return (event.eventType == 0 /* KeyDown */ &&\n event.rawEvent.which == 8 /* BACKSPACE */ &&\n this.canUndoAutoComplete());\n };\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n UndoPlugin.prototype.onPluginEvent = function (event) {\n // if editor is in IME, don't do anything\n if (!this.editor || this.editor.isInIME()) {\n return;\n }\n switch (event.eventType) {\n case 11 /* EditorReady */:\n var undoState = this.editor.getUndoState();\n if (!undoState.canUndo && !undoState.canRedo) {\n // Only add initial snapshot when there is no existing snapshot\n // Otherwise preserved undo/redo state may be ruined\n this.addUndoSnapshot();\n }\n break;\n case 0 /* KeyDown */:\n this.onKeyDown(event.rawEvent);\n break;\n case 1 /* KeyPress */:\n this.onKeyPress(event.rawEvent);\n break;\n case 4 /* CompositionEnd */:\n this.clearRedoForInput();\n this.addUndoSnapshot();\n break;\n case 7 /* ContentChanged */:\n if (!this.state.isRestoring) {\n this.clearRedoForInput();\n }\n break;\n }\n };\n UndoPlugin.prototype.onKeyDown = function (evt) {\n // Handle backspace/delete when there is a selection to take a snapshot\n // since we want the state prior to deletion restorable\n if (evt.which == 8 /* BACKSPACE */ || evt.which == 46 /* DELETE */) {\n if (evt.which == 8 /* BACKSPACE */ && this.canUndoAutoComplete()) {\n evt.preventDefault();\n this.editor.undo();\n this.state.autoCompletePosition = null;\n this.lastKeyPress = evt.which;\n }\n else {\n var selectionRange = this.editor.getSelectionRange();\n // Add snapshot when\n // 1. Something has been selected (not collapsed), or\n // 2. It has a different key code from the last keyDown event (to prevent adding too many snapshot when keeping press the same key), or\n // 3. Ctrl/Meta key is pressed so that a whole word will be deleted\n if (selectionRange &&\n (!selectionRange.collapsed ||\n this.lastKeyPress != evt.which ||\n (0, roosterjs_editor_dom_1.isCtrlOrMetaPressed)(evt))) {\n this.addUndoSnapshot();\n }\n // Since some content is deleted, always set hasNewContent to true so that we will take undo snapshot next time\n this.state.hasNewContent = true;\n this.lastKeyPress = evt.which;\n }\n }\n else if (evt.which >= 33 /* PAGEUP */ && evt.which <= 40 /* DOWN */) {\n // PageUp, PageDown, Home, End, Left, Right, Up, Down\n if (this.state.hasNewContent) {\n this.addUndoSnapshot();\n }\n this.lastKeyPress = 0;\n }\n };\n UndoPlugin.prototype.onKeyPress = function (evt) {\n if (evt.metaKey) {\n // if metaKey is pressed, simply return since no actual effect will be taken on the editor.\n // this is to prevent changing hasNewContent to true when meta + v to paste on Safari.\n return;\n }\n var range = this.editor.getSelectionRange();\n if ((range && !range.collapsed) ||\n (evt.which == 32 /* SPACE */ && this.lastKeyPress != 32 /* SPACE */) ||\n evt.which == 13 /* ENTER */) {\n this.addUndoSnapshot();\n if (evt.which == 13 /* ENTER */) {\n // Treat ENTER as new content so if there is no input after ENTER and undo,\n // we restore the snapshot before ENTER\n this.state.hasNewContent = true;\n }\n }\n else {\n this.clearRedoForInput();\n }\n this.lastKeyPress = evt.which;\n };\n UndoPlugin.prototype.clearRedoForInput = function () {\n this.state.snapshotsService.clearRedo();\n this.lastKeyPress = 0;\n this.state.hasNewContent = true;\n };\n UndoPlugin.prototype.canUndoAutoComplete = function () {\n var _a;\n return (this.state.snapshotsService.canUndoAutoComplete() &&\n ((_a = this.state.autoCompletePosition) === null || _a === void 0 ? void 0 : _a.equalTo(this.editor.getFocusedPosition())));\n };\n UndoPlugin.prototype.addUndoSnapshot = function () {\n this.editor.addUndoSnapshot();\n this.state.autoCompletePosition = null;\n };\n return UndoPlugin;\n}());\nexports.default = UndoPlugin;\nfunction createUndoSnapshots() {\n var snapshots = (0, roosterjs_editor_dom_1.createSnapshots)(MAX_SIZE_LIMIT);\n return {\n canMove: function (delta) { return (0, roosterjs_editor_dom_1.canMoveCurrentSnapshot)(snapshots, delta); },\n move: function (delta) { return (0, roosterjs_editor_dom_1.moveCurrentSnapshot)(snapshots, delta); },\n addSnapshot: function (snapshot, isAutoCompleteSnapshot) {\n return (0, roosterjs_editor_dom_1.addSnapshot)(snapshots, snapshot, isAutoCompleteSnapshot);\n },\n clearRedo: function () { return (0, roosterjs_editor_dom_1.clearProceedingSnapshots)(snapshots); },\n canUndoAutoComplete: function () { return (0, roosterjs_editor_dom_1.canUndoAutoComplete)(snapshots); },\n };\n}\n//# sourceMappingURL=UndoPlugin.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar CellResizer_1 = require(\"./CellResizer\");\nvar TableInserter_1 = require(\"./TableInserter\");\nvar TableResizer_1 = require(\"./TableResizer\");\nvar TableSelector_1 = require(\"./TableSelector\");\nvar TableEditorFeature_1 = require(\"./TableEditorFeature\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar INSERTER_HOVER_OFFSET = 5;\n/**\n * @internal\n *\n * A table has 5 hot areas to be resized/edited (take LTR example):\n *\n * [6] [ ]\n * +[ 1 ]+--------------------+\n * |[ ]| |\n * [ ] [ ] |\n * [ ] [ ] |\n * [2] [3] |\n * [ ] [ ] |\n * [ ][ 4 ]| |\n * +------------------+--------------------+\n * | | |\n * | | |\n * | | |\n * +------------------+--------------------+\n * [5]\n *\n * 1 - Hover area to show insert column button\n * 2 - Hover area to show insert row button\n * 3 - Hover area to show vertical resizing bar\n * 4 - Hover area to show horizontal resizing bar\n * 5 - Hover area to show whole table resize button\n * 6 - Hover area to show whole table selector button\n *\n * When set a different current table or change current TD, we need to update these areas\n */\nvar TableEditor = /** @class */ (function () {\n function TableEditor(editor, table, onChanged) {\n var _this = this;\n this.editor = editor;\n this.table = table;\n this.onChanged = onChanged;\n this.onFinishEditing = function () {\n _this.editor.focus();\n _this.editor.select(_this.start, _this.end);\n _this.editor.addUndoSnapshot(null /*callback*/, \"Format\" /* Format */);\n _this.onChanged();\n return false;\n };\n this.onStartTableResize = function () {\n _this.onStartResize();\n };\n this.onStartCellResize = function () {\n _this.disposeTableResizer();\n _this.onStartResize();\n };\n this.onInserted = function () {\n _this.disposeTableResizer();\n _this.onFinishEditing();\n };\n this.onSelect = function (table) {\n _this.editor.focus();\n if (table) {\n var vTable = new roosterjs_editor_dom_1.VTable(table);\n var rows = vTable.cells.length - 1;\n var lastCellIndex_1 = 0;\n vTable.cells[rows].forEach(function (cell, index) {\n if (cell.td) {\n lastCellIndex_1 = index;\n }\n });\n var selection = {\n firstCell: {\n x: 0,\n y: 0,\n },\n lastCell: {\n y: rows,\n x: lastCellIndex_1,\n },\n };\n _this.editor.select(table, selection);\n }\n };\n this.isRTL = (0, roosterjs_editor_dom_1.getComputedStyle)(table, 'direction') == 'rtl';\n this.tableResizer = (0, TableResizer_1.default)(table, editor.getZoomScale(), this.isRTL, this.onStartTableResize, this.onFinishEditing);\n this.tableSelector = (0, TableSelector_1.default)(table, editor.getZoomScale(), this.onSelect);\n }\n TableEditor.prototype.dispose = function () {\n this.disposeTableResizer();\n this.disposeCellResizers();\n this.disposeTableInserter();\n this.disposeTableSelector();\n };\n TableEditor.prototype.onMouseMove = function (x, y) {\n var _a;\n for (var i = 0; i < this.table.rows.length; i++) {\n var tr = this.table.rows[i];\n var j = 0;\n for (; j < tr.cells.length; j++) {\n var td = tr.cells[j];\n var tdRect = (0, roosterjs_editor_dom_1.normalizeRect)(td.getBoundingClientRect());\n if (!tdRect) {\n continue;\n }\n var lessThanBottom = y <= tdRect.bottom;\n var lessThanRight = this.isRTL ? x >= tdRect.right : x <= tdRect.right;\n if (lessThanRight && lessThanBottom) {\n if (i == 0 && y <= tdRect.top + INSERTER_HOVER_OFFSET) {\n var center = (tdRect.left + tdRect.right) / 2;\n var isOnRightHalf = this.isRTL ? x < center : x > center;\n this.setInserterTd(isOnRightHalf ? td : tr.cells[j - 1], false /*isHorizontal*/);\n }\n else if (j == 0 &&\n (this.isRTL\n ? x >= tdRect.right - INSERTER_HOVER_OFFSET\n : x <= tdRect.left + INSERTER_HOVER_OFFSET)) {\n this.setInserterTd(y > (tdRect.top + tdRect.bottom) / 2\n ? td\n : (_a = this.table.rows[i - 1]) === null || _a === void 0 ? void 0 : _a.cells[0], true /*isHorizontal*/);\n }\n else {\n this.setInserterTd(null);\n }\n this.setResizingTd(td);\n break;\n }\n }\n if (j < tr.cells.length) {\n break;\n }\n }\n };\n TableEditor.prototype.setResizingTd = function (td) {\n if (this.horizontalResizer && this.horizontalResizer.node != td) {\n this.disposeCellResizers();\n }\n if (!this.horizontalResizer && td) {\n var zoomScale = this.editor.getZoomScale();\n this.horizontalResizer = (0, CellResizer_1.default)(td, zoomScale, this.isRTL, true /*isHorizontal*/, this.onStartCellResize, this.onFinishEditing);\n this.verticalResizer = (0, CellResizer_1.default)(td, zoomScale, this.isRTL, false /*isHorizontal*/, this.onStartCellResize, this.onFinishEditing);\n }\n };\n TableEditor.prototype.setInserterTd = function (td, isHorizontal) {\n var inserter = isHorizontal ? this.horizontalInserter : this.verticalInserter;\n if (inserter && inserter.node != td) {\n this.disposeTableInserter();\n }\n if (!this.horizontalInserter && !this.verticalInserter && td) {\n var newInserter = (0, TableInserter_1.default)(this.editor, td, this.isRTL, isHorizontal, this.onInserted);\n if (isHorizontal) {\n this.horizontalInserter = newInserter;\n }\n else {\n this.verticalInserter = newInserter;\n }\n }\n };\n TableEditor.prototype.disposeTableResizer = function () {\n if (this.tableResizer) {\n (0, TableEditorFeature_1.disposeTableEditFeature)(this.tableResizer);\n this.tableResizer = null;\n }\n };\n TableEditor.prototype.disposeTableInserter = function () {\n if (this.horizontalInserter) {\n (0, TableEditorFeature_1.disposeTableEditFeature)(this.horizontalInserter);\n this.horizontalInserter = null;\n }\n if (this.verticalInserter) {\n (0, TableEditorFeature_1.disposeTableEditFeature)(this.verticalInserter);\n this.verticalInserter = null;\n }\n };\n TableEditor.prototype.disposeCellResizers = function () {\n if (this.horizontalResizer) {\n (0, TableEditorFeature_1.disposeTableEditFeature)(this.horizontalResizer);\n this.horizontalResizer = null;\n }\n if (this.verticalResizer) {\n (0, TableEditorFeature_1.disposeTableEditFeature)(this.verticalResizer);\n this.verticalResizer = null;\n }\n };\n TableEditor.prototype.disposeTableSelector = function () {\n if (this.tableSelector) {\n (0, TableEditorFeature_1.disposeTableEditFeature)(this.tableSelector);\n this.tableSelector = null;\n }\n };\n TableEditor.prototype.onStartResize = function () {\n var range = this.editor.getSelectionRange();\n if (range) {\n this.start = roosterjs_editor_dom_1.Position.getStart(range);\n this.end = roosterjs_editor_dom_1.Position.getEnd(range);\n }\n this.editor.addUndoSnapshot();\n };\n return TableEditor;\n}());\nexports.default = TableEditor;\n//# sourceMappingURL=TableEditor.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar TEMP_BACKGROUND_COLOR = 'originalBackgroundColor';\nvar CELL_SHADE = 'cellShade';\n/**\n * Set background color of cells.\n * @param editor The editor instance\n * @param color One of two options:\n **/\nfunction applyCellShading(editor, color) {\n editor.focus();\n editor.addUndoSnapshot(function () {\n var regions = editor.getSelectedRegions();\n regions.forEach(function (region) {\n if ((0, roosterjs_editor_dom_1.safeInstanceOf)(region.rootNode, 'HTMLTableCellElement')) {\n (0, roosterjs_editor_dom_1.setColor)(region.rootNode, color, true /* isBackgroundColor */, editor.isDarkMode());\n region.rootNode.dataset[CELL_SHADE] = 'true';\n region.rootNode.dataset[TEMP_BACKGROUND_COLOR] =\n region.rootNode.style.backgroundColor;\n }\n });\n });\n}\nexports.default = applyCellShading;\n//# sourceMappingURL=applyCellShading.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar execCommand_1 = require(\"../utils/execCommand\");\n/**\n * Toggle italic at selection\n * If selection is collapsed, it will only affect the input after caret\n * If selection contains only italic text, the italic style will be removed\n * If selection contains only normal text, italic style will be added to the whole selected text\n * If selection contains both italic and normal text, italic style will be added to the whole selected text\n * @param editor The editor instance\n */\nfunction toggleItalic(editor) {\n (0, execCommand_1.default)(editor, \"italic\" /* Italic */);\n}\nexports.default = toggleItalic;\n//# sourceMappingURL=toggleItalic.js.map","\"use strict\";\n\nexports.__esModule = true;\nexports.default = createWebStorage;\n\nvar _getStorage = _interopRequireDefault(require(\"./getStorage\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction createWebStorage(type) {\n var storage = (0, _getStorage.default)(type);\n return {\n getItem: function getItem(key) {\n return new Promise(function (resolve, reject) {\n resolve(storage.getItem(key));\n });\n },\n setItem: function setItem(key, item) {\n return new Promise(function (resolve, reject) {\n resolve(storage.setItem(key, item));\n });\n },\n removeItem: function removeItem(key) {\n return new Promise(function (resolve, reject) {\n resolve(storage.removeItem(key));\n });\n }\n };\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.QuoteFeatures = void 0;\nvar roosterjs_editor_api_1 = require(\"roosterjs-editor-api\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar QUOTE_TAG = 'BLOCKQUOTE';\nvar STRUCTURED_TAGS = [QUOTE_TAG, 'LI', 'TD', 'TH'].join(',');\n/**\n * UnquoteWhenBackOnEmpty1stLine edit feature, provides the ability to Unquote current line when\n * user press BACKSPACE on first and empty line of a BLOCKQUOTE\n */\nvar UnquoteWhenBackOnEmpty1stLine = {\n keys: [8 /* BACKSPACE */],\n shouldHandleEvent: function (event, editor) {\n var childOfQuote = cacheGetQuoteChild(event, editor);\n return childOfQuote && (0, roosterjs_editor_dom_1.isNodeEmpty)(childOfQuote) && !childOfQuote.previousSibling;\n },\n handleEvent: splitQuote,\n};\n/**\n * UnquoteWhenEnterOnEmptyLine edit feature, provides the ability to Unquote current line when\n * user press ENTER on an empty line of a BLOCKQUOTE\n */\nvar UnquoteWhenEnterOnEmptyLine = {\n keys: [13 /* ENTER */],\n shouldHandleEvent: function (event, editor) {\n var childOfQuote = cacheGetQuoteChild(event, editor);\n var shift = event.rawEvent.shiftKey;\n return !shift && childOfQuote && (0, roosterjs_editor_dom_1.isNodeEmpty)(childOfQuote);\n },\n handleEvent: function (event, editor) {\n return editor.addUndoSnapshot(function () { return splitQuote(event, editor); }, null /*changeSource*/, true /*canUndoByBackspace*/);\n },\n};\nfunction cacheGetQuoteChild(event, editor) {\n return (0, roosterjs_editor_dom_1.cacheGetEventData)(event, 'QUOTE_CHILD', function () {\n var quote = editor.getElementAtCursor(STRUCTURED_TAGS);\n if (quote && (0, roosterjs_editor_dom_1.getTagOfNode)(quote) == QUOTE_TAG) {\n var pos = editor.getFocusedPosition();\n var block = pos && editor.getBlockElementAtNode(pos.normalize().node);\n if (block) {\n var node = block.getStartNode() == quote\n ? block.getStartNode()\n : block.collapseToSingleElement();\n return (0, roosterjs_editor_dom_1.isNodeEmpty)(node) ? node : null;\n }\n }\n return null;\n });\n}\nfunction splitQuote(event, editor) {\n editor.addUndoSnapshot(function () {\n var childOfQuote = cacheGetQuoteChild(event, editor);\n var parent;\n var shouldClearFormat;\n if ((0, roosterjs_editor_dom_1.getTagOfNode)(childOfQuote) == QUOTE_TAG) {\n childOfQuote = (0, roosterjs_editor_dom_1.wrap)((0, roosterjs_editor_dom_1.toArray)(childOfQuote.childNodes));\n }\n parent = (0, roosterjs_editor_dom_1.splitBalancedNodeRange)(childOfQuote);\n shouldClearFormat = isStyledBlockquote(parent);\n (0, roosterjs_editor_dom_1.unwrap)(parent);\n editor.select(childOfQuote, 0 /* Begin */);\n if (shouldClearFormat) {\n (0, roosterjs_editor_api_1.clearFormat)(editor);\n }\n });\n event.rawEvent.preventDefault();\n}\nvar isStyledBlockquote = function (element) {\n if (element &&\n (0, roosterjs_editor_dom_1.safeInstanceOf)(element, 'HTMLQuoteElement') &&\n element.style.borderLeft &&\n element.style.borderColor &&\n element.style.paddingLeft &&\n element.style.color) {\n return true;\n }\n return false;\n};\n/**\n * @internal\n */\nexports.QuoteFeatures = {\n unquoteWhenBackspaceOnEmptyFirstLine: UnquoteWhenBackOnEmpty1stLine,\n unquoteWhenEnterOnEmptyLine: UnquoteWhenEnterOnEmptyLine,\n};\n//# sourceMappingURL=quoteFeatures.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar getBlockElementAtNode_1 = require(\"../blockElements/getBlockElementAtNode\");\nvar PartialInlineElement_1 = require(\"../inlineElements/PartialInlineElement\");\nvar Position_1 = require(\"../selection/Position\");\nvar getInlineElementBeforeAfter_1 = require(\"../inlineElements/getInlineElementBeforeAfter\");\n/**\n * @internal\n * This is selection scoper that provide a start inline as the start of the selection\n * and checks if a block falls in the selection (isBlockInScope)\n * last trimInlineElement to trim any inline element to return a partial that falls in the selection\n */\nvar SelectionScoper = /** @class */ (function () {\n /**\n * Create a new instance of SelectionScoper class\n * @param rootNode The root node of the content\n * @param range The selection range to scope to\n */\n function SelectionScoper(rootNode, range) {\n this.rootNode = rootNode;\n this.start = Position_1.default.getStart(range).normalize();\n this.end = Position_1.default.getEnd(range).normalize();\n }\n /**\n * Provide a start block as the first block after the cursor\n */\n SelectionScoper.prototype.getStartBlockElement = function () {\n if (!this.startBlock) {\n this.startBlock = (0, getBlockElementAtNode_1.default)(this.rootNode, this.start.node);\n }\n return this.startBlock;\n };\n /**\n * Provide a start inline as the first inline after the cursor\n */\n SelectionScoper.prototype.getStartInlineElement = function () {\n if (!this.startInline) {\n this.startInline = this.trimInlineElement((0, getInlineElementBeforeAfter_1.getInlineElementAfter)(this.rootNode, this.start));\n }\n return this.startInline;\n };\n /**\n * Checks if a block completely falls in the selection\n * @param block The BlockElement to check\n */\n SelectionScoper.prototype.isBlockInScope = function (block) {\n if (!block) {\n return false;\n }\n var inScope = false;\n var selStartBlock = this.getStartBlockElement();\n if (this.start.equalTo(this.end)) {\n inScope = selStartBlock && selStartBlock.equals(block);\n }\n else {\n var selEndBlock = (0, getBlockElementAtNode_1.default)(this.rootNode, this.end.node);\n // There are three cases that are considered as \"block in scope\"\n // 1) The start of selection falls on the block\n // 2) The end of selection falls on the block\n // 3) the block falls in-between selection start and end\n inScope =\n selStartBlock &&\n selEndBlock &&\n (block.equals(selStartBlock) ||\n block.equals(selEndBlock) ||\n (block.isAfter(selStartBlock) && selEndBlock.isAfter(block)));\n }\n return inScope;\n };\n /**\n * Trim an incoming inline. If it falls completely outside selection, return null\n * otherwise return a partial that represents the portion that falls in the selection\n * @param inline The InlineElement to check\n */\n SelectionScoper.prototype.trimInlineElement = function (inline) {\n if (!inline || this.start.equalTo(this.end)) {\n return null;\n }\n // Temp code. Will be changed to using InlineElement.getStart/EndPosition() soon\n var start = inline.getStartPosition();\n var end = inline.getEndPosition();\n if (start.isAfter(this.end) || this.start.isAfter(end)) {\n return null;\n }\n var startPartial = false;\n var endPartial = false;\n if (this.start.isAfter(start)) {\n start = this.start;\n startPartial = true;\n }\n if (end.isAfter(this.end)) {\n end = this.end;\n endPartial = true;\n }\n return start.isAfter(end) || start.equalTo(end)\n ? null\n : startPartial || endPartial\n ? new PartialInlineElement_1.default(inline, startPartial && start, endPartial && end)\n : inline;\n };\n return SelectionScoper;\n}());\nexports.default = SelectionScoper;\n//# sourceMappingURL=SelectionScoper.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar getInnerHTML_1 = require(\"../utils/getInnerHTML\");\nvar getSelectionPath_1 = require(\"./getSelectionPath\");\nvar getTagOfNode_1 = require(\"../utils/getTagOfNode\");\nvar queryElements_1 = require(\"../utils/queryElements\");\n/**\n * Get inner Html of a root node with a selection path which can be used for restore selection.\n * The result string can be used by setHtmlWithSelectionPath() to restore the HTML and selection.\n * @param rootNode Root node to get inner Html from\n * @param range The range of selection. If pass null, no selection path will be added\n * @returns Inner HTML of the root node, followed by HTML comment contains selection path if the given range is valid\n */\nfunction getHtmlWithSelectionPath(rootNode, range) {\n if (!rootNode) {\n return '';\n }\n var _a = range || {}, startContainer = _a.startContainer, endContainer = _a.endContainer, startOffset = _a.startOffset, endOffset = _a.endOffset;\n var isDOMChanged = false;\n (0, queryElements_1.default)(rootNode, 'table', function (table) {\n var tbody = null;\n for (var child = table.firstChild; child; child = child.nextSibling) {\n if ((0, getTagOfNode_1.default)(child) == 'TR') {\n if (!tbody) {\n tbody = table.ownerDocument.createElement('tbody');\n table.insertBefore(tbody, child);\n }\n tbody.appendChild(child);\n child = tbody;\n isDOMChanged = true;\n }\n else {\n tbody = null;\n }\n }\n });\n if (range && isDOMChanged) {\n try {\n range.setStart(startContainer, startOffset);\n range.setEnd(endContainer, endOffset);\n }\n catch (_b) { }\n }\n var content = (0, getInnerHTML_1.default)(rootNode);\n var selectionPath = range && (0, getSelectionPath_1.default)(rootNode, range);\n return selectionPath ? content + \"\" : content;\n}\nexports.default = getHtmlWithSelectionPath;\n//# sourceMappingURL=getHtmlWithSelectionPath.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HyperLink = void 0;\nvar HyperLink_1 = require(\"./HyperLink\");\nObject.defineProperty(exports, \"HyperLink\", { enumerable: true, get: function () { return HyperLink_1.default; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ImageEditOperation = void 0;\n/**\n * Operation flags for ImageEdit plugin\n */\nvar ImageEditOperation;\n(function (ImageEditOperation) {\n /**\n * No operation\n */\n ImageEditOperation[ImageEditOperation[\"None\"] = 0] = \"None\";\n /**\n * Resize image from corner ( horizontal and vertical resize)\n */\n ImageEditOperation[ImageEditOperation[\"CornerResize\"] = 1] = \"CornerResize\";\n /**\n * Resize image from side ( either horizontal or vertical resize)\n */\n ImageEditOperation[ImageEditOperation[\"SideResize\"] = 2] = \"SideResize\";\n /**\n * Image resize\n */\n ImageEditOperation[ImageEditOperation[\"Resize\"] = 3] = \"Resize\";\n /**\n * Image rotate\n */\n ImageEditOperation[ImageEditOperation[\"Rotate\"] = 4] = \"Rotate\";\n /**\n * Image resize and rotate\n */\n ImageEditOperation[ImageEditOperation[\"ResizeAndRotate\"] = 7] = \"ResizeAndRotate\";\n /**\n * Image crop\n */\n ImageEditOperation[ImageEditOperation[\"Crop\"] = 8] = \"Crop\";\n /**\n * All operations\n */\n ImageEditOperation[ImageEditOperation[\"All\"] = 15] = \"All\";\n})(ImageEditOperation = exports.ImageEditOperation || (exports.ImageEditOperation = {}));\n//# sourceMappingURL=ImageEditOperation.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * A ClientRect of all 0 is possible. i.e. chrome returns a ClientRect of 0 when the cursor is on an empty p\n * We validate that and only return a rect when the passed in ClientRect is valid\n */\nfunction normalizeRect(clientRect) {\n var _a = clientRect || { left: 0, right: 0, top: 0, bottom: 0 }, left = _a.left, right = _a.right, top = _a.top, bottom = _a.bottom;\n return left + right + top + bottom > 0\n ? {\n left: Math.round(left),\n right: Math.round(right),\n top: Math.round(top),\n bottom: Math.round(bottom),\n }\n : null;\n}\nexports.default = normalizeRect;\n//# sourceMappingURL=normalizeRect.js.map","function createThunkMiddleware(extraArgument) {\n return function (_ref) {\n var dispatch = _ref.dispatch,\n getState = _ref.getState;\n return function (next) {\n return function (action) {\n if (typeof action === 'function') {\n return action(dispatch, getState, extraArgument);\n }\n\n return next(action);\n };\n };\n };\n}\n\nvar thunk = createThunkMiddleware();\nthunk.withExtraArgument = createThunkMiddleware;\n\nexport default thunk;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Get Entity object from an entity root element\n * @param element The entity root element. If this element is not an entity root element,\n * it will return null\n */\nfunction getEntityFromElement(element) {\n var _a;\n var isEntity = false;\n var type = '';\n var id = '';\n var isReadonly = false;\n (_a = element === null || element === void 0 ? void 0 : element.className) === null || _a === void 0 ? void 0 : _a.split(' ').forEach(function (name) {\n if (name == \"_Entity\" /* ENTITY_INFO_NAME */) {\n isEntity = true;\n }\n else if (name.indexOf(\"_EType_\" /* ENTITY_TYPE_PREFIX */) == 0) {\n type = name.substr(\"_EType_\" /* ENTITY_TYPE_PREFIX */.length);\n }\n else if (name.indexOf(\"_EId_\" /* ENTITY_ID_PREFIX */) == 0) {\n id = name.substr(\"_EId_\" /* ENTITY_ID_PREFIX */.length);\n }\n else if (name.indexOf(\"_EReadonly_\" /* ENTITY_READONLY_PREFIX */) == 0) {\n isReadonly = name.substr(\"_EReadonly_\" /* ENTITY_READONLY_PREFIX */.length) == '1';\n }\n });\n return isEntity\n ? {\n wrapper: element,\n id: id,\n type: type,\n isReadonly: isReadonly,\n }\n : null;\n}\nexports.default = getEntityFromElement;\n//# sourceMappingURL=getEntityFromElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getObject = exports.setObject = exports.createCustomData = void 0;\n/** NodeId attribute */\nvar NODE_ID_ATTRIBUTE_NAME = 'NodeId';\n/**\n * @internal\n * Create an empty WordCustomData\n */\nfunction createCustomData() {\n return {\n dict: {},\n nextNodeId: 1,\n };\n}\nexports.createCustomData = createCustomData;\n/**\n * @internal\n * Sets the specified object data\n */\nfunction setObject(wordCustomData, element, key, value) {\n // Get the id for the element\n if (element.nodeType == 1 /* Element */) {\n var id = getAndSetNodeId(wordCustomData, element);\n if (id != '') {\n // Get the values for the element\n if (!wordCustomData.dict[id]) {\n // First time dictionary creation\n wordCustomData.dict[id] = {};\n }\n wordCustomData.dict[id][key] = value;\n }\n }\n}\nexports.setObject = setObject;\n/**\n * @internal\n * Reads the specified object data\n */\nfunction getObject(wordCustomData, element, key) {\n if (element.nodeType == 1 /* Element */) {\n var id = getAndSetNodeId(wordCustomData, element);\n if (id != '') {\n return wordCustomData.dict[id] && wordCustomData.dict[id][key];\n }\n }\n return null;\n}\nexports.getObject = getObject;\n/**\n * Get the unique id for the specified node...\n */\nfunction getAndSetNodeId(wordCustomData, element) {\n var id = element.getAttribute(NODE_ID_ATTRIBUTE_NAME);\n if (!id) {\n id = wordCustomData.nextNodeId.toString();\n wordCustomData.nextNodeId++;\n element.setAttribute(NODE_ID_ATTRIBUTE_NAME, id);\n }\n return id;\n}\n//# sourceMappingURL=WordCustomData.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar changeElementTag_1 = require(\"../utils/changeElementTag\");\nvar contains_1 = require(\"../utils/contains\");\nvar createRange_1 = require(\"../selection/createRange\");\nvar findClosestElementAncestor_1 = require(\"../utils/findClosestElementAncestor\");\nvar getBlockElementAtNode_1 = require(\"../blockElements/getBlockElementAtNode\");\nvar getTagOfNode_1 = require(\"../utils/getTagOfNode\");\nvar isNodeEmpty_1 = require(\"../utils/isNodeEmpty\");\nvar isPositionAtBeginningOf_1 = require(\"../selection/isPositionAtBeginningOf\");\nvar isVoidHtmlElement_1 = require(\"../utils/isVoidHtmlElement\");\nvar LinkInlineElement_1 = require(\"../inlineElements/LinkInlineElement\");\nvar Position_1 = require(\"../selection/Position\");\nvar PositionContentSearcher_1 = require(\"../contentTraverser/PositionContentSearcher\");\nvar queryElements_1 = require(\"../utils/queryElements\");\nvar splitTextNode_1 = require(\"../utils/splitTextNode\");\nvar toArray_1 = require(\"../utils/toArray\");\nvar unwrap_1 = require(\"../utils/unwrap\");\nvar VTable_1 = require(\"../table/VTable\");\nvar wrap_1 = require(\"../utils/wrap\");\nvar splitParentNode_1 = require(\"../utils/splitParentNode\");\nvar adjustSteps = [\n adjustInsertPositionForHyperLink,\n adjustInsertPositionForStructuredNode,\n adjustInsertPositionForParagraph,\n adjustInsertPositionForVoidElement,\n adjustInsertPositionForMoveCursorOutOfALink,\n];\n/**\n * Adjust position for A tag don't be nested inside another A tag.\n */\nfunction adjustInsertPositionForHyperLink(root, nodeToInsert, position, range) {\n var _a, _b;\n var blockElement = (0, getBlockElementAtNode_1.default)(root, position.node);\n if (blockElement) {\n // Find the first tag within current block which covers current selection\n // If there are more than one nested, let's handle the first one only since that is not a common scenario.\n var anchor = (0, queryElements_1.default)(root, 'a[href]', null /*forEachCallback*/, 1 /* OnSelection */, (0, createRange_1.default)(position)).filter(function (a) { return blockElement.contains(a); })[0];\n // If this is about to insert node to an empty A tag, clear the A tag and reset position\n if (anchor && (0, isNodeEmpty_1.default)(anchor)) {\n position = new Position_1.default(anchor, -2 /* Before */);\n safeRemove(anchor);\n anchor = null;\n }\n // If this is about to insert nodes which contains A tag into another A tag, need to break current A tag\n // otherwise we will have nested A tags which is a wrong HTML structure\n if (anchor &&\n ((_a = nodeToInsert) === null || _a === void 0 ? void 0 : _a.querySelector) &&\n ((_b = nodeToInsert) === null || _b === void 0 ? void 0 : _b.querySelector('a[href]'))) {\n var normalizedPosition = position.normalize();\n var parentNode = normalizedPosition.node.parentNode;\n var nextNode = normalizedPosition.node.nodeType == 3 /* Text */\n ? (0, splitTextNode_1.default)(normalizedPosition.node, normalizedPosition.offset, false /*returnFirstPart*/)\n : normalizedPosition.isAtEnd\n ? normalizedPosition.node.nextSibling\n : normalizedPosition.node;\n var splitter = root.ownerDocument.createTextNode('');\n parentNode.insertBefore(splitter, nextNode);\n while ((0, contains_1.default)(anchor, splitter)) {\n splitter = (0, splitParentNode_1.splitBalancedNodeRange)(splitter);\n }\n position = new Position_1.default(splitter, -2 /* Before */);\n safeRemove(splitter);\n }\n }\n return position;\n}\n/**\n * Adjust position for a node don't be nested inside tags like BR, LI, TD.\n */\nfunction adjustInsertPositionForStructuredNode(root, nodeToInsert, position, range) {\n var rootNodeToInsert = nodeToInsert;\n if (rootNodeToInsert.nodeType == 11 /* DocumentFragment */) {\n var rootNodes = (0, toArray_1.default)(rootNodeToInsert.childNodes).filter(function (n) { return (0, getTagOfNode_1.default)(n) != 'BR'; });\n rootNodeToInsert = rootNodes.length == 1 ? rootNodes[0] : null;\n }\n var tag = (0, getTagOfNode_1.default)(rootNodeToInsert);\n var hasBrNextToRoot = tag && (0, getTagOfNode_1.default)(rootNodeToInsert.nextSibling) == 'BR';\n var listItem = (0, findClosestElementAncestor_1.default)(position.node, root, 'LI');\n var listNode = listItem && (0, findClosestElementAncestor_1.default)(listItem, root, 'OL,UL');\n var tdNode = (0, findClosestElementAncestor_1.default)(position.node, root, 'TD,TH');\n var trNode = tdNode && (0, findClosestElementAncestor_1.default)(tdNode, root, 'TR');\n if (tag == 'LI') {\n tag = listNode ? (0, getTagOfNode_1.default)(listNode) : 'UL';\n rootNodeToInsert = (0, wrap_1.default)(rootNodeToInsert, tag);\n }\n if ((tag == 'OL' || tag == 'UL') && (0, getTagOfNode_1.default)(rootNodeToInsert.firstChild) == 'LI') {\n var shouldInsertListAsText = !rootNodeToInsert.firstChild.nextSibling && !hasBrNextToRoot;\n if (hasBrNextToRoot && rootNodeToInsert.parentNode) {\n safeRemove(rootNodeToInsert.nextSibling);\n }\n if (shouldInsertListAsText) {\n (0, unwrap_1.default)(rootNodeToInsert.firstChild);\n (0, unwrap_1.default)(rootNodeToInsert);\n }\n else if ((0, getTagOfNode_1.default)(listNode) == tag) {\n (0, unwrap_1.default)(rootNodeToInsert);\n position = new Position_1.default(listItem, (0, isPositionAtBeginningOf_1.default)(position, listItem)\n ? -2 /* Before */\n : -3 /* After */);\n }\n }\n else if (tag == 'TABLE' && trNode) {\n // When inserting a table into a table, if these tables have the same column count, and\n // current position is at beginning of a row, then merge these two tables\n var newTable = new VTable_1.default(rootNodeToInsert);\n var currentTable = new VTable_1.default(tdNode);\n if (currentTable.col == 0 &&\n tdNode == currentTable.getCell(currentTable.row, 0).td &&\n newTable.cells[0] &&\n newTable.cells[0].length == currentTable.cells[0].length &&\n (0, isPositionAtBeginningOf_1.default)(position, tdNode)) {\n if ((0, getTagOfNode_1.default)(rootNodeToInsert.firstChild) == 'TBODY' &&\n !rootNodeToInsert.firstChild.nextSibling) {\n (0, unwrap_1.default)(rootNodeToInsert.firstChild);\n }\n (0, unwrap_1.default)(rootNodeToInsert);\n position = new Position_1.default(trNode, -3 /* After */);\n }\n }\n return position;\n}\n/**\n * Change P tag to DIV, when a new node when insert node.\n */\nfunction adjustInsertPositionForParagraph(root, nodeToInsert, position, range) {\n if ((0, getTagOfNode_1.default)(position.node) == 'P') {\n // Insert into a P tag may cause issues when the inserted content contains any block element.\n // Change P tag to DIV to make sure it works well\n var pos = position.normalize();\n var div = (0, changeElementTag_1.default)(position.node, 'div');\n if (pos.node != div) {\n position = pos;\n }\n }\n return position;\n}\n/**\n * Adjust position for a node that can have children.\n */\nfunction adjustInsertPositionForVoidElement(root, nodeToInsert, position, range) {\n if ((0, isVoidHtmlElement_1.default)(position.node)) {\n position = new Position_1.default(position.node, position.isAtEnd ? -3 /* After */ : -2 /* Before */);\n }\n return position;\n}\n/**\n * Adjust the position cursor out of link when a new node is inserted.\n */\nfunction adjustInsertPositionForMoveCursorOutOfALink(root, nodeToInsert, position, range) {\n if (range && range.collapsed) {\n var searcher = new PositionContentSearcher_1.default(root, Position_1.default.getStart(range));\n var inlineElementBefore = searcher.getInlineElementBefore();\n var inlineElementAfter = searcher.getInlineElementAfter();\n if (inlineElementBefore instanceof LinkInlineElement_1.default) {\n position = new Position_1.default(inlineElementBefore.getContainerNode(), -3 /* After */);\n }\n else if (inlineElementAfter instanceof LinkInlineElement_1.default) {\n position = new Position_1.default(inlineElementAfter.getContainerNode(), -2 /* Before */);\n }\n }\n return position;\n}\n/**\n *\n * @param root the contentDiv of the ditor\n * @param nodeToInsert the node to be inserted\n * @param position the position of the node to be inserted\n * @param range the range current or cached range of the editor\n * @returns the adjusted position of the inserted node\n */\nfunction adjustInsertPositionBySteps(root, nodeToInsert, position, range) {\n adjustSteps.forEach(function (handler) {\n position = handler(root, nodeToInsert, position, range);\n });\n return position;\n}\nexports.default = adjustInsertPositionBySteps;\nfunction safeRemove(node) {\n var _a;\n (_a = node === null || node === void 0 ? void 0 : node.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(node);\n}\n//# sourceMappingURL=adjustInsertPosition.js.map","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _createWebStorage = _interopRequireDefault(require(\"./createWebStorage\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _default = (0, _createWebStorage.default)('local');\n\nexports.default = _default;","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./plugins/TableResize/index\"), exports);\n//# sourceMappingURL=TableResize.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TableResize = void 0;\nvar TableResize_1 = require(\"./TableResize\");\nObject.defineProperty(exports, \"TableResize\", { enumerable: true, get: function () { return TableResize_1.default; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Removes the node and keep all children in place, return the parentNode where the children are attached\n * @param node the node to remove\n */\nfunction unwrap(node) {\n // Unwrap requires a parentNode\n var parentNode = node ? node.parentNode : null;\n if (!parentNode) {\n return null;\n }\n while (node.firstChild) {\n parentNode.insertBefore(node.firstChild, node);\n }\n parentNode.removeChild(node);\n return parentNode;\n}\nexports.default = unwrap;\n//# sourceMappingURL=unwrap.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * Convert pasted content if there are HTML and Image data in the Clipboard\n * @param event The BeforePaste event\n */\nfunction convertPasteContentForSingleImage(event, trustedHTMLHandler) {\n var fragment = event.fragment, clipboardData = event.clipboardData;\n var html = clipboardData.html, image = clipboardData.image;\n if (html && image) {\n //If there are Html in the clipboard, and the html body only have one img children, use the HTML\n var doc = new DOMParser().parseFromString(trustedHTMLHandler(html), 'text/html');\n (0, roosterjs_editor_dom_1.moveChildNodes)(fragment, doc === null || doc === void 0 ? void 0 : doc.body);\n }\n}\nexports.default = convertPasteContentForSingleImage;\n//# sourceMappingURL=convertPasteContentForSingleImage.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar getBlockElementAtNode_1 = require(\"./getBlockElementAtNode\");\n/**\n * Get the first/last BlockElement of under the root node.\n * If no suitable BlockElement found, returns null\n * @param rootNode The root node to get BlockElement from\n * @param isFirst True to get first BlockElement, false to get last BlockElement\n */\nfunction getFirstLastBlockElement(rootNode, isFirst) {\n var node = rootNode;\n do {\n node = node && (isFirst ? node.firstChild : node.lastChild);\n } while (node && node.firstChild);\n return node && (0, getBlockElementAtNode_1.default)(rootNode, node);\n}\nexports.default = getFirstLastBlockElement;\n//# sourceMappingURL=getFirstLastBlockElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * Resets Ordered List Numbering back to the value of the parameter startNumber\n * @param editor The editor instance\n * @param separator The HTML element that indicates when to split the VList\n * @param startNumber The number of that the splitted list should start\n */\nfunction setOrderedListNumbering(editor, separator, startNumber) {\n if (startNumber === void 0) { startNumber = 1; }\n editor.addUndoSnapshot(function () {\n editor.focus();\n var regions = editor.getSelectedRegions();\n if (regions[0]) {\n var vList = (0, roosterjs_editor_dom_1.createVListFromRegion)(regions[0], false /*includeSiblingLists*/, separator);\n if (vList) {\n vList.split(separator, startNumber);\n vList.writeBack();\n }\n }\n }, \"Format\" /* Format */);\n}\nexports.default = setOrderedListNumbering;\n//# sourceMappingURL=setOrderedListNumbering.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createPasteFragment = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar START_FRAGMENT = '';\nvar END_FRAGMENT = '';\nvar NBSP_HTML = '\\u00A0';\n/**\n * @internal\n * Create a DocumentFragment for paste from a ClipboardData\n * @param core The EditorCore object.\n * @param clipboardData Clipboard data retrieved from clipboard\n * @param position The position to paste to\n * @param pasteAsText True to force use plain text as the content to paste, false to choose HTML or Image if any\n * @param applyCurrentStyle True if apply format of current selection to the pasted content,\n * false to keep original format\n */\nvar createPasteFragment = function (core, clipboardData, position, pasteAsText, applyCurrentStyle) {\n var _a, _b;\n if (!clipboardData) {\n return null;\n }\n // Step 1: Prepare BeforePasteEvent object\n var event = createBeforePasteEvent(core, clipboardData);\n var fragment = event.fragment, sanitizingOption = event.sanitizingOption;\n var rawHtml = clipboardData.rawHtml, text = clipboardData.text, imageDataUri = clipboardData.imageDataUri;\n var document = core.contentDiv.ownerDocument;\n var doc;\n // Step 2: Retrieve Metadata from Html and the Html that was copied.\n if (rawHtml &&\n ((_a = (doc = new DOMParser().parseFromString(core.trustedHTMLHandler(rawHtml), 'text/html'))) === null || _a === void 0 ? void 0 : _a.body)) {\n var attributes = (_b = doc.querySelector('html')) === null || _b === void 0 ? void 0 : _b.attributes;\n (attributes ? (0, roosterjs_editor_dom_1.toArray)(attributes) : []).reduce(function (attrs, attr) {\n attrs[attr.name] = attr.value;\n return attrs;\n }, event.htmlAttributes);\n (0, roosterjs_editor_dom_1.toArray)(doc.querySelectorAll('meta')).reduce(function (attrs, meta) {\n attrs[meta.name] = meta.content;\n return attrs;\n }, event.htmlAttributes);\n clipboardData.htmlFirstLevelChildTags = [];\n doc === null || doc === void 0 ? void 0 : doc.body.normalize();\n doc === null || doc === void 0 ? void 0 : doc.body.childNodes.forEach(function (node) {\n if (node.nodeType == Node.TEXT_NODE) {\n var trimmedString = node.nodeValue.replace(/(\\r\\n|\\r|\\n)/gm, '').trim();\n if (!trimmedString) {\n return;\n }\n }\n var nodeTag = (0, roosterjs_editor_dom_1.getTagOfNode)(node);\n if (node.nodeType != Node.COMMENT_NODE) {\n clipboardData.htmlFirstLevelChildTags.push(nodeTag);\n }\n });\n // Move all STYLE nodes into header, and save them into sanitizing options.\n // Because if we directly move them into a fragment, all sheets under STYLE will be lost.\n processStyles(doc, function (style) {\n doc.head.appendChild(style);\n sanitizingOption.additionalGlobalStyleNodes.push(style);\n });\n var startIndex = rawHtml.indexOf(START_FRAGMENT);\n var endIndex = rawHtml.lastIndexOf(END_FRAGMENT);\n if (startIndex >= 0 && endIndex >= startIndex + START_FRAGMENT.length) {\n event.htmlBefore = rawHtml.substr(0, startIndex);\n event.htmlAfter = rawHtml.substr(endIndex + END_FRAGMENT.length);\n clipboardData.html = rawHtml.substring(startIndex + START_FRAGMENT.length, endIndex);\n doc.body.innerHTML = core.trustedHTMLHandler(clipboardData.html);\n // Remove style nodes just added by setting innerHTML of body since we already have all\n // style nodes in header.\n // Here we use doc.body instead of doc because we only want to remove STYLE nodes under BODY\n // and the nodes under HEAD are still used when convert global CSS to inline\n processStyles(doc.body, function (style) { var _a; return (_a = style.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(style); });\n }\n }\n // Step 3: Fill the BeforePasteEvent object, especially the fragment for paste\n if (!pasteAsText && !text && imageDataUri) {\n // Paste image\n var img = document.createElement('img');\n img.style.maxWidth = '100%';\n img.src = imageDataUri;\n fragment.appendChild(img);\n }\n else if (!pasteAsText && rawHtml && doc ? doc.body : false) {\n (0, roosterjs_editor_dom_1.moveChildNodes)(fragment, doc.body);\n if (applyCurrentStyle && position) {\n var format_1 = getCurrentFormat(core, position.node);\n (0, roosterjs_editor_dom_1.applyTextStyle)(fragment, function (node) { return (0, roosterjs_editor_dom_1.applyFormat)(node, format_1); });\n }\n }\n else if (text) {\n // Paste text\n text.split('\\n').forEach(function (line, index, lines) {\n line = line\n .replace(/^ /g, NBSP_HTML)\n .replace(/\\r/g, '')\n .replace(/ {2}/g, ' ' + NBSP_HTML);\n var textNode = document.createTextNode(line);\n // There are 3 scenarios:\n // 1. Single line: Paste as it is\n // 2. Two lines: Add
              between the lines\n // 3. 3 or More lines, For first and last line, paste as it is. For middle lines, wrap with DIV, and add BR if it is empty line\n if (lines.length == 2 && index == 0) {\n // 1 of 2 lines scenario, add BR\n fragment.appendChild(textNode);\n fragment.appendChild(document.createElement('br'));\n }\n else if (index > 0 && index < lines.length - 1) {\n // Middle line of >=3 lines scenario, wrap with DIV\n fragment.appendChild((0, roosterjs_editor_dom_1.wrap)(line == '' ? document.createElement('br') : textNode));\n }\n else {\n // All others, paste as it is\n fragment.appendChild(textNode);\n }\n });\n }\n // Step 4: Trigger BeforePasteEvent so that plugins can do proper change before paste\n core.api.triggerEvent(core, event, true /*broadcast*/);\n // Step 5. Sanitize the fragment before paste to make sure the content is safe\n var sanitizer = new roosterjs_editor_dom_1.HtmlSanitizer(event.sanitizingOption);\n sanitizer.convertGlobalCssToInlineCss(fragment);\n sanitizer.sanitize(fragment, position && (0, roosterjs_editor_dom_1.getInheritableStyles)(position.element));\n return fragment;\n};\nexports.createPasteFragment = createPasteFragment;\nfunction getCurrentFormat(core, node) {\n var pendableFormat = core.api.getPendableFormatState(core, true /** forceGetStateFromDOM*/);\n var styleBasedFormat = core.api.getStyleBasedFormatState(core, node);\n return {\n fontFamily: styleBasedFormat.fontName,\n fontSize: styleBasedFormat.fontSize,\n textColor: styleBasedFormat.textColor,\n backgroundColor: styleBasedFormat.backgroundColor,\n textColors: styleBasedFormat.textColors,\n backgroundColors: styleBasedFormat.backgroundColors,\n bold: pendableFormat.isBold,\n italic: pendableFormat.isItalic,\n underline: pendableFormat.isUnderline,\n };\n}\nfunction createBeforePasteEvent(core, clipboardData) {\n return {\n eventType: 10 /* BeforePaste */,\n clipboardData: clipboardData,\n fragment: core.contentDiv.ownerDocument.createDocumentFragment(),\n sanitizingOption: (0, roosterjs_editor_dom_1.createDefaultHtmlSanitizerOptions)(),\n htmlBefore: '',\n htmlAfter: '',\n htmlAttributes: {},\n };\n}\nfunction processStyles(node, callback) {\n (0, roosterjs_editor_dom_1.toArray)(node.querySelectorAll('style')).forEach(callback);\n}\n//# sourceMappingURL=createPasteFragment.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar isModifierKey_1 = require(\"./isModifierKey\");\n/**\n * Returns true when the event was fired from a key that produces a character value, otherwise false\n * This detection is not 100% accurate. event.key is not fully supported by all browsers, and in some browsers (e.g. IE),\n * event.key is longer than 1 for num pad input. But here we just want to improve performance as much as possible.\n * So if we missed some case here it is still acceptable.\n * @param event The keyboard event object\n */\nfunction isCharacterValue(event) {\n return !(0, isModifierKey_1.default)(event) && !!event.key && event.key.length == 1;\n}\nexports.default = isCharacterValue;\n//# sourceMappingURL=isCharacterValue.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Keys = void 0;\n/**\n * Key numbers common used keys\n */\nvar Keys;\n(function (Keys) {\n Keys[Keys[\"NULL\"] = 0] = \"NULL\";\n Keys[Keys[\"BACKSPACE\"] = 8] = \"BACKSPACE\";\n Keys[Keys[\"TAB\"] = 9] = \"TAB\";\n Keys[Keys[\"ENTER\"] = 13] = \"ENTER\";\n Keys[Keys[\"SHIFT\"] = 16] = \"SHIFT\";\n Keys[Keys[\"ESCAPE\"] = 27] = \"ESCAPE\";\n Keys[Keys[\"SPACE\"] = 32] = \"SPACE\";\n Keys[Keys[\"PAGEUP\"] = 33] = \"PAGEUP\";\n Keys[Keys[\"LEFT\"] = 37] = \"LEFT\";\n Keys[Keys[\"UP\"] = 38] = \"UP\";\n Keys[Keys[\"RIGHT\"] = 39] = \"RIGHT\";\n Keys[Keys[\"DOWN\"] = 40] = \"DOWN\";\n Keys[Keys[\"DELETE\"] = 46] = \"DELETE\";\n /**\n * @deprecated Just for backward compatibility\n */\n Keys[Keys[\"EIGHT_ASTIRISK\"] = 56] = \"EIGHT_ASTIRISK\";\n Keys[Keys[\"EIGHT_ASTERISK\"] = 56] = \"EIGHT_ASTERISK\";\n Keys[Keys[\"B\"] = 66] = \"B\";\n Keys[Keys[\"I\"] = 73] = \"I\";\n Keys[Keys[\"U\"] = 85] = \"U\";\n Keys[Keys[\"Y\"] = 89] = \"Y\";\n Keys[Keys[\"Z\"] = 90] = \"Z\";\n Keys[Keys[\"COMMA\"] = 188] = \"COMMA\";\n Keys[Keys[\"DASH_UNDERSCORE\"] = 189] = \"DASH_UNDERSCORE\";\n Keys[Keys[\"PERIOD\"] = 190] = \"PERIOD\";\n /**\n * @deprecated Just for backward compatibility\n */\n Keys[Keys[\"FORWARDSLASH\"] = 191] = \"FORWARDSLASH\";\n Keys[Keys[\"FORWARD_SLASH\"] = 191] = \"FORWARD_SLASH\";\n Keys[Keys[\"GRAVE_TILDE\"] = 192] = \"GRAVE_TILDE\";\n // Keys below are non-standard, and should be used in ContentEditFeatures only\n Keys[Keys[\"CONTENTCHANGED\"] = 257] = \"CONTENTCHANGED\";\n Keys[Keys[\"RANGE\"] = 258] = \"RANGE\";\n Keys[Keys[\"Ctrl\"] = 4096] = \"Ctrl\";\n Keys[Keys[\"Meta\"] = 8192] = \"Meta\";\n Keys[Keys[\"Shift\"] = 16384] = \"Shift\";\n})(Keys = exports.Keys || (exports.Keys = {}));\n//# sourceMappingURL=Keys.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TableOperation = void 0;\n/**\n * Operations used by editTable() API\n */\nvar TableOperation;\n(function (TableOperation) {\n /**\n * Insert a row above current row\n */\n TableOperation[TableOperation[\"InsertAbove\"] = 0] = \"InsertAbove\";\n /**\n * Insert a row below current row\n */\n TableOperation[TableOperation[\"InsertBelow\"] = 1] = \"InsertBelow\";\n /**\n * Insert a column on the left of current column\n */\n TableOperation[TableOperation[\"InsertLeft\"] = 2] = \"InsertLeft\";\n /**\n * Insert a column on the right of current column\n */\n TableOperation[TableOperation[\"InsertRight\"] = 3] = \"InsertRight\";\n /**\n * Delete the whole table\n */\n TableOperation[TableOperation[\"DeleteTable\"] = 4] = \"DeleteTable\";\n /**\n * Delete current column\n */\n TableOperation[TableOperation[\"DeleteColumn\"] = 5] = \"DeleteColumn\";\n /**\n * Delete current row\n */\n TableOperation[TableOperation[\"DeleteRow\"] = 6] = \"DeleteRow\";\n /**\n * Merge current row with the row above\n */\n TableOperation[TableOperation[\"MergeAbove\"] = 7] = \"MergeAbove\";\n /**\n * Merge current row with the row below\n */\n TableOperation[TableOperation[\"MergeBelow\"] = 8] = \"MergeBelow\";\n /**\n * Merge current column with the column on the left\n */\n TableOperation[TableOperation[\"MergeLeft\"] = 9] = \"MergeLeft\";\n /**\n * Merge current column with the column on the right\n */\n TableOperation[TableOperation[\"MergeRight\"] = 10] = \"MergeRight\";\n /**\n * Split current table cell horizontally\n */\n TableOperation[TableOperation[\"SplitHorizontally\"] = 11] = \"SplitHorizontally\";\n /**\n * Split current table cell vertically\n */\n TableOperation[TableOperation[\"SplitVertically\"] = 12] = \"SplitVertically\";\n /**\n * Align current table at the center\n */\n TableOperation[TableOperation[\"AlignCenter\"] = 13] = \"AlignCenter\";\n /**\n * Align current table at the left\n */\n TableOperation[TableOperation[\"AlignLeft\"] = 14] = \"AlignLeft\";\n /**\n * Align current table at the right\n */\n TableOperation[TableOperation[\"AlignRight\"] = 15] = \"AlignRight\";\n /**\n * Align current content table cell at the left\n */\n TableOperation[TableOperation[\"AlignCellLeft\"] = 16] = \"AlignCellLeft\";\n /**\n * Align current content table cell at the center\n */\n TableOperation[TableOperation[\"AlignCellCenter\"] = 17] = \"AlignCellCenter\";\n /**\n * Align current content table cell at the right\n */\n TableOperation[TableOperation[\"AlignCellRight\"] = 18] = \"AlignCellRight\";\n /**\n * Align current content table cell at the top\n */\n TableOperation[TableOperation[\"AlignCellTop\"] = 19] = \"AlignCellTop\";\n /**\n * Align current table cell at the middle\n */\n TableOperation[TableOperation[\"AlignCellMiddle\"] = 20] = \"AlignCellMiddle\";\n /**\n * Align current table cell at the bottom\n */\n TableOperation[TableOperation[\"AlignCellBottom\"] = 21] = \"AlignCellBottom\";\n})(TableOperation = exports.TableOperation || (exports.TableOperation = {}));\n//# sourceMappingURL=TableOperation.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar applyInlineStyle_1 = require(\"../utils/applyInlineStyle\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * Set the List Item Style when all inner inline element have the same style\n * @param editor The editor instance\n * @param styleName Name of the style to apply to the list item\n * @param formatCallback callback to apply the style to each element\n */\nfunction applyListItemStyleWrap(editor, styleName, formatCallback) {\n var parentNodes = [];\n (0, applyInlineStyle_1.default)(editor, function (element, isInnerNode) {\n formatCallback(element, isInnerNode);\n var parent = editor.getElementAtCursor('LI', element);\n if (parent && parentNodes.indexOf(parent) === -1) {\n parentNodes.push(parent);\n }\n });\n applyStyleToListItems(parentNodes, [styleName]);\n}\nexports.default = applyListItemStyleWrap;\n/**\n * @internal\n * Checks if the parent element is a List Item, if it is, apply the style elements to the list item\n * @param parentNodes parentNodes to apply the style\n * @param styles styles to apply to the List Item Element\n */\nfunction applyStyleToListItems(parentNodes, styles) {\n parentNodes.forEach(function (node) {\n if ((0, roosterjs_editor_dom_1.safeInstanceOf)(node, 'HTMLLIElement')) {\n (0, roosterjs_editor_dom_1.setListItemStyle)(node, styles);\n }\n });\n}\n//# sourceMappingURL=applyListItemWrap.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_api_1 = require(\"roosterjs-editor-api\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n// Character codes.\n// IE11 uses different character codes. which are noted below.\n// If adding a new key, test in IE to figure out what the code is.\nvar BACKSPACE_CHAR_CODE = 'Backspace';\nvar TAB_CHAR_CODE = 'Tab';\nvar ENTER_CHAR_CODE = 'Enter';\nvar ESC_CHAR_CODE = !roosterjs_editor_dom_1.Browser.isIE ? 'Escape' : 'Esc';\nvar LEFT_ARROW_CHAR_CODE = !roosterjs_editor_dom_1.Browser.isIE ? 'ArrowLeft' : 'Left';\nvar UP_ARROW_CHAR_CODE = !roosterjs_editor_dom_1.Browser.isIE ? 'ArrowUp' : 'Up';\nvar RIGHT_ARROW_CHAR_CODE = !roosterjs_editor_dom_1.Browser.isIE ? 'ArrowRight' : 'Right';\nvar DOWN_ARROW_CHAR_CODE = !roosterjs_editor_dom_1.Browser.isIE ? 'ArrowDown' : 'Down';\nvar DELETE_CHAR_CODE = !roosterjs_editor_dom_1.Browser.isIE ? 'Delete' : 'Del';\n// Input event input types.\nvar DELETE_CONTENT_BACKWARDS_INPUT_TYPE = 'deleteContentBackwards';\n// Unidentified key, the code for Android keyboard events.\nvar UNIDENTIFIED_KEY = 'Unidentified';\n// the char code for Android keyboard events on Webview below 51.\nvar UNIDENTIFIED_CODE = [0, 229];\n/**\n * PickerPlugin represents a plugin of editor which can handle picker related behaviors, including\n * - Show picker when special trigger key is pressed\n * - Hide picker\n * - Change selection in picker by Up/Down/Left/Right\n * - Apply selected item in picker\n *\n * PickerPlugin doesn't provide any UI, it just wraps related DOM events and invoke callback functions.\n * To show a picker UI, you need to build your own UI component. Please reference to\n * https://github.com/microsoft/roosterjs/tree/master/demo/scripts/controls/samplepicker\n */\nvar PickerPlugin = /** @class */ (function () {\n function PickerPlugin(dataProvider, pickerOptions) {\n this.dataProvider = dataProvider;\n this.pickerOptions = pickerOptions;\n // For detecting backspace in Android\n this.isPendingInputEventHandling = false;\n }\n /**\n * Get a friendly name\n */\n PickerPlugin.prototype.getName = function () {\n return 'Picker';\n };\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n PickerPlugin.prototype.initialize = function (editor) {\n var _this = this;\n this.editor = editor;\n this.dataProvider.onInitalize(function (htmlNode) {\n _this.editor.focus();\n var wordToReplace = _this.getWord(null);\n // Safari drops our focus out so we get an empty word to replace when we call getWord.\n // We fall back to using the lastKnownRange to try to get around this.\n if ((!wordToReplace || wordToReplace.length == 0) && _this.lastKnownRange) {\n _this.editor.select(_this.lastKnownRange);\n wordToReplace = _this.getWord(null);\n }\n var insertNode = function () {\n if (wordToReplace) {\n (0, roosterjs_editor_api_1.replaceWithNode)(_this.editor, wordToReplace, htmlNode, true /* exactMatch */);\n }\n else {\n _this.editor.insertNode(htmlNode);\n }\n _this.setIsSuggesting(false);\n };\n _this.editor.addUndoSnapshot(insertNode, _this.pickerOptions.changeSource, _this.pickerOptions.handleAutoComplete);\n }, function (isSuggesting) {\n _this.setIsSuggesting(isSuggesting);\n }, editor);\n };\n /**\n * Dispose this plugin\n */\n PickerPlugin.prototype.dispose = function () {\n this.editor = null;\n this.dataProvider.onDispose();\n };\n /**\n * Check if the plugin should handle the given event exclusively.\n * Handle an event exclusively means other plugin will not receive this event in\n * onPluginEvent method.\n * If two plugins will return true in willHandleEventExclusively() for the same event,\n * the final result depends on the order of the plugins are added into editor\n * @param event The event to check\n */\n PickerPlugin.prototype.willHandleEventExclusively = function (event) {\n return (this.isSuggesting &&\n (event.eventType == 0 /* KeyDown */ ||\n event.eventType == 2 /* KeyUp */ ||\n event.eventType == 3 /* Input */));\n };\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n PickerPlugin.prototype.onPluginEvent = function (event) {\n switch (event.eventType) {\n case 7 /* ContentChanged */:\n if (event.source == \"SetContent\" /* SetContent */ && this.dataProvider.onContentChanged) {\n // Stop suggesting since content is fully changed\n if (this.isSuggesting) {\n this.setIsSuggesting(false);\n }\n // Undo and other major changes to document content fire this type of event.\n // Inform the data provider of the current picker placed elements in the body.\n var elementIds_1 = [];\n this.editor.queryElements(\"[id^='\" + this.pickerOptions.elementIdPrefix + \"']\", function (element) {\n if (element.id) {\n elementIds_1.push(element.id);\n }\n });\n this.dataProvider.onContentChanged(elementIds_1);\n }\n break;\n case 0 /* KeyDown */:\n this.eventHandledOnKeyDown = false;\n if (this.isAndroidKeyboardEvent(event)) {\n // On Android, the key for KeyboardEvent is \"Unidentified\" or undefined,\n // so handling should be done using the input rather than key down event\n // Since the key down event happens right before the input event, calculate the input\n // length here in preparation for onAndroidInputEvent\n this.currentInputLength = this.calcInputLength(event);\n this.isPendingInputEventHandling = true;\n }\n else {\n this.onKeyDownEvent(event);\n this.isPendingInputEventHandling = false;\n }\n break;\n case 3 /* Input */:\n if (this.isPendingInputEventHandling) {\n this.onAndroidInputEvent(event);\n }\n break;\n case 2 /* KeyUp */:\n if (!this.eventHandledOnKeyDown && this.shouldHandleKeyUpEvent(event)) {\n this.onKeyUpDomEvent(event);\n this.isPendingInputEventHandling = false;\n }\n break;\n case 6 /* MouseUp */:\n if (this.isSuggesting) {\n this.setIsSuggesting(false);\n }\n break;\n case 14 /* Scroll */:\n if (this.dataProvider.onScroll) {\n // Dispatch scroll event to data provider\n this.dataProvider.onScroll(event.scrollContainer);\n }\n break;\n }\n };\n PickerPlugin.prototype.setLastKnownRange = function (range) {\n this.lastKnownRange = range;\n };\n PickerPlugin.prototype.setIsSuggesting = function (isSuggesting) {\n this.isSuggesting = isSuggesting;\n if (!isSuggesting) {\n this.setLastKnownRange(null);\n }\n this.dataProvider.onIsSuggestingChanged(isSuggesting);\n this.setAriaOwns(isSuggesting);\n this.setAriaActiveDescendant(isSuggesting ? 0 : null);\n };\n PickerPlugin.prototype.cancelDefaultKeyDownEvent = function (event) {\n this.eventHandledOnKeyDown = true;\n event.rawEvent.preventDefault();\n event.rawEvent.stopImmediatePropagation();\n };\n PickerPlugin.prototype.getIdValue = function (node) {\n var element = node;\n return element.attributes && element.attributes.getNamedItem('id')\n ? element.attributes.getNamedItem('id').value\n : null;\n };\n PickerPlugin.prototype.getWordBeforeCursor = function (event) {\n var searcher = this.editor.getContentSearcherOfCursor(event);\n return searcher ? searcher.getWordBefore() : null;\n };\n PickerPlugin.prototype.replaceNode = function (currentNode, replacementNode) {\n if (currentNode) {\n this.editor.deleteNode(currentNode);\n }\n if (replacementNode) {\n this.editor.insertNode(replacementNode);\n }\n };\n PickerPlugin.prototype.getRangeUntilAt = function (event) {\n var _this = this;\n var positionContentSearcher = this.editor.getContentSearcherOfCursor(event);\n var startPos;\n var endPos;\n positionContentSearcher.forEachTextInlineElement(function (textInline) {\n var hasMatched = false;\n var nodeContent = textInline.getTextContent();\n var nodeIndex = nodeContent ? nodeContent.length : -1;\n while (nodeIndex >= 0) {\n if (nodeContent[nodeIndex] == _this.pickerOptions.triggerCharacter) {\n startPos = textInline.getStartPosition().move(nodeIndex);\n hasMatched = true;\n break;\n }\n nodeIndex--;\n }\n if (hasMatched) {\n endPos = textInline.getEndPosition();\n }\n return hasMatched;\n });\n return (0, roosterjs_editor_dom_1.createRange)(startPos, endPos) || this.editor.getDocument().createRange();\n };\n PickerPlugin.prototype.shouldHandleKeyUpEvent = function (event) {\n // onKeyUpDomEvent should only be called when a key that produces a character value is pressed\n // This check will always fail on Android since the KeyboardEvent's key is \"Unidentified\" or undefined\n // However, we don't need to check for modifier events on mobile, so can ignore this check\n return (this.isAndroidKeyboardEvent(event) ||\n (0, roosterjs_editor_dom_1.isCharacterValue)(event.rawEvent) ||\n (this.isSuggesting && !(0, roosterjs_editor_dom_1.isModifierKey)(event.rawEvent)));\n };\n PickerPlugin.prototype.onKeyUpDomEvent = function (event) {\n if (this.isSuggesting) {\n // Word before cursor represents the text prior to the cursor, up to and including the trigger symbol.\n var wordBeforeCursor = this.getWord(event);\n var wordBeforeCursorWithoutTriggerChar = wordBeforeCursor.substring(1);\n var trimmedWordBeforeCursor = wordBeforeCursorWithoutTriggerChar.trim();\n // If we hit a case where wordBeforeCursor is just the trigger character,\n // that means we've gotten a onKeyUp event right after it's been typed.\n // Otherwise, update the query string when:\n // 1. There's an actual value\n // 2. That actual value isn't just pure whitespace\n // 3. That actual value isn't more than 4 words long (at which point we assume the person kept typing)\n // Otherwise, we want to dismiss the picker plugin's UX.\n if (wordBeforeCursor == this.pickerOptions.triggerCharacter ||\n (trimmedWordBeforeCursor &&\n trimmedWordBeforeCursor.length > 0 &&\n trimmedWordBeforeCursor.split(' ').length <= 4)) {\n this.dataProvider.queryStringUpdated(trimmedWordBeforeCursor, wordBeforeCursorWithoutTriggerChar == trimmedWordBeforeCursor);\n this.setLastKnownRange(this.editor.getSelectionRange());\n }\n else {\n this.setIsSuggesting(false);\n }\n }\n else {\n var wordBeforeCursor = this.getWordBeforeCursor(event);\n if (!this.blockSuggestions) {\n if (wordBeforeCursor != null &&\n wordBeforeCursor.split(' ').length <= 4 &&\n wordBeforeCursor[0] == this.pickerOptions.triggerCharacter) {\n this.setIsSuggesting(true);\n var wordBeforeCursorWithoutTriggerChar = wordBeforeCursor.substring(1);\n var trimmedWordBeforeCursor = wordBeforeCursorWithoutTriggerChar.trim();\n this.dataProvider.queryStringUpdated(trimmedWordBeforeCursor, wordBeforeCursorWithoutTriggerChar == trimmedWordBeforeCursor);\n this.setLastKnownRange(this.editor.getSelectionRange());\n if (this.dataProvider.setCursorPoint) {\n // Determine the bounding rectangle for the @mention\n var searcher = this.editor.getContentSearcherOfCursor(event);\n var rangeNode = this.editor.getDocument().createRange();\n var nodeBeforeCursor = searcher.getInlineElementBefore().getContainerNode();\n var rangeStartSuccessfullySet = this.setRangeStart(rangeNode, nodeBeforeCursor, wordBeforeCursor);\n if (!rangeStartSuccessfullySet) {\n // VSO 24891: Out of range error is occurring because nodeBeforeCursor\n // is not including the trigger character. In this case, the node before\n // the node before cursor is the trigger character, and this is where the range should start.\n var nodeBeforeNodeBeforeCursor = nodeBeforeCursor.previousSibling;\n this.setRangeStart(rangeNode, nodeBeforeNodeBeforeCursor, this.pickerOptions.triggerCharacter);\n }\n var rect = rangeNode.getBoundingClientRect();\n // Safari's support for range.getBoundingClientRect is incomplete.\n // We perform this check to fall back to getClientRects in case it's at the page origin.\n if (rect.left == 0 && rect.bottom == 0 && rect.top == 0) {\n rect = rangeNode.getClientRects()[0];\n }\n if (rect) {\n rangeNode.detach();\n // Display the @mention popup in the correct place\n var targetPoint = { x: rect.left, y: (rect.bottom + rect.top) / 2 };\n var bufferZone = (rect.bottom - rect.top) / 2;\n this.dataProvider.setCursorPoint(targetPoint, bufferZone);\n }\n }\n }\n }\n else {\n if (wordBeforeCursor != null &&\n wordBeforeCursor[0] != this.pickerOptions.triggerCharacter) {\n this.blockSuggestions = false;\n }\n }\n }\n };\n PickerPlugin.prototype.onKeyDownEvent = function (event) {\n var keyboardEvent = event.rawEvent;\n if (this.isSuggesting) {\n if (keyboardEvent.key == ESC_CHAR_CODE) {\n this.setIsSuggesting(false);\n this.blockSuggestions = true;\n this.cancelDefaultKeyDownEvent(event);\n }\n else if (keyboardEvent.key == BACKSPACE_CHAR_CODE) {\n // #483: If we are backspacing over the trigger character that triggered this Picker\n // then we need to hide the Picker\n var wordBeforeCursor = this.getWord(event);\n if (wordBeforeCursor == this.pickerOptions.triggerCharacter) {\n this.setIsSuggesting(false);\n }\n }\n else if (this.dataProvider.shiftHighlight &&\n (this.pickerOptions.isHorizontal\n ? keyboardEvent.key == LEFT_ARROW_CHAR_CODE ||\n keyboardEvent.key == RIGHT_ARROW_CHAR_CODE\n : keyboardEvent.key == UP_ARROW_CHAR_CODE ||\n keyboardEvent.key == DOWN_ARROW_CHAR_CODE)) {\n this.dataProvider.shiftHighlight(this.pickerOptions.isHorizontal\n ? keyboardEvent.key == RIGHT_ARROW_CHAR_CODE\n : keyboardEvent.key == DOWN_ARROW_CHAR_CODE);\n if (this.dataProvider.getSelectedIndex) {\n this.setAriaActiveDescendant(this.dataProvider.getSelectedIndex());\n }\n this.cancelDefaultKeyDownEvent(event);\n }\n else if (this.dataProvider.selectOption &&\n (keyboardEvent.key == ENTER_CHAR_CODE || keyboardEvent.key == TAB_CHAR_CODE)) {\n this.dataProvider.selectOption();\n this.cancelDefaultKeyDownEvent(event);\n }\n else {\n // Currently no op.\n }\n }\n else {\n if (keyboardEvent.key == BACKSPACE_CHAR_CODE) {\n var nodeRemoved = this.tryRemoveNode(event);\n if (nodeRemoved) {\n this.cancelDefaultKeyDownEvent(event);\n }\n }\n else if (keyboardEvent.key == DELETE_CHAR_CODE) {\n var searcher = this.editor.getContentSearcherOfCursor(event);\n var nodeAfterCursor = searcher.getInlineElementAfter()\n ? searcher.getInlineElementAfter().getContainerNode()\n : null;\n var nodeId = nodeAfterCursor ? this.getIdValue(nodeAfterCursor) : null;\n if (nodeId && nodeId.indexOf(this.pickerOptions.elementIdPrefix) == 0) {\n var replacementNode = this.dataProvider.onRemove(nodeAfterCursor, false);\n this.replaceNode(nodeAfterCursor, replacementNode);\n this.cancelDefaultKeyDownEvent(event);\n }\n }\n }\n };\n PickerPlugin.prototype.onAndroidInputEvent = function (event) {\n this.newInputLength = this.calcInputLength(event);\n if (this.newInputLength < this.currentInputLength ||\n event.rawEvent.inputType === DELETE_CONTENT_BACKWARDS_INPUT_TYPE) {\n var nodeRemoved = this.tryRemoveNode(event);\n if (nodeRemoved) {\n this.eventHandledOnKeyDown = true;\n }\n }\n };\n PickerPlugin.prototype.calcInputLength = function (event) {\n var wordBeforeCursor = this.getInlineElementBeforeCursor(event);\n return wordBeforeCursor ? wordBeforeCursor.length : 0;\n };\n PickerPlugin.prototype.tryRemoveNode = function (event) {\n var searcher = this.editor.getContentSearcherOfCursor(event);\n var inlineElementBefore = searcher.getInlineElementBefore();\n var nodeBeforeCursor = inlineElementBefore\n ? inlineElementBefore.getContainerNode()\n : null;\n var nodeId = nodeBeforeCursor ? this.getIdValue(nodeBeforeCursor) : null;\n var inlineElementAfter = searcher.getInlineElementAfter();\n if (nodeId &&\n nodeId.indexOf(this.pickerOptions.elementIdPrefix) == 0 &&\n (inlineElementAfter == null || !(inlineElementAfter instanceof roosterjs_editor_dom_1.PartialInlineElement))) {\n var replacementNode_1 = this.dataProvider.onRemove(nodeBeforeCursor, true);\n if (replacementNode_1) {\n this.replaceNode(nodeBeforeCursor, replacementNode_1);\n if (this.isPendingInputEventHandling) {\n this.editor.runAsync(function (editor) {\n editor.select(replacementNode_1, -3 /* After */);\n });\n }\n else {\n this.editor.select(replacementNode_1, -3 /* After */);\n }\n }\n else {\n this.editor.deleteNode(nodeBeforeCursor);\n }\n return true;\n }\n return false;\n };\n PickerPlugin.prototype.getWord = function (event) {\n var wordFromRange = this.getRangeUntilAt(event).toString();\n var wordFromCache = this.getWordBeforeCursor(event);\n // VSO 24891: In picker, trigger and mention are separated into two nodes.\n // In this case, wordFromRange is the trigger character while wordFromCache is the whole string,\n // so wordFromCache is what we want to return.\n if (wordFromRange == this.pickerOptions.triggerCharacter &&\n wordFromRange != wordFromCache) {\n return wordFromCache;\n }\n return wordFromRange;\n };\n PickerPlugin.prototype.setRangeStart = function (rangeNode, node, target) {\n var nodeOffset = node ? node.textContent.lastIndexOf(target) : -1;\n if (nodeOffset > -1) {\n rangeNode.setStart(node, nodeOffset);\n return true;\n }\n return false;\n };\n PickerPlugin.prototype.setAriaOwns = function (isSuggesting) {\n this.editor.setEditorDomAttribute('aria-owns', isSuggesting && this.pickerOptions.suggestionsLabel\n ? this.pickerOptions.suggestionsLabel\n : null);\n };\n PickerPlugin.prototype.setAriaActiveDescendant = function (selectedIndex) {\n this.editor.setEditorDomAttribute('aria-activedescendant', selectedIndex != null && this.pickerOptions.suggestionLabelPrefix\n ? this.pickerOptions.suggestionLabelPrefix + selectedIndex.toString()\n : null);\n };\n PickerPlugin.prototype.getInlineElementBeforeCursor = function (event) {\n var searcher = this.editor.getContentSearcherOfCursor(event);\n var element = searcher ? searcher.getInlineElementBefore() : null;\n return element ? element.getTextContent() : null;\n };\n PickerPlugin.prototype.isAndroidKeyboardEvent = function (event) {\n // Check keyboard events on Android for further handling.\n // On Android Webview later 51, the KeyboardEvent's key is \"Unidentified\".\n // On Android Webview below 51, the KeyboardEvent's key is not supported and always returns undefined,\n // so using the charCode property, which is 0 or 229.\n return (event.rawEvent.key == UNIDENTIFIED_KEY ||\n (event.rawEvent.key == undefined &&\n UNIDENTIFIED_CODE.indexOf(event.rawEvent.charCode) > -1));\n };\n return PickerPlugin;\n}());\nexports.default = PickerPlugin;\n//# sourceMappingURL=PickerPlugin.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.QueryScope = void 0;\n/**\n * Query scope for queryElements() API\n */\nvar QueryScope;\n(function (QueryScope) {\n /**\n * Query from the whole body of root node. This is default value.\n */\n QueryScope[QueryScope[\"Body\"] = 0] = \"Body\";\n /**\n * Query elements on a given selection (intersect)\n * The result element can contain the selection, contain part of selection, or inside selection\n */\n QueryScope[QueryScope[\"OnSelection\"] = 1] = \"OnSelection\";\n /**\n * Query elements inside a given selection only\n */\n QueryScope[QueryScope[\"InSelection\"] = 2] = \"InSelection\";\n})(QueryScope = exports.QueryScope || (exports.QueryScope = {}));\n//# sourceMappingURL=QueryScope.js.map","\"use strict\";\nvar _a, _b;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar CONTENT_EDITABLE_ATTRIBUTE_NAME = 'contenteditable';\nvar COMMANDS = roosterjs_editor_dom_1.Browser.isFirefox\n ? (_a = {},\n /**\n * Disable these object resizing for firefox since other browsers don't have these behaviors\n */\n _a[\"enableObjectResizing\" /* EnableObjectResizing */] = false,\n _a[\"enableInlineTableEditing\" /* EnableInlineTableEditing */] = false,\n _a) : roosterjs_editor_dom_1.Browser.isIE\n ? (_b = {},\n /**\n * Change the default paragraph separator to DIV. This is mainly for IE since its default setting is P\n */\n _b[\"defaultParagraphSeparator\" /* DefaultParagraphSeparator */] = 'div',\n /**\n * Disable auto link feature in IE since we have our own implementation\n */\n _b[\"AutoUrlDetect\" /* AutoUrlDetect */] = false,\n _b) : {};\nvar DARK_MODE_DEFAULT_FORMAT = {\n backgroundColors: {\n darkModeColor: 'rgb(51,51,51)',\n lightModeColor: 'rgb(255,255,255)',\n },\n textColors: {\n darkModeColor: 'rgb(255,255,255)',\n lightModeColor: 'rgb(0,0,0)',\n },\n};\n/**\n * @internal\n * Lifecycle plugin handles editor initialization and disposing\n */\nvar LifecyclePlugin = /** @class */ (function () {\n /**\n * Construct a new instance of LifecyclePlugin\n * @param options The editor options\n * @param contentDiv The editor content DIV\n */\n function LifecyclePlugin(options, contentDiv) {\n var _this = this;\n this.initialContent = options.initialContent || contentDiv.innerHTML || '';\n this.contentDivFormat = (0, roosterjs_editor_dom_1.getComputedStyles)(contentDiv);\n // Make the container editable and set its selection styles\n if (contentDiv.getAttribute(CONTENT_EDITABLE_ATTRIBUTE_NAME) === null) {\n this.initializer = function () {\n contentDiv.contentEditable = 'true';\n contentDiv.style.userSelect = 'text';\n contentDiv.style.webkitUserSelect = 'text';\n };\n this.disposer = function () {\n contentDiv.style.userSelect = '';\n contentDiv.style.webkitUserSelect = '';\n contentDiv.removeAttribute(CONTENT_EDITABLE_ATTRIBUTE_NAME);\n };\n }\n this.adjustColor = options.doNotAdjustEditorColor\n ? function () { }\n : function () {\n var textColors = DARK_MODE_DEFAULT_FORMAT.textColors, backgroundColors = DARK_MODE_DEFAULT_FORMAT.backgroundColors;\n var isDarkMode = _this.state.isDarkMode;\n (0, roosterjs_editor_dom_1.setColor)(contentDiv, textColors, false /*isBackground*/, isDarkMode);\n (0, roosterjs_editor_dom_1.setColor)(contentDiv, backgroundColors, true /*isBackground*/, isDarkMode);\n };\n this.state = {\n customData: {},\n defaultFormat: options.defaultFormat || null,\n isDarkMode: !!options.inDarkMode,\n getDarkColor: options.getDarkColor || (function (color) { return color; }),\n onExternalContentTransform: options.onExternalContentTransform,\n experimentalFeatures: options.experimentalFeatures || [],\n shadowEditFragment: null,\n shadowEditSelectionPath: null,\n shadowEditTableSelectionPath: null,\n };\n }\n /**\n * Get a friendly name of this plugin\n */\n LifecyclePlugin.prototype.getName = function () {\n return 'Lifecycle';\n };\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n LifecyclePlugin.prototype.initialize = function (editor) {\n var _a;\n this.editor = editor;\n // Calculate default format\n this.recalculateDefaultFormat();\n // Ensure initial content and its format\n this.editor.setContent(this.initialContent, false /*triggerContentChangedEvent*/);\n // Set content DIV to be editable\n (_a = this.initializer) === null || _a === void 0 ? void 0 : _a.call(this);\n // Set editor background color for dark mode\n this.adjustColor();\n // Do proper change for browsers to disable some browser-specified behaviors.\n this.adjustBrowserBehavior();\n // Let other plugins know that we are ready\n this.editor.triggerPluginEvent(11 /* EditorReady */, {}, true /*broadcast*/);\n };\n /**\n * Dispose this plugin\n */\n LifecyclePlugin.prototype.dispose = function () {\n var _this = this;\n this.editor.triggerPluginEvent(12 /* BeforeDispose */, {}, true /*broadcast*/);\n Object.keys(this.state.customData).forEach(function (key) {\n var data = _this.state.customData[key];\n if (data && data.disposer) {\n data.disposer(data.value);\n }\n delete _this.state.customData[key];\n });\n if (this.disposer) {\n this.disposer();\n this.disposer = null;\n this.initializer = null;\n }\n this.editor = null;\n };\n /**\n * Get plugin state object\n */\n LifecyclePlugin.prototype.getState = function () {\n return this.state;\n };\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n LifecyclePlugin.prototype.onPluginEvent = function (event) {\n if (event.eventType == 7 /* ContentChanged */ &&\n (event.source == \"SwitchToDarkMode\" /* SwitchToDarkMode */ ||\n event.source == \"SwitchToLightMode\" /* SwitchToLightMode */)) {\n this.state.isDarkMode = event.source == \"SwitchToDarkMode\" /* SwitchToDarkMode */;\n this.recalculateDefaultFormat();\n this.adjustColor();\n }\n };\n LifecyclePlugin.prototype.adjustBrowserBehavior = function () {\n var _this = this;\n Object.keys(COMMANDS).forEach(function (command) {\n // Catch any possible exception since this should not block the initialization of editor\n try {\n _this.editor.getDocument().execCommand(command, false, COMMANDS[command]);\n }\n catch (_a) { }\n });\n };\n LifecyclePlugin.prototype.recalculateDefaultFormat = function () {\n var _a = this.state, baseFormat = _a.defaultFormat, isDarkMode = _a.isDarkMode;\n if (isDarkMode && baseFormat) {\n if (!baseFormat.backgroundColors) {\n baseFormat.backgroundColors = DARK_MODE_DEFAULT_FORMAT.backgroundColors;\n }\n if (!baseFormat.textColors) {\n baseFormat.textColors = DARK_MODE_DEFAULT_FORMAT.textColors;\n }\n }\n if (baseFormat && Object.keys(baseFormat).length === 0) {\n return;\n }\n var _b = baseFormat || {}, fontFamily = _b.fontFamily, fontSize = _b.fontSize, textColor = _b.textColor, textColors = _b.textColors, backgroundColor = _b.backgroundColor, backgroundColors = _b.backgroundColors, bold = _b.bold, italic = _b.italic, underline = _b.underline;\n var defaultFormat = this.contentDivFormat;\n this.state.defaultFormat = {\n fontFamily: fontFamily || defaultFormat[0],\n fontSize: fontSize || defaultFormat[1],\n get textColor() {\n return textColors\n ? isDarkMode\n ? textColors.darkModeColor\n : textColors.lightModeColor\n : textColor || defaultFormat[2];\n },\n textColors: textColors,\n get backgroundColor() {\n return backgroundColors\n ? isDarkMode\n ? backgroundColors.darkModeColor\n : backgroundColors.lightModeColor\n : backgroundColor || '';\n },\n backgroundColors: backgroundColors,\n bold: bold,\n italic: italic,\n underline: underline,\n };\n };\n return LifecyclePlugin;\n}());\nexports.default = LifecyclePlugin;\n//# sourceMappingURL=LifecyclePlugin.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.collapse = void 0;\nvar contains_1 = require(\"./contains\");\nvar splitParentNode_1 = require(\"./splitParentNode\");\nvar toArray_1 = require(\"./toArray\");\n/**\n * Collapse nodes within the given start and end nodes to their common ancestor node,\n * split parent nodes if necessary\n * @param root The root node of the scope\n * @param start The start node\n * @param end The end node\n * @param canSplitParent True to allow split parent node there are nodes before start or after end under the same parent\n * and the returned nodes will be all nodes from start through end after splitting\n * False to disallow split parent\n * @returns When canSplitParent is true, returns all node from start through end after splitting,\n * otherwise just return start and end\n */\nfunction collapseNodes(root, start, end, canSplitParent) {\n var _a;\n if (!(0, contains_1.default)(root, start) || !(0, contains_1.default)(root, end)) {\n return [];\n }\n start = collapse(root, start, end, true /*isStart*/, canSplitParent);\n end = collapse(root, end, start, false /*isStart*/, canSplitParent);\n if ((0, contains_1.default)(start, end, true /*treatSameNodeAsContain*/)) {\n return [start];\n }\n else if ((0, contains_1.default)(end, start)) {\n return [end];\n }\n else if (start.parentNode == end.parentNode) {\n var nodes = start.parentNode ? (0, toArray_1.default)((_a = start.parentNode) === null || _a === void 0 ? void 0 : _a.childNodes) : [];\n var startIndex = nodes.indexOf(start);\n var endIndex = nodes.indexOf(end);\n return nodes.slice(startIndex, endIndex + 1);\n }\n else {\n return [start, end];\n }\n}\nexports.default = collapseNodes;\n/**\n * @internal\n * Collapse a node by traversing its parent nodes until we get the common ancestor node of node and ref node\n * @param root Root node, traversing will be limited under this scope\n * @param node The node to collapse\n * @param ref Ref node. The result will be the nearest common ancestor node of the given node and this ref node\n * @param isStart Whether the given node is start of the sequence of nodes to collapse\n * @param canSplitParent Whether splitting parent node is allowed\n * @returns The common ancestor node of the given node ref node\n */\nfunction collapse(root, node, ref, isStart, canSplitParent) {\n while (node.parentNode != root && !(0, contains_1.default)(node.parentNode, ref)) {\n if ((isStart && node.previousSibling) || (!isStart && node.nextSibling)) {\n if (!canSplitParent) {\n break;\n }\n (0, splitParentNode_1.default)(node, isStart);\n }\n if (!node.parentNode) {\n break;\n }\n node = node.parentNode;\n }\n return node;\n}\nexports.collapse = collapse;\n//# sourceMappingURL=collapseNodes.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CustomReplace = void 0;\nvar CustomReplace_1 = require(\"./CustomReplace\");\nObject.defineProperty(exports, \"CustomReplace\", { enumerable: true, get: function () { return CustomReplace_1.default; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AutoLinkFeatures = void 0;\nvar roosterjs_editor_api_1 = require(\"roosterjs-editor-api\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * When user type, they may end a link with a punctuation, i.e. www.bing.com;\n * we need to trim off the trailing punctuation before turning it to link match\n */\nvar TRAILING_PUNCTUATION_REGEX = /[.+=\\s:;\"',>]+$/i;\nvar MINIMUM_LENGTH = 5;\n/**\n * AutoLink edit feature, provides the ability to automatically convert text user typed or pasted\n * in hyperlink format into a real hyperlink\n */\nvar AutoLink = {\n keys: [13 /* ENTER */, 32 /* SPACE */, 257 /* CONTENTCHANGED */],\n shouldHandleEvent: cacheGetLinkData,\n handleEvent: autoLink,\n};\n/**\n * UnlinkWhenBackspaceAfterLink edit feature, provides the ability to convert a hyperlink back into text\n * if user presses BACKSPACE right after a hyperlink\n */\nvar UnlinkWhenBackspaceAfterLink = {\n keys: [8 /* BACKSPACE */],\n shouldHandleEvent: hasLinkBeforeCursor,\n handleEvent: function (event, editor) {\n event.rawEvent.preventDefault();\n (0, roosterjs_editor_api_1.removeLink)(editor);\n },\n defaultDisabled: true,\n};\nfunction cacheGetLinkData(event, editor) {\n return event.eventType == 0 /* KeyDown */ ||\n (event.eventType == 7 /* ContentChanged */ && event.source == \"Paste\" /* Paste */)\n ? (0, roosterjs_editor_dom_1.cacheGetEventData)(event, 'LINK_DATA', function () {\n // First try to match link from the whole paste string from the plain text in clipboard.\n // This helps when we paste a link next to some existing character, and the text we got\n // from clipboard will only contain what we pasted, any existing characters will not\n // be included.\n var clipboardData = event.eventType == 7 /* ContentChanged */ &&\n event.source == \"Paste\" /* Paste */ &&\n event.data;\n var link = (0, roosterjs_editor_dom_1.matchLink)((clipboardData.text || '').trim());\n var searcher = editor.getContentSearcherOfCursor(event);\n // In case the matched link is already inside a
              tag, we do a range search.\n // getRangeFromText will return null if the given text is already in a LinkInlineElement\n if (link && searcher.getRangeFromText(link.originalUrl, false /*exactMatch*/)) {\n return link;\n }\n var word = searcher && searcher.getWordBefore();\n if (word && word.length > MINIMUM_LENGTH) {\n // Check for trailing punctuation\n var trailingPunctuations = word.match(TRAILING_PUNCTUATION_REGEX);\n var trailingPunctuation = (trailingPunctuations || [])[0] || '';\n var candidate_1 = word.substring(0, word.length - trailingPunctuation.length);\n // Do special handling for ')', '}', ']'\n ['()', '{}', '[]'].forEach(function (str) {\n if (candidate_1[candidate_1.length - 1] == str[1] &&\n candidate_1.indexOf(str[0]) < 0) {\n candidate_1 = candidate_1.substr(0, candidate_1.length - 1);\n }\n });\n // Match and replace in editor\n return (0, roosterjs_editor_dom_1.matchLink)(candidate_1);\n }\n return null;\n })\n : null;\n}\nfunction hasLinkBeforeCursor(event, editor) {\n var contentSearcher = editor.getContentSearcherOfCursor(event);\n var inline = contentSearcher.getInlineElementBefore();\n return inline instanceof roosterjs_editor_dom_1.LinkInlineElement;\n}\nfunction autoLink(event, editor) {\n var anchor = editor.getDocument().createElement('a');\n var linkData = cacheGetLinkData(event, editor);\n // Need to get searcher before we enter the async callback since the callback can happen when cursor is moved to next line\n // and at that time a new searcher won't be able to find the link text to replace\n var searcher = editor.getContentSearcherOfCursor();\n anchor.textContent = linkData.originalUrl;\n anchor.href = linkData.normalizedUrl;\n editor.runAsync(function (editor) {\n editor.addUndoSnapshot(function () {\n (0, roosterjs_editor_api_1.replaceWithNode)(editor, linkData.originalUrl, anchor, false /* exactMatch */, searcher);\n // The content at cursor has changed. Should also clear the cursor data cache\n (0, roosterjs_editor_dom_1.clearEventDataCache)(event);\n return anchor;\n }, \"AutoLink\" /* AutoLink */, true /*canUndoByBackspace*/);\n });\n}\n/**\n * @internal\n */\nexports.AutoLinkFeatures = {\n autoLink: AutoLink,\n unlinkWhenBackspaceAfterLink: UnlinkWhenBackspaceAfterLink,\n};\n//# sourceMappingURL=autoLinkFeatures.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar NodeInlineElement_1 = require(\"./NodeInlineElement\");\n/**\n * This is inline element presenting an html hyperlink\n */\nvar LinkInlineElement = /** @class */ (function (_super) {\n __extends(LinkInlineElement, _super);\n function LinkInlineElement(containerNode, parentBlock) {\n return _super.call(this, containerNode, parentBlock) || this;\n }\n return LinkInlineElement;\n}(NodeInlineElement_1.default));\nexports.default = LinkInlineElement;\n//# sourceMappingURL=LinkInlineElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar applyTextStyle_1 = require(\"./applyTextStyle\");\nvar isNodeAfter_1 = require(\"../utils/isNodeAfter\");\nvar Position_1 = require(\"../selection/Position\");\n/**\n * This presents an inline element that can be represented by a single html node.\n * This serves as base for most inline element as it contains most implementation\n * of all operations that can happen on an inline element. Other sub inline elements mostly\n * just identify themselves for a certain type\n */\nvar NodeInlineElement = /** @class */ (function () {\n function NodeInlineElement(containerNode, parentBlock) {\n this.containerNode = containerNode;\n this.parentBlock = parentBlock;\n }\n /**\n * The text content for this inline element\n */\n NodeInlineElement.prototype.getTextContent = function () {\n // nodeValue is better way to retrieve content for a text. Others, just use textContent\n return this.containerNode.nodeType == 3 /* Text */\n ? this.containerNode.nodeValue\n : this.containerNode.textContent;\n };\n /**\n * Get the container node\n */\n NodeInlineElement.prototype.getContainerNode = function () {\n return this.containerNode;\n };\n // Get the parent block\n NodeInlineElement.prototype.getParentBlock = function () {\n return this.parentBlock;\n };\n /**\n * Get the start position of the inline element\n */\n NodeInlineElement.prototype.getStartPosition = function () {\n // For a position, we always want it to point to a leaf node\n // We should try to go get the lowest first child node from the container\n return new Position_1.default(this.containerNode, 0).normalize();\n };\n /**\n * Get the end position of the inline element\n */\n NodeInlineElement.prototype.getEndPosition = function () {\n // For a position, we always want it to point to a leaf node\n // We should try to go get the lowest last child node from the container\n return new Position_1.default(this.containerNode, -1 /* End */).normalize();\n };\n /**\n * Checks if this inline element is a textual inline element\n */\n NodeInlineElement.prototype.isTextualInlineElement = function () {\n return this.containerNode && this.containerNode.nodeType == 3 /* Text */;\n };\n /**\n * Checks if an inline element is after the current inline element\n */\n NodeInlineElement.prototype.isAfter = function (inlineElement) {\n return inlineElement && (0, isNodeAfter_1.default)(this.containerNode, inlineElement.getContainerNode());\n };\n /**\n * Checks if the given position is contained in the inline element\n */\n NodeInlineElement.prototype.contains = function (pos) {\n var start = this.getStartPosition();\n var end = this.getEndPosition();\n return pos && pos.isAfter(start) && end.isAfter(pos);\n };\n /**\n * Apply inline style to an inline element\n */\n NodeInlineElement.prototype.applyStyle = function (styler) {\n (0, applyTextStyle_1.default)(this.containerNode, styler);\n };\n return NodeInlineElement;\n}());\nexports.default = NodeInlineElement;\n//# sourceMappingURL=NodeInlineElement.js.map","\"use strict\";\nvar _a, _b;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.transformColor = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\nvar ColorAttributeEnum;\n(function (ColorAttributeEnum) {\n ColorAttributeEnum[ColorAttributeEnum[\"CssColor\"] = 0] = \"CssColor\";\n ColorAttributeEnum[ColorAttributeEnum[\"HtmlColor\"] = 1] = \"HtmlColor\";\n ColorAttributeEnum[ColorAttributeEnum[\"CssDataSet\"] = 2] = \"CssDataSet\";\n ColorAttributeEnum[ColorAttributeEnum[\"HtmlDataSet\"] = 3] = \"HtmlDataSet\";\n})(ColorAttributeEnum || (ColorAttributeEnum = {}));\nvar ColorAttributeName = [\n (_a = {},\n _a[0 /* CssColor */] = 'color',\n _a[1 /* HtmlColor */] = 'color',\n _a[2 /* CssDataSet */] = \"ogsc\" /* OriginalStyleColor */,\n _a[3 /* HtmlDataSet */] = \"ogac\" /* OriginalAttributeColor */,\n _a),\n (_b = {},\n _b[0 /* CssColor */] = 'background-color',\n _b[1 /* HtmlColor */] = 'bgcolor',\n _b[2 /* CssDataSet */] = \"ogsb\" /* OriginalStyleBackgroundColor */,\n _b[3 /* HtmlDataSet */] = \"ogab\" /* OriginalAttributeBackgroundColor */,\n _b),\n];\n/**\n * @internal\n * Edit and transform color of elements between light mode and dark mode\n * @param core The EditorCore object\n * @param rootNode The root HTML elements to transform\n * @param includeSelf True to transform the root node as well, otherwise false\n * @param callback The callback function to invoke before do color transformation\n * @param direction To specify the transform direction, light to dark, or dark to light\n */\nvar transformColor = function (core, rootNode, includeSelf, callback, direction) {\n var elementsToTransform = core.lifecycle.isDarkMode ? getAll(rootNode, includeSelf) : [];\n var transformFunction = direction == 1 /* DarkToLight */\n ? transformToLightMode\n : core.lifecycle.onExternalContentTransform ||\n (function (element) { return transformToDarkMode(element, core.lifecycle.getDarkColor); });\n callback === null || callback === void 0 ? void 0 : callback();\n elementsToTransform.forEach(function (element) { return (element === null || element === void 0 ? void 0 : element.dataset) && element.style && transformFunction(element); });\n};\nexports.transformColor = transformColor;\nfunction transformToLightMode(element) {\n ColorAttributeName.forEach(function (names) {\n // Reset color styles based on the content of the ogsc/ogsb data element.\n // If those data properties are empty or do not exist, set them anyway to clear the content.\n element.style.setProperty(names[0 /* CssColor */], getValueOrDefault(element.dataset[names[2 /* CssDataSet */]], ''));\n delete element.dataset[names[2 /* CssDataSet */]];\n // Some elements might have set attribute colors. We need to reset these as well.\n var value = element.dataset[names[3 /* HtmlDataSet */]];\n if (getValueOrDefault(value, null)) {\n element.setAttribute(names[1 /* HtmlColor */], value);\n }\n else {\n element.removeAttribute(names[1 /* HtmlColor */]);\n }\n delete element.dataset[names[3 /* HtmlDataSet */]];\n });\n}\nfunction transformToDarkMode(element, getDarkColor) {\n var computedValues = (0, roosterjs_editor_dom_1.getComputedStyles)(element, ['color', 'background-color']);\n ColorAttributeName.forEach(function (names, index) {\n var styleColor = element.style.getPropertyValue(names[0 /* CssColor */]);\n var attrColor = element.getAttribute(names[1 /* HtmlColor */]);\n if (!element.dataset[names[2 /* CssDataSet */]] &&\n !element.dataset[names[3 /* HtmlDataSet */]] &&\n (styleColor || attrColor) &&\n styleColor != 'inherit' // For inherit style, no need to change it and let it keep inherit from parent element\n ) {\n var newColor = getDarkColor(computedValues[index] || styleColor || attrColor);\n element.style.setProperty(names[0 /* CssColor */], newColor, 'important');\n element.dataset[names[2 /* CssDataSet */]] = styleColor || '';\n if (attrColor) {\n element.setAttribute(names[1 /* HtmlColor */], newColor);\n element.dataset[names[3 /* HtmlDataSet */]] = attrColor;\n }\n }\n });\n}\nfunction getValueOrDefault(value, defaultValue) {\n return value && value != 'undefined' && value != 'null' ? value : defaultValue;\n}\nfunction getAll(rootNode, includeSelf) {\n var result = [];\n if ((0, roosterjs_editor_dom_1.safeInstanceOf)(rootNode, 'HTMLElement')) {\n if (includeSelf) {\n result.push(rootNode);\n }\n var allChildren = rootNode.getElementsByTagName('*');\n (0, roosterjs_editor_dom_1.arrayPush)(result, (0, roosterjs_editor_dom_1.toArray)(allChildren));\n }\n else if ((0, roosterjs_editor_dom_1.safeInstanceOf)(rootNode, 'DocumentFragment')) {\n var allChildren = rootNode.querySelectorAll('*');\n (0, roosterjs_editor_dom_1.arrayPush)(result, (0, roosterjs_editor_dom_1.toArray)(allChildren));\n }\n return result;\n}\n//# sourceMappingURL=transformColor.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./plugins/TableCellSelection/index\"), exports);\n//# sourceMappingURL=TableCellSelection.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getSelectionRangeEx = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * @internal\n * Get current or cached selection range\n * @param core The EditorCore object\n * @returns A Range object of the selection range\n */\nvar getSelectionRangeEx = function (core) {\n var _a, _b;\n var result = null;\n if (core.lifecycle.shadowEditFragment) {\n var _c = core.lifecycle, shadowEditTableSelectionPath = _c.shadowEditTableSelectionPath, shadowEditSelectionPath = _c.shadowEditSelectionPath;\n if ((shadowEditTableSelectionPath === null || shadowEditTableSelectionPath === void 0 ? void 0 : shadowEditTableSelectionPath.length) > 0) {\n var ranges = core.lifecycle.shadowEditTableSelectionPath.map(function (path) {\n return (0, roosterjs_editor_dom_1.createRange)(core.contentDiv, path.start, path.end);\n });\n return {\n type: 1 /* TableSelection */,\n ranges: ranges,\n areAllCollapsed: checkAllCollapsed(ranges),\n table: (0, roosterjs_editor_dom_1.findClosestElementAncestor)(ranges[0].startContainer, core.contentDiv, 'table'),\n coordinates: null,\n };\n }\n else {\n var shadowRange = shadowEditSelectionPath &&\n (0, roosterjs_editor_dom_1.createRange)(core.contentDiv, shadowEditSelectionPath.start, shadowEditSelectionPath.end);\n return createNormalSelectionEx(shadowRange ? [shadowRange] : []);\n }\n }\n else {\n if (core.api.hasFocus(core)) {\n if (core.domEvent.tableSelectionRange) {\n return core.domEvent.tableSelectionRange;\n }\n var selection = (_a = core.contentDiv.ownerDocument.defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();\n if (!result && selection && selection.rangeCount > 0) {\n var range = selection.getRangeAt(0);\n if ((0, roosterjs_editor_dom_1.contains)(core.contentDiv, range)) {\n return createNormalSelectionEx([range]);\n }\n }\n }\n return ((_b = core.domEvent.tableSelectionRange) !== null && _b !== void 0 ? _b : createNormalSelectionEx(core.domEvent.selectionRange ? [core.domEvent.selectionRange] : []));\n }\n};\nexports.getSelectionRangeEx = getSelectionRangeEx;\nfunction createNormalSelectionEx(ranges) {\n return {\n type: 0 /* Normal */,\n ranges: ranges,\n areAllCollapsed: checkAllCollapsed(ranges),\n };\n}\nfunction checkAllCollapsed(ranges) {\n return ranges.filter(function (range) { return range === null || range === void 0 ? void 0 : range.collapsed; }).length == ranges.length;\n}\n//# sourceMappingURL=getSelectionRangeEx.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.saveTableInfo = exports.getTableFormatInfo = void 0;\nvar TABLE_STYLE_INFO = 'roosterTableInfo';\n/**\n * @internal\n * Get the format info of a table\n * If the table does not have a info saved, it will be retrieved from the css styles\n * @param table The table that has the info\n */\nfunction getTableFormatInfo(table) {\n var obj = safeParseJSON(table === null || table === void 0 ? void 0 : table.dataset[TABLE_STYLE_INFO]);\n return checkIfTableFormatIsValid(obj) ? obj : null;\n}\nexports.getTableFormatInfo = getTableFormatInfo;\n/**\n * @internal\n * Save the format info of a table\n * @param table The table the info will be saved\n * @param format The format of the table\n */\nfunction saveTableInfo(table, format) {\n if (table && format) {\n table.dataset[TABLE_STYLE_INFO] = JSON.stringify(format);\n }\n}\nexports.saveTableInfo = saveTableInfo;\nfunction checkIfTableFormatIsValid(format) {\n if (!format) {\n return false;\n }\n var topBorderColor = format.topBorderColor, verticalBorderColor = format.verticalBorderColor, bottomBorderColor = format.bottomBorderColor, bgColorOdd = format.bgColorOdd, bgColorEven = format.bgColorEven, hasBandedColumns = format.hasBandedColumns, hasBandedRows = format.hasBandedRows, hasFirstColumn = format.hasFirstColumn, hasHeaderRow = format.hasHeaderRow, tableBorderFormat = format.tableBorderFormat;\n var colorsValues = [\n topBorderColor,\n verticalBorderColor,\n bottomBorderColor,\n bgColorOdd,\n bgColorEven,\n ];\n var stateValues = [hasBandedColumns, hasBandedRows, hasFirstColumn, hasHeaderRow];\n if (colorsValues.some(function (key) { return !isAValidColor(key); }) ||\n stateValues.some(function (key) { return !isBoolean(key); }) ||\n !isAValidTableBorderType(tableBorderFormat)) {\n return false;\n }\n return true;\n}\nfunction isAValidColor(color) {\n if (color === null || color === undefined || typeof color === 'string') {\n return true;\n }\n return false;\n}\nfunction isBoolean(a) {\n if (typeof a === 'boolean') {\n return true;\n }\n return false;\n}\nfunction isAValidTableBorderType(border) {\n if (-1 < border && border < 8) {\n return true;\n }\n return false;\n}\nfunction safeParseJSON(json) {\n if (!json) {\n return null;\n }\n try {\n return JSON.parse(json);\n }\n catch (_a) {\n return null;\n }\n}\n//# sourceMappingURL=tableFormatInfo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Browser_1 = require(\"../utils/Browser\");\n/**\n * Add the given range into selection of the given document\n * @param range The range to select\n * @param skipSameRange When set to true, do nothing if the given range is the same with current selection,\n * otherwise it will always remove current selection range and set to the given one.\n * This parameter is always treat as true in Edge to avoid some weird runtime exception.\n */\nfunction addRangeToSelection(range, skipSameRange) {\n var _a, _b, _c;\n var selection = (_c = (_b = (_a = range === null || range === void 0 ? void 0 : range.commonAncestorContainer) === null || _a === void 0 ? void 0 : _a.ownerDocument) === null || _b === void 0 ? void 0 : _b.defaultView) === null || _c === void 0 ? void 0 : _c.getSelection();\n if (selection) {\n var needAddRange = true;\n if (selection.rangeCount > 0) {\n // Workaround IE exception 800a025e\n try {\n var currentRange = null;\n // Do not remove/add range if current selection is the same with target range\n // Without this check, execCommand() may fail in Edge since we changed the selection\n if ((skipSameRange || Browser_1.Browser.isEdge) &&\n (currentRange = selection.rangeCount == 1 ? selection.getRangeAt(0) : null) &&\n currentRange.startContainer == range.startContainer &&\n currentRange.startOffset == range.startOffset &&\n currentRange.endContainer == range.endContainer &&\n currentRange.endOffset == range.endOffset) {\n needAddRange = false;\n }\n else {\n selection.removeAllRanges();\n }\n }\n catch (e) { }\n }\n if (needAddRange) {\n selection.addRange(range);\n }\n }\n}\nexports.default = addRangeToSelection;\n//# sourceMappingURL=addRangeToSelection.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * Format table\n * @param editor The editor which contains the table to format\n * @param format A TableFormat object contains format information we want to apply to the table\n * @param table The table to format. This is optional. When not passed, the current table (if any) will be formatted\n */\nfunction formatTable(editor, format, table) {\n table = table || editor.getElementAtCursor('TABLE');\n if (table) {\n editor.addUndoSnapshot(function (start, end) {\n var vtable = new roosterjs_editor_dom_1.VTable(table);\n vtable.applyFormat(format);\n vtable.writeBack();\n //Adding replaceNode to transform color when the theme is switched to dark.\n editor.replaceNode(vtable.table, vtable.table, true /**transformColorForDarkMode*/);\n editor.focus();\n editor.select(start, end);\n }, \"Format\" /* Format */);\n }\n}\nexports.default = formatTable;\n//# sourceMappingURL=formatTable.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(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))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getElementBasedFormatState = void 0;\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\n/**\n * Get element based Format State at cursor\n * @param editor The editor instance\n * @param event (Optional) The plugin event, it stores the event cached data for looking up.\n * In this function the event cache is used to get list state and header level. If not passed,\n * it will query the node within selection to get the info\n * @returns An ElementBasedFormatState object\n */\nfunction getElementBasedFormatState(editor, event) {\n var listTag = (0, roosterjs_editor_dom_1.getTagOfNode)(editor.getElementAtCursor('OL,UL', null /*startFrom*/, event));\n var headerTag = (0, roosterjs_editor_dom_1.getTagOfNode)(editor.getElementAtCursor('H1,H2,H3,H4,H5,H6', null /*startFrom*/, event));\n return {\n isBullet: listTag == 'UL',\n isNumbering: listTag == 'OL',\n headerLevel: (headerTag && parseInt(headerTag[1])) || 0,\n canUnlink: !!editor.queryElements('a[href]', 1 /* OnSelection */)[0],\n canAddImageAltText: !!editor.queryElements('img', 1 /* OnSelection */)[0],\n isBlockQuote: !!editor.queryElements('blockquote', 1 /* OnSelection */)[0],\n };\n}\nexports.getElementBasedFormatState = getElementBasedFormatState;\n/**\n * Get format state at cursor\n * A format state is a collection of all format related states, e.g.,\n * bold, italic, underline, font name, font size, etc.\n * @param editor The editor instance\n * @param event (Optional) The plugin event, it stores the event cached data for looking up.\n * In this function the event cache is used to get list state and header level. If not passed,\n * it will query the node within selection to get the info\n * @returns The format state at cursor\n */\nfunction getFormatState(editor, event) {\n return __assign(__assign(__assign(__assign({}, editor.getPendableFormatState(false /* forceGetStateFromDom */)), getElementBasedFormatState(editor, event)), editor.getStyleBasedFormatState()), editor.getUndoState());\n}\nexports.default = getFormatState;\n//# sourceMappingURL=getFormatState.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.removeCellsOutsideSelection = void 0;\n/**\n * @internal\n * Remove the cells outside of the selection.\n * @param vTable VTable to remove selection\n */\nfunction removeCellsOutsideSelection(vTable) {\n var _a = vTable.selection, firstCell = _a.firstCell, lastCell = _a.lastCell;\n var rowsLength = vTable.cells.length - 1;\n var colIndex = vTable.cells[rowsLength].length - 1;\n var resultCells = [];\n var firstX = firstCell.x;\n var firstY = firstCell.y;\n var lastX = lastCell.x;\n var lastY = lastCell.y;\n var selectedAllTable = firstX == 0 && firstY == 0 && lastX == colIndex && lastY == rowsLength;\n if (selectedAllTable) {\n return;\n }\n vTable.cells.forEach(function (row, y) {\n row = row.filter(function (_, x) { return y >= firstY && y <= lastY && x >= firstX && x <= lastX; });\n if (row.length > 0) {\n resultCells.push(row);\n }\n });\n vTable.cells = resultCells;\n}\nexports.removeCellsOutsideSelection = removeCellsOutsideSelection;\n//# sourceMappingURL=removeCellsOutsideSelection.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Check if we can regenerate edited image from the source image.\n * An image can't regenerate result when there is CORS issue of the source content.\n * @param img The image element to test\n * @returns True when we can regenerate the edited image, otherwise false\n */\nfunction canRegenerateImage(img) {\n if (!img) {\n return false;\n }\n try {\n var canvas = img.ownerDocument.createElement('canvas');\n canvas.width = 10;\n canvas.height = 10;\n var context = canvas.getContext('2d');\n context.drawImage(img, 0, 0);\n context.getImageData(0, 0, 1, 1);\n return true;\n }\n catch (_a) {\n return false;\n }\n}\nexports.default = canRegenerateImage;\n//# sourceMappingURL=canRegenerateImage.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PositionType = void 0;\n/**\n * Represent the type of a position\n */\nvar PositionType;\n(function (PositionType) {\n /**\n * At the beginning of a node\n */\n PositionType[PositionType[\"Begin\"] = 0] = \"Begin\";\n /**\n * At the end of a node\n */\n PositionType[PositionType[\"End\"] = -1] = \"End\";\n /**\n * Before a node\n */\n PositionType[PositionType[\"Before\"] = -2] = \"Before\";\n /**\n * After a node\n */\n PositionType[PositionType[\"After\"] = -3] = \"After\";\n})(PositionType = exports.PositionType || (exports.PositionType = {}));\n//# sourceMappingURL=PositionType.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar applyInlineStyle_1 = require(\"../utils/applyInlineStyle\");\nvar roosterjs_editor_dom_1 = require(\"roosterjs-editor-dom\");\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 */\nfunction changeCapitalization(editor, capitalization, language) {\n (0, applyInlineStyle_1.default)(editor, function (element) {\n for (var node = (0, roosterjs_editor_dom_1.getFirstLeafNode)(element); node; node = (0, roosterjs_editor_dom_1.getNextLeafSibling)(element, node)) {\n if (node.nodeType == 3 /* Text */) {\n try {\n node.textContent = getCapitalizedText(node.textContent, language);\n }\n catch (_a) {\n node.textContent = getCapitalizedText(node.textContent, undefined);\n }\n }\n }\n });\n function getCapitalizedText(originalText, language) {\n switch (capitalization) {\n case \"lowercase\" /* Lowercase */:\n return originalText.toLocaleLowerCase(language);\n case \"uppercase\" /* Uppercase */:\n return originalText.toLocaleUpperCase(language);\n case \"capitalize\" /* CapitalizeEachWord */:\n var wordArray = originalText.toLocaleLowerCase(language).split(' ');\n for (var i = 0; i < wordArray.length; i++) {\n wordArray[i] =\n wordArray[i].charAt(0).toLocaleUpperCase(language) + wordArray[i].slice(1);\n }\n return wordArray.join(' ');\n case \"sentence\" /* Sentence */:\n // TODO: Add rules on punctuation for internationalization - TASK 104769\n var 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 var regex = new RegExp('^\\\\s*\\\\w|' + punctuationMarks + '\\\\s+\\\\w', 'g');\n return originalText.toLocaleLowerCase(language).replace(regex, function (match) {\n return match.toLocaleUpperCase(language);\n });\n }\n }\n}\nexports.default = changeCapitalization;\n//# sourceMappingURL=changeCapitalization.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Direction = void 0;\n/**\n * enum for setting block direction, used by setDirection API\n */\nvar Direction;\n(function (Direction) {\n /**\n * Left to right\n */\n Direction[Direction[\"LeftToRight\"] = 0] = \"LeftToRight\";\n /**\n * Right to left\n */\n Direction[Direction[\"RightToLeft\"] = 1] = \"RightToLeft\";\n})(Direction = exports.Direction || (exports.Direction = {}));\n//# sourceMappingURL=Direction.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ContextMenu = void 0;\nvar ContextMenu_1 = require(\"./ContextMenu\");\nObject.defineProperty(exports, \"ContextMenu\", { enumerable: true, get: function () { return ContextMenu_1.default; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ContentTraverser_1 = require(\"./ContentTraverser\");\nvar createRange_1 = require(\"../selection/createRange\");\n// White space matching regex. It matches following chars:\n// \\s: white space\n// \\u00A0: no-breaking white space\n// \\u200B: zero width space\n// \\u3000: full width space (which can come from JPN IME)\nvar WHITESPACE_REGEX = /[\\s\\u00A0\\u200B\\u3000]+([^\\s\\u00A0\\u200B\\u3000]*)$/i;\n/**\n * The class that helps search content around a position\n */\nvar PositionContentSearcher = /** @class */ (function () {\n /**\n * Create a new CursorData instance\n * @param rootNode Root node of the whole scope\n * @param position Start position\n */\n function PositionContentSearcher(rootNode, position) {\n this.rootNode = rootNode;\n this.position = position;\n // The cached text before position that has been read so far\n this.text = '';\n // All inline elements before position that have been read so far\n this.inlineElements = [];\n }\n /**\n * Get the word before position. The word is determined by scanning backwards till the first white space, the portion\n * between position and the white space is the word before position\n * @returns The word before position\n */\n PositionContentSearcher.prototype.getWordBefore = function () {\n var _this = this;\n if (!this.word) {\n this.traverse(function () { return _this.word; });\n }\n return this.word;\n };\n /**\n * Get the inline element before position\n * @returns The inlineElement before position\n */\n PositionContentSearcher.prototype.getInlineElementBefore = function () {\n if (!this.inlineBefore) {\n this.traverse(null);\n }\n return this.inlineBefore;\n };\n /**\n * Get the inline element after position\n * @returns The inline element after position\n */\n PositionContentSearcher.prototype.getInlineElementAfter = function () {\n if (!this.inlineAfter) {\n this.inlineAfter = ContentTraverser_1.default.createBlockTraverser(this.rootNode, this.position).currentInlineElement;\n }\n return this.inlineAfter;\n };\n /**\n * Get X number of chars before position\n * The actual returned chars may be less than what is requested.\n * @param length The length of string user want to get, the string always ends at the position,\n * so this length determines the start position of the string\n * @returns The actual string we get as a sub string, or the whole string before position when\n * there is not enough chars in the string\n */\n PositionContentSearcher.prototype.getSubStringBefore = function (length) {\n var _this = this;\n if (this.text.length < length) {\n this.traverse(function () { return _this.text.length >= length; });\n }\n return this.text.substr(Math.max(0, this.text.length - length));\n };\n /**\n * Try to get a range matches the given text before the position\n * @param text The text to match against\n * @param exactMatch Whether it is an exact match\n * @returns The range for the matched text, null if unable to find a match\n */\n PositionContentSearcher.prototype.getRangeFromText = function (text, exactMatch) {\n if (!text) {\n return null;\n }\n var startPosition;\n var endPosition;\n var textIndex = text.length - 1;\n this.forEachTextInlineElement(function (textInline) {\n var nodeContent = textInline.getTextContent() || '';\n var nodeIndex = nodeContent.length - 1;\n for (; nodeIndex >= 0 && textIndex >= 0; nodeIndex--) {\n if (text.charCodeAt(textIndex) == nodeContent.charCodeAt(nodeIndex)) {\n textIndex--;\n // on first time when end is matched, set the end of range\n if (!endPosition) {\n endPosition = textInline.getStartPosition().move(nodeIndex + 1);\n }\n }\n else if (exactMatch || endPosition) {\n // Mismatch found when exact match or end already match, so return since matching failed\n return true;\n }\n }\n // when textIndex == -1, we have a successful complete match\n if (textIndex == -1) {\n startPosition = textInline.getStartPosition().move(nodeIndex + 1);\n return true;\n }\n return false;\n });\n return startPosition && endPosition && (0, createRange_1.default)(startPosition, endPosition);\n };\n /**\n * Get text section before position till stop condition is met.\n * This offers consumers to retrieve text section by section\n * The section essentially is just an inline element which has Container element\n * so that the consumer can remember it for anchoring popup or verification purpose\n * when position moves out of context etc.\n * @param stopFunc The callback stop function\n */\n PositionContentSearcher.prototype.forEachTextInlineElement = function (callback) {\n // We cache all text sections read so far\n // Every time when you ask for textSection, we start with the cached first\n // and resort to further reading once we exhausted with the cache\n if (!this.inlineElements.some(callback)) {\n this.traverse(callback);\n }\n };\n /**\n * Get first non textual inline element before position\n * @returns First non textual inline element before position or null if no such element exists\n */\n PositionContentSearcher.prototype.getNearestNonTextInlineElement = function () {\n var _this = this;\n if (!this.nearestNonTextInlineElement) {\n this.traverse(function () { return _this.nearestNonTextInlineElement; });\n }\n return this.nearestNonTextInlineElement;\n };\n /**\n * Continue traversing backward till stop condition is met or begin of block is reached\n */\n PositionContentSearcher.prototype.traverse = function (callback) {\n this.traverser =\n this.traverser || ContentTraverser_1.default.createBlockTraverser(this.rootNode, this.position);\n if (!this.traverser || this.traversingComplete) {\n return;\n }\n var previousInline = this.traverser.getPreviousInlineElement();\n while (!this.traversingComplete) {\n this.inlineBefore = this.inlineBefore || previousInline;\n if (previousInline && previousInline.isTextualInlineElement()) {\n var textContent = previousInline.getTextContent();\n // build the word before position if it is not built yet\n if (!this.word) {\n // Match on the white space, the portion after space is on the index of 1 of the matched result\n // (index at 0 is whole match result, index at 1 is the word)\n var matches = WHITESPACE_REGEX.exec(textContent);\n if (matches && matches.length == 2) {\n this.word = matches[1] + this.text;\n }\n }\n this.text = textContent + this.text;\n this.inlineElements.push(previousInline);\n // Check if stop condition is met\n if (callback && callback(previousInline)) {\n break;\n }\n }\n else {\n this.nearestNonTextInlineElement = previousInline;\n this.traversingComplete = true;\n if (!this.word) {\n // if parsing is done, whatever we get so far in this.cachedText should also be in this.cachedWordBeforeCursor\n this.word = this.text;\n }\n // When a non-textual inline element, or null is seen, we consider parsing complete\n // TODO: we may need to change this if there is a future need to parse beyond text, i.e.\n // we have aaa @someone bbb, and we want to read the text before @someone\n break;\n }\n previousInline = this.traverser.getPreviousInlineElement();\n }\n };\n return PositionContentSearcher;\n}());\nexports.default = PositionContentSearcher;\n//# sourceMappingURL=PositionContentSearcher.js.map"],"sourceRoot":""}