{"version":3,"file":"worktile-theia.mjs","sources":["../../../packages/src/constants/default.ts","../../../packages/src/constants/node-types.ts","../../../packages/src/constants/error.ts","../../../packages/src/constants/code.ts","../../../packages/src/constants/toolbar.ts","../../../packages/src/constants/plugin-menu.ts","../../../packages/src/constants/color-select.ts","../../../packages/src/constants/selector.ts","../../../packages/src/interfaces/toolbar.ts","../../../packages/src/core/create-plugin.ts","../../../packages/src/queries/get-block-card-cursor.ts","../../../packages/src/queries/is-block-card-cursor.ts","../../../packages/src/queries/anchor-block-entry.ts","../../../packages/src/queries/anchor-block.ts","../../../packages/src/queries/anchor-inline-entry.ts","../../../packages/src/utils/cast-array.ts","../../../packages/src/utils/match.ts","../../../packages/src/queries/find-descendant.ts","../../../packages/src/queries/find-node.ts","../../../packages/src/queries/find-path.ts","../../../packages/src/queries/get-above.ts","../../../packages/src/queries/get-above-by-type.ts","../../../packages/src/queries/get-anchor-block-entry.ts","../../../packages/src/queries/get-block-above.ts","../../../packages/src/queries/get-block-card-above.ts","../../../packages/src/queries/is-container-type.ts","../../../packages/src/queries/get-container-blocks.ts","../../../packages/src/queries/get-parent.ts","../../../packages/src/queries/get-directly-parent.ts","../../../packages/src/queries/get-insert-elements-path.ts","../../../packages/src/queries/get-last-child-path.ts","../../../packages/src/queries/is-ancestor.ts","../../../packages/src/queries/get-last-node.ts","../../../packages/src/queries/get-next-sibling-nodes.ts","../../../packages/src/queries/get-node.ts","../../../packages/src/transforms/un-hang-range.ts","../../../packages/src/queries/get-nodes.ts","../../../packages/src/queries/get-nodes-by-type.ts","../../../packages/src/queries/get-plain-text.ts","../../../packages/src/queries/get-plugin-by-toolbar.ts","../../../packages/src/queries/get-point-before.ts","../../../packages/src/queries/get-point-from-location.ts","../../../packages/src/queries/get-previous-path.ts","../../../packages/src/queries/get-rang-from-block-start.ts","../../../packages/src/queries/get-range-before.ts","../../../packages/src/queries/get-selection-marks.ts","../../../packages/src/queries/get-selection-nodes-by-type.ts","../../../packages/src/queries/get-text.ts","../../../packages/src/queries/get-toolbar-disabled.ts","../../../packages/src/utils/fragment.ts","../../../packages/src/queries/is-across-blocks.ts","../../../packages/src/queries/is-ancestor-empty.ts","../../../packages/src/queries/is-block-above-empty.ts","../../../packages/src/queries/is-block-active.ts","../../../packages/src/queries/is-block-text-empty-after-selection.ts","../../../packages/src/queries/is-collapsed.ts","../../../packages/src/queries/is-contain-nested-type.ts","../../../packages/src/queries/is-descendant.ts","../../../packages/src/queries/is-empty-content.ts","../../../packages/src/queries/is-empty-content-filter.ts","../../../packages/src/queries/is-empty-paragraph.ts","../../../packages/src/queries/is-empty-paragraph-by-path.ts","../../../packages/src/queries/is-first-child.ts","../../../packages/src/queries/is-global-collapsed.ts","../../../packages/src/queries/is-include-types.ts","../../../packages/src/queries/is-node-type.ts","../../../packages/src/queries/is-node-type-in.ts","../../../packages/src/queries/is-paragraph.ts","../../../packages/src/queries/is-point-at-root.ts","../../../packages/src/queries/is-range-across-blocks.ts","../../../packages/src/queries/is-range-at-root.ts","../../../packages/src/queries/is-root-path.ts","../../../packages/src/queries/is-start.ts","../../../packages/src/queries/some-node.ts","../../../packages/src/utils/auto-focus.ts","../../../packages/src/utils/blob.ts","../../../packages/src/utils/color-picker.ts","../../../packages/src/utils/common.ts","../../../packages/src/utils/copy-node.ts","../../../packages/src/utils/id-creator.ts","../../../packages/src/utils/create-empty-paragraph.ts","../../../packages/src/interfaces/editor.ts","../../../packages/src/interfaces/image.ts","../../../packages/src/interfaces/plugins/plugin-menu.ts","../../../packages/src/interfaces/plugins/plugin-key.ts","../../../packages/src/interfaces/preset.ts","../../../packages/src/interfaces/valid-children-types.ts","../../../packages/src/utils/dom.ts","../../../packages/src/interfaces/view-base.ts","../../../packages/src/utils/data-transform.ts","../../../packages/src/utils/weak-maps.ts","../../../packages/src/utils/editor-uuid.ts","../../../packages/src/utils/get-mode.ts","../../../packages/src/utils/get-toolbar-class.ts","../../../packages/src/utils/merge-element-options.ts","../../../packages/src/utils/insert-data-by-invalid-type.ts","../../../packages/src/utils/is-clean-empty-paragraph.ts","../../../packages/src/utils/is-pure-paragraph.ts","../../../packages/src/utils/is-pure-heading.ts","../../../packages/src/utils/is-url.ts","../../../packages/src/utils/normalize.ts","../../../packages/src/utils/refocus.ts","../../../packages/src/utils/scrolling.ts","../../../packages/src/utils/update-popover-position.ts","../../../packages/src/core/create-toolbar.ts","../../../packages/src/i18n/i18n.ts","../../../packages/src/i18n/i18n.token.ts","../../../packages/src/i18n/i18n.service.ts","../../../packages/src/i18n/locales/zh-hans.ts","../../../packages/src/i18n/locales/zh-hant.ts","../../../packages/src/i18n/locales/en-us.ts","../../../packages/src/i18n/locales/ja-jp.ts","../../../packages/src/i18n/locales/de-de.ts","../../../packages/src/i18n/locales/ru-ru.ts","../../../packages/src/core/toolbar-item/base-toolbar-item.ts","../../../packages/src/core/utils/flatten-deep-plugins.ts","../../../packages/src/core/utils/get-plugins.ts","../../../packages/src/core/utils/get-plugin.ts","../../../packages/src/core/utils/get-plugin-options.ts","../../../packages/src/core/utils/merge-array.ts","../../../packages/src/core/utils/merge-options.ts","../../../packages/src/core/utils/combine-plugins.ts","../../../packages/src/core/utils/merge-deep-plugins.ts","../../../packages/src/core/utils/nested-structure-by-key.ts","../../../packages/src/core/utils/plugins-by-key.ts","../../../packages/src/core/utils/plugin-menu.ts","../../../packages/src/core/with-theia.ts","../../../packages/src/components/toolbar-dropdown/toolbar-dropdown.component.ts","../../../packages/src/components/toolbar-dropdown/toolbar-dropdown.component.html","../../../packages/src/components/toolbar-item/toolbar-item.component.ts","../../../packages/src/components/toolbar/toolbar.component.ts","../../../packages/src/components/toolbar/toolbar.component.html","../../../packages/src/components/toolbar-group/toolbar-group.component.ts","../../../packages/src/components/toolbar-group/toolbar-group.component.html","../../../packages/src/components/listbox/listbox.type.ts","../../../packages/src/components/listbox/listbox.ts","../../../packages/src/components/action/prevent-default.ts","../../../packages/src/pipes.ts","../../../packages/src/transforms/apply-deep-to-nodes.ts","../../../packages/src/transforms/set-marks.ts","../../../packages/src/transforms/clear-marks.ts","../../../packages/src/transforms/delete-element.ts","../../../packages/src/transforms/delete-node-by-type.ts","../../../packages/src/transforms/un-wrap.ts","../../../packages/src/transforms/handle-continual-delete-backward.ts","../../../packages/src/transforms/handle-continual-insert-break.ts","../../../packages/src/transforms/insert-elements.ts","../../../packages/src/transforms/insert-paragraph.ts","../../../packages/src/transforms/merge-deep-to-nodes.ts","../../../packages/src/transforms/move-children.ts","../../../packages/src/transforms/on-keydown-reset-block-type.ts","../../../packages/src/transforms/set-end-selection.ts","../../../packages/src/transforms/set-node.ts","../../../packages/src/transforms/set-node-by-type.ts","../../../packages/src/transforms/unwrap-nodes-by-type.ts","../../../packages/src/plugins/table/table.types.ts","../../../packages/src/plugins/table/utils/calc-span.ts","../../../packages/src/plugins/table/utils/calculate-table.ts","../../../packages/src/plugins/table/utils/table-position.ts","../../../packages/src/plugins/table/utils/create-table-position.ts","../../../packages/src/plugins/table/utils/cell-position.ts","../../../packages/src/plugins/table/utils/create-cell.ts","../../../packages/src/plugins/table/utils/create-row.ts","../../../packages/src/plugins/table/utils/create-table.ts","../../../packages/src/plugins/table/utils/get-grid-columns.ts","../../../packages/src/plugins/table/utils/get-next-cell.ts","../../../packages/src/plugins/table/utils/get-select-cell-node.ts","../../../packages/src/plugins/table/utils/is-header-row.ts","../../../packages/src/plugins/table/utils/is-range-in-table.ts","../../../packages/src/plugins/table/utils/is-selection-in-table.ts","../../../packages/src/plugins/table/utils/is-virtual-key.ts","../../../packages/src/plugins/table/transforms/insert-table.ts","../../../packages/src/plugins/table/transforms/insert-row.ts","../../../packages/src/plugins/table/utils/add-columns.ts","../../../packages/src/plugins/table/transforms/insert-column.ts","../../../packages/src/plugins/table/transforms/clear-cell.ts","../../../packages/src/plugins/table/transforms/remove-row.ts","../../../packages/src/plugins/table/utils/remove-columns.ts","../../../packages/src/plugins/table/transforms/remove-column.ts","../../../packages/src/plugins/table/utils/next-path.ts","../../../packages/src/plugins/table/transforms/remove-table.ts","../../../packages/src/plugins/table/utils/handle-cell.ts","../../../packages/src/plugins/table/utils/merge-cell.ts","../../../packages/src/plugins/table/utils/split-cell.ts","../../../packages/src/plugins/table/utils/table-entry.ts","../../../packages/src/plugins/table/table.editor.ts","../../../packages/src/plugins/align/align.editor.ts","../../../packages/src/plugins/blockquote/blockquote.editor.ts","../../../packages/src/plugins/code/code.editor.ts","../../../packages/src/services/context.service.ts","../../../packages/src/plugins/code/code.component.ts","../../../packages/src/plugins/code/code.component.html","../../../packages/src/plugins/color/color.editor.ts","../../../packages/src/plugins/heading/heading.editor.ts","../../../packages/src/plugins/hr/hr.editor.ts","../../../packages/src/plugins/image/image.editor.ts","../../../packages/src/plugins/indent/indent.editor.ts","../../../packages/src/plugins/link/link.types.ts","../../../packages/src/plugins/link/link.editor.ts","../../../packages/src/plugins/list/queries/is-node-type-list.ts","../../../packages/src/plugins/list/list.editor.ts","../../../packages/src/plugins/mark/mark.editor.ts","../../../packages/src/plugins/mention/mention.editor.ts","../../../packages/src/plugins/mention/mention.plugin.ts","../../../packages/src/plugins/mention/suggestion.component.ts","../../../packages/src/plugins/quick-insert/quick-insert.editor.ts","../../../packages/src/components/column-resize/event-dispatcher.ts","../../../packages/src/components/column-resize/selectors.ts","../../../packages/src/components/column-resize/column-resize-notifier.ts","../../../packages/src/components/column-resize/column-resize.directive.ts","../../../packages/src/plugins/table/utils/remove-row-column.ts","../../../packages/src/plugins/table/utils/set-menu-cell-invisibility.ts","../../../packages/src/plugins/table/utils/get-min-max-cell-index.ts","../../../packages/src/plugins/table/table.store.ts","../../../packages/src/services/table-contextmenu.service.ts","../../../packages/src/plugins/table/table.pipe.ts","../../../packages/src/plugins/table/components/toolbar/table-options.component.ts","../../../packages/src/plugins/table/components/toolbar/table-toolbar.component.ts","../../../packages/src/plugins/table/components/toolbar/table-toolbar.component.html","../../../packages/src/plugins/table/table.service.ts","../../../packages/src/plugins/table/utils/calc-anchor-position.ts","../../../packages/src/plugins/table/transforms/move-selection-from-cell.ts","../../../packages/src/plugins/table/utils/table-viewport.ts","../../../packages/src/plugins/table/components/insert-mark/insert-mark.component.ts","../../../packages/src/plugins/table/components/insert-mark/insert-mark.component.html","../../../packages/src/plugins/table/utils/cell-selection.ts","../../../packages/src/plugins/table/components/table.component.ts","../../../packages/src/plugins/table/components/table.component.html","../../../packages/src/plugins/todo-item/todo-item.editor.ts","../../../packages/src/plugins/vertical-align/toolbar-item.component.ts","../../../packages/src/plugins/vertical-align/toolbar-item.component.html","../../../packages/src/plugins/vertical-align/vertical-align.editor.ts","../../../packages/src/plugins/inline-code/inline-code.editor.ts","../../../packages/src/plugins/quick-insert/components/quick-insert.component.ts","../../../packages/src/plugins/quick-insert/components/quick-insert.component.html","../../../packages/src/plugins/heading/utils.ts","../../../packages/src/components/table-select/table-select.component.ts","../../../packages/src/components/table-select/table-select.component.html","../../../packages/src/components/plugin-menu/plugin-menu.component.ts","../../../packages/src/components/plugin-menu/plugin-menu.component.html","../../../packages/src/components/inline-toolbar/inline-toolbar.component.ts","../../../packages/src/plugins/deserialize/deserialize-md.plugin.ts","../../../packages/src/components/conversion-hint/conversion-hint.component.ts","../../../packages/src/components/conversion-hint/conversion-hint.component.html","../../../packages/src/components/contextmenu/contextmenu.component.ts","../../../packages/src/components/contextmenu/contextmenu.component.html","../../../packages/src/components/column-resize/resize-ref.ts","../../../packages/src/components/column-resize/overlay-handle.component.ts","../../../packages/src/components/column-resize/resizing.store.ts","../../../packages/src/plugins/align/align.plugin.ts","../../../packages/src/constants/auto-format-rules.ts","../../../packages/src/plugins/autoformat/transforms/auto-format-block.ts","../../../packages/src/plugins/autoformat/transforms/auto-format-inline.ts","../../../packages/src/plugins/autoformat/autoformat.plugin.ts","../../../packages/src/interfaces/base-element.flavour.ts","../../../packages/src/plugins/blockquote/blockquote.flavour.ts","../../../packages/src/plugins/blockquote/blockquote.plugin.ts","../../../packages/src/plugins/code/code.plugin.ts","../../../packages/src/plugins/color/toolbar-item.component.ts","../../../packages/src/plugins/color/toolbar-item.component.html","../../../packages/src/plugins/color/color.plugin.ts","../../../packages/src/plugins/common/block-card.plugin.ts","../../../packages/src/plugins/common/common.plugin.ts","../../../packages/src/plugins/common/get-fragment.plugin.ts","../../../packages/src/plugins/common/history.plugin.ts","../../../packages/src/plugins/common/insert-data-by-invalid-type.ts","../../../packages/src/utils/is-inline.ts","../../../packages/src/plugins/common/move-selection.plugin.ts","../../../packages/src/plugins/common/remove-empty.plugin.ts","../../../packages/src/plugins/common/remove-void.plugin.ts","../../../packages/src/plugins/common/reset-type.plugin.ts","../../../packages/src/plugins/deserialize/deserialize-html.plugin.ts","../../../packages/src/plugins/font-size/font-size.editor.ts","../../../packages/src/plugins/heading/heading.plugin.ts","../../../packages/src/plugins/hr/hr.flavour.ts","../../../packages/src/plugins/hr/hr.plugin.ts","../../../packages/src/plugins/list/queries/get-list-types.ts","../../../packages/src/plugins/image/image-with-floating.ts","../../../packages/src/plugins/image/image.component.ts","../../../packages/src/plugins/image/image.component.html","../../../packages/src/plugins/image/with-floating.plugin.ts","../../../packages/src/plugins/image/image.plugin.ts","../../../packages/src/plugins/indent/on-keydown-indent.ts","../../../packages/src/plugins/indent/indent.plugin.ts","../../../packages/src/plugins/normalizers/remove-empty-nodes.ts","../../../packages/src/plugins/inline-code/inline-code.flavour.ts","../../../packages/src/plugins/inline-code/inline-code.plugin.ts","../../../packages/src/plugins/link/hover/link-hover.component.ts","../../../packages/src/plugins/link/hover/link-hover.component.html","../../../packages/src/plugins/link/edit/link-edit.component.ts","../../../packages/src/plugins/link/edit/link-edit.component.html","../../../packages/src/plugins/link/link.flavour.ts","../../../packages/src/plugins/link/link.plugin.ts","../../../packages/src/plugins/list/normalizers/normalize-list-item.ts","../../../packages/src/plugins/list/queries/is-list.ts","../../../packages/src/plugins/list/normalizers/normalize-no.ts","../../../packages/src/plugins/list/normalizers/get-list-normalizer.ts","../../../packages/src/plugins/list/queries/get-list-item-entry.ts","../../../packages/src/plugins/list/queries/has-list-in-list-item.ts","../../../packages/src/plugins/list/transforms/move-list-item-sublist-items-to-list.ts","../../../packages/src/plugins/list/transforms/move-list-item-down.ts","../../../packages/src/plugins/list/transforms/move-list-item-up.ts","../../../packages/src/plugins/list/on-key-down-list.ts","../../../packages/src/plugins/list/queries/get-start-list-item.ts","../../../packages/src/plugins/list/queries/is-in-list.ts","../../../packages/src/plugins/list/queries/is-list-nested.ts","../../../packages/src/plugins/list/queries/is-selection-at-list-item-start.ts","../../../packages/src/plugins/list/queries/is-selection-in-same-list-item.ts","../../../packages/src/plugins/list/queries/is-single-list-item.ts","../../../packages/src/plugins/list/transforms/insert-list-data.ts","../../../packages/src/plugins/list/transforms/insert-list-item.ts","../../../packages/src/plugins/list/queries/get-list-item-sublist.ts","../../../packages/src/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.ts","../../../packages/src/plugins/list/transforms/unwrap-list.ts","../../../packages/src/plugins/list/list.flavour.ts","../../../packages/src/plugins/list/list.plugin.ts","../../../packages/src/plugins/mark/mark.plugin.ts","../../../packages/src/plugins/node-id/node-id.plugin.ts","../../../packages/src/plugins/normalizers/insert-paragraph-nodes.ts","../../../packages/src/plugins/normalizers/trailing-node.plugin.ts","../../../packages/src/plugins/paint-format/paint-format.editor.ts","../../../packages/src/plugins/quick-insert/quick-insert.plugin.ts","../../../packages/src/plugins/soft-break/soft-break.plugin.ts","../../../packages/src/plugins/table/toolbar-item.component.ts","../../../packages/src/plugins/table/transforms/clear-table-node.ts","../../../packages/src/plugins/table/utils/is-legal-table.ts","../../../packages/src/plugins/table/utils/normalize-table.ts","../../../packages/src/plugins/table/components/row/row.flavour.ts","../../../packages/src/plugins/table/components/td/td.flavour.ts","../../../packages/src/plugins/table/table.plugin.ts","../../../packages/src/plugins/todo-item/todo-item.component.ts","../../../packages/src/plugins/todo-item/todo-item.plugin.ts","../../../packages/src/plugins/index.ts","../../../packages/src/shortcuts/mark.ts","../../../packages/src/shortcuts/index.ts","../../../packages/src/plugins/paragraph/paragraph.flavour.ts","../../../packages/src/plugins/heading/heading.flavour.ts","../../../packages/src/components/text/text.flavour.ts","../../../packages/src/editor.component.ts","../../../packages/src/editor.component.html","../../../packages/src/editor.module.ts","../../../packages/src/services/toolbar.service.ts","../../../packages/src/test/faker/tethys-icon-faker.ts","../../../packages/src/test/basic/basic.component.ts","../../../packages/src/test/faker/data-transfer-faker.ts","../../../packages/src/test/utils/mock-plugins.ts","../../../packages/src/test/utils/preset-config.ts","../../../packages/src/test/utils/with-plugin.ts","../../../packages/src/public-api.ts","../../../packages/src/worktile-theia.ts"],"sourcesContent":["export const PICTURE_ACCEPTED_UPLOAD_MIME = ['image/png', 'image/jpeg', 'image/gif', 'image/bmp', 'image/svg+xml'];\nexport const PICTURE_ACCEPTED_UPLOAD_SIZE = 50;\nexport const A_TAG_REL_ATTR = 'noopener noreferrer nofollow external ugc';\nexport const LINK_DEFAULT_TEXT = '链接';\nexport const TAB_SPACE = '    ';\nexport const CLIPBOARD_FORMAT_KEY = 'x-theia-fragment';\nexport const DEFAULT_SCROLL_CONTAINER = '.the-editable-container';\nexport const ELEMENT_UNIQUE_ID = 'key';\nexport const ZERO_WIDTH_CHAR = '\\u200B';\nexport const QUICK_INSERT_HOTKEY = '/';\nexport const BLOCK_HIDDEN_CLASS = 'slate-block-hidden';\nexport const ROOT_ELEMENT_MARGIN_BOTTOM = 8;\n","import { CustomElementKinds } from '../custom-types';\n\nexport enum ElementKinds {\n    image = 'image',\n    paragraph = 'paragraph',\n    headingList = 'heading-list',\n    heading_1 = 'heading-one',\n    heading_2 = 'heading-two',\n    heading_3 = 'heading-three',\n    heading_4 = 'heading-four',\n    heading_5 = 'heading-five',\n    heading_6 = 'heading-six',\n    numberedList = 'numbered-list',\n    bulletedList = 'bulleted-list',\n    listItem = 'list-item',\n    checkItem = 'check-item',\n    table = 'table',\n    tableRow = 'table-row',\n    tableCell = 'table-cell',\n    tableContent = 'paragraph',\n    code = 'code',\n    blockquote = 'block-quote',\n    hr = 'hr',\n    link = 'link',\n    default = 'paragraph',\n    inlineCode = 'inline-code',\n    indent = 'indent'\n}\n\nexport const HeaderLevelMap = {\n    [ElementKinds.heading_1]: 0,\n    [ElementKinds.heading_2]: 1,\n    [ElementKinds.heading_3]: 2,\n    [ElementKinds.heading_4]: 3,\n    [ElementKinds.heading_5]: 4,\n    [ElementKinds.heading_6]: 5\n};\n\nexport enum Alignment {\n    left = 'left',\n    center = 'center',\n    right = 'right'\n}\n\nexport enum VerticalAlignment {\n    top = 'top',\n    middle = 'middle',\n    bottom = 'bottom'\n}\n\nexport enum LayoutTypes {\n    wrapLeft = 'wrap-left',\n    wrapRight = 'wrap-right'\n}\n\nexport enum FontSizes {\n    fontSize12 = '12',\n    fontSize13 = '13',\n    fontSize14 = '14',\n    fontSize15 = '15',\n    fontSize16 = '16',\n    fontSize18 = '18',\n    fontSize20 = '20',\n    fontSize24 = '24',\n    fontSize28 = '28',\n    fontSize32 = '32',\n    fontSize40 = '40',\n    fontSize48 = '48'\n}\n\nexport const FontSizeTypes = [\n    FontSizes.fontSize12,\n    FontSizes.fontSize13,\n    FontSizes.fontSize14,\n    FontSizes.fontSize15,\n    FontSizes.fontSize16,\n    FontSizes.fontSize20,\n    FontSizes.fontSize24,\n    FontSizes.fontSize28,\n    FontSizes.fontSize32,\n    FontSizes.fontSize40,\n    FontSizes.fontSize48\n];\n\nexport enum Indents {\n    indentRight = 'indent-right',\n    indentLeft = 'indent-left'\n}\n\nexport enum ScrollDirection {\n    X,\n    Y\n}\n\nexport enum MarkTypes {\n    bold = 'bold',\n    italic = 'italic',\n    underline = 'underlined',\n    strike = 'strike',\n    color = 'color',\n    backgroundColor = 'background-color',\n    fontSize = 'font-size'\n}\n\nexport enum ToolbarActionTypes {\n    split = 'split',\n    undo = 'undo',\n    redo = 'redo',\n    paintformat = 'paintformat',\n    clean = 'clean',\n    alignType = 'align-type',\n    alignLeft = 'align-left',\n    alignCenter = 'align-center',\n    alignRight = 'align-right',\n    verticalAlign = 'vertical-align',\n    verticalAlignTop = 'vertical-align-top',\n    verticalAlignMiddle = 'vertical-align-middle',\n    verticalAlignBottom = 'vertical-align-bottom',\n    headingList = 'heading-list',\n    tableRemove = 'table-remove',\n    tableDeleteRows = 'table-delete-rows',\n    tableDeleteColumns = 'table-delete-columns',\n    group = 'group'\n}\n\nexport const MarkProps: Array<MarkTypes> = [\n    MarkTypes.backgroundColor,\n    MarkTypes.bold,\n    MarkTypes.color,\n    MarkTypes.italic,\n    MarkTypes.strike,\n    MarkTypes.underline,\n    MarkTypes.fontSize\n];\n\nexport const STANDARD_HEADING_TYPES: CustomElementKinds[] = [\n    ElementKinds.heading_1,\n    ElementKinds.heading_2,\n    ElementKinds.heading_3,\n    ElementKinds.heading_4,\n    ElementKinds.heading_5,\n    ElementKinds.heading_6\n];\n\nexport const HEADING_TYPES: CustomElementKinds[] = [...STANDARD_HEADING_TYPES];\n\nexport const ALIGN_BLOCK_TYPES: CustomElementKinds[] = [ElementKinds.default, ElementKinds.listItem, ElementKinds.image, ...HEADING_TYPES];\n\nexport const CONTAINER_BLOCKS: CustomElementKinds[] = [ElementKinds.blockquote, ElementKinds.tableCell];\n\nexport const LIST_BLOCK_TYPES: CustomElementKinds[] = [ElementKinds.numberedList, ElementKinds.bulletedList];\n\nexport const VOID_BLOCK_TYPES: CustomElementKinds[] = [ElementKinds.image, ElementKinds.hr];\n\nexport const BLOCK_DELETE_BACKWARD_TYPES: CustomElementKinds[] = [ElementKinds.tableCell];\n\nexport const DISABLED_OPERATE_TYPES: CustomElementKinds[] = [ElementKinds.code, ElementKinds.hr];\n\nexport const LOWEST_TEXT_CONTAINER_TYPES: CustomElementKinds[] = [ElementKinds.default, ...HEADING_TYPES, ElementKinds.checkItem];\n","export enum ErrorCodes {\n    UNKNOW_ERROR = 1000,\n    IMAGE_ERR_MIME_FORMAT = 1001,\n    IMAGE_ERR_SIZE_LIMIT = 1002\n}\n","export const DEFAULT_LANGUAGE = {\n    showName: 'JavaScript',\n    value: 'javascript'\n};\n\nexport const CODE_MODES = [\n    {\n        showName: 'APL',\n        value: 'apl'\n    },\n    {\n        showName: 'ASN.1',\n        value: 'asn.1'\n    },\n    {\n        showName: 'Brainfuck',\n        value: 'brainfuck'\n    },\n    {\n        showName: 'C',\n        value: 'c'\n    },\n    {\n        showName: 'C#',\n        value: 'c#'\n    },\n    {\n        showName: 'C++',\n        value: 'c++'\n    },\n    {\n        showName: 'C-like',\n        value: 'clike'\n    },\n    {\n        showName: 'Ceylon',\n        value: 'ceylon'\n    },\n    {\n        showName: 'Clojure',\n        value: 'clojure'\n    },\n    {\n        showName: 'Closure Stylesheets (GSS)',\n        value: 'gss'\n    },\n    {\n        showName: 'CMake',\n        value: 'cmake'\n    },\n    {\n        showName: 'COBOL',\n        value: 'cobol'\n    },\n    {\n        showName: 'CoffeeScript',\n        value: 'coffeescript'\n    },\n    {\n        showName: 'Common Lisp',\n        value: 'commonlisp'\n    },\n    {\n        showName: 'Crystal',\n        value: 'crystal'\n    },\n    {\n        showName: 'CSS',\n        value: 'css'\n    },\n    {\n        showName: 'Cypher',\n        value: 'cypher'\n    },\n    {\n        showName: 'Cython',\n        value: 'cython'\n    },\n    {\n        showName: 'D',\n        value: 'd'\n    },\n    {\n        showName: 'Dart',\n        value: 'dart'\n    },\n    {\n        showName: 'Django (templating language)',\n        value: 'django'\n    },\n    {\n        showName: 'Dockerfile',\n        value: 'dockerfile'\n    },\n    {\n        showName: 'diff',\n        value: 'diff'\n    },\n    {\n        showName: 'DTD',\n        value: 'dtd'\n    },\n    {\n        showName: 'Dylan',\n        value: 'dylan'\n    },\n    {\n        showName: 'EBNF',\n        value: 'ebnf'\n    },\n    {\n        showName: 'ECL',\n        value: 'ecl'\n    },\n    {\n        showName: 'Eiffel',\n        value: 'eiffel'\n    },\n    {\n        showName: 'Elixir',\n        value: 'elixir'\n    },\n    {\n        showName: 'Elm',\n        value: 'elm'\n    },\n    {\n        showName: 'Erlang',\n        value: 'erlang'\n    },\n    {\n        showName: 'Factor',\n        value: 'factor'\n    },\n    {\n        showName: 'FCL',\n        value: 'fcl'\n    },\n    {\n        showName: 'Forth',\n        value: 'forth'\n    },\n    {\n        showName: 'Fortran',\n        value: 'fortran'\n    },\n    {\n        showName: 'F#',\n        value: 'fsharp'\n    },\n    {\n        showName: 'Gas (AT&T-style assembly)',\n        value: 'gas'\n    },\n    {\n        showName: 'Gherkin',\n        value: 'gherkin'\n    },\n    {\n        showName: 'Go',\n        value: 'go'\n    },\n    {\n        showName: 'Groovy',\n        value: 'groovy'\n    },\n    {\n        showName: 'HAML',\n        value: 'haml'\n    },\n    {\n        showName: 'Handlebars',\n        value: 'handlebars'\n    },\n    {\n        showName: 'Haskell (Literate)',\n        value: 'haskell-literate'\n    },\n    {\n        showName: 'Haxe',\n        value: 'haxe'\n    },\n    {\n        showName: 'HTML embedded (JSP, ASP.NET)',\n        value: 'htmlembedded'\n    },\n    {\n        showName: 'HTML mixed-mode',\n        value: 'htmlmixed'\n    },\n    {\n        showName: 'HTTP',\n        value: 'http'\n    },\n    {\n        showName: 'IDL',\n        value: 'idl'\n    },\n    {\n        showName: 'Java',\n        value: 'java'\n    },\n    DEFAULT_LANGUAGE,\n    {\n        showName: 'JavaScript (JSX)',\n        value: 'jsx'\n    },\n    {\n        showName: 'Jinja2',\n        value: 'jinja2'\n    },\n    {\n        showName: 'Julia',\n        value: 'julia'\n    },\n    {\n        showName: 'Kotlin',\n        value: 'kotlin'\n    },\n    {\n        showName: 'LESS',\n        value: 'less'\n    },\n    {\n        showName: 'LiveScript',\n        value: 'livescript'\n    },\n    {\n        showName: 'Lua',\n        value: 'lua'\n    },\n    {\n        showName: 'Markdown',\n        value: 'markdown'\n    },\n    {\n        showName: 'Mathematica',\n        value: 'mathematica'\n    },\n    {\n        showName: 'mbox',\n        value: 'mbox'\n    },\n    {\n        showName: 'mIRC',\n        value: 'mirc'\n    },\n    {\n        showName: 'Modelica',\n        value: 'modelica'\n    },\n    {\n        showName: 'MscGen',\n        value: 'mscgen'\n    },\n    {\n        showName: 'MUMPS',\n        value: 'mumps'\n    },\n    {\n        showName: 'Nginx',\n        value: 'nginx'\n    },\n    {\n        showName: 'NSIS',\n        value: 'nsis'\n    },\n    {\n        showName: 'N-Triples/N-Quads',\n        value: 'ntriples'\n    },\n    {\n        showName: 'Objective C',\n        value: 'objective-c'\n    },\n    {\n        showName: 'OCaml',\n        value: 'ocaml'\n    },\n    {\n        showName: 'Octave (MATLAB)',\n        value: 'octave'\n    },\n    {\n        showName: 'Oz',\n        value: 'oz'\n    },\n    {\n        showName: 'Pascal',\n        value: 'pascal'\n    },\n    {\n        showName: 'PEG.js',\n        value: 'pegjs'\n    },\n    {\n        showName: 'Perl',\n        value: 'perl'\n    },\n    {\n        showName: 'PGP (ASCII armor)',\n        value: 'asciiarmor'\n    },\n    {\n        showName: 'PHP',\n        value: 'php'\n    },\n    {\n        showName: 'Pig Latin',\n        value: 'pig'\n    },\n    {\n        showName: 'PowerShell',\n        value: 'powershell'\n    },\n    {\n        showName: 'Properties files',\n        value: 'properties'\n    },\n    {\n        showName: 'ProtoBuf',\n        value: 'protobuf'\n    },\n    {\n        showName: 'Pug',\n        value: 'pug'\n    },\n    {\n        showName: 'Puppet',\n        value: 'puppet'\n    },\n    {\n        showName: 'Python',\n        value: 'python'\n    },\n    {\n        showName: 'Q',\n        value: 'q'\n    },\n    {\n        showName: 'R',\n        value: 'r'\n    },\n    {\n        showName: 'RPM',\n        value: 'rpm'\n    },\n    {\n        showName: 'reStructuredText',\n        value: 'rst'\n    },\n    {\n        showName: 'Ruby',\n        value: 'ruby'\n    },\n    {\n        showName: 'Rust',\n        value: 'rust'\n    },\n    {\n        showName: 'SAS',\n        value: 'sas'\n    },\n    {\n        showName: 'Sass',\n        value: 'sass'\n    },\n    {\n        showName: 'Spreadsheet',\n        value: 'spreadsheet'\n    },\n    {\n        showName: 'Scala',\n        value: 'scala'\n    },\n    {\n        showName: 'Scheme',\n        value: 'scheme'\n    },\n    {\n        showName: 'SCSS',\n        value: 'scss'\n    },\n    {\n        showName: 'Shell',\n        value: 'shell'\n    },\n    {\n        showName: 'Sieve',\n        value: 'sieve'\n    },\n    {\n        showName: 'Slim',\n        value: 'slim'\n    },\n    {\n        showName: 'Smalltalk',\n        value: 'smalltalk'\n    },\n    {\n        showName: 'Smarty',\n        value: 'smarty'\n    },\n    {\n        showName: 'Solr',\n        value: 'solr'\n    },\n    {\n        showName: 'Soy',\n        value: 'soy'\n    },\n    {\n        showName: 'Stylus',\n        value: 'stylus'\n    },\n    {\n        showName: 'SQL (several dialects)',\n        value: 'sql'\n    },\n    {\n        showName: 'SPARQL',\n        value: 'sparql'\n    },\n    {\n        showName: 'Squirrel',\n        value: 'squirrel'\n    },\n    {\n        showName: 'Swift',\n        value: 'swift'\n    },\n    {\n        showName: 'sTeX, LaTeX',\n        value: 'stex'\n    },\n    {\n        showName: 'Tcl',\n        value: 'tcl'\n    },\n    {\n        showName: 'Textile',\n        value: 'textile'\n    },\n    {\n        showName: 'Tiddlywiki',\n        value: 'tiddlywiki'\n    },\n    {\n        showName: 'Tiki wiki',\n        value: 'tiki'\n    },\n    {\n        showName: 'TOML',\n        value: 'toml'\n    },\n    {\n        showName: 'Tornado (templating language)',\n        value: 'tornado'\n    },\n    {\n        showName: 'troff (for manpages)',\n        value: 'troff'\n    },\n    {\n        showName: 'TTCN',\n        value: 'ttcn'\n    },\n    {\n        showName: 'TTCN Configuration',\n        value: 'ttcn-cfg'\n    },\n    {\n        showName: 'Turtle',\n        value: 'turtle'\n    },\n    {\n        showName: 'Twig',\n        value: 'twig'\n    },\n    {\n        showName: 'TypeScript',\n        value: 'typescript'\n    },\n    {\n        showName: 'VB.NET',\n        value: 'vb'\n    },\n    {\n        showName: 'VBScript',\n        value: 'vbscript'\n    },\n    {\n        showName: 'Velocity',\n        value: 'velocity'\n    },\n    {\n        showName: 'Verilog/SystemVerilog',\n        value: 'verilog'\n    },\n    {\n        showName: 'VHDL',\n        value: 'vhdl'\n    },\n    {\n        showName: 'Vue.js app',\n        value: 'vue'\n    },\n    {\n        showName: 'Web IDL',\n        value: 'webidl'\n    },\n    {\n        showName: 'WebAssembly Text Format',\n        value: 'wast'\n    },\n    {\n        showName: 'XML/HTML',\n        value: 'xml'\n    },\n    {\n        showName: 'XQuery',\n        value: 'xquery'\n    },\n    {\n        showName: 'Yacas',\n        value: 'yacas'\n    },\n    {\n        showName: 'YAML',\n        value: 'yaml'\n    },\n    {\n        showName: 'YAML frontmatter',\n        value: 'yaml-frontmatter'\n    },\n    {\n        showName: 'Z80',\n        value: 'z80'\n    }\n];\n\nexport const CODEMIRROR_PADDING_TOP = 10;\nexport const CODEMIRROR_DEFAULT_MAX_HEIGHT = 350;\n","import { InjectionToken } from '@angular/core';\nimport { ComponentType } from 'slate-angular';\nimport { TheToolbarGroup } from '../components/toolbar-group/toolbar-group.component';\nimport { ToolbarActionTypes } from '../constants/node-types';\nimport { ToolbarItem, ToolbarKey } from '../interfaces';\nimport { ElementKinds, MarkTypes } from './node-types';\n\nexport const TheToolbarGroupToken = new InjectionToken<ComponentType<TheToolbarGroup>>('the-toolbar-group-token');\n\nexport enum DropdownMode {\n    icon = 'icon-mode',\n    text = 'text-mode'\n}\n\nexport const DefaultGlobalToolbarDefinition: ToolbarKey[] = [\n    ElementKinds.headingList,\n    ToolbarActionTypes.split,\n    MarkTypes.bold,\n    MarkTypes.italic,\n    ToolbarActionTypes.group,\n    ToolbarActionTypes.split,\n    MarkTypes.color,\n    MarkTypes.backgroundColor,\n    ToolbarActionTypes.split,\n    ElementKinds.indent,\n    ToolbarActionTypes.alignType,\n    ToolbarActionTypes.verticalAlign,\n    ToolbarActionTypes.split,\n    ElementKinds.numberedList,\n    ElementKinds.bulletedList,\n    ToolbarActionTypes.split,\n    ElementKinds.link,\n    ElementKinds.image,\n    ElementKinds.table,\n    ElementKinds.blockquote,\n    ElementKinds.hr,\n    ElementKinds.code\n];\n\nexport const DefaultInlineToolbarDefinition: ToolbarKey[] = [\n    ToolbarActionTypes.clean,\n    ToolbarActionTypes.split,\n    MarkTypes.bold,\n    MarkTypes.italic,\n    MarkTypes.underline,\n    MarkTypes.strike,\n    ElementKinds.inlineCode,\n    MarkTypes.color,\n    MarkTypes.backgroundColor,\n    ToolbarActionTypes.split,\n    ToolbarActionTypes.alignType,\n    ToolbarActionTypes.split,\n    ElementKinds.link\n];\n\nexport const ToolbarMoreGroup: ToolbarItem = {\n    key: 'more',\n    icon: 'more'\n};\n","import { ThyIconRegistry } from 'ngx-tethys/icon';\nimport { ThePluginMenuItemConfig } from '../interfaces/plugins/plugin-menu';\nimport { ElementKinds, STANDARD_HEADING_TYPES } from './node-types';\nimport { Signal } from '@angular/core';\nimport { TheI18nTranslation } from '../i18n';\n\nexport function getTheDefaultPluginMenu(locale: Signal<TheI18nTranslation>): ThePluginMenuItemConfig[] {\n    return [\n        ...STANDARD_HEADING_TYPES,\n        ElementKinds.numberedList,\n        ElementKinds.bulletedList,\n        ElementKinds.link,\n        { groupName: locale().base },\n        ElementKinds.image,\n        ElementKinds.table,\n        ElementKinds.blockquote,\n        ElementKinds.hr,\n        ElementKinds.code\n    ];\n}\n\nexport enum ThePluginMenuItemType {\n    icon = 'iconMenu',\n    group = 'groupMenu'\n}\n\nexport enum PluginMenuIcons {\n    heading_1 = `the-icon-heading-one`,\n    heading_2 = `the-icon-heading-two`,\n    heading_3 = `the-icon-heading-three`,\n    heading_4 = `the-icon-heading-four`,\n    numberedList = 'the-icon-numbered-list',\n    bulletedList = 'the-icon-bulleted-list',\n    link = 'the-icon-link',\n    image = `the-icon-image`,\n    blockquote = `the-icon-block-quote`,\n    code = `the-icon-code`,\n    table = `the-icon-table`,\n    hr = `the-icon-hr`,\n    checkItem = `the-icon-check-item`\n}\n\nexport const PluginMenuSvgs = [\n    {\n        key: PluginMenuIcons.image,\n        svg: `\n            <svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n                <title>图片</title>\n                <g id=\"图片\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                    <g id=\"icon\">\n                        <rect id=\"矩形\" fill=\"#FFFFFF\" x=\"0\" y=\"0\" width=\"28\" height=\"28\" rx=\"4\"></rect>\n                        <path d=\"M24,0 C26.209139,0 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 0,26.209139 0,24 L0,4 C0,1.790861 1.790861,0 4,0 L24,0 Z M24,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,24 C1,25.6568542 2.34314575,27 4,27 L24,27 C25.6568542,27 27,25.6568542 27,24 L27,4 C27,2.34314575 25.6568542,1 24,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n                        <g id=\"编组\" transform=\"translate(6.611111, 7.777778)\">\n                            <path d=\"M0,0.777777778 C0,0.348222778 0.348222778,0 0.777777778,0 L14,0 C14.4295667,0 14.7777778,0.348222778 14.7777778,0.777777778 L14.7777778,11.6666667 C14.7777778,12.0962333 14.4295667,12.4444444 14,12.4444444 L0.777777778,12.4444444 C0.348222778,12.4444444 0,12.0962333 0,11.6666667 L0,0.777777778 Z\" id=\"路径\" fill=\"#EEEEEE\"></path>\n                            <path d=\"M3.5,5.44444444 C4.35908148,5.44444444 5.05555556,4.74797037 5.05555556,3.88888889 C5.05555556,3.02980741 4.35908148,2.33333333 3.5,2.33333333 C2.64091852,2.33333333 1.94444444,3.02980741 1.94444444,3.88888889 C1.94444444,4.74797037 2.64091852,5.44444444 3.5,5.44444444 Z\" id=\"路径\" fill=\"#F6C659\"></path>\n                            <path d=\"M3.88888889,7 L5.83333333,8.55555556 L8.16666667,5.83333333 L14.7777778,10.1111111 L14.7777778,11.6666667 C14.7777778,12.0962333 14.4295667,12.4444444 14,12.4444444 L0.777777778,12.4444444 C0.348222778,12.4444444 0,12.0962333 0,11.6666667 L0,10.1111111 L3.88888889,7 Z\" id=\"路径\" fill=\"#6698FF\"></path>\n                            <path d=\"M3.88888889,7 L5.824,8.548 L2.462,12.444 L0.777777778,12.4444444 C0.348222778,12.4444444 0,12.0962333 0,11.6666667 L0,10.1111111 L3.88888889,7 Z\" id=\"形状结合\" fill=\"#CAD9F8\"></path>\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        `\n    },\n    {\n        key: PluginMenuIcons.blockquote,\n        svg: `\n            <svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n                <title>引用</title>\n                <g id=\"引用\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                    <g id=\"矩形\">\n                        <rect id=\"蒙版\" fill=\"#FFFFFF\" x=\"0\" y=\"0\" width=\"28\" height=\"28\" rx=\"4\"></rect>\n                        <path d=\"M24,0 C26.209139,0 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 0,26.209139 0,24 L0,4 C0,1.790861 1.790861,0 4,0 L24,0 Z M24,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,24 C1,25.6568542 2.34314575,27 4,27 L24,27 C25.6568542,27 27,25.6568542 27,24 L27,4 C27,2.34314575 25.6568542,1 24,1 Z\" id=\"蒙版\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n                        <g id=\"编组-34\" transform=\"translate(5.444444, 5.911111)\">\n                            <path d=\"M-7.23333333,7.7 L8.16666667,7.7 C8.42439955,7.7 8.63333333,7.90893378 8.63333333,8.16666667 C8.63333333,8.42439955 8.42439955,8.63333333 8.16666667,8.63333333 L-7.23333333,8.63333333 C-7.49106622,8.63333333 -7.7,8.42439955 -7.7,8.16666667 C-7.7,7.90893378 -7.49106622,7.7 -7.23333333,7.7 Z\" id=\"矩形备份-86\" fill=\"#AAAAAA\" transform=\"translate(0.466667, 8.166667) rotate(-270.000000) translate(-0.466667, -8.166667) \"></path>\n                            <path d=\"M9.3776274,0.0835189584 C7.04153911,1.62598565 5.74374227,3.42129833 5.48422757,5.46943466 C5.08022197,8.6579087 7.85358308,10.2185773 9.25881591,8.81632614 C10.6640487,7.414075 9.82169699,5.63423091 8.80416808,5.14771999 C7.78663917,4.66117718 7.16438337,4.83062994 7.27292682,4.18047096 C7.38147027,3.53034388 8.82910918,1.72775937 10.1009195,0.888277673 C10.1852974,0.814506875 10.2174044,0.671366649 10.1361597,0.562767615 C10.08271,0.491356972 9.97788912,0.351294516 9.82169699,0.14257068 C9.6851103,-0.0399490543 9.55426256,-0.0331173617 9.3776274,0.0835189584 Z M15.5277817,0.0835189584 C13.1917244,1.62598565 11.8939183,3.42129833 11.6343943,5.46943466 C11.2304042,8.6579087 14.0037684,10.2185773 15.4090012,8.81632614 C16.8142341,7.414075 15.9718823,5.63423091 14.9543534,5.14771999 C13.9368245,4.66117718 13.3145377,4.83062994 13.4231122,4.18047096 C13.5316556,3.53034388 14.9792945,1.72775937 16.2511048,0.888277673 C16.3354827,0.814506875 16.3675897,0.671366649 16.286314,0.562767615 C16.2328953,0.491356972 16.1280745,0.351294516 15.9718823,0.14257068 C15.8352956,-0.0399490543 15.7044479,-0.0331173617 15.5277817,0.0835189584 Z\" id=\"形状结合\" fill=\"#CACACA\" transform=\"translate(10.888889, 4.666667) rotate(-180.000000) translate(-10.888889, -4.666667) \"></path>\n                            <path d=\"M5.13333333,15.8666667 L12.25134,15.8666667 C12.5090729,15.8666667 12.7180066,16.0756005 12.7180066,16.3333333 C12.7180066,16.5910662 12.5090729,16.8 12.25134,16.8 L5.13333333,16.8 C4.87560045,16.8 4.66666667,16.5910662 4.66666667,16.3333333 C4.66666667,16.0756005 4.87560045,15.8666667 5.13333333,15.8666667 Z\" id=\"矩形备份-88\" fill=\"#CACACA\"></path>\n                            <rect id=\"矩形备份-87\" fill=\"#CACACA\" x=\"4.66666667\" y=\"11.9777778\" width=\"12.4444444\" height=\"1\" rx=\"0.5\"></rect>\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        `\n    },\n    {\n        key: PluginMenuIcons.code,\n        svg: `\n            <svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n                <title>代码块</title>\n                <defs>\n                    <rect id=\"path-1\" x=\"1\" y=\"1\" width=\"26\" height=\"26\" rx=\"4\"></rect>\n                </defs>\n                <g id=\"代码块\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                    <g id=\"icon\">\n                        <rect id=\"蒙版\" fill=\"#FFFFFF\" x=\"0\" y=\"0\" width=\"28\" height=\"28\" rx=\"3.2\"></rect>\n                        <path d=\"M24.8,0 C26.5673112,0 28,1.4326888 28,3.2 L28,24.8 C28,26.5673112 26.5673112,28 24.8,28 L3.2,28 C1.4326888,28 0,26.5673112 0,24.8 L0,3.2 C0,1.4326888 1.4326888,0 3.2,0 L24.8,0 Z M24.8,1 L3.2,1 C1.98497355,1 1,1.98497355 1,3.2 L1,24.8 C1,26.0150264 1.98497355,27 3.2,27 L24.8,27 C26.0150264,27 27,26.0150264 27,24.8 L27,3.2 C27,1.98497355 26.0150264,1 24.8,1 Z\" id=\"蒙版\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n                        <mask id=\"mask-2\" fill=\"white\">\n                            <use xlink:href=\"#path-1\"></use>\n                        </mask>\n                        <use id=\"蒙版\" fill=\"#FFFFFF\" xlink:href=\"#path-1\"></use>\n                        <g id=\"编组-24\" mask=\"url(#mask-2)\">\n                            <g transform=\"translate(4.666667, 4.666667)\">\n                                <rect id=\"矩形备份-60\" fill=\"#F5F5F5\" x=\"0\" y=\"0\" width=\"33.4444444\" height=\"18.6666667\" rx=\"1.6\"></rect>\n                                <path d=\"M1.6,0 L4.66666667,0 L4.66666667,0 L4.66666667,18.6666667 L1.6,18.6666667 C0.7163444,18.6666667 1.082166e-16,17.9503223 0,17.0666667 L0,1.6 C1.13828005e-16,0.7163444 0.7163444,-2.8176431e-16 1.6,0 Z\" id=\"矩形备份-60\" fill=\"#EEEEEE\"></path>\n                                <path d=\"M2.02222222,3.11111111 L2.64444444,3.11111111 C2.90217733,3.11111111 3.11111111,3.32004489 3.11111111,3.57777778 C3.11111111,3.83551066 2.90217733,4.04444444 2.64444444,4.04444444 L2.02222222,4.04444444 C1.76448934,4.04444444 1.55555556,3.83551066 1.55555556,3.57777778 C1.55555556,3.32004489 1.76448934,3.11111111 2.02222222,3.11111111 Z M2.02222222,7 L2.64444444,7 C2.90217733,7 3.11111111,7.20893378 3.11111111,7.46666667 C3.11111111,7.72439955 2.90217733,7.93333333 2.64444444,7.93333333 L2.02222222,7.93333333 C1.76448934,7.93333333 1.55555556,7.72439955 1.55555556,7.46666667 C1.55555556,7.20893378 1.76448934,7 2.02222222,7 Z M2.02222222,10.8888889 L2.64444444,10.8888889 C2.90217733,10.8888889 3.11111111,11.0978227 3.11111111,11.3555556 C3.11111111,11.6132884 2.90217733,11.8222222 2.64444444,11.8222222 L2.02222222,11.8222222 C1.76448934,11.8222222 1.55555556,11.6132884 1.55555556,11.3555556 C1.55555556,11.0978227 1.76448934,10.8888889 2.02222222,10.8888889 Z M2.02222222,14.7777778 L2.64444444,14.7777778 C2.90217733,14.7777778 3.11111111,14.9867116 3.11111111,15.2444444 C3.11111111,15.5021773 2.90217733,15.7111111 2.64444444,15.7111111 L2.02222222,15.7111111 C1.76448934,15.7111111 1.55555556,15.5021773 1.55555556,15.2444444 C1.55555556,14.9867116 1.76448934,14.7777778 2.02222222,14.7777778 Z\" id=\"形状结合\" fill=\"#CACACA\"></path>\n                                <path d=\"M8.24444444,3.11111111 L18.5279071,3.11111111 C18.7856399,3.11111111 18.9945737,3.32004489 18.9945737,3.57777778 C18.9945737,3.83551066 18.7856399,4.04444444 18.5279071,4.04444444 L8.24444444,4.04444444 C7.98671156,4.04444444 7.77777778,3.83551066 7.77777778,3.57777778 C7.77777778,3.32004489 7.98671156,3.11111111 8.24444444,3.11111111 Z\" id=\"矩形备份-61\" fill=\"#CACACA\"></path>\n                                <path d=\"M12.1333333,7 L18.626887,7 C18.8846199,7 19.0935537,7.20893378 19.0935537,7.46666667 C19.0935537,7.72439955 18.8846199,7.93333333 18.626887,7.93333333 L12.1333333,7.93333333 C11.8756005,7.93333333 11.6666667,7.72439955 11.6666667,7.46666667 C11.6666667,7.20893378 11.8756005,7 12.1333333,7 Z\" id=\"矩形备份-63\" fill=\"#FF7575\"></path>\n                                <path d=\"M8.24444444,10.8888889 L16.8888488,10.8888889 C17.1465817,10.8888889 17.3555155,11.0978227 17.3555155,11.3555556 C17.3555155,11.6132884 17.1465817,11.8222222 16.8888488,11.8222222 L8.24444444,11.8222222 C7.98671156,11.8222222 7.77777778,11.6132884 7.77777778,11.3555556 C7.77777778,11.0978227 7.98671156,10.8888889 8.24444444,10.8888889 Z\" id=\"矩形备份-65\" fill=\"#CACACA\"></path>\n                                <path d=\"M10.5777778,14.7777778 L22.6368137,14.7777778 C22.8945466,14.7777778 23.1034804,14.9867116 23.1034804,15.2444444 C23.1034804,15.5021773 22.8945466,15.7111111 22.6368137,15.7111111 L10.5777778,15.7111111 C10.3200449,15.7111111 10.1111111,15.5021773 10.1111111,15.2444444 C10.1111111,14.9867116 10.3200449,14.7777778 10.5777778,14.7777778 Z\" id=\"矩形备份-66\" fill=\"#6698FF\"></path>\n                            </g>\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        `\n    },\n    {\n        key: PluginMenuIcons.table,\n        svg: `\n            <svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n                <title>表格</title>\n                <g id=\"表格\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                    <g id=\"icon\">\n                        <rect id=\"矩形\" fill=\"#FFFFFF\" x=\"0\" y=\"0\" width=\"28\" height=\"28\" rx=\"4\"></rect>\n                        <path d=\"M24,0 C26.209139,0 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 0,26.209139 0,24 L0,4 C0,1.790861 1.790861,0 4,0 L24,0 Z M24,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,24 C1,25.6568542 2.34314575,27 4,27 L24,27 C25.6568542,27 27,25.6568542 27,24 L27,4 C27,2.34314575 25.6568542,1 24,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n                        <g id=\"编组-36\" transform=\"translate(5.288889, 6.844444)\">\n                            <path d=\"M15.7111111,0 L1.71111111,0 C0.766090539,0 0,0.766090539 0,1.71111111 L0,12.6 C0,13.5450206 0.766090539,14.3111111 1.71111111,14.3111111 L15.7111111,14.3111111 C16.6561317,14.3111111 17.4222222,13.5450206 17.4222222,12.6 L17.4222222,1.71111111 C17.4222222,0.766090539 16.6561317,0 15.7111111,0 Z M15.7111111,0.933333333 C16.1406659,0.933333333 16.4888889,1.28155631 16.4888889,1.71111111 L16.4888889,12.6 C16.4888889,13.0295548 16.1406659,13.3777778 15.7111111,13.3777778 L1.71111111,13.3777778 C1.28155631,13.3777778 0.933333333,13.0295548 0.933333333,12.6 L0.933333333,1.71111111 C0.933333333,1.28155631 1.28155631,0.933333333 1.71111111,0.933333333 L15.7111111,0.933333333 Z\" id=\"矩形\" fill=\"#D8D8D8\" fill-rule=\"nonzero\"></path>\n                            <path d=\"M1.73333333,0.933333333 L15.6888889,0.933333333 C16.1307167,0.933333333 16.4888889,1.29150553 16.4888889,1.73333333 L16.4888889,4.43333333 L16.4888889,4.43333333 L0.933333333,4.43333333 L0.933333333,1.73333333 C0.933333333,1.29150553 1.29150553,0.933333333 1.73333333,0.933333333 Z\" id=\"矩形\" fill=\"#EEEEEE\"></path>\n                            <path d=\"M16.4888889,4.04444444 L16.4888889,4.97777778 L11.8993333,4.97744444 L11.8993333,8.71044444 L16.4888889,8.71111111 L16.4888889,9.64444444 L11.8993333,9.64344444 L11.9,13.4555556 L10.9666667,13.4555556 L10.9663333,9.64344444 L6.45533333,9.64344444 L6.45555556,13.4555556 L5.52222222,13.4555556 L5.52133333,9.64344444 L0.933333333,9.64444444 L0.933333333,8.71111111 L5.52133333,8.71044444 L5.52133333,4.97744444 L0.933333333,4.97777778 L0.933333333,4.04444444 L16.4888889,4.04444444 Z M10.9663333,4.97744444 L6.45533333,4.97744444 L6.45533333,8.71044444 L10.9663333,8.71044444 L10.9663333,4.97744444 Z\" id=\"形状结合\" fill=\"#D8D8D8\"></path>\n                            <path d=\"M7.62222222,6.30931634 L9.8,6.30931634 C10.0577329,6.30931634 10.2666667,6.51825012 10.2666667,6.77598301 C10.2666667,7.03371589 10.0577329,7.24264967 9.8,7.24264967 L7.62222222,7.24264967 C7.36448934,7.24264967 7.15555556,7.03371589 7.15555556,6.77598301 C7.15555556,6.51825012 7.36448934,6.30931634 7.62222222,6.30931634 Z\" id=\"矩形\" fill=\"#6698FF\"></path>\n                            <path d=\"M13.0666667,10.977142 L15.2444444,10.977142 C15.5021773,10.977142 15.7111111,11.1860758 15.7111111,11.4438086 C15.7111111,11.7015415 15.5021773,11.9104753 15.2444444,11.9104753 L13.0666667,11.9104753 C12.8089338,11.9104753 12.6,11.7015415 12.6,11.4438086 C12.6,11.1860758 12.8089338,10.977142 13.0666667,10.977142 Z\" id=\"矩形备份-71\" fill=\"#FF7575\"></path>\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        `\n    },\n    {\n        key: PluginMenuIcons.hr,\n        svg: `\n            <svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n                <title>分割线</title>\n                <g id=\"分割线\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                    <g id=\"矩形备份-60\">\n                        <rect id=\"蒙版\" fill=\"#FFFFFF\" x=\"0\" y=\"0\" width=\"28\" height=\"28\" rx=\"3.2\"></rect>\n                        <path d=\"M24.8,0 C26.5673112,0 28,1.4326888 28,3.2 L28,24.8 C28,26.5673112 26.5673112,28 24.8,28 L3.2,28 C1.4326888,28 0,26.5673112 0,24.8 L0,3.2 C0,1.4326888 1.4326888,0 3.2,0 L24.8,0 Z M24.8,1 L3.2,1 C1.98497355,1 1,1.98497355 1,3.2 L1,24.8 C1,26.0150264 1.98497355,27 3.2,27 L24.8,27 C26.0150264,27 27,26.0150264 27,24.8 L27,3.2 C27,1.98497355 26.0150264,1 24.8,1 Z\" id=\"蒙版\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n                        <g id=\"编组-33\" transform=\"translate(5.444444, 5.833333)\">\n                            <path d=\"M2.8,0 L13.6296746,0 C13.8874075,-9.63561613e-16 14.0963413,0.208933783 14.0963413,0.466666667 C14.0963413,0.72439955 13.8874075,0.933333333 13.6296746,0.933333333 L2.8,0.933333333 C2.54226712,0.933333333 2.33333333,0.72439955 2.33333333,0.466666667 C2.33333333,0.208933783 2.54226712,4.73447626e-17 2.8,0 Z\" id=\"矩形备份-81\" fill=\"#CACACA\"></path>\n                            <path d=\"M5.03699206,11.6666667 L15.8666667,11.6666667 C16.1243995,11.6666667 16.3333333,11.8756005 16.3333333,12.1333333 C16.3333333,12.3910662 16.1243995,12.6 15.8666667,12.6 L5.03699206,12.6 C4.77925918,12.6 4.5703254,12.3910662 4.5703254,12.1333333 C4.5703254,11.8756005 4.77925918,11.6666667 5.03699206,11.6666667 Z\" id=\"矩形备份-84\" fill=\"#CACACA\"></path>\n                            <path d=\"M4.27527116,3.88888889 L11.3932778,3.88888889 C11.6510107,3.88888889 11.8599445,4.09782267 11.8599445,4.35555556 C11.8599445,4.61328844 11.6510107,4.82222222 11.3932778,4.82222222 L4.27527116,4.82222222 C4.01753828,4.82222222 3.8086045,4.61328844 3.8086045,4.35555556 C3.8086045,4.09782267 4.01753828,3.88888889 4.27527116,3.88888889 Z\" id=\"矩形备份-82\" fill=\"#CACACA\"></path>\n                            <path d=\"M1.99010847,15.5555556 L9.10811511,15.5555556 C9.36584799,15.5555556 9.57478178,15.7644893 9.57478178,16.0222222 C9.57478178,16.2799551 9.36584799,16.4888889 9.10811511,16.4888889 L1.99010847,16.4888889 C1.73237558,16.4888889 1.5234418,16.2799551 1.5234418,16.0222222 C1.5234418,15.7644893 1.73237558,15.5555556 1.99010847,15.5555556 Z\" id=\"矩形备份-85\" fill=\"#CACACA\"></path>\n                            <path d=\"M0.466666667,7.77777778 L15.8666667,7.77777778 C16.1243995,7.77777778 16.3333333,7.98671156 16.3333333,8.24444444 C16.3333333,8.50217733 16.1243995,8.71111111 15.8666667,8.71111111 L0.466666667,8.71111111 C0.208933783,8.71111111 3.15631751e-17,8.50217733 0,8.24444444 C-3.15631751e-17,7.98671156 0.208933783,7.77777778 0.466666667,7.77777778 Z\" id=\"矩形备份-83\" fill=\"#AAAAAA\"></path>\n                        </g>\n                    </g>\n                </g>\n            </svg>\n        `\n    },\n    {\n        key: PluginMenuIcons.heading_1,\n        svg: `<svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n        <title>H1</title>\n        <g id=\"H1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n            <g id=\"icon\">\n                <path d=\"M4,0 L24,0 C26.209139,1.11220812e-15 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 1.78856188e-15,26.209139 0,24 L0,4 C-7.1463071e-16,1.790861 1.790861,-3.82769592e-17 4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\"></path>\n                <path d=\"M24,0 C26.209139,0 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 0,26.209139 0,24 L0,4 C0,1.790861 1.790861,0 4,0 L24,0 Z M24,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,24 C1,25.6568542 2.34314575,27 4,27 L24,27 C25.6568542,27 27,25.6568542 27,24 L27,4 C27,2.34314575 25.6568542,1 24,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n                <g id=\"1.Base基础/1.icon图标/11.editor/header-1\" transform=\"translate(7.250000, 5.638889)\" fill=\"#666666\">\n                    <path d=\"M0.486666667,8.8817842e-16 C0.751763347,9.50503252e-16 0.966666667,0.21490332 0.966666667,0.48 L0.966,4.188 L5.638,4.188 L5.63888889,0.48 C5.63888889,0.21490332 5.85379221,4.37275529e-16 6.11888889,8.8817842e-16 C6.39065224,8.3948095e-16 6.60555556,0.21490332 6.60555556,0.48 L6.60555556,9.18666667 C6.60555556,9.45176335 6.39065224,9.66666667 6.12555556,9.66666667 C5.85379221,9.66666667 5.63888889,9.45176335 5.63888889,9.18666667 L5.638,5.155 L0.966,5.155 L0.966666667,9.18666667 C0.966666667,9.45176335 0.751763347,9.66666667 0.486666667,9.66666667 C0.21490332,9.66666667 -8.5571344e-16,9.45176335 -8.8817842e-16,9.18666667 L-8.8817842e-16,0.48 C-9.206434e-16,0.21490332 0.21490332,5.48297831e-16 0.48,8.8817842e-16 Z M10.1533333,3.25323092 C10.41843,3.25323092 10.6333333,3.46813424 10.6333333,3.73323092 L10.6332222,8.69923092 L11.5222222,8.7 C11.7431361,8.7 11.9222222,8.8790861 11.9222222,9.1 L11.9222222,9.26666667 C11.9222222,9.48758057 11.7431361,9.66666667 11.5222222,9.66666667 L8.69722222,9.66666667 C8.47630832,9.66666667 8.29722222,9.48758057 8.29722222,9.26666667 L8.29722222,9.1 C8.29722222,8.8790861 8.47630832,8.7 8.69722222,8.7 L9.66622222,8.69923092 L9.66661166,4.83023092 L9.22952121,5.2392987 C9.05879467,5.39859668 8.80335832,5.41040234 8.62020432,5.28015221 L8.54649699,5.21554647 C8.36443045,5.02030401 8.37506666,4.7144468 8.57025613,4.53232345 L9.78398904,3.39983871 C9.81813435,3.36797911 9.85566805,3.3420192 9.8953342,3.3219155 C9.96893129,3.27904764 10.0547841,3.25323092 10.1466667,3.25323092 Z\" id=\"形状结合\"></path>\n                </g>\n                <path d=\"M6.92777778,22.5555556 L14.8222222,22.5555556 C15.0891599,22.5555556 15.3055556,22.7719513 15.3055556,23.0388889 C15.3055556,23.3058265 15.0891599,23.5222222 14.8222222,23.5222222 L6.92777778,23.5222222 C6.66084015,23.5222222 6.44444444,23.3058265 6.44444444,23.0388889 C6.44444444,22.7719513 6.66084015,22.5555556 6.92777778,22.5555556 Z M6.92777778,19.3333333 L22.0722222,19.3333333 C22.3391599,19.3333333 22.5555556,19.549729 22.5555556,19.8166667 C22.5555556,20.0836043 22.3391599,20.3 22.0722222,20.3 L6.92777778,20.3 C6.66084015,20.3 6.44444444,20.0836043 6.44444444,19.8166667 C6.44444444,19.549729 6.66084015,19.3333333 6.92777778,19.3333333 Z\" id=\"形状结合\" fill=\"#CACACA\"></path>\n            </g>\n        </g>\n    </svg>`\n    },\n    {\n        key: PluginMenuIcons.heading_2,\n        svg: `<svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n        <title>H2</title>\n        <g id=\"H2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n            <g id=\"icon\">\n                <path d=\"M4,0 L24,0 C26.209139,1.11220812e-15 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 1.78856188e-15,26.209139 0,24 L0,4 C-7.1463071e-16,1.790861 1.790861,-3.82769592e-17 4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\"></path>\n                <path d=\"M24,0 C26.209139,0 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 0,26.209139 0,24 L0,4 C0,1.790861 1.790861,0 4,0 L24,0 Z M24,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,24 C1,25.6568542 2.34314575,27 4,27 L24,27 C25.6568542,27 27,25.6568542 27,24 L27,4 C27,2.34314575 25.6568542,1 24,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n                <g id=\"1.Base基础/1.icon图标/11.editor/header-1\" transform=\"translate(6.444444, 4.027778)\" fill=\"#666666\">\n                    <path d=\"M1.29222222,1.61111111 C1.5573189,1.61111111 1.77222222,1.82601443 1.77222222,2.09111111 L1.77155556,5.79911111 L6.44355556,5.79911111 L6.44444444,2.09111111 C6.44444444,1.82601443 6.65934776,1.61111111 6.92444444,1.61111111 C7.19620779,1.61111111 7.41111111,1.82601443 7.41111111,2.09111111 L7.41111111,10.7977778 C7.41111111,11.0628745 7.19620779,11.2777778 6.93111111,11.2777778 C6.65934776,11.2777778 6.44444444,11.0628745 6.44444444,10.7977778 L6.44355556,6.76611111 L1.77155556,6.76611111 L1.77222222,10.7977778 C1.77222222,11.0628745 1.5573189,11.2777778 1.29222222,11.2777778 C1.02045888,11.2777778 0.805555556,11.0628745 0.805555556,10.7977778 L0.805555556,2.09111111 C0.805555556,1.82601443 1.02045888,1.61111111 1.28555556,1.61111111 Z M8.54294866,10.4032326 C8.46549728,10.9453191 8.88653734,11.2093734 9.4040306,11.163087 L11.8695555,11.1650088 C12.1364932,11.1650088 12.3528889,10.9486131 12.3528889,10.6816755 C12.3528889,10.4147378 12.1364932,10.1983421 11.8695555,10.1983421 L9.55217211,10.1983421 C9.60918772,9.92829744 9.70569542,9.74900596 9.9446738,9.49220573 C9.97197905,9.46286418 10.0006812,9.4338407 10.0308266,9.40514925 C10.0679212,9.3698437 10.1057089,9.33674814 10.1448148,9.30516195 C10.2581667,9.2136064 10.3681121,9.14331129 10.5709549,9.02767503 C11.2068418,8.66516981 11.4676596,8.47753842 11.8884967,7.99593234 C12.6911804,7.07734092 12.3931352,5.55838894 11.128364,5.0741833 C10.5598979,4.85655145 9.85150899,4.9436238 9.27174711,5.27959293 C9.01795716,5.42666295 8.80133283,5.6322987 8.62349658,5.89139752 C8.47243845,6.11148191 8.52839529,6.41235237 8.74847967,6.5634105 C8.96856406,6.71446863 9.26943452,6.6585118 9.42049266,6.43842741 C9.51915996,6.29467392 9.63059666,6.18889 9.7564252,6.11597299 C10.0954248,5.91952439 10.5021542,5.86953083 10.7827471,5.97695316 C11.3954703,6.21152839 11.5364026,6.92977344 11.1605804,7.35986444 C10.8276846,7.74083056 10.6416645,7.87465269 10.0922091,8.18788523 C9.84765548,8.32729991 9.70077752,8.42120842 9.53741414,8.55315866 C9.47812108,8.60105026 9.42063041,8.65140227 9.36438446,8.70493545 C9.32009556,8.74708828 9.2776503,8.79000875 9.23702309,8.83366574 C8.95040764,9.14165557 8.76259006,9.47514822 8.65373667,9.8216451 C8.61323435,9.95057013 8.58575819,10.0744594 8.56723778,10.1981068 C8.55807029,10.2593115 8.54386212,10.3912347 8.54294866,10.4032326 Z\" id=\"形状结合\"></path>\n                </g>\n                <path d=\"M6.92777778,22.5555556 L14.8222222,22.5555556 C15.0891599,22.5555556 15.3055556,22.7719513 15.3055556,23.0388889 C15.3055556,23.3058265 15.0891599,23.5222222 14.8222222,23.5222222 L6.92777778,23.5222222 C6.66084015,23.5222222 6.44444444,23.3058265 6.44444444,23.0388889 C6.44444444,22.7719513 6.66084015,22.5555556 6.92777778,22.5555556 Z M6.92777778,19.3333333 L22.0722222,19.3333333 C22.3391599,19.3333333 22.5555556,19.549729 22.5555556,19.8166667 C22.5555556,20.0836043 22.3391599,20.3 22.0722222,20.3 L6.92777778,20.3 C6.66084015,20.3 6.44444444,20.0836043 6.44444444,19.8166667 C6.44444444,19.549729 6.66084015,19.3333333 6.92777778,19.3333333 Z\" id=\"形状结合\" fill=\"#CACACA\"></path>\n            </g>\n        </g>\n    </svg>`\n    },\n    {\n        key: PluginMenuIcons.heading_3,\n        svg: `<svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n        <title>H3</title>\n        <g id=\"H3\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n            <g id=\"icon\">\n                <path d=\"M4,0 L24,0 C26.209139,1.11220812e-15 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 1.78856188e-15,26.209139 0,24 L0,4 C-7.1463071e-16,1.790861 1.790861,-3.82769592e-17 4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\"></path>\n                <path d=\"M24,0 C26.209139,0 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 0,26.209139 0,24 L0,4 C0,1.790861 1.790861,0 4,0 L24,0 Z M24,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,24 C1,25.6568542 2.34314575,27 4,27 L24,27 C25.6568542,27 27,25.6568542 27,24 L27,4 C27,2.34314575 25.6568542,1 24,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n                <g id=\"1.Base基础/1.icon图标/11.editor/header-1\" transform=\"translate(6.444444, 4.027778)\" fill=\"#666666\">\n                    <path d=\"M1.29222222,1.61111111 C1.5573189,1.61111111 1.77222222,1.82601443 1.77222222,2.09111111 L1.77155556,5.79911111 L6.44355556,5.79911111 L6.44444444,2.09111111 C6.44444444,1.82601443 6.65934776,1.61111111 6.92444444,1.61111111 C7.19620779,1.61111111 7.41111111,1.82601443 7.41111111,2.09111111 L7.41111111,10.7977778 C7.41111111,11.0628745 7.19620779,11.2777778 6.93111111,11.2777778 C6.65934776,11.2777778 6.44444444,11.0628745 6.44444444,10.7977778 L6.44355556,6.76611111 L1.77155556,6.76611111 L1.77222222,10.7977778 C1.77222222,11.0628745 1.5573189,11.2777778 1.29222222,11.2777778 C1.02045888,11.2777778 0.805555556,11.0628745 0.805555556,10.7977778 L0.805555556,2.09111111 C0.805555556,1.82601443 1.02045888,1.61111111 1.28555556,1.61111111 Z M11.948143,5.79180879 C12.192703,5.47396858 11.9661194,5.01373083 11.5650807,5.01373083 L8.88060052,5.01373083 C8.61366289,5.01373083 8.39726719,5.23012653 8.39726719,5.49706416 C8.39726719,5.76400179 8.61366289,5.98039749 8.88060052,5.98039749 L10.5833317,5.98039749 L9.54636273,7.32808515 C9.48134505,7.4125848 9.44609168,7.51621136 9.44609168,7.62282979 L9.44609168,7.91799037 C9.44609168,8.18980116 9.670148,8.40816141 9.94186869,8.4011635 C10.2134677,8.39416871 10.4585479,8.42132967 10.6774338,8.48206912 C11.0681589,8.59049288 11.2956745,9.04295787 11.144216,9.57106622 C11.0337145,9.95636505 10.6647495,10.1691949 10.1647748,10.1691949 C9.70164909,10.1691949 9.23540718,9.99918387 8.75794251,9.65224072 C8.54199506,9.49532547 8.23973012,9.54318053 8.08281487,9.75912798 C7.92589961,9.97507543 7.97375467,10.2773404 8.18970212,10.4342556 C8.83030566,10.8997414 9.49159006,11.1358616 10.1647748,11.1358616 C11.0993241,11.1358616 11.830095,10.6860003 12.0734236,9.83755774 C12.3756837,8.78363144 11.8418254,7.80198592 10.9359105,7.55060026 C10.8414661,7.52439254 10.7445514,7.50259363 10.6451818,7.48519091 L11.948143,5.79180879 Z\" id=\"形状结合\"></path>\n                </g>\n                <path d=\"M6.92777778,22.5555556 L14.8222222,22.5555556 C15.0891599,22.5555556 15.3055556,22.7719513 15.3055556,23.0388889 C15.3055556,23.3058265 15.0891599,23.5222222 14.8222222,23.5222222 L6.92777778,23.5222222 C6.66084015,23.5222222 6.44444444,23.3058265 6.44444444,23.0388889 C6.44444444,22.7719513 6.66084015,22.5555556 6.92777778,22.5555556 Z M6.92777778,19.3333333 L22.0722222,19.3333333 C22.3391599,19.3333333 22.5555556,19.549729 22.5555556,19.8166667 C22.5555556,20.0836043 22.3391599,20.3 22.0722222,20.3 L6.92777778,20.3 C6.66084015,20.3 6.44444444,20.0836043 6.44444444,19.8166667 C6.44444444,19.549729 6.66084015,19.3333333 6.92777778,19.3333333 Z\" id=\"形状结合\" fill=\"#CACACA\"></path>\n            </g>\n        </g>\n    </svg>`\n    },\n    {\n        key: PluginMenuIcons.heading_4,\n        svg: `<svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n        <title>H4</title>\n        <g id=\"H4\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n            <g id=\"icon\">\n                <path d=\"M4,0 L24,0 C26.209139,1.11220812e-15 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 1.78856188e-15,26.209139 0,24 L0,4 C-7.1463071e-16,1.790861 1.790861,-3.82769592e-17 4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\"></path>\n                <path d=\"M24,0 C26.209139,0 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 0,26.209139 0,24 L0,4 C0,1.790861 1.790861,0 4,0 L24,0 Z M24,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,24 C1,25.6568542 2.34314575,27 4,27 L24,27 C25.6568542,27 27,25.6568542 27,24 L27,4 C27,2.34314575 25.6568542,1 24,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n                <g id=\"1.Base基础/1.icon图标/11.editor/header-1\" transform=\"translate(6.444444, 4.027778)\" fill=\"#666666\">\n                    <path d=\"M1.29222222,1.61111111 C1.5573189,1.61111111 1.77222222,1.82601443 1.77222222,2.09111111 L1.77155556,5.79911111 L6.44355556,5.79911111 L6.44444444,2.09111111 C6.44444444,1.82601443 6.65934776,1.61111111 6.92444444,1.61111111 C7.19620779,1.61111111 7.41111111,1.82601443 7.41111111,2.09111111 L7.41111111,10.7977778 C7.41111111,11.0628745 7.19620779,11.2777778 6.93111111,11.2777778 C6.65934776,11.2777778 6.44444444,11.0628745 6.44444444,10.7977778 L6.44355556,6.76611111 L1.77155556,6.76611111 L1.77222222,10.7977778 C1.77222222,11.0628745 1.5573189,11.2777778 1.29222222,11.2777778 C1.02045888,11.2777778 0.805555556,11.0628745 0.805555556,10.7977778 L0.805555556,2.09111111 C0.805555556,1.82601443 1.02045888,1.61111111 1.28555556,1.61111111 Z M10.8019545,4.76358802 C11.0688522,4.76820431 11.2814733,4.98830989 11.276857,5.2552076 L11.227722,8.04846189 L11.9367156,8.04858418 C12.1739935,8.04858418 12.371337,8.2195635 12.4122617,8.44503773 L12.4200489,8.53191751 C12.4200489,8.79885514 12.2036532,9.01525084 11.9367156,9.01525084 L11.210722,9.01446189 L11.1806618,10.8168794 C11.1765584,11.0541218 11.0021919,11.248479 10.7760437,11.2854984 L10.6890422,11.2917819 C10.4221445,11.2871657 10.2095234,11.0670601 10.2141397,10.8001624 L10.244722,9.01446189 L8.53186071,9.01525084 C8.17452736,9.01525084 7.95025766,8.64635821 8.08952304,8.3363514 L8.12821939,8.26605139 L10.2919929,4.98098295 C10.3949928,4.82460722 10.5732365,4.74757228 10.7474255,4.7661967 Z M10.260722,8.04846189 L10.283722,6.75046189 L9.42897666,8.04858418 L10.260722,8.04846189 Z\" id=\"形状结合\"></path>\n                </g>\n                <path d=\"M6.92777778,22.5555556 L14.8222222,22.5555556 C15.0891599,22.5555556 15.3055556,22.7719513 15.3055556,23.0388889 C15.3055556,23.3058265 15.0891599,23.5222222 14.8222222,23.5222222 L6.92777778,23.5222222 C6.66084015,23.5222222 6.44444444,23.3058265 6.44444444,23.0388889 C6.44444444,22.7719513 6.66084015,22.5555556 6.92777778,22.5555556 Z M6.92777778,19.3333333 L22.0722222,19.3333333 C22.3391599,19.3333333 22.5555556,19.549729 22.5555556,19.8166667 C22.5555556,20.0836043 22.3391599,20.3 22.0722222,20.3 L6.92777778,20.3 C6.66084015,20.3 6.44444444,20.0836043 6.44444444,19.8166667 C6.44444444,19.549729 6.66084015,19.3333333 6.92777778,19.3333333 Z\" id=\"形状结合\" fill=\"#CACACA\"></path>\n            </g>\n        </g>\n    </svg>`\n    },\n    {\n        key: PluginMenuIcons.bulletedList,\n        svg: `<svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n        <title>无序列表</title>\n        <g id=\"无序列表\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n            <g id=\"icon\">\n                <path d=\"M4,0 L24,0 C26.209139,1.11220812e-15 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 1.78856188e-15,26.209139 0,24 L0,4 C-7.1463071e-16,1.790861 1.790861,-3.82769592e-17 4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\"></path>\n                <path d=\"M24,0 C26.209139,0 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 0,26.209139 0,24 L0,4 C0,1.790861 1.790861,0 4,0 L24,0 Z M24,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,24 C1,25.6568542 2.34314575,27 4,27 L24,27 C25.6568542,27 27,25.6568542 27,24 L27,4 C27,2.34314575 25.6568542,1 24,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n                <g id=\"1.icon图标/11.editor/-save备份-32\" transform=\"translate(6.444444, 7.250000)\">\n                    <circle id=\"椭圆形\" fill=\"#666666\" cx=\"1.20833333\" cy=\"1.20833333\" r=\"1.20833333\"></circle>\n                    <circle id=\"椭圆形备份\" fill=\"#666666\" cx=\"1.20833333\" cy=\"7.25\" r=\"1.20833333\"></circle>\n                    <circle id=\"椭圆形备份-2\" fill=\"#666666\" cx=\"1.20833333\" cy=\"13.2916667\" r=\"1.20833333\"></circle>\n                    <g id=\"编组-2\" transform=\"translate(5.638889, 0.805556)\" fill=\"#CACACA\">\n                        <path d=\"M0.483185877,6.0896638 L6.76681412,6.0896638 C7.03367031,6.0896638 7.25,6.30599348 7.25,6.57284968 C7.25,6.83970587 7.03367031,7.05603555 6.76681412,7.05603555 L0.483185877,7.05603555 C0.216329686,7.05603555 3.2680458e-17,6.83970587 0,6.57284968 C-3.2680458e-17,6.30599348 0.216329686,6.0896638 0.483185877,6.0896638 Z\" id=\"矩形备份-74\"></path>\n                        <path d=\"M0.483185877,0 L9.98903635,0 C10.2558925,5.01716756e-16 10.4722222,0.216329686 10.4722222,0.483185877 C10.4722222,0.750042068 10.2558925,0.966371753 9.98903635,0.966371753 L0.483185877,0.966371753 C0.216329686,0.966371753 3.2680458e-17,0.750042068 0,0.483185877 C-3.2680458e-17,0.216329686 0.216329686,1.04531838e-16 0.483185877,0 Z\" id=\"矩形备份-75\"></path>\n                        <path d=\"M0.483185877,12.0833333 L9.98903635,12.0833333 C10.2558925,12.0833333 10.4722222,12.299663 10.4722222,12.5665192 C10.4722222,12.8333754 10.2558925,13.0497051 9.98903635,13.0497051 L0.483185877,13.0497051 C0.216329686,13.0497051 3.2680458e-17,12.8333754 0,12.5665192 C-3.2680458e-17,12.299663 0.216329686,12.0833333 0.483185877,12.0833333 Z\" id=\"矩形备份-77\"></path>\n                    </g>\n                </g>\n            </g>\n        </g>\n    </svg>`\n    },\n    {\n        key: PluginMenuIcons.numberedList,\n        svg: `<svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n        <title>有序列表</title>\n        <g id=\"有序列表\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n            <g id=\"icon\">\n                <path d=\"M4,0 L24,0 C26.209139,1.11220812e-15 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 1.78856188e-15,26.209139 0,24 L0,4 C-7.1463071e-16,1.790861 1.790861,-3.82769592e-17 4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\"></path>\n                <path d=\"M24,0 C26.209139,0 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 0,26.209139 0,24 L0,4 C0,1.790861 1.790861,0 4,0 L24,0 Z M24,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,24 C1,25.6568542 2.34314575,27 4,27 L24,27 C25.6568542,27 27,25.6568542 27,24 L27,4 C27,2.34314575 25.6568542,1 24,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n                <g id=\"1.icon图标/11.editor/-save备份-32\" transform=\"translate(6.444444, 6.444444)\">\n                    <path d=\"M1.04017606,1.15763283 L1.04017606,3.82018834 L2.08035212,3.82018834 L2.08035212,0 L1.27132629,0 L0,0.810342981 L0.462300471,1.62068596 L1.04017606,1.15763283 Z M0.115575118,6.83003369 L0.809025824,7.40885011 C0.924600942,7.17732354 1.15575118,7.06156026 1.27132629,7.06156026 C1.38690141,7.06156026 1.38690141,7.06156026 1.50247653,7.17732354 C1.61805165,7.29308683 1.61805165,7.29308683 1.61805165,7.40885011 C1.61805165,7.52461339 1.61805165,7.64037668 1.50247653,7.75613996 C1.38690141,7.87190324 1.27132629,7.98766652 1.15575118,8.21919309 L0.115575118,9.37682592 L0.115575118,10.0714056 L2.65822771,10.0714056 L2.65822771,9.14529935 L1.50247653,9.14529935 L1.964777,8.68224622 C2.31150235,8.33495637 2.54265259,8.10342981 2.54265259,7.87190324 C2.65822771,7.64037668 2.65822771,7.52461339 2.65822771,7.29308683 C2.65822771,6.94579698 2.54265259,6.71427041 2.31150235,6.48274385 C2.08035212,6.25121728 1.73362677,6.135454 1.38690141,6.135454 C0.809025824,6.135454 0.346725353,6.36698056 0.115575118,6.83003369 Z M2.19592724,14.2388838 C2.54265259,14.0073572 2.65822771,13.7758307 2.65822771,13.3127775 C2.65822771,12.9654877 2.54265259,12.7339611 2.31150235,12.5024346 C2.08035212,12.270908 1.73362677,12.270908 1.38690141,12.270908 C1.15575118,12.270908 0.809025824,12.3866713 0.577875589,12.5024346 C0.346725353,12.6181978 0.231150235,12.8497244 0.115575118,13.081251 L0.924600942,13.5443041 C1.04017606,13.3127775 1.15575118,13.1970143 1.38690141,13.1970143 C1.50247653,13.1970143 1.61805165,13.1970143 1.61805165,13.3127775 C1.73362677,13.3127775 1.73362677,13.4285408 1.73362677,13.5443041 C1.73362677,13.6600674 1.73362677,13.6600674 1.61805165,13.7758307 C1.50247653,13.7758307 1.50247653,13.891594 1.38690141,13.891594 L1.04017606,13.891594 L1.04017606,14.7019369 L1.27132629,14.7019369 C1.38690141,14.7019369 1.50247653,14.7019369 1.61805165,14.8177002 C1.73362677,14.9334635 1.73362677,14.9334635 1.73362677,15.0492268 C1.73362677,15.1649901 1.73362677,15.2807534 1.61805165,15.2807534 C1.50247653,15.3965166 1.50247653,15.3965166 1.38690141,15.3965166 C1.15575118,15.3965166 1.04017606,15.2807534 0.924600942,15.0492268 L0,15.2807534 C0.115575118,15.5122799 0.231150235,15.7438065 0.577875589,15.975333 C0.809025824,16.0910963 1.15575118,16.2068596 1.50247653,16.2068596 C1.84920188,16.2068596 2.19592724,16.0910963 2.42707747,15.8595698 C2.65822771,15.6280432 2.77380283,15.3965166 2.77380283,15.0492268 C2.77380283,14.7019369 2.54265259,14.3546471 2.19592724,14.2388838 Z\" id=\"合并形状\" fill=\"#666666\" fill-rule=\"nonzero\"></path>\n                    <g id=\"编组-2\" transform=\"translate(5.638889, 1.611111)\" fill=\"#CACACA\">\n                        <path d=\"M0.483185877,6.0896638 L6.76681412,6.0896638 C7.03367031,6.0896638 7.25,6.30599348 7.25,6.57284968 C7.25,6.83970587 7.03367031,7.05603555 6.76681412,7.05603555 L0.483185877,7.05603555 C0.216329686,7.05603555 3.2680458e-17,6.83970587 0,6.57284968 C-3.2680458e-17,6.30599348 0.216329686,6.0896638 0.483185877,6.0896638 Z\" id=\"矩形备份-74\"></path>\n                        <path d=\"M0.483185877,0 L9.98903635,0 C10.2558925,5.01716756e-16 10.4722222,0.216329686 10.4722222,0.483185877 C10.4722222,0.750042068 10.2558925,0.966371753 9.98903635,0.966371753 L0.483185877,0.966371753 C0.216329686,0.966371753 3.2680458e-17,0.750042068 0,0.483185877 C-3.2680458e-17,0.216329686 0.216329686,1.04531838e-16 0.483185877,0 Z\" id=\"矩形备份-75\"></path>\n                        <path d=\"M0.483185877,12.0833333 L9.98903635,12.0833333 C10.2558925,12.0833333 10.4722222,12.299663 10.4722222,12.5665192 C10.4722222,12.8333754 10.2558925,13.0497051 9.98903635,13.0497051 L0.483185877,13.0497051 C0.216329686,13.0497051 3.2680458e-17,12.8333754 0,12.5665192 C-3.2680458e-17,12.299663 0.216329686,12.0833333 0.483185877,12.0833333 Z\" id=\"矩形备份-77\"></path>\n                    </g>\n                </g>\n            </g>\n        </g>\n    </svg>`\n    },\n    {\n        key: PluginMenuIcons.link,\n        svg: `<svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n        <title>链接</title>\n        <g id=\"链接\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n            <g id=\"icon\">\n                <path d=\"M4,0 L24,0 C26.209139,1.11220812e-15 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 1.78856188e-15,26.209139 0,24 L0,4 C-7.1463071e-16,1.790861 1.790861,-3.82769592e-17 4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\"></path>\n                <path d=\"M24,0 C26.209139,0 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 0,26.209139 0,24 L0,4 C0,1.790861 1.790861,0 4,0 L24,0 Z M24,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,24 C1,25.6568542 2.34314575,27 4,27 L24,27 C25.6568542,27 27,25.6568542 27,24 L27,4 C27,2.34314575 25.6568542,1 24,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n                <g id=\"编组-5\" transform=\"translate(4.027778, 8.055556)\">\n                    <path d=\"M15.0350681,6.34736082 L17.4060977,6.34736082 C17.6730353,6.34736082 17.889431,6.56375652 17.889431,6.83069415 C17.889431,7.09763178 17.6730353,7.31402748 17.4060977,7.31402748 L15.0350681,7.31402748 C14.7681305,7.31402748 14.5517348,7.09763178 14.5517348,6.83069415 C14.5517348,6.56375652 14.7681305,6.34736082 15.0350681,6.34736082 Z\" id=\"矩形备份-76\" fill=\"#73D897\"></path>\n                    <path d=\"M15.0350681,1.84691117 L19.6555556,1.84691117 C19.9224932,1.84691117 20.1388889,2.06330687 20.1388889,2.3302445 C20.1388889,2.59718213 19.9224932,2.81357784 19.6555556,2.81357784 L15.0350681,2.81357784 C14.7681305,2.81357784 14.5517348,2.59718213 14.5517348,2.3302445 C14.5517348,2.06330687 14.7681305,1.84691117 15.0350681,1.84691117 Z\" id=\"矩形备份-89\" fill=\"#6698FF\"></path>\n                    <path d=\"M15.0350681,10.8478105 L19.6555556,10.8478105 C19.9224932,10.8478105 20.1388889,11.0642062 20.1388889,11.3311438 C20.1388889,11.5980814 19.9224932,11.8144771 19.6555556,11.8144771 L15.0350681,11.8144771 C14.7681305,11.8144771 14.5517348,11.5980814 14.5517348,11.3311438 C14.5517348,11.0642062 14.7681305,10.8478105 15.0350681,10.8478105 Z\" id=\"矩形备份-91\" fill=\"#FF7575\"></path>\n                    <g id=\"1.Base基础/1.icon图标/11.editor/link-insert\" transform=\"translate(-0.805556, -0.805556)\" fill=\"#DDDDDD\">\n                        <path d=\"M7.45355719,4.93747921 C9.23314138,4.93747921 10.6757794,6.38011724 10.6757794,8.15970143 L10.6757794,11.3819237 C10.6757794,13.1615078 9.23314138,14.6041459 7.45355719,14.6041459 C5.673973,14.6041459 4.23133497,13.1615078 4.23133497,11.3819237 L4.23177941,10.5771459 L5.19877941,10.5771459 L5.19800164,11.3819237 C5.19800164,12.6276326 6.20784825,13.6374792 7.45355719,13.6374792 C8.69926613,13.6374792 9.70911275,12.6276326 9.70911275,11.3819237 L9.70911275,8.15970143 C9.70911275,6.9139925 8.69926613,5.90414588 7.45355719,5.90414588 L7.45355719,4.93747921 Z M7.45355719,0.104145876 C9.23314138,0.104145876 10.6757794,1.5467839 10.6757794,3.3263681 L10.675335,4.13114588 L9.70833497,4.13114588 L9.70911275,3.3263681 C9.70911275,2.08065916 8.69926613,1.07081254 7.45355719,1.07081254 C6.20784825,1.07081254 5.19800164,2.08065916 5.19800164,3.3263681 L5.19800164,6.54859032 C5.19800164,7.79429926 6.20784825,8.80414588 7.45355719,8.80414588 L7.45355719,9.77081254 C5.673973,9.77081254 4.23133497,8.32817451 4.23133497,6.54859032 L4.23133497,3.3263681 C4.23133497,1.5467839 5.673973,0.104145876 7.45355719,0.104145876 Z\" id=\"形状结合\" transform=\"translate(7.453557, 7.354146) rotate(46.000000) translate(-7.453557, -7.354146) \"></path>\n                    </g>\n                </g>\n            </g>\n        </g>\n    </svg>`\n    },\n    {\n        key: PluginMenuIcons.checkItem,\n        svg: `<svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n        <title>待办事项</title>\n        <g id=\"待办事项\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n            <g id=\"icon备份-2\">\n                <path d=\"M4,0 L24,0 C26.209139,1.11220812e-15 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 1.78856188e-15,26.209139 0,24 L0,4 C-7.1463071e-16,1.790861 1.790861,-3.82769592e-17 4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\"></path>\n                <path d=\"M24,0 C26.209139,0 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 0,26.209139 0,24 L0,4 C0,1.790861 1.790861,0 4,0 L24,0 Z M24,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,24 C1,25.6568542 2.34314575,27 4,27 L24,27 C25.6568542,27 27,25.6568542 27,24 L27,4 C27,2.34314575 25.6568542,1 24,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n                <g id=\"编组-4\" transform=\"translate(4.027778, 9.666667)\">\n                    <g id=\"编组-3\" transform=\"translate(12.808333, 0.000000)\" fill=\"#CACACA\">\n                        <path d=\"M0.483333333,4.50044965 L2.85436291,4.50044965 C3.12130054,4.50044965 3.33769625,4.71684535 3.33769625,4.98378298 C3.33769625,5.25072061 3.12130054,5.46711632 2.85436291,5.46711632 L0.483333333,5.46711632 C0.216395704,5.46711632 1.46532971e-12,5.25072061 1.46529702e-12,4.98378298 C1.46526433e-12,4.71684535 0.216395704,4.50044965 0.483333333,4.50044965 Z\" id=\"矩形备份-74\"></path>\n                        <path d=\"M0.483333333,0 L5.1038208,0 C5.37075843,3.6496629e-16 5.58715414,0.216395704 5.58715414,0.483333333 C5.58715414,0.750270962 5.37075843,0.966666667 5.1038208,0.966666667 L0.483333333,0.966666667 C0.216395704,0.966666667 3.26904313e-17,0.750270962 0,0.483333333 C-3.26904313e-17,0.216395704 0.216395704,4.9035647e-17 0.483333333,0 Z\" id=\"矩形备份-75\"></path>\n                        <path d=\"M0.483333333,9.0008993 L5.1038208,9.0008993 C5.37075843,9.0008993 5.58715414,9.217295 5.58715414,9.48423263 C5.58715414,9.75117026 5.37075843,9.96756596 5.1038208,9.96756596 L0.483333333,9.96756596 C0.216395704,9.96756596 3.26904313e-17,9.75117026 0,9.48423263 C-3.26904313e-17,9.217295 0.216395704,9.0008993 0.483333333,9.0008993 Z\" id=\"矩形备份-77\"></path>\n                    </g>\n                    <g id=\"3.Data-Input-数据输入/-3.Checkbox-多选框-/-3.Select\" stroke=\"#6698FF\">\n                        <path d=\"M8.45833575,0.4 C8.68155193,0.4 8.88363194,0.49047157 9.02990764,0.636748731 C9.17618616,0.783028715 9.266657,0.985114583 9.266657,1.20833333 L9.266657,8.4583575 C9.266657,8.68157335 9.17618423,8.88365952 9.02990467,9.02994054 C8.88362938,9.17621729 8.68155079,9.26669083 8.45833575,9.26669083 L1.20831037,9.26669083 C0.985115594,9.26669083 0.783038483,9.17620636 0.63675948,9.02992458 C0.490483285,8.88364561 0.4,8.68156715 0.4,8.4583575 L0.4,1.20833333 C0.4,0.985120782 0.490481351,0.783042629 0.63675651,0.636764691 C0.783035922,0.4904825 0.985114455,0.4 1.20831037,0.4 Z\" id=\"圆角矩形-12-拷贝-12\" stroke-width=\"0.8\" fill=\"#6698FF\" opacity=\"0.300000012\"></path>\n                        <polyline id=\"路径\" stroke-width=\"1.2\" points=\"2.41667271 4.30160205 4.22917271 6.11410205 7.12315464 3.02084542\"></polyline>\n                    </g>\n                </g>\n            </g>\n        </g>\n    </svg>`\n    }\n];\n\nlet THE_DEFAULT_MENU_ICONS_HAS_INITIALIZED = false;\nexport const initializeDefaultMenuIcons = (iconRegistry: ThyIconRegistry) => {\n    if (!THE_DEFAULT_MENU_ICONS_HAS_INITIALIZED) {\n        THE_DEFAULT_MENU_ICONS_HAS_INITIALIZED = true;\n        PluginMenuSvgs.forEach(menuItem => {\n            iconRegistry.addSvgIconLiteral(menuItem.key, menuItem.svg);\n        });\n    }\n};\n","export type ColorType = string;\n\nexport const SpecialBackgroundColor = '#FFFFFF';\n\nexport const TableHeaderBackgroundColor = '#F3F3F3';\n","export const SLA_TABLE_SELECTOR = '.slate-element-table';\n\nexport const SLA_TABLE_CELL_SELECTOR = '.slate-element-table-cell';\n","import { ComponentType } from '@angular/cdk/portal';\nimport { Editor } from 'slate';\nimport { DropdownMode, ElementKinds, MarkTypes } from '../constants';\nimport { PluginKey } from './plugins';\n\nexport type ToolbarKey = MarkTypes | ElementKinds | string;\n\nexport enum ToolbarItemType {\n    default = 'default',\n    dropdown = 'dropdown'\n}\n\nexport enum ToolbarAlignment {\n    left = 'start',\n    center = 'center',\n    right = 'end'\n}\n\nexport type ToolbarDefinition = {\n    global?: string[];\n    inline?: string[];\n};\n\ninterface ToolbarItemBase {\n    key: ToolbarKey;\n    pluginKey?: PluginKey; // 关联的 pluginKey , 用于根据 toolbarItem 精准查询 plugin，进而获取工具栏相关的配置\n    execute?: (editor: Editor) => void;\n    active?: (editor: Editor) => boolean | string;\n    disable?: (editor: Editor) => boolean;\n    transformToolbar?: (editor: Editor) => ToolbarDefinition | void;\n    styles?: { [key: string]: string };\n    includes?: (ToolbarKey | ToolbarItem)[];\n}\n\nexport interface CustomizeToolbarItem extends ToolbarItemBase {\n    iconComponent?: ComponentType<any>;\n    type?: ToolbarItemType;\n    dropdownMode?: DropdownMode;\n    dropdownItemKey?: ToolbarKey;\n    dropdownFixedIcon?: boolean; // 固定的 icon / 选项无选中状态：缩进插件 | 更多菜单\n    isHideDropdownActionIcon?: boolean;\n}\n\nexport interface DefaultToolbarItem extends ToolbarItemBase {\n    icon?: string;\n    name?: string;\n    shortcutKey?: string;\n    type?: ToolbarItemType;\n    width?: number;\n}\n\nexport type ToolbarItem = CustomizeToolbarItem & DefaultToolbarItem;\n\nexport type ToolbarEntity = {\n    global?: ToolbarItem[];\n    inline?: ToolbarItem[];\n};\n\nexport interface ToolbarInitOption {\n    toolbarDefinition: ToolbarDefinition;\n    toolbarEntity: ToolbarEntity;\n    toolbarOperations: Map<string, ToolbarItem>;\n}\n\nexport interface ToolbarOption extends ToolbarDefinition {\n    align?: ToolbarAlignment;\n}\n\nexport interface ToolbarItemsComposeReturn {\n    items: ToolbarItem[];\n    group: ToolbarItem[];\n}\n","import { cloneDeep } from '../utils/lodash';\nimport { NoInfer, OverrideByKey, ThePlugin } from '../interfaces';\n\nexport const createPluginFactory =\n    <P = {}>(defaultPlugin: ThePlugin<{}, NoInfer<P>>) =>\n    <T = {}>(override?: Partial<ThePlugin<T, NoInfer<P>>>, overrideByKey: OverrideByKey = {}): ThePlugin<T, NoInfer<P>> => {\n        return cloneDeep(defaultPlugin);\n    };\n","import { Editor, Location } from 'slate';\n\nexport const getBlockCardCenterCursor = (editor: Editor, at?: Location) => {\n    if (at) {\n        const point = Editor.point(editor, at);\n        return Editor.start(editor, point.path);\n    }\n    return Editor.start(editor, editor.selection.anchor.path);\n};\n","import { Editor, Location, Range } from 'slate';\nimport { FAKE_LEFT_BLOCK_CARD_OFFSET, FAKE_RIGHT_BLOCK_CARD_OFFSET } from 'slate-angular';\n\nexport const isBlockCardCursor = (editor: Editor, at?: Location) => {\n    if (at) {\n        const point = at && Editor.point(editor, at);\n        return point.offset < 0;\n    }\n    return editor.selection.anchor.offset < 0;\n};\n\nexport const isBlockCardLeftCursor = (selection: Range) => {\n    return selection?.anchor?.offset === FAKE_LEFT_BLOCK_CARD_OFFSET && selection?.focus?.offset === FAKE_LEFT_BLOCK_CARD_OFFSET;\n};\n\nexport const isBlockCardRightCursor = (selection: Range) => {\n    return selection?.anchor?.offset === FAKE_RIGHT_BLOCK_CARD_OFFSET && selection?.focus?.offset === FAKE_RIGHT_BLOCK_CARD_OFFSET;\n};\n","import { Editor, NodeEntry, Location, Element } from 'slate';\nimport { getBlockCardCenterCursor } from './get-block-card-cursor';\nimport { isBlockCardCursor } from './is-block-card-cursor';\n\nexport const anchorBlockEntry = (editor: Editor, at?: Location): NodeEntry<Element> | undefined => {\n    if (isBlockCardCursor(editor, at)) {\n        at = getBlockCardCenterCursor(editor, at);\n    }\n\n    return Editor.above<Element>(editor, {\n        match: n => Element.isElement(n) && Editor.isBlock(editor, n),\n        at\n    });\n};\n","import { Editor, Element, Location } from 'slate';\nimport { anchorBlockEntry } from './anchor-block-entry';\n\nexport const anchorBlock = (editor: Editor, at?: Location): Element => {\n    const entry = anchorBlockEntry(editor, at);\n    return entry ? entry[0] : null;\n};\n","import { Editor, Element } from 'slate';\n\nexport const anchorInlineEntry = (editor: Editor) => {\n    const match = Editor.above<Element>(editor, {\n        match: n => Element.isElement(n) && Editor.isInline(editor, n)\n    });\n    if (match) {\n        return match;\n    }\n};\n","export function castArray(data?: any) {\n    if (!data) {\n        return [];\n    }\n    return Array.isArray(data) ? data : [data];\n}\n","import { Editor, Element } from 'slate';\nimport { castArray } from './cast-array';\n\nexport type PredicateObj<T> = Partial<Record<keyof T, any | any[]>>;\nexport type PredicateFn<T> = (obj: T) => boolean;\nexport type Predicate<T> = PredicateObj<T> | PredicateFn<T>;\n\n/**\n * Match the object with a predicate object or function.\n * If predicate is:\n * - object: every predicate key/value should be in obj.\n * - function: it should return true.\n */\nexport const match = <T>(obj: T, predicate?: Predicate<T>): boolean => {\n    if (!predicate) return true;\n\n    if (typeof predicate === 'object') {\n        return Object.entries(predicate).every(([key, value]) => {\n            const values = castArray(value);\n\n            return values.includes(obj[key]);\n        });\n    }\n\n    return predicate(obj);\n};\n\nexport const matchPredicate =\n    <T>(predicate?: Predicate<T>) =>\n    (obj: T) =>\n        match(obj, predicate);\n\n/**\n * Extended query options for slate queries:\n * - `match` can be an object predicate where one of the values should include the node value.\n * Example: { type: ['1', '2'] } will match the nodes having one of these 2 types.\n */\nexport const getQueryOptions = <T>(editor: Editor, options: any) => {\n    return {\n        ...options,\n        match: (n: T) => match<T>(n, options.match) && (!options?.block || (Element.isElement(n) && Editor.isBlock(editor, n)))\n    };\n};\n","/**\n * Iterate through all of the nodes in the editor and return the first match. If\n * no match is found, return undefined.\n */\nimport { Editor, Node, NodeEntry, Path, Range, Span, Element } from 'slate';\nimport { match } from '../utils/match';\nimport { FindNodeOptions } from './find-node';\n\n/**\n * Get the first descendant node matching the condition.\n */\nexport const findDescendant = <T extends Node = Node>(editor: Editor, options: FindNodeOptions<T>): NodeEntry<T> | undefined => {\n    // Slate throws when things aren't found so we wrap in a try catch and return undefined on throw.\n    try {\n        const { match: _match, at = editor.selection, reverse = false, voids = false } = options;\n\n        if (!at) return;\n\n        let from;\n        let to;\n        if (Span.isSpan(at)) {\n            [from, to] = at;\n        } else if (Range.isRange(at)) {\n            const first = Editor.path(editor, at, { edge: 'start' });\n            const last = Editor.path(editor, at, { edge: 'end' });\n            from = reverse ? last : first;\n            to = reverse ? first : last;\n        }\n\n        let root: NodeEntry = [editor, []];\n        if (Path.isPath(at)) {\n            root = Editor.node(editor, at);\n        }\n\n        const nodeEntries = Node.descendants(root[0], {\n            reverse,\n            from,\n            to,\n            pass: ([n]) => (voids ? false : Element.isElement(n) && Editor.isVoid(editor, n))\n        });\n\n        for (const [node, path] of nodeEntries) {\n            if (match<Node>(node, _match)) {\n                return [node as any, (at as Path).concat(path)];\n            }\n        }\n    } catch (error) {\n        return undefined;\n    }\n};\n","/**\n * Iterate through all of the nodes in the editor and return the first match. If\n * no match is found, return undefined.\n */\nimport { Editor, Location, Node, NodeEntry, Path, Range, Span, Element } from 'slate';\nimport { MatchOptions } from '../interfaces';\nimport { match } from '../utils/match';\n\nexport type FindNodeOptions<T extends Node = Node> = {\n    at?: Location | Span;\n    reverse?: boolean;\n    voids?: boolean;\n} & MatchOptions<T>;\n\n/**\n * Find node matching the condition.\n */\nexport const findNode = <T extends Node = Node>(editor: Editor, options: FindNodeOptions<T>): NodeEntry<T> | undefined => {\n    // Slate throws when things aren't found so we wrap in a try catch and return undefined on throw.\n    try {\n        const { match: _match = () => true, at = editor.selection || [], reverse = false, voids = false } = options;\n\n        let from;\n        let to;\n        if (Span.isSpan(at)) {\n            [from, to] = at;\n        } else if (Range.isRange(at)) {\n            const first = Editor.path(editor, at, { edge: 'start' });\n            const last = Editor.path(editor, at, { edge: 'end' });\n            from = reverse ? last : first;\n            to = reverse ? first : last;\n        }\n\n        let root: NodeEntry = [editor, []];\n        if (Path.isPath(at)) {\n            root = Editor.node(editor, at);\n        }\n\n        const nodeEntries = Node.nodes(root[0], {\n            reverse,\n            from,\n            to,\n            pass: ([n]) => (voids ? false : Element.isElement(n) && Editor.isVoid(editor, n))\n        });\n\n        for (const [node, path] of nodeEntries) {\n            if (match<Node>(node, _match)) {\n                return [node as any, path];\n            }\n        }\n    } catch (error) {\n        return undefined;\n    }\n};\n","import { AngularEditor } from 'slate-angular';\nimport { NODE_TO_INDEX, NODE_TO_PARENT } from 'slate-dom';\nimport { Editor, Node, Path } from 'slate';\n\n/**\n * Find the path of Slate node.\n */\nexport const findPath = (editor: AngularEditor, node: Node): Path => {\n    const path: Path = [];\n    let child = node;\n\n    while (true) {\n        const parent = NODE_TO_PARENT.get(child);\n\n        if (parent == null) {\n            if (Editor.isEditor(child)) {\n                return path;\n            } else {\n                break;\n            }\n        }\n\n        const i = NODE_TO_INDEX.get(child);\n\n        if (i == null) {\n            break;\n        }\n\n        path.unshift(i);\n        child = parent;\n    }\n    throw new Error(`Unable to find the path for Slate node: ${JSON.stringify(node)}`);\n};\n","import { Ancestor, Editor } from 'slate';\nimport { EditorAboveOptions } from '../interfaces';\nimport { getQueryOptions } from '../utils/match';\n\n/**\n * Get node above a location (default: selection).\n */\nexport const getAbove = <T = Ancestor>(editor: Editor, options: EditorAboveOptions<T> = {}) => {\n    return Editor.above(editor, getQueryOptions(editor, options));\n};\n","import { Editor, Element } from 'slate';\nimport { EditorAboveOptions } from '../interfaces';\n\n/**\n * Get the block above a location (default: selection) by type.\n */\nexport const getAboveByType = (editor: Editor, types: string[] | string, options: Omit<EditorAboveOptions, 'match'> = {}) => {\n    if (!Array.isArray(types)) {\n        types = [types];\n    }\n\n    return Editor.above(editor, {\n        match: n => Element.isElement(n) && types.includes(n.type),\n        ...options\n    });\n};\n","import { Editor, NodeEntry, Path, Point, Element } from 'slate';\n\nexport const getAnchorBlockEntry = (editor: Editor, at?: Path | Point): NodeEntry<Element> => {\n    return Editor.above<Element>(editor, {\n        match: n => Element.isElement(n) && Editor.isBlock(editor, n),\n        at\n    });\n};\n","import { Ancestor, Editor, NodeEntry, Element } from 'slate';\nimport { EditorAboveOptions } from '../interfaces';\n\n/**\n * Get the block above a location (default: selection).\n * If not found, return the editor entry.\n */\nexport const getBlockAbove = (editor: Editor, options: Omit<EditorAboveOptions, 'match'> = {}): NodeEntry<Ancestor> =>\n    Editor.above(editor, {\n        match: n => Element.isElement(n) && Editor.isBlock(editor, n),\n        ...options\n    }) || [editor, []];\n","import { Ancestor, Editor, NodeEntry } from 'slate';\nimport { EditorAboveOptions } from '../interfaces/editor';\n\n/**\n * Get the block above a location (default: selection).\n * If not found, return the editor entry.\n */\nexport const getBlockCardAbove = (editor: Editor, options: Omit<EditorAboveOptions, 'match'> = {}): NodeEntry<Ancestor> =>\n    Editor.above(editor, {\n        match: n => editor.isBlockCard(n),\n        ...options\n    });\n","import { Element, Editor } from 'slate';\n\nexport const isContainer = (editor: Editor, value: Element) => editor.isContainer && editor.isContainer(value);\n","import { CONTAINER_BLOCKS } from '../constants/node-types';\nimport { Editor, Element } from 'slate';\nimport { isContainer } from './is-container-type';\n\nexport const getContainerBlocks = (editor: Editor) => {\n    const containerNode = Editor.above<Element>(editor, {\n        match: (node: Element) => {\n            return Element.isElement(node) && isContainer(editor, node) && !CONTAINER_BLOCKS.includes(node.type);\n        }\n    });\n    return !containerNode ? CONTAINER_BLOCKS : [...CONTAINER_BLOCKS, containerNode[0].type];\n};\n","import { Ancestor, Editor, Location, NodeEntry } from 'slate';\nimport { EditorParentOptions } from '../interfaces';\n\n/**\n * See {@link Editor.parent}.\n * Returns undefined if there is no parent.\n */\nexport const getParent = (editor: Editor, at: Location, options?: EditorParentOptions): NodeEntry<Ancestor> | undefined => {\n    try {\n        return Editor.parent(editor, at, options);\n    } catch (error) {}\n};\n","import { TheEditor } from '../interfaces/editor';\nimport { getBlockAbove } from './get-block-above';\nimport { getParent } from './get-parent';\n\nexport const getDirectlyParent = (editor: TheEditor) => {\n    const [, anchorPath] = getBlockAbove(editor);\n    if (!anchorPath) return;\n\n    const parentEntry = getParent(editor, anchorPath);\n    if (!parentEntry) return;\n\n    return parentEntry;\n};\n","import { Editor, Element, Path } from 'slate';\nimport { TheEditor } from '../interfaces/editor';\nimport { getBlockAbove } from './get-block-above';\nimport { anchorBlockEntry } from './anchor-block-entry';\nimport { CustomElementKinds } from '../custom-types';\n\nexport const getInsertElementsPath = (editor: TheEditor, allowParentTypes: CustomElementKinds[]) => {\n    const [, anchorPath] = getBlockAbove(editor);\n    if (!anchorPath) return false;\n    let parentEntry = Editor.above(editor, {\n        match: n => Element.isElement(n) && Editor.isBlock(editor, n) && allowParentTypes.includes((n as any).type)\n    });\n    if (!parentEntry) return false;\n\n    const [, anchorBlockPath] = anchorBlockEntry(editor);\n    let currentNodePath = anchorBlockPath.slice(0, parentEntry[1].length + 1);\n\n    const illegalParentEntry = Editor.above(editor, {\n        mode: 'highest',\n        at: parentEntry[1],\n        match: (n: Element) => n.type && !isAllowParentTypes(editor, n.type, allowParentTypes)\n    });\n\n    // 获取不可插入节点的根层节点\n    if (illegalParentEntry) {\n        currentNodePath = illegalParentEntry && illegalParentEntry[1];\n    }\n\n    return currentNodePath && Path.next(currentNodePath);\n};\n\nexport const isAllowParentTypes = (editor: TheEditor, targetType: CustomElementKinds, allowParentTypes: CustomElementKinds[]) => {\n    const existChildType = isNestedStructureParentType(editor, targetType);\n    const leafType = existChildType && findNestedStructureLeafType(editor, targetType);\n    return allowParentTypes.includes(targetType) || allowParentTypes.includes(leafType);\n};\n\nexport const isNestedStructureParentType = (editor: TheEditor, type: string): boolean => {\n    for (const key in editor.nestedStructureByKey) {\n        if (key === type) {\n            return true;\n        }\n    }\n    return false;\n};\n\nexport const findNestedStructureLeafType = (editor: TheEditor, target: CustomElementKinds) => {\n    let leafType = editor.nestedStructureByKey[target];\n    while (leafType && editor.nestedStructureByKey[leafType]) {\n        leafType = editor.nestedStructureByKey[leafType];\n    }\n    return leafType;\n};\n","import { Ancestor, Descendant, NodeEntry, Path } from 'slate';\n\n/**\n * Get the last child of a node\n */\nexport const getLastChild = (nodeEntry: NodeEntry<Ancestor>): NodeEntry<Descendant> => {\n    const [node, path] = nodeEntry;\n\n    return [node.children[node.children.length - 1], path.concat([node.children.length - 1])];\n};\n\nexport const getLastChildPath = (nodeEntry: NodeEntry<Ancestor>): Path => getLastChild(nodeEntry)[1];\n","import { Ancestor, Editor, Element, Node } from 'slate';\n\nexport const isAncestor = (node: Node): node is Ancestor => Element.isElement(node) || Editor.isEditor(node);\n","import { Editor, Node, NodeEntry } from 'slate';\nimport { isAncestor } from './is-ancestor';\n\nconst getLastChild = (node: Node, level: number): Node => {\n    if (!(level + 1) || !isAncestor(node)) {\n        return node;\n    }\n\n    const { children } = node;\n    const lastNode = children[children.length - 1];\n\n    return getLastChild(lastNode, level - 1);\n};\n\nexport const getLastNode = (editor: Editor, level: number): NodeEntry => {\n    const { children } = editor;\n    const lastNode = children[children.length - 1];\n    const [, lastPath] = Editor.last(editor, []);\n\n    return [getLastChild(lastNode, level - 1), lastPath.slice(0, level + 1)];\n};\n","import { Ancestor, Descendant, NodeEntry, Path } from 'slate';\n\n/**\n * Get the next sibling nodes after a path.\n * @param ancestorEntry Ancestor of the sibling nodes\n * @param path Path of the reference node\n */\nexport const getNextSiblingNodes = (ancestorEntry: NodeEntry<Ancestor>, path: Path) => {\n    const [ancestor, ancestorPath] = ancestorEntry;\n\n    const leafIndex = path[ancestorPath.length];\n\n    const siblings: Descendant[] = [];\n\n    if (leafIndex + 1 < ancestor.children.length) {\n        for (let i = leafIndex + 1; i < ancestor.children.length; i++) {\n            siblings.push(ancestor.children[i]);\n        }\n    }\n\n    return siblings;\n};\n","import { Editor, Node, Path } from 'slate';\n\nexport const getNode = (editor: Editor, path: Path) => {\n    try {\n        return Node.get(editor, path);\n    } catch (err) {\n        return null;\n    }\n};\n","import { Editor, Path, Point, Range, Span } from 'slate';\n\nexport interface UnhangRangeOptions {\n    at?: Range | Path | Point | Span;\n    voids?: boolean;\n    unhang?: boolean;\n}\n\n/**\n * Return {@link Editor.unhangRange} if `unhang` is true and if `at` (default: selection) is a range.\n */\nexport const unhangRange = (editor: Editor, options: UnhangRangeOptions = {}) => {\n    const { at = editor.selection, voids, unhang = true } = options;\n\n    if (Range.isRange(at) && unhang) {\n        options.at = Editor.unhangRange(editor, at, { voids });\n    }\n};\n","import { Editor } from 'slate';\nimport { EditorNodesOptions } from '../interfaces';\nimport { unhangRange, UnhangRangeOptions } from '../transforms/un-hang-range';\n\nexport const getNodes = (editor: Editor, options: EditorNodesOptions & UnhangRangeOptions = {}) => {\n    unhangRange(editor, options);\n\n    return Editor.nodes(editor, options);\n};\n","import { Editor, Element } from 'slate';\nimport { EditorNodesOptions } from '../interfaces';\nimport { getNodes } from './get-nodes';\n\n/**\n * Get the nodes with a type included in `types` at a location (default: selection).\n */\nexport const getNodesByType = (editor: Editor, types: string[] | string, options: Omit<EditorNodesOptions, 'match'> = {}) => {\n    if (!Array.isArray(types)) {\n        types = [types];\n    }\n\n    return getNodes(editor, {\n        match: n => Element.isElement(n) && types.includes(n.type as string),\n        ...options\n    });\n};\n","import { Editor, Node } from 'slate';\n\n/**\n * get plain text\n * can specify node text interval, the default is \\n\n */\nexport const getPlainText = (editor: Editor, format = '\\n') => {\n    let text = '';\n    if (editor && editor?.children) {\n        for (let i = 0; i < editor?.children.length; i++) {\n            const node = editor?.children[i];\n            text += `${i === 0 ? '' : format}${Node.string(node)}`;\n        }\n    }\n    return text;\n};\n","import { Editor } from 'slate';\nimport { ThePlugin, ToolbarItem } from '../interfaces';\n\nexport const getPluginByToolbarItem = (editor: Editor, toolbarItem: ToolbarItem): ThePlugin => {\n    const pluginKey = toolbarItem.pluginKey;\n    if (pluginKey) {\n        return editor.pluginsByKey[pluginKey];\n    }\n    for (let key in editor.pluginsByKey) {\n        const toolbarItems = editor.pluginsByKey[key].toolbarItems;\n        if (toolbarItems && toolbarItems.some(item => item.key === toolbarItem.key)) {\n            return editor.pluginsByKey[key];\n        }\n    }\n};\n","import { Editor, Location, Path, Point } from 'slate';\nimport { castArray } from '../utils/cast-array';\nimport { map } from '../utils/lodash';\n\nexport interface BeforeOptions {\n    distance?: number | undefined;\n    unit?: 'character' | 'word' | 'line' | 'block' | 'offset' | undefined;\n}\n\nexport interface PointBeforeOptions extends BeforeOptions {\n    /**\n     * Lookup before the location for `matchString`.\n     */\n    matchString?: string | string[];\n\n    /**\n     * Lookup before the location until this predicate is true\n     */\n    match?: (value: { beforeString: string; beforePoint: Point; at: Location }) => boolean;\n\n    /**\n     * If true, get the point after the matching point.\n     * If false, get the matching point.\n     */\n    afterMatch?: boolean;\n\n    /**\n     * If true, lookup until the start of the editor value.\n     * If false, lookup until the first invalid character.\n     */\n    skipInvalid?: boolean;\n\n    /**\n     * Allow lookup across multiple node paths.\n     */\n    multiPaths?: boolean;\n}\n\n/**\n * {@link Editor.before} with additional options.\n * TODO: support for sequence of any characters.\n */\nexport const getPointBefore = (editor: Editor, at: Location, options?: PointBeforeOptions) => {\n    if (!options || (!options.match && !options.matchString)) {\n        return Editor.before(editor, at, options);\n    }\n\n    let beforeAt = at;\n    let previousBeforePoint = Editor.point(editor, at, { edge: 'end' });\n\n    const stackLength = (options.matchString ? options.matchString.length : 0) + 1;\n    const stack = Array(stackLength);\n\n    const unitOffset = !options.unit || options.unit === 'offset';\n\n    let count = 0;\n    while (true) {\n        const beforePoint = Editor.before(editor, beforeAt, options);\n\n        // not found\n        if (!beforePoint) {\n            return;\n        }\n\n        // different path\n        if (!options.multiPaths && !Path.equals(beforePoint.path, previousBeforePoint.path)) {\n            return;\n        }\n\n        const beforeString = Editor.string(editor, {\n            anchor: beforePoint,\n            focus: previousBeforePoint\n        });\n\n        const matchString: string[] = castArray(options.matchString);\n\n        let beforeStringToMatch = beforeString;\n\n        if (unitOffset && stackLength) {\n            stack.unshift({\n                point: beforePoint,\n                text: beforeString\n            });\n            stack.pop();\n\n            beforeStringToMatch = map(stack.slice(0, -1), 'text').join('');\n        }\n\n        if (\n            matchString.includes(beforeStringToMatch) ||\n            (options.match ? options.match({ beforeString: beforeStringToMatch, beforePoint, at }) : '')\n        ) {\n            if (options.afterMatch) {\n                if (stackLength && unitOffset) {\n                    return stack[stack.length - 1] ? stack[stack.length - 1].point : '';\n                }\n                return previousBeforePoint;\n            }\n            return beforePoint;\n        }\n\n        previousBeforePoint = beforePoint;\n        beforeAt = beforePoint;\n\n        count += 1;\n\n        if (!options.skipInvalid) {\n            if (!matchString || count >= options.matchString.length) {\n                return;\n            }\n        }\n    }\n};\n","import { Editor, Location, Path, Point, Range } from 'slate';\n\nexport const getPointFromLocation = (\n    editor: Editor,\n    {\n        at = editor.selection,\n        focus\n    }: {\n        at?: Location | null;\n        focus?: boolean;\n    } = {}\n) => {\n    let point: Point | undefined;\n    if (Range.isRange(at)) {\n        point = !focus ? at.anchor : at.focus;\n    }\n    if (Point.isPoint(at)) {\n        point = at;\n    }\n    if (Path.isPath(at)) {\n        point = { path: at, offset: 0 };\n    }\n\n    return point;\n};\n","import { Path } from 'slate';\n\nexport const getPreviousPath = (path: Path): Path | undefined => {\n    if (path.length === 0) return;\n\n    const last = path[path.length - 1];\n\n    if (last <= 0) return;\n\n    return path.slice(0, -1).concat(last - 1);\n};\n","import { Editor } from 'slate';\nimport { EditorAboveOptions } from '../interfaces';\nimport { getBlockAbove } from './get-block-above';\nimport { getPointFromLocation } from './get-point-from-location';\n\n/**\n * Get the range from the start of the block above a location (default: selection) to the location.\n */\nexport const getRangeFromBlockStart = (editor: Editor, options: Omit<EditorAboveOptions, 'match'> = {}) => {\n    const [, path] = getBlockAbove(editor, options);\n\n    const start = Editor.start(editor, path);\n\n    const focus = getPointFromLocation(editor, options);\n\n    if (!focus) {\n        return false;\n    }\n\n    return { anchor: start, focus };\n};\n","import { Editor, Location, Range } from 'slate';\nimport { getPointBefore, PointBeforeOptions } from './get-point-before';\n\nexport type RangeBeforeOptions = PointBeforeOptions;\n\n/**\n * Get range from {@link getPointBefore} to the end point of `at`.\n */\nexport const getRangeBefore = (editor: Editor, at: Location, options?: RangeBeforeOptions): Range | undefined => {\n    const anchor = getPointBefore(editor, at, options);\n    if (!anchor) {\n        return;\n    }\n\n    const focus = Editor.point(editor, at, { edge: 'end' });\n\n    return {\n        anchor,\n        focus\n    };\n};\n","import { Editor, NodeEntry, Text } from 'slate';\nimport { MarkTypes, MarkProps } from '../constants';\n\nexport const getSelectionMarks = (editor: Editor): { [key in MarkTypes]?: any } => {\n    const matchs = Editor.nodes(editor, { match: Text.isText });\n    const marks = {};\n    for (const match of matchs) {\n        const [node] = match as NodeEntry<Text>;\n        const { text, ...rest } = node;\n        Object.assign(marks, rest);\n    }\n    for (const key in marks) {\n        if (!MarkProps.includes(key as MarkTypes)) {\n            delete marks[key];\n        }\n    }\n    return marks;\n};\n","import { Node, Descendant, NodeEntry, Editor, Element } from 'slate';\nimport { CustomElementKinds } from '../custom-types';\nimport { getAboveByType } from './get-above-by-type';\n\nexport const getSelectionNodesByType = (editor: Editor, fragmentData: Descendant[], types: CustomElementKinds[] = []): Node => {\n    try {\n        const { selection } = editor;\n        const nodes = Editor.node(editor, selection);\n        const nodeType = (nodes[0] as Element).type;\n        if (types.length > 0) {\n            if (types.includes(nodeType)) {\n                return Node.get(fragmentData[0], new Array(nodes[1].length - 1).fill(0));\n            } else {\n                let parentNode: NodeEntry;\n                for (let i = 0; i < types.length; i++) {\n                    parentNode = getAboveByType(editor, types[i], { mode: 'lowest' });\n                    if (parentNode) {\n                        break;\n                    }\n                }\n                if (parentNode) {\n                    return Node.get(fragmentData[0], new Array(parentNode[1].length - 1).fill(0));\n                }\n            }\n        }\n    } catch (err) {\n        return null;\n    }\n};\n","import { Editor, Location } from 'slate';\n\n/**\n * See {@link Editor.string}.\n * If `at` is not defined, return an empty string.\n */\nexport const getText = (editor: Editor, at?: Location | null) => {\n    return at && Editor.string(editor, at);\n};\n","import { Editor } from 'slate';\nimport { PluginKey } from '../interfaces';\nimport { getPluginOptions } from '../core';\nimport { anchorBlock } from './anchor-block';\nimport { CustomElementKinds } from '../custom-types';\n\nexport const getToolbarItemDisabled = (editor: Editor, key: PluginKey, customTypes?: CustomElementKinds[]) => {\n    if (editor.selection) {\n        let disabledOperateTypes = getPluginOptions(editor, key)?.disabledOperateTypes ?? [];\n        if (customTypes?.length) {\n            disabledOperateTypes = Array.from(new Set([...disabledOperateTypes, ...customTypes]));\n        }\n        const anchorNode = anchorBlock(editor);\n        return anchorNode && disabledOperateTypes.includes(anchorNode?.type);\n    }\n};\n","import { Editor, Element, Text, Node } from 'slate';\nimport { ELEMENT_UNIQUE_ID } from '../constants/default';\nimport { getClipboardData } from 'slate-angular';\nimport { TheiaConverter } from '@atinc/selene';\n\nexport const getStartBlock = (editor: Editor, fragment: Element) => {\n    const firstChild = fragment.children && fragment.children[0];\n    if (\n        firstChild &&\n        Element.isElement(firstChild) &&\n        !Editor.isInline(editor, firstChild) &&\n        !Text.isText(firstChild) &&\n        Element.isElement(firstChild)\n    ) {\n        return getStartBlock(editor, firstChild);\n    }\n    return fragment;\n};\n\nexport const getEndBlock = (editor: Editor, fragment: Element) => {\n    const lastChild = fragment.children && fragment.children[fragment.children.length - 1];\n    if (\n        lastChild &&\n        Element.isElement(lastChild) &&\n        !Editor.isInline(editor, lastChild) &&\n        !Text.isText(lastChild) &&\n        Element.isElement(lastChild)\n    ) {\n        return getEndBlock(editor, lastChild);\n    }\n    return fragment;\n};\n\nexport const extractFragment = async (data: DataTransfer, deleteKey = ELEMENT_UNIQUE_ID) => {\n    const clipboardData = await getClipboardData(data);\n    let elements = clipboardData?.elements;\n\n    if (elements) {\n        if (!Array.isArray(elements)) {\n            elements = [elements];\n        }\n        // delete key to avoid duplicate keys\n        if (deleteKey) {\n            deleteElementKey(elements, deleteKey);\n        }\n        return elements;\n    }\n    return null;\n};\n\nexport const extractFragmentByHTML = async (data: DataTransfer, deleteKey = ELEMENT_UNIQUE_ID) => {\n    const clipboardData = await getClipboardData(data);\n    let elements = clipboardData?.elements;\n\n    if (!elements && clipboardData?.html) {\n        const htmlDom = new DOMParser().parseFromString(clipboardData?.html, 'text/html');\n        const fragment = TheiaConverter.convertToTheia(Array.from(htmlDom.body.children)) as Element[];\n        if (fragment && fragment.length > 0) {\n            return fragment;\n        }\n    }\n    return null;\n};\n\nexport function deleteElementKey(nodes: Node[], key: string) {\n    nodes.forEach(node => {\n        if (node[key]) {\n            delete node[key];\n        }\n        if (Element.isElement(node) && node.children) {\n            deleteElementKey(node.children, key);\n        }\n    });\n    return nodes;\n}\n\n/**\n * 过滤文本格式：颜色/背景色/字体大小\n * @param node\n */\nexport function filterTextFormat(node: Element) {\n    node.children.forEach(child => {\n        if (Text.isText(child)) {\n            if (child['color']) {\n                delete child['color'];\n            }\n            if (child['background-color']) {\n                delete child['background-color'];\n            }\n            if (child['font-size']) {\n                delete child['font-size'];\n            }\n        } else {\n            filterTextFormat(child);\n        }\n    });\n}\n\nexport function recursionNodes(nodes: Node[], callback: (node: Node) => void) {\n    nodes.forEach(element => {\n        if (Element.isElement(element)) {\n            recursionNodes(element.children, callback);\n        }\n        callback(element);\n    });\n}\n","import { Editor, Element } from 'slate';\nimport { getStartBlock, getEndBlock } from '../utils/fragment';\n\nexport const isAcrossBlocks = (editor: Editor, fragment: Element[]) => {\n    const startBlock = getStartBlock(editor, fragment[0]);\n    const endBlock = getEndBlock(editor, fragment[fragment.length - 1]);\n    return startBlock && endBlock && startBlock !== endBlock;\n};\n","import { Ancestor, Editor, Node } from 'slate';\n\n/**\n * Is an ancestor empty (empty text and no inline children).\n */\nexport const isAncestorEmpty = (editor: Editor, node: Ancestor) =>\n    !Node.string(node) && !node.children.some(n => Editor.isInline(editor, n));\n","import { Editor } from 'slate';\nimport { getBlockAbove } from './get-block-above';\nimport { isAncestorEmpty } from './is-ancestor-empty';\n\n/**\n * Is the block above the selection empty.\n */\nexport const isBlockAboveEmpty = (editor: Editor) => {\n    const blockEntry = getBlockAbove(editor);\n    const [block] = blockEntry;\n    return isAncestorEmpty(editor, block);\n};\n","import { Editor, Element } from 'slate';\nimport { CustomElementKinds } from '../custom-types';\n\nexport const isBlockActive = (editor: Editor, format: CustomElementKinds) => {\n    const [match] = Editor.nodes(editor, {\n        match: n => Element.isElement(n) && n.type === format\n    });\n    return !!match;\n};\n","import { Editor, Text } from 'slate';\nimport { getBlockAbove } from './get-block-above';\nimport { getNextSiblingNodes } from './get-next-sibling-nodes';\n\n/**\n * Is there empty text after the selection.\n * If there is no leaf after the selected leaf, return {@link Editor.isEnd}.\n * Else, check if the next leaves are empty.\n */\nexport const isBlockTextEmptyAfterSelection = (editor: Editor) => {\n    if (!editor.selection) {\n        return false;\n    }\n\n    const blockAbove = getBlockAbove(editor);\n\n    const cursor = editor.selection.focus;\n\n    if (!Editor.isEnd(editor, cursor, Editor.parent(editor, editor.selection)[1])) {\n        return false;\n    }\n\n    const siblingNodes = getNextSiblingNodes(blockAbove, cursor.path);\n\n    if (siblingNodes.length) {\n        for (const siblingNode of siblingNodes) {\n            if ((siblingNode as Text).text) {\n                return false;\n            }\n        }\n    } else {\n        return Editor.isEnd(editor, cursor, blockAbove[1]);\n    }\n\n    return true;\n};\n","import { Range } from 'slate';\n\n/**\n * See {@link Range.isCollapsed}.\n * Return false if `range` is not defined.\n */\nexport const isCollapsed = (range?: Range | null) => !!range && Range.isCollapsed(range);\n","import { Editor, Element } from 'slate';\nimport { getBlockAbove } from './get-block-above';\n\nexport const isContainNestedType = (editor: Editor, types: string[] | string) => {\n    if (!Array.isArray(types)) {\n        types = [types];\n    }\n    const [, anchorPath] = getBlockAbove(editor);\n    if (!anchorPath) return false;\n\n    const parentEntry = Editor.above(editor, { match: n => Element.isElement(n) && types.includes(n.type) });\n    if (!parentEntry) return false;\n\n    const [, parentPath] = parentEntry;\n    const entry = Editor.above(editor, {\n        at: parentPath,\n        match: n => {\n            if (!Element.isElement(n)) return false;\n            const isNestedStructure = editor.nestedStructureByKey[n.type];\n            if (isNestedStructure) return true;\n            return types.includes(n.type);\n        }\n    });\n    if (entry) return true;\n\n    return false;\n};\n","import { Descendant, Element, Text } from 'slate';\n\nexport const isDescendant = (node: any): node is Descendant => Element.isElement(node) || Text.isText(node);\n","import { Descendant, Node, Element } from 'slate';\nimport { ElementKinds } from '../constants/node-types';\n\nexport const isEmptyContent = (children: Descendant[]) => {\n    if (!children || children.length < 1) {\n        return true;\n    }\n    if (children && children.length === 1) {\n        const firstNode = children[0] as Element;\n        if (firstNode.type === ElementKinds.default && firstNode.children.length === 1 && !Node.string(firstNode)) {\n            return true;\n        }\n    }\n    return false;\n};\n","import { Editor, Node } from 'slate';\nimport { ElementKinds } from '../constants';\n\nexport interface FilterRule {\n    // 算实际内容的类型\n    containTypes?: string[];\n    // 是否排除文本的空格\n    textSpace?: boolean;\n}\n\nexport const isEmptyContentByFilter = (editor: Editor, rules?: FilterRule) => {\n    if (!editor?.children || editor?.children.length < 1) {\n        return true;\n    }\n    const defaultTypes = [ElementKinds.code, ElementKinds.table, ElementKinds.image];\n    const containTypes = rules?.containTypes ? [...defaultTypes, ...rules.containTypes] : defaultTypes;\n    const textSpace = rules?.textSpace !== undefined ? rules.textSpace : true;\n    const filterNodes = Array.from(Node.elements(editor));\n\n    if (filterNodes.some(n => n[0]?.type && containTypes.includes(n[0].type))) {\n        return false;\n    }\n\n    const nodesEntry = Node.texts(editor);\n    const nodes = Array.from(nodesEntry);\n    const allText = nodes.reduce((total, text) => (total += text[0].text), '');\n    const filterText = textSpace ? allText.replace(/\\s+/g, '') : allText;\n    const textLength = filterText?.length ?? 0;\n    const isEmptyText = textLength <= 0;\n\n    return isEmptyText;\n};\n","import { Editor, Path, Point, Element, Node } from 'slate';\nimport { ElementKinds } from '../constants/node-types';\nimport { getAnchorBlockEntry } from './get-anchor-block-entry';\nimport { isAncestorEmpty } from './is-ancestor-empty';\n\nexport const isEmptyParagraph = (editor: Editor, at?: Path | Point) => {\n    const entry = getAnchorBlockEntry(editor, at);\n    if (!entry) {\n        return false;\n    }\n    const [block] = entry;\n    return Editor.isEmpty(editor, block) && block.type === ElementKinds.paragraph;\n};\n\nexport const isEmptyParagraphElement = (editor: Editor, element: Element) => {\n    const isParagraph = element.type === ElementKinds.paragraph;\n    const isEmpty = isAncestorEmpty(editor, element);\n    return isParagraph && isEmpty;\n};\n\n/**\n * 判断元素是否是空段落，仅仅包含空格或者\\n算空段落\n * @param editor\n * @param element\n * @returns\n */\nexport const isLogicEmptyParagraphElement = (editor: Editor, element: Element) => {\n    const text = Node.string(element).replace(/(\\s|\\n)*$/g, '');\n    return text.length === 0 && !element.children.some(n => Editor.isInline(editor, n));\n};\n","import { Editor, Node, Path, Element } from 'slate';\nimport { ElementKinds } from '../constants/node-types';\n\nexport const isEmptyParagraphByPath = (editor: Editor, at: Path) => {\n    const block = Node.get(editor, at) as Element;\n    return Editor.isEmpty(editor, block) && block.type === ElementKinds.paragraph;\n};\n","import { Path } from 'slate';\n\n/**\n * Is it the first child of the parent\n */\nexport const isFirstChild = (path: Path) => path[path.length - 1] === 0;\n","import { Editor, Range } from 'slate';\n\nexport const isGlobalCollapsed = (editor: Editor) => {\n    return editor && editor.selection && Range.isCollapsed(editor.selection);\n};\n","import { Editor, Element } from 'slate';\nimport { CustomElementKinds } from '../custom-types';\nimport { getAboveByType } from './get-above-by-type';\n\nexport const isIncludeTypes = (editor: Editor, types: CustomElementKinds[]) => {\n    const parentType = [];\n    types.map((item: string) => {\n        const entry = getAboveByType(editor, item);\n        if (entry) {\n            parentType.push((entry[0] as Element).type);\n        }\n    });\n    return parentType.length > 0;\n};\n","import { Node, NodeEntry, Element } from 'slate';\nimport { QueryOptions } from '../interfaces';\n\n/**\n * Is the node entry filling a condition.\n */\nexport const isNodeType = (entry?: NodeEntry<Node>, { filter = () => true, allow = [], exclude = [] }: QueryOptions = {}) => {\n    let filterAllow: typeof filter = () => true;\n    if (allow.length) {\n        filterAllow = ([n]) => allow.includes((n as Element).type as string);\n    }\n\n    let filterExclude: typeof filter = () => true;\n    if (exclude.length) {\n        filterExclude = ([n]) => !exclude.includes((n as Element).type as string);\n    }\n\n    return !!entry && filter(entry) && filterAllow(entry) && filterExclude(entry);\n};\n","import { Editor } from 'slate';\nimport { EditorNodesOptions } from '../interfaces';\nimport { getNodesByType } from './get-nodes-by-type';\n\n/**\n * Is there a node with a type included in `types` at a location (default: selection).\n */\nexport const isNodeTypeIn = (editor: Editor, types: string[] | string, options: Omit<EditorNodesOptions, 'match'> = {}) => {\n    const [match] = getNodesByType(editor, types, options);\n    return !!match;\n};\n","import { Editor, Element } from 'slate';\nimport { ElementKinds } from '../constants/node-types';\n\nexport const isParagraph = (editor: Editor) => {\n    const [match] = Editor.nodes(editor, {\n        match: n => Element.isElement(n) && n.type === ElementKinds.paragraph\n    });\n    return !!match;\n};\n","import { Point } from 'slate';\n\nexport const isPointAtRoot = (point: Point) => point.path.length === 2;\n","import { Editor, Path, Range } from 'slate';\nimport { EditorAboveOptions } from '../interfaces';\nimport { getBlockAbove } from './get-block-above';\n\n/**\n * Is the range (default: selection) across blocks.\n */\nexport const isRangeAcrossBlocks = (\n    editor: Editor,\n    { at, ...options }: Omit<EditorAboveOptions, 'at' | 'match'> & { at?: Range | null } = {}\n) => {\n    if (!at) at = editor.selection;\n    if (!at) return false;\n\n    const [start, end] = Range.edges(at);\n    const startBlock = getBlockAbove(editor, {\n        at: start,\n        ...options\n    });\n    const endBlock = Editor.above(editor, {\n        at: end,\n        ...options\n    });\n\n    return startBlock && endBlock && !Path.equals(startBlock[1], endBlock[1]);\n};\n","import { Range } from 'slate';\nimport { isPointAtRoot } from './is-point-at-root';\n\nexport const isRangeAtRoot = (range: Range) => isPointAtRoot(range.anchor) || isPointAtRoot(range.focus);\n","import { Path } from 'slate';\n\nexport const isRootPath = (path: Path) => path.length === 1;\n","import { Editor, Location, Point } from 'slate';\n\n/**\n * {@link Editor.isStart}. If point is null, return false.\n */\nexport const isStart = (editor: Editor, point: Point | null | undefined, at: Location): boolean =>\n    !!point && Editor.isStart(editor, point, at);\n","import { Editor, Node } from 'slate';\nimport { findNode, FindNodeOptions } from './find-node';\n\n/**\n * Iterate through all of the nodes in the editor and break early for the first truthy match. Otherwise\n * returns false.\n */\nexport const someNode = <T extends Node = Node>(editor: Editor, options: FindNodeOptions<T>) => {\n    return !!findNode<T>(editor, options);\n};\n","import { Editor, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { HistoryEditor } from 'slate-history';\nimport * as TheQueries from '../queries';\n\nexport const autoFocus = (editor: Editor, isFocus: boolean) => {\n    setTimeout(() => {\n        if (editor && editor.children.length > 0 && isFocus) {\n            HistoryEditor.withoutMerging(editor, () => {\n                const path = [0];\n                const block = TheQueries.getNode(editor, path);\n                const isBlockCard = editor.isBlockCard(block);\n                if (isBlockCard) {\n                    Transforms.select(editor, path);\n                    AngularEditor.moveBlockCardCursor(editor, path, { direction: 'right' });\n                } else {\n                    Transforms.select(editor, Editor.end(editor, path));\n                }\n                AngularEditor.focus(editor);\n            });\n        }\n    });\n};\n","export const base64toBlob = (b64Data, contentType = '', sliceSize = 512) => {\n    const byteCharacters = atob(b64Data);\n    const byteArrays = [];\n\n    for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n        const slice = byteCharacters.slice(offset, offset + sliceSize);\n\n        const byteNumbers = new Array(slice.length);\n        for (let i = 0; i < slice.length; i++) {\n            byteNumbers[i] = slice.charCodeAt(i);\n        }\n\n        const byteArray = new Uint8Array(byteNumbers);\n        byteArrays.push(byteArray);\n    }\n\n    const blob = new Blob(byteArrays, { type: contentType });\n    return blob;\n};\n","export const isColorPanel = (element: HTMLElement) => {\n    const pickerPanel = element.closest('.thy-color-picker-panel');\n    const customPickerPanel = element.closest('.thy-color-picker-custom-panel');\n    if (pickerPanel || customPickerPanel) {\n        return true;\n    }\n    return false;\n};\n\nexport const isColorIndicator = (element: HTMLElement) => {\n    return element.closest('.indicator-hue-alp');\n};\n\nexport const isColorInput = (element: HTMLElement) => {\n    return element.closest('.thy-color-inputs');\n};\n","import { hotkeys } from 'slate-angular';\n\nexport const IS_MAC = typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);\n\nexport const CONTROL_KEY = IS_MAC ? '⌘' : 'Ctrl';\n\nexport const isDirectionKeydown = (event: KeyboardEvent): boolean => {\n    const isMoveUp = hotkeys.isMoveUp(event);\n    const isMoveDown = hotkeys.isMoveDown(event);\n    const isMoveBackward = hotkeys.isMoveBackward(event);\n    const isMoveForward = hotkeys.isMoveForward(event);\n    return isMoveUp || isMoveDown || isMoveBackward || isMoveForward;\n};\n","import { Element, Node, Text } from 'slate';\nimport { AngularEditor, createClipboardData, setClipboardData } from 'slate-angular';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\nimport { TheiaConverter } from '@atinc/selene';\nimport { cloneDeep } from './lodash';\nimport { TheEditor } from '../interfaces';\nimport { Signal } from '@angular/core';\nimport { TheI18nTranslation } from '../i18n';\n\nexport const getTextFromFragment = (nodes: Node[]) => {\n    const collect = (node: Node): string => {\n        if (Text.isText(node) || node.children.some(child => Text.isText(child))) {\n            return Node.string(node);\n        }\n        const parts: string[] = [];\n        for (const child of node.children) {\n            const text = collect(child);\n            if (text) {\n                parts.push(text);\n            }\n        }\n        return parts.join('\\n');\n    };\n\n    const result = nodes\n        .map(collect)\n        .filter((text): text is string => Boolean(text))\n        .join('\\n')\n        .replace(/\\n+$/g, '');\n\n    return result;\n};\n\nexport const setClipboardDataByDom = async (e: TheEditor, fragment: Element | Element[], data?: DataTransfer) => {\n    const nodes = Array.isArray(fragment) ? fragment : [fragment];\n    const htmlString = TheiaConverter.convertToHtml(nodes as any);\n    const domRange = AngularEditor.toDOMRange(e, e.selection);\n    const contents = domRange.cloneContents();\n    const div = document.createElement('div');\n    const child = document.createElement('div');\n\n    child.appendChild(contents);\n    div.appendChild(child);\n    div.setAttribute('hidden', 'true');\n    child.innerHTML = htmlString;\n    document.body.appendChild(div);\n    const attach = div.childNodes[0] as HTMLElement;\n    const plainText = getTextFromFragment(nodes);\n    const clipboardData = createClipboardData(htmlString, nodes, plainText, []);\n    await setClipboardData(clipboardData, div, attach, data);\n    document.body.removeChild(div);\n};\n\nexport function copyNode(e: TheEditor, element: Element, thyNotifyService?: ThyNotifyService, locale?: Signal<TheI18nTranslation>) {\n    const copyFailTips = (locale && locale() && locale().copyFailed) ?? '复制失败';\n    const copySuccessTips = (locale && locale() && locale().copySuccess) ?? '复制成功';\n\n    const fragment = cloneDeep(element);\n    return setClipboardDataByDom(e, fragment)\n        .then(() => {\n            thyNotifyService?.success(copySuccessTips);\n        })\n        .catch(() => {\n            thyNotifyService?.error(copyFailTips);\n        });\n}\n","export function idCreator(length = 5) {\n    // remove numeral\n    const $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz'; /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/\n    const maxPosition = $chars.length;\n    let key = '';\n    for (let i = 0; i < length; i++) {\n        key += $chars.charAt(Math.floor(Math.random() * maxPosition));\n    }\n    return key;\n}\n","import { Element } from 'slate';\nimport { ElementKinds } from '../constants/node-types';\nimport { idCreator } from './id-creator';\n\nexport const createEmptyParagraph: () => Element = () => {\n    return {\n        type: ElementKinds.paragraph,\n        key: idCreator(),\n        children: [\n            {\n                text: ''\n            }\n        ]\n    };\n};\n","import { InjectionToken } from '@angular/core';\nimport { Ancestor, Editor, Element, Node, NodeEntry, Path, Point, Range, Span, Text } from 'slate';\nimport { AngularEditor, ClipboardData, SlatePlaceholder, ViewType } from 'slate-angular';\nimport { HistoryEditor } from 'slate-history';\nimport { FontSizes } from '../constants';\nimport { CustomElementKinds } from '../custom-types';\nimport { Predicate } from '../utils/match';\nimport { ThePlugin } from './plugins';\nimport { ThePluginMenuItemConfig } from './plugins/plugin-menu';\nimport { ToolbarOption } from './toolbar';\nimport { NestedStructureByKey, OverrideByKey } from './utility';\nimport { ElementOptionsInfo } from './valid-children-types';\n\nexport interface TheEditor extends AngularEditor, HistoryEditor {\n    [key: string]: any;\n    options: TheOptions;\n    plugins: ThePlugin[];\n    disabled: boolean;\n    pluginsByKey: OverrideByKey;\n    nestedStructureByKey: NestedStructureByKey;\n    extraElementOptions: ElementOptionsInfo[];\n    globalMousedown: (event: MouseEvent) => void;\n    mousedown: (event: MouseEvent) => void;\n    renderElement: (element: Element) => ViewType;\n    renderLeaf: (text: Text) => ViewType;\n    isContainer: (element: Element) => boolean;\n}\n\nexport const TheEditor: typeof AngularEditor = {\n    ...AngularEditor\n};\n\nexport enum TheDataMode {\n    json = 'json',\n    html = 'html'\n}\n\nexport enum TheMode {\n    default = 'default',\n    print = 'print',\n    mobile = 'mobile'\n}\n\nexport type TheModeType = TheMode | string;\n\nexport class TheModeConfig {\n    mode: TheModeType;\n}\n\nexport const THE_MODE_TOKEN = new InjectionToken<TheModeConfig>('the-mode');\n\nexport const THE_MODE_PROVIDER = {\n    provide: THE_MODE_TOKEN,\n    useValue: {\n        mode: TheMode.default\n    }\n};\n\nexport interface TheOptions {\n    mode?: TheDataMode;\n    readonly?: boolean;\n    disabled?: boolean;\n    autoFocus?: boolean;\n    placeholder?: string;\n    inlineToolbarVisible?: boolean;\n    scrollContainer?: string;\n    maxHeight?: number;\n    fontSize?: FontSizes;\n    richMedia?: boolean;\n    toolbar?: ToolbarOption;\n    menu?: ThePluginMenuItemConfig[];\n    extraElementOptions?: ElementOptionsInfo[];\n    neededScrollIntoView?: (e: Editor) => boolean;\n    placeholderDecorate?: (e: Editor) => SlatePlaceholder[];\n    autoNormalize?: boolean;\n    disabledTableStickyScrollbar?: boolean;\n    enableVirtualScroll?: boolean;\n}\n\nexport type NodeMatch<T = Node> = Predicate<T>;\n\nexport interface MatchOptions<T = Node> {\n    match?: NodeMatch<T>;\n    block?: boolean;\n}\n\nexport interface IndentOptions {\n    indentTypes?: CustomElementKinds[];\n    disabledIndentTypes?: CustomElementKinds[];\n}\n\nexport interface EditorAboveOptions<T = Ancestor> extends MatchOptions<T> {\n    at?: Range | Path | Point;\n    mode?: 'highest' | 'lowest';\n    voids?: boolean;\n}\n\nexport interface EditorNodesOptions {\n    at?: Range | Path | Point | Span;\n    match?: (node: Node) => boolean;\n    mode?: 'highest' | 'lowest' | 'all';\n    universal?: boolean;\n    reverse?: boolean;\n    voids?: boolean;\n}\n\nexport interface WrapOptions {\n    at?: Path | Point | Range;\n    match?: (node: Node) => boolean;\n    mode?: 'highest' | 'lowest' | 'all';\n    split?: boolean;\n    voids?: boolean;\n}\n\nexport interface EditorParentOptions {\n    depth?: number | undefined;\n    edge?: 'start' | 'end' | undefined;\n}\n\nexport interface QueryOptions {\n    // Condition on the node to be valid.\n    filter?: (entry: NodeEntry<Node>) => boolean;\n    // List of types that are valid. If empty or undefined - allow all.\n    allow?: string[];\n    // List of types that are invalid.\n    exclude?: string[];\n}\n\nexport interface DomEventDataInfo extends ClipboardData {\n    inputType?: string;\n    key?: string;\n}\n","import { InjectionToken } from '@angular/core';\nimport { SafeUrl } from '@angular/platform-browser';\nimport { Observable } from 'rxjs';\nimport { Alignment, LayoutTypes } from '../constants';\nimport { CustomElementKinds, ImageElement } from '../custom-types';\nimport { TheEditor } from './editor';\nimport { ToolbarItem } from './toolbar';\nimport { FileUploadingItem, UploadFileEntity } from './upload';\n\nexport interface ImageEntry {\n    file?: File;\n    name?: string;\n    width?: number;\n    height?: number;\n    originWidth?: number;\n    originHeight?: number;\n    thumbUrl?: SafeUrl | string;\n    originUrl?: SafeUrl | string;\n    align?: Alignment;\n    layout?: LayoutTypes;\n    reSized?: boolean;\n    size?: number;\n}\n\nexport type ImageInfo = Pick<ImageEntry, 'thumbUrl' | 'originUrl' | 'name' | 'size'>;\n\nexport interface PreviewImageInfo {\n    image: ImageInfo;\n    index: number;\n    imageGroup: ImageInfo[];\n}\n\nexport interface LayoutOption extends ToolbarItem {\n    handle?: (e: MouseEvent, key: Alignment | LayoutTypes) => void;\n}\n\nexport interface TheImageService {\n    uploadFileHandle: (files: File | string) => Observable<UploadFileEntity[]>;\n    getUploadingItems$: () => Observable<FileUploadingItem[]>;\n    isExternalUrl?: (imageUrl: string) => boolean;\n    getImageUrl?: (element: ImageElement) => Observable<{ thumbUrl: string; originUrl: string }>;\n}\n\nexport const THE_IMAGE_SERVICE_TOKEN = new InjectionToken<TheImageService>('THE_IMAGE_SERVICE_TOKEN');\n\nexport interface ImagePluginOptions {\n    allowParentTypes?: CustomElementKinds[];\n    imageTypes?: string[];\n    disablePreview?: ((editor: TheEditor) => boolean) | boolean;\n    acceptedUploadSize?: number;\n    errorImageUrl?: string | ((editor: TheEditor) => string);\n    preview?: (data: { editor: TheEditor; previewImageInfo: PreviewImageInfo }) => void;\n}\n","import { Editor } from 'slate';\nimport { ThePluginMenuItemType } from '../../constants';\n\nexport type ThePluginMenuItemKey = string;\n\nexport interface ThePluginMenuItem {\n    key: ThePluginMenuItemKey;\n    name: string;\n    type: ThePluginMenuItemType;\n    description?: string;\n    icon?: string;\n    menuIcon?: string | ((sceneKey?: string) => string);\n    keywords?: string;\n    children?: Array<ThePluginMenuItem | 'divider'>;\n    displayKey?: string;\n    execute?: (editor: Editor) => void;\n    active?: (editor: Editor) => boolean | string;\n    isDisabled?: (editor: Editor) => boolean;\n    isHidden?: (editor: Editor) => boolean;\n    isDev?: boolean;\n    removeKeywordsType?: 'character' | 'block';\n}\n\nexport interface ThePluginMenuGroup {\n    groupName: string;\n    isHidden?: (editor: Editor) => boolean;\n}\n\nexport type ThePluginMenuItemConfig = ThePluginMenuGroup | ThePluginMenuItemKey;\n\nexport type ThePluginMenu = (ThePluginMenuGroup | ThePluginMenuItem)[];\n\nexport type ThePluginMenuItemWrap = ThePluginMenuItem & { disabled?: boolean; isMenuItem?: boolean };\n\nexport const ThePluginMenu = {\n    isMenuGroup(value: any): value is ThePluginMenuGroup {\n        if (value instanceof Object && !value.key) {\n            return true;\n        } else {\n            return false;\n        }\n    },\n    isMenuItem(value: any): value is ThePluginMenuItem {\n        if (value?.key) {\n            return true;\n        } else {\n            return false;\n        }\n    }\n};\n","export enum PluginKeys {\n    list = 'list',\n    numberedList = 'numbered-list',\n    bulletedList = 'bulleted-list',\n    checkItem = 'check-item',\n    link = 'link',\n    blockCard = 'block-card',\n    indent = 'indent',\n    table = 'table',\n    image = 'image',\n    code = 'code',\n    heading = 'heading',\n    blockquote = 'block-quote',\n    inlineCode = 'inline-code',\n    color = 'select-color',\n    fontSize = 'font-size',\n    mark = 'mark',\n    hr = 'hr',\n    align = 'align',\n    verticalAlign = 'vertical-align',\n    softBreak = 'soft-break',\n    nodeID = 'node-id',\n    resetType = 'reset-type',\n    removeVoid = 'remove-void',\n    removeEmpty = 'remove-empty',\n    theHistory = 'the-history',\n    insertDataByInvalidType = 'insert-data-by-invalid-type',\n    autoFormat = 'auto-format',\n    transforms = 'transforms',\n    moveSelection = 'move-selection',\n    trailingNode = 'trailing-node',\n    insertParagraphNodes = 'insert-paragraph-nodes',\n    getFragment = 'get-fragment',\n    deserializeHtml = 'deserialize-html',\n    deserializeMd = 'deserialize-md',\n    quickInsert = 'quick-insert',\n    paintFormat = 'paint-format',\n    mention = 'mention',\n    internalCommon = 'internalCommon'\n}\n\n/**\n * 通过 key 存储插件的唯一 key。\n */\nexport type PluginKey = PluginKeys | string;\n\nexport interface TheiaPluginKey {\n    /**\n     * 用于在 `editor.pluginsByKey` 中按键存储插件的属性。\n     */\n    key?: PluginKey;\n}\n","import { InjectionToken } from '@angular/core';\nimport { TheOptions } from './editor';\nimport { ThePlugin } from './plugins';\n\nexport interface ThePresetConfig {\n    options?: Pick<TheOptions, 'mode' | 'inlineToolbarVisible' | 'toolbar' | 'menu' | 'autoNormalize'>;\n    plugins?: ThePlugin[];\n}\n\nexport const THE_PRESET_CONFIG_TOKEN = new InjectionToken<ThePresetConfig>('the-preset');\n","import { ElementKinds, HEADING_TYPES } from '../constants/node-types';\nimport { CustomElementKinds } from '../custom-types';\n\nexport interface ElementOptionsInfo {\n    type: CustomElementKinds;\n    invalidChildrenTypes: CustomElementKinds[];\n    isSecondaryContainer?: boolean;\n}\nexport const inValidTypes: CustomElementKinds[] = [\n    ElementKinds.table,\n    ElementKinds.tableCell,\n    ElementKinds.blockquote,\n    ElementKinds.hr,\n    ElementKinds.code\n];\n\nexport const DefaultElementOptions: ElementOptionsInfo[] = [\n    {\n        type: ElementKinds.bulletedList,\n        invalidChildrenTypes: [...inValidTypes, ...HEADING_TYPES]\n    },\n    {\n        type: ElementKinds.numberedList,\n        invalidChildrenTypes: [...inValidTypes, ...HEADING_TYPES]\n    },\n    {\n        type: ElementKinds.listItem,\n        invalidChildrenTypes: [...inValidTypes, ...HEADING_TYPES]\n    },\n    {\n        type: ElementKinds.blockquote,\n        invalidChildrenTypes: inValidTypes\n    },\n    {\n        type: ElementKinds.table,\n        invalidChildrenTypes: [ElementKinds.table]\n    },\n    {\n        type: ElementKinds.tableCell,\n        isSecondaryContainer: true,\n        invalidChildrenTypes: [ElementKinds.table, ElementKinds.tableCell]\n    }\n];\n","import { Editor, Element } from 'slate';\nimport { DOMElement, NODE_TO_ELEMENT } from 'slate-dom';\nimport { Alignment, BLOCK_HIDDEN_CLASS } from '../constants';\nimport { isUndefinedOrNull } from 'ngx-tethys/util';\n\n/** Converts CSS pixel values to numbers, eg \"123px\" to 123. Returns NaN for non pixel values. */\nexport function coercePixelsFromCssValue(cssValue: string): number {\n    const match = cssValue.match(/(\\d+(\\.\\d+)?)px/);\n    if (match) {\n        return Number(match[1]);\n    }\n}\n\nexport function getElementWidth(element: HTMLElement) {\n    // Optimization: Check style.width first as we probably set it already before reading\n    // offsetWidth which triggers layout.\n    return coercePixelsFromCssValue(element.style.width) || element.getBoundingClientRect().width;\n}\n\nexport function getElementHeight(element: HTMLElement) {\n    return coercePixelsFromCssValue(element.style.height) || element.getBoundingClientRect().height;\n}\n\nexport function getColsTotalWidth(cols: HTMLTableColElement[]) {\n    return cols.reduce((total, col) => {\n        return total + getElementWidth(col);\n    }, 0);\n}\n\nexport function getRowsTotalHeight(rows: HTMLTableRowElement[]) {\n    return rows.reduce((total, row) => {\n        return total + getElementHeight(row);\n    }, 0);\n}\n\nexport function getElementClassByPrefix(el: DOMElement, prefix: string) {\n    let matchClass = null;\n    el.classList.forEach((value, key) => {\n        if (value.includes(prefix)) {\n            matchClass = value;\n        }\n    });\n    return matchClass;\n}\n\nexport function toggleStyle(\n    nativeElement: HTMLElement,\n    styleName: 'display' | 'backgroundColor' | 'textAlign' | 'textIndent' | 'verticalAlign' | 'height',\n    styleValue?: string\n) {\n    if (styleName && styleValue && nativeElement.style[styleName] !== styleValue) {\n        nativeElement.style[styleName] = styleValue;\n    } else if (styleName && isUndefinedOrNull(styleValue) && nativeElement.style[styleName]) {\n        nativeElement.style[styleName] = '';\n    }\n}\n\nexport function toggleProperty(\n    nativeElement: HTMLElement,\n    propertyName: 'colspan' | 'rowspan' | 'the-level' | 'start' | 'data-multi-digit',\n    propertyValue?: string | number\n) {\n    if (propertyName && !isUndefinedOrNull(propertyValue) && nativeElement.getAttribute(propertyName) !== propertyValue.toString()) {\n        nativeElement.setAttribute(propertyName, propertyValue.toString());\n    } else if (propertyName && isUndefinedOrNull(propertyValue) && nativeElement.getAttribute(propertyName)) {\n        nativeElement.removeAttribute(propertyName);\n    }\n}\n\nexport function toggleClass(nativeElement: HTMLElement, className: string, isAdd: boolean) {\n    if (isAdd && !nativeElement.classList.contains(className)) {\n        nativeElement.classList.add(className);\n    } else if (!isAdd && nativeElement.classList.contains(className)) {\n        nativeElement.classList.remove(className);\n    }\n}\n\nexport function toggleHeadingRelatedElement(editor: Editor, element: Element, isVisible: boolean) {\n    if (editor.options.enableVirtualScroll) {\n        return;\n    }\n    const targetDom = NODE_TO_ELEMENT.get(element);\n    if (!targetDom) {\n        return;\n    }\n    const isBlockCard = editor.isBlockCard(element);\n    if (isBlockCard) {\n        const className = `slate-block-card`;\n        const blockCardDom = targetDom.closest(`.${className}`);\n        if (isVisible) {\n            blockCardDom?.classList.contains(BLOCK_HIDDEN_CLASS) && blockCardDom?.classList.remove(BLOCK_HIDDEN_CLASS);\n        } else {\n            blockCardDom?.classList.add(BLOCK_HIDDEN_CLASS);\n        }\n    } else {\n        if (isVisible) {\n            targetDom.classList.contains(BLOCK_HIDDEN_CLASS) && targetDom.classList.remove(BLOCK_HIDDEN_CLASS);\n        } else {\n            targetDom.classList.add(BLOCK_HIDDEN_CLASS);\n        }\n    }\n}\n\nexport function createBreakBarChar() {\n    const span = document.createElement('span');\n    span.contentEditable = 'false';\n    span.classList.add('the-break-char');\n    // Put this at the start and end of an inline component to work around this Chromium bug:\n    // https://bugs.chromium.org/p/chromium/issues/detail?id=1249405\n    const inlineChromiumBugfix = String.fromCodePoint(160);\n    span.textContent = inlineChromiumBugfix;\n    return span;\n}\n","import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { BaseElementComponent } from 'slate-angular';\nimport { Editor, Element } from 'slate';\nimport { isGlobalCollapsed } from '../queries/is-global-collapsed';\nimport { toggleHeadingRelatedElement } from '../utils/dom';\n\n@Component({\n    selector: 'TheBaseElement',\n    changeDetection: ChangeDetectionStrategy.Eager,\n    template: ''\n})\nexport class TheBaseElement<T extends Element = Element, K extends Editor = Editor> extends BaseElementComponent<T, K> implements OnInit {\n    onContextChange() {\n        super.onContextChange();\n        if (this.selection && this.editor && this.editor.isVoid(this.element)) {\n            this.nativeElement.classList.add(`slate-selected-element`);\n            if (this.isCollapsed && isGlobalCollapsed(this.editor)) {\n                this.nativeElement.classList.add(`slate-focus-element`);\n            } else {\n                this.nativeElement.classList.remove(`slate-focus-element`);\n            }\n        } else {\n            this.nativeElement.classList.remove(`slate-selected-element`);\n            this.nativeElement.classList.remove(`slate-focus-element`);\n        }\n    }\n\n    ngOnInit() {\n        this.context.attributes['data-slate-key'] = this.context.element.key as string;\n        super.ngOnInit();\n        const blockClass = this.editor.isInline(this.element) ? 'slate-inline-block' : 'slate-block';\n        this.nativeElement.classList.add(`slate-element-${this.element.type}`, blockClass);\n        if (this.editor && !this.editor.options.enableVirtualScroll) {\n            const isVisible = this.editor.isVisible(this.element);\n            const isBlockCard = this.editor.isBlockCard(this.element);\n            if (!isVisible) {\n                if (isBlockCard) {\n                    setTimeout(() => {\n                        toggleHeadingRelatedElement(this.editor, this.element, isVisible);\n                    }, 0);\n                } else {\n                    toggleHeadingRelatedElement(this.editor, this.element, isVisible);\n                }\n            }\n        }\n    }\n}\n","import { TheiaConverter } from '@atinc/selene';\nimport { Descendant } from 'slate';\nimport { ElementKinds } from '../constants';\nimport { TheDataMode } from '../interfaces';\nimport { createEmptyParagraph } from './create-empty-paragraph';\n\nexport function plainToTheia(text: string): Descendant[] {\n    if (typeof text !== 'string') {\n        return text;\n    }\n    return text.split('\\n').map(i => {\n        return {\n            type: ElementKinds.paragraph,\n            children: [\n                {\n                    text: i\n                }\n            ]\n        };\n    });\n}\n\nexport function htmlToTheia(value: string): Descendant[] {\n    if (typeof value === 'string') {\n        const htmlDom = new DOMParser().parseFromString(value, 'text/html');\n        return TheiaConverter.convertToTheia(Array.from(htmlDom.body.children));\n    }\n    return value;\n}\n\nexport function dataDeserialize(mode: TheDataMode, value: Descendant[] | string): Descendant[] {\n    if (!value) {\n        return [createEmptyParagraph()];\n    }\n    if (mode === TheDataMode.html) {\n        if (typeof value !== 'string') {\n            return value;\n        }\n        if (/<[^>]+>/.test(value)) {\n            return htmlToTheia(value);\n        }\n        return plainToTheia(value);\n    }\n    return (value as Descendant[]) || [createEmptyParagraph()];\n}\n\nexport function dataSerializing(mode: TheDataMode, value: Descendant[]): string | Descendant[] {\n    if (mode === TheDataMode.html) {\n        return TheiaConverter.convertToHtml(value as any);\n    }\n    return value;\n}\n","import { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { BaseRange, Editor, Point, RangeRef } from 'slate';\n\nexport const THE_EDITOR_UUID = new WeakMap<Editor, string>();\n\nexport const THE_EDITOR_CONVERSION_HINT_REF: WeakMap<Editor, ThyPopoverRef<any>> = new WeakMap();\n\nexport const THE_PLUGIN_MENU_REF: WeakMap<Editor, ThyPopoverRef<any>> = new WeakMap();\n\nexport const THE_EDITOR_ORIGIN_ANCHOR: WeakMap<Editor, Point> = new WeakMap();\n\nexport const THE_EDITOR_POPOVER_REF: WeakMap<Editor, ThyPopoverRef<any>> = new WeakMap();\n\nexport const THE_EDITOR_PREVIOUS_SELECTION: WeakMap<Editor, { rangeRef: RangeRef; selection: BaseRange }> = new WeakMap();\n\nexport const THE_EDITOR_COLOR: WeakMap<Editor, string> = new WeakMap();\n\nexport const THE_EDITOR_BG_COLOR: WeakMap<Editor, string> = new WeakMap();\n","import { Editor } from 'slate';\nimport { THE_EDITOR_UUID } from './weak-maps';\n\nexport const getEditorUUID = (editor: Editor) => {\n    return THE_EDITOR_UUID.get(editor);\n};\n\nexport const setEditorUUID = (editor: Editor, uuid: string) => {\n    THE_EDITOR_UUID.set(editor, uuid);\n};\n","import { Editor } from 'slate';\nimport { THE_MODE_TOKEN, TheMode, TheModeType } from '../interfaces';\n\nexport const getMode = (editor: Editor): TheModeType => {\n    const modeConfig = editor && editor.injector?.get(THE_MODE_TOKEN);\n    return (modeConfig && modeConfig.mode) || TheMode.default;\n};\n\nexport const isMobileMode = (editor: Editor): boolean => {\n    const mode = getMode(editor);\n    return mode === TheMode.mobile;\n};\n\nexport const isPrintMode = (editor: Editor): boolean => {\n    const mode = getMode(editor);\n    return mode === TheMode.print;\n};\n","import { Editor } from 'slate';\nimport { getEditorUUID } from './editor-uuid';\n\nexport const getToolbarClass = (editor: Editor) => {\n    const uuid = getEditorUUID(editor);\n    return `the-toolbar-${uuid}`;\n};\n","import { DefaultElementOptions, ElementOptionsInfo } from '../interfaces';\n\nexport const mergeElementOptions = (elementOptions: ElementOptionsInfo[]) => {\n    elementOptions = elementOptions.filter(item => item.invalidChildrenTypes.length > 0);\n    const combinationData = [...DefaultElementOptions, ...elementOptions];\n    const dataInfo = {};\n    combinationData.forEach(item => {\n        const { type, invalidChildrenTypes, isSecondaryContainer } = item;\n        if (!dataInfo[type]) {\n            dataInfo[type] = {\n                type,\n                invalidChildrenTypes,\n                isSecondaryContainer\n            };\n        }\n        dataInfo[type].invalidChildrenTypes = Array.from(new Set([...invalidChildrenTypes, ...dataInfo[type].invalidChildrenTypes]));\n    });\n    return dataInfo;\n};\n","import { Editor, Element, Path, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { getPluginOptions } from '../core';\nimport { CustomElementKinds } from '../custom-types';\nimport { DefaultElementOptions } from '../interfaces';\nimport * as TheQueries from '../queries';\nimport { mergeElementOptions } from './merge-element-options';\n\nexport function insertDataByInvalidType(editor: Editor, fragment: Element[]) {\n    if (fragment) {\n        let allElementOptions = DefaultElementOptions;\n        if (editor.extraElementOptions?.length) {\n            const extraInfo = mergeElementOptions(editor.extraElementOptions);\n            allElementOptions = Object.values(extraInfo);\n        }\n        if (TheQueries.isAcrossBlocks(editor, fragment) || Editor.isVoid(editor, fragment[0])) {\n            const { selection } = editor;\n            const [start] = Editor.edges(editor, selection);\n            // query whether there is a node to be verified\n            const tryVerifyNode = allElementOptions.find(item =>\n                TheQueries.getAboveByType(editor, item.type, { at: start, mode: 'lowest' })\n            );\n            let isEndWithBlackCardElement = editor.isBlockCard(fragment[fragment.length - 1]);\n            if (tryVerifyNode) {\n                // is exist invalid element type in fragment\n                const invalidIndex = fragment.findIndex(item => tryVerifyNode.invalidChildrenTypes.includes(item.type));\n                if (invalidIndex > -1) {\n                    const invalidFragmentData = fragment.slice(invalidIndex, fragment.length);\n                    const allowParentTypes = getPluginOptions(editor, invalidFragmentData[0].type)?.allowParentTypes || [];\n                    const insertNodePath = TheQueries.getInsertElementsPath(editor, allowParentTypes as CustomElementKinds[]);\n                    if (insertNodePath) {\n                        Editor.withoutNormalizing(editor, () => {\n                            Transforms.insertNodes(editor, fragment, { at: insertNodePath });\n                            Transforms.select(editor, Editor.start(editor, insertNodePath));\n                        });\n                        return false;\n                    }\n                    const [, anchorBlockPath] = TheQueries.anchorBlockEntry(editor);\n                    const nextPath = Path.next([anchorBlockPath[0]]);\n                    Transforms.insertNodes(editor, fragment, { at: nextPath });\n                    Transforms.select(editor, Editor.start(editor, nextPath));\n                    return false;\n                }\n            }\n            Editor.withoutNormalizing(editor, () => {\n                const isEmptyParagraph = TheQueries.isEmptyParagraph(editor, editor.selection.anchor);\n                const emptyPath = Path.parent(editor.selection.anchor.path);\n                Transforms.insertNodes(editor, fragment);\n                let targetPath: Path = [];\n                if (isEmptyParagraph) {\n                    Transforms.delete(editor, { at: emptyPath });\n                    const lastPath = emptyPath.pop();\n                    targetPath = [...emptyPath, lastPath + fragment.length - 1];\n                } else {\n                    const lastPath = emptyPath.pop();\n                    targetPath = [...emptyPath, lastPath + fragment.length];\n                }\n                if (isEndWithBlackCardElement) {\n                    AngularEditor.moveBlockCardCursor(editor, targetPath, { direction: 'right' });\n                } else {\n                    Transforms.select(editor, targetPath);\n                }\n                AngularEditor.focus(editor);\n                Transforms.collapse(editor, { edge: 'end' });\n            });\n            return false;\n        }\n        return true;\n    }\n    return true;\n}\n","import { Editor, Node, Text, Element, Range } from 'slate';\nimport { TheEditor } from '../interfaces';\nimport { Alignment, ElementKinds } from '../constants/node-types';\n\n/**\n * whether the current node is a clean paragraph\n * @param editor\n * @param text\n * @returns boolean\n */\nexport const isCleanEmptyParagraph = (editor: Editor) => {\n    const isCollapsedCursor = TheEditor.isFocused(editor) && editor.selection && Range.isCollapsed(editor.selection);\n\n    if (!isCollapsedCursor) {\n        return false;\n    }\n\n    const block = Node.ancestor(editor, [editor.selection.anchor.path[0]]) as Element;\n\n    return isPureEmptyParagraph(editor, block);\n};\n\nexport const isPureEmptyParagraph = (editor: Editor, block: Node) => {\n    const textIndent = 'textIndent';\n    const align = 'align';\n    const hasTextIndent = block[textIndent];\n    const alignValue = block[align];\n    const hasIndent = block[ElementKinds.indent];\n\n    if (\n        Node.string(block) === '' &&\n        Element.isElement(block) &&\n        block.type === ElementKinds.paragraph &&\n        block.children.length === 1 &&\n        Text.isText(block.children[0]) &&\n        !Editor.isVoid(editor, block) &&\n        !hasIndent &&\n        !hasTextIndent &&\n        (!alignValue || alignValue === Alignment.left)\n    ) {\n        return true;\n    }\n\n    return false;\n};\n","import { Editor, Node, Element, BaseText } from 'slate';\nimport { ElementKinds } from '../constants/node-types';\nimport { every } from 'lodash-es';\n\nexport const isPureParagraph = (editor: Editor, block: Node | Node[]) => {\n    if (!Array.isArray(block)) {\n        block = [block];\n    }\n    return every(block, block => {\n        return (\n            Element.isElement(block) &&\n            block.type === ElementKinds.paragraph &&\n            block.children.length === 1 &&\n            ((block.children[0] as BaseText).text || (block.children[0] as any).type === ElementKinds.inlineCode)\n        );\n    });\n};\n","import { Editor, Node, Element } from 'slate';\nimport { STANDARD_HEADING_TYPES } from '../constants/node-types';\nimport { every } from 'lodash-es';\nexport const isPureHeading = (editor: Editor, block: Node | Node[]) => {\n    if (!Array.isArray(block)) {\n        block = [block];\n    }\n    return every(block, block => {\n        return Element.isElement(block) && STANDARD_HEADING_TYPES.includes(block.type);\n    });\n};\n","// credit: https://github.com/segmentio/is-url\n// support mailto: protocol\n\nconst protocolAndDomainRE = /^(?:\\w+:)?\\/\\/(\\S+)$/;\n\nconst emailProtocolRE = /^mailto:([^\\s@]+@[^\\s@]+\\.[^\\s@]+)$/;\n\nconst localhostDomainRE = /^localhost[\\:?\\d]*(?:[^\\:?\\d]\\S*)?$/;\n\nconst nonLocalhostDomainRE = /^[^\\s\\.]+\\.\\S{2,}$/;\n\n/**\n * Loosely validate a URL `string`.\n *\n * @param {String} string\n * @return {Boolean}\n */\nexport function isUrl(string) {\n    if (typeof string !== 'string') {\n        return false;\n    }\n\n    // 检查是否是 mailto: 协议\n    var emailMatch = string.match(emailProtocolRE);\n    if (emailMatch) {\n        // 简单验证 email 地址格式\n        return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(emailMatch[1]);\n    }\n\n    // 原有的 URL 验证逻辑\n    var match = string.match(protocolAndDomainRE);\n    if (!match) {\n        return false;\n    }\n\n    var everythingAfterProtocol = match[1];\n    if (!everythingAfterProtocol) {\n        return false;\n    }\n\n    if (localhostDomainRE.test(everythingAfterProtocol) || nonLocalhostDomainRE.test(everythingAfterProtocol)) {\n        return true;\n    }\n\n    return false;\n}\n","import { AngularEditor } from 'slate-angular';\nimport { ElementKinds } from '../constants';\nimport { Descendant, Editor, Element, Path, Node, Transforms } from 'slate';\nimport { HistoryEditor } from 'slate-history';\n\nexport function getDirtyElements(editor: Editor, content: Descendant[], result?: Element[]) {\n    const dirtyElements = result || [];\n    content.forEach(value => {\n        if (Element.isElement(value) && value.children.length === 0) {\n            dirtyElements.push(value);\n        } else if (Element.isElement(value)) {\n            getDirtyElements(editor, value.children, dirtyElements);\n        }\n    });\n    return dirtyElements;\n}\n\nexport function fixBlockWithoutText(editor: Editor, path: Path) {\n    const block = Node.get(editor, path);\n    if (Element.isElement(block) && block.children.length === 0) {\n        Transforms.insertNodes(editor, { text: '' }, { at: path.concat(0) });\n        console.warn(`fix data: `, block);\n    }\n}\n\nexport function fixBlockWithoutParagraph(editor: Editor, path: Path) {\n    const block = Node.get(editor, path);\n    if (Element.isElement(block) && block.children.length === 0) {\n        Transforms.insertNodes(editor, { type: ElementKinds.paragraph, children: [{ text: '' }] }, { at: path.concat(0) });\n        console.warn(`fix data: `, block);\n    }\n}\n\nconst isLowestType = (kind: ElementKinds) => {\n    return kind === ElementKinds.paragraph || kind === ElementKinds.checkItem;\n};\n\nexport function normalizeValue(editor: Editor, value: Descendant[]) {\n    const dirtyElements = getDirtyElements(editor, value);\n    if (dirtyElements && dirtyElements.length > 0) {\n        setTimeout(() => {\n            HistoryEditor.withoutSaving(editor, () => {\n                dirtyElements.forEach((dirtyElement: Element) => {\n                    try {\n                        const dirtyPath = AngularEditor.findPath(editor, dirtyElement);\n                        if (Editor.isBlock(editor, dirtyElement) && isLowestType(dirtyElement.type)) {\n                            fixBlockWithoutText(editor, dirtyPath);\n                        }\n                        if (Editor.isInline(editor, dirtyElement)) {\n                            fixBlockWithoutText(editor, dirtyPath);\n                        }\n                        if (Editor.isBlock(editor, dirtyElement) && !isLowestType(dirtyElement.type)) {\n                            fixBlockWithoutParagraph(editor, dirtyPath);\n                        }\n                    } catch (error) {\n                        console.error(error);\n                    }\n                    // todo 根据类型配置自定义修复函数\n                });\n            });\n        }, 0);\n    }\n}\n","import { Editor, Location, Path, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { HistoryEditor } from 'slate-history';\nimport { TheEditor } from '../interfaces';\nimport * as TheQueries from '../queries';\nimport { THE_EDITOR_PREVIOUS_SELECTION } from '../utils';\n\nexport const reSelection = (editor: TheEditor) => {\n    let previousRange = THE_EDITOR_PREVIOUS_SELECTION.get(editor);\n    let path: Path = [0];\n    let focusNode = TheQueries.getNode(editor, path);\n    let focusPath: Location = Editor.start(editor, path);\n    if (previousRange) {\n        const { selection, rangeRef } = previousRange;\n        if (rangeRef.current) {\n            path = Editor.path(editor, rangeRef.current);\n            focusNode = TheQueries.getNode(editor, path);\n            focusPath = rangeRef.unref();\n        } else {\n            const previousPath = Editor.path(editor, selection);\n            path = Path.previous([previousPath[0]]);\n            const previousNode = TheQueries.getNode(editor, path);\n            if (previousNode) {\n                focusPath = Editor.end(editor, path);\n                focusNode = previousNode;\n            }\n        }\n    }\n    if (focusNode) {\n        HistoryEditor.withoutMerging(editor, () => {\n            const isBlockCard = editor.isBlockCard(focusNode);\n            if (isBlockCard) {\n                const path = Editor.path(editor, focusPath).slice(0, 1);\n                const isBlockCardRightCursor = TheQueries.isBlockCardRightCursor(previousRange?.selection);\n\n                Transforms.select(editor, path);\n                AngularEditor.moveBlockCardCursor(editor, path, { direction: isBlockCardRightCursor ? 'right' : 'left' });\n            } else {\n                Transforms.select(editor, focusPath);\n            }\n        });\n    }\n};\n\nexport const refocus = (editor: TheEditor) => {\n    reSelection(editor);\n    AngularEditor.focus(editor);\n};\n","import { Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { DEFAULT_SCROLL_CONTAINER } from '../constants';\n\nexport const getEditorScrollContainer = (editor: Editor, scrollContainerSelector?: string) => {\n    const selector = scrollContainerSelector || editor.options.scrollContainer || DEFAULT_SCROLL_CONTAINER;\n    const editable = AngularEditor.toDOMNode(editor, editor);\n    return editable.closest(selector) as HTMLElement;\n};\n","import type {\n    ConnectedPosition,\n    FlexibleConnectedPositionStrategy,\n    FlexibleConnectedPositionStrategyOrigin,\n    OverlayRef\n} from '@angular/cdk/overlay';\n\nexport const topLeftPosition: ConnectedPosition = {\n    originX: 'start',\n    originY: 'top',\n    overlayX: 'start',\n    overlayY: 'bottom',\n    offsetX: 0,\n    offsetY: -4\n};\n\nexport const bottomLeftPosition: ConnectedPosition = {\n    ...topLeftPosition,\n    originY: 'bottom',\n    overlayY: 'top',\n    offsetY: 4\n};\n\nexport const bottomRightPosition: ConnectedPosition = {\n    originX: 'end',\n    originY: 'bottom',\n    overlayX: 'end',\n    overlayY: 'top',\n    offsetX: 0,\n    offsetY: 4\n};\n\nexport const topRightPosition: ConnectedPosition = {\n    ...bottomRightPosition,\n    originY: 'top',\n    overlayY: 'bottom',\n    offsetY: -4\n};\n\nexport const updatePopoverPosition = (\n    overlayRef: OverlayRef,\n    origin: FlexibleConnectedPositionStrategyOrigin,\n    positions: ConnectedPosition[] = []\n) => {\n    if (overlayRef) {\n        const positionStrategy = overlayRef.getConfig().positionStrategy as FlexibleConnectedPositionStrategy;\n        positionStrategy.setOrigin(origin);\n        positionStrategy.withFlexibleDimensions(false);\n        positionStrategy.withGrowAfterOpen(false);\n        positionStrategy.withPush(false);\n        positionStrategy.withPositions(positions);\n        overlayRef.updatePosition();\n    }\n};\n","import { DefaultGlobalToolbarDefinition, DefaultInlineToolbarDefinition } from '../constants/toolbar';\nimport { TheEditor, ToolbarDefinition, ToolbarEntity, ToolbarInitOption, ToolbarItem, ToolbarKey } from '../interfaces';\nimport { getToolbarClass } from '../utils';\n\nconst nextToolbarEntity = (toolbarDefinition: ToolbarDefinition, toolbarItems: Map<string, ToolbarItem>): ToolbarEntity => {\n    const entity: ToolbarEntity = {};\n    for (const defKey in toolbarDefinition) {\n        entity[defKey] = getToolbarItemByKeys(toolbarDefinition[defKey], toolbarItems);\n    }\n    return entity;\n};\n\nconst getToolbarItemByKeys = (keys: ToolbarKey[], toolbarItems: Map<string, ToolbarItem>): ToolbarItem[] => {\n    const items: ToolbarItem[] = [];\n    keys.forEach((key: ToolbarKey) => {\n        if (key === `split`) {\n            items.push({ key: `split` });\n            return;\n        }\n        const item = toolbarItems.get(key);\n        if (item && item.includes) {\n            items.push({ ...item, includes: getToolbarItemByKeys(item.includes as ToolbarKey[], toolbarItems) });\n            return;\n        }\n        if (item) {\n            items.push(item);\n        }\n    });\n    return items;\n};\n\nconst toolbarInitialize = (toolbarItems: ToolbarItem[], global: string[], inline: string[]): ToolbarInitOption => {\n    const toolbarDefinition = {\n        global,\n        inline\n    };\n\n    const toolbarOperations: Map<string, ToolbarItem> = new Map<string, ToolbarItem>();\n    toolbarItems.forEach(i => toolbarOperations.set(i.key, i));\n\n    const toolbarEntity = nextToolbarEntity(toolbarDefinition, toolbarOperations);\n\n    return {\n        toolbarDefinition,\n        toolbarOperations,\n        toolbarEntity\n    };\n};\n\nexport const createToolbar = (\n    editor: TheEditor,\n    global: string[] = DefaultGlobalToolbarDefinition,\n    inline: string[] = DefaultInlineToolbarDefinition\n) => {\n    const toolbarItems = (editor?.plugins ?? []).reduce((prevItems, nextPlugin) => {\n        prevItems.push(...(nextPlugin?.toolbarItems ?? []));\n        return prevItems;\n    }, []);\n    const toolbarOption = toolbarInitialize(toolbarItems, global, inline);\n    const globalToolbarClass = ['the-global-toolbar', getToolbarClass(editor)];\n    const toolbarEntity = toolbarOption.toolbarEntity;\n\n    return {\n        globalToolbarClass,\n        toolbarEntity\n    };\n};\n","export enum TheLocaleType {\n    zhHans = 'zh-hans',\n    zhHant = 'zh-hant',\n    enUs = 'en-us',\n    jaJp = 'ja-jp',\n    deDe = 'de-de',\n    ruRu = 'ru-ru'\n}\n\nexport interface TheI18nLocale {\n    id: TheLocaleType;\n    translations: TheI18nTranslation;\n}\n\nexport interface TheI18nTranslation {\n    link: string;\n    conversion: string;\n    conversionHint: string;\n    search: string;\n    noData: string;\n    searchResult: string;\n    autoWrap: string;\n    copy: string;\n    copySuccess: string;\n    copyFailed: string;\n    delete: string;\n    text: string;\n    enterText: string;\n    textRequired: string;\n    enterLink: string;\n    apply: string;\n    cancel: string;\n    linkRequired: string;\n    linkPattern: string;\n    insertRow: string;\n    insertCol: string;\n    insertUpward: string;\n    insertDownward: string;\n    insertLeft: string;\n    insertRight: string;\n    row: string;\n    column: string;\n    titleRow: string;\n    titleCol: string;\n    orderCol: string;\n    cellBackground: string;\n    colEqualWidth: string;\n    fullscreen: string;\n    table: string;\n    tableDesc: string;\n    tableOptions: string;\n    mergeCells: string;\n    splitCells: string;\n    deleteEntireRow: string;\n    deleteEntireCol: string;\n    deleteTable: string;\n    clearSelection: string;\n    deleteTheRow: string;\n    deleteTheColumn: string;\n    base: string;\n    alignment: string;\n    alignLeft: string;\n    alignCenter: string;\n    alignRight: string;\n    wrapLeft: string;\n    wrapRight: string;\n    verticalAlign: string;\n    verticalAlignTop: string;\n    verticalAlignMiddle: string;\n    verticalAlignBottom: string;\n    blockquote: string;\n    blockquoteDesc: string;\n    code: string;\n    codeDesc: string;\n    fontColor: string;\n    backgroundColor: string;\n    headingList: string;\n    paragraph: string;\n    heading1: string;\n    heading1Desc: string;\n    heading2: string;\n    heading2Desc: string;\n    heading3: string;\n    heading3Desc: string;\n    heading4: string;\n    heading4Desc: string;\n    heading5: string;\n    heading5Desc: string;\n    heading6: string;\n    heading6Desc: string;\n    divider: string;\n    dividerDesc: string;\n    image: string;\n    imageDesc: string;\n    increaseIndent: string;\n    decreaseIndent: string;\n    inlineCode: string;\n    linkDesc: string;\n    orderedList: string;\n    orderedListDesc: string;\n    unorderedList: string;\n    unorderedListDesc: string;\n    bold: string;\n    italic: string;\n    strike: string;\n    underline: string;\n    undo: string;\n    redo: string;\n    paintFormat: string;\n    cleanFormat: string;\n    checkItem: string;\n    checkItemDesc: string;\n    more: string;\n    fontSize: string;\n}\n","import { InjectionToken } from '@angular/core';\nimport { TheI18nLocale, TheLocaleType } from './i18n';\n\nexport const THE_I18N_LOCALE_ID = new InjectionToken<TheLocaleType>('the-i18n-locale-id');\n\nexport const THE_I18N_ZH_HANS = new InjectionToken<TheI18nLocale>('the-i18n-zh-hans');\nexport const THE_I18N_ZH_HANT = new InjectionToken<TheI18nLocale>('the-i18n-zh-hant');\nexport const THE_I18N_EN_US = new InjectionToken<TheI18nLocale>('the-i18n-en-us');\nexport const THE_I18N_JA_JP = new InjectionToken<TheI18nLocale>('the-i18n-ja-jp');\nexport const THE_I18N_DE_DE = new InjectionToken<TheI18nLocale>('the-i18n-de-de');\nexport const THE_I18N_RU_RU = new InjectionToken<TheI18nLocale>('the-i18n-ru-ru');\n","import { inject, Injectable, signal, Signal, WritableSignal, computed } from '@angular/core';\nimport {\n    TheI18nLocale,\n    TheLocaleType,\n    zhHansLocale,\n    zhHantLocale,\n    enUsLocale,\n    jaJpLocale,\n    deDeLocale,\n    ruRuLocale,\n    TheI18nTranslation\n} from './index';\nimport {\n    THE_I18N_DE_DE,\n    THE_I18N_EN_US,\n    THE_I18N_JA_JP,\n    THE_I18N_LOCALE_ID,\n    THE_I18N_ZH_HANS,\n    THE_I18N_ZH_HANT,\n    THE_I18N_RU_RU\n} from './i18n.token';\n\nfunction normalizeLocale(localeId: string): TheLocaleType {\n    return localeId?.toLowerCase().replace(/_/g, '-') as TheLocaleType;\n}\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class TheI18nService {\n    private locales: { [key in TheLocaleType]: TheI18nLocale } = {\n        [TheLocaleType.zhHans]: inject(THE_I18N_ZH_HANS, { optional: true }) || zhHansLocale,\n        [TheLocaleType.zhHant]: inject(THE_I18N_ZH_HANT, { optional: true }) || zhHantLocale,\n        [TheLocaleType.enUs]: inject(THE_I18N_EN_US, { optional: true }) || enUsLocale,\n        [TheLocaleType.jaJp]: inject(THE_I18N_JA_JP, { optional: true }) || jaJpLocale,\n        [TheLocaleType.deDe]: inject(THE_I18N_DE_DE, { optional: true }) || deDeLocale,\n        [TheLocaleType.ruRu]: inject(THE_I18N_RU_RU, { optional: true }) || ruRuLocale\n    };\n\n    private defaultLocaleId: TheLocaleType = normalizeLocale(inject(THE_I18N_LOCALE_ID, { optional: true })) || TheLocaleType.zhHans;\n\n    private locale: WritableSignal<TheI18nLocale> = signal(this.locales[this.defaultLocaleId]);\n\n    setLocale(id: string) {\n        let localeId: TheLocaleType = normalizeLocale(id);\n\n        if (localeId.includes('zh') && localeId !== TheLocaleType.zhHans && localeId !== TheLocaleType.zhHant) {\n            localeId = TheLocaleType.zhHans;\n        }\n\n        this.locale.set(this.locales[localeId] || this.locales[this.defaultLocaleId] || ({} as TheI18nLocale));\n    }\n\n    getLocale(): Signal<TheI18nLocale> {\n        return this.locale;\n    }\n}\n\nexport function injectTranslations(theI18nService: TheI18nService): Signal<TheI18nTranslation> {\n    return computed(() => {\n        const locale = theI18nService.getLocale();\n        return locale().translations;\n    });\n}\n","import { TheLocaleType } from '../i18n';\n\nexport default {\n    id: TheLocaleType.zhHans,\n    translations: {\n        link: '链接',\n        conversion: '立即转换',\n        conversionHint: '检测到粘贴内容符合Markdown语法',\n        search: '搜索',\n        noData: '暂无数据',\n        searchResult: '搜索结果',\n        autoWrap: '自动换行',\n        copy: '复制',\n        copySuccess: '复制成功',\n        copyFailed: '复制失败',\n        delete: '删除',\n        text: '文本',\n        enterText: '请输入文本',\n        textRequired: '文本不能为空',\n        enterLink: '请输入链接',\n        apply: '应用',\n        cancel: '取消',\n        linkRequired: '链接不能为空',\n        linkPattern: '请输入正确的链接',\n        insertRow: '插入行',\n        insertCol: '插入列',\n        insertUpward: '向上插入',\n        insertDownward: '向下插入',\n        insertLeft: '向左插入',\n        insertRight: '向右插入',\n        row: '行',\n        column: '列',\n        titleRow: '标题行',\n        titleCol: '标题列',\n        orderCol: '序号列',\n        cellBackground: '单元格背景',\n        colEqualWidth: '列等宽',\n        fullscreen: '全屏',\n        table: '表格',\n        tableDesc: '支持插入表格',\n        tableOptions: '表格选项',\n        mergeCells: '合并单元格',\n        splitCells: '拆分单元格',\n        deleteEntireRow: '删除整行',\n        deleteEntireCol: '删除整列',\n        deleteTable: '删除表格',\n        clearSelection: '清空选中区域',\n        deleteTheRow: '删除所在行',\n        deleteTheColumn: '删除所在列',\n        base: '基础',\n        alignment: '对齐方式',\n        alignLeft: '左对齐',\n        alignCenter: '居中',\n        alignRight: '右对齐',\n        wrapLeft: '图片居左',\n        wrapRight: '图片居右',\n        verticalAlign: '垂直对齐',\n        verticalAlignTop: '顶部对齐',\n        verticalAlignMiddle: '垂直居中',\n        verticalAlignBottom: '底部对齐',\n        blockquote: '引用',\n        blockquoteDesc: '支持引用内容',\n        code: '代码块',\n        codeDesc: '支持插入语法高亮的代码',\n        fontColor: '字体颜色',\n        backgroundColor: '背景颜色',\n        headingList: '正文',\n        paragraph: '正文',\n        heading1: '标题1',\n        heading1Desc: '插入一级标题',\n        heading2: '标题2',\n        heading2Desc: '插入二级标题',\n        heading3: '标题3',\n        heading3Desc: '插入三级标题',\n        heading4: '标题4',\n        heading4Desc: '插入四级标题',\n        heading5: '标题5',\n        heading5Desc: '插入五级标题',\n        heading6: '标题6',\n        heading6Desc: '插入六级标题',\n        divider: '分割线',\n        dividerDesc: '使用水平线分隔内容',\n        image: '图片',\n        imageDesc: '支持 jpg、jpeg 等格式图像',\n        increaseIndent: '增加缩进',\n        decreaseIndent: '减少缩进',\n        inlineCode: '行内代码',\n        linkDesc: '支持插入链接',\n        orderedList: '有序列表',\n        orderedListDesc: '插入有序列表',\n        unorderedList: '无序列表',\n        unorderedListDesc: '插入无序列表',\n        bold: '加粗',\n        italic: '斜体',\n        strike: '删除线',\n        underline: '下划线',\n        undo: '撤销',\n        redo: '重做',\n        paintFormat: '格式刷',\n        cleanFormat: '清除格式',\n        checkItem: '待办事项',\n        checkItemDesc: '插入待办事项',\n        more: '更多',\n        fontSize: '字号'\n    }\n};\n","import { TheLocaleType } from '../i18n';\n\nexport default {\n    id: TheLocaleType.zhHant,\n    translations: {\n        link: '鏈接',\n        conversion: '立即轉換',\n        conversionHint: '檢測到貼上內容符合Markdown語法',\n        search: '搜尋',\n        noData: '暫無資料',\n        searchResult: '搜尋結果',\n        autoWrap: '自動換行',\n        copy: '複製',\n        copySuccess: '複製成功',\n        copyFailed: '複製失敗',\n        delete: '刪除',\n        text: '文字',\n        enterText: '請輸入文字',\n        textRequired: '文字不能為空',\n        enterLink: '請輸入鏈接',\n        apply: '套用',\n        cancel: '取消',\n        linkRequired: '鏈接不能為空',\n        linkPattern: '請輸入正確的鏈接',\n        insertRow: '插入列',\n        insertCol: '插入欄',\n        insertUpward: '向上插入',\n        insertDownward: '向下插入',\n        insertLeft: '向左插入',\n        insertRight: '向右插入',\n        row: '列',\n        column: '欄',\n        titleRow: '標題列',\n        titleCol: '標題欄',\n        orderCol: '序號欄',\n        cellBackground: '儲存格背景',\n        colEqualWidth: '欄等寬',\n        fullscreen: '全螢幕',\n        table: '表格',\n        tableDesc: '支援插入表格',\n        tableOptions: '表格選項',\n        mergeCells: '合併儲存格',\n        splitCells: '分割儲存格',\n        deleteEntireRow: '刪除整列',\n        deleteEntireCol: '刪除整欄',\n        deleteTable: '刪除表格',\n        clearSelection: '清空選中區域',\n        deleteTheRow: '刪除所在列',\n        deleteTheColumn: '刪除所在欄',\n        base: '基礎',\n        alignment: '對齊方式',\n        alignLeft: '靠左對齊',\n        alignCenter: '置中',\n        alignRight: '靠右對齊',\n        wrapLeft: '圖片靠左',\n        wrapRight: '圖片靠右',\n        verticalAlign: '垂直對齊',\n        verticalAlignTop: '頂部對齊',\n        verticalAlignMiddle: '垂直置中',\n        verticalAlignBottom: '底部對齊',\n        blockquote: '引用',\n        blockquoteDesc: '支援引用內容',\n        code: '程式碼區塊',\n        codeDesc: '支援插入語法高亮的程式碼',\n        fontColor: '字型顏色',\n        backgroundColor: '背景顏色',\n        headingList: '正文',\n        paragraph: '正文',\n        heading1: '標題1',\n        heading1Desc: '插入一級標題',\n        heading2: '標題2',\n        heading2Desc: '插入二級標題',\n        heading3: '標題3',\n        heading3Desc: '插入三級標題',\n        heading4: '標題4',\n        heading4Desc: '插入四級標題',\n        heading5: '標題5',\n        heading5Desc: '插入五級標題',\n        heading6: '標題6',\n        heading6Desc: '插入六級標題',\n        divider: '分隔線',\n        dividerDesc: '使用水平線分隔內容',\n        image: '圖片',\n        imageDesc: '支援 jpg、jpeg 等格式圖像',\n        increaseIndent: '增加縮排',\n        decreaseIndent: '減少縮排',\n        inlineCode: '行內程式碼',\n        linkDesc: '支援插入鏈接',\n        orderedList: '有序清單',\n        orderedListDesc: '插入有序清單',\n        unorderedList: '無序清單',\n        unorderedListDesc: '插入無序清單',\n        bold: '粗體',\n        italic: '斜體',\n        strike: '刪除線',\n        underline: '底線',\n        undo: '復原',\n        redo: '重做',\n        paintFormat: '格式刷',\n        cleanFormat: '清除格式',\n        checkItem: '待辦事項',\n        checkItemDesc: '插入待辦事項',\n        more: '更多',\n        fontSize: '字號'\n    }\n};\n","import { TheLocaleType } from '../i18n';\n\nexport default {\n    id: TheLocaleType.enUs,\n    translations: {\n        link: 'Link',\n        conversion: 'Convert',\n        conversionHint: 'Detected markdown syntax in pasted content.',\n        search: 'Search',\n        noData: 'No data available',\n        searchResult: 'Search results',\n        autoWrap: 'Auto wrap',\n        copy: 'Copy',\n        copySuccess: 'Copy succeeded',\n        copyFailed: 'Copy failed',\n        delete: 'Delete',\n        text: 'Text',\n        enterText: 'Enter text',\n        textRequired: 'Text is required',\n        enterLink: 'Enter link',\n        apply: 'Apply',\n        cancel: 'Cancel',\n        linkRequired: 'Link is required',\n        linkPattern: 'Enter a valid link',\n        insertRow: 'Insert row',\n        insertCol: 'Insert column',\n        insertUpward: 'Insert above',\n        insertDownward: 'Insert below',\n        insertLeft: 'Insert left',\n        insertRight: 'Insert right',\n        row: 'Row',\n        column: 'Column',\n        titleRow: 'Header row',\n        titleCol: 'Header column',\n        orderCol: 'Numbered column',\n        cellBackground: 'Cell background',\n        colEqualWidth: 'Distribute columns',\n        fullscreen: 'Fullscreen',\n        table: 'Table',\n        tableDesc: 'Insert table',\n        tableOptions: 'Table options',\n        mergeCells: 'Merge cells',\n        splitCells: 'Split cells',\n        deleteEntireRow: 'Delete row',\n        deleteEntireCol: 'Delete column',\n        deleteTable: 'Delete table',\n        clearSelection: 'Clear selection',\n        deleteTheRow: 'Delete current row',\n        deleteTheColumn: 'Delete current column',\n        base: 'Basic',\n        alignment: 'Alignment',\n        alignLeft: 'Align left',\n        alignCenter: 'Align center',\n        alignRight: 'Align right',\n        wrapLeft: 'Wrap left',\n        wrapRight: 'Wrap right',\n        verticalAlign: 'Vertical align',\n        verticalAlignTop: 'Align top',\n        verticalAlignMiddle: 'Align middle',\n        verticalAlignBottom: 'Align bottom',\n        blockquote: 'Quote',\n        blockquoteDesc: 'Insert quote',\n        code: 'Code block',\n        codeDesc: 'Insert code with syntax highlighting',\n        fontColor: 'Font color',\n        backgroundColor: 'Hignlight color',\n        headingList: 'Normal',\n        paragraph: 'Normal',\n        heading1: 'Heading 1',\n        heading1Desc: 'Insert heading 1',\n        heading2: 'Heading 2',\n        heading2Desc: 'Insert heading 2',\n        heading3: 'Heading 3',\n        heading3Desc: 'Insert heading 3',\n        heading4: 'Heading 4',\n        heading4Desc: 'Insert heading 4',\n        heading5: 'Heading 5',\n        heading5Desc: 'Insert heading 5',\n        heading6: 'Heading 6',\n        heading6Desc: 'Insert heading 6',\n        divider: 'Divider',\n        dividerDesc: 'Insert horizontal divider',\n        image: 'Image',\n        imageDesc: 'Supports jpg, jpeg and other image formats',\n        increaseIndent: 'Indent',\n        decreaseIndent: 'Outdent',\n        inlineCode: 'Inline code',\n        linkDesc: 'Insert link',\n        orderedList: 'Numbered list',\n        orderedListDesc: 'Insert numbered list',\n        unorderedList: 'Bullet list',\n        unorderedListDesc: 'Insert bullet list',\n        bold: 'Bold',\n        italic: 'Italic',\n        strike: 'Strikethrough',\n        underline: 'Underline',\n        undo: 'Undo',\n        redo: 'Redo',\n        paintFormat: 'Format painter',\n        cleanFormat: 'Clear format',\n        checkItem: 'To-do',\n        checkItemDesc: 'Insert action item',\n        more: 'More',\n        fontSize: 'Font size'\n    }\n};\n","import { TheLocaleType } from '../i18n';\n\nexport default {\n    id: TheLocaleType.jaJp,\n    translations: {\n        link: 'リンク',\n        conversion: '変換する',\n        conversionHint: 'Markdown構文が検出されました',\n        search: '検索',\n        noData: 'データなし',\n        searchResult: '検索結果',\n        autoWrap: '自動改行',\n        copy: 'コピー',\n        copySuccess: 'コピーしました',\n        copyFailed: 'コピーに失敗しました',\n        delete: '削除',\n        text: 'テキスト',\n        enterText: 'テキストを入力',\n        textRequired: 'テキストを入力してください',\n        enterLink: 'リンクを入力',\n        apply: '適用',\n        cancel: 'キャンセル',\n        linkRequired: 'リンクを入力してください',\n        linkPattern: '有効なリンクを入力してください',\n        insertRow: '行を挿入',\n        insertCol: '列を挿入',\n        insertUpward: '上に挿入',\n        insertDownward: '下に挿入',\n        insertLeft: '左に挿入',\n        insertRight: '右に挿入',\n        row: '行',\n        column: '列',\n        titleRow: 'ヘッダー行',\n        titleCol: 'ヘッダー列',\n        orderCol: '順序列',\n        cellBackground: 'セルの背景',\n        colEqualWidth: '列幅を揃える',\n        fullscreen: '全画面',\n        table: 'テーブル',\n        tableDesc: 'テーブルを挿入',\n        tableOptions: 'テーブルオプション',\n        mergeCells: 'セルを結合',\n        splitCells: 'セルを分割',\n        deleteEntireRow: '行を削除',\n        deleteEntireCol: '列を削除',\n        deleteTable: 'テーブルを削除',\n        clearSelection: '選択をクリア',\n        deleteTheRow: '現在の行を削除',\n        deleteTheColumn: '現在の列を削除',\n        base: '基本',\n        alignment: '配置',\n        alignLeft: '左揃え',\n        alignCenter: '中央揃え',\n        alignRight: '右揃え',\n        wrapLeft: '画像を左に配置',\n        wrapRight: '画像を右に配置',\n        verticalAlign: '垂直方向の配置',\n        verticalAlignTop: '上揃え',\n        verticalAlignMiddle: '中央揃え',\n        verticalAlignBottom: '下揃え',\n        blockquote: '引用',\n        blockquoteDesc: '引用を挿入',\n        code: 'コードブロック',\n        codeDesc: 'シンタックスハイライト付きコードを挿入',\n        fontColor: '文字色',\n        backgroundColor: '背景色',\n        headingList: '本文',\n        paragraph: '本文',\n        heading1: '見出し1',\n        heading1Desc: '見出し1を挿入',\n        heading2: '見出し2',\n        heading2Desc: '見出し2を挿入',\n        heading3: '見出し3',\n        heading3Desc: '見出し3を挿入',\n        heading4: '見出し4',\n        heading4Desc: '見出し4を挿入',\n        heading5: '見出し5',\n        heading5Desc: '見出し5を挿入',\n        heading6: '見出し6',\n        heading6Desc: '見出し6を挿入',\n        divider: '区切り線',\n        dividerDesc: '水平線を挿入',\n        image: '画像',\n        imageDesc: 'jpg、jpeg等の画像形式に対応',\n        increaseIndent: 'インデント増',\n        decreaseIndent: 'インデント減',\n        inlineCode: 'インラインコード',\n        linkDesc: 'リンクを挿入',\n        orderedList: '番号付きリスト',\n        orderedListDesc: '番号付きリストを挿入',\n        unorderedList: '番号なしリスト',\n        unorderedListDesc: '番号なしリストを挿入',\n        bold: '太字',\n        italic: 'イタリック',\n        strike: '取り消し線',\n        underline: '下線',\n        undo: '元に戻す',\n        redo: 'やり直し',\n        paintFormat: '書式のコピー',\n        cleanFormat: '書式をクリア',\n        checkItem: 'タスク',\n        checkItemDesc: 'タスクを挿入',\n        more: 'もっと見る',\n        fontSize: 'フォントサイズ'\n    }\n};\n","import { TheLocaleType } from '../i18n';\n\nexport default {\n    id: TheLocaleType.deDe,\n    translations: {\n        link: 'Link',\n        conversion: 'Jetzt konvertieren',\n        conversionHint: 'Markdown-Syntax im eingefügten Inhalt erkannt',\n        search: 'Suchen',\n        noData: 'Keine Daten',\n        searchResult: 'Suchergebnisse',\n        autoWrap: 'Automatischer Zeilenumbruch',\n        copy: 'Kopieren',\n        copySuccess: 'Kopiert',\n        copyFailed: 'Kopieren fehlgeschlagen',\n        delete: 'Löschen',\n        text: 'Text',\n        enterText: 'Text eingeben',\n        textRequired: 'Text ist erforderlich',\n        enterLink: 'Link eingeben',\n        apply: 'Anwenden',\n        cancel: 'Abbrechen',\n        linkRequired: 'Link ist erforderlich',\n        linkPattern: 'Bitte geben Sie einen gültigen Link ein',\n        insertRow: 'Zeile einfügen',\n        insertCol: 'Spalte einfügen',\n        insertUpward: 'Nach oben einfügen',\n        insertDownward: 'Nach unten einfügen',\n        insertLeft: 'Nach links einfügen',\n        insertRight: 'Nach rechts einfügen',\n        row: 'Zeile',\n        column: 'Spalte',\n        titleRow: 'Kopfzeile',\n        titleCol: 'Kopfspalte',\n        orderCol: 'Ordnungsspalte',\n        cellBackground: 'Zellenhintergrund',\n        colEqualWidth: 'Gleiche Spaltenbreite',\n        fullscreen: 'Vollbild',\n        table: 'Tabelle',\n        tableDesc: 'Tabelle einfügen',\n        tableOptions: 'Tabellenoptionen',\n        mergeCells: 'Zellen verbinden',\n        splitCells: 'Zellen teilen',\n        deleteEntireRow: 'Zeile löschen',\n        deleteEntireCol: 'Spalte löschen',\n        deleteTable: 'Tabelle löschen',\n        clearSelection: 'Auswahl löschen',\n        deleteTheRow: 'Aktuelle Zeile löschen',\n        deleteTheColumn: 'Aktuelle Spalte löschen',\n        base: 'Basis',\n        alignment: 'Ausrichtung',\n        alignLeft: 'Linksbündig',\n        alignCenter: 'Zentriert',\n        alignRight: 'Rechtsbündig',\n        wrapLeft: 'Bild links',\n        wrapRight: 'Bild rechts',\n        verticalAlign: 'Vertikale Ausrichtung',\n        verticalAlignTop: 'Oben',\n        verticalAlignMiddle: 'Mitte',\n        verticalAlignBottom: 'Unten',\n        blockquote: 'Zitat',\n        blockquoteDesc: 'Zitat einfügen',\n        code: 'Code Blöcke',\n        codeDesc: 'Code mit Syntaxhervorhebung einfügen',\n        fontColor: 'Schriftfarbe',\n        backgroundColor: 'Hintergrundfarbe',\n        headingList: 'Normaler Text',\n        paragraph: 'Normaler Text',\n        heading1: 'Überschrift 1',\n        heading1Desc: 'Überschrift 1 einfügen',\n        heading2: 'Überschrift 2',\n        heading2Desc: 'Überschrift 2 einfügen',\n        heading3: 'Überschrift 3',\n        heading3Desc: 'Überschrift 3 einfügen',\n        heading4: 'Überschrift 4',\n        heading4Desc: 'Überschrift 4 einfügen',\n        heading5: 'Überschrift 5',\n        heading5Desc: 'Überschrift 5 einfügen',\n        heading6: 'Überschrift 6',\n        heading6Desc: 'Überschrift 6 einfügen',\n        divider: 'Trennlinie',\n        dividerDesc: 'Horizontale Linie einfügen',\n        image: 'Bild',\n        imageDesc: 'Unterstützt jpg, jpeg und andere Bildformate',\n        increaseIndent: 'Einzug vergrößern',\n        decreaseIndent: 'Einzug verkleinern',\n        inlineCode: 'Inline-Code',\n        linkDesc: 'Link einfügen',\n        orderedList: 'Nummerierte Liste',\n        orderedListDesc: 'Nummerierte Liste einfügen',\n        unorderedList: 'Ungeordnete Liste',\n        unorderedListDesc: 'Ungeordnete Liste einfügen',\n        bold: 'Fett',\n        italic: 'Kursiv',\n        strike: 'Durchgestrichen',\n        underline: 'Unterstrichen',\n        undo: 'Rückgängig',\n        redo: 'Wiederholen',\n        paintFormat: 'Format übertragen',\n        cleanFormat: 'Format löschen',\n        checkItem: 'Aufgabe',\n        checkItemDesc: 'Aufgabe einfügen',\n        more: 'Mehr',\n        fontSize: 'Schriftgröße'\n    }\n};\n","import { TheLocaleType } from '../i18n';\n\nexport default {\n    id: TheLocaleType.ruRu,\n    translations: {\n        link: 'Ссылка',\n        conversion: 'Конвертировать',\n        conversionHint: 'Обнаружен синтаксис Markdown',\n        search: 'Поиск',\n        noData: 'Нет данных',\n        searchResult: 'Результаты поиска',\n        autoWrap: 'Автоперенос',\n        copy: 'Копировать',\n        copySuccess: 'Скопировано',\n        copyFailed: 'Ошибка копирования',\n        delete: 'Удалить',\n        text: 'Текст',\n        enterText: 'Введите текст',\n        textRequired: 'Текст обязателен',\n        enterLink: 'Введите ссылку',\n        apply: 'Применить',\n        cancel: 'Отмена',\n        linkRequired: 'Ссылка обязательна',\n        linkPattern: 'Введите корректную ссылку',\n        insertRow: 'Вставить строку',\n        insertCol: 'Вставить столбец',\n        insertUpward: 'Вставить выше',\n        insertDownward: 'Вставить ниже',\n        insertLeft: 'Вставить слева',\n        insertRight: 'Вставить справа',\n        row: 'Строка',\n        column: 'Столбец',\n        titleRow: 'Заголовок строки',\n        titleCol: 'Заголовок столбца',\n        orderCol: 'Порядковый столбец',\n        cellBackground: 'Фон ячейки',\n        colEqualWidth: 'Равная ширина столбцов',\n        fullscreen: 'Полный экран',\n        table: 'Таблица',\n        tableDesc: 'Вставить таблицу',\n        tableOptions: 'Параметры таблицы',\n        mergeCells: 'Объединить ячейки',\n        splitCells: 'Разделить ячейки',\n        deleteEntireRow: 'Удалить строку',\n        deleteEntireCol: 'Удалить столбец',\n        deleteTable: 'Удалить таблицу',\n        clearSelection: 'Очистить выделение',\n        deleteTheRow: 'Удалить текущую строку',\n        deleteTheColumn: 'Удалить текущий столбец',\n        base: 'Основное',\n        alignment: 'Выравнивание',\n        alignLeft: 'По левому краю',\n        alignCenter: 'По центру',\n        alignRight: 'По правому краю',\n        wrapLeft: 'Изображение слева',\n        wrapRight: 'Изображение справа',\n        verticalAlign: 'Вертикальное выравнивание',\n        verticalAlignTop: 'По верху',\n        verticalAlignMiddle: 'По центру',\n        verticalAlignBottom: 'По низу',\n        blockquote: 'Цитата',\n        blockquoteDesc: 'Вставить цитату',\n        code: 'Блок кода',\n        codeDesc: 'Вставить код с подсветкой синтаксиса',\n        fontColor: 'Цвет текста',\n        backgroundColor: 'Цвет фона',\n        headingList: 'Обычный текст',\n        paragraph: 'Обычный текст',\n        heading1: 'Заголовок 1',\n        heading1Desc: 'Вставить заголовок 1',\n        heading2: 'Заголовок 2',\n        heading2Desc: 'Вставить заголовок 2',\n        heading3: 'Заголовок 3',\n        heading3Desc: 'Вставить заголовок 3',\n        heading4: 'Заголовок 4',\n        heading4Desc: 'Вставить заголовок 4',\n        heading5: 'Заголовок 5',\n        heading5Desc: 'Вставить заголовок 5',\n        heading6: 'Заголовок 6',\n        heading6Desc: 'Вставить заголовок 6',\n        divider: 'Разделитель',\n        dividerDesc: 'Вставить горизонтальную линию',\n        image: 'Изображение',\n        imageDesc: 'Поддерживает форматы jpg, jpeg и другие',\n        increaseIndent: 'Увеличить отступ',\n        decreaseIndent: 'Уменьшить отступ',\n        inlineCode: 'Встроенный код',\n        linkDesc: 'Вставить ссылку',\n        orderedList: 'Нумерованный список',\n        orderedListDesc: 'Вставить нумерованный список',\n        unorderedList: 'Неупорядоченный список',\n        unorderedListDesc: 'Вставить неупорядоченный список',\n        bold: 'Полужирный',\n        italic: 'Курсив',\n        strike: 'Зачеркнутый',\n        underline: 'Подчеркнутый',\n        undo: 'Отменить',\n        redo: 'Повторить',\n        paintFormat: 'Формат по образцу',\n        cleanFormat: 'Очистить формат',\n        checkItem: 'Задача',\n        checkItemDesc: 'Вставить задачу',\n        more: 'Еще',\n        fontSize: 'Размер шрифта'\n    }\n};\n","import { Directive, HostBinding, inject, Input, Signal } from '@angular/core';\nimport { Editor } from 'slate';\nimport { DropdownMode } from '../../constants/toolbar';\nimport { ToolbarItem, ToolbarKey } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { injectTranslations, TheI18nService, TheI18nTranslation } from '../../i18n';\n\n@Directive()\nexport abstract class TheBaseToolbarItem {\n    @Input()\n    set toolbarItem(value: ToolbarItem) {\n        this._toolbarItem = value;\n    }\n    get toolbarItem() {\n        return this._toolbarItem;\n    }\n\n    @Input() editor: Editor;\n\n    @Input() itemMousedownHandle: (item: ToolbarItem) => void;\n\n    disabled: boolean;\n\n    active: string | boolean;\n\n    _toolbarItem: ToolbarItem;\n\n    @HostBinding('class.the-toolbar-item') class = true;\n\n    @HostBinding('class.disabled')\n    get disabledState() {\n        return this.disabled;\n    }\n\n    @HostBinding('class.active') get activeState() {\n        return this.active;\n    }\n\n    locale: Signal<TheI18nTranslation> = injectTranslations(inject(TheI18nService));\n\n    constructor() {}\n\n    execute(event: MouseEvent) {\n        event.preventDefault();\n\n        event.stopPropagation();\n    }\n\n    selectionChange(editor: Editor = this.editor) {\n        if (editor.selection) {\n            this.active = this._toolbarItem?.active ? this._toolbarItem?.active(editor) : false;\n            if (this._toolbarItem?.disable) {\n                this.disabled = this._toolbarItem?.disable ? this._toolbarItem?.disable(editor) : false;\n            } else {\n                const thePlugin = TheQueries.getPluginByToolbarItem(editor, this._toolbarItem);\n                this.disabled = thePlugin && TheQueries.getToolbarItemDisabled(editor, thePlugin.key);\n            }\n        } else {\n            this.active = false;\n        }\n    }\n}\n\n@Directive()\nexport abstract class TheBaseToolbarDropdown extends TheBaseToolbarItem {\n    activeMenuItem: ToolbarItem;\n\n    @Input() menus: ToolbarItem[];\n\n    @Input() mode: DropdownMode = DropdownMode.text;\n\n    @Input() dropdownItemKey: ToolbarKey;\n\n    get defaultDropdownItem() {\n        const activeItem = this.dropdownItemKey && this.menus.find(item => item.key === this.dropdownItemKey);\n        return activeItem ? activeItem : this.menus[0];\n    }\n\n    constructor() {\n        super();\n    }\n\n    selectionChange(editor: Editor) {\n        super.selectionChange(editor);\n        const activeItem = this.menus.find(i => {\n            if (i?.active) {\n                return i?.active(editor);\n            }\n        });\n        if (!this.toolbarItem.dropdownFixedIcon) {\n            this.activeMenuItem = activeItem ? activeItem : this.defaultDropdownItem;\n        }\n    }\n}\n","import { cloneDeep } from '../../utils/lodash';\nimport { TheEditor, ThePlugin, WithThePlugin } from '../../interfaces';\n\n/**\n * 循环 plugins 到 editor.plugins 和 editor.pluginsByKey\n * 如果有 key 重复则进行覆盖\n */\nexport const flattenDeepPlugins = <T = {}>(editor: TheEditor, plugins?: ThePlugin<T>[]) => {\n    if (!plugins) return;\n\n    plugins.forEach((plugin: WithThePlugin) => {\n        let p = cloneDeep(plugin);\n        if (!p.options) p.options = {} as any;\n        if (!p.nestedStructureByKey) p.nestedStructureByKey = {};\n\n        editor.plugins.push(p);\n        flattenDeepPlugins<T>(editor, p.plugins!);\n    });\n};\n","import { TheEditor, ThePlugin } from '../../interfaces';\n\nexport const getPlugins = <T = {}>(editor: TheEditor): ThePlugin<T>[] => {\n    return editor?.plugins ?? [];\n};\n","import { PluginKey, TheEditor, WithThePlugin } from '../../interfaces';\n\nexport const getPlugin = <P = {}, T = {}>(editor: TheEditor, key: PluginKey): WithThePlugin<T, P> =>\n    editor.pluginsByKey[key] as WithThePlugin<T, P>;\n","import { PluginKey, TheEditor, ThePluginOption } from '../../interfaces';\nimport { getPlugin } from './get-plugin';\n\nexport const getPluginOptions = <P = {}, T = {}>(editor: TheEditor, key: PluginKey): ThePluginOption<P> =>\n    getPlugin<P, T>(editor, key)?.options ?? ({} as ThePluginOption<P>);\n","import { isObject } from 'ngx-tethys/util';\nimport { OptionItem } from '../../interfaces/plugins';\n\nexport const mergeArray = <T>(origin: T[], source: T[]) => {\n    if (!Array.isArray(source)) return source;\n\n    for (let i = 0; i < source.length; i++) {\n        const value = source[i] as OptionItem;\n        if (isObject(value) && value?.key && origin.some((item: OptionItem) => item?.key === value?.key)) {\n            let index = origin.findIndex((item: OptionItem) => item?.key === value?.key);\n            origin[index] = { ...origin[index], ...value };\n            continue;\n        }\n        if (origin.includes(source[i])) continue;\n        origin.push(source[i]);\n    }\n    return origin;\n};\n","import { isObject } from 'ngx-tethys/util';\nimport { assign } from '../../utils/lodash';\nimport { NoInfer, OverrideByKey, ThePlugin } from '../../interfaces';\nimport { mergeArray } from './merge-array';\n\nexport const mergeOptions = <T = {}, P = {}>(plugin: ThePlugin<T, NoInfer<P>>, override: OverrideByKey) => {\n    const { options } = plugin;\n    const newOptions = options as unknown as P;\n    for (let option in override.options) {\n        if (Array.isArray(override.options[option]) && newOptions[option]) {\n            newOptions[option] = mergeArray(newOptions[option], override.options[option]);\n            continue;\n        }\n        if (isObject(override.options[option]) && newOptions[option]) {\n            if (typeof newOptions[option] === 'function') {\n                newOptions[option] = override.options[option];\n            } else {\n                newOptions[option] = assign(newOptions[option], override.options[option]);\n            }\n            continue;\n        }\n        newOptions[option] = override.options[option];\n    }\n    plugin.options = newOptions;\n};\n","import { TheEditor, WithThePlugin } from '../../interfaces';\n\nexport const combinePlugins = (editor: TheEditor): TheEditor => {\n    // withOverrides\n    editor.plugins.forEach((plugin: WithThePlugin) => {\n        if (plugin.withOverrides && !plugin.options.disabled) {\n            editor = plugin.withOverrides(editor, plugin);\n        }\n    });\n    return editor;\n};\n","import { OverrideByKey, TheEditor, ThePlugin } from '../../interfaces';\nimport { mergeOptions } from './merge-options';\n\nexport const mergeDeepPlugins = <T = {}, P extends ThePlugin<T>[] = ThePlugin<T>[]>(editor: TheEditor, _plugins: P) => {\n    _plugins.forEach(plugin => {\n        if (plugin.overrideByKey) {\n            const newPlugins = _plugins.filter(p => plugin.overrideByKey[p.key]);\n\n            newPlugins.forEach(p => {\n                if (editor.pluginsByKey[p.key]) {\n                    mergeOptions(p, plugin.overrideByKey[p.key] as OverrideByKey);\n                }\n            });\n        }\n    });\n};\n","import { TheEditor, ThePlugin, WithThePlugin } from '../../interfaces';\n\nexport const nestedStructureByKey = <T = {}>(editor: TheEditor, plugins?: ThePlugin<T>[]) => {\n    // 如果有 key 重复则进行覆盖\n    plugins.forEach((p: WithThePlugin) => {\n        for (const key in p.nestedStructureByKey) {\n            if (!editor.nestedStructureByKey[key]) {\n                editor.nestedStructureByKey[key] = p.nestedStructureByKey[key];\n            }\n        }\n    });\n};\n","import { TheEditor, ThePlugin, WithThePlugin } from '../../interfaces';\n\nexport const pluginsByKey = <T = {}>(editor: TheEditor, plugins?: ThePlugin<T>[]) => {\n    if (!plugins) return;\n\n    plugins.forEach((p: WithThePlugin) => {\n        if (!editor.pluginsByKey[p.key]) {\n            editor.pluginsByKey[p.key] = p;\n        }\n    });\n};\n","import { Editor, Element } from 'slate';\nimport { TheEditor } from '../../interfaces';\nimport {\n    ThePluginMenu,\n    ThePluginMenuItem,\n    ThePluginMenuItemConfig,\n    ThePluginMenuItemKey,\n    ThePluginMenuItemWrap\n} from '../../interfaces/plugins/plugin-menu';\nimport { getBlockAbove, getParent, isContainer } from '../../queries';\nimport { getPluginOptions } from './get-plugin-options';\n\n/**\n * 构建插入菜单，用于绑定界面\n * @param editor\n * @param items\n * @returns\n */\nexport const buildPluginMenu = (\n    menuItemMap: Map<ThePluginMenuItemKey, ThePluginMenuItem>,\n    items: ThePluginMenuItemConfig[]\n): ThePluginMenu => {\n    return items\n        .map(item => {\n            if (ThePluginMenu.isMenuGroup(item)) {\n                return item;\n            } else {\n                return menuItemMap.get(item);\n            }\n        })\n        .filter(item => !!item);\n};\n\nexport const buildPluginMenuItemMap = (editor: Editor) => {\n    const map = new Map<ThePluginMenuItemKey, ThePluginMenuItem>();\n    const pluginMenuItems: ThePluginMenuItem[] = editor?.plugins.reduce((ret, current) => {\n        ret.push(...(current?.menuItems ?? []));\n        return ret;\n    }, []);\n    pluginMenuItems.forEach(menuItem => {\n        if (menuItem) {\n            map.set(menuItem.key, menuItem);\n        }\n    });\n    return map;\n};\n\n/**\n * 构建当前位置允许插入的元素菜单\n * @param editor 编辑器对象\n * @param menus 插入菜单\n * @returns 返回允许插入的元素菜单\n */\nexport const buildQuickInsertMenus = (editor: TheEditor, menus: ThePluginMenuItemConfig[]): ThePluginMenuItemConfig[] => {\n    const [_, path] = getBlockAbove(editor);\n    const [parentNode] = getParent(editor, path);\n    const isContainerNode = isContainer(editor, parentNode as Element);\n    const menuItemsMap = buildPluginMenuItemMap(editor);\n    const pluginMenu = buildPluginMenu(menuItemsMap, menus);\n\n    const quickMenuConfig = [];\n    pluginMenu.forEach((item: ThePluginMenuItemWrap) => {\n        const allowParentTypes = getPluginOptions(editor, item.key)?.allowParentTypes;\n        const isInlineElement = getPluginOptions(editor, item.key)?.isInline || false;\n        const isAllowParent = isContainerNode && allowParentTypes ? allowParentTypes.includes(parentNode?.type) : true;\n        const hasChildren = item?.children && item?.children?.length > 0;\n\n        if (!item?.type) {\n            quickMenuConfig.push(item);\n        } else if (isInlineElement || isAllowParent || hasChildren) {\n            const menu = menus.find(menu => menu === item.key);\n            quickMenuConfig.push(menu);\n        }\n    });\n\n    return quickMenuConfig;\n};\n","import { Element, Text } from 'slate';\nimport { AngularEditor, ViewType } from 'slate-angular';\nimport { HistoryEditor } from 'slate-history';\nimport { combinePlugins, flattenDeepPlugins, mergeDeepPlugins, nestedStructureByKey, pluginsByKey } from './utils';\nimport { TheEditor, ThePlugin } from '../interfaces';\n\nexport const withTheia = <T extends AngularEditor & HistoryEditor & TheEditor>(editor: T, plugins: ThePlugin[] = []) => {\n    let e = editor as TheEditor;\n\n    e.renderElement = (element: Element): ViewType => null;\n    e.renderLeaf = (text: Text): ViewType => null;\n    e.isContainer = (value: Element) => false;\n    e.globalMousedown = (event: MouseEvent) => null;\n    e.mousedown = (event: MouseEvent) => {};\n\n    e.extraElementOptions = [];\n    e.disabled = false;\n\n    e.plugins = [];\n    e.pluginsByKey = {};\n    e.nestedStructureByKey = {};\n\n    // withOverridesByKey\n    flattenDeepPlugins(e, plugins);\n\n    // mount pluginsByKey\n    pluginsByKey(e, e.plugins);\n\n    // mount nestedStructureByKey\n    nestedStructureByKey(e, e.plugins);\n\n    // merge plugin to pluginByKey\n    mergeDeepPlugins(e, e.plugins);\n\n    e = combinePlugins(e);\n\n    return e;\n};\n","import { Overlay } from '@angular/cdk/overlay';\nimport { NgStyle } from '@angular/common';\nimport {\n    Component,\n    ElementRef,\n    HostBinding,\n    OnInit,\n    TemplateRef,\n    ViewChild,\n    ViewContainerRef,\n    ChangeDetectionStrategy\n} from '@angular/core';\nimport { ThyAction } from 'ngx-tethys/action';\nimport {\n    ThyDropdownMenuDivider,\n    ThyDropdownMenuItemActiveDirective,\n    ThyDropdownMenuItemDirective,\n    ThyDropdownMenuItemIconDirective,\n    ThyDropdownMenuItemNameDirective\n} from 'ngx-tethys/dropdown';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor } from 'slate';\nimport { DropdownMode } from '../../constants';\nimport { TheBaseToolbarDropdown } from '../../core';\nimport { ToolbarItem, ToolbarKey } from '../../interfaces';\nimport { bottomLeftPosition, refocus, topLeftPosition, updatePopoverPosition, bottomRightPosition, topRightPosition } from '../../utils';\n\n@Component({\n    selector: 'the-toolbar-dropdown',\n    templateUrl: './toolbar-dropdown.component.html',\n    changeDetection: ChangeDetectionStrategy.Eager,\n    imports: [\n        NgStyle,\n        ThyIcon,\n        ThyAction,\n        ThyDropdownMenuItemDirective,\n        ThyDropdownMenuDivider,\n        ThyDropdownMenuItemNameDirective,\n        ThyDropdownMenuItemIconDirective,\n        ThyDropdownMenuItemActiveDirective\n    ]\n})\nexport class TheToolbarDropdown extends TheBaseToolbarDropdown implements OnInit {\n    @HostBinding('class') className = 'the-toolbar-dropdown-container';\n\n    activeKeys: ToolbarKey[] = [];\n\n    dropdownMode = DropdownMode;\n\n    public dropdownPopoverRef: ThyPopoverRef<any>;\n\n    get isOpen() {\n        return this.dropdownPopoverRef && this.dropdownPopoverRef.getOverlayRef() && this.dropdownPopoverRef.getOverlayRef().hasAttached();\n    }\n\n    get activeIcon(): string {\n        if (this.toolbarItem.dropdownFixedIcon) {\n            return this.toolbarItem.icon;\n        }\n        return this.activeMenuItem?.icon;\n    }\n\n    get activeDropdown(): boolean {\n        return this.toolbarItem.dropdownFixedIcon && !!this.activeKeys.length;\n    }\n\n    @ViewChild('iconModeTemplate', { static: true })\n    iconModeTemplate: TemplateRef<any>;\n\n    @ViewChild('textModeTemplate', { static: true })\n    textModeTemplate: TemplateRef<any>;\n\n    @ViewChild('dropdownTemplate', { static: true })\n    dropdownTemplate: TemplateRef<any>;\n\n    constructor(\n        public elementRef: ElementRef,\n        private thyPopover: ThyPopover,\n        private viewContainerRef: ViewContainerRef,\n        private overlay: Overlay\n    ) {\n        super();\n    }\n\n    ngOnInit() {\n        if (!this.activeMenuItem) {\n            this.activeMenuItem = this.defaultDropdownItem;\n        }\n\n        if (this.toolbarItem && this.toolbarItem?.key) {\n            this.elementRef.nativeElement?.classList?.add(`${this.toolbarItem?.key}`);\n        }\n    }\n\n    selectionChange(editor: Editor) {\n        super.selectionChange(editor);\n        this.activeKeys = [];\n        for (const menu of this.menus) {\n            if (menu?.active && menu?.active(editor)) {\n                this.activeKeys.push(menu.key);\n            }\n        }\n    }\n\n    toggleDropdown(event: MouseEvent) {\n        super.execute(event);\n\n        if (this.editor?.disabled || this.disabled) {\n            return;\n        }\n        this.openDropdownPopover(event);\n    }\n\n    itemMousedown(event: MouseEvent, item: ToolbarItem) {\n        super.execute(event);\n\n        this.closeDropdownPopover();\n\n        if (!this.toolbarItem.dropdownFixedIcon) {\n            this.activeMenuItem = item;\n        }\n\n        if (this.itemMousedownHandle) {\n            this.itemMousedownHandle(item);\n            return;\n        }\n\n        if (!this.itemMousedownHandle && !this.editor?.selection) {\n            refocus(this.editor);\n        }\n\n        if (item?.execute) {\n            item?.execute(this.editor);\n        }\n    }\n\n    preventDefault(event: Event) {\n        event.preventDefault();\n        event.stopPropagation();\n    }\n\n    openDropdownPopover(event: MouseEvent) {\n        this.dropdownPopoverRef = this.thyPopover.open(this.dropdownTemplate, {\n            origin: event.currentTarget as HTMLElement,\n            panelClass: ['the-toolbar-dropdown-popover', this.toolbarItem?.key],\n            originActiveClass: 'active',\n            placement: 'bottomLeft',\n            insideClosable: false,\n            outsideClosable: true,\n            backdropClosable: true,\n            hasBackdrop: false,\n            offset: 4,\n            minWidth: 0,\n            viewContainerRef: this.viewContainerRef,\n            scrollStrategy: this.overlay.scrollStrategies.reposition()\n        });\n        this.updatePopoverPosition();\n    }\n\n    updatePopoverPosition() {\n        const origin = this.elementRef.nativeElement;\n        const overlayRef = this.dropdownPopoverRef?.getOverlayRef();\n        updatePopoverPosition(overlayRef, origin, [bottomLeftPosition, bottomRightPosition, topLeftPosition, topRightPosition]);\n    }\n\n    closeDropdownPopover() {\n        if (this.dropdownPopoverRef) {\n            this.dropdownPopoverRef?.close();\n        }\n    }\n}\n","@if (mode === dropdownMode.icon) {\n  <a\n    href=\"javascript:;\"\n    class=\"icon-mode\"\n    thyAction\n    [thyActionIcon]=\"activeIcon\"\n    [thyActionActive]=\"activeDropdown\"\n    (mousedown)=\"preventDefault($event)\"\n    (click)=\"toggleDropdown($event)\"\n  >\n    @if (!toolbarItem.isHideDropdownActionIcon) {\n      <thy-icon class=\"font-size-sm text-desc ml-1\" thyIconName=\"caret-down\"></thy-icon>\n    }\n  </a>\n}\n@if (mode !== dropdownMode.icon) {\n  <a href=\"javascript:;\" class=\"text-mode\" thyAction (mousedown)=\"preventDefault($event)\" (click)=\"toggleDropdown($event)\">\n    <span class=\"show-text\">{{ activeMenuItem?.name }}</span>\n    <thy-icon class=\"font-size-sm text-desc ml-1\" thyIconName=\"caret-down\"></thy-icon>\n  </a>\n}\n\n<ng-template #dropdownTemplate>\n  <div class=\"thy-dropdown-menu\">\n    @for (menu of menus; track $index) {\n      @if (menu.key !== 'split') {\n        <a\n          class=\"d-flex justify-content-between text-secondary\"\n          href=\"javascript:;\"\n          thyDropdownMenuItem\n          [ngStyle]=\"$safeNavigationMigration(menu?.styles)\"\n          [thyDropdownMenuItemActive]=\"activeKeys.includes(menu.key)\"\n          (mousedown)=\"preventDefault($event)\"\n          (click)=\"itemMousedown($event, menu)\"\n        >\n          <div class=\"d-flex align-items-center\">\n            @if (menu?.icon && mode === dropdownMode.icon) {\n              <thy-icon class=\"text-secondary\" thyDropdownMenuItemIcon [thyIconName]=\"menu.icon\"></thy-icon>\n            }\n            @if (menu?.name) {\n              <span class=\"text-body\" thyDropdownMenuItemName>{{ menu.name }}</span>\n            }\n          </div>\n          @if (menu?.shortcutKey) {\n            <div class=\"menu-item-right font-size-sm text-muted\">{{ menu.shortcutKey }}</div>\n          }\n        </a>\n      }\n      @if (menu.key === 'split') {\n        <thy-dropdown-menu-divider></thy-dropdown-menu-divider>\n      }\n    }\n  </div>\n</ng-template>\n","import { Component, HostBinding, HostListener, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { ThyAction } from 'ngx-tethys/action';\nimport { ThyTooltipDirective } from 'ngx-tethys/tooltip';\nimport { TheBaseToolbarItem } from '../../core/toolbar-item/base-toolbar-item';\nimport { refocus } from '../../utils';\n\n@Component({\n    selector: 'the-toolbar-item',\n    template: `\n        <a\n            href=\"javascript:;\"\n            thyAction\n            [thyActionIcon]=\"toolbarItem.icon\"\n            [thyActionActive]=\"active\"\n            [thyTooltip]=\"tooltip\"\n            [thyTooltipTemplateContext]=\"{\n                name: toolbarItem.name,\n                shortcutKey: toolbarItem.shortcutKey\n            }\"\n            thyTooltipPlacement=\"top\"\n            (mousedown)=\"preventDefault($event)\"\n            (click)=\"execute($event)\"\n        ></a>\n        <ng-template #tooltip let-data> {{ data?.name }} {{ data?.shortcutKey }} </ng-template>\n    `,\n    changeDetection: ChangeDetectionStrategy.Eager,\n    imports: [ThyAction, ThyTooltipDirective]\n})\nexport class TheToolbarItem extends TheBaseToolbarItem implements OnInit {\n    @HostBinding('class') className = 'the-toolbar-item';\n\n    @HostListener('mousedown', ['$event'])\n    toggleDropdown(event: MouseEvent) {\n        super.execute(event);\n    }\n\n    constructor() {\n        super();\n    }\n\n    ngOnInit() {}\n\n    preventDefault(event: Event) {\n        event.preventDefault();\n        event.stopPropagation();\n    }\n\n    execute(event: MouseEvent) {\n        super.execute(event);\n        if (this.editor?.disabled || this.disabled || !this.toolbarItem?.execute) {\n            return;\n        }\n        if (!this.itemMousedownHandle && !this.editor?.selection) {\n            refocus(this.editor);\n        }\n        this.toolbarItem?.execute(this.editor);\n    }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    ChangeDetectorRef,\n    Component,\n    ComponentRef,\n    ElementRef,\n    HostBinding,\n    Inject,\n    Input,\n    NgZone,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    SimpleChanges,\n    TemplateRef,\n    ViewChild,\n    ViewContainerRef,\n    ChangeDetectionStrategy\n} from '@angular/core';\nimport { ThyDivider } from 'ngx-tethys/divider';\nimport { Editor } from 'slate';\nimport { ComponentType } from 'slate-angular';\nimport { DropdownMode, TheToolbarGroupToken, ToolbarActionTypes, ToolbarMoreGroup } from '../../constants';\nimport { TheBaseToolbarDropdown, TheBaseToolbarItem } from '../../core/toolbar-item/base-toolbar-item';\nimport { ToolbarAlignment, ToolbarItem, ToolbarItemType, ToolbarItemsComposeReturn } from '../../interfaces/toolbar';\nimport { TheToolbarDropdown } from '../toolbar-dropdown/toolbar-dropdown.component';\nimport { TheToolbarGroup } from '../toolbar-group/toolbar-group.component';\nimport { TheToolbarItem } from '../toolbar-item/toolbar-item.component';\n\n@Component({\n    selector: 'the-toolbar',\n    templateUrl: 'toolbar.component.html',\n    host: {\n        class: 'the-toolbar-container d-flex align-items-center'\n    },\n    changeDetection: ChangeDetectionStrategy.Eager,\n    imports: [NgTemplateOutlet]\n})\nexport class TheToolbarComponent implements OnInit, OnChanges, OnDestroy {\n    @Input() editor: Editor;\n\n    @Input() toolbarItems: ToolbarItem[] = [];\n\n    @Input() align: ToolbarAlignment;\n\n    @Input() containerClass: string[] = [];\n\n    @Input() isMore = true;\n\n    @Input() afterTemplate: TemplateRef<any>;\n\n    @ViewChild('toolbarContainer', { read: ViewContainerRef, static: true }) toolbarContainer: ViewContainerRef;\n\n    @HostBinding('style.justifyContent') get justifyContent() {\n        return this.align;\n    }\n\n    components: Map<string, ComponentRef<any>> = new Map<string, ComponentRef<any>>();\n\n    composeToolbarItems: ToolbarItemsComposeReturn;\n\n    moreGroupMenu = ToolbarMoreGroup;\n\n    resizeObserver: ResizeObserver;\n\n    elementWidth = 0;\n\n    constructor(\n        private cdr: ChangeDetectorRef,\n        private elementRef: ElementRef,\n        private ngZone: NgZone,\n        @Inject(TheToolbarGroupToken) private toolbarGroup: ComponentType<TheToolbarGroup>\n    ) {}\n\n    ngOnInit() {\n        this.setToolbarClass();\n        this.renderToolbarView();\n        this.selectionChange(this.editor);\n        this.isMore && this.resizeElement();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        const toolbarItems = changes.toolbarItems;\n        if (toolbarItems && !toolbarItems.firstChange) {\n            this.renderToolbarView();\n        }\n    }\n\n    ngOnDestroy(): void {\n        if (this.resizeObserver) {\n            this.resizeObserver.disconnect();\n        }\n    }\n\n    public setToolbarClass() {\n        if (this.editor && !!this.containerClass.length) {\n            this.elementRef.nativeElement.classList.add(...this.containerClass);\n        }\n    }\n\n    private resizeElement() {\n        const editableElement = this.elementRef.nativeElement;\n        // @ts-ignore\n        this.resizeObserver = new ResizeObserver(entries => {\n            for (let entry of entries) {\n                const { width } = entry.contentRect;\n                if (this.isMore && this.elementWidth !== width) {\n                    this.elementWidth = width;\n                    this.renderToolbarView();\n                }\n            }\n        });\n        this.resizeObserver.observe(editableElement);\n    }\n\n    public selectionChange(editor: Editor) {\n        if (this.isMore) {\n            this.renderToolbarView();\n        }\n\n        const toolbarItems = [...this.toolbarItems, this.moreGroupMenu];\n        for (const item of toolbarItems) {\n            if (item.key !== ToolbarActionTypes.split) {\n                const itemComponent = this.components.get(item.key);\n                if (itemComponent && itemComponent.instance.selectionChange) {\n                    itemComponent.instance.selectionChange(editor);\n                }\n            }\n        }\n    }\n\n    public renderToolbarView(): void {\n        const toolbarItems = this.toolbarItemsCompose();\n        const { items, group } = toolbarItems;\n\n        if (items.length === this.composeToolbarItems?.items?.length && group?.length === this.composeToolbarItems?.group?.length) {\n            return;\n        }\n        this.composeToolbarItems = toolbarItems;\n        this.components.clear();\n        this.toolbarContainer.clear();\n\n        this.ngZone.run(() => {\n            for (const item of items) {\n                if (item.key === ToolbarActionTypes.split) {\n                    this.createToolbarSplit();\n                    continue;\n                }\n                this.createToolbarItem(item);\n            }\n            this.createMoreGroup(group);\n            this.cdr.markForCheck();\n        });\n    }\n\n    /**\n     * calculation display toolbar and more grouped toolbars\n     *\n     *\t┌────────────────────────────────────────  GlobalToolbarView ───────────────────────────────────┐\n     *\t| ┌─────────────────────────────────────── #children ─────────────────────────────────────────┐ |\n     *\t| |   ┌─────── #itemsView ────────┐ ┌──────────────────────┐ ┌── #groupedItemsDropdown ───┐   | |\n     *\t| |   |       #ungroupedItems     | | ToolbarSeparatorView | |        #groupedItems       |   | |\n     *\t| |   └──────────────────────────-┘ └──────────────────────┘ └────────────────────────────┘   | |\n     *\t| |                                  \\---------- only when toolbar items overflow --------/   | |\n     *\t| └───────────────────────────────────────────────────────────────────────────────────────────┘ |\n     *\t└───────────────────────────────────────────────────────────────────────────────────────────────┘\n     */\n    private toolbarItemsCompose(): ToolbarItemsComposeReturn {\n        const groupWidth = 32;\n        const items: ToolbarItem[] = [];\n        const group: ToolbarItem[] = [];\n        let elementWidth = this.isMore ? this.elementWidth : null;\n        let isSpaceRemaining = true;\n\n        for (let i = 0; i < this.toolbarItems.length; i++) {\n            const item = this.toolbarItems[i];\n            if (!this.isMore) {\n                items.push(item);\n                continue;\n            }\n\n            if (!isSpaceRemaining) {\n                group.push(item);\n                continue;\n            }\n\n            const itemWidth = this.getItemWidth(item);\n            const occupyWidth = i === this.toolbarItems.length - 1 ? itemWidth : itemWidth + groupWidth;\n            const allowRender = elementWidth && elementWidth >= occupyWidth;\n\n            if (allowRender) {\n                items.push(item);\n                elementWidth -= itemWidth;\n            } else {\n                const isFirstSplit = group.length === 0 && item.key === ToolbarActionTypes.split;\n                if (!isFirstSplit) {\n                    isSpaceRemaining = false;\n                    group.push(item);\n                }\n            }\n        }\n\n        return {\n            items: this.pureToolbarItems(items),\n            group\n        };\n    }\n\n    /**\n     * split width: 13px\n     * item width: default item: 32px\n     * dropdown item: 48px\n     * default paddingRight: 4px\n     */\n    private getItemWidth(item: ToolbarItem) {\n        const paddingRight = 4;\n        const defaultItemWidth = 32;\n        const iconDropdownItemWidth = 48;\n        const textDropdownItemWidth = 70;\n        const dropdownActionIconWidth = 16;\n        const splitWidth = 9;\n        const isDropdownComponent = item?.type === ToolbarItemType.dropdown;\n        const isUpdateDropdownItemWidth = !item?.width && isDropdownComponent;\n\n        let itemWidth = item?.width ?? defaultItemWidth;\n\n        if (isUpdateDropdownItemWidth) {\n            if (item?.dropdownMode === DropdownMode.icon) {\n                itemWidth = iconDropdownItemWidth;\n            }\n            if (!item?.dropdownMode || item?.dropdownMode === DropdownMode.text) {\n                itemWidth = textDropdownItemWidth;\n            }\n            if (item?.isHideDropdownActionIcon) {\n                itemWidth -= dropdownActionIconWidth;\n            }\n        }\n        if (item.key === ToolbarActionTypes.split) {\n            itemWidth = splitWidth;\n        }\n\n        itemWidth += paddingRight;\n\n        return itemWidth;\n    }\n\n    /**\n     * filter adjacent repeated dividers\n     * @param {ToolbarItem[]} items\n     * @returns\n     * @memberof TheToolbarComponent\n     */\n    pureToolbarItems(items: ToolbarItem[]) {\n        if (!Array.isArray(items)) {\n            return [];\n        }\n        return items.filter((a, i) => {\n            if (i > 0 && items[i - 1].key !== ToolbarActionTypes.split) {\n                return true;\n            }\n            return a.key !== ToolbarActionTypes.split;\n        });\n    }\n\n    private createToolbarItem(item: ToolbarItem) {\n        const { iconComponent, type, dropdownMode, dropdownItemKey, includes, ...args } = item;\n        const viewComponent = this.viewComponentType(type);\n        const compRef = this.toolbarContainer.createComponent<TheBaseToolbarItem>(iconComponent ? iconComponent : viewComponent);\n\n        compRef.setInput('editor', this.editor);\n        compRef.setInput('toolbarItem', item);\n        this.components.set(item.key, compRef);\n        if (item.type === ToolbarItemType.dropdown) {\n            const dropdownRef = compRef as unknown as ComponentRef<TheBaseToolbarDropdown>;\n            dropdownRef.setInput('dropdownItemKey', item.dropdownItemKey);\n            dropdownRef.setInput('menus', includes as ToolbarItem[]);\n            dropdownRef.setInput('mode', dropdownMode);\n        }\n    }\n\n    private createToolbarSplit() {\n        const compRef = this.toolbarContainer.createComponent(ThyDivider);\n        compRef.setInput('thyVertical', true);\n        compRef.setInput('thyColor', 'light');\n        compRef.location.nativeElement.classList.add('mx-2');\n    }\n\n    private createMoreGroup(group: ToolbarItem[]) {\n        if (group.length > 0) {\n            const compRef = this.toolbarContainer.createComponent(this.toolbarGroup);\n            compRef.instance.editor = this.editor;\n            compRef.instance.menus = group;\n            compRef.instance.item = this.moreGroupMenu;\n            this.components.set(this.moreGroupMenu.key, compRef);\n        }\n    }\n\n    private viewComponentType(type: ToolbarItemType) {\n        if (type === ToolbarItemType.default) {\n            return TheToolbarItem;\n        }\n        if (type === ToolbarItemType.dropdown) {\n            return TheToolbarDropdown;\n        }\n        return TheToolbarItem;\n    }\n}\n","<ng-container #toolbarContainer></ng-container>\n<ng-content></ng-content>\n@if (afterTemplate) {\n  <ng-template [ngTemplateOutlet]=\"afterTemplate\"></ng-template>\n}\n","import {\n    Component,\n    ElementRef,\n    HostBinding,\n    HostListener,\n    Input,\n    OnDestroy,\n    OnInit,\n    TemplateRef,\n    ViewChild,\n    ViewContainerRef,\n    Signal,\n    signal,\n    ChangeDetectionStrategy\n} from '@angular/core';\nimport { ThyAction } from 'ngx-tethys/action';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { ThyTooltipDirective } from 'ngx-tethys/tooltip';\nimport { Editor } from 'slate';\nimport { DefaultToolbarItem } from '../../interfaces';\nimport { TheToolbarComponent } from '../toolbar/toolbar.component';\nimport { TheI18nService, TheI18nTranslation } from '../../i18n';\n\n@Component({\n    selector: 'the-toolbar-group',\n    templateUrl: './toolbar-group.component.html',\n    changeDetection: ChangeDetectionStrategy.Eager,\n    imports: [ThyAction, ThyTooltipDirective, TheToolbarComponent]\n})\nexport class TheToolbarGroup implements OnInit, OnDestroy {\n    private _item: DefaultToolbarItem;\n\n    locale: Signal<TheI18nTranslation>;\n\n    @HostBinding('class') className = 'the-toolbar-group';\n\n    @Input() menus: DefaultToolbarItem[];\n\n    @Input()\n    set item(i: DefaultToolbarItem) {\n        this._item = i;\n        this.activeMenuItem = i;\n    }\n    get item() {\n        return this._item;\n    }\n\n    get isOpened() {\n        return this.groupPopoverRef && this.groupPopoverRef.getOverlayRef() && this.groupPopoverRef.getOverlayRef().hasAttached();\n    }\n\n    editor: Editor;\n\n    active = false;\n\n    activeMenuItem: DefaultToolbarItem;\n\n    groupPopoverRef: ThyPopoverRef<any>;\n\n    @ViewChild('groupTemplate', { read: TemplateRef, static: true })\n    groupTemplate: TemplateRef<any>;\n\n    @HostListener('mousedown', ['$event'])\n    mousedownHandler(event) {\n        event.preventDefault();\n        this.toggleGroupMenus(event);\n    }\n\n    @HostListener('document:mouseup', ['$event'])\n    documentMouseupHandle(event) {\n        const isGroup = (event.target as HTMLElement).closest('.the-toolbar-group');\n        const isGroupContainer = (event.target as HTMLElement).closest('.the-toolbar-group-container');\n        if (!isGroupContainer && !isGroup && this.isOpened) {\n            this.closeGroup();\n        }\n    }\n\n    @HostListener('click', ['$event'])\n    clickHandle(event) {\n        event.stopPropagation();\n    }\n\n    constructor(\n        public elementRef: ElementRef,\n        private thyPopover: ThyPopover,\n        private viewContainerRef: ViewContainerRef,\n        private i18n: TheI18nService\n    ) {\n        this.locale = signal(i18n.getLocale()().translations);\n    }\n\n    ngOnInit() {}\n\n    ngOnDestroy(): void {\n        this.closeGroup();\n    }\n\n    toggleGroupMenus(event: MouseEvent) {\n        if (this.editor?.disabled) {\n            return;\n        }\n        if (this.isOpened) {\n            this.closeGroup();\n        } else {\n            this.openGroup(event);\n        }\n    }\n\n    public selectionChange(editor: Editor) {\n        const activeItem = this.menusActive(editor);\n        this.activeMenuItem = activeItem ? activeItem : null;\n        this.activeChange();\n    }\n\n    menusActive(editor: Editor) {\n        return this.menus.find(i => {\n            if (this.editor?.selection && i?.active) {\n                return i?.active(editor);\n            }\n        });\n    }\n\n    activeChange() {\n        const activeItem = this.menusActive(this.editor);\n        if (this.isOpened && !activeItem) {\n            this.active = false;\n            return;\n        }\n        this.active = activeItem ? true : false;\n    }\n\n    openGroup(event: MouseEvent) {\n        this.active = true;\n        this.groupPopoverRef = this.thyPopover.open(this.groupTemplate, {\n            panelClass: 'the-toolbar-group-container',\n            offset: 0,\n            minWidth: 0,\n            placement: 'bottomRight',\n            origin: event.currentTarget as HTMLElement,\n            viewContainerRef: this.viewContainerRef,\n            hasBackdrop: false,\n            outsideClosable: true,\n            manualClosure: true\n        });\n        this.groupPopoverRef.afterClosed().subscribe(() => {\n            this.activeChange();\n        });\n    }\n\n    closeGroup() {\n        if (this.isOpened) {\n            this.groupPopoverRef.close();\n        }\n    }\n}\n","<a\n  href=\"javascript:;\"\n  thyAction\n  [thyActionIcon]=\"item.icon\"\n  [thyActionActive]=\"active\"\n  [thyTooltip]=\"$safeNavigationMigration(item?.name)\"\n  thyTooltipPlacement=\"top\"\n></a>\n\n<ng-template #groupTemplate>\n  <the-toolbar class=\"group\" [editor]=\"editor\" [toolbarItems]=\"menus\" [isMore]=\"false\"></the-toolbar>\n</ng-template>\n","import { InjectionToken } from '@angular/core';\n\nexport const THE_LISTBOX_PARENT_OPTION_TOKEN = new InjectionToken('THE_LISTBOX_PARENT_OPTION_TOKEN');\n\nexport const THE_LISTBOX_PARENT_GROUP_TOKEN = new InjectionToken('THE_LISTBOX_PARENT_GROUP_TOKEN');\n\nexport const THE_LISTBOX_TOKEN = new InjectionToken('THE_LISTBOX_TOKEN');\n\nexport type TheListboxChangeEventType = 'turn' | 'child' | 'parent' | 'init' | 'select';\n","import { DOWN_ARROW, ENTER, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n    AfterContentInit,\n    ContentChildren,\n    DestroyRef,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    Inject,\n    Input,\n    NgZone,\n    Optional,\n    Output,\n    QueryList,\n    SkipSelf,\n    forwardRef,\n    inject\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { ThePluginMenuItem, ThePluginMenuItemKey } from '../../interfaces';\nimport {\n    THE_LISTBOX_PARENT_GROUP_TOKEN,\n    THE_LISTBOX_PARENT_OPTION_TOKEN,\n    THE_LISTBOX_TOKEN,\n    TheListboxChangeEventType\n} from './listbox.type';\n\n@Directive({\n    selector: '[theListboxOption]',\n    exportAs: 'theListboxOption',\n    providers: [\n        {\n            provide: THE_LISTBOX_PARENT_OPTION_TOKEN,\n            useExisting: TheListboxOptionDirective\n        }\n    ],\n    standalone: true\n})\nexport class TheListboxOptionDirective {\n    @Input() theOptionValue: ThePluginMenuItem;\n\n    @Input() theOptionDisabled: boolean;\n\n    @HostBinding('class') className = 'the-listbox-option';\n\n    @ContentChildren(forwardRef(() => TheListboxOptionDirective), { descendants: true })\n    public _options: QueryList<TheListboxOptionDirective>;\n\n    private _active = false;\n\n    get hasChild() {\n        return this._options.length > 0;\n    }\n\n    get firstChild() {\n        return this._options.first;\n    }\n\n    constructor(\n        @Inject(THE_LISTBOX_PARENT_OPTION_TOKEN) @Optional() @SkipSelf() public parentOption: TheListboxOptionDirective,\n        @Inject(THE_LISTBOX_PARENT_GROUP_TOKEN) public parentGroup: TheListboxGroupDirective,\n        public elementRef: ElementRef<HTMLElement>\n    ) {}\n\n    getGroups() {\n        const groups: TheListboxGroupDirective[] = [];\n        this._options.forEach(option => {\n            if (option.parentOption && option.parentOption === this && !groups.includes(option.parentGroup)) {\n                groups.push(option.parentGroup);\n            }\n        });\n        return groups;\n    }\n\n    setActive(active: boolean) {\n        this._active = active;\n        if (active) {\n            this.elementRef.nativeElement.classList.add('focus');\n        } else {\n            this.elementRef.nativeElement.classList.remove('focus');\n        }\n    }\n\n    getActive() {\n        return this._active;\n    }\n}\n\nexport interface TheListboxChangeEvent {\n    option: TheListboxOptionDirective;\n    type: TheListboxChangeEventType;\n}\n\n@Directive({\n    selector: '[theListboxGroup]',\n    exportAs: 'theListboxGroup',\n    providers: [\n        {\n            provide: THE_LISTBOX_PARENT_GROUP_TOKEN,\n            useExisting: TheListboxGroupDirective\n        }\n    ],\n    standalone: true\n})\nexport class TheListboxGroupDirective implements AfterContentInit {\n    /**\n     * 大于 1 表示水平分组，小于等于 1 表示垂直分组\n     */\n    @Input() horizontalColumn = 1;\n\n    @HostBinding('class') className = 'the-listbox-group';\n\n    @ContentChildren(TheListboxOptionDirective, { descendants: true }) public _options: QueryList<TheListboxOptionDirective>;\n\n    options: TheListboxOptionDirective[] = [];\n\n    constructor(\n        @Inject(THE_LISTBOX_PARENT_OPTION_TOKEN) @Optional() @SkipSelf() public parentOption: TheListboxOptionDirective,\n        @Inject(THE_LISTBOX_TOKEN) public theListBox: TheListboxDirective\n    ) {}\n\n    ngAfterContentInit(): void {\n        this.filterOptions();\n    }\n\n    filterOptions() {\n        this.options = this._options.filter(_option => {\n            if (_option.parentGroup && _option.parentGroup === this) {\n                return true;\n            } else {\n                return false;\n            }\n        });\n    }\n\n    getSiblingGroups() {\n        if (this.parentOption) {\n            return this.parentOption.getGroups();\n        } else {\n            return this.theListBox.groups;\n        }\n    }\n\n    hasChild() {\n        return this.options.length > 0;\n    }\n\n    getFirst() {\n        return this.options[0];\n    }\n\n    getLast() {\n        return this.options[this.options.length - 1];\n    }\n}\n\n@Directive({\n    selector: '[theListBox]',\n    exportAs: 'theListBox',\n    providers: [\n        {\n            provide: THE_LISTBOX_TOKEN,\n            useExisting: TheListboxDirective\n        }\n    ],\n    standalone: true\n})\nexport class TheListboxDirective implements AfterContentInit {\n    @Input() keyboardContainer: HTMLElement;\n\n    @Input() autoActiveFirstItem = true;\n\n    @Output() theListboxChange = new EventEmitter<TheListboxChangeEvent>();\n\n    @HostBinding('class') className = 'the-listbox-container';\n\n    @ContentChildren(TheListboxOptionDirective, { descendants: true })\n    protected _options: QueryList<TheListboxOptionDirective>;\n\n    @ContentChildren(TheListboxGroupDirective, { descendants: true })\n    protected _groups: QueryList<TheListboxGroupDirective>;\n\n    public activeOption: TheListboxOptionDirective;\n\n    public groups: TheListboxGroupDirective[] = [];\n\n    private ngZone = inject(NgZone);\n\n    private elementRef = inject(ElementRef);\n\n    private destroyRef = inject(DestroyRef);\n\n    ngAfterContentInit(): void {\n        this.filterGroups();\n        if (this.groups.length > 0 && this.autoActiveFirstItem) {\n            this.setActiveItem(null, this.groups[0].getFirst(), 'init');\n        }\n        this._options.changes.pipe(debounceTime(20), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n            this.filterGroups();\n            this.setActiveItem(this.activeOption, this.groups[0].getFirst(), 'init');\n        });\n        this.ngZone.runOutsideAngular(() => {\n            fromEvent<KeyboardEvent>(this.keyboardContainer || this.elementRef.nativeElement, 'keydown')\n                .pipe(takeUntilDestroyed(this.destroyRef))\n                .subscribe(event => {\n                    this.handleKeydown(event);\n                });\n        });\n    }\n\n    filterGroups() {\n        this.groups = this._groups.filter(group => {\n            group.filterOptions();\n            if (!group.parentOption && group.hasChild()) {\n                return true;\n            } else {\n                return false;\n            }\n        });\n    }\n\n    handleKeydown(event: KeyboardEvent) {\n        const { keyCode } = event;\n        if (!this.activeOption && (keyCode === DOWN_ARROW || keyCode === UP_ARROW || keyCode === RIGHT_ARROW || keyCode === LEFT_ARROW)) {\n            this.setActiveItem(null, this.groups[0].getFirst(), 'init');\n            return;\n        }\n\n        switch (keyCode) {\n            case DOWN_ARROW:\n                this.setNextLineActive();\n                event.preventDefault();\n                break;\n            case UP_ARROW:\n                this.setPreviousLineActive();\n                event.preventDefault();\n                break;\n            case RIGHT_ARROW:\n                this.setNextItemActive();\n                event.preventDefault();\n                break;\n            case LEFT_ARROW:\n                this.setPreviousItemActive();\n                event.preventDefault();\n                break;\n            case ENTER:\n                this.theListboxChange.emit({ option: this.activeOption, type: 'select' });\n                event.preventDefault();\n                break;\n        }\n    }\n\n    /**\n     * ←\n     */\n    setPreviousItemActive() {\n        if (this.activeOption.parentOption) {\n            this.setActiveItem(this.activeOption, this.activeOption.parentOption, 'parent');\n        } else {\n            const groupOptions = this.activeOption.parentGroup.options;\n            let optionIndex = groupOptions.indexOf(this.activeOption);\n            let newOptionIndex = optionIndex - 1;\n            if (newOptionIndex >= 0) {\n                this.setActiveItem(this.activeOption, groupOptions[newOptionIndex], 'turn');\n            } else {\n                this.enterPreviousGroup();\n            }\n        }\n    }\n\n    /**\n     * ↓ 键\n     */\n    setNextLineActive(activeOption?: TheListboxOptionDirective) {\n        const _activeOption = activeOption ? activeOption : this.activeOption;\n        const groupOptions = _activeOption.parentGroup.options;\n        let optionIndex = groupOptions.indexOf(_activeOption);\n        let newOptionIndex = optionIndex + _activeOption.parentGroup.horizontalColumn;\n        const lastLineLength = groupOptions.length % _activeOption.parentGroup.horizontalColumn;\n        const lastLineStartIndex = groupOptions.length - (lastLineLength > 0 ? lastLineLength : 1);\n        let newOption = null;\n        if (newOptionIndex <= groupOptions.length - 1) {\n            newOption = groupOptions[newOptionIndex];\n        } else if (optionIndex < lastLineStartIndex) {\n            newOptionIndex = groupOptions.length - 1;\n            newOption = groupOptions[newOptionIndex];\n        }\n        if (newOption) {\n            this.setActiveItem(this.activeOption, newOption, 'turn');\n        } else {\n            this.enterNextGroup();\n        }\n    }\n\n    /**\n     * → 键\n     */\n    setNextItemActive() {\n        if (this.activeOption.hasChild) {\n            this.setActiveItem(this.activeOption, this.activeOption.firstChild, 'child');\n        } else {\n            const groupOptions = this.activeOption.parentGroup.options;\n            let optionIndex = groupOptions.indexOf(this.activeOption);\n            let newOptionIndex = optionIndex + 1;\n            if (newOptionIndex <= groupOptions.length - 1) {\n                this.setActiveItem(this.activeOption, groupOptions[newOptionIndex], 'turn');\n            } else {\n                this.enterNextGroup();\n            }\n        }\n    }\n\n    /**\n     * ↑ 键\n     */\n    setPreviousLineActive() {\n        const groupOptions = this.activeOption.parentGroup.options;\n        let optionIndex = groupOptions.indexOf(this.activeOption);\n        let newOptionIndex = optionIndex - this.activeOption.parentGroup.horizontalColumn;\n        if (newOptionIndex >= 0) {\n            this.setActiveItem(this.activeOption, groupOptions[newOptionIndex], 'turn');\n        } else {\n            this.enterPreviousGroup();\n        }\n    }\n\n    enterNextGroup() {\n        const groups = this.activeOption.parentGroup.getSiblingGroups();\n        const groupIndex = groups.indexOf(this.activeOption.parentGroup);\n        let newGroupIndex = groupIndex + 1;\n        if (newGroupIndex > groups.length - 1) {\n            newGroupIndex = 0;\n        }\n        this.setActiveItem(this.activeOption, groups[newGroupIndex].getFirst(), 'turn');\n    }\n\n    enterPreviousGroup() {\n        const groups = this.activeOption.parentGroup.getSiblingGroups();\n        const groupIndex = groups.indexOf(this.activeOption.parentGroup);\n        let newGroupIndex = groupIndex - 1;\n        if (newGroupIndex < 0) {\n            newGroupIndex = groups.length - 1;\n        }\n        this.setActiveItem(this.activeOption, groups[newGroupIndex].getLast(), 'turn');\n    }\n\n    setActiveItem(\n        previous: TheListboxOptionDirective | null,\n        option: TheListboxOptionDirective,\n        type: TheListboxChangeEventType,\n        triggerFrom: 'mouse' | 'keyboard' = 'keyboard'\n    ) {\n        if (previous) {\n            previous.setActive(false);\n        }\n        option.setActive(true);\n        this.activeOption = option;\n        if (triggerFrom === 'mouse' && type === 'turn') {\n            return;\n        }\n        this.theListboxChange.emit({ option, type });\n    }\n\n    getOption(key: ThePluginMenuItemKey) {\n        return this._options.find(option => option.theOptionValue?.key === key);\n    }\n\n    clearActiveItem() {\n        this.activeOption.setActive(false);\n        this.activeOption = null;\n    }\n}\n","import { Directive, HostListener } from '@angular/core';\n\n@Directive({\n    selector: '[thePreventDefault]',\n    exportAs: 'thePreventDefault',\n    standalone: true\n})\nexport class ThePreventDefaultDirective {\n    @HostListener('mousedown', ['$event'])\n    mousedown(event: MouseEvent) {\n        event.preventDefault();\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Element } from 'slate';\nimport { Alignment } from './constants/node-types';\n\n@Pipe({\n    name: 'elementStyle',\n    standalone: true\n})\nexport class ElementStylePipe implements PipeTransform {\n    transform(element: Element, align?: Alignment) {\n        const style: { [key: string]: string } = {};\n        if (element.align || align) {\n            style.textAlign = (element.align as string) || align || Alignment.left;\n        }\n        if (element.textIndent) {\n            style.textIndent = element.textIndent + 'em';\n        }\n        return style;\n    }\n}\n\n@Pipe({\n    name: 'elementClass',\n    standalone: true\n})\nexport class ElementClassPipe implements PipeTransform {\n    transform(element: Element) {\n        let classStr = '';\n        const prefix = 'indent';\n        if (element.textIndent) {\n            classStr += `${prefix}-${element.textIndent}`;\n        }\n        return classStr;\n    }\n}\n\n@Pipe({\n    name: 'getMenuIcon',\n    standalone: true\n})\nexport class PluginMenuPipe implements PipeTransform {\n    transform(icon: string | ((sceneKey?: string) => string), sceneKey?: string) {\n        if (typeof icon === 'function') {\n            return icon(sceneKey);\n        }\n        return icon;\n    }\n}\n","import { Descendant, Node, NodeEntry } from 'slate';\nimport { QueryOptions } from '../interfaces';\nimport * as TheQueries from '../queries';\n\nexport interface ApplyDeepToNodesOptions {\n    // The destination node object.\n    node: Node;\n    // The source object. Can be a factory.\n    source: Record<string, any> | (() => Record<string, any>);\n    // Function to call on each node following the query.\n    apply: (node: Node, source: Record<string, any> | (() => Record<string, any>)) => void;\n    // Query to filter the nodes.\n    query?: QueryOptions;\n}\n\n/**\n * Recursively apply an operation to children nodes with a query.\n */\nexport const applyDeepToNodes = ({ node, source, apply, query }: ApplyDeepToNodesOptions) => {\n    const entry: NodeEntry<Node> = [node, []];\n\n    if (TheQueries.isNodeType(entry, query)) {\n        if (source instanceof Function) {\n            apply(node, source());\n        } else {\n            apply(node, source);\n        }\n    }\n\n    if (!TheQueries.isAncestor(node)) {\n        return;\n    }\n\n    node.children.forEach((child: Descendant) => {\n        applyDeepToNodes({ node: child, source, apply, query });\n    });\n};\n","import { Editor, Path, Point, Range, Text, Transforms } from 'slate';\nimport { MarkTypes } from '../constants';\n\nexport const setMarks = (editor: Editor, marks: { [key in MarkTypes]?: any }, at?: Path | Point | Range) => {\n    Transforms.setNodes(editor, marks, {\n        at,\n        match: Text.isText,\n        split: true\n    });\n};\n","import { Editor, Range } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { MarkProps, MarkTypes } from '../constants/node-types';\nimport { setMarks } from './set-marks';\n\nexport const clearMarks = (editor: Editor) => {\n    const { selection } = editor;\n    if (!selection) {\n        return;\n    }\n\n    if (Range.isCollapsed(selection)) {\n        const marks = Editor.marks(editor);\n        for (const key in marks) {\n            Editor.removeMark(editor, key);\n        }\n    } else {\n        const unsetMarks: { [key in MarkTypes]?: null | string } = {};\n        MarkProps.forEach(key => {\n            unsetMarks[key] = null;\n        });\n        setMarks(editor, unsetMarks);\n    }\n};\n","import { Editor, Element, Path, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport * as TheQueries from '../queries';\nimport { createEmptyParagraph } from '../utils/create-empty-paragraph';\n\nexport const deleteElement = (editor: Editor, element: Element) => {\n    const at = TheQueries.findPath(editor, element);\n    Transforms.insertNodes(editor, createEmptyParagraph(), { at });\n    AngularEditor.focus(editor);\n    Transforms.select(editor, at);\n    Transforms.removeNodes(editor, { at: Path.next(at) });\n};\n","import { Editor, Element } from 'slate';\nimport { CustomElementKinds } from '../custom-types';\nimport * as TheQueries from '../queries';\nimport { deleteElement } from './delete-element';\n\nexport const deleteNodeByType = (editor: Editor, type: CustomElementKinds) => {\n    const node = TheQueries.getAboveByType(editor, type);\n    const element = node && (node[0] as Element);\n    if (element) {\n        deleteElement(editor, element);\n    }\n};\n","import { Editor, Transforms, Element } from 'slate';\nimport { CustomElementKinds } from '../custom-types';\nimport { ElementKinds } from '../constants/node-types';\n\nexport const unWrap = (editor: Editor, kind: CustomElementKinds) => {\n    Editor.withoutNormalizing(editor, () => {\n        Transforms.setNodes(editor, { type: ElementKinds.paragraph });\n        Transforms.unwrapNodes(editor, {\n            match: n => Element.isElement(n) && n.type === kind,\n            split: true\n        });\n    });\n};\n","import { Editor, Element, NodeEntry } from 'slate';\nimport { CustomElementKinds } from '../custom-types';\nimport { BlockElementKinds } from '../interfaces/element';\nimport * as TheQueries from '../queries';\nimport { unWrap } from './un-wrap';\n\nexport function handleContinualDeleteBackward(editor: Editor, aboveResult: NodeEntry<Element>, type: CustomElementKinds) {\n    const highestBlock = aboveResult[0];\n    const lowestBlock = TheQueries.anchorBlock(editor);\n    const wrapBlockType = highestBlock.type as BlockElementKinds;\n    if (lowestBlock && Editor.isStart(editor, editor.selection.anchor, aboveResult[1])) {\n        if (wrapBlockType === type) {\n            if (highestBlock.children[0] === lowestBlock) {\n                unWrap(editor, wrapBlockType);\n                return true;\n            }\n        }\n    }\n    return false;\n}\n","import { CustomElementKinds } from '../custom-types';\nimport { Editor, Element } from 'slate';\nimport { unWrap } from './un-wrap';\n\nexport function handleContinualInsertBreak(editor: Editor, lowestBlock: Element, type: CustomElementKinds) {\n    const isEmpty = Editor.isEmpty(editor, lowestBlock);\n    const isEnd = Editor.isEnd(editor, editor.selection.anchor, editor.selection.focus.path);\n    const aboveResult = Editor.above<Element>(editor, {\n        match: n => Element.isElement(n) && n.type === type\n    });\n\n    if (aboveResult && aboveResult[0] && isEnd && isEmpty) {\n        const wrapBlock = aboveResult[0];\n        if (wrapBlock.type === type) {\n            if (wrapBlock.children[wrapBlock.children.length - 1] === lowestBlock) {\n                unWrap(editor, wrapBlock.type);\n                return true;\n            }\n        }\n    }\n    return false;\n}\n","import { isArray } from 'ngx-tethys/util';\nimport { Editor, Element, Path, Range, Transforms } from 'slate';\nimport { ElementKinds } from '../constants';\nimport { getPluginOptions } from '../core/utils/get-plugin-options';\nimport { CustomElementKinds } from '../custom-types';\nimport { TheEditor } from '../interfaces';\nimport * as TheQueries from '../queries';\nimport { createEmptyParagraph, refocus } from '../utils';\n\nexport const insertElements = (editor: Editor, elements: Element | Element[], select = true) => {\n    if (!editor.selection) {\n        refocus(editor);\n    }\n    if (Range.isExpanded(editor.selection)) {\n        Editor.deleteFragment(editor);\n    }\n    const type = !isArray(elements) ? elements.type : elements[0].type; // 后期处理复制粘贴需要修改\n    const allowParentTypes = getPluginOptions(editor, type)?.allowParentTypes || [];\n    const insertNodePath = TheQueries.getInsertElementsPath(editor, allowParentTypes as CustomElementKinds[]);\n    const [anchorBlock, anchorBlockPath] = TheQueries.anchorBlockEntry(editor);\n    const isEmpty = Editor.isEmpty(editor, anchorBlock);\n\n    if (insertNodePath) {\n        Editor.withoutNormalizing(editor, () => {\n            Transforms.insertNodes(editor, elements, { at: insertNodePath, select });\n            if (isEmpty) {\n                Transforms.removeNodes(editor, { at: anchorBlockPath });\n            }\n        });\n        return;\n    }\n\n    Transforms.insertNodes(editor, elements, { at: Path.next([anchorBlockPath[0]]), select });\n    if (isEmpty && anchorBlockPath.length === 1) {\n        Transforms.delete(editor, { at: anchorBlockPath });\n    }\n};\n\nexport const insertInlineElement = (editor: Editor, elements: Element | Element[]) => {\n    if (!editor.selection) {\n        refocus(editor);\n    }\n\n    Editor.withoutNormalizing(editor, () => {\n        const insertPath = TheQueries.getInsertElementsPath(editor, [ElementKinds.paragraph]);\n        const isBlockCardLeftCursor = TheEditor.isBlockCardLeftCursor(editor);\n        const isBlockCardRightCursor = TheEditor.isBlockCardRightCursor(editor);\n        if (!insertPath) {\n            let at;\n            if (isBlockCardLeftCursor) {\n                at = editor.selection.anchor.path;\n            } else if (isBlockCardRightCursor) {\n                at = Path.next(editor.selection.anchor.path);\n            }\n            Transforms.insertNodes(editor, createEmptyParagraph(), { at, select: true });\n        }\n        Transforms.insertNodes(editor, elements, { select: true });\n    });\n};\n","import { Editor, Location, Transforms } from 'slate';\nimport { createEmptyParagraph } from '../utils/create-empty-paragraph';\n\nexport const insertParagraph = (editor: Editor, at: Location) => {\n    Transforms.insertNodes(editor, createEmptyParagraph(), { at });\n};\n","import { defaults } from '../utils/lodash';\nimport { applyDeepToNodes, ApplyDeepToNodesOptions } from './apply-deep-to-nodes';\n\n/**\n * Recursively merge a source object to children nodes with a query.\n */\nexport const mergeDeepToNodes = (options: Omit<ApplyDeepToNodesOptions, 'apply'>) => {\n    applyDeepToNodes({ ...options, apply: defaults });\n};\n","import { Editor, Element, Node, NodeEntry, Path, Transforms } from 'slate';\nimport * as TheQueries from '../queries';\n\nexport interface MoveChildrenOptions {\n    /**\n     * Parent node of the children to move.\n     */\n    at: NodeEntry | Path;\n\n    /**\n     * Path where to move the children.\n     */\n    to: Path;\n\n    /**\n     * Start index of the children to move.\n     * Example: 1 means children[0] will not be moved.\n     */\n    start?: number;\n\n    /**\n     * Condition for the child to be moved\n     */\n    match?(entry: NodeEntry): boolean;\n}\n\n/**\n * 将节点的子级移动到路径。 返回移动的子级数。\n */\nexport const moveChildren = (editor: Editor, { at, to, match, start = 0 }: MoveChildrenOptions) => {\n    let moved = 0;\n    const parentPath = Path.isPath(at) ? at : at[1];\n    const parentNode = Path.isPath(at) ? Node.get(editor, parentPath) : at[0];\n\n    if (!(Element.isElement(parentNode) && Editor.isBlock(editor, parentNode))) return moved;\n\n    for (let i = parentNode.children.length - 1; i >= start; i--) {\n        const childPath = [...parentPath, i];\n        const childNode = TheQueries.getNode(editor, childPath);\n\n        if (!match || (childNode && match([childNode, childPath]))) {\n            Transforms.moveNodes(editor, { at: childPath, to });\n            moved++;\n        }\n    }\n\n    return moved;\n};\n","import { isKeyHotkey } from 'is-hotkey';\nimport { Editor, Transforms } from 'slate';\nimport { ResetBlockTypePluginOptions } from '../interfaces/reset-block-type-plugin-options';\nimport * as TheQueries from '../queries';\nimport { isCollapsed } from '../queries/is-collapsed';\n\nexport const onKeyDownResetBlockType =\n    ({ rules }: ResetBlockTypePluginOptions) =>\n    (event: KeyboardEvent | null, editor: Editor) => {\n        let reset: boolean | undefined;\n\n        if (editor.selection && isCollapsed(editor.selection)) {\n            rules.forEach(({ types, defaultType, hotkey, predicate, onReset }) => {\n                if (!event || (hotkey && isKeyHotkey(hotkey, event))) {\n                    if (predicate(editor) && TheQueries.isNodeTypeIn(editor, types)) {\n                        if (event !== null) {\n                            event.preventDefault();\n                        }\n                        Transforms.setNodes(editor, { type: defaultType });\n\n                        onReset(editor);\n\n                        reset = true;\n                    }\n                }\n            });\n        }\n\n        return reset;\n    };\n","import { Editor, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { getLastNode } from '../queries/get-last-node';\n\nexport const setEndSelection = (editor: Editor) => {\n    const lastNode = getLastNode(editor, 1);\n    const end = Editor.end(editor, lastNode[1]);\n    Transforms.select(editor, end);\n    AngularEditor.focus(editor);\n};\n","import { Editor, Element, Transforms } from 'slate';\nimport * as TheQueries from '../queries';\n\nexport const setNode = (editor: Editor, props: Partial<Element>, origin: Element) => {\n    Transforms.setNodes(editor, props, { at: TheQueries.findPath(editor, origin) });\n};\n","import { Editor, Node, Transforms } from 'slate';\nimport { CustomElementKinds } from '../custom-types';\nimport * as TheQueries from '../queries';\n\nexport const setNodeByType = (editor: Editor, props: Partial<Node>, type: CustomElementKinds) => {\n    const node = TheQueries.getAboveByType(editor, type);\n    const path = node && node[1];\n    if (path) {\n        Transforms.setNodes(editor, props, { at: path });\n    }\n};\n","import { Editor, Transforms, Element } from 'slate';\nimport { WrapOptions } from '../interfaces';\n\n/**\n * Unwrap nodes by type\n */\nexport const unwrapNodesByType = (editor: Editor, types: string[] | string, options: Omit<WrapOptions, 'match'> = {}) => {\n    if (!Array.isArray(types)) {\n        types = [types];\n    }\n    Transforms.unwrapNodes(editor, {\n        match: n => Element.isElement(n) && types.includes(n.type as string),\n        ...options\n    });\n};\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Editor, Element } from 'slate';\nimport { ComponentType } from 'slate-angular';\nimport { ElementKinds } from '../../constants/node-types';\nimport { TableCellElement, TableElement } from '../../custom-types';\nimport { TheBaseElement } from '../../interfaces/view-base';\nimport { TheTable } from './components/table.component';\n\nexport const THE_TABLE_COMPONENT_TOKEN = new InjectionToken<ComponentType<TheTable>>('the-Table-token');\n\nexport const HEADER_CELL_CLASS = 'the-header-cell';\n\nexport const STICKY_CELL_CLASS = 'the-sticky-cell';\n\nexport const TOP_CELL_CLASS = 'the-top-cell';\n\nexport enum TableOperations {\n    headerRow = 'headerRow',\n\n    headerColumn = 'headerColumn',\n\n    numberedColumn = 'numberedColumn'\n}\nexport interface TheTableBase extends TheBaseElement {\n    initializeColumns: () => void;\n    transformColumnsWidth: () => void;\n    initializeRows: () => void;\n    transformRowHeight: (rowIndex: number) => void;\n}\n\nexport const BASE_CELL_HEIGHT = 41; // min height\nexport const BASE_FILL_HEIGHT = 2 * 8 + 1; // padding * 2 + border 1\nexport const BASE_CELL_INNER_HEIGHT = BASE_CELL_HEIGHT - BASE_FILL_HEIGHT; // 24\nexport const TABLE_INSERT_MASK = 19;\nexport const TABLE_BORDER = 1;\nexport const TABLE_PADDING = 8;\nexport const TABLE_CONTROL = 11;\nexport const TABLE_NUMBER_COLUMN = 45;\n\nexport const TableWithStickyRowClass = 'the-table-with-sticky-row';\n\nexport interface TheTableColumn {\n    width: number;\n}\n\nexport interface TheTableOptions {\n    headerRow?: boolean;\n    headerColumn?: boolean;\n    numberedColumn?: boolean;\n}\n\nexport interface MenuEntity {\n    icon: string;\n    name: string;\n    key: string;\n    divider?: boolean;\n    extendIcon?: string;\n    visibility?: boolean;\n    isInputNumber?: boolean;\n    nameSuffix?: string;\n    count?: number;\n    backgroundColor?: string;\n    actionHandle: (entity: MenuEntity) => void;\n    activeHandle?: (event: MouseEvent, entity?: MenuEntity) => void;\n    deactivateHandle?: (event: MouseEvent) => void;\n}\n\nexport enum FullscreenState {\n    on = 'on',\n    off = 'off'\n}\n\nexport interface ThePluginTableOption {\n    freezeColumnHeader?: boolean | ((editor: Editor) => boolean); // 标题列后滚动是否支持冻结\n    freezeRowHeader?: boolean | ((editor: Editor) => boolean); // 标题行后滚动是否支持冻结\n    disabledHorizontalScrollbarFixed?: boolean; // 是否禁用水平滚动条固定\n    // 后期插件的工具栏支持外部自定义时可以删除\n    showFullscreen?: boolean;\n    setFullscreen?: (editor: Editor, event: MouseEvent, element: Element) => void;\n    fullscreenAction?: (editor: Editor) => Observable<{ element: Element | undefined; state: FullscreenState }>;\n    rowSelect?: (editor: Editor, data: { index: number; cells: TableCellElement[] }) => void;\n    colSelect?: (editor: Editor, data: { index: number; cells: TableCellElement[] }) => void;\n    tableSelect?: (editor: Editor, data: { table: TableElement }) => void;\n    deselect?: (editor: Editor) => void;\n}\n\nexport interface CellPosition {\n    row: number;\n    col: number;\n}\n\nexport interface TableDropdownOption {\n    name: string;\n    key: string;\n    isActive?: boolean;\n}\n\nexport interface TableOptionsFormat {\n    typeTable?: ElementKinds.table;\n    typeRow?: ElementKinds.tableRow;\n    typeCell?: ElementKinds.tableCell;\n    typeContent?: ElementKinds.tableContent;\n    exitBlockType?: string;\n    defaultWidth?: number;\n    minWidth?: number;\n    maxWidth?: number;\n}\n\nexport class TableOptions {\n    // The type of table blocks\n    typeTable: ElementKinds.table = ElementKinds.table;\n    // The type of row blocks\n    typeRow: ElementKinds.tableRow = ElementKinds.tableRow;\n    // The type of cell blocks\n    typeCell: ElementKinds.tableCell = ElementKinds.tableCell;\n    // The default type for blocks in cells\n    typeContent: ElementKinds.tableContent = ElementKinds.tableContent;\n    // The type of block inserted when exiting\n    exitBlockType: ElementKinds.paragraph = ElementKinds.paragraph;\n\n    defaultWidth = 200;\n\n    minWidthPx = 52;\n\n    maxWidthPx = 1000;\n\n    minHeightPx = 41;\n\n    maxHeightPx = 1000;\n\n    constructor(options?: TableOptionsFormat) {\n        if (!options) {\n            return;\n        }\n        const { typeTable, typeRow, typeCell, typeContent } = options;\n        this.typeTable = typeTable;\n        this.typeRow = typeRow;\n        this.typeCell = typeCell;\n        this.typeContent = typeContent;\n    }\n}\n\nexport enum TableInsertType {\n    insertRowsUp = 'insert-rows-up',\n    insertRowsDown = 'insert-rows-down',\n    insertColumnsLeft = 'insert-columns-left',\n    insertColumnsRight = 'insert-columns-right'\n}\n\nexport enum TableSelectCellDirection {\n    up,\n    right,\n    down,\n    left\n}\n","import { TableCellElement, TableElement } from '../../../custom-types';\n\nexport interface CellRect {\n    x: number;\n    y: number;\n    width: number;\n    height: number;\n}\n\nexport function calcSpanForRow(table: TableElement, targetIndex: number) {\n    const rowspans = [];\n    table.children\n        .filter((row, rowIndex) => rowIndex < targetIndex)\n        .forEach((row, rowIndex) => {\n            row.children.forEach((cell: TableCellElement, columnIndex) => {\n                if (cell.rowspan && cell.rowspan > 1) {\n                    const rect = {\n                        x: rowIndex,\n                        y: columnIndex,\n                        width: cell.colspan || 1,\n                        height: cell.rowspan || 1\n                    };\n                    rowspans.push(rect);\n                }\n            });\n        });\n    return table.children[0].children.map((cell, columnIndex) => {\n        return rowspans.some(rowspan => isInside(rowspan, targetIndex, columnIndex));\n    });\n}\n\nexport function calcSpanForColumn(table: TableElement, targetIndex: number) {\n    const rowspans = [];\n    table.children.forEach((row, rowIndex) => {\n        row.children\n            .filter((cell, columnIndex) => columnIndex < targetIndex)\n            .forEach((cell: TableCellElement, columnIndex) => {\n                if (cell.colspan && cell.colspan > 1) {\n                    const rect = {\n                        x: rowIndex,\n                        y: columnIndex,\n                        width: cell.colspan || 1,\n                        height: cell.rowspan || 1\n                    };\n                    rowspans.push(rect);\n                }\n            });\n    });\n    return table.children.map((cell, rowIndx) => {\n        return rowspans.some(rowspan => isInside(rowspan, rowIndx, targetIndex));\n    });\n}\n\nexport function getOriginCell(table: TableElement, targetRowIndex: number, targetColumnIndex: number) {\n    for (let rowIndex = 0; rowIndex <= targetRowIndex; rowIndex++) {\n        const row = table.children[rowIndex];\n        const originCell = row.children\n            .filter((cell, columnIndex) => columnIndex <= targetColumnIndex)\n            .find((cell: TableCellElement, columnIndex) => {\n                if (cell.rowspan > 1 || cell.colspan > 1) {\n                    const rect = {\n                        x: rowIndex,\n                        y: columnIndex,\n                        width: cell.colspan || 1,\n                        height: cell.rowspan || 1\n                    };\n                    return isInside(rect, targetRowIndex, targetColumnIndex);\n                }\n            });\n        if (originCell) {\n            return originCell;\n        }\n    }\n}\n\nexport function isInside(cellRect: CellRect, rowIndex: number, columnIndex: number): boolean {\n    if (\n        rowIndex >= cellRect.x &&\n        rowIndex <= cellRect.x + cellRect.height - 1 &&\n        columnIndex >= cellRect.y &&\n        columnIndex <= cellRect.y + cellRect.width - 1\n    ) {\n        return true;\n    }\n    return false;\n}\n","import { AngularEditor } from 'slate-angular';\nimport { TableCellElement, TableElement } from '../../../custom-types';\nimport { TheEditor } from '../../../interfaces';\nimport { getElementHeight } from '../../../utils';\n\n/**\n * 计算最小行跨距单元格\n * @param element TableElement\n * @returns\n */\nconst calculateMinRowSpanCellForRows = (element: TableElement): { cell?: TableCellElement; rowIndex: number }[] => {\n    const cells = element.children.map((row, index) => {\n        const visibleCells = row.children.filter(cell => !cell.hidden);\n        if (visibleCells.length > 0) {\n            const minRowspan = Math.min(...visibleCells.map(cell => cell.rowspan || 1));\n            const cell = row.children.find(item => !item.hidden && (item.rowspan || 1) === minRowspan);\n            return {\n                cell,\n                rowIndex: index\n            };\n        } else {\n            return {\n                rowIndex: index\n            };\n        }\n    });\n    return cells;\n};\n\n/**\n * 计算行控件的平均高度\n * @param previousCombineRowIndex\n * @param previousRowIndex\n * @param rowControls\n */\nconst calculateRowControlsAvgHeight = (\n    previousCombineRowIndex: number,\n    previousRowIndex: number,\n    rowControls: { height: number; rowIndex: number }[]\n) => {\n    const rowControl = rowControls[previousRowIndex];\n    const count = previousCombineRowIndex - previousRowIndex;\n    const avgHeight = Math.floor(rowControl.height / (count + 1));\n    const firstHeight = rowControl.height - avgHeight * count;\n    rowControl.height = firstHeight;\n    rowControls\n        .filter((_, index) => index > previousRowIndex && index <= previousCombineRowIndex)\n        .forEach(rowControl => {\n            rowControl.height = avgHeight;\n        });\n};\n\nconst getBelowRowHeight = (\n    editor: TheEditor,\n    cells: {\n        cell?: TableCellElement;\n        rowIndex: number;\n    }[],\n    index: number,\n    rowIndex: number,\n    rowspan: number\n) => {\n    let belowRowHeight = 0;\n    cells.slice(index + 1, cells.length).map(item => {\n        if (!item.cell) {\n            return;\n        }\n        if (rowIndex + rowspan > item.rowIndex) {\n            const cellDom = AngularEditor.toDOMNode(editor, item.cell);\n            if (item.cell.rowspan > 1) {\n                // 如果下方单元格的rowspan > 1，递归计算\n                const height = getBelowRowHeight(\n                    editor,\n                    cells,\n                    cells.findIndex(cell => cell.rowIndex === item.rowIndex),\n                    item.rowIndex,\n                    item.cell.rowspan\n                );\n                belowRowHeight += getElementHeight(cellDom) - height;\n            } else {\n                belowRowHeight += getElementHeight(cellDom);\n            }\n        }\n    });\n    return belowRowHeight;\n};\n\nexport const calculateRowControls = (editor: TheEditor, element: TableElement) => {\n    const minRowSpanCellForRows = calculateMinRowSpanCellForRows(element);\n    const rowControls = [];\n    let previousRowIndex = 0;\n    let previousCombineRowIndex = 0;\n    minRowSpanCellForRows.forEach((cellInfo, index) => {\n        if (!cellInfo.cell) {\n            rowControls.push({\n                height: 0,\n                rowIndex: index\n            });\n            previousCombineRowIndex = index;\n            if (index === minRowSpanCellForRows.length - 1) {\n                calculateRowControlsAvgHeight(previousCombineRowIndex, previousRowIndex, rowControls);\n            }\n            return;\n        }\n\n        // calculate combine row height\n        if (previousCombineRowIndex > previousRowIndex) {\n            calculateRowControlsAvgHeight(previousCombineRowIndex, previousRowIndex, rowControls);\n            previousCombineRowIndex = 0;\n        }\n\n        const cellDom = AngularEditor.toDOMNode(editor, cellInfo.cell);\n        let height = getElementHeight(cellDom);\n        // 当cell为合并的单元格(rowspan > 1)，计算其实际高度（当前单元格的高度 - 下方合并单元格的高度）\n        if (cellInfo.cell.rowspan > 1) {\n            const calcHeight = height - getBelowRowHeight(editor, minRowSpanCellForRows, index, cellInfo.rowIndex, cellInfo.cell.rowspan);\n            rowControls.push({\n                height: calcHeight,\n                rowIndex: cellInfo.rowIndex\n            });\n        } else {\n            rowControls.push({\n                height,\n                rowIndex: cellInfo.rowIndex\n            });\n        }\n        previousRowIndex = index;\n    });\n    return rowControls;\n};\n\nexport const calculateHeaderRowHeight = (editor: TheEditor, element: TableElement) => {\n    const firstRow = element.children[0];\n    if (firstRow.children.some(cell => cell.rowspan && cell.rowspan > 1)) {\n        throw new Error('can not calculate header row height');\n    }\n    const cellDom = AngularEditor.toDOMNode(editor, firstRow.children[0]);\n    let height = getElementHeight(cellDom);\n    return height;\n};\n","import { Editor, Element, Node, NodeEntry, Path } from 'slate';\nimport { NODE_TO_PARENT } from 'slate-dom';\nimport { TableCellElement, TableElement, TableRowElement } from '../../../custom-types';\nimport { CellPosition, TableOptions } from '../table.types';\n\nexport class TablePosition {\n    // TheElement container for the table\n    tableEntry?: NodeEntry<TableElement>;\n\n    // TheElement for current row\n    rowEntry?: NodeEntry<Element>;\n\n    // TheElement for current cell\n    cellEntry?: NodeEntry<TableCellElement>;\n\n    // Current content TheElement in the cell\n    contentEntry?: NodeEntry<Element>;\n\n    constructor(\n        options = {\n            tableEntry: null,\n            rowEntry: null,\n            cellEntry: null,\n            contentEntry: null\n        }\n    ) {\n        const { tableEntry, rowEntry, cellEntry, contentEntry } = options;\n        this.tableEntry = tableEntry;\n        this.rowEntry = rowEntry;\n        this.cellEntry = cellEntry;\n        this.contentEntry = contentEntry;\n    }\n\n    /**\n     * Create a new instance of a TablePosition from a Slate document\n     * and a node key.\n     */\n    static create(opts: TableOptions, containerNode: Node, path: Path): TablePosition {\n        const ancestors = Array.from(Node.ancestors(containerNode, path));\n        const tableEntry = ancestors.find(([p]) => Element.isElement(p) && p.type === opts.typeTable) || [];\n        const rowEntry = ancestors.find(([p]) => Element.isElement(p) && p.type === opts.typeRow) || [];\n        const cellEntry = ancestors.find(([p]) => Element.isElement(p) && p.type === opts.typeCell) || [];\n        const contentEntry = ancestors.find(([p]) => Element.isElement(p) && p.type === opts.typeContent) || [];\n\n        return new TablePosition({\n            tableEntry,\n            rowEntry,\n            cellEntry,\n            contentEntry\n        });\n    }\n\n    get table(): TableElement {\n        if (!this.tableEntry) {\n            throw new Error('Not in a table');\n        }\n        return this.tableEntry[0];\n    }\n\n    get row(): TableRowElement {\n        if (!this.rowEntry) {\n            throw new Error('Not in a row');\n        }\n        return this.rowEntry[0] as TableRowElement;\n    }\n\n    get cell(): TableCellElement {\n        if (!this.cellEntry) {\n            throw new Error('Not in a cell');\n        }\n        return this.cellEntry[0];\n    }\n\n    /**\n     * Check to see if this position is within a cell\n     */\n    isInCell(): boolean {\n        return Boolean(this.cellEntry.length > 0);\n    }\n\n    /**\n     * Check to see if this position is within a row\n     */\n    isInRow(): boolean {\n        return Boolean(this.rowEntry.length > 0);\n    }\n\n    /**\n     * Check to see if this position is within a table\n     */\n    isInTable(): boolean {\n        return Boolean(this.tableEntry.length > 0);\n    }\n\n    /**\n     * Check to see if this position is at the top of the cell.\n     */\n    isTopOfCell(): boolean {\n        const { contentEntry, cellEntry } = this;\n\n        if (!contentEntry || !cellEntry) {\n            return false;\n        }\n\n        const { children } = cellEntry[0];\n        const index = children.findIndex(content => content === contentEntry[0]);\n\n        return index === 0;\n    }\n\n    /**\n     * Check to see if this position is at the bottom of the cell.\n     */\n    isBottomOfCell(): boolean {\n        const { contentEntry, cellEntry } = this;\n\n        if (!contentEntry || !cellEntry) {\n            return false;\n        }\n\n        const { children } = cellEntry[0];\n        const index = children.findIndex(content => content === contentEntry[0]);\n\n        return index === children.length - 1;\n    }\n\n    /**\n     * Get count of columns\n     */\n    getWidth(): number {\n        const { table } = this;\n        const rows = table.children;\n        const cells = rows[0].children as Node[];\n\n        return cells.length;\n    }\n\n    /**\n     * Get count of rows\n     */\n    getHeight(): number {\n        const { table } = this;\n        const rows = table.children;\n\n        return rows.length;\n    }\n\n    /**\n     * Get index of current row in the table.\n     */\n    getRowIndex(): number {\n        const { table, row } = this;\n        const rows = table.children;\n\n        return rows.findIndex(x => x === row);\n    }\n\n    /**\n     * Get index of current column in the row.\n     */\n    getColumnIndex(): number {\n        const { row, cell } = this;\n        const cells = row.children;\n\n        return cells.findIndex(x => x === cell);\n    }\n\n    /**\n     * find current above column in the table\n     */\n    findAbove() {\n        const { table } = this;\n        const rowIndex = this.getRowIndex();\n        const columnIndex = this.getColumnIndex();\n        let y = 0;\n        let t = table.children[rowIndex].children[columnIndex];\n        while (t) {\n            y++;\n            if (table.children[rowIndex - y] && table.children[rowIndex - y].children[columnIndex]) {\n                t = table.children[rowIndex - y].children[columnIndex];\n                return t;\n            }\n            return;\n        }\n    }\n\n    findNext() {\n        let rowIndex = this.getRowIndex();\n        let columnIndex = this.getColumnIndex();\n        let nextCell = this.cell;\n        while (nextCell && nextCell.hidden) {\n            if (columnIndex + 1 < this.getWidth()) {\n                columnIndex++;\n                nextCell = this.table.children[rowIndex].children[columnIndex];\n            } else if (rowIndex + 1 < this.getHeight()) {\n                columnIndex = 0;\n                rowIndex++;\n                nextCell = this.table.children[rowIndex].children[columnIndex];\n            } else {\n                nextCell = null;\n            }\n        }\n        return nextCell;\n    }\n\n    findPrevious() {\n        let rowIndex = this.getRowIndex();\n        let columnIndex = this.getColumnIndex();\n        let previousCell = this.cell;\n        while (previousCell && previousCell.hidden) {\n            if (columnIndex - 1 >= 0) {\n                columnIndex--;\n                previousCell = this.table.children[rowIndex].children[columnIndex];\n            } else {\n                columnIndex = this.getWidth() - 1;\n                rowIndex--;\n                previousCell = this.table.children[rowIndex].children[columnIndex];\n            }\n        }\n        return previousCell;\n    }\n\n    /**\n     * find current below column in the table\n     */\n    findBelow() {\n        const { table } = this;\n        const rowIndex = this.getRowIndex();\n        const columnIndex = this.getColumnIndex();\n        let y = 0;\n        let t = table.children[rowIndex].children[columnIndex];\n        while (t) {\n            y++;\n            if (table.children[rowIndex + y] && table.children[rowIndex + y].children[columnIndex]) {\n                t = table.children[rowIndex + y].children[columnIndex];\n                return t;\n            }\n            return;\n        }\n    }\n\n    /**\n     * True if on first cell of the table\n     */\n    isFirstCell(): boolean {\n        return this.isFirstRow() && this.isFirstColumn();\n    }\n\n    /**\n     * True if on last cell of the table\n     */\n    isLastCell(): boolean {\n        return this.isLastRow() && this.isLastColumn();\n    }\n\n    /**\n     * True if on first row\n     */\n    isFirstRow(): boolean {\n        return this.getRowIndex() === 0;\n    }\n\n    /**\n     * True if on last row\n     */\n    isLastRow(): boolean {\n        return this.getRowIndex() === this.getHeight() - 1;\n    }\n\n    /**\n     * True if on first column\n     */\n    isFirstColumn(): boolean {\n        return this.getColumnIndex() === 0;\n    }\n\n    /**\n     * True if on last column\n     */\n    isLastColumn(): boolean {\n        return this.getColumnIndex() === this.getWidth() - 1;\n    }\n\n    /**\n     * find cell data with col and row\n     */\n\n    findCellByPath(cell: CellPosition): TableCellElement {\n        return this.table.children[cell.row]?.children[cell.col] as TableCellElement;\n    }\n}\n\nexport const getTableByCell = (editor: Editor, cell: TableCellElement) => {\n    const row = NODE_TO_PARENT.get(cell);\n    const table = NODE_TO_PARENT.get(row);\n    return table;\n};\n\nexport const getTableByRow = (editor: Editor, row: TableRowElement) => {\n    const table = NODE_TO_PARENT.get(row);\n    return table;\n};\n","import { Editor, Path } from 'slate';\nimport { TableOptions } from '../table.types';\nimport { TablePosition } from './table-position';\n\nexport const createTablePosition = (editor: Editor, path?: Path): TablePosition => {\n    path = path || editor.selection?.anchor?.path;\n    if (!path) {\n        throw new Error('Path invalid');\n    }\n    return TablePosition.create(new TableOptions(), editor, path);\n};\n","import { Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { TableCellElement } from '../../../custom-types';\nimport { CellPosition } from '../table.types';\nimport { createTablePosition } from './create-table-position';\n\n/* cell-position 有关的函数 */\n\n/**\n * 判断是否选中了所有的单元格\n * @param editor 编辑器对象\n * @param selectedCellPositions 选中的单元格位置数组\n * @returns 是否选中了所有的单元格\n */\nexport const isSelectedAllCell = (editor: Editor, selectedCellPositions: CellPosition[]) => {\n    const pos = createTablePosition(editor);\n    return !!selectedCellPositions.length && pos.getHeight() * pos.getWidth() === selectedCellPositions.length;\n};\n\n/**\n * 获取选中的单元格位置数组\n * @param editor 编辑器对象\n * @param selectedCells 选中的单元格\n * @returns 选中的单元格位置\n */\nexport const getSelectedCellPositions = (editor: Editor, selectedCells: TableCellElement[]) => {\n    return selectedCells?.map((cell: TableCellElement) => {\n        const path = AngularEditor.findPath(editor, cell);\n        const [row, col] = path.slice(-2);\n        return { row, col };\n    });\n};\n\n/**\n * 获取一定范围内所有的单元格位置\n * @param startRow 起始行\n * @param startCol 起始列\n * @param endRow 结束行\n * @param endCol 结束列\n * @returns 单元格位置\n */\nexport const getCellPositionsFromRange = (startRow: number, startCol: number, endRow: number, endCol: number) => {\n    const positions: CellPosition[] = [];\n    for (let row = startRow; row < endRow; row++) {\n        for (let col = startCol; col < endCol; col++) {\n            positions.push({ row, col });\n        }\n    }\n    return positions;\n};\n\n/**\n * 过滤重复的单元格位置\n * @param cells 单元格数组\n * @param selectedCellPositions 选中的单元格位置数组\n * @returns 过滤后的单元格位置数组\n */\nexport const uniqueCellPosition = (cells: CellPosition[], selectedCellPositions: CellPosition[]) => {\n    const positions: CellPosition[] = [];\n    const modCells = new Set();\n    cells.concat(selectedCellPositions).forEach(cell => modCells.add(JSON.stringify(cell)));\n    modCells.forEach((cell: string) => positions.push(JSON.parse(cell)));\n    return positions;\n};\n","import { Text } from 'slate';\nimport { TableCellElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\n\n/**\n * Create a new cell\n */\nexport function createCell(opts: TableOptions, nodes?: Text[]): TableCellElement {\n    return {\n        type: opts.typeCell,\n        children: nodes || [createEmptyContent(opts)]\n    };\n}\n\n/**\n * Create a new default content block\n */\nexport function createEmptyContent(opts: TableOptions) {\n    return {\n        type: opts.typeContent,\n        children: [{ text: '' }]\n    };\n}\n","import { Text } from 'slate';\nimport { TableRowElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\nimport { createCell } from './create-cell';\n\n/**\n * Create a new row block\n */\nexport function createRow(opts: TableOptions, columns: number, getCellContent?: (column: number) => Text[]): TableRowElement {\n    const cellNodes = new Array(columns).fill(1).map(i => createCell(opts, getCellContent ? getCellContent(i) : undefined));\n\n    return {\n        type: opts.typeRow,\n        children: cellNodes\n    };\n}\n","import { Node } from 'slate';\nimport { TableElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\nimport { createRow } from './create-row';\n\n/**\n * Create a table\n */\nexport function createTable(\n    opts: TableOptions,\n    columns: number,\n    rows: number,\n    getCellContent?: (row: number, column: number) => Node[]\n): TableElement {\n    const rowNodes = new Array(rows).fill(1).map(i => createRow(opts, columns, getCellContent ? getCellContent.bind(null, i) : undefined));\n\n    return {\n        type: opts.typeTable,\n        children: rowNodes,\n        options: {\n            headerRow: true\n        }\n    };\n}\n","import { IS_SAFARI } from 'slate-angular';\nimport { TableElement } from '../../../custom-types';\nimport { TABLE_NUMBER_COLUMN, TableOptions } from '../table.types';\n\n/**\n * 获取标题行网格列宽值\n * @param editor\n * @param headerRow 标题行\n * @param cellsWidth\n * @returns string\n */\nexport const getGridColumns = (headerRow: HTMLElement, cellsWidth: number[], unit: string = 'px'): string => {\n    let result = '';\n    Array.from(headerRow.childNodes)\n        .filter((n: HTMLElement) => n.nodeType === 1)\n        .forEach((node: HTMLElement, i) => {\n            const col = node.getAttribute('colspan');\n            const display = node.style.display;\n            if (display === 'none') {\n                return;\n            }\n            if (col) {\n                const colSpan = Number(col) ?? 1;\n                let width = 0;\n                Array.from({ length: colSpan }, (_, j) => {\n                    width += cellsWidth[i + j];\n                });\n                result += width + `${unit} `;\n            } else {\n                result += cellsWidth[i] + `${unit} `;\n            }\n        });\n    return result;\n};\n\nexport const getColumnsWidth = (cellRow: HTMLElement) => {\n    const result = [];\n    Array.from(cellRow.childNodes)\n        .filter((n: HTMLElement) => n.nodeType === 1)\n        .forEach((item: HTMLElement) => {\n            if (IS_SAFARI) {\n                result.push(item.offsetWidth);\n                return;\n            }\n            if (item.getBoundingClientRect) {\n                result.push(item.getBoundingClientRect().width);\n            }\n        });\n    return result;\n};\n\n/**\n * 打印模式下，按照原宽度比例基于当前表格宽度计算列宽\n * 1. 所有列的最小列宽总和大于表格宽度时，所有列返回最小宽度\n * @param element\n * @param minWidthPx\n * @returns number[]\n */\nexport const calcPrintColumnWidth = (element: TableElement) => {\n    const opts = new TableOptions();\n    const columns = element?.columns ?? [];\n    const numberedColumnWidth = element?.options?.numberedColumn ? TABLE_NUMBER_COLUMN : 0;\n    // 按照 DPI 96 的 A4 纸宽度是 794, 打印时左右 80px 的边距，所以这里取 794 - 80 * 2 = 634\n    // 如果存在序号列，还需要在 634 基础上减去序号列的宽度，剩下的才是内容区域的宽度\n    let columnTotalWidth = 634 - numberedColumnWidth;\n    const columnsWidth = columns.reduce((a, b) => a + b.width, 0);\n\n    // 计算所有列的 minWidth 总和\n    const totalMinWidth = opts.minWidthPx * columns.length;\n\n    if (totalMinWidth > columnTotalWidth) {\n        // 如果所有列的 minWidth 总和大于 columnTotalWidth，所有列返回最小宽度\n        return columns.map(() => ({ width: opts.minWidthPx }));\n    }\n\n    // 在剩余的宽度中按比例分配\n    const remainingWidth = columnTotalWidth - totalMinWidth;\n    const remainingWidthRatio = columns.map(column => column.width / columnsWidth);\n    // 为什么减 1， 因为这个宽度是内容区域宽度，但 td 右侧还有一个边框，所以减去 1\n    let newColumnsWidth = remainingWidthRatio.map(ratio => opts.minWidthPx + Math.floor(ratio * remainingWidth) - 1);\n\n    return columns.map((_, index) => ({\n        width: newColumnsWidth[index]\n    }));\n};\n","import { Editor } from 'slate';\nimport { TableCellElement } from '../../../custom-types';\nimport { TheEditor } from '../../../interfaces';\nimport { TableSelectCellDirection } from '../table.types';\nimport { createTablePosition } from './create-table-position';\n\nexport const getNextCell = (e: TheEditor, direction: TableSelectCellDirection, cellPath: number[]) => {\n    const [row, col] = cellPath;\n    const pos = createTablePosition(e);\n    let cell: TableCellElement;\n    switch (direction) {\n        case TableSelectCellDirection.up:\n            const aboveRow = pos.table.children[pos.getRowIndex() - 1];\n            cell = aboveRow && aboveRow.children[pos.getColumnIndex()];\n            break;\n        case TableSelectCellDirection.down:\n            let belowRowIndex = pos.getRowIndex() + 1;\n            if (pos.cell.rowspan > 1) {\n                belowRowIndex = pos.getRowIndex() + pos.cell.rowspan;\n            }\n            const belowRow = pos.table.children[belowRowIndex];\n            cell = belowRow && belowRow.children[pos.getColumnIndex()];\n            break;\n        case TableSelectCellDirection.right:\n            const afterPoint = Editor.after(e, e.selection);\n            const afterPosition = afterPoint && createTablePosition(e, afterPoint.path);\n            if (afterPosition && afterPosition.cell?.hidden) {\n                cell = afterPosition.findNext();\n            } else {\n                cell = pos.findCellByPath({ row: row, col: col + 1 });\n            }\n            break;\n        case TableSelectCellDirection.left:\n            const beforePoint = Editor.before(e, e.selection);\n            const beforePosition = beforePoint && createTablePosition(e, beforePoint.path);\n            if (beforePosition && beforePosition.cell?.hidden) {\n                cell = beforePosition.findPrevious();\n            } else {\n                cell = pos.findCellByPath({ row: row, col: col - 1 });\n            }\n            break;\n    }\n    return cell;\n};\n","import { Editor } from 'slate';\nimport { CellPosition } from '../table.types';\nimport { createTablePosition } from './create-table-position';\n\nexport function getSelectCellNode(editor: Editor, selectedCells: CellPosition[]) {\n    const pos = createTablePosition(editor);\n\n    return selectedCells\n        .map(item => {\n            const node = pos.findCellByPath(item);\n            if (node) {\n                return {\n                    ...item,\n                    node: node\n                };\n            }\n        })\n        .filter(item => item);\n}\n","import { TableElement } from '../../../custom-types';\n\n/**\n * compatible with old data\n * @returns\n */\nexport function hasHeaderRow(element: TableElement) {\n    if (element?.options?.headerRow) {\n        return true;\n    }\n    // compat old data\n    if (element?.children[0].header) {\n        return true;\n    }\n    return false;\n}\n\nexport function hasNumberedColumn(element: TableElement) {\n    if (element?.options?.numberedColumn) {\n        return true;\n    }\n    return false;\n}\n","import { Editor, Node, Range } from 'slate';\nimport { TableOptions } from '../table.types';\nimport { createTablePosition } from './create-table-position';\nimport { TablePosition } from './table-position';\n\n/**\n * True if the given range is inside one table\n */\nexport function isRangeInTable(opts: TableOptions, editor: Editor, range: Range): boolean {\n    const { focus } = range;\n    const startPosition = createTablePosition(editor);\n    const endPosition = createTablePosition(editor, focus.path);\n\n    // Only handle events in tables\n    if (!startPosition.isInTable() || !endPosition.isInTable()) {\n        return false;\n    }\n\n    // Inside the same table\n    return startPosition.table === endPosition.table;\n}\n","import { Editor } from 'slate';\nimport { CellPosition, TableOptions } from '../table.types';\nimport { createTablePosition } from './create-table-position';\nimport { isRangeInTable } from './is-range-in-table';\n\n/**\n * Is the selection in a table\n */\nexport function isSelectionInTable(opts: TableOptions, editor: Editor): boolean {\n    if (!editor.selection) {\n        return false;\n    }\n    return isRangeInTable(opts, editor, editor.selection);\n}\n\n/**\n * 传入的单元格能否组成一个矩形\n * @param editor\n * @param cells\n * @returns boolean\n */\nexport function isRectangularInTableCells(editor: Editor, cells: CellPosition[]): boolean {\n    let selectCellSize = cells.length;\n    if (selectCellSize === 0) {\n        return false;\n    }\n    const { row, col } = cells[0];\n    let maxCol: number = col;\n    let minCol: number = col;\n    let maxRow: number = row;\n    let minRow: number = row;\n    const pos = createTablePosition(editor);\n    for (let { row, col } of cells) {\n        const { hidden, rowspan, colspan } = pos.findCellByPath({ row, col });\n\n        if (hidden) {\n            selectCellSize--;\n            continue;\n        }\n\n        if (rowspan || colspan) {\n            const colSpan = colspan ?? 1;\n            const rowSpan = rowspan ?? 1;\n            // 更新视觉选中的个数\n            selectCellSize = selectCellSize + (rowSpan * colSpan - 1);\n            // 纠正合并单元格下的 row 和 col 的真实值\n            row = row + rowSpan - 1;\n            col = col + colSpan - 1;\n        }\n        maxCol = col > maxCol ? col : maxCol;\n        minCol = col < minCol ? col : minCol;\n        maxRow = row > maxRow ? row : maxRow;\n        minRow = row < minRow ? row : minRow;\n    }\n    return (maxRow + 1 - minRow) * (maxCol + 1 - minCol) === selectCellSize;\n}\n","import { isKeyHotkey } from 'is-hotkey';\n\nexport function isVirtualKey(e: KeyboardEvent) {\n    const isMod = e.ctrlKey || e.metaKey;\n    const isAlt = isKeyHotkey('alt', e);\n    const isShift = isKeyHotkey('shift', e);\n    const isCapsLock = e.key.includes('CapsLock');\n    const isTab = e.key.includes('Tab');\n    const isEsc = e.key.includes('Escape');\n    const isF = e.key.startsWith('F');\n    const isArrow = e.key.includes('Arrow') ? true : false;\n    return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;\n}\n","import { Editor, Node } from 'slate';\nimport * as TheTransforms from '../../../transforms';\nimport { TableOptions } from '../table.types';\nimport { createTable } from '../utils';\n\n/**\n * Insert a new table\n */\nexport function insertTable(\n    opts: TableOptions,\n    editor: Editor,\n    rows: number = 3,\n    columns: number = 3,\n    getCellContent?: (column: number, row: number) => Node[]\n) {\n    const { selection } = editor;\n    if (!selection?.anchor) {\n        return;\n    }\n    // Create the table node\n    const table = createTable(opts, columns, rows, getCellContent);\n    TheTransforms.insertElements(editor, table, false);\n}\n","import { Editor, Element, Transforms } from 'slate';\nimport { TableRowElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\nimport { createRow, calcSpanForRow } from '../utils';\nimport { createTablePosition } from '../utils/create-table-position';\n\nfunction getInsertRowState(opts: TableOptions, editor: Editor, count = 1, at?: number) {\n    const tablePosition = createTablePosition(editor);\n    let table = tablePosition.table;\n    let tableEntry = tablePosition.tableEntry;\n\n    // Create a new row with the right count of cells\n    const columns = (table.children[0].children as Element[]).length;\n\n    const rowIndex = tablePosition.getRowIndex();\n    const insertRowIndex = typeof at === 'undefined' ? rowIndex + 1 : at;\n\n    return { table, tableEntry, columns, rowIndex, insertRowIndex };\n}\n\nfunction packNewRow(opts: TableOptions, editor: Editor, count = 1, at?: number) {\n    const { table, tableEntry, columns, insertRowIndex } = getInsertRowState(opts, editor, count, at);\n    const rowspan = calcSpanForRow(table, insertRowIndex);\n    const newRow = createRow(opts, columns);\n\n    newRow.children.forEach((cell, columnIndex) => {\n        const isInside = rowspan[columnIndex];\n        if (isInside) {\n            cell.hidden = true;\n            const dirtyRow = table.children.find(\n                (row: TableRowElement, rowIndex: number) =>\n                    !row.children[columnIndex].hidden &&\n                    rowIndex < insertRowIndex &&\n                    row.children[columnIndex].rowspan &&\n                    row.children[columnIndex].rowspan + rowIndex > insertRowIndex\n            );\n            if (dirtyRow) {\n                Transforms.setNodes(\n                    editor,\n                    { rowspan: dirtyRow.children[columnIndex].rowspan + 1 },\n                    {\n                        at: tableEntry[1].concat(table.children.indexOf(dirtyRow)).concat(columnIndex)\n                    }\n                );\n            }\n        }\n    });\n    return newRow;\n}\n\n/**\n * Insert a new row in current table\n */\nexport function insertRow(\n    opts: TableOptions,\n    editor: Editor,\n    count = 1,\n    at?: number // row index\n) {\n    const { tableEntry, insertRowIndex } = getInsertRowState(opts, editor, count, at);\n    const newRows: TableRowElement[] = [];\n\n    for (let i = 0; i < count; i++) {\n        const newRow = packNewRow(opts, editor, count, at);\n        newRows.push(newRow);\n    }\n\n    Transforms.insertNodes(editor, newRows, {\n        at: tableEntry[1].concat(insertRowIndex)\n    });\n}\n","import { TableElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\n\nexport function addColumns(table: TableElement, columnsCount: number, insertIndex?: number, canScroll?: boolean) {\n    if (table.columns.length < columnsCount) {\n        if (!insertIndex && insertIndex !== 0) {\n            insertIndex = table.columns.length;\n        }\n        const opts = new TableOptions();\n        let columns = table.columns.slice(0, columnsCount).map(item => {\n            return { width: item.width };\n        });\n        const preTotalWidth = table.columns.reduce((prevValue, column) => {\n            return prevValue + column.width;\n        }, 0);\n\n        const isEqualColumns = table.columns.every(col => col.width === table.columns[0].width);\n\n        for (let i = 0; i < columnsCount - table.columns.length; i++) {\n            columns.splice(insertIndex, 0, { width: opts.defaultWidth });\n        }\n\n        if (isEqualColumns) {\n            if (canScroll) {\n                return columns.fill({ width: table.columns[0].width });\n            } else {\n                const width = preTotalWidth / columnsCount > opts.minWidthPx ? preTotalWidth / columnsCount : opts.minWidthPx;\n                return columns.fill({ width });\n            }\n        }\n\n        const currentTotalWidth = columns.reduce((prevValue, column) => {\n            return prevValue + column.width;\n        }, 0);\n\n        const percentage = preTotalWidth / currentTotalWidth;\n        return columns.map((column, index) => {\n            const width = Number((column.width * percentage > opts.minWidthPx ? column.width * percentage : opts.minWidthPx).toFixed(2));\n            return { width };\n        });\n    }\n    return table.columns;\n}\n","import { Transforms, Editor, NodeEntry } from 'slate';\nimport { TablePosition, createCell } from '../utils';\nimport { calcSpanForColumn } from '../utils/calc-span';\nimport { addColumns } from '../utils/add-columns';\nimport { TableOptions } from '../table.types';\nimport { TableCellElement, TableElement } from '../../../custom-types';\nimport { AngularEditor } from 'slate-angular';\nimport { createTablePosition } from '../utils/create-table-position';\n\n/**\n * Insert a new column in current table\n */\nexport function insertColumn(\n    opts: TableOptions,\n    editor: Editor,\n    count = 1,\n    at?: number, // Column index\n    getCell?: (column: number, row: number) => TableCellElement\n) {\n    const { selection } = editor;\n    const {\n        anchor: { path }\n    } = selection;\n\n    const tablePosition = createTablePosition(editor, path);\n    let table = tablePosition.table;\n    let tableEntry = tablePosition.tableEntry;\n\n    const insertColumnIndex = typeof at === 'undefined' ? tablePosition.getColumnIndex() + 1 : at;\n\n    // Insert the new cell\n\n    Editor.withoutNormalizing(editor, () => {\n        const colspan = calcSpanForColumn(table, insertColumnIndex);\n        for (let i = 0; i < count; i++) {\n            table.children.forEach((row, rowIndex) => {\n                const isInside = colspan[rowIndex];\n                const newCell = getCell ? getCell(insertColumnIndex, rowIndex) : createCell(opts);\n                if (isInside) {\n                    newCell.hidden = true;\n                    const dirtyCell = row.children.find(\n                        (cell: TableCellElement, columnIndex: number) =>\n                            !cell.hidden &&\n                            columnIndex < insertColumnIndex &&\n                            cell.colspan &&\n                            cell.colspan + columnIndex > insertColumnIndex\n                    ) as TableCellElement;\n                    if (dirtyCell) {\n                        Transforms.setNodes(\n                            editor,\n                            { colspan: dirtyCell.colspan + 1 },\n                            {\n                                at: tablePosition.tableEntry[1].concat(rowIndex).concat(row.children.indexOf(dirtyCell))\n                            }\n                        );\n                    }\n                }\n                Transforms.insertNodes(editor, [newCell], {\n                    at: tablePosition.tableEntry[1].concat(rowIndex).concat(insertColumnIndex)\n                });\n            });\n        }\n\n        const theTableWrapper = AngularEditor.toDOMNode(editor, table).querySelector('.the-table-wrapper');\n        const scrollWidth = theTableWrapper.scrollWidth;\n        const clientWidth = theTableWrapper.clientWidth;\n        const columnLength = table?.children[0].children.length;\n        const columnWidth = clientWidth / (columnLength + count);\n\n        if (table?.columns) {\n            Transforms.setNodes(\n                editor,\n                { columns: addColumns(table, table.columns.length + count, insertColumnIndex, scrollWidth > clientWidth) },\n                { at: tableEntry[1] }\n            );\n        } else if (columnWidth < opts.minWidthPx) {\n            const columns = Array(columnLength + count).fill({ width: opts.minWidthPx });\n            Transforms.setNodes(editor, { columns }, { at: tableEntry[1] });\n        }\n    });\n}\n\n/**\n * Insert new column in the row\n */\nexport function insertColumnAtRow(\n    opts: TableOptions,\n    editor: Editor,\n    count = 1,\n    tableEntry: NodeEntry<TableElement>,\n    rowIndex: number,\n    columnIndex: number,\n    getCell?: (column: number, row: number) => TableCellElement\n) {\n    Editor.withoutNormalizing(editor, () => {\n        for (let i = 0; i < count; i++) {\n            const newCell = getCell ? getCell(columnIndex, rowIndex) : createCell(opts);\n            Transforms.insertNodes(editor, [newCell], {\n                at: tableEntry[1].concat([rowIndex, columnIndex])\n            });\n        }\n    });\n}\n","import { Transforms, NodeEntry, Editor, Element } from 'slate';\nimport { TableOptions } from '../table.types';\nimport { createCell } from '../utils/create-cell';\n\n/**\n * Clear the content of the given cell\n */\nexport function clearCell(opts: TableOptions, editor: Editor, cellEntry: NodeEntry<Element>) {\n    Transforms.removeNodes(editor, { at: cellEntry[1] });\n    const cellNode = {\n        ...cellEntry[0],\n        ...createCell(opts)\n    };\n    Transforms.insertNodes(editor, { ...cellNode }, { at: cellEntry[1] });\n}\n","import { Editor, Element, Transforms } from 'slate';\nimport { TableCellElement, TableRowElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\nimport { createTablePosition } from '../utils/create-table-position';\nimport { clearCell } from './clear-cell';\n\nexport function removeRow(opts: TableOptions, editor: Editor, selectRowIndex?: number) {\n    const tablePosition = createTablePosition(editor);\n    const {\n        tableEntry,\n        table,\n        rowEntry: [rowNode, rowPath]\n    } = tablePosition;\n\n    selectRowIndex = selectRowIndex === undefined ? [...rowPath].pop() : selectRowIndex;\n    const at = tableEntry[1].concat(selectRowIndex);\n\n    Editor.withoutNormalizing(editor, () => {\n        table.children.map((row, rowIndex) => {\n            if (rowIndex < selectRowIndex) {\n                const dirtyCells = row.children.filter(\n                    (cell: TableCellElement, columnIndex: number) =>\n                        !cell.hidden && cell.rowspan && cell.rowspan + rowIndex > selectRowIndex\n                );\n                if (dirtyCells.length) {\n                    dirtyCells.map((dirtyCell: TableCellElement) => {\n                        const rowspan = dirtyCell.rowspan - 1 > 1 ? dirtyCell.rowspan - 1 : null;\n                        Transforms.setNodes(\n                            editor,\n                            { rowspan },\n                            {\n                                at: tablePosition.tableEntry[1].concat(rowIndex).concat(row.children.indexOf(dirtyCell))\n                            }\n                        );\n                    });\n                }\n            }\n        });\n        const removeRow = table.children[selectRowIndex] as TableRowElement;\n        const nextRow = table.children[selectRowIndex + 1] as TableRowElement;\n        if (nextRow) {\n            removeRow.children.map((cell: TableCellElement, cellIndex) => {\n                const nextCell = nextRow.children[cellIndex];\n                if (nextCell && cell.rowspan > 1 && nextCell.hidden) {\n                    const rowspan = cell.rowspan - 1 > 1 ? cell.rowspan - 1 : null;\n                    Transforms.setNodes(\n                        editor,\n                        { colspan: cell.colspan || null, rowspan, hidden: null },\n                        { at: tablePosition.tableEntry[1].concat(selectRowIndex + 1).concat(cellIndex) }\n                    );\n                }\n            });\n        }\n    });\n\n    // Update table by removing the row\n    if (tablePosition.getHeight() > 1) {\n        Transforms.removeNodes(editor, { at });\n    } else {\n        // If last remaining row, clear it instead\n        Editor.withoutNormalizing(editor, () => {\n            (rowNode.children as Element[]).forEach((cell, cellIndex) => {\n                clearCell(opts, editor, [cell, at.concat(cellIndex)]);\n            });\n        });\n    }\n}\n","import { TableElement } from '../../../custom-types';\n\nexport function removeColumns(table: TableElement, columnsCount: number, index?: number) {\n    if (table.columns.length > columnsCount) {\n        let removeColumns = [];\n        if ((index && index > 0) || index === 0) {\n            removeColumns = table.columns.slice(index, index + 1);\n        } else {\n            removeColumns = table.columns.slice(columnsCount);\n        }\n        if (removeColumns.length) {\n            const addWidth =\n                removeColumns.reduce((totalWidth, cell) => {\n                    return (totalWidth += cell.width);\n                }, 0) / columnsCount;\n            return table.columns\n                .filter(item => !removeColumns.includes(item))\n                .map(item => {\n                    return { width: Number((item.width + addWidth).toFixed(2)) };\n                });\n        }\n    }\n    return table.columns;\n}\n","import { Editor, Element, Transforms } from 'slate';\nimport { TablePosition } from '../utils';\nimport { clearCell } from './clear-cell';\nimport { removeColumns } from '../utils/remove-columns';\nimport { TableOptions } from '../table.types';\nimport { TableCellElement } from '../../../custom-types';\nimport { createTablePosition } from '../utils/create-table-position';\n\nexport function removeColumn(opts: TableOptions, editor: Editor, selectColIndex?: number) {\n    const { selection } = editor;\n    const {\n        anchor: { path }\n    } = selection;\n\n    const tablePosition = createTablePosition(editor, path);\n    const {\n        tableEntry,\n        table,\n        row,\n        cellEntry: [cellNode, cellPath]\n    } = tablePosition;\n\n    const rows = tableEntry[0].children as Element[];\n\n    selectColIndex = selectColIndex === undefined ? [...cellPath].pop() : selectColIndex;\n\n    Editor.withoutNormalizing(editor, () => {\n        table.children.map((row, rowIndex) => {\n            const dirtyCell = row.children.find(\n                (cell: TableCellElement, columnIndex: number) =>\n                    !cell.hidden && columnIndex < selectColIndex && cell.colspan && cell.colspan + columnIndex > selectColIndex\n            ) as TableCellElement;\n            if (dirtyCell) {\n                const colspan = dirtyCell.colspan - 1 > 1 ? dirtyCell.colspan - 1 : null;\n                Transforms.setNodes(\n                    editor,\n                    { colspan },\n                    {\n                        at: tablePosition.tableEntry[1].concat(rowIndex).concat(row.children.indexOf(dirtyCell))\n                    }\n                );\n            }\n            const removeCell = row.children[selectColIndex] as TableCellElement;\n            const nextCell = row.children[selectColIndex + 1] as TableCellElement;\n            if (nextCell && nextCell.hidden && removeCell.colspan > 1) {\n                const colspan = removeCell.colspan - 1 > 1 ? removeCell.colspan - 1 : null;\n                Transforms.setNodes(\n                    editor,\n                    { colspan, rowspan: removeCell.rowspan || null, hidden: null },\n                    { at: tablePosition.tableEntry[1].concat(rowIndex).concat(row.children.indexOf(nextCell)) }\n                );\n            }\n        });\n    });\n\n    // Remove the cell from every row\n    Editor.withoutNormalizing(editor, () => {\n        if (tablePosition.getWidth() > 1) {\n            rows.forEach((row, rowIndex) => {\n                const at = tableEntry[1].concat([rowIndex, selectColIndex]);\n                Transforms.removeNodes(editor, { at });\n            });\n            if (table.columns) {\n                Transforms.setNodes(\n                    editor,\n                    { columns: removeColumns(table, table.columns.length - 1, selectColIndex) },\n                    { at: tableEntry[1] }\n                );\n            }\n        } else {\n            // If last column, clear text in cells instead\n            rows.forEach((row, rowIndex) => {\n                row.children.forEach((cell, cellIndex) => {\n                    const at = tableEntry[1].concat([rowIndex, cellIndex]);\n                    clearCell(opts, editor, [cell as Element, at]);\n                });\n            });\n        }\n    });\n}\n","import { Path } from 'slate';\n\nexport const NextPath = (path: Path) => {\n    const [last, ...rest] = [...path].reverse();\n    return [...rest.reverse(), last + 1];\n};\n","import { Editor, Element, Path, Transforms, NodeEntry, Descendant } from 'slate';\nimport { createEmptyParagraph } from '../../../utils/create-empty-paragraph';\nimport { TableOptions } from '../table.types';\nimport { createTablePosition } from '../utils/create-table-position';\nimport { NextPath } from '../utils/next-path';\n\nexport function removeTable(opts: TableOptions, editor: Editor) {\n    const { selection } = editor;\n    const {\n        anchor: { path }\n    } = selection;\n    const pos = createTablePosition(editor, path);\n    const {\n        tableEntry: [, tablePath]\n    } = pos;\n    let nextFocusEntry: NodeEntry<Element> = null;\n    let shouldCollapseToEnd = false;\n\n    const nextEntry = Editor.next<Element>(editor, { at: tablePath });\n    if (nextEntry) {\n        nextFocusEntry = nextEntry;\n    } else {\n        const prevEntry = Editor.previous<Element>(editor, { at: tablePath });\n        if (prevEntry) {\n            nextFocusEntry = prevEntry;\n            shouldCollapseToEnd = true;\n        } else if (opts.exitBlockType) {\n            nextFocusEntry = [\n                {\n                    type: opts.exitBlockType,\n                    children: [{ text: '' }]\n                } as Element,\n                null\n            ];\n            nextFocusEntry[1] = NextPath(tablePath);\n            Transforms.insertNodes(editor, nextFocusEntry[0], { at: nextFocusEntry[1] });\n        }\n    }\n\n    Transforms.removeNodes(editor, { at: tablePath });\n    Transforms.insertNodes(editor, createEmptyParagraph(), { at: tablePath });\n\n    if (!nextFocusEntry) {\n        return;\n    }\n\n    if (shouldCollapseToEnd) {\n        const endPoint = Editor.end(editor, nextFocusEntry[1]);\n        Transforms.select(editor, endPoint);\n    } else {\n        const previousPath = Path.previous(nextFocusEntry[1]);\n        const startPoint = Editor.start(editor, previousPath);\n        Transforms.select(editor, startPoint);\n    }\n}\n","import { Editor, Element, Path, Transforms } from 'slate';\nimport { Indents } from '../../../constants';\nimport { getPluginOptions } from '../../../core/utils';\nimport { CustomElement } from '../../../custom-types';\nimport { PluginKeys } from '../../../interfaces';\nimport { IndentPluginOptions } from '../../../plugins/indent/indent.plugin';\nimport { IndentEditor } from '../../../plugins/public-api';\nimport { CellPosition } from '../table.types';\n\nexport function sortCell(cells: CellPosition[]) {\n    cells.sort((a, b) => a.row - b.row || a.col - b.col);\n}\n\nexport function setCellIndent(editor: Editor, indentType: Indents, child: CustomElement, at: Path) {\n    const allowedTypes = IndentEditor.getAllowedTypes(editor);\n    if (!Element.isElement(child) || !allowedTypes.includes(child.type)) {\n        return;\n    }\n\n    const maxIndent = getPluginOptions<IndentPluginOptions>(editor, PluginKeys.indent)?.maxIndent ?? [];\n    let { indent } = child;\n    indent = indentType === Indents.indentRight ? (indent ? ++indent : 1) : indent ? --indent : 0;\n    if (indent <= (maxIndent as number)) {\n        Transforms.setNodes(\n            editor,\n            { indent },\n            {\n                at,\n                mode: 'highest'\n            }\n        );\n    }\n}\n","import { Editor, Element, Node, Path, Transforms } from 'slate';\nimport { ElementKinds } from '../../../constants';\nimport { TableCellElement } from '../../../custom-types';\nimport * as TheQueries from '../../../queries';\nimport { CellPosition, TableOptions } from '../table.types';\nimport { getCellPositionsFromRange } from './cell-position';\nimport { createTablePosition } from './create-table-position';\nimport { getSelectCellNode } from './get-select-cell-node';\nimport { sortCell } from './handle-cell';\nimport { isRectangularInTableCells } from './is-selection-in-table';\nimport { TablePosition } from './table-position';\n\nexport interface SelectedCellInfo {\n    col: number;\n    row: number;\n    node: TableCellElement;\n    maxRowSpan?: number;\n}\n\nexport function isSelectedCellMerged(editor: Editor): boolean {\n    if (editor && editor.selection) {\n        const opts = new TableOptions();\n        const { anchor } = editor.selection;\n        const { cell } = TablePosition.create(opts, editor, anchor.path);\n        if (cell) {\n            return (cell.colspan && cell.colspan !== 1) || (cell.rowspan && cell.rowspan !== 1);\n        }\n    }\n    return false;\n}\n\nexport function getLeftCellDict(selectCellNodes: SelectedCellInfo[]) {\n    return selectCellNodes.reduce(\n        (dict, cell) => {\n            if (!dict[cell.row]) {\n                dict[cell.row] = cell;\n            }\n            return dict;\n        },\n        {} as { [key: string]: SelectedCellInfo }\n    );\n}\n\nexport function calculateCellSpan(\n    selectCellNodes: SelectedCellInfo[],\n    leftCellDict: { [key: string]: SelectedCellInfo }\n): { rowspan: number; colspan: number } {\n    let rowspan = 0,\n        colspan = 0,\n        crossCount = -1;\n    selectCellNodes\n        .filter(item => !item.node.hidden)\n        .forEach(item => {\n            const { row } = item;\n            if (item.row === selectCellNodes[0].row) {\n                colspan += item.node.colspan || 1;\n            }\n            const maxRowSpan = leftCellDict[row].maxRowSpan || 1;\n            leftCellDict[row].maxRowSpan = (item.node.rowspan || 1) > maxRowSpan ? item.node.rowspan : maxRowSpan;\n        });\n\n    Object.values(leftCellDict).forEach((item: SelectedCellInfo) => {\n        const { row, maxRowSpan } = item;\n        if (crossCount < row) {\n            rowspan += maxRowSpan;\n            crossCount = row + maxRowSpan - 1;\n        }\n    });\n    return { rowspan, colspan };\n}\n\nexport function mergeCell(editor: Editor, selectedCells: CellPosition[]) {\n    if (!editor.selection || !selectedCells?.length || selectedCells.length <= 1) {\n        return;\n    }\n    sortCell(selectedCells);\n    const selectCellNodes = getSelectCellNode(editor, selectedCells);\n    if (selectCellNodes.length !== selectedCells.length) {\n        return;\n    }\n    if (!isRectangularInTableCells(editor, selectedCells)) {\n        return;\n    }\n    const visibleCellNodes = selectCellNodes.filter(item => !item.node.hidden);\n    if (visibleCellNodes.length <= 1) {\n        return;\n    }\n    const cellPaths = selectCellNodes.map(cell => TheQueries.findPath(editor, cell.node));\n    const leftTopCellPath = cellPaths[0];\n    const leftCellDict = getLeftCellDict(selectCellNodes);\n    const { rowspan, colspan } = calculateCellSpan(selectCellNodes, leftCellDict);\n\n    Editor.withoutNormalizing(editor, () => {\n        cellPaths.slice(1).forEach(cellPath => {\n            mergeCellContent(editor, leftTopCellPath, cellPath);\n        });\n        Transforms.setNodes(editor, { rowspan, colspan }, { at: leftTopCellPath });\n        cellPaths.slice(1).forEach(cellPath => {\n            Transforms.setNodes(editor, { colspan: null, rowspan: null, hidden: true }, { at: cellPath });\n        });\n        Transforms.select(editor, leftTopCellPath);\n        Transforms.collapse(editor, { edge: 'end' });\n    });\n}\n\nexport function mergeCellContent(editor: Editor, leftTopCellPath: Path, cellPath: Path) {\n    Editor.withoutNormalizing(editor, () => {\n        const leftTopCell = Node.get(editor, leftTopCellPath) as TableCellElement;\n        if (leftTopCell && leftTopCell.children.length) {\n            let nextPath: Path = [...leftTopCellPath];\n            nextPath.push(leftTopCell.children.length);\n            const endRange = Editor.range(editor, Editor.start(editor, cellPath), Editor.end(editor, cellPath));\n            let tableCell: TableCellElement;\n            Transforms.moveNodes(editor, {\n                at: endRange,\n                to: nextPath,\n                match: node => {\n                    if (Element.isElement(node) && node.type === ElementKinds.tableCell) {\n                        tableCell = node;\n                    }\n                    if (Element.isElement(node) && node.type && tableCell && (tableCell.children as Node[]).includes(node)) {\n                        const isSingleEmptyParagraph =\n                            tableCell.children.length === 1 && Editor.isEmpty(editor, node) && node.type === ElementKinds.default;\n                        return !isSingleEmptyParagraph && true;\n                    }\n                }\n            });\n        }\n    });\n}\n\n// 计算合并前的单元格\nexport function getCellPositionsBeforeMerge(editor: Editor, { row, col }: CellPosition): CellPosition[] {\n    const pos = createTablePosition(editor);\n    const { rowspan, colspan } = pos.findCellByPath({ row, col });\n    if (rowspan || colspan) {\n        const colSpan = colspan ?? 1;\n        const rowSpan = rowspan ?? 1;\n        return getCellPositionsFromRange(row, col, row + rowSpan, col + colSpan);\n    }\n    return [{ row, col }];\n}\n","import { Editor, Transforms } from 'slate';\nimport { TableCellElement, TableElement } from '../../../custom-types';\nimport * as TheQueries from '../../../queries';\nimport { createTablePosition } from './create-table-position';\n\nexport function splitCell(editor: Editor) {\n    const tablePosition = createTablePosition(editor);\n    const { cell, table, cellEntry } = tablePosition;\n    if ((!cell.rowspan && !cell.colspan) || (cell.rowspan === 1 && cell.colspan === 1)) return editor;\n    const cellRow = tablePosition.getRowIndex();\n    const cellCol = tablePosition.getColumnIndex();\n    resetTableCell(editor, table, cell, cellRow, cellCol);\n    Transforms.select(editor, cellEntry[1]);\n    Transforms.collapse(editor, { edge: 'end' });\n}\n\nexport function resetTableCell(editor: Editor, table: TableElement, cell: TableCellElement, cellRow: number, cellCol: number) {\n    const rowSpanIndex = cellRow + (cell.rowspan || 1) - 1;\n    const colSpanIndex = cellCol + (cell.colspan || 1) - 1;\n    Editor.withoutNormalizing(editor, () => {\n        table.children.map((row, rowIndex) => {\n            row.children.map((col, colIndex) => {\n                if (rowIndex >= cellRow && rowIndex <= rowSpanIndex && colIndex >= cellCol && colIndex <= colSpanIndex) {\n                    const path = TheQueries.findPath(editor, col);\n                    Transforms.setNodes(editor, { colspan: null, rowspan: null, hidden: null }, { at: path });\n                }\n            });\n        });\n    });\n}\n","import { Editor } from 'slate';\nimport { createTablePosition } from './create-table-position';\n\nexport const getTableEntry = (editor: Editor) => {\n    const { tableEntry } = createTablePosition(editor);\n    return tableEntry;\n};\n\nexport const getTablePath = (editor: Editor) => {\n    const tableEntry = getTableEntry(editor);\n    return tableEntry[1];\n};\n\nexport const getTable = (editor: Editor) => {\n    const { tableEntry } = createTablePosition(editor);\n    return tableEntry[0];\n};\n\nexport const getSelectedCell = (editor: Editor) => {\n    if (editor && editor.selection) {\n        const { cell } = createTablePosition(editor);\n        return cell;\n    }\n    return null;\n};\n","import { Editor, Element, Location, Node, NodeEntry, Path, Point, Range, Text, Transforms } from 'slate';\nimport { AngularEditor, ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport {\n    ALIGN_BLOCK_TYPES,\n    Alignment,\n    ElementKinds,\n    Indents,\n    MarkProps,\n    MarkTypes,\n    SpecialBackgroundColor,\n    TableHeaderBackgroundColor,\n    VerticalAlignment\n} from '../../constants';\nimport { CustomElement, TableCellElement, TableElement } from '../../custom-types';\nimport { TheEditor } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\nimport { THE_EDITOR_PREVIOUS_SELECTION } from '../../utils/weak-maps';\nimport { TheTable } from './components/table.component';\nimport { TableOptions, TheTableOptions } from './table.types';\nimport { insertColumn, insertRow, insertTable, removeColumn, removeRow, removeTable } from './transforms';\nimport { clearCell } from './transforms/clear-cell';\nimport { getOriginCell, hasHeaderRow } from './utils';\nimport { createTablePosition } from './utils/create-table-position';\nimport { setCellIndent, sortCell } from './utils/handle-cell';\nimport { mergeCell } from './utils/merge-cell';\nimport { splitCell } from './utils/split-cell';\nimport { getTablePath } from './utils/table-entry';\n\nexport const TableEditor = {\n    insertTable(editor: Editor, optionsParam?: TableOptions) {\n        const opts = new TableOptions(optionsParam);\n        insertTable(opts, editor);\n    },\n\n    insertColumn(editor: Editor, count: number = 1, at?: number, optionsParam?: TableOptions) {\n        const opts = new TableOptions(optionsParam);\n        insertColumn(opts, editor, count, at);\n    },\n\n    insertRow(editor: Editor, count: number = 1, at?: number, optionsParam?: TableOptions) {\n        const opts = new TableOptions(optionsParam);\n        insertRow(opts, editor, count, at);\n    },\n\n    removeTable(editor: Editor, optionsParam?: TableOptions) {\n        const opts = new TableOptions(optionsParam);\n        removeTable(opts, editor);\n    },\n\n    removeRow(editor: Editor, rowIndex?: number, optionsParam?: TableOptions) {\n        const opts = new TableOptions(optionsParam);\n        removeRow(opts, editor, rowIndex);\n    },\n\n    removeColumn(editor: Editor, colIndex?: number, optionsParam?: TableOptions) {\n        const opts = new TableOptions(optionsParam);\n        removeColumn(opts, editor, colIndex);\n    },\n\n    clearCell(editor: Editor, nodeEntry?: NodeEntry<Element>, optionsParam?: TableOptions) {\n        const opts = new TableOptions(optionsParam);\n        clearCell(opts, editor, nodeEntry);\n    },\n\n    setCellsBackgroundColor(editor: Editor, color: string, cells?: TableCellElement[]) {\n        // 点击自定义颜色面板输入框设置颜色值时，会丢失焦点和选区（目前无法做到焦点同时存在于编辑器和输入框）\n        let location: Point;\n        if (!editor.selection) {\n            const { rangeRef } = THE_EDITOR_PREVIOUS_SELECTION.get(editor);\n            location = rangeRef.current.anchor;\n        } else {\n            location = editor.selection?.anchor;\n        }\n        if (!cells) {\n            cells = TableEditor.getSelectedCells(editor, location) || [];\n        }\n        if (cells.length) {\n            const isHeader = TableEditor.isActiveHeader(editor, location);\n            if (\n                color === 'transparent' ||\n                (color === TableHeaderBackgroundColor && isHeader) ||\n                (color === SpecialBackgroundColor && !isHeader)\n            ) {\n                color = null;\n            }\n            Editor.withoutNormalizing(editor, () => {\n                cells.map(cell => {\n                    const cellPath = AngularEditor.findPath(editor, cell);\n                    Transforms.setNodes(editor, { backgroundColor: color }, { at: cellPath });\n                });\n            });\n        }\n    },\n\n    mergeCell(editor: Editor) {\n        const selectedCellsPosition = TableEditor.getSelectedCellPositions(editor);\n        selectedCellsPosition.length && mergeCell(editor, selectedCellsPosition);\n    },\n\n    splitCell(editor: Editor) {\n        splitCell(editor);\n    },\n\n    setTableOptions(editor: Editor, newOptions: TheTableOptions) {\n        const tablePosition = createTablePosition(editor);\n        const tablePath = getTablePath(editor);\n        const table = tablePosition.table;\n        const options = { ...table.options, ...newOptions };\n        Transforms.setNodes(editor, { options }, { at: tablePath });\n    },\n\n    setEquallyColumn(editor: Editor) {\n        const [tableEntry] = Editor.nodes(editor, { at: editor.selection, match: (n: Element) => n.type === ElementKinds.table });\n        const tableElement = (tableEntry && tableEntry[0]) as TableElement;\n        if (tableElement) {\n            const columns = tableElement.columns;\n            const sumWidth = columns.reduce((previousValue, currentValue) => {\n                return previousValue + currentValue.width;\n            }, 0);\n            const equalColumns = columns.map(() => {\n                return { width: sumWidth / columns.length };\n            });\n\n            TheTransforms.setNode(editor, { columns: equalColumns }, tableElement);\n        }\n    },\n\n    clearCellsContent(editor: Editor, cells?: TableCellElement[]) {\n        if (!cells) {\n            cells = editor.selection ? TableEditor.getSelectedCells(editor) || [] : [];\n        }\n        if (cells.length > 0) {\n            const tablePosition = createTablePosition(editor);\n            if (tablePosition.isInTable()) {\n                Editor.withoutNormalizing(editor, () => {\n                    cells.forEach(cell => {\n                        const path = TheEditor.findPath(editor, cell);\n                        TableEditor.clearCell(editor, [cell, path]);\n                    });\n                });\n                Transforms.select(editor, Editor.start(editor, tablePosition.cellEntry[1]));\n            }\n        }\n    },\n\n    isActive(editor: Editor) {\n        const [table] = Editor.nodes(editor, { match: n => Element.isElement(n) && n.type === ElementKinds.table });\n        return !!table;\n    },\n\n    getSelectedCellPositions(editor: Editor) {\n        const tableNode = TheQueries.getAboveByType(editor, ElementKinds.table);\n        if (tableNode) {\n            const tableComponent = ELEMENT_TO_COMPONENT.get(tableNode[0]) as TheTable;\n            const selectedCellPositions = tableComponent.tableStore.getSelectedCellPositions();\n\n            if (selectedCellPositions.length > 0) {\n                return selectedCellPositions;\n            }\n        }\n        return null;\n    },\n\n    getSelectedCells(editor: Editor, location?: Point) {\n        const tableNode = TheQueries.getAboveByType(editor, ElementKinds.table, {\n            at: location || editor.selection?.anchor\n        });\n        if (tableNode) {\n            const tableComponent = ELEMENT_TO_COMPONENT.get(tableNode[0]) as TheTable;\n            return tableComponent?.tableStore?.selectedCells || null;\n        }\n        return null;\n    },\n\n    setAlign(editor: Editor, alignment: Alignment, cells?: TableCellElement[]) {\n        return TableEditor.handleSelectedCells(\n            editor,\n            (_, cellRange) => {\n                Transforms.setNodes(\n                    editor,\n                    { align: alignment },\n                    {\n                        at: cellRange,\n                        match: (n: Element) => ALIGN_BLOCK_TYPES.includes(n.type)\n                    }\n                );\n            },\n            cells\n        );\n    },\n\n    setVerticalAlign(editor: TheEditor, alignment: VerticalAlignment, cells?: TableCellElement[]) {\n        const isSelected = TableEditor.handleSelectedCells(\n            editor,\n            cellPath => {\n                Transforms.setNodes(editor, { verticalAlign: alignment }, { at: cellPath });\n            },\n            cells\n        );\n        if (!isSelected) {\n            const cellEntry = TheQueries.getAboveByType(editor, ElementKinds.tableCell);\n            if (cellEntry) {\n                const [, cellPath] = cellEntry;\n                Transforms.setNodes(\n                    editor,\n                    { verticalAlign: alignment },\n                    {\n                        at: cellPath,\n                        match: (n: Element) => n.type === ElementKinds.tableCell\n                    }\n                );\n                return true;\n            }\n            return false;\n        }\n        return true;\n    },\n\n    isVerticalAlignActive(editor: TheEditor, alignment: VerticalAlignment) {\n        const cells = TableEditor.getSelectedCellPositions(editor);\n        if (cells) {\n            const lastCell = cells[cells.length - 1];\n            const tableNode = TheQueries.getAboveByType(editor, ElementKinds.table);\n            const cellPath = [...tableNode[1], lastCell.row, lastCell.col];\n            const cell = Node.get(editor, cellPath) as TableCellElement;\n            const { verticalAlign } = cell;\n            if (!verticalAlign && alignment === VerticalAlignment.top) {\n                return true;\n            }\n            return verticalAlign === alignment;\n        } else {\n            const cellElement = TheQueries.getAboveByType(editor, ElementKinds.tableCell);\n            if (cellElement) {\n                const { verticalAlign } = cellElement[0];\n                if (!verticalAlign && alignment === VerticalAlignment.top) {\n                    return true;\n                }\n                return verticalAlign === alignment;\n            }\n        }\n        return null;\n    },\n\n    toggleMark(editor: TheEditor, isActive: boolean, format: string | string[], value: string | number | boolean = true) {\n        return TableEditor.handleSelectedCells(editor, at => {\n            if (isActive) {\n                Transforms.unsetNodes(editor, format, {\n                    at,\n                    match: Text.isText,\n                    split: true\n                });\n            } else {\n                Transforms.setNodes(\n                    editor,\n                    { [format as string]: value },\n                    {\n                        at,\n                        match: Text.isText,\n                        split: true\n                    }\n                );\n            }\n        });\n    },\n\n    clearMark(editor: TheEditor) {\n        return TableEditor.handleSelectedCells(editor, (cellPath, cellRange) => {\n            const unsetMarks: { [key in MarkTypes]?: null | string } = {};\n            MarkProps.forEach(key => {\n                unsetMarks[key] = null;\n            });\n            TheTransforms.setMarks(editor, unsetMarks, cellRange);\n        });\n    },\n\n    formatBrush(editor: TheEditor, marks: { [key in MarkTypes]?: any }) {\n        return TableEditor.handleSelectedCells(editor, (cellPath, cellRange) => {\n            TheTransforms.setMarks(editor, marks, cellRange);\n        });\n    },\n\n    handleSelectedCells(editor: TheEditor, handle: (cellPath: Path, cellRange: Range) => void, cells?: TableCellElement[]) {\n        if (!cells) {\n            cells = TableEditor.getSelectedCells(editor);\n        }\n        if (cells?.length) {\n            Editor.withoutNormalizing(editor, () => {\n                cells.forEach(cell => {\n                    const cellPath = TheEditor.findPath(editor, cell);\n                    const cellRange = { anchor: Editor.start(editor, cellPath), focus: Editor.end(editor, cellPath) };\n                    handle(cellPath, cellRange);\n                });\n            });\n            return true;\n        }\n        return false;\n    },\n\n    hasHeaderRow(editor: TheEditor, location?: Location) {\n        const [tableEntry] = Editor.nodes(editor, { at: location, match: (n: Element) => n.type === ElementKinds.table });\n        return hasHeaderRow(tableEntry[0] as TableElement);\n    },\n\n    hasHeaderColumn(editor: TheEditor, location?: Location) {\n        const [tableEntry] = Editor.nodes(editor, { at: location, match: (n: Element) => n.type === ElementKinds.table });\n        return tableEntry && (tableEntry[0] as TableElement)?.options?.headerColumn;\n    },\n\n    isActiveHeader(editor: TheEditor, location?: Location) {\n        location = location || editor.selection;\n        if (!TableEditor.hasHeaderRow(editor, location) && !TableEditor.hasHeaderColumn(editor, location)) {\n            return false;\n        }\n        const position = createTablePosition(editor, (location as Point).path);\n        if (TableEditor.hasHeaderRow(editor, location) && position.getRowIndex() === 0) {\n            return true;\n        }\n        if (TableEditor.hasHeaderColumn(editor, location) && position.getColumnIndex() === 0) {\n            return true;\n        }\n\n        return false;\n    },\n\n    hasHeaderRowCell(editor: TheEditor) {\n        const isHeaderRow = Editor.nodes(editor, {\n            match: n =>\n                Element.isElement(n) &&\n                ((n.type === ElementKinds.tableRow && n.header) || (n.type === ElementKinds.table && n.options?.headerRow))\n        });\n        const selectedCells = TableEditor.getSelectedCellPositions(editor) ?? [];\n        sortCell(selectedCells);\n        const isContainHeaderRow = !!selectedCells && selectedCells[0].row === 0;\n\n        return isHeaderRow && isContainHeaderRow;\n    },\n\n    hasHeaderColumnCell(editor: TheEditor) {\n        const table = TheQueries.getAboveByType(editor, ElementKinds.table);\n        const selectedCells = TableEditor.getSelectedCellPositions(editor) ?? [];\n        sortCell(selectedCells);\n        const isContainHeaderColumn = !!selectedCells && selectedCells[0].col === 0;\n        const isHeaderColumn = table && table[0] && (table[0] as TableElement)?.options?.headerColumn;\n\n        return isHeaderColumn && isContainHeaderColumn;\n    },\n    selectOriginCell(editor: TheEditor, table: TableElement, rowIndex: number, columnIndex: number, isStart: boolean) {\n        const origin = getOriginCell(table, rowIndex, columnIndex);\n        if (origin) {\n            const path = AngularEditor.findPath(editor, origin);\n            Transforms.select(editor, isStart ? Editor.start(editor, path) : Editor.end(editor, path));\n        }\n    },\n\n    handleIndent(editor: TheEditor, indentType: Indents) {\n        return TableEditor.handleSelectedCells(editor, (cellPath, cellRange) => {\n            const children = (TheQueries.getNode(editor, cellPath) as CustomElement).children as Element[];\n\n            if (children.length) {\n                children.forEach((child: Element, index: number) => {\n                    setCellIndent(editor, indentType, child, [...cellPath, index]);\n                });\n            }\n        });\n    }\n};\n","import { Editor, Element, Transforms } from 'slate';\nimport { ALIGN_BLOCK_TYPES, Alignment, ElementKinds } from '../../constants';\nimport { PluginKeys } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { TableEditor } from '../table/table.editor';\n\nexport const AlignEditor = {\n    isActive(editor: Editor, alignment: Alignment) {\n        if (!editor?.selection) {\n            return;\n        }\n\n        const blockElement = TheQueries.anchorBlock(editor);\n        if (blockElement) {\n            const { align } = blockElement;\n            if (!align && alignment === Alignment.left) {\n                return true;\n            }\n            return align === alignment;\n        }\n        if (alignment === Alignment.left) {\n            return true;\n        }\n        return false;\n    },\n    isDisabled(editor: Editor): boolean {\n        const { richMedia } = editor.options;\n        return TheQueries.getToolbarItemDisabled(editor, PluginKeys.align, richMedia ? [ElementKinds.image] : []);\n    },\n    setAlign(editor: Editor, alignment: Alignment) {\n        if (TableEditor.setAlign(editor, alignment)) {\n            return;\n        }\n        const props = {\n            align: alignment !== Alignment.left ? alignment : null\n        };\n        Transforms.setNodes(editor, props, {\n            at: editor.selection,\n            match: (n: Element) => ALIGN_BLOCK_TYPES.includes(n.type)\n        });\n    }\n};\n","import { Editor, Element, Transforms } from 'slate';\nimport { ElementKinds } from '../../constants';\nimport { getPluginOptions } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport * as TheQueries from '../../queries';\n\nexport const BlockquoteEditor = {\n    toggleBlockquote(editor: Editor) {\n        const isActive = TheQueries.isBlockActive(editor, ElementKinds.blockquote);\n        const allowParentTypes = getPluginOptions(editor, PluginKeys.blockquote)?.allowParentTypes || [];\n\n        if (!isActive) {\n            Transforms.wrapNodes(\n                editor,\n                { type: ElementKinds.blockquote, children: [] },\n                {\n                    mode: 'lowest'\n                }\n            );\n        } else {\n            Transforms.unwrapNodes(editor, { match: n => Element.isElement(n) && n.type === ElementKinds.blockquote });\n        }\n    }\n};\n","import { Editor, Element, Node, Range, Transforms } from 'slate';\nimport { DEFAULT_LANGUAGE, ElementKinds } from '../../constants';\nimport { CodeElement } from '../../custom-types';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\n\nexport const CodeEditor = {\n    setCodeAttribute(editor: Editor, props: Partial<CodeElement>, element?: CodeElement) {\n        if (!element) {\n            TheTransforms.setNodeByType(editor, props, ElementKinds.code);\n        } else {\n            const path = TheQueries.findPath(editor, element);\n            Transforms.setNodes(editor, props, { at: path });\n        }\n    },\n    insertCode(editor: Editor) {\n        const isSelectContent = Editor.string(editor, editor.selection);\n        const [startPoint, endPoint] = Range.edges(editor.selection);\n        const elementEntryIterator = Node.elements(editor, {\n            from: startPoint.path,\n            to: endPoint.path,\n            pass: ([node, path]) => {\n                return Element.isElement(node) && Editor.isBlock(editor, node);\n            }\n        });\n        const elementEntrys = Array.from(elementEntryIterator);\n        const isAllParagraph = elementEntrys.every(item => item[0].type === ElementKinds.paragraph);\n        if (isSelectContent && editor.selection.anchor.path.length === 2 && isAllParagraph) {\n            let content = elementEntrys.reduce((content, [element, path], index) => {\n                const text = Node.string(element);\n                return content + (elementEntrys.length - 1 === index ? `${text}` : `${text}\\n`);\n            }, '');\n            const codeElement: CodeElement = {\n                type: ElementKinds.code,\n                content,\n                language: DEFAULT_LANGUAGE.value,\n                children: [{ text: '' }]\n            };\n            TheTransforms.insertElements(editor, codeElement);\n        } else {\n            const codeElement: CodeElement = {\n                type: ElementKinds.code,\n                content: '',\n                language: DEFAULT_LANGUAGE.value,\n                children: [{ text: '' }]\n            };\n            TheTransforms.insertElements(editor, codeElement);\n        }\n    },\n    removeCode(editor: Editor, code?: CodeElement) {\n        if (code) {\n            TheTransforms.deleteElement(editor, code);\n        } else {\n            TheTransforms.deleteNodeByType(editor, ElementKinds.code);\n        }\n    }\n};\n","import { Injectable, NgZone, OnDestroy, ViewContainerRef } from '@angular/core';\nimport { Observable, Subject, Subscription, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { FontSizes, MarkTypes, ScrollDirection } from '../constants/node-types';\nimport { TheEditor } from '../interfaces';\n\nexport interface TheContextOptions {\n    editor: TheEditor;\n    nativeElement: HTMLElement;\n    viewContainerRef: ViewContainerRef;\n    width?: number;\n}\n\ninterface PaintFormatStatus {\n    isActive: boolean;\n    marks: { [key in MarkTypes]?: any };\n}\n\n@Injectable()\nexport class TheContextService implements OnDestroy {\n    private scrollSubscription?: Subscription;\n\n    private destroy$: Subject<void> = new Subject();\n\n    private options: TheContextOptions;\n\n    public uploadingFiles: { url: string; file: File | string }[] = [];\n\n    public paintFormatStatus: PaintFormatStatus = {\n        isActive: false,\n        marks: {}\n    };\n\n    public onMouseUp$: Observable<MouseEvent>;\n\n    public onMouseMove$: Observable<MouseEvent>;\n\n    public onMouseDown$: Observable<MouseEvent>;\n\n    public containerScrolled$ = new Subject<{ event: Event; direction: ScrollDirection }>();\n\n    public uploadingStatus$ = new Subject<boolean>();\n\n    public containerResized$ = new Subject<{ entry: ResizeObserverEntry; widthChanged: boolean; heightChanged: boolean }>();\n\n    public theEditorResized$ = new Subject<{ entry: ResizeObserverEntry; widthChanged: boolean; heightChanged: boolean }>();\n\n    public windowResized$ = new Subject<{ entry: ResizeObserverEntry; widthChanged: boolean; heightChanged: boolean }>();\n\n    private containerResizeObserver: ResizeObserver;\n\n    private theEditorResizeObserver: ResizeObserver;\n\n    private windowResizeObserver: ResizeObserver;\n\n    constructor(private ngZone: NgZone) {\n        this.ngZone.runOutsideAngular(() => {\n            this.onMouseUp$ = fromEvent<MouseEvent>(window, `mouseup`).pipe(takeUntil(this.destroy$));\n            this.onMouseMove$ = fromEvent<MouseEvent>(window, `mousemove`).pipe(takeUntil(this.destroy$));\n            this.onMouseDown$ = fromEvent<MouseEvent>(window, `mousedown`).pipe(takeUntil(this.destroy$));\n        });\n    }\n\n    public initialize(options: TheContextOptions) {\n        this.options = options;\n        this.rebindContainerScroll();\n        this.bindContainerResize();\n        this.bindTheEditorResize();\n        this.bindWindowResize();\n    }\n\n    getScrollContainer(): HTMLElement {\n        const { scrollContainer } = this.options.editor?.options;\n        return this.options.nativeElement.closest(scrollContainer) || this.options.nativeElement.querySelector(scrollContainer);\n    }\n\n    rebindContainerScroll() {\n        this.scrollSubscription?.unsubscribe();\n        const { scrollContainer } = this.options.editor?.options;\n        if (scrollContainer) {\n            const containerElement = this.getScrollContainer();\n            if (containerElement) {\n                this.ngZone.runOutsideAngular(() => {\n                    let previousContainerScroll = { x: 0, y: 0 };\n                    this.scrollSubscription = fromEvent<Event>(containerElement, 'scroll').subscribe(event => {\n                        const entires = { event, direction: ScrollDirection.Y };\n                        const target = event.target as HTMLElement;\n                        const [x, y] = [target.scrollLeft, target.scrollTop];\n                        if (x !== previousContainerScroll.x) {\n                            entires.direction = ScrollDirection.X;\n                        }\n                        if (y !== previousContainerScroll.y) {\n                            entires.direction = ScrollDirection.Y;\n                        }\n                        previousContainerScroll = { x, y };\n                        this.containerScrolled$.next(entires);\n                    });\n                });\n            }\n        }\n    }\n\n    bindContainerResize() {\n        const containerElement = this.getScrollContainer();\n        if (containerElement) {\n            this.containerResizeObserver = this.elementResize(containerElement, this.containerResized$);\n        }\n    }\n\n    bindTheEditorResize() {\n        this.theEditorResizeObserver = this.elementResize(this.options.nativeElement, this.theEditorResized$);\n    }\n\n    bindWindowResize() {\n        this.windowResizeObserver = this.elementResize(document.documentElement, this.windowResized$);\n    }\n\n    private elementResize(\n        element: HTMLElement,\n        subject: Subject<{ entry: ResizeObserverEntry; widthChanged: boolean; heightChanged: boolean }>\n    ) {\n        let previousRect: DOMRectReadOnly | null = null;\n        const resizeObserver = new ResizeObserver((entires: ResizeObserverEntry[]) => {\n            if (!previousRect) {\n                previousRect = entires[0].contentRect;\n                return;\n            }\n            const currentRect = entires[0].contentRect;\n            const result = { entry: entires[0], widthChanged: false, heightChanged: false };\n            if (currentRect.width !== previousRect.width) {\n                result.widthChanged = true;\n            }\n            if (currentRect.height !== previousRect.height) {\n                result.heightChanged = true;\n            }\n            previousRect = currentRect;\n            subject.next(result);\n        });\n        resizeObserver.observe(element);\n        return resizeObserver;\n    }\n\n    public getOptions() {\n        if (!this.options.width) {\n            const firstElementChild = this.getFirstElementChild();\n            this.options.width = firstElementChild.offsetWidth;\n        }\n        return this.options;\n    }\n\n    public getDefaultFontSize() {\n        return this.options.editor?.options?.fontSize || FontSizes.fontSize14;\n    }\n\n    public getEditableElement() {\n        return this.options.nativeElement.querySelector('.the-editor-typo');\n    }\n\n    public getFirstElementChild() {\n        const editableElement = this.getEditableElement();\n        return editableElement?.firstElementChild as HTMLElement;\n    }\n\n    addUploadingFiles(file: { url: string; file: File | string }) {\n        this.uploadingFiles.push(file);\n    }\n\n    removeUploadFile(file: { url: string; file: File | string }) {\n        if (!file) {\n            return;\n        }\n        this.uploadingFiles.splice(\n            this.uploadingFiles.findIndex(item => item.url === file.url),\n            1\n        );\n    }\n\n    ngOnDestroy(): void {\n        this.uploadingStatus$.complete();\n        this.containerScrolled$?.complete();\n        this.theEditorResized$?.complete();\n        this.containerResized$?.complete();\n        this.containerResizeObserver?.disconnect();\n        this.theEditorResizeObserver?.disconnect();\n        this.windowResized$?.complete();\n        this.windowResizeObserver?.disconnect();\n        this.scrollSubscription?.unsubscribe();\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n}\n","import { Overlay } from '@angular/cdk/overlay';\nimport { NgClass, NgStyle } from '@angular/common';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    NgZone,\n    OnDestroy,\n    OnInit,\n    Signal,\n    TemplateRef,\n    ViewChild,\n    WritableSignal,\n    inject,\n    signal\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CodeMirrorComponent, CodemirrorModule, NgCodeMirrorOptions } from 'ng-codemirror';\nimport { ThyAction, ThyActions } from 'ngx-tethys/action';\nimport { ThyDivider } from 'ngx-tethys/divider';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { ThyResizableDirective, ThyResizeEvent, ThyResizeHandle } from 'ngx-tethys/resizable';\nimport { ThySwitch } from 'ngx-tethys/switch';\nimport { ThyTooltipDirective } from 'ngx-tethys/tooltip';\nimport { Subject, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Editor, Transforms } from 'slate';\nimport { AngularEditor, SlateModule } from 'slate-angular';\nimport { TheToolbarDropdown } from '../../components';\nimport { ThePreventDefaultDirective } from '../../components/action/prevent-default';\nimport { CODEMIRROR_DEFAULT_MAX_HEIGHT, CODEMIRROR_PADDING_TOP, CODE_MODES, DEFAULT_LANGUAGE, DropdownMode } from '../../constants';\nimport { CodeElement } from '../../custom-types';\nimport { DefaultToolbarItem, TheBaseElement } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { TheContextService } from '../../services/context.service';\nimport { copyNode, topLeftPosition, updatePopoverPosition } from '../../utils';\nimport { isMobileMode, isPrintMode } from '../../utils/get-mode';\nimport { CodeEditor } from './code.editor';\nimport { injectTranslations, TheI18nService, TheI18nTranslation } from '../../i18n';\n\n@Component({\n    selector: 'div[theCode]',\n    templateUrl: './code.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        class: 'the-code-container'\n    },\n    imports: [\n        ThyResizableDirective,\n        NgClass,\n        NgClass,\n        NgStyle,\n        FormsModule,\n        SlateModule,\n        CodemirrorModule,\n        ThySwitch,\n        ThyAction,\n        ThyDivider,\n        ThyActions,\n        ThyTooltipDirective,\n        ThyResizableDirective,\n        ThyResizeHandle,\n        TheToolbarDropdown,\n        ThePreventDefaultDirective\n    ]\n})\nexport class TheCode extends TheBaseElement<CodeElement, Editor> implements OnInit, AfterViewInit, OnDestroy {\n    locale: Signal<TheI18nTranslation> = injectTranslations(inject(TheI18nService));\n\n    dropdownMode = DropdownMode;\n\n    maxHeight = 0;\n\n    menus = CODE_MODES.map(item => {\n        return { key: item.value, name: item.showName };\n    });\n\n    destroy$ = new Subject<void>();\n\n    isHightLight = false;\n\n    resizeHeight: number = null;\n\n    options: WritableSignal<NgCodeMirrorOptions> = signal({\n        mode: DEFAULT_LANGUAGE.value,\n        lineNumbers: false,\n        readonly: false,\n        autofocus: false,\n        lineWiseCopyCut: true,\n        lineWrapping: false,\n        cursorBlinkRate: 500\n    });\n\n    activeLanguage: DefaultToolbarItem;\n\n    resizeBounds = null;\n\n    toolbarPopoverRef: ThyPopoverRef<any>;\n\n    @ViewChild('toolbar', { read: TemplateRef, static: true })\n    toolbar: TemplateRef<any>;\n\n    @ViewChild('codemirror', { read: CodeMirrorComponent, static: false })\n    codemirror: CodeMirrorComponent;\n\n    @ViewChild(TheToolbarDropdown, { read: TheToolbarDropdown, static: false })\n    toolbarDropdown: TheToolbarDropdown;\n\n    get code() {\n        return this.element.content;\n    }\n\n    get isToolbarOpen() {\n        return this.toolbarPopoverRef && this.toolbarPopoverRef.getOverlayRef() && this.toolbarPopoverRef.getOverlayRef().hasAttached();\n    }\n\n    get isSelectedInExpandedSelection() {\n        return !!this.selection && !!this.editor.selection && !TheQueries.isGlobalCollapsed(this.editor);\n    }\n\n    isDelayRender = signal(false);\n\n    private thyNotifyService = inject(ThyNotifyService);\n    private contextService = inject(TheContextService);\n    private ngZone = inject(NgZone);\n    private thyPopover = inject(ThyPopover);\n    private overlay = inject(Overlay);\n\n    onContextChange() {\n        super.onContextChange();\n        if (this.initialized) {\n            this.useToolbar();\n            if (this.options().readonly !== this.readonly) {\n                this.useReadonly();\n            }\n            if (this.options().mode !== this.element.language) {\n                this.useMode();\n            }\n            const lineWrapping = this.element.autoWrap || false;\n            if (this.options().lineWrapping !== lineWrapping) {\n                this.useAutoWrap();\n            }\n            if (this.element.height && this.resizeHeight && this.resizeHeight !== this.element.height) {\n                this.useHeight();\n            }\n        }\n    }\n\n    ngOnInit() {\n        super.ngOnInit();\n        this.initMaxHeight();\n        this.activeLanguage = this.menus.find(item => item.key === DEFAULT_LANGUAGE.value);\n        this.renderCodemirror();\n        if (!this.readonly) {\n            this.resizeBounds = {\n                nativeElement: this.contextService.getEditableElement()\n            };\n        }\n    }\n\n    ngAfterViewInit() {\n        this.ngZone.runOutsideAngular(() => {\n            fromEvent(this.nativeElement, 'mousedown')\n                .pipe(takeUntil(this.destroy$))\n                .subscribe(event => {\n                    if ((event.target as HTMLElement).className.includes('thy-resizable-handle')) {\n                        this.isHightLight = true;\n                    } else {\n                        event.stopPropagation();\n                        event.preventDefault();\n                        const isBlockOperation =\n                            this.isCollapsedAndNonReadonly &&\n                            this.nativeElement.querySelector('.the-code-block-operation')?.contains(event.target as HTMLElement);\n                        const isCodemirror = this.nativeElement.querySelector('.ng-codemirror')?.contains(event.target as HTMLElement);\n                        this.isHightLight = !isCodemirror && !isBlockOperation;\n                    }\n                });\n        });\n        setTimeout(() => {\n            this.useAutofocus();\n            this.useToolbar();\n        }, 0);\n    }\n\n    private initMaxHeight() {\n        this.maxHeight = isPrintMode(this.editor) ? 0 : CODEMIRROR_DEFAULT_MAX_HEIGHT - CODEMIRROR_PADDING_TOP * 2;\n    }\n\n    openToolbar() {\n        if (this.isToolbarOpen) {\n            return;\n        }\n        this.toolbarPopoverRef = this.thyPopover.open(this.toolbar, {\n            origin: this.elementRef.nativeElement,\n            viewContainerRef: this.viewContainerRef,\n            panelClass: ['the-plugin-toolbar-popover'],\n            minWidth: 0,\n            manualClosure: true,\n            hasBackdrop: false,\n            insideClosable: false,\n            outsideClosable: false,\n            scrollStrategy: this.overlay.scrollStrategies.reposition()\n        });\n\n        const origin = this.elementRef.nativeElement;\n        const overlayRef = this.toolbarPopoverRef?.getOverlayRef();\n        updatePopoverPosition(overlayRef, origin, [topLeftPosition]);\n    }\n\n    closeToolbar() {\n        if (this.isToolbarOpen) {\n            this.toolbarPopoverRef.close();\n        }\n    }\n\n    renderCodemirror() {\n        this.useReadonly();\n        this.useMode();\n        this.useAutoWrap();\n        this.useHeight();\n    }\n\n    codeChange($event) {\n        this.isHightLight = false;\n        CodeEditor.setCodeAttribute(this.editor, { content: $event }, this.element);\n    }\n\n    onDelete(event: MouseEvent) {\n        event.preventDefault();\n        CodeEditor.removeCode(this.editor, this.element);\n    }\n\n    onCopy(event: MouseEvent) {\n        event.preventDefault();\n        copyNode(this.editor, this.element, this.thyNotifyService, this.locale);\n    }\n\n    focusChange(codeMirrorFocused: boolean) {\n        if (codeMirrorFocused) {\n            this.isHightLight = false;\n        }\n    }\n\n    onChangeLanguage = item => {\n        this.options.set({ ...this.options(), mode: item.key });\n        this.activeLanguage = item;\n        CodeEditor.setCodeAttribute(this.editor, { language: item.key }, this.element);\n    };\n\n    useMode() {\n        this.options.set({ ...this.options(), mode: this.element.language });\n        const menuItem = this.menus.find(i => i.key === this.element.language);\n        if (menuItem) {\n            this.activeLanguage = menuItem;\n        }\n    }\n\n    useAutoWrap() {\n        const isPrint = isPrintMode(this.editor);\n        const lineWrapping = isPrint ? true : this.element.autoWrap || false;\n        this.options.set({ ...this.options(), lineWrapping });\n    }\n\n    useHeight() {\n        if (this.element.height && !isPrintMode(this.editor)) {\n            this.resizeHeight = this.element.height;\n            this.maxHeight = this.element.height;\n        }\n    }\n\n    useReadonly() {\n        this.options.set({ ...this.options(), readonly: this.readonly, cursorBlinkRate: this.readonly ? -1 : 500 });\n    }\n\n    useAutofocus() {\n        if (this.isCollapsedAndNonReadonly && TheQueries.isGlobalCollapsed(this.editor)) {\n            this.options.set({ ...this.options(), autofocus: this.readonly ? false : true });\n        }\n    }\n\n    useToolbar() {\n        if (this.isCollapsedAndNonReadonly && TheQueries.isGlobalCollapsed(this.editor) && !isMobileMode(this.editor)) {\n            this.openToolbar();\n        } else {\n            this.closeToolbar();\n        }\n    }\n\n    onResize({ height }: ThyResizeEvent) {\n        this.resizeHeight = height;\n        this.maxHeight = height;\n    }\n\n    onEndResize() {\n        Transforms.select(this.editor, AngularEditor.findPath(this.editor, this.element));\n        CodeEditor.setCodeAttribute(this.editor, { height: this.resizeHeight }, this.element);\n    }\n\n    onChangeWrap(value: boolean) {\n        this.isHightLight = false;\n        this.options.set({ ...this.options(), lineWrapping: value || false });\n        CodeEditor.setCodeAttribute(this.editor, { autoWrap: value ? value : null }, this.element);\n    }\n\n    ngOnDestroy() {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n}\n","<!-- 只读模式下CodeMirror-sizer高度比编辑模式下多2px，设置thyMinHeight为46px防止拖拽到最小高度时只读模式下出现滚动条  -->\n<div\n  thyResizable\n  [thyMinHeight]=\"46\"\n  [thyBounds]=\"resizeBounds\"\n  [style.height.px]=\"resizeHeight\"\n  (thyResize)=\"onResize($event)\"\n  (thyResizeEnd)=\"onEndResize()\"\n  class=\"resize-code-container\"\n  [ngClass]=\"{\n    focus: isCollapsedAndNonReadonly,\n    readonly: options().readonly,\n    active: (isHightLight && isCollapsedAndNonReadonly) || isSelectedInExpandedSelection\n  }\"\n>\n  <ng-codemirror\n    #codemirror\n    [isDelayRender]=\"isDelayRender()\"\n    contenteditable=\"false\"\n    class=\"ng-codemirror-wrapper\"\n    [ngStyle]=\"{ maxHeight: maxHeight > 0 ? maxHeight + 'px' : 'auto' }\"\n    [options]=\"options()\"\n    [ngModel]=\"code\"\n    (ngModelChange)=\"codeChange($event)\"\n    (focusChange)=\"focusChange($event)\"\n  >\n  </ng-codemirror>\n  @if (isCollapsedAndNonReadonly) {\n    <thy-resize-handle thyDirection=\"bottom\" class=\"code-resize-icon\"></thy-resize-handle>\n  }\n</div>\n\n<ng-template #toolbar>\n  <thy-actions thySize=\"xxs\" thePreventDefault>\n    <the-toolbar-dropdown\n      [menus]=\"menus\"\n      [toolbarItem]=\"activeLanguage\"\n      [dropdownItemKey]=\"$safeNavigationMigration(activeLanguage?.key)\"\n      [itemMousedownHandle]=\"onChangeLanguage\"\n    >\n    </the-toolbar-dropdown>\n    <span class=\"auto-wrap d-flex align-items-center px-2 text-secondary\">\n      <span>{{ locale().autoWrap }}</span>\n      <thy-switch\n        class=\"auto-wrap-btn d-flex ml-1\"\n        [(ngModel)]=\"options().lineWrapping\"\n        (ngModelChange)=\"onChangeWrap($event)\"\n        thySize=\"sm\"\n      ></thy-switch>\n    </span>\n    <a\n      href=\"javascript:;\"\n      thyAction\n      thyActionIcon=\"copy\"\n      [thyTooltip]=\"locale().copy\"\n      thyTooltipPlacement=\"top\"\n      (click)=\"onCopy($event)\"\n    ></a>\n    <thy-divider class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\" thyColor=\"light\"></thy-divider>\n    <a\n      href=\"javascript:;\"\n      thyAction\n      thyType=\"danger\"\n      thyActionIcon=\"trash\"\n      [thyTooltip]=\"locale().delete\"\n      thyTooltipPlacement=\"top\"\n      (click)=\"onDelete($event)\"\n    ></a>\n  </thy-actions>\n</ng-template>\n","import { Editor, Node, Text } from 'slate';\nimport { ColorType } from '../../constants/color-select';\nimport { MarkTypes } from '../../constants/node-types';\nimport { TableEditor } from '../table/table.editor';\n\nexport const ColorEditor = {\n    getActiveColor(editor: Editor, type: MarkTypes.color | MarkTypes.backgroundColor): string {\n        if (!editor?.selection) {\n            return;\n        }\n        const node = Node.get(editor, editor.selection?.anchor.path);\n        if (!Text.isText(node)) {\n            return undefined;\n        }\n        const marks = Editor.marks(editor);\n        return marks && marks[type];\n    },\n    setColor(editor: Editor, color: ColorType, type: MarkTypes.color | MarkTypes.backgroundColor) {\n        if (TableEditor.toggleMark(editor, !color, type, color)) {\n            return;\n        }\n        if (color) {\n            Editor.addMark(editor, type, color);\n        } else {\n            Editor.removeMark(editor, type);\n        }\n    }\n};\n","import { Editor, Element, Transforms } from 'slate';\nimport { DISABLED_OPERATE_TYPES, ElementKinds, HEADING_TYPES, MarkTypes } from '../../constants';\nimport { getPluginOptions } from '../../core';\nimport { HeadingElementKinds, PluginKeys, ThePlugin } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\nimport type { HeadingPluginOptions } from './heading.plugin';\n\nexport const headingOptions: HeadingPluginOptions = {\n    allowParentTypes: [ElementKinds.tableCell, ElementKinds.blockquote],\n    disabledOperateTypes: [ElementKinds.image, ...DISABLED_OPERATE_TYPES],\n    cleanupTypes: [ElementKinds.bulletedList, ElementKinds.numberedList, ElementKinds.listItem]\n};\n\nexport const HeadingEditor = {\n    setHeading(editor: Editor, heading: HeadingElementKinds) {\n        Editor.withoutNormalizing(editor, () => {\n            const cleanupTypes = getPluginOptions<HeadingPluginOptions>(editor, PluginKeys.heading).cleanupTypes;\n            Transforms.unwrapNodes(editor, {\n                at: editor.selection,\n                match: n => Element.isElement(n) && cleanupTypes.includes(n.type),\n                mode: 'all',\n                split: true\n            });\n            Transforms.setNodes(editor, { type: heading });\n            const entry = TheQueries.anchorBlockEntry(editor);\n            const unMarks = {\n                [MarkTypes.fontSize]: null\n            };\n            if (entry) {\n                TheTransforms.setMarks(editor, unMarks, entry[1]);\n                return;\n            }\n            TheTransforms.setMarks(editor, unMarks, editor.selection);\n        });\n    },\n    isHeadingActive(editor: Editor, heading: HeadingElementKinds) {\n        const [match] = Editor.nodes(editor, {\n            match: n => Element.isElement(n) && n.type === heading,\n            universal: true\n        });\n        return !!match;\n    },\n    headingPlugins(): ThePlugin<{}, {}>[] {\n        const plugins: ThePlugin<{}, HeadingPluginOptions>[] = [];\n\n        for (let level = 1; level <= HEADING_TYPES.length; level++) {\n            const key = ElementKinds[`heading_${level}`];\n            const plugin: ThePlugin<{}, HeadingPluginOptions> = {\n                key,\n                options: headingOptions\n            };\n            plugins.push(plugin);\n        }\n        return plugins;\n    }\n};\n","import { Editor, Element } from 'slate';\nimport { ElementKinds } from '../../constants/node-types';\nimport * as TheTransforms from '../../transforms';\n\nexport const HrEditor = {\n    insertHr(editor: Editor) {\n        TheTransforms.insertElements(editor, { type: ElementKinds.hr, children: [{ text: '' }] });\n    },\n    isHrActive(editor: Editor) {\n        const [match] = Editor.nodes(editor, {\n            match: n => Element.isElement(n) && n.type === ElementKinds.hr,\n            universal: true\n        });\n        return !!match;\n    }\n};\n","import { isString } from 'ngx-tethys/util';\nimport { Editor, Element, Transforms } from 'slate';\nimport { ElementKinds, ErrorCodes, PICTURE_ACCEPTED_UPLOAD_MIME, PICTURE_ACCEPTED_UPLOAD_SIZE } from '../../constants';\nimport { getPluginOptions } from '../../core';\nimport { ImageElement } from '../../custom-types';\nimport { ImagePluginOptions, PluginKeys, THE_IMAGE_SERVICE_TOKEN } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { TheContextService } from '../../services/context.service';\nimport * as TheTransforms from '../../transforms';\nimport { base64toBlob } from '../../utils/blob';\n\nexport const ImageEditor = {\n    openUpload(editor: Editor) {\n        const inputFile = document.createElement('input');\n        inputFile.setAttribute('type', 'file');\n        inputFile.setAttribute('accept', 'image/*');\n        inputFile.setAttribute('multiple', 'true');\n        inputFile.onchange = (event: Event) => {\n            ImageEditor.insertImages(editor, (event.target as any).files);\n        };\n        inputFile.click();\n    },\n    insertImages(editor: Editor, imageFiles: FileList | File[]) {\n        const contextService = editor.injector.get(TheContextService);\n        const imageNodes: Element[] = [];\n        for (const image of imageFiles) {\n            const verify = ImageEditor.verifyImage(editor, image);\n            if (verify) {\n                const url = URL.createObjectURL(image);\n                contextService.addUploadingFiles({ url, file: image });\n                imageNodes.push({ type: ElementKinds.image, url, children: [{ text: '' }] });\n            }\n        }\n        if (imageNodes.length > 0) {\n            TheTransforms.insertElements(editor, imageNodes);\n        }\n    },\n    handleBase64ImageElement(editor: Editor, image: ImageElement) {\n        const indexSplit = image.originUrl.indexOf(',');\n        const base64 = image.originUrl.slice(indexSplit + 1);\n        const contentType = image.originUrl.substring(image.originUrl.indexOf(':') + 1, image.originUrl.indexOf(';'));\n        const ext = contentType.substring(contentType.indexOf('/') + 1);\n        const blob = base64toBlob(base64, contentType);\n        const blobUrl = URL.createObjectURL(blob);\n        image.thumbUrl = blobUrl;\n        image.originUrl = blobUrl;\n        image.url = blobUrl;\n        const contextService = editor.injector.get(TheContextService);\n        contextService.addUploadingFiles({\n            url: blobUrl,\n            file: new File([blob], `${new Date().getTime()}.${ext}`, { type: contentType })\n        });\n    },\n    // TODO: 需要考虑如何处理\n    // 1. 从 HTML 粘贴识别数据时走这个处理流程，但是会被判定为是 PingCode 自己的资源，不会走重新上传流程\n    // 2. 直接粘贴 json 时不走这个流程无法重新上传，跨团队图片会无法识别\n    handleExternalImageElement(editor: Editor, image: ImageElement) {\n        const contextService = editor.injector.get(TheContextService);\n        const imageUploaderService = editor.injector.get(THE_IMAGE_SERVICE_TOKEN);\n        const isExternalUrl = image?.hasOwnProperty('externalUrl')\n            ? image?.externalUrl\n            : imageUploaderService.isExternalUrl?.(image.thumbUrl);\n\n        if (isExternalUrl) {\n            const url = image.thumbUrl;\n            image.url = url;\n            image.externalUrl = url;\n            image.thumbUrl = null;\n\n            contextService.addUploadingFiles({\n                url: image.url,\n                file: image.url\n            });\n        }\n    },\n    verifyImage(editor: Editor, image: File) {\n        if (!PICTURE_ACCEPTED_UPLOAD_MIME.includes(image.type)) {\n            editor.onError({\n                code: ErrorCodes.IMAGE_ERR_MIME_FORMAT\n            });\n            return false;\n        }\n        const acceptedUploadSize =\n            getPluginOptions<ImagePluginOptions>(editor, PluginKeys.image)?.acceptedUploadSize ?? PICTURE_ACCEPTED_UPLOAD_SIZE;\n        if (image.size / 1000000 >= acceptedUploadSize) {\n            editor.onError({\n                code: ErrorCodes.IMAGE_ERR_SIZE_LIMIT\n            });\n            return false;\n        }\n        return true;\n    },\n    isActive(editor: Editor): boolean {\n        const [match] = Editor.nodes(editor, {\n            match: n => Element.isElement(n) && n.type === ElementKinds.image,\n            universal: true\n        });\n        return !!match;\n    },\n    setImageNode(editor: Editor, props: Partial<ImageElement>, image?: ImageElement) {\n        if (!image) {\n            TheTransforms.setNodeByType(editor, props, ElementKinds.image);\n        } else {\n            const path = TheQueries.findPath(editor, image);\n            Transforms.setNodes(editor, props, { at: path });\n        }\n    },\n    isBase64(url: string) {\n        return isString(url) && url.includes('base64');\n    },\n    removeImage(editor: Editor, image?: ImageElement) {\n        if (image) {\n            TheTransforms.deleteElement(editor, image);\n        } else {\n            TheTransforms.deleteNodeByType(editor, ElementKinds.image);\n        }\n    }\n};\n","import { Editor, Element, Transforms } from 'slate';\nimport { Indents } from '../../constants';\nimport { getPluginOptions } from '../../core';\nimport { CustomElementKinds } from '../../custom-types';\nimport { PluginKeys, TheEditor } from '../../interfaces';\nimport { TableEditor } from '../table/table.editor';\nimport type { IndentPluginOptions } from './indent.plugin';\n\nexport const IndentEditor = {\n    getAllowedTypes(editor: TheEditor) {\n        return getPluginOptions<IndentPluginOptions>(editor, PluginKeys.indent)?.allowedTypes ?? [];\n    },\n    setIndent(editor: TheEditor) {\n        if (TableEditor.handleIndent(editor, Indents.indentRight)) {\n            return;\n        }\n        const allowedTypes = IndentEditor.getAllowedTypes(editor);\n        const maxIndent = getPluginOptions<IndentPluginOptions>(editor, PluginKeys.indent)?.maxIndent ?? [];\n        const nodes = Array.from(\n            Editor.nodes<Element>(editor, {\n                mode: 'highest',\n                match: n => Element.isElement(n) && allowedTypes.includes(n.type)\n            })\n        );\n        const [startBlock] = nodes;\n        if (startBlock) {\n            let [{ indent }] = startBlock;\n            indent = indent ? ++indent : 1;\n            if (indent <= (maxIndent as number)) {\n                Transforms.setNodes(\n                    editor,\n                    { indent },\n                    {\n                        mode: 'highest',\n                        match: n => Element.isElement(n) && allowedTypes.includes(n.type)\n                    }\n                );\n            }\n        }\n    },\n    cancelIndent(editor: Editor) {\n        if (TableEditor.handleIndent(editor, Indents.indentLeft)) {\n            return;\n        }\n        const allowedTypes = IndentEditor.getAllowedTypes(editor);\n        const nodes = Array.from(\n            Editor.nodes<Element>(editor, {\n                mode: 'highest',\n                match: n => Element.isElement(n) && allowedTypes.includes(n.type)\n            })\n        );\n        const [startBlock] = nodes;\n        if (startBlock) {\n            let [{ indent }] = startBlock;\n            indent = indent ? --indent : 0;\n            Transforms.setNodes(\n                editor,\n                { indent },\n                {\n                    mode: 'highest',\n                    match: n => Element.isElement(n) && allowedTypes.includes(n.type)\n                }\n            );\n        }\n    },\n    setTextIndent(editor: TheEditor, kinds: CustomElementKinds[], textIndent: number) {\n        Transforms.setNodes(\n            editor,\n            { textIndent },\n            {\n                mode: 'highest',\n                match: node => Element.isElement(node) && kinds.includes(node.type)\n            }\n        );\n    },\n    cancelTextIntent(editor: TheEditor, event: KeyboardEvent, anchorBlock: Element, kinds: CustomElementKinds[]) {\n        let { textIndent, indent } = anchorBlock;\n\n        if (textIndent > 2) {\n            event.preventDefault();\n            textIndent -= 2;\n            IndentEditor.setTextIndent(editor, kinds, textIndent);\n            return true;\n        }\n        if (textIndent === 2) {\n            event.preventDefault();\n            IndentEditor.setTextIndent(editor, kinds, null);\n            return true;\n        }\n        if (indent) {\n            event.preventDefault();\n            IndentEditor.cancelIndent(editor);\n            return true;\n        }\n\n        return false;\n    }\n};\n","export enum LinkTags {\n    insert = 'insert',\n    edit = 'edit',\n    selection = 'selection'\n}\nexport enum LinkCloseTypes {\n    apply = 'apply',\n    destroy = 'destroy'\n}\n","import { Editor, Element, Node, Range, Transforms } from 'slate';\nimport { ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport { ElementKinds } from '../../constants';\nimport { LinkElement } from '../../custom-types';\nimport { TheEditor } from '../../interfaces';\nimport { getAboveByType } from '../../queries/get-above-by-type';\nimport * as TheTransforms from '../../transforms';\nimport { LinkTags } from './link.types';\nimport { TheI18nService } from '../../i18n';\nimport { isUrl } from '../../utils/is-url';\nimport { TheLinkFlavour } from './link.flavour';\n\nexport const LinkEditor = {\n    insertLink(editor: TheEditor) {\n        if (Range.isCollapsed(editor.selection)) {\n            Promise.resolve()\n                .then(() => {\n                    const locale = editor.injector.get(TheI18nService).getLocale();\n                    const linkDefaultText = locale().translations.link;\n                    LinkEditor.wrapLink(editor, linkDefaultText, '');\n                })\n                .then(() => {\n                    const [linkNode] = getAboveByType(editor, ElementKinds.link);\n                    const link = ELEMENT_TO_COMPONENT.get(linkNode) as TheLinkFlavour;\n                    link.openLinkEdit(LinkTags.insert);\n                });\n        } else {\n            const isActive = LinkEditor.isActive(editor);\n            if (isActive) {\n                LinkEditor.unwrapLink(editor);\n                return;\n            }\n\n            const fragment = Node.fragment(editor, editor.selection)[0];\n            const selectNode = Node.get(fragment, []);\n            const selectText = Node.string(selectNode);\n\n            Promise.resolve()\n                .then(() => {\n                    LinkEditor.wrapLink(editor, selectText, '');\n                })\n                .then(() => {\n                    const [linkNode] = getAboveByType(editor, ElementKinds.link);\n                    const link = ELEMENT_TO_COMPONENT.get(linkNode) as TheLinkFlavour;\n                    link.openLinkEdit(LinkTags.insert);\n                });\n        }\n    },\n    isActive(editor: Editor) {\n        const [link] = Editor.nodes(editor, { match: n => Element.isElement(n) && n.type === ElementKinds.link });\n        return !!link;\n    },\n    wrapLink(editor: Editor, text: string, url: string) {\n        if (LinkEditor.isActive(editor)) {\n            LinkEditor.unwrapLink(editor);\n        }\n        const { selection } = editor;\n        const isCollapsed = selection && Range.isCollapsed(selection);\n        const link: LinkElement = {\n            type: ElementKinds.link,\n            url,\n            children: isCollapsed ? [{ text }] : []\n        };\n        if (isCollapsed) {\n            TheTransforms.insertInlineElement(editor, link);\n        } else {\n            Transforms.wrapNodes(editor, link, { split: true });\n            Transforms.collapse(editor, { edge: 'end' });\n        }\n    },\n    unwrapLink(editor: Editor) {\n        Transforms.unwrapNodes(editor, { match: n => Element.isElement(n) && n.type === ElementKinds.link });\n    },\n    updateLink(editor: Editor, element: LinkElement, url: string, text: string) {\n        if (isUrl(url)) {\n            const path = TheEditor.findPath(editor, element);\n            if (element.url !== url) {\n                Transforms.setNodes(editor, { url: url }, { at: path });\n            }\n            if (Node.string(element) !== text) {\n                const [start, end] = Editor.edges(editor, path);\n                Transforms.insertText(editor, text, { at: { anchor: end, focus: end } });\n                Transforms.delete(editor, { at: { anchor: start, focus: end } });\n            }\n            TheEditor.focus(editor);\n            Transforms.select(editor, Editor.after(editor, path));\n        }\n    }\n};\n","import { Element, Node } from 'slate';\nimport { ElementKinds } from '../../../constants/node-types';\n\nexport const isNodeTypeList = (n: Node): n is Element => {\n    return [ElementKinds.bulletedList, ElementKinds.numberedList].includes((n as Element).type);\n};\n","import { Editor, Element, Node, Path, Transforms } from 'slate';\nimport { ElementKinds, LIST_BLOCK_TYPES } from '../../constants/node-types';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\nimport { isNodeTypeList } from './queries/is-node-type-list';\n\nexport const ListEditor = {\n    isList(editor: Editor, element: Element, type: ElementKinds.bulletedList | ElementKinds.numberedList) {\n        return Editor.isBlock(editor, element) && element.type === type;\n    },\n    toggleList(editor: Editor, type: ElementKinds.bulletedList | ElementKinds.numberedList, startIndex?: number) {\n        if (!editor.selection) {\n            return;\n        }\n        if (!startIndex) {\n            startIndex = 1;\n        }\n        const types = [ElementKinds.bulletedList, ElementKinds.numberedList];\n\n        Editor.withoutNormalizing(editor, () => {\n            const [...listItems] = Editor.nodes(editor, {\n                match: node => Element.isElement(node) && node.type === ElementKinds.listItem,\n                mode: 'lowest'\n            });\n            const firstListItemPath = listItems.length && listItems[0][1];\n            const activeListPath = listItems.length && Path.parent(firstListItemPath);\n            const activeListNode = listItems.length && (Node.get(editor, activeListPath) as Element);\n\n            // 同级且类型相同：unwrap\n            const isLowestActive =\n                listItems.length &&\n                listItems.every(\n                    ([, path]) =>\n                        activeListNode.type === type && (Path.isSibling(firstListItemPath, path) || Path.equals(firstListItemPath, path))\n                );\n            if (isLowestActive) {\n                const upListItem = Path.parent(activeListPath);\n                Transforms.unwrapNodes(editor, {\n                    at: editor.selection,\n                    match: node => node === activeListNode,\n                    split: true,\n                    mode: 'lowest'\n                });\n                if (upListItem && (Node.get(editor, upListItem) as Element).type === ElementKinds.listItem) {\n                    Transforms.moveNodes(editor, {\n                        at: editor.selection,\n                        to: Path.next(upListItem),\n                        match: node => Element.isElement(node) && node.type === ElementKinds.listItem\n                    });\n                } else {\n                    Transforms.unwrapNodes(editor, {\n                        match: node => Element.isElement(node) && node.type === ElementKinds.listItem\n                    });\n                }\n                return;\n            }\n\n            // 跨级、同级且类型不同\n            if (activeListNode && types.includes(activeListNode.type)) {\n                Transforms.setNodes(\n                    editor,\n                    { type },\n                    { match: node => Element.isElement(node) && node.type !== type && types.includes(node.type) }\n                );\n                return;\n            }\n\n            // wrap\n            ListEditor.buildListItem(editor);\n            Transforms.wrapNodes(editor, { type, children: [], start: startIndex } as Element, {\n                at: editor.selection,\n                match: node => Element.isElement(node) && node.type === ElementKinds.listItem\n            });\n        });\n    },\n    unwrapList(editor: Editor) {\n        Editor.withoutNormalizing(editor, () => {\n            TheTransforms.unwrapNodesByType(editor, [ElementKinds.bulletedList, ElementKinds.numberedList], { split: true, mode: 'all' });\n            TheTransforms.unwrapNodesByType(editor, [ElementKinds.listItem], { split: true, mode: 'all' });\n        });\n    },\n    wrapList(editor: Editor, type: ElementKinds.bulletedList | ElementKinds.numberedList) {\n        Editor.withoutNormalizing(editor, () => {\n            const listItem: Element = {\n                type: ElementKinds.listItem,\n                children: []\n            };\n            const list = {\n                type,\n                children: []\n            };\n            Transforms.wrapNodes(editor, list, { split: true });\n            Transforms.wrapNodes(editor, listItem, { split: true });\n        });\n    },\n    isActive(editor: Editor, type: ElementKinds.bulletedList | ElementKinds.numberedList) {\n        const [match] = TheQueries.getNodesByType(editor, type);\n        return !!match;\n    },\n    getActiveList(editor: Editor) {\n        const [match] = TheQueries.getNodesByType(editor, LIST_BLOCK_TYPES);\n        return match;\n    },\n    buildListItem(editor: Editor) {\n        const nodes = Editor.nodes(editor, {\n            match: node => Element.isElement(node) && Editor.isBlock(editor, node),\n            mode: 'lowest'\n        });\n        for (const [node, path] of nodes) {\n            if (\n                !(Element.isElement(node) && Editor.isVoid(editor, node)) &&\n                Element.isElement(node) &&\n                node.type !== ElementKinds.paragraph\n            ) {\n                Transforms.setNodes(\n                    editor,\n                    { type: ElementKinds.paragraph, checked: undefined } as any, // todo remove checked\n                    { at: path }\n                );\n            } else if (Element.isElement(node) && node.type === ElementKinds.paragraph) {\n                let { textIndent } = node;\n                if (textIndent) {\n                    Transforms.setNodes(\n                        editor,\n                        { textIndent: undefined, indent: undefined }, // remove indent\n                        { at: path }\n                    );\n                }\n            }\n            if ((Node.parent(editor, path) as Element).type !== ElementKinds.listItem) {\n                Transforms.wrapNodes(\n                    editor,\n                    { type: ElementKinds.listItem, children: [] },\n                    {\n                        at: path,\n                        split: true\n                    }\n                );\n            }\n        }\n    },\n    buildInsertDataChildren(node: Element) {\n        const { children } = node;\n        const listItem = children[0];\n        if (isNodeTypeList(node) && Element.isElement(listItem) && (listItem.children[0] as Element).type === ElementKinds.paragraph) {\n            return node;\n        }\n\n        return ListEditor.buildInsertDataChildren(listItem as Element);\n    }\n};\n","import { Editor, Text, Node } from 'slate';\nimport { TableEditor } from '../table/table.editor';\n\nexport interface MarkEditor extends Editor {\n    removeMark: (key: string, shouldChange?: boolean) => void;\n}\n\nexport const MarkEditor = {\n    isMarkActive(editor: Editor, format) {\n        if (!editor?.selection) {\n            return;\n        }\n        const node = Node.get(editor, editor?.selection?.anchor?.path);\n        if (!Text.isText(node)) {\n            return false;\n        }\n        const marks = Editor.marks(editor);\n        return marks && marks[format] ? true : false;\n    },\n    toggleMark(editor, format) {\n        const isActive = MarkEditor.isMarkActive(editor, format);\n        if (TableEditor.toggleMark(editor, isActive, format)) {\n            return;\n        }\n        if (isActive) {\n            Editor.removeMark(editor, format);\n        } else {\n            Editor.addMark(editor, format, true);\n        }\n    }\n};\n","import { ConnectedPosition, Overlay } from '@angular/cdk/overlay';\nimport { ChangeDetectorRef, ElementRef, ViewContainerRef } from '@angular/core';\nimport { ThyPopover } from 'ngx-tethys/popover';\nimport { Editor, Element, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { ElementKinds, HEADING_TYPES, LOWEST_TEXT_CONTAINER_TYPES } from '../../constants';\nimport { getPluginOptions } from '../../core';\nimport { PluginKeys, TheEditor } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { createEmptyParagraph, THE_EDITOR_ORIGIN_ANCHOR, THE_EDITOR_POPOVER_REF, updatePopoverPosition } from '../../utils';\nimport { MentionPluginOptions } from './mention.type';\n\nexport const MentionEditor = {\n    insertTrigger(editor: TheEditor, type: string) {\n        MentionEditor.close(editor);\n        const mentions = getPluginOptions<MentionPluginOptions>(editor, PluginKeys.mention)?.mentions;\n        const currentMention = mentions.find(m => m?.type === type);\n        const insertPath = TheQueries.getInsertElementsPath(editor, LOWEST_TEXT_CONTAINER_TYPES);\n        if (!insertPath) {\n            Transforms.insertNodes(editor, createEmptyParagraph(), { select: true });\n        }\n        Transforms.insertText(editor, ` ${currentMention.trigger}`);\n        setTimeout(() => {\n            THE_EDITOR_ORIGIN_ANCHOR.set(editor, Editor.before(editor, editor.selection.anchor));\n            const textElement = AngularEditor.toDOMNode(editor, TheQueries.anchorBlockEntry(editor)[0]);\n            MentionEditor.openSelectOverlay(editor, type, textElement);\n        });\n    },\n    deleteTriggerText(editor: TheEditor) {\n        const searchInfo = MentionEditor.getSearchInfo(editor);\n        const { currentRange } = searchInfo;\n        Transforms.delete(editor, { at: currentRange });\n    },\n    openSuggestion(editor: TheEditor, type: string) {\n        const { selection } = editor;\n        const elementRef = editor.injector.get(ElementRef);\n        const isParagraphStart = Editor.isStart(editor, selection?.anchor, TheQueries.anchorBlockEntry(editor)[1]);\n        const originAnchor = THE_EDITOR_ORIGIN_ANCHOR.get(editor);\n        let text = '';\n\n        if (!isParagraphStart) {\n            const beforeRange = {\n                anchor: Editor.before(editor, selection.anchor),\n                focus: selection.focus\n            };\n            text = Editor.string(editor, beforeRange);\n        }\n\n        const isSoftBreak = text === '\\n';\n        if (isParagraphStart || text === ' ' || isSoftBreak) {\n            if (!originAnchor) {\n                THE_EDITOR_ORIGIN_ANCHOR.set(editor, editor.selection.anchor);\n            }\n            const textElement = AngularEditor.toDOMNode(editor, TheQueries.anchorBlockEntry(editor)[0]);\n            const origin = isParagraphStart ? textElement : elementRef;\n            MentionEditor.openSelectOverlay(editor, type, origin, isSoftBreak);\n        }\n    },\n    getSearchInfo(editor: TheEditor) {\n        const popoverRef = THE_EDITOR_POPOVER_REF.get(editor);\n        const originAnchor = THE_EDITOR_ORIGIN_ANCHOR.get(editor);\n\n        if (originAnchor && popoverRef && popoverRef.componentInstance) {\n            const currentRange = Editor.range(editor, originAnchor, editor.selection?.focus);\n            const currentText = Editor.string(editor, currentRange);\n\n            return {\n                currentRange,\n                currentText\n            };\n        }\n\n        return null;\n    },\n    updateSearchText(editor: TheEditor, text: string) {\n        const popoverRef = THE_EDITOR_POPOVER_REF.get(editor);\n        const mentions = getPluginOptions<MentionPluginOptions>(editor, PluginKeys.mention)?.mentions;\n        const panelClass = popoverRef.getOverlayRef().getConfig().panelClass;\n        const type = Array.isArray(panelClass)\n            ? panelClass.find(i => i.indexOf('the-mention-') > -1).split('the-mention-')[1]\n            : panelClass.split('the-mention-')[1];\n        const currentMention = mentions.find(m => m.type === type);\n        const regex = new RegExp(`^${currentMention.trigger}`);\n        const beforeMatch = text && text.match(regex);\n        const keywords = text.slice(1);\n        const cdr = editor.injector.get(ChangeDetectorRef);\n\n        if (popoverRef?.componentInstance && beforeMatch && !keywords.match(/^\\s|\\s$/)) {\n            popoverRef.componentInstance.keywords = keywords;\n            popoverRef.componentInstance.getSearchResult(keywords);\n            cdr.markForCheck();\n        }\n    },\n    openSelectOverlay(editor: TheEditor, type: string, origin: ElementRef | HTMLElement, isSoftBreak = false) {\n        const overlay = editor.injector.get(Overlay);\n        const thyPopover = editor.injector.get(ThyPopover);\n        const viewContainerRef = editor.injector.get(ViewContainerRef);\n        const cdr = editor.injector.get(ChangeDetectorRef);\n        const mentions = getPluginOptions<MentionPluginOptions>(editor, PluginKeys.mention)?.mentions;\n        const currentMention = mentions.find(m => m.type === type);\n        const suggestionComponent = currentMention?.suggestion;\n\n        const popoverRef = thyPopover.open(suggestionComponent, {\n            origin,\n            initialState: {\n                editor,\n                type\n            },\n            panelClass: `the-mention-${type}`,\n            placement: 'bottomLeft',\n            insideClosable: false,\n            outsideClosable: true,\n            hasBackdrop: false,\n            offset: 4,\n            minWidth: 0,\n            viewContainerRef: viewContainerRef,\n            scrollStrategy: overlay.scrollStrategies.reposition(),\n            autoAdaptive: true\n        });\n        THE_EDITOR_POPOVER_REF.set(editor, popoverRef);\n        popoverRef?.afterClosed().subscribe(() => {\n            MentionEditor.close(editor);\n        });\n        MentionEditor.updatePositionStrategy(editor, isSoftBreak);\n\n        cdr.markForCheck();\n    },\n    close(editor: TheEditor) {\n        const popoverRef = THE_EDITOR_POPOVER_REF.get(editor);\n        if (popoverRef) {\n            popoverRef.close();\n            THE_EDITOR_POPOVER_REF.set(editor, null);\n            THE_EDITOR_ORIGIN_ANCHOR.set(editor, null);\n        }\n    },\n    insertMention<T>(editor: TheEditor, type: string, data: T) {\n        const element = {\n            type,\n            ...data,\n            children: [\n                {\n                    text: ''\n                }\n            ]\n        };\n        Transforms.insertNodes(editor, element as Element);\n        Transforms.select(editor, editor.selection);\n        Transforms.move(editor);\n        TheEditor.focus(editor);\n\n        editor.insertText(' ');\n    },\n    isActive(editor: TheEditor, type: string) {\n        const [match] = TheQueries.getNodesByType(editor, type);\n        return !!match;\n    },\n    updatePositionStrategy(editor: TheEditor, isSoftBreak = false) {\n        const textElement = AngularEditor.toDOMNode(editor, TheQueries.anchorBlockEntry(editor)[0]);\n        const nativeRange = AngularEditor.toDOMRange(editor, editor.selection);\n        const cursorRect = nativeRange.getBoundingClientRect();\n        const textElementRect = textElement.getBoundingClientRect();\n        const bottomPosition: ConnectedPosition = {\n            originX: 'start',\n            originY: 'top',\n            overlayX: 'start',\n            overlayY: 'top',\n            offsetX: isSoftBreak ? 0 : cursorRect.x - textElementRect.x,\n            offsetY: isSoftBreak ? textElementRect.height : cursorRect.y - textElementRect.y + 20\n        };\n        const bottomLeftPosition: ConnectedPosition = {\n            ...bottomPosition,\n            overlayX: 'end',\n            offsetX: isSoftBreak ? 0 : cursorRect.x - textElementRect.x + 10\n        };\n        const topRightPosition: ConnectedPosition = {\n            ...bottomPosition,\n            overlayY: 'bottom',\n            offsetY: cursorRect.y - textElementRect.y + (isSoftBreak ? cursorRect.height : 0)\n        };\n        const topLeftPosition: ConnectedPosition = {\n            ...topRightPosition,\n            overlayX: 'end',\n            overlayY: 'bottom',\n            offsetX: isSoftBreak ? 0 : cursorRect.x - textElementRect.x + 10\n        };\n\n        const overlayRef = THE_EDITOR_POPOVER_REF.get(editor)?.getOverlayRef();\n        updatePopoverPosition(overlayRef, textElement, [bottomPosition, bottomLeftPosition, topRightPosition, topLeftPosition]);\n    }\n};\n","import { Editor, Element } from 'slate';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport { isDirectionKeydown, THE_EDITOR_POPOVER_REF } from '../../utils';\nimport { MentionEditor } from './mention.editor';\nimport { MentionPluginOptions } from './mention.type';\nimport { isMobileMode } from '../../utils/get-mode';\n\nexport const withMention = <T extends Editor>(editor: T): T => {\n    const { isInline, isVoid, insertText, deleteBackward, renderElement, deleteFragment, onKeydown } = editor;\n\n    editor.isInline = element => {\n        const mentions = getPluginOptions<MentionPluginOptions>(editor, PluginKeys.mention)?.mentions;\n        if (mentions?.some(mention => element?.type === mention?.type)) {\n            return true;\n        }\n        return isInline(element);\n    };\n\n    editor.isVoid = element => {\n        const mentions = getPluginOptions<MentionPluginOptions>(editor, PluginKeys.mention)?.mentions;\n        if (mentions?.some(mention => element?.type === mention?.type)) {\n            return true;\n        }\n        return isVoid(element);\n    };\n\n    editor.renderElement = (element: Element) => {\n        const mentions = getPluginOptions<MentionPluginOptions>(editor, PluginKeys.mention)?.mentions;\n        const currentMention = mentions?.find(mention => element?.type === mention?.type);\n        if (currentMention && currentMention?.render) {\n            return currentMention?.render;\n        }\n\n        return renderElement(element);\n    };\n\n    editor.insertText = text => {\n        if (text === ' ') {\n            MentionEditor.close(editor);\n        } else if (!isMobileMode(editor)) {\n            const mentions = getPluginOptions<MentionPluginOptions>(editor, PluginKeys.mention)?.mentions;\n            const currentMention = mentions?.find(m => m?.trigger === text);\n            const isDisabledTrigger = currentMention && currentMention.disableTrigger ? currentMention?.disableTrigger(editor) : false;\n            if (editor.selection && currentMention && !isDisabledTrigger) {\n                MentionEditor.openSuggestion(editor, currentMention.type);\n            }\n\n            const searchInfo = MentionEditor.getSearchInfo(editor);\n            if (searchInfo) {\n                const { currentText } = searchInfo;\n                const searchText = `${currentText}${text}`;\n                MentionEditor.updateSearchText(editor, searchText);\n            }\n        }\n\n        insertText(text);\n    };\n\n    editor.deleteBackward = unit => {\n        const searchInfo = MentionEditor.getSearchInfo(editor);\n        if (searchInfo) {\n            const { currentText } = searchInfo;\n            const searchText = currentText.slice(0, -1);\n\n            if (!!searchText) {\n                MentionEditor.updateSearchText(editor, searchText);\n            } else {\n                MentionEditor.close(editor);\n            }\n        }\n\n        deleteBackward(unit);\n    };\n\n    editor.deleteFragment = direction => {\n        const searchInfo = MentionEditor.getSearchInfo(editor);\n\n        if (searchInfo) {\n            const { currentText } = searchInfo;\n\n            if (!!currentText) {\n                MentionEditor.updateSearchText(editor, currentText);\n            } else {\n                MentionEditor.close(editor);\n            }\n        }\n\n        deleteFragment(direction);\n    };\n\n    editor.onKeydown = (event: KeyboardEvent) => {\n        if (THE_EDITOR_POPOVER_REF.get(editor)) {\n            if (isDirectionKeydown(event)) {\n                event.preventDefault();\n                return;\n            }\n        }\n        onKeydown(event);\n    };\n\n    return editor;\n};\n\nexport const createMentionPlugin = createPluginFactory<MentionPluginOptions>({\n    key: PluginKeys.mention,\n    withOverrides: withMention\n});\n","import { Directive, HostListener, Input } from '@angular/core';\nimport { TheEditor } from '../../interfaces';\n\n@Directive()\nexport abstract class TheBaseSuggestion {\n    @Input() editor: TheEditor;\n\n    @Input() type: string;\n\n    @Input() keywords: string;\n\n    @HostListener('mousedown', ['$event'])\n    handleMousedown(event: Event): void {\n        event.preventDefault();\n    }\n\n    abstract getSearchResult(keywords: string): void;\n\n    abstract selectMention<T>(event: T): void;\n}\n","import { Overlay } from '@angular/cdk/overlay';\nimport { ViewContainerRef } from '@angular/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { ThePluginMenuComponent } from '../../components/plugin-menu/plugin-menu.component';\nimport { buildQuickInsertMenus } from '../../core';\nimport { getBlockAbove } from '../../queries/get-block-above';\nimport { THE_PLUGIN_MENU_REF } from '../../utils/weak-maps';\n\nexport const QuickInsertEditor = {\n    openMenu(editor: Editor) {\n        if (QuickInsertEditor.isOpenedMenu(editor)) {\n            return;\n        }\n        const [block] = getBlockAbove(editor);\n        const rootNode = AngularEditor.toDOMNode(editor, block);\n        const origin = rootNode.querySelector('[data-slate-leaf=\"true\"]') as HTMLElement;\n        const overlay = editor.injector.get(Overlay);\n        const viewContainerRef = editor.injector.get(ViewContainerRef);\n        const thyPopover = editor.injector.get(ThyPopover);\n        const pluginMenus = buildQuickInsertMenus(editor, editor?.options?.menu);\n\n        const pluginMenuRef = thyPopover.open(ThePluginMenuComponent, {\n            initialState: {\n                editor,\n                thePluginMenu: pluginMenus\n            },\n            origin,\n            viewContainerRef: viewContainerRef,\n            backdropClosable: true,\n            placement: 'bottomLeft',\n            offset: 4,\n            hasBackdrop: false,\n            outsideClosable: true,\n            manualClosure: true,\n            minWidth: 0,\n            scrollStrategy: overlay.scrollStrategies.reposition()\n        });\n        QuickInsertEditor.updatePluginMenuRef(editor, pluginMenuRef);\n        pluginMenuRef.afterClosed().subscribe(() => {\n            QuickInsertEditor.updatePluginMenuRef(editor, null);\n        });\n        pluginMenuRef.componentInstance.cdr.markForCheck();\n        return pluginMenuRef;\n    },\n    updateKeywords(editor: Editor, keywords: string) {\n        const pluginMenuRef = THE_PLUGIN_MENU_REF.get(editor);\n        if (pluginMenuRef) {\n            pluginMenuRef.componentInstance?.updateKeywords(keywords);\n        }\n    },\n    updatePluginMenuRef(editor: Editor, pluginMenuRef: ThyPopoverRef<any> | null) {\n        if (pluginMenuRef) {\n            THE_PLUGIN_MENU_REF.set(editor, pluginMenuRef);\n        } else {\n            THE_PLUGIN_MENU_REF.set(editor, null);\n        }\n    },\n    closeMenu(editor: Editor) {\n        const pluginMenuRef = THE_PLUGIN_MENU_REF.get(editor);\n        if (pluginMenuRef) {\n            pluginMenuRef.close();\n            QuickInsertEditor.updatePluginMenuRef(editor, null);\n        }\n    },\n    isOpenedMenu(editor: Editor) {\n        const pluginMenuRef = THE_PLUGIN_MENU_REF.get(editor);\n        return !!pluginMenuRef;\n    }\n};\n","import { Injectable, NgZone } from '@angular/core';\nimport { Subject, MonoTypeOperatorFunction, Observable, combineLatest } from 'rxjs';\nimport { distinctUntilChanged, share, map, startWith, skip, tap } from 'rxjs/operators';\n\nexport enum Position {\n    top = 'top',\n    right = 'right',\n    bottom = 'bottom',\n    left = 'left'\n}\nexport class HoveredCellInfo {\n    cell: HTMLTableCellElement;\n    position: Position;\n}\n\n@Injectable()\nexport class TableCellEventDispatcher {\n    readonly tableCellHovered = new Subject<HoveredCellInfo | null>();\n\n    readonly overlayHandleActiveForCell = new Subject<HoveredCellInfo | null>();\n\n    constructor(private readonly ngZone: NgZone) {}\n\n    readonly tableCellHoveredOrActiveDistinct = combineLatest(\n        this.tableCellHovered.pipe(startWith(null), distinctUntilChanged()),\n        this.overlayHandleActiveForCell.pipe(startWith(null), distinctUntilChanged())\n    ).pipe(\n        skip(1), // Ignore initial [null, null] emission.\n        map(([hovered, active]) => active || hovered),\n        distinctUntilChanged(),\n        share()\n    );\n\n    private readonly _tableCellHoveredDistinctReenterZone = this.tableCellHoveredOrActiveDistinct.pipe(this._enterZone(), share());\n\n    private _lastSeenCell: Element | null = null;\n    private _lastSeenCellHover: Observable<HoveredCellInfo> | null = null;\n\n    /**\n     * Emits whether the specified row should show its overlay controls.\n     * Emission occurs within the NgZone.\n     */\n    resizeOverlayVisibleForTableCell(cell: Element): Observable<HoveredCellInfo> {\n        if (cell !== this._lastSeenCell) {\n            this._lastSeenCell = cell;\n            this._lastSeenCellHover = this._tableCellHoveredDistinctReenterZone.pipe(\n                map(hoveredCell => {\n                    if (hoveredCell && hoveredCell.cell === cell) {\n                        return hoveredCell;\n                    } else {\n                        return null;\n                    }\n                }),\n                distinctUntilChanged((x, y) => x === y || (x && y && x.cell === y.cell && x.position === y.position)),\n                share()\n            );\n        }\n\n        return this._lastSeenCellHover!;\n    }\n\n    private _enterZone<T>(): MonoTypeOperatorFunction<T> {\n        return (source: Observable<T>) =>\n            new Observable<T>(observer =>\n                source.subscribe({\n                    next: value => this.ngZone.run(() => observer.next(value)),\n                    error: err => observer.error(err),\n                    complete: () => observer.complete()\n                })\n            );\n    }\n}\n","export const TABLE_SELECTOR = '.the-table';\n\nexport const TABLE_WRAPPER_SELECTOR = '.the-table-wrapper';\n\nexport const RESIZE_OVERLAY_SELECTOR = '.the-table-resize-overlay-thumb';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n/** Indicates the width of a column. */\nexport interface ColumnSize {\n    /** The ID/name of the column, as defined in CdkColumnDef. */\n    readonly tableCell: HTMLElement;\n\n    /** The width / height in pixels of the column / row. */\n    readonly deltaSize?: number;\n\n    /** The width / height in pixels of the column / row prior to this update, if known. */\n    readonly previousSize?: number;\n}\n\n/** Interface describing column size changes. */\nexport interface ColumnSizeAction extends ColumnSize {\n    /**\n     * Whether the resize action should be applied instantaneously. False for events triggered during\n     * a UI-triggered resize (such as with the mouse) until the mouse button is released. True\n     * for all programatically triggered resizes.\n     */\n    readonly completeImmediately?: boolean;\n}\n\n/**\n * Originating source of column resize events within a table.\n * @docs-private\n */\n@Injectable()\nexport class ColumnResizeNotifierSource {\n    /** Emits when an in-progress resize is canceled. */\n    readonly resizeCanceled = new Subject<ColumnSizeAction>();\n\n    /** Emits when a resize is applied. */\n    readonly resizeCompleted = new Subject<ColumnSize>();\n\n    readonly resizeStarted = new Subject<ColumnSize>();\n\n    /** Triggers a resize action. */\n    readonly triggerResize = new Subject<ColumnSizeAction>();\n}\n","import { AfterViewInit, ChangeDetectorRef, Directive, ElementRef, Inject, NgZone, OnDestroy, ViewContainerRef } from '@angular/core';\nimport { ReplaySubject, fromEvent, merge } from 'rxjs';\nimport { filter, map, mapTo, takeUntil } from 'rxjs/operators';\nimport { AngularEditor } from 'slate-angular';\nimport { SLA_TABLE_CELL_SELECTOR } from '../../constants/selector';\nimport { TableCellElement } from '../../custom-types';\nimport { THE_TABLE_COMPONENT_TOKEN, TheTableBase } from '../../plugins/table/table.types';\nimport { ColumnResizeNotifierSource } from './column-resize-notifier';\nimport { Position, TableCellEventDispatcher } from './event-dispatcher';\nimport { RESIZE_OVERLAY_SELECTOR } from './selectors';\n\n@Directive({\n    selector: 'div[theColumnResize]',\n    standalone: true\n})\nexport class TheColumnResizeDirective implements AfterViewInit, OnDestroy {\n    protected readonly destroyed = new ReplaySubject<void>();\n    protected position: Position;\n    protected resizeStarted = false;\n    protected targetCell: HTMLTableCellElement;\n\n    constructor(\n        public elementRef: ElementRef,\n        public viewContainerRef: ViewContainerRef,\n        public cdr: ChangeDetectorRef,\n        public ngZone: NgZone,\n        public eventDispatcher: TableCellEventDispatcher,\n        public resizeNotifier: ColumnResizeNotifierSource,\n        @Inject(THE_TABLE_COMPONENT_TOKEN)\n        public theTableComponent: TheTableBase\n    ) {}\n\n    ngAfterViewInit() {\n        this._listenForCellEdgeHoverEvents();\n        this._listenStartDrag();\n        this._listenEndDrag();\n    }\n\n    private getResizeRowIndex(position: Position, cell: HTMLTableCellElement) {\n        const rowElements = this.theTableComponent.nativeElement.querySelector('tbody').children;\n        const editor = this.theTableComponent?.editor;\n\n        if (cell && rowElements && editor) {\n            const node = AngularEditor.toSlateNode(editor, cell) as TableCellElement;\n            const path = AngularEditor.findPath(editor, node);\n            const [row] = path.slice(-2);\n            let rowIndex: number;\n\n            switch (position) {\n                case Position.top:\n                    rowIndex = row - 1;\n                    break;\n                case Position.bottom:\n                    rowIndex = row;\n                    break;\n            }\n            return rowIndex;\n        }\n    }\n\n    _listenForCellEdgeHoverEvents() {\n        this.ngZone.runOutsideAngular(() => {\n            const element = this.elementRef.nativeElement!;\n            fromEvent<MouseEvent>(element, 'mousemove') // mouseover to mousemove 增加灵敏性\n                .pipe(\n                    filter(() => !this.resizeStarted),\n                    map(event => {\n                        if (!this.theTableComponent.isCollapsedAndNonReadonly) {\n                            return null;\n                        }\n                        const cell = (event.target as HTMLElement).closest(SLA_TABLE_CELL_SELECTOR) as HTMLTableCellElement;\n                        const positions = [Position.top, Position.right, Position.bottom, Position.left];\n                        if (cell) {\n                            const rectCell = cell.getBoundingClientRect();\n                            const topOffset = event.clientY - rectCell.y;\n                            const rightOffset = rectCell.right - event.clientX;\n                            const bottomOffset = rectCell.bottom - event.clientY;\n                            const leftOffset = event.clientX - rectCell.x;\n                            const positionOffsets = [topOffset, rightOffset, bottomOffset, leftOffset];\n                            const minIndex = positionOffsets.indexOf(Math.min(...positionOffsets));\n                            this.position = positions[minIndex];\n                            this.targetCell = cell;\n                            return { cell, position: this.position };\n                        }\n                        return null;\n                    }),\n                    takeUntil(this.destroyed)\n                )\n                .subscribe(this.eventDispatcher.tableCellHovered);\n            fromEvent<MouseEvent>(element, 'mouseleave')\n                .pipe(\n                    filter(event => {\n                        return !!event.relatedTarget && !(event.relatedTarget as Element).matches(RESIZE_OVERLAY_SELECTOR);\n                    }),\n                    mapTo(null),\n                    takeUntil(this.destroyed)\n                )\n                .subscribe(this.eventDispatcher.tableCellHovered);\n        });\n    }\n\n    _listenStartDrag() {\n        this.resizeNotifier.resizeStarted.pipe(takeUntil(this.destroyed)).subscribe(() => {\n            this.resizeStarted = true;\n            if (this.position === Position.left || this.position === Position.right) {\n                this.theTableComponent.initializeColumns();\n            }\n        });\n    }\n\n    _listenEndDrag() {\n        // resizeCanceled 按照 resizeCompleted 处理，因为界面是实时变化的。\n        merge(this.resizeNotifier.resizeCanceled, this.resizeNotifier.resizeCompleted)\n            .pipe(takeUntil(this.destroyed))\n            .subscribe(() => {\n                // 如果没有进行拖拽就不要进行后续表格宽高计算了\n                if (!this.resizeStarted) {\n                    return;\n                }\n                this.resizeStarted = false;\n                if (this.position === Position.left || this.position === Position.right) {\n                    this.theTableComponent.transformColumnsWidth();\n                } else {\n                    const rowIndex = this.getResizeRowIndex(this.position, this.targetCell);\n                    this.theTableComponent.transformRowHeight(rowIndex);\n                }\n            });\n    }\n\n    ngOnDestroy() {\n        this.destroyed.next();\n        this.destroyed.complete();\n    }\n}\n","import { Transforms } from 'slate';\nimport { TheEditor } from '../../../interfaces';\nimport { TableEditor } from '../table.editor';\nimport { TableStore } from '../table.store';\nimport { createTablePosition } from './create-table-position';\nimport { hasHeaderRow } from './is-header-row';\n\nexport function removeColumnOrRows(\n    editor: TheEditor,\n    tableStore: TableStore,\n    options?: { selectedRowsIndex?: number[]; selectedColumnsIndex?: number[] }\n) {\n    const { isSelectedTable } = tableStore;\n    const selectedRowsIndex = options?.selectedRowsIndex || tableStore.selectedRowsIndex;\n    const selectedColumnsIndex = options?.selectedColumnsIndex || tableStore.selectedColumnsIndex;\n    const tablePosition = createTablePosition(editor);\n    if (isSelectedTable) {\n        TableEditor.removeTable(editor);\n        return;\n    }\n    if (selectedRowsIndex.length > 0 && selectedColumnsIndex.length === 0) {\n        // 删除行时取消标题行\n        if (tablePosition.table && hasHeaderRow(tablePosition.table) && selectedRowsIndex.includes(0)) {\n            TableEditor.setTableOptions(editor, { headerRow: false });\n            // headerRow 兼容代码, 取消标题行的时候同时设置 row 中的 header 属性\n            if (tablePosition.table.children[0].header) {\n                const rowPath = TheEditor.findPath(editor, tablePosition.table.children[0]);\n                Transforms.setNodes(editor, { header: null }, { at: rowPath });\n            }\n        }\n        selectedRowsIndex\n            .sort((a, b) => b - a)\n            .forEach(index => {\n                TableEditor.removeRow(editor, index);\n            });\n        tableStore.changeCells();\n    }\n    if (selectedColumnsIndex.length > 0 && selectedRowsIndex.length === 0) {\n        // 删除列时取消标题列\n        if (tablePosition.table && tablePosition.table.options?.headerColumn && selectedColumnsIndex.includes(0)) {\n            TableEditor.setTableOptions(editor, { headerColumn: false });\n        }\n        selectedColumnsIndex\n            .sort((a, b) => b - a)\n            .forEach(index => {\n                TableEditor.removeColumn(editor, index);\n            });\n        tableStore.changeCells();\n    }\n}\n","import { Editor } from 'slate';\nimport { isSelectedCellMerged } from './merge-cell';\nimport { getSelectCellNode } from './get-select-cell-node';\nimport { isRectangularInTableCells } from './is-selection-in-table';\nimport { MenuEntity, CellPosition, TableInsertType } from '../table.types';\nimport { TableEditor } from '../table.editor';\n\nexport function setCellMenuVisibility(\n    editor: Editor,\n    menuList: MenuEntity[],\n    tableInfo: {\n        selectedCellPositions: CellPosition[];\n        isFullscreen?: boolean;\n        isSelectedTable?: boolean;\n        selectedRowsIndex?: number[];\n        selectedColumnsIndex?: number[];\n    }\n) {\n    const { selectedCellPositions, isFullscreen, isSelectedTable, selectedRowsIndex, selectedColumnsIndex } = tableInfo;\n    const isCellMerged = isSelectedCellMerged(editor);\n    const selectCellNodes = getSelectCellNode(editor, selectedCellPositions).filter(item => !item.node.hidden);\n    const isRect = isRectangularInTableCells(editor, selectedCellPositions);\n    menuList.forEach(item => {\n        switch (item.key) {\n            case 'merge-cells':\n                item.visibility = selectCellNodes && selectCellNodes.length > 1 && !isSelectedTable && isRect;\n                break;\n            case 'split-cells':\n                item.visibility = selectCellNodes && selectCellNodes.length === 1 && isCellMerged;\n                break;\n            case 'delete-selection-rows':\n                item.visibility = !(isFullscreen && selectedColumnsIndex.length);\n                break;\n            case 'delete-selection-columns':\n                item.visibility = !(isFullscreen && selectedRowsIndex.length);\n                break;\n            case 'delete-table':\n                item.visibility = !isFullscreen;\n                break;\n            case TableInsertType.insertRowsUp:\n                const hasHeaderRowCell = TableEditor.hasHeaderRowCell(editor);\n                item.visibility = !hasHeaderRowCell && isRect;\n                break;\n            case TableInsertType.insertRowsDown:\n                item.visibility = isRect;\n                break;\n            case TableInsertType.insertColumnsLeft:\n                const hasHeaderColumnCell = TableEditor.hasHeaderColumnCell(editor);\n                item.visibility = !hasHeaderColumnCell && isRect;\n                break;\n            case TableInsertType.insertColumnsRight:\n                item.visibility = isRect;\n                break;\n        }\n    });\n}\n","import { Editor } from 'slate';\nimport { TableElement, TableCellElement } from '../../../custom-types';\nimport { CellPosition } from '../table.types';\n\nexport const getMinAndMaxCellIndex = (\n    editor: Editor,\n    selectedCellPositions: CellPosition[],\n    maxRow: number,\n    maxCol: number,\n    minRow: number,\n    minCol: number,\n    table: TableElement\n): { minRow: number; maxRow: number; minCol: number; maxCol: number } => {\n    const beforeCols = [];\n    const beforeRows = [];\n    let spanSelectedCells = [];\n    if (selectedCellPositions.length) {\n        spanSelectedCells = selectedCellPositions.map(item => {\n            const { row, col } = item;\n            const node = table.children[row].children[col] as TableCellElement;\n            if (!node.hidden) {\n                return {\n                    ...item,\n                    colspan: node.colspan || 1,\n                    rowspan: node.rowspan || 1\n                };\n            } else {\n                return {\n                    ...item,\n                    colspan: 1,\n                    rowspan: 1\n                };\n            }\n        });\n    }\n\n    table.children.forEach((row, rowIndex) => {\n        if (rowIndex <= maxRow) {\n            row.children.forEach((cell: TableCellElement, colIndex) => {\n                if (colIndex <= maxCol) {\n                    const cellRowIndex = rowIndex + (cell.rowspan || 1) - 1;\n                    const cellColIndex = colIndex + (cell.colspan || 1) - 1;\n\n                    if (spanSelectedCells.length) {\n                        const { row: selectRow, col: selectCol, rowspan: selectRowSpan, colspan: selectColSpan } = spanSelectedCells[0];\n                        if (selectRow + selectRowSpan - 1 >= minRow && selectCol + selectColSpan - 1 >= minCol) {\n                            minRow = Math.min(selectRow, minRow);\n                            minCol = Math.min(selectCol, minCol);\n                        }\n                    }\n\n                    if (cell.colspan && cell.colspan > 1) {\n                        beforeCols.push({ rowIndex, colIndex, cellColIndex });\n                        if (cellColIndex >= minCol && cellRowIndex >= minRow) {\n                            maxCol = Math.max(maxCol, cellColIndex);\n                            minCol = Math.min(minCol, colIndex);\n                        }\n                    }\n\n                    if (cell.rowspan && cell.rowspan > 1) {\n                        beforeRows.push({ rowIndex, colIndex, cellRowIndex });\n                        if (cellColIndex >= minCol && cellRowIndex >= minRow) {\n                            minRow = Math.min(minRow, rowIndex);\n                            maxRow = Math.max(maxRow, cellRowIndex);\n                        }\n                    }\n                }\n            });\n        }\n    });\n\n    // 判断选区范围内之前的单元格 如果存在cellColIndex === minCol，表示当前获取的minCol并不是最小的，重新获取minCol\n    const colNode = beforeCols.filter(\n        item => item.rowIndex <= maxRow && item.colIndex <= maxCol && item.rowIndex >= minRow && item.cellColIndex === minCol\n    );\n    const rowNode = beforeRows.filter(\n        item => item.rowIndex <= maxRow && item.colIndex <= maxCol && item.colIndex >= minCol && item.cellRowIndex === minRow\n    );\n    if (colNode.length || rowNode.length) {\n        return getMinAndMaxCellIndex(editor, selectedCellPositions, maxRow, maxCol, minRow, minCol, table);\n    }\n    return {\n        minRow,\n        maxRow,\n        minCol,\n        maxCol\n    };\n};\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject, merge } from 'rxjs';\nimport { skip } from 'rxjs/operators';\nimport { Editor, Node, Path, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { TableCellElement } from '../../custom-types';\nimport { groupBy, map, uniq } from '../../utils/lodash';\nimport { CellPosition, TableSelectCellDirection } from './table.types';\nimport { TablePosition, getNextCell } from './utils';\nimport { getCellPositionsFromRange, getSelectedCellPositions, isSelectedAllCell, uniqueCellPosition } from './utils/cell-position';\nimport { createTablePosition } from './utils/create-table-position';\nimport { getMinAndMaxCellIndex } from './utils/get-min-max-cell-index';\nimport { getCellPositionsBeforeMerge } from './utils/merge-cell';\nimport { getTablePath } from './utils/table-entry';\n\n@Injectable()\nexport class TableStore implements OnDestroy {\n    private selectedCells$: BehaviorSubject<TableCellElement[]> = new BehaviorSubject<TableCellElement[]>([]);\n\n    private dangerousCells$: BehaviorSubject<CellPosition[]> = new BehaviorSubject([]);\n\n    private cellsChangeObject$ = new Subject<void>();\n\n    private tableChange$ = new Subject<void>();\n\n    selectedColumnsIndex: number[] = [];\n\n    selectedRowsIndex: number[] = [];\n\n    dangerousColumnsIndex: number[] = [];\n\n    dangerousRowsIndex: number[] = [];\n\n    isSelectedTable: boolean;\n\n    editor: Editor;\n\n    public isFullscreen: boolean;\n\n    public anchorCellPath: number[];\n\n    public focusCellPath: number[];\n\n    public preFocusCellPath: number[];\n\n    public lastFocusCellPath: number[];\n\n    public focusCellElement: HTMLTableCellElement;\n\n    public isPrepareSelecting = false;\n\n    public isCellSelecting = false;\n\n    public isRightClicking = false;\n\n    public isFocusedInput = false;\n\n    public maxCol: number;\n\n    get dangerousCells() {\n        return this.dangerousCells$.getValue();\n    }\n\n    get selectedCells() {\n        return this.selectedCells$.getValue();\n    }\n\n    get isExistSelectedCell() {\n        return this.selectedCells.length > 0;\n    }\n\n    constructor() {}\n\n    initEditor(editor: Editor) {\n        this.editor = editor;\n    }\n\n    getSelectedCellPositions(): CellPosition[] {\n        return getSelectedCellPositions(this.editor, this.selectedCells$.getValue());\n    }\n\n    publishDangerousCells(value: CellPosition[]) {\n        return this.dangerousCells$.next(value);\n    }\n\n    setSelectedColumnsAndRowIndex() {\n        if (!this.editor?.selection) {\n            return;\n        }\n\n        const pos = createTablePosition(this.editor);\n        if (!pos?.table) {\n            return;\n        }\n\n        const mergeBeforeCells = [];\n        const selectedCellPositions = this.getSelectedCellPositions();\n        selectedCellPositions.forEach(({ row, col }) => {\n            // 计算合并单元格数据时，要按合并前的数据处理\n            mergeBeforeCells.push(...getCellPositionsBeforeMerge(this.editor, { row, col }));\n        });\n        const cells = uniqueCellPosition(mergeBeforeCells, selectedCellPositions);\n        const rowGroup = groupBy(cells, ({ row }) => row);\n        const colGroup = groupBy(cells, ({ col }) => col);\n        this.selectedRowsIndex = [];\n        this.selectedColumnsIndex = [];\n        for (const row in rowGroup) {\n            if (rowGroup[row].length === pos.getWidth()) {\n                this.selectedRowsIndex.push(parseInt(row, 10));\n            }\n        }\n        for (const col in colGroup) {\n            if (colGroup[col].length === pos.getHeight()) {\n                this.selectedColumnsIndex.push(parseInt(col, 10));\n            }\n        }\n        this.selectedRowsIndex = uniq(this.selectedRowsIndex);\n        this.selectedColumnsIndex = uniq(this.selectedColumnsIndex);\n        if (isSelectedAllCell(this.editor, selectedCellPositions)) {\n            this.isSelectedTable = true;\n        } else {\n            this.isSelectedTable = false;\n        }\n    }\n\n    setSelectedCells(cells: CellPosition[], pos: TablePosition, metaKey: boolean = false) {\n        const uniqueCells = metaKey ? uniqueCellPosition(cells, this.getSelectedCellPositions()) : cells;\n        const cellElements = uniqueCells.map(cell => {\n            return pos.findCellByPath(cell);\n        });\n        this.selectedCells$.next(cellElements);\n        this.setSelectedColumnsAndRowIndex();\n    }\n\n    selectRow(editor: Editor, index: number, event?: MouseEvent) {\n        const pos = createTablePosition(editor);\n        const rangeCells = getCellPositionsFromRange(index, 0, index + 1, pos.getWidth());\n\n        this.clearLastFocusPath();\n        if (event?.shiftKey) {\n            this.areaSelectRowAndColumn(rangeCells, event);\n        } else {\n            const lastColIndex = pos.tableEntry[0].children[index].children.length - 1;\n            this.setAnchorCellPath(pos.tableEntry[1].concat([index, lastColIndex]));\n            this.setSelectedCells(rangeCells, pos, event?.metaKey);\n            this.focusCell(pos.tableEntry[1].concat([index, 0]));\n        }\n    }\n\n    selectColumn(editor: Editor, index: number, event?: MouseEvent) {\n        const pos = createTablePosition(editor);\n        const rangeCells = getCellPositionsFromRange(0, index, pos.getHeight(), index + 1);\n\n        this.clearLastFocusPath();\n        if (event?.shiftKey) {\n            this.areaSelectRowAndColumn(rangeCells, event);\n        } else {\n            const lastRowIndex = pos.tableEntry[0].children.length - 1;\n            this.setAnchorCellPath(pos.tableEntry[1].concat([lastRowIndex, index]));\n            this.setSelectedCells(rangeCells, pos, event?.metaKey);\n            this.focusCell(pos.tableEntry[1].concat([0, index]));\n        }\n    }\n\n    selectTable(editor: Editor, metaKey: boolean = false) {\n        const pos = createTablePosition(editor);\n        const cells = getCellPositionsFromRange(0, 0, pos.getHeight(), pos.getWidth());\n        const lastCell = cells[cells.length - 1];\n        const anchorCellPath = pos.tableEntry[1].concat([lastCell.row, lastCell.col]);\n\n        this.isSelectedTable = true;\n        this.setSelectedCells(cells, pos, metaKey);\n        this.setAnchorCellPath(anchorCellPath);\n        this.focusCell(pos.tableEntry[1].concat([0, 0]));\n    }\n\n    // 拖选开始 || 记录聚焦点\n    selectCellStart(cell: HTMLTableCellElement, editor: Editor) {\n        const node = AngularEditor.toSlateNode(editor, cell);\n        const path = AngularEditor.findPath(editor, node);\n        this.isPrepareSelecting = true;\n        this.setAnchorCellPath(path);\n        this.focusCellPath = path;\n        this.focusCellElement = cell;\n        this.lastFocusCellPath = path;\n        if (!this.preFocusCellPath) {\n            this.preFocusCellPath = this.anchorCellPath;\n        }\n    }\n\n    // 拖选\n    selectCells(editor: Editor, metaKey: boolean = false) {\n        const pos = createTablePosition(editor);\n        const anchorPath = this.anchorCellPath.slice(-2);\n        const focusPath = this.focusCellPath.slice(-2);\n\n        const rows = [anchorPath[0], focusPath[0]].sort((m, n) => m - n);\n        const columns = [anchorPath[1], focusPath[1]].sort((m, n) => m - n);\n\n        const { colspan: anchorColSpanCount, rowspan: anchorRowSpanCount } = Editor.node(\n            editor,\n            this.anchorCellPath\n        )[0] as TableCellElement;\n        const { colspan: focusColSpanCount, rowspan: focusRowSpanCount } = Editor.node(editor, this.focusCellPath)[0] as TableCellElement;\n\n        const anchorRow = anchorPath[0] + (anchorRowSpanCount || 1) - 1;\n        const focusRow = focusPath[0] + (focusRowSpanCount || 1) - 1;\n        const anchorCol = anchorPath[1] + (anchorColSpanCount || 1) - 1;\n        const focusCol = focusPath[1] + (focusColSpanCount || 1) - 1;\n\n        let initMaxCol = Math.max(anchorCol, focusCol);\n        let initMaxRow = Math.max(anchorRow, focusRow);\n        const { minRow, maxRow, minCol, maxCol } = getMinAndMaxCellIndex(\n            this.editor,\n            this.getSelectedCellPositions(),\n            initMaxRow,\n            initMaxCol,\n            rows[0],\n            columns[0],\n            pos.table\n        );\n        const cells = getCellPositionsFromRange(minRow, minCol, maxRow + 1, maxCol + 1);\n        this.setSelectedCells(cells, pos, metaKey);\n    }\n\n    selectFirstCell() {\n        const selectedCellPositions = this.getSelectedCellPositions();\n        const { row, col } = selectedCellPositions[0];\n        const tablePath = getTablePath(this.editor);\n        const path = Editor.start(this.editor, [...tablePath, row, col]);\n        Transforms.select(this.editor, path);\n    }\n\n    // 选择单元格\n    selectCell(cell: HTMLTableCellElement, editor: Editor, metaKey: boolean = false) {\n        const node = AngularEditor.toSlateNode(editor, cell) as TableCellElement;\n        const path = AngularEditor.findPath(editor, node);\n        this.setAnchorCellPath(path);\n        this.focusCellPath = path;\n        this.focusCellElement = cell;\n        const [row, col] = path.slice(-2);\n        const pos = createTablePosition(editor, path);\n        const cells: CellPosition[] = [{ row, col }];\n        const selectedCellPositions = this.getSelectedCellPositions();\n        if (metaKey) {\n            cells.push(...selectedCellPositions);\n            // 处理单元格选中时，处理为选中多单元格\n            const selectedCells = getCellPositionsBeforeMerge(this.editor, { row, col });\n            cells.push(...selectedCells);\n            // 已聚焦的单元格在多选模式下选中（暂存上次聚焦的单元格数据）\n            const focusCell = this.lastFocusCellPath?.slice(-2);\n            if (focusCell) {\n                const focusCells = getCellPositionsBeforeMerge(this.editor, { row: focusCell[0], col: focusCell[1] });\n                cells.push(...focusCells);\n            }\n        }\n        this.setSelectedCells(cells, pos, metaKey);\n    }\n\n    selectCellOngoing(cell: HTMLTableCellElement, editor: Editor, event?: MouseEvent) {\n        const pos = createTablePosition(editor);\n        if (AngularEditor.isReadOnly(editor) || !editor.selection || !pos?.table) {\n            return;\n        }\n        let isChanged: boolean;\n        if (cell) {\n            const node = AngularEditor.toSlateNode(editor, cell);\n            const path = AngularEditor.findPath(editor, node);\n            isChanged = !this.focusCellPath || !Path.equals(this.focusCellPath, path);\n            this.focusCellPath = path;\n            this.focusCellElement = cell;\n        } else {\n            const selectedCellPositions = this.getSelectedCellPositions();\n            isChanged = !this.focusCellPath || (Path.equals(this.focusCellPath, this.anchorCellPath) && selectedCellPositions.length === 0);\n        }\n        if (this.isPrepareSelecting && isChanged) {\n            if (JSON.stringify(this.preFocusCellPath) !== JSON.stringify(this.focusCellPath)) {\n                this.isCellSelecting = true;\n                this.selectCells(editor, event?.metaKey);\n                this.preFocusCellPath = this.focusCellPath;\n            }\n        }\n    }\n\n    clearSelectedCells() {\n        this.selectedColumnsIndex = [];\n        this.selectedRowsIndex = [];\n        this.isSelectedTable = false;\n        this.isCellSelecting = false;\n        this.isRightClicking = false;\n        this.isFocusedInput = false;\n        this.selectedCells$.next([]);\n    }\n\n    clearLastFocusPath() {\n        this.lastFocusCellPath = null;\n    }\n\n    selectedCellsChange(): Observable<TableCellElement[]> {\n        return this.selectedCells$.asObservable().pipe(skip(1));\n    }\n\n    cellsPositionChange() {\n        return this.cellsChangeObject$.asObservable();\n    }\n\n    changeCells() {\n        this.cellsChangeObject$.next();\n    }\n\n    emitTableChange() {\n        this.tableChange$.next();\n    }\n\n    tableChange() {\n        return this.tableChange$.asObservable();\n    }\n\n    selectCellEnd() {\n        if (this.isCellSelecting) {\n            this.focusCell(this.focusCellPath);\n        }\n        this.isPrepareSelecting = false;\n        this.preFocusCellPath = null;\n    }\n\n    dangerousCellsChange(): Observable<CellPosition[]> {\n        return this.dangerousCells$.asObservable().pipe(skip(1));\n    }\n\n    setDangerousCells() {\n        const selectedCellPositions = this.getSelectedCellPositions();\n        this.dangerousRowsIndex = this.selectedRowsIndex;\n        this.dangerousColumnsIndex = this.selectedColumnsIndex;\n        this.dangerousCells$.next(selectedCellPositions);\n    }\n\n    clearDangerousCells() {\n        this.dangerousRowsIndex = [];\n        this.dangerousColumnsIndex = [];\n        this.dangerousCells$.next([]);\n        const pos = createTablePosition(this.editor);\n        if (pos.table) {\n            this.isSelectedTable = this.selectedRowsIndex.length === pos.getHeight() && this.selectedColumnsIndex.length === pos.getWidth();\n        }\n    }\n\n    dangerousOrSelectedCellsChange() {\n        return merge(this.dangerousCells$.asObservable().pipe(skip(1)), this.selectedCells$.asObservable().pipe(skip(1)));\n    }\n\n    setDangerousRows() {\n        const selectedCellPositions = this.getSelectedCellPositions();\n        const cells = selectedCellPositions;\n        const rows = uniq(map(cells, 'row')).valueOf() as number[];\n        const pos = createTablePosition(this.editor);\n        const result = [];\n\n        this.dangerousRowsIndex = rows;\n        this.isSelectedTable = rows.length === pos.getHeight();\n        if (this.isSelectedTable) {\n            this.dangerousColumnsIndex = [...Array(pos.getWidth())].map((v, i) => i);\n        }\n\n        for (const rowIndex of rows) {\n            for (let i = 0; i < pos.getWidth(); i++) {\n                result.push({\n                    row: rowIndex,\n                    col: i\n                });\n            }\n        }\n        this.dangerousCells$.next(result);\n    }\n\n    setDangerousColumns() {\n        const selectedCellPositions = this.getSelectedCellPositions();\n        const cells = selectedCellPositions;\n        const cols = uniq(map(cells, 'col')).valueOf() as number[];\n        const pos = createTablePosition(this.editor);\n        const result = [];\n\n        this.dangerousColumnsIndex = cols;\n        this.isSelectedTable = cols.length === pos.getWidth();\n        if (this.isSelectedTable) {\n            this.dangerousRowsIndex = [...Array(pos.getHeight())].map((_, i) => i);\n        }\n\n        for (const colIndex of cols) {\n            for (let i = 0; i < pos.getHeight(); i++) {\n                result.push({\n                    row: i,\n                    col: colIndex\n                });\n            }\n        }\n        this.dangerousCells$.next(result);\n    }\n\n    setDangerousTable() {\n        this.isSelectedTable = true;\n        const pos = createTablePosition(this.editor);\n        const cells = getCellPositionsFromRange(0, 0, pos.getHeight(), pos.getWidth());\n        this.dangerousRowsIndex = [...Array(pos.getHeight())].map((_, i) => i);\n        this.dangerousColumnsIndex = [...Array(pos.getWidth())].map((_, i) => i);\n        this.dangerousCells$.next(cells);\n    }\n\n    /**\n     * 聚焦单元格并设置聚焦相关路径及元素\n     */\n    focusCell(path: number[]) {\n        const node = Node.get(this.editor, path) as TableCellElement;\n        const cellHTMLElement = AngularEditor.toDOMNode(this.editor, node) as HTMLTableCellElement;\n        this.preFocusCellPath = this.focusCellPath;\n        this.focusCellPath = path;\n        this.focusCellElement = cellHTMLElement;\n        Transforms.select(this.editor, Editor.start(this.editor, path));\n    }\n\n    /**\n     * 区域选择开始\n     * @param editor 编辑器对象\n     * @param cell 单元格元素\n     */\n    areaSelectionStart(cell: HTMLTableCellElement, editor: Editor): void {\n        const node = AngularEditor.toSlateNode(editor, cell);\n        const path = AngularEditor.findPath(editor, node);\n        this.isPrepareSelecting = true;\n        this.lastFocusCellPath = path;\n        if (!this?.anchorCellPath) {\n            this.setAnchorCellPath(path);\n        }\n        if (!this?.focusCellPath) {\n            this.focusCellPath = path;\n        }\n        if (!this.preFocusCellPath) {\n            this.preFocusCellPath = this.anchorCellPath;\n        }\n    }\n\n    /**\n     * 设置区域选择的单元格\n     * @param cellElement 单元格元素\n     */\n    setAreaSelectionCells(cellElement: TableCellElement, event?: MouseEvent): void {\n        if (AngularEditor.isReadOnly(this.editor) || !this.editor.selection || !this.isPrepareSelecting) {\n            return;\n        }\n\n        const currentCellPath = AngularEditor.findPath(this.editor, cellElement);\n        const selectedCellPositions = this.getSelectedCellPositions();\n        const selectEqual = Path.equals(currentCellPath, this.anchorCellPath);\n\n        // 不可以区域选择单一单元格\n        if (selectedCellPositions.length <= 1 && selectEqual) {\n            return;\n        }\n        this.isCellSelecting = true;\n        this.focusCell(currentCellPath);\n        this.selectCells(this.editor, event?.metaKey);\n    }\n\n    /**\n     * 处理区域选择启用时选择整行/整列\n     * @param cells 选择的单元格\n     */\n    areaSelectRowAndColumn(cells: CellPosition[], event?: MouseEvent): void {\n        const pos = createTablePosition(this.editor);\n        const [row, col] = this.focusCellPath.slice(-2);\n        const selectCells = [{ row, col }, ...cells];\n        const sortRows = selectCells.map(item => item.row).sort((m, n) => m - n);\n        const sortCols = selectCells.map(item => item.col).sort((m, n) => m - n);\n        const startRow = sortRows[0];\n        const startCol = sortCols[0];\n        const endRow = sortCols[sortCols.length - 1];\n        const endCol = sortRows[sortRows.length - 1];\n        const anchorCellPath = pos.tableEntry[1].concat([endCol, endRow]);\n        const focusCellPath = pos.tableEntry[1].concat([startRow, startCol]);\n\n        this.setAnchorCellPath(anchorCellPath);\n        this.focusCell(focusCellPath);\n        this.selectCells(this.editor, event?.metaKey);\n    }\n\n    /**\n     * 设置指定 anchorCellPath\n     * @param path 路径\n     */\n    setAnchorCellPath(path: number[]) {\n        if (path) {\n            this.anchorCellPath = path;\n        }\n    }\n\n    selectCellInDirection(direction: TableSelectCellDirection) {\n        const [row, col] = this.focusCellPath.slice(-2);\n        const nextCell = getNextCell(this.editor, direction, [row, col]);\n        if (nextCell) {\n            this.setAreaSelectionCells(nextCell);\n        }\n    }\n\n    destroy() {\n        this.selectedCells$.complete();\n        this.dangerousCells$.complete();\n        this.cellsChangeObject$.complete();\n        this.tableChange$.complete();\n    }\n\n    ngOnDestroy(): void {\n        this.destroy();\n    }\n}\n","import { inject, Injectable, NgZone, Signal } from '@angular/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { TheContextMenu } from '../components';\nimport { TableEditor } from '../plugins/table/table.editor';\nimport { TableStore } from '../plugins/table/table.store';\nimport { MenuEntity, TableInsertType } from '../plugins/table/table.types';\nimport { getSelectCellNode } from '../plugins/table/utils/get-select-cell-node';\nimport { sortCell } from '../plugins/table/utils/handle-cell';\nimport { calculateCellSpan, getLeftCellDict } from '../plugins/table/utils/merge-cell';\nimport { removeColumnOrRows } from '../plugins/table/utils/remove-row-column';\nimport { setCellMenuVisibility } from '../plugins/table/utils/set-menu-cell-invisibility';\nimport { getSelectedCell } from '../plugins/table/utils/table-entry';\nimport { reSelection, refocus } from '../utils';\nimport { TheContextService } from './context.service';\nimport { injectTranslations, TheI18nService, TheI18nTranslation } from '../i18n';\n\n@Injectable()\nexport class TheTableContextMenuService {\n    locale: Signal<TheI18nTranslation> = injectTranslations(inject(TheI18nService));\n\n    menuRef: ThyPopoverRef<TheContextMenu>;\n\n    get isOpened() {\n        return this.menuRef && this.menuRef.componentInstance;\n    }\n\n    get editor() {\n        return this.tableStore && this.tableStore.editor;\n    }\n\n    get backgroundColor() {\n        const cell = getSelectedCell(this.editor);\n        return cell ? cell.backgroundColor : '';\n    }\n\n    constructor(\n        private tableStore: TableStore,\n        private thyPopover: ThyPopover,\n        private ngZone: NgZone,\n        private theContextService: TheContextService\n    ) {}\n\n    menuEntities: MenuEntity[] = [\n        {\n            key: 'background-color',\n            icon: 'background-tt',\n            divider: true,\n            name: this.locale().cellBackground,\n            extendIcon: 'angle-right',\n            visibility: true,\n            actionHandle: () => {},\n            activeHandle: (event: MouseEvent, item: MenuEntity) => {\n                TableEditor.setCellsBackgroundColor(this.editor, item.backgroundColor);\n            },\n            deactivateHandle: (event: MouseEvent) => {\n                if (event.relatedTarget instanceof HTMLElement) {\n                    if (event.relatedTarget.classList.contains('color-select-container')) {\n                        return;\n                    }\n                }\n            }\n        },\n\n        {\n            key: TableInsertType.insertRowsUp,\n            icon: 'table-insert-rows-top',\n            name: this.locale().insertUpward,\n            visibility: true,\n            isInputNumber: true,\n            nameSuffix: this.locale().row,\n            actionHandle: (item: MenuEntity) => {\n                const { targetRowIndex } = this.getTargetRowOrColIndex();\n                TableEditor.insertRow(this.editor, item.count, targetRowIndex);\n                this.tableStore.changeCells();\n            }\n        },\n        {\n            key: TableInsertType.insertRowsDown,\n            icon: 'table-insert-rows-down',\n            name: this.locale().insertDownward,\n            visibility: true,\n            isInputNumber: true,\n            nameSuffix: this.locale().row,\n            actionHandle: (item: MenuEntity) => {\n                const { targetRowIndex } = this.getTargetRowOrColIndex(false);\n                TableEditor.insertRow(this.editor, item.count, targetRowIndex);\n                this.tableStore.changeCells();\n            }\n        },\n        {\n            key: TableInsertType.insertColumnsLeft,\n            icon: 'table-insert-columns-left',\n            name: this.locale().insertLeft,\n            visibility: true,\n            isInputNumber: true,\n            nameSuffix: this.locale().column,\n            actionHandle: (item: MenuEntity) => {\n                const { targetColIndex } = this.getTargetRowOrColIndex();\n                TableEditor.insertColumn(this.editor, item.count, targetColIndex);\n                this.tableStore.changeCells();\n            }\n        },\n        {\n            key: TableInsertType.insertColumnsRight,\n            icon: 'table-insert-columns-right',\n            divider: true,\n            name: this.locale().insertRight,\n            visibility: true,\n            isInputNumber: true,\n            nameSuffix: this.locale().column,\n            actionHandle: (item: MenuEntity) => {\n                const { targetColIndex } = this.getTargetRowOrColIndex(false);\n                TableEditor.insertColumn(this.editor, item.count, targetColIndex);\n                this.tableStore.changeCells();\n            }\n        },\n\n        {\n            key: 'clear-selection',\n            icon: 'sweep',\n            divider: true,\n            name: this.locale().clearSelection,\n            visibility: true,\n            actionHandle: () => {\n                TableEditor.clearCellsContent(this.editor);\n                this.tableStore.selectFirstCell();\n            }\n        },\n        {\n            key: 'merge-cells',\n            icon: 'table-merge-cells',\n            name: this.locale().mergeCells,\n            visibility: true,\n            actionHandle: () => {\n                TableEditor.mergeCell(this.editor);\n            }\n        },\n        {\n            key: 'split-cells',\n            icon: 'table-unmerge-cells',\n            name: this.locale().splitCells,\n            divider: true,\n            visibility: true,\n            actionHandle: () => {\n                TableEditor.splitCell(this.editor);\n            }\n        },\n        {\n            key: 'delete-selection-rows',\n            icon: 'table-delete-rows',\n            name: this.locale().deleteTheRow,\n            visibility: true,\n            actionHandle: () => {\n                removeColumnOrRows(this.editor, this.tableStore, {\n                    selectedColumnsIndex: this.tableStore.dangerousColumnsIndex,\n                    selectedRowsIndex: this.tableStore.dangerousRowsIndex\n                });\n                this.tableStore.clearDangerousCells();\n                this.tableStore.clearSelectedCells();\n            },\n            activeHandle: () => {\n                this.tableStore.setDangerousRows();\n            }\n        },\n        {\n            key: 'delete-selection-columns',\n            icon: 'table-delete-columns',\n            divider: true,\n            name: this.locale().deleteTheColumn,\n            visibility: true,\n            actionHandle: () => {\n                removeColumnOrRows(this.editor, this.tableStore, {\n                    selectedColumnsIndex: this.tableStore.dangerousColumnsIndex,\n                    selectedRowsIndex: this.tableStore.dangerousRowsIndex\n                });\n                this.tableStore.clearDangerousCells();\n                this.tableStore.clearSelectedCells();\n            },\n            activeHandle: () => {\n                this.tableStore.setDangerousColumns();\n            }\n        },\n        {\n            key: 'delete-table',\n            icon: 'trash',\n            name: this.locale().deleteTable,\n            visibility: true,\n            actionHandle: () => {\n                TableEditor.removeTable(this.editor);\n                this.tableStore.clearDangerousCells();\n                this.tableStore.clearSelectedCells();\n            },\n            activeHandle: () => {\n                this.tableStore.setDangerousTable();\n            }\n        }\n    ];\n\n    getSelectedCell() {\n        const selectedCellPositions = this.tableStore.getSelectedCellPositions();\n        const selectCellNodes = getSelectCellNode(this.editor, selectedCellPositions);\n        sortCell(selectCellNodes);\n        const leftCellDict = getLeftCellDict(selectCellNodes);\n        const { rowspan, colspan } = calculateCellSpan(selectCellNodes, leftCellDict);\n\n        return { row: rowspan, col: colspan, selectCellNodes };\n    }\n\n    getTargetRowOrColIndex(isFront = true) {\n        const { row, col, selectCellNodes } = this.getSelectedCell();\n        const firstSelectCell = selectCellNodes[0];\n        const targetRowIndex = isFront ? firstSelectCell.row : row + firstSelectCell.row;\n        const targetColIndex = isFront ? firstSelectCell.col : col + firstSelectCell.col;\n\n        return { targetRowIndex, targetColIndex };\n    }\n\n    openMenuList(event: MouseEvent) {\n        this.ngZone.run(() => {\n            const { isFullscreen, selectedRowsIndex, selectedColumnsIndex, isSelectedTable } = this.tableStore;\n            const selectedCellPositions = this.tableStore.getSelectedCellPositions();\n            const tableInfo = { selectedCellPositions, isFullscreen, selectedRowsIndex, selectedColumnsIndex, isSelectedTable };\n            const { row, col } = this.getSelectedCell();\n            setCellMenuVisibility(this.editor, this.menuEntities, tableInfo);\n\n            this.menuEntities.forEach(item => {\n                switch (item.key) {\n                    case 'background-color':\n                        item.backgroundColor = this.backgroundColor;\n                        break;\n                    case TableInsertType.insertRowsUp:\n                    case TableInsertType.insertRowsDown:\n                        item.count = row;\n                        break;\n                    case TableInsertType.insertColumnsLeft:\n                    case TableInsertType.insertColumnsRight:\n                        item.count = col;\n                        break;\n                }\n            });\n            this.menuRef = this.thyPopover.open(TheContextMenu, {\n                origin: event.target as HTMLElement,\n                initialState: {\n                    menuEntities: this.menuEntities,\n                    actionHandle: (entity: MenuEntity) => {\n                        if (!this.editor.selection) {\n                            refocus(this.editor);\n                        }\n                        entity.actionHandle(entity);\n                    },\n                    activeHandle: (menuEvent: MouseEvent, entity: MenuEntity) => {\n                        if (entity.activeHandle) {\n                            if (this.menuRef.containerInstance.animationState === 'exit') {\n                                return;\n                            }\n                            if (!this.editor.selection) {\n                                reSelection(this.editor);\n                            }\n                            entity.activeHandle(menuEvent);\n                        }\n                    },\n                    deactivateHandle: (menuEvent: MouseEvent, entity: MenuEntity) => {\n                        if (this.menuRef.containerInstance.animationState === 'exit') {\n                            return;\n                        }\n                        if (entity.key.indexOf('delete') >= 0) {\n                            this.tableStore.clearDangerousCells();\n                        }\n                        if (entity.deactivateHandle) {\n                            if (!this.editor.selection) {\n                                reSelection(this.editor);\n                            }\n                            entity.deactivateHandle(menuEvent);\n                        }\n                    }\n                },\n                originPosition: {\n                    x: event.x + 30,\n                    y: event.y\n                },\n                hasBackdrop: false,\n                placement: 'bottomLeft',\n                panelClass: 'the-table-contextmenu-panel',\n                viewContainerRef: this.theContextService.getOptions().viewContainerRef,\n                manualClosure: true,\n                insideClosable: false,\n                backdropClosable: false\n            });\n            this.menuRef.componentInstance.cdr.markForCheck();\n        });\n    }\n\n    closeContextMenu() {\n        if (this.isOpened) {\n            this.menuRef.close();\n            return this.menuRef.afterClosed();\n        }\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TableElement } from '../../custom-types';\nimport { TABLE_CONTROL, TABLE_NUMBER_COLUMN, ThePluginTableOption } from './table.types';\nimport { hasHeaderRow } from './utils';\nimport { TheEditor } from '../../interfaces';\n\n@Pipe({\n    name: 'freezeColumn',\n    standalone: true\n})\nexport class TableFreezeColumnPipe implements PipeTransform {\n    transform(table: TableElement, tablePluginOptions: ThePluginTableOption, tableWrapperWidth: number, editor?: TheEditor) {\n        let freezeColumnHeader = tablePluginOptions?.freezeColumnHeader;\n        if (typeof tablePluginOptions?.freezeColumnHeader === 'function' && editor) {\n            freezeColumnHeader = tablePluginOptions?.freezeColumnHeader(editor);\n        }\n\n        if (!(freezeColumnHeader && table.options?.headerColumn)) {\n            return false;\n        }\n\n        const rows = table.children?.map(item => item.children);\n        const mergeColumnCells = rows && rows.map(cells => cells[0]).filter(item => item.colspan && item.colspan !== 1);\n        if (mergeColumnCells.length) {\n            // 存在合并的列时，取消冻结\n            return false;\n        }\n\n        const headerColumnWidth = table.columns && table.columns[0].width;\n        let buffer = TABLE_CONTROL;\n        if (table.options?.numberedColumn) {\n            buffer = TABLE_NUMBER_COLUMN + TABLE_CONTROL;\n        }\n\n        return headerColumnWidth + buffer < tableWrapperWidth;\n    }\n}\n\n@Pipe({\n    name: 'freezeRow',\n    standalone: true\n})\nexport class TableFreezeRowPipe implements PipeTransform {\n    transform(table: TableElement, tablePluginOptions: ThePluginTableOption, editor?: TheEditor) {\n        if (!table.children.length) {\n            return false;\n        }\n\n        let freezeRowHeader = tablePluginOptions?.freezeRowHeader;\n        if (typeof tablePluginOptions?.freezeRowHeader === 'function' && editor) {\n            freezeRowHeader = tablePluginOptions?.freezeRowHeader(editor);\n        }\n\n        if (!(hasHeaderRow(table) && freezeRowHeader)) {\n            return false;\n        }\n\n        // 标题行存在合并的行时，取消冻结\n        const mergeRows = table.children[0]?.children.filter(item => item.rowspan && item.rowspan !== 1);\n        return !mergeRows.length;\n    }\n}\n\n@Pipe({ name: 'hasHeaderRow', standalone: true })\nexport class TableHasHeaderRowPipe implements PipeTransform {\n    transform(table: TableElement) {\n        return hasHeaderRow(table);\n    }\n}\n","import { Component, inject, Input, OnInit, Signal, ChangeDetectionStrategy } from '@angular/core';\nimport { ThyDropdownMenuItemDirective, ThyDropdownMenuItemIconDirective, ThyDropdownMenuItemNameDirective } from 'ngx-tethys/dropdown';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor, Transforms } from 'slate';\nimport { TheEditor } from '../../../../interfaces';\nimport { TableEditor } from '../../table.editor';\nimport { TableDropdownOption, TableOperations } from '../../table.types';\nimport { hasHeaderRow } from '../../utils/is-header-row';\nimport { getTable } from '../../utils/table-entry';\nimport { injectTranslations, TheI18nService, TheI18nTranslation } from '../../../../i18n';\n\n@Component({\n    selector: 'the-table-options',\n    template: `\n        <div class=\"thy-dropdown-menu table-drop-menu\">\n            @for (option of tableDropdownList; track $index) {\n                <a thyDropdownMenuItem href=\"javascript:;\" (mousedown)=\"setTableOptions($event, option)\">\n                    <span thyDropdownMenuItemName>{{ option.name }}</span>\n                    @if (option.isActive) {\n                        <span thyDropdownMenuItemIcon class=\"text-primary\">\n                            <thy-icon thyIconName=\"check\"></thy-icon>\n                        </span>\n                    }\n                </a>\n            }\n        </div>\n    `,\n    host: {\n        class: 'the-table-options'\n    },\n    changeDetection: ChangeDetectionStrategy.Eager,\n    imports: [ThyIcon, ThyDropdownMenuItemDirective, ThyDropdownMenuItemNameDirective, ThyDropdownMenuItemIconDirective]\n})\nexport class TheTableOptions implements OnInit {\n    @Input() editor: Editor;\n\n    locale: Signal<TheI18nTranslation> = injectTranslations(inject(TheI18nService));\n\n    tableDropdownList: TableDropdownOption[] = [\n        {\n            name: this.locale().titleRow,\n            key: TableOperations.headerRow\n        },\n        {\n            name: this.locale().titleCol,\n            key: TableOperations.headerColumn\n        },\n        {\n            name: this.locale().orderCol,\n            key: TableOperations.numberedColumn\n        }\n    ];\n\n    constructor(private popoverRef: ThyPopoverRef<TheTableOptions>) {}\n\n    ngOnInit(): void {\n        this.setColumnOptions();\n    }\n\n    get table() {\n        return getTable(this.editor);\n    }\n\n    setColumnOptions() {\n        this.tableDropdownList.forEach(item => {\n            if (item.key === TableOperations.headerRow) {\n                item.isActive = hasHeaderRow(this.table);\n            } else {\n                item.isActive = (this.table.options && this.table.options[item.key]) || false;\n            }\n        });\n    }\n\n    setTableOptions(event: MouseEvent, option: TableDropdownOption) {\n        event.preventDefault();\n        event.stopPropagation();\n        const currentOption = this.tableDropdownList.find(item => item.key === option.key);\n        currentOption.isActive = !option.isActive;\n        const tableOption = {};\n        tableOption[option.key] = currentOption.isActive || false;\n        TableEditor.setTableOptions(this.editor, { ...tableOption });\n        // headerRow 兼容代码, 取消标题行的时候同时设置 row 中的 header 属性\n        if (option.key === TableOperations.headerRow && !tableOption[option.key] && this.table.children[0].header) {\n            const rowPath = TheEditor.findPath(this.editor, this.table.children[0]);\n            Transforms.setNodes(this.editor, { header: null }, { at: rowPath });\n        }\n    }\n}\n","import { Component, inject, Input, OnDestroy, OnInit, Signal, ViewContainerRef, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyAction, ThyActions } from 'ngx-tethys/action';\nimport { ThyColorPickerDirective } from 'ngx-tethys/color-picker';\nimport { ThyDivider } from 'ngx-tethys/divider';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { ThyTooltipDirective } from 'ngx-tethys/tooltip';\nimport { Subscription } from 'rxjs';\nimport { Editor } from 'slate';\nimport { TableElement } from '../../../..//custom-types';\nimport { getPluginOptions } from '../../../../core';\nimport { PluginKeys, TheEditor } from '../../../../interfaces';\nimport * as TheQueries from '../../../../queries';\nimport { copyNode } from '../../../../utils';\nimport { TableEditor } from '../../table.editor';\nimport { TableStore } from '../../table.store';\nimport { MenuEntity } from '../../table.types';\nimport { createTablePosition } from '../../utils/create-table-position';\nimport { isRectangularInTableCells } from '../../utils/is-selection-in-table';\nimport { removeColumnOrRows } from '../../utils/remove-row-column';\nimport { setCellMenuVisibility } from '../../utils/set-menu-cell-invisibility';\nimport { getSelectedCell } from '../../utils/table-entry';\nimport { TheTableOptions } from './table-options.component';\nimport { injectTranslations, TheI18nService, TheI18nTranslation } from '../../../../i18n';\n\nexport enum DeleteIcon {\n    'table-delete-rows' = 'table-delete-rows',\n    'table-delete-columns' = 'table-delete-columns',\n    trash = 'trash'\n}\n\n@Component({\n    selector: 'the-table-toolbar',\n    templateUrl: 'table-toolbar.component.html',\n    changeDetection: ChangeDetectionStrategy.Eager,\n    imports: [FormsModule, ThyIcon, ThyAction, ThyActions, ThyTooltipDirective, ThyDivider, ThyColorPickerDirective]\n})\nexport class TheTableToolbar implements OnInit, OnDestroy {\n    locale: Signal<TheI18nTranslation> = injectTranslations(inject(TheI18nService));\n\n    selectedColor: string;\n\n    deleteIcon: DeleteIcon;\n\n    iconName: string;\n\n    isRectangle: boolean;\n\n    isColumnEqual: boolean;\n\n    tableChangeSubscriber: Subscription;\n\n    @Input() tableStore: TableStore;\n\n    @Input() tableElement: TableElement;\n\n    get editor(): Editor {\n        return this.tableStore && this.tableStore.editor;\n    }\n\n    cellMenuList: MenuEntity[] = [\n        {\n            key: 'merge-cells',\n            name: this.locale().mergeCells,\n            visibility: false,\n            icon: 'table-merge-cells',\n            actionHandle: () => {\n                TableEditor.mergeCell(this.editor);\n                this.popoverRef.close();\n                this.tableStore.clearSelectedCells();\n            }\n        },\n        {\n            key: 'split-cells',\n            name: this.locale().splitCells,\n            visibility: false,\n            icon: 'table-unmerge-cells',\n            actionHandle: () => {\n                TableEditor.splitCell(this.editor);\n                this.popoverRef.close();\n                this.tableStore.clearSelectedCells();\n            }\n        }\n    ];\n\n    get hasDivider() {\n        return this.cellMenuList.filter(item => item.visibility).length > 1;\n    }\n\n    get tableOptions() {\n        return getPluginOptions(this.editor, PluginKeys.table);\n    }\n\n    constructor(\n        private thyPopover: ThyPopover,\n        private popoverRef: ThyPopoverRef<TheTableOptions>,\n        private thyNotifyService: ThyNotifyService,\n        private viewContainerRef: ViewContainerRef\n    ) {}\n\n    ngOnInit() {\n        this.isColumnEqual = this.tableElement?.columns?.every(col => this.tableElement.columns[0].width === col.width) ?? true;\n        const selectedCellPositions = this.tableStore.getSelectedCellPositions();\n        const tableInfo = { selectedCellPositions, isSelectedTable: this.tableStore.isSelectedTable };\n        this.isRectangle = isRectangularInTableCells(this.editor, selectedCellPositions);\n        this.setDeleteIcon();\n        setCellMenuVisibility(this.editor, this.cellMenuList, tableInfo);\n        const cell = getSelectedCell(this.editor);\n        this.selectedColor = cell ? cell.backgroundColor : '';\n\n        const path = TheEditor.findPath(this.editor, this.tableElement);\n        this.tableChangeSubscriber = this.tableStore.tableChange().subscribe(() => {\n            const columns = (TheQueries.getNode(this.editor, path) as TableElement).columns;\n            this.isColumnEqual = columns?.every(col => columns[0].width === col.width) ?? true;\n        });\n    }\n\n    ngOnDestroy() {\n        this.tableChangeSubscriber?.unsubscribe();\n    }\n\n    setDeleteIcon() {\n        const { selectedRowsIndex, selectedColumnsIndex } = this.tableStore;\n        const selectedCellPositions = this.tableStore.getSelectedCellPositions();\n        const pos = createTablePosition(this.editor);\n\n        if (this.tableStore.selectedRowsIndex.length > 0) {\n            this.deleteIcon = DeleteIcon['table-delete-rows'];\n            this.iconName = this.locale().deleteEntireRow;\n        }\n        if (this.tableStore.selectedColumnsIndex.length > 0) {\n            this.deleteIcon = DeleteIcon['table-delete-columns'];\n            this.iconName = this.locale().deleteEntireCol;\n        }\n        if (this.tableStore.isSelectedTable) {\n            this.deleteIcon = DeleteIcon.trash;\n            this.iconName = this.locale().deleteTable;\n        }\n        // 满足已选中整行或者整列\n        const isSelectedWholeRowOrColumnCell =\n            selectedRowsIndex.length * pos.getWidth() === selectedCellPositions.length ||\n            selectedColumnsIndex.length * pos.getHeight() === selectedCellPositions.length;\n        if (!isSelectedWholeRowOrColumnCell) {\n            this.deleteIcon = null;\n            this.iconName = null;\n        }\n    }\n\n    onDelete(event: MouseEvent) {\n        event.preventDefault();\n        removeColumnOrRows(this.editor, this.tableStore);\n        this.tableStore.clearDangerousCells();\n        this.tableStore.clearSelectedCells();\n        this.popoverRef.close();\n    }\n\n    onEnterDelete(event: MouseEvent) {\n        this.tableStore.setDangerousCells();\n    }\n\n    onLeaveDelete(event: MouseEvent) {\n        this.tableStore.clearDangerousCells();\n    }\n\n    openColorPanel(e: MouseEvent) {\n        e.preventDefault();\n        e.stopPropagation();\n    }\n\n    changeColor(newColor: string) {\n        TableEditor.setCellsBackgroundColor(this.editor, newColor);\n        this.selectedColor = newColor;\n    }\n\n    setFullscreen(event: MouseEvent) {\n        this.popoverRef.close();\n        this.tableOptions.setFullscreen(this.editor, event, this.tableElement);\n    }\n\n    preventDefault(event: MouseEvent) {\n        event.preventDefault();\n        event.stopPropagation();\n    }\n\n    onCopy(e: Event) {\n        e?.preventDefault();\n        copyNode(this.editor, this.tableElement, this.thyNotifyService, this.locale);\n    }\n\n    setEquallyColumnHandle(event: MouseEvent) {\n        this.preventDefault(event);\n        TableEditor.setEquallyColumn(this.editor);\n    }\n\n    openTableOptionMenu(event: MouseEvent) {\n        this.preventDefault(event);\n        this.thyPopover.open(TheTableOptions, {\n            origin: event.currentTarget as HTMLElement,\n            initialState: {\n                editor: this.editor\n            },\n            minWidth: 0,\n            insideClosable: true,\n            outsideClosable: true,\n            hasBackdrop: false,\n            placement: 'bottomLeft',\n            originActiveClass: 'active',\n            panelClass: 'table-options-panel',\n            viewContainerRef: this.viewContainerRef\n        });\n    }\n}\n","<thy-actions thySize=\"xxs\" (mousedown)=\"preventDefault($event)\">\n  @for (item of cellMenuList; track $index) {\n    @if (item.visibility) {\n      <a href=\"javascript:;\" thyAction [thyActionIcon]=\"item.icon\" [thyTooltip]=\"item.name\" (click)=\"item.actionHandle()\"></a>\n    }\n  }\n  @if (hasDivider) {\n    <thy-divider class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\" thyColor=\"light\"> </thy-divider>\n  }\n  <a\n    href=\"javascript:;\"\n    thyAction\n    [thyTooltip]=\"locale().cellBackground\"\n    thyColorPicker\n    [(ngModel)]=\"selectedColor\"\n    (ngModelChange)=\"changeColor($event)\"\n    (click)=\"openColorPanel($event)\"\n    thyPlacement=\"bottomLeft\"\n    [thyHasBackdrop]=\"false\"\n  >\n    <thy-icon thyIconName=\"background-tt\" thyIconType=\"twotone\" [thyTwotoneColor]=\"selectedColor\"></thy-icon>\n  </a>\n  @if (tableStore.isSelectedTable && !isColumnEqual) {\n    <a href=\"javascript:;\" thyAction [thyTooltip]=\"locale().colEqualWidth\" (click)=\"setEquallyColumnHandle($event)\">\n      <thy-icon thyIconName=\"table-column-equal-width\"></thy-icon>\n    </a>\n  }\n  @if (tableStore.isSelectedTable && tableOptions?.showFullscreen) {\n    <a href=\"javascript:;\" thyAction [thyTooltip]=\"locale().fullscreen\" (click)=\"setFullscreen($event)\">\n      <thy-icon thyIconName=\"arrows-alt\"></thy-icon>\n    </a>\n  }\n  @if (tableStore.isSelectedTable && !tableStore?.isFullscreen) {\n    <a\n      class=\"fullscreen-hidden\"\n      href=\"javascript:;\"\n      thyAction\n      thyActionIcon=\"copy\"\n      [thyTooltip]=\"locale().copy\"\n      (click)=\"onCopy($event)\"\n    ></a>\n  }\n  @if (tableStore.isSelectedTable) {\n    <thy-divider class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\" thyColor=\"light\"></thy-divider>\n    <a href=\"javascript:;\" class=\"link-with-down\" thyAction (mousedown)=\"preventDefault($event)\" (click)=\"openTableOptionMenu($event)\">\n      <span>{{ locale().tableOptions }}</span>\n      <thy-icon class=\"font-size-sm text-desc ml-1\" thyIconName=\"caret-down\"></thy-icon>\n    </a>\n  }\n  @if (tableStore?.isFullscreen ? deleteIcon && !tableStore.isSelectedTable : deleteIcon) {\n    <thy-divider class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\" thyColor=\"light\"></thy-divider>\n    <a\n      href=\"javascript:;\"\n      thyAction\n      thyType=\"danger\"\n      [thyActionIcon]=\"deleteIcon\"\n      [thyTooltip]=\"iconName\"\n      (click)=\"onDelete($event)\"\n      (mouseenter)=\"onEnterDelete($event)\"\n      (mouseleave)=\"onLeaveDelete($event)\"\n    ></a>\n  }\n</thy-actions>\n","import { Overlay } from '@angular/cdk/overlay';\nimport { Injectable, NgZone } from '@angular/core';\nimport { ThyPlacement } from 'ngx-tethys/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { AngularEditor } from 'slate-angular';\nimport { TableElement } from '../../custom-types';\nimport { TheTableToolbar } from './components/toolbar/table-toolbar.component';\nimport { TableEditor } from './table.editor';\nimport { TableStore } from './table.store';\n\n@Injectable()\nexport class TableService {\n    backdropClosable = false;\n\n    hasBackdrop = false;\n\n    insideClosable = false;\n\n    placement: ThyPlacement = 'topLeft';\n\n    offset = 8;\n\n    toolbarRef: ThyPopoverRef<any>;\n\n    get isOpened() {\n        return this.toolbarRef && this.toolbarRef.componentInstance;\n    }\n\n    constructor(\n        private thyPopover: ThyPopover,\n        private overlay: Overlay,\n        private tableStore: TableStore,\n        private ngZone: NgZone\n    ) {}\n\n    private openToolbar(origin: HTMLElement, tableElement: TableElement) {\n        if (this.isOpened) {\n            if (\n                this.toolbarRef.containerInstance.config.origin instanceof HTMLElement &&\n                (this.toolbarRef.containerInstance.config.origin === origin ||\n                    this.toolbarRef.containerInstance.config.origin.contains(origin) ||\n                    origin.contains(this.toolbarRef.containerInstance.config.origin))\n            ) {\n                return;\n            }\n            this.toolbarRef.close();\n        }\n        const normalizedOrigin = this.getOrigin(origin);\n        this.toolbarRef = this.thyPopover.open(TheTableToolbar, {\n            initialState: {\n                tableStore: this.tableStore,\n                tableElement\n            },\n            origin: normalizedOrigin,\n            backdropClosable: this.backdropClosable,\n            panelClass: 'the-plugin-toolbar-popover',\n            placement: this.placement,\n            offset: this.offset,\n            hasBackdrop: this.hasBackdrop,\n            insideClosable: this.insideClosable,\n            minWidth: 0,\n            scrollStrategy: this.overlay.scrollStrategies.reposition(),\n            manualClosure: true\n        });\n    }\n\n    afterSelectedCells(origin: HTMLElement, element: TableElement, isMobileMode: boolean) {\n        !isMobileMode && this.openToolbar(origin, element);\n    }\n\n    getOrigin(origin: HTMLElement): HTMLElement {\n        const focusCellElement = this.tableStore.focusCellElement;\n        if ((origin instanceof HTMLTableCellElement || focusCellElement) && origin.tagName !== 'TH') {\n            const { selectedRowsIndex, selectedColumnsIndex, focusCellPath, isSelectedTable, focusCellElement } = this.tableStore;\n            const [row, col] = focusCellPath.slice(-2);\n            const tableElement = focusCellElement.closest('.the-table-container') as HTMLElement;\n            if (isSelectedTable && col === 0 && row === 0) {\n                return tableElement.querySelector('.the-table-corner-controls');\n            }\n            if (selectedColumnsIndex.length > 0 && row === 0) {\n                return tableElement.querySelectorAll('.the-table-col-control')[col] as HTMLElement;\n            }\n            if (selectedRowsIndex.length > 0 && col === 0) {\n                return tableElement.querySelectorAll('.the-table-row-control-button-wrap')[row] as HTMLElement;\n            }\n        }\n        return origin;\n    }\n\n    public closeToolbar() {\n        if (this.isOpened) {\n            this.ngZone.run(() => {\n                this.toolbarRef.close();\n            });\n            return this.toolbarRef.afterClosed();\n        }\n    }\n\n    /**\n     * 判断是否触发了点选，并处理点选状态\n     * @param e 事件对象\n     * @param tbody tbody元素\n     */\n    public handleKeydownForPointerSelection(e: KeyboardEvent, tbody: HTMLElement) {\n        const cell = (tbody?.querySelector('.focused-cell') as HTMLTableCellElement) || this.tableStore.focusCellElement;\n        if (cell) {\n            this.tableStore.selectCellStart(cell, this.tableStore.editor);\n        }\n    }\n\n    /**\n     * 判断是否触发了区域选择，并处理区域选择状态\n     * @param e 事件对象\n     * @param tbody tbody元素\n     */\n    public handleKeydownForAreaSelection(e: KeyboardEvent, tbody: HTMLElement) {\n        const isTable = TableEditor.isActive(this.tableStore.editor);\n        const cell = (tbody?.querySelector('.focused-cell') as HTMLTableCellElement) || this.tableStore.focusCellElement;\n        if (isTable && cell) {\n            this.tableStore.areaSelectionStart(cell, this.tableStore.editor);\n        }\n    }\n\n    /**\n     * 进行区域选择时，阻止默认的选区事件\n     * @param e 事件对象\n     * @param editor 编辑器对象\n     */\n    public selectStartPreventDefault(e: KeyboardEvent) {\n        const isReadonly = AngularEditor.isReadOnly(this.tableStore.editor);\n        const cells = this.tableStore.getSelectedCellPositions();\n        if (!isReadonly && e.shiftKey && cells.length > 1) {\n            e.preventDefault();\n        }\n    }\n}\n","import { Editor, Path, Point } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport * as TheQueries from '../../../queries';\n\nexport function calculateAnchorPositionInCell(editor: Editor, at?: Path | Point) {\n    at = at || editor.selection.anchor;\n    const entry = TheQueries.anchorBlockEntry(editor, at);\n    const [block, blockPath] = entry;\n    const blockDom = AngularEditor.toDOMNode(editor, block);\n    const valueRangeRect = blockDom.getBoundingClientRect();\n    const blockHeight = window.getComputedStyle(blockDom).lineHeight;\n    const nativeSelection = window.getSelection();\n    const nativeRange = nativeSelection && nativeSelection.getRangeAt(0);\n    const nativeRangeRect = nativeRange && nativeRange.getBoundingClientRect();\n\n    let isFirstLine = false;\n    let isLastLine = false;\n    if (valueRangeRect && nativeRangeRect && blockHeight) {\n        const lineHeight = parseInt(blockHeight, 10);\n        isFirstLine = nativeRangeRect.top - valueRangeRect.top < lineHeight;\n        isLastLine = valueRangeRect.bottom - nativeRangeRect.bottom < lineHeight;\n    }\n\n    return {\n        isFirstLine,\n        isLastLine,\n        blockPath\n    };\n}\n","import { isKeyHotkey } from 'is-hotkey';\nimport { Editor, Path } from 'slate';\nimport { ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport { TheEditor } from '../../../interfaces';\nimport * as TheQueries from '../../../queries';\nimport { isMobileMode } from '../../../utils';\nimport { TheTable } from '../components/table.component';\nimport { TableSelectCellDirection } from '../table.types';\nimport { createTablePosition } from '../utils';\nimport { calculateAnchorPositionInCell } from '../utils/calc-anchor-position';\n\nconst keyShiftDir = {\n    'shift+up': TableSelectCellDirection.up,\n    'shift+right': TableSelectCellDirection.right,\n    'shift+down': TableSelectCellDirection.down,\n    'shift+left': TableSelectCellDirection.left\n};\n\nconst getHotKey = (e: KeyboardEvent) => {\n    const hotkey = ['shift+up', 'shift+right', 'shift+down', 'shift+left'].find(key => isKeyHotkey(key, e));\n    return hotkey;\n};\n\n/**\n * 处理单元格内 shift + up/down/left/right 行为\n * @param editor 编辑器对象\n * @param e 键盘事件对象\n */\nexport const moveSelectionFromCell = (editor: TheEditor, e: KeyboardEvent) => {\n    const hotkey = getHotKey(e);\n    if (!hotkey) {\n        return;\n    }\n\n    const { selection } = editor;\n    const cursor = selection.focus;\n    const tablePosition = createTablePosition(editor);\n    const tableComponent = ELEMENT_TO_COMPONENT.get(tablePosition.table) as TheTable;\n    const tableStore = tableComponent.tableStore;\n    const selectedCells = tableStore.getSelectedCellPositions();\n    const endPosition = createTablePosition(editor, cursor.path);\n    const cellPath = endPosition.cellEntry[1];\n    const isStart = Editor.isStart(editor, selection.focus, cellPath);\n    const isEnd = Editor.isEnd(editor, selection.focus, cellPath);\n    const isUp = isKeyHotkey('shift+up', e);\n    const isDown = isKeyHotkey('shift+down', e);\n    const isLeft = isKeyHotkey('shift+left', e);\n    const isRight = isKeyHotkey('shift+right', e);\n\n    // 当前已经没有选中单元格\n    if (selectedCells.length === 0) {\n        if (isUp || isDown) {\n            const cellStartPath = Editor.start(editor, cellPath).path;\n            const cellEndPath = Editor.end(editor, cellPath).path;\n            const { isFirstLine, isLastLine } = calculateAnchorPositionInCell(editor, cursor);\n            const [, anchorBlockPath] = TheQueries.anchorBlockEntry(editor, cursor);\n            const anchorPosition = createTablePosition(editor, selection.anchor.path);\n            const startCellPosition = createTablePosition(editor, cellStartPath);\n            const endCellPosition = createTablePosition(editor, cellEndPath);\n            const isSameCellByStart = Path.equals(anchorPosition.cellEntry[1], startCellPosition.cellEntry[1]);\n            const isSameCellByEnd = Path.equals(anchorPosition.cellEntry[1], endCellPosition.cellEntry[1]);\n\n            cellStartPath.pop();\n            cellEndPath.pop();\n\n            // 同一单元格内，当前光标不在首行或当前是跨行，则执行默认逻辑\n            if (isUp && isSameCellByStart && (!isFirstLine || !Path.equals(anchorBlockPath, cellStartPath))) {\n                return;\n            }\n\n            // 同一单元格内，当前光标不在最后一行或当前是跨行，则执行默认逻辑\n            if (isDown && isSameCellByEnd && (!isLastLine || !Path.equals(anchorBlockPath, cellEndPath))) {\n                return;\n            }\n        }\n\n        if (isLeft) {\n            const beforePoint = Editor.before(editor, selection);\n            const beforePosition = beforePoint && createTablePosition(editor, beforePoint.path);\n            // 如果不是单元格或不在起始位置，则不处理\n            if (!beforePosition?.cell || !isStart) {\n                return;\n            }\n        }\n\n        if (isRight) {\n            const afterPoint = Editor.after(editor, selection);\n            const afterPosition = afterPoint && createTablePosition(editor, afterPoint.path);\n            // 如果不是单元格或不是单元格尾部，则不处理\n            if (!afterPosition?.cell || !isEnd) {\n                return;\n            }\n        }\n    }\n\n    tableStore.selectCellInDirection(keyShiftDir[hotkey]);\n\n    setTimeout(() => {\n        const tableService = tableComponent.tableService;\n        const isMobile = isMobileMode(editor);\n        const focusElement =\n            (tableComponent.tbodyNativeElement?.querySelector('.focused-cell') as HTMLTableCellElement) || tableStore.focusCellElement;\n        tableService.afterSelectedCells(focusElement, tableComponent.element, isMobile);\n    });\n};\n","import { AngularEditor, ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport { TableElement } from '../../../custom-types';\nimport { Editor } from 'slate';\nimport { TheTable } from '../components/table.component';\nimport { getEditorScrollContainer } from '../../../utils/scrolling';\nimport { coercePixelsFromCssValue } from '../../../utils/dom';\n\nexport const getTableViewportRect = (editor: Editor, table: TableElement) => {\n    const tableComponent = ELEMENT_TO_COMPONENT.get(table) as TheTable;\n    const tableWrapper = tableComponent.tableWrapper.nativeElement as HTMLElement;\n    const tableWrapperCSSStyle = getComputedStyle(tableWrapper);\n    const tableWrapperRect = tableWrapper.getBoundingClientRect();\n    const tableWrapperPaddingBottom = coercePixelsFromCssValue(tableWrapperCSSStyle.paddingBottom || '0px');\n    const firstRow = AngularEditor.toDOMNode(editor, table.children[0]);\n    const firstRowRect = firstRow.getBoundingClientRect();\n    const controlHeight = 11;\n    const adjustedTableRect = {\n        left: tableWrapperRect.left,\n        right: tableWrapperRect.right,\n        bottom: tableWrapperRect.bottom - tableWrapperPaddingBottom,\n        top: firstRowRect.top - controlHeight\n    };\n\n    const editorScrollContainer = getEditorScrollContainer(editor);\n    const editorScrollContainerCSSStyle = getComputedStyle(editorScrollContainer);\n    const editorScrollContainerRect = editorScrollContainer.getBoundingClientRect();\n    // handle toolbar effect\n    const paddingTop = coercePixelsFromCssValue(editorScrollContainerCSSStyle.paddingTop || '0px');\n    const adjustedEditorScrollContainerRect = {\n        left: editorScrollContainerRect.left,\n        right: editorScrollContainerRect.right,\n        bottom: editorScrollContainerRect.bottom,\n        top: editorScrollContainerRect.top + paddingTop\n    };\n\n    const left = Math.max(adjustedEditorScrollContainerRect.left, adjustedTableRect.left);\n    const right = Math.min(adjustedEditorScrollContainerRect.right, adjustedTableRect.right);\n    const bottom = Math.min(adjustedEditorScrollContainerRect.bottom, adjustedTableRect.bottom);\n    const top = Math.max(adjustedEditorScrollContainerRect.top, adjustedTableRect.top);\n    return {\n        left,\n        right,\n        top,\n        bottom\n    };\n};\n","import { NgClass, NgStyle } from '@angular/common';\nimport {\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    Input,\n    OnDestroy,\n    OnInit,\n    Renderer2,\n    signal,\n    Signal,\n    ViewChild,\n    ChangeDetectionStrategy\n} from '@angular/core';\nimport { ThyTooltipDirective } from 'ngx-tethys/tooltip';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Editor, Range } from 'slate';\nimport { TableEditor } from '../../table.editor';\nimport { TableStore } from '../../table.store';\nimport { TOP_CELL_CLASS } from '../../table.types';\nimport { createTablePosition } from '../../utils/create-table-position';\nimport { getTableViewportRect } from '../../utils/table-viewport';\nimport { TheI18nService, TheI18nTranslation } from '../../../../i18n';\n\n@Component({\n    selector: 'the-table-insert-mark',\n    templateUrl: './insert-mark.component.html',\n    host: {\n        class: 'the-table-insert-mark'\n    },\n    changeDetection: ChangeDetectionStrategy.Eager,\n    imports: [ThyTooltipDirective, NgClass, NgStyle]\n})\nexport class TheInsertMark implements OnInit, OnDestroy {\n    @Input() type: 'row' | 'column';\n\n    @Input() at: number;\n\n    @Input() tableStore: TableStore;\n\n    @Input() parentElement: HTMLElement;\n\n    @ViewChild('insertWrapper') insertWrapper: ElementRef<HTMLElement>;\n\n    locale: Signal<TheI18nTranslation>;\n\n    insertLineStyle = {};\n\n    public dotWrapperHovered: boolean;\n\n    destroy$ = new Subject<void>();\n\n    tooltipContent = '';\n\n    disabled = false;\n\n    get editor(): Editor {\n        return this.tableStore && this.tableStore.editor;\n    }\n\n    constructor(\n        private cdr: ChangeDetectorRef,\n        private i18n: TheI18nService,\n        public renderer2: Renderer2,\n        public elementRef: ElementRef<HTMLElement>\n    ) {\n        this.locale = signal(i18n.getLocale()().translations);\n    }\n\n    ngOnInit() {\n        this.tooltipContent = this.type === 'row' ? this.locale().insertRow : this.locale().insertCol;\n\n        this.tableStore\n            .selectedCellsChange()\n            .pipe(takeUntil(this.destroy$))\n            .subscribe(selectedCellPositions => {\n                this.disabled = !!selectedCellPositions.length;\n            });\n    }\n\n    ngOnDestroy() {\n        this.destroy$?.next();\n        this.destroy$?.complete();\n    }\n\n    preventDefault(event: MouseEvent) {\n        event.preventDefault();\n        event.stopPropagation();\n    }\n\n    insert(event: MouseEvent) {\n        this.preventDefault(event);\n        if (this.disabled) {\n            return;\n        }\n        const fun = this.type === 'row' ? TableEditor.insertRow : TableEditor.insertColumn;\n        fun(this.editor, 1, this.at);\n        this.tableStore.changeCells();\n    }\n\n    onMouseEnter(event: MouseEvent) {\n        this.preventDefault(event);\n        if (this.disabled) {\n            return;\n        }\n        this.dotWrapperHovered = true;\n        this.insertLineStyle = this.getInsertLineStyle();\n        this.parentElement && this.renderer2.addClass(this.parentElement, TOP_CELL_CLASS);\n        this.cdr.detectChanges();\n    }\n\n    onMouseLeave(event: MouseEvent) {\n        this.preventDefault(event);\n        if (this.disabled) {\n            return;\n        }\n        this.dotWrapperHovered = false;\n        this.parentElement && this.renderer2.removeClass(this.parentElement, TOP_CELL_CLASS);\n        this.cdr.detectChanges();\n    }\n\n    getInsertLineStyle() {\n        const { selection } = this.editor;\n        if (selection && Range.isCollapsed(selection)) {\n            const { table } = createTablePosition(this.editor, selection.anchor.path);\n            if (!table) {\n                return;\n            }\n            let width = 0;\n            let height = 0;\n            let left = 0;\n            let top = 0;\n            const insertMarkSize = 19;\n            const insertMarkBoundingClientRect = this.insertWrapper.nativeElement.getBoundingClientRect();\n            const tableViewportRect = getTableViewportRect(this.editor, table);\n            if (this.type === 'row') {\n                width = tableViewportRect.right - insertMarkBoundingClientRect.right;\n                height = 1;\n                left = insertMarkBoundingClientRect.left + insertMarkSize;\n                top = insertMarkBoundingClientRect.top + insertMarkSize / 2;\n            } else {\n                width = 1;\n                height = tableViewportRect.bottom - insertMarkBoundingClientRect.bottom;\n                left = insertMarkBoundingClientRect.left + insertMarkSize / 2;\n                top = insertMarkBoundingClientRect.top + insertMarkSize;\n                if (this.isLastColumn()) {\n                    left = insertMarkBoundingClientRect.right;\n                }\n            }\n            return { height: `${height}px`, width: `${width}px`, left: `${left}px`, top: `${top}px` };\n        }\n    }\n\n    isLastColumn() {\n        const tablePosition = createTablePosition(this.editor);\n        if (!tablePosition?.table) {\n            return false;\n        }\n        return this.type === 'column' && this.at === tablePosition.getWidth();\n    }\n}\n","<div\n  #insertWrapper\n  [thyTooltip]=\"!disabled && tooltipContent\"\n  class=\"the-table-controls-insert-wrapper\"\n  [ngClass]=\"{ disabled: disabled }\"\n  contenteditable=\"false\"\n  (pointerdown)=\"preventDefault($event)\"\n  (pointerup)=\"insert($event)\"\n  (click)=\"preventDefault($event)\"\n  (mouseup)=\"preventDefault($event)\"\n  (mouseenter)=\"onMouseEnter($event)\"\n  (mouseleave)=\"onMouseLeave($event)\"\n>\n  @if (dotWrapperHovered) {\n    <div class=\"the-table-controls-insert-line\" [ngStyle]=\"insertLineStyle\"></div>\n  }\n</div>\n","import { TableStore } from '../table.store';\nimport { fromEvent, Subject } from 'rxjs';\nimport { SLA_TABLE_CELL_SELECTOR } from '../../../constants/selector';\nimport { map, takeUntil, filter, take } from 'rxjs/operators';\nimport { Editor } from 'slate';\nimport { DOMEditor } from 'slate-dom';\nimport { TableCellElement, TableElement } from '../../../custom-types';\nimport { TableService } from '../table.service';\n\nexport const cellsSelectionHandle = (\n    editor: Editor,\n    tableNativeElement: HTMLElement,\n    tableStore: TableStore,\n    tableService: TableService,\n    isMobileMode: boolean,\n    destroy$: Subject<void>\n) => {\n    fromEvent<MouseEvent>(tableNativeElement, 'mousedown')\n        .pipe(\n            takeUntil(destroy$),\n            filter((e: MouseEvent) => e.button !== 2),\n            map(event => {\n                return {\n                    cell: (event.target as HTMLElement).closest(SLA_TABLE_CELL_SELECTOR),\n                    event: event\n                };\n            }),\n            filter(result => !!result.cell)\n        )\n        .subscribe((result: { cell: HTMLTableCellElement; event: MouseEvent }) => {\n            const cell = result.cell;\n            if (result.event.metaKey) {\n                tableStore.selectCell(cell, editor, result.event.metaKey);\n            }\n            const cellElement = DOMEditor.toSlateNode(editor, cell) as TableCellElement;\n            if (result.event.shiftKey) {\n                tableStore.setAreaSelectionCells(cellElement, result.event);\n            } else {\n                tableStore.selectCellStart(cell, editor);\n            }\n            cellSelectionMovingHandle(editor, tableNativeElement, tableStore, tableService, isMobileMode, destroy$);\n        });\n};\n\nexport const cellSelectionMovingHandle = (\n    editor: Editor,\n    tableNativeElement: HTMLElement,\n    tableStore: TableStore,\n    tableService: TableService,\n    isMobileMode: boolean,\n    destroy$: Subject<void>\n) => {\n    const mouseoverObservable = fromEvent<MouseEvent>(document, 'mouseover')\n        .pipe(\n            takeUntil(destroy$),\n            map(event => {\n                event.preventDefault();\n                const cell = (event.target as HTMLElement).closest(SLA_TABLE_CELL_SELECTOR);\n                return {\n                    cell: cell,\n                    event: event\n                };\n            }),\n            filter((result: { cell: HTMLTableCellElement; event: MouseEvent }) => !!result.cell)\n        )\n        .subscribe((result: { cell: HTMLTableCellElement; event: MouseEvent }) => {\n            tableStore.selectCellOngoing(result.cell, editor, result.event);\n        });\n\n    fromEvent<MouseEvent>(document, 'mouseup')\n        .pipe(take(1))\n        .subscribe((event: MouseEvent) => {\n            if (tableStore.isCellSelecting || event.metaKey) {\n                const tableElement = DOMEditor.toSlateNode(editor, tableNativeElement) as TableElement;\n                tableService.afterSelectedCells(tableStore.focusCellElement, tableElement, isMobileMode);\n            }\n            if (!event.shiftKey) {\n                tableStore.selectCellEnd();\n            }\n            mouseoverObservable.unsubscribe();\n        });\n};\n","import { NgClass, NgStyle } from '@angular/common';\nimport {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    Inject,\n    Injector,\n    NgZone,\n    OnDestroy,\n    OnInit,\n    QueryList,\n    Renderer2,\n    signal,\n    ViewChild,\n    ViewChildren,\n    ChangeDetectionStrategy\n} from '@angular/core';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { Subject, fromEvent, merge, timer } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, filter, map, take, takeUntil } from 'rxjs/operators';\nimport { Editor, Transforms } from 'slate';\nimport { AngularEditor, getBlockCardByNativeElement, SLATE_BLOCK_CARD_CLASS_NAME } from 'slate-angular';\nimport { ColumnResizeNotifierSource, TableCellEventDispatcher } from '../../../components';\nimport { TheColumnResizeDirective } from '../../../components/column-resize/column-resize.directive';\nimport { DEFAULT_SCROLL_CONTAINER } from '../../../constants/default';\nimport { ScrollDirection } from '../../../constants/node-types';\nimport { SLA_TABLE_CELL_SELECTOR } from '../../../constants/selector';\nimport { getPluginOptions } from '../../../core';\nimport { TableCellElement, TableElement, TableRowElement } from '../../../custom-types';\nimport { PluginKeys, THE_MODE_TOKEN, TheBaseElement, TheEditor, TheMode, TheModeConfig, ThePluginOption } from '../../../interfaces';\nimport { TheContextService } from '../../../services/context.service';\nimport { TheTableContextMenuService } from '../../../services/table-contextmenu.service';\nimport * as TheTransforms from '../../../transforms';\nimport { getElementHeight, getElementWidth, isColorInput, isColorPanel } from '../../../utils';\nimport { isMobileMode } from '../../../utils/get-mode';\nimport { TableEditor } from '../table.editor';\nimport { TableFreezeColumnPipe, TableFreezeRowPipe, TableHasHeaderRowPipe } from '../table.pipe';\nimport { TableService } from '../table.service';\nimport { TableStore } from '../table.store';\nimport {\n    HEADER_CELL_CLASS,\n    STICKY_CELL_CLASS,\n    TABLE_CONTROL,\n    TABLE_INSERT_MASK,\n    TABLE_NUMBER_COLUMN,\n    TABLE_PADDING,\n    THE_TABLE_COMPONENT_TOKEN,\n    TableWithStickyRowClass,\n    ThePluginTableOption,\n    TheTableColumn\n} from '../table.types';\nimport { moveSelectionFromCell } from '../transforms/move-selection-from-cell';\nimport {\n    calcPrintColumnWidth,\n    calculateHeaderRowHeight,\n    calculateRowControls,\n    createTablePosition,\n    getColumnsWidth,\n    getGridColumns,\n    hasHeaderRow,\n    isSelectedAllCell,\n    isVirtualKey\n} from '../utils';\nimport { TheInsertMark } from './insert-mark/insert-mark.component';\nimport { cellsSelectionHandle } from '../utils/cell-selection';\nimport { Overlay, ScrollDispatcher } from '@angular/cdk/overlay';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n    selector: 'the-table',\n    templateUrl: './table.component.html',\n    providers: [\n        TableStore,\n        TableService,\n        TheTableContextMenuService,\n        TableCellEventDispatcher,\n        ColumnResizeNotifierSource,\n        TableFreezeColumnPipe,\n        TableFreezeRowPipe,\n        {\n            provide: THE_TABLE_COMPONENT_TOKEN,\n            useExisting: TheTable\n        }\n    ],\n    host: {\n        '[class.the-table-with-controls]': 'isInTable || tableStore.isRightClicking || tableStore.isFocusedInput',\n        '[class.the-table-with-sticky-column]': 'isFreezeColumn',\n        '[class.the-numbered-table]': 'element?.options?.numberedColumn',\n        '[class.the-table-selection-hide]': 'tableStore.isCellSelecting || tableStore.isRightClicking || tableStore.isFocusedInput',\n        '[class.the-table-disabled-horizontal-scrollbar-fixed]': 'disabledHorizontalScrollbarFixed()'\n    },\n    changeDetection: ChangeDetectionStrategy.Eager,\n    imports: [NgClass, NgStyle, TheInsertMark, TheColumnResizeDirective, TableHasHeaderRowPipe]\n})\nexport class TheTable extends TheBaseElement<TableElement, Editor> implements OnInit, AfterViewInit, OnDestroy {\n    headerRow = false;\n\n    isSelectedAllCell: boolean = false;\n\n    destroy$ = new Subject<void>();\n\n    rowControls: { height: number; rowIndex: number }[] = [];\n\n    colControls = [];\n\n    isInTable: boolean;\n\n    tablePluginOptions: ThePluginOption<ThePluginTableOption>;\n\n    isStickyTop: boolean;\n\n    scrollContainerTop: number;\n\n    isRightShadow: boolean;\n\n    isLeftShadow: boolean;\n\n    previousScrollContainer: string;\n\n    columns: TheTableColumn[];\n\n    isMobileMode: boolean;\n\n    selectedCells: TableCellElement[];\n\n    tableWrapperWidth: number;\n\n    tableWrapperLeft: number;\n\n    isFreezeRow: boolean;\n\n    isFreezeColumn: boolean;\n\n    disabledHorizontalScrollbarFixed = signal(false);\n\n    get nativeElement(): HTMLElement {\n        return this.elementRef.nativeElement;\n    }\n\n    get tbodyNativeElement(): HTMLElement {\n        return this.tbodyElement?.nativeElement;\n    }\n\n    @ViewChild('tableWrapper', { read: ElementRef, static: true })\n    tableWrapper: ElementRef<HTMLElement>;\n\n    @ViewChild('theTable', { read: ElementRef, static: true })\n    theTableElement: ElementRef;\n\n    @ViewChild('tbody', { read: ElementRef, static: true })\n    tbodyElement: ElementRef;\n\n    @ViewChild('tableRowControlsWrapper', { read: ElementRef, static: false })\n    tableRowControlsWrapper: ElementRef<HTMLElement>;\n\n    @ViewChild('columnControlsWrapper', { read: ElementRef, static: false })\n    columnControlsWrapper: ElementRef<HTMLElement>;\n\n    @ViewChild('cornerControl', { read: ElementRef, static: false })\n    cornerControl: ElementRef<HTMLElement>;\n\n    @ViewChild('rowControlsInner', { read: ElementRef, static: false })\n    rowControlsInner: ElementRef<HTMLElement>;\n\n    @ViewChild('headerRowLeftShadow', { read: ElementRef, static: false })\n    headerRowLeftShadow: ElementRef<HTMLElement>;\n\n    @ViewChild('headerRowRightShadow', { read: ElementRef, static: false })\n    headerRowRightShadow: ElementRef<HTMLElement>;\n\n    @ViewChild('colgroup', { read: ElementRef, static: false })\n    colgroup: ElementRef<HTMLElement>;\n\n    @ViewChildren('rowControlsButtonWrapper', { read: ElementRef })\n    rowControlsButtonWrapper: QueryList<ElementRef<HTMLElement>>;\n\n    @ViewChild('horizontalScrollbarContainer', { read: ElementRef, static: true })\n    horizontalScrollbarContainer: ElementRef<HTMLElement>;\n\n    @ViewChild('horizontalScrollbarContent', { read: ElementRef, static: true })\n    horizontalScrollbarContent: ElementRef<HTMLElement>;\n\n    getOutletParent = () => {\n        return this.tbodyElement.nativeElement;\n    };\n\n    onContextChange() {\n        super.onContextChange();\n        if (this.initialized) {\n            setTimeout(() => {\n                this.afterChildrenViewUpdate();\n                this.cdr.markForCheck();\n                setTimeout(() => {\n                    this.afterRowControlsUpdate();\n                }, 0);\n                // 表格数据变化，更新横向滚动条\n                this.updateHorizontalScrollbar();\n            }, 0);\n            this.updateFreezeState();\n            this.getIsInTable();\n            this.getColControls();\n            this.columns = this.element.columns;\n            // 右键菜单中有输入框，为了避免聚焦到输入框触发右键菜单关闭，需要增加 this.editor.selection 条件\n            if (this.editor.selection && !this.isInTable && this.theTableContextMenuService.isOpened) {\n                this.theTableContextMenuService.closeContextMenu();\n                this.tableStore.isExistSelectedCell && this.tableStore.clearSelectedCells();\n            }\n        }\n    }\n\n    // 需要等待内容更新后，才可以执行 useRowControls，否则获取的高度可能不正确\n    afterChildrenViewUpdate() {\n        this.tableStore.emitTableChange();\n        this.tableStore.setSelectedColumnsAndRowIndex();\n        this.setTableScrollingShadow();\n        this.useRowControls();\n    }\n\n    // 需要等等待 row controls 渲染后，标题行固定需要设置 first row control 的属性\n    afterRowControlsUpdate() {\n        this.setTableHeaderStyle();\n    }\n\n    constructor(\n        public eventDispatcher: TableCellEventDispatcher,\n        public resizeNotifier: ColumnResizeNotifierSource,\n        public tableStore: TableStore,\n        public cdr: ChangeDetectorRef,\n        public ngZone: NgZone,\n        public injector: Injector,\n        public scrollDispatcher: ScrollDispatcher,\n        public overlay: Overlay,\n        public tableService: TableService,\n        private theTableContextMenuService: TheTableContextMenuService,\n        private freezeColumnPipe: TableFreezeColumnPipe,\n        public freezeRowPipe: TableFreezeRowPipe,\n        private renderer: Renderer2,\n        private contextService: TheContextService,\n        @Inject(THE_MODE_TOKEN)\n        private config: TheModeConfig\n    ) {\n        super();\n    }\n\n    ngOnInit() {\n        super.ngOnInit();\n        this.isMobileMode = isMobileMode(this.editor);\n        this.getColControls();\n        this.getIsInTable();\n        this.tablePluginOptions = getPluginOptions<ThePluginTableOption>(this.editor, PluginKeys.table);\n        this.disabledHorizontalScrollbarFixed.set(this.tablePluginOptions.disabledHorizontalScrollbarFixed);\n        if (this.tablePluginOptions.showFullscreen && this.tablePluginOptions.fullscreenAction) {\n            this.tablePluginOptions\n                .fullscreenAction(this.editor)\n                .pipe(\n                    takeUntil(this.destroy$),\n                    filter(content => {\n                        return content.element === this.element;\n                    }),\n                    map(content => {\n                        return content.state === 'off' ? false : true;\n                    })\n                )\n                .subscribe(value => {\n                    this.tableStore.isFullscreen = value;\n                    if (this.tableStore.isFullscreen) {\n                        this.previousScrollContainer = this.editor.options.scrollContainer;\n                        this.editor.options.scrollContainer = DEFAULT_SCROLL_CONTAINER;\n                    } else {\n                        this.editor.options.scrollContainer = this.previousScrollContainer;\n                    }\n                    this.isStickyTop = false;\n                    this.setHeaderRowStyle();\n                    this.contextService.rebindContainerScroll();\n                });\n        }\n        this.tableStore\n            .selectedCellsChange()\n            .pipe(takeUntil(this.destroy$))\n            .subscribe(cells => {\n                this.selectedCells = cells;\n                if (!cells.length) {\n                    this.isSelectedAllCell = false;\n                    if (this.tablePluginOptions.deselect && typeof this.tablePluginOptions.deselect === 'function') {\n                        this.tablePluginOptions.deselect(this.editor);\n                    }\n                    if (this.tableService.isOpened) {\n                        this.tableService.closeToolbar();\n                    }\n                } else {\n                    this.isSelectedAllCell = isSelectedAllCell(this.editor, this.tableStore.getSelectedCellPositions());\n                }\n            });\n        if (this.config.mode !== TheMode.print) {\n            this.columns = this.element.columns;\n        }\n    }\n\n    getWrapperWidthAndLeft() {\n        const { left, width } = this.nativeElement.getBoundingClientRect();\n        this.tableWrapperWidth = width;\n        this.tableWrapperLeft = left;\n    }\n\n    ngAfterViewInit() {\n        this.tableStore.initEditor(this.editor);\n        this.ngZone.onStable.pipe(take(1), takeUntil(this.destroy$)).subscribe(async () => {\n            const blockCardElement = getBlockCardByNativeElement(this.nativeElement);\n            if (blockCardElement) {\n                blockCardElement.classList.add(`${SLATE_BLOCK_CARD_CLASS_NAME}-${this.element.type}`);\n            }\n            this.setHeaderCellClass();\n            if (!this.readonly) {\n                cellsSelectionHandle(this.editor, this.nativeElement, this.tableStore, this.tableService, this.isMobileMode, this.destroy$);\n                if (this.element.options?.numberedColumn) {\n                    const loadImageDone = await this.resolveImage();\n                    // 等待序号列表格内图片加载完成后再去渲染表格行高度\n                    if (loadImageDone) {\n                        this.ngZone.run(() => {\n                            this.useRowControls();\n                            this.cdr.markForCheck();\n                        });\n                    }\n                } else {\n                    if (this.isInTable) {\n                        this.ngZone.run(() => {\n                            this.useRowControls();\n                            this.cdr.markForCheck();\n                        });\n                    }\n                }\n            }\n        });\n        timer(0)\n            .pipe(takeUntil(this.destroy$))\n            .subscribe(() => {\n                const isPrintMode = this.config.mode === TheMode.print;\n                this.getWrapperWidthAndLeft();\n                if (isPrintMode) {\n                    this.columns = calcPrintColumnWidth(this.element);\n                }\n                this.updateFreezeState();\n                this.setHeaderColumnStickyCellClass();\n                this.setTableRightShadow();\n                this.subscribeCellsChange();\n                this.subscribeCellPositionChange();\n                this.listenOnSelectedCells();\n                this.listenKeydownEvent();\n                this.listenSelectstartEvent();\n                this.listenTableContextMenuEvent();\n                this.listenTableWrapperScroll();\n                this.subscribeScrollContainerScroll();\n\n                this.initHorizontalScrollbar();\n\n                if (isPrintMode) {\n                    this.cdr.markForCheck();\n                }\n                this.ngZone.runOutsideAngular(() => {\n                    merge(this.contextService.containerResized$, this.contextService.windowResized$)\n                        .pipe(takeUntil(this.destroy$))\n                        .subscribe(() => {\n                            this.getWrapperWidthAndLeft();\n                            this.setHeaderRowShadow();\n                            this.setStickyElementLeftStyle();\n                            this.updateHorizontalScrollbar();\n                        });\n                    this.contextService.theEditorResized$.pipe(takeUntil(this.destroy$)).subscribe(result => {\n                        if (result.widthChanged) {\n                            this.updateFreezeState();\n                            this.getWrapperWidthAndLeft();\n                            this.setTableScrollingShadow();\n                            this.setGridColumnsStyle();\n                            this.setHeaderRowShadow();\n                            this.updateHorizontalScrollbar();\n                        }\n                    });\n                });\n            });\n    }\n\n    /* 给标题行的左/右加阴影 */\n    setHeaderRowShadow() {\n        if (this.isFreezeRow) {\n            // 固定标题行遮盖\n            if (this.isLeftShadow || this.isRightShadow) {\n                let { height, top } = this.calcHeaderRowShadow();\n                if (this.isRightShadow && this.headerRowRightShadow) {\n                    const headerRowRightShadow = this.headerRowRightShadow.nativeElement;\n                    this.renderer.setStyle(headerRowRightShadow, 'height', `${height}px`);\n                    this.renderer.setStyle(headerRowRightShadow, 'top', `${top}px`);\n                    this.renderer.setStyle(headerRowRightShadow, 'left', `${this.tableWrapperLeft + this.tableWrapperWidth - 8}px`);\n                }\n                if (this.isLeftShadow && this.headerRowLeftShadow) {\n                    const headerRowLeftShadow = this.headerRowLeftShadow.nativeElement;\n                    this.renderer.setStyle(headerRowLeftShadow, 'height', `${height}px`);\n                    this.renderer.setStyle(headerRowLeftShadow, 'top', `${top}px`);\n                    this.renderer.setStyle(headerRowLeftShadow, 'left', `${this.tableWrapperLeft + this.getColControlButtonWidth()}px`);\n                }\n            }\n        }\n    }\n\n    calcHeaderRowShadow() {\n        const headerRowHeight = calculateHeaderRowHeight(this.editor, this.element);\n        let height = headerRowHeight;\n        // 默认（没有聚焦）的 top 值：滚动容器高度 + 表格的padding（8）\n        let top = this.scrollContainerTop + TABLE_PADDING;\n        // 聚焦在表格中： 高度 + control（11），top 加一个 mask（19）\n        if (this.isInTable) {\n            height = height + TABLE_CONTROL;\n            top = top + TABLE_INSERT_MASK - 1;\n        }\n        return { height, top };\n    }\n\n    subscribeScrollContainerScroll() {\n        this.ngZone.runOutsideAngular(() => {\n            this.contextService.containerScrolled$\n                .pipe(\n                    takeUntil(this.destroy$),\n                    map(entires => {\n                        const { event, direction } = entires;\n                        if (direction === ScrollDirection.X) {\n                            this.setHeaderRowShadow();\n                            this.setStickyElementLeftStyle();\n                        }\n                        if (direction === ScrollDirection.Y) {\n                            this.scrollContainerTop = (event.target as HTMLElement).getBoundingClientRect().top;\n                            const clientRect = (this.theTableElement.nativeElement as HTMLElement).getBoundingClientRect();\n                            const headerTopHeight = this.isInTable ? -19 : 11;\n                            const headerRowHeight = calculateRowControls(this.editor, this.element)[0]?.height;\n                            const top = clientRect.top + headerTopHeight;\n                            this.isStickyTop =\n                                top <= this.scrollContainerTop + 8 &&\n                                clientRect.bottom - this.scrollContainerTop >= headerRowHeight &&\n                                this.isFreezeRow;\n                            // 标题行内容超过固定高度时移除冻结\n                            if (this.isStickyTop) {\n                                const maxHeaderRowHeight = (24 + 8) * 11; // 超出 11 行，取消冻结\n                                this.isStickyTop = headerRowHeight <= maxHeaderRowHeight;\n                            }\n                            // 更新漂浮滚动条\n                            this.updateHorizontalScrollbar();\n                        }\n                        return this.isStickyTop;\n                    }),\n                    distinctUntilChanged()\n                )\n                .subscribe(() => {\n                    this.setHeaderRowStyle();\n                });\n        });\n    }\n\n    applyHeaderCellClass(isHeaderCell: boolean, cell: TableCellElement, className: string) {\n        const nativeElement = AngularEditor.toDOMNode(this.editor, cell);\n        if (isHeaderCell && !nativeElement.classList.contains(className)) {\n            this.renderer.addClass(nativeElement, className);\n        } else if (!isHeaderCell && nativeElement.classList.contains(className)) {\n            this.renderer.removeClass(nativeElement, className);\n        }\n    }\n\n    private updateFreezeState() {\n        this.isFreezeRow = this.freezeRowPipe.transform(this.element, this.tablePluginOptions, this.editor) && this.children.length > 1;\n        this.isFreezeColumn = this.freezeColumnPipe.transform(this.element, this.tablePluginOptions, this.tableWrapperWidth, this.editor);\n    }\n\n    setTableHeaderStyle() {\n        this.setHeaderCellClass();\n        this.setHeaderColumnStickyCellClass();\n        this.setHeaderRowStyle();\n    }\n\n    setHeaderCellClass() {\n        const isHeaderColumn = this.element.options?.headerColumn || false;\n        // header column cells\n        this.element.children.forEach(item => {\n            this.applyHeaderCellClass(isHeaderColumn, item.children[0], HEADER_CELL_CLASS);\n        });\n        // header row cells\n        const isHeaderRow = hasHeaderRow(this.element);\n        this.element.children[0].children.forEach((item, index) => {\n            let isHeaderCell = index === 0 ? isHeaderRow || isHeaderColumn : isHeaderRow;\n            this.applyHeaderCellClass(isHeaderCell, item, HEADER_CELL_CLASS);\n        });\n    }\n\n    setHeaderColumnStickyCellClass() {\n        this.element.children.forEach(item => {\n            // sticky cell\n            this.applyHeaderCellClass(this.isFreezeColumn, item.children[0], STICKY_CELL_CLASS);\n        });\n    }\n\n    setHeaderRowStyle() {\n        this.setGridColumnsStyle();\n        this.setStickyRowStyle();\n        this.setHeaderRowShadow();\n        this.setStickyElementLeftStyle();\n    }\n\n    setGridColumnsStyle() {\n        const colControl = this.columnControlsWrapper.nativeElement;\n        if (this.isFreezeRow) {\n            const headerRow = (this.tbodyElement.nativeElement as HTMLElement).childNodes[0] as HTMLElement;\n            const hasColumns = this.element?.columns && this.colgroup?.nativeElement;\n            let cellsWidth = [];\n            let gridColumns = '';\n            let colControlGridColumns = '';\n            if (hasColumns) {\n                cellsWidth = getColumnsWidth(this.colgroup.nativeElement);\n                gridColumns = getGridColumns(headerRow, cellsWidth);\n                colControlGridColumns = getGridColumns(\n                    colControl,\n                    this.element?.columns.map(item => item.width)\n                );\n            } else {\n                if (this.readonly) {\n                    cellsWidth = getColumnsWidth(headerRow);\n                    // 预览模式且没有colgroup，使用数据行的宽度计算固定列宽\n                    gridColumns = getGridColumns(headerRow, cellsWidth);\n                } else {\n                    const columnCount = this.element.children[0].children.length;\n                    const percent = +(100 / columnCount).toFixed(4);\n                    cellsWidth = new Array(columnCount).fill(percent);\n                    gridColumns = getGridColumns(headerRow, cellsWidth, '%');\n                    colControlGridColumns = gridColumns;\n                }\n            }\n            const tablePadding = 44;\n            // 序号列存在时, 表格宽度加序号列宽度\n            // 只读模式下, 表格宽度不变\n            const tableWidth =\n                !this.readonly && this.element?.options?.numberedColumn ? this.tableWrapperWidth - tablePadding : this.tableWrapperWidth;\n            this.renderer.setStyle(headerRow, 'width', tableWidth + 'px');\n            this.renderer.setStyle(headerRow, 'grid-template-columns', gridColumns);\n            this.renderer.setStyle(colControl, 'width', tableWidth + 'px');\n            this.renderer.setStyle(colControl, 'grid-template-columns', colControlGridColumns);\n        }\n    }\n\n    getStickRowElements() {\n        const firstHeaderRow = this.nativeElement.querySelector('tbody tr');\n        const columnControlsWrapper = this.columnControlsWrapper.nativeElement;\n        const tableCornerControl = this.cornerControl.nativeElement;\n        const rowControlInner = this.rowControlsInner.nativeElement;\n        const firstRowControlButton: null | HTMLElement = this.rowControlsButtonWrapper.first\n            ? this.rowControlsButtonWrapper.first.nativeElement\n            : null;\n        return { firstHeaderRow, columnControlsWrapper, tableCornerControl, rowControlInner, firstRowControlButton };\n    }\n\n    setStickyRowStyle() {\n        if (this.isFreezeRow) {\n            const { firstHeaderRow, columnControlsWrapper, tableCornerControl, rowControlInner, firstRowControlButton } =\n                this.getStickRowElements();\n            const numberedColumn = this.element?.options?.numberedColumn;\n            if (this.isStickyTop) {\n                const headerRowHeight = calculateHeaderRowHeight(this.editor, this.element);\n                this.renderer.addClass(this.nativeElement, TableWithStickyRowClass);\n                this.updateStickyRowScrollLeft();\n                const top = this.isInTable ? this.scrollContainerTop + 36 : this.scrollContainerTop;\n                this.renderer.setStyle(firstHeaderRow, 'top', top + 'px');\n                this.renderer.setStyle(firstHeaderRow, 'height', `${headerRowHeight}px`);\n                if (this.isInTable || numberedColumn) {\n                    [columnControlsWrapper, tableCornerControl].map(item => {\n                        item && this.renderer.setStyle(item, 'top', this.scrollContainerTop + 'px');\n                    });\n                    firstRowControlButton && this.renderer.setStyle(firstRowControlButton, 'top', this.scrollContainerTop + 'px');\n                }\n                // 优化：table 的 padding-top 应该动态变化（与阴影同变）\n                const tablePaddingTop = headerRowHeight + 11; // 标题行高 + ctrl btn（11px）高度\n                this.renderer.setStyle(this.theTableElement.nativeElement, 'padding-top', tablePaddingTop + 'px');\n                this.renderer.setStyle(rowControlInner, 'padding-top', tablePaddingTop + 'px');\n            } else {\n                this.renderer.removeClass(this.nativeElement, TableWithStickyRowClass);\n                [firstHeaderRow, columnControlsWrapper, tableCornerControl].map(item => {\n                    item && this.renderer.setStyle(item, 'top', null);\n                });\n                this.renderer.setStyle(this.theTableElement.nativeElement, 'padding-top', null);\n                this.renderer.setStyle(rowControlInner, 'padding-top', null);\n                firstRowControlButton && this.renderer.setStyle(firstRowControlButton, 'top', null);\n            }\n        } else {\n            const hadStickRowClass = this.nativeElement.classList.contains(TableWithStickyRowClass);\n            if (hadStickRowClass) {\n                const { firstHeaderRow, columnControlsWrapper, tableCornerControl, rowControlInner, firstRowControlButton } =\n                    this.getStickRowElements();\n                this.renderer.removeClass(this.nativeElement, TableWithStickyRowClass);\n                [firstHeaderRow, columnControlsWrapper, tableCornerControl].map(item => {\n                    item && this.renderer.setStyle(item, 'top', null);\n                });\n                this.renderer.setStyle(this.theTableElement.nativeElement, 'padding-top', null);\n                this.renderer.setStyle(rowControlInner, 'padding-top', null);\n                firstRowControlButton && this.renderer.setStyle(firstRowControlButton, 'top', null);\n            }\n        }\n    }\n\n    setTableScrollingShadow() {\n        const scrollLeft = this.tableWrapper.nativeElement.scrollLeft;\n        this.setTableLeftShadow(scrollLeft);\n        this.setTableRightShadow(scrollLeft);\n    }\n\n    setTableLeftShadow(scrollLeft = 0) {\n        this.isLeftShadow = scrollLeft > 0;\n        let elements: Element[] = [this.tableWrapper.nativeElement.parentElement];\n        if (this.isFreezeColumn) {\n            const rows = this.tableWrapper.nativeElement.querySelectorAll(`tr`);\n            const stickyCells = Array.from(rows).map(\n                item => item.querySelector('th.the-table-col-control') || item.querySelector('td.slate-element-table-cell')\n            );\n            elements = stickyCells;\n        }\n        if (this.isLeftShadow) {\n            elements.forEach(element => {\n                element.classList.add('the-table-left-shadow');\n            });\n        } else {\n            elements.forEach(item => {\n                item.classList.remove('the-table-left-shadow');\n            });\n        }\n    }\n\n    setTableRightShadow(scrollLeft = 0) {\n        const nativeElement = this.tableWrapper.nativeElement;\n        const scrollWidth = nativeElement.scrollWidth;\n        const clientWidth = nativeElement.clientWidth;\n        this.isRightShadow = scrollLeft + clientWidth < scrollWidth;\n        if (this.isRightShadow) {\n            nativeElement.parentElement.classList.add('the-table-right-shadow');\n        } else {\n            nativeElement.parentElement.classList.remove('the-table-right-shadow');\n        }\n    }\n\n    subscribeCellPositionChange() {\n        this.tableStore\n            .cellsPositionChange()\n            .pipe(debounceTime(100), takeUntil(this.destroy$))\n            .subscribe(() => {\n                this.cdr.detectChanges();\n            });\n    }\n\n    subscribeCellsChange() {\n        this.tableStore\n            .dangerousOrSelectedCellsChange()\n            .pipe(takeUntil(this.destroy$))\n            .subscribe(() => {\n                this.cdr.detectChanges();\n            });\n    }\n\n    useRowControls() {\n        if (\n            (this.selection && !this.readonly) ||\n            this.element?.options?.numberedColumn ||\n            this.tableStore.isRightClicking ||\n            this.tableStore.isFocusedInput\n        ) {\n            this.rowControls = calculateRowControls(this.editor, this.element);\n        }\n    }\n\n    detectChanges() {\n        this.cdr.detectChanges();\n    }\n\n    resolveImage() {\n        const imageElements = this.nativeElement.querySelectorAll('img');\n        if (imageElements.length) {\n            const imageResolves: Promise<any>[] = [];\n            imageElements.forEach(item => {\n                const image = new Image();\n                const imageLoad = new Promise(resolve => {\n                    image.onload = () => {\n                        resolve(true);\n                    };\n                    image.onerror = () => {\n                        resolve(true);\n                    };\n                    image.src = item.getAttribute('src');\n                });\n                imageResolves.push(imageLoad);\n            });\n            return Promise.all(imageResolves);\n        }\n        return Promise.resolve(true);\n    }\n\n    getColControls() {\n        this.colControls = this.element?.children[0]?.children || [];\n    }\n\n    getIsInTable() {\n        if (this.selection && !this.readonly) {\n            const selection = this.editor.selection;\n            const startPosition = createTablePosition(this.editor);\n            const endPosition = createTablePosition(this.editor, selection.focus.path);\n            this.isInTable = startPosition.isInTable() && endPosition.isInTable();\n        } else {\n            this.isInTable = false;\n        }\n    }\n\n    initializeColumns() {\n        if (this.element.columns) {\n            const columns = [];\n            this.tableWrapper.nativeElement.querySelectorAll('col').forEach((ele: HTMLElement) => {\n                columns.push({ width: ele.offsetWidth });\n            });\n            // Editor container width changes, resulting in column widths no longer valid #WIK-6766\n            const warning = this.element.columns.some((col, index) => col.width !== columns[index]?.width);\n            if (warning) {\n                TheTransforms.setNode(this.editor, { columns }, this.element);\n            }\n        } else {\n            const tr = this.element.children[0] as TableRowElement;\n            const columns = tr.children.map(cell => {\n                return {\n                    width: this.tableWrapperWidth / tr.children.length\n                };\n            });\n            TheTransforms.setNode(this.editor, { columns }, this.element);\n        }\n    }\n\n    initializeRows() {\n        this.element.children.map((row, index) => {\n            if (!row.height) {\n                const element = TheEditor.toDOMNode(this.editor, row);\n                const height = getElementHeight(element);\n                TheTransforms.setNode(this.editor, { height }, row);\n            }\n        });\n    }\n\n    transformRowHeight(rowIndex: number) {\n        const rowElements = this.nativeElement.querySelector('tbody').children;\n        if (rowElements) {\n            const elements = [...rowElements] as HTMLTableRowElement[];\n            const operateRow = elements[rowIndex];\n\n            if (operateRow) {\n                const height = getElementHeight(operateRow);\n                TheTransforms.setNode(this.editor, { height }, this.element.children[rowIndex]);\n            }\n        }\n    }\n\n    transformColumnsWidth() {\n        const cols = [...this.nativeElement.querySelector('colgroup').children] as HTMLTableColElement[];\n        const columns: TheTableColumn[] = cols.map(col => {\n            return { width: getElementWidth(col) };\n        });\n        TheTransforms.setNode(this.editor, { columns }, this.element);\n    }\n\n    onColMousedown(event: MouseEvent, index: number) {\n        event.stopPropagation();\n        event.preventDefault();\n        if (!!this.selection && this.isInTable) {\n            this.tableStore.clearDangerousCells();\n            this.tableStore.selectColumn(this.editor, index, event);\n            if (this.tablePluginOptions.colSelect && typeof this.tablePluginOptions.colSelect === 'function') {\n                this.tablePluginOptions.colSelect(this.editor, {\n                    index,\n                    cells: this.selectedCells\n                });\n            }\n            this.tableService.afterSelectedCells(event.target as HTMLElement, this.element, this.isMobileMode);\n        }\n    }\n\n    onRowMousedown(event: MouseEvent, index: number) {\n        if (this.readonly) return;\n        event.stopPropagation();\n        event.preventDefault();\n        if (!this.isInTable) {\n            const path = TheEditor.findPath(this.editor, this.element);\n            Transforms.select(this.editor, path);\n        }\n        this.tableStore.selectRow(this.editor, index, event);\n        if (this.tablePluginOptions.rowSelect && typeof this.tablePluginOptions.rowSelect === 'function') {\n            this.tablePluginOptions.rowSelect(this.editor, {\n                index,\n                cells: this.selectedCells\n            });\n        }\n        this.tableService.afterSelectedCells(event.target as HTMLElement, this.element, this.isMobileMode);\n    }\n\n    onSelectTable(event: MouseEvent) {\n        event.stopPropagation();\n        event.preventDefault();\n        this.tableStore.selectTable(this.editor, event.metaKey);\n        if (this.tablePluginOptions.tableSelect && typeof this.tablePluginOptions.tableSelect === 'function') {\n            this.tablePluginOptions.tableSelect(this.editor, { table: this.element });\n        }\n        this.tableService.afterSelectedCells(event.target as HTMLElement, this.element, this.isMobileMode);\n    }\n\n    listenTableContextMenuEvent() {\n        this.ngZone.runOutsideAngular(() => {\n            fromEvent<MouseEvent>(this.theTableElement.nativeElement, 'contextmenu')\n                .pipe(takeUntil(this.destroy$))\n                .subscribe(event => {\n                    if (this.readonly) {\n                        return;\n                    }\n                    event.preventDefault();\n                    this.tableStore.isRightClicking = true;\n                    const cell = (event.target as HTMLElement).closest(SLA_TABLE_CELL_SELECTOR) as HTMLTableCellElement;\n                    if (!cell) {\n                        return;\n                    } else {\n                        if (!this.isInTable) {\n                            const node = AngularEditor.toSlateNode(this.editor, cell) as TableCellElement;\n                            const path = AngularEditor.findPath(this.editor, node);\n                            Transforms.select(this.editor, Editor.start(this.editor, path));\n                        }\n                        if (!cell.classList.contains('selected-cell')) {\n                            this.tableStore.selectCell(cell, this.editor, event.metaKey);\n                        }\n                    }\n                    if (!this.isMobileMode) {\n                        if (this.theTableContextMenuService.isOpened) {\n                            this.theTableContextMenuService\n                                .closeContextMenu()\n                                .pipe(take(1))\n                                .subscribe(() => {\n                                    this.theTableContextMenuService.openMenuList(event);\n                                });\n                        } else if (this.tableService.isOpened) {\n                            this.tableService\n                                .closeToolbar()\n                                .pipe(take(1))\n                                .subscribe(() => {\n                                    this.theTableContextMenuService.openMenuList(event);\n                                });\n                        } else {\n                            this.theTableContextMenuService.openMenuList(event);\n                        }\n                    }\n\n                    // patch for right click select next cell\n                    setTimeout(() => {\n                        Transforms.select(this.editor, Editor.start(this.editor, this.editor.selection));\n                    });\n                });\n        });\n    }\n\n    listenOnSelectedCells() {\n        merge(\n            fromEvent<MouseEvent>(document, 'mousedown').pipe(filter((e: MouseEvent) => e.button !== 2)),\n            fromEvent<KeyboardEvent>(document, 'keydown').pipe(\n                filter((e: KeyboardEvent) => {\n                    return !isVirtualKey(e);\n                })\n            )\n        )\n            .pipe(\n                filter((event: Event) => {\n                    if (isColorInput(event.target as HTMLElement)) {\n                        this.tableStore.isFocusedInput = true;\n                        return false;\n                    }\n                    if (isColorPanel(event.target as HTMLElement)) {\n                        return false;\n                    }\n\n                    if (this.editor.selection) {\n                        const selectedCellPositions = this.tableStore.getSelectedCellPositions();\n                        return selectedCellPositions?.length > 0;\n                    } else {\n                        if (event.type === 'keydown' && this.theTableContextMenuService.isOpened) {\n                            return false;\n                        }\n                    }\n                    return true;\n                }),\n                takeUntil(this.destroy$)\n            )\n            .subscribe((e: MouseEvent) => {\n                if (e.type === 'keydown') {\n                    TableEditor.clearCellsContent(this.editor);\n                }\n                const isCurrentTableElement = this.nativeElement.contains(e.target as HTMLElement);\n                if (!isCurrentTableElement || (!e.metaKey && !e.shiftKey)) {\n                    this.tableStore.clearSelectedCells();\n                }\n                if (!isCurrentTableElement) {\n                    this.tableStore.clearLastFocusPath();\n                }\n                this.theTableContextMenuService.closeContextMenu();\n            });\n    }\n\n    listenKeydownEvent() {\n        this.ngZone.runOutsideAngular(() => {\n            fromEvent<KeyboardEvent>(document, 'keydown')\n                .pipe(\n                    takeUntil(this.destroy$),\n                    filter((e: KeyboardEvent) => !!e && !this.readonly)\n                )\n                .subscribe((e: KeyboardEvent) => {\n                    if (this.isInTable) {\n                        if (isKeyHotkey('mod', e)) {\n                            this.tableService.handleKeydownForPointerSelection(e, this.tbodyNativeElement);\n                        }\n                        if (isKeyHotkey('shift', e)) {\n                            this.tableService.handleKeydownForAreaSelection(e, this.tbodyNativeElement);\n                        }\n                        // 处理单元格内 shift + up/down/left/right 行为\n                        moveSelectionFromCell(this.editor, e);\n\n                        // 触发上下左右键时，清除选中的单元格\n                        if (isKeyHotkey(['up', 'down', 'left', 'right'], e) && this.tableStore.selectCells?.length > 0) {\n                            this.tableStore.clearSelectedCells();\n                        }\n                    }\n                });\n        });\n    }\n\n    private listenSelectstartEvent() {\n        this.ngZone.runOutsideAngular(() => {\n            fromEvent<Event>(document, 'selectstart')\n                .pipe(takeUntil(this.destroy$))\n                .subscribe((event: KeyboardEvent) => {\n                    this.tableService.selectStartPreventDefault(event);\n                });\n        });\n    }\n\n    setStickyRowPointerEvents(pointerEventsStyle: string) {\n        if (!this.isFreezeRow) {\n            return;\n        }\n        const stickyRows = this.elementRef.nativeElement.querySelectorAll('.the-sticky-row');\n        for (const stiRow of stickyRows) {\n            this.renderer.setStyle(stiRow, 'pointer-events', pointerEventsStyle);\n        }\n    }\n\n    listenTableWrapperScroll() {\n        let timer;\n        fromEvent(this.tableWrapper.nativeElement, 'wheel', { passive: true })\n            .pipe(takeUntil(this.destroy$))\n            .subscribe(() => {\n                // 处理标题行固定时的滚动跟随\n                this.setStickyRowPointerEvents('none');\n                timer && clearTimeout(timer);\n                timer = setTimeout(() => {\n                    this.setStickyRowPointerEvents('auto');\n                    timer = null;\n                }, 200);\n            });\n\n        fromEvent(this.tableWrapper.nativeElement, 'scroll')\n            .pipe(takeUntil(this.destroy$))\n            .subscribe(() => {\n                const scrollbarContainer = this.horizontalScrollbarContainer.nativeElement;\n                scrollbarContainer.scrollLeft = this.tableWrapper.nativeElement.scrollLeft;\n                this.setTableScrollingShadow();\n                this.updateStickyRowScrollLeft();\n                this.setHeaderRowShadow();\n            });\n    }\n\n    updateStickyRowScrollLeft() {\n        // 判断是否出现固定标题行\n        if (this.isStickyTop) {\n            const stickyRows = this.elementRef.nativeElement.querySelectorAll('.the-sticky-row');\n            for (const stiRow of stickyRows) {\n                // 修复获取 scrollLeft 属性引起的浏览器重绘，导致跳动问题 #WIK-11038\n                requestAnimationFrame(() => {\n                    // 同步滚动状态到 .the-sticky-row\n                    stiRow.scrollLeft = this.tableWrapper.nativeElement.scrollLeft;\n                });\n            }\n        }\n    }\n\n    /*\n     * 编辑器滚动容器出现左右滚动时\n     */\n    setStickyElementLeftStyle() {\n        if (this.isFreezeRow) {\n            const stickyRows = this.elementRef.nativeElement.querySelectorAll('.the-sticky-row');\n            const cornerControl = this.cornerControl.nativeElement as HTMLElement;\n            const rowControl = this.rowControlsButtonWrapper.first?.nativeElement as HTMLElement;\n            const buffer = this.isInTable ? -TABLE_CONTROL : 0;\n            if (this.isStickyTop) {\n                this.getWrapperWidthAndLeft();\n                const controlButtonBorder = this.element.options?.numberedColumn ? 1 : 0;\n                stickyRows.forEach((element: HTMLElement) => {\n                    this.renderer.setStyle(\n                        element,\n                        'left',\n                        `${this.tableWrapperLeft + (this.readonly ? 0 : this.getColControlButtonWidth() - controlButtonBorder)}px`\n                    );\n                });\n                this.renderer.setStyle(cornerControl, 'left', `${this.tableWrapperLeft + buffer}px`);\n                rowControl && this.renderer.setStyle(rowControl, 'left', `${this.tableWrapperLeft + buffer}px`);\n            } else {\n                const stickyElements = [...stickyRows, cornerControl, rowControl];\n                stickyElements.forEach((element: HTMLElement) => {\n                    element && this.renderer.setStyle(element, 'left', null);\n                });\n            }\n        }\n    }\n\n    getColControlButtonWidth = () => {\n        let result = 0;\n        result += this.element?.options?.numberedColumn ? TABLE_NUMBER_COLUMN : 0;\n        return result;\n    };\n\n    trackByFnRowControls(index: number) {\n        return index;\n    }\n\n    trackByFnColControls(index: number) {\n        return index;\n    }\n\n    ngOnDestroy() {\n        super.ngOnDestroy();\n        this.tableService.closeToolbar();\n        this.theTableContextMenuService.closeContextMenu();\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    private initHorizontalScrollbar(): void {\n        if (!this.horizontalScrollbarContainer || !this.horizontalScrollbarContent || this.disabledHorizontalScrollbarFixed()) {\n            return;\n        }\n\n        this.bindScrollbarEvents();\n        this.updateHorizontalScrollbar();\n    }\n\n    // 监听横向滚动条滚动事件\n    private bindScrollbarEvents(): void {\n        if (!this.horizontalScrollbarContainer || !this.horizontalScrollbarContent || this.disabledHorizontalScrollbarFixed()) {\n            return;\n        }\n\n        // 滚动条滚动事件同步到表格\n        fromEvent(this.horizontalScrollbarContainer.nativeElement, 'scroll')\n            .pipe(takeUntil(this.destroy$))\n            .subscribe(() => {\n                const scrollLeft = this.horizontalScrollbarContainer.nativeElement.scrollLeft;\n                if (this.tableWrapper.nativeElement.scrollLeft !== scrollLeft) {\n                    this.tableWrapper.nativeElement.scrollLeft = scrollLeft;\n                }\n            });\n    }\n\n    private updateHorizontalScrollbar(): void {\n        this.setScrollbarWidth();\n        this.updateScrollbarFixedState();\n    }\n\n    private setScrollbarWidth(): void {\n        if (!this.tableWrapper || !this.horizontalScrollbarContent) {\n            return;\n        }\n\n        const tableWrapper = this.tableWrapper.nativeElement;\n        const scrollbarContent = this.horizontalScrollbarContent.nativeElement;\n        const hasHorizontalScroll = tableWrapper.scrollWidth > tableWrapper.clientWidth;\n\n        if (!hasHorizontalScroll) {\n            this.renderer.removeStyle(scrollbarContent, 'width');\n            return;\n        }\n        this.renderer.setStyle(scrollbarContent, 'width', `${tableWrapper.scrollWidth}px`);\n    }\n\n    // 更新横向滚动条固定状态\n    private updateScrollbarFixedState(): void {\n        if (\n            this.editor.options.disabledTableStickyScrollbar ||\n            !this.horizontalScrollbarContainer ||\n            this.disabledHorizontalScrollbarFixed()\n        ) {\n            return;\n        }\n\n        const tableRect = this.nativeElement.getBoundingClientRect();\n        const viewportBottom = this.getViewportBottom();\n        const scrollbarBottomPosition = tableRect.bottom;\n\n        // 是否在可视范围内\n        const isScrollbarOutOfView = scrollbarBottomPosition > viewportBottom && tableRect.top < viewportBottom;\n        this.setScrollbarFixed(isScrollbarOutOfView, viewportBottom);\n    }\n\n    private getViewportBottom(): number {\n        try {\n            const scrollContainer = this.contextService.getScrollContainer();\n            if (scrollContainer && scrollContainer !== document.documentElement && scrollContainer !== document.body) {\n                // 如果有自定义滚动容器且不是 html/body 元素，使用容器的可视高度\n                const containerRect = scrollContainer.getBoundingClientRect();\n                return containerRect.height > window.innerHeight ? window.innerHeight : containerRect.bottom;\n            } else if (scrollContainer === null) {\n                // 没有自定义滚动容器，使用 theEditor 的滚动容器\n                const theRect = this.contextService.getOptions().nativeElement.getBoundingClientRect();\n                // 判断大于视窗高度为了兼容 theEditor 不是滚动容器，且高度已经超过视窗高度，导致滚动条位置计算错误\n                return theRect.height > window.innerHeight ? window.innerHeight : theRect.bottom;\n            }\n            return window.innerHeight;\n        } catch (error) {\n            // 获取失败使用视窗高度\n            return window.innerHeight;\n        }\n    }\n\n    private setScrollbarFixed(fixed: boolean, viewportBottom: number): void {\n        if (!this.horizontalScrollbarContainer || this.disabledHorizontalScrollbarFixed()) {\n            return;\n        }\n\n        const scrollbar = this.horizontalScrollbarContainer.nativeElement;\n        const currentScrollLeft = scrollbar.scrollLeft;\n\n        if (fixed) {\n            const tableRect = this.nativeElement.getBoundingClientRect();\n            const tableElement = this.nativeElement as HTMLElement;\n            // 页面缩放比\n            const scaleX = tableRect.width && tableElement.offsetWidth ? tableRect.width / tableElement.offsetWidth : 1;\n            this.renderer.addClass(scrollbar, 'fixed');\n            this.renderer.setStyle(scrollbar, 'left', `${Math.max(0, tableRect.left / scaleX)}px`);\n            this.renderer.setStyle(scrollbar, 'width', `${tableRect.width / scaleX}px`);\n            this.renderer.setStyle(scrollbar, 'bottom', `${Math.max(0, window.innerHeight - viewportBottom)}px`);\n        } else {\n            this.renderer.removeClass(scrollbar, 'fixed');\n            this.renderer.removeStyle(scrollbar, 'left');\n            this.renderer.removeStyle(scrollbar, 'width');\n            this.renderer.removeStyle(scrollbar, 'bottom');\n        }\n\n        requestAnimationFrame(() => {\n            if (scrollbar.scrollLeft !== currentScrollLeft) {\n                scrollbar.scrollLeft = currentScrollLeft;\n            }\n        });\n    }\n}\n","<div class=\"the-table-container\" theColumnResize>\n  <div #tableRowControlsWrapper class=\"the-table-row-controls-wrapper\">\n    <div\n      class=\"the-table-corner-controls\"\n      #cornerControl\n      contenteditable=\"false\"\n      [ngClass]=\"{\n        visible: !readonly && (isInTable || tableStore.isRightClicking || tableStore.isFocusedInput),\n        'control-active': isSelectedAllCell,\n        dangerous: tableStore.isSelectedTable && tableStore.dangerousCells.length > 0\n      }\"\n    >\n      <div class=\"the-table-corner-button\" (pointerdown)=\"onSelectTable($event)\"></div>\n      @if (!(element | hasHeaderRow) && !isMobileMode) {\n        <div class=\"the-table-corner-controls-insert-row-marker\">\n          <the-table-insert-mark type=\"row\" [at]=\"0\" [tableStore]=\"tableStore\"></the-table-insert-mark>\n        </div>\n      }\n      @if (!element?.options?.headerColumn && !isMobileMode) {\n        <div class=\"the-table-corner-controls-insert-column-marker\">\n          <the-table-insert-mark type=\"column\" [at]=\"0\" [tableStore]=\"tableStore\"></the-table-insert-mark>\n        </div>\n      }\n    </div>\n    <div class=\"the-table-row-controls\">\n      <div class=\"the-table-row-controls-inner\" #rowControlsInner>\n        @for (control of rowControls; track trackByFnRowControls(i); let i = $index) {\n          <div\n            class=\"the-table-row-control-button-wrap\"\n            #rowControlsButtonWrapper\n            contenteditable=\"false\"\n            [ngClass]=\"{\n              'control-active': tableStore.selectedRowsIndex.includes(control.rowIndex),\n              dangerous: tableStore.dangerousRowsIndex.includes(control.rowIndex) && tableStore.dangerousCells.length > 0\n            }\"\n          >\n            @if (!readonly && (isInTable || tableStore.isRightClicking || tableStore.isFocusedInput) && !element?.options?.numberedColumn) {\n              <button\n                (pointerdown)=\"onRowMousedown($event, control.rowIndex)\"\n                type=\"button\"\n                contenteditable=\"false\"\n                [ngStyle]=\"{ height: control.height + 1 + 'px' }\"\n                class=\"the-table-row-controls-button the-table-controls-button\"\n              ></button>\n            }\n            @if (element?.options?.numberedColumn) {\n              <div\n                contenteditable=\"false\"\n                (pointerdown)=\"onRowMousedown($event, control.rowIndex)\"\n                class=\"the-table-numbered-controls-button\"\n                [ngStyle]=\"{ height: control.height + 1 + 'px' }\"\n              >\n                <p class=\"row-number d-flex align-items-center\">\n                  {{ (element | hasHeaderRow) && i === 0 ? '' : (element | hasHeaderRow) ? i : i + 1 }}\n                </p>\n              </div>\n            }\n            @if (!isMobileMode) {\n              <the-table-insert-mark type=\"row\" [at]=\"control.rowIndex + 1\" [tableStore]=\"tableStore\"> </the-table-insert-mark>\n            }\n          </div>\n        }\n      </div>\n    </div>\n  </div>\n  <div\n    class=\"the-table-wrapper\"\n    #tableWrapper\n    [ngClass]=\"{ 'the-table-numbered': $safeNavigationMigration(element?.options?.numberedColumn) }\"\n  >\n    <table class=\"the-table\" #theTable>\n      <colgroup #colgroup>\n        <!--控制序号列宽度-->\n        @if (readonly && element?.options?.numberedColumn) {\n          <col class=\"the-table-number-col\" />\n        }\n        @for (col of columns; track $index) {\n          <col [ngStyle]=\"{ width: col.width + 'px' }\" />\n        }\n      </colgroup>\n      <thead>\n        <tr class=\"the-table-col-controls-wrapper the-sticky-row\" #columnControlsWrapper>\n          @if (readonly && element?.options?.numberedColumn) {\n            <th class=\"the-table-number-col\"></th>\n          }\n          @for (control of colControls; track trackByFnColControls(i); let i = $index) {\n            <th\n              #colControl\n              class=\"the-table-col-control\"\n              contenteditable=\"false\"\n              [ngClass]=\"{\n                'control-active': tableStore.selectedColumnsIndex.includes(i),\n                dangerous: tableStore.dangerousColumnsIndex.includes(i) && tableStore.dangerousCells.length > 0,\n                'the-sticky-cell': i === 0 && isFreezeColumn\n              }\"\n              (pointerdown)=\"onColMousedown($event, i)\"\n            >\n              @if ((isInTable || tableStore.isRightClicking || tableStore.isFocusedInput) && !isMobileMode) {\n                <the-table-insert-mark type=\"column\" [at]=\"i + 1\" [tableStore]=\"tableStore\" [parentElement]=\"colControl\">\n                </the-table-insert-mark>\n              }\n            </th>\n          }\n        </tr>\n      </thead>\n      <tbody #tbody></tbody>\n      @if (!element?.options?.headerColumn) {\n        <div #headerRowLeftShadow class=\"header-row-shadow header-row-left-shadow\" contenteditable=\"false\"></div>\n      }\n      <div class=\"header-row-shadow header-row-right-shadow\" #headerRowRightShadow contenteditable=\"false\"></div>\n    </table>\n  </div>\n  <div contenteditable=\"false\" class=\"the-table-horizontal-scrollbar-container\" #horizontalScrollbarContainer>\n    <div class=\"the-table-horizontal-scrollbar-content\" #horizontalScrollbarContent></div>\n  </div>\n</div>\n","import { Editor, Transforms } from 'slate';\nimport { ElementKinds } from '../../constants';\nimport * as TheQueries from '../../queries';\nimport { ListEditor } from '../list/list.editor';\n\nexport const TodoItemEditor = {\n    isActive(editor: Editor) {\n        const [match] = TheQueries.getNodesByType(editor, ElementKinds.checkItem);\n        return !!match;\n    },\n    insertTodoItem(editor: Editor) {\n        if (!editor.selection) {\n            return;\n        }\n        const isActive = TodoItemEditor.isActive(editor);\n        const isNumberedList = ListEditor.isActive(editor, ElementKinds.numberedList);\n        const isBulletedList = ListEditor.isActive(editor, ElementKinds.bulletedList);\n\n        if (isActive) {\n            Transforms.setNodes(editor, {\n                type: ElementKinds.paragraph\n            });\n        } else {\n            if (isNumberedList || isBulletedList) {\n                ListEditor.unwrapList(editor);\n            }\n            Transforms.setNodes(editor, {\n                type: ElementKinds.checkItem\n            });\n        }\n    }\n};\n","import {\n    Component,\n    ElementRef,\n    HostListener,\n    OnInit,\n    TemplateRef,\n    ViewChild,\n    ViewContainerRef,\n    ChangeDetectionStrategy\n} from '@angular/core';\nimport { ThyAction } from 'ngx-tethys/action';\nimport {\n    ThyDropdownMenuItemActiveDirective,\n    ThyDropdownMenuItemDirective,\n    ThyDropdownMenuItemIconDirective,\n    ThyDropdownMenuItemNameDirective\n} from 'ngx-tethys/dropdown';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { ThyTooltipDirective } from 'ngx-tethys/tooltip';\nimport { Editor } from 'slate';\nimport { TheBaseToolbarDropdown } from '../../core/toolbar-item/base-toolbar-item';\nimport { ToolbarItem } from '../../interfaces';\n\n@Component({\n    selector: 'the-toolbar-vertical-align-item',\n    templateUrl: './toolbar-item.component.html',\n    host: {\n        class: 'the-toolbar-dropdown-container verticalAlign'\n    },\n    changeDetection: ChangeDetectionStrategy.Eager,\n    imports: [\n        ThyIcon,\n        ThyAction,\n        ThyTooltipDirective,\n        ThyDropdownMenuItemDirective,\n        ThyDropdownMenuItemIconDirective,\n        ThyDropdownMenuItemNameDirective,\n        ThyDropdownMenuItemActiveDirective\n    ]\n})\nexport class TheVerticalToolbarItem extends TheBaseToolbarDropdown implements OnInit {\n    dropdownPopoverRef: ThyPopoverRef<any>;\n\n    @ViewChild('VerticalAlignItems', { read: TemplateRef, static: true })\n    template: TemplateRef<any>;\n\n    get isOpened() {\n        return this.dropdownPopoverRef && this.dropdownPopoverRef.getOverlayRef() && this.dropdownPopoverRef.getOverlayRef().hasAttached();\n    }\n\n    @HostListener('document: mousedown', ['$event'])\n    handleDocumentMouseDown(event: MouseEvent) {\n        if (!this.elementRef.nativeElement.contains(event.target as HTMLElement)) {\n            this.close();\n        }\n    }\n\n    constructor(\n        public elementRef: ElementRef,\n        private thyPopover: ThyPopover,\n        private viewContainerRef: ViewContainerRef\n    ) {\n        super();\n    }\n\n    ngOnInit() {\n        if (!this.activeMenuItem) {\n            this.activeMenuItem = this.defaultDropdownItem;\n        }\n        this.disabled = this.toolbarItem?.disable ? this.toolbarItem?.disable(this.editor) : false;\n    }\n\n    menusActive(editor: Editor) {\n        return this.menus.find(i => {\n            if (this.editor?.selection && i?.active) {\n                return i?.active(editor);\n            }\n        });\n    }\n\n    execute(event: MouseEvent) {\n        super.execute(event);\n        if (this.editor?.readOnly || this.editor?.disabled) {\n            return;\n        }\n        this.openPopover();\n    }\n\n    itemMousedown(event: MouseEvent, item: ToolbarItem) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        this.close();\n\n        if (item?.execute) {\n            item?.execute(this.editor);\n        }\n    }\n\n    openPopover() {\n        this.dropdownPopoverRef = this.thyPopover.open(this.template, {\n            origin: this.elementRef,\n            panelClass: ['the-toolbar-dropdown-popover', this.toolbarItem?.key],\n            placement: 'bottomLeft',\n            offset: 10,\n            minWidth: 0,\n            viewContainerRef: this.viewContainerRef,\n            insideClosable: false,\n            hasBackdrop: false\n        });\n    }\n\n    close() {\n        if (this.dropdownPopoverRef) {\n            this.dropdownPopoverRef.close();\n        }\n    }\n}\n","<a\n  href=\"javascript:;\"\n  class=\"icon-mode link-with-down\"\n  thyAction\n  [thyActionIcon]=\"$safeNavigationMigration(activeMenuItem?.icon)\"\n  [thyActionActive]=\"isOpened\"\n  [thyTooltip]=\"$safeNavigationMigration(toolbarItem?.name)\"\n  thyTooltipPlacement=\"top\"\n  (mousedown)=\"execute($event)\"\n>\n  <thy-icon class=\"font-size-sm text-desc ml-1\" thyIconName=\"caret-down\"></thy-icon>\n</a>\n\n<ng-template #VerticalAlignItems>\n  <div class=\"thy-dropdown-menu\">\n    @for (menu of toolbarItem?.includes; track $index) {\n      <a\n        href=\"javascript:;\"\n        thyDropdownMenuItem\n        [thyDropdownMenuItemActive]=\"menu.key === activeMenuItem?.key\"\n        (mousedown)=\"itemMousedown($event, menu)\"\n      >\n        @if (menu.icon) {\n          <thy-icon thyDropdownMenuItemIcon [thyIconName]=\"$safeNavigationMigration(menu?.icon)\"></thy-icon>\n        }\n        <span thyDropdownMenuItemName>{{ menu.name }}</span>\n      </a>\n    }\n  </div>\n</ng-template>\n","import { createPluginFactory } from '../../core';\nimport { DropdownMode, ToolbarActionTypes, VerticalAlignment } from '../../constants';\nimport { PluginKeys, TheEditor, ToolbarItemType } from '../../interfaces';\nimport { TableEditor } from '../table/table.editor';\nimport { TheVerticalToolbarItem } from './toolbar-item.component';\nimport { Signal } from '@angular/core';\nimport { TheI18nTranslation } from '../../i18n';\n\nexport const VerticalAlignEditor = {\n    isVerticalActive(editor: TheEditor, alignment: VerticalAlignment) {\n        const tableCellAlign = TableEditor.isVerticalAlignActive(editor, alignment);\n        if (tableCellAlign !== null) {\n            return tableCellAlign;\n        }\n        return false;\n    },\n    setVerticalAlign(editor: TheEditor, alignment: VerticalAlignment) {\n        if (TableEditor.setVerticalAlign(editor, alignment)) {\n            return;\n        }\n    }\n};\n\nexport const createVerticalAlignPlugin = (locale: Signal<TheI18nTranslation>) =>\n    createPluginFactory({\n        key: PluginKeys.verticalAlign,\n        toolbarItems: [\n            {\n                key: ToolbarActionTypes.verticalAlign,\n                name: locale().verticalAlign,\n                type: ToolbarItemType.dropdown,\n                dropdownMode: DropdownMode.icon,\n                iconComponent: TheVerticalToolbarItem,\n                includes: [\n                    ToolbarActionTypes.verticalAlignTop,\n                    ToolbarActionTypes.verticalAlignMiddle,\n                    ToolbarActionTypes.verticalAlignBottom\n                ],\n                disable: editor => !TableEditor.isActive(editor)\n            },\n            {\n                key: ToolbarActionTypes.verticalAlignTop,\n                icon: 'align-top',\n                name: locale().verticalAlignTop,\n                execute: editor => VerticalAlignEditor.setVerticalAlign(editor, VerticalAlignment.top),\n                active: editor => VerticalAlignEditor.isVerticalActive(editor, VerticalAlignment.top)\n            },\n            {\n                key: ToolbarActionTypes.verticalAlignMiddle,\n                icon: 'align-middle',\n                name: locale().verticalAlignMiddle,\n                execute: editor => VerticalAlignEditor.setVerticalAlign(editor, VerticalAlignment.middle),\n                active: editor => VerticalAlignEditor.isVerticalActive(editor, VerticalAlignment.middle)\n            },\n            {\n                key: ToolbarActionTypes.verticalAlignBottom,\n                icon: 'align-bottom',\n                name: locale().verticalAlignBottom,\n                execute: editor => VerticalAlignEditor.setVerticalAlign(editor, VerticalAlignment.bottom),\n                active: editor => VerticalAlignEditor.isVerticalActive(editor, VerticalAlignment.bottom)\n            }\n        ]\n    })();\n","import { Editor, Element, Node, Path, Range, Transforms } from 'slate';\nimport { ElementKinds, ZERO_WIDTH_CHAR } from '../../constants';\nimport { InlineCodeElement } from '../../custom-types';\nimport * as TheTransforms from '../../transforms';\n\nexport const InlineCodeEditor = {\n    toggleInlineCode(editor, text?: string) {\n        const isActive = InlineCodeEditor.isInlineCodeActive(editor);\n        if (isActive) {\n            InlineCodeEditor.unwrapInlineCode(editor);\n            return;\n        }\n        if (Range.isCollapsed(editor.selection)) {\n            InlineCodeEditor.wrapInlineCode(editor, text);\n        } else {\n            const fragment = Node.fragment(editor, editor.selection)[0];\n            const selectNode = Node.get(fragment, []);\n            const selectText = Node.string(selectNode);\n            InlineCodeEditor.wrapInlineCode(editor, selectText);\n        }\n    },\n\n    wrapInlineCode(editor: Editor, text = '') {\n        if (InlineCodeEditor.isInlineCodeActive(editor)) {\n            InlineCodeEditor.unwrapInlineCode(editor);\n        }\n        const { selection } = editor;\n        const isCollapsed = selection && Range.isCollapsed(selection);\n        const inlineCode: InlineCodeElement = {\n            type: ElementKinds.inlineCode,\n            children: isCollapsed ? [{ text: text ? text : ZERO_WIDTH_CHAR }] : []\n        };\n        if (isCollapsed) {\n            TheTransforms.insertInlineElement(editor, inlineCode);\n        } else {\n            Transforms.wrapNodes(editor, inlineCode, { split: true });\n        }\n    },\n\n    unwrapInlineCode(editor: Editor) {\n        Transforms.unwrapNodes(editor, { match: n => Element.isElement(n) && n.type === ElementKinds.inlineCode });\n    },\n\n    isInlineCodeActive(editor: Editor, path?: Path) {\n        const [inlineCode] = Editor.nodes(editor, {\n            at: path ? path : editor.selection?.anchor.path,\n            match: n => Element.isElement(n) && n.type === ElementKinds.inlineCode\n        });\n        return !!inlineCode;\n    }\n};\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    HostBinding,\n    HostListener,\n    Input,\n    OnChanges,\n    OnInit,\n    Renderer2,\n    SimpleChanges,\n    ViewChild,\n    inject\n} from '@angular/core';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { Editor, Node, Range } from 'slate';\nimport { AngularEditor, EDITOR_TO_VIRTUAL_SCROLL_SELECTION } from 'slate-angular';\nimport { MarkTypes } from '../../../constants/node-types';\nimport * as TheQueries from '../../../queries';\nimport { isCleanEmptyParagraph } from '../../../utils/is-clean-empty-paragraph';\nimport { QuickInsertEditor } from '../quick-insert.editor';\n\n@Component({\n    selector: '[theQuickInsert]',\n    templateUrl: './quick-insert.component.html',\n    imports: [ThyIcon],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheQuickInsert implements OnInit, OnChanges {\n    @HostBinding('class') className = 'the-quick-insert';\n\n    @Input() editor: Editor;\n\n    @Input() isVisible = false;\n\n    defaultIconName = 'plus-circle-thin';\n\n    iconNameFill = 'plus-circle-thin-fill';\n\n    displayIconName = this.defaultIconName;\n\n    @ViewChild('iconElement', { read: ElementRef, static: false })\n    iconElement: ElementRef<any>;\n\n    @HostListener('mousedown', ['$event'])\n    handleMousedownNativeElement(event) {\n        event.preventDefault();\n        event.stopPropagation();\n    }\n\n    private cdr = inject(ChangeDetectorRef);\n    private renderer = inject(Renderer2);\n    private elementRef = inject(ElementRef<HTMLElement>);\n\n    ngOnInit(): void {\n        const { onChange } = this.editor;\n        this.editor.onChange = () => {\n            onChange();\n\n            if (this.editor && this.editor.options && !this.editor.options.readonly) {\n                // wait isOpenedMenu is updated\n                setTimeout(() => {\n                    this.updateIconDisplay();\n                }, 0);\n            }\n        };\n        this.updateIconDisplay();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.isVisible && !changes.isVisible.firstChange) {\n            this.updateIconDisplay();\n        }\n    }\n\n    public updateIconDisplay() {\n        const { editor } = this;\n        const virtualScrollSelection = EDITOR_TO_VIRTUAL_SCROLL_SELECTION.get(editor);\n        const conditionWithVirtualScroll =\n            !AngularEditor.isEnabledVirtualScroll(editor) ||\n            (editor.selection && virtualScrollSelection && Range.equals(virtualScrollSelection, editor.selection));\n        if (\n            this.isVisible &&\n            !QuickInsertEditor.isOpenedMenu(editor) &&\n            isCleanEmptyParagraph(editor) &&\n            conditionWithVirtualScroll &&\n            !this.hasExcludeAttribute() &&\n            !this.isRichMediaScope()\n        ) {\n            const block = Node.ancestor(editor, [editor?.selection?.anchor.path[0]]);\n            const rootNode: HTMLElement = AngularEditor.toDOMNode(editor, block);\n            const editorDom = AngularEditor.toDOMNode(editor, editor);\n            let top = rootNode.offsetTop;\n            if (getComputedStyle(editorDom).position === 'relative') {\n                top = rootNode.offsetTop + editorDom.offsetTop;\n            }\n            this.updatePosition(rootNode.offsetLeft, top);\n            return;\n        }\n        this.addHiddenClass();\n    }\n\n    private addHiddenClass() {\n        this.elementRef.nativeElement.classList.add('d-none');\n    }\n\n    private removeHiddenClass() {\n        this.elementRef.nativeElement.classList.remove('d-none');\n    }\n\n    private isRichMediaScope() {\n        const { editor } = this;\n        if (editor?.selection) {\n            const block = Node.ancestor(editor, [editor?.selection?.anchor.path[0]]);\n            const rootElement = AngularEditor.toDOMNode(editor, block);\n            const leafElement = rootElement.querySelector('[data-slate-leaf=\"true\"]');\n            const rootElementRect = rootElement.getBoundingClientRect();\n            const leafElementRect = leafElement.getBoundingClientRect();\n            return leafElementRect?.x !== rootElementRect?.x;\n        }\n        return false;\n    }\n\n    private hasExcludeAttribute() {\n        const marks = TheQueries.getSelectionMarks(this.editor);\n        const fontSizeMark: number = marks[MarkTypes.fontSize];\n        return fontSizeMark;\n    }\n\n    private updatePosition(left: number, top?: number) {\n        this.renderer.setStyle(this.elementRef.nativeElement, 'top', `${top}px`);\n        this.renderer.setStyle(this.elementRef.nativeElement, 'left', `${left}px`);\n        this.removeHiddenClass();\n    }\n\n    mouseEnter(event: MouseEvent) {\n        this.displayIconName = this.iconNameFill;\n        this.cdr.detectChanges();\n    }\n\n    mouseLeave(event: MouseEvent) {\n        this.displayIconName = this.defaultIconName;\n        this.cdr.detectChanges();\n    }\n\n    handleClick(event: MouseEvent) {\n        event.stopPropagation();\n        event.preventDefault();\n        // avoid popover is closed immediately\n        setTimeout(() => {\n            QuickInsertEditor.openMenu(this.editor)\n                .afterClosed()\n                .subscribe(() => {\n                    this.updateIconDisplay();\n                });\n            this.updateIconDisplay();\n        }, 100);\n    }\n}\n","<thy-icon\n  #iconElement\n  class=\"quick-insert-icon text-desc font-size-xlg\"\n  [thyIconName]=\"displayIconName\"\n  (mouseenter)=\"mouseEnter($event)\"\n  (mouseleave)=\"mouseLeave($event)\"\n  (mouseup)=\"handleClick($event)\"\n></thy-icon>\n","import { HeadingElement, HeadingFourElement, HeadingOneElement, HeadingThreeElement, HeadingTwoElement } from '../../custom-types';\nimport { TheEditor } from '../../interfaces/editor';\nimport { ElementKinds, HeaderLevelMap, HEADING_TYPES } from '../../constants/node-types';\nimport { Element, Editor, Path, Transforms } from 'slate';\n\nexport function isHeadingElement(element: Element): element is HeadingElement {\n    return HEADING_TYPES.includes(element.type);\n}\n\nexport function isStandardHeadingElement(\n    element: Element\n): element is HeadingOneElement | HeadingTwoElement | HeadingThreeElement | HeadingFourElement {\n    return isHeadingElement(element) && HeaderLevelMap[element.type] !== undefined;\n}\n\nexport function isStandardHeadingElementByType(type: string) {\n    return HeaderLevelMap[type] !== undefined;\n}\n\nexport function getFollowElements(editor: TheEditor, element: HeadingElement): Element[] {\n    const index = editor.children.indexOf(element);\n    const currentLevel = HeaderLevelMap[element.type];\n    const result: Element[] = [];\n    for (let i = index + 1; i < editor.children.length; i++) {\n        const targetElement = editor.children[i] as Element;\n        if (isStandardHeadingElement(targetElement) && HeaderLevelMap[targetElement.type] <= currentLevel) {\n            return result;\n        } else {\n            result.push(targetElement);\n        }\n    }\n    return result;\n}\n\nexport function getAllVisibleState(editor: Editor) {\n    let currentCollapsedHeading: null | HeadingElement = null;\n    let currentHeadingLevel: null | number = null;\n    const visibleStates = [];\n    const setCollapsedHeading = (targetElement: Element) => {\n        const isCollapsedHeading = isStandardHeadingElement(targetElement) && targetElement.isCollapsed;\n        if (isCollapsedHeading) {\n            currentCollapsedHeading = targetElement;\n            currentHeadingLevel = HeaderLevelMap[targetElement.type];\n        }\n    };\n    for (let i = 0; i < editor.children.length; i++) {\n        const targetElement = editor.children[i] as Element;\n        if (currentCollapsedHeading !== null && currentHeadingLevel !== null) {\n            const isEnd = isStandardHeadingElement(targetElement) && HeaderLevelMap[targetElement.type] <= currentHeadingLevel;\n            if (isEnd) {\n                currentCollapsedHeading = null;\n                currentHeadingLevel = null;\n                visibleStates.push(true);\n                setCollapsedHeading(targetElement);\n            } else {\n                visibleStates.push(false);\n                continue;\n            }\n        } else {\n            visibleStates.push(true);\n            setCollapsedHeading(targetElement);\n        }\n    }\n    return visibleStates;\n}\n\nexport function expandPreviousHeadings(editor: Editor, targetPath: Path) {\n    const relatedHeadingPaths = getPreviousRelatedHeadingElements(editor, targetPath);\n    relatedHeadingPaths?.forEach(path => {\n        Transforms.setNodes(editor, { isCollapsed: false } as Partial<Node>, { at: path });\n    });\n}\n\nexport function getPreviousRelatedHeadingElements(editor: Editor, path: Path): Path[] | null {\n    const index = path[0];\n    const originElement = editor.children[index] as Element;\n    let currentLevel = HeaderLevelMap[originElement.type] || HeaderLevelMap[ElementKinds.heading_1];\n    const linkedHeadingPaths: Path[] = [];\n    for (let i = index - 1; i >= 0; i--) {\n        const element = editor.children[i] as Element;\n        if (isStandardHeadingElement(element) && HeaderLevelMap[element.type] === currentLevel) {\n            if (element.isCollapsed) {\n                linkedHeadingPaths.push([i]);\n            }\n            return linkedHeadingPaths;\n        } else if (isStandardHeadingElement(element) && HeaderLevelMap[element.type] > currentLevel && element.isCollapsed) {\n            linkedHeadingPaths.push([i]);\n        }\n    }\n    return null;\n}\n\nexport function getCollapsedStandardHeadingAbove(editor: Editor, path: Path): Path[] {\n    const index = path[0];\n    const linkedHeadingPaths: Path[] = [];\n    for (let i = index - 1; i >= 0; i--) {\n        const element = editor.children[i] as Element;\n        if (isStandardHeadingElement(element)) {\n            if (element.isCollapsed) {\n                linkedHeadingPaths.push([i]);\n            }\n            if (editor.isVisible(element)) {\n                return linkedHeadingPaths;\n            }\n        }\n    }\n    return linkedHeadingPaths;\n}\n\nexport function getPreviousHeading(editor: Editor, path: Path, options?: { isFirst?: boolean }): Path[] {\n    const index = path[0];\n    const linkedHeadingPaths: Path[] = [];\n    for (let i = index - 1; i >= 0; i--) {\n        const element = editor.children[i] as Element;\n        if (isStandardHeadingElement(element) && editor.isVisible(element)) {\n            linkedHeadingPaths.push([i]);\n            if (options?.isFirst) {\n                return linkedHeadingPaths;\n            }\n        }\n    }\n    return linkedHeadingPaths;\n}\n","import { Component, Input, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { insertTable } from '../../plugins/table/transforms/insert-table';\nimport { TheEditor } from '../../interfaces';\nimport { TableOptions } from '../../plugins/table/table.types';\nimport { refocus } from '../../utils';\nimport { NgClass } from '@angular/common';\n\n@Component({\n    selector: 'table-select',\n    templateUrl: './table-select.component.html',\n    changeDetection: ChangeDetectionStrategy.Eager,\n    imports: [NgClass]\n})\nexport class TheTableSelect implements OnInit {\n    @Input() optionsParam: TableOptions;\n\n    @Input() editor: TheEditor;\n\n    @Input() beforeInsert = () => {};\n\n    tableData = new Array(10);\n\n    maxRowIndex = -1;\n\n    maxColIndex = -1;\n\n    constructor(private popoverRef: ThyPopoverRef<TheTableSelect>) {}\n\n    ngOnInit(): void {}\n\n    onSelectCells(rowIndex, colIndex) {\n        this.maxRowIndex = rowIndex;\n        this.maxColIndex = colIndex;\n    }\n\n    executeTable(event: MouseEvent, rowIndex: number, colIndex: number) {\n        event.preventDefault();\n        event.stopPropagation();\n        this.beforeInsert();\n        if (!this.editor.selection) {\n            refocus(this.editor);\n        }\n        const opts = new TableOptions(this.optionsParam);\n        insertTable(opts, this.editor, rowIndex + 1, colIndex + 1);\n        if (this.popoverRef) {\n            this.popoverRef.close();\n            this.maxColIndex = -1;\n            this.maxRowIndex = -1;\n        }\n    }\n}\n","<div class=\"table-selector-container\">\n  @for (item of tableData; track $index; let rowIndex = $index) {\n    <div class=\"selector-row\">\n      @for (item of tableData; track $index; let colIndex = $index) {\n        <span\n          [ngClass]=\"{ 'active-cell': rowIndex <= maxRowIndex && colIndex <= maxColIndex, 'selector-cell': true }\"\n          (mouseenter)=\"onSelectCells(rowIndex, colIndex)\"\n          (mousedown)=\"executeTable($event, rowIndex, colIndex)\"\n        >\n        </span>\n      }\n    </div>\n  }\n  <span class=\"selector-text\">{{ maxRowIndex + 1 }} x {{ maxColIndex + 1 }}</span>\n</div>\n","import {\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    HostBinding,\n    Input,\n    NgZone,\n    OnInit,\n    Signal,\n    ViewChildren,\n    inject,\n    viewChild,\n    ChangeDetectionStrategy\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyAction } from 'ngx-tethys/action';\nimport { ScrollToService } from 'ngx-tethys/core';\nimport { ThyDivider } from 'ngx-tethys/divider';\nimport { ThyDropdownDirective, ThyDropdownMenuComponent, ThyDropdownMenuGroup, ThyDropdownMenuItemDirective } from 'ngx-tethys/dropdown';\nimport { ThyEmptyModule } from 'ngx-tethys/empty';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyInputSearch } from 'ngx-tethys/input';\nimport { ThyPopoverDirective, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { ThyTooltipDirective } from 'ngx-tethys/tooltip';\nimport { Editor, Node, PathRef, Text, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { getTheDefaultPluginMenu, QUICK_INSERT_HOTKEY, ThePluginMenuItemType } from '../../constants';\nimport { buildPluginMenu, buildPluginMenuItemMap } from '../../core';\nimport { ThePluginMenu, ThePluginMenuGroup, ThePluginMenuItem, ThePluginMenuItemConfig, ThePluginMenuItemWrap } from '../../interfaces';\nimport { PluginMenuPipe } from '../../pipes';\nimport { QuickInsertEditor } from '../../plugins/public-api';\nimport { refocus } from '../../utils';\nimport { ThePreventDefaultDirective } from '../action/prevent-default';\nimport { TheListboxChangeEvent, TheListboxDirective, TheListboxGroupDirective, TheListboxOptionDirective } from '../listbox/listbox';\nimport { TheTableSelect } from '../table-select/table-select.component';\nimport { injectTranslations, TheI18nService, TheI18nTranslation } from '../../i18n';\nimport { ThyTag } from 'ngx-tethys/tag';\n\n@Component({\n    selector: 'the-plugin-menu',\n    templateUrl: 'plugin-menu.component.html',\n    changeDetection: ChangeDetectionStrategy.Eager,\n    imports: [\n        FormsModule,\n        ThyEmptyModule,\n        TheTableSelect,\n        ThyIcon,\n        ThyAction,\n        ThyDivider,\n        ThyInputSearch,\n        ThyDropdownMenuComponent,\n        ThyDropdownMenuGroup,\n        PluginMenuPipe,\n        ThyTooltipDirective,\n        ThyPopoverDirective,\n        TheListboxDirective,\n        ThyDropdownDirective,\n        TheListboxGroupDirective,\n        TheListboxOptionDirective,\n        ThePreventDefaultDirective,\n        ThyDropdownMenuItemDirective,\n        ThyTag\n    ]\n})\nexport class ThePluginMenuComponent implements OnInit {\n    @Input() editor: Editor;\n\n    @Input() theDisplaySearch: boolean = false;\n\n    @Input() thePluginMenu: ThePluginMenuItemConfig[];\n\n    @Input() sceneKey?: string;\n\n    @Input() subPanelClass: string | string[];\n\n    @Input() autoActiveFirstItem: boolean = true;\n\n    @HostBinding('class') containerClassName = `the-plugin-menu-container`;\n\n    @ViewChildren('dropdownTriggers', { read: ThyDropdownDirective })\n    dropdownTriggers: ThyDropdownDirective[];\n\n    locale: Signal<TheI18nTranslation> = injectTranslations(inject(TheI18nService));\n\n    listBox = viewChild(TheListboxDirective);\n\n    listBoxAutoActiveFirstItem = true;\n\n    pathRef: PathRef;\n\n    keyboardContainer: HTMLElement;\n\n    _pluginMenu: ThePluginMenu;\n\n    groupMenu: ThePluginMenu = [];\n\n    iconMenu: ThePluginMenu = [];\n\n    ThePluginMenuItemType = ThePluginMenuItemType;\n\n    keyWords: string;\n\n    thyMessage = this.locale().noData;\n\n    scrollContainer: HTMLElement;\n\n    searchGroup: ThePluginMenuGroup = {\n        groupName: this.locale().searchResult\n    };\n\n    expandPopoverOptions = {\n        placement: 'rightTop',\n        width: '262px',\n        minWidth: '262px'\n    };\n\n    tableSelectPopoverConfig = {\n        panelClass: 'plugin-menu-table-select-container',\n        minWidth: 0,\n        //  避免重写\n        originActiveClass: 'thy-popover-origin-active'\n    };\n\n    originKeywords: string;\n\n    public elementRef = inject(ElementRef<HTMLElement>);\n\n    private ngZone = inject(NgZone);\n\n    public cdr = inject(ChangeDetectorRef);\n\n    private thyPopoverRef = inject(ThyPopoverRef<ThePluginMenuComponent>);\n\n    ngOnInit() {\n        if (!this.autoActiveFirstItem || this.theDisplaySearch) {\n            this.listBoxAutoActiveFirstItem = false;\n        }\n        this.initializeSearch();\n        this.initializePluginMenu();\n        this.buildMenus();\n        setTimeout(() => {\n            this.scrollContainer = this.elementRef.nativeElement.querySelector('.the-plugin-menu-scroll-container');\n        }, 0);\n    }\n\n    initializeSearch() {\n        if (this.theDisplaySearch) {\n            this.keyboardContainer = this.elementRef.nativeElement;\n            setTimeout(() => {\n                // 记住位置\n                if (this.editor.selection) {\n                    this.pathRef = Editor.pathRef(this.editor, this.editor.selection.anchor.path);\n                }\n                this.elementRef.nativeElement.querySelector('input').focus();\n            }, 0);\n        } else {\n            this.keyboardContainer = AngularEditor.toDOMNode(this.editor, this.editor);\n        }\n    }\n\n    initializePluginMenu() {\n        const currentMenu = this.thePluginMenu || getTheDefaultPluginMenu(this.locale);\n        const menuItemsMap = buildPluginMenuItemMap(this.editor);\n        this._pluginMenu = buildPluginMenu(menuItemsMap, currentMenu);\n    }\n\n    buildMenus() {\n        this.iconMenu = [];\n        this.groupMenu = [];\n\n        this._pluginMenu.forEach((item: ThePluginMenuItemWrap) => {\n            const isHidden = item?.isHidden && item.isHidden(this.editor);\n\n            if (ThePluginMenu.isMenuItem(item)) {\n                item.isMenuItem = true;\n                item.disabled = item.isDisabled && item.isDisabled(this.editor);\n                if (this.keyWords && !isHidden && item.keywords && item.keywords?.includes(this.keyWords)) {\n                    this.groupMenu.push(item);\n                }\n                if (!isHidden && item.children && item.children.length > 0) {\n                    item.children?.forEach((child: ThePluginMenuItemWrap | 'divider') => {\n                        if (child === 'divider') return;\n\n                        child.isMenuItem = true;\n                        child.disabled = child.isDisabled && child.isDisabled(this.editor);\n\n                        const isHiddenChid = item.isHidden && item.isHidden(this.editor);\n                        if (this.keyWords && !isHiddenChid && child.keywords && child.keywords?.includes(this.keyWords)) {\n                            this.groupMenu.push(child);\n                        }\n                    });\n                }\n            }\n\n            if (!this.keyWords && !isHidden) {\n                item?.type === ThePluginMenuItemType.icon ? this.iconMenu.push(item) : this.groupMenu.push(item);\n            }\n        });\n\n        if (this.keyWords && this.groupMenu.length > 0) {\n            this.groupMenu.unshift(this.searchGroup);\n        }\n\n        if (!this.keyWords) {\n            const menus = [...this.groupMenu];\n            this.groupMenu = menus.filter((item: ThePluginMenuItemWrap, index: number) => {\n                const isGroupMenu = ThePluginMenu.isMenuGroup(item);\n                const nextMenu = menus[index + 1];\n                const isLastMenu = index === menus.length - 1;\n\n                if (\n                    (nextMenu && isGroupMenu && ThePluginMenu.isMenuGroup(nextMenu)) ||\n                    (isLastMenu && isGroupMenu) ||\n                    (item?.children && item?.children?.length <= 0)\n                ) {\n                    return false;\n                }\n\n                return true;\n            });\n        }\n\n        this.cdr.markForCheck();\n    }\n\n    listBoxOptionMouseenter(e: MouseEvent, menu: ThePluginMenuItem) {\n        e.preventDefault();\n        const listBox = this.listBox();\n        if (listBox) {\n            const activeOption = listBox.activeOption;\n            const newActiveOption = listBox.getOption(menu?.key);\n            listBox.setActiveItem(activeOption, newActiveOption, 'turn', 'mouse');\n        }\n    }\n\n    listBoxOptionMouseleave(e: MouseEvent, menu: ThePluginMenuItem) {\n        e.preventDefault();\n        const listBox = this.listBox();\n        listBox?.clearActiveItem();\n    }\n\n    handleItemSelection(menuItem: ThePluginMenuItem) {\n        if (menuItem.isDisabled && menuItem.isDisabled(this.editor)) {\n            return;\n        }\n        if (!this.editor.selection) {\n            refocus(this.editor);\n        }\n        if (!this.theDisplaySearch) {\n            menuItem?.removeKeywordsType === 'character' ? this.removeCharacter() : this.removeBlock();\n        }\n        menuItem.execute(this.editor);\n        this.thyPopoverRef.close();\n        QuickInsertEditor.updatePluginMenuRef(this.editor, null);\n    }\n\n    removeBlock = () => {\n        const node = Node.get(this.editor, this.editor.selection.anchor.path) as Text;\n        const nodeString = Node.string(node);\n        const isStartWithHotkey = nodeString.startsWith(QUICK_INSERT_HOTKEY);\n        const isIncludeKeywords = nodeString.toLocaleLowerCase().trim().includes(this.keyWords);\n        if (node && nodeString.length > 0 && (isStartWithHotkey || isIncludeKeywords)) {\n            Editor.deleteBackward(this.editor, { unit: 'block' });\n        }\n    };\n\n    removeCharacter = () => {\n        const node = Node.get(this.editor, this.editor.selection.anchor.path) as Text;\n        const nodeString = Node.string(node);\n        const isStartWithHotkey = nodeString.startsWith(QUICK_INSERT_HOTKEY) || nodeString.startsWith('#');\n        const isIncludeKeywords = nodeString.toLocaleLowerCase().trim().includes(this.keyWords);\n        if (this.originKeywords?.length > 0 && (isStartWithHotkey || isIncludeKeywords)) {\n            Transforms.delete(this.editor, { distance: this.originKeywords.length, reverse: true });\n        }\n    };\n\n    updateKeywords(keywords: string) {\n        if (this.autoActiveFirstItem) {\n            this.listBoxAutoActiveFirstItem = true;\n        }\n        this.originKeywords = keywords;\n        this.keyWords = keywords.toLowerCase().trim();\n        this.buildMenus();\n        if (this.scrollContainer) {\n            this.scrollContainer.scrollTop = 0;\n        }\n    }\n\n    listBoxChange(event: TheListboxChangeEvent) {\n        if (!event.option) {\n            return;\n        }\n\n        switch (event.type) {\n            case 'select':\n                this.handleItemSelection(event.option.theOptionValue as ThePluginMenuItem);\n                break;\n            case 'child':\n                const dropdownComponent = this.findDropdownTrigger(event.option.parentOption);\n                this.ngZone.run(() => {\n                    dropdownComponent.show();\n                });\n                break;\n            case 'parent':\n                const dropdown = this.findDropdownTrigger(event.option);\n                dropdown.hide();\n                break;\n            case 'turn':\n                ScrollToService.scrollToElement(event.option.elementRef.nativeElement, this.scrollContainer);\n                break;\n        }\n    }\n\n    findDropdownTrigger(option: TheListboxOptionDirective) {\n        const dropdown = this.dropdownTriggers.find(value => {\n            return value['elementRef'].nativeElement === option.elementRef.nativeElement;\n        });\n        return dropdown;\n    }\n\n    trackByFn(index: ThePluginMenuItem, item: any) {\n        return item?.key ?? index;\n    }\n}\n","@if (theDisplaySearch) {\n  <div class=\"menu-search px-5 pt-5 pb-2\">\n    <thy-input-search\n      [placeholder]=\"locale().search\"\n      thyIconPosition=\"after\"\n      [(ngModel)]=\"keyWords\"\n      (ngModelChange)=\"updateKeywords(keyWords)\"\n    >\n    </thy-input-search>\n  </div>\n}\n\n@if (groupMenu.length > 0) {\n  <div\n    class=\"thy-dropdown-menu the-plugin-menu-scroll-container pb-2 pt-0\"\n    theListBox\n    [keyboardContainer]=\"keyboardContainer\"\n    [autoActiveFirstItem]=\"listBoxAutoActiveFirstItem\"\n    (theListboxChange)=\"listBoxChange($event)\"\n  >\n    @if (iconMenu?.length > 0) {\n      <div theListboxGroup [horizontalColumn]=\"6\" class=\"icon-menu d-flex pl-5 py-1\">\n        @for (item of iconMenu; track trackByFn($index, item)) {\n          @if (item.type === ThePluginMenuItemType.icon) {\n            <a\n              href=\"javascript:;\"\n              class=\"mt-2\"\n              thyAction\n              theListboxOption\n              thePreventDefault\n              [theOptionValue]=\"item\"\n              [thyActionIcon]=\"item.icon\"\n              [thyTooltip]=\"$safeNavigationMigration(item?.name)\"\n              [thyDisabled]=\"item.disabled\"\n              [theOptionDisabled]=\"item.disabled\"\n              (mouseenter)=\"listBoxOptionMouseenter($event, item)\"\n              (mouseleave)=\"listBoxOptionMouseleave($event, item)\"\n              (click)=\"handleItemSelection(item)\"\n            ></a>\n          }\n        }\n      </div>\n      <thy-divider class=\"my-2\"></thy-divider>\n    }\n\n    <div theListboxGroup>\n      @for (item of groupMenu; track trackByFn($index, item)) {\n        @if (item.isMenuItem && !(item.children?.length > 0) && item.key !== 'table') {\n          <div\n            class=\"py-0\"\n            thyDropdownMenuItem\n            theListboxOption\n            thePreventDefault\n            [theOptionValue]=\"item\"\n            [thyDisabled]=\"item.disabled\"\n            [theOptionDisabled]=\"item.disabled\"\n            (mouseenter)=\"listBoxOptionMouseenter($event, item)\"\n            (mouseleave)=\"listBoxOptionMouseleave($event, item)\"\n            (click)=\"handleItemSelection(item)\"\n          >\n            @if (item?.menuIcon) {\n              <div class=\"menu-icon mr-2\">\n                <thy-icon [thyIconName]=\"item.menuIcon | getMenuIcon: sceneKey\"></thy-icon>\n              </div>\n            }\n            <div class=\"menu-content d-flex align-items-center\">\n              <div class=\"menu-item-title w-100\">\n                {{ item.name }}\n              </div>\n            </div>\n            @if (item.isDev) {\n              <thy-tag thyTheme=\"outline\" [thySize]=\"'sm'\" class=\"ml-2\">DEV</thy-tag>\n            }\n          </div>\n        }\n        @if (item.isMenuItem && item.children?.length > 0) {\n          <ng-container #hasExpanded>\n            <div\n              #dropdownTriggers\n              class=\"py-0\"\n              thyTrigger=\"hover\"\n              thyDropdownMenuItem\n              theListboxOption\n              thePreventDefault\n              [theOptionValue]=\"item\"\n              [thyDisabled]=\"item.disabled\"\n              [theOptionDisabled]=\"item.disabled\"\n              [thyDropdown]=\"expand\"\n              [thyPopoverOptions]=\"expandPopoverOptions\"\n              [thyPanelClass]=\"subPanelClass\"\n              (click)=\"handleItemSelection(item)\"\n            >\n              @if (item?.menuIcon) {\n                <div class=\"menu-icon mr-2\">\n                  <thy-icon [thyIconName]=\"item.menuIcon | getMenuIcon: sceneKey\"></thy-icon>\n                </div>\n              }\n              <div class=\"menu-content d-flex align-items-center\">\n                <div class=\"menu-item-title w-100\">\n                  {{ item.name }}\n                </div>\n              </div>\n              @if (item.children?.length > 0) {\n                <div>\n                  <thy-icon class=\"text-muted\" thyIconName=\"angle-right\"></thy-icon>\n                </div>\n              }\n              <thy-dropdown-menu #expand>\n                <div class=\"the-plugin-menu-container expand-menu\" theListboxGroup>\n                  @for (child of item.children; track trackByFn($index, child)) {\n                    @if (child.type === ThePluginMenuItemType.group) {\n                      <div\n                        class=\"py-0\"\n                        thyDropdownMenuItem\n                        theListboxOption\n                        thePreventDefault\n                        [theOptionDisabled]=\"item.disabled\"\n                        [thyDisabled]=\"child.disabled\"\n                        [theOptionValue]=\"child\"\n                        (mouseenter)=\"listBoxOptionMouseenter($event, child)\"\n                        (mouseleave)=\"listBoxOptionMouseleave($event, child)\"\n                        (click)=\"handleItemSelection(child)\"\n                      >\n                        @if (child?.menuIcon) {\n                          <div class=\"menu-icon mr-2\">\n                            <thy-icon [thyIconName]=\"child.menuIcon | getMenuIcon: sceneKey\"></thy-icon>\n                          </div>\n                        }\n                        <div class=\"menu-content d-flex align-items-center\">\n                          <div class=\"menu-item-title w-100\">\n                            {{ child.name }}\n                          </div>\n                        </div>\n                      </div>\n                    } @else if (child === 'divider') {\n                      <thy-divider class=\"my-2\"></thy-divider>\n                    }\n                  }\n                </div>\n              </thy-dropdown-menu>\n            </div>\n          </ng-container>\n        }\n        @if (item.isMenuItem && item.key === 'table') {\n          <div\n            #dropdownTriggers\n            class=\"py-0\"\n            thyPlacement=\"rightTop\"\n            thyTrigger=\"hover\"\n            thyDropdownMenuItem\n            theListboxOption\n            thePreventDefault\n            [theOptionValue]=\"item\"\n            [theOptionDisabled]=\"item.disabled\"\n            [thyDisabled]=\"item.disabled\"\n            [thyPopover]=\"tableSelect\"\n            [thyConfig]=\"tableSelectPopoverConfig\"\n            (mouseenter)=\"listBoxOptionMouseenter($event, item)\"\n            (mouseleave)=\"listBoxOptionMouseleave($event, item)\"\n            (click)=\"handleItemSelection(item)\"\n          >\n            <div class=\"menu-icon mr-2\">\n              <thy-icon [thyIconName]=\"item.menuIcon | getMenuIcon: sceneKey\"></thy-icon>\n            </div>\n            <div class=\"menu-content d-flex align-items-center\">\n              <div class=\"menu-item-title w-100\">\n                {{ item.name }}\n              </div>\n            </div>\n            <div>\n              <thy-icon class=\"text-muted\" thyIconName=\"angle-right\"></thy-icon>\n            </div>\n            <ng-template #tableSelect>\n              <table-select\n                class=\"plugin-menu-table the-table-selector-panel\"\n                [editor]=\"editor\"\n                [beforeInsert]=\"removeBlock\"\n              ></table-select>\n            </ng-template>\n          </div>\n        }\n        @if (!item.isMenuItem) {\n          <thy-dropdown-menu-group class=\"font-size-sm\" [thyTitle]=\"item.groupName\"></thy-dropdown-menu-group>\n        }\n      }\n    </div>\n  </div>\n} @else {\n  <div class=\"empty d-flex align-items-center justify-content-center\">\n    <thy-empty [thyMessage]=\"thyMessage\"></thy-empty>\n  </div>\n}\n","import { ScrollDispatcher } from '@angular/cdk/overlay';\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    Input,\n    NgZone,\n    OnDestroy,\n    OnInit,\n    ViewChild\n} from '@angular/core';\nimport { Subject, fromEvent, merge } from 'rxjs';\nimport { debounceTime, filter, takeUntil } from 'rxjs/operators';\nimport { Editor, Range as slateRange } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { ToolbarItem } from '../../interfaces';\nimport { TheContextService } from '../../services/context.service';\nimport { TheToolbarComponent } from '../toolbar/toolbar.component';\n\n@Component({\n    selector: 'the-inline-toolbar',\n    template: `<the-toolbar\n        #inlineToolbar\n        class=\"the-inline-toolbar\"\n        [editor]=\"editor\"\n        [toolbarItems]=\"toolbarItems\"\n        [isMore]=\"false\"\n    ></the-toolbar> `,\n    host: {\n        '[class.hide]': 'toolbarItems.length === 0'\n    },\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [TheToolbarComponent]\n})\nexport class TheInlineToolbar implements OnInit, OnDestroy {\n    @Input() editor: Editor;\n\n    @Input() toolbarItems: ToolbarItem[];\n\n    @ViewChild('inlineToolbar') inlineToolbar: TheToolbarComponent;\n\n    destroy$ = new Subject<void>();\n\n    constructor(\n        private elementRef: ElementRef<any>,\n        private scrollDispatcher: ScrollDispatcher,\n        private cdr: ChangeDetectorRef,\n        private ngZone: NgZone,\n        private contextService: TheContextService\n    ) {}\n\n    ngOnInit() {\n        this.scrollDispatcher\n            .scrolled()\n            .pipe(takeUntil(this.destroy$))\n            .subscribe(() => {\n                this.updateInlineToolbar();\n                this.cdr.detectChanges();\n            });\n        this.ngZone.runOutsideAngular(() => {\n            merge(\n                fromEvent(document, 'mouseup').pipe(filter((e: MouseEvent) => e.button !== 2)),\n                fromEvent(document, 'keyup').pipe(filter((e: KeyboardEvent) => !e.shiftKey))\n            )\n                .pipe(debounceTime(200), takeUntil(this.destroy$))\n                .subscribe(() => {\n                    this.updateInlineToolbar();\n                });\n        });\n    }\n\n    updateInlineToolbar() {\n        const inlineToolbar = this.elementRef.nativeElement.firstElementChild;\n        if (!inlineToolbar) {\n            return;\n        }\n        const { selection } = this.editor;\n        if (\n            !selection ||\n            (selection &&\n                (!AngularEditor.isFocused(this.editor) ||\n                    slateRange.isCollapsed(selection) ||\n                    Editor.string(this.editor, selection) === ''))\n        ) {\n            inlineToolbar.removeAttribute('style');\n            return;\n        }\n\n        const native = window.getSelection();\n        if (native.type !== 'None') {\n            const range = native.getRangeAt(0);\n            this.updatePosition(inlineToolbar, range);\n            this.inlineToolbar?.selectionChange(this.editor);\n            this.cdr.markForCheck();\n        }\n    }\n\n    updatePosition(toolbarElement: HTMLElement, range: Range) {\n        let boundary = range.getBoundingClientRect();\n        const startContainer = range.startContainer as HTMLElement;\n        if (!boundary || (boundary.height === 0 && boundary.width === 0 && startContainer === range.endContainer)) {\n            if (startContainer.nodeType === 1 && startContainer.querySelector('img')) {\n                boundary = startContainer.querySelector('img').getBoundingClientRect();\n            } else {\n                boundary = startContainer.getBoundingClientRect();\n            }\n        }\n        const editableElement = this.contextService.getEditableElement();\n        const editableRect = editableElement.getBoundingClientRect();\n        const toolbarHeight = toolbarElement.offsetHeight;\n        const toolbarWidth = toolbarElement.offsetWidth;\n        const halfOffsetWidth = toolbarWidth / 2;\n        const defaultLeft = -halfOffsetWidth;\n        const offsetLeft = boundary.left - editableRect.left;\n        const isTopLeft = offsetLeft - 30 > halfOffsetWidth; // 30: editable padding left\n        const isTopRight = editableRect.width - offsetLeft - boundary.width / 2 < halfOffsetWidth;\n        const positions: any = {};\n\n        positions.top = boundary.top - toolbarHeight;\n        positions.right = 'initial';\n        positions.left = boundary.left;\n\n        if (isTopLeft) {\n            positions.left = boundary.left + boundary.width / 2 + defaultLeft;\n        }\n\n        if (isTopRight) {\n            positions.left = boundary.right - toolbarWidth;\n        }\n\n        for (let key of Object.keys(positions)) {\n            toolbarElement.style[key] = positions[key] + (isNaN(positions[key]) ? '' : 'px');\n        }\n        toolbarElement.style.opacity = '1';\n    }\n\n    ngOnDestroy() {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n}\n","import { Overlay } from '@angular/cdk/overlay';\nimport { ChangeDetectorRef, ViewContainerRef } from '@angular/core';\nimport { TheiaConverter } from '@atinc/selene';\nimport { marked } from 'marked';\nimport { ThyPopover } from 'ngx-tethys/popover';\nimport { Editor, Element, Node, Text, Transforms } from 'slate';\nimport { AngularEditor, ClipboardData, getClipboardData } from 'slate-angular';\nimport { TheConversionHint } from '../../components';\nimport { ElementKinds } from '../../constants';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport { THE_EDITOR_CONVERSION_HINT_REF, getToolbarClass, recursionNodes } from '../../utils';\nimport { ImageEditor } from '../image/image.editor';\n\nexport const closeConversionHint = (editor: Editor) => {\n    const hintRef = THE_EDITOR_CONVERSION_HINT_REF.get(editor);\n    if (hintRef) {\n        hintRef.close();\n    }\n};\n\nexport const withDeserializeMd = <T extends Editor>(editor: T): T => {\n    const { customInsertFragmentData, onKeydown } = editor;\n\n    editor.onKeydown = (event: KeyboardEvent) => {\n        closeConversionHint(editor);\n        onKeydown(event);\n    };\n\n    editor.customInsertFragmentData = async (data: DataTransfer, contextClipboardData: ClipboardData) => {\n        const popover = editor.injector.get(ThyPopover);\n        const viewContainerRef = editor.injector.get(ViewContainerRef);\n        const cdr = editor.injector.get(ChangeDetectorRef);\n        const oldRange = editor.selection;\n        const clipboardData = await getClipboardData(data);\n        const plainFragment = clipboardData?.text;\n\n        closeConversionHint(editor);\n        if (plainFragment && isMarkdownSyntax(plainFragment) && !clipboardData?.elements) {\n            setTimeout(() => {\n                const overlay = editor.injector.get(Overlay);\n                const bodyElement = document.body;\n                const toolbarClass = getToolbarClass(editor);\n                const toolbarElement = document.querySelector(`.${toolbarClass}`) as HTMLElement;\n                const origin = toolbarElement ? toolbarElement : bodyElement;\n                const placement = toolbarElement ? 'top' : 'topRight';\n\n                const hintPopoverRef = popover.open(TheConversionHint, {\n                    initialState: {\n                        editor,\n                        conversion: () => {\n                            try {\n                                const html = marked(plainFragment.replace(/\\n```/g, '\\n\\n```'), { gfm: true }) as string;\n                                const htmlDom = new DOMParser().parseFromString(html, 'text/html');\n                                const fragment = TheiaConverter.convertToTheia(Array.from(htmlDom.body.children));\n\n                                if (!isUnformatted(fragment)) {\n                                    closeConversionHint(editor);\n\n                                    editor.undo();\n\n                                    setTimeout(() => {\n                                        Transforms.select(editor, oldRange);\n                                        // base 64 图片处理\n                                        recursionNodes(fragment, (node: Node) => {\n                                            const isImage = Element.isElement(node) && node.type === ElementKinds.image;\n                                            if (isImage) {\n                                                const isBase64 = ImageEditor.isBase64(node?.originUrl);\n                                                if (isBase64) {\n                                                    ImageEditor.handleBase64ImageElement(editor, node);\n                                                } else {\n                                                    ImageEditor.handleExternalImageElement(editor, node);\n                                                }\n                                            }\n                                        });\n                                        Transforms.insertFragment(editor, fragment);\n                                        AngularEditor.focus(editor);\n                                    });\n                                    return true;\n                                } else {\n                                    closeConversionHint(editor);\n                                }\n                            } catch (error) {\n                                closeConversionHint(editor);\n                            }\n                        }\n                    },\n                    origin,\n                    viewContainerRef,\n                    placement,\n                    offset: -100,\n                    minWidth: 0,\n                    hasBackdrop: false,\n                    backdropClosable: false,\n                    closeOnNavigation: false,\n                    outsideClosable: true,\n                    scrollStrategy: overlay.scrollStrategies.reposition()\n                });\n                THE_EDITOR_CONVERSION_HINT_REF.set(editor, hintPopoverRef);\n                cdr.markForCheck();\n            });\n        }\n        return customInsertFragmentData(data, contextClipboardData);\n    };\n    return editor;\n};\n\nexport const createDeserializeMdPlugin = createPluginFactory({\n    key: PluginKeys.deserializeMd,\n    withOverrides: withDeserializeMd\n});\n\nconst isUnformatted = (elements: Element[]) => {\n    return elements.every(\n        element =>\n            element.type === ElementKinds.default &&\n            element.children.every((node: Node) => {\n                return Text.isText(node) && Object.keys(node).length === 1;\n            })\n    );\n};\n\nconst isMarkdownSyntax = content => {\n    // https://github.com/Chalarangelo/parse-md-js/blob/master/parsemd.js\n    const codeBlockRegex = /((\\n\\t)(.*))+/g;\n    const inlineCodeRegex = /(`)(.*?)\\1/g;\n    const imageRegex = /!\\[([^\\[]+)\\]\\(([^\\)]+)\\)/g;\n    const linkRegex = /\\[([^\\[]+)\\]\\(([^\\)]+)\\)/g;\n    const headingRegex = /(#+\\s*)(.*)/g;\n    const boldItalicsRegex = /(\\*{1,2})(\\S+)\\1/g;\n    const strikethroughRegex = /(\\~\\~)(.*?)\\1/g;\n    const blockquoteRegex = /\\n(&gt;|\\>)(.*)/g;\n    const horizontalRuleRegex = /\\n((\\-{3,})|(={3,}))/g;\n    const unorderedListRegex = /(\\n\\s*(\\-|\\+)\\s.*)+/g;\n    const orderedListRegex = /(\\n\\s*([0-9]+\\.)\\s.*)+/g;\n    const paragraphRegex = /\\n+(?!<pre>)(?!<h)(?!<ul>)(?!<blockquote)(?!<hr)(?!\\t)([^\\n]+)\\n/g;\n    // from marked\n    const table =\n        /^\\s*([^\\s].*\\|.*)\\s{0,3}(?:\\|\\s*)?(:?-+:?\\s*(?:\\|\\s*:?-+:?\\s*)*)\\|?(?:\\s*((?:(?!|hr|heading|blockquote|code|fences|list|html).*(?:|$))*)*|$)/g;\n    const regexps = [\n        inlineCodeRegex,\n        imageRegex,\n        linkRegex,\n        headingRegex,\n        boldItalicsRegex,\n        strikethroughRegex,\n        blockquoteRegex,\n        horizontalRuleRegex,\n        unorderedListRegex,\n        orderedListRegex,\n        table\n    ];\n    return regexps.some(regexp => regexp.test(content));\n};\n","import { ChangeDetectionStrategy, Component, HostListener, inject, Input, OnDestroy, OnInit, Signal } from '@angular/core';\nimport { ThyAlert, ThyAlertActionItemDirective } from 'ngx-tethys/alert';\nimport { Editor } from 'slate';\nimport { closeConversionHint } from '../../plugins/deserialize/deserialize-md.plugin';\nimport { injectTranslations, TheI18nService, TheI18nTranslation } from '../../i18n';\n\n@Component({\n    selector: 'the-conversion-hint',\n    templateUrl: 'conversion-hint.component.html',\n    host: {\n        class: 'the-conversion-hint'\n    },\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [ThyAlert, ThyAlertActionItemDirective]\n})\nexport class TheConversionHint implements OnInit, OnDestroy {\n    @Input() editor: Editor;\n\n    @Input() conversion: () => void;\n\n    locale: Signal<TheI18nTranslation> = injectTranslations(inject(TheI18nService));\n\n    duration = 10000;\n    pauseOnHover = true;\n    closeTimer: any;\n\n    @HostListener('mouseenter') mouseenter() {\n        if (this.pauseOnHover) {\n            this.clearCloseTimer();\n        }\n    }\n\n    @HostListener('mouseleave') mouseleave() {\n        if (this.pauseOnHover) {\n            this.createCloseTimer();\n        }\n    }\n\n    ngOnInit() {\n        this.createCloseTimer();\n    }\n\n    ngOnDestroy() {\n        this.clearCloseTimer();\n    }\n\n    createCloseTimer() {\n        this.closeTimer = setInterval(() => {\n            clearInterval(this.closeTimer);\n            closeConversionHint(this.editor);\n        }, this.duration);\n    }\n\n    clearCloseTimer() {\n        clearInterval(this.closeTimer);\n    }\n}\n","<ng-container>\n  <thy-alert thyType=\"primary-weak\" thyIcon=\"info-circle-fill\" thyCloseable=\"true\" [thyMessage]=\"locale().conversionHint\">\n    <ng-template #operation>\n      <a href=\"javascript:;\" thyAlertActionItem (click)=\"conversion()\"> {{ locale().conversion }} </a>\n    </ng-template>\n  </thy-alert>\n</ng-container>\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectorRef, Component, ElementRef, HostBinding, HostListener, Input, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyColorPickerDirective } from 'ngx-tethys/color-picker';\nimport {\n    ThyDropdownMenuDivider,\n    ThyDropdownMenuItemDirective,\n    ThyDropdownMenuItemExtendIconDirective,\n    ThyDropdownMenuItemIconDirective,\n    ThyDropdownMenuItemNameDirective\n} from 'ngx-tethys/dropdown';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyInputNumber } from 'ngx-tethys/input-number';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { ThyEnterDirective, ThyStopPropagationDirective } from 'ngx-tethys/shared';\nimport { MenuEntity } from '../../plugins/table/table.types';\nimport { isColorPanel } from '../../utils/color-picker';\n\n@Component({\n    selector: 'the-contextmenu',\n    templateUrl: 'contextmenu.component.html',\n    changeDetection: ChangeDetectionStrategy.Eager,\n    imports: [\n        FormsModule,\n        NgTemplateOutlet,\n        ThyIcon,\n        ThyInputNumber,\n        ThyDropdownMenuDivider,\n        ThyEnterDirective,\n        ThyColorPickerDirective,\n        ThyStopPropagationDirective,\n        ThyDropdownMenuItemDirective,\n        ThyDropdownMenuItemIconDirective,\n        ThyDropdownMenuItemNameDirective,\n        ThyDropdownMenuItemExtendIconDirective\n    ]\n})\nexport class TheContextMenu implements OnInit {\n    @Input()\n    menuEntities: MenuEntity[] = [];\n\n    @Input()\n    actionHandle: (entity: MenuEntity) => void;\n\n    @Input()\n    activeHandle: (event: MouseEvent, entity: MenuEntity) => void;\n\n    @Input()\n    deactivateHandle: (event: MouseEvent, entity: MenuEntity) => void;\n\n    @HostBinding('class.the-overlay-menu-wrap')\n    wrap = true;\n\n    @HostListener('document: mousedown', ['$event'])\n    handleDocumentMouseDown(event: MouseEvent) {\n        if (isColorPanel(event.target as HTMLElement)) {\n            return;\n        }\n        if (!this.elementRef.nativeElement.contains(event.target as HTMLElement) && event.button !== 2) {\n            this.thyPopoverRef.close();\n        }\n    }\n\n    @HostListener('mousedown', ['$event'])\n    handleMouseDown(event: MouseEvent) {\n        event.preventDefault();\n        event.stopPropagation();\n    }\n\n    constructor(\n        public elementRef: ElementRef,\n        public cdr: ChangeDetectorRef,\n        private thyPopoverRef: ThyPopoverRef<TheContextMenu>\n    ) {}\n\n    ngOnInit() {}\n\n    itemMousedown(event: MouseEvent, entity: MenuEntity) {\n        event.preventDefault();\n        this.actionHandle(entity);\n        this.thyPopoverRef.close();\n    }\n\n    itemMouseleave(event: MouseEvent, entity: MenuEntity) {\n        event.preventDefault();\n        this.deactivateHandle(event, entity);\n    }\n\n    itemMouseenter(event: MouseEvent, entity: MenuEntity) {\n        event.preventDefault();\n        this.activeHandle(event, entity);\n    }\n\n    inputNumberFocus(e: Event) {\n        (e.target as HTMLElement).focus();\n    }\n\n    itemEnterHandle(e: MouseEvent, entity: MenuEntity) {\n        e.preventDefault();\n        e.stopPropagation();\n        this.actionHandle(entity);\n        this.thyPopoverRef.close();\n    }\n\n    changeColor(color: string, item: MenuEntity) {\n        item.backgroundColor = color;\n        item.activeHandle(undefined, item);\n    }\n}\n","<div class=\"thy-dropdown-menu\">\n  @for (menuItem of menuEntities; track $index) {\n    @if (menuItem.visibility && !menuItem?.isInputNumber && menuItem.key !== 'background-color') {\n      <ng-template [ngTemplateOutlet]=\"defaultMenuTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n    }\n    @if (menuItem.visibility && menuItem.key === 'background-color') {\n      <ng-template [ngTemplateOutlet]=\"backgroundColorTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n    }\n    @if (menuItem.visibility && menuItem?.isInputNumber) {\n      <ng-template [ngTemplateOutlet]=\"inputNumberMenuTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n    }\n    @if (menuItem.divider && menuItem.visibility) {\n      <thy-dropdown-menu-divider></thy-dropdown-menu-divider>\n    }\n  }\n</div>\n\n<ng-template #defaultMenuTemplate let-item>\n  <a\n    href=\"javascript:;\"\n    thyDropdownMenuItem\n    (mousedown)=\"itemMousedown($event, item)\"\n    (mouseenter)=\"itemMouseenter($event, item)\"\n    (mouseleave)=\"itemMouseleave($event, item)\"\n  >\n    <span thyDropdownMenuItemIcon>\n      <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n    </span>\n    <span thyDropdownMenuItemName>{{ item.name }}</span>\n    @if (item.extendIcon) {\n      <span thyDropdownMenuItemExtendIcon>\n        <thy-icon thyIconName=\"{{ item.extendIcon }}\"></thy-icon>\n      </span>\n    }\n  </a>\n</ng-template>\n\n<ng-template #backgroundColorTemplate let-item>\n  <a\n    href=\"javascript:;\"\n    thyDropdownMenuItem\n    thyColorPicker\n    thyTrigger=\"hover\"\n    thyPlacement=\"rightTop\"\n    [(ngModel)]=\"item.backgroundColor\"\n    (ngModelChange)=\"changeColor($event, item)\"\n    [thyHasBackdrop]=\"false\"\n  >\n    <span thyDropdownMenuItemIcon>\n      <thy-icon [thyIconName]=\"item.icon\" thyIconType=\"twotone\" [thyTwotoneColor]=\"item.backgroundColor\"></thy-icon>\n    </span>\n    <span thyDropdownMenuItemName>{{ item.name }}</span>\n    @if (item.extendIcon) {\n      <span thyDropdownMenuItemExtendIcon>\n        <thy-icon thyIconName=\"{{ item.extendIcon }}\"></thy-icon>\n      </span>\n    }\n  </a>\n</ng-template>\n\n<ng-template #inputNumberMenuTemplate let-item>\n  <a href=\"javascript:;\" class=\"the-input-number-menu\" thyDropdownMenuItem (click)=\"itemMousedown($event, item)\">\n    <span thyDropdownMenuItemIcon>\n      <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n    </span>\n    <span thyDropdownMenuItemName class=\"d-flex align-items-center\">\n      {{ item.name }}\n      <thy-input-number\n        #inputNumber\n        class=\"mx-2\"\n        thySize=\"sm\"\n        [(ngModel)]=\"item.count\"\n        [thyStep]=\"1\"\n        [thyMin]=\"1\"\n        (click)=\"inputNumberFocus($event)\"\n        (thyEnter)=\"itemEnterHandle($event, item)\"\n        thyStopPropagation\n      ></thy-input-number>\n      {{ item.nameSuffix }}\n    </span>\n  </a>\n</ng-template>\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { ElementRef } from '@angular/core';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { Position } from './event-dispatcher';\n\n/** Tracks state of resize events in progress. */\nexport class ResizeRef {\n    direction: 'X' | 'Y';\n    position: Position;\n    constructor(\n        readonly origin: ElementRef,\n        readonly overlayRef: OverlayRef,\n        readonly minWidthPx: number,\n        readonly maxWidthPx: number,\n        readonly minHeightPx: number,\n        readonly maxHeightPx: number,\n        readonly updateSizeAndOffset: () => void\n    ) {}\n\n    setDirection(direction: 'X' | 'Y') {\n        this.direction = direction;\n    }\n\n    setPosition(position: Position) {\n        this.position = position;\n    }\n}\n","import {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    DestroyRef,\n    ElementRef,\n    NgZone,\n    ViewContainerRef\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent } from 'rxjs';\nimport { distinctUntilChanged, filter, map, mapTo, pairwise, startWith, take, takeUntil } from 'rxjs/operators';\nimport { ColumnResizeNotifierSource } from './column-resize-notifier';\nimport { TableCellEventDispatcher } from './event-dispatcher';\nimport { ResizeRef } from './resize-ref';\n\n@Component({\n    host: { class: 'the-table-resize-overlay-thumb' },\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: '',\n    standalone: true\n})\nexport class TheColumnResizeOverlayHandle implements AfterViewInit {\n    constructor(\n        public elementRef: ElementRef<HTMLElement>,\n        public viewContainerRef: ViewContainerRef,\n        public cdr: ChangeDetectorRef,\n        public ngZone: NgZone,\n        public resizeRef: ResizeRef,\n        public eventDispatcher: TableCellEventDispatcher,\n        public resizeNotifier: ColumnResizeNotifierSource,\n        private destroyRef: DestroyRef\n    ) {}\n\n    ngAfterViewInit() {\n        this._listenForMouseEvents();\n        const overlayPane = this.elementRef.nativeElement.closest('.cdk-overlay-pane') as HTMLElement;\n        // 解决鼠标 hover 在拖拽线上阻断浏览器滚动\n        fromEvent(overlayPane, 'wheel', { passive: true })\n            .pipe(take(1))\n            .subscribe(() => {\n                overlayPane.style.pointerEvents = 'none';\n            });\n    }\n\n    private _listenForMouseEvents() {\n        this.ngZone.runOutsideAngular(() => {\n            fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mouseenter')\n                .pipe(mapTo(this.resizeRef.origin.nativeElement), takeUntilDestroyed(this.destroyRef))\n                .subscribe(cell => {\n                    this.eventDispatcher.tableCellHovered.next({ cell, position: this.resizeRef.position });\n                    this.resizeRef.updateSizeAndOffset();\n                });\n\n            fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mousedown')\n                .pipe(takeUntilDestroyed(this.destroyRef))\n                .subscribe(mousedownEvent => {\n                    mousedownEvent.preventDefault();\n                    this._dragStarted(mousedownEvent);\n                });\n        });\n    }\n\n    private _dragStarted(mousedownEvent: MouseEvent) {\n        if (mousedownEvent.button !== 0) {\n            return;\n        }\n        const mouseup = fromEvent<MouseEvent>(document, 'mouseup');\n        const mousemove = fromEvent<MouseEvent>(document, 'mousemove');\n        const escape = fromEvent<KeyboardEvent>(document, 'keyup').pipe(filter((event: KeyboardEvent) => event.key === 'Escape'));\n\n        const startX = mousedownEvent.clientX;\n        const startY = mousedownEvent.clientY;\n\n        const initialWidthSize = this._getOriginWidth();\n        const initialHeightSize = this._getOriginHeight();\n        const isXAxis = this._isXAxis();\n        let overlayOffset = this._getOverlayOffset();\n        let originOffset = this._getOriginOffset();\n        let size = isXAxis ? initialWidthSize : initialHeightSize;\n        this.updateResizeActive(true);\n        this._notifyResizeStarted();\n\n        mouseup.pipe(takeUntil(escape), takeUntilDestroyed(this.destroyRef)).subscribe(({ clientX, clientY }) => {\n            this._notifyResizeEnded(size, isXAxis ? clientX !== startX : clientY !== startY);\n        });\n\n        escape.pipe(takeUntil(mouseup), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n            this._notifyResizeEnded(size);\n        });\n\n        mousemove\n            .pipe(\n                map(({ clientX, clientY }) => {\n                    return {\n                        clientX,\n                        clientY\n                    };\n                }),\n                startWith({\n                    clientX: startX,\n                    clientY: startY\n                }),\n                distinctUntilChanged(),\n                pairwise(),\n                takeUntil(mouseup),\n                takeUntil(escape),\n                takeUntilDestroyed(this.destroyRef)\n            )\n            .subscribe(([prev, curr]) => {\n                let deltaSize = isXAxis ? curr.clientX - prev.clientX : curr.clientY - prev.clientY;\n                this.resizeNotifier.triggerResize.next({\n                    tableCell: this.resizeRef.origin.nativeElement,\n                    deltaSize,\n                    previousSize: size\n                });\n            });\n    }\n\n    protected updateResizeActive(active: boolean): void {\n        this.eventDispatcher.overlayHandleActiveForCell.next(\n            active ? { cell: this.resizeRef.origin.nativeElement!, position: this.resizeRef.position } : null\n        );\n    }\n\n    private _isXAxis(): boolean {\n        return this.resizeRef.direction === 'X';\n    }\n\n    private _getOriginHeight(): number {\n        return this.resizeRef.origin.nativeElement!.offsetHeight;\n    }\n\n    private _getOriginWidth(): number {\n        return this.resizeRef.origin.nativeElement!.offsetWidth;\n    }\n\n    private _getOriginOffset(): number {\n        return this.resizeRef.origin.nativeElement!.offsetLeft;\n    }\n\n    private _getOverlayOffset(): number {\n        return parseInt(this.resizeRef.overlayRef.overlayElement.style.left!, 10);\n    }\n\n    private _isLtr(): boolean {\n        return true;\n    }\n\n    private _notifyResizeEnded(size: number, completedSuccessfully = false): void {\n        this.updateResizeActive(false);\n\n        this.ngZone.run(() => {\n            const sizeMessage = { tableCell: this.resizeRef.origin.nativeElement };\n            if (completedSuccessfully) {\n                this.resizeNotifier.resizeCompleted.next(sizeMessage);\n            } else {\n                this.resizeNotifier.resizeCanceled.next(sizeMessage);\n            }\n        });\n    }\n\n    private _notifyResizeStarted(): void {\n        this.ngZone.run(() => {\n            const sizeMessage = { tableCell: this.resizeRef.origin.nativeElement };\n            this.resizeNotifier.resizeStarted.next(sizeMessage);\n        });\n    }\n}\n","import { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { coercePixelsFromCssValue, getColsTotalWidth, getElementWidth } from '../../utils/dom';\n\nexport class ColumnResizingStore {\n    constructor() {\n        this.resizeCols = [];\n    }\n    private direction: 'left' | 'right' | 'top' | 'bottom';\n    private resizeCols: { colElement: HTMLTableColElement; baseWidth: number }[];\n    private tableCols: { cols: HTMLTableColElement[]; baseWidth: number };\n\n    storeResizingCol(colElement: HTMLTableColElement) {\n        if (this.resizeCols.some(cache => cache.colElement === colElement)) {\n            return;\n        }\n        this.resizeCols.push({ colElement, baseWidth: getElementWidth(colElement) });\n    }\n\n    storeTableWidth(cols: HTMLTableColElement[]) {\n        if (!this.tableCols) {\n            this.tableCols = { cols, baseWidth: getColsTotalWidth(cols) };\n        }\n    }\n\n    cleanResizing() {\n        this.tableCols = null;\n        this.resizeCols = [];\n        this.direction = null;\n    }\n\n    restoreLeftCols(deltaX: number) {\n        let index = this.resizeCols.length - 1;\n        while (index >= 0 && deltaX > 0) {\n            const currentWidth = coercePixelsFromCssValue(this.resizeCols[index].colElement.style.width);\n            if (this.resizeCols[index].baseWidth > currentWidth) {\n                if (this.resizeCols[index].baseWidth > currentWidth + deltaX) {\n                    this.resizeCols[index].colElement.style.width = coerceCssPixelValue(currentWidth + deltaX);\n                    deltaX = 0;\n                } else {\n                    deltaX -= this.resizeCols[index].baseWidth - currentWidth;\n                    this.resizeCols[index].colElement.style.width = coerceCssPixelValue(this.resizeCols[index].baseWidth);\n                    this.popCol();\n                }\n            }\n            index--;\n        }\n        return deltaX;\n    }\n\n    restoreRightCols(deltaX: number) {\n        let index = this.resizeCols.length - 1;\n        while (index >= 0 && deltaX < 0) {\n            const currentWidth = coercePixelsFromCssValue(this.resizeCols[index].colElement.style.width);\n            if (this.resizeCols[index].baseWidth > currentWidth) {\n                if (this.resizeCols[index].baseWidth > currentWidth + Math.abs(deltaX)) {\n                    this.resizeCols[index].colElement.style.width = coerceCssPixelValue(currentWidth + Math.abs(deltaX));\n                    deltaX = 0;\n                } else {\n                    deltaX += this.resizeCols[index].baseWidth - currentWidth;\n                    this.resizeCols[index].colElement.style.width = coerceCssPixelValue(this.resizeCols[index].baseWidth);\n                    this.popCol();\n                }\n            }\n            index--;\n        }\n        return deltaX;\n    }\n\n    getScrollWidth(deltaX: number) {\n        if (this.tableCols) {\n            return getColsTotalWidth(this.tableCols.cols) - this.tableCols.baseWidth - Math.abs(deltaX);\n        }\n    }\n\n    isRestoring(deltaValue, isXAxis = true) {\n        return !this.isResizing(deltaValue, isXAxis);\n    }\n\n    isResizing(deltaValue, isXAxis = true) {\n        return this.direction === this.getDirection(deltaValue, isXAxis);\n    }\n\n    initDirection(deltaValue: number, isXAxis = true) {\n        if (this.resizeCols.length > 0) {\n            return;\n        }\n        this.direction = this.getDirection(deltaValue, isXAxis);\n    }\n\n    private getDirection(deltaValue, isXAxis = true) {\n        return isXAxis ? (deltaValue > 0 ? 'right' : 'left') : deltaValue > 0 ? 'bottom' : 'top';\n    }\n\n    private popCol() {\n        this.resizeCols.pop();\n    }\n}\n","import { Editor, Element, Transforms } from 'slate';\nimport { Alignment, DISABLED_OPERATE_TYPES, DropdownMode, ToolbarActionTypes } from '../../constants';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys, ToolbarItemType } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { AlignEditor } from './align.editor';\nimport { Signal } from '@angular/core';\nimport { TheI18nTranslation } from '../../i18n';\n\nexport const withAlign = <T extends Editor>(editor: T): T => {\n    const { deleteBackward } = editor;\n\n    editor.deleteBackward = unit => {\n        const { anchor } = editor.selection;\n        const node = TheQueries.anchorBlock(editor);\n        const isVoid = Element.isElement(node) && Editor.isVoid(editor, node);\n        const alignTypes = [Alignment.center, Alignment.right];\n        const startLine = Editor.start(editor, anchor.path);\n        const startLineRange = { anchor, focus: startLine };\n        const beforeText = Editor.string(editor, startLineRange);\n\n        if (!isVoid && node && node.align && alignTypes.includes(node.align) && beforeText === '') {\n            const align = alignTypes.indexOf(node.align) ? Alignment.center : undefined;\n            return Transforms.setNodes(editor, { align });\n        }\n        deleteBackward(unit);\n    };\n\n    return editor;\n};\n\nexport const createAlignPlugin = (locale: Signal<TheI18nTranslation>) =>\n    createPluginFactory({\n        key: PluginKeys.align,\n        withOverrides: withAlign,\n        toolbarItems: [\n            {\n                key: ToolbarActionTypes.alignType,\n                type: ToolbarItemType.dropdown,\n                dropdownMode: DropdownMode.icon,\n                dropdownItemKey: ToolbarActionTypes.alignLeft,\n                includes: [ToolbarActionTypes.alignLeft, ToolbarActionTypes.alignCenter, ToolbarActionTypes.alignRight],\n                name: locale().alignment,\n                disable: editor => AlignEditor.isDisabled(editor)\n            },\n            {\n                key: ToolbarActionTypes.alignLeft,\n                icon: 'align-left',\n                name: locale().alignLeft,\n                execute: editor => AlignEditor.setAlign(editor, Alignment.left),\n                active: editor => AlignEditor.isActive(editor, Alignment.left)\n            },\n            {\n                key: ToolbarActionTypes.alignCenter,\n                icon: 'align-center',\n                name: locale().alignCenter,\n                execute: editor => AlignEditor.setAlign(editor, Alignment.center),\n                active: editor => AlignEditor.isActive(editor, Alignment.center)\n            },\n            {\n                key: ToolbarActionTypes.alignRight,\n                icon: 'align-right',\n                name: locale().alignRight,\n                execute: editor => AlignEditor.setAlign(editor, Alignment.right),\n                active: editor => AlignEditor.isActive(editor, Alignment.right)\n            }\n        ],\n        options: {\n            disabledOperateTypes: [...DISABLED_OPERATE_TYPES]\n        }\n    })();\n","import { Editor, Transforms } from 'slate';\nimport { AutoFormatRule } from '../interfaces/auto-format';\nimport { BlockquoteEditor } from '../plugins/blockquote/blockquote.editor';\nimport { CodeEditor } from '../plugins/code/code.editor';\nimport { HeadingEditor } from '../plugins/heading/heading.editor';\nimport { InlineCodeEditor } from '../plugins/inline-code/inline-code.editor';\nimport { ListEditor } from '../plugins/list/list.editor';\nimport { TodoItemEditor } from '../plugins/todo-item/todo-item.editor';\nimport * as TheQueries from '../queries';\nimport { ElementKinds, MarkTypes } from './node-types';\n\nexport const defaultAutoFormatRules: AutoFormatRule[] = [\n    {\n        key: ElementKinds.heading_1,\n        type: ElementKinds.heading_1,\n        markup: '#',\n        format: (editor: Editor) => {\n            HeadingEditor.setHeading(editor, ElementKinds.heading_1);\n        }\n    },\n    {\n        key: ElementKinds.heading_2,\n        type: ElementKinds.heading_2,\n        markup: '##',\n        format: (editor: Editor) => {\n            HeadingEditor.setHeading(editor, ElementKinds.heading_2);\n        }\n    },\n    {\n        key: ElementKinds.heading_3,\n        type: ElementKinds.heading_3,\n        markup: '###',\n        format: (editor: Editor) => {\n            HeadingEditor.setHeading(editor, ElementKinds.heading_3);\n        }\n    },\n    {\n        key: ElementKinds.heading_4,\n        type: ElementKinds.heading_4,\n        markup: '####',\n        format: (editor: Editor) => {\n            HeadingEditor.setHeading(editor, ElementKinds.heading_4);\n        }\n    },\n    {\n        key: ElementKinds.heading_5,\n        type: ElementKinds.heading_5,\n        markup: '#####',\n        format: (editor: Editor) => {\n            HeadingEditor.setHeading(editor, ElementKinds.heading_5);\n        }\n    },\n    {\n        key: ElementKinds.heading_6,\n        type: ElementKinds.heading_6,\n        markup: '######',\n        format: (editor: Editor) => {\n            HeadingEditor.setHeading(editor, ElementKinds.heading_6);\n        }\n    },\n    {\n        key: ElementKinds.blockquote,\n        type: ElementKinds.blockquote,\n        markup: ['>'],\n        format: (editor: Editor) => {\n            BlockquoteEditor.toggleBlockquote(editor);\n        }\n    },\n    {\n        key: MarkTypes.bold,\n        type: MarkTypes.bold,\n        between: ['**', '**'],\n        mode: 'inline',\n        insertTrigger: true\n    },\n    {\n        key: `${MarkTypes.bold}__`,\n        type: MarkTypes.bold,\n        between: ['__', '__'],\n        mode: 'inline',\n        insertTrigger: true\n    },\n    {\n        key: MarkTypes.italic,\n        type: MarkTypes.italic,\n        between: ['*', '*'],\n        mode: 'inline',\n        insertTrigger: true\n    },\n    {\n        key: `${MarkTypes.italic}_`,\n        type: MarkTypes.italic,\n        between: ['_', '_'],\n        mode: 'inline',\n        insertTrigger: true\n    },\n    {\n        key: ElementKinds.inlineCode,\n        type: ElementKinds.inlineCode,\n        between: ['`', '`'],\n        mode: 'inline',\n        format: (editor: Editor, text: string) => {\n            InlineCodeEditor.toggleInlineCode(editor, text);\n            Transforms.select(editor, Editor.after(editor, editor.selection));\n        }\n    },\n    {\n        key: MarkTypes.strike,\n        type: MarkTypes.strike,\n        between: ['~~', '~~'],\n        mode: 'inline',\n        insertTrigger: true\n    },\n    {\n        key: ElementKinds.code,\n        type: ElementKinds.code,\n        markup: '```',\n        format: (editor: Editor) => {\n            CodeEditor.insertCode(editor);\n        }\n    },\n    {\n        key: ElementKinds.listItem,\n        type: ElementKinds.listItem,\n        markup: [],\n        match: (editor: Editor) => {\n            return TheQueries.isParagraph(editor) ? ['*', '-', '+'] : [];\n        },\n        format: (editor: Editor) => {\n            ListEditor.toggleList(editor, ElementKinds.bulletedList);\n        }\n    },\n    {\n        key: ElementKinds.numberedList,\n        type: ElementKinds.listItem,\n        markup: [],\n        match: (editor: Editor, textFromBlockStart: string) => {\n            return TheQueries.isParagraph(editor) && /^-?\\d+(\\.|\\))$/.test(textFromBlockStart) ? [textFromBlockStart] : [];\n        },\n        format: (editor: Editor, markup?: string[]) => {\n            let startIndex = 1;\n            if (markup) {\n                startIndex = Number(markup[0].split('.')[0]);\n                if (startIndex === 0) {\n                    startIndex = 1;\n                }\n            }\n            ListEditor.toggleList(editor, ElementKinds.numberedList, startIndex);\n        }\n    },\n    {\n        key: ElementKinds.checkItem,\n        type: ElementKinds.checkItem,\n        markup: [],\n        match: (editor: Editor) => {\n            return TheQueries.isParagraph(editor) ? ['[]'] : [];\n        },\n        format: (editor: Editor) => {\n            TodoItemEditor.insertTodoItem(editor);\n        }\n    },\n    {\n        key: ElementKinds.hr,\n        type: ElementKinds.hr,\n        markup: '---',\n        insertTrigger: true\n    }\n];\n","import { Editor, Location, Transforms, Element } from 'slate';\n\nexport const autoFormatBlock = (\n    editor: Editor,\n    type: string,\n    at: Location,\n    {\n        preFormat,\n        format\n    }: {\n        preFormat?: (editor: Editor) => void;\n        format?: (editor: Editor, markups?: string[]) => void;\n    },\n    markups?: string[]\n) => {\n    Transforms.delete(editor, { at });\n\n    if (preFormat) {\n        preFormat(editor);\n    }\n\n    if (!format) {\n        Transforms.setNodes(editor, { type }, { match: n => Element.isElement(n) && Editor.isBlock(editor, n) });\n    } else {\n        format(editor, markups);\n    }\n};\n","import { Editor, Range, Transforms } from 'slate';\nimport { MarkEditor } from '../../../plugins/mark/mark.editor';\nimport * as TheQueries from '../../../queries';\n\nexport const autoFormatInline = (\n    editor: MarkEditor,\n    {\n        type,\n        between,\n        markup,\n        ignoreTrim,\n        format\n    }: {\n        type: string;\n        between?: string[];\n        markup?: string;\n        ignoreTrim?: boolean;\n        format?: (editor: Editor, markup?: string) => void;\n    }\n) => {\n    const selection = editor.selection as Range;\n\n    const startMarkup = between ? between[0] : markup;\n    const endMarkup = between ? between[1] : '';\n\n    let endMarkupPointBefore = selection.anchor;\n    if (endMarkup) {\n        endMarkupPointBefore = TheQueries.getPointBefore(editor, selection, {\n            matchString: endMarkup\n        });\n        if (!endMarkupPointBefore) {\n            return false;\n        }\n    }\n\n    const startMarkupPointAfter = TheQueries.getPointBefore(editor, endMarkupPointBefore, {\n        matchString: startMarkup,\n        skipInvalid: true,\n        afterMatch: true\n    });\n\n    if (!startMarkupPointAfter) {\n        return false;\n    }\n\n    // found\n\n    const markupRange: Range = {\n        anchor: startMarkupPointAfter,\n        focus: endMarkupPointBefore\n    };\n\n    if (!ignoreTrim) {\n        const markupText = TheQueries.getText(editor, markupRange);\n        if (markupText.trim() !== markupText) {\n            return false;\n        }\n    }\n\n    // delete end markup\n    if (endMarkup) {\n        endMarkupPointBefore = TheQueries.getPointBefore(editor, selection, {\n            matchString: endMarkup\n        });\n        Transforms.delete(editor, {\n            at: {\n                anchor: endMarkupPointBefore,\n                focus: selection.anchor\n            }\n        });\n    }\n    const startMarkupPointBefore = TheQueries.getPointBefore(editor, selection, {\n        matchString: startMarkup,\n        skipInvalid: true\n    });\n\n    if (format) {\n        const markupText = TheQueries.getText(editor, markupRange);\n        format(editor, markupText);\n\n        // delete start to end selection\n        Transforms.delete(editor, {\n            at: {\n                anchor: startMarkupPointBefore,\n                focus: selection.anchor\n            }\n        });\n    } else {\n        // add mark to the text between the markups\n        Transforms.select(editor, markupRange);\n        editor.addMark(type, true);\n        Transforms.collapse(editor, { edge: 'end' });\n        editor.removeMark(type, false);\n\n        // delete start markup\n        Transforms.delete(editor, {\n            at: {\n                anchor: startMarkupPointBefore,\n                focus: startMarkupPointAfter\n            }\n        });\n    }\n\n    return true;\n};\n","import { Editor, Element, Range } from 'slate';\nimport { defaultAutoFormatRules } from '../../constants/auto-format-rules';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport { AutoFormatRule } from '../../interfaces/auto-format';\nimport * as TheQueries from '../../queries';\nimport { castArray } from '../../utils/cast-array';\nimport { autoFormatBlock } from './transforms/auto-format-block';\nimport { autoFormatInline } from './transforms/auto-format-inline';\n\nconst mergAutoFormateRules = (rules: AutoFormatRule[]) => {\n    const dataInfo = {};\n    rules.forEach(item => {\n        if (!dataInfo[item.type + item.key]) {\n            dataInfo[item.type + item.key] = {\n                ...item\n            };\n        }\n        dataInfo[item.type + item.key] = { ...dataInfo[item.type + item.key], ...item };\n    });\n    return dataInfo;\n};\n\nexport interface AutoFormatOptions {\n    autoFormatRules?: AutoFormatRule[];\n}\n\nexport const withAutoFormat = <T extends Editor>(editor: T) => {\n    const { insertText } = editor;\n    editor.insertText = text => {\n        let autoFormatRules = getPluginOptions<AutoFormatOptions>(editor, PluginKeys.autoFormat)?.autoFormatRules;\n        const extraRules = mergAutoFormateRules(autoFormatRules);\n        autoFormatRules = Object.values(extraRules);\n        if (!TheQueries.isCollapsed(editor.selection)) {\n            return insertText(text);\n        }\n\n        for (const { query, ...rule } of autoFormatRules) {\n            const {\n                trigger = ' ',\n                mode = 'block',\n                type,\n                markup,\n                preFormat,\n                format,\n                match,\n                between,\n                ignoreTrim,\n                insertTrigger,\n                allowSameTypeAbove = false,\n                triggerAtBlockStart = true\n            } = rule;\n\n            if (query && !query(editor, rule)) continue;\n\n            const triggers: string[] = castArray(trigger);\n\n            // Check trigger\n            if (!triggers.includes(text)) continue;\n\n            const valid = () => insertTrigger && insertText(text);\n\n            if (mode === 'block') {\n                let markups: string[] = castArray(markup);\n                let markupRange: Range | undefined;\n\n                if (triggerAtBlockStart) {\n                    markupRange = TheQueries.getRangeFromBlockStart(editor) as Range;\n\n                    // Don't autoformat if there is void nodes.\n                    const hasVoidNode = TheQueries.someNode(editor, {\n                        at: markupRange,\n                        match: n => Element.isElement(n) && Editor.isVoid(editor, n)\n                    });\n                    if (hasVoidNode) continue;\n\n                    const textFromBlockStart = TheQueries.getText(editor, markupRange);\n                    if (match) {\n                        markups = match(editor, textFromBlockStart);\n                    }\n                    if (!markups.includes(textFromBlockStart)) continue;\n                } else {\n                    markupRange = TheQueries.getRangeBefore(editor, editor.selection as Range, {\n                        matchString: markup,\n                        skipInvalid: true\n                    });\n                    if (!markupRange) continue;\n\n                    const blockAbovePath = TheQueries.getBlockAbove(editor)?.[1];\n                    if (!blockAbovePath) continue;\n\n                    // If the markup is not at the start, insert break before autoformatting.\n                    if (!Editor.isStart(editor, markupRange.anchor, blockAbovePath)) {\n                        editor.insertBreak();\n                    }\n                }\n\n                if (!allowSameTypeAbove) {\n                    // Don't autoformat if already in a block of the same type.\n                    const isBelowSameBlockType = TheQueries.someNode(editor, { match: { type } });\n                    if (isBelowSameBlockType) continue;\n                }\n\n                // Start of the block\n                autoFormatBlock(\n                    editor,\n                    type,\n                    markupRange,\n                    {\n                        preFormat,\n                        format\n                    },\n                    markups\n                );\n                return valid();\n            }\n\n            if (mode === 'inline') {\n                if (\n                    autoFormatInline(editor, {\n                        type,\n                        between,\n                        ignoreTrim,\n                        format,\n                        markup: Array.isArray(markup) ? markup[0] : markup\n                    })\n                ) {\n                    return valid();\n                }\n            }\n        }\n\n        insertText(text);\n    };\n\n    return editor;\n};\n\nexport const createAutoFormatPlugin = createPluginFactory<AutoFormatOptions>({\n    key: PluginKeys.autoFormat,\n    withOverrides: withAutoFormat,\n    options: {\n        autoFormatRules: defaultAutoFormatRules\n    }\n});\n","import { BaseElementFlavour, getBlockCardByNativeElement, SLATE_BLOCK_CARD_CLASS_NAME } from 'slate-angular';\nimport { Editor, Element } from 'slate';\nimport { isGlobalCollapsed } from '../queries/is-global-collapsed';\nimport { toggleHeadingRelatedElement } from '../utils/dom';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nexport abstract class TheBaseFlavourElement<T extends Element = Element, K extends Editor = Editor> extends BaseElementFlavour<T, K> {\n    destroy$ = new Subject<void>();\n\n    takeUntilDestroyed<T>() {\n        return takeUntil<T>(this.destroy$);\n    }\n\n    toggleClassNames() {\n        if (this.selection && this.editor && this.editor.isVoid(this.element)) {\n            this.nativeElement.classList.add(`slate-selected-element`);\n            if (this.isCollapsed && isGlobalCollapsed(this.editor)) {\n                this.nativeElement.classList.add(`slate-focus-element`);\n            } else {\n                this.nativeElement.classList.remove(`slate-focus-element`);\n            }\n        } else {\n            this.nativeElement.classList.remove(`slate-selected-element`);\n            this.nativeElement.classList.remove(`slate-focus-element`);\n        }\n    }\n\n    toggleIndent() {\n        if (this.element?.indent) {\n            this.nativeElement.setAttribute('the-indent', this.element.indent.toString());\n        } else {\n            this.nativeElement.removeAttribute('the-indent');\n        }\n    }\n\n    toggleStyles() {\n        if (this.element?.align) {\n            this.nativeElement.style.textAlign = this.element.align as string;\n        } else {\n            this.nativeElement.style.textAlign = '';\n        }\n        if (this.element?.textIndent) {\n            this.nativeElement.style.textIndent = this.element.textIndent + 'em';\n        } else {\n            this.nativeElement.style.textIndent = '';\n        }\n    }\n\n    render() {\n        this.context.attributes['data-slate-key'] = this.context.element.key as string;\n        const nativeElement = this.createNativeElement();\n        this.nativeElement = nativeElement;\n        const blockClass = this.editor.isInline(this.element) ? 'slate-inline-block' : 'slate-block';\n        this.nativeElement.classList.add(`slate-element-${this.element.type}`, blockClass);\n        this.toggleClassNames();\n        this.toggleStyles();\n    }\n\n    onInit(): void {\n        super.onInit();\n        if (this.editor && !this.editor.options.enableVirtualScroll) {\n            const isVisible = this.editor.isVisible(this.element);\n            const isBlockCard = this.editor.isBlockCard(this.element);\n            if (!isVisible) {\n                if (isBlockCard) {\n                    setTimeout(() => {\n                        toggleHeadingRelatedElement(this.editor, this.element, isVisible);\n                    }, 0);\n                } else {\n                    toggleHeadingRelatedElement(this.editor, this.element, isVisible);\n                }\n            }\n        }\n    }\n\n    rerender() {\n        this.toggleClassNames();\n        this.toggleStyles();\n    }\n\n    abstract createNativeElement(): HTMLElement;\n\n    onDestroy(): void {\n        super.onDestroy();\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    afterViewInit() {\n        super.afterViewInit();\n        const isBlockCard = this.editor.isBlockCard(this.element);\n        if (isBlockCard) {\n            const blockCardElement = getBlockCardByNativeElement(this.nativeElement);\n            const blockCardClass = `${SLATE_BLOCK_CARD_CLASS_NAME}-${this.element.type}`;\n            if (blockCardElement && !blockCardElement.classList.contains(blockCardClass)) {\n                blockCardElement.classList.add(blockCardClass);\n            }\n        }\n    }\n}\n","import { TheBaseFlavourElement } from '../../interfaces/base-element.flavour';\n\nexport class TheBlockquoteFlavour extends TheBaseFlavourElement {\n    createNativeElement(): HTMLElement {\n        const element = document.createElement('blockquote');\n        return element;\n    }\n}\n","import { Editor, Element, Transforms } from 'slate';\nimport { ElementKinds, PluginMenuIcons, ThePluginMenuItemType } from '../../constants';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\nimport { createEmptyParagraph } from '../../utils';\nimport { BlockquoteEditor } from './blockquote.editor';\nimport { Signal } from '@angular/core';\nimport { TheI18nTranslation } from '../../i18n';\nimport { TheBlockquoteFlavour } from './blockquote.flavour';\n\nexport const withBlockquote = <T extends Editor>(editor: T): T => {\n    const { renderElement, deleteBackward, insertBreak, isContainer } = editor;\n\n    editor.renderElement = (element: Element) => {\n        if (element.type === ElementKinds.blockquote) {\n            return TheBlockquoteFlavour;\n        }\n        return renderElement(element);\n    };\n\n    editor.deleteBackward = unit => {\n        const aboveResult = Editor.above<Element>(editor, {\n            match: n => Element.isElement(n) && Editor.isBlock(editor, n) && n.type === ElementKinds.blockquote\n        });\n        if (!aboveResult) {\n            return deleteBackward(unit);\n        }\n        const hasHandled = TheTransforms.handleContinualDeleteBackward(editor, aboveResult, ElementKinds.blockquote);\n        if (hasHandled) {\n            return;\n        }\n        return deleteBackward(unit);\n    };\n\n    editor.insertBreak = () => {\n        const lowestBlock = TheQueries.anchorBlock(editor);\n\n        if (!lowestBlock) {\n            insertBreak();\n            return;\n        }\n        const hasHandled = TheTransforms.handleContinualInsertBreak(editor, lowestBlock, ElementKinds.blockquote);\n        if (hasHandled) {\n            return;\n        }\n        const voidEntry = Editor.above<Element>(editor, {\n            match: n => Element.isElement(n) && Editor.isBlock(editor, n) && Editor.isVoid(editor, n)\n        });\n        if (voidEntry && voidEntry[0]) {\n            Transforms.insertNodes(editor, createEmptyParagraph());\n            return;\n        }\n        return insertBreak();\n    };\n\n    editor.isContainer = (element: Element) => {\n        return element.type === ElementKinds.blockquote ? true : isContainer(element);\n    };\n\n    return editor;\n};\n\nexport const createBlockquotePlugin = (locale: Signal<TheI18nTranslation>) =>\n    createPluginFactory({\n        key: PluginKeys.blockquote,\n        withOverrides: withBlockquote,\n        toolbarItems: [\n            {\n                key: ElementKinds.blockquote,\n                icon: 'blockquote',\n                name: locale().blockquote,\n                active: editor => TheQueries.isBlockActive(editor, ElementKinds.blockquote),\n                execute: editor => BlockquoteEditor.toggleBlockquote(editor)\n            }\n        ],\n        menuItems: [\n            {\n                key: ElementKinds.blockquote,\n                type: ThePluginMenuItemType.group,\n                keywords: `yy,yinyong,quote,${locale().blockquote}`,\n                active: editor => TheQueries.isBlockActive(editor, ElementKinds.blockquote),\n                execute: editor => BlockquoteEditor.toggleBlockquote(editor),\n                name: locale().blockquote,\n                description: locale().blockquoteDesc,\n                menuIcon: PluginMenuIcons.blockquote,\n                displayKey: '/yy'\n            }\n        ],\n        options: {\n            allowParentTypes: [ElementKinds.tableCell]\n        }\n    })();\n","import { Editor, Element } from 'slate';\nimport { OriginEvent } from 'slate-angular';\nimport {\n    CODEMIRROR_DEFAULT_MAX_HEIGHT,\n    CODEMIRROR_PADDING_TOP,\n    ElementKinds,\n    PluginMenuIcons,\n    ROOT_ELEMENT_MARGIN_BOTTOM,\n    ThePluginMenuItemType\n} from '../../constants';\nimport { PluginKeys } from '../../interfaces';\nimport { createPluginFactory } from '../../core';\nimport * as TheQueries from '../../queries';\nimport { setClipboardDataByDom } from '../../utils';\nimport { TheCode } from './code.component';\nimport { CodeEditor } from './code.editor';\nimport { Signal } from '@angular/core';\nimport { TheI18nTranslation } from '../../i18n';\n\nexport const withCode = <T extends Editor>(editor: T): T => {\n    const { isVoid, isBlockCard, renderElement, setFragmentData, getRoughHeight } = editor;\n\n    editor.isVoid = (element: Element) => {\n        return element.type === ElementKinds.code ? true : isVoid(element);\n    };\n\n    editor.isBlockCard = (element: Element) => {\n        if (element && element.type === ElementKinds.code) {\n            return true;\n        }\n        return isBlockCard(element);\n    };\n\n    editor.renderElement = (element: Element) => {\n        if (element.type === ElementKinds.code) {\n            return TheCode;\n        }\n        return renderElement(element);\n    };\n\n    editor.setFragmentData = (data: DataTransfer, originEvent?: OriginEvent) => {\n        const { selection } = editor;\n        const [start] = Editor.edges(editor, selection);\n        if (TheQueries.isNodeTypeIn(editor, [ElementKinds.code], { at: start })) {\n            const [codeNode] = TheQueries.getAboveByType(editor, ElementKinds.code);\n            setClipboardDataByDom(editor, codeNode as Element, data);\n            return;\n        }\n        setFragmentData(data, originEvent);\n    };\n\n    editor.getRoughHeight = (element: Element, defaultHeight?: number) => {\n        if (element.type === ElementKinds.code) {\n            if (element.height) {\n                return element.height + ROOT_ELEMENT_MARGIN_BOTTOM;\n            } else {\n                const lineHeight = 22;\n                const content = element.content as string;\n                const height = content.split('\\n').length * lineHeight;\n                const maxHeight = CODEMIRROR_DEFAULT_MAX_HEIGHT - CODEMIRROR_PADDING_TOP * 2;\n                return (height > maxHeight ? maxHeight : height + CODEMIRROR_PADDING_TOP * 2) + ROOT_ELEMENT_MARGIN_BOTTOM;\n            }\n        }\n        return getRoughHeight(element, defaultHeight);\n    };\n\n    return editor;\n};\n\nexport const createCodePlugin = (locale: Signal<TheI18nTranslation>) =>\n    createPluginFactory({\n        key: PluginKeys.code,\n        withOverrides: withCode,\n        toolbarItems: [\n            {\n                key: ElementKinds.code,\n                icon: 'code-syntax',\n                name: locale().code,\n                active: editor => TheQueries.isBlockActive(editor, ElementKinds.code),\n                execute: editor => CodeEditor.insertCode(editor)\n            }\n        ],\n        menuItems: [\n            {\n                key: ElementKinds.code,\n                type: ThePluginMenuItemType.group,\n                keywords: `dmk,daimakuai,code,${locale().code}`,\n                active: editor => TheQueries.isBlockActive(editor, ElementKinds.code),\n                execute: editor => CodeEditor.insertCode(editor),\n                name: locale().code,\n                description: locale().codeDesc,\n                menuIcon: PluginMenuIcons.code,\n                displayKey: '/dmk'\n            }\n        ],\n        options: {\n            allowParentTypes: [ElementKinds.tableCell]\n        }\n    })();\n","import { NgClass } from '@angular/common';\nimport { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyAction, ThyActions } from 'ngx-tethys/action';\nimport { ThyColorPickerDirective, ThyColorPickerPanel } from 'ngx-tethys/color-picker';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { ThyTooltipDirective } from 'ngx-tethys/tooltip';\nimport { Editor, Range, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { MarkTypes } from '../../constants';\nimport { TheBaseToolbarItem } from '../../core';\nimport { isCollapsed } from '../../queries';\nimport { reSelection } from '../../utils';\nimport { THE_EDITOR_BG_COLOR, THE_EDITOR_COLOR } from '../../utils/weak-maps';\nimport { ColorEditor } from './color.editor';\n\n@Component({\n    selector: 'the-color-toolbar-item',\n    templateUrl: './toolbar-item.component.html',\n    host: {\n        class: 'the-color-toolbar-item'\n    },\n    changeDetection: ChangeDetectionStrategy.Eager,\n    imports: [NgClass, FormsModule, ThyAction, ThyActions, ThyColorPickerDirective, ThyTooltipDirective, ThyIcon]\n})\nexport class TheColorToolbarItem extends TheBaseToolbarItem implements OnInit {\n    selectedColor: string;\n\n    pickerActive = false;\n\n    private panelOpenSelection: Range;\n\n    get lastTextColor(): string {\n        return THE_EDITOR_COLOR.get(this.editor) ?? '#FF0100';\n    }\n\n    get lastBackgroundColor(): string {\n        return THE_EDITOR_BG_COLOR.get(this.editor) ?? '#FFDA00';\n    }\n\n    constructor() {\n        super();\n    }\n\n    ngOnInit(): void {\n        this.setSelectedColor();\n    }\n\n    selectionChange() {\n        super.selectionChange();\n        this.setSelectedColor();\n    }\n\n    setSelectedColor() {\n        this.selectedColor = ColorEditor.getActiveColor(this.editor, this.toolbarItem.key as MarkTypes.color & MarkTypes.backgroundColor);\n    }\n\n    preventDefault(event: Event) {\n        event.preventDefault();\n        event.stopPropagation();\n    }\n\n    private getDefaultColor() {\n        if (this.toolbarItem.key === MarkTypes.color) {\n            return this.lastTextColor;\n        } else if (this.toolbarItem.key === MarkTypes.backgroundColor) {\n            return this.lastBackgroundColor;\n        }\n    }\n\n    selectColor(event: Event) {\n        const color = this.getDefaultColor() ?? this.selectedColor;\n        this.preventDefault(event);\n        this.changeColor(color);\n    }\n\n    changeColor(color: string) {\n        if (!this.editor.selection) {\n            reSelection(this.editor);\n        }\n        // 无填充色\n        if (color === 'transparent') {\n            this.selectedColor = '';\n        } else {\n            this.selectedColor = color;\n        }\n\n        if (this.toolbarItem.key === MarkTypes.color) {\n            THE_EDITOR_COLOR.set(this.editor, this.selectedColor);\n        } else if (this.toolbarItem.key === MarkTypes.backgroundColor) {\n            THE_EDITOR_BG_COLOR.set(this.editor, this.selectedColor);\n        }\n\n        ColorEditor.setColor(this.editor, this.selectedColor, this.toolbarItem.key as MarkTypes.color & MarkTypes.backgroundColor);\n    }\n\n    colorPanelOpen(event: ThyPopoverRef<ThyColorPickerPanel>) {\n        this.panelOpenSelection = this.editor?.selection;\n    }\n\n    colorPanelClose() {\n        this.pickerActive = false;\n        setTimeout(() => {\n            Editor.withoutNormalizing(this.editor, () => {\n                if (isCollapsed(this.panelOpenSelection)) {\n                    const selection = Editor.after(this.editor, this.panelOpenSelection.focus);\n                    Transforms.select(this.editor, selection);\n                }\n                AngularEditor.focus(this.editor);\n            });\n        });\n    }\n}\n","<thy-actions\n  class=\"d-flex p-0\"\n  thySize=\"zero\"\n  thyTooltipPlacement=\"top\"\n  [thyTooltip]=\"toolbarItem.name\"\n  [ngClass]=\"{ 'thy-default-picker-active': pickerActive }\"\n>\n  <a href=\"javascript:;\" class=\"color\" thyAction (mousedown)=\"selectColor($event)\">\n    <thy-icon\n      thyIconType=\"twotone\"\n      [thyIconName]=\"toolbarItem.icon\"\n      [thyTwotoneColor]=\"toolbarItem.key === 'color' ? lastTextColor : lastBackgroundColor\"\n      (mousedown)=\"selectColor($event)\"\n    ></thy-icon>\n  </a>\n  <a\n    class=\"pl-0 pr-0 caret-down\"\n    href=\"javascript:;\"\n    thyAction\n    thyColorPicker\n    thyPlacement=\"bottomLeft\"\n    [(ngModel)]=\"selectedColor\"\n    (thyPanelOpen)=\"pickerActive = true\"\n    (thyPanelOpen)=\"colorPanelOpen($event)\"\n    (thyPanelClose)=\"colorPanelClose()\"\n    (ngModelChange)=\"changeColor($event)\"\n    (mousedown)=\"preventDefault($event)\"\n  >\n    <thy-icon class=\"link-down-icon font-size-sm text-desc\" thyIconName=\"caret-down\"></thy-icon>\n  </a>\n</thy-actions>\n","import { Signal } from '@angular/core';\nimport { DISABLED_OPERATE_TYPES, DropdownMode, ElementKinds, MarkTypes } from '../../constants';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys, ToolbarItemType } from '../../interfaces';\nimport { ColorEditor } from './color.editor';\nimport { TheColorToolbarItem } from './toolbar-item.component';\nimport { TheI18nTranslation } from '../../i18n';\n\nexport const createColorPlugin = (locale: Signal<TheI18nTranslation>) =>\n    createPluginFactory({\n        key: PluginKeys.color,\n        toolbarItems: [\n            {\n                key: MarkTypes.color,\n                icon: 'color-tt',\n                name: locale().fontColor,\n                type: ToolbarItemType.default,\n                width: 48,\n                iconComponent: TheColorToolbarItem,\n                active: editor => ColorEditor.getActiveColor(editor, MarkTypes.color)\n            },\n            {\n                key: MarkTypes.backgroundColor,\n                icon: 'background-tt',\n                name: locale().backgroundColor,\n                type: ToolbarItemType.default,\n                width: 48,\n                iconComponent: TheColorToolbarItem,\n                active: editor => ColorEditor.getActiveColor(editor, MarkTypes.backgroundColor)\n            }\n        ],\n        options: {\n            disabledOperateTypes: [ElementKinds.image, ...DISABLED_OPERATE_TYPES]\n        }\n    })();\n","import { Editor, Node, Path, Range, Transforms } from 'slate';\nimport { AngularEditor, FAKE_RIGHT_BLOCK_CARD_OFFSET, hasBlockCard, hotkeys, isCardLeft } from 'slate-angular';\nimport { HistoryEditor } from 'slate-history';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\nimport { insertParagraph } from '../../transforms/insert-paragraph';\nimport { createEmptyParagraph } from '../../utils/create-empty-paragraph';\nimport { coercePixelsFromCssValue } from '../../utils/dom';\n\nexport const withBlockCard = <T extends Editor>(editor: T): T => {\n    const { insertBreak, deleteBackward, onKeydown, deleteForward, insertData, insertText, mousedown } = editor;\n\n    editor.insertBreak = () => {\n        const domSelection = window.getSelection();\n        const anchorNode = domSelection.anchorNode;\n        if (domSelection && domSelection.isCollapsed && hasBlockCard(domSelection)) {\n            const isLeftCursor = isCardLeft(anchorNode);\n            const cardEntry = AngularEditor.toSlateCardEntry(editor, anchorNode);\n            const cursorRootPath = cardEntry[1];\n            TheTransforms.insertParagraph(editor, isLeftCursor ? cursorRootPath : Path.next(cursorRootPath));\n            if (!isLeftCursor) {\n                Transforms.select(editor, Path.next(cursorRootPath));\n            }\n            return;\n        }\n        insertBreak();\n    };\n\n    editor.deleteBackward = unit => {\n        const domSelection = window.getSelection();\n        const anchorNode = domSelection.anchorNode;\n        if (domSelection && domSelection.isCollapsed && hasBlockCard(domSelection)) {\n            const isLeftCursor = isCardLeft(anchorNode);\n            const cardEntry = AngularEditor.toSlateCardEntry(editor, anchorNode);\n            const cursorRootPath = cardEntry[1];\n            if (isLeftCursor) {\n                const previousPath = Path.hasPrevious(cursorRootPath) && Path.previous(cursorRootPath);\n                if (!previousPath) {\n                    return;\n                }\n                if (previousPath && TheQueries.isEmptyParagraphByPath(editor, previousPath)) {\n                    Transforms.removeNodes(editor, {\n                        at: previousPath\n                    });\n                    return;\n                }\n                HistoryEditor.withoutMerging(editor, () => {\n                    Transforms.select(editor, Editor.end(editor, previousPath));\n                });\n                return;\n            } else {\n                TheTransforms.insertParagraph(editor, cursorRootPath);\n                Transforms.select(editor, cursorRootPath);\n                Transforms.removeNodes(editor, { at: Path.next(cursorRootPath) });\n                return;\n            }\n        }\n\n        const blockCard = TheQueries.getBlockCardAbove(editor);\n        const beforePoint = Editor.before(editor, editor.selection.anchor);\n        const beforeBlockCard = TheQueries.getBlockCardAbove(editor, { at: beforePoint });\n        if (!blockCard && beforeBlockCard) {\n            if (TheQueries.isBlockAboveEmpty(editor)) {\n                const [node, path] = Editor.parent(editor, editor.selection.anchor.path);\n                HistoryEditor.withoutMerging(editor, () => {\n                    const rightCursor = { path: beforeBlockCard[1], offset: FAKE_RIGHT_BLOCK_CARD_OFFSET };\n                    Transforms.select(editor, { anchor: rightCursor, focus: rightCursor });\n                });\n                Transforms.delete(editor, { at: path });\n                return;\n            } else {\n                Transforms.delete(editor, { at: beforeBlockCard[1] });\n            }\n            return;\n        }\n\n        deleteBackward(unit);\n    };\n\n    editor.deleteForward = unit => {\n        const domSelection = window.getSelection();\n        const anchorNode = domSelection.anchorNode;\n        if (domSelection && domSelection.isCollapsed && hasBlockCard(domSelection)) {\n            const isLeftCursor = isCardLeft(anchorNode);\n            const cardEntry = AngularEditor.toSlateCardEntry(editor, anchorNode);\n            const cursorRootPath = cardEntry[1];\n            if (isLeftCursor) {\n                TheTransforms.insertParagraph(editor, cursorRootPath);\n                Transforms.select(editor, cursorRootPath);\n                Transforms.removeNodes(editor, { at: Path.next(cursorRootPath) });\n                return;\n            } else {\n                const nextPath = Path.next(cursorRootPath);\n                HistoryEditor.withoutMerging(editor, () => {\n                    Transforms.select(editor, Editor.start(editor, nextPath));\n                });\n                return;\n            }\n        }\n\n        const blockCard = TheQueries.getBlockCardAbove(editor);\n        const afterPoint = Editor.after(editor, editor.selection.anchor);\n        const afterBlockCard = TheQueries.getBlockCardAbove(editor, { at: afterPoint });\n        if (!blockCard && afterBlockCard) {\n            if (TheQueries.isBlockAboveEmpty(editor)) {\n                HistoryEditor.withoutMerging(editor, () => {\n                    const leftCursor = { path: afterBlockCard[1], offset: -1 };\n                    Transforms.select(editor, { anchor: leftCursor, focus: leftCursor });\n                });\n                Transforms.delete(editor, { at: Path.previous(afterBlockCard[1]) });\n                return;\n            }\n            return;\n        }\n\n        deleteForward(unit);\n    };\n\n    editor.onKeydown = (event: KeyboardEvent) => {\n        const domSelection = window.getSelection();\n        const anchorNode = domSelection.anchorNode;\n        const nativeEvent = event;\n        const { selection } = editor;\n\n        const isMoveBackward = hotkeys.isMoveBackward(nativeEvent);\n        const isMoveForward = hotkeys.isMoveForward(nativeEvent);\n        const isMoveUp = hotkeys.isMoveUp(nativeEvent);\n        const isMoveDown = hotkeys.isMoveDown(nativeEvent);\n        const isCollapsed = selection && Range.isCollapsed(selection);\n        const anchorEntry = TheQueries.anchorBlockEntry(editor);\n\n        // block card cursor\n        if (anchorNode && hasBlockCard(domSelection)) {\n            const isCardLeftCursor = isCardLeft(anchorNode);\n            if (isMoveUp) {\n                const [, path] = AngularEditor.toSlateCardEntry(editor, anchorNode);\n                const previousPath = Path.hasPrevious(path) && Path.previous(path);\n                const previousNode = previousPath && TheQueries.getNode(editor, previousPath);\n                if (previousNode && editor.isBlockCard(previousNode)) {\n                    AngularEditor.moveBlockCard(editor, previousNode, { direction: isCardLeftCursor ? 'left' : 'right' });\n                } else {\n                    const before = Editor.before(editor, path);\n                    if (before) {\n                        Transforms.select(editor, before);\n                    }\n                }\n                nativeEvent.preventDefault();\n                return;\n            }\n            if (isMoveDown) {\n                const [, path] = AngularEditor.toSlateCardEntry(editor, anchorNode);\n                const nextPath = Path.next(path);\n                const nextNode = TheQueries.getNode(editor, nextPath);\n                if (nextNode && editor.isBlockCard(nextNode)) {\n                    AngularEditor.moveBlockCard(editor, nextNode, { direction: isCardLeftCursor ? 'left' : 'right' });\n                } else {\n                    const after = Editor.after(editor, path);\n                    if (after) {\n                        Transforms.select(editor, Editor.after(editor, path));\n                    }\n                }\n                nativeEvent.preventDefault();\n                return;\n            }\n            // → + right-block-card\n            if (isMoveForward && !isCardLeftCursor) {\n                nativeEvent.preventDefault();\n                const [, path] = AngularEditor.toSlateCardEntry(editor, anchorNode);\n                const nextPath = Path.next(path);\n                const nextNode = TheQueries.getNode(editor, nextPath);\n                if (nextNode && editor.isBlockCard(nextNode)) {\n                    event.preventDefault();\n                    AngularEditor.moveBlockCard(editor, nextNode, { direction: 'left' });\n                    return;\n                }\n                const after = Editor.after(editor, path);\n                if (after) {\n                    Transforms.select(editor, Editor.after(editor, path));\n                }\n                return;\n            }\n            // ← + left-block-card\n            if (isMoveBackward && isCardLeftCursor) {\n                nativeEvent.preventDefault();\n                const [, path] = AngularEditor.toSlateCardEntry(editor, anchorNode);\n                const previousPath = Path.hasPrevious(path) && Path.previous(path);\n                const previousNode = previousPath && TheQueries.getNode(editor, previousPath);\n                if (previousNode && editor.isBlockCard(previousNode)) {\n                    event.preventDefault();\n                    AngularEditor.moveBlockCard(editor, previousNode, { direction: 'right' });\n                    return;\n                }\n                const before = Editor.before(editor, path);\n                if (before) {\n                    Transforms.select(editor, before);\n                }\n                return;\n            }\n            // move to card center\n            if ((isCardLeftCursor && isMoveForward) || (!isCardLeftCursor && isMoveBackward)) {\n                nativeEvent.preventDefault();\n                const [, path] = AngularEditor.toSlateCardEntry(editor, anchorNode);\n                Transforms.select(editor, isCardLeftCursor ? Editor.start(editor, path) : Editor.end(editor, path));\n                return;\n            }\n        }\n        // block card center\n        if (isCollapsed && (isMoveUp || isMoveDown) && anchorEntry) {\n            const [block, path] = anchorEntry;\n            if (editor.isBlockCard(block)) {\n                event.preventDefault();\n                Transforms.select(editor, isMoveUp ? Editor.before(editor, path) : Editor.after(editor, path));\n                return;\n            }\n        }\n        if (isCollapsed && (isMoveBackward || isMoveForward) && anchorEntry) {\n            const [block] = anchorEntry;\n            if (editor.isBlockCard(block)) {\n                event.preventDefault();\n                AngularEditor.moveBlockCard(editor, block, { direction: isMoveBackward ? 'left' : 'right' });\n                return;\n            }\n        }\n        // move to block card cursor\n        if (isCollapsed && isMoveBackward && Editor.isStart(editor, selection.anchor, selection.anchor.path.slice(0, 1))) {\n            const currentPath = selection.anchor.path.slice(0, 1);\n            if (currentPath[0] > 0) {\n                const previousNode = Node.get(editor, Path.previous(currentPath));\n                if (previousNode && editor.isBlockCard(previousNode)) {\n                    event.preventDefault();\n                    AngularEditor.moveBlockCard(editor, previousNode, { direction: 'right' });\n                    return;\n                }\n            }\n        }\n        if (isCollapsed && isMoveForward && Editor.isEnd(editor, selection.anchor, selection.anchor.path.slice(0, 1))) {\n            const currentPath = selection.anchor.path.slice(0, 1);\n            if (currentPath[0] < editor.children.length - 1) {\n                const previousNode = Node.get(editor, Path.next(currentPath));\n                if (previousNode && editor.isBlockCard(previousNode)) {\n                    event.preventDefault();\n                    AngularEditor.moveBlockCard(editor, previousNode, { direction: 'left' });\n                    return;\n                }\n            }\n        }\n\n        onKeydown(event);\n    };\n\n    editor.insertData = (data: DataTransfer) => {\n        const domSelection = window.getSelection();\n        const anchorNode = domSelection.anchorNode;\n        if (domSelection && domSelection.isCollapsed && hasBlockCard(domSelection)) {\n            const isLeftCursor = isCardLeft(anchorNode);\n            const cardEntry = AngularEditor.toSlateCardEntry(editor, anchorNode);\n            const cursorRootPath = cardEntry[1];\n            if (isLeftCursor) {\n                Transforms.insertNodes(editor, createEmptyParagraph(), { at: cursorRootPath });\n                Transforms.select(editor, cursorRootPath);\n            } else {\n                Transforms.insertNodes(editor, createEmptyParagraph(), { at: Path.next(cursorRootPath) });\n                Transforms.select(editor, Path.next(cursorRootPath));\n            }\n        }\n        insertData(data);\n    };\n\n    editor.insertText = (text: string) => {\n        const domSelection = window.getSelection();\n        const anchorNode = domSelection?.anchorNode;\n        if (AngularEditor.isBlockCardLeftCursor(editor) || AngularEditor.isBlockCardRightCursor(editor)) {\n            const isLeftCursor = isCardLeft(anchorNode);\n            const cardEntry = AngularEditor.toSlateCardEntry(editor, anchorNode);\n            const cursorRootPath = cardEntry[1];\n            if (isLeftCursor) {\n                insertParagraph(editor, cursorRootPath);\n                Transforms.select(editor, cursorRootPath);\n            } else {\n                const nextPath = Path.next(cursorRootPath);\n                insertParagraph(editor, nextPath);\n                Transforms.select(editor, nextPath);\n            }\n        }\n        insertText(text);\n    };\n\n    editor.mousedown = (event: MouseEvent) => {\n        const editableElement = AngularEditor.toDOMNode(editor, editor);\n        const absoluteElement = document.elementFromPoint(event.x, event.y);\n        if (editableElement.isEqualNode(absoluteElement)) {\n            const rectEditable = editableElement.getBoundingClientRect();\n            let { paddingRight } = window.getComputedStyle(editableElement, null);\n            const paddingRightPixels = coercePixelsFromCssValue(paddingRight);\n            const fakeRightX = rectEditable.right - paddingRightPixels - 50;\n            let relativeElement = document.elementFromPoint(fakeRightX, event.y);\n            let relativeBlockCardElement = relativeElement.closest('.slate-block-card');\n            if (relativeBlockCardElement) {\n                const centerX = rectEditable.x + rectEditable.width / 2;\n                const blockCardEntry = AngularEditor.toSlateCardEntry(editor, relativeBlockCardElement.firstElementChild);\n                if (blockCardEntry && editor.isBlockCard(blockCardEntry[0])) {\n                    const parentBlockCardEntry = Editor.above(editor, {\n                        at: blockCardEntry[1],\n                        mode: 'highest',\n                        match: node => editor.isBlockCard(node)\n                    });\n                    event.preventDefault();\n                    if (parentBlockCardEntry) {\n                        AngularEditor.moveBlockCard(editor, parentBlockCardEntry[0], { direction: event.x < centerX ? 'left' : 'right' });\n                    } else {\n                        AngularEditor.moveBlockCard(editor, blockCardEntry[0], { direction: event.x < centerX ? 'left' : 'right' });\n                    }\n                }\n            }\n            return;\n        }\n        const innerBlockCardElement = absoluteElement.querySelector('[card-target=\"card-center\"]');\n        if (innerBlockCardElement) {\n            const blockCardEntry = AngularEditor.toSlateCardEntry(editor, innerBlockCardElement.firstElementChild);\n            if (blockCardEntry && editor.isBlockCard(blockCardEntry[0])) {\n                const { x, width } = innerBlockCardElement.getBoundingClientRect();\n                const centerX = x + width / 2;\n                event.preventDefault();\n                AngularEditor.moveBlockCard(editor, blockCardEntry[0], { direction: event.x < centerX ? 'left' : 'right' });\n            }\n        }\n        mousedown(event);\n    };\n\n    return editor;\n};\n\nexport const createBlockCardPlugin = createPluginFactory({\n    key: PluginKeys.blockCard,\n    withOverrides: withBlockCard\n});\n","import { ThyPopover } from 'ngx-tethys/popover';\nimport { Editor, NodeEntry, Node, Transforms, Range, Path, Element } from 'slate';\nimport { DropdownMode, ElementKinds, MarkTypes, ToolbarActionTypes } from '../../constants';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys, ToolbarItemType } from '../../interfaces';\nimport { isColorIndicator, isColorInput, isColorPanel } from '../../utils';\nimport { Signal } from '@angular/core';\nimport { TheI18nTranslation } from '../../i18n';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\nimport { isContainer } from '../../queries';\n\nexport const withInternalCommon = <T extends Editor>(editor: T): T => {\n    const { globalMousedown, onKeydown, selectAll, getRoughHeight } = editor;\n\n    editor.globalMousedown = (event: MouseEvent) => {\n        const target = event.target as HTMLElement;\n        if (isColorIndicator(target)) {\n            event.stopPropagation();\n            return;\n        }\n        if (isColorInput(target)) {\n            return;\n        }\n        if (isColorPanel(target)) {\n            event.preventDefault();\n        }\n        globalMousedown(event);\n    };\n\n    editor.onKeydown = (event: KeyboardEvent) => {\n        const isColorPanel = document.querySelector('.thy-color-picker-panel') || document.querySelector('.thy-color-picker-custom-panel');\n        if (editor.selection && isColorPanel) {\n            const popover = editor.injector.get(ThyPopover);\n            popover.close();\n        }\n        onKeydown(event);\n    };\n\n    editor.selectAll = () => {\n        let node: NodeEntry<Node> | null = null;\n        if (!editor.selection) {\n            TheTransforms.setEndSelection(editor);\n        }\n        const [start, end] = Range.edges(editor.selection);\n        const selectionRange = Editor.range(editor, start, end);\n        const containerBlocks = TheQueries.getContainerBlocks(editor);\n        for (let i = 0; i < containerBlocks.length; i++) {\n            [node] = TheQueries.getNodesByType(editor, containerBlocks[i]);\n            if (node) {\n                const [, path] = node;\n                const isStartParent = Path.equals(path, start.path.slice(0, path.length));\n                const isEndParent = Path.equals(path, end.path.slice(0, path.length));\n                if (isStartParent && isEndParent) {\n                    const nodeRange = Editor.range(editor, path);\n                    if (!Range.equals(nodeRange, selectionRange)) {\n                        Transforms.select(editor, nodeRange);\n                        break;\n                    }\n                    node = null;\n                }\n            }\n        }\n        if (!node) {\n            Transforms.select(editor, []);\n        }\n    };\n\n    editor.getRoughHeight = (element: Element, defaultHeight?: number) => {\n        if (isContainer(editor, element)) {\n            let height = 0;\n            element.children.forEach((child, index) => {\n                height += editor.getRoughHeight(child, defaultHeight);\n            });\n            return height;\n        }\n        return getRoughHeight(element, defaultHeight);\n    };\n\n    return editor;\n};\n\nexport const createCommonPlugin = (locale: Signal<TheI18nTranslation>) =>\n    createPluginFactory({\n        key: PluginKeys.internalCommon,\n        withOverrides: withInternalCommon,\n        toolbarItems: [\n            {\n                key: ToolbarActionTypes.group,\n                name: locale().more,\n                icon: 'more',\n                type: ToolbarItemType.dropdown,\n                dropdownMode: DropdownMode.icon,\n                dropdownItemKey: ToolbarActionTypes.group,\n                dropdownFixedIcon: true,\n                isHideDropdownActionIcon: true,\n                includes: [MarkTypes.underline, MarkTypes.strike, ElementKinds.inlineCode]\n            }\n        ]\n    })();\n","import { Editor, Element } from 'slate';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { CustomElementKinds } from '../../custom-types';\nimport { PluginKeys } from '../../interfaces';\nimport * as TheQueries from '../../queries';\n\nexport interface GetFragmentPluginOptions {\n    types?: CustomElementKinds[];\n}\n\nexport const withGetFragment = <T extends Editor>(editor: T) => {\n    const { getFragment } = editor;\n    const elementKinds = getPluginOptions<GetFragmentPluginOptions>(editor, PluginKeys.getFragment)?.types ?? [];\n\n    editor.getFragment = () => {\n        const { selection } = editor;\n        const containerBlocks = [...elementKinds, ...TheQueries.getContainerBlocks(editor)];\n        if (selection && selection.anchor.path[0] === selection.focus.path[0]) {\n            const fragmentData = getFragment();\n            const nodes = TheQueries.getSelectionNodesByType(editor, fragmentData, containerBlocks);\n            return nodes && Element.isElement(nodes) ? nodes.children : fragmentData;\n        }\n        return getFragment();\n    };\n\n    return editor;\n};\n\nexport const createGetFragmentPlugin = createPluginFactory<GetFragmentPluginOptions>({\n    key: PluginKeys.getFragment,\n    withOverrides: withGetFragment\n});\n","import { Editor } from 'slate';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\n\nexport const UNDOING = new WeakMap<Editor, boolean | undefined>();\nexport const REDOING = new WeakMap<Editor, boolean | undefined>();\n\nexport const withTheHistory = <T extends Editor>(editor: T): T => {\n    const { undo, redo } = editor;\n\n    editor.undo = () => {\n        UNDOING.set(editor, true);\n        undo();\n        UNDOING.set(editor, false);\n    };\n    editor.redo = () => {\n        REDOING.set(editor, true);\n        redo();\n        REDOING.set(editor, false);\n    };\n\n    return editor;\n};\n\nexport const TheHistoryEditor = {\n    isUndoing(editor: Editor): boolean | undefined {\n        return UNDOING.get(editor);\n    },\n    isRedoing(editor: Editor): boolean | undefined {\n        return REDOING.get(editor);\n    }\n};\n\nexport const createTheHistoryPlugin = createPluginFactory({\n    key: PluginKeys.theHistory,\n    withOverrides: withTheHistory\n});\n","import { Editor } from 'slate';\nimport { PluginKeys } from '../../interfaces';\nimport { createPluginFactory } from '../../core';\nimport { extractFragment } from '../../utils/fragment';\nimport { insertDataByInvalidType } from '../../utils';\nimport { ClipboardData } from 'slate-angular';\n\nexport const withInsertDataByInvalidType = <T extends Editor>(editor: T): T => {\n    const { customInsertFragmentData } = editor;\n\n    editor.customInsertFragmentData = async (data: DataTransfer, clipboardData: ClipboardData | null) => {\n        const fragment = await extractFragment(data);\n        if (fragment) {\n            const isContinue = insertDataByInvalidType(editor, fragment);\n            if (!isContinue) {\n                return true;\n            }\n        }\n        return customInsertFragmentData(data, clipboardData);\n    };\n\n    return editor;\n};\n\nexport const createInsertDataByInvalidTypePlugin = createPluginFactory({\n    key: PluginKeys.insertDataByInvalidType,\n    withOverrides: withInsertDataByInvalidType\n});\n","import { Editor, Path, Element } from 'slate';\n\nexport const isInline = (editor: Editor, path?: Path): boolean => {\n    const [inlineNode] = Editor.nodes(editor, {\n        at: path ? path : editor.selection?.anchor.path,\n        match: n => Element.isElement(n) && Editor.isInline(editor, n) && !Editor.isVoid(editor, n)\n    });\n    return !!inlineNode;\n};\n","import { timer } from 'rxjs';\nimport { BaseRange, Editor, Element, Operation, Range, SelectionOperation, Transforms } from 'slate';\nimport { AngularEditor, hotkeys } from 'slate-angular';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { isInline } from '../../utils/is-inline';\nimport { THE_EDITOR_PREVIOUS_SELECTION } from '../../utils/weak-maps';\n\nexport const withMoveSelection = <T extends Editor>(editor: T): T => {\n    const { onClick, deleteBackward, onKeydown, onChange } = editor;\n\n    editor.onClick = (event: MouseEvent) => {\n        const domSelection = window.getSelection();\n        if (domSelection && !domSelection.isCollapsed && event.detail >= 2 && editor.selection) {\n            const slateSelection = AngularEditor.toSlateRange(editor, domSelection, { exactMatch: false, suppressThrow: true });\n            const isNextStart = slateSelection && slateSelection.focus.offset === 0;\n            if (slateSelection && Range.isExpanded(slateSelection) && Range.isForward(slateSelection) && isNextStart) {\n                const beforePoint = Editor.before(editor, slateSelection.focus);\n                const changedRange = Editor.range(editor, slateSelection.anchor, beforePoint);\n\n                // slate-angular throttle 80ms, so wait selectionchange complete\n                timer(81).subscribe(() => {\n                    Transforms.select(editor, changedRange);\n                });\n            }\n        }\n        onClick(event);\n    };\n\n    editor.deleteBackward = unit => {\n        const { selection } = editor;\n        const inlineBlockEntry = Editor.above(editor, {\n            match: n => Element.isElement(n) && Editor.isInline(editor, n)\n        });\n        // fix deleteBackward on the start of inline block\n        // deleteBackward logic bug\n        if (\n            inlineBlockEntry &&\n            !(Element.isElement(inlineBlockEntry[0]) && Editor.isVoid(editor, inlineBlockEntry[0])) &&\n            selection.anchor.offset === 0\n        ) {\n            const beforePoint = TheQueries.getPointBefore(editor, selection.focus);\n            Transforms.select(editor, beforePoint);\n        }\n        deleteBackward(unit);\n    };\n\n    editor.onKeydown = (event: KeyboardEvent) => {\n        const { selection } = editor;\n        if (!selection || !selection.anchor || !selection.focus) {\n            onKeydown(event);\n            return;\n        }\n        const isMoveBackward = hotkeys.isMoveBackward(event);\n        const isMoveForward = hotkeys.isMoveForward(event);\n        const isCollapsed = selection && TheQueries.isCollapsed(selection);\n        const isInlineNode = isInline(editor);\n        if (isCollapsed && isMoveForward) {\n            let isInlineCodeBefore = false;\n            if (!isInlineNode) {\n                try {\n                    const { path } = Editor.after(editor, selection);\n                    if (path) {\n                        isInlineCodeBefore = isInline(editor, path);\n                    }\n                } catch (error) {}\n            }\n            if (isInlineNode || isInlineCodeBefore) {\n                event.preventDefault();\n                Transforms.move(editor, { unit: 'offset' });\n                return;\n            }\n        }\n        if (isCollapsed && isMoveBackward) {\n            let isInlineCodeAfter = false;\n            if (!isInlineNode) {\n                try {\n                    const { path } = Editor.before(editor, selection);\n                    isInlineCodeAfter = isInline(editor, path);\n                } catch (error) {}\n            }\n            if (isInlineNode || isInlineCodeAfter) {\n                event.preventDefault();\n                Transforms.move(editor, { unit: 'offset', reverse: true });\n                return;\n            }\n        }\n        onKeydown(event);\n    };\n\n    editor.onChange = () => {\n        if (!editor.selection && editor.operations.length) {\n            const isSelectionOperation = editor.operations.every(op => Operation.isSelectionOperation(op));\n            if (isSelectionOperation) {\n                const prevSelection = (editor.operations[0] as SelectionOperation).properties as BaseRange;\n                THE_EDITOR_PREVIOUS_SELECTION.set(editor, {\n                    rangeRef: Editor.rangeRef(editor, prevSelection),\n                    selection: prevSelection\n                });\n            }\n        }\n        onChange();\n    };\n\n    return editor;\n};\n\nexport const createMoveSelectionPlugin = createPluginFactory({\n    key: PluginKeys.moveSelection,\n    withOverrides: withMoveSelection\n});\n","import { Editor, Element, Node, Path, Transforms } from 'slate';\nimport { HistoryEditor } from 'slate-history';\nimport { HEADING_TYPES } from '../../constants';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport * as TheQueries from '../../queries';\n\nexport const withRemoveEmpty = <T extends Editor>(editor: T): T => {\n    const { deleteBackward, deleteForward } = editor;\n\n    editor.deleteBackward = unit => {\n        const { selection } = editor;\n        const anchorBlock = TheQueries.anchorBlock(editor);\n\n        if (!anchorBlock) {\n            deleteBackward(unit);\n            return;\n        }\n\n        // delete empty paragraphs or empty headings, the default operation is to delete before the void node\n        const parentPath = Path.parent(editor.selection.anchor.path);\n        const isEmptyHeading = HEADING_TYPES.includes(anchorBlock.type) && Editor.isEmpty(editor, anchorBlock);\n        const isEmptyParagraph = TheQueries.isEmptyParagraph(editor, editor.selection.anchor);\n        if ((isEmptyParagraph || isEmptyHeading) && parentPath[parentPath.length - 1] > 0) {\n            const previousNodeOfParent = Node.get(editor, Path.previous(parentPath));\n            if (Element.isElement(previousNodeOfParent) && Editor.isVoid(editor, previousNodeOfParent)) {\n                Transforms.delete(editor, { at: editor.selection.anchor.path.slice(0, editor.selection.anchor.path.length - 1) });\n                return;\n            }\n        }\n\n        // just remove inline node when before inline node text length is 1, default action is remove current the block above inline node\n        if (selection.anchor.path[selection.anchor.path.length - 1] > 0 && selection.anchor.offset === 0) {\n            const beforePoint = Editor.before(editor, editor.selection);\n            const inlineEntry = Editor.above<Element>(editor, {\n                at: beforePoint,\n                match: n => Element.isElement(n) && Editor.isInline(editor, n) && !Editor.isVoid(editor, n)\n            });\n            if (inlineEntry && Editor.string(editor, inlineEntry[1]).length === 1) {\n                Transforms.removeNodes(editor, { at: inlineEntry[1] });\n                return;\n            }\n        }\n        deleteBackward(unit);\n    };\n\n    editor.deleteForward = unit => {\n        const anchorBlockEntry = TheQueries.anchorBlockEntry(editor);\n        if (\n            anchorBlockEntry &&\n            TheQueries.isAncestorEmpty(editor, anchorBlockEntry[0]) &&\n            TheQueries.getNode(editor, Path.next(anchorBlockEntry[1]))\n        ) {\n            const pathRef = Editor.pathRef(editor, Path.parent(editor.selection.anchor.path));\n            HistoryEditor.withoutMerging(editor, () => {\n                Transforms.move(editor);\n            });\n            Transforms.delete(editor, { at: pathRef.unref() });\n            return;\n        }\n        deleteForward(unit);\n    };\n\n    return editor;\n};\n\nexport const createRemoveEmptyPlugin = createPluginFactory({\n    key: PluginKeys.removeEmpty,\n    withOverrides: withRemoveEmpty\n});\n","import { Editor, Element, Path, Transforms } from 'slate';\nimport { hotkeys } from 'slate-angular';\nimport { HistoryEditor } from 'slate-history';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { createEmptyParagraph } from '../../utils/create-empty-paragraph';\n\nexport const withRemoveVoid = <T extends Editor>(editor: T): T => {\n    const { deleteBackward, deleteForward, onKeydown } = editor;\n\n    const deleteBlockVoid = (e: Editor) => {\n        const aboveEntry = TheQueries.getAbove(e);\n        const canDelete =\n            aboveEntry && Element.isElement(aboveEntry[0]) && Editor.isBlock(e, aboveEntry[0]) && Editor.isVoid(e, aboveEntry[0]);\n        if (canDelete) {\n            Transforms.insertNodes(e, createEmptyParagraph(), { at: Path.next(aboveEntry[1]) });\n            Transforms.select(e, Path.next(aboveEntry[1]));\n            Transforms.removeNodes(e, { at: aboveEntry[1] });\n        }\n        return canDelete;\n    };\n\n    editor.deleteBackward = unit => {\n        if (deleteBlockVoid(editor)) {\n            return;\n        }\n        deleteBackward(unit);\n    };\n\n    editor.onKeydown = event => {\n        const aboveEntry = TheQueries.getAbove(editor);\n        if (\n            aboveEntry &&\n            Element.isElement(aboveEntry[0]) &&\n            Editor.isVoid(editor, aboveEntry[0]) &&\n            Editor.isInline(editor, aboveEntry[0])\n        ) {\n            if (hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event)) {\n                event.preventDefault();\n                HistoryEditor.withoutMerging(editor, () => {\n                    Transforms.move(editor);\n                });\n                Transforms.delete(editor, { reverse: true });\n                return;\n            }\n            if (hotkeys.isSplitBlock(event)) {\n                event.preventDefault();\n                Transforms.move(editor);\n                return;\n            }\n        }\n        onKeydown(event);\n    };\n\n    editor.deleteForward = unit => {\n        if (deleteBlockVoid(editor)) {\n            return;\n        }\n        deleteForward(unit);\n    };\n    return editor;\n};\n\nexport const createRemoveVoidPlugin = createPluginFactory({\n    key: PluginKeys.removeVoid,\n    withOverrides: withRemoveVoid\n});\n","import { Editor, Range } from 'slate';\nimport { IS_SAFARI, hotkeys } from 'slate-angular';\nimport { BLOCK_DELETE_BACKWARD_TYPES } from '../../constants';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport * as TheQueries from '../../queries';\n\nexport const withResetType = <T extends Editor>(editor: T): T => {\n    const { onKeydown } = editor;\n\n    editor.onKeydown = (event: KeyboardEvent) => {\n        const { selection } = editor;\n\n        if (IS_SAFARI && selection && Range.isCollapsed(selection) && hotkeys.isDeleteBackward(event)) {\n            const blockEntry = TheQueries.getAboveByType(editor, BLOCK_DELETE_BACKWARD_TYPES);\n            if (blockEntry && blockEntry[0]) {\n                const isStart = Editor.isStart(editor, selection.anchor, blockEntry[1]);\n                if (isStart) {\n                    event.preventDefault();\n                    Editor.deleteBackward(editor);\n                    return;\n                }\n            }\n            if (Editor.isStart(editor, selection.anchor, [0])) {\n                event.preventDefault();\n                Editor.deleteBackward(editor);\n                return;\n            }\n        }\n        onKeydown(event);\n    };\n\n    return editor;\n};\n\nexport const createResetTypePlugin = createPluginFactory({\n    key: PluginKeys.resetType,\n    withOverrides: withResetType\n});\n","import { Editor, Element, Node, Transforms } from 'slate';\nimport { ClipboardData } from 'slate-angular';\nimport { ElementKinds } from '../../constants';\nimport { PluginKeys } from '../../interfaces';\nimport { createPluginFactory } from '../../core';\nimport { isLogicEmptyParagraphElement } from '../../queries/is-empty-paragraph';\nimport { insertDataByInvalidType, filterTextFormat, recursionNodes, extractFragmentByHTML } from '../../utils';\nimport { ImageEditor } from '../image/image.editor';\nimport { isUrl } from '../../utils/is-url';\n\nexport const withDeserializeHTML = <T extends Editor>(editor: T): T => {\n    const { customInsertFragmentData } = editor;\n\n    editor.customInsertFragmentData = async (data: DataTransfer, contextClipboardData: ClipboardData | null) => {\n        const fragmentFromHTML = await extractFragmentByHTML(data);\n\n        if (fragmentFromHTML) {\n            const newContextClipboardData: ClipboardData = { elements: fragmentFromHTML };\n            // 识别粘贴的 HTML 只有纯链接, 跳至 link\n            if (fragmentFromHTML.length === 1 && fragmentFromHTML.every(block => isUrl(block?.children?.[0]?.['text']))) {\n                return customInsertFragmentData(data, newContextClipboardData);\n            }\n\n            // 无法识别HTML内容时后退一下：识别纯文本\n            if (fragmentFromHTML.every(block => block.type === ElementKinds.paragraph && isLogicEmptyParagraphElement(editor, block))) {\n                return customInsertFragmentData(data, null);\n            }\n\n            // 识出纯图片并且粘贴板中存在文件则不进行处理, hook 直接右键复制图片的场景，流转到上传图片流程\n            // 后续需要做识别html图片后自动上传处理\n            if (fragmentFromHTML.length === 1 && fragmentFromHTML[0].type === ElementKinds.image && data.files.length > 0) {\n                return customInsertFragmentData(data, contextClipboardData || null);\n            }\n\n            if (isLogicTableElement(editor, fragmentFromHTML)) {\n                return customInsertFragmentData(data, newContextClipboardData);\n            }\n\n            // 过滤 text 节点的 color/background-color 属性\n            fragmentFromHTML.forEach(node => filterTextFormat(node));\n\n            // base 64 图片处理\n            recursionNodes(fragmentFromHTML, (node: Node) => {\n                const isImage = Element.isElement(node) && node.type === ElementKinds.image;\n\n                if (isImage) {\n                    const isBase64 = ImageEditor.isBase64(node?.originUrl);\n                    if (isBase64) {\n                        ImageEditor.handleBase64ImageElement(editor, node);\n                    } else {\n                        ImageEditor.handleExternalImageElement(editor, node);\n                    }\n                }\n            });\n            const isContinue = insertDataByInvalidType(editor, fragmentFromHTML);\n            if (!isContinue) {\n                return true;\n            }\n            Transforms.insertFragment(editor, fragmentFromHTML);\n            return true;\n        }\n\n        return customInsertFragmentData(data, contextClipboardData || null);\n    };\n    return editor;\n};\n\nexport const createDeserializeHTMLPlugin = createPluginFactory({\n    key: PluginKeys.deserializeHtml,\n    withOverrides: withDeserializeHTML\n});\n\nexport const isLogicTableElement = (editor: Editor, elements: Element[]) => {\n    const elementsFiltered = elements.filter(\n        element => element.type !== ElementKinds.paragraph || !isLogicEmptyParagraphElement(editor, element)\n    );\n    return elementsFiltered.length === 1 && elementsFiltered[0].type === ElementKinds.table;\n};\n","import { Editor } from 'slate';\nimport { DISABLED_OPERATE_TYPES, ElementKinds, FontSizeTypes, FontSizes, HEADING_TYPES, MarkTypes } from '../../constants';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys, TheEditor, ToolbarItem, ToolbarItemType } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { TheContextService } from '../../services/context.service';\nimport * as TheTransforms from '../../transforms';\nimport { TableEditor } from '../table/table.editor';\nimport { Signal } from '@angular/core';\nimport { TheI18nTranslation } from '../../i18n';\n\nexport const FontSizeEditor = {\n    setFontSize(editor: TheEditor, size: FontSizes) {\n        const contextService = editor.injector.get(TheContextService);\n        const defaultFontSize = contextService.getDefaultFontSize();\n        const marks = TheQueries.getSelectionMarks(editor);\n        const fontSizeMark: number = marks[MarkTypes.fontSize];\n        const isDefaultFontSize = size === defaultFontSize;\n\n        if (!fontSizeMark && isDefaultFontSize) {\n            return;\n        }\n\n        // unset fontSize\n        if (isDefaultFontSize) {\n            FontSizeEditor.unsetFontSize(editor, size);\n            return;\n        }\n\n        FontSizeEditor.setFontSizeMark(editor, size);\n    },\n    setFontSizeMark(editor: Editor, size: FontSizes) {\n        // set Table selectedCells fontSize\n        if (TableEditor.toggleMark(editor, false, MarkTypes.fontSize, Number(size))) {\n            return;\n        }\n        // set paragraph text fontSize\n        Editor.addMark(editor, MarkTypes.fontSize, Number(size));\n    },\n    unsetFontSize(editor: Editor, size: FontSizes) {\n        const isTable = TableEditor.isActive(editor);\n\n        // unset Table selectedCells fontSize\n        if (isTable && TableEditor.toggleMark(editor, true, MarkTypes.fontSize, Number(size))) {\n            return;\n        }\n        // unset paragraph text fontSize\n        TheTransforms.setMarks(\n            editor,\n            {\n                [MarkTypes.fontSize]: null\n            },\n            editor.selection\n        );\n    },\n    isFontSizeActive(editor: Editor, size: FontSizes) {\n        if (editor.selection) {\n            const anchorBlock = TheQueries.anchorBlock(editor);\n            switch (anchorBlock?.type) {\n                case ElementKinds.heading_1:\n                    return size === FontSizes.fontSize28;\n                case ElementKinds.heading_2:\n                    return size === FontSizes.fontSize24;\n                case ElementKinds.heading_3:\n                    return size === FontSizes.fontSize20;\n                case ElementKinds.heading_4:\n                    return size === FontSizes.fontSize18;\n                case ElementKinds.heading_5:\n                    return size === FontSizes.fontSize16;\n                case ElementKinds.heading_6:\n                    return size === FontSizes.fontSize14;\n                case ElementKinds.paragraph:\n                    const marks = TheQueries.getSelectionMarks(editor);\n                    const fontSizeMark = marks[MarkTypes.fontSize];\n                    return Number(size) === fontSizeMark;\n                default:\n                    return false;\n            }\n        }\n        return false;\n    }\n};\n\nconst sizeOptions = (): ToolbarItem[] => {\n    return FontSizeTypes.map(fontSize => {\n        return {\n            key: fontSize,\n            name: fontSize,\n            execute: editor => FontSizeEditor.setFontSize(editor, fontSize),\n            active: editor => FontSizeEditor.isFontSizeActive(editor, fontSize)\n        };\n    });\n};\n\nexport const createFontSizePlugin = (locale: Signal<TheI18nTranslation>) =>\n    createPluginFactory({\n        key: PluginKeys.fontSize,\n        toolbarItems: [\n            {\n                key: MarkTypes.fontSize,\n                name: locale().fontSize,\n                type: ToolbarItemType.dropdown,\n                dropdownItemKey: FontSizes.fontSize14,\n                includes: FontSizeTypes\n            },\n            ...sizeOptions()\n        ],\n        options: {\n            disabledOperateTypes: [...HEADING_TYPES, ElementKinds.image, ...DISABLED_OPERATE_TYPES]\n        }\n    })();\n","import { Editor, Range, Transforms, Element, Path } from 'slate';\nimport {\n    DropdownMode,\n    ElementKinds,\n    HeaderLevelMap,\n    PluginMenuIcons,\n    STANDARD_HEADING_TYPES,\n    ThePluginMenuItemType\n} from '../../constants';\nimport { createPluginFactory } from '../../core';\nimport { CustomElement, CustomElementKinds, HeadingElement } from '../../custom-types';\nimport { PluginKeys, ThePluginBaseOption, ToolbarItemType } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { HeadingEditor, headingOptions } from './heading.editor';\nimport { Signal } from '@angular/core';\nimport { TheI18nTranslation } from '../../i18n';\nimport {\n    getFollowElements,\n    getCollapsedStandardHeadingAbove,\n    isHeadingElement,\n    isStandardHeadingElement,\n    isStandardHeadingElementByType,\n    expandPreviousHeadings,\n    getAllVisibleState\n} from './utils';\nimport { AngularEditor } from 'slate-angular';\nimport { createEmptyParagraph, toggleHeadingRelatedElement } from '../../utils';\n\nexport const cleanHeadingEffect = (editor: Editor, path: Path) => {\n    if (editor.options?.enableVirtualScroll) {\n        return;\n    }\n    const index = path[0];\n    const headingElement = editor.children[index] as Element;\n    if (!isStandardHeadingElement(headingElement)) {\n        return;\n    }\n    const followedElements = getFollowElements(editor, headingElement);\n    if (headingElement.isCollapsed) {\n        followedElements.forEach(el => {\n            toggleHeadingRelatedElement(editor, el, true);\n        });\n    }\n};\n\nexport type HeadingPluginOptions = {\n    cleanupTypes: CustomElementKinds[];\n} & ThePluginBaseOption;\n\nexport const withHeading = <T extends Editor>(editor: T): T => {\n    const { insertBreak, isVisible, apply, deleteBackward, mousedown } = editor;\n\n    editor.apply = operation => {\n        try {\n            if (operation.type === 'merge_node' && operation.path.length === 1) {\n                cleanHeadingEffect(editor, operation.path);\n            } else if (operation.type === 'remove_node' && operation.path.length === 1) {\n                // 协同场景下，merge_node 会被转换为 remove_node 和 insert_node\n                cleanHeadingEffect(editor, operation.path);\n            } else if (operation.type === 'set_node' && operation.path.length === 1) {\n                const properties = operation.properties as Partial<Element>;\n                const newProperties = operation.newProperties as Partial<Element>;\n                if (isStandardHeadingElementByType(properties.type) && newProperties.type === ElementKinds.paragraph) {\n                    cleanHeadingEffect(editor, operation.path);\n                    expandPreviousHeadings(editor, operation.path);\n                }\n            }\n        } catch (error) {\n            console.error('Error handing heading fold(hidden followed elements):', error);\n        }\n        apply(operation);\n    };\n\n    editor.deleteBackward = unit => {\n        const { selection } = editor;\n        const anchorBlock = TheQueries.getAnchorBlockEntry(editor);\n        if (anchorBlock) {\n            const [anchorBlockElement, path] = anchorBlock;\n            const isCollapsed = selection && Range.isCollapsed(selection);\n            const isStart = Editor.isStart(editor, selection.anchor, anchorBlock[1]);\n            if (path.length === 1 && path[0] > 0 && isCollapsed && isStart && isStandardHeadingElement(anchorBlockElement)) {\n                const prevPath = Path.previous(path);\n                const prevElement = editor.children[prevPath[0]] as Element;\n                const prevIsVisible = editor.isVisible(prevElement);\n                if (!prevIsVisible || (isStandardHeadingElement(prevElement) && prevElement.isCollapsed)) {\n                    expandPreviousHeadings(editor, path);\n                }\n            }\n        }\n        deleteBackward(unit);\n    };\n\n    editor.insertBreak = () => {\n        const { selection } = editor;\n        const anchorBlock = TheQueries.getAnchorBlockEntry(editor);\n        const isHeading = anchorBlock && isHeadingElement(anchorBlock[0]);\n        if (isHeading) {\n            const isCollapsed = Range.isCollapsed(selection);\n            const isStart = Editor.isStart(editor, selection.anchor, anchorBlock[1]);\n            const isEnd = Editor.isEnd(editor, selection.focus, anchorBlock[1]);\n            const isCollapsedHeading = (anchorBlock[0] as HeadingElement).isCollapsed;\n            if (isCollapsedHeading && anchorBlock[1].length === 1) {\n                const followedElements = getFollowElements(editor, anchorBlock[0] as HeadingElement);\n                const toPath = [anchorBlock[1][0] + followedElements.length];\n                const toRef = Editor.pathRef(editor, toPath);\n                insertBreak();\n                Transforms.moveNodes(editor, {\n                    to: toRef.current,\n                    mode: 'highest'\n                });\n                Transforms.setNodes(editor, { isCollapsed: false });\n                return;\n            } else {\n                if (isCollapsed && isStart) {\n                    insertBreak();\n                    Transforms.setNodes(\n                        editor,\n                        { type: ElementKinds.paragraph },\n                        {\n                            at: selection\n                        }\n                    );\n                    return;\n                }\n                if (isCollapsed && isEnd) {\n                    insertBreak();\n                    Transforms.setNodes(editor, { type: ElementKinds.paragraph });\n                    return;\n                }\n            }\n        }\n        insertBreak();\n    };\n\n    editor.isVisible = (node: Element) => {\n        const index = editor.children.indexOf(node);\n        if (index !== -1) {\n            const headingLevel = HeaderLevelMap[node.type];\n            // 如果本身是一级标题，则不折叠\n            if (headingLevel === HeaderLevelMap[ElementKinds.heading_1]) {\n                return true;\n            }\n            // 如果本身是二级标题，只可能被一级标题影响\n            let minHeadingLevel = headingLevel !== undefined ? headingLevel - 1 : HeaderLevelMap[ElementKinds.heading_6];\n            for (let i = index - 1; i >= 0; i--) {\n                const element = editor.children[i] as Element;\n                if (isHeadingElement(element)) {\n                    const elementHeadingLevel = HeaderLevelMap[element.type];\n                    if (elementHeadingLevel <= minHeadingLevel) {\n                        // 遇到一级标题直接退出，无论是否折叠\n                        // 其余情况如果是折叠标题，可以直接返回结果，否则需要继续向上查找\n                        if (element.type === ElementKinds.heading_1) {\n                            return !(element as HeadingElement).isCollapsed;\n                        } else if ((element as HeadingElement).isCollapsed) {\n                            return false;\n                        } else {\n                            // 遇到未折叠标题，则只能被比它更大的标题影响\n                            minHeadingLevel = elementHeadingLevel - 1;\n                        }\n                    }\n                }\n            }\n            return true;\n        }\n        return isVisible(node);\n    };\n\n    editor.getAllVisibleStates = () => {\n        return getAllVisibleState(editor);\n    };\n\n    editor.mousedown = (event: MouseEvent) => {\n        const target = event.target as HTMLElement;\n        if (target instanceof HTMLElement && target.classList.contains('slate-editable-container')) {\n            const index = editor.children.length - 1;\n            const lastElement = editor.children[editor.children.length - 1] as Element;\n            if (!editor.isVisible(lastElement)) {\n                const path = [index];\n                const collapsedStandardHeadings = getCollapsedStandardHeadingAbove(editor, path);\n                if (collapsedStandardHeadings.length > 0) {\n                    event.preventDefault();\n                    const headingPath = collapsedStandardHeadings[collapsedStandardHeadings.length - 1];\n                    const headingNode = editor.children[headingPath[0]] as Element;\n                    const dom = AngularEditor.toDOMNode(editor, headingNode);\n                    const rect = dom.getBoundingClientRect();\n                    if (event.y > rect.bottom && event.x > rect.left && event.x < rect.right) {\n                        collapsedStandardHeadings.forEach(path => {\n                            Transforms.setNodes(editor, { isCollapsed: false } as Partial<Node>, { at: path });\n                        });\n                        const isEmptyParagraph = TheQueries.isEmptyParagraphElement(editor, editor.children[index] as Element);\n                        if (isEmptyParagraph) {\n                            Transforms.select(editor, path);\n                        } else {\n                            Transforms.insertNodes(editor, createEmptyParagraph(), { at: [index + 1] });\n                            Transforms.select(editor, [index + 1]);\n                        }\n                        AngularEditor.focus(editor);\n                    }\n                }\n                return;\n            }\n        }\n        mousedown(event);\n    };\n\n    return editor;\n};\n\nconst headingListPlugins = HeadingEditor.headingPlugins();\n\nexport const createHeadingPlugin = (locale: Signal<TheI18nTranslation>) =>\n    createPluginFactory<HeadingPluginOptions>({\n        key: PluginKeys.heading,\n        withOverrides: withHeading,\n        plugins: headingListPlugins,\n        toolbarItems: [\n            {\n                key: ElementKinds.headingList,\n                name: locale().headingList,\n                type: ToolbarItemType.dropdown,\n                dropdownMode: DropdownMode.text,\n                dropdownItemKey: ElementKinds.paragraph,\n                includes: [ElementKinds.paragraph, ...STANDARD_HEADING_TYPES]\n            },\n            {\n                key: ElementKinds.paragraph,\n                name: locale().paragraph,\n                styles: { height: '40px' },\n                execute: editor => Transforms.setNodes(editor, { type: ElementKinds.paragraph }),\n                active: editor => TheQueries.isParagraph(editor)\n            },\n            {\n                key: ElementKinds.heading_1,\n                name: locale().heading1,\n                icon: 'header-1',\n                styles: { height: '40px', fontSize: '28px' },\n                execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_1),\n                active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_1)\n            },\n            {\n                key: ElementKinds.heading_2,\n                icon: 'header-2',\n                name: locale().heading2,\n                styles: { height: '38px', fontSize: '24px' },\n                execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_2),\n                active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_2)\n            },\n            {\n                key: ElementKinds.heading_3,\n                icon: 'header-3',\n                name: locale().heading3,\n                styles: { height: '34px', fontSize: '20px' },\n                execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_3),\n                active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_3)\n            },\n            {\n                key: ElementKinds.heading_4,\n                icon: 'header-4',\n                name: locale().heading4,\n                styles: { height: '30px', fontSize: '16px' },\n                execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_4),\n                active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_4)\n            },\n            {\n                key: ElementKinds.heading_5,\n                icon: 'header-5',\n                name: locale().heading5,\n                styles: { height: '26px', fontSize: '12px' },\n                execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_5),\n                active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_5)\n            },\n            {\n                key: ElementKinds.heading_6,\n                icon: 'header-6',\n                name: locale().heading6,\n                styles: { height: '22px', fontSize: '10px' },\n                execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_6),\n                active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_6)\n            }\n        ],\n        menuItems: [\n            {\n                key: ElementKinds.heading_1,\n                type: ThePluginMenuItemType.icon,\n                execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_1),\n                active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_1),\n                name: locale().heading1,\n                displayKey: '/h1',\n                description: locale().heading1Desc,\n                icon: 'header-1',\n                menuIcon: PluginMenuIcons.heading_1,\n                keywords: `h,H,bt,heading1,h1,${locale().heading1}`\n            },\n            {\n                key: ElementKinds.heading_2,\n                type: ThePluginMenuItemType.icon,\n                execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_2),\n                active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_2),\n                name: locale().heading2,\n                icon: 'header-2',\n                description: locale().heading2Desc,\n                displayKey: '/h2',\n                menuIcon: PluginMenuIcons.heading_2,\n                keywords: `h,H,bt,heading2,h2,${locale().heading2}`\n            },\n            {\n                key: ElementKinds.heading_3,\n                type: ThePluginMenuItemType.icon,\n                execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_3),\n                active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_3),\n                name: locale().heading3,\n                icon: 'header-3',\n                description: locale().heading3Desc,\n                displayKey: '/h3',\n                menuIcon: PluginMenuIcons.heading_3,\n                keywords: `h,H,bt,heading3,h3,${locale().heading3}`\n            },\n            {\n                key: ElementKinds.heading_4,\n                type: ThePluginMenuItemType.icon,\n                execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_4),\n                active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_4),\n                name: locale().heading4,\n                icon: 'header-4',\n                description: locale().heading4Desc,\n                displayKey: '/h4',\n                menuIcon: PluginMenuIcons.heading_4,\n                keywords: `h,H,bt,heading4,BT,h4,${locale().heading4}`\n            },\n            {\n                key: ElementKinds.heading_5,\n                type: ThePluginMenuItemType.icon,\n                execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_5),\n                active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_5),\n                name: locale().heading5,\n                icon: 'header-5',\n                description: locale().heading5Desc,\n                displayKey: '/h5',\n                keywords: `h,H,bt,heading5,h5,${locale().heading5}`\n            },\n            {\n                key: ElementKinds.heading_6,\n                type: ThePluginMenuItemType.icon,\n                execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_6),\n                active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_6),\n                name: locale().heading6,\n                icon: 'header-6',\n                description: locale().heading6Desc,\n                displayKey: '/h6',\n                keywords: `h,H,bt,heading6,h6,${locale().heading6}`\n            }\n        ],\n        options: headingOptions\n    })();\n","import { TheBaseFlavourElement } from '../../interfaces/base-element.flavour';\n\nexport class TheHrFlavour extends TheBaseFlavourElement {\n    createNativeElement(): HTMLElement {\n        const element = document.createElement('div');\n        return element;\n    }\n\n    onInit(): void {\n        super.onInit();\n        const hrElement = document.createElement('hr');\n        this.nativeElement.appendChild(hrElement);\n    }\n\n    render() {\n        super.render();\n    }\n\n    rerender() {\n        super.rerender();\n    }\n}\n","import { Editor, Element } from 'slate';\nimport { ElementKinds } from '../../constants';\nimport { PluginMenuIcons, ThePluginMenuItemType } from '../../constants/plugin-menu';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { HrEditor } from './hr.editor';\nimport { Signal } from '@angular/core';\nimport { TheI18nTranslation } from '../../i18n';\nimport { TheHrFlavour } from './hr.flavour';\n\nexport const withHr = <T extends Editor>(editor: T): T => {\n    const { isVoid, isBlockCard, renderElement } = editor;\n\n    editor.isVoid = (element: Element) => {\n        return element.type === ElementKinds.hr || isVoid(element);\n    };\n\n    editor.isBlockCard = (element: Element) => {\n        if (element.type === ElementKinds.hr) {\n            return true;\n        }\n        return isBlockCard(element);\n    };\n\n    editor.renderElement = (element: Element) => {\n        if (element.type === ElementKinds.hr) {\n            return TheHrFlavour;\n        }\n        return renderElement(element);\n    };\n\n    return editor;\n};\n\nexport const createHrPlugin = (locale: Signal<TheI18nTranslation>) =>\n    createPluginFactory({\n        key: PluginKeys.hr,\n        withOverrides: withHr,\n        toolbarItems: [\n            {\n                key: ElementKinds.hr,\n                icon: 'horizontal-line',\n                name: locale().divider,\n                active: editor => TheQueries.isBlockActive(editor, ElementKinds.hr),\n                execute: editor => HrEditor.insertHr(editor)\n            }\n        ],\n        menuItems: [\n            {\n                key: ElementKinds.hr,\n                keywords: `fengexian,fgx,divider,line,${locale().divider}`,\n                type: ThePluginMenuItemType.group,\n                active: editor => TheQueries.isBlockActive(editor, ElementKinds.hr),\n                execute: editor => HrEditor.insertHr(editor),\n                name: locale().divider,\n                menuIcon: PluginMenuIcons.hr,\n                description: locale().dividerDesc,\n                displayKey: '/fgx'\n            }\n        ],\n        options: {\n            allowParentTypes: [ElementKinds.tableCell]\n        }\n    })();\n","import { ElementKinds } from '../../../constants';\n\nexport const getListTypes = () => {\n    return [ElementKinds.bulletedList, ElementKinds.numberedList];\n};\n","import { Editor, Element } from 'slate';\nimport { ElementKinds, LayoutTypes } from '../../constants/node-types';\nimport { ImageElement } from '../../custom-types';\nimport { getListTypes } from '../list/queries/get-list-types';\nimport { isHeadingElement } from '../heading/utils';\nimport { getCachedHeightByElement } from 'slate-angular';\nexport const EDITOR_TO_IMAGE_TO_FLOATING_MAP = new WeakMap<Editor, Map<string, {}>>();\n\nexport const getImageWithFloatingMap = (editor: Editor) => {\n    let imageWithFloatingMap = EDITOR_TO_IMAGE_TO_FLOATING_MAP.get(editor);\n    if (!imageWithFloatingMap) {\n        imageWithFloatingMap = new Map();\n        EDITOR_TO_IMAGE_TO_FLOATING_MAP.set(editor, imageWithFloatingMap);\n    }\n    return imageWithFloatingMap;\n};\n\nexport const isFloatingElementByType = (element: Element) => {\n    return (\n        element.type === ElementKinds.paragraph ||\n        element.type === ElementKinds.blockquote ||\n        isHeadingElement(element) ||\n        getListTypes().includes(element.type)\n    );\n};\n\nexport const isImageWithFloating = (element: ImageElement) => {\n    return element.layout === LayoutTypes.wrapLeft || element.layout === LayoutTypes.wrapRight;\n};\n\nexport const getFloatingElementsAndAccumulatedHeight = (editor: Editor, element: ImageElement, imageHeight: number) => {\n    const index = editor.children.indexOf(element);\n    let accumulatedHeight = 0;\n    const floatingElements: Element[] = [];\n    for (let i = index + 1; i < editor.children.length; i++) {\n        const child = editor.children[i];\n        if (isFloatingElementByType(child as Element) && accumulatedHeight <= imageHeight) {\n            const currentHeight = getCachedHeightByElement(editor, child as Element) || editor.getRoughHeight(child as Element);\n            accumulatedHeight += currentHeight;\n            floatingElements.push(child as Element);\n        } else {\n            break;\n        }\n    }\n    return [floatingElements, accumulatedHeight] as [Element[], number];\n};\n\nexport const calcFloatingElements = (editor: Editor, element: ImageElement, imageHeight: number) => {\n    const imageWithFloatingMap = getImageWithFloatingMap(editor);\n    if (isImageWithFloating(element)) {\n        const [floatingElements, accumulatedHeight] = getFloatingElementsAndAccumulatedHeight(editor, element, imageHeight);\n        if (accumulatedHeight > 0 && floatingElements.length > 0) {\n            const value = {};\n            floatingElements.forEach(ele => (value[ele.key] = true));\n            imageWithFloatingMap.set(element.key, value);\n            return [floatingElements, accumulatedHeight] as [Element[], number];\n        }\n    } else {\n        imageWithFloatingMap.delete(element.key);\n    }\n    return [[], 0] as [Element[], number];\n};\n\nexport const isFloatingElement = (editor: Editor, element: Element) => {\n    const imageWithFloatingMap = getImageWithFloatingMap(editor);\n    for (const [, value] of imageWithFloatingMap) {\n        return !!value[element.key];\n    }\n    return false;\n};\n","import { ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay } from '@angular/cdk/overlay';\nimport { NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Component,\n    DestroyRef,\n    ElementRef,\n    inject,\n    Inject,\n    OnDestroy,\n    OnInit,\n    Signal,\n    TemplateRef,\n    ViewChild,\n    ChangeDetectionStrategy\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ThyAction, ThyActions } from 'ngx-tethys/action';\nimport { ThyDivider } from 'ngx-tethys/divider';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyImageDirective, ThyImageGroup, ThyImageService } from 'ngx-tethys/image';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { ThyProgress } from 'ngx-tethys/progress';\nimport { ThyTooltipDirective } from 'ngx-tethys/tooltip';\nimport { ThyUploadStatus } from 'ngx-tethys/upload';\nimport { firstValueFrom } from 'rxjs';\nimport { Subscription } from 'rxjs/internal/Subscription';\nimport { map } from 'rxjs/operators';\nimport { Editor, Transforms } from 'slate';\nimport {\n    AngularEditor,\n    BeforeContextChange,\n    SlateElementContext,\n    getBlockCardByNativeElement,\n    isDebug,\n    debugLog,\n    getCachedHeightByElement,\n    cacheHeightByElement\n} from 'slate-angular';\nimport { HistoryEditor } from 'slate-history';\nimport { Alignment, ElementKinds, LayoutTypes, ROOT_ELEMENT_MARGIN_BOTTOM, ToolbarActionTypes } from '../../constants';\nimport { getPluginOptions } from '../../core';\nimport { ImageElement } from '../../custom-types';\nimport {\n    ImageEntry,\n    ImageInfo,\n    ImagePluginOptions,\n    LayoutOption,\n    PluginKeys,\n    THE_IMAGE_SERVICE_TOKEN,\n    TheBaseElement,\n    TheImageService\n} from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { TheContextService } from '../../services/context.service';\nimport { isMobileMode } from '../../utils/get-mode';\nimport { ImageEditor } from './image.editor';\nimport { injectTranslations, TheI18nService, TheI18nTranslation } from '../../i18n';\nimport { calcFloatingElements } from './image-with-floating';\n\n@Component({\n    selector: 'the-image, [theImage]',\n    templateUrl: './image.component.html',\n    imports: [NgStyle, NgTemplateOutlet, ThyIcon, ThyImageDirective, ThyAction, ThyDivider, ThyActions, ThyTooltipDirective, ThyProgress],\n    changeDetection: ChangeDetectionStrategy.Eager,\n    providers: [ThyImageService]\n})\nexport class TheImage\n    extends TheBaseElement<ImageElement, Editor>\n    implements OnInit, OnDestroy, AfterViewInit, BeforeContextChange<SlateElementContext>\n{\n    locale: Signal<TheI18nTranslation> = injectTranslations(inject(TheI18nService));\n\n    naturalWidth = 0;\n\n    naturalHeight = 0;\n\n    imageEntry: ImageEntry = {};\n\n    uploading = false;\n\n    percentage = 0;\n\n    fileItem: { url: string; file: File | string };\n\n    layoutDefaultWidth = 368;\n\n    disablePreview = false;\n\n    loadImageError = false;\n\n    layoutOptions: LayoutOption[] = [\n        {\n            key: Alignment.left,\n            icon: 'image-left',\n            name: this.locale().alignLeft,\n            handle: (e: MouseEvent, key: Alignment) => this.setImageNode(e, { align: key, layout: undefined })\n        },\n        {\n            key: Alignment.center,\n            icon: 'image-center',\n            name: this.locale().alignCenter,\n            handle: (e: MouseEvent, key: Alignment) => this.setImageNode(e, { align: key, layout: undefined })\n        },\n        {\n            key: Alignment.right,\n            icon: 'image-right',\n            name: this.locale().alignRight,\n            handle: (e: MouseEvent, key: Alignment) => this.setImageNode(e, { align: key, layout: undefined })\n        },\n        {\n            key: ToolbarActionTypes.split\n        },\n        {\n            key: LayoutTypes.wrapLeft,\n            icon: 'wrap-left',\n            name: this.locale().wrapLeft,\n            handle: (e: MouseEvent, key: LayoutTypes) => this.setImageNode(e, { layout: key })\n        },\n        {\n            key: LayoutTypes.wrapRight,\n            icon: 'wrap-right',\n            name: this.locale().wrapRight,\n            handle: (e: MouseEvent, key: LayoutTypes) => this.setImageNode(e, { layout: key })\n        },\n        {\n            key: 'remove',\n            icon: 'trash',\n            name: this.locale().delete,\n            handle: (e: MouseEvent) => this.onDelete(e)\n        }\n    ];\n\n    private uploadingSubscription: Subscription;\n\n    private mouseMoveSubscription: Subscription;\n\n    private draggable = false;\n\n    private layoutToolbarRef: ThyPopoverRef<any>;\n\n    private imagePluginOptions: ImagePluginOptions;\n\n    private imageLoadedCacheHeightTimer: NodeJS.Timeout;\n\n    get isOpen() {\n        return this.layoutToolbarRef && this.layoutToolbarRef.getOverlayRef() && this.layoutToolbarRef.getOverlayRef().hasAttached();\n    }\n\n    get imageBindingWidth() {\n        const currentWidth = this.imageEntry?.width || this.naturalWidth;\n        return this.imageEntry?.layout && currentWidth > this.layoutDefaultWidth && !this.imageEntry?.reSized\n            ? this.layoutDefaultWidth\n            : currentWidth;\n    }\n\n    @ViewChild('imageContent')\n    imageContent: ElementRef;\n\n    @ViewChild('img', { static: false })\n    img: ElementRef;\n\n    @ViewChild('layoutToolbar', { static: true })\n    layoutToolbar: TemplateRef<any>;\n\n    @ViewChild(ThyImageDirective) imageDirective: ThyImageDirective;\n\n    constructor(\n        public cdr: ChangeDetectorRef,\n        public imageGroup: ThyImageGroup,\n        @Inject(THE_IMAGE_SERVICE_TOKEN)\n        private imageService: TheImageService,\n        private theContextService: TheContextService,\n        private thyPopover: ThyPopover,\n        private overlay: Overlay,\n        private destroyRef: DestroyRef\n    ) {\n        super();\n    }\n\n    beforeContextChange = (value: SlateElementContext<ImageElement>) => {\n        if (value.element !== this.element && value.element.thumbUrl) {\n            let thumbUrl = value.element.thumbUrl;\n            let originUrl = value.element.originUrl;\n\n            if (this.imageService.getImageUrl) {\n                this.imageService.getImageUrl(value.element).subscribe(({ thumbUrl, originUrl }) => {\n                    this.buildImageEntry(value.element, thumbUrl, originUrl);\n                    this.cdr.markForCheck();\n                });\n            } else {\n                this.buildImageEntry(value.element, thumbUrl, originUrl);\n            }\n            this.setBlockCardLayoutAttr();\n        }\n    };\n\n    buildImageEntry(newElement: ImageElement, thumbUrl: string, originUrl: string) {\n        this.imageEntry = {\n            ...newElement,\n            thumbUrl,\n            originUrl,\n            align: newElement.align || Alignment.left,\n            reSized: newElement.reSized || false\n        };\n    }\n\n    ngOnInit() {\n        super.ngOnInit();\n        this.setImageFileItem();\n\n        if (this.fileItem?.file) {\n            this.uploadImage();\n        }\n        this.setImagePluginOptions();\n        this.setDisablePreview();\n    }\n\n    ngAfterViewInit() {\n        this.subscribeMouseUp();\n        this.subscribeImageUploadingState();\n    }\n\n    override afterViewInit() {\n        super.afterViewInit();\n        this.setImageMinHeight();\n    }\n\n    onContextChange() {\n        super.onContextChange();\n        if (this.initialized && !isMobileMode(this.editor)) {\n            if (this.isShouldOpen()) {\n                this.openLayoutToolbar();\n            }\n            if (this.isShouldClose()) {\n                this.closeLayoutToolbar();\n            }\n        }\n    }\n\n    ngOnDestroy() {\n        if (this.imageLoadedCacheHeightTimer) {\n            clearTimeout(this.imageLoadedCacheHeightTimer);\n        }\n        this.uploadingSubscription.unsubscribe();\n        this.theContextService.removeUploadFile(this.fileItem);\n        if (this.uploading) {\n            this.theContextService.uploadingStatus$.next(false);\n        }\n        super.ngOnDestroy();\n    }\n\n    private setImageMinHeight() {\n        if (!AngularEditor.isEnabledVirtualScroll(this.editor)) {\n            return;\n        }\n        const realHeight = getCachedHeightByElement(this.editor, this.element);\n        if (realHeight) {\n            const blockCard = getBlockCardByNativeElement(this.nativeElement);\n            if (blockCard) {\n                const minHeight = realHeight - ROOT_ELEMENT_MARGIN_BOTTOM;\n                blockCard.style.minHeight = minHeight + 'px';\n            } else {\n                if (isDebug) {\n                    debugLog(\n                        'warn',\n                        'image render and can not find blockCard',\n                        this.element.key,\n                        this.editor.children.indexOf(this.element)\n                    );\n                }\n            }\n        } else {\n            if (isDebug) {\n                debugLog(\n                    'warn',\n                    'image render and no cache height',\n                    this.element.key,\n                    'index: ',\n                    this.editor.children.indexOf(this.element)\n                );\n            }\n        }\n    }\n\n    private clearMinHeight() {\n        if (!AngularEditor.isEnabledVirtualScroll(this.editor)) {\n            return;\n        }\n        const blockCard = getBlockCardByNativeElement(this.nativeElement);\n        if (blockCard && blockCard.style.minHeight) {\n            blockCard.style.minHeight = '';\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    private setImagePluginOptions() {\n        this.imagePluginOptions = getPluginOptions<ImagePluginOptions>(this.editor, PluginKeys.image);\n    }\n\n    private setDisablePreview() {\n        const { disablePreview } = this.imagePluginOptions;\n        if (disablePreview && typeof disablePreview === 'function') {\n            this.disablePreview = disablePreview(this.editor);\n        } else {\n            this.disablePreview = disablePreview as boolean;\n        }\n    }\n\n    private setImageFileItem() {\n        this.fileItem = this.theContextService.uploadingFiles.find(item => item.url === this.element.url);\n    }\n\n    private subscribeMouseUp() {\n        this.theContextService.onMouseUp$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(e => this.endDrag(e));\n    }\n\n    private subscribeImageUploadingState() {\n        this.uploadingSubscription = this.imageService\n            .getUploadingItems$()\n            .pipe(\n                map(\n                    fileUploadingItem =>\n                        this.fileItem?.file &&\n                        fileUploadingItem.find(item => item.file === this.fileItem?.file || item?.url === this.fileItem?.file)\n                )\n            )\n            .subscribe(uploadingItem => {\n                if (!uploadingItem || !uploadingItem.result) {\n                    return;\n                }\n                this.percentage = uploadingItem.result.uploadFile.progress.percentage;\n                const { status } = uploadingItem.result;\n                // 成功和失败都要上传结束\n                if (status === ThyUploadStatus.done) {\n                    this.uploadingSubscription.unsubscribe();\n                    this.uploading = false;\n                    this.theContextService.removeUploadFile(this.fileItem);\n                    setTimeout(() => this.theContextService.uploadingStatus$.next(false), 0);\n                }\n                this.cdr.detectChanges();\n            });\n    }\n\n    private setImageNodes(imageInfo: ImageEntry) {\n        const path = AngularEditor.findPath(this.editor, this.element);\n        const data = { type: ElementKinds.image, url: null, ...imageInfo };\n        HistoryEditor.withoutSaving(this.editor, () => Transforms.setNodes(this.editor, data, { at: path }));\n    }\n\n    async uploadImage() {\n        this.uploading = true;\n\n        const file = this.fileItem.file;\n        if (file instanceof File) {\n            this.imageEntry = {\n                align: this.imageEntry.align || Alignment.center,\n                thumbUrl: URL.createObjectURL(file)\n            };\n        }\n        this.theContextService.uploadingStatus$.next(true);\n\n        const [fileEntity] = await firstValueFrom(this.imageService.uploadFileHandle(file));\n        const { name, size, thumbUrl, originUrl } = fileEntity;\n        const imageInfo: ImageEntry = {\n            name,\n            thumbUrl,\n            originUrl,\n            size,\n            align: this.imageEntry.align || Alignment.center,\n            originWidth: this.naturalWidth,\n            originHeight: this.naturalHeight\n        };\n        this.setImageNodes(imageInfo);\n    }\n\n    startDrag(event: MouseEvent, axis: string) {\n        if (this.loadImageError || !this.img) {\n            return;\n        }\n        event.preventDefault();\n        event.stopPropagation();\n        this.draggable = true;\n        const imgElement = this.img.nativeElement as HTMLImageElement;\n        const options = {\n            axis,\n            printerPositionX: event.pageX,\n            printerPositionY: event.pageY,\n            internalWidth: imgElement.width || this.imageEntry.width,\n            internalHeight: imgElement.height || this.imageEntry.height,\n            maxWidth: this.theContextService.getFirstElementChild().offsetWidth\n        };\n        this.mouseMoveSubscription = this.theContextService.onMouseMove$.subscribe(e => this.mouseMoveHandle(e, options));\n    }\n\n    mouseMoveHandle(\n        event: MouseEvent,\n        options: {\n            axis: string;\n            printerPositionX: number;\n            printerPositionY: number;\n            internalWidth: number;\n            internalHeight: number;\n            maxWidth: number;\n        }\n    ) {\n        if (this.draggable) {\n            const { axis, printerPositionX, printerPositionY, internalWidth, internalHeight, maxWidth } = options;\n            const isReversal = axis.includes('-');\n\n            let offsetX = event.pageX - printerPositionX;\n            let offsetY = event.pageY - printerPositionY;\n            let { width, height } = this.element;\n\n            if (isReversal) {\n                offsetX = -offsetX;\n                offsetY = -offsetY;\n            }\n            if (this.element.align === 'center') {\n                offsetX = offsetX * 2;\n            }\n\n            if (axis.includes('x')) {\n                width = offsetX + internalWidth;\n                if (width >= maxWidth) {\n                    width = maxWidth;\n\n                    // clear `layout` when the image is adjusted to the maximum value under rich media\n                    if (this.imageEntry?.layout) {\n                        ImageEditor.setImageNode(this.editor, { layout: undefined }, this.element);\n                    }\n                }\n                if (width <= 100) {\n                    width = 100;\n                }\n                if (axis.includes('l')) {\n                    const ratio = internalWidth / width;\n                    height = internalHeight / ratio;\n                }\n            } else if (axis.includes('y')) {\n                height = offsetY + internalHeight;\n                if (height >= 1000) {\n                    height = 1000;\n                }\n                if (height <= 100) {\n                    height = 100;\n                }\n                if (axis.includes('l')) {\n                    const ratio = internalHeight / height;\n                    width = internalWidth / ratio;\n                }\n            }\n\n            if (!this.imageEntry.reSized && this.imageEntry.width !== width) {\n                this.imageEntry.reSized = true;\n            }\n            this.img.nativeElement.style.width = width + 'px';\n            this.imageEntry.width = width;\n            this.imageEntry.height = height;\n        }\n    }\n\n    endDrag(event: MouseEvent) {\n        if (this.draggable) {\n            this.draggable = false;\n            this.mouseMoveSubscription.unsubscribe();\n            if (\n                this.imageEntry.width === this.theContextService.getOptions().width &&\n                this.imageEntry.width <= this.naturalWidth &&\n                this.element.width\n            ) {\n                this.imageEntry.width = null;\n                this.imageEntry.height = null;\n            }\n            Transforms.setNodes(\n                this.editor,\n                {\n                    type: ElementKinds.image,\n                    width: this.imageEntry.width,\n                    height: this.imageEntry.height,\n                    reSized: this.imageEntry.reSized\n                },\n                { at: this.selection }\n            );\n        }\n    }\n\n    cancelUpload() {\n        Transforms.removeNodes(this.editor, { at: this.selection });\n    }\n\n    isShouldOpen() {\n        const { richMedia } = this.editor?.options;\n        return (\n            !this?.readonly &&\n            richMedia &&\n            this.isCollapsedAndNonReadonly &&\n            TheQueries.isGlobalCollapsed(this.editor) &&\n            !this.uploading &&\n            !this.isOpen\n        );\n    }\n\n    isShouldClose() {\n        return (\n            this.isOpen &&\n            (this?.readonly || !this.isCollapsedAndNonReadonly || !TheQueries.isGlobalCollapsed(this.editor) || this.uploading)\n        );\n    }\n\n    openLayoutToolbar() {\n        if (!this.img) {\n            return;\n        }\n        this.layoutToolbarRef = this.thyPopover.open(this.layoutToolbar, {\n            origin: this.imageContent,\n            panelClass: 'the-plugin-toolbar-popover',\n            insideClosable: false,\n            backdropClosable: true,\n            hasBackdrop: false,\n            minWidth: 0,\n            viewContainerRef: this.viewContainerRef,\n            scrollStrategy: this.overlay.scrollStrategies.reposition()\n        });\n        this.layoutToolbarRef?.getOverlayRef().updatePositionStrategy(this.createPositionStrategy());\n\n        setTimeout(() => {\n            this.layoutToolbarRef?.getOverlayRef().updatePosition();\n        }, 150);\n    }\n\n    closeLayoutToolbar() {\n        this.layoutToolbarRef?.close();\n    }\n\n    layoutActive(key: Alignment | LayoutTypes) {\n        const { layout, align } = this.imageEntry;\n        return key && ((key === align && !layout) || key === layout);\n    }\n\n    setImageNode(e: MouseEvent, props: Partial<ImageElement>) {\n        e.preventDefault();\n        ImageEditor.setImageNode(this.editor, props, this.element);\n    }\n\n    setBlockCardLayoutAttr() {\n        Promise.resolve().then(() => {\n            const currentElement = AngularEditor.toDOMNode(this.editor, this.element);\n            const blockCard = currentElement.closest('.slate-block-card');\n            const { layout } = this.element;\n\n            if (blockCard && layout) {\n                blockCard.setAttribute('layout', layout);\n            } else if (blockCard && !layout) {\n                blockCard.removeAttribute('layout');\n            }\n            this.layoutToolbarRef?.getOverlayRef().updatePosition();\n        });\n    }\n\n    onDelete(event: MouseEvent) {\n        event.preventDefault();\n        ImageEditor.removeImage(this.editor, this.element);\n    }\n\n    createPositionStrategy(): FlexibleConnectedPositionStrategy {\n        const bottomPosition: ConnectedPosition = {\n            originX: 'center',\n            originY: 'bottom',\n            overlayX: 'center',\n            overlayY: 'top',\n            offsetX: 0,\n            offsetY: 4\n        };\n        return this.overlay\n            .position()\n            .flexibleConnectedTo(this.imageContent)\n            .withFlexibleDimensions(false)\n            .withGrowAfterOpen(false)\n            .withPush(false)\n            .withPositions([bottomPosition]);\n    }\n\n    imageLoaded(event: Event) {\n        const img = event.target as HTMLImageElement;\n        this.naturalWidth = img.naturalWidth;\n        this.naturalHeight = img.naturalHeight;\n        if (AngularEditor.isEnabledVirtualScroll(this.editor)) {\n            this.imageLoadedCacheHeightTimer = setTimeout(() => {\n                const result = this.clearMinHeight();\n                const height = this.calcHeight();\n                cacheHeightByElement(this.editor, this.element, height);\n            }, 0);\n        }\n    }\n\n    imageError(event: Event) {\n        const img = event.target as HTMLImageElement;\n        const errorImageUrl = this.imagePluginOptions?.errorImageUrl;\n        if (!this.loadImageError && errorImageUrl) {\n            const url = typeof errorImageUrl === 'function' ? errorImageUrl(this.editor) : errorImageUrl;\n            this.loadImageError = true;\n            this.disablePreview = true;\n            this.imageContent.nativeElement.classList.add('the-image-error');\n            img.src = url;\n        }\n        img.onerror = null;\n    }\n\n    // 组件库 dialog 弹出时，会记录当前的焦点。阻止 mousedown 默认行为，使得图片原本的 click 事件能获取到正确的焦点。\n    preventDefault(event: Event) {\n        event.preventDefault();\n        event.stopPropagation();\n    }\n\n    imageClick() {\n        const index = this.imageGroup.images.findIndex(item => item === this.imageDirective);\n        const imageGroup = this.imageGroup.images.map(item => {\n            const imageMeta = item.thyImageMeta();\n            return {\n                originUrl: item.thyOriginSrc(),\n                thumbUrl: item.thyPreviewSrc(),\n                name: imageMeta.name,\n                size: imageMeta.size\n            };\n        }) as ImageInfo[];\n        const { originUrl, thumbUrl, name, size } = this.element;\n        if (this.imagePluginOptions.preview) {\n            this.imagePluginOptions.preview({\n                editor: this.editor,\n                previewImageInfo: {\n                    image: {\n                        originUrl,\n                        thumbUrl,\n                        name,\n                        size\n                    },\n                    imageGroup,\n                    index\n                }\n            });\n        }\n    }\n\n    calcHeight(): number {\n        const height = super.calcHeight();\n        const [, accumulatedHeight] = calcFloatingElements(this.editor, this.element, height);\n        if (accumulatedHeight > height) {\n            return accumulatedHeight;\n        }\n        return height;\n    }\n}\n","<div class=\"the-image-container\" contenteditable=\"false\" [style.textAlign]=\"imageEntry.align\">\n  @if (imageEntry.thumbUrl) {\n    <div #imageContent class=\"image-content\" contenteditable=\"false\" [class.cursor-pointer]=\"!selection\">\n      <img\n        #img\n        thyImage\n        class=\"main-image\"\n        [class.image-collapsed]=\"selection && !uploading\"\n        [ngStyle]=\"{ 'width.px': imageBindingWidth }\"\n        [alt]=\"imageEntry.name\"\n        [thySrc]=\"imageEntry.thumbUrl\"\n        [thyPreviewSrc]=\"imageEntry.thumbUrl\"\n        [thyOriginSrc]=\"imageEntry.originUrl\"\n        [thyDisablePreview]=\"disablePreview\"\n        [thyImageMeta]=\"{ name: imageEntry.name, size: imageEntry.size }\"\n        (load)=\"imageLoaded($event)\"\n        (mousedown)=\"preventDefault($event)\"\n        (error)=\"imageError($event)\"\n        (click)=\"imageClick($event)\"\n      />\n      @if (isCollapsedAndNonReadonly) {\n        <div class=\"image-profile\" [class.outline]=\"selection\">\n          @if (!loadImageError) {\n            <span (mousedown)=\"startDrag($event, '-xl')\" class=\"image-pointer left top\"></span>\n            <span (mousedown)=\"startDrag($event, 'xl')\" class=\"image-pointer right top\"></span>\n            <span (mousedown)=\"startDrag($event, 'xl')\" class=\"image-pointer right bottom\"></span>\n            <span (mousedown)=\"startDrag($event, '-xl')\" class=\"image-pointer left bottom\"></span>\n          }\n        </div>\n      }\n      <ng-template [ngTemplateOutlet]=\"imageUploading\"></ng-template>\n      @if (!uploading) {\n        <div class=\"layer\" [class.readonly]=\"readonly\"></div>\n      }\n    </div>\n  } @else {\n    @if (!imageEntry.thumbUrl) {\n      <div class=\"image-loading cursor-pointer\" contenteditable=\"false\">\n        <thy-icon thyIconName=\"image\"></thy-icon>\n      </div>\n    }\n    <ng-template [ngTemplateOutlet]=\"imageUploading\"></ng-template>\n  }\n</div>\n\n<ng-template #layoutToolbar>\n  <thy-actions thySize=\"xxs\">\n    @for (item of layoutOptions; track $index) {\n      @if (item.key !== 'split') {\n        <a\n          href=\"javascript:;\"\n          thyAction\n          [thyType]=\"item.key === 'remove' ? 'danger' : 'primary'\"\n          [thyActionIcon]=\"item.icon\"\n          [thyActionActive]=\"layoutActive(item.key)\"\n          [thyTooltip]=\"item.name\"\n          thyTooltipPlacement=\"top\"\n          (mousedown)=\"item?.handle($event, item.key)\"\n        ></a>\n      }\n      @if (item.key === 'split') {\n        <thy-divider class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\" thyColor=\"light\"></thy-divider>\n      }\n    }\n  </thy-actions>\n</ng-template>\n\n<ng-template #imageUploading>\n  @if (uploading) {\n    <div class=\"uploading\">\n      <div class=\"uploading-percentage\">\n        <thy-progress thyType=\"primary\" [thyValue]=\"percentage\" thySize=\"sm\"></thy-progress>\n        <thy-icon (click)=\"cancelUpload($event)\" thyIconName=\"close-circle-bold-fill\" thyIconLegging=\"true\"> </thy-icon>\n      </div>\n    </div>\n  }\n</ng-template>\n","import { Editor, Element } from 'slate';\nimport { isFloatingElement } from './image-with-floating';\n\nexport const withFloating = <T extends Editor>(editor: T): T => {\n    const { isFloating } = editor;\n\n    editor.isFloating = (element: Element) => {\n        if (isFloatingElement(editor, element)) {\n            return true;\n        }\n        return isFloating(element);\n    };\n\n    return editor;\n};\n","import { Editor, Element } from 'slate';\nimport { AngularEditor, ClipboardData, getClipboardData } from 'slate-angular';\nimport { ElementKinds } from '../../constants';\nimport { PluginMenuIcons, ThePluginMenuItemType } from '../../constants/plugin-menu';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { ImagePluginOptions, PluginKeys } from '../../interfaces';\nimport { TheImage } from './image.component';\nimport { ImageEditor } from './image.editor';\nimport { Signal } from '@angular/core';\nimport { TheI18nTranslation } from '../../i18n';\nimport { ImageElement } from '../../custom-types';\nimport { withFloating } from './with-floating.plugin';\nimport { isImageWithFloating } from './image-with-floating';\n\nexport const withImage = <T extends Editor>(editor: T): T => {\n    const { customInsertFragmentData, isVoid, renderElement, isBlockCard, mousedown, getRoughHeight, isFloating } = editor;\n\n    editor.isVoid = (element: Element) => {\n        return element.type === ElementKinds.image || isVoid(element);\n    };\n\n    editor.customInsertFragmentData = async (data: DataTransfer, contextClipboardData: ClipboardData | null) => {\n        const clipboardData = await getClipboardData(data);\n\n        const res = await customInsertFragmentData(data, contextClipboardData);\n\n        if (!res && clipboardData?.files?.length) {\n            const imageFiles: File[] = [];\n            const imageTypes = getPluginOptions<ImagePluginOptions>(editor, PluginKeys.image)?.imageTypes;\n            for (const file of data.files as FileList) {\n                if (imageTypes.includes(file.type)) {\n                    imageFiles.push(file);\n                }\n            }\n            if (imageFiles.length) {\n                ImageEditor.insertImages(editor, imageFiles);\n                return true;\n            }\n        }\n\n        return res;\n    };\n\n    editor.renderElement = (element: Element) => {\n        if (element.type === ElementKinds.image) {\n            return TheImage;\n        }\n        return renderElement(element);\n    };\n\n    editor.mousedown = (event: MouseEvent) => {\n        const hitElement = event.target as HTMLElement;\n        if (hitElement.classList.contains('the-image-container')) {\n            const imageElement = hitElement.closest('the-image');\n            const blockCardEntry = AngularEditor.toSlateCardEntry(editor, imageElement);\n            if (blockCardEntry && (blockCardEntry[0] as Element).type === ElementKinds.image) {\n                event.preventDefault();\n                const innerImage = hitElement.querySelector('.thy-image');\n                const { x, width } = innerImage.getBoundingClientRect();\n                const centerX = x + width / 2;\n                AngularEditor.moveBlockCard(editor, blockCardEntry[0], { direction: event.x < centerX ? 'left' : 'right' });\n                return;\n            }\n        }\n        mousedown(event);\n    };\n\n    editor.isBlockCard = (element: Element) => {\n        if (element && element.type === ElementKinds.image) {\n            return true;\n        }\n        return isBlockCard(element);\n    };\n\n    editor.getRoughHeight = (element: Element) => {\n        if (element.type === ElementKinds.image && isImageWithFloating(element as ImageElement)) {\n            return 0;\n        }\n        return getRoughHeight(element);\n    };\n\n    return withFloating(editor);\n};\n\nexport const createImagePlugin = (locale: Signal<TheI18nTranslation>) =>\n    createPluginFactory<ImagePluginOptions>({\n        key: PluginKeys.image,\n        withOverrides: withImage,\n        toolbarItems: [\n            {\n                key: ElementKinds.image,\n                icon: 'image',\n                name: locale().image,\n                execute: editor => ImageEditor.openUpload(editor),\n                active: editor => ImageEditor.isActive(editor)\n            }\n        ],\n        menuItems: [\n            {\n                key: ElementKinds.image,\n                keywords: `tp,tupian,image,picture,${locale().image}`,\n                execute: editor => ImageEditor.openUpload(editor),\n                active: editor => ImageEditor.isActive(editor),\n                name: locale().image,\n                menuIcon: PluginMenuIcons.image,\n                description: locale().imageDesc,\n                type: ThePluginMenuItemType.group,\n                displayKey: '/tp'\n            }\n        ],\n        options: {\n            allowParentTypes: [ElementKinds.listItem, ElementKinds.tableCell, ElementKinds.blockquote],\n            imageTypes: ['image/png', 'image/jpeg', 'image/gif', 'image/bmp', 'image/svg+xml']\n        }\n    })();\n","import { isKeyHotkey } from 'is-hotkey';\nimport { Range, Editor, Element } from 'slate';\nimport { hotkeys } from 'slate-angular';\nimport { CustomElementKinds } from '../../custom-types';\nimport { TAB_SPACE } from '../../constants/default';\nimport { IndentEditor } from './indent.editor';\nimport { TableEditor } from '../table/table.editor';\nimport { Indents } from '../../constants';\n\nexport const onKeydownTextIndent = (\n    editor: Editor,\n    event: KeyboardEvent,\n    kinds: CustomElementKinds[],\n    textIndentDisabled: CustomElementKinds[]\n) => {\n    const { selection } = editor;\n    const isExpanded = Range.isExpanded(selection);\n    const nodes = Array.from(\n        Editor.nodes<Element>(editor, {\n            mode: 'highest',\n            match: node => Element.isElement(node) && kinds.includes(node.type)\n        })\n    );\n    const [startBlock] = nodes;\n    if (!startBlock) {\n        return false;\n    }\n\n    const [block, path] = startBlock;\n    const isStart = Editor.isStart(editor, selection.anchor, path);\n\n    if (isKeyHotkey('Tab', event)) {\n        event.preventDefault();\n\n        if (TableEditor.handleIndent(editor, Indents.indentRight)) {\n            return true;\n        }\n\n        if (startBlock && (isExpanded || isStart)) {\n            if (!editor.isVoid(block)) {\n                let { textIndent, type } = block;\n                // do not apply first-line indentation for lists\n                if (!textIndent && !textIndentDisabled.includes(type)) {\n                    IndentEditor.setTextIndent(editor, kinds, 2);\n                    return true;\n                } else {\n                    IndentEditor.setIndent(editor);\n                    return true;\n                }\n            }\n        } else {\n            editor.insertText(TAB_SPACE);\n            return true;\n        }\n    }\n    if (isKeyHotkey('shift+Tab', event)) {\n        if (startBlock && (isExpanded || isStart)) {\n            if (!editor.isVoid(block)) {\n                return IndentEditor.cancelTextIntent(editor, event, block, kinds);\n            }\n        }\n    }\n    if (selection && Range.isCollapsed(selection) && hotkeys.isDeleteBackward(event)) {\n        if (startBlock && isStart) {\n            return IndentEditor.cancelTextIntent(editor, event, block, kinds);\n        }\n    }\n    return false;\n};\n","import { Editor } from 'slate';\nimport { DISABLED_OPERATE_TYPES, DropdownMode, ElementKinds, HEADING_TYPES, Indents } from '../../constants';\nimport { CustomElementKinds } from '../../custom-types';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { PluginKeys, ToolbarItemType } from '../../interfaces';\nimport { onKeydownTextIndent } from './on-keydown-indent';\nimport { IndentEditor } from './indent.editor';\nimport { Signal } from '@angular/core';\nimport { TheI18nTranslation } from '../../i18n';\n\nexport interface IndentPluginOptions {\n    maxIndent?: number;\n    allowedTypes?: CustomElementKinds[];\n    disableIndentTypes?: CustomElementKinds[];\n}\n\nexport const withIndent = <T extends Editor>(editor: T): T => {\n    const { onKeydown } = editor;\n\n    const allowedTypes = getPluginOptions<IndentPluginOptions>(editor, PluginKeys.indent)?.allowedTypes ?? [];\n\n    editor.onKeydown = (event: KeyboardEvent) => {\n        const disableIndentTypes = getPluginOptions<IndentPluginOptions>(editor, PluginKeys.indent)?.disableIndentTypes ?? [];\n        const isContinue = !onKeydownTextIndent(editor, event, allowedTypes, disableIndentTypes);\n        if (isContinue) {\n            onKeydown(event);\n        }\n    };\n\n    return editor;\n};\n\nexport const createIndentPlugin = (locale: Signal<TheI18nTranslation>) =>\n    createPluginFactory<IndentPluginOptions>({\n        key: PluginKeys.indent,\n        withOverrides: withIndent,\n        toolbarItems: [\n            {\n                key: ElementKinds.indent,\n                includes: [Indents.indentRight, Indents.indentLeft],\n                type: ToolbarItemType.dropdown,\n                icon: 'float-left',\n                dropdownMode: DropdownMode.icon,\n                dropdownItemKey: Indents.indentRight,\n                dropdownFixedIcon: true\n            },\n            {\n                key: Indents.indentRight,\n                name: locale().increaseIndent,\n                icon: 'float-left',\n                shortcutKey: 'Tab',\n                execute: editor => IndentEditor.setIndent(editor)\n            },\n            {\n                key: Indents.indentLeft,\n                name: locale().decreaseIndent,\n                icon: 'float-right',\n                shortcutKey: 'Shift+Tab',\n                execute: editor => IndentEditor.cancelIndent(editor)\n            }\n        ],\n        options: {\n            maxIndent: 11,\n            allowedTypes: [\n                ElementKinds.checkItem,\n                ElementKinds.numberedList,\n                ElementKinds.bulletedList,\n                ElementKinds.paragraph,\n                ...HEADING_TYPES\n            ],\n            disableIndentTypes: [ElementKinds.bulletedList, ElementKinds.numberedList, ElementKinds.checkItem],\n            disabledOperateTypes: [ElementKinds.image, ...DISABLED_OPERATE_TYPES]\n        }\n    })();\n","import { TheEditor } from '../../interfaces';\nimport { Node, NodeEntry, Transforms, Element } from 'slate';\nimport { castArray } from '../../utils/cast-array';\n\n/**\n * Remove nodes with empty text.\n */\nexport const withRemoveEmptyNodes =\n    (options: { type: string | string[] }) =>\n    <T extends TheEditor>(editor: T) => {\n        const types = castArray(options.type);\n\n        const { normalizeNode } = editor;\n\n        editor.normalizeNode = ([node, path]: NodeEntry<Element>) => {\n            if (node.type && types.includes(node.type as string) && Node.string(node) === '') {\n                Transforms.removeNodes(editor, { at: path });\n                return;\n            }\n\n            normalizeNode([node, path]);\n        };\n\n        return editor;\n    };\n","import { Editor } from 'slate';\nimport { InlineCodeElement } from '../../custom-types';\nimport { TheBaseFlavourElement } from '../../interfaces/base-element.flavour';\nimport { createBreakBarChar } from '../../utils/dom';\n\nexport class TheInlineCodeFlavour extends TheBaseFlavourElement<InlineCodeElement, Editor> {\n    createNativeElement(): HTMLElement {\n        return document.createElement('span');\n    }\n\n    onInit(): void {\n        super.onInit();\n        const before = createBreakBarChar();\n        const after = createBreakBarChar();\n        this.nativeElement.prepend(before);\n        this.nativeElement.appendChild(after);\n    }\n}\n","import { Editor, Transforms, Node } from 'slate';\nimport { DISABLED_OPERATE_TYPES, ElementKinds, ZERO_WIDTH_CHAR } from '../../constants';\nimport { createPluginFactory } from '../../core';\nimport { InlineCodeElement } from '../../custom-types';\nimport { PluginKeys } from '../../interfaces';\nimport { CONTROL_KEY, isPureEmptyParagraph, isPureHeading } from '../../utils';\nimport { withRemoveEmptyNodes } from '../normalizers/remove-empty-nodes';\nimport { TheInlineCodeFlavour } from './inline-code.flavour';\nimport { InlineCodeEditor } from './inline-code.editor';\nimport { Signal } from '@angular/core';\nimport { TheI18nTranslation } from '../../i18n';\nimport { extractFragment } from '../../utils/fragment';\nimport { ClipboardData, getClipboardData } from 'slate-angular';\nimport { isRangeAcrossBlocks } from '../../queries';\nimport { isPureParagraph } from '../../utils';\n\nexport const withInlineCode = <T extends Editor>(editor: T): T => {\n    const { isInline, renderElement, insertText, customInsertFragmentData } = editor;\n\n    editor.isInline = (element: InlineCodeElement) => {\n        return element.type === ElementKinds.inlineCode ? true : isInline(element);\n    };\n\n    editor.renderElement = (element: InlineCodeElement) => {\n        if (element.type === ElementKinds.inlineCode) {\n            return TheInlineCodeFlavour;\n        }\n        return renderElement(element);\n    };\n\n    editor.insertText = text => {\n        if (text && InlineCodeEditor.isInlineCodeActive(editor)) {\n            let selection = editor.selection;\n            const currentNodeText = Editor.string(editor, editor.selection.anchor.path);\n            insertText(text);\n            if (currentNodeText == ZERO_WIDTH_CHAR) {\n                const inlineCodePath = Editor.path(editor, editor.selection);\n                let range = {\n                    anchor: Editor.before(editor, selection.anchor),\n                    focus: selection.anchor\n                };\n                if (Editor.isStart(editor, selection.anchor, inlineCodePath)) {\n                    range = {\n                        anchor: editor.selection.anchor,\n                        focus: Editor.after(editor, editor.selection)\n                    };\n                }\n                Transforms.delete(editor, {\n                    at: range\n                });\n            }\n        } else {\n            insertText(text);\n        }\n    };\n\n    editor.customInsertFragmentData = async (data: DataTransfer, contextClipboardData: ClipboardData | null) => {\n        if (InlineCodeEditor.isInlineCodeActive(editor)) {\n            const fragment = await extractFragment(data);\n            if (fragment) {\n                if (\n                    fragment.length === 1 &&\n                    !isPureEmptyParagraph(editor, fragment[0]) &&\n                    (isPureHeading(editor, fragment) || isPureParagraph(editor, fragment))\n                ) {\n                    const text = fragment.map(node => Node.string(node)).join('');\n                    editor.insertText(text);\n                    return true;\n                }\n            } else {\n                const clipboardData = await getClipboardData(data);\n                if (clipboardData?.text) {\n                    editor.insertText(clipboardData.text);\n                    return true;\n                }\n            }\n        }\n        return customInsertFragmentData(data, contextClipboardData);\n    };\n\n    editor = withRemoveEmptyNodes({ type: ElementKinds.inlineCode })(editor);\n    return editor;\n};\n\nexport const createInlineCodePlugin = (locale: Signal<TheI18nTranslation>) =>\n    createPluginFactory({\n        key: PluginKeys.inlineCode,\n        withOverrides: withInlineCode,\n        toolbarItems: [\n            {\n                key: ElementKinds.inlineCode,\n                icon: 'code',\n                name: locale().inlineCode,\n                shortcutKey: `${CONTROL_KEY}+E`,\n                execute: editor => InlineCodeEditor.toggleInlineCode(editor),\n                active: editor => InlineCodeEditor.isInlineCodeActive(editor)\n            }\n        ],\n        options: {\n            isInline: true,\n            disabledOperateTypes: [ElementKinds.image, ...DISABLED_OPERATE_TYPES]\n        }\n    })();\n","import { Component, Input, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { ThyAction } from 'ngx-tethys/action';\nimport { ThyDivider } from 'ngx-tethys/divider';\nimport { ThePreventDefaultDirective } from '../../../components/action/prevent-default';\nimport { A_TAG_REL_ATTR } from '../../../constants/default';\n\n@Component({\n    selector: 'the-link-hover',\n    templateUrl: './link-hover.component.html',\n    changeDetection: ChangeDetectionStrategy.Eager,\n    imports: [ThyDivider, ThyAction, ThePreventDefaultDirective]\n})\nexport class TheLinkHover implements OnInit {\n    @Input() link = '';\n\n    @Input() dom: HTMLElement;\n\n    @Input() editHandle: () => void;\n\n    @Input() deleteHandle: () => void;\n\n    aTagRelAttr = A_TAG_REL_ATTR;\n\n    constructor() {}\n\n    ngOnInit() {}\n\n    editLink(event: MouseEvent) {\n        event.preventDefault();\n        this.editHandle();\n        event.stopPropagation();\n    }\n\n    removeLink(event: MouseEvent) {\n        event.preventDefault();\n        this.deleteHandle();\n        event.stopPropagation();\n    }\n}\n","<div class=\"link-hover-card px-1\">\n  <a readonly href=\"{{ link }}\" target=\"_blank\" rel=\"{{ aTagRelAttr }}\" class=\"hover-control-plaintext text-truncate mx-2\">\n    {{ link }}\n  </a>\n  <thy-divider class=\"mx-2\" [thyVertical]=\"true\" thyColor=\"light\"></thy-divider>\n  <a href=\"javascript:;\" thyAction thyActionIcon=\"edit\" thePreventDefault (click)=\"editLink($event)\"></a>\n  <thy-divider class=\"mx-2\" [thyVertical]=\"true\" thyColor=\"light\"></thy-divider>\n  <a href=\"javascript:;\" thyAction thyActionIcon=\"unlink-insert\" thePreventDefault (click)=\"removeLink($event)\"></a>\n</div>\n","import { Component, HostBinding, HostListener, inject, Input, OnInit, Signal, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyButton } from 'ngx-tethys/button';\nimport { ThyFormDirective, ThyFormGroup, ThyFormGroupFooter, ThyFormSubmitDirective } from 'ngx-tethys/form';\nimport { ThyInputDirective } from 'ngx-tethys/input';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { ThyAutofocusDirective } from 'ngx-tethys/shared';\nimport { Editor, Range, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { LinkElement } from '../../../custom-types';\nimport { LinkEditor } from '../link.editor';\nimport { LinkCloseTypes, LinkTags } from '../link.types';\nimport { injectTranslations, TheI18nService, TheI18nTranslation } from '../../../i18n';\nimport { isUrl } from '../../../utils/is-url';\n\n@Component({\n    selector: 'the-link-edit',\n    templateUrl: './link-edit.component.html',\n    changeDetection: ChangeDetectionStrategy.Eager,\n    imports: [\n        FormsModule,\n        ThyFormDirective,\n        ThyInputDirective,\n        ThyButton,\n        ThyAutofocusDirective,\n        ThyFormGroup,\n        ThyFormSubmitDirective,\n        ThyFormGroupFooter\n    ]\n})\nexport class TheLinkEdit implements OnInit {\n    @HostBinding('class') className = 'the-link-edit-container';\n\n    @Input() tag: LinkTags;\n\n    @Input() node: LinkElement;\n\n    @Input() link = '';\n\n    @Input() text = '';\n\n    @Input() originSelection: Range;\n\n    locale: Signal<TheI18nTranslation> = injectTranslations(inject(TheI18nService));\n\n    editor: Editor;\n\n    originLink: string;\n\n    originText: string;\n\n    validatorConfig = {\n        validationMessages: {\n            link: {\n                required: this.locale().linkRequired,\n                pattern: this.locale().linkPattern\n            },\n            text: {\n                required: this.locale().textRequired\n            }\n        }\n    };\n\n    @HostListener('document: mousedown', ['$event'])\n    handleDocumentMouseDown(event: MouseEvent) {\n        if (!document.querySelector('.the-link-edit-container').contains(event.target as HTMLElement)) {\n            this.thyPopoverRef.close();\n        }\n    }\n\n    constructor(public thyPopoverRef: ThyPopoverRef<any>) {}\n\n    ngOnInit() {\n        this.originText = this.text;\n        this.originLink = this.link;\n        this.thyPopoverRef.beforeClosed().subscribe(type => {\n            switch (true) {\n                case type === LinkCloseTypes.apply:\n                    break;\n                case this.tag === LinkTags.insert:\n                    AngularEditor.focus(this.editor);\n                    Transforms.select(this.editor, this.originSelection);\n                    this.editor.undo();\n                    break;\n                case this.tag === LinkTags.edit:\n                    AngularEditor.focus(this.editor);\n                    Transforms.select(this.editor, this.originSelection);\n                    break;\n            }\n        });\n    }\n\n    closePopover(type?: string) {\n        this.thyPopoverRef.close(type);\n    }\n\n    applyLink(form) {\n        const link = this.link.trim();\n        if (isUrl(link)) {\n            LinkEditor.updateLink(this.editor, this.node, link, this.text);\n            this.closePopover(LinkCloseTypes.apply);\n        } else {\n            form.validator.setElementErrorMessage(`link`, this.locale().linkPattern);\n        }\n    }\n}\n","<form thyForm #linkForm=\"thyForm\" [thyFormValidatorConfig]=\"validatorConfig\" name=\"linkForm\">\n  <thy-form-group [thyLabelText]=\"locale().text\">\n    <input thyInput [placeholder]=\"locale().enterText\" required name=\"text\" [(ngModel)]=\"text\" thyAutofocus type=\"text\" />\n  </thy-form-group>\n  <thy-form-group [thyLabelText]=\"locale().link\">\n    <input name=\"link\" thyInput [placeholder]=\"locale().enterLink\" required type=\"text\" #linkControl=\"ngModel\" [(ngModel)]=\"link\" />\n  </thy-form-group>\n  <thy-form-group-footer>\n    <div class=\"btn-pair\">\n      <button thyButton=\"link-secondary\" thySize=\"sm\" (click)=\"closePopover()\">{{ locale().cancel }}</button>\n      <button thyButton=\"primary-square\" thySize=\"sm\" (thyFormSubmit)=\"applyLink(linkForm)\">{{ locale().apply }}</button>\n    </div>\n  </thy-form-group-footer>\n</form>\n","import { Editor, Node as SlateNode } from 'slate';\nimport { LinkElement } from '../../custom-types';\nimport { TheBaseFlavourElement } from '../../interfaces/base-element.flavour';\nimport { createBreakBarChar } from '../../utils/dom';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { TheLinkHover } from './hover/link-hover.component';\nimport { LinkTags } from './link.types';\nimport { TheLinkEdit } from './edit/link-edit.component';\nimport { LinkEditor } from './link.editor';\nimport { isMobileMode } from '../../utils/get-mode';\nimport { fromEvent } from 'rxjs';\n\nexport class TheLinkFlavour extends TheBaseFlavourElement<LinkElement, Editor> {\n    thyPopoverHoverRef: ThyPopoverRef<any>;\n    thyPopoverEditRef: ThyPopoverRef<any>;\n\n    get linkHoverOpened(): boolean {\n        return this.thyPopoverHoverRef && this.thyPopoverHoverRef.componentInstance;\n    }\n\n    get linkEditOpened(): boolean {\n        return this.thyPopoverEditRef && this.thyPopoverEditRef.componentInstance;\n    }\n\n    private thyPopover: ThyPopover;\n    private overlay: Overlay;\n\n    createNativeElement(): HTMLElement {\n        const element = document.createElement('a');\n        element.href = this.element.url;\n        element.target = '_blank';\n        return element;\n    }\n\n    onInit(): void {\n        super.onInit();\n        const before = createBreakBarChar();\n        const after = createBreakBarChar();\n        this.nativeElement.prepend(before);\n        this.nativeElement.appendChild(after);\n        this.thyPopover = this.viewContainerRef.injector.get(ThyPopover);\n        this.overlay = this.viewContainerRef.injector.get(Overlay);\n        fromEvent(this.nativeElement, 'click')\n            .pipe(this.takeUntilDestroyed())\n            .subscribe(() => {\n                if (!this.readonly && !this.editor.disabled && !isMobileMode(this.editor)) {\n                    this.openLinkHover();\n                }\n            });\n    }\n\n    openLinkHover() {\n        const dom = this.nativeElement;\n        const url = this.element.url;\n        if (this.linkHoverOpened) {\n            return;\n        }\n        this.thyPopoverHoverRef = this.thyPopover.open(TheLinkHover, {\n            initialState: {\n                link: url,\n                dom: dom,\n                editHandle: () => {\n                    this.openLinkEdit(LinkTags.edit);\n                },\n                deleteHandle: () => {\n                    LinkEditor.unwrapLink(this.editor);\n                    this.closeHoverPopover();\n                }\n            },\n            origin: dom,\n            placement: 'bottomLeft',\n            offset: 4,\n            minWidth: 0,\n            hasBackdrop: false,\n            outsideClosable: true,\n            viewContainerRef: this.viewContainerRef,\n            scrollStrategy: this.overlay.scrollStrategies.reposition(),\n            panelClass: 'the-link-over'\n        });\n    }\n\n    openLinkEdit(tag: LinkTags) {\n        if (this.linkHoverOpened) {\n            this.thyPopoverHoverRef.afterClosed().subscribe(() => {\n                this.internalOpenLinkEdit(tag);\n            });\n            this.thyPopover.close();\n        } else {\n            this.internalOpenLinkEdit(tag);\n        }\n    }\n\n    private internalOpenLinkEdit(tag: LinkTags) {\n        const link = this.element.url;\n        SlateNode.get(this.editor, this.editor.selection.focus.path);\n        this.thyPopoverEditRef = this.thyPopover.open(TheLinkEdit, {\n            initialState: {\n                tag,\n                editor: this.editor,\n                node: this.element,\n                text: SlateNode.string(this.element),\n                link,\n                originSelection: this.editor.selection\n            },\n            minWidth: 0,\n            origin: this.nativeElement,\n            backdropClosable: true,\n            placement: 'bottomLeft',\n            offset: 4,\n            hasBackdrop: false,\n            originActiveClass: null,\n            viewContainerRef: this.viewContainerRef,\n            scrollStrategy: this.overlay.scrollStrategies.reposition(),\n            panelClass: 'the-link-edit'\n        });\n    }\n\n    closeHoverPopover() {\n        if (this.linkHoverOpened) {\n            this.thyPopoverHoverRef.close();\n        }\n    }\n}\n","import getUrls from 'get-urls';\nimport { Editor, Element, Transforms } from 'slate';\nimport { ClipboardData, getClipboardData } from 'slate-angular';\nimport { DISABLED_OPERATE_TYPES, ElementKinds, PluginMenuIcons, ThePluginMenuItemType } from '../../constants';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport { cloneDeep } from '../../utils/lodash';\nimport { withRemoveEmptyNodes } from '../normalizers/remove-empty-nodes';\nimport { LinkEditor } from './link.editor';\nimport { Signal } from '@angular/core';\nimport { TheI18nTranslation } from '../../i18n';\nimport { isUrl } from '../../utils/is-url';\nimport { TheLinkFlavour } from './link.flavour';\n\nexport const withLink = <T extends Editor>(editor: T): T => {\n    const { insertText, isInline, customInsertFragmentData, renderElement } = editor;\n\n    editor.isInline = (element: Element) => {\n        return element.type === ElementKinds.link ? true : isInline(element);\n    };\n\n    editor.insertText = text => {\n        if (text && isUrl(text)) {\n            LinkEditor.wrapLink(editor, text, text);\n            Transforms.move(editor, { distance: 1, unit: 'offset' });\n        } else {\n            insertText(text);\n        }\n    };\n\n    editor.customInsertFragmentData = async (data, contextClipboardData: ClipboardData | null) => {\n        const clipboardData = await getClipboardData(data);\n        const text = clipboardData?.text;\n        if (!clipboardData?.elements && text && isUrl(text)) {\n            const urls = Array.from(\n                getUrls(text, {\n                    stripWWW: false,\n                    sortQueryParameters: false,\n                    requireSchemeOrWww: true,\n                    removeTrailingSlash: false,\n                    removeSingleSlash: false\n                })\n            );\n            if (urls.length) {\n                let str = cloneDeep(text);\n                urls.forEach((url, index) => {\n                    const parts = str.split(url);\n\n                    const beforeUrl = parts[0];\n                    insertText(beforeUrl);\n\n                    LinkEditor.wrapLink(editor, url, url);\n                    Transforms.move(editor, { distance: 1, unit: 'offset' });\n                    str = parts[1];\n                    if (index === urls.length - 1) {\n                        insertText(str);\n                    }\n                });\n                return true;\n            }\n        }\n        return customInsertFragmentData(data, contextClipboardData);\n    };\n\n    editor.renderElement = (element: Element) => {\n        if (element.type === ElementKinds.link) {\n            return TheLinkFlavour;\n        }\n        return renderElement(element);\n    };\n\n    editor = withRemoveEmptyNodes({ type: ElementKinds.link })(editor);\n\n    return editor;\n};\n\nexport const createLinkPlugin = (locale: Signal<TheI18nTranslation>) =>\n    createPluginFactory({\n        key: PluginKeys.link,\n        withOverrides: withLink,\n        toolbarItems: [\n            {\n                key: ElementKinds.link,\n                icon: 'link-insert',\n                name: locale().link,\n                execute: editor => LinkEditor.insertLink(editor),\n                active: editor => LinkEditor.isActive(editor)\n            }\n        ],\n        menuItems: [\n            {\n                key: ElementKinds.link,\n                keywords: `lj,lianjie,link,${locale().link}`,\n                description: locale().linkDesc,\n                execute: editor => LinkEditor.insertLink(editor),\n                active: editor => LinkEditor.isActive(editor),\n                type: ThePluginMenuItemType.icon,\n                name: locale().link,\n                displayKey: '/lj',\n                icon: 'link-insert',\n                menuIcon: PluginMenuIcons.link\n            }\n        ],\n        options: {\n            isInline: true,\n            disabledOperateTypes: [ElementKinds.image, ...DISABLED_OPERATE_TYPES]\n        }\n    })();\n","import { Editor, Node, NodeEntry, Path, Element } from 'slate';\nimport { ListItemElement } from '../../../custom-types';\nimport { ElementKinds } from '../../../constants';\nimport { insertParagraph } from '../../../transforms/insert-paragraph';\n\nexport const normalizeListItem = (editor: Editor, { nodeEntry }: { nodeEntry: NodeEntry<ListItemElement> }) => {\n    const [listItemNode, listItemPath] = nodeEntry;\n    const firstChildPath: Path = listItemPath.concat([0]);\n    const firstChild = (listItemNode.children as Node[])?.[0];\n\n    if (!firstChild) {\n        insertParagraph(editor, firstChildPath);\n        return true;\n    }\n\n    // Ensure that all lists have a <p> tag as a first element\n    if (Element.isElement(firstChild) && (firstChild.type === ElementKinds.bulletedList || firstChild.type === ElementKinds.numberedList)) {\n        insertParagraph(editor, firstChildPath);\n        return true;\n    }\n};\n","import { Element } from 'slate';\nimport { LIST_BLOCK_TYPES } from '../../../constants/node-types';\n\nexport const isList = (n: Element) => {\n    return [...LIST_BLOCK_TYPES].includes(n.type);\n};\n","import { Editor, Element, Node, NodeEntry, Path, Transforms } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport * as TheTransforms from '../../../transforms';\n\n// 列表续号\nexport const normalizeNo = (editor: Editor, nodeEntry: NodeEntry) => {\n    const [listNode, listPath] = nodeEntry;\n    let moved = false;\n    Editor.withoutNormalizing(editor, () => {\n        /**\n         * 获取nextList判断是否为同类型list\n         * 如果为同类型list，则把nextList children移动到当前list的尾部, 并删除nextList\n         */\n        const nextPath = Path.next(listPath);\n        const nextNode = TheQueries.getNode(editor, nextPath) as Node;\n        if (nextNode && Element.isElement(nextNode) && Element.isElement(listNode) && nextNode.type === listNode.type) {\n            TheTransforms.moveChildren(editor, {\n                at: [nextNode, nextPath],\n                to: listPath.concat((listNode.children as Node[]).length)\n            });\n            Transforms.removeNodes(editor, { at: nextPath });\n            moved = true;\n        }\n\n        if (listPath[listPath.length - 1] !== 0) {\n            /**\n             * 获取prevList判断是否为同类型list\n             * 如果为同类型list，则把当前list children移动到prevList的尾部, 并删除当前List\n             */\n            const currentListNode = TheQueries.getNode(editor, listPath);\n            const prevPath = Path.previous(listPath);\n            const prevNode = TheQueries.getNode(editor, prevPath) as Node;\n            if (prevNode && Element.isElement(prevNode) && Element.isElement(currentListNode) && prevNode.type === currentListNode.type) {\n                TheTransforms.moveChildren(editor, {\n                    at: [currentListNode, listPath],\n                    to: prevPath.concat((prevNode.children as Node[]).length)\n                });\n                Transforms.removeNodes(editor, { at: listPath });\n                moved = true;\n            }\n        }\n    });\n    return moved;\n};\n","import { Descendant, Editor, NodeEntry, Transforms, Element } from 'slate';\nimport { ElementKinds } from '../../../constants';\nimport { match } from '../../../utils/match';\nimport { getListTypes } from '../queries/get-list-types';\nimport { normalizeListItem } from './normalize-list-item';\nimport { ListNormalizerOptions } from '../types';\nimport { isList } from '../queries/is-list';\nimport { TheHistoryEditor } from '../../common/history.plugin';\nimport { normalizeNo } from './normalize-no';\n\n/**\n * Normalize list node to force the ul>li>p+ul structure.\n */\nexport const getListNormalizer = (editor: Editor, { validLiChildrenTypes }: ListNormalizerOptions) => {\n    const { normalizeNode } = editor;\n\n    return ([node, path]: NodeEntry) => {\n        // 不是选区, 执行续号检测操作\n        if (isList(node as Element) && !TheHistoryEditor.isUndoing(editor)) {\n            const moved = normalizeNo(editor, [node, path]);\n            if (moved) {\n                return;\n            }\n        }\n\n        if (match(node, { type: getListTypes() })) {\n            if (Element.isElement(node) && !(node.children as Descendant[]).length) {\n                return Transforms.removeNodes(editor, { at: path });\n            }\n        }\n\n        // normalize list item\n        // 1. list-item at least one child\n        // 2. list-item first child is not list\n        if (Element.isElement(node) && node.type === ElementKinds.listItem) {\n            if (normalizeListItem(editor, { nodeEntry: [node, path] })) {\n                // Tree changed - kick off another normalization\n                return;\n            }\n        }\n\n        normalizeNode([node, path]);\n    };\n};\n","import { Editor, Element, Location } from 'slate';\nimport { ElementKinds } from '../../../constants';\nimport { ListItemElement } from '../../../custom-types';\nimport * as TheQueries from '../../../queries';\nimport { isList } from './is-list';\n\n/**\n * 如果at（默认= selection）位于ul> li> p中，则返回li和ul节点条目。\n */\nexport const getListItemEntry = (editor: Editor, { at = editor.selection }: { at?: Location | null } = {}) => {\n    if (at && TheQueries.isNodeTypeIn(editor, ElementKinds.listItem, { at })) {\n        const selectionParent = TheQueries.getParent(editor, at);\n        if (!selectionParent) return;\n        const [, paragraphPath] = selectionParent;\n\n        const listItem = TheQueries.getAboveByType(editor, ElementKinds.listItem, { at }) || TheQueries.getParent(editor, paragraphPath);\n\n        if (!listItem) return;\n        const [listItemNode, listItemPath] = listItem;\n\n        if ((listItemNode as ListItemElement).type !== ElementKinds.listItem) return;\n\n        const list = TheQueries.getParent(editor, listItemPath);\n        if (!list || !isList(list[0] as Element)) return;\n\n        return {\n            list,\n            listItem\n        };\n    }\n};\n","import { Ancestor, Element, Node } from 'slate';\nimport { ElementKinds } from '../../../constants';\nimport { match } from '../../../utils/match';\nimport { getListTypes } from './get-list-types';\n\n/**\n *\n */\nexport const hasListInListItem = (listItemNode: Ancestor | Element) => {\n    const sublist = (listItemNode.children as Node[]).find(n => match(n, { type: getListTypes() })) as Element | undefined;\n    return listItemNode.children.length > 1 && sublist;\n};\n\n/**\n * p + ul/ol structure\n * @param listItemNode\n */\nexport const hasStableListInListItem = (listItemNode: Ancestor | Element) => {\n    const sublist = (listItemNode.children as Node[]).find(n => match(n, { type: getListTypes() })) as Element | undefined;\n    return listItemNode.children.length === 2 && sublist;\n};\n\n/**\n * li + p structure\n * @param listItemNode\n */\nexport const hasStableListItem = (listItemNode: Ancestor | Element) => {\n    const type = (listItemNode.children[0] as Element).type;\n    return listItemNode.children.length === 1 && type === ElementKinds.paragraph;\n};\n","import { Ancestor, Editor, NodeEntry, Path, Transforms } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { moveChildren } from '../../../transforms/move-children';\nimport { getListTypes } from '../queries/get-list-types';\n\nexport interface MergeListItemIntoListOptions {\n    /**\n     * 该节点的子列表的列表项将被移动。\n     */\n    fromListItem: NodeEntry<Ancestor>;\n\n    /**\n     * 列表项将被移动到该列表中。\n     */\n    toList: NodeEntry<Ancestor>;\n\n    /**\n     * 具体位置\n     */\n    location?: number;\n}\n\n/**\n * 将 fromListItem 子列表的列表项移到 toList\n */\nexport const moveListItemSublistItemsToList = (editor: Editor, { fromListItem, toList, location }: MergeListItemIntoListOptions) => {\n    const fromListItemSublist = TheQueries.findDescendant(editor, {\n        at: fromListItem[1],\n        match: {\n            type: getListTypes()\n        }\n    });\n    if (!fromListItemSublist) return 0;\n\n    const [, fromListItemSublistPath] = fromListItemSublist;\n    const lastChildPath = TheQueries.getLastChildPath(toList);\n    let moved: number;\n    Editor.withoutNormalizing(editor, () => {\n        moved = moveChildren(editor, {\n            at: fromListItemSublistPath,\n            to: location ? toList[1].concat(location) : Path.next(lastChildPath)\n        });\n\n        // 删除空白列表\n        Transforms.delete(editor, { at: fromListItemSublistPath });\n    });\n\n    return moved;\n};\n","import { Ancestor, Editor, NodeEntry, Path, Transforms, Element, Node } from 'slate';\nimport { getListItemEntry } from '../queries/get-list-item-entry';\nimport { hasListInListItem } from '../queries/has-list-in-list-item';\nimport { moveListItemSublistItemsToList } from './move-list-item-sublist-items-to-list';\nimport { isNodeTypeList } from '../queries/is-node-type-list';\n\nexport interface MoveListItemDownOptions {\n    list: NodeEntry<Ancestor>;\n    listItem: NodeEntry<Ancestor>;\n}\n\nexport const moveListItemDown = (editor: Editor, { list, listItem }: MoveListItemDownOptions) => {\n    const [listNode] = list;\n    const [, listItemPath] = listItem;\n\n    Editor.withoutNormalizing(editor, () => {\n        // 以前的兄弟是新父级\n        const previousSiblingItem = Editor.node(editor, Path.previous(listItemPath)) as NodeEntry<Ancestor>;\n\n        if (previousSiblingItem) {\n            const [previousNode, previousPath] = previousSiblingItem;\n            const lastChildIndexOfPreviousNode = previousNode.children.length - 1;\n            const lastChildOfPreviousNode = previousNode.children[lastChildIndexOfPreviousNode] as Element;\n\n            const newPath = previousPath.concat(\n                isNodeTypeList(lastChildOfPreviousNode)\n                    ? [lastChildIndexOfPreviousNode, lastChildOfPreviousNode.children.length]\n                    : [previousNode.children.length]\n            );\n\n            if (!isNodeTypeList(lastChildOfPreviousNode)) {\n                // 创建新子列表\n                const type = (listNode as Element).type;\n                Transforms.wrapNodes(editor, { type, children: [] } as Element, {\n                    at: listItemPath\n                });\n            }\n            // 将当前listItem移动到子列表\n            Transforms.moveNodes(editor, {\n                at: listItemPath,\n                to: newPath\n            });\n\n            const currentListItemEntry = getListItemEntry(editor, {});\n            if (hasListInListItem(currentListItemEntry.listItem[0])) {\n                moveListItemSublistItemsToList(editor, {\n                    fromListItem: currentListItemEntry.listItem,\n                    toList: currentListItemEntry.list\n                });\n            }\n        }\n    });\n};\n","import { Ancestor, Editor, Element, NodeEntry, Path, Transforms } from 'slate';\nimport { ElementKinds } from '../../../constants';\nimport { ListItemElement } from '../../../custom-types';\nimport * as TheQueries from '../../../queries';\n\nexport interface MoveListItemUpOptions {\n    list: NodeEntry<Ancestor>;\n    listItem: NodeEntry<Ancestor>;\n}\n\n/**\n * 将列表项移到其父项旁边。\n * 父项应为列表项。\n */\nexport const moveListItemUp = (editor: Editor, { list, listItem }: MoveListItemUpOptions, options?: any) => {\n    const [listNode, listPath] = list;\n    const [, listItemPath] = listItem;\n\n    const listParentEntry = TheQueries.getParent(editor, listPath);\n    if (!listParentEntry) return;\n    const [listParentNode, listParentPath] = listParentEntry;\n\n    if ((listParentNode as Element).type !== ElementKinds.listItem) {\n        return;\n    }\n\n    Editor.withoutNormalizing(editor, () => {\n        const newListItemPath = Path.next(listParentPath);\n\n        // 将 item 上移一层\n        Transforms.moveNodes(editor, {\n            at: listItemPath,\n            to: newListItemPath\n        });\n\n        /**\n         * 将下一个兄弟节点移动到新列表\n         */\n        const listItemIdx = listItemPath[listItemPath.length - 1];\n        const siblingPath = [...listItemPath];\n        const newListPath = newListItemPath.concat(1);\n        let siblingFound = false;\n        let newSiblingIdx = 0;\n\n        listNode.children.forEach((n, idx) => {\n            if (listItemIdx < idx) {\n                if (!siblingFound) {\n                    siblingFound = true;\n\n                    Transforms.insertNodes(\n                        editor,\n                        {\n                            type: (listNode as ListItemElement).type,\n                            children: []\n                        },\n                        { at: newListPath }\n                    );\n                }\n\n                siblingPath[siblingPath.length - 1] = listItemIdx;\n                const newSiblingsPath = newListPath.concat(newSiblingIdx);\n                newSiblingIdx++;\n                Transforms.moveNodes(editor, {\n                    at: siblingPath,\n                    to: newSiblingsPath\n                });\n            }\n        });\n\n        // 处理listItem下方有段落的情况\n        const listIndex = listParentNode.children.findIndex(item => item.key === (listNode as Element).key);\n        const behindNode = listParentNode.children.slice(listIndex + 1);\n        if (behindNode.length > 0) {\n            const nextPath = Path.next(newListItemPath);\n            Transforms.insertNodes(\n                editor,\n                {\n                    type: ElementKinds.listItem,\n                    children: []\n                },\n                { at: nextPath }\n            );\n            const moveStartPath = TheQueries.findPath(editor, behindNode[0]);\n            const moveEndPath = TheQueries.findPath(editor, behindNode[behindNode.length - 1]);\n            const moveRange = Editor.range(editor, moveStartPath, moveEndPath);\n            Transforms.moveNodes(editor, {\n                at: moveRange,\n                to: nextPath.concat(0),\n                match: node => behindNode.includes(node as any)\n            });\n        }\n\n        // 删除子列表（如果它是第一个列表项）\n        if (!listItemIdx) {\n            Transforms.removeNodes(editor, {\n                at: listPath\n            });\n        }\n    });\n    return true;\n};\n","import { Editor } from 'slate';\nimport * as TheQueries from '../../queries';\nimport { getListItemEntry } from './queries/get-list-item-entry';\nimport { moveListItemDown } from './transforms/move-list-item-down';\nimport { moveListItemUp } from './transforms/move-list-item-up';\n\nexport function onKeyDownList(e: KeyboardEvent, editor: Editor) {\n    let moved: boolean | undefined = false;\n    if (e.key === 'Tab') {\n        const res = getListItemEntry(editor, {});\n        if (!res) {\n            return false;\n        }\n        const { list, listItem } = res;\n        const [, listItemPath] = listItem;\n\n        e.preventDefault();\n\n        // move up with shift+tab\n        const shiftTab = e.shiftKey;\n        if (shiftTab) {\n            moved = moveListItemUp(editor, { list, listItem });\n            if (moved) {\n                e.preventDefault();\n                return true;\n            }\n        }\n\n        // move down with tab\n        const tab = !e.shiftKey;\n        if (tab && !TheQueries.isFirstChild(listItemPath)) {\n            moveListItemDown(editor, { list, listItem });\n            return true;\n        }\n        return false;\n    }\n}\n","import { Element } from 'slate';\nimport { ElementKinds } from '../../../constants';\nimport { getListTypes } from './get-list-types';\n\n/**\n * 获取 List 中 ListItems，过滤掉空列表嵌套\n * @param node\n * @param initialValue\n * @returns\n */\nexport const getStartListItem = (node: Element[], initialValue?: Element[]) => {\n    if (!initialValue) {\n        initialValue = [];\n    }\n    if (node) {\n        return node.reduce((result: Element[], current: Element) => {\n            if (current.type === ElementKinds.listItem && !getListTypes().includes(current.children[0].type)) {\n                result.push(current);\n            } else {\n                if (current.children) {\n                    getStartListItem(current.children as Element[], result);\n                }\n            }\n            return result;\n        }, initialValue);\n    }\n};\n","import { Editor, Path, Point, Range } from 'slate';\nimport { ElementKinds } from '../../../constants';\nimport * as TheQueries from '../../../queries';\n\nexport const isInList = (editor: Editor, at: Path | Range | Point | null = editor.selection) => {\n    return TheQueries.isNodeTypeIn(editor, [ElementKinds.numberedList, ElementKinds.bulletedList], { at });\n};\n","import { Editor, Path, Element } from 'slate';\nimport { ElementKinds } from '../../../constants';\n\n/**\n * Is the list nested, i.e. its parent is a list item.\n */\nexport const isListNested = (editor: Editor, listPath: Path, options?: any) => {\n    const [listParentNode] = Editor.parent(editor, listPath);\n    return (listParentNode as Element).type === ElementKinds.listItem;\n};\n","import { Editor } from 'slate';\nimport { ElementKinds } from '../../../constants';\nimport * as TheQueries from '../../../queries';\n\n/**\n * Is the selection focus at the start of its parent block.\n */\nexport const isSelectionAtListItemStart = (editor: Editor) => {\n    const listItemEntry = TheQueries.getAboveByType(editor, [ElementKinds.listItem]);\n    if (listItemEntry) {\n        return TheQueries.isStart(editor, editor.selection.focus, listItemEntry[1]);\n    }\n    return false;\n};\n","import { Editor, Range, Path } from 'slate';\nimport { getAboveByType } from '../../../queries/get-above-by-type';\nimport { ElementKinds } from '../../../constants/node-types';\n\n/**\n * Is the selection in same li\n */\nexport const isSelectionInSameListItem = (editor: Editor) => {\n    const { selection } = editor;\n\n    if (!selection) {\n        return false;\n    }\n\n    const [start, end] = Range.edges(selection);\n    const startListItemEntry = getAboveByType(editor, ElementKinds.listItem, { at: start.path });\n    const endListItemEntry = getAboveByType(editor, ElementKinds.listItem, { at: end.path });\n\n    return startListItemEntry && endListItemEntry && Path.equals(startListItemEntry[1], endListItemEntry[1]);\n};\n","import { Node, Element } from 'slate';\nimport { hasListInListItem } from './has-list-in-list-item';\nimport { isNodeTypeList } from './is-node-type-list';\n\n/**\n * list 中 是否是单个listItem，且listItem没有子列表\n */\nexport const isSingleListItem = (list: Node) => {\n    return isNodeTypeList(list) && (list.children as Node[]).length === 1 && !hasListInListItem(list.children[0] as Element);\n};\n","import { Ancestor, Editor, Element, Node, NodeEntry, Path, Transforms } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { getListItemEntry } from '../queries/get-list-item-entry';\nimport { hasListInListItem } from '../queries/has-list-in-list-item';\n\nexport interface InsertListDataOptions {\n    /**\n     * 要粘贴的list数据\n     */\n    fromList: Element;\n\n    /**\n     * 粘贴list数据至此\n     */\n    toListItemEntry: NodeEntry<Ancestor>;\n}\n\nexport const insertListData = (editor: Editor, { fromList, toListItemEntry }: InsertListDataOptions) => {\n    const { children } = fromList;\n    const [toListItem, toListItemPath] = toListItemEntry;\n    const nextListItemPath = Path.next(toListItemPath);\n    const toListItemIsEmptyParagraph = TheQueries.isEmptyParagraph(editor, editor.selection.anchor);\n    const hasSubList = hasListInListItem(toListItem as Element);\n\n    let selectPath = [...toListItemPath];\n    const liIndex = selectPath.pop();\n    selectPath = [...selectPath, liIndex + children.length];\n\n    Editor.withoutNormalizing(editor, () => {\n        if (toListItemIsEmptyParagraph && hasSubList) {\n            Transforms.insertNodes(editor, children, { at: nextListItemPath });\n        } else {\n            const insertListItemPath = toListItemIsEmptyParagraph ? toListItemPath : nextListItemPath;\n            // 如果粘贴目标listItem为空，则先删除listItem\n            if (toListItemIsEmptyParagraph) {\n                Transforms.removeNodes(editor, { at: insertListItemPath });\n                selectPath = Path.previous(selectPath);\n            }\n            Transforms.insertNodes(editor, children, { at: insertListItemPath });\n        }\n\n        /**\n         * 粘贴目标lisItem有子列表\n         */\n        if (hasSubList) {\n            const paragraphPath = toListItemPath.concat([0]);\n            const nextSubListPath = Path.next(paragraphPath);\n\n            // 判断粘贴数据是否是多级\n            if (hasListInListItem(fromList.children[0] as Element)) {\n                // 设置粘贴后正确选区\n                Transforms.select(editor, Editor.end(editor, nextListItemPath));\n\n                // 获取当前选区所在listItem entry\n                const currentListItemEntry = getListItemEntry(editor, {});\n                // 获取粘贴目标listItem中的子列表\n                const { children: subListChildren } = Node.get(editor, nextSubListPath) as Element;\n\n                /**\n                 * 复制子列表数据\n                 * 之所以是复制，而不是移动，因为无法单纯一次性移动子列表的所有listItem（不包含subList本身）到目标位置，\n                 * 需要循环移动才可以\n                 **/\n                Transforms.insertNodes(editor, subListChildren as Node[], {\n                    at: Path.next(currentListItemEntry.listItem[1])\n                });\n                // 删除已被复制后无用的listItem/listItem subList\n                Transforms.delete(editor, {\n                    at: toListItemIsEmptyParagraph ? toListItemPath : nextSubListPath\n                });\n                return;\n            }\n\n            Transforms.select(editor, Editor.end(editor, selectPath));\n\n            // 粘贴数据不是多级\n            const currentListItemEntry = getListItemEntry(editor, {});\n            Transforms.moveNodes(editor, {\n                at: nextSubListPath,\n                to: currentListItemEntry.listItem[1].concat(1)\n            });\n\n            if (toListItemIsEmptyParagraph) {\n                Transforms.delete(editor, { at: toListItemPath });\n            }\n            return;\n        }\n    });\n\n    // 粘贴目标listItem没有子列表, 设置选区\n    Transforms.select(editor, Editor.end(editor, selectPath));\n    return;\n};\n","import { Editor, Element, Path, Range, Transforms } from 'slate';\nimport { ElementKinds } from '../../../constants';\nimport { TheEditor } from '../../../interfaces';\nimport * as TheQueries from '../../../queries';\n\n/**\n * Insert list item if selection in li>p.\n */\nexport const insertListItem = (editor: Editor) => {\n    if (editor.selection && !TheQueries.isRangeAtRoot(editor.selection)) {\n        const paragraphEntry = TheQueries.getAboveByType(editor, ElementKinds.paragraph);\n        if (!paragraphEntry) {\n            return;\n        }\n        const [, paragraphPath] = paragraphEntry;\n\n        const [listItemNode, listItemPath] = Editor.parent(editor, paragraphPath);\n        if (Element.isElement(listItemNode) && listItemNode.type !== ElementKinds.listItem) {\n            return;\n        }\n\n        if (!Range.isCollapsed(editor.selection)) {\n            Transforms.delete(editor);\n        }\n\n        const isEnd = TheQueries.isBlockTextEmptyAfterSelection(editor);\n        const nextNodePath = Path.next(paragraphPath);\n        const nextListItemPath = Path.next(listItemPath);\n        const nextEnd = Editor.end(editor, listItemPath);\n\n        /**\n         * If not end, split nodes, wrap a list item on the new paragraph and move it to the next list item\n         */\n        if (!isEnd) {\n            Editor.withoutNormalizing(editor, () => {\n                Transforms.splitNodes(editor, { at: editor.selection, always: true });\n                Transforms.wrapNodes(\n                    editor,\n                    {\n                        type: ElementKinds.listItem,\n                        children: []\n                    },\n                    { at: nextNodePath }\n                );\n                Transforms.moveNodes(editor, {\n                    at: nextNodePath,\n                    to: nextListItemPath\n                });\n            });\n        } else {\n            /**\n             * If end, split nodes\n             */\n            Editor.withoutNormalizing(editor, () => {\n                Transforms.splitNodes(editor, {\n                    always: true,\n                    mode: 'highest',\n                    match: node => {\n                        const path = node && TheEditor.findPath(editor, node);\n                        return path && path.length === nextListItemPath.length;\n                    }\n                });\n            });\n        }\n\n        /**\n         * If there is a list in the list item, move it to the next list item\n         */\n        if (TheQueries.getNode(editor, nextNodePath)) {\n            Transforms.moveNodes(editor, {\n                at: Editor.range(editor, nextNodePath, nextEnd),\n                to: nextListItemPath.concat(1),\n                match: node => {\n                    // TODO: types\n                    return listItemNode.children.includes(node as any);\n                }\n            });\n        }\n\n        return true;\n    }\n};\n","import { Ancestor, NodeEntry } from 'slate';\nimport { hasListInListItem } from './has-list-in-list-item';\n\n/**\n * 获取 listItem 内的列表(如果存在).\n * 它采用以下结构：ul> li > span + ul\n */\nexport const getListItemSublist = (listItem: NodeEntry<Ancestor>, options?: any): NodeEntry<Ancestor> | undefined => {\n    const [listItemNode, listItemPath] = listItem;\n\n    if (hasListInListItem(listItemNode)) {\n        return [listItemNode.children[1] as Ancestor, listItemPath.concat([1])];\n    }\n};\n","import { Ancestor, Editor, Element, NodeEntry, Path, Transforms } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { moveChildren } from '../../../transforms/move-children';\nimport { getListItemSublist } from '../queries/get-list-item-sublist';\n\nexport interface MoveListItemSublistItemsToListItemSublistOptions {\n    /**\n     * The list item to merge.\n     */\n    fromListItem: NodeEntry<Ancestor>;\n\n    /**\n     * The list item where to merge.\n     */\n    toListItem: NodeEntry<Ancestor>;\n\n    /**\n     * Move to the start of the list instead of the end.\n     */\n    start?: boolean;\n}\n\n/**\n * Move fromListItem sublist list items to the end of `toListItem` sublist.\n * If there is no `toListItem` sublist, insert one.\n */\nexport const moveListItemSublistItemsToListItemSublist = (\n    editor: Editor,\n    { fromListItem, toListItem, start }: MoveListItemSublistItemsToListItemSublistOptions,\n    options?: any\n) => {\n    const [, fromListItemPath] = fromListItem;\n    const [toListItemNode, toListItemPath] = toListItem;\n\n    const fromListItemSublist = getListItemSublist(fromListItem, options);\n    if (!fromListItemSublist) return 0;\n    const [, fromListItemSublistPath] = fromListItemSublist;\n\n    const toListItemSublist = getListItemSublist(toListItem, options);\n\n    let to: Path;\n\n    if (!toListItemSublist) {\n        const fromList = TheQueries.getParent(editor, fromListItemPath);\n        if (!fromList) return 0;\n        const [fromListNode] = fromList;\n\n        const fromListType = (fromListNode as Element).type;\n        const toListItemSublistPath = toListItemPath.concat([toListItemNode.children.length]);\n        Transforms.insertNodes(editor, { type: fromListType, children: [] } as Element, { at: toListItemSublistPath });\n\n        to = toListItemSublistPath.concat([0]);\n    } else if (start) {\n        const [, toListItemSublistPath] = toListItemSublist;\n        to = toListItemSublistPath.concat([0]);\n    } else {\n        to = Path.next(TheQueries.getLastChildPath(toListItemSublist));\n    }\n\n    const moved = moveChildren(editor, {\n        at: Path.previous(fromListItemSublistPath),\n        to\n    });\n\n    // Remove the empty list\n    Transforms.delete(editor, { at: fromListItemPath });\n\n    return moved;\n};\n","import { Editor } from 'slate';\nimport { ElementKinds } from '../../../constants/node-types';\nimport * as TheTransforms from '../../../transforms';\n\nexport const unwrapList = (editor: Editor) => {\n    Editor.withoutNormalizing(editor, () => {\n        TheTransforms.unwrapNodesByType(editor, ElementKinds.listItem);\n        TheTransforms.unwrapNodesByType(editor, [ElementKinds.bulletedList, ElementKinds.numberedList], { split: true });\n    });\n};\n","import { toggleProperty } from '../../utils/dom';\nimport { TheBaseFlavourElement } from '../../interfaces/base-element.flavour';\nimport { BulletedListElement, NumberedListElement } from '../../custom-types';\nimport * as TheQueries from '../../queries';\nimport { Node, Path, Text } from 'slate';\nimport { ElementKinds, MarkTypes } from '../../constants/node-types';\n\nexport class TheULFlavour extends TheBaseFlavourElement {\n    createNativeElement(): HTMLElement {\n        const element = document.createElement('ul');\n        return element;\n    }\n\n    render() {\n        super.render();\n        toggleProperty(this.nativeElement, 'the-level', this.element.indent || null);\n    }\n\n    rerender() {\n        super.rerender();\n        toggleProperty(this.nativeElement, 'the-level', this.element.indent || null);\n    }\n}\n\nexport class TheOLFlavour extends TheBaseFlavourElement<NumberedListElement> {\n    createNativeElement(): HTMLElement {\n        const element = document.createElement('ol');\n        return element;\n    }\n\n    render() {\n        super.render();\n        toggleProperty(this.nativeElement, 'the-level', this.element.indent || null);\n        toggleProperty(this.nativeElement, 'start', this.element.start || null);\n    }\n\n    rerender() {\n        super.rerender();\n        toggleProperty(this.nativeElement, 'the-level', this.element.indent || null);\n        toggleProperty(this.nativeElement, 'start', this.element.start || null);\n    }\n}\n\nexport class TheLIFlavour extends TheBaseFlavourElement {\n    currentFontSizeClass = '';\n\n    createNativeElement(): HTMLElement {\n        const element = document.createElement('li');\n        return element;\n    }\n\n    render(): void {\n        super.render();\n        this.addFontSize();\n        this.addMultiDigit();\n    }\n\n    rerender(): void {\n        super.rerender();\n        this.addFontSize();\n        this.addMultiDigit();\n    }\n\n    addFontSize() {\n        let firstText: Text;\n        for (const entry of Node.descendants(this.element)) {\n            const node = entry[0];\n            if (Text.isText(node) && !firstText) {\n                firstText = node;\n                break;\n            }\n        }\n        if (!firstText) {\n            return;\n        }\n\n        const { text, ...rest } = firstText;\n        const size = rest[MarkTypes.fontSize];\n\n        if (size) {\n            const sizeClass = `font-size-${size}`;\n            const isContains = this.nativeElement?.classList?.contains(sizeClass);\n            if (isContains) {\n                return;\n            }\n            this.clearFontSize();\n            this.nativeElement.classList.add(sizeClass);\n            this.currentFontSizeClass = sizeClass;\n        } else {\n            this.clearFontSize();\n        }\n    }\n\n    clearFontSize() {\n        if (this.currentFontSizeClass) {\n            this.nativeElement.classList.remove(this.currentFontSizeClass);\n            this.currentFontSizeClass = '';\n        }\n    }\n\n    getParentStartAndCurrentIndex() {\n        const path = TheQueries.findPath(this.editor, this.element);\n        const currentIndex = path[path.length - 1];\n        const parentElement = Node.get(this.editor, Path.parent(path)) as NumberedListElement | BulletedListElement;\n        const start = Number((parentElement.type === ElementKinds.numberedList && parentElement.start) || 1);\n        return { start, currentIndex };\n    }\n\n    addMultiDigit() {\n        const { start, currentIndex } = this.getParentStartAndCurrentIndex();\n        const multiDigit = 'data-multi-digit';\n        // start number + index\n        // when it is greater than 9, it is a multi-digit serial number\n        // exclude Font size >= 20\n        toggleProperty(this.nativeElement, multiDigit, start + currentIndex > 9 ? 'true' : null);\n    }\n}\n","import { Ancestor, Editor, Element, Node, Path, Transforms } from 'slate';\nimport { ClipboardData, DEFAULT_ELEMENT_HEIGHT, OriginEvent } from 'slate-angular';\nimport { ElementKinds, PluginMenuIcons, ROOT_ELEMENT_MARGIN_BOTTOM, ThePluginMenuItemType } from '../../constants';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\nimport { extractFragment } from '../../utils/fragment';\nimport { ListEditor } from './list.editor';\nimport { getListNormalizer } from './normalizers/get-list-normalizer';\nimport { onKeyDownList } from './on-key-down-list';\nimport { getListItemEntry } from './queries/get-list-item-entry';\nimport { getListTypes } from './queries/get-list-types';\nimport { getStartListItem } from './queries/get-start-list-item';\nimport { hasListInListItem, hasStableListInListItem, hasStableListItem } from './queries/has-list-in-list-item';\nimport { isInList } from './queries/is-in-list';\nimport { isList } from './queries/is-list';\nimport { isListNested } from './queries/is-list-nested';\nimport { isSelectionAtListItemStart } from './queries/is-selection-at-list-item-start';\nimport { isSelectionInSameListItem } from './queries/is-selection-in-same-list-item';\nimport { isSingleListItem } from './queries/is-single-list-item';\nimport { insertListData } from './transforms/insert-list-data';\nimport { insertListItem } from './transforms/insert-list-item';\nimport { moveListItemSublistItemsToListItemSublist } from './transforms/move-list-item-sublist-items-to-list-item-sublist';\nimport { moveListItemUp } from './transforms/move-list-item-up';\nimport { unwrapList } from './transforms/unwrap-list';\nimport { WithListOptions } from './types';\nimport { setClipboardDataByDom } from '../../utils';\nimport { Signal } from '@angular/core';\nimport { TheI18nTranslation } from '../../i18n';\nimport { TheLIFlavour, TheOLFlavour, TheULFlavour } from './list.flavour';\nimport { BulletedListElement, ListItemElement, NumberedListElement } from '../../custom-types';\nimport { isNodeTypeList } from './queries/is-node-type-list';\n\nexport const withList = <T extends Editor>(editor: T): T => {\n    const { insertBreak, deleteBackward, onKeydown, customInsertFragmentData, setFragmentData, renderElement, getRoughHeight } = editor;\n\n    const validLiChildrenTypes = getPluginOptions<WithListOptions>(editor, PluginKeys.list)?.validLiChildrenTypes ?? [];\n\n    const resetBlockTypesListRule = {\n        types: [ElementKinds.listItem],\n        defaultType: ElementKinds.paragraph,\n        onReset: (_editor: Editor) => unwrapList(_editor)\n    };\n\n    editor.insertBreak = () => {\n        const node = TheQueries.anchorBlock(editor);\n\n        if (!node) {\n            insertBreak();\n            return;\n        }\n\n        const isVoid = Editor.isVoid(editor, node);\n        if (isVoid) {\n            insertBreak();\n            return;\n        }\n        const listEntry = getListItemEntry(editor, {});\n        if (listEntry) {\n            let moved: boolean | undefined;\n            const { list, listItem } = listEntry;\n            const [listItemNode, listItemPath] = listItem;\n            const cursor = editor.selection.focus;\n            const isStart = Editor.isStart(editor, cursor, listItemPath);\n\n            // deprecated\n            // 如果有子级\n            if (hasListInListItem(listItemNode)) {\n                /**\n                 * If selection is at the end of li,\n                 * insert below li where children will be moved.\n                 */\n                if (Editor.isEnd(editor, cursor, listItemPath)) {\n                    return Transforms.insertNodes(\n                        editor,\n                        {\n                            type: ElementKinds.listItem,\n                            children: [{ type: ElementKinds.paragraph, children: [{ text: '' }] }]\n                        },\n                        { at: Path.next(listItemPath), select: true }\n                    );\n                }\n\n                /**\n                 * 如果选区是在listItem的开头，则在listItem上方插入\n                 */\n                if (isStart) {\n                    return Transforms.insertNodes(\n                        editor,\n                        {\n                            type: ElementKinds.listItem,\n                            children: [{ type: ElementKinds.paragraph, children: [{ text: '' }] }]\n                        },\n                        { at: listItemPath }\n                    );\n                }\n            }\n\n            // 如果选择的listItem为空则将其向上移动\n            if (isStart && TheQueries.isBlockAboveEmpty(editor)) {\n                moved = moveListItemUp(editor, { list, listItem });\n                if (moved) return;\n            }\n\n            const didReset = TheTransforms.onKeyDownResetBlockType({\n                rules: [\n                    {\n                        ...resetBlockTypesListRule,\n                        predicate: () => !moved && isStart && TheQueries.isBlockAboveEmpty(editor)\n                    }\n                ]\n            })(null, editor);\n            if (didReset) {\n                return;\n            }\n\n            /**\n             * Add a new list item if selection is in a LIST_ITEM > p.type.\n             */\n            if (!moved) {\n                const inserted = insertListItem(editor);\n                if (inserted) {\n                    return;\n                }\n            }\n        }\n\n        insertBreak();\n    };\n\n    editor.setFragmentData = (data: DataTransfer, originEvent?: OriginEvent) => {\n        const { selection } = editor;\n        const [start] = Editor.edges(editor, selection);\n        if (isInList(editor, start)) {\n            const fragmentData = editor.getFragment();\n            const fragmentElement = fragmentData[0] as Element;\n            if (getListTypes().includes(fragmentElement.type)) {\n                const startNodes = getStartListItem([fragmentElement.children[0]] as Element[]);\n                const children = startNodes.concat((fragmentElement.children as Element[]).slice(1));\n                let fragmentNodes = [\n                    {\n                        ...fragmentElement,\n                        children\n                    }\n                ] as Node[];\n                if (isSelectionInSameListItem(editor)) {\n                    // 仅仅复制列表中的内容\n                    fragmentNodes = children[0].children;\n                }\n\n                const fragment = fragmentNodes.concat(fragmentData.slice(1));\n                if (fragment) {\n                    setClipboardDataByDom(editor, fragment as Element[], data);\n                    return;\n                }\n            }\n        }\n        setFragmentData(data, originEvent);\n    };\n\n    editor.deleteBackward = unit => {\n        const res = getListItemEntry(editor, {});\n\n        if (res && isSelectionAtListItemStart(editor)) {\n            const { list, listItem } = res;\n            const [, listPath] = list;\n            const [listItemNode, listItemPath] = listItem;\n\n            const previousListItemPath = TheQueries.getPreviousPath(listItemPath);\n\n            if (previousListItemPath) {\n                const beforePoint = Editor.before(editor, listItemPath);\n                const parentPath = Path.parent(beforePoint.path);\n                const parentNode = Node.get(editor, parentPath);\n                if (Element.isElement(parentNode) && Editor.isVoid(editor, parentNode)) {\n                    Editor.withoutNormalizing(editor, () => {\n                        TheTransforms.unwrapNodesByType(editor, [ElementKinds.bulletedList, ElementKinds.numberedList], {\n                            split: true\n                        });\n                        TheTransforms.unwrapNodesByType(editor, ElementKinds.listItem);\n                    });\n                    return;\n                }\n            }\n\n            if (previousListItemPath && hasStableListInListItem(listItemNode)) {\n                Editor.withoutNormalizing(editor, () => {\n                    deleteBackward(unit);\n                    const [previousListItemNode] = Editor.node(editor, previousListItemPath);\n                    moveListItemSublistItemsToListItemSublist(\n                        editor,\n                        {\n                            fromListItem: listItem,\n                            toListItem: [previousListItemNode as Ancestor, previousListItemPath],\n                            start: false\n                        },\n                        {}\n                    );\n                });\n                return;\n            }\n\n            // move listItem children to before listItem\n            if (listItemNode.children.length > 1) {\n                Editor.withoutNormalizing(editor, () => {\n                    const beforePathRef = Editor.pathRef(editor, listItemPath);\n                    const beforePoint = Editor.before(editor, listItemPath);\n                    const startPoint = Editor.start(editor, listItemPath);\n                    const endPoint = Editor.end(editor, listItemPath);\n                    const isInFirstChild = !isListNested(editor, listPath) && TheQueries.isFirstChild(listItemPath);\n                    const to = isInFirstChild ? listPath : Path.next(Path.parent(beforePoint.path));\n\n                    Transforms.moveNodes(editor, {\n                        at: Editor.range(editor, startPoint, endPoint),\n                        to,\n                        match: node => listItemNode.children.includes(node as any)\n                    });\n                    Transforms.delete(editor, { at: beforePathRef.unref() });\n\n                    if (!isInFirstChild) {\n                        deleteBackward(unit);\n                    }\n                });\n                return;\n            }\n\n            // deprecated\n            if (!isListNested(editor, listPath) && TheQueries.isFirstChild(listItemPath)) {\n                unwrapList(editor);\n                return;\n            }\n        }\n\n        deleteBackward(unit);\n    };\n\n    editor.customInsertFragmentData = async (data: DataTransfer, clipboardData: ClipboardData | null) => {\n        const fragment = await extractFragment(data);\n\n        if (fragment) {\n            const aboveEntry = Editor.above(editor, {\n                match: n => Element.isElement(n) && Editor.isBlock(editor, n) && n.type === ElementKinds.listItem\n            });\n            const res = getListItemEntry(editor, {});\n            if (\n                fragment.length === 1 &&\n                isList(fragment[0] as Element) &&\n                aboveEntry &&\n                !isSingleListItem(fragment[0]) &&\n                hasStableListItem(res.listItem[0])\n            ) {\n                insertListData(editor, { fromList: fragment[0] as Element, toListItemEntry: aboveEntry });\n                return true;\n            }\n        }\n        return customInsertFragmentData(data, clipboardData);\n    };\n\n    editor.onKeydown = (event: KeyboardEvent) => {\n        const isContinue = !onKeyDownList(event, editor);\n        if (isContinue) {\n            onKeydown(event);\n        }\n    };\n\n    editor.normalizeNode = getListNormalizer(editor, { validLiChildrenTypes: validLiChildrenTypes });\n\n    editor.renderElement = (element: Element) => {\n        if (element.type === ElementKinds.numberedList) {\n            return TheOLFlavour;\n        }\n        if (element.type === ElementKinds.bulletedList) {\n            return TheULFlavour;\n        }\n        if (element.type === ElementKinds.listItem) {\n            return TheLIFlavour;\n        }\n        return renderElement(element);\n    };\n\n    editor.getRoughHeight = (element: Element, defaultHeight?: number) => {\n        if (element.type === ElementKinds.bulletedList || element.type === ElementKinds.numberedList) {\n            return getListRoughHeight(element);\n        }\n        return getRoughHeight(element, defaultHeight);\n    };\n\n    return editor;\n};\n\nconst listOptions = {\n    validLiChildrenTypes: [ElementKinds.image],\n    allowParentTypes: [ElementKinds.listItem, ElementKinds.tableCell, ElementKinds.blockquote]\n};\n\nexport const createListPlugin = (locale: Signal<TheI18nTranslation>) =>\n    createPluginFactory<WithListOptions>({\n        key: PluginKeys.list,\n        withOverrides: withList,\n        plugins: [\n            {\n                key: PluginKeys.numberedList,\n                options: listOptions\n            },\n            {\n                key: PluginKeys.bulletedList,\n                options: listOptions\n            }\n        ],\n        nestedStructureByKey: {\n            [ElementKinds.bulletedList]: ElementKinds.listItem,\n            [ElementKinds.numberedList]: ElementKinds.listItem\n        },\n        toolbarItems: [\n            {\n                key: ElementKinds.numberedList,\n                icon: 'list-ordered',\n                name: locale().orderedList,\n                execute: editor => ListEditor.toggleList(editor, ElementKinds.numberedList),\n                active: editor => ListEditor.isActive(editor, ElementKinds.numberedList)\n            },\n            {\n                key: ElementKinds.bulletedList,\n                icon: 'list-bullet',\n                name: locale().unorderedList,\n                execute: editor => ListEditor.toggleList(editor, ElementKinds.bulletedList),\n                active: editor => ListEditor.isActive(editor, ElementKinds.bulletedList)\n            }\n        ],\n        menuItems: [\n            {\n                key: ElementKinds.numberedList,\n                keywords: `yxlb,youxuliebiao,numbered list,numberedlist,${locale().orderedList}`,\n                execute: editor => ListEditor.toggleList(editor, ElementKinds.numberedList),\n                active: editor => ListEditor.isActive(editor, ElementKinds.numberedList),\n                type: ThePluginMenuItemType.icon,\n                name: locale().orderedList,\n                description: locale().orderedListDesc,\n                displayKey: '/yxlb',\n                icon: 'list-ordered',\n                menuIcon: PluginMenuIcons.numberedList\n            },\n            {\n                key: ElementKinds.bulletedList,\n                keywords: `wxlb,wuxuliebiao,bulletedlist,bulleted list,${locale().unorderedList}`,\n                execute: editor => ListEditor.toggleList(editor, ElementKinds.bulletedList),\n                active: editor => ListEditor.isActive(editor, ElementKinds.bulletedList),\n                type: ThePluginMenuItemType.icon,\n                name: locale().unorderedList,\n                description: locale().unorderedListDesc,\n                displayKey: '/wxlb',\n                icon: 'list-bullet',\n                menuIcon: PluginMenuIcons.bulletedList\n            }\n        ],\n        options: listOptions\n    })();\n\nconst MAX_LIST_DEPTH = 2;\n\nexport const getListRoughHeight = (element: BulletedListElement | NumberedListElement, deep = 0) => {\n    let height = 0;\n    element.children.forEach((child, index) => {\n        let childHeight = DEFAULT_ELEMENT_HEIGHT;\n        const liElement = child as ListItemElement;\n        if (liElement.children.length > 1 && isNodeTypeList(liElement.children[1]) && deep <= MAX_LIST_DEPTH) {\n            childHeight +=\n                ROOT_ELEMENT_MARGIN_BOTTOM +\n                getListRoughHeight(liElement.children[1] as BulletedListElement | NumberedListElement, deep + 1);\n        }\n        if (index !== element.children.length - 1) {\n            childHeight += ROOT_ELEMENT_MARGIN_BOTTOM;\n        }\n        height += childHeight;\n    });\n    if (deep === 0) {\n        height += ROOT_ELEMENT_MARGIN_BOTTOM;\n    }\n    return height;\n};\n","import { Editor, Range, Text, Transforms } from 'slate';\nimport { DISABLED_OPERATE_TYPES, ElementKinds, MarkTypes } from '../../constants';\nimport { PluginKeys } from '../../interfaces';\nimport { createPluginFactory } from '../../core';\nimport { CONTROL_KEY } from '../../utils';\nimport { MarkEditor } from './mark.editor';\nimport { Signal } from '@angular/core';\nimport { TheI18nTranslation } from '../../i18n';\n\nexport const withMark = <T extends Editor & MarkEditor>(editor: T): T => {\n    const e = editor;\n\n    e.removeMark = (key: string, shouldChange = true) => {\n        const { selection } = e;\n        if (selection) {\n            if (Range.isExpanded(selection)) {\n                Transforms.unsetNodes(e, key, {\n                    match: Text.isText,\n                    split: true\n                });\n            } else {\n                const marks = { ...(Editor.marks(e) || {}) };\n                delete marks[key];\n                editor.marks = marks;\n                const text = Editor.string(e, selection.anchor.path);\n                if (text !== '') {\n                    Editor.setNormalizing(editor, false);\n                    e.insertText('');\n                    editor.marks = marks;\n                    Editor.setNormalizing(editor, true);\n                } else {\n                    Transforms.unsetNodes(e, key, { at: selection.anchor.path });\n                }\n                if (shouldChange) {\n                    editor.onChange();\n                }\n            }\n        }\n    };\n\n    e.addMark = (key: string, value: any) => {\n        const { selection } = editor;\n\n        if (selection) {\n            if (Range.isExpanded(selection)) {\n                Transforms.setNodes(e, { [key]: value }, { match: Text.isText, split: true });\n            } else {\n                const marks = {\n                    ...(Editor.marks(e) || {}),\n                    [key]: value\n                };\n                editor.marks = marks;\n                const text = Editor.string(e, selection.anchor.path);\n                if (text !== '') {\n                    Editor.setNormalizing(editor, false);\n                    e.insertText('');\n                    editor.marks = marks;\n                    Editor.setNormalizing(editor, true);\n                } else {\n                    Transforms.setNodes(e, { [key]: value }, { at: selection.anchor.path });\n                }\n            }\n        }\n    };\n\n    return e;\n};\n\nexport const createMarkPlugin = (locale: Signal<TheI18nTranslation>) =>\n    createPluginFactory({\n        key: PluginKeys.mark,\n        withOverrides: withMark,\n        toolbarItems: [\n            {\n                key: MarkTypes.bold,\n                icon: 'bold',\n                name: locale().bold,\n                shortcutKey: `${CONTROL_KEY}+B`,\n                execute: editor => MarkEditor.toggleMark(editor, MarkTypes.bold),\n                active: editor => MarkEditor.isMarkActive(editor, MarkTypes.bold)\n            },\n            {\n                key: MarkTypes.italic,\n                icon: 'italic',\n                name: locale().italic,\n                shortcutKey: `${CONTROL_KEY}+I`,\n                execute: editor => MarkEditor.toggleMark(editor, MarkTypes.italic),\n                active: editor => MarkEditor.isMarkActive(editor, MarkTypes.italic)\n            },\n            {\n                key: MarkTypes.strike,\n                icon: 'strike',\n                name: locale().strike,\n                execute: editor => MarkEditor.toggleMark(editor, MarkTypes.strike),\n                active: editor => MarkEditor.isMarkActive(editor, MarkTypes.strike)\n            },\n            {\n                key: MarkTypes.underline,\n                icon: 'underline',\n                name: locale().underline,\n                shortcutKey: `${CONTROL_KEY}+U`,\n                execute: editor => MarkEditor.toggleMark(editor, MarkTypes.underline),\n                active: editor => MarkEditor.isMarkActive(editor, MarkTypes.underline)\n            }\n        ],\n        options: {\n            disabledOperateTypes: [ElementKinds.image, ...DISABLED_OPERATE_TYPES]\n        }\n    })();\n","import { Descendant, Editor, Element, Node, NodeEntry, Operation } from 'slate';\nimport { ELEMENT_UNIQUE_ID } from '../../constants';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { PluginKeys, QueryOptions } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\nimport { idCreator } from '../../utils';\nimport { deleteElementKey } from '../../utils/fragment';\nimport { cloneDeep } from '../../utils/lodash';\n\nexport interface WithNodeIDProps extends QueryOptions {\n    // Key used for the id. Default is `id`.\n    idKey?: string;\n    // ID factory, e.g. `uuid`\n    idCreator?: () => void;\n    // Filter `Text` nodes.\n    filterText?: boolean;\n}\n\nexport const withNodeID = <T extends Editor>(e: T): T => {\n    const editor = e as T & { removedIDs: Set<any> };\n\n    let props: WithNodeIDProps = { idKey: 'id', idCreator: () => Date.now(), filterText: true, filter: () => true };\n    const options = getPluginOptions<WithNodeIDProps>(editor, PluginKeys.nodeID);\n    props = { ...props, ...options };\n    const { idKey, idCreator, filterText, filter } = props;\n\n    const { apply, getFragment } = editor;\n\n    const idPropsCreator = () => ({ [idKey]: idCreator() });\n\n    editor.removedIDs = new Set();\n\n    editor.apply = (operation: Operation) => {\n        if (operation.type === 'insert_node') {\n            const newFilter = (entry: NodeEntry<Node>) => {\n                const [_node] = entry;\n                return filter(entry) && filterText ? Element.isElement(_node) : TheQueries.isDescendant(_node);\n            };\n\n            // fix can not find path by orign node\n            let node = operation.node;\n            if (!Object.isExtensible(node)) {\n                node = cloneDeep(node);\n            }\n\n            // it will not overwrite ids once it's set as it's read-only\n            TheTransforms.mergeDeepToNodes({\n                node,\n                source: idPropsCreator,\n                query: {\n                    filter: newFilter\n                }\n            });\n\n            return apply({\n                ...operation,\n                node\n            });\n        }\n\n        if (operation.type === 'split_node' && (!filterText || (operation.properties as Element).type)) {\n            let id = operation.properties[idKey];\n            if (editor.removedIDs.has(id)) {\n                editor.removedIDs.delete(id);\n            } else {\n                id = idCreator();\n            }\n\n            return apply({\n                ...operation,\n                properties: {\n                    ...operation.properties,\n                    [idKey]: id\n                }\n            });\n        }\n\n        if (operation.type === 'merge_node' && (!filterText || (operation.properties as Element).type)) {\n            editor.removedIDs.add((operation.properties as Element)[idKey]);\n        }\n\n        return apply(operation);\n    };\n\n    editor.getFragment = () => {\n        const fragment = cloneDeep(getFragment());\n        return deleteElementKey(fragment, idKey) as Descendant[];\n    };\n\n    return editor;\n};\n\nexport const createNodeIDPlugin = createPluginFactory<WithNodeIDProps>({\n    key: PluginKeys.nodeID,\n    withOverrides: withNodeID,\n    options: {\n        idKey: ELEMENT_UNIQUE_ID,\n        idCreator\n    }\n});\n","import { Editor, Element, Text, Transforms } from 'slate';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { CustomElementKinds } from '../../custom-types';\nimport { PluginKeys } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { createEmptyParagraph } from '../../utils/create-empty-paragraph';\n\nexport interface InsertParagraphNodesOptions {\n    types: CustomElementKinds[];\n}\n\nexport const withInsertParagraphNodes = <T extends Editor>(editor: T): T => {\n    const { normalizeNode } = editor;\n    const types = getPluginOptions<InsertParagraphNodesOptions>(editor, PluginKeys.insertParagraphNodes)?.types ?? [];\n\n    editor.normalizeNode = ([currentNode, currentPath]) => {\n        if (Text.isText(currentNode) && currentPath.length) {\n            const [node] = Editor.parent(editor, currentPath);\n            const containerBlocks = [...types, ...TheQueries.getContainerBlocks(editor)];\n            if (Element.isElement(node) && containerBlocks.includes(node.type)) {\n                const paragraph = createEmptyParagraph();\n                (paragraph.children[0] as Text).text = currentNode.text;\n                Transforms.insertNodes(editor, paragraph, { at: currentPath });\n                return;\n            }\n        }\n        return normalizeNode([currentNode, currentPath]);\n    };\n\n    return editor;\n};\n\nexport const createInsertParagraphNodesPlugin = createPluginFactory<InsertParagraphNodesOptions>({\n    key: PluginKeys.insertParagraphNodes,\n    withOverrides: withInsertParagraphNodes\n});\n","import { Editor, Element, Node, Path, Transforms } from 'slate';\nimport { ElementKinds } from '../../constants';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { CustomElementKinds } from '../../custom-types';\nimport { PluginKeys, QueryOptions } from '../../interfaces';\nimport * as TheQueries from '../../queries';\n\nexport interface WithTrailingNode extends QueryOptions {\n    type?: CustomElementKinds;\n    level?: number;\n}\n\nexport const withTrailingNode = <T extends Editor>(editor: T) => {\n    const { normalizeNode } = editor;\n\n    const options = getPluginOptions<WithTrailingNode>(editor, PluginKeys.trailingNode);\n    const { type, level, ...query } = options;\n\n    editor.normalizeNode = ([currentNode, currentPath]) => {\n        if (!currentPath.length) {\n            const entry = TheQueries.getLastNode(editor, level);\n            const [lastNode, lastPath] = entry;\n\n            if (Element.isElement(lastNode) && lastNode.type !== type && TheQueries.isNodeType(entry, query)) {\n                Transforms.insertNodes(\n                    editor,\n                    {\n                        type,\n                        children: [{ text: '' }]\n                    } as Node,\n                    { at: Path.next(lastPath) }\n                );\n            }\n        }\n\n        return normalizeNode([currentNode, currentPath]);\n    };\n\n    return editor;\n};\n\nexport const createTrailingNodePlugin = createPluginFactory({\n    key: PluginKeys.trailingNode,\n    withOverrides: withTrailingNode,\n    options: {\n        type: ElementKinds.paragraph,\n        level: 0\n    }\n});\n","import { filter, take } from 'rxjs/operators';\nimport { Editor, Range } from 'slate';\nimport { HistoryEditor } from 'slate-history';\nimport { MarkProps, MarkTypes, ToolbarActionTypes } from '../../constants';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys, TheEditor } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { TheContextService } from '../../services/context.service';\nimport * as TheTransforms from '../../transforms';\nimport { CONTROL_KEY } from '../../utils';\nimport { TableEditor } from '../table/table.editor';\nimport { Signal } from '@angular/core';\nimport { TheI18nTranslation } from '../../i18n';\nimport { EDITOR_TO_ELEMENT } from 'slate-dom';\n\nexport const PaintFormatEditor = {\n    formatBrush(editor: TheEditor, marks: { [key in MarkTypes]?: any }) {\n        const block = TheQueries.anchorBlock(editor);\n        if (block && Range.isCollapsed(editor.selection)) {\n            // TODO:: 在撤销时有bug, 临时使用withoutSaving处理\n            HistoryEditor.withoutSaving(editor, () => {\n                const path = TheEditor.findPath(editor, block);\n                TheTransforms.setMarks(editor, marks, path);\n            });\n        } else {\n            TheTransforms.setMarks(editor, marks);\n        }\n        PaintFormatEditor.cancelFormatBrushStatus(editor);\n    },\n    isActive(editor: TheEditor) {\n        const contextService = editor.injector.get(TheContextService);\n        const res = contextService.paintFormatStatus.isActive;\n        return res;\n    },\n    enableFormatBrush(editor: TheEditor) {\n        const contextService = editor.injector.get(TheContextService);\n        if (contextService.paintFormatStatus.isActive) {\n            return PaintFormatEditor.cancelFormatBrushStatus(editor);\n        }\n        contextService.paintFormatStatus = {\n            isActive: true,\n            marks: TheQueries.getSelectionMarks(editor)\n        };\n        const element = EDITOR_TO_ELEMENT.get(editor);\n        element.classList.add('pointer-paint');\n        contextService.onMouseUp$\n            .pipe(\n                filter(event => element.contains(event.target as Element)),\n                take(1)\n            )\n            .subscribe((event: MouseEvent) => {\n                if (contextService.paintFormatStatus.isActive) {\n                    const contextService = editor.injector.get(TheContextService);\n                    const marks: { [key in MarkTypes]?: any } = {};\n                    for (const key of MarkProps) {\n                        marks[key] = contextService.paintFormatStatus.marks[key] || null;\n                    }\n                    if (TableEditor.formatBrush(editor, marks)) {\n                        PaintFormatEditor.cancelFormatBrushStatus(editor);\n                        return;\n                    }\n                    PaintFormatEditor.formatBrush(editor, marks);\n                }\n            });\n        editor.onChange();\n    },\n    cancelFormatBrushStatus(editor: TheEditor) {\n        const contextService = editor.injector.get(TheContextService);\n        contextService.paintFormatStatus = {\n            isActive: false,\n            marks: {}\n        };\n        const element = EDITOR_TO_ELEMENT.get(editor);\n        element.classList.remove('pointer-paint');\n        editor.onChange();\n    }\n};\n\nexport const createPaintFormatPlugin = (locale: Signal<TheI18nTranslation>) =>\n    createPluginFactory({\n        key: PluginKeys.paintFormat,\n        toolbarItems: [\n            {\n                key: ToolbarActionTypes.undo,\n                icon: 'undo',\n                name: locale().undo,\n                shortcutKey: `${CONTROL_KEY}+Z`,\n                execute: (editor: TheEditor) => editor.undo()\n            },\n            {\n                key: ToolbarActionTypes.redo,\n                icon: 'redo',\n                name: locale().redo,\n                shortcutKey: `${CONTROL_KEY}+Shift+Z`,\n                execute: (editor: TheEditor) => editor.redo()\n            },\n            {\n                key: ToolbarActionTypes.paintformat,\n                icon: 'paintformat',\n                name: locale().paintFormat,\n                execute: PaintFormatEditor.enableFormatBrush,\n                active: PaintFormatEditor.isActive\n            },\n            {\n                key: ToolbarActionTypes.clean,\n                icon: 'clean',\n                name: locale().cleanFormat,\n                execute: (editor: TheEditor) => {\n                    const { selection } = editor;\n                    if (!selection) {\n                        return;\n                    }\n\n                    if (TableEditor.clearMark(editor)) {\n                        return;\n                    }\n\n                    if (Range.isCollapsed(selection)) {\n                        const marks = Editor.marks(editor);\n                        for (const key of Object.keys(marks)) {\n                            Editor.removeMark(editor, key);\n                        }\n                    } else {\n                        const unsetMarks: { [key in MarkTypes]?: null | string } = {};\n                        MarkProps.forEach(key => {\n                            unsetMarks[key] = null;\n                        });\n                        TheTransforms.setMarks(editor, unsetMarks);\n                    }\n                }\n            }\n        ]\n    })();\n","import { Editor, Node, Range } from 'slate';\nimport { hotkeys } from 'slate-angular';\nimport { ElementKinds, QUICK_INSERT_HOTKEY } from '../../constants';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { CustomElementKinds } from '../../custom-types';\nimport { PluginKeys } from '../../interfaces';\nimport { getBlockAbove } from '../../queries/get-block-above';\nimport { isPureEmptyParagraph } from '../../utils';\nimport { isMobileMode } from '../../utils/get-mode';\nimport { QuickInsertEditor } from './quick-insert.editor';\n\nexport interface QuickInsertPluginOptions {\n    hotkey?: string;\n    disabledPlus?: boolean;\n    allowHotkeyInTypes?: CustomElementKinds[];\n}\n\nexport const withQuickInsert = <T extends Editor>(editor: T): T => {\n    const { onKeydown, onChange, insertText, insertBreak, deleteBackward } = editor;\n    let openMenuFromHotkey = false;\n\n    editor.onKeydown = (event: KeyboardEvent) => {\n        const isOpenMenu = QuickInsertEditor.isOpenedMenu(editor);\n        const isMoveUp = hotkeys.isMoveUp(event);\n        const isMoveDown = hotkeys.isMoveDown(event);\n        const isMoveForward = hotkeys.isMoveForward(event);\n        const isMoveBackward = hotkeys.isMoveBackward(event);\n\n        // 阻止方向键默认行为\n        if (isOpenMenu && (isMoveUp || isMoveDown || isMoveForward || isMoveBackward)) {\n            event.preventDefault();\n            return;\n        }\n\n        onKeydown(event);\n    };\n\n    editor.insertText = (text: string) => {\n        const options = getPluginOptions<QuickInsertPluginOptions>(editor, PluginKeys.quickInsert);\n        const [block] = getBlockAbove(editor);\n        const { hotkey, allowHotkeyInTypes } = options;\n        // 基于插入内容对比，避免 keydown 判断时无法区分中文「、」和英文「/」热键\n        if (text === hotkey) {\n            if (!isMobileMode(editor)) {\n                const types = [...(allowHotkeyInTypes || [])];\n                if (isPureEmptyParagraph(editor, block) && allowOpenInsertMenu(editor, types)) {\n                    setTimeout(() => {\n                        openMenuFromHotkey = true;\n                        QuickInsertEditor.openMenu(editor);\n                    }, 0);\n                }\n            }\n        }\n        insertText(text);\n    };\n\n    editor.onChange = () => {\n        onChange();\n\n        if (editor.selection) {\n            const [block] = getBlockAbove(editor);\n            const isOpenMenu = QuickInsertEditor.isOpenedMenu(editor);\n            if (openMenuFromHotkey && !isOpenMenu) {\n                openMenuFromHotkey = false;\n            }\n            if (isOpenMenu) {\n                if (!Range.isCollapsed(editor.selection)) {\n                    QuickInsertEditor.closeMenu(editor);\n                    return;\n                }\n\n                // 更新搜索\n                const options = getPluginOptions<QuickInsertPluginOptions>(editor, PluginKeys.quickInsert);\n                const { hotkey } = options;\n                const keywords = Node.string(block);\n                const filterKeywords = openMenuFromHotkey && keywords.startsWith(hotkey) ? keywords.substring(1) : keywords;\n                QuickInsertEditor.updateKeywords(editor, filterKeywords);\n            }\n        }\n    };\n\n    // 拦截行为处理菜单的关闭（避免协同编辑出现异常）\n    editor.deleteBackward = unit => {\n        const isOpenMenu = QuickInsertEditor.isOpenedMenu(editor);\n        if (isOpenMenu) {\n            const [block] = getBlockAbove(editor);\n            const options = getPluginOptions<QuickInsertPluginOptions>(editor, PluginKeys.quickInsert);\n            const { hotkey } = options;\n            if (isPureEmptyParagraph(editor, block)) {\n                QuickInsertEditor.closeMenu(editor);\n            } else if (openMenuFromHotkey && Node.string(block) === hotkey) {\n                QuickInsertEditor.closeMenu(editor);\n            }\n        }\n        deleteBackward(unit);\n    };\n\n    // 拦截行为处理菜单的关闭（避免协同编辑出现异常）\n    editor.insertBreak = () => {\n        const isOpenMenu = QuickInsertEditor.isOpenedMenu(editor);\n        if (isOpenMenu) {\n            QuickInsertEditor.closeMenu(editor);\n        }\n        insertBreak();\n    };\n\n    return editor;\n};\n\nexport const createQuickInsertPlugin = createPluginFactory<QuickInsertPluginOptions>({\n    key: PluginKeys.quickInsert,\n    withOverrides: withQuickInsert,\n    options: {\n        hotkey: QUICK_INSERT_HOTKEY,\n        allowHotkeyInTypes: [ElementKinds.tableCell, ElementKinds.blockquote],\n        disabledPlus: true\n    }\n});\n\nexport const allowOpenInsertMenu = (editor: Editor, allowTypes: ElementKinds[]) => {\n    const [, path] = getBlockAbove(editor);\n    const parentNode = Node.parent(editor, path);\n    if (path.length === 1 || (parentNode && allowTypes.includes(parentNode.type))) {\n        return true;\n    }\n    return false;\n};\n","import { isKeyHotkey } from 'is-hotkey';\nimport { ElementKinds } from '../../constants';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { PluginKeys, TheEditor } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { SoftBreakOnKeyDownOptions } from './soft-break.types';\n\nexport const withSoftBreak = <T extends TheEditor>(editor: T): T => {\n    const { onKeydown } = editor;\n\n    const rules = getPluginOptions<SoftBreakOnKeyDownOptions>(editor, PluginKeys.softBreak)?.rules ?? [];\n\n    editor.onKeydown = (event: KeyboardEvent) => {\n        const entry = TheQueries.getBlockAbove(editor as any);\n\n        rules.forEach(({ hotkey, query }) => {\n            if (isKeyHotkey(hotkey, event) && TheQueries.isNodeType(entry, query)) {\n                event.preventDefault();\n\n                editor.insertText('\\n');\n            }\n        });\n        onKeydown(event);\n    };\n\n    return editor;\n};\n\nexport const createSoftBreakPlugin = createPluginFactory<SoftBreakOnKeyDownOptions>({\n    key: PluginKeys.softBreak,\n    withOverrides: withSoftBreak,\n    options: {\n        rules: [\n            { hotkey: 'shift+enter' },\n            {\n                hotkey: 'enter',\n                query: {\n                    allow: [ElementKinds.blockquote]\n                }\n            }\n        ]\n    }\n});\n","import { Overlay } from '@angular/cdk/overlay';\nimport { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { ThyAction } from 'ngx-tethys/action';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { ThyTooltipDirective } from 'ngx-tethys/tooltip';\nimport { TheTableSelect } from '../../components/table-select/table-select.component';\nimport { TheBaseToolbarItem } from '../../core';\nimport { TableOptions } from './table.types';\n\n@Component({\n    selector: 'the-table-toolbar-item',\n    template: `\n        <a\n            href=\"javascript:;\"\n            class=\"link-with-down\"\n            thyAction\n            [thyActionIcon]=\"toolbarItem.icon\"\n            [thyActionActive]=\"active\"\n            [thyTooltip]=\"$safeNavigationMigration(toolbarItem?.name)\"\n            thyTooltipPlacement=\"top\"\n            (mousedown)=\"preventDefault($event)\"\n            (click)=\"execute($event)\"\n        >\n            <thy-icon class=\"link-down-icon font-size-sm text-desc ml-1\" thyIconName=\"caret-down\"></thy-icon>\n        </a>\n    `,\n    host: {\n        class: 'the-toolbar-dropdown-container'\n    },\n    changeDetection: ChangeDetectionStrategy.Eager,\n    imports: [ThyAction, ThyTooltipDirective, ThyIcon]\n})\nexport class TheTableToolbarItem extends TheBaseToolbarItem {\n    tableSelectRef: ThyPopoverRef<TheTableSelect>;\n\n    get isOpenTableSelect() {\n        return this.tableSelectRef && this.tableSelectRef.componentInstance;\n    }\n\n    constructor(\n        private thyPopover: ThyPopover,\n        private overlay: Overlay\n    ) {\n        super();\n    }\n\n    preventDefault(event: Event) {\n        event.preventDefault();\n        event.stopPropagation();\n    }\n\n    execute(event: MouseEvent) {\n        super.execute(event);\n\n        if (this.editor?.disabled) {\n            return;\n        }\n        this.toggleTableSelect(event);\n    }\n\n    toggleTableSelect(event: MouseEvent, optionsParam?: TableOptions) {\n        if (this.isOpenTableSelect) {\n            this.tableSelectRef.close();\n            return;\n        }\n        this.tableSelectRef = this.thyPopover.open(TheTableSelect, {\n            origin: event.currentTarget as HTMLElement,\n            initialState: {\n                editor: this.editor,\n                optionsParam\n            },\n            minWidth: 0,\n            hasBackdrop: false,\n            outsideClosable: true,\n            insideClosable: false,\n            placement: 'bottomLeft',\n            offset: 0,\n            panelClass: 'the-table-selector-panel',\n            scrollStrategy: this.overlay.scrollStrategies.reposition()\n        });\n        return this.tableSelectRef;\n    }\n}\n","import { Editor, Transforms, Range } from 'slate';\nimport { createCell } from '../utils/create-cell';\nimport { TableOptions } from '../table.types';\nimport { createTablePosition } from '../utils/create-table-position';\n\n/**\n * Clear the content of the given node\n */\nexport function clearTableNode(opts: TableOptions, editor: Editor, isTopToBot?: boolean) {\n    const { selection } = editor;\n    const element = createTablePosition(editor, selection.focus.path);\n    const rowIndex = element.getRowIndex();\n    const colIndex = element.getColumnIndex();\n    const removeRow = isTopToBot ? 0 : rowIndex + 1;\n    for (let i = 0; i < element.getWidth(); i++) {\n        const inColRange = Range.includes(selection, [...element.tableEntry[1], rowIndex, i]);\n        if (inColRange && i !== colIndex) {\n            Transforms.removeNodes(editor, { at: [...element.tableEntry[1], rowIndex, i] });\n            Transforms.insertNodes(editor, createCell(opts), { at: [...element.tableEntry[1], rowIndex, i] });\n        }\n    }\n    for (let i = 0; i < element.getHeight(); i++) {\n        const inRowRange = Range.includes(selection, [...element.tableEntry[1], i]);\n        if (inRowRange && i !== rowIndex) {\n            Transforms.removeNodes(editor, { at: [...element.tableEntry[1], removeRow] });\n        }\n    }\n}\n","import { Path } from 'slate';\nimport { NODE_TO_PARENT } from 'slate-dom';\nimport { ElementKinds } from '../../../constants';\nimport { TableCellElement, TableRowElement } from '../../../custom-types';\nimport { TheEditor } from '../../../interfaces';\nimport { TableOptions } from '../table.types';\nimport { TablePosition } from './table-position';\n\nexport const isLegalTable = (editor: TheEditor, element: TableRowElement | TableCellElement, path?: Path) => {\n    try {\n        const nodePath = path || TheEditor.findPath(editor, element);\n        const opts = new TableOptions();\n        const tablePosition = TablePosition.create(opts, editor, nodePath.concat(0));\n        return element.type === ElementKinds.tableCell ? tablePosition.table && tablePosition.row : tablePosition.table;\n    } catch (error) {\n        return false;\n    }\n};\n\nexport const isInTable = (editor: TheEditor, element: TableRowElement) => {\n    const table = NODE_TO_PARENT.get(element);\n    return table.type === ElementKinds.table;\n};\n\nexport const isInTableRow = (editor: TheEditor, element: TableCellElement) => {\n    const tableRow = NODE_TO_PARENT.get(element);\n    const table = tableRow && NODE_TO_PARENT.get(tableRow);\n    return table && table.type === ElementKinds.table && tableRow.type === ElementKinds.tableRow;\n};\n","import { TableCellElement, TableElement, TableRowElement } from '../../../custom-types';\nimport { getOriginCell } from './calc-span';\n\nexport const normalizeTable = (table: TableElement) => {\n    const normalizedNodes = [];\n    const rowHeight = table.children.length;\n    const columnWidth = table.children[0].children.length;\n    table.children.forEach((row: TableRowElement, rowIndex) => {\n        row.children.forEach((cell: TableCellElement, columnIndex) => {\n            // case 1\n            if (cell.colspan || cell.rowspan) {\n                const rowspan = cell.rowspan || 1;\n                const colspan = cell.colspan || 1;\n                if (rowspan > rowHeight - rowIndex) {\n                    cell.rowspan = rowHeight - rowIndex;\n                }\n                if (colspan > columnWidth - columnIndex) {\n                    cell.colspan = columnWidth - columnIndex;\n                }\n                return;\n            }\n            // case 2\n            if (cell.hidden && !normalizedNodes.includes(cell)) {\n                const origin = getOriginCell(table, rowIndex, columnIndex);\n                if (!origin) {\n                    delete table.children[rowIndex].children[columnIndex].hidden;\n                }\n            }\n        });\n    });\n    return table;\n};\n","import { toggleClass, toggleStyle } from '../../../../utils/dom';\nimport { TableElement, TableRowElement } from '../../../../custom-types';\nimport { TheBaseFlavourElement } from '../../../../interfaces/base-element.flavour';\nimport { Editor } from 'slate';\nimport { TheEditor } from '../../../../interfaces/editor';\nimport { getTableByRow, hasHeaderRow, hasNumberedColumn } from '../../utils';\n\nexport class TableRowFlavour<T extends TableRowElement = TableRowElement, K extends Editor = Editor> extends TheBaseFlavourElement<T, K> {\n    createNativeElement(): HTMLElement {\n        return document.createElement('tr');\n    }\n\n    numberedColumnNativeElement: HTMLTableCellElement | undefined;\n\n    render() {\n        super.render();\n        this.useRowHeight();\n        this.useStickyClass();\n    }\n\n    onInit(): void {\n        super.onInit();\n        this.renderOrUpdateNumberedColumn();\n    }\n\n    rerender() {\n        this.useRowHeight();\n        this.useStickyClass();\n        this.renderOrUpdateNumberedColumn();\n    }\n\n    useRowHeight() {\n        toggleStyle(this.nativeElement, 'height', this.element.height ? this.element.height + 'px' : null);\n    }\n\n    useStickyClass() {\n        const rowIndex = this.getRowIndex();\n        toggleClass(this.nativeElement, 'the-sticky-row', rowIndex === 0);\n    }\n\n    needNumberedColumn() {\n        return this.readonly && hasNumberedColumn(getTableByRow(this.editor, this.element) as TableElement);\n    }\n\n    getRowIndex() {\n        const path = TheEditor.findPath(this.editor, this.element);\n        const rowIndex = path[path.length - 1];\n        return rowIndex;\n    }\n\n    createNumberedColumn() {\n        const numberedColumn = document.createElement('td');\n        numberedColumn.classList.add('the-table-number-column', 'align-middle');\n        return numberedColumn;\n    }\n\n    renderOrUpdateNumberedColumn() {\n        if (this.needNumberedColumn()) {\n            const rowNumber = this.getRowNumber() + '';\n            if (!this.numberedColumnNativeElement) {\n                this.numberedColumnNativeElement = this.createNumberedColumn();\n                this.numberedColumnNativeElement.textContent = rowNumber;\n                this.nativeElement.prepend(this.numberedColumnNativeElement);\n            } else if (this.numberedColumnNativeElement.textContent !== rowNumber) {\n                this.numberedColumnNativeElement.textContent = rowNumber;\n            }\n        } else {\n            if (this.numberedColumnNativeElement) {\n                this.numberedColumnNativeElement.remove();\n                this.numberedColumnNativeElement = undefined;\n            }\n        }\n    }\n\n    getRowNumber() {\n        const table = getTableByRow(this.editor, this.element) as TableElement;\n        const headerRow = hasHeaderRow(table);\n        const rowIndex = this.getRowIndex();\n        return headerRow && rowIndex === 0 ? '' : headerRow ? rowIndex : rowIndex + 1;\n    }\n}\n","import { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { ConnectedPosition, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ElementRef, Injector } from '@angular/core';\nimport { isUndefined } from 'ngx-tethys/util';\nimport { merge } from 'rxjs';\nimport { debounceTime, filter, map } from 'rxjs/operators';\nimport { Editor } from 'slate';\nimport { AngularEditor, ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport { TheColumnResizeOverlayHandle } from '../../../../components';\nimport { ColumnResizeNotifierSource, ColumnSizeAction } from '../../../../components/column-resize/column-resize-notifier';\nimport { Position, TableCellEventDispatcher } from '../../../../components/column-resize/event-dispatcher';\nimport { ResizeRef } from '../../../../components/column-resize/resize-ref';\nimport { ColumnResizingStore } from '../../../../components/column-resize/resizing.store';\nimport { TableCellElement } from '../../../../custom-types';\nimport * as TheQueries from '../../../../queries';\nimport {\n    coercePixelsFromCssValue,\n    getElementHeight,\n    getElementWidth,\n    toggleClass,\n    toggleProperty,\n    toggleStyle\n} from '../../../../utils/dom';\nimport { isMobileMode } from '../../../../utils/get-mode';\nimport { TableOptions } from '../../table.types';\nimport { getSelectCellNode, getTableByCell } from '../../utils';\nimport { getTableViewportRect } from '../../utils/table-viewport';\nimport { TheTable } from '../table.component';\nimport { TheBaseFlavourElement } from '../../../../interfaces/base-element.flavour';\n\nconst OVERLAY_INIT_SIZE = 16;\nconst OVERLAY_ACTIVE_CLASS = 'the-resizable-overlay-thumb-active';\n\nexport const POSITION_MAP: { [key: string]: ConnectedPosition } = {\n    top: {\n        originX: 'start',\n        originY: 'top',\n        overlayX: 'start',\n        overlayY: 'center'\n    },\n    bottom: {\n        originX: 'start',\n        originY: 'bottom',\n        overlayX: 'start',\n        overlayY: 'center'\n    },\n    right: {\n        originX: 'end',\n        originY: 'top',\n        overlayX: 'center',\n        overlayY: 'top'\n    },\n    left: {\n        originX: 'start',\n        originY: 'top',\n        overlayX: 'center',\n        overlayY: 'top'\n    }\n};\n\nexport class TableTdFlavour<T extends TableCellElement = TableCellElement, K extends Editor = Editor> extends TheBaseFlavourElement<T, K> {\n    createNativeElement(): HTMLElement {\n        return document.createElement('td');\n    }\n\n    resizingStore = new ColumnResizingStore();\n\n    isMobileMode = false;\n\n    tableComponent: TheTable;\n\n    protected overlayRef?: OverlayRef;\n\n    public hoveredDirection: Position | null;\n\n    get tableStore() {\n        return this.tableComponent?.tableStore;\n    }\n\n    get tableService() {\n        return this.tableComponent?.tableService;\n    }\n\n    get eventDispatcher() {\n        return this.tableComponent?.eventDispatcher;\n    }\n\n    get resizeNotifier() {\n        return this.tableComponent?.resizeNotifier;\n    }\n\n    get tableElement(): HTMLElement {\n        return this.tableComponent?.theTableElement?.nativeElement;\n    }\n\n    get overlay() {\n        return this.tableComponent?.overlay;\n    }\n\n    get scrollDispatcher() {\n        return this.tableComponent?.scrollDispatcher;\n    }\n\n    get injector() {\n        return this.tableComponent?.injector;\n    }\n\n    get isXAxisHover() {\n        return [Position.left, Position.right].includes(this.hoveredDirection);\n    }\n\n    get rowResizeClass() {\n        return [\n            'the-row-resize-handle-panel',\n            this.tableComponent && this.tableComponent.element.options?.numberedColumn ? 'the-numbered-resize-handle-panel' : ''\n        ];\n    }\n\n    public resizeRef: ResizeRef;\n\n    public tableOptions: TableOptions = new TableOptions();\n\n    render() {\n        super.render();\n        this.useState();\n        this.tableComponent = this.getTableComponent();\n    }\n\n    onInit(): void {\n        super.onInit();\n        this.isMobileMode = isMobileMode(this.editor);\n        this.subscribeCellSelectedAndDangerousState();\n        if (!this.isMobileMode) {\n            this.handleResize();\n        }\n    }\n\n    subscribeCellSelectedAndDangerousState() {\n        this.tableStore.selectedCellsChange().subscribe(cellElements => {\n            const isSelectedCell = !!cellElements.find(cell => cell === this.element);\n            toggleClass(this.nativeElement, 'selected-cell', isSelectedCell);\n        });\n        this.tableStore.dangerousCellsChange().subscribe(x => {\n            const selectCellNodes = getSelectCellNode(this.editor, x);\n            const isSelectedCell = !!selectCellNodes.find(cell => cell.node === this.element);\n            toggleClass(this.nativeElement, 'dangerous-cell', isSelectedCell);\n        });\n    }\n\n    handleResize() {\n        const element = this.nativeElement;\n        this.eventDispatcher\n            .resizeOverlayVisibleForTableCell(element)\n            .pipe(\n                map(value => {\n                    const path = AngularEditor.findPath(this.editor, this.element);\n                    const isFirstColumn = path[path.length - 1] === 0;\n                    const isFirstRow = path[path.length - 2] === 0;\n                    // 禁止第一列左侧\n                    if (value && value.position === Position.left && isFirstColumn) {\n                        return null;\n                    }\n                    // 禁止第一行顶部\n                    if (value && value.position === Position.top && isFirstRow) {\n                        return null;\n                    }\n                    return value;\n                }),\n                debounceTime(100)\n            )\n            .subscribe(hoveredCellInfo => {\n                if (hoveredCellInfo && hoveredCellInfo.position) {\n                    this.hoveredDirection = hoveredCellInfo.position;\n                } else {\n                    this.hoveredDirection = null;\n                }\n                if (hoveredCellInfo) {\n                    this.hoveredDirection = hoveredCellInfo.position;\n                    if (!this.overlayRef || !this.overlayRef.hasAttached()) {\n                        this.overlayRef = this._createOverlayForHandle();\n                        this._showHandleOverlay();\n                    } else {\n                        this.resizeRef.setDirection(this.isXAxisHover ? 'X' : 'Y');\n                        this.updateOverlayHandleSizeAndOffset();\n                    }\n                } else if (this.overlayRef) {\n                    this.overlayRef.detach();\n                }\n            });\n        merge(this.resizeNotifier.resizeCanceled, this.resizeNotifier.triggerResize)\n            .pipe(\n                this.takeUntilDestroyed(),\n                filter(columnSize => columnSize.tableCell === this.nativeElement)\n            )\n            .subscribe(({ deltaSize, previousSize, completeImmediately }) => {\n                // 如果偏移的值不存在就不要进行后续的计算了\n                if (isUndefined(deltaSize) || isUndefined(previousSize)) {\n                    return;\n                }\n                const { top, left, height, width } = this.nativeElement.getBoundingClientRect();\n                const { clientY, clientX } = event as MouseEvent;\n                let isPreventApplySize = false;\n                // 向下，或者向右移动(deltaSize > 0)，鼠标位置不在当前单元格拖拽线上，阻止应用拖拽尺寸\n                if (this.isXAxisHover) {\n                    const cellWidth = this.hoveredDirection === Position.left ? 0 : width;\n                    isPreventApplySize = deltaSize > 0 && left + cellWidth - clientX > 0;\n                } else {\n                    const cellHeight = this.hoveredDirection === Position.top ? 0 : height;\n                    isPreventApplySize = deltaSize > 0 && top + cellHeight - clientY > 0;\n                }\n                if (isPreventApplySize) {\n                    return;\n                }\n                this.nativeElement.classList.add(OVERLAY_ACTIVE_CLASS);\n                this.applySize(deltaSize, previousSize);\n                if (completeImmediately) {\n                    this._completeResizeOperation();\n                }\n            });\n\n        merge(this.resizeNotifier.resizeCanceled, this.resizeNotifier.resizeCompleted)\n            .pipe(this.takeUntilDestroyed())\n            .subscribe(columnSize => {\n                this._cleanUpAfterResize(columnSize);\n                this.resizingStore.cleanResizing();\n            });\n    }\n\n    rerender() {\n        this.useState();\n    }\n\n    useState() {\n        this.useStyle();\n        this.useSpan();\n        this.useFocus();\n    }\n\n    useStyle() {\n        toggleStyle(this.nativeElement, 'backgroundColor', this.element.backgroundColor);\n        toggleStyle(this.nativeElement, 'display', this.element.hidden ? 'none' : null);\n        toggleStyle(this.nativeElement, 'verticalAlign', this.element.verticalAlign);\n    }\n\n    useSpan() {\n        toggleProperty(this.nativeElement, 'colspan', this.element.colspan);\n        toggleProperty(this.nativeElement, 'rowspan', this.element.rowspan);\n    }\n\n    useFocus() {\n        const hasClass = this.isCollapsedAndNonReadonly && TheQueries.isGlobalCollapsed(this.editor);\n        toggleClass(this.nativeElement, 'focused-cell', hasClass);\n    }\n\n    getTableComponent() {\n        const table = getTableByCell(this.editor, this.element);\n        return ELEMENT_TO_COMPONENT.get(table) as TheTable;\n    }\n\n    private _createOverlayForHandle(): OverlayRef {\n        // Use of overlays allows us to properly capture click events spanning parts\n        // of two table cells and is also useful for displaying a resize thumb\n        // over both cells and extending it down the table as needed.\n        const overlayOption = this.isXAxisHover\n            ? {\n                  width: OVERLAY_INIT_SIZE + 'px'\n              }\n            : {\n                  height: OVERLAY_INIT_SIZE + 'px',\n                  panelClass: this.rowResizeClass\n              };\n        return this.overlay.create({\n            // Always position the overlay based on left-indexed coordinates.\n            disposeOnNavigation: true,\n            positionStrategy: this.createPositionStrategy(),\n            scrollStrategy: this.overlay.scrollStrategies.reposition(),\n            ...overlayOption\n        });\n    }\n\n    private createPositionStrategy(overlayHandleRect?: { left: number; top: number }) {\n        const position: ConnectedPosition = this.isXAxisHover\n            ? { ...POSITION_MAP[this.hoveredDirection], offsetY: overlayHandleRect?.top || 0 }\n            : ({ ...POSITION_MAP[this.hoveredDirection], offsetX: overlayHandleRect?.left || 0 } as any);\n        return this.overlay\n            .position()\n            .flexibleConnectedTo(this.nativeElement)\n            .withFlexibleDimensions(false)\n            .withGrowAfterOpen(false)\n            .withPush(false)\n            .withPositions([position]);\n    }\n\n    getOverlayHandleRect() {\n        const tableViewportRect = getTableViewportRect(this.editor, this.tableComponent.element);\n        const cellRect = this.nativeElement.getBoundingClientRect();\n        const top = tableViewportRect.top - cellRect.top;\n        const left = tableViewportRect.left - cellRect.left;\n        let width = 0;\n        let height = 0;\n        if (this.isXAxisHover) {\n            width = OVERLAY_INIT_SIZE;\n            height = tableViewportRect.bottom - tableViewportRect.top;\n        } else {\n            width = tableViewportRect.right - tableViewportRect.left;\n            height = OVERLAY_INIT_SIZE;\n        }\n        return {\n            top,\n            left,\n            width,\n            height\n        };\n    }\n\n    private updateOverlayHandleSizeAndOffset() {\n        this.overlayRef?.removePanelClass(this.rowResizeClass);\n        const overlayHandleRect = this.getOverlayHandleRect();\n        this.overlayRef?.updatePositionStrategy(this.createPositionStrategy(overlayHandleRect));\n        this.resizeRef.setDirection(this.isXAxisHover ? 'X' : 'Y');\n        this.resizeRef.setPosition(this.hoveredDirection);\n        if (this.isXAxisHover) {\n            this.overlayRef!.updateSize({ height: overlayHandleRect.height, width: overlayHandleRect.width, maxHeight: 'inherit' });\n        } else {\n            this.overlayRef!.addPanelClass(this.rowResizeClass);\n            this.overlayRef!.updateSize({ height: overlayHandleRect.height, width: overlayHandleRect.width });\n        }\n    }\n\n    private _createHandlePortal(): ComponentPortal<TheColumnResizeOverlayHandle> {\n        const customTokens = new WeakMap();\n        const elementRef = new ElementRef(this.nativeElement);\n        this.resizeRef = new ResizeRef(\n            elementRef,\n            this.overlayRef!,\n            this.tableOptions.minWidthPx,\n            this.tableOptions.maxWidthPx,\n            this.tableOptions.minHeightPx,\n            this.tableOptions.maxHeightPx,\n            () => {\n                this.updateOverlayHandleSizeAndOffset();\n            }\n        );\n        customTokens.set(ResizeRef, this.resizeRef);\n        customTokens.set(TableCellEventDispatcher, this.eventDispatcher);\n        customTokens.set(ColumnResizeNotifierSource, this.resizeNotifier);\n        const injector = Injector.create({\n            parent: this.injector,\n            providers: [\n                { provide: ResizeRef, useValue: this.resizeRef },\n                { provide: TableCellEventDispatcher, useValue: this.eventDispatcher },\n                { provide: ColumnResizeNotifierSource, useValue: this.resizeNotifier }\n            ]\n        });\n        return new ComponentPortal(TheColumnResizeOverlayHandle, this.viewContainerRef, injector);\n    }\n\n    private _showHandleOverlay(): void {\n        this.overlayRef!.attach(this._createHandlePortal()).changeDetectorRef.markForCheck();\n        this.updateOverlayHandleSizeAndOffset();\n    }\n\n    private _cleanUpAfterResize(columnSize: ColumnSizeAction): void {\n        this.nativeElement.classList.remove(OVERLAY_ACTIVE_CLASS);\n    }\n\n    private _completeResizeOperation(): void {\n        this.resizeNotifier.resizeCompleted.next({\n            tableCell: this.nativeElement\n        });\n    }\n\n    private applySize(deltaSize: number, previousSize?: number): void {\n        // update col width and table width\n        if (this.isXAxisHover) {\n            this.applyColumnSize(deltaSize);\n        } else {\n            this.applyRowSize(deltaSize);\n        }\n        this.tableComponent.useRowControls();\n        this.tableComponent.detectChanges();\n        this.updateOverlayHandleSizeAndOffset();\n        this.tableComponent.setGridColumnsStyle();\n    }\n\n    applyColumnSize(deltaX: number): void {\n        const cols = [...this.tableElement.querySelector('colgroup').children] as HTMLTableColElement[];\n        this.resizingStore.storeTableWidth(cols);\n        this.resizingStore.initDirection(deltaX);\n        let cellIndex = (this.nativeElement as HTMLTableCellElement).cellIndex;\n        if (this.hoveredDirection === 'left') {\n            cellIndex = cellIndex - 1;\n        }\n        const colspan = (this.nativeElement as HTMLTableCellElement).getAttribute('colspan') || 1;\n        cellIndex = cellIndex + (colspan as number) / 1 - 1;\n        if (deltaX > 0) {\n            this.applyRightCols(cols, deltaX, cellIndex + 1);\n            if (this.resizingStore.isRestoring(deltaX)) {\n                deltaX = this.resizingStore.restoreLeftCols(deltaX);\n            }\n            if (deltaX > 0) {\n                cols[cellIndex].style.width = coerceCssPixelValue(coercePixelsFromCssValue(cols[cellIndex].style.width) + deltaX);\n            }\n        } else {\n            const nextCol = cols[cellIndex + 1];\n            if (nextCol) {\n                let leftDeltaX = this.resizingStore.getScrollWidth(deltaX);\n                const _delta = this.applyLeftCols(cols, deltaX, cellIndex);\n                if (_delta === deltaX) {\n                    // can not resize\n                    return;\n                }\n                deltaX = deltaX - _delta;\n                if (this.resizingStore.isRestoring(deltaX)) {\n                    if (leftDeltaX < 0) {\n                        leftDeltaX = this.resizingStore.restoreRightCols(leftDeltaX);\n                    }\n                    if (leftDeltaX < 0) {\n                        nextCol.style.width = coerceCssPixelValue(getElementWidth(nextCol) + Math.abs(leftDeltaX));\n                    }\n                } else {\n                    nextCol.style.width = coerceCssPixelValue(getElementWidth(nextCol) + Math.abs(deltaX));\n                }\n            } else {\n                const scrollWidth = getElementWidth(this.tableElement) - this.tableComponent.tableWrapperWidth;\n                if (scrollWidth > 0) {\n                    if (scrollWidth > Math.abs(deltaX)) {\n                        this.applyLeftCols(cols, deltaX, cellIndex);\n                    } else {\n                        this.applyLeftCols(cols, -scrollWidth, cellIndex);\n                    }\n                }\n            }\n        }\n    }\n\n    applyLeftCols(cols: HTMLTableColElement[], deltaX: number, colIndex: number): number {\n        while (deltaX < 0 && cols[colIndex]) {\n            const currentWidth = getElementWidth(cols[colIndex]);\n            if (currentWidth > this.tableOptions.minWidthPx) {\n                if (this.resizingStore.isResizing(deltaX)) {\n                    this.resizingStore.storeResizingCol(cols[colIndex]);\n                }\n                if (currentWidth > this.tableOptions.minWidthPx + Math.abs(deltaX)) {\n                    cols[colIndex].style.width = coerceCssPixelValue(currentWidth - Math.abs(deltaX));\n                    deltaX = 0;\n                } else {\n                    deltaX += currentWidth - this.tableOptions.minWidthPx;\n                    cols[colIndex].style.width = coerceCssPixelValue(this.tableOptions.minWidthPx);\n                }\n            }\n            colIndex--;\n        }\n        return deltaX;\n    }\n\n    applyRightCols(cols: HTMLTableColElement[], deltaX: number, colIndex: number) {\n        while (deltaX > 0 && cols[colIndex]) {\n            const currentWidth = getElementWidth(cols[colIndex]);\n            if (currentWidth > this.tableOptions.minWidthPx) {\n                if (this.resizingStore.isResizing(deltaX)) {\n                    this.resizingStore.storeResizingCol(cols[colIndex]);\n                }\n                if (currentWidth > deltaX + this.tableOptions.minWidthPx) {\n                    cols[colIndex].style.width = coerceCssPixelValue(currentWidth - deltaX);\n                    deltaX = 0;\n                } else {\n                    deltaX -= currentWidth - this.tableOptions.minWidthPx;\n                    cols[colIndex].style.width = coerceCssPixelValue(this.tableOptions.minWidthPx);\n                }\n            }\n            colIndex++;\n        }\n        return deltaX;\n    }\n\n    applyRowSize(deltaY: number): void {\n        const rows = [...this.tableElement.querySelector('tbody').children] as HTMLTableRowElement[];\n        this.resizingStore.initDirection(deltaY, this.isXAxisHover);\n\n        let rowIndex = (this.nativeElement.parentElement as HTMLTableRowElement).rowIndex - 1; // subtract thead's tr\n        if (this.hoveredDirection === Position.top) {\n            rowIndex = rowIndex - 1;\n        }\n\n        const rowSpan = (this.nativeElement as HTMLTableCellElement).rowSpan;\n        const bottomRowIndex = rowIndex + (rowSpan - 1) + 1;\n        if (deltaY > 0) {\n            this.applyTargetRow(rows, deltaY, bottomRowIndex);\n            const rowHeight = getElementHeight(rows[rowIndex]);\n            rows[rowIndex].style.height = coerceCssPixelValue(rowHeight + deltaY);\n        } else {\n            this.applyTargetRow(rows, deltaY, rowIndex);\n        }\n    }\n\n    applyTargetRow(rows: HTMLTableRowElement[], deltaY: number, rowIndex: number) {\n        if (deltaY < 0 && rows[rowIndex]) {\n            const minHeightPx = this.tableOptions.minHeightPx;\n            const rowOffsetHeight = getElementHeight(rows[rowIndex]);\n\n            if (rowOffsetHeight > minHeightPx) {\n                let currentHeight: number;\n                if (rowOffsetHeight > minHeightPx + Math.abs(deltaY)) {\n                    currentHeight = rowOffsetHeight - Math.abs(deltaY);\n                } else {\n                    currentHeight = minHeightPx;\n                }\n                rows[rowIndex].style.height = coerceCssPixelValue(currentHeight);\n            }\n        }\n    }\n}\n","import { timer } from 'rxjs';\nimport { Editor, Element, Node, NodeEntry, Operation, Path, Point, Range, Text, Transforms } from 'slate';\nimport { AngularEditor, ClipboardData, ELEMENT_TO_COMPONENT, hotkeys, OriginEvent } from 'slate-angular';\nimport { ElementKinds } from '../../constants/node-types';\nimport { PluginMenuIcons, ThePluginMenuItemType } from '../../constants/plugin-menu';\nimport { CustomElement, TableCellElement, TableElement, TableRowElement } from '../../custom-types';\nimport { PluginKeys, TheEditor, ToolbarItemType } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { createEmptyParagraph } from '../../utils/create-empty-paragraph';\nimport { extractFragment } from '../../utils/fragment';\nimport { cloneDeep } from '../../utils/lodash';\nimport { TheTable } from './components/table.component';\nimport { TableEditor } from './table.editor';\nimport { TableOptions, ThePluginTableOption } from './table.types';\nimport { TheTableToolbarItem } from './toolbar-item.component';\nimport { clearTableNode } from './transforms/clear-table-node';\nimport { insertColumnAtRow } from './transforms/insert-column';\nimport { TablePosition, isRangeInTable, isSelectionInTable, isVirtualKey } from './utils';\nimport { addColumns } from './utils/add-columns';\nimport { calculateAnchorPositionInCell } from './utils/calc-anchor-position';\nimport { getOriginCell } from './utils/calc-span';\nimport { createTablePosition } from './utils/create-table-position';\nimport { isInTable, isInTableRow, isLegalTable } from './utils/is-legal-table';\nimport { isSelectedCellMerged } from './utils/merge-cell';\nimport { normalizeTable } from './utils/normalize-table';\nimport { removeColumns } from './utils/remove-columns';\nimport { resetTableCell } from './utils/split-cell';\nimport { createPluginFactory } from '../../core';\nimport { setClipboardDataByDom } from '../../utils';\nimport { Signal } from '@angular/core';\nimport { TheI18nTranslation } from '../../i18n';\nimport { TableRowFlavour } from './components/row/row.flavour';\nimport { TableTdFlavour } from './components/td/td.flavour';\nimport { isLogicTableElement } from '../deserialize/deserialize-html.plugin';\nimport { ROOT_ELEMENT_MARGIN_BOTTOM } from '../../constants/default';\n\nexport const withTable = <T extends TheEditor>(editor: T): T => {\n    const {\n        deleteBackward,\n        deleteForward,\n        onKeydown,\n        setFragmentData,\n        customInsertFragmentData,\n        normalizeNode,\n        isBlockCard,\n        renderElement,\n        deleteCutData,\n        isContainer,\n        onChange,\n        onClick,\n        mousedown,\n        getRoughHeight\n    } = editor;\n\n    editor.deleteBackward = unit => {\n        const opts = new TableOptions();\n        if (!isSelectionInTable(opts, editor)) {\n            deleteBackward(unit);\n            return;\n        }\n        const { selection } = editor;\n\n        const [, startBlockPath] = Editor.above<Element>(editor, {\n            match: n => Element.isElement(n) && Editor.isBlock(editor, n)\n        });\n        const startPosition = createTablePosition(editor);\n        if (\n            startBlockPath.length <= startPosition.cellEntry[1].length + 1 &&\n            startBlockPath.pop() === 0 &&\n            selection.anchor.offset === 0 &&\n            TheQueries.isStart(editor, selection.anchor, startBlockPath) &&\n            !Editor.isVoid(editor, TheQueries.anchorBlock(editor))\n        ) {\n            return;\n        }\n        deleteBackward(unit);\n    };\n\n    editor.deleteForward = unit => {\n        const opts = new TableOptions();\n        const afterPoint = Editor.after(editor, editor.selection);\n        if (afterPoint && isRangeInTable(opts, editor, { anchor: afterPoint, focus: afterPoint })) {\n            const beforePosition = createTablePosition(editor);\n            const afterPosition = createTablePosition(editor, afterPoint.path);\n            if (beforePosition.cell && beforePosition.cell !== afterPosition.cell) {\n                return;\n            }\n        }\n        deleteForward(unit);\n    };\n\n    editor.onClick = (event: MouseEvent) => {\n        if (event.detail === 3) {\n            const isMergedCell = isSelectedCellMerged(editor);\n            const domSelection = window.getSelection();\n            if (domSelection && isMergedCell && !domSelection.isCollapsed && editor.selection) {\n                const slateSelection = AngularEditor.toSlateRange(editor, domSelection, { exactMatch: false, suppressThrow: true });\n                if (slateSelection) {\n                    const opts = new TableOptions();\n                    const startPosition = TablePosition.create(opts, editor, slateSelection.anchor.path);\n                    const endPosition = TablePosition.create(opts, editor, slateSelection.focus.path);\n                    if (startPosition.cell !== endPosition.cell) {\n                        timer(81).subscribe(() => {\n                            Transforms.select(editor, slateSelection.anchor.path);\n                        });\n                    }\n                }\n            }\n        }\n        onClick(event);\n    };\n\n    editor.mousedown = (event: MouseEvent) => {\n        const hitElement = event.target as HTMLElement;\n        if (hitElement.classList.contains('the-table-wrapper')) {\n            if (!TheEditor.isFocused(editor)) {\n                TheEditor.focus(editor);\n            }\n            event.preventDefault();\n        }\n        mousedown(event);\n    };\n\n    editor.onKeydown = (event: KeyboardEvent) => {\n        const opts = new TableOptions();\n        const isMoveUp = hotkeys.isMoveUp(event);\n        const isMoveDown = hotkeys.isMoveDown(event);\n        const isMoveBackward = hotkeys.isMoveBackward(event);\n        const isMoveForward = hotkeys.isMoveForward(event);\n        const { selection } = editor;\n        if (!selection || !selection.anchor || !selection.focus) {\n            onKeydown(event);\n            return;\n        }\n        const startPosition = createTablePosition(editor);\n        const endPosition = createTablePosition(editor, selection.focus.path);\n        const isCollapsed = Range.isCollapsed(selection);\n        if (startPosition && endPosition && endPosition.isInTable()) {\n            // for keyboard up and down key in the table\n            if (isMoveUp || isMoveDown) {\n                const cellPath = endPosition.cellEntry[1];\n                const startPath = Editor.start(editor, cellPath).path;\n                const endPath = Editor.end(editor, cellPath).path;\n                const { isFirstLine, isLastLine } = calculateAnchorPositionInCell(editor);\n                startPath.pop();\n                endPath.pop();\n\n                if ((TheQueries.anchorBlockEntry(editor)[1].toString() !== startPath.toString() || !isFirstLine) && isMoveUp) {\n                    onKeydown(event);\n                    return;\n                }\n\n                if ((TheQueries.anchorBlockEntry(editor)[1].toString() !== endPath.toString() || !isLastLine) && isMoveDown) {\n                    onKeydown(event);\n                    return;\n                }\n\n                event.preventDefault();\n                let at: Point;\n                if (isMoveUp) {\n                    const aboveRow = startPosition.table.children[startPosition.getRowIndex() - 1];\n                    const aboveCell = aboveRow && aboveRow.children[startPosition.getColumnIndex()];\n                    if (aboveCell) {\n                        if (aboveCell.hidden) {\n                            TableEditor.selectOriginCell(\n                                editor,\n                                startPosition.table,\n                                startPosition.getRowIndex() - 1,\n                                startPosition.getColumnIndex(),\n                                false\n                            );\n                            return;\n                        } else {\n                            at = Editor.end(editor, TheEditor.findPath(editor, aboveCell));\n                        }\n                    } else {\n                        const previousNodeEntry = Editor.previous(editor, { at: startPosition.tableEntry[1] });\n                        const beforePoint = Editor.before(editor, startPosition.tableEntry[1]);\n                        Editor.next(editor, { at: startPosition.tableEntry[1] });\n\n                        if (previousNodeEntry) {\n                            at = Editor.end(editor, previousNodeEntry[1]);\n                        }\n\n                        if (!previousNodeEntry && beforePoint) {\n                            at = Editor.end(editor, beforePoint.path);\n                        }\n\n                        if (!previousNodeEntry && !beforePoint) {\n                            AngularEditor.moveBlockCard(editor, startPosition.tableEntry[0], { direction: 'left' });\n                            return;\n                        }\n                    }\n                    Transforms.select(editor, at);\n                } else {\n                    let belowRowIndex = startPosition.getRowIndex() + 1;\n                    if (startPosition.cell.rowspan > 1) {\n                        belowRowIndex = startPosition.getRowIndex() + startPosition.cell.rowspan;\n                    }\n                    const belowRow = startPosition.table.children[belowRowIndex];\n                    const belowCell = belowRow && belowRow.children[startPosition.getColumnIndex()];\n                    if (belowCell) {\n                        if (belowCell.hidden) {\n                            TableEditor.selectOriginCell(\n                                editor,\n                                startPosition.table,\n                                startPosition.getRowIndex() + 1,\n                                startPosition.getColumnIndex(),\n                                true\n                            );\n                            return;\n                        } else {\n                            at = Editor.start(editor, TheEditor.findPath(editor, belowCell));\n                        }\n                    } else {\n                        const nextNodeEntry = Editor.next(editor, { at: startPosition.tableEntry[1] });\n                        const movePath = nextNodeEntry ? nextNodeEntry[1] : Editor.after(editor, startPosition.tableEntry[1]).path;\n                        at = Editor.start(editor, movePath);\n                    }\n                    Transforms.select(editor, at);\n                }\n                return;\n            }\n\n            if (isMoveBackward) {\n                const beforePoint = Editor.before(editor, editor.selection);\n                const beforePosition = beforePoint && createTablePosition(editor, beforePoint.path);\n                if (beforePosition && beforePosition.cell && beforePosition.cell.hidden) {\n                    event.preventDefault();\n                    const at = Editor.end(editor, TheEditor.findPath(editor, beforePosition.findPrevious()));\n                    Transforms.select(editor, at);\n                }\n            }\n\n            if (isMoveForward) {\n                const afterPoint = Editor.after(editor, editor.selection);\n                const afterPosition = afterPoint && createTablePosition(editor, afterPoint.path);\n                if (afterPosition.cell && afterPosition.cell.hidden) {\n                    event.preventDefault();\n                    const nextCell = afterPosition.findNext();\n                    if (nextCell) {\n                        const at = Editor.start(editor, TheEditor.findPath(editor, afterPosition.findNext()));\n                        Transforms.select(editor, at);\n                        event.preventDefault();\n                    } else {\n                        AngularEditor.moveBlockCard(editor, startPosition.tableEntry[0], { direction: 'right' });\n                        event.preventDefault();\n                    }\n                    return;\n                }\n            }\n\n            // Prevent deleting cells in the table\n            if (!isCollapsed && !startPosition.isInTable() && !isVirtualKey(event)) {\n                event.preventDefault();\n                let tableOutPath: Point;\n                Editor.withoutNormalizing(editor, () => {\n                    if (Range.isForward(selection)) {\n                        tableOutPath = Editor.end(editor, [selection.focus.path[0] - 1]);\n                        clearTableNode(opts, editor, true);\n                    } else {\n                        tableOutPath = Editor.start(editor, [selection.focus.path[0] + 1]);\n                        clearTableNode(opts, editor);\n                    }\n                    const tableOutRange = Editor.range(editor, selection.anchor, tableOutPath);\n                    Transforms.delete(editor, { at: tableOutRange });\n                });\n                // new range\n                const cellRange = Editor.range(editor, editor.selection.focus.path.slice(0, 3));\n                const focusRange = Range.intersection(editor.selection, cellRange);\n                Transforms.select(editor, focusRange);\n                Editor.deleteFragment(editor);\n                return;\n            }\n        }\n        onKeydown(event);\n        return;\n    };\n\n    editor.setFragmentData = (data: DataTransfer, originEvent?: OriginEvent) => {\n        const opts = new TableOptions();\n\n        if (isSelectionInTable(opts, editor)) {\n            const tablePosition = createTablePosition(editor);\n            const tableComponent = ELEMENT_TO_COMPONENT.get(tablePosition.table) as TheTable;\n            const selectedCellPositions = tableComponent.tableStore.getSelectedCellPositions();\n            let tableFragment = null;\n            if (tableComponent.tableStore.selectedRowsIndex.length > 0) {\n                const rows = tablePosition.table.children.slice(\n                    tableComponent.tableStore.selectedRowsIndex[0],\n                    tableComponent.tableStore.selectedRowsIndex[tableComponent.tableStore.selectedRowsIndex.length - 1] + 1\n                );\n                tableFragment = {\n                    ...tablePosition.table,\n                    children: rows\n                };\n            } else if (selectedCellPositions.length > 0) {\n                const tempRows = {};\n                for (const cell of selectedCellPositions) {\n                    const { row, col } = cell;\n                    const cellPath = [...tablePosition.tableEntry[1], row, col];\n                    const cellNode = Node.get(editor, cellPath) as TableCellElement;\n                    if (!tempRows[row]) {\n                        tempRows[row] = [];\n                    }\n                    tempRows[row].push(cellNode);\n                }\n                const rows: TableRowElement[] = Object.values(tempRows).map((item: TableCellElement[]) => {\n                    return {\n                        type: ElementKinds.tableRow,\n                        children: item\n                    };\n                });\n                tableFragment = {\n                    type: ElementKinds.table,\n                    children: rows\n                };\n            } else {\n                const fragment = editor.getFragment() as CustomElement[];\n                const isAcrossBlocks = TheQueries.isAcrossBlocks(editor, fragment);\n                if (isAcrossBlocks && fragment.length === 1 && fragment[0].type === ElementKinds.table) {\n                    tableFragment = fragment[0];\n                }\n            }\n            if (tableFragment) {\n                tableFragment = normalizeTable(cloneDeep(tableFragment));\n                setClipboardDataByDom(editor, tableFragment, data);\n                return;\n            }\n        }\n        setFragmentData(data, originEvent);\n    };\n\n    editor.customInsertFragmentData = async (data: DataTransfer, contextClipboardData: ClipboardData | null) => {\n        let fragment = await extractFragment(data);\n        if (!fragment) {\n            fragment = contextClipboardData ? contextClipboardData.elements : null;\n        }\n        if (fragment) {\n            const opts = new TableOptions();\n            const isTableFragment = fragment.length === 1 && Element.isElement(fragment[0]) && fragment[0].type === ElementKinds.table;\n            if (isSelectionInTable(opts, editor) && (isTableFragment || isLogicTableElement(editor, fragment))) {\n                fragment = fragment.filter(node => node.type === ElementKinds.table) as Element[];\n                const tablePosition = createTablePosition(editor);\n                const clipboardTable = fragment[0].children as Node[];\n                const clipboardRow = (clipboardTable[0] as Element).children;\n                const selectRowIndex = tablePosition.getRowIndex();\n                const selectColIndex = tablePosition.getColumnIndex();\n                const lastRowIndex = selectRowIndex + clipboardTable.length - 1;\n                const lastColIndex = selectColIndex + clipboardRow.length - 1;\n\n                for (let i = selectRowIndex; i <= lastRowIndex; i++) {\n                    for (let j = selectColIndex; j <= lastColIndex; j++) {\n                        const row = tablePosition.table.children[i];\n                        if (row && row.children[j]) {\n                            const originCell = getOriginCell(tablePosition.table, i, j);\n                            if (originCell && (originCell.colspan || originCell.rowspan)) {\n                                const path = TheEditor.findPath(editor, originCell).slice(-2);\n                                resetTableCell(editor, tablePosition.table, originCell, path[0], path[1]);\n                            }\n                        }\n                    }\n                }\n\n                Editor.withoutNormalizing(editor, () => {\n                    if (lastColIndex > tablePosition.getWidth() - 1) {\n                        const addColCount = lastColIndex - (tablePosition.getWidth() - 1);\n                        TableEditor.insertColumn(editor, addColCount, tablePosition.getWidth());\n                    }\n                    if (lastRowIndex > tablePosition.getHeight() - 1) {\n                        const addRowCount = lastRowIndex - (tablePosition.getHeight() - 1);\n                        TableEditor.insertRow(editor, addRowCount, tablePosition.getHeight());\n                    }\n                    clipboardTable.forEach((row: TableElement, i: number) => {\n                        row.children.forEach((col: Node, j: number) => {\n                            const at = [...tablePosition.tableEntry[1], selectRowIndex + i, selectColIndex + j];\n                            Transforms.removeNodes(editor, { at });\n                            Transforms.insertNodes(editor, col, { at });\n                        });\n                    });\n                });\n                const target = Editor.start(editor, [...tablePosition.tableEntry[1], selectRowIndex, selectColIndex]);\n                Transforms.select(editor, target);\n                return true;\n            }\n\n            // when pasting data, the last one is a table, and the focus position is specially handled\n            // * this is to focus after withTrailingNode.normalizeNode() to avoid incorrect focus element.\n            // * if there is a node below, the focus will be on the left side of the node below.\n            // * if there is no node below, the focus will be on the right side of the current table.\n            const lastInsertNode = fragment[fragment.length - 1];\n            const isTable = (lastInsertNode as Element).type === ElementKinds.table;\n            if (isTable) {\n                setTimeout(() => {\n                    Editor.withoutNormalizing(editor, () => {\n                        const [, currentPath] = TheQueries.findNode(editor, {\n                            match: n => Element.isElement(n) && n.type === ElementKinds.table\n                        });\n                        const nextPath = Path.next(currentPath);\n                        const hasNextNode = Node.has(editor, nextPath);\n                        const focusPath = hasNextNode ? nextPath : currentPath;\n                        const focusNode = Node.get(editor, focusPath);\n                        const isBlockCard = editor.isBlockCard(focusNode);\n                        const cursorPath = {\n                            path: focusPath,\n                            offset: isBlockCard ? (hasNextNode ? -1 : -2) : 0\n                        };\n                        Transforms.select(editor, cursorPath);\n                    });\n                });\n            }\n            return customInsertFragmentData(data, contextClipboardData);\n        }\n        return customInsertFragmentData(data, null);\n    };\n\n    editor.normalizeNode = ([node, path]: NodeEntry<Node>) => {\n        if (Element.isElement(node) && node.type === ElementKinds.table) {\n            const table = node as TableElement;\n            const maxWidth = Math.max(...table.children.map(row => row.children.length));\n            const invalidRows = table.children.filter(row => row.children.length < maxWidth);\n            if (invalidRows.length > 0) {\n                const opts = new TableOptions();\n                Editor.withoutNormalizing(editor, () => {\n                    table.children.map((row, rowIndex) => {\n                        row.children.map((cell, cellIndex) => {\n                            if (cell.hidden || cell.colspan || cell.rowspan) {\n                                Transforms.setNodes(\n                                    editor,\n                                    { hidden: null, colspan: null, rowspan: null },\n                                    { at: [...path, rowIndex, cellIndex] }\n                                );\n                            }\n                        });\n                    });\n                    invalidRows.forEach(row => {\n                        const count = maxWidth - row.children.length;\n                        insertColumnAtRow(\n                            opts,\n                            editor,\n                            count,\n                            [node, path] as NodeEntry<TableElement>,\n                            table.children.indexOf(row),\n                            row.children.length\n                        );\n                    });\n                });\n            }\n            if (table.columns && table.columns.length !== maxWidth) {\n                const columns = table.columns.length > maxWidth ? removeColumns(table, maxWidth) : addColumns(table, maxWidth);\n                Transforms.setNodes(editor, { columns }, { at: path });\n            }\n        }\n\n        // noramlize illegal cell and row to be paragraph\n        if (Element.isElement(node) && [ElementKinds.tableCell, ElementKinds.tableRow].includes(node.type)) {\n            if (!isLegalTable(editor, node as TableRowElement | TableCellElement, path)) {\n                try {\n                    const rootPath = [path[0]];\n                    const offset = editor.selection.focus.offset;\n                    // find all tableCell and tableRow\n                    const nodes = Editor.nodes(editor, {\n                        at: rootPath,\n                        mode: 'lowest',\n                        match: (node: CustomElement) => {\n                            return node.type === ElementKinds.tableCell;\n                        }\n                    });\n                    let cursorPath = path[0];\n                    if (nodes) {\n                        let index = 0;\n                        // noramlize to be paragraph\n                        for (const [targetNode, targetPath] of nodes) {\n                            index++;\n                            const paragraph = createEmptyParagraph();\n                            const text = Node.string(targetNode);\n                            (paragraph.children[0] as Text).text = text;\n                            if ((targetNode as CustomElement).key === node.key) {\n                                cursorPath = rootPath[0] + index;\n                            }\n                            Transforms.insertNodes(editor, paragraph, { at: [rootPath[0] + index] });\n                        }\n                    }\n                    const cursor = { path: [cursorPath, 0], offset: offset };\n                    Transforms.select(editor, { anchor: cursor, focus: cursor });\n                    // remove root node\n                    Transforms.removeNodes(editor, {\n                        at: rootPath\n                    });\n                } catch (error) {}\n                return;\n            }\n        }\n\n        // adjust selection when selection is in hidden cell\n        if (Element.isElement(node) && node.type === ElementKinds.tableCell) {\n            if (\n                editor.selection &&\n                Range.isCollapsed(editor.selection) &&\n                Path.isAncestor(path, editor.selection.anchor.path) &&\n                node.hidden\n            ) {\n                setTimeout(() => {\n                    const opts = new TableOptions();\n                    const tablePosition = createTablePosition(editor);\n                    const origin = getOriginCell(tablePosition.table, tablePosition.getRowIndex(), tablePosition.getColumnIndex());\n                    if (origin) {\n                        const path = AngularEditor.findPath(editor, origin);\n                        Transforms.select(editor, Editor.end(editor, path));\n                    }\n                }, 0);\n                return;\n            }\n        }\n\n        normalizeNode([node, path]);\n    };\n\n    editor.isBlockCard = (element: Element) => {\n        if (element && element.type === ElementKinds.table) {\n            return true;\n        }\n        return isBlockCard(element);\n    };\n\n    editor.renderElement = (element: Element) => {\n        if (element.type === ElementKinds.table) {\n            return TheTable;\n        }\n        if (element.type === ElementKinds.tableRow && isInTable(editor, element)) {\n            return TableRowFlavour;\n        }\n        if (element.type === ElementKinds.tableCell && isInTableRow(editor, element)) {\n            return TableTdFlavour;\n        }\n        return renderElement(element);\n    };\n\n    editor.deleteCutData = () => {\n        const opts = new TableOptions();\n        if (!isSelectionInTable(opts, editor)) {\n            deleteCutData();\n            return;\n        }\n        const element = createTablePosition(editor);\n        const tableComponent = ELEMENT_TO_COMPONENT.get(element.table) as TheTable;\n        const selectedCellPositions = tableComponent.tableStore.getSelectedCellPositions();\n        if (selectedCellPositions.length > 0) {\n            Editor.withoutNormalizing(editor, () => {\n                if (tableComponent.tableStore.isSelectedTable) {\n                    if (tableComponent.tableStore.isFullscreen) {\n                        return;\n                    }\n                    TableEditor.removeTable(editor);\n                } else {\n                    TableEditor.clearCellsContent(editor);\n                }\n                tableComponent.tableService.closeToolbar();\n            });\n            return;\n        }\n        deleteCutData();\n    };\n\n    editor.isContainer = (element: Element) => {\n        return element.type === ElementKinds.tableCell ? true : isContainer(element);\n    };\n\n    editor.onChange = () => {\n        onChange();\n        // adujst selection when selection is in hidden cell\n        // just hook set_selection\n        try {\n            const isCollapsed = editor.selection && Range.isCollapsed(editor.selection);\n            const isSelectionOperation = editor.operations.every(op => Operation.isSelectionOperation(op));\n            if (isCollapsed && isSelectionOperation) {\n                const opts = new TableOptions();\n                const tablePosition = createTablePosition(editor);\n                if (tablePosition.isInTable() && tablePosition.cell.hidden) {\n                    TableEditor.selectOriginCell(\n                        editor,\n                        tablePosition.table,\n                        tablePosition.getRowIndex(),\n                        tablePosition.getColumnIndex(),\n                        false\n                    );\n                }\n            }\n        } catch (error) {}\n    };\n\n    editor.getRoughHeight = (element: Element, defaultHeight?: number) => {\n        if (Element.isElement(element) && element.type === ElementKinds.table) {\n            const defaultRowHeight = 41;\n            return element.children.length * defaultRowHeight + ROOT_ELEMENT_MARGIN_BOTTOM;\n        }\n        return getRoughHeight(element, defaultHeight);\n    };\n\n    return editor;\n};\n\nexport const createTablePlugin = (locale: Signal<TheI18nTranslation>) =>\n    createPluginFactory<ThePluginTableOption>({\n        key: PluginKeys.table,\n        withOverrides: withTable,\n        nestedStructureByKey: {\n            [ElementKinds.table]: ElementKinds.tableRow,\n            [ElementKinds.tableRow]: ElementKinds.tableCell\n        },\n        toolbarItems: [\n            {\n                key: ElementKinds.table,\n                icon: 'table-border-all',\n                name: locale().table,\n                type: ToolbarItemType.default,\n                iconComponent: TheTableToolbarItem,\n                width: 48,\n                execute: editor => TableEditor.insertTable(editor),\n                active: editor => TableEditor.isActive(editor)\n            }\n        ],\n        menuItems: [\n            {\n                key: ElementKinds.table,\n                keywords: `biaoge,bg,table,${locale().table}`,\n                execute: editor => TableEditor.insertTable(editor),\n                active: editor => TableEditor.isActive(editor),\n                name: locale().table,\n                type: ThePluginMenuItemType.group,\n                menuIcon: PluginMenuIcons.table,\n                description: locale().tableDesc,\n                displayKey: '/bg'\n            }\n        ],\n        options: {\n            showFullscreen: false,\n            freezeColumnHeader: false,\n            freezeRowHeader: false,\n            setFullscreen: (editor: Editor, event: MouseEvent, element: Element) => {\n                event.preventDefault();\n            }\n        }\n    })();\n","import { Component, ElementRef, HostBinding, OnInit, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { Editor } from 'slate';\nimport { getPluginOptions } from '../../core/utils/get-plugin-options';\nimport { TodoItemElement } from '../../custom-types';\nimport { PluginKeys, TheBaseElement } from '../../interfaces';\nimport * as TheTransforms from '../../transforms';\nimport { TodoItemPluginOptions } from './todo-item.plugin';\n\n@Component({\n    selector: 'div[theTodoItem]',\n    template: `\n        <span contenteditable=\"false\" class=\"todo-item-status\">\n            <input #checkbox type=\"checkbox\" [checked]=\"element.checked\" (click)=\"onCheck(checkbox.checked)\" />\n        </span>\n        <span #childrenOutlet></span>\n    `,\n    changeDetection: ChangeDetectionStrategy.Eager,\n    standalone: true\n})\nexport class TheTodoItem extends TheBaseElement<TodoItemElement, Editor> implements OnInit {\n    checked: boolean;\n\n    @HostBinding('class.the-check-item') checkItemClass = true;\n\n    @HostBinding('class.the-todo-item-selectable') get checkItemSelectable() {\n        return this.editableWithReadonly && this.readonly;\n    }\n\n    @HostBinding('attr.the-level')\n    get level() {\n        return this.element?.indent || null;\n    }\n\n    get editableWithReadonly() {\n        return getPluginOptions<TodoItemPluginOptions>(this.editor, PluginKeys.checkItem)?.editableWithReadonly;\n    }\n\n    @ViewChild('childrenOutlet', { read: ElementRef, static: true })\n    childrenOutlet: ElementRef;\n\n    getOutletParent = () => {\n        return this.childrenOutlet.nativeElement;\n    };\n\n    ngOnInit() {\n        super.ngOnInit();\n    }\n\n    onCheck(checked: boolean) {\n        if (this.readonly && !this.editableWithReadonly) {\n            return false;\n        }\n        TheTransforms.setNode(this.editor, { checked }, this.element);\n    }\n}\n","import { Descendant, Editor, Element, Range, Transforms } from 'slate';\nimport { ElementKinds, PluginMenuIcons, ThePluginMenuItemType } from '../../constants';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { TheTodoItem } from './todo-item.component';\nimport { TodoItemEditor } from './todo-item.editor';\nimport { Signal } from '@angular/core';\nimport { TheI18nTranslation } from '../../i18n';\n\nexport interface TodoItemPluginOptions {\n    editableWithReadonly?: boolean;\n}\n\nexport const withTodoItem = <T extends Editor>(editor: T): T => {\n    const { insertBreak, deleteBackward, renderElement } = editor;\n\n    editor.insertBreak = () => {\n        const { selection } = editor;\n\n        if (selection && Range.isCollapsed(selection)) {\n            const [match] = Editor.nodes(editor, {\n                match: n => Element.isElement(n) && n.type === ElementKinds.checkItem\n            });\n\n            if (match) {\n                const [, path] = match;\n                const block = TheQueries.anchorBlock(editor);\n\n                if (block && Editor.isStart(editor, selection.anchor, path) && Editor.isEmpty(editor, block)) {\n                    Transforms.setNodes(\n                        editor,\n                        {\n                            type: ElementKinds.default,\n                            checked: undefined\n                        } as Partial<Descendant>,\n                        {\n                            match: n => Element.isElement(n) && n.type === ElementKinds.checkItem\n                        }\n                    );\n                    return;\n                }\n            }\n        }\n        insertBreak();\n\n        const anchorBlock = TheQueries.anchorBlock(editor);\n        if (anchorBlock && anchorBlock.type === ElementKinds.checkItem) {\n            Transforms.setNodes(editor, { checked: false });\n        }\n    };\n\n    editor.deleteBackward = unit => {\n        const { selection } = editor;\n        if (selection && Range.isCollapsed(selection)) {\n            const [match] = Editor.nodes(editor, {\n                match: n => Element.isElement(n) && n.type === ElementKinds.checkItem\n            });\n\n            if (match) {\n                const [, path] = match;\n\n                if (Editor.isStart(editor, selection.anchor, path)) {\n                    Transforms.setNodes(editor, { type: ElementKinds.default, checked: undefined } as Partial<Descendant>, {\n                        match: n => Element.isElement(n) && n.type === ElementKinds.checkItem\n                    });\n                    return;\n                }\n            }\n        }\n        deleteBackward(unit);\n    };\n\n    editor.renderElement = (element: Element) => {\n        if (element.type === ElementKinds.checkItem) {\n            return TheTodoItem;\n        }\n        return renderElement(element);\n    };\n\n    return editor;\n};\n\nexport const createTodoItemPlugin = (locale: Signal<TheI18nTranslation>) =>\n    createPluginFactory<TodoItemPluginOptions>({\n        key: PluginKeys.checkItem,\n        withOverrides: withTodoItem,\n        toolbarItems: [\n            {\n                key: ElementKinds.checkItem,\n                icon: 'list-check',\n                name: locale().checkItem,\n                execute: editor => TodoItemEditor.insertTodoItem(editor),\n                active: editor => TodoItemEditor.isActive(editor)\n            }\n        ],\n        menuItems: [\n            {\n                key: ElementKinds.checkItem,\n                keywords: `dbsx,daibanshixiang,to do list,todolist,${locale().checkItem}`,\n                description: locale().checkItemDesc,\n                execute: editor => TodoItemEditor.insertTodoItem(editor),\n                active: editor => TodoItemEditor.isActive(editor),\n                type: ThePluginMenuItemType.icon,\n                name: locale().checkItem,\n                displayKey: '/dbsx',\n                icon: 'list-check',\n                menuIcon: PluginMenuIcons.checkItem\n            }\n        ],\n        options: {\n            allowParentTypes: [ElementKinds.tableCell, ElementKinds.blockquote],\n            editableWithReadonly: false\n        }\n    })();\n","import { Signal } from '@angular/core';\nimport * as Types from '../types';\nimport { createAlignPlugin } from './align/align.plugin';\nimport { createAutoFormatPlugin } from './autoformat/autoformat.plugin';\nimport { createBlockquotePlugin } from './blockquote/blockquote.plugin';\nimport { createCodePlugin } from './code/code.plugin';\nimport { createColorPlugin } from './color/color.plugin';\nimport { createBlockCardPlugin } from './common/block-card.plugin';\nimport { createCommonPlugin } from './common/common.plugin';\nimport { createGetFragmentPlugin } from './common/get-fragment.plugin';\nimport { createTheHistoryPlugin } from './common/history.plugin';\nimport { createInsertDataByInvalidTypePlugin } from './common/insert-data-by-invalid-type';\nimport { createMoveSelectionPlugin } from './common/move-selection.plugin';\nimport { createRemoveEmptyPlugin } from './common/remove-empty.plugin';\nimport { createRemoveVoidPlugin } from './common/remove-void.plugin';\nimport { createResetTypePlugin } from './common/reset-type.plugin';\nimport { createDeserializeHTMLPlugin } from './deserialize/deserialize-html.plugin';\nimport { createDeserializeMdPlugin } from './deserialize/deserialize-md.plugin';\nimport { createFontSizePlugin } from './font-size/font-size.editor';\nimport { createHeadingPlugin } from './heading/heading.plugin';\nimport { createHrPlugin } from './hr/hr.plugin';\nimport { createImagePlugin } from './image/image.plugin';\nimport { createIndentPlugin } from './indent/indent.plugin';\nimport { createInlineCodePlugin } from './inline-code/inline-code.plugin';\nimport { createLinkPlugin } from './link/link.plugin';\nimport { createListPlugin } from './list/list.plugin';\nimport { createMarkPlugin } from './mark/mark.plugin';\nimport { createMentionPlugin } from './mention/mention.plugin';\nimport { createNodeIDPlugin } from './node-id/node-id.plugin';\nimport { createInsertParagraphNodesPlugin } from './normalizers/insert-paragraph-nodes';\nimport { createTrailingNodePlugin } from './normalizers/trailing-node.plugin';\nimport { createPaintFormatPlugin } from './paint-format/paint-format.editor';\nimport { createQuickInsertPlugin } from './quick-insert/quick-insert.plugin';\nimport { createSoftBreakPlugin } from './soft-break/soft-break.plugin';\nimport { createTablePlugin } from './table/table.plugin';\nimport { createTodoItemPlugin } from './todo-item/todo-item.plugin';\nimport { createVerticalAlignPlugin } from './vertical-align/vertical-align.editor';\nimport { TheI18nTranslation } from '../i18n';\n\nexport const internalPlugins = (locale: Signal<TheI18nTranslation>) => [\n    createTheHistoryPlugin(),\n    createCommonPlugin(locale),\n    createInsertDataByInvalidTypePlugin(),\n    createRemoveEmptyPlugin(),\n    createRemoveVoidPlugin(),\n    createBlockCardPlugin(), // should in the front of list、resettype、todo、deserialize-html\n    createResetTypePlugin(),\n    createIndentPlugin(locale), // should in the front of list\n    createListPlugin(locale),\n    createLinkPlugin(locale),\n    createTablePlugin(locale),\n    createTodoItemPlugin(locale),\n    createHrPlugin(locale),\n    createAlignPlugin(locale),\n    createCodePlugin(locale),\n    createHeadingPlugin(locale),\n    createVerticalAlignPlugin(locale),\n    createMarkPlugin(locale),\n    createFontSizePlugin(locale),\n    createColorPlugin(locale),\n    createSoftBreakPlugin(),\n    createBlockquotePlugin(locale),\n    createNodeIDPlugin(),\n    createAutoFormatPlugin(),\n    createPaintFormatPlugin(locale),\n    createTrailingNodePlugin(),\n    createMoveSelectionPlugin(),\n    createInsertParagraphNodesPlugin(),\n    createGetFragmentPlugin(),\n    createImagePlugin(locale), //  must be before withDeserializeHTML\n    createDeserializeHTMLPlugin(),\n    createDeserializeMdPlugin(),\n    createQuickInsertPlugin(), // must be before plugins that include onkeydown events\n    createInlineCodePlugin(locale),\n    createMentionPlugin()\n];\n","import { isKeyHotkey } from 'is-hotkey';\nimport { Editor } from 'slate';\nimport { InlineCodeEditor } from '../plugins/inline-code/inline-code.editor';\nimport { ElementKinds, MarkTypes } from '../constants/node-types';\nimport { MarkEditor } from '../plugins/mark/mark.editor';\n\nconst HOTKEYS = {\n    'mod+b': MarkTypes.bold,\n    'mod+i': MarkTypes.italic,\n    'mod+u': MarkTypes.underline,\n    'mod+e': ElementKinds.inlineCode\n};\nexport const markShortcuts = (editor: Editor, event: KeyboardEvent) => {\n    for (const hotkey in HOTKEYS) {\n        if (isKeyHotkey(hotkey, event)) {\n            event.preventDefault();\n            const mark = HOTKEYS[hotkey];\n            if (mark === ElementKinds.inlineCode) {\n                InlineCodeEditor.toggleInlineCode(editor);\n            } else {\n                MarkEditor.toggleMark(editor, mark);\n            }\n        }\n    }\n};\n","import { Editor } from 'slate';\nimport { markShortcuts } from './mark';\n\nexport const shortcuts = (editor: Editor, event: KeyboardEvent) => {\n    markShortcuts(editor, event);\n};\n","import { TheBaseFlavourElement } from '../../interfaces/base-element.flavour';\nimport { ParagraphElement } from '../../custom-types';\nimport { Editor } from 'slate';\n\nexport class ParagraphFlavour<T extends ParagraphElement = ParagraphElement, K extends Editor = Editor> extends TheBaseFlavourElement<\n    T,\n    K\n> {\n    render() {\n        super.render();\n        this.toggleIndent();\n    }\n\n    rerender() {\n        super.rerender();\n        this.toggleIndent();\n    }\n\n    createNativeElement(): HTMLElement {\n        return document.createElement('div');\n    }\n}\n","import { TheBaseFlavourElement } from '../../interfaces/base-element.flavour';\nimport { HeadingElement } from '../../custom-types';\nimport { Editor } from 'slate';\nimport { SlateElementContext } from 'slate-angular';\nimport { getFollowElements, isStandardHeadingElement } from './utils';\nimport { toggleHeadingRelatedElement } from '../../utils/dom';\n\nclass HeadingFlavour<T extends HeadingElement = HeadingElement, K extends Editor = Editor> extends TheBaseFlavourElement<T, K> {\n    beforeContextChange = (value: SlateElementContext<T>) => {\n        if (this.editor && this.editor.options.enableVirtualScroll) {\n            return;\n        }\n        const isHeading = isStandardHeadingElement(value.element);\n        if (isHeading && this.element && value.element !== this.element) {\n            if ((value.element as HeadingElement).isCollapsed !== (this.element as HeadingElement).isCollapsed) {\n                const followElements = getFollowElements(this.editor, value.element as HeadingElement);\n                // 一旦内容发生变化会出现 targetDom get undefined 的情况，所以等一个 setTimeout 周期\n                setTimeout(() => {\n                    followElements.forEach(el => {\n                        const isVisible = this.editor.isVisible(el);\n                        toggleHeadingRelatedElement(this.editor, el, isVisible);\n                    });\n                }, 0);\n            }\n        }\n    };\n\n    render() {\n        super.render();\n        this.nativeElement.setAttribute('id', this.element.key || '');\n    }\n\n    onInit(): void {\n        super.onInit();\n        if (\n            !this.editor?.options?.enableVirtualScroll &&\n            this.element &&\n            isStandardHeadingElement(this.element) &&\n            this.element.isCollapsed\n        ) {\n            const followElements = getFollowElements(this.editor, this.element);\n            // 处理删除后撤销场景\n            followElements.forEach(el => {\n                toggleHeadingRelatedElement(this.editor, el, false);\n            });\n        }\n    }\n\n    createNativeElement(): HTMLElement {\n        const type = this.element.type;\n        switch (type) {\n            case 'heading-one':\n                return this.createHeadingElement(1);\n            case 'heading-two':\n                return this.createHeadingElement(2);\n            case 'heading-three':\n                return this.createHeadingElement(3);\n            case 'heading-four':\n                return this.createHeadingElement(4);\n            case 'heading-five':\n                return this.createHeadingElement(5);\n            case 'heading-six':\n                return this.createHeadingElement(6);\n        }\n        return document.createElement('div');\n    }\n\n    private createHeadingElement(level: number): HTMLElement {\n        return document.createElement(`h${level}`);\n    }\n}\n\nexport class HeadingOneFlavour extends HeadingFlavour {}\n\nexport class HeadingTwoFlavour extends HeadingFlavour {}\n\nexport class HeadingThreeFlavour extends HeadingFlavour {}\n\nexport class HeadingFourFlavour extends HeadingFlavour {}\n\nexport class HeadingFiveFlavour extends HeadingFlavour {}\n\nexport class HeadingSixFlavour extends HeadingFlavour {}\n\nexport const getHeadingFlavour = (element: HeadingElement) => {\n    const type = element.type;\n    switch (type) {\n        case 'heading-one':\n            return HeadingOneFlavour;\n        case 'heading-two':\n            return HeadingTwoFlavour;\n        case 'heading-three':\n            return HeadingThreeFlavour;\n        case 'heading-four':\n            return HeadingFourFlavour;\n        case 'heading-five':\n            return HeadingFiveFlavour;\n        case 'heading-six':\n            return HeadingSixFlavour;\n    }\n    return HeadingFlavour;\n};\n","import { DefaultTextFlavour } from 'slate-angular';\nimport { MarkTypes } from '../../constants/node-types';\n\nexport class TextFlavour extends DefaultTextFlavour {\n    excludes = ['color', 'font-size', 'background-color', 'text'];\n\n    attributes = [];\n\n    render() {\n        super.render();\n        this.applyRichtext();\n    }\n\n    applyRichtext() {\n        this.attributes.forEach(attr => {\n            this.nativeElement.removeAttribute(attr);\n        });\n        this.attributes = [];\n        for (const key in this.text) {\n            if (Object.prototype.hasOwnProperty.call(this.text, key) && !this.excludes.includes(key) && !!this.text[key]) {\n                const attr = `the-${key}`;\n                this.nativeElement.setAttribute(attr, 'true');\n                this.attributes.push(attr);\n            }\n        }\n        const fontSize = this.text[MarkTypes.fontSize];\n        this.nativeElement.setAttribute(`the-${MarkTypes.fontSize}`, fontSize ? fontSize : null);\n        if (this.text[MarkTypes.color]) {\n            this.nativeElement.style.color = this.text[MarkTypes.color];\n        } else {\n            this.nativeElement.style.color = '';\n        }\n\n        if (this.text[MarkTypes.backgroundColor]) {\n            this.nativeElement.style.backgroundColor = this.text[MarkTypes.backgroundColor];\n        } else {\n            this.nativeElement.style.backgroundColor = '';\n        }\n    }\n\n    onContextChange() {\n        super.onContextChange();\n        if (this.initialized) {\n            this.applyRichtext();\n        }\n    }\n}\n","import { NgClass, NgStyle } from '@angular/common';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    DestroyRef,\n    ElementRef,\n    EventEmitter,\n    Inject,\n    Injector,\n    Input,\n    NgZone,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Optional,\n    Output,\n    Signal,\n    SimpleChanges,\n    ViewChild,\n    ViewContainerRef,\n    forwardRef,\n    inject,\n    signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { ThyIconRegistry } from 'ngx-tethys/icon';\nimport { ThyImageGroup } from 'ngx-tethys/image';\nimport { fromEvent } from 'rxjs';\nimport { Descendant, Editor, Element, Node, NodeEntry, Path, Range, Text, Transforms, createEditor } from 'slate';\nimport {\n    AngularEditor,\n    SLATE_DEBUG_KEY,\n    SlateError,\n    SlateModule,\n    SlateVirtualScrollConfig,\n    defaultScrollSelectionIntoView,\n    getDataTransferClipboard,\n    withAngular\n} from 'slate-angular';\nimport { DOMRange } from 'slate-dom';\nimport { withHistory } from 'slate-history';\nimport { TheInlineToolbar, TheToolbarGroup, TheToolbarComponent } from './components';\nimport {\n    CLIPBOARD_FORMAT_KEY,\n    DefaultGlobalToolbarDefinition,\n    DefaultInlineToolbarDefinition,\n    getTheDefaultPluginMenu,\n    MarkTypes,\n    TheToolbarGroupToken,\n    initializeDefaultMenuIcons\n} from './constants';\nimport { createToolbar, getPluginOptions, withTheia } from './core';\nimport {\n    PluginKeys,\n    THE_MODE_TOKEN,\n    THE_PRESET_CONFIG_TOKEN,\n    TheDataMode,\n    TheEditor,\n    TheMode,\n    TheOptions,\n    ThePresetConfig,\n    ThePlugin,\n    ToolbarEntity,\n    DomEventDataInfo\n} from './interfaces';\nimport { internalPlugins } from './plugins';\nimport { TheQuickInsert, QuickInsertPluginOptions } from './plugins/quick-insert';\nimport * as TheQueries from './queries';\nimport { TheContextService } from './services/context.service';\nimport { shortcuts } from './shortcuts';\nimport * as TheTransforms from './transforms';\nimport {\n    THE_EDITOR_PREVIOUS_SELECTION,\n    autoFocus,\n    dataDeserialize,\n    dataSerializing,\n    idCreator,\n    setEditorUUID,\n    isEqual,\n    normalizeValue\n} from './utils';\nimport { injectTranslations, TheI18nService, TheI18nTranslation } from './i18n';\nimport { ParagraphFlavour } from './plugins/paragraph/paragraph.flavour';\nimport { getHeadingFlavour } from './plugins/heading/heading.flavour';\nimport { isHeadingElement } from './plugins/heading/utils';\nimport { TextFlavour } from './components/text/text.flavour';\n\n@Component({\n    selector: 'the-editor, theEditor',\n    templateUrl: 'editor.component.html',\n    host: { class: 'the-editor', '[class.the-editor-readonly]': 'editor.options?.readonly', '[class.the-mobile-editor]': 'isMobileMode' },\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [NgStyle, NgClass, FormsModule, SlateModule, TheQuickInsert, TheInlineToolbar, TheToolbarComponent, ThyImageGroup],\n    providers: [\n        TheContextService,\n        { provide: TheToolbarGroupToken, useValue: TheToolbarGroup },\n        { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TheEditorComponent), multi: true }\n    ]\n})\nexport class TheEditorComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n    @Input() theOptions: TheOptions;\n\n    @Input() thePlugins: ThePlugin[] = [];\n\n    @Input() theGlobalToolbar?: TheToolbarComponent;\n\n    @Input() theDecorate: (editor: TheEditor, nodeEntry: NodeEntry) => Range[];\n\n    @Input() theOnError?: (error: SlateError) => void;\n\n    @Output() theOnSave: EventEmitter<Descendant[]> = new EventEmitter<Descendant[]>();\n\n    @Output() theOnDOMEvent: EventEmitter<{ nativeEvent: Event; data?: DomEventDataInfo }> = new EventEmitter();\n\n    @Output() theEditorCreated: EventEmitter<Editor> = new EventEmitter();\n\n    @Output() theUploadingStatus: EventEmitter<boolean> = new EventEmitter(); // true 上传结束 false 上传中\n\n    @ViewChild('theEditableContainer', { static: true, read: ElementRef })\n    theEditableContainer: ElementRef<HTMLElement>;\n\n    @ViewChild('globalToolbar')\n    globalToolbarInstance: TheToolbarComponent;\n\n    toolbarEntity: ToolbarEntity;\n\n    editor: TheEditor;\n\n    editorValue: Descendant[];\n\n    globalToolbarClass: string[];\n\n    isMobileMode: boolean;\n\n    visibleQuickInsertPlus = true;\n\n    elementToHtml: WeakMap<Element, string> = new WeakMap();\n\n    decorate: (nodeEntry: NodeEntry) => Range[];\n\n    get options() {\n        return this.editor?.options;\n    }\n\n    get theGlobalToolbarInstance(): TheToolbarComponent {\n        return this.theGlobalToolbar ? this.theGlobalToolbar : this.globalToolbarInstance;\n    }\n\n    get maxHeight() {\n        return this.options?.maxHeight ? `${this.options?.maxHeight}px` : null;\n    }\n\n    virtualScrollConfig = signal<SlateVirtualScrollConfig>({\n        enabled: false,\n        scrollTop: 0\n    });\n\n    private onChangeCallback: (_: any) => void = () => {};\n\n    private onTouchedCallback: () => void = () => {};\n\n    private locale: Signal<TheI18nTranslation> = injectTranslations(inject(TheI18nService));\n\n    constructor(\n        private cdr: ChangeDetectorRef,\n        private destroyRef: DestroyRef,\n        private elementRef: ElementRef,\n        private injector: Injector,\n        private ngZone: NgZone,\n        private viewContainerRef: ViewContainerRef,\n        private theContextService: TheContextService,\n        private iconRegistry: ThyIconRegistry,\n        @Optional() @Inject(THE_PRESET_CONFIG_TOKEN) private presetConfig: ThePresetConfig\n    ) {}\n\n    ngOnInit() {\n        this.initialize();\n        this.updateVirtualConfig();\n        this.onErrorHandler();\n        initializeDefaultMenuIcons(this.iconRegistry);\n    }\n\n    ngAfterViewInit() {\n        this.initializeVirtualScroll();\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        const options = changes.theOptions;\n\n        if (options && !options.firstChange) {\n            this.initializeOptions(options.currentValue);\n        }\n\n        if (options && !options.firstChange && !isEqual(options.currentValue?.toolbar, options.previousValue?.toolbar)) {\n            this.toolbarCalculate();\n        }\n        if (options && options.currentValue?.readonly !== options.previousValue?.readonly) {\n            this.applyAutoFocus();\n        }\n        if (changes['theDecorate']) {\n            this.generateDecorate();\n        }\n        if (this.editor?.selection && (options?.currentValue?.readonly || options?.currentValue?.disabled)) {\n            Transforms.deselect(this.editor);\n        }\n    }\n\n    ngOnDestroy() {\n        THE_EDITOR_PREVIOUS_SELECTION.delete(this.editor);\n    }\n\n    private initializeVirtualScroll() {\n        if (!this.virtualScrollConfig().enabled) {\n            return;\n        }\n        const scrollContainer = this.theContextService.getScrollContainer();\n        if (!scrollContainer) {\n            return;\n        }\n        fromEvent(scrollContainer, 'scroll')\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => {\n                this.updateVirtualConfig();\n            });\n    }\n\n    private scrollContainerBoundingTop: null | number = null;\n\n    private updateVirtualConfig() {\n        const scrollContainer = this.theContextService.getScrollContainer();\n        if (!this.virtualScrollConfig().enabled || !scrollContainer) {\n            return;\n        }\n        const { scrollTop } = scrollContainer;\n        if (localStorage.getItem(SLATE_DEBUG_KEY + '__SCROLL_TOP')) {\n            console.log(`theia: scroll event fired from user: ${scrollTop}`);\n        }\n        this.virtualScrollConfig.update(config => ({\n            ...config,\n            scrollTop,\n            scrollContainer\n        }));\n    }\n\n    private initialize() {\n        this.virtualScrollConfig.update(config => ({\n            ...config,\n            enabled: this.theOptions?.enableVirtualScroll\n        }));\n        const plugins = this.getPlugins();\n        this.editor = withTheia(withHistory(withAngular(createEditor(), CLIPBOARD_FORMAT_KEY)), plugins);\n        setEditorUUID(this.editor, idCreator());\n        this.initializeMobileMode();\n        this.initializeOptions(this.theOptions);\n        this.initializeContext();\n        this.toolbarCalculate();\n        this.initializeQuickInsert();\n        this.initializeEvents();\n        this.generateDecorate();\n        this.subscribeUploadingStatus();\n\n        setTimeout(() => {\n            // You need to wait for the editor rendering to complete\n            // before triggering the external toolbar assignment detection\n            this.initializeGlobalToolbar();\n            this.theEditorCreated.emit(this.editor);\n            this.applyAutoFocus();\n        });\n    }\n\n    private initializeOptions(theOptions: TheOptions) {\n        const presetMode = this.presetConfig?.options?.mode;\n        const presetAutoNormalize = this.presetConfig?.options?.autoNormalize;\n        const presetInlineToolbarVisible = this.presetConfig?.options?.inlineToolbarVisible;\n        const presetMenu = this.presetConfig?.options?.menu;\n        const presetToolbarAlign = this.presetConfig?.options?.toolbar?.align;\n        const presetGlobalToolbar = this.presetConfig?.options?.toolbar?.global;\n        const presetInlineToolbar = this.presetConfig?.options?.toolbar?.inline;\n        const optionsGlobalToolbar = theOptions?.toolbar?.global;\n        const optionsInlineToolbar = theOptions?.toolbar?.inline;\n\n        const options: TheOptions = {\n            readonly: false,\n            neededScrollIntoView: () => true,\n            ...theOptions,\n            autoNormalize: theOptions?.autoNormalize ?? presetAutoNormalize ?? false,\n            mode: theOptions?.mode ?? presetMode ?? TheDataMode.html,\n            inlineToolbarVisible: theOptions?.inlineToolbarVisible ?? presetInlineToolbarVisible,\n            menu: theOptions?.menu ?? presetMenu ?? getTheDefaultPluginMenu(this.locale),\n            toolbar: {\n                align: theOptions?.toolbar?.align ?? presetToolbarAlign,\n                global: optionsGlobalToolbar ?? presetGlobalToolbar ?? DefaultGlobalToolbarDefinition,\n                inline: optionsInlineToolbar ?? presetInlineToolbar ?? DefaultInlineToolbarDefinition\n            }\n        };\n\n        this.editor.options = options;\n        this.editor.disabled = theOptions?.disabled;\n        this.editor.extraElementOptions = options?.extraElementOptions;\n    }\n\n    private initializeContext() {\n        this.theContextService.initialize({\n            editor: this.editor,\n            nativeElement: this.elementRef.nativeElement,\n            viewContainerRef: this.viewContainerRef\n        });\n    }\n\n    private getPlugins() {\n        const defaultPlugins = internalPlugins(this.locale);\n        const presetPlugins = this.presetConfig?.plugins ?? [];\n        const applyPresetPlugins = presetPlugins.filter(presetPlugin => !this.thePlugins.some(plugin => presetPlugin.key === plugin.key));\n        return [...defaultPlugins, ...applyPresetPlugins, ...this.thePlugins];\n    }\n\n    private initializeMobileMode() {\n        const modeConfig = this.injector.get(THE_MODE_TOKEN);\n        this.isMobileMode = modeConfig && modeConfig.mode === TheMode.mobile;\n    }\n\n    private toolbarCalculate() {\n        const globalToolbar = this.options?.toolbar.global;\n        const inlineToolbar = this.options?.toolbar?.inline;\n        const { globalToolbarClass, toolbarEntity } = createToolbar(this.editor, globalToolbar, inlineToolbar);\n        this.globalToolbarClass = globalToolbarClass;\n        this.toolbarEntity = toolbarEntity;\n    }\n\n    private initializeGlobalToolbar() {\n        if (this.theGlobalToolbar) {\n            this.theGlobalToolbarInstance.editor = this.editor;\n            this.theGlobalToolbarInstance.toolbarItems = this.toolbarEntity.global;\n            this.theGlobalToolbarInstance.containerClass = this.globalToolbarClass;\n            this.theGlobalToolbarInstance.align = this.options?.toolbar?.align;\n            this.theGlobalToolbarInstance.setToolbarClass();\n            this.theGlobalToolbarInstance.renderToolbarView();\n        }\n    }\n\n    private initializeQuickInsert() {\n        const quickInsertPlugin = getPluginOptions<QuickInsertPluginOptions>(this.editor, PluginKeys.quickInsert);\n        if (quickInsertPlugin.disabled || quickInsertPlugin.disabledPlus) {\n            this.visibleQuickInsertPlus = false;\n        }\n    }\n\n    private initializeEvents() {\n        this.ngZone.runOutsideAngular(() => {\n            fromEvent<MouseEvent>(document, 'mousedown')\n                .pipe(takeUntilDestroyed(this.destroyRef))\n                .subscribe((event: MouseEvent) => {\n                    this.editor.globalMousedown(event);\n                });\n        });\n    }\n\n    private subscribeUploadingStatus() {\n        this.theContextService.uploadingStatus$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(isUploading => {\n            if (isUploading) {\n                this.theUploadingStatus.emit(true);\n            } else {\n                if (this.theContextService.uploadingFiles.length === 0) {\n                    this.theUploadingStatus.emit(false);\n                }\n            }\n        });\n    }\n\n    private applyAutoFocus() {\n        if (!this.options?.disabled && !this.options?.readonly) {\n            autoFocus(this.editor, this.options?.autoFocus);\n        }\n    }\n\n    private isFirstWriteValue = true;\n\n    writeValue(value: string | Descendant[]) {\n        if (this.isFirstWriteValue) {\n            this.isFirstWriteValue = false;\n            return;\n        }\n        const data = dataDeserialize(this.editor.options?.mode, value);\n        // data-deserialize\n        this.editorValue = data;\n        this.cdr.markForCheck();\n        if (!this.options.readonly) {\n            setTimeout(() => {\n                if (AngularEditor.isFocused(this.editor) && this.editor.selection) {\n                    const selection = this.editor.selection;\n                    Transforms.deselect(this.editor);\n                    Transforms.select(this.editor, selection);\n                }\n            });\n            if (this.options.autoNormalize) {\n                normalizeValue(this.editor, data);\n            }\n        }\n    }\n\n    registerOnChange(fn: any) {\n        this.onChangeCallback = fn;\n    }\n\n    registerOnTouched(fn: any) {\n        this.onTouchedCallback = fn;\n    }\n\n    scrollSelectionIntoView = (e: TheEditor, domRange: DOMRange) => {\n        const { neededScrollIntoView } = e.options;\n        if (neededScrollIntoView && !neededScrollIntoView(this.editor)) {\n            return;\n        }\n        defaultScrollSelectionIntoView(e, domRange);\n    };\n\n    valueChange(value: Descendant[]) {\n        this.theGlobalToolbarInstance?.selectionChange(this.editor);\n\n        if (this.editorValue === value) {\n            return;\n        }\n        this.editorValue = value;\n\n        // serializing\n        let newValue = this.serializingValue(value);\n        this.onChangeCallback(newValue);\n    }\n\n    private serializingValue(value: Descendant[]): string | Descendant[] {\n        const mode = this.options?.mode;\n        if (mode === TheDataMode.html) {\n            let htmlValue = '';\n            const isEmptyContent = TheQueries.isEmptyContent(value);\n            value.forEach((element: Element) => {\n                let elementHtml = this.elementToHtml.get(element);\n                if (elementHtml === undefined) {\n                    // serializing\n                    elementHtml = dataSerializing(mode, [element]) as string;\n                    htmlValue += elementHtml;\n                    this.elementToHtml.set(element, elementHtml);\n                    return;\n                }\n                htmlValue += elementHtml;\n            });\n            return isEmptyContent ? '' : htmlValue;\n        }\n        return value;\n    }\n\n    private onErrorHandler() {\n        this.editor.onError = (errorData: SlateError) => {\n            if (this.theOnError) {\n                this.theOnError(errorData);\n                return;\n            }\n            if (errorData.nativeError) {\n                console.error(errorData.nativeError);\n            }\n        };\n    }\n\n    renderElement = (element: Element) => {\n        const component = this.editor.renderElement(element);\n        if (component) {\n            return component;\n        }\n        if (element.type === 'paragraph') {\n            return ParagraphFlavour;\n        }\n        if (isHeadingElement(element)) {\n            return getHeadingFlavour(element);\n        }\n        return null;\n    };\n\n    renderLeaf = (text: Text) => {\n        const leaf = this.editor.renderLeaf(text);\n        return leaf;\n    };\n\n    renderText = (text: Text) => {\n        for (const key in MarkTypes) {\n            if (text[MarkTypes[key]]) {\n                return TextFlavour;\n            }\n        }\n        if (text.text.length === 0) {\n            return;\n        }\n    };\n\n    private generateDecorate() {\n        this.decorate = (nodeEntry: NodeEntry) => {\n            const decorations = [];\n\n            if (this.theDecorate) {\n                decorations.push(...this.theDecorate(this.editor, nodeEntry));\n            }\n\n            return decorations;\n        };\n    }\n\n    onKeyDown = (event: KeyboardEvent) => {\n        shortcuts(this.editor, event);\n        this.theOnDOMEvent.emit({ nativeEvent: event, data: { key: event.key } });\n\n        AngularEditor.onKeydown(this.editor, event);\n\n        if (isKeyHotkey('mod+s', event) && !event.defaultPrevented) {\n            this.ngZone.run(() => {\n                this.theOnSave.emit(this.editorValue);\n            });\n            event.preventDefault();\n            return;\n        }\n    };\n\n    mousedown(event: MouseEvent) {\n        this.editor.mousedown(event);\n    }\n\n    onClick = (event: MouseEvent) => {\n        AngularEditor.onClick(this.editor, event);\n        this.theOnDOMEvent.emit({ nativeEvent: event });\n    };\n\n    onSlaPaste = (event: ClipboardEvent) => {\n        const clipboardData = getDataTransferClipboard(event.clipboardData);\n        this.theOnDOMEvent.emit({ data: clipboardData, nativeEvent: event });\n    };\n\n    onSlaBeforeInput = async (event: Event & { inputType: string; data: string | null; dataTransfer: DataTransfer | null }) => {\n        let data = { inputType: event.inputType, text: (event.data || event.dataTransfer) as string };\n        if (event.inputType === 'insertFromPaste') {\n            const clipboardData = getDataTransferClipboard(event.dataTransfer);\n            data = { ...data, ...clipboardData };\n        }\n        this.theOnDOMEvent.emit({ data, nativeEvent: event });\n    };\n\n    onSlaBlur = (event: FocusEvent) => {\n        this.theOnDOMEvent.emit({ nativeEvent: event });\n    };\n\n    onSlaFocus = (event: Event) => {\n        this.theOnDOMEvent.emit({ nativeEvent: event });\n    };\n\n    onSlaCut = (event: ClipboardEvent) => {\n        this.theOnDOMEvent.emit({ nativeEvent: event });\n    };\n\n    onSlaCopy = (event: ClipboardEvent) => {};\n\n    onSlaCompositionStart = (event: CompositionEvent) => {};\n\n    onSlaCompositionEnd = (event: CompositionEvent) => {};\n\n    onSlaDragStart = (event: DragEvent) => {};\n\n    onSlaDragOver = (event: DragEvent) => {};\n\n    onDrop = (event: DragEvent) => {\n        this.theOnDOMEvent.emit({ nativeEvent: event });\n    };\n}\n","@if (!options?.readonly && !theGlobalToolbar && !isMobileMode) {\n  <the-toolbar\n    [ngClass]=\"{\n      'the-toolbar-disabled': $safeNavigationMigration(options?.disabled)\n    }\"\n    #globalToolbar\n    [editor]=\"editor\"\n    [toolbarItems]=\"toolbarEntity.global\"\n    [containerClass]=\"globalToolbarClass\"\n    [align]=\"$safeNavigationMigration(options?.toolbar?.align)\"\n  ></the-toolbar>\n}\n\n<div\n  #theEditableContainer\n  class=\"the-editable-container\"\n  thyImageGroup\n  [ngClass]=\"{\n    'the-editor-disabled': $safeNavigationMigration(options?.disabled),\n    'max-height': maxHeight\n  }\"\n  [ngStyle]=\"{ 'max-height': maxHeight }\"\n>\n  <slate-editable\n    class=\"the-editor-typo\"\n    [editor]=\"editor\"\n    [ngModel]=\"editorValue\"\n    [renderElement]=\"renderElement\"\n    [renderText]=\"renderText\"\n    [renderLeaf]=\"renderLeaf\"\n    [isStrictDecorate]=\"false\"\n    [decorate]=\"decorate\"\n    [placeholder]=\"$safeNavigationMigration(options?.placeholder)\"\n    [placeholderDecorate]=\"options?.placeholderDecorate ? $safeNavigationMigration(options?.placeholderDecorate) : null\"\n    [readonly]=\"options?.readonly || options?.disabled\"\n    [keydown]=\"onKeyDown\"\n    [click]=\"onClick\"\n    [paste]=\"onSlaPaste\"\n    [blur]=\"onSlaBlur\"\n    [focus]=\"onSlaFocus\"\n    [copy]=\"onSlaCopy\"\n    [cut]=\"onSlaCut\"\n    [beforeInput]=\"onSlaBeforeInput\"\n    [compositionStart]=\"onSlaCompositionStart\"\n    [compositionEnd]=\"onSlaCompositionEnd\"\n    [dragStart]=\"onSlaDragStart\"\n    [dragOver]=\"onSlaDragOver\"\n    [drop]=\"onDrop\"\n    [scrollSelectionIntoView]=\"scrollSelectionIntoView\"\n    [virtualScroll]=\"virtualScrollConfig()\"\n    (ngModelChange)=\"valueChange($event)\"\n    (mousedown)=\"mousedown($event)\"\n  ></slate-editable>\n\n  @if (!isMobileMode) {\n    @if (!options?.readonly && options?.inlineToolbarVisible) {\n      <the-inline-toolbar [editor]=\"editor\" [toolbarItems]=\"toolbarEntity.inline\"></the-inline-toolbar>\n    }\n    @if (!options?.readonly) {\n      <div theQuickInsert [editor]=\"editor\" [isVisible]=\"visibleQuickInsertPlus\"></div>\n    }\n  }\n</div>\n","import { NgModule } from '@angular/core';\nimport { TheEditorComponent } from './editor.component';\nimport { THE_MODE_PROVIDER } from './interfaces';\n\n@NgModule({\n    imports: [TheEditorComponent],\n    exports: [TheEditorComponent],\n    providers: [THE_MODE_PROVIDER]\n})\nexport class TheEditorModule {}\n","import { Injectable } from '@angular/core';\nimport { DefaultGlobalToolbarDefinition, DefaultInlineToolbarDefinition } from '../constants';\nimport { ToolbarKey, ToolbarItem, ToolbarDefinition, ToolbarEntity, ToolbarInitOption } from '../interfaces';\n\n@Injectable()\nexport class TheToolbarService {\n    initialize(\n        toolbarItems: ToolbarItem[],\n        global: string[] = DefaultGlobalToolbarDefinition,\n        inline: string[] = DefaultInlineToolbarDefinition\n    ): ToolbarInitOption {\n        const toolbarDefinition = {\n            global,\n            inline\n        };\n\n        const toolbarOperations: Map<string, ToolbarItem> = new Map<string, ToolbarItem>();\n        toolbarItems.forEach(i => toolbarOperations.set(i.key, i));\n\n        const toolbarEntity = this.nextToolbarEntity(toolbarDefinition, toolbarOperations);\n\n        return {\n            toolbarDefinition,\n            toolbarOperations,\n            toolbarEntity\n        };\n    }\n\n    nextToolbarEntity(toolbarDefinition: ToolbarDefinition, toolbarItems: Map<string, ToolbarItem>): ToolbarEntity {\n        const entity: ToolbarEntity = {};\n        for (const defKey in toolbarDefinition) {\n            entity[defKey] = this.getToolbarItemByKeys(toolbarDefinition[defKey], toolbarItems);\n        }\n        return entity;\n    }\n\n    getToolbarItemByKeys(keys: ToolbarKey[], toolbarItems: Map<string, ToolbarItem>): ToolbarItem[] {\n        return keys.map((key: ToolbarKey) => {\n            if (key === `split`) {\n                return { key: `split` };\n            }\n            const item = toolbarItems.get(key);\n            if (!item) {\n                throw new Error(`Read a non-existent toolbar key`);\n            }\n            if (item.includes) {\n                return { ...item, includes: this.getToolbarItemByKeys(item.includes as ToolbarKey[], toolbarItems) };\n            }\n            return item;\n        });\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { ThyIconRegistry } from 'ngx-tethys/icon';\nimport { Observable } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class theTethysIconRegistryFaker extends ThyIconRegistry {\n    getSvgIcon(name: string, namespace?: string): Observable<SVGElement> {\n        return new Observable<SVGElement>(observer => {\n            var svgFaker = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n            observer.next(svgFaker);\n        });\n    }\n\n    splitIconName(iconName: string): [string, string] {\n        return ['', ''];\n    }\n}\n","import { Component, signal, Signal, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyIconRegistry } from 'ngx-tethys/icon';\nimport { ThyPopoverModule } from 'ngx-tethys/popover';\nimport { THY_TOOLTIP_DEFAULT_CONFIG_PROVIDER, ThyTooltipModule } from 'ngx-tethys/tooltip';\nimport { Element } from 'slate';\nimport { ElementKinds } from '../../constants';\nimport { TheEditorComponent } from '../../editor.component';\nimport { TheEditorModule } from '../../editor.module';\nimport { TheEditor } from '../../interfaces';\nimport { theTethysIconRegistryFaker } from '../faker/tethys-icon-faker';\nimport { TheI18nService, TheI18nTranslation } from '../../i18n';\n\n@Component({\n    selector: 'basic-editor-component',\n    template: `<the-editor [(ngModel)]=\"value\" [thePlugins]=\"plugins\" (theEditorCreated)=\"editorCreate($event)\"></the-editor>`,\n    imports: [FormsModule, ThyPopoverModule, ThyTooltipModule, TheEditorModule],\n    changeDetection: ChangeDetectionStrategy.Eager,\n    providers: [\n        THY_TOOLTIP_DEFAULT_CONFIG_PROVIDER,\n        {\n            provide: ThyIconRegistry,\n            useClass: theTethysIconRegistryFaker\n        }\n    ]\n})\nexport class BasicTest {\n    value: Element[] = [\n        {\n            type: ElementKinds.paragraph,\n            children: [\n                {\n                    text: ''\n                }\n            ]\n        }\n    ];\n\n    plugins = [];\n\n    editor: TheEditor;\n\n    locale: Signal<TheI18nTranslation>;\n\n    @ViewChild(TheEditorComponent, { static: true })\n    editorComponent: TheEditorComponent;\n\n    constructor(i18n: TheI18nService) {\n        this.locale = signal(i18n.getLocale()().translations);\n    }\n\n    editorCreate(editor: TheEditor) {\n        this.editor = editor;\n    }\n}\n","export class DataTransferFaker {\n    map = new Map();\n    files = [];\n\n    getData(format: string) {\n        return this.map.get(format);\n    }\n\n    setData(format: string, data: any) {\n        this.map.set(format, data);\n    }\n}\n","import { Editor } from 'slate';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\n\nexport const pluginKey = 'test';\n\nexport const pluginKey1 = 'test1';\n\nexport const customPluginMockKey = 'custom-plugin-mock';\n\nexport const originOptions = {\n    types: [pluginKey],\n    names: [pluginKey],\n    params: {\n        key1: 'value1',\n        key2: 'value2'\n    },\n    isMerged: false,\n    age: 18,\n    name: 'test',\n    rules: [\n        {\n            type: 'test3'\n        },\n        {\n            key: pluginKey,\n            type: pluginKey,\n            markup: [],\n            match: (editor: Editor) => {},\n            format: (editor: Editor) => {}\n        },\n        {\n            key: pluginKey1,\n            type: pluginKey1,\n            markup: '```',\n            format: (editor: Editor) => {}\n        }\n    ]\n};\n\nexport const matchOptions = {\n    types: ['test', 'test1'],\n    names: [pluginKey],\n    params: { key1: 'value1-1', key2: 'value2', key3: 'value3' },\n    isMerged: true,\n    age: 20,\n    name: 'test1',\n    rules: [\n        { type: 'test3' },\n        {\n            key: pluginKey,\n            type: pluginKey,\n            markup: [],\n            match: (editor: Editor) => {},\n            format: (editor: Editor) => {},\n            query: (editor: Editor) => {}\n        },\n        {\n            key: pluginKey1,\n            type: pluginKey1,\n            markup: '```',\n            format: (editor: Editor) => {},\n            query: (editor: Editor) => {}\n        }\n    ],\n    addArrayOption: [pluginKey]\n};\n\nexport const createTestPlugin = createPluginFactory({\n    key: pluginKey,\n    options: originOptions\n});\n\nexport const createTest1Plugin = createPluginFactory({\n    key: pluginKey1,\n    overrideByKey: {\n        [pluginKey]: {\n            options: {\n                types: [pluginKey1],\n                params: { key1: 'value1-1', key3: 'value3' },\n                addArrayOption: [pluginKey],\n                isMerged: true,\n                age: 20,\n                name: 'test1',\n                rules: [\n                    {\n                        key: pluginKey,\n                        type: pluginKey,\n                        query: (editor: Editor) => {}\n                    },\n                    {\n                        key: pluginKey1,\n                        type: pluginKey1,\n                        query: (editor: Editor) => {}\n                    }\n                ]\n            }\n        }\n    }\n});\n\nexport const errorImageUrlMock = 'https://cdn.alpha.pingcode.live/static/portal/assets/images/editor/image-error.svg';\n\nexport const customPluginMock = createPluginFactory({\n    key: customPluginMockKey,\n    overrideByKey: {\n        [PluginKeys.image]: {\n            options: {\n                errorImageUrl: errorImageUrlMock\n            }\n        }\n    }\n});\n","import { TheDataMode, ThePresetConfig } from '../../interfaces';\nimport { createTest1Plugin, createTestPlugin, customPluginMock } from './mock-plugins';\n\nexport function EditorPresetConfigFactoryMock(): ThePresetConfig {\n    return {\n        options: {\n            mode: TheDataMode.json,\n            inlineToolbarVisible: true,\n            menu: [],\n            toolbar: {\n                global: [],\n                inline: []\n            }\n        },\n        plugins: [createTestPlugin(), createTest1Plugin(), customPluginMock()]\n    };\n}\n","import { createEditor, Descendant } from 'slate';\nimport { withHistory } from 'slate-history';\nimport { withAngular } from 'slate-angular';\nimport { createEmptyParagraph } from '../../utils/create-empty-paragraph';\nimport { ThePlugin } from '../../interfaces';\nimport { withTheia } from '../../core';\n\nexport const withTestPlugin = (plugins: ThePlugin[], initValue: Descendant[]) => {\n    let editor = withTheia(withHistory(withAngular(createEditor())), plugins);\n    editor.children = initValue || [createEmptyParagraph()];\n\n    return editor;\n};\n","/*\n * Public API Surface of editor\n */\nexport * from './components/index';\nexport * from './constants';\nexport * from './core/index';\nexport * from './core/toolbar-item/base-toolbar-item';\nexport * from './custom-types';\nexport * from './editor.component';\nexport * from './editor.module';\nexport * from './interfaces';\nexport * from './plugins';\nexport * from './plugins/image/image.component';\nexport * from './plugins/public-api';\nexport * as TheQueries from './queries/index';\nexport * from './services/context.service';\nexport * from './services/toolbar.service';\nexport * from './test/index';\nexport * as TheTransforms from './transforms/index';\nexport * from './utils/index';\nexport * from './i18n';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getLastChild","TheQueries.getNode","TheQueries.isAcrossBlocks","TheQueries.getAboveByType","TheQueries.getInsertElementsPath","TheQueries.anchorBlockEntry","isEmptyParagraph","TheQueries.isEmptyParagraph","isBlockCardRightCursor","TheQueries.isBlockCardRightCursor","zhHansLocale","zhHantLocale","enUsLocale","jaJpLocale","deDeLocale","ruRuLocale","TheQueries.getPluginByToolbarItem","TheQueries.getToolbarItemDisabled","i2.TheI18nService","TheQueries.isNodeType","TheQueries.isAncestor","TheQueries.findPath","TheQueries.anchorBlock","TheQueries.isNodeTypeIn","TheTransforms.insertElements","TheTransforms.setNode","TheTransforms.setMarks","TheQueries.isBlockActive","TheTransforms.setNodeByType","TheTransforms.deleteElement","TheTransforms.deleteNodeByType","TheQueries.isGlobalCollapsed","i1","i2","TheTransforms.insertInlineElement","TheTransforms.unwrapNodesByType","TheQueries.getNodesByType","map","i1.TableStore","i3.TheContextService","i3.TableStore","i1.TheI18nService","index","TheQueries.getSelectionMarks","slateRange","i2.TheContextService","i1.ResizeRef","i2.TableCellEventDispatcher","i3.ColumnResizeNotifierSource","TheQueries.isParagraph","TheQueries.getPointBefore","TheQueries.getText","TheQueries.isCollapsed","TheQueries.getRangeFromBlockStart","TheQueries.someNode","TheQueries.getRangeBefore","TheQueries.getBlockAbove","TheTransforms.handleContinualDeleteBackward","TheTransforms.handleContinualInsertBreak","TheTransforms.insertParagraph","TheQueries.isEmptyParagraphByPath","TheQueries.getBlockCardAbove","TheQueries.isBlockAboveEmpty","TheTransforms.setEndSelection","TheQueries.getContainerBlocks","TheQueries.getSelectionNodesByType","isCollapsed","anchorBlock","anchorBlockEntry","TheQueries.isAncestorEmpty","TheQueries.getAbove","TheQueries.getAnchorBlockEntry","TheQueries.isEmptyParagraphElement","i3","i4","SlateNode","TheTransforms.moveChildren","TheQueries.getParent","TheQueries.findDescendant","TheQueries.getLastChildPath","TheQueries.isFirstChild","TheQueries.isStart","TheQueries.isRangeAtRoot","TheQueries.isBlockTextEmptyAfterSelection","TheTransforms.onKeyDownResetBlockType","TheQueries.getPreviousPath","TheQueries.isDescendant","TheTransforms.mergeDeepToNodes","TheQueries.getLastNode","isAcrossBlocks","TheQueries.findNode","isEmptyContent","TheQueries.isEmptyContent","i3.TheEditorComponent"],"mappings":"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"}