@worktile/theia 2.0.1 → 2.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/worktile-theia.umd.js +366 -172
- package/bundles/worktile-theia.umd.js.map +1 -1
- package/components/toolbar/toolbar.component.d.ts +4 -1
- package/components/toolbar/toolbar.component.scss +2 -0
- package/components/toolbar-dropdown/toolbar-dropdown.component.d.ts +7 -5
- package/components/toolbar-dropdown/toolbar-dropdown.component.scss +2 -0
- package/components/toolbar-item/toolbar-item.component.d.ts +3 -0
- package/constants/code.d.ts +3 -3
- package/constants/default.d.ts +0 -1
- package/constants/node-types.d.ts +17 -1
- package/custom-types.d.ts +3 -1
- package/editor.module.d.ts +5 -3
- package/esm2015/components/inline-toolbar/inline-toolbar.component.js +1 -1
- package/esm2015/components/text/text.component.js +7 -2
- package/esm2015/components/toolbar/toolbar.component.js +18 -6
- package/esm2015/components/toolbar-dropdown/toolbar-dropdown.component.js +14 -5
- package/esm2015/components/toolbar-group/toolbar-group.component.js +1 -1
- package/esm2015/components/toolbar-item/toolbar-item.component.js +20 -6
- package/esm2015/constants/code.js +2 -2
- package/esm2015/constants/default.js +1 -2
- package/esm2015/constants/node-types.js +32 -2
- package/esm2015/constants/toolbar.js +2 -1
- package/esm2015/custom-types.js +1 -1
- package/esm2015/editor.component.js +7 -6
- package/esm2015/editor.module.js +9 -3
- package/esm2015/interfaces/editor.js +1 -1
- package/esm2015/interfaces/toolbar.js +1 -1
- package/esm2015/plugins/align/options.js +2 -1
- package/esm2015/plugins/code/code.component.js +69 -32
- package/esm2015/plugins/code/code.editor.js +3 -9
- package/esm2015/plugins/deserializers/deserialize-md.plugin.js +2 -2
- package/esm2015/plugins/font-size/font-size.editor.js +47 -0
- package/esm2015/plugins/font-size/options.js +25 -0
- package/esm2015/plugins/heading/heading.editor.js +13 -2
- package/esm2015/plugins/heading/options.js +2 -1
- package/esm2015/plugins/index.js +3 -1
- package/esm2015/plugins/mark/mark.plugin.js +15 -10
- package/esm2015/plugins/table/table.editor.js +1 -1
- package/esm2015/services/toolbar.service.js +2 -2
- package/fesm2015/worktile-theia.js +316 -127
- package/fesm2015/worktile-theia.js.map +1 -1
- package/interfaces/editor.d.ts +3 -1
- package/interfaces/toolbar.d.ts +2 -1
- package/package.json +1 -1
- package/plugins/code/code.component.d.ts +15 -4
- package/plugins/code/code.component.scss +46 -7
- package/plugins/code/code.editor.d.ts +3 -2
- package/plugins/font-size/font-size.editor.d.ts +8 -0
- package/plugins/font-size/options.d.ts +2 -0
- package/plugins/font-size/toolbar-item.component.scss +14 -0
- package/plugins/heading/heading.editor.d.ts +1 -1
- package/plugins/table/table.editor.d.ts +1 -1
- package/queries/get-selection-marks.d.ts +1 -0
- package/styles/editor.scss +20 -1
- package/styles/index.scss +1 -0
- package/styles/typo.scss +2 -1
- package/transforms/set-marks.d.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktile-theia.js","sources":["../../../packages/src/constants/default.ts","../../../packages/src/constants/node-types.ts","../../../packages/src/constants/toolbar.ts","../../../packages/src/constants/error.ts","../../../packages/src/constants/code.ts","../../../packages/src/components/text/text.component.ts","../../../packages/src/interfaces/view-base.ts","../../../packages/src/components/element/element.component.ts","../../../packages/src/interfaces/editor.ts","../../../packages/src/interfaces/toolbar.ts","../../../packages/src/interfaces/image.ts","../../../packages/src/interfaces/valid-children-types.ts","../../../packages/src/utils/id-creator.ts","../../../packages/src/queries/is-ancestor.ts","../../../packages/src/queries/get-last-node.ts","../../../packages/src/queries/is-collapsed.ts","../../../packages/src/queries/get-anchor-block-entry.ts","../../../packages/src/queries/is-empty-paragraph.ts","../../../packages/src/queries/is-paragraph.ts","../../../packages/src/queries/is-block-active.ts","../../../packages/src/queries/get-above-by-type.ts","../../../packages/src/queries/is-include-types.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/transforms/un-hang-range.ts","../../../packages/src/queries/get-nodes.ts","../../../packages/src/queries/get-nodes-by-type.ts","../../../packages/src/queries/anchor-block.ts","../../../packages/src/queries/get-block-above.ts","../../../packages/src/queries/is-ancestor-empty.ts","../../../packages/src/queries/is-block-above-empty.ts","../../../packages/src/queries/is-node-type-in.ts","../../../packages/src/queries/is-first-child.ts","../../../packages/src/queries/get-previous-path.ts","../../../packages/src/queries/get-node.ts","../../../packages/src/queries/get-parent.ts","../../../packages/src/queries/find-path.ts","../../../packages/src/utils/cast-array.ts","../../../packages/src/utils/match.ts","../../../packages/src/queries/find-node.ts","../../../packages/src/queries/find-descendant.ts","../../../packages/src/queries/get-last-child-path.ts","../../../packages/src/queries/is-point-at-root.ts","../../../packages/src/queries/is-range-at-root.ts","../../../packages/src/queries/get-next-sibling-nodes.ts","../../../packages/src/queries/is-block-text-empty-after-selection.ts","../../../packages/src/queries/get-above.ts","../../../packages/src/queries/is-start.ts","../../../packages/src/queries/is-range-across-blocks.ts","../../../packages/src/queries/some-node.ts","../../../packages/src/queries/get-children.ts","../../../packages/src/queries/is-descendant.ts","../../../packages/src/queries/is-node-type.ts","../../../packages/src/queries/anchor-inline-entry.ts","../../../packages/src/queries/anchor-inline.ts","../../../packages/src/utils/lodash.ts","../../../packages/src/queries/get-point-before.ts","../../../packages/src/queries/get-selection-nodes-by-type.ts","../../../packages/src/utils/fragment.ts","../../../packages/src/queries/is-across-blocks.ts","../../../packages/src/queries/get-text.ts","../../../packages/src/queries/get-point-from-location.ts","../../../packages/src/queries/get-rang-from-block-start.ts","../../../packages/src/queries/get-range-before.ts","../../../packages/src/queries/is-empty-content.ts","../../../packages/src/queries/get-block-card-above.ts","../../../packages/src/queries/get-plain-text.ts","../../../packages/src/queries/is-empty-paragraph-by-path.ts","../../../packages/src/queries/get-selection-marks.ts","../../../packages/src/queries/is-container-type.ts","../../../packages/src/queries/get-container-blocks.ts","../../../packages/src/transforms/set-marks.ts","../../../packages/src/transforms/clear-marks.ts","../../../packages/src/transforms/insert-element.ts","../../../packages/src/transforms/insert-element-next.ts","../../../packages/src/transforms/set-node.ts","../../../packages/src/transforms/unwrap-nodes-by-type.ts","../../../packages/src/transforms/on-keydown-reset-block-type.ts","../../../packages/src/transforms/move-children.ts","../../../packages/src/utils/create-empty-paragraph.ts","../../../packages/src/transforms/insert-paragraph.ts","../../../packages/src/transforms/apply-deep-to-nodes.ts","../../../packages/src/transforms/merge-deep-to-nodes.ts","../../../packages/src/transforms/un-wrap.ts","../../../packages/src/transforms/split-node.ts","../../../packages/src/transforms/delete-element.ts","../../../packages/src/transforms/set-end-selection.ts","../../../packages/src/utils/weak-maps.ts","../../../packages/src/transforms/close-conversion-hint.ts","../../../packages/src/transforms/handle-continual-delete-backward.ts","../../../packages/src/transforms/handle-continual-insert-break.ts","../../../packages/src/plugins/list/queries/is-node-type-list.ts","../../../packages/src/plugins/list/list.editor.ts","../../../packages/src/plugins/todo-item/todo-item.editor.ts","../../../packages/src/plugins/blockquote/blockquote.editor.ts","../../../packages/src/constants/auto-format-rules.ts","../../../packages/src/plugins/common/history.plugin.ts","../../../packages/src/components/conversion-hint/conversion-hint.component.ts","../../../packages/src/components/conversion-hint/conversion-hint.component.html","../../../packages/src/utils/data-transform.ts","../../../packages/src/utils/editor-uuid.ts","../../../packages/src/utils/get-toolbar-class.ts","../../../packages/src/utils/common.ts","../../../packages/src/plugins/deserializers/deserialize-md.plugin.ts","../../../packages/src/plugins/common/auto-insert-data..ts","../../../packages/src/plugins/common/remove-empty.plugin.ts","../../../packages/src/plugins/common/reset-type.plugin.ts","../../../packages/src/services/context.service.ts","../../../packages/src/plugins/image/image.component.ts","../../../packages/src/plugins/image/image.component.html","../../../packages/src/plugins/image/image.editor.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/list/queries/is-list.ts","../../../packages/src/plugins/list/queries/is-in-list.ts","../../../packages/src/plugins/list/queries/is-list-nested.ts","../../../packages/src/plugins/list/queries/get-list-types.ts","../../../packages/src/plugins/list/queries/get-start-list-item.ts","../../../packages/src/plugins/list/queries/has-list-in-list-item.ts","../../../packages/src/plugins/list/queries/is-single-list-item.ts","../../../packages/src/plugins/list/queries/get-list-item-entry.ts","../../../packages/src/plugins/list/queries/is-selection-at-list-item-start.ts","../../../packages/src/plugins/list/transforms/insert-list-data.ts","../../../packages/src/plugins/list/transforms/move-list-item-up.ts","../../../packages/src/plugins/list/transforms/insert-list-item.ts","../../../packages/src/plugins/list/transforms/unwrap-list.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/normalizers/normalize-list-item.ts","../../../packages/src/plugins/list/normalizers/normalize-no.ts","../../../packages/src/plugins/list/normalizers/get-list-normalizer.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/on-key-down-list.ts","../../../packages/src/pipes.ts","../../../packages/src/plugins/list/components/numbered-list.component.ts","../../../packages/src/plugins/list/components/bulleted-list.component.ts","../../../packages/src/plugins/list/components/list-item.component.ts","../../../packages/src/plugins/list/queries/is-selection-in-same-list-item.ts","../../../packages/src/plugins/list/list.plugin.ts","../../../packages/src/utils/dom.ts","../../../packages/src/plugins/todo-item/todo-item.component.ts","../../../packages/src/plugins/todo-item/todo-item.plugin.ts","../../../packages/src/plugins/hr/hr.component.ts","../../../packages/src/plugins/hr/hr.plugin.ts","../../../packages/src/plugins/align/align.plugin.ts","../../../packages/src/plugins/heading/heading.plugin.ts","../../../packages/src/plugins/mark/mark.plugin.ts","../../../packages/src/plugins/node-id/node-id.plugin.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/plugins/common/transforms.plugin.ts","../../../packages/src/plugins/normalizers/trailing-node.plugin.ts","../../../packages/src/plugins/common/block-card.plugin.ts","../../../packages/src/plugins/common/move-selection.plugin.ts","../../../packages/src/plugins/common/get-fragment.plugin.ts","../../../packages/src/plugins/todo-item/options.ts","../../../packages/src/plugins/table/table.types.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/table-position.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/calc-span.ts","../../../packages/src/plugins/table/utils/add-columns.ts","../../../packages/src/plugins/table/transforms/insert-column.ts","../../../packages/src/plugins/table/transforms/insert-row.ts","../../../packages/src/plugins/table/transforms/insert-table.ts","../../../packages/src/plugins/table/transforms/clear-cell.ts","../../../packages/src/plugins/table/utils/remove-columns.ts","../../../packages/src/plugins/table/transforms/remove-column.ts","../../../packages/src/plugins/table/transforms/remove-row.ts","../../../packages/src/plugins/table/utils/next-path.ts","../../../packages/src/plugins/table/transforms/remove-table.ts","../../../packages/src/plugins/table/table.editor.ts","../../../packages/src/plugins/mark/mark.editor.ts","../../../packages/src/plugins/mark/options.ts","../../../packages/src/plugins/list/options.ts","../../../packages/src/plugins/image/options.ts","../../../packages/src/plugins/hr/hr.editor.ts","../../../packages/src/plugins/hr/options.ts","../../../packages/src/plugins/heading/heading.editor.ts","../../../packages/src/plugins/heading/options.ts","../../../packages/src/plugins/blockquote/options.ts","../../../packages/src/plugins/align/align.editor.ts","../../../packages/src/plugins/align/options.ts","../../../packages/src/plugins/blockquote/blockquote.component.ts","../../../packages/src/plugins/blockquote/blockquote.plugin.ts","../../../packages/src/constants/color-select.ts","../../../packages/src/components/color-select/color-select.component.ts","../../../packages/src/components/color-select/color-select.component.html","../../../packages/src/services/color-select.service.ts","../../../packages/src/plugins/color/color.editor.ts","../../../packages/src/components/toolbar-base-item/toolbar-base-item.component.ts","../../../packages/src/plugins/color/toolbar-item.component.ts","../../../packages/src/plugins/color/options.ts","../../../packages/src/plugins/common/remove-void.plugin.ts","../../../packages/src/plugins/code/code.editor.ts","../../../packages/src/plugins/code/options.ts","../../../packages/src/components/toolbar-dropdown/toolbar-dropdown.component.ts","../../../packages/src/components/toolbar-dropdown/toolbar-dropdown.component.html","../../../packages/src/plugins/code/code.component.ts","../../../packages/src/plugins/code/code.component.html","../../../packages/src/plugins/code/code.plugin.ts","../../../packages/src/plugins/link/link.types.ts","../../../packages/src/plugins/link/link.editor.ts","../../../packages/src/plugins/link/options.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.component.ts","../../../packages/src/plugins/normalizers/remove-empty-nodes.ts","../../../packages/src/plugins/link/link.plugin.ts","../../../packages/src/components/table-select/table-select.component.ts","../../../packages/src/components/table-select/table-select.component.html","../../../packages/src/plugins/table/toolbar-item.component.ts","../../../packages/src/plugins/table/options.ts","../../../packages/src/components/column-resize/column-resize-notifier.ts","../../../packages/src/components/column-resize/event-dispatcher.ts","../../../packages/src/plugins/table/utils/get-select-cell-node.ts","../../../packages/src/plugins/table/utils/merge-cell.ts","../../../packages/src/plugins/table/table.store.ts","../../../packages/src/plugins/table/utils/split-cell.ts","../../../packages/src/plugins/table/utils/set-menu-cell-invisibility.ts","../../../packages/src/components/nav-split-line/nav-split-line.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/utils/is-virtual-key.ts","../../../packages/src/components/contextmenu/contextmenu.component.ts","../../../packages/src/components/contextmenu/contextmenu.component.html","../../../packages/src/services/table-contextmenu.service.ts","../../../packages/src/plugins/table/table.service.ts","../../../packages/src/constants/selector.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/components/column-resize/selectors.ts","../../../packages/src/components/column-resize/column-resize.directive.ts","../../../packages/src/plugins/table/components/table.component.ts","../../../packages/src/plugins/table/components/table.component.html","../../../packages/src/plugins/table/transforms/clear-table-node.ts","../../../packages/src/plugins/table/utils/calc-anchor-position.ts","../../../packages/src/plugins/table/components/row/row.component.ts","../../../packages/src/components/column-resize/resizing.store.ts","../../../packages/src/components/column-resize/resize-ref.ts","../../../packages/src/components/column-resize/overlay-handle.component.ts","../../../packages/src/plugins/table/utils/get-base-height.ts","../../../packages/src/plugins/table/components/td/td.component.ts","../../../packages/src/plugins/table/components/td/td.component.html","../../../packages/src/plugins/table/utils/normalize-table.ts","../../../packages/src/plugins/table/table.plugin.ts","../../../packages/src/plugins/normalizers/insert-paragraph-nodes.ts","../../../packages/src/plugins/deserializers/deserialize-html.plugin.ts","../../../packages/src/plugins/vertical-align/vertical-align.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/options.ts","../../../packages/src/plugins/paint-format/paint-format.editor.ts","../../../packages/src/plugins/paint-format/options.ts","../../../packages/src/utils/is-clean-empty-paragraph.ts","../../../packages/src/components/toolbar-item/toolbar-item.component.ts","../../../packages/src/plugins/quick-insert/components/quick-toolbar/quick-toolbar.component.ts","../../../packages/src/plugins/quick-insert/components/quick-toolbar/quick-toolbar.component.html","../../../packages/src/plugins/quick-insert/quick-insert.editor.ts","../../../packages/src/plugins/quick-insert/quick-insert.plugint.ts","../../../packages/src/plugins/soft-break/soft-break.plugin.ts","../../../packages/src/plugins/index.ts","../../../packages/src/shortcuts/mark.ts","../../../packages/src/shortcuts/index.ts","../../../packages/src/services/toolbar.service.ts","../../../packages/src/utils/auto-focus.ts","../../../packages/src/utils/get-editable-element-height.ts","../../../packages/src/utils/auto-scroll-view.ts","../../../packages/src/components/toolbar/toolbar.component.ts","../../../packages/src/components/toolbar/toolbar.component.html","../../../packages/src/components/inline-toolbar/inline-toolbar.component.ts","../../../packages/src/plugins/quick-insert/components/quick-insert.component.ts","../../../packages/src/plugins/quick-insert/components/quick-insert.component.html","../../../packages/src/plugins/placeholder/placeholder.component.ts","../../../packages/src/components/template/template.component.ts","../../../packages/src/components/template/template.component.html","../../../packages/src/editor.component.ts","../../../packages/src/editor.component.html","../../../packages/src/components/column-resize/column-resize.module.ts","../../../packages/src/components/toolbar-group/toolbar-group.component.ts","../../../packages/src/components/toolbar-group/toolbar-group.component.html","../../../packages/src/editor.module.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'];\nexport const PICTURE_ACCEPTED_UPLOAD_SIZE = 20;\nexport const A_TAG_REL_ATTR = 'noopener noreferrer nofollow external ugc';\nexport const LINK_DEFAULT_TEXT = '链接';\nexport const TAB_SPACE = ' ';\nexport const ZERO_WIDTH_CHAR = '\\u200B';\nexport const CLIPBOARD_FORMAT_KEY = 'x-theia-fragment';\nexport const DEFAULT_SCROLL_CONTAINER = '.the-editable-container';\nexport const ELEMENT_UNIQUE_ID = 'key';\n\nexport enum TheMode {\n fullMode = 'full',\n liteMode = 'lite'\n}\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}\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 MarkTypes {\n bold = 'bold',\n italic = 'italic',\n underline = 'underlined',\n strike = 'strike',\n color = 'color',\n backgroundColor = 'background-color',\n codeLine = 'code-line'\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}\n\nexport const MarkProps: Array<MarkTypes> = [\n MarkTypes.backgroundColor,\n MarkTypes.bold,\n MarkTypes.codeLine,\n MarkTypes.color,\n MarkTypes.italic,\n MarkTypes.strike,\n MarkTypes.underline\n];\n\nexport const THE_INLINE_TOOLBAR_TYPES: Array<ElementKinds> = [ElementKinds.default, ElementKinds.listItem, ElementKinds.checkItem];\n\nexport const STANDARD_HEADING_TYPES: CustomElementKinds[] = [\n ElementKinds.heading_1,\n ElementKinds.heading_2,\n ElementKinds.heading_3,\n ElementKinds.heading_4\n];\n\nexport const HEADING_TYPES: CustomElementKinds[] = [...STANDARD_HEADING_TYPES, ElementKinds.heading_5, ElementKinds.heading_6];\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_DELETEBACKWARD_TYPES: CustomElementKinds[] = [ElementKinds.tableCell];\n","import { ComponentType } from 'slate-angular';\nimport { InjectionToken } from '@angular/core';\nimport { ElementKinds, MarkTypes } from './node-types';\nimport { ToolbarItem, ToolbarKey } from '../interfaces';\nimport { ToolbarActionTypes, STANDARD_HEADING_TYPES } from '../constants/node-types';\nimport type { TheToolbarGroupComponent } from '../components/toolbar-group/toolbar-group.component';\n\nexport const TheToolbarGroupToken = new InjectionToken<ComponentType<TheToolbarGroupComponent>>('the-toolbar-group-token');\n\nexport const QUICK_TOOLBAR_HOTKEY = '/';\n\nexport enum DropdownMode {\n icon = 'icon-mode',\n text = 'text-mode'\n}\n\nexport enum ToolbarItemMode {\n horizontal,\n vertical\n}\n\nexport const DefaultGlobalToolbarDefinition: ToolbarKey[] = [\n ElementKinds.headingList,\n ToolbarActionTypes.split,\n MarkTypes.bold,\n MarkTypes.italic,\n MarkTypes.underline,\n MarkTypes.strike,\n MarkTypes.codeLine,\n MarkTypes.color,\n MarkTypes.backgroundColor,\n ToolbarActionTypes.split,\n ToolbarActionTypes.alignType,\n ToolbarActionTypes.verticalAlign,\n ToolbarActionTypes.split,\n ElementKinds.numberedList,\n ElementKinds.bulletedList,\n ElementKinds.checkItem,\n ToolbarActionTypes.split,\n ElementKinds.link,\n ElementKinds.image,\n ElementKinds.table,\n ElementKinds.blockquote,\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 MarkTypes.codeLine,\n MarkTypes.color,\n MarkTypes.backgroundColor,\n ToolbarActionTypes.split,\n ToolbarActionTypes.alignType,\n ToolbarActionTypes.split,\n ElementKinds.link\n];\n\nexport const DefaultQuickToolbarDefinition: ToolbarKey[] = [\n ...STANDARD_HEADING_TYPES,\n ToolbarActionTypes.split,\n ElementKinds.numberedList,\n ElementKinds.bulletedList,\n ElementKinds.checkItem,\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 ToolbarMoreGroup: ToolbarItem = {\n key: 'more',\n icon: 'more'\n};\n","export enum ErrorCodes {\n UNKNOW_ERROR = 1000,\n IMAGE_ERR_MIME_FORMAT = 1001,\n IMAGE_ERR_SIZE_LIMIT = 1002\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const DEFAULT_LANGUAGE = {\n showName: 'JavaScript',\n value: 'javascript'\n};\n\nexport const CODE_MODES = [\n {\n showName: 'Plain Text',\n value: ''\n },\n {\n showName: 'C-like',\n value: 'clike'\n },\n DEFAULT_LANGUAGE,\n {\n showName: 'CSS',\n value: 'css'\n },\n {\n showName: 'Dart',\n value: 'dart'\n },\n {\n showName: 'Django',\n value: 'django'\n },\n {\n showName: 'Dockerfile',\n value: 'dockerfile'\n },\n {\n showName: 'Go',\n value: 'go'\n },\n {\n showName: 'Markdown',\n value: 'markdown'\n },\n {\n showName: 'Nginx',\n value: 'nginx'\n },\n {\n showName: 'PHP',\n value: 'php'\n },\n {\n showName: 'Python',\n value: 'python'\n },\n {\n showName: 'Shell',\n value: 'shell'\n },\n {\n showName: 'SQL',\n value: 'sql'\n },\n {\n showName: 'Swift',\n value: 'swift'\n },\n {\n showName: 'HTML',\n value: 'htmlmixed'\n }\n];\n\nexport const CodeMode = {\n default: 'default',\n print: 'print'\n};\nexport type CodeMode = 'default' | 'print';\n\nexport class TheCodeMode {\n mode: CodeMode;\n}\n\nexport const THE_CODE_MODE_TOKEN = new InjectionToken<TheCodeMode>('the-code-mode');\n\nexport const THE_CODE_MODE_PROVIDER = {\n provide: THE_CODE_MODE_TOKEN,\n useValue: {\n mode: CodeMode.default\n }\n};\n\nexport const CODEMIRROR_PADDING_TOP = 10;\n","import { ChangeDetectorRef, Component, ElementRef, Renderer2 } from '@angular/core';\nimport { BaseTextComponent } from 'slate-angular';\nimport { MarkTypes } from '../../constants';\n\n@Component({\n selector: 'span[theText]',\n template: `<slate-leaves [context]=\"context\" [viewContext]=\"viewContext\"></slate-leaves>`,\n host: {\n 'data-slate-node': 'text'\n }\n})\nexport class TheTextComponent extends BaseTextComponent {\n constructor(public elementRef: ElementRef, public renderer2: Renderer2, cdr: ChangeDetectorRef) {\n super(elementRef, cdr);\n }\n\n excludes = ['color', 'background-color', 'text'];\n attributes = [];\n\n applyTextMark() {\n this.attributes.forEach(attr => {\n this.renderer2.removeAttribute(this.elementRef.nativeElement, 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.renderer2.setAttribute(this.elementRef.nativeElement, attr, 'true');\n this.attributes.push(attr);\n }\n }\n\n if (this.text[MarkTypes.color]) {\n this.renderer2.setStyle(this.elementRef.nativeElement, 'color', this.text[MarkTypes.color]);\n } else {\n this.renderer2.removeStyle(this.elementRef.nativeElement, 'color');\n }\n if (this.text[MarkTypes.backgroundColor]) {\n this.renderer2.setStyle(this.elementRef.nativeElement, 'background-color', this.text[MarkTypes.backgroundColor]);\n } else {\n this.renderer2.removeStyle(this.elementRef.nativeElement, 'background-color');\n }\n }\n\n onContextChange() {\n super.onContextChange();\n this.applyTextMark();\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AngularEditor, BaseElementComponent } from 'slate-angular';\nimport { Editor, Element } from 'slate';\n\n@Component({\n selector: 'TheBaseElementComponent',\n template: ''\n})\nexport class TheBaseElementComponent<T extends Element = Element, K extends AngularEditor = Editor>\n extends BaseElementComponent<T, K>\n implements OnInit\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 }\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { TheBaseElementComponent } from '../../interfaces/view-base';\n\n@Component({\n selector: '[theDefaultElement]',\n template: '<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheDefaultElementComponent extends TheBaseElementComponent {}\n","import { ElementOptionsInfo } from './valid-children-types';\nimport { Ancestor, Range, Path, Point, Node, Span, NodeEntry, Editor, Element, Text } from 'slate';\nimport { AngularEditor, ViewType } from 'slate-angular';\nimport { HistoryEditor } from 'slate-history';\n// import * as TheQueries from '../queries';\n// import * as TheTransforms from '../transforms';\nimport { Predicate } from '../utils/match';\nimport { ToolbarOption } from './toolbar';\n\nexport interface TheEditor extends AngularEditor, HistoryEditor {\n renderElement: (element: Element) => ViewType;\n renderLeaf: (text: Text) => ViewType;\n insertElement: (element: Element) => void;\n isContainer: (element: Element) => boolean;\n extraElementOptions: ElementOptionsInfo[];\n disabled: boolean;\n [key: string]: any;\n}\n\nexport const TheEditor = {\n ...AngularEditor\n};\n\nexport interface ThePlugin {\n (editor: Editor): Editor;\n}\n\nexport enum TheDataMode {\n json = 'json',\n html = 'html'\n}\n\nexport interface TheOptions {\n readonly?: boolean;\n mode?: TheDataMode;\n disabled?: boolean;\n autoFocus?: boolean;\n placeholder?: string;\n isEmptyShowPlaceholder?: boolean;\n isMustShowPlaceholder?: boolean;\n scrollContainer?: string;\n maxHeight?: number;\n toolbar?: ToolbarOption;\n disablePlugins?: string[];\n extraElementOptions?: ElementOptionsInfo[];\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 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 {\n inputType?: string;\n key?: string;\n text?: string;\n json?: Node[];\n}\n","import { ComponentType } from '@angular/cdk/portal';\nimport { Editor } from 'slate';\nimport { ElementKinds, MarkTypes, DropdownMode } from '../constants';\n\nexport type ToolbarKey = MarkTypes | ElementKinds | string;\n\nexport enum ToolbarItemType {\n default = 'default',\n toolDropdown = 'tool-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 quick?: string[];\n};\n\ninterface ToolbarItemBase {\n key: ToolbarKey;\n execute?: (editor: Editor) => void;\n active?: (editor: Editor) => boolean | string;\n disable?: (editor: Editor) => boolean | string;\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 quickItemComponent?: ComponentType<any>;\n type?: ToolbarItemType;\n dropdownMode?: DropdownMode;\n}\n\nexport interface DefaultToolbarItem extends ToolbarItemBase {\n icon?: string;\n name?: string;\n shortcutKey?: string;\n type?: ToolbarItemType;\n}\n\nexport type ToolbarItem = CustomizeToolbarItem & DefaultToolbarItem;\n\nexport type ToolbarEntity = {\n global?: ToolbarItem[];\n inline?: ToolbarItem[];\n quick?: 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 toolbarItems?: ToolbarItem[];\n}\n\nexport interface ToolbarItemsComposeReturn {\n items: ToolbarItem[];\n group: ToolbarItem[];\n}\n","import { Observable } from 'rxjs';\nimport { UploadFileEntity, FileUploadingItem } from './upload';\nimport { InjectionToken } from '@angular/core';\nimport { SafeUrl } from '@angular/platform-browser';\nimport { Alignment } from '../constants';\n\nexport interface ImageEntry {\n file?: File;\n name?: string;\n width?: number;\n height?: number;\n thumbUrl?: SafeUrl | string;\n originUrl?: SafeUrl | string;\n align?: Alignment;\n}\n\nexport interface TheImageUploaderService {\n uploadFileHandle: (files: any) => Observable<UploadFileEntity[]>;\n getUploadingItems$: () => Observable<FileUploadingItem[]>;\n}\n\nexport const THE_UPLOAD_SERVICE_TOKEN = new InjectionToken<TheImageUploaderService>('THE_UPLOAD_SERVICE_TOKEN');\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 isIndivisible?: 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 inValidChildrenTypes: [ElementKinds.table, ElementKinds.tableCell]\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 { 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 { 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, 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 => Editor.isBlock(editor, n),\n at\n });\n};\n","import { Editor, Path, Point } from 'slate';\nimport { ElementKinds } from '../constants/node-types';\nimport { getAnchorBlockEntry } from './get-anchor-block-entry';\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","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 { 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, 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, 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 { Editor } from 'slate';\n\nexport const getBlockCardCenterCursor = (editor: Editor) => {\n return Editor.start(editor, editor.selection.anchor.path);\n};\n","import { Editor } from 'slate';\n\nexport const isBlockCardCursor = (editor: Editor) => {\n return editor.selection.anchor.offset < 0;\n};\n","import { Editor, NodeEntry, Path, Point, Element } from 'slate';\nimport { getBlockCardCenterCursor } from './get-block-card-cursor';\nimport { isBlockCardCursor } from './is-block-card-cursor';\n\nexport const anchorBlockEntry = (editor: Editor, at?: Path | Point): NodeEntry<Element> | undefined => {\n if (!at && isBlockCardCursor(editor)) {\n at = getBlockCardCenterCursor(editor);\n }\n\n return Editor.above<Element>(editor, {\n match: n => Editor.isBlock(editor, n),\n at\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, Element } from 'slate';\nimport { anchorBlockEntry } from './anchor-block-entry';\n\nexport const anchorBlock = (editor: Editor): Element => {\n const entry = anchorBlockEntry(editor, editor.selection.anchor);\n return entry ? entry[0] : null;\n};\n","import { Ancestor, Editor, NodeEntry } 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 => Editor.isBlock(editor, n),\n ...options\n }) || [editor, []];\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 } 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 { 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 { 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, 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 { 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 { AngularEditor, NODE_TO_INDEX, NODE_TO_PARENT } from 'slate-angular';\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","export function castArray(data?: any) {\n if (!data) {\n return [];\n }\n return Array.isArray(data) ? data : [data];\n}\n","import { Editor } 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 || 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, Location, Node, NodeEntry, Path, Range, Span } 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 : 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","/**\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 } 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 : 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","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 { Point } from 'slate';\n\nexport const isPointAtRoot = (point: Point) => point.path.length === 2;\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 { 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, 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 { 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, 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, 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 { 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 { Node, NodeEntry, Path, Element } from 'slate';\n\n/**\n * Get children node entries of a node entry.\n * TODO: try Node.children\n */\nexport const getChildren = (nodeEntry: NodeEntry) => {\n const [node, path] = nodeEntry;\n\n const children = (Element.isElement(node) && (node.children as Node[])) || [];\n\n return children.map((child, index) => {\n const childPath = path.concat([index]) as Path;\n return [child, childPath] as NodeEntry;\n });\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 { 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, Element } from 'slate';\n\nexport const anchorInlineEntry = (editor: Editor) => {\n const match = Editor.above<Element>(editor, {\n match: n => Editor.isInline(editor, n)\n });\n if (match) {\n return match;\n }\n};\n","import { Editor } from 'slate';\nimport { anchorInlineEntry } from './anchor-inline-entry';\n\nexport const anchorInline = (editor: Editor) => {\n return anchorInlineEntry(editor)[0];\n};\n","import * as _lodash from 'lodash';\nexport const _ = _lodash;\n","import { Editor, Location, Path, Point } from 'slate';\nimport { castArray } from '../utils/cast-array';\nimport { _ } 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 > matchString.length) {\n return;\n }\n }\n }\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, Element, Text, Node } from 'slate';\nimport { CLIPBOARD_FORMAT_KEY, ELEMENT_UNIQUE_ID } from '../constants/default';\n\nexport const getStartBlock = (editor: Editor, fragment: Element) => {\n const firstChild = fragment.children && fragment.children[0];\n if (firstChild && !Editor.isInline(editor, firstChild) && !Text.isText(firstChild) && Element.isElement(firstChild)) {\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 (lastChild && !Editor.isInline(editor, lastChild) && !Text.isText(lastChild) && Element.isElement(lastChild)) {\n return getEndBlock(editor, lastChild);\n }\n return fragment;\n};\n\nexport const extractFragment = (data: DataTransfer, deleteKey = ELEMENT_UNIQUE_ID) => {\n const fragment = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);\n if (fragment) {\n const decoded = decodeURIComponent(window.atob(fragment));\n let nodes = JSON.parse(decoded) as Element[];\n if (!Array.isArray(nodes)) {\n nodes = [nodes];\n }\n // delete key to avoid duplicate keys\n if (deleteKey) {\n deleteElementKey(nodes, deleteKey);\n }\n return nodes;\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 * 删除 text 节点的 颜色/背景色\n * @param node \n */\nexport function deleteColorAndBackgroundColorOfText(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 } else {\n deleteColorAndBackgroundColorOfText(child);\n }\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 { 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, 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 { 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 { 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 { 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 { 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, 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 { 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 { Element, Editor } from 'slate';\n\nexport const isContainer = (editor: Editor, value: Element) => Element.isElement(value) && 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 { 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 } from 'slate';\nimport { TheEditor } from '../interfaces';\n\nexport const insertElement = (editor: TheEditor, element: Element) => editor.insertElement(element);\n","import { Editor, Range, Path, Transforms, Element } from 'slate';\nimport * as TheQueries from '../queries';\n\nexport const insertElementNext = (editor: Editor, node: Element) => {\n if (Range.isExpanded(editor.selection)) {\n Editor.deleteFragment(editor);\n }\n\n const anchorBlockPath = TheQueries.anchorBlockEntry(editor)[1];\n const isEmpty = TheQueries.isEmptyParagraph(editor);\n const nextPath = Path.next([anchorBlockPath[0]]);\n\n Transforms.insertNodes(editor, node, { at: nextPath });\n\n if (isEmpty && anchorBlockPath.length === 1) {\n Transforms.delete(editor, { at: anchorBlockPath });\n Transforms.select(editor, Editor.start(editor, anchorBlockPath));\n } else {\n Transforms.select(editor, Editor.start(editor, nextPath));\n }\n};\n","import { Editor, Transforms, Element } 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, 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 isHotkey from 'is-hotkey';\nimport { Editor, Transforms, Element } 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 && isHotkey(hotkey, event))) {\n if (predicate(editor) && TheQueries.isNodeTypeIn(editor, types)) {\n if (event !== null) {\n event.preventDefault();\n }\n Transforms.setNodes(editor, { type: defaultType } as Element);\n\n onReset(editor);\n\n reset = true;\n }\n }\n });\n }\n\n return reset;\n };\n","import { Editor, 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 (!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 { 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 { 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 { 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 { _ } 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, 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 { Transforms, Path, Editor, Element, NodeEntry } from 'slate';\nimport { CustomElementKinds } from '../custom-types';\nimport * as TheQueries from '../queries';\n\nexport const splitNode = (editor: Editor, indivisibleTypes: CustomElementKinds[]): Path => {\n const { selection } = editor;\n const indivisibleType = indivisibleTypes && indivisibleTypes.find(item => TheQueries.getAboveByType(editor, item, { mode: 'highest' }));\n let splitPath: Path;\n if (!indivisibleType) {\n Transforms.splitNodes(editor, {\n always: true,\n mode: 'highest'\n });\n splitPath = [selection.anchor.path[0]];\n } else {\n Transforms.splitNodes(editor, {\n always: true,\n mode: 'highest',\n match: (data: Element) => {\n if (data.type && !indivisibleTypes.includes(data.type)) {\n const [node] = TheQueries.getNodesByType(editor, data.type, { at: selection });\n const parentNode = Editor.parent(editor, node[1]) as NodeEntry<Element>;\n if (indivisibleTypes.includes(parentNode[0].type)) {\n splitPath = node[1];\n return true;\n }\n }\n }\n });\n }\n return splitPath;\n};\n","import { Editor, Element, Transforms, Path } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { createEmptyParagraph } from '../utils/create-empty-paragraph';\nimport * as TheQueries from '../queries';\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, 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 { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor } 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_EDITOR_QUICK_TOOLBAR_REF: WeakMap<Editor, ThyPopoverRef<any>> = new WeakMap();\n","import { Editor } from 'slate';\nimport { THE_EDITOR_CONVERSION_HINT_REF } from '../utils/weak-maps';\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","import { CustomElementKinds } from '../custom-types';\nimport { Editor, Element, NodeEntry } from 'slate';\nimport * as TheQueries from '../queries';\nimport { unWrap } from './un-wrap';\nimport { BlockElementKinds } from '../interfaces/element';\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 => Editor.isBlock(editor, n) && n.type === type\n });\n\n if (isEnd) {\n editor.marks = {};\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 { 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 { Transforms, Node, Editor, Path, Element } 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 this.buildListItem(editor);\n // Todo: types\n Transforms.wrapNodes(editor, { type, children: [], start: startIndex } as any, {\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 => Editor.isBlock(editor, node),\n mode: 'lowest'\n });\n for (const [node, path] of nodes) {\n if (!Editor.isVoid(editor, node) && Element.isElement(node) && node.type !== ElementKinds.paragraph) {\n Transforms.setNodes(\n editor,\n { type: ElementKinds.paragraph, checked: undefined } as any, // todo remove checked\n { at: path }\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 this.buildInsertDataChildren(listItem);\n }\n};\n","import { Editor, Transforms } from 'slate';\nimport { ElementKinds } from '../../constants/node-types';\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 = this.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 { Editor, Transforms, Element, Node } from 'slate';\nimport { ElementKinds } from '../../constants/node-types';\nimport * as TheQueries from '../../queries';\n\nexport const BlockquoteEditor = {\n toggleBlockquote(editor: Editor) {\n if (!TheQueries.isParagraph(editor)) {\n Transforms.insertNodes(editor, {\n type: ElementKinds.paragraph,\n mode: 'text',\n children: [\n {\n text: ''\n }\n ]\n } as Node);\n }\n const isActive = TheQueries.isBlockActive(editor, ElementKinds.blockquote);\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 } from 'slate';\nimport { AutoFormatRule } from '../interfaces/auto-format';\nimport { MarkTypes, ElementKinds } from './node-types';\nimport * as TheQueries from '../queries';\nimport { ListEditor } from '../plugins/list/list.editor';\nimport { TodoItemEditor } from '../plugins/todo-item/todo-item.editor';\nimport { BlockquoteEditor } from '../plugins/blockquote/blockquote.editor';\n\nexport const autoFormatRules: AutoFormatRule[] = [\n {\n type: ElementKinds.heading_1,\n markup: '#'\n },\n {\n type: ElementKinds.heading_2,\n markup: '##'\n },\n {\n type: ElementKinds.heading_3,\n markup: '###'\n },\n {\n type: ElementKinds.heading_4,\n markup: '####'\n },\n {\n type: ElementKinds.heading_5,\n markup: '#####'\n },\n {\n type: ElementKinds.heading_6,\n markup: '######'\n },\n {\n type: ElementKinds.blockquote,\n markup: ['>'],\n format: (editor: Editor) => {\n BlockquoteEditor.toggleBlockquote(editor);\n }\n },\n {\n type: MarkTypes.bold,\n between: ['**', '**'],\n mode: 'inline',\n insertTrigger: true\n },\n {\n type: MarkTypes.bold,\n between: ['__', '__'],\n mode: 'inline',\n insertTrigger: true\n },\n {\n type: MarkTypes.italic,\n between: ['*', '*'],\n mode: 'inline',\n insertTrigger: true\n },\n {\n type: MarkTypes.italic,\n between: ['_', '_'],\n mode: 'inline',\n insertTrigger: true\n },\n {\n type: MarkTypes.codeLine,\n between: ['`', '`'],\n mode: 'inline',\n insertTrigger: true\n },\n {\n type: MarkTypes.strike,\n between: ['~~', '~~'],\n mode: 'inline',\n insertTrigger: true\n },\n {\n type: ElementKinds.code,\n markup: '```',\n insertTrigger: true\n },\n {\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 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 = markup[0].split('.')[0] as unknown as number;\n if (startIndex === 0) {\n startIndex = 1;\n }\n }\n ListEditor.toggleList(editor, ElementKinds.numberedList, startIndex);\n }\n },\n {\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 type: ElementKinds.hr,\n markup: '---',\n insertTrigger: true\n }\n];\n","import { Editor } from 'slate';\n\nexport const UNDOING = new WeakMap<Editor, boolean | undefined>();\nexport const REDOING = new WeakMap<Editor, boolean | undefined>();\n\nexport const withTheHistory = (editor: Editor): Editor => {\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","import { ChangeDetectionStrategy, Component, HostListener, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Editor } from 'slate';\nimport * as TheTransforms from '../../transforms';\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})\nexport class TheConversionHintComponent implements OnInit, OnDestroy {\n @Input() editor: Editor;\n\n @Input() conversion: () => void;\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.creatCloseTimer();\n }\n }\n\n ngOnInit() {\n this.creatCloseTimer();\n }\n\n ngOnDestroy() {\n this.clearCloseTimer();\n }\n\n creatCloseTimer() {\n this.closeTimer = setInterval(() => {\n clearInterval(this.closeTimer);\n TheTransforms.closeConversionHint(this.editor);\n }, this.duration);\n }\n\n clearCloseTimer() {\n clearInterval(this.closeTimer);\n }\n}\n","<ng-container>\n <thy-alert\n thyType=\"primary-weak\"\n thyIcon=\"info-circle-fill\"\n thyCloseable=\"true\"\n thyMessage=\"检测到粘贴内容符合Markdown语法\"\n >\n <ng-template #operation>\n <a href=\"javascript:;\" thyAlertActionItem (click)=\"conversion()\">\n 立即转换\n </a>\n </ng-template>\n </thy-alert>\n</ng-container>\n","import { Descendant } from 'slate';\nimport { TheiaConverter } from '@atinc/selene';\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 { 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 { getEditorUUID } from './editor-uuid';\n\nexport const getToolbarClass = (editor: Editor) => {\n const uuid = getEditorUUID(editor);\n return `the-toolbar-${uuid}`;\n};\n","export const IS_MAC = typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);\n\nexport const CONTROL_KEY = IS_MAC ? '⌘' : 'Ctrl';\n","import { ChangeDetectorRef, ViewContainerRef } from '@angular/core';\nimport { Editor, Element, Node, Text, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport marked from 'marked';\nimport { TheiaConverter } from '@atinc/selene';\nimport { ThyPopover } from 'ngx-tethys/popover';\nimport { CLIPBOARD_FORMAT_KEY, ElementKinds } from '../../constants';\nimport * as TheTransforms from '../../transforms';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { TheConversionHintComponent } from '../../components/conversion-hint/conversion-hint.component';\nimport { THE_EDITOR_CONVERSION_HINT_REF, getToolbarClass } from '../../utils';\n\nexport const withDeserializeMd = (options?: Record<string, any>) => (editor: Editor) => {\n const { insertData, onKeydown } = editor;\n\n editor.onKeydown = (event: KeyboardEvent) => {\n TheTransforms.closeConversionHint(editor);\n onKeydown(event);\n };\n\n editor.insertData = (data: DataTransfer) => {\n const popover = editor.injector.get(ThyPopover);\n const viewContainerRef = editor.injector.get(ViewContainerRef);\n const cdr = editor.injector.get(ChangeDetectorRef);\n\n const plainFragment = data.getData('text/plain');\n const slateFragment = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);\n const oldRange = editor.selection;\n TheTransforms.closeConversionHint(editor);\n\n if (plainFragment && isMarkdownStynx(plainFragment) && !slateFragment) {\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 hintPopverRef = popover.open(TheConversionHintComponent, {\n initialState: {\n editor,\n conversion: () => {\n try {\n const html = marked(plainFragment, { gfm: true });\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 TheTransforms.closeConversionHint(editor);\n\n editor.undo();\n\n setTimeout(() => {\n Transforms.select(editor, oldRange);\n Transforms.insertFragment(editor, fragment);\n AngularEditor.focus(editor);\n });\n return;\n } else {\n TheTransforms.closeConversionHint(editor);\n }\n } catch (error) {\n TheTransforms.closeConversionHint(editor);\n }\n }\n },\n origin,\n viewContainerRef,\n placement,\n offset: -100,\n hasBackdrop: false,\n backdropClosable: false,\n closeOnNavigation: false,\n scrollStrategy: overlay.scrollStrategies.reposition()\n });\n THE_EDITOR_CONVERSION_HINT_REF.set(editor, hintPopverRef);\n cdr.markForCheck();\n });\n }\n\n insertData(data);\n };\n return editor;\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 isMarkdownStynx = 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(>|\\>)(.*)/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 { Editor, Path, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport * as TheQueries from '../../queries';\nimport { DefaultElementOptions, ElementOptionsInfo } from '../../interfaces';\nimport * as TheTransforms from '../../transforms';\nimport { extractFragment } from '../../utils/fragment';\n\nexport const withAutoInsertData = (validChildren?: ElementOptionsInfo[]) => (editor: Editor) => {\n const { insertData } = editor;\n let allElementOptions = DefaultElementOptions;\n if (validChildren?.length) {\n const validInfo = mergeElementOptions(validChildren);\n allElementOptions = Object.values(validInfo);\n }\n\n editor.insertData = (data: DataTransfer) => {\n if (editor.extraElementOptions?.length) {\n const extraInfo = mergeElementOptions(editor.extraElementOptions);\n allElementOptions = Object.values(extraInfo);\n }\n const indivisibleTypes = allElementOptions.filter(item => item.isIndivisible).map(item => item.type);\n const fragment = extractFragment(data);\n if (fragment) {\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 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 validFragmentData = fragment.slice(0, invalidIndex);\n const invalidFragmentData = fragment.slice(invalidIndex, fragment.length);\n Editor.withoutNormalizing(editor, () => {\n if (validFragmentData.length > 0) {\n validFragmentData.forEach(item => {\n Transforms.insertNodes(editor, item);\n });\n }\n // split node\n const path = TheTransforms.splitNode(editor, indivisibleTypes);\n Transforms.insertNodes(editor, invalidFragmentData, {\n at: Path.next(path)\n });\n });\n return;\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 if (isEmptyParagraph) {\n Transforms.delete(editor, { at: emptyPath });\n const lastPath = emptyPath.pop();\n Transforms.select(editor, [...emptyPath, lastPath + fragment.length - 1]);\n } else {\n const lastPath = emptyPath.pop();\n Transforms.select(editor, [...emptyPath, lastPath + fragment.length]);\n }\n AngularEditor.focus(editor);\n Transforms.collapse(editor, { edge: 'end' });\n });\n return;\n }\n }\n insertData(data);\n };\n\n return editor;\n};\n\nconst 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, isIndivisible } = item;\n if (!dataInfo[type]) {\n dataInfo[type] = {\n type,\n inValidChildrenTypes,\n isIndivisible\n };\n }\n dataInfo[type].inValidChildrenTypes = Array.from(new Set([...inValidChildrenTypes, ...dataInfo[type].inValidChildrenTypes]));\n });\n return dataInfo;\n};\n","import { Path, Node, Editor, Transforms, Element } from 'slate';\nimport { HistoryEditor } from 'slate-history';\nimport { HEADING_TYPES } from '../../constants';\nimport * as TheQueries from '../../queries';\n\nexport const withRemoveEmpty = (editor: Editor): Editor => {\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 (\n (isEmptyParagraph || isEmptyHeading) &&\n parentPath[parentPath.length - 1] > 0 &&\n Editor.isVoid(editor, Node.get(editor, Path.previous(parentPath)))\n ) {\n Transforms.delete(editor, { at: editor.selection.anchor.path.slice(0, editor.selection.anchor.path.length - 1) });\n return;\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 => 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","import { Editor, Range } from 'slate';\nimport { hotkeys, IS_SAFARI } from 'slate-angular';\nimport { BLOCK_DELETEBACKWARD_TYPES } from '../../constants';\nimport * as TheQueries from '../../queries';\n\nexport const withResetType = (editor: Editor): Editor => {\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_DELETEBACKWARD_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","import { Injectable, NgZone, ViewContainerRef } from '@angular/core';\nimport { fromEvent, Observable } from 'rxjs';\nimport { MarkTypes } from '../constants/node-types';\n\nexport interface TheContextOptions {\n width?: number;\n nativeElement: HTMLElement;\n viewContainerRef: ViewContainerRef;\n}\n\ninterface PaintFormatStatus {\n isActive: boolean;\n marks: { [key in MarkTypes]?: any };\n}\n\n@Injectable()\nexport class TheContextService {\n private options: TheContextOptions;\n\n fileList: { url: string; file: File }[] = [];\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 constructor(private ngZone: NgZone) {\n this.ngZone.runOutsideAngular(() => {\n this.onMouseUp$ = fromEvent<MouseEvent>(window, `mouseup`);\n this.onMouseMove$ = fromEvent<MouseEvent>(window, `mousemove`);\n this.onMouseDown$ = fromEvent<MouseEvent>(window, `mousedown`);\n });\n }\n\n public initialize(options: TheContextOptions) {\n this.options = options;\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 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 setUploadFileList(file: { url: string; file: File }) {\n this.fileList.push(file);\n }\n\n removeUploadImage(file: File) {\n this.fileList.splice(\n this.fileList.findIndex(item => item.file === file),\n 1\n );\n }\n}\n","import { Component, OnInit, ElementRef, ViewChild, OnDestroy, Inject, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { AngularEditor, BeforeContextChange, SlateElementContext } from 'slate-angular';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ImageEntry, THE_UPLOAD_SERVICE_TOKEN, TheImageUploaderService } from '../../interfaces/image';\nimport { Alignment, ElementKinds } from '../../constants/node-types';\nimport { HistoryEditor } from 'slate-history';\nimport { Transforms, Editor } from 'slate';\nimport { Subscription } from 'rxjs/internal/Subscription';\nimport { map } from 'rxjs/operators';\nimport { ThyUploadStatus } from 'ngx-tethys/uploader';\nimport { TheContextService } from '../../services/context.service';\nimport { TheBaseElementComponent } from '../../interfaces';\nimport { ImageElement } from '../../custom-types';\n\ndeclare const $: any;\n\n@Component({\n selector: 'the-image, [theImage]',\n templateUrl: './image.component.html'\n})\nexport class TheImageComponent\n extends TheBaseElementComponent<ImageElement, Editor>\n implements OnInit, OnDestroy, AfterViewInit, BeforeContextChange<SlateElementContext>\n{\n imageEntry: ImageEntry = {};\n\n uploading = false;\n\n percentage = 0;\n\n file: File;\n\n private uploadingSubscription: Subscription;\n\n private mouseMoveSubscription: Subscription;\n\n private mouseUpSubscription: Subscription;\n\n private dragable = false;\n\n @ViewChild('imageContent')\n imageContent: ElementRef;\n\n @ViewChild('img', { static: false })\n img: ElementRef;\n\n constructor(\n public elementRef: ElementRef,\n public sanitizer: DomSanitizer,\n @Inject(THE_UPLOAD_SERVICE_TOKEN)\n private imageUploaderService: TheImageUploaderService,\n public cdr: ChangeDetectorRef,\n private theContextService: TheContextService\n ) {\n super(elementRef, cdr);\n }\n\n beforeContextChange = (value: SlateElementContext<ImageElement>) => {\n if (value.element !== this.element && value.element.thumbUrl) {\n this.imageEntry = {\n name: value.element.name,\n width: value.element.width,\n height: value.element.height,\n thumbUrl: value.element.thumbUrl,\n originUrl: value.element.originUrl,\n align: value.element.align || Alignment.center\n };\n }\n };\n\n ngOnInit() {\n this.file = this.theContextService.fileList.find(item => item.url === this.element.url)?.file;\n if (this.file && this.file instanceof File) {\n this.uploadImage(this.file);\n }\n super.ngOnInit();\n }\n\n ngOnDestroy() {\n this.uploadingSubscription.unsubscribe();\n this.mouseUpSubscription.unsubscribe();\n super.ngOnDestroy();\n }\n\n ngAfterViewInit() {\n this.mouseUpSubscription = this.theContextService.onMouseUp$.subscribe(e => this.endDrag(e));\n this.uploadingSubscription = this.imageUploaderService\n .getUploadingItems$()\n .pipe(map(fileUploadingItem => this.file && fileUploadingItem.find(item => item.file === this.file)))\n .subscribe(uploadingItem => {\n if (!uploadingItem || !uploadingItem.result) {\n return;\n }\n this.percentage = uploadingItem.result.uploadFile.progress.percentage;\n if (uploadingItem.result.status === ThyUploadStatus.done) {\n this.uploading = false;\n this.uploadingSubscription.unsubscribe();\n }\n this.cdr.detectChanges();\n });\n }\n\n async uploadImage(file: File) {\n const { width, height } = await this.resolveImageSize(file, this.theContextService.getOptions().width);\n this.imageEntry = {\n height,\n width,\n thumbUrl: this.sanitizer.bypassSecurityTrustResourceUrl(URL.createObjectURL(file))\n };\n this.uploading = true;\n const [uploadFileEntity] = await this.imageUploaderService.uploadFileHandle([file]).toPromise();\n const path = AngularEditor.findPath(this.editor, this.element);\n const { thumbUrl, originUrl } = uploadFileEntity;\n const imageInfo: ImageEntry = {\n name: file.name,\n width: this.imageEntry.width,\n height: this.imageEntry.height,\n thumbUrl,\n originUrl,\n align: this.imageEntry.align || Alignment.center\n };\n HistoryEditor.withoutSaving(this.editor, () =>\n Transforms.setNodes(\n this.editor,\n {\n type: ElementKinds.image,\n url: null,\n ...imageInfo\n },\n { at: path }\n )\n );\n }\n\n private resolveImageSize(imageFile: File, maxSize: number): Promise<{ height: number; width: number }> {\n const image = new Image();\n return new Promise(resolve => {\n image.onload = () => {\n const imageHeight = image.height;\n const imageWidth = image.width;\n const ratio = imageWidth > maxSize ? imageWidth / maxSize : false;\n const height = ratio ? imageHeight / ratio : imageHeight;\n const width = ratio ? imageWidth / ratio : imageWidth;\n resolve({ height, width });\n };\n image.src = URL.createObjectURL(imageFile);\n });\n }\n\n startDrag(event: MouseEvent, axis: string) {\n event.preventDefault();\n this.dragable = true;\n const imgElement = this.img.nativeElement as HTMLImageElement;\n const options = {\n axis,\n printerPositionX: event.pageX,\n printerPositionY: event.pageY,\n internalWidth: this.imageEntry.width | imgElement.width,\n internalHeight: this.imageEntry.height | imgElement.height,\n maxWidth: this.theContextService.getOptions().width\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.dragable) {\n const { axis, printerPositionX, printerPositionY, internalWidth, internalHeight, maxWidth } = options;\n const isReversal = axis.includes('-');\n let offsetX = event.pageX - printerPositionX;\n let offsetY = event.pageY - printerPositionY;\n if (isReversal) {\n offsetX = -offsetX;\n offsetY = -offsetY;\n }\n if (this.element.align === 'center') {\n offsetX = offsetX * 2;\n }\n let { width, height } = this.element;\n if (axis.includes('x')) {\n width = offsetX + internalWidth;\n if (width >= maxWidth) {\n width = maxWidth;\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 this.imageContent.nativeElement.style.width = width + 'px';\n this.imageContent.nativeElement.style.height = height + 'px';\n this.imageEntry.width = width;\n this.imageEntry.height = height;\n }\n }\n\n endDrag(event: MouseEvent) {\n if (this.dragable) {\n this.dragable = false;\n this.mouseMoveSubscription.unsubscribe();\n Transforms.setNodes(\n this.editor,\n {\n type: ElementKinds.image,\n ...this.imageEntry\n },\n { at: this.selection }\n );\n }\n }\n\n cancelUpload(event) {\n Transforms.removeNodes(this.editor, { at: this.selection });\n }\n\n preview($event: Event) {\n if (this.readonly || this.isCollapsed) {\n $.fancybox.open([{ src: this.imageEntry.originUrl }]);\n }\n $event.stopPropagation();\n }\n}\n","<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>\n<div class=\"image-container\" contenteditable=\"false\" [style.textAlign]=\"imageEntry.align || 'center'\">\n <div\n #imageContent\n *ngIf=\"imageEntry.thumbUrl\"\n class=\"image-content\"\n [class.pointer]=\"!selection\"\n [ngStyle]=\"{ width: imageEntry.width + 'px', height: imageEntry.height + 'px' }\"\n >\n <img #img class=\"main-image\" [src]=\"imageEntry.thumbUrl\" [alt]=\"imageEntry.name\" />\n <div *ngIf=\"selection\" class=\"image-profile\" [class.outline]=\"selection\">\n <span *ngIf=\"isCollapsed\" (mousedown)=\"startDrag($event, '-xl')\" class=\"image-pointer left top\"></span>\n <span *ngIf=\"isCollapsed\" (mousedown)=\"startDrag($event, 'xl')\" class=\"image-pointer right top\"></span>\n <span *ngIf=\"isCollapsed\" (mousedown)=\"startDrag($event, 'xl')\" class=\"image-pointer right bottom\"></span>\n <span *ngIf=\"isCollapsed\" (mousedown)=\"startDrag($event, '-xl')\" class=\"image-pointer left bottom\"></span>\n </div>\n <div *ngIf=\"uploading\" 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 <div *ngIf=\"!uploading\" class=\"layer\" (mousedown)=\"preview($event)\" [class.readonly]=\"readonly\"></div>\n </div>\n <div *ngIf=\"!imageEntry.thumbUrl\" class=\"image-loading\" contenteditable=\"false\">\n <thy-icon thyIconName=\"image\"></thy-icon>\n </div>\n</div>\n","import { Editor, Transforms, Element } from 'slate';\nimport { TheContextService } from '../../services/context.service';\nimport { ElementKinds, ErrorCodes, PICTURE_ACCEPTED_UPLOAD_MIME, PICTURE_ACCEPTED_UPLOAD_SIZE } from '../../constants';\nimport * as TheQueries from '../../queries';\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.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 const text = { text: '' };\n for (const image of imageFiles) {\n const verify = ImageEditor.verifyImage(editor, image);\n if (verify) {\n const url = URL.createObjectURL(image);\n contextService.setUploadFileList({\n url,\n file: image\n });\n imageNodes.push({ type: ElementKinds.image, url, children: [text] });\n }\n }\n if (imageNodes.length > 0) {\n const at = editor.selection;\n Transforms.insertNodes(editor, imageNodes, { at });\n if (TheQueries.isCollapsed(editor.selection) && TheQueries.isEmptyParagraph(editor)) {\n Transforms.removeNodes(editor, { at });\n Transforms.select(editor, at);\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 if (image.size / 1000000 >= PICTURE_ACCEPTED_UPLOAD_SIZE) {\n editor.onError({\n code: ErrorCodes.IMAGE_ERR_SIZE_LIMIT\n });\n return false;\n }\n return true;\n },\n isImageActive(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};\n","import { Editor, Element } from 'slate';\nimport { ElementKinds } from '../../constants/node-types';\nimport { TheImageComponent } from './image.component';\nimport { ImageEditor } from './image.editor';\n\nexport const withImage = (editor: Editor): Editor => {\n const { insertData, isVoid, renderElement, isBlockCard } = editor;\n\n editor.isVoid = (element: Element) => {\n return element.type === ElementKinds.image || isVoid(element);\n };\n\n editor.insertData = (data: DataTransfer) => {\n if (data.files.length) {\n const imageFiles: File[] = [];\n for (const file of data.files as FileList) {\n if (['image/png', 'image/jpeg', 'image/gif', 'image/bmp'].includes(file.type)) {\n imageFiles.push(file);\n }\n }\n if (imageFiles.length) {\n return ImageEditor.insertImages(editor, imageFiles);\n }\n }\n insertData(data);\n };\n\n editor.renderElement = (element: Element) => {\n if (element.type === ElementKinds.image) {\n return TheImageComponent;\n }\n return renderElement(element);\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 return editor;\n};\n","import { Transforms, Range, Editor, Element } from 'slate';\nimport { CustomElementKinds } from '../../custom-types';\nimport { ElementKinds } from '../../constants';\nimport { TAB_SPACE } from '../../constants/default';\n\nexport const onKeydownIndent = (editor: Editor, event: KeyboardEvent, kinds: CustomElementKinds[]) => {\n const { selection } = editor;\n if (event.key === 'Tab') {\n event.preventDefault();\n const isExpanded = Range.isExpanded(selection);\n const nodes = Array.from(\n Editor.nodes<Element>(editor, {\n mode: 'highest',\n match: indentNodeMatch(kinds)\n })\n );\n const startBlock = nodes[0];\n if (startBlock && (isExpanded || Editor.isStart(editor, selection.anchor, [startBlock[1][0]]))) {\n if (!editor.isVoid(startBlock[0])) {\n if (event.shiftKey) {\n return cancelTextIntent(editor, startBlock[0], kinds);\n }\n let { textIndent } = startBlock[0];\n textIndent = textIndent ? textIndent : 0;\n textIndent += 2;\n if (textIndent < 50) {\n Transforms.setNodes(\n editor,\n { textIndent },\n {\n mode: 'highest',\n match: indentNodeMatch(kinds)\n }\n );\n return true;\n }\n }\n } else {\n editor.insertText(TAB_SPACE);\n return true;\n }\n }\n if (selection && Range.isCollapsed(selection) && event.key === 'Backspace') {\n const nodes = Array.from(\n Editor.nodes<Element>(editor, {\n mode: 'highest',\n match: indentNodeMatch(kinds)\n })\n );\n const startBlock = nodes[0];\n if (startBlock && Editor.isStart(editor, selection.anchor, [startBlock[1][0]])) {\n return cancelTextIntent(editor, startBlock[0], kinds);\n }\n }\n return false;\n};\n\nconst indentNodeMatch = (kinds: CustomElementKinds[]) => node => Element.isElement(node) && kinds.includes(node.type);\n\nfunction cancelTextIntent(editor: Editor, anchorBlock: Element, kinds: CustomElementKinds[]) {\n let { textIndent } = anchorBlock;\n if (textIndent > 2) {\n // prevent deleteBackward function\n event.preventDefault();\n textIndent -= 2;\n Transforms.setNodes(\n editor,\n { textIndent },\n {\n mode: 'highest',\n match: indentNodeMatch(kinds)\n }\n );\n return true;\n }\n if (textIndent === 2) {\n // prevent deleteBackward function\n event.preventDefault();\n Transforms.setNodes(\n editor,\n { textIndent: null },\n {\n mode: 'highest',\n match: node => Element.isElement(node) && kinds.includes(node.type)\n }\n );\n return true;\n }\n return false;\n}\n","import { Editor } from 'slate';\nimport { CustomElementKinds } from '../../custom-types';\nimport { onKeydownIndent } from './on-keydown-indent';\n\nexport const withIndent =\n (kinds: CustomElementKinds[]) =>\n <T extends Editor>(editor: T): T => {\n const { onKeydown } = editor;\n\n editor.onKeydown = (event: KeyboardEvent) => {\n const isContinue = !onKeydownIndent(editor, event, kinds);\n if (isContinue) {\n onKeydown(event);\n }\n };\n\n return editor;\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, Path, Point, Range } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { ElementKinds } from '../../../constants';\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 { ElementKinds } from '../../../constants';\n\nexport const getListTypes = () => {\n return [ElementKinds.bulletedList, ElementKinds.numberedList];\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 { 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 { 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 { Editor, Location, Element } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { ElementKinds } from '../../../constants';\nimport { ListItemElement } from '../../../custom-types';\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 { Editor } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { ElementKinds } from '../../../constants';\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 { NodeEntry, Ancestor, Node, Path, Transforms, Editor, Element } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { hasListInListItem } from '../queries/has-list-in-list-item';\nimport { getListItemEntry } from '../queries/get-list-item-entry';\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 { Ancestor, Editor, NodeEntry, Path, Transforms, Element } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { ElementKinds } from '../../../constants';\nimport { ListItemElement } from '../../../custom-types';\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, Path, Range, Transforms, Element } from 'slate';\nimport { ElementKinds } from '../../../constants';\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, insert a list item after and select it\n */\n Editor.withoutNormalizing(editor, () => {\n Transforms.insertNodes(\n editor,\n {\n type: ElementKinds.listItem,\n children: [{ type: ElementKinds.paragraph, children: [{ text: '' }] }]\n },\n { at: nextListItemPath }\n );\n Transforms.select(editor, nextListItemPath);\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 { Editor } from 'slate';\nimport * as TheTransforms from '../../../transforms';\nimport { ElementKinds } from '../../../constants/node-types';\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 { 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, NodeEntry, Path, Transforms, Element } from 'slate';\nimport { moveChildren } from '../../../transforms/move-children';\nimport { getListItemSublist } from '../queries/get-list-item-sublist';\nimport * as TheQueries from '../../../queries';\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, 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 { Editor, Transforms, Path, Node, NodeEntry, Element } 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 { normalizeNo } from './normalize-no';\nimport { isList } from '../queries/is-list';\nimport { TheHistoryEditor } from '../../common/history.plugin';\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 { Ancestor, Editor, NodeEntry, Path, Transforms } from 'slate';\nimport { getListTypes } from '../queries/get-list-types';\nimport { moveChildren } from '../../../transforms/move-children';\nimport * as TheQueries from '../../../queries';\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 { Editor } from 'slate';\nimport { moveListItemUp } from './transforms/move-list-item-up';\nimport { moveListItemDown } from './transforms/move-list-item-down';\nimport { getListItemEntry } from './queries/get-list-item-entry';\nimport * as TheQueries from '../../queries';\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 { Pipe, PipeTransform } from '@angular/core';\nimport { Element } from 'slate';\nimport { Alignment } from './constants/node-types';\n\n@Pipe({\n name: 'elementStyle'\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})\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","import { Component, OnInit, ElementRef, OnDestroy, ChangeDetectorRef, HostBinding } from '@angular/core';\nimport { Editor } from 'slate';\nimport { ElementClassPipe } from '../../../pipes';\nimport { NumberedListElement } from '../../../custom-types';\nimport { TheBaseElementComponent } from '../../../interfaces';\n\n@Component({\n selector: 'ol[theOl]',\n template: `<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>`,\n providers: [ElementClassPipe]\n})\nexport class TheNumberedListComponent extends TheBaseElementComponent<NumberedListElement, Editor> implements OnInit, OnDestroy {\n @HostBinding('attr.start')\n get start() {\n return this.element.start;\n }\n\n @HostBinding('class')\n get class() {\n return this.elementClassPipe.transform(this.element);\n }\n\n constructor(public elementRef: ElementRef, public cdr: ChangeDetectorRef, private elementClassPipe: ElementClassPipe) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","import { Component, OnInit, ElementRef, OnDestroy, ChangeDetectorRef, HostBinding } from '@angular/core';\nimport { Editor } from 'slate';\nimport { ElementClassPipe } from '../../../pipes';\nimport { BulletedListElement } from '../../../custom-types';\nimport { TheBaseElementComponent } from '../../../interfaces';\n\n@Component({\n selector: 'ul[theUl]',\n template: `<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>`,\n providers: [ElementClassPipe]\n})\nexport class TheBulletedListComponent extends TheBaseElementComponent<BulletedListElement, Editor> implements OnInit, OnDestroy {\n @HostBinding('class')\n get class() {\n return this.elementClassPipe.transform(this.element);\n }\n\n constructor(public elementRef: ElementRef, public cdr: ChangeDetectorRef, private elementClassPipe: ElementClassPipe) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","import { Component, OnInit, ElementRef, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { Editor, Element } from 'slate';\nimport { TheBaseElementComponent } from '../../../interfaces';\n\n@Component({\n selector: 'li[theLi]',\n template: `<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>`\n})\nexport class TheListItemComponent extends TheBaseElementComponent<Element, Editor> implements OnInit, OnDestroy {\n constructor(public elementRef: ElementRef, public cdr: ChangeDetectorRef) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n }\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 = (\n editor: Editor\n) => {\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};","import { Transforms, Node, Editor, Path, Ancestor, Element } from 'slate';\nimport { AngularEditor, getPlainText } from 'slate-angular';\nimport { CLIPBOARD_FORMAT_KEY, ElementKinds } from '../../constants';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\nimport { isList } from './queries/is-list';\nimport { isInList } from './queries/is-in-list';\nimport { isListNested } from './queries/is-list-nested';\nimport { getListTypes } from './queries/get-list-types';\nimport { getStartListItem } from './queries/get-start-list-item';\nimport { isSingleListItem } from './queries/is-single-list-item';\nimport { getListItemEntry } from './queries/get-list-item-entry';\nimport { hasListInListItem, hasStableListInListItem, hasStableListItem } from './queries/has-list-in-list-item';\nimport { isSelectionAtListItemStart } from './queries/is-selection-at-list-item-start';\nimport { insertListData } from './transforms/insert-list-data';\nimport { moveListItemUp } from './transforms/move-list-item-up';\nimport { insertListItem } from './transforms/insert-list-item';\nimport { unwrapList } from './transforms/unwrap-list';\nimport { moveListItemSublistItemsToListItemSublist } from './transforms/move-list-item-sublist-items-to-list-item-sublist';\nimport { getListNormalizer } from './normalizers/get-list-normalizer';\nimport { onKeyDownList } from './on-key-down-list';\nimport { WithListOptions } from './types';\nimport { TheNumberedListComponent } from './components/numbered-list.component';\nimport { TheBulletedListComponent } from './components/bulleted-list.component';\nimport { TheListItemComponent } from './components/list-item.component';\nimport { extractFragment } from '../../utils/fragment';\nimport { isSelectionInSameListItem } from './queries/is-selection-in-same-list-item';\n\nexport const withList =\n ({ validLiChildrenTypes }: WithListOptions = {}) =>\n (editor: Editor) => {\n const { insertBreak, deleteBackward, onKeydown, insertData, setFragmentData, renderElement } = editor;\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 = unit => {\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 const fragment = fragmentNodes.concat(fragmentData.slice(1));\n const domRange = AngularEditor.toDOMRange(editor, selection);\n const contents = domRange.cloneContents();\n const stringObj = JSON.stringify(fragment);\n const encoded = window.btoa(encodeURIComponent(stringObj));\n unit.setData(`application/${CLIPBOARD_FORMAT_KEY}`, encoded);\n const div = document.createElement('div');\n div.appendChild(contents);\n div.setAttribute('hidden', 'true');\n document.body.appendChild(div);\n unit.setData('text/html', div.innerHTML);\n unit.setData('text/plain', getPlainText(div));\n document.body.removeChild(div);\n return;\n }\n }\n setFragmentData(unit);\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 (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 // TODO: types\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.insertData = (data: DataTransfer) => {\n const text = data.getData('text/plain');\n const fragment = extractFragment(data);\n const aboveEntry = Editor.above(editor, {\n match: n => Editor.isBlock(editor, n) && n.type === ElementKinds.listItem\n });\n if (fragment) {\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;\n }\n }\n\n insertData(data);\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 TheNumberedListComponent;\n }\n if (element.type === ElementKinds.bulletedList) {\n return TheBulletedListComponent;\n }\n if (element.type === ElementKinds.listItem) {\n return TheListItemComponent;\n }\n return renderElement(element);\n };\n\n return editor;\n };\n","import { Element } from 'slate';\nimport { DOMElement } from 'slate-angular';\nimport { Alignment } from '../constants';\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+)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.offsetWidth;\n}\n\nexport function getElementHeight(element: HTMLElement) {\n return Math.round(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 useElementStyle(el: HTMLElement, element: Element) {\n if (element.align) {\n el.style.textAlign = (element.align as string) || Alignment.left;\n }\n\n if (element.textIndent) {\n el.style.textIndent = element.textIndent + 'em';\n }\n\n if (element.verticalAlign) {\n el.style.verticalAlign = element.verticalAlign;\n }\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","import { Component, ElementRef, HostBinding, ChangeDetectorRef, OnInit } from '@angular/core';\nimport { Editor, Element } from 'slate';\nimport * as TheTransforms from '../../transforms';\nimport { TheBaseElementComponent } from '../../interfaces';\nimport { TodoItemElement } from '../../custom-types';\nimport { getElementClassByPrefix } from '../../utils/dom';\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 <slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>\n `\n})\nexport class TheTodoItemComponent extends TheBaseElementComponent<TodoItemElement, Editor> implements OnInit {\n checked: boolean;\n\n @HostBinding('class.the-check-item') checkItemClass = true;\n\n constructor(public elementRef: ElementRef, public cdr: ChangeDetectorRef) {\n super(elementRef, cdr);\n }\n\n onContextChange() {\n super.onContextChange();\n if (this.initialized) {\n this.useIndentClass(this.elementRef.nativeElement, this.element);\n }\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.useIndentClass(this.elementRef.nativeElement, this.element);\n }\n\n onCheck(checked: boolean) {\n if (this.readonly) {\n return false;\n }\n TheTransforms.setNode(this.editor, { checked }, this.element);\n }\n\n useIndentClass(el: HTMLElement, element: Element) {\n const prefix = 'indent';\n if (element.textIndent) {\n const oldClass = getElementClassByPrefix(el, prefix);\n if (oldClass) {\n el.classList.remove(oldClass);\n }\n const newClassName = `${prefix}-${element.textIndent}`;\n el.classList.add(newClassName);\n } else {\n const oldClass = getElementClassByPrefix(el, prefix);\n if (oldClass) {\n el.classList.remove(oldClass);\n }\n }\n }\n}\n","import { Transforms, Range, Editor, Element, Descendant } from 'slate';\nimport { ElementKinds } from '../../constants';\nimport * as TheQueries from '../../queries';\nimport { TheTodoItemComponent } from './todo-item.component';\n\nexport const withTodoItem = (editor: Editor): Editor => {\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\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 TheTodoItemComponent;\n }\n return renderElement(element);\n };\n\n return editor;\n};\n","import { Component, ElementRef, ChangeDetectorRef, AfterViewInit } from '@angular/core';\nimport { Editor, Element } from 'slate';\nimport { TheBaseElementComponent } from '../../interfaces';\n\n@Component({\n selector: 'the-hr, [theHr]',\n template: `\n <div class=\"the-hr\" contenteditable=\"false\" [ngClass]=\"{ active: selection }\">\n <hr class=\"the-hr\" />\n <slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>\n </div>\n `\n})\nexport class TheHrComponent extends TheBaseElementComponent<Element, Editor> implements AfterViewInit {\n constructor(public elementRef: ElementRef, public cdr: ChangeDetectorRef) {\n super(elementRef, cdr);\n }\n\n ngAfterViewInit() {\n setTimeout(() => {\n const blockCardElement = this.nativeElement.closest('slate-block-card');\n if (blockCardElement) {\n blockCardElement.classList.add(`slate-block-card-${this.element.type}`);\n }\n });\n }\n}\n","import { Editor, Element } from 'slate';\nimport { ElementKinds } from '../../constants';\nimport { TheHrComponent } from './hr.component';\n\nexport const withHr = (editor: Editor): Editor => {\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 TheHrComponent;\n }\n return renderElement(element);\n };\n\n return editor;\n};\n","import { Editor, Transforms } from 'slate';\nimport * as TheQueries from '../../queries';\nimport { Alignment } from '../../constants';\nimport { TheElement } from '../../custom-types';\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) as TheElement;\n const isVoid = 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","import { Editor, Transforms, Range } from 'slate';\nimport { ElementKinds } from '../../constants';\nimport * as TheQueries from '../../queries';\n\nexport const withHeading = (editor: Editor): Editor => {\n const { insertBreak } = editor;\n\n editor.insertBreak = () => {\n const { selection } = editor;\n const anchorBlock = TheQueries.getAnchorBlockEntry(editor);\n if (anchorBlock && Range.isCollapsed(selection) && anchorBlock[0].type.startsWith('heading')) {\n if (Editor.isStart(editor, selection.anchor, anchorBlock[1])) {\n insertBreak();\n Transforms.setNodes(\n editor,\n { type: ElementKinds.paragraph },\n {\n at: selection\n }\n );\n return;\n }\n if (Editor.isEnd(editor, selection.focus, anchorBlock[1])) {\n insertBreak();\n Transforms.setNodes(editor, { type: ElementKinds.paragraph });\n return;\n }\n }\n insertBreak();\n };\n\n return editor;\n};\n","import { Editor, Range, Text, Transforms } from 'slate';\nimport { ZERO_WIDTH_CHAR } from '../../constants';\nimport { MarkEditor } from './mark.editor';\n\nexport const withMark =\n () =>\n <T extends Editor>(editor: T) => {\n const e = editor as T & MarkEditor;\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 === ZERO_WIDTH_CHAR) {\n Transforms.unsetNodes(e, key, { at: selection.anchor.path });\n }\n if (text !== ZERO_WIDTH_CHAR && text !== '') {\n e.insertText(ZERO_WIDTH_CHAR);\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 === ZERO_WIDTH_CHAR) {\n Transforms.setNodes(e, { [key]: value }, { at: selection.anchor.path });\n }\n if (text !== ZERO_WIDTH_CHAR && text !== '') {\n e.insertText(ZERO_WIDTH_CHAR);\n }\n }\n }\n };\n\n return e;\n };\n","import { NodeEntry, Element, Node, Editor, Operation, Descendant } from 'slate';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\nimport { QueryOptions } from '../../interfaces';\nimport { _ } from '../../utils/lodash';\nimport { deleteElementKey } from '../../utils/fragment';\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 =\n ({ idKey = 'id', idCreator = () => Date.now(), filterText = true, filter = () => true }: WithNodeIDProps = {}) =>\n <T extends Editor>(e: T) => {\n const editor = e as T & { removedIDs: Set<any> };\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","import { Editor, Location, Transforms, Node } 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 } as Node, { match: n => Editor.isBlock(editor, n) });\n } else {\n format(editor, markups);\n }\n};\n","import { Range, Transforms } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { MarkEditor } from '../../../plugins/mark/mark.editor';\n\nexport const autoFormatInline = (\n editor: MarkEditor,\n {\n type,\n between,\n markup,\n ignoreTrim\n }: {\n type: string;\n between?: string[];\n markup?: string;\n ignoreTrim?: boolean;\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\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 const startMarkupPointBefore = TheQueries.getPointBefore(editor, selection, {\n matchString: startMarkup,\n skipInvalid: true\n });\n Transforms.delete(editor, {\n at: {\n anchor: startMarkupPointBefore,\n focus: startMarkupPointAfter\n }\n });\n\n return true;\n};\n","import { Editor, Range } from 'slate';\nimport * as TheQueries from '../../queries';\nimport { castArray } from '../../utils/cast-array';\nimport { WithAutoFormatOptions } from '../../interfaces/auto-format';\nimport { autoFormatBlock } from './transforms/auto-format-block';\nimport { autoFormatInline } from './transforms/auto-format-inline';\n\nexport const withAutoFormat =\n ({ rules }: WithAutoFormatOptions) =>\n <T extends Editor>(editor: T) => {\n const { insertText } = editor;\n\n editor.insertText = text => {\n if (!TheQueries.isCollapsed(editor.selection)) {\n return insertText(text);\n }\n\n for (const { query, ...rule } of rules) {\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 => 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 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","import { Editor, Transforms } from 'slate';\n\ntype Params = Parameters<typeof Transforms.insertNodes>;\n\nexport interface TransformEditor {\n insertNodes: (nodes: Params[1], options?: Params[2]) => void;\n}\n\nexport const withTransforms =\n () =>\n <T extends Editor>(editor: T) => {\n const e = editor as T & TransformEditor;\n\n e.insertNodes = (nodes, options) => {\n try {\n Transforms.insertNodes(editor, nodes, options);\n } catch (err) {}\n };\n\n return e;\n };\n","import { Editor, Path, Element, Node } from 'slate';\nimport { QueryOptions } from '../../interfaces';\nimport { ElementKinds } from '../../constants';\nimport { TransformEditor } from '../common/transforms.plugin';\nimport * as TheQueries from '../../queries';\nimport { CustomElementKinds } from '../../custom-types';\n\nexport interface WithTrailingNode extends QueryOptions {\n type?: CustomElementKinds;\n level?: number;\n}\n\nexport const withTrailingNode =\n ({ type = ElementKinds.paragraph, level = 1, ...query }: WithTrailingNode = {}) =>\n <T extends Editor & TransformEditor>(editor: T) => {\n const { normalizeNode } = editor;\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 editor.insertNodes(\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","import { Editor, Node, Range, Path, Transforms } from 'slate';\nimport { HistoryEditor } from 'slate-history';\nimport { AngularEditor, hotkeys, hasBlockCard, isCardLeft, FAKE_RIGHT_BLOCK_CARD_OFFSET } from 'slate-angular';\nimport * as TheTransforms from '../../transforms';\nimport * as TheQueries from '../../queries';\nimport { createEmptyParagraph } from '../../utils/create-empty-paragraph';\nimport { insertParagraph } from '../../transforms/insert-paragraph';\n\nexport const withBlockCard = (editor: Editor): Editor => {\n const { insertBreak, deleteBackward, onKeydown, deleteForward, insertData, insertText } = 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 return editor;\n};\n","import { Editor, Transforms, Range } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport * as TheQueries from '../../queries';\nimport { timer } from 'rxjs';\n\nexport const withMoveSelection = (editor: Editor) => {\n const { onClick, deleteBackward } = 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);\n const isNextStart = slateSelection.focus.offset === 0;\n\n if (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 return;\n }\n }\n onClick(event);\n };\n\n editor.deleteBackward = unit => {\n const { selection } = editor;\n const inlineBlockEntry = Editor.above(editor, {\n match: n => Editor.isInline(editor, n)\n });\n // fix deleteBackward on the start of inline block\n // deleteBackward logic bug\n if (inlineBlockEntry && !Editor.isVoid(editor, inlineBlockEntry[0]) && selection.anchor.offset === 0) {\n const beforePoint = TheQueries.getPointBefore(editor, selection.focus);\n Transforms.select(editor, beforePoint);\n }\n deleteBackward(unit);\n };\n\n return editor;\n};\n","import { Editor, Node, Element } from 'slate';\nimport * as TheQueries from '../../queries';\nimport { CustomElementKinds } from '../../custom-types';\n\nexport const withGetFragment =\n (elementKinds: CustomElementKinds[] = []) =>\n <T extends Editor>(editor: T) => {\n const { getFragment } = editor;\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","import { ElementKinds } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport { TodoItemEditor } from './todo-item.editor';\n\nexport const TodoItemOptions: ToolbarItem[] = [\n {\n key: ElementKinds.checkItem,\n icon: 'list-check',\n name: '待办事项',\n execute: editor => TodoItemEditor.insertTodoItem(editor),\n active: editor => TodoItemEditor.isActive(editor)\n }\n];\n","import { InjectionToken } from '@angular/core';\nimport { ComponentType } from 'slate-angular';\nimport { TheBaseElementComponent } from '../../interfaces/view-base';\nimport { ElementKinds } from '../../constants/node-types';\nimport type { TheTableComponent } from './components/table.component';\n\nexport const TheTableToken = new InjectionToken<ComponentType<TheTableComponent>>('the-Table-token');\n\nexport interface TheTableComponentBase extends TheBaseElementComponent {\n initializeColumns: () => void;\n transformColumnsWidth: () => void;\n initializeRows: () => void;\n transformRowHeight: () => 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\n\nexport interface TheTableColumn {\n width: number;\n}\n\nexport interface MenuEntity {\n icon: string;\n name: string;\n key: string;\n divider?: boolean;\n extendIcon?: string;\n invisibility?: boolean;\n backgroundColor?: string;\n actionHandle: (entity: MenuEntity) => void;\n activeHandle?: (event: MouseEvent) => void;\n deactiveHandle?: (event: MouseEvent) => void;\n}\n\nexport interface SelectedCell {\n row: number;\n col: number;\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 = 41;\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","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 rowNodes[0].header = true;\n return {\n type: opts.typeTable,\n children: rowNodes\n };\n}\n","import { Node, Path, NodeEntry, Element } from 'slate';\nimport { TableCellElement, TableElement } from '../../../custom-types';\nimport { SelectedCell, 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(): Element {\n if (!this.rowEntry) {\n throw new Error('Not in a row');\n }\n return this.rowEntry[0];\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 const { table } = this;\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 const { table } = this;\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: SelectedCell): TableCellElement {\n return this.table.children[cell.row].children[cell.col] as TableCellElement;\n }\n}\n","import { Node, Range } from 'slate';\nimport { TableOptions } from '../table.types';\nimport { TablePosition } from './table-position';\n\n/**\n * True if the given range is inside one table\n */\nexport function isRangeInTable(opts: TableOptions, node: Node, range: Range): boolean {\n const { anchor, focus } = range;\n const startPosition = TablePosition.create(opts, node, anchor.path);\n const endPosition = TablePosition.create(opts, node, 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 { TableOptions } from '../table.types';\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","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 { TableElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\n\nexport function addColumns(table: TableElement, columnsCount: number, insertIndex?: number) {\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 for (let i = 0; i < columnsCount - table.columns.length; i++) {\n columns.splice(insertIndex, 0, { width: opts.defaultWidth });\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 = Math.round(column.width * percentage > opts.minWidthPx ? column.width * percentage : opts.minWidthPx);\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';\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 = TablePosition.create(opts, editor, path);\n const { table, tableEntry } = tablePosition;\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 if (table.columns) {\n Transforms.setNodes(editor, { columns: addColumns(table, table.columns.length + 1, insertColumnIndex) }, { 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 { Editor, Element, Transforms } from 'slate';\nimport { TableRowElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\nimport { TablePosition, createRow } from '../utils';\nimport { calcSpanForRow } from '../utils/calc-span';\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 tablePosition = TablePosition.create(opts, editor, editor.selection.anchor.path);\n const { table, row } = tablePosition;\n\n // Create a new row with the right count of cells\n const columns = (table.children[0].children as Element[]).length;\n const newRows: TableRowElement[] = [];\n\n const rowIndex = tablePosition.getRowIndex();\n const insertRowIndex = typeof at === 'undefined' ? rowIndex + 1 : at;\n\n for (let i = 0; i < count; i++) {\n const newRow = createRow(opts, columns);\n newRows.push(newRow);\n }\n\n if (newRows.length === 1) {\n const rowspan = calcSpanForRow(table, insertRowIndex);\n newRows[0].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: tablePosition.tableEntry[1].concat(table.children.indexOf(dirtyRow)).concat(columnIndex)\n }\n );\n }\n }\n });\n }\n\n Transforms.insertNodes(editor, newRows, {\n at: tablePosition.tableEntry[1].concat(insertRowIndex)\n });\n}\n","import * as TheTransforms from '../../../transforms';\nimport { Editor, Node, Transforms } from 'slate';\nimport { TheEditor } from '../../../interfaces/editor';\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 columns: number = 3,\n rows: 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.insertElement(editor, table);\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 { 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: item.width + Math.round(addWidth) };\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';\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 = TablePosition.create(opts, 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 { Editor, Element, Transforms } from 'slate';\nimport { TableCellElement, TableRowElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\nimport { TablePosition } from '../utils';\nimport { clearCell } from './clear-cell';\n\nexport function removeRow(opts: TableOptions, editor: Editor, selectRowIndex?: number) {\n const { selection } = editor;\n const {\n anchor: { path }\n } = selection;\n\n const tablePosition = TablePosition.create(opts, editor, path);\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 { 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 { TablePosition } from '../utils';\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 = TablePosition.create(opts, editor, path);\n const {\n table,\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, NodeEntry, Transforms, Text, Path, Range, Node } from 'slate';\nimport { TableOptions } from './table.types';\nimport { Alignment, ALIGN_BLOCK_TYPES, ElementKinds, MarkProps, MarkTypes, VerticalAlignment } from '../../constants/node-types';\nimport { insertColumn } from './transforms/insert-column';\nimport { insertRow } from './transforms/insert-row';\nimport { insertTable } from './transforms/insert-table';\nimport { removeColumn } from './transforms/remove-column';\nimport { removeRow } from './transforms/remove-row';\nimport { removeTable } from './transforms/remove-table';\nimport { clearCell } from './transforms/clear-cell';\nimport { getAboveByType } from '../../queries/get-above-by-type';\nimport { AngularEditor, ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport type { TheTableComponent } from './components/table.component';\nimport { TheEditor } from '../../interfaces';\nimport { TableCellElement, TableRowElement } from '../../custom-types';\nimport * as TheTransforms from '../../transforms';\nimport { TableElement } from '../../custom-types';\nimport { getOriginCell } from './utils/calc-span';\n\nexport const TableEditor = {\n insertTable(editor: Editor, optionsParam?: TableOptions) {\n const opts = new TableOptions(optionsParam);\n insertTable(opts, editor);\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 insertRow(editor: Editor, count: number = 1, at?: number, optionsParam?: TableOptions) {\n const opts = new TableOptions(optionsParam);\n insertRow(opts, editor, count, at);\n },\n removeTable(editor: Editor, optionsParam?: TableOptions) {\n const opts = new TableOptions(optionsParam);\n removeTable(opts, editor);\n },\n removeRow(editor: Editor, rowIndex?: number, optionsParam?: TableOptions) {\n const opts = new TableOptions(optionsParam);\n removeRow(opts, editor, rowIndex);\n },\n removeColumn(editor: Editor, colIndex?: number, optionsParam?: TableOptions) {\n const opts = new TableOptions(optionsParam);\n removeColumn(opts, editor, colIndex);\n },\n clearCell(editor: Editor, nodeEntry?: NodeEntry<Element>, optionsParam?: TableOptions) {\n const opts = new TableOptions(optionsParam);\n clearCell(opts, editor, nodeEntry);\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 getSelectedCells(editor: Editor) {\n const tableNode = getAboveByType(editor, ElementKinds.table);\n if (tableNode) {\n const tableComponent = ELEMENT_TO_COMPONENT.get(tableNode[0]) as TheTableComponent;\n const cells = tableComponent.tableStore.selectedCells;\n if (cells.length > 0) {\n return cells;\n }\n }\n return null;\n },\n isAlignActive(editor: TheEditor, alignment: Alignment) {\n const cells = TableEditor.getSelectedCells(editor);\n if (cells) {\n const lastCell = cells[cells.length - 1];\n const tableNode = getAboveByType(editor, ElementKinds.table);\n const cellPath = [...tableNode[1], lastCell.row, lastCell.col];\n const cell = Node.get(editor, cellPath) as TableCellElement;\n const { align } = cell;\n if (!align && alignment === Alignment.left) {\n return true;\n }\n return align === alignment;\n }\n return null;\n },\n setAlign(editor: Editor, alignment: Alignment) {\n return TableEditor.handleSelectedCells(editor, (cellPath, cellRange) => {\n Transforms.setNodes(\n editor,\n { align: alignment },\n {\n at: cellPath\n }\n );\n Transforms.setNodes(\n editor,\n { align: undefined },\n {\n at: cellRange,\n match: (n: Element) => ALIGN_BLOCK_TYPES.includes(n.type)\n }\n );\n });\n },\n setVerticalAlign(editor: TheEditor, alignment: VerticalAlignment) {\n const isSelected = TableEditor.handleSelectedCells(editor, cellPath => {\n Transforms.setNodes(editor, { verticalAlign: alignment }, { at: cellPath });\n });\n if (!isSelected) {\n const cellEntry = 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 isVerticalAlignActive(editor: TheEditor, alignment: VerticalAlignment) {\n const cells = TableEditor.getSelectedCells(editor);\n if (cells) {\n const lastCell = cells[cells.length - 1];\n const tableNode = 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 = 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 toggleMark(editor: TheEditor, isActive: boolean, format: string | string[], value: string | 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 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 handleSelectedCells(editor: TheEditor, handle: (cellPath: Path, cellRange: Range) => void) {\n const cells = TableEditor.getSelectedCells(editor);\n if (cells) {\n const tableNode = getAboveByType(editor, ElementKinds.table);\n Editor.withoutNormalizing(editor, () => {\n for (const cell of cells) {\n const { row, col } = cell;\n const cellPath = [...tableNode[1], row, col];\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 isActiveHeader(editor: TheEditor) {\n const [tableRowEntry] = Editor.nodes(editor, { match: (n: Element) => n.type === ElementKinds.tableRow });\n return tableRowEntry && tableRowEntry[0] && (tableRowEntry[0] as TableRowElement).header;\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","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 { CONTROL_KEY } from '../../utils';\nimport { MarkTypes } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport { MarkEditor } from './mark.editor';\n\nexport const MarkOptions: ToolbarItem[] = [\n {\n key: MarkTypes.bold,\n icon: 'bold',\n name: '加粗',\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: '斜体',\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: '删除线',\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: '下划线',\n shortcutKey: `${CONTROL_KEY}+U`,\n execute: editor => MarkEditor.toggleMark(editor, MarkTypes.underline),\n active: editor => MarkEditor.isMarkActive(editor, MarkTypes.underline)\n },\n {\n key: MarkTypes.codeLine,\n icon: 'code',\n name: '行内代码',\n shortcutKey: `${CONTROL_KEY}+E`,\n execute: editor => MarkEditor.toggleMark(editor, MarkTypes.codeLine),\n active: editor => MarkEditor.isMarkActive(editor, MarkTypes.codeLine)\n }\n];\n","import { ElementKinds } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport { ListEditor } from './list.editor';\n\nexport const ListOptions: ToolbarItem[] = [\n {\n key: ElementKinds.numberedList,\n icon: 'list-ordered',\n name: '有序列表',\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: '无序列表',\n execute: editor => ListEditor.toggleList(editor, ElementKinds.bulletedList),\n active: editor => ListEditor.isActive(editor, ElementKinds.bulletedList)\n }\n];\n","import { ElementKinds } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport { ImageEditor } from './image.editor';\n\nexport const ImageOptions: ToolbarItem[] = [\n {\n key: ElementKinds.image,\n icon: 'image',\n name: '图片',\n execute: editor => ImageEditor.openUpload(editor),\n active: editor => ImageEditor.isImageActive(editor)\n }\n];\n","import { Editor } from 'slate';\nimport { ElementKinds } from '../../constants/node-types';\nimport * as TheTransforms from '../../transforms';\n\nexport const HrEditor = {\n insertHr(editor: Editor) {\n TheTransforms.insertElement(editor, { type: ElementKinds.hr, children: [{ text: '' }] });\n }\n};\n","import { ElementKinds } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { HrEditor } from './hr.editor';\n\nexport const HrOptions: ToolbarItem[] = [\n {\n key: ElementKinds.hr,\n icon: 'horizontal-line',\n name: '分割线',\n active: editor => TheQueries.isBlockActive(editor, ElementKinds.hr),\n execute: editor => HrEditor.insertHr(editor)\n }\n];\n","import { Editor, Transforms, Element } from 'slate';\nimport { ElementKinds } from '../../constants/node-types';\nimport { HeadingElementKinds } from '../../public-api';\n\nexport const HeadingEditor = {\n setHeading(editor: Editor, heading: HeadingElementKinds) {\n Editor.withoutNormalizing(editor, () => {\n const types = [ElementKinds.bulletedList, ElementKinds.numberedList, ElementKinds.listItem];\n Transforms.unwrapNodes(editor, {\n at: editor.selection,\n match: n => Element.isElement(n) && types.includes(n.type as any),\n mode: 'all',\n split: true\n });\n Transforms.setNodes(editor, { type: heading });\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};\n","import { Transforms } from 'slate';\nimport { ElementKinds, STANDARD_HEADING_TYPES } from '../../constants/node-types';\nimport { ToolbarItem, ToolbarItemType } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { HeadingEditor } from './heading.editor';\n\nexport const HeadingOptions: ToolbarItem[] = [\n {\n name: '正文',\n key: ElementKinds.headingList,\n type: ToolbarItemType.toolDropdown,\n includes: [ElementKinds.paragraph, ...STANDARD_HEADING_TYPES]\n },\n {\n key: ElementKinds.paragraph,\n name: '正文',\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: '标题1',\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: '标题2',\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: '标题3',\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: '标题4',\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","import { ElementKinds } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { BlockquoteEditor } from './blockquote.editor';\n\nexport const BlockquoteOptions: ToolbarItem[] = [\n {\n key: ElementKinds.blockquote,\n icon: 'blockquote',\n name: '引用',\n active: editor => TheQueries.isBlockActive(editor, ElementKinds.blockquote),\n execute: editor => BlockquoteEditor.toggleBlockquote(editor)\n }\n];\n","import { Editor, Transforms, Element } from 'slate';\nimport * as TheQueries from '../../queries';\nimport { Alignment, ALIGN_BLOCK_TYPES, ElementKinds } from '../../constants/node-types';\nimport { TableEditor } from '../table/table.editor';\n\nexport const AlignEditor = {\n isActive(editor: Editor, alignment: Alignment) {\n if (!editor?.selection) {\n return;\n }\n const tableCellAlign = TableEditor.isAlignActive(editor, alignment);\n if (tableCellAlign !== null) {\n return tableCellAlign;\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 setAlign(editor: Editor, alignment: Alignment) {\n if (TableEditor.setAlign(editor, alignment)) {\n return;\n }\n const props = {\n align: alignment\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 { DropdownMode } from '../../constants';\nimport { Alignment, ToolbarActionTypes } from '../../constants/node-types';\nimport { ToolbarItem, ToolbarItemType } from '../../interfaces';\nimport { AlignEditor } from './align.editor';\n\nexport const AlignOptions: ToolbarItem[] = [\n {\n key: ToolbarActionTypes.alignType,\n type: ToolbarItemType.toolDropdown,\n dropdownMode: DropdownMode.icon,\n includes: [ToolbarActionTypes.alignLeft, ToolbarActionTypes.alignCenter, ToolbarActionTypes.alignRight],\n name: '对齐方式'\n },\n {\n key: ToolbarActionTypes.alignLeft,\n icon: 'align-left',\n name: '左对齐',\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: '居中',\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: '右对齐',\n execute: editor => AlignEditor.setAlign(editor, Alignment.right),\n active: editor => AlignEditor.isActive(editor, Alignment.right)\n }\n];\n","import { Component, ElementRef, ChangeDetectorRef } from '@angular/core';\nimport { Editor, Element } from 'slate';\nimport { TheBaseElementComponent } from '../../interfaces';\n\n@Component({\n selector: 'blockquote[theBlockquote]',\n template: `<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>`\n})\nexport class TheBlockquoteComponent extends TheBaseElementComponent<Element, Editor> {\n constructor(public elementRef: ElementRef, public cdr: ChangeDetectorRef) {\n super(elementRef, cdr);\n }\n}\n","import { Editor, Element, Transforms } from 'slate';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\nimport { ElementKinds } from '../../constants/node-types';\nimport { TheBlockquoteComponent } from './blockquote.component';\nimport { createEmptyParagraph } from '../../utils';\n\nexport const withBlockquote = (editor: Editor): Editor => {\n const { renderElement, deleteBackward, insertBreak, isContainer } = editor;\n\n editor.renderElement = (element: Element) => {\n if (element.type === ElementKinds.blockquote) {\n return TheBlockquoteComponent;\n }\n return renderElement(element);\n };\n\n editor.deleteBackward = unit => {\n const aboveResult = Editor.above<Element>(editor, {\n match: 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 => 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","export type ColorType = string;\n\nexport const Colors = [\n '#FFFFFF',\n '#333333',\n '#FF0100',\n '#FFDA00',\n '#A4E143',\n '#38D9F0',\n '#4EA8EE',\n '#9570E7',\n '#F3F3F3',\n '#CCCCCC',\n '#FEF3F1',\n '#FEFCDA',\n '#EDF6E8',\n '#E6FBFA',\n '#EBF4FC',\n '#F1EDF7',\n '#DDDDDD',\n '#A5A5A5',\n '#FCD5D0',\n '#F9EDA6',\n '#D4E9D7',\n '#C8E6EA',\n '#CCE0F2',\n '#DAD6EA',\n '#888888',\n '#494949',\n '#EE7976',\n '#E7B323',\n '#99C191',\n '#79C6CE',\n '#6EAAD7',\n '#9D8EC2',\n '#41464C',\n '#000000',\n '#BF1A1E',\n '#AD720E',\n '#1C7232',\n '#1C7892',\n '#18439D',\n '#521B78'\n];\n\nexport const BackgroundColors = [\n '#FFFFFF',\n '#FACCCC',\n '#FFEBCC',\n '#FFFFCC',\n '#CDE8CC',\n '#CCE0F5',\n '#EBD6FF',\n '#F3F3F3',\n '#F06665',\n '#FFC266',\n '#FFFF66',\n '#66B966',\n '#66A3E0',\n '#C285FF'\n];\n\nexport const SpecialTextColor = '#333333';\n\nexport const SpecialBackgroundColor = '#FFFFFF';\n\nexport const TableHeaderBackgroundColor = '#F3F3F3';\n\nexport interface ColorSelectOption {\n showCustom?: boolean;\n perRowColorNumbers: number;\n rowOptions: {\n [rowNumber: number]: string; // 设置每行选中的颜色\n };\n specialColor?: string;\n}\n","import { Component, OnInit, Input, ChangeDetectionStrategy, HostListener } from '@angular/core';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { ColorType, ColorSelectOption } from '../../constants/color-select';\n\n@Component({\n selector: 'the-color-select',\n templateUrl: 'color-select.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheColorSelectComponent implements OnInit {\n @Input() selectedColor: string;\n\n @Input() selectAction: (color: ColorType) => void;\n\n @Input() showCustom = true;\n\n @Input() colors: string[];\n\n @Input() option: ColorSelectOption;\n\n color: string;\n\n customColor: string;\n\n selectColors: { rowValue: { value: string; classMaps: object }[]; tickColor: string }[] = [];\n\n @HostListener('document: mousedown', ['$event'])\n handleDocumentMouseDown(event: MouseEvent) {\n if (!document.querySelector('.color-container').contains(event.target as HTMLElement)) {\n this.popoverRef.close();\n }\n }\n\n constructor(private popoverRef: ThyPopoverRef<TheColorSelectComponent>) {}\n\n ngOnInit() {\n if (this.selectedColor) {\n this.customColor = this.selectedColor.slice(1);\n }\n this.buildColors();\n }\n\n @HostListener('mousedown', ['$event'])\n handleMouseDown(event: MouseEvent) {\n event.stopPropagation();\n }\n\n @HostListener('keydown', ['$event'])\n handleKeydown(event: MouseEvent) {\n event.stopPropagation();\n }\n\n buildColors() {\n const rows = parseInt((this.colors.length / this.option.perRowColorNumbers).toFixed(0), 10);\n for (let i = 0; i < rows; i++) {\n this.selectColors.push({\n rowValue: [\n ...this.colors.slice(i * this.option.perRowColorNumbers, (i + 1) * this.option.perRowColorNumbers).map(color => {\n return {\n value: color,\n classMaps: {\n selected: color === this.selectedColor,\n white: color === '#FFFFFF',\n 'mr-0': i === this.option.perRowColorNumbers - 1,\n 'mb-0': i === this.selectColors.length - 1,\n 'special-color': color === this.option.specialColor\n }\n };\n })\n ],\n tickColor: this.option.rowOptions && this.option.rowOptions[i + 1]\n });\n }\n }\n\n _selectColor(event: MouseEvent, color: string) {\n event.preventDefault();\n event.stopPropagation();\n if (this.option.specialColor && color === this.option.specialColor) {\n color = '';\n }\n this.selectedColor = color;\n this.selectAction(this.selectedColor);\n this.popoverRef.close();\n }\n\n colorChange(isEnter: boolean) {\n this.customColor = this.customColor.toLocaleUpperCase();\n this.selectedColor = '#' + this.customColor;\n if (this.customColor.length === 3) {\n this.selectedColor = '#' + this.customColor.replace(/(.)/g, '$1$1');\n }\n if (this.selectedColor.length === 7 && this.selectedColor !== this.option.specialColor) {\n this.selectColors = [];\n this.buildColors();\n }\n if (isEnter) {\n this.selectAction(this.selectedColor);\n this.popoverRef.close();\n }\n }\n customInputColorEnter(event: KeyboardEvent) {\n event.stopPropagation();\n this.selectAction(this.selectedColor);\n this.popoverRef.close();\n }\n}\n","<div class=\"color-container\">\n <div class=\"colors\">\n <div *ngFor=\"let row of selectColors; let rowIndex = index\">\n <span\n class=\"color-item\"\n *ngFor=\"let _color of row.rowValue; let i = index\"\n [ngClass]=\"_color.classMaps\"\n (mousedown)=\"_selectColor($event, _color.value)\"\n >\n <span [ngStyle]=\"{ background: _color.value }\">\n <thy-icon thyIconName=\"check\" [ngStyle]=\"{ color: row.tickColor }\"></thy-icon>\n </span>\n </span>\n </div>\n </div>\n <div *ngIf=\"option.showCustom\" class=\"select-color\">\n <span class=\"color\" [ngStyle]=\"{ background: selectedColor }\"></span>\n #\n <input\n thyInput\n maxlength=\"6\"\n (keydown.enter)=\"customInputColorEnter($event)\"\n onkeyup=\"value=value.replace(/[^0-9A-Fa-f]/g,'')\"\n class=\"value\"\n [(ngModel)]=\"customColor\"\n (ngModelChange)=\"colorChange(false)\"\n />\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ThyPlacement } from 'ngx-tethys/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { TheColorSelectComponent } from '../components/color-select/color-select.component';\nimport { ColorType, ColorSelectOption } from '../constants/color-select';\n\n@Injectable()\nexport class TheColorSelectService {\n backdropClosable = false;\n\n hasBackdrop = false;\n\n insideClosable = false;\n\n placement: ThyPlacement = 'bottomLeft';\n\n offset = 10;\n\n colorSelectRef: ThyPopoverRef<TheColorSelectComponent>;\n\n get isOpenColorSelect() {\n return this.colorSelectRef && this.colorSelectRef.componentInstance;\n }\n\n constructor(private thyPopover: ThyPopover) {}\n\n toggleColorSelect(\n origin: HTMLElement,\n selectedColor: ColorType,\n colors: string[],\n option: ColorSelectOption,\n selectAction: (color: ColorType) => void,\n placement?: ThyPlacement,\n offset?: number\n ) {\n if (this.isOpenColorSelect) {\n this.colorSelectRef.close();\n }\n this.colorSelectRef = this.thyPopover.open(TheColorSelectComponent, {\n initialState: {\n selectedColor,\n selectAction,\n colors,\n option\n },\n origin,\n backdropClosable: this.backdropClosable,\n placement: placement || this.placement,\n offset: offset !== null ? offset : this.offset,\n hasBackdrop: this.hasBackdrop,\n insideClosable: this.insideClosable,\n panelClass: 'color-select-container'\n });\n return this.colorSelectRef;\n }\n\n closeColorSelect() {\n if (this.isOpenColorSelect) {\n this.colorSelectRef.close();\n }\n }\n}\n","import { Editor, Node, Text, Transforms } from 'slate';\nimport { Colors, ColorType, SpecialBackgroundColor, SpecialTextColor } from '../../constants/color-select';\nimport { MarkTypes } from '../../constants/node-types';\nimport { TheColorSelectService } from '../../services/color-select.service';\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 selectColor(editor: Editor, type: MarkTypes.color | MarkTypes.backgroundColor) {\n const rangeRef = Editor.rangeRef(editor, editor.selection);\n const colorSelectService = editor.injector.get(TheColorSelectService);\n const element = (event.target as HTMLElement).closest('.thy-icon-nav-link');\n colorSelectService.toggleColorSelect(\n element as HTMLElement,\n ColorEditor.getActiveColor(editor, type),\n Colors,\n {\n showCustom: true,\n perRowColorNumbers: 8,\n rowOptions: { 2: '#aaa' },\n specialColor: type === MarkTypes.color ? SpecialTextColor : SpecialBackgroundColor\n },\n (newColor: ColorType) => {\n Transforms.select(editor, rangeRef.current);\n ColorEditor.setColor(editor, newColor, type);\n },\n 'bottomLeft',\n 0\n );\n }\n};\n","import { Directive } from '@angular/core';\nimport { Editor, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { ToolbarItem } from '../../interfaces';\nimport * as TheQueries from '../../queries';\n\n@Directive()\nexport abstract class TheToolbarBaseItemComponent {\n editor: Editor;\n itemMousedownHandle: (item: ToolbarItem) => void;\n\n abstract statusChange(editor: Editor): void;\n\n execute(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n\n if (!this.itemMousedownHandle && !this.editor?.selection) {\n const lastNode = TheQueries.getLastNode(this.editor, 1);\n const end = Editor.end(this.editor, lastNode[1]);\n Transforms.select(this.editor, end);\n AngularEditor.focus(this.editor);\n }\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { Editor, Transforms } from 'slate';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { DefaultToolbarItem } from '../../interfaces';\nimport { ColorEditor } from './color.editor';\nimport { Colors, ColorType, SpecialBackgroundColor, SpecialTextColor } from '../../constants/color-select';\nimport { MarkTypes } from '../../constants/node-types';\nimport { TheColorSelectComponent } from '../../components/color-select/color-select.component';\nimport { TheToolbarBaseItemComponent } from '../../components/toolbar-base-item/toolbar-base-item.component';\n\n@Component({\n selector: 'the-color-toolbar-item',\n template: `\n <a\n class=\"link-width-down\"\n thyIconNavLink\n [ngStyle]=\"{\n width: item.key === 'color' ? '42px' : 'auto'\n }\"\n [thyTooltip]=\"item.name\"\n [thyIconNavLinkActive]=\"active\"\n thyTooltipPlacement=\"top\"\n (mousedown)=\"execute($event)\"\n >\n <thy-icon [thyIconName]=\"item.icon\" thyIconType=\"twotone\" [thyTwotoneColor]=\"active\"></thy-icon>\n <thy-icon\n [ngClass]=\"{\n 'link-down-icon': true,\n 'font-size-sm': true,\n 'text-desc': true\n }\"\n thyIconName=\"caret-down\"\n ></thy-icon>\n </a>\n `,\n host: {\n class: 'the-toolbar-item'\n }\n})\nexport class TheColorToolbarItemComponent extends TheToolbarBaseItemComponent {\n @Input() item: DefaultToolbarItem;\n\n @Input() editor: Editor;\n\n active: string | boolean = false;\n\n colorSelectRef: ThyPopoverRef<TheColorSelectComponent>;\n\n get isOpenColorSelect() {\n return this.colorSelectRef && this.colorSelectRef.componentInstance;\n }\n\n constructor(private thyPopover: ThyPopover) {\n super();\n }\n\n public statusChange(editor: Editor) {\n this.active = this.item?.active(editor);\n }\n\n execute(event: MouseEvent) {\n super.execute(event);\n if (this.editor?.disabled) {\n return;\n }\n const type = this.item.key as MarkTypes.color & MarkTypes.backgroundColor;\n this.toggleColorSelect(event, type);\n }\n\n toggleColorSelect(event: MouseEvent, type: MarkTypes.color | MarkTypes.backgroundColor) {\n if (this.isOpenColorSelect) {\n this.colorSelectRef.close();\n return;\n }\n this.colorSelectRef = this.thyPopover.open(TheColorSelectComponent, {\n initialState: {\n colors: Colors,\n selectedColor: ColorEditor.getActiveColor(this.editor, type),\n option: {\n showCustom: true,\n perRowColorNumbers: 8,\n rowOptions: { 2: '#aaa' },\n specialColor: type === MarkTypes.color ? SpecialTextColor : SpecialBackgroundColor\n },\n selectAction: (color: ColorType) => {\n Transforms.select(this.editor, this.editor.selection);\n ColorEditor.setColor(this.editor, color, type);\n }\n },\n origin: event.currentTarget as HTMLElement,\n backdropClosable: false,\n placement: 'bottomLeft',\n offset: 10,\n hasBackdrop: false,\n insideClosable: false,\n panelClass: 'color-select-container'\n });\n return this.colorSelectRef;\n }\n\n close() {\n if (this.isOpenColorSelect) {\n this.colorSelectRef.close();\n }\n }\n}\n","import { MarkTypes } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport { ColorEditor } from './color.editor';\nimport { TheColorToolbarItemComponent } from './toolbar-item.component';\n\nexport const ColorOptions: ToolbarItem[] = [\n {\n key: MarkTypes.color,\n icon: 'color-tt',\n name: '字体颜色',\n iconComponent: TheColorToolbarItemComponent,\n active: editor => ColorEditor.getActiveColor(editor, MarkTypes.color)\n },\n {\n key: MarkTypes.backgroundColor,\n icon: 'background-tt',\n name: '背景颜色',\n iconComponent: TheColorToolbarItemComponent,\n active: editor => ColorEditor.getActiveColor(editor, MarkTypes.backgroundColor)\n }\n];\n","import { Editor, Path, Transforms } from 'slate';\nimport { HistoryEditor } from 'slate-history';\nimport { hotkeys } from 'slate-angular';\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 = aboveEntry && 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 (aboveEntry && Editor.isVoid(editor, aboveEntry[0]) && Editor.isInline(editor, aboveEntry[0])) {\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","import { Editor, Node, Range, Path, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { CodeElement } from '../../custom-types';\nimport { ElementKinds } from '../../constants/node-types';\nimport * as TheTransforms from '../../transforms';\nimport { DEFAULT_LANGUAGE } from '../../constants/code';\n\nexport const CodeEditor = {\n setLanguage(editor: Editor, language: string, element: CodeElement) {\n const at = AngularEditor.findPath(editor, element);\n Transforms.setNodes(\n editor,\n { language },\n {\n at\n }\n );\n },\n setCodeContent(editor: Editor, content: string, element: CodeElement) {\n const at = AngularEditor.findPath(editor, element);\n Transforms.setNodes(\n editor,\n { content },\n {\n at\n }\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 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 Editor.withoutNormalizing(editor, () => {\n const lastPath = elementEntrys[elementEntrys.length - 1][1];\n Transforms.insertNodes(editor, codeElement, { at: Path.next(lastPath) });\n Transforms.select(editor, Path.next(lastPath));\n Transforms.removeNodes(editor, {\n at: {\n anchor: Editor.start(editor, elementEntrys[0][1]),\n focus: Editor.end(editor, lastPath)\n }\n });\n });\n } else {\n const codeElement: CodeElement = {\n type: ElementKinds.code,\n content: '',\n language: DEFAULT_LANGUAGE.value,\n children: [{ text: '' }]\n };\n TheTransforms.insertElement(editor, codeElement);\n }\n }\n};\n","import * as TheQueries from '../../queries';\nimport { ElementKinds } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport { CodeEditor } from './code.editor';\n\nexport const CodeOptions: ToolbarItem[] = [\n {\n key: ElementKinds.code,\n icon: 'code-syntax',\n name: '代码块',\n active: editor => TheQueries.isBlockActive(editor, ElementKinds.code),\n execute: editor => CodeEditor.insertCode(editor)\n }\n];\n","import { Component, OnInit, ElementRef, Input, HostListener, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\nimport { ConnectedPosition, Overlay } from '@angular/cdk/overlay';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor } from 'slate';\nimport { DropdownMode } from '../../constants/toolbar';\nimport { DefaultToolbarItem, ToolbarItem } from '../../interfaces/toolbar';\nimport { TheToolbarBaseItemComponent } from '../toolbar-base-item/toolbar-base-item.component';\n\n@Component({\n selector: 'the-toolbar-dropdown',\n templateUrl: './toolbar-dropdown.component.html',\n host: {\n class: 'the-toolbar-dropdown-container'\n }\n})\nexport class TheToolbarDropdownComponent extends TheToolbarBaseItemComponent implements OnInit {\n private _item: DefaultToolbarItem;\n\n @Input() toolbarItem: ToolbarItem;\n\n @Input() menus: DefaultToolbarItem[];\n\n @Input() mode: DropdownMode = DropdownMode.text;\n\n @Input()\n set item(i: DefaultToolbarItem) {\n this._item = i;\n this.activeMenu = i;\n }\n get item() {\n return this._item;\n }\n\n @Input() itemMousedownHandle: (item: ToolbarItem) => void;\n\n editor: Editor;\n template: TemplateRef<any>;\n dropdownMode = DropdownMode;\n activeMenu: DefaultToolbarItem;\n dropdownPopoverRef: ThyPopoverRef<any>;\n\n get isOpen() {\n return this.dropdownPopoverRef && this.dropdownPopoverRef.getOverlayRef() && this.dropdownPopoverRef.getOverlayRef().hasAttached();\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 @HostListener('mousedown', ['$event'])\n toggleDropdown(event: MouseEvent) {\n super.execute(event);\n\n if (this.editor?.disabled) {\n return;\n }\n this.openDropdownPopover();\n }\n\n @HostListener('document: mousedown', ['$event'])\n handleDocumentMouseDown(event: MouseEvent) {\n if (!this.elementRef.nativeElement.contains(event.target as HTMLElement)) {\n this.closeDropdownPopover();\n }\n }\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.template) {\n this.template = this.mode === this.dropdownMode.icon ? this.iconModeTemplate : this.textModeTemplate;\n }\n\n if (!this.activeMenu) {\n this.activeMenu = this.menus[0];\n }\n if (this.toolbarItem) {\n this.elementRef.nativeElement.classList.add(`${this.toolbarItem?.key}`);\n }\n }\n\n public statusChange(editor: Editor) {\n const activeItem = this.menus.find(i => {\n if (i?.active) {\n return i?.active(editor);\n }\n });\n this.activeMenu = activeItem ? activeItem : this.menus[0];\n }\n\n itemMousedown(event: MouseEvent, item: ToolbarItem) {\n super.execute(event);\n\n this.closeDropdownPopover();\n\n if (this.itemMousedownHandle) {\n this.itemMousedownHandle(item);\n return;\n }\n\n if (item?.execute) {\n item?.execute(this.editor);\n }\n }\n\n openDropdownPopover() {\n this.dropdownPopoverRef = this.thyPopover.open(this.dropdownTemplate, {\n origin: this.elementRef,\n panelClass: ['the-toolbar-dropdown-popover', this.toolbarItem?.key],\n placement: 'bottomLeft',\n insideClosable: false,\n backdropClosable: true,\n hasBackdrop: false,\n offset: 10,\n viewContainerRef: this.viewContainerRef,\n scrollStrategy: this.overlay.scrollStrategies.reposition()\n });\n this.dropdownPopoverRef?.getOverlayRef().updatePositionStrategy(this.createPositionStrategy());\n }\n\n closeDropdownPopover() {\n if (this.dropdownPopoverRef) {\n this.dropdownPopoverRef?.close();\n }\n }\n\n createPositionStrategy() {\n const topPosition: ConnectedPosition = {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetX: 0,\n offsetY: -15\n };\n const bottomPosition: ConnectedPosition = {\n ...topPosition,\n overlayY: 'top',\n offsetY: 42\n };\n return this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withFlexibleDimensions(false)\n .withGrowAfterOpen(false)\n .withPush(false)\n .withPositions([bottomPosition, topPosition]);\n }\n}\n","<ng-template [ngTemplateOutlet]=\"template\"></ng-template>\n\n<ng-template #iconModeTemplate>\n <a thyIconNavLink class=\"icon-mode link-with-down\" [thyTooltip]=\"activeMenu?.name\" thyTooltipPlacement=\"top\">\n <thy-icon [thyIconName]=\"activeMenu?.icon\"></thy-icon>\n <thy-icon class=\"caret-down-icon font-size-sm text-desc\" thyIconName=\"caret-down\"></thy-icon>\n </a>\n</ng-template>\n\n<ng-template #textModeTemplate>\n <a thyIconNavLink class=\"text-mode\" [thyTooltip]=\"activeMenu?.name\" thyTooltipPlacement=\"top\">\n <span class=\"show-text\">{{ activeMenu?.name }}</span>\n <thy-icon class=\"text-caret-down-icon font-size-sm text-desc\" thyIconName=\"caret-down\"></thy-icon>\n </a>\n</ng-template>\n\n<ng-template #dropdownTemplate>\n <thy-action-menu class=\"dropdown\">\n <ng-container *ngFor=\"let menu of menus\">\n <a\n *ngIf=\"menu.key !== 'split'\"\n thyActionMenuItem\n href=\"javascript:;\"\n [thyActionMenuItemActive]=\"menu.key === activeMenu.key\"\n (mousedown)=\"itemMousedown($event, menu)\"\n [ngStyle]=\"menu?.styles\"\n >\n <span *ngIf=\"menu.icon && mode === dropdownMode.icon\" thyActionMenuItemIcon>\n <thy-icon [thyIconName]=\"menu.icon\"></thy-icon>\n </span>\n <span *ngIf=\"menu.name\" thyActionMenuItemName>{{ menu.name }}</span>\n </a>\n <thy-action-menu-divider *ngIf=\"menu.key === 'split'\"></thy-action-menu-divider>\n </ng-container>\n </thy-action-menu>\n</ng-template>\n","import {\n Component,\n ElementRef,\n ChangeDetectorRef,\n ChangeDetectionStrategy,\n OnInit,\n ViewChild,\n AfterViewInit,\n NgZone,\n Inject\n} from '@angular/core';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\nimport { Editor, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { CodeMirrorComponent } from 'ng-codemirror';\nimport { CODEMIRROR_PADDING_TOP, CODE_MODES, DropdownMode, CodeMode, THE_CODE_MODE_TOKEN, TheCodeMode } from '../../constants';\nimport { DefaultToolbarItem, TheBaseElementComponent } from '../../interfaces';\nimport { CodeElement } from '../../custom-types';\nimport { CodeEditor } from './code.editor';\nimport * as TheTransforms from '../../transforms';\nimport { delay, take } from 'rxjs/operators';\n\n@Component({\n selector: 'div[theCode]',\n templateUrl: './code.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheCodeComponent extends TheBaseElementComponent<CodeElement, Editor> implements OnInit, AfterViewInit {\n startRenderCodemirror = false;\n dropdownMode = DropdownMode;\n maxHeight = this.config.mode === CodeMode.default ? 350 - CODEMIRROR_PADDING_TOP * 2 : 0;\n codeMirrorFocused = false;\n\n menus = CODE_MODES.map(item => {\n return { key: item.value, name: item.showName };\n });\n\n options = {\n mode: this.menus[0].key,\n lineNumbers: false,\n readOnly: false,\n autofocus: false,\n lineWiseCopyCut: true,\n lineWrapping: this.config.mode === CodeMode.default ? false : true,\n cursorBlinkRate: 500\n };\n\n actives: DefaultToolbarItem = this.menus[0];\n\n get code() {\n return this.element.content;\n }\n\n @ViewChild('codemirror', { read: CodeMirrorComponent, static: false })\n codemirror: CodeMirrorComponent;\n\n onContextChange() {\n super.onContextChange();\n if (this.initialized) {\n if (this.options.readOnly !== this.readonly) {\n this.useReadonly();\n }\n if (this.options.mode !== this.element.language) {\n this.useMode();\n }\n if (!this.readonly && this.isCollapsed) {\n this.initializeCodemirrorFocus();\n }\n }\n }\n\n constructor(\n public elementRef: ElementRef,\n public cdr: ChangeDetectorRef,\n private thyNotifyService: ThyNotifyService,\n private ngZone: NgZone,\n @Inject(THE_CODE_MODE_TOKEN)\n private config: TheCodeMode\n ) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.elementRef.nativeElement.classList.add('the-code-container');\n }\n\n ngAfterViewInit() {\n if (this.readonly) {\n // delay 20ms\n // ccodemirror is too slow\n this.ngZone.onStable.pipe(take(1), delay(20)).subscribe(() => {\n this.renderCodemirror();\n });\n } else {\n // edit mode can not delay\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.renderCodemirror();\n this.initializeCodemirrorFocus();\n });\n }\n }\n\n renderCodemirror() {\n this.startRenderCodemirror = true;\n this.useReadonly();\n this.useMode();\n this.cdr.detectChanges();\n }\n\n initializeCodemirrorFocus() {\n if (this.isCollapsed) {\n setTimeout(() => {\n if (this.isCollapsed && this.codemirror && this.codemirror.editor && !this.codemirror.editor.hasFocus()) {\n AngularEditor.blur(this.editor);\n this.codemirror.editor.focus();\n this.codemirror.editor.refresh();\n }\n }, 200);\n }\n }\n\n codeChange($event) {\n CodeEditor.setCodeContent(this.editor, $event, this.element);\n }\n\n focusChange(codeMirrorFocused: boolean) {\n this.codeMirrorFocused = codeMirrorFocused;\n }\n\n onDelete(event: MouseEvent) {\n event.preventDefault();\n TheTransforms.deleteElement(this.editor, this.element);\n }\n\n onCopy(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n // remove codemorrir selection\n const selection = window.getSelection();\n if (selection.rangeCount > 0) {\n selection.removeAllRanges();\n }\n // focus the element\n setTimeout(() => {\n AngularEditor.focus(this.editor);\n Transforms.select(this.editor, AngularEditor.findPath(this.editor, this.element));\n });\n // copy the element\n setTimeout(() => {\n document.execCommand('copy');\n this.thyNotifyService.success('复制成功');\n }, 200);\n }\n\n onChangeLangulage = item => {\n this.options = { ...this.options, mode: item.key };\n this.actives = item;\n CodeEditor.setLanguage(this.editor, item.key, this.element);\n };\n\n useMode() {\n this.options = { ...this.options, mode: this.element.language };\n this.actives = this.menus.find(i => i.key === this.element.language);\n }\n\n useReadonly() {\n this.options = { ...this.options, readOnly: this.readonly, cursorBlinkRate: this.readonly ? -1 : 500 };\n }\n}\n","<div contenteditable=\"false\" class=\"the-block-operation\" *ngIf=\"codeMirrorFocused && !options.readOnly\">\n <thy-icon-nav>\n <the-toolbar-dropdown [menus]=\"menus\" [item]=\"actives\" [itemMousedownHandle]=\"onChangeLangulage\"></the-toolbar-dropdown>\n <a\n href=\"javascript:;\"\n thyIconNavLink\n thyIconNavLinkIcon=\"copy\"\n thyTooltip=\"复制\"\n thyTooltipPlacement=\"top\"\n (mousedown)=\"onCopy($event)\"\n ></a>\n <a\n href=\"javascript:;\"\n thyIconNavLink\n thyIconNavLinkIcon=\"trash\"\n thyTooltip=\"删除\"\n class=\"remove-link\"\n thyTooltipPlacement=\"top\"\n (mousedown)=\"onDelete($event)\"\n ></a>\n </thy-icon-nav>\n</div>\n\n<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>\n<ng-codemirror\n *ngIf=\"startRenderCodemirror\"\n #codemirror\n contenteditable=\"false\"\n class=\"ng-codemirror-wrapper\"\n [ngStyle]=\"{ maxHeight: maxHeight > 0 ? maxHeight + 'px' : 'auto' }\"\n [options]=\"options\"\n [ngModel]=\"code\"\n [delayRefreshTime]=\"300\"\n (ngModelChange)=\"codeChange($event)\"\n (focusChange)=\"focusChange($event)\"\n [autoMaxHeight]=\"maxHeight\"\n></ng-codemirror>\n","import { Editor, Element } from 'slate';\nimport { ElementKinds } from '../../constants/node-types';\nimport { TheCodeComponent } from './code.component';\n\nexport const withCode = (editor: Editor) => {\n const { isVoid, isBlockCard, renderElement } = 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 TheCodeComponent;\n }\n return renderElement(element);\n };\n\n return editor;\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 { Range, Transforms, Editor, Element, Node } from 'slate';\nimport { ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport { LinkElement } from '../../custom-types';\nimport { ElementKinds, LINK_DEFAULT_TEXT } from '../../constants';\nimport { getAboveByType } from '../../queries/get-above-by-type';\nimport { TheLinkComponent } from './link.component';\nimport { LinkTags } from './link.types';\n\nexport const LinkEditor = {\n insertLink(editor: Editor) {\n if (Range.isCollapsed(editor.selection)) {\n Promise.resolve()\n .then(() => {\n LinkEditor.wrapLink(editor, LINK_DEFAULT_TEXT, '');\n })\n .then(() => {\n const [linkNode] = getAboveByType(editor, ElementKinds.link);\n const linkComponent = ELEMENT_TO_COMPONENT.get(linkNode) as TheLinkComponent;\n linkComponent.openLinkEdit(LinkTags.insert);\n });\n } else {\n const isActive = LinkEditor.isLinkActive(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 linkComponent = ELEMENT_TO_COMPONENT.get(linkNode) as TheLinkComponent;\n linkComponent.openLinkEdit(LinkTags.insert);\n });\n }\n },\n isLinkActive(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.isLinkActive(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 Transforms.insertNodes(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};\n","import { ElementKinds } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport { LinkEditor } from './link.editor';\n\nexport const LinkOptions: ToolbarItem[] = [\n {\n key: ElementKinds.link,\n icon: 'link-insert',\n name: '链接',\n execute: editor => LinkEditor.insertLink(editor),\n active: editor => LinkEditor.isLinkActive(editor)\n }\n];\n","import { Component, OnInit, Input } from '@angular/core';\nimport { A_TAG_REL_ATTR } from '../../../constants/default';\n\n@Component({\n selector: 'the-link-hover',\n templateUrl: './link-hover.component.html'\n})\nexport class TheLinkHoverComponent 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\">\n <a readonly href=\"{{ link }}\" target=\"_blank\" rel=\"{{ aTagRelAttr }}\" class=\"hover-control-plaintext text-truncate\">\n {{ link }}\n </a>\n <span class=\"operate-separator\"></span>\n <button thyButtonIcon=\"edit\" thySize=\"xs\" (mousedown)=\"editLink($event)\"></button>\n <span class=\"operate-separator\"></span>\n <button thyButtonIcon=\"unlink-insert\" thySize=\"xs\" (mousedown)=\"removeLink($event)\"></button>\n</div>\n","import { Component, OnInit, Input, HostBinding, HostListener } from '@angular/core';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Transforms, Range, Node, Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport * as TheQueries from '../../../queries';\nimport { TheEditor } from '../../../interfaces';\nimport { LinkCloseTypes, LinkTags } from '../link.types';\n\n@Component({\n selector: 'the-link-edit',\n templateUrl: './link-edit.component.html'\n})\nexport class TheLinkEditComponent implements OnInit {\n editor: Editor;\n\n @Input() tag: LinkTags;\n\n @Input() node: Node;\n\n @Input() link = '';\n\n @Input() text = '';\n\n @Input() originSelection: Range;\n\n originLink: string;\n\n @HostBinding('class')\n className = 'the-link-edit-container';\n\n originText: string;\n\n validatorConfig = {\n validationMessages: {\n link: {\n required: '链接不能为空',\n pattern: '请输入正确的链接'\n },\n text: {\n required: '文本不能为空'\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 linkRegExp(val) {\n return /(http|ftp|https):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&:/~\\+#]*[\\w\\-\\@?^=%&/~\\+#])?/.test(val);\n }\n\n closePopover(type?: string) {\n this.thyPopoverRef.close(type);\n }\n\n applyLink(form) {\n const link = this.link.trim();\n if (this.linkRegExp(link)) {\n const linkPath = TheQueries.findPath(this.editor, this.node);\n if (this.originLink !== link) {\n Transforms.setNodes(this.editor, { url: link }, { at: linkPath });\n }\n if (this.originText !== this.text) {\n const [start, end] = Editor.edges(this.editor, linkPath);\n Transforms.insertText(this.editor, this.text, { at: { anchor: end, focus: end } });\n Transforms.delete(this.editor, { at: { anchor: start, focus: end } });\n }\n TheEditor.focus(this.editor);\n Transforms.select(this.editor, Editor.after(this.editor, linkPath));\n this.closePopover(LinkCloseTypes.apply);\n } else {\n form.validator.setElementErrorMessage(`link`, '请输入正确的链接');\n }\n }\n}\n","<form\n thyForm\n #linkForm=\"thyForm\"\n [thyFormValidatorConfig]=\"validatorConfig\"\n name=\"linkForm\"\n>\n <thy-form-group thyLabelText=\"文本\">\n <input\n thyInput\n placeholder=\"请输入文本\"\n required\n name=\"text\"\n [(ngModel)]=\"text\"\n thyAutofocus\n type=\"text\"\n />\n </thy-form-group>\n <thy-form-group thyLabelText=\"链接\">\n <input\n name=\"link\"\n thyInput\n placeholder=\"请输入链接\"\n required\n type=\"text\"\n #linkControl=\"ngModel\"\n [(ngModel)]=\"link\"\n />\n </thy-form-group>\n <thy-form-group-footer>\n <div class=\"btn-pair\">\n <button\n thyButton=\"link-secondary\"\n thySize=\"sm\"\n (click)=\"closePopover()\"\n >取消</button>\n <button\n thyButton=\"primary-square\"\n thySize=\"sm\"\n (thyFormSubmit)=\"applyLink(linkForm)\"\n >应用</button>\n </div>\n </thy-form-group-footer>\n</form>\n","import { Overlay } from '@angular/cdk/overlay';\nimport { Component, OnInit, ElementRef, OnDestroy, ChangeDetectorRef, ViewContainerRef, HostListener, NgZone } from '@angular/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor, Element, Node as SlateNode, Transforms, Text } from 'slate';\nimport { ElementKinds } from '../../constants';\nimport { LinkElement } from '../../custom-types';\nimport { TheBaseElementComponent } from '../../interfaces';\nimport { LinkCloseTypes, LinkTags } from './link.types';\nimport { TheLinkHoverComponent } from './hover/link-hover.component';\nimport { TheLinkEditComponent } from './edit/link-edit.component';\nimport { ThyClickDispatcher } from 'ngx-tethys';\nimport { SlateElementContext } from 'slate-angular';\n\n@Component({\n selector: '[TheBaseLinkComponent]',\n template: ''\n})\nexport class TheBaseLinkComponent extends TheBaseElementComponent<LinkElement, Editor> implements OnInit, OnDestroy {\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 constructor(\n public elementRef: ElementRef,\n public cdr: ChangeDetectorRef,\n private thyPopover: ThyPopover,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private thyClickDispatcher: ThyClickDispatcher\n ) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n }\n\n closeHoverPopover() {\n if (this.linkHoverOpened) {\n this.thyPopoverHoverRef.close();\n }\n }\n\n beforeContextChange = (value: SlateElementContext) => {\n if (this.thyPopoverEditRef && this.thyPopoverEditRef.componentInstance) {\n let { originText } = this.thyPopoverEditRef.componentInstance;\n if (originText && originText !== (value.element.children[0] as Text).text) {\n this.thyPopoverEditRef.componentInstance.originText = (value.element.children[0] as Text).text;\n }\n }\n };\n\n @HostListener('click', ['$event'])\n mousedownHandle(event: MouseEvent) {\n this.openLinkHover();\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 isLinkEditOpenedByDom(dom: HTMLElement) {\n return this.linkEditOpened && this.thyPopoverEditRef.componentInstance.dom === dom;\n }\n\n closeEditPopover(type?: string) {\n if (this.linkEditOpened) {\n this.thyPopoverEditRef.close(type);\n }\n }\n\n openLinkHover() {\n const dom = this.nativeElement;\n const url = this.element.url;\n\n if (this.linkHoverOpened) {\n return;\n }\n this.thyPopoverHoverRef = this.thyPopover.open(TheLinkHoverComponent, {\n initialState: {\n link: url,\n dom: dom,\n editHandle: () => {\n this.openLinkEdit(LinkTags.edit);\n },\n deleteHandle: () => {\n Transforms.unwrapNodes(this.editor, { match: n => Element.isElement(n) && n.type === ElementKinds.link });\n this.closeHoverPopover();\n }\n },\n origin: dom,\n placement: 'bottomLeft',\n offset: 8,\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 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(TheLinkEditComponent, {\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 origin: this.elementRef.nativeElement,\n backdropClosable: true,\n placement: 'bottomLeft',\n offset: 8,\n hasBackdrop: false,\n originActiveClass: null,\n viewContainerRef: this.viewContainerRef,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n panelClass: 'the-link-edit'\n });\n this.cdr.markForCheck();\n }\n\n close(type?: string) {\n this.closeHoverPopover();\n this.closeEditPopover(type);\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n this.close(LinkCloseTypes.destroy);\n }\n}\n\n@Component({\n selector: 'span[theLink]',\n template: `<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>`\n})\nexport class TheLinkComponent extends TheBaseLinkComponent {}\n\n@Component({\n selector: 'a[theLink]',\n template: `<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>`,\n host: {\n '[attr.href]': 'element.url',\n target: '_blank'\n }\n})\nexport class TheReadonlyLinkComponent extends TheBaseLinkComponent {}\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 = (options: { type: string | string[] }) => <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\n Transforms.removeNodes(editor, { at: path });\n return;\n }\n\n normalizeNode([node, path]);\n };\n\n return editor;\n};\n","import isUrl from 'is-url';\nimport { Editor, Element } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { ElementKinds } from '../../constants/node-types';\nimport { LinkEditor } from './link.editor';\nimport { TheLinkComponent, TheReadonlyLinkComponent } from './link.component';\nimport { withRemoveEmptyNodes } from '../normalizers/remove-empty-nodes';\nimport { Transforms } from 'slate';\nimport { CLIPBOARD_FORMAT_KEY } from '../../constants/default';\n\nexport const withLink = (editor: Editor) => {\n const { insertData, insertText, isInline, 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.insertData = data => {\n const text = data.getData('text/plain');\n const fragment = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);\n\n if (text && isUrl(text) && !fragment) {\n LinkEditor.wrapLink(editor, text, text);\n Transforms.move(editor, { distance: 1, unit: \"offset\" });\n } else {\n insertData(data);\n }\n };\n\n editor.renderElement = (element: Element) => {\n if (element.type === ElementKinds.link) {\n return AngularEditor.isReadonly(editor) ? TheReadonlyLinkComponent : TheLinkComponent;\n }\n return renderElement(element);\n };\n\n editor = withRemoveEmptyNodes({ type: ElementKinds.link })(editor);\n\n return editor;\n};\n","import { Component, Input, OnInit } from '@angular/core';\nimport { insertTable } from '../../plugins/table/transforms/insert-table';\nimport { HostListener } from '@angular/core';\nimport { ThyPopoverRef } from 'ngx-tethys';\nimport { TheEditor } from '../../interfaces';\nimport { TableOptions } from '../../plugins/table/table.types';\n\n@Component({\n selector: 'table-select',\n templateUrl: './table-select.component.html'\n})\nexport class TheTableSelectComponent implements OnInit {\n @Input() optionsParam: TableOptions;\n @Input() editor: TheEditor;\n\n tableData = new Array(10);\n maxRowIndex = -1;\n maxColIndex = -1;\n\n @HostListener('document: mousedown', ['$event'])\n handleDocumentMouseDown(event: MouseEvent) {\n if (!document.querySelector('.table-selector-container').contains(event.target as HTMLElement)) {\n this.popoverRef.close();\n }\n }\n\n constructor(private popoverRef: ThyPopoverRef<TheTableSelectComponent>) {}\n\n ngOnInit(): void {}\n\n onSelectCells(rowIndex, colIndex) {\n this.maxRowIndex = rowIndex;\n this.maxColIndex = colIndex;\n }\n\n executeTable(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n const opts = new TableOptions(this.optionsParam);\n insertTable(opts, this.editor, this.maxRowIndex + 1, this.maxColIndex + 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 <div\n *ngFor=\"let item of tableData, let rowIndex = index\"\n class=\"selector-row\"\n (mousedown)=\"executeTable($event)\"\n >\n <span\n *ngFor=\"let item of tableData, let colIndex = index\"\n [ngClass]=\"{'active-cell': rowIndex<= maxRowIndex && colIndex <= maxColIndex, 'selector-cell': true}\"\n (mouseenter)=\"onSelectCells(rowIndex, colIndex)\"\n >\n </span>\n </div>\n <span class=\"selector-text\">{{maxRowIndex+1}} x {{maxColIndex+1}}</span>\n</div>\n","import { Overlay } from '@angular/cdk/overlay';\nimport { Component, Input } from '@angular/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys';\nimport { Editor } from 'slate';\nimport { TheToolbarBaseItemComponent } from '../../components/toolbar-base-item/toolbar-base-item.component';\nimport { TheTableSelectComponent } from '../../components/table-select/table-select.component';\nimport { ElementKinds } from '../../constants';\nimport { DefaultToolbarItem } from '../../interfaces';\nimport { TableOptions } from './table.types';\n\n@Component({\n selector: 'the-table-toolbar-item',\n template: `\n <a\n thyIconNavLink\n class=\"link-with-down\"\n [thyTooltip]=\"item?.name\"\n thyTooltipPlacement=\"top\"\n [thyIconNavLinkActive]=\"active\"\n (mousedown)=\"execute($event)\"\n >\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n <thy-icon class=\"link-down-icon font-size-sm text-desc table-down-icon\" thyIconName=\"caret-down\"> </thy-icon>\n </a>\n `,\n host: {\n class: 'the-toolbar-dropdown-container'\n }\n})\nexport class TheTableToolbarItemComponent extends TheToolbarBaseItemComponent {\n @Input() item: DefaultToolbarItem;\n\n @Input() editor: Editor;\n\n active: string | boolean = false;\n\n tableSelectRef: ThyPopoverRef<TheTableSelectComponent>;\n\n get isOpenTableSelect() {\n return this.tableSelectRef && this.tableSelectRef.componentInstance;\n }\n\n constructor(private thyPopover: ThyPopover, private overlay: Overlay) {\n super();\n }\n\n public statusChange(editor: Editor) {\n this.active = this.item?.active(editor);\n }\n\n execute(event: MouseEvent) {\n super.execute(event);\n\n if (this.editor?.disabled) {\n return;\n }\n const type = this.item.key;\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(TheTableSelectComponent, {\n origin: event.currentTarget as HTMLElement,\n initialState: {\n editor: this.editor,\n optionsParam\n },\n backdropClosable: false,\n hasBackdrop: false,\n insideClosable: false,\n placement: 'bottomLeft',\n offset: 10,\n panelClass: 'the-table-selector-pannel',\n scrollStrategy: this.overlay.scrollStrategies.reposition()\n });\n return this.tableSelectRef;\n }\n}\n","import { ElementKinds } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport { TheTableToolbarItemComponent } from './toolbar-item.component';\nimport { TableEditor } from './table.editor';\n\nexport const TableOptions: ToolbarItem[] = [\n {\n key: ElementKinds.table,\n icon: 'table-border-all',\n name: '表格',\n iconComponent: TheTableToolbarItemComponent,\n execute: editor => TableEditor.insertTable(editor),\n active: editor => TableEditor.isActive(editor)\n }\n];\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 { Injectable, NgZone } from '@angular/core';\nimport { Subject, MonoTypeOperatorFunction, Observable, combineLatest } from 'rxjs';\nimport { distinctUntilChanged, share, map, startWith, skip, tap } from 'rxjs/operators';\n\nexport class HoveredCellInfo {\n cell: HTMLTableCellElement;\n position?: 'left' | 'right';\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","import { Editor } from 'slate';\nimport { TablePosition } from '.';\nimport { SelectedCell, TableOptions } from '../table.types';\n\nexport function getSelectCellNode(editor: Editor, selectedCells: SelectedCell[]) {\n const { anchor } = editor.selection;\n const opts = new TableOptions();\n const pos = TablePosition.create(opts, editor, anchor.path);\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 { Transforms, Node, Path, Element, Editor } from 'slate';\nimport { TablePosition } from './table-position';\nimport { ElementKinds } from '../../../constants';\nimport { getSelectCellNode } from './get-select-cell-node';\nimport { TableCellElement } from '../../../custom-types';\nimport { SelectedCell, TableOptions } from '../table.types';\nimport * as TheQueries from '../../../queries';\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 return (cell.colspan && cell.colspan !== 1) || (cell.rowspan && cell.rowspan !== 1);\n }\n return false;\n}\n\nexport function getLeftCellDict(selectCellNodes: SelectedCellInfo[]) {\n return selectCellNodes.reduce((dict, cell) => {\n if (!dict[cell.row]) {\n dict[cell.row] = cell;\n }\n return dict;\n }, {} as { [key: string]: SelectedCellInfo });\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: SelectedCell[]) {\n const selectCellNodes = getSelectCellNode(editor, selectedCells);\n Editor.withoutNormalizing(editor, () => {\n let leftTopCellPath: Path;\n const leftCellDict = getLeftCellDict(selectCellNodes);\n selectCellNodes.forEach((cell, index) => {\n const { row, node } = cell;\n if (node) {\n const cellPath = TheQueries.findPath(editor, node);\n if (index === 0) {\n leftTopCellPath = cellPath;\n } else {\n mergeCellContent(editor, leftTopCellPath, cellPath);\n Transforms.setNodes(editor, { colspan: null, rowspan: null, hidden: true }, { at: cellPath });\n }\n }\n });\n let { rowspan, colspan } = calculateCellSpan(selectCellNodes, leftCellDict);\n Transforms.setNodes(editor, { rowspan, colspan }, { at: leftTopCellPath });\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 { path } = Editor.end(editor, leftTopCellPath);\n const endRange = Editor.range(editor, Editor.start(editor, cellPath), Editor.end(editor, cellPath));\n let tableCell;\n\n path.pop();\n\n const nextPath = Path.next(path);\n\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","import { Injectable } from '@angular/core';\nimport { Subject, Observable, BehaviorSubject, merge } from 'rxjs';\nimport { skip } from 'rxjs/operators';\nimport { Transforms, Node, Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { TablePosition } from './utils';\nimport { _ } from '../../utils/lodash';\nimport { mergeCell } from './utils/merge-cell';\nimport { ColorType } from '../../constants/color-select';\nimport { SelectedCell, TableOptions } from './table.types';\nimport { TableCellElement, TableElement } from '../../custom-types';\nimport { TableEditor } from './table.editor';\n\n@Injectable()\nexport class TableStore {\n private selectedCells$: BehaviorSubject<SelectedCell[]> = new BehaviorSubject([]);\n private dangerousCells$: BehaviorSubject<SelectedCell[]> = new BehaviorSubject([]);\n private cellsChangeObject$: Subject<object> = new Subject();\n private tableChange$: Subject<object> = new Subject();\n\n selectedColumnsIndex: number[] = [];\n selectedRowsIndex: number[] = [];\n\n dangerousColumnsIndex: number[] = [];\n dangerousRowsIndex: number[] = [];\n\n isSelectedTable: boolean;\n\n editor: Editor;\n\n public anchorCellPath: number[];\n public focusCellPath: number[];\n public preFocusCellPath: number[];\n\n public focusCellElement: HTMLTableCellElement;\n\n public isPrepareSelecting = false;\n public isCellSelecting = false;\n public isRightClicking = false;\n\n public maxCol: number;\n\n get selectedCells() {\n return this.selectedCells$.getValue();\n }\n\n get dangerousCells() {\n return this.dangerousCells$.getValue();\n }\n\n constructor() {}\n\n getTablePath(editor: Editor) {\n const { selection } = editor;\n const {\n anchor: { path }\n } = selection;\n const opts = new TableOptions();\n return TablePosition.create(opts, editor, path).tableEntry[1];\n }\n\n getTablePosition(editor: Editor) {\n const { selection } = editor;\n const {\n anchor: { path }\n } = selection;\n const opts = new TableOptions();\n return TablePosition.create(opts, editor, path);\n }\n\n setSelectedCells(cells: SelectedCell[], pos: TablePosition) {\n const rowGroup = _.groupBy(cells, ({ row, col }) => row);\n const colGroup = _.groupBy(cells, ({ row, 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 (this.selectedRowsIndex.length === pos.getHeight() && this.selectedColumnsIndex.length === pos.getWidth()) {\n this.isSelectedTable = true;\n } else {\n this.isSelectedTable = false;\n }\n this.selectedCells$.next(cells);\n }\n\n initEditor(editor: Editor) {\n this.editor = editor;\n }\n\n selectRow(editor: Editor, index: number) {\n this.selectedRowsIndex = [index];\n this.selectedColumnsIndex = [];\n\n const { selection } = editor;\n const {\n anchor: { path }\n } = selection;\n const opts = new TableOptions();\n const pos = TablePosition.create(opts, editor, path);\n const result = [];\n for (let i = 0; i < pos.getWidth(); i++) {\n result.push({\n row: index,\n col: i\n });\n }\n this.setSelectedCells(result, pos);\n this.focusCell(editor, pos.tableEntry[1].concat([index, 0]));\n }\n\n selectColumn(editor: Editor, index: number) {\n this.selectedColumnsIndex = [index];\n this.selectedRowsIndex = [];\n\n const { selection } = editor;\n const {\n anchor: { path }\n } = selection;\n const opts = new TableOptions();\n const pos = TablePosition.create(opts, editor, path);\n const result = [];\n for (let i = 0; i < pos.getHeight(); i++) {\n result.push({\n row: i,\n col: index\n });\n }\n this.setSelectedCells(result, pos);\n this.focusCell(editor, pos.tableEntry[1].concat([0, index]));\n }\n\n selectTable(editor: Editor) {\n this.isSelectedTable = true;\n const { cells, pos } = this.getTableCellsAndPosition(editor);\n this.setSelectedCells(cells, pos);\n this.focusCell(editor, pos.tableEntry[1].concat([0, 0]));\n }\n\n private getTableCellsAndPosition(editor: Editor): { cells: SelectedCell[]; pos: TablePosition } {\n const pos = this.createTablePosition();\n const result = [];\n for (let i = 0; i < pos.getHeight(); i++) {\n for (let j = 0; j < pos.getWidth(); j++) {\n result.push({\n row: i,\n col: j\n });\n }\n }\n return { cells: result, pos };\n }\n\n selectCells(editor: Editor) {\n const opts = new TableOptions();\n const { anchor, focus } = editor.selection;\n const pos = TablePosition.create(opts, editor, anchor.path);\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 } = this.getMinAndMaxCellIndex(initMaxRow, initMaxCol, rows[0], columns[0], pos.table);\n const result = [];\n for (let i = minRow; i < maxRow + 1; i++) {\n for (let j = minCol; j < maxCol + 1; j++) {\n result.push({\n row: i,\n col: j\n });\n }\n }\n this.setSelectedCells(result, pos);\n }\n\n getMinAndMaxCellIndex(maxRow: number, maxCol: number, minRow: number, minCol: number, table: TableElement) {\n const beforeCols = [];\n const beforeRows = [];\n let spanSelectedCells = [];\n if (this.selectedCells.length) {\n spanSelectedCells = this.selectedCells\n .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 }\n })\n .filter(item => item);\n }\n table.children.map((row, rowIndex) => {\n if (rowIndex <= maxRow) {\n row.children.map((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(spanSelectedCells[0].row, minRow);\n minCol = Math.min(spanSelectedCells[0].col, 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 this.getMinAndMaxCellIndex(maxRow, maxCol, minRow, minCol, table);\n }\n return {\n minRow,\n maxRow,\n minCol,\n maxCol\n };\n }\n\n selectCell(cell: HTMLTableCellElement, editor: Editor) {\n if (!editor.selection) {\n return;\n }\n const node = AngularEditor.toSlateNode(editor, cell);\n const path = AngularEditor.findPath(editor, node);\n this.anchorCellPath = path;\n this.focusCellPath = path;\n this.focusCellElement = cell;\n const [row, col] = path.slice(-2);\n const opts = new TableOptions();\n const { anchor } = editor.selection;\n const pos = TablePosition.create(opts, editor, anchor.path);\n this.setSelectedCells([{ row, col }], pos);\n }\n\n selectedCellsChange(): Observable<SelectedCell[]> {\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 clearSelectedCells() {\n this.selectedColumnsIndex = [];\n this.selectedRowsIndex = [];\n this.isSelectedTable = false;\n this.isCellSelecting = false;\n this.isRightClicking = false;\n this.selectedCells$.next([]);\n }\n\n selectCellStart(cell: HTMLTableCellElement, editor: Editor) {\n this.isPrepareSelecting = true;\n const node = AngularEditor.toSlateNode(editor, cell);\n const path = AngularEditor.findPath(editor, node);\n this.anchorCellPath = path;\n this.focusCellPath = null;\n if (!this.preFocusCellPath) {\n this.preFocusCellPath = this.anchorCellPath;\n }\n }\n\n selectCellOngoing(cell: HTMLTableCellElement, editor: Editor) {\n if (AngularEditor.isReadonly(editor)) {\n return;\n }\n if (!editor.selection) {\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 || this.focusCellPath.toString() !== path.toString();\n this.focusCellPath = path;\n this.focusCellElement = cell;\n } else {\n isChanged =\n !this.focusCellPath ||\n (this.focusCellPath.toString() === this.anchorCellPath.toString() && this.selectedCells.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);\n this.preFocusCellPath = this.focusCellPath;\n }\n }\n }\n\n selectCellEnd(editor: Editor) {\n if (this.isCellSelecting) {\n this.focusCell(editor, this.focusCellPath);\n }\n this.isPrepareSelecting = false;\n this.preFocusCellPath = null;\n }\n\n focusCell(editor: Editor, path: number[]) {\n const at = Editor.start(editor, path);\n Transforms.select(editor, at);\n }\n\n dangerousCellsChange(): Observable<SelectedCell[]> {\n return this.dangerousCells$.asObservable().pipe(skip(1));\n }\n\n setDangerousCells() {\n this.dangerousRowsIndex = this.selectedRowsIndex;\n this.dangerousColumnsIndex = this.selectedColumnsIndex;\n this.dangerousCells$.next(this.selectedCells);\n }\n\n clearDangerousCells() {\n this.dangerousRowsIndex = [];\n this.dangerousColumnsIndex = [];\n this.dangerousCells$.next([]);\n const pos = this.createTablePosition();\n if (pos.table) {\n this.isSelectedTable = this.selectedRowsIndex.length === pos.getHeight() && this.selectedColumnsIndex.length === pos.getWidth();\n }\n }\n\n dangerousOrSelectedCellsChange(): Observable<SelectedCell[]> {\n return merge(this.dangerousCells$.asObservable().pipe(skip(1)), this.selectedCells$.asObservable().pipe(skip(1)));\n }\n\n setDangerousRows() {\n const cells = this.selectedCells;\n const rows = _(cells).map('row').uniq().valueOf();\n const pos = this.createTablePosition();\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 cells = this.selectedCells;\n const cols = _(cells).map('col').uniq().valueOf();\n const pos = this.createTablePosition();\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((v, 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 { cells, pos } = this.getTableCellsAndPosition(this.editor);\n this.dangerousRowsIndex = [...Array(pos.getHeight())].map((v, i) => i);\n this.dangerousColumnsIndex = [...Array(pos.getWidth())].map((v, i) => i);\n this.dangerousCells$.next(cells);\n }\n\n selectFirstCell() {\n const { row, col } = this.selectedCells[0];\n const tablePath = this.getTablePath(this.editor);\n const path = Editor.start(this.editor, [...tablePath, row, col]);\n Transforms.select(this.editor, path);\n }\n\n setSelectedCellsBackgroundColor(backgroundColor: ColorType) {\n const cells = this.selectedCells;\n const tablePath = this.getTablePath(this.editor);\n Editor.withoutNormalizing(this.editor, () => {\n for (const cell of cells) {\n const { row, col } = cell;\n const cellPath = [...tablePath, row, col];\n Transforms.setNodes(this.editor, { backgroundColor }, { at: cellPath });\n }\n });\n }\n\n getSelectedCellBackgroundColor(): string {\n if (this.editor && this.editor.selection) {\n const {\n anchor: { path }\n } = this.editor.selection;\n const opts = new TableOptions();\n const { cell } = TablePosition.create(opts, this.editor, path);\n return cell && cell.backgroundColor;\n }\n return '';\n }\n\n clearSelectedCellsContent() {\n const cells = this.selectedCells;\n const tablePosition = this.getTablePosition(this.editor);\n if (tablePosition.isInTable()) {\n Editor.withoutNormalizing(this.editor, () => {\n for (const cell of cells) {\n const { row, col } = cell;\n const cellPath = [...tablePosition.tableEntry[1], row, col];\n const node = Node.get(this.editor, cellPath) as TableCellElement;\n TableEditor.clearCell(this.editor, [node, cellPath]);\n }\n });\n Transforms.select(this.editor, Editor.start(this.editor, tablePosition.cellEntry[1]));\n }\n }\n\n mergeCell(editor: Editor) {\n mergeCell(editor, this.selectedCells);\n }\n\n removeDangerousColumns() {\n const { dangerousColumnsIndex, isSelectedTable } = this;\n if (isSelectedTable) {\n TableEditor.removeTable(this.editor);\n return;\n }\n dangerousColumnsIndex\n .sort((a, b) => b - a)\n .forEach(index => {\n TableEditor.removeColumn(this.editor, index);\n });\n this.changeCells();\n }\n\n removeDangerousRows() {\n const { dangerousRowsIndex, isSelectedTable } = this;\n if (isSelectedTable) {\n TableEditor.removeTable(this.editor);\n return;\n }\n dangerousRowsIndex\n .sort((a, b) => b - a)\n .forEach(index => {\n TableEditor.removeRow(this.editor, index);\n });\n this.changeCells();\n }\n\n createTablePosition(): TablePosition {\n const {\n anchor: { path }\n } = this.editor.selection;\n const opts = new TableOptions();\n return TablePosition.create(opts, this.editor, path);\n }\n\n removeColumnOrRows() {\n const { selectedRowsIndex, selectedColumnsIndex, isSelectedTable } = this;\n if (isSelectedTable) {\n TableEditor.removeTable(this.editor);\n return;\n }\n if (selectedRowsIndex.length > 0 && selectedColumnsIndex.length === 0) {\n selectedRowsIndex\n .sort((a, b) => b - a)\n .forEach(index => {\n TableEditor.removeRow(this.editor, index);\n });\n this.changeCells();\n }\n if (selectedColumnsIndex.length > 0 && selectedRowsIndex.length === 0) {\n selectedColumnsIndex\n .sort((a, b) => b - a)\n .forEach(index => {\n TableEditor.removeColumn(this.editor, index);\n });\n this.changeCells();\n }\n }\n}\n","import { Editor, Transforms } from 'slate';\nimport { TableCellElement, TableElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\nimport { TablePosition } from './table-position';\nimport * as TheQueries from '../../../queries';\n\nexport function splitCell(editor: Editor) {\n const opts = new TableOptions();\n const { anchor } = editor.selection;\n const tablePosition = TablePosition.create(opts, editor, anchor.path);\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 { isSelectedCellMerged } from './merge-cell';\nimport { getSelectCellNode } from './get-select-cell-node';\nimport { MenuEntity, SelectedCell } from '../table.types';\n\nexport function setCellMenuInvisibility(editor: Editor, menuList: MenuEntity[], selectedCells: SelectedCell[], isActiveSelect?: boolean) {\n const isCellMerged = isSelectedCellMerged(editor);\n const selectCellNodes = getSelectCellNode(editor, selectedCells).filter(item => !item.node.hidden);\n menuList.forEach(item => {\n if (item.key === 'merge-cells') {\n item.invisibility = !(selectCellNodes && selectCellNodes.length > 1 && !isActiveSelect);\n }\n if (item.key === 'split-cells') {\n item.invisibility = !(selectCellNodes && selectCellNodes.length === 1 && isCellMerged && !isActiveSelect);\n }\n });\n}\n","import { Component, HostBinding, Input, OnInit } from '@angular/core';\nimport { ToolbarItemMode } from '../../constants/toolbar';\n\n@Component({\n selector: 'nav-split-line',\n template: ''\n})\nexport class NavSplitLineComponent implements OnInit {\n @Input() mode: ToolbarItemMode = ToolbarItemMode.vertical;\n\n @HostBinding('class.the-nav-split-line')\n theNavSplitLine = true;\n\n @HostBinding('class.horizontal') get horizontal() {\n return this.mode === ToolbarItemMode.horizontal;\n }\n\n @HostBinding('class.vertical') get vertical() {\n return this.mode === ToolbarItemMode.vertical;\n }\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","import { Component, OnInit, Input, NgZone, OnDestroy } from '@angular/core';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor } from 'slate';\nimport { TableStore } from '../../table.store';\nimport { ColorType, BackgroundColors, TableHeaderBackgroundColor, SpecialBackgroundColor } from '../../../../constants/color-select';\nimport { TheColorSelectService } from '../../../../services/color-select.service';\nimport { splitCell } from '../../utils/split-cell';\nimport { setCellMenuInvisibility } from '../../utils/set-menu-cell-invisibility';\nimport { MenuEntity } from '../../table.types';\nimport { TableEditor } from '../../table.editor';\n\n@Component({\n selector: 'the-table-toolbar',\n templateUrl: 'table-toolbar.component.html'\n})\nexport class TheTableToolbarComponent implements OnInit, OnDestroy {\n selectedColor: string;\n\n deleteIcon: string;\n\n iconName: string;\n\n @Input() tableStore: TableStore;\n\n @Input() isActiveSelect: boolean;\n\n get editor(): Editor {\n return this.tableStore && this.tableStore.editor;\n }\n\n cellMenuList: MenuEntity[] = [\n {\n key: 'merge-cells',\n name: '合并单元格',\n invisibility: false,\n icon: 'table-merge-cells',\n actionHandle: () => {\n event.preventDefault();\n event.stopPropagation();\n this.tableStore.mergeCell(this.editor);\n this.popoverRef.close();\n this.tableStore.clearSelectedCells();\n }\n },\n {\n key: 'split-cells',\n name: '拆分单元格',\n invisibility: false,\n icon: 'table-unmerge-cells',\n actionHandle: () => {\n event.preventDefault();\n event.stopPropagation();\n splitCell(this.editor);\n this.popoverRef.close();\n this.tableStore.clearSelectedCells();\n }\n }\n ];\n\n get isShowSplitLine() {\n return this.cellMenuList.filter(item => !item.invisibility).length > 1;\n }\n\n constructor(\n private ngZone: NgZone,\n private colorSelectService: TheColorSelectService,\n private popoverRef: ThyPopoverRef<TheTableToolbarComponent>\n ) {}\n\n ngOnInit() {\n this.deleteIcon = DeleteIcon[this.getDeleteIcon()];\n this.getIconName(this.deleteIcon);\n setCellMenuInvisibility(this.editor, this.cellMenuList, this.tableStore.selectedCells, this.isActiveSelect);\n this.selectedColor = this.tableStore.getSelectedCellBackgroundColor();\n }\n\n ngOnDestroy() {\n this.colorSelectService.closeColorSelect();\n }\n\n getIconName(key: string) {\n switch (key) {\n case 'trash':\n this.iconName = '删除表格';\n break;\n case 'table-delete-columns':\n this.iconName = '删除整列';\n break;\n case 'table-delete-rows':\n this.iconName = '删除整行';\n break;\n }\n }\n\n getDeleteIcon() {\n if (this.tableStore.isSelectedTable) {\n return DeleteIcon.trash;\n }\n if (this.tableStore.selectedRowsIndex.length > 0) {\n return DeleteIcon['table-delete-rows'];\n }\n if (this.tableStore.selectedColumnsIndex.length > 0) {\n return DeleteIcon['table-delete-columns'];\n }\n return null;\n }\n\n onDelete(event: MouseEvent) {\n event.preventDefault();\n this.tableStore.removeColumnOrRows();\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 openSelectColor(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n const element = (event.target as HTMLElement).closest('.thy-icon-nav-link');\n const isHeader = TableEditor.isActiveHeader(this.editor);\n this.ngZone.run(() => {\n this.colorSelectService.toggleColorSelect(\n element as HTMLElement,\n this.selectedColor,\n BackgroundColors,\n {\n perRowColorNumbers: 7,\n rowOptions: { 1: '#bbb', 2: '#bbb' },\n specialColor: isHeader ? TableHeaderBackgroundColor : SpecialBackgroundColor\n },\n (newColor: ColorType) => {\n if ((newColor === TableHeaderBackgroundColor && isHeader) || (newColor === SpecialBackgroundColor && !isHeader)) {\n this.tableStore.setSelectedCellsBackgroundColor(null);\n } else {\n this.tableStore.setSelectedCellsBackgroundColor(newColor);\n }\n this.selectedColor = newColor;\n }\n );\n });\n }\n}\n\nexport enum DeleteIcon {\n 'table-delete-rows',\n 'table-delete-columns',\n 'trash'\n}\n","<thy-icon-nav>\n <ng-container *ngFor=\"let item of cellMenuList\">\n <a href=\"javascript:;\" thyIconNavLink *ngIf=\"!item.invisibility\" [thyTooltip]=\"item.name\" (mousedown)=\"item.actionHandle()\">\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n </a>\n </ng-container>\n <nav-split-line *ngIf=\"!isActiveSelect && isShowSplitLine\"></nav-split-line>\n <a href=\"javascript:;\" thyIconNavLink thyTooltip=\"单元格背景\" (mousedown)=\"openSelectColor($event)\">\n <thy-icon thyIconName=\"background-tt\" thyIconType=\"twotone\" [thyTwotoneColor]=\"selectedColor\"></thy-icon>\n </a>\n <nav-split-line *ngIf=\"deleteIcon\"></nav-split-line>\n <a\n *ngIf=\"deleteIcon\"\n href=\"javascript:;\"\n thyIconNavLink\n [thyTooltip]=\"iconName\"\n class=\"danger\"\n [thyIconNavLinkIcon]=\"deleteIcon\"\n (mousedown)=\"onDelete($event)\"\n (mouseenter)=\"onEnterDelete($event)\"\n (mouseleave)=\"onLeaveDelete($event)\"\n ></a>\n</thy-icon-nav>\n","import isHotkey from 'is-hotkey';\n\nexport function isVirtualKey(e: KeyboardEvent) {\n const isMod = e.ctrlKey || e.metaKey;\n const isAlt = isHotkey('alt', e);\n const isShift = isHotkey('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 { OnInit, Component, Input, HostBinding, HostListener, ElementRef } from '@angular/core';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { MenuEntity } from '../../plugins/table/table.types';\n\n@Component({\n selector: 'the-contextmenu',\n templateUrl: 'contextmenu.component.html'\n})\nexport class TheContextMenuComponent 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 deactiveHandle: (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 (!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 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.deactiveHandle(event, entity);\n }\n\n itemMouseenter(event: MouseEvent, entity: MenuEntity) {\n event.preventDefault();\n this.activeHandle(event, entity);\n }\n\n constructor(public elementRef: ElementRef, private thyPopoverRef: ThyPopoverRef<TheContextMenuComponent>) {}\n\n ngOnInit() {}\n}\n","<thy-action-menu>\n <ng-container *ngFor=\"let menuItem of menuEntities\">\n <a\n thyActionMenuItem\n href=\"javascript:;\"\n *ngIf=\"!menuItem.invisibility\"\n (mousedown)=\"itemMousedown($event, menuItem)\"\n (mouseenter)=\"itemMouseenter($event, menuItem)\"\n (mouseleave)=\"itemMouseleave($event, menuItem)\"\n >\n <span thyActionMenuItemIcon>\n <thy-icon\n *ngIf=\"menuItem.backgroundColor; else elseIcon\"\n [thyIconName]=\"menuItem.icon\"\n thyIconType=\"twotone\"\n [thyTwotoneColor]=\"menuItem.backgroundColor\"\n ></thy-icon>\n <ng-template #elseIcon>\n <thy-icon [thyIconName]=\"menuItem.icon\"></thy-icon>\n </ng-template>\n </span>\n <span thyActionMenuItemName>{{ menuItem.name }}</span>\n <span *ngIf=\"menuItem.extendIcon\" thyActionMenuItemExtendIcon>\n <thy-icon thyIconName=\"{{ menuItem.extendIcon }}\"></thy-icon>\n </span>\n </a>\n <thy-action-menu-divider *ngIf=\"menuItem.divider\"></thy-action-menu-divider>\n </ng-container>\n</thy-action-menu>\n","import { Injectable, NgZone } from '@angular/core';\nimport { BackgroundColors, ColorType, SpecialBackgroundColor, TableHeaderBackgroundColor } from '../constants/color-select';\nimport { TableStore } from '../plugins/table/table.store';\nimport { TheColorSelectService } from './color-select.service';\nimport { TableEditor } from '../plugins/table/table.editor';\nimport { ThyPopoverRef, ThyPopover } from 'ngx-tethys/popover';\nimport { TheContextMenuComponent } from '../components/contextmenu/contextmenu.component';\nimport { TheContextService } from './context.service';\nimport { splitCell } from '../plugins/table/utils/split-cell';\nimport { setCellMenuInvisibility } from '../plugins/table/utils/set-menu-cell-invisibility';\nimport { MenuEntity } from '../plugins/table/table.types';\n\n@Injectable()\nexport class TheTableContextMenuService {\n menuRef: ThyPopoverRef<TheContextMenuComponent>;\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 return this.tableStore.getSelectedCellBackgroundColor();\n }\n\n constructor(\n private colorSelectService: TheColorSelectService,\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: '单元格背景',\n extendIcon: 'angle-right',\n actionHandle: () => {},\n activeHandle: (event: MouseEvent) => {\n if (this.colorSelectService.isOpenColorSelect) {\n return;\n }\n const isHeader = TableEditor.isActiveHeader(this.editor);\n this.colorSelectService.toggleColorSelect(\n event.target as HTMLElement,\n this.backgroundColor,\n BackgroundColors,\n {\n perRowColorNumbers: 7,\n rowOptions: { 1: '#bbb', 2: '#bbb' },\n specialColor: isHeader ? TableHeaderBackgroundColor : SpecialBackgroundColor\n },\n (newColor: ColorType) => {\n if ((newColor === TableHeaderBackgroundColor && isHeader) || (newColor === SpecialBackgroundColor && !isHeader)) {\n this.tableStore.setSelectedCellsBackgroundColor(null);\n } else {\n this.tableStore.setSelectedCellsBackgroundColor(newColor);\n }\n this.tableStore.selectFirstCell();\n },\n 'rightTop',\n 0\n );\n },\n deactiveHandle: (event: MouseEvent) => {\n if (event.relatedTarget instanceof HTMLElement) {\n if (event.relatedTarget.classList.contains('color-container')) {\n return;\n }\n }\n if (this.colorSelectService.isOpenColorSelect) {\n this.colorSelectService.closeColorSelect();\n }\n }\n },\n {\n key: 'clear-selection',\n icon: 'sweep',\n divider: true,\n name: '清空选中区域',\n actionHandle: () => {\n this.tableStore.clearSelectedCellsContent();\n this.tableStore.selectFirstCell();\n }\n },\n {\n key: 'merge-cells',\n icon: 'table-merge-cells',\n name: '合并单元格',\n actionHandle: () => {\n this.tableStore.mergeCell(this.editor);\n }\n },\n {\n key: 'split-cells',\n icon: 'table-unmerge-cells',\n name: '拆分单元格',\n divider: true,\n actionHandle: () => {\n splitCell(this.editor);\n }\n },\n {\n key: 'delete-selection-rows',\n icon: 'table-delete-rows',\n name: '删除所在行',\n actionHandle: () => {\n this.tableStore.removeDangerousRows();\n this.tableStore.clearDangerousCells();\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: '删除所在列',\n actionHandle: () => {\n this.tableStore.removeDangerousColumns();\n this.tableStore.clearDangerousCells();\n },\n activeHandle: () => {\n this.tableStore.setDangerousColumns();\n }\n },\n {\n key: 'delete-table',\n icon: 'trash',\n name: '删除表格',\n actionHandle: () => {\n TableEditor.removeTable(this.editor);\n this.tableStore.clearDangerousCells();\n },\n activeHandle: () => {\n this.tableStore.setDangerousTable();\n }\n }\n ];\n\n openMenuList(event: MouseEvent) {\n this.ngZone.run(() => {\n setCellMenuInvisibility(this.editor, this.menuEntities, this.tableStore.selectedCells);\n this.menuEntities.forEach(item => {\n if (item.key === 'background-color') {\n item.backgroundColor = this.tableStore.getSelectedCellBackgroundColor();\n }\n });\n this.menuRef = this.thyPopover.open(TheContextMenuComponent, {\n origin: event.target as HTMLElement,\n initialState: {\n menuEntities: this.menuEntities,\n actionHandle: (entity: MenuEntity) => {\n entity.actionHandle(entity);\n },\n activeHandle: (menuEvent: MouseEvent, entity: MenuEntity) => {\n if (entity.activeHandle) {\n entity.activeHandle(menuEvent);\n }\n },\n deactiveHandle: (menuEvent: MouseEvent, entity: MenuEntity) => {\n if (entity.key.indexOf('delete') >= 0) {\n this.tableStore.clearDangerousCells();\n }\n if (entity.deactiveHandle) {\n entity.deactiveHandle(menuEvent);\n }\n }\n },\n originPosition: {\n x: event.x + 30,\n y: event.y\n },\n hasBackdrop: false,\n placement: 'bottomLeft',\n viewContainerRef: this.theContextService.getOptions().viewContainerRef,\n manualClosure: true,\n insideClosable: false,\n backdropClosable: false\n });\n this.menuRef.afterClosed().subscribe(() => {\n this.tableStore.clearSelectedCells();\n });\n });\n }\n\n closeContextMenu() {\n if (this.isOpened) {\n this.menuRef.close();\n return this.menuRef.afterClosed();\n }\n }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { ThyPlacement } from 'ngx-tethys/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { TheTableToolbarComponent } from './components/toolbar/table-toolbar.component';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { TableStore } from './table.store';\nimport { TheTableContextMenuService } from '../../services/table-contextmenu.service';\nimport { TheContextService } from '../../services/context.service';\nimport { fromEvent, merge } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { isVirtualKey } from './utils/is-virtual-key';\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 theTableContextMenuService: TheTableContextMenuService,\n private ngZone: NgZone,\n private theContextService: TheContextService\n ) {}\n\n openToolbar(origin: HTMLElement, isActiveSelect?: boolean) {\n this.theTableContextMenuService.closeContextMenu();\n\n if (this.isOpened) {\n if (this.toolbarRef.containerInstance.config.origin === origin) {\n return;\n }\n this.toolbarRef.close();\n }\n this.toolbarRef = this.thyPopover.open(TheTableToolbarComponent, {\n initialState: {\n tableStore: this.tableStore,\n isActiveSelect\n },\n viewContainerRef: this.theContextService.getOptions().viewContainerRef,\n origin: this.getOrigin(origin),\n backdropClosable: this.backdropClosable,\n placement: this.placement,\n offset: this.offset,\n hasBackdrop: this.hasBackdrop,\n insideClosable: this.insideClosable,\n panelClass: 'the-table-toolbar-wrap',\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n manualClosure: true\n });\n this._listenCellClearEvent();\n }\n\n getOrigin(origin: HTMLElement): HTMLElement {\n if (origin instanceof HTMLTableCellElement && 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-controls-inner')[col] as HTMLElement;\n }\n if (selectedRowsIndex.length > 0 && col === 0) {\n return tableElement.querySelectorAll('.the-table-row-controls-button-wrap')[row] as HTMLElement;\n }\n }\n return origin;\n }\n\n closeToolbar() {\n if (this.isOpened) {\n this.ngZone.run(() => {\n this.toolbarRef.close();\n });\n return this.toolbarRef.afterClosed();\n }\n }\n\n _listenCellClearEvent() {\n const onMouseObservable = 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(take(1))\n .subscribe((e: MouseEvent) => {\n if (this.tableStore.selectedCells && this.tableStore.selectedCells.length > 0) {\n if (e.type === 'keydown') {\n this.tableStore.clearSelectedCellsContent();\n }\n this.tableStore.clearSelectedCells();\n this.closeToolbar();\n onMouseObservable.unsubscribe();\n }\n });\n }\n}\n","export const SLA_TABLE_SELECTOR = '.slate-element-table';\n\nexport const SLA_TABLE_CELL_SELECTOR = '.slate-element-table-cell';\n","import { Component, OnInit, OnDestroy, Input, ChangeDetectorRef } from '@angular/core';\nimport { Editor, Range, Transforms } from 'slate';\nimport { ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport { TableEditor } from '../../table.editor';\nimport { TablePosition } from '../../utils/table-position';\nimport { TableStore } from '../../table.store';\nimport type { TheTableComponent } from '../table.component';\nimport { TableOptions } from '../../table.types';\n\n@Component({\n selector: 'the-table-insert-mark',\n templateUrl: './insert-mark.component.html'\n})\nexport class TheInsertMarkComponent implements OnInit, OnDestroy {\n @Input() type: 'row' | 'column';\n @Input() at: number;\n @Input() tableStore: TableStore;\n\n public insertLength: string;\n\n public dotWrapperHovered: boolean;\n\n tooltipContent = '';\n\n get disabled(): boolean {\n return this.tableStore && !!this.tableStore.selectedCells.length;\n }\n\n get editor(): Editor {\n return this.tableStore && this.tableStore.editor;\n }\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {\n this.tooltipContent = this.type === 'row' ? '插入行' : '插入列';\n }\n\n onMouseDown(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\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 // update header\n if (this.type === 'row' && this.at === 0) {\n const { selection } = this.editor;\n const opts = new TableOptions();\n const table = TablePosition.create(opts, this.editor, selection.anchor.path);\n Transforms.setNodes(this.editor, { header: true }, { at: table.tableEntry[1].concat(0) });\n Transforms.setNodes(this.editor, { header: null }, { at: table.tableEntry[1].concat(1) });\n }\n this.tableStore.changeCells();\n }\n\n onMouseEnter(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n if (this.disabled) {\n return;\n }\n this.dotWrapperHovered = true;\n this.insertLength = this.getLength();\n this.cdr.detectChanges();\n }\n\n onMouseLeave(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n if (this.disabled) {\n return;\n }\n this.dotWrapperHovered = false;\n this.cdr.detectChanges();\n }\n\n getLength() {\n const { selection } = this.editor;\n if (selection && Range.isCollapsed(selection)) {\n const { table } = TablePosition.create(new TableOptions(), this.editor, selection.anchor.path);\n if (!table) {\n return;\n }\n const tableComponent = ELEMENT_TO_COMPONENT.get(table) as TheTableComponent;\n const tableWrapper = tableComponent.tableWrapper.nativeElement as HTMLElement;\n const tableElement = tableComponent.theTableElement.nativeElement as HTMLElement;\n let result = 0;\n if (this.type === 'row') {\n result = tableWrapper.offsetWidth + 11;\n } else {\n result = tableElement.offsetHeight - 1;\n }\n return result + 'px';\n }\n }\n\n ngOnDestroy() {}\n}\n","<div\n [thyTooltip]=\"!disabled && tooltipContent\"\n class=\"the-table-controls-insert-wrapper\"\n [ngClass]=\"{ disabled: disabled }\"\n contenteditable=\"false\"\n (mousedown)=\"onMouseDown($event)\"\n (mouseenter)=\"onMouseEnter($event)\"\n (mouseleave)=\"onMouseLeave($event)\"\n>\n <div\n class=\"the-table-controls-insert-line\"\n *ngIf=\"dotWrapperHovered\"\n [attr.data-dot-type]=\"type\"\n [ngStyle]=\"{ height: type === 'column' && insertLength, width: type === 'row' && insertLength }\"\n ></div>\n</div>\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","import { Directive, OnDestroy, AfterViewInit, ElementRef, ViewContainerRef, ChangeDetectorRef, NgZone, Inject } from '@angular/core';\nimport { fromEvent, ReplaySubject } from 'rxjs';\nimport { map, takeUntil, filter, mapTo, throttleTime } from 'rxjs/operators';\nimport { HoveredCellInfo, TableCellEventDispatcher } from './event-dispatcher';\nimport { RESIZE_OVERLAY_SELECTOR } from './selectors';\nimport { ColumnResizeNotifierSource } from './column-resize-notifier';\nimport { SLA_TABLE_CELL_SELECTOR } from '../../constants/selector';\nimport { TheTableComponentBase, TheTableToken } from '../../plugins/table/table.types';\n\n@Directive({\n selector: 'div[theColumnResize]'\n})\nexport class TheColumnResizeDirective implements AfterViewInit, OnDestroy {\n protected readonly destroyed = new ReplaySubject<void>();\n protected isXAxis: boolean;\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(TheTableToken)\n public theTableComponent: TheTableComponentBase\n ) {}\n\n ngAfterViewInit() {\n this._listenForCellEdgeHoverEvents();\n this._listenStartDrag();\n this._listenEndDrag();\n }\n\n _listenForCellEdgeHoverEvents() {\n this.ngZone.runOutsideAngular(() => {\n const element = this.elementRef.nativeElement!;\n let previous: { x: number; y: number } = { x: 0, y: 0 };\n fromEvent<MouseEvent>(element, 'mousemove') // mouseover to mousemove 增加灵敏性\n .pipe(\n throttleTime(300), // 防抖\n map(event => {\n if (!this.theTableComponent.isCollapsed) {\n return null;\n }\n const cell = (event.target as HTMLElement).closest(SLA_TABLE_CELL_SELECTOR) as HTMLTableCellElement;\n let hoveredInfo: HoveredCellInfo;\n let position;\n if (cell) {\n if (previous.x > 0) {\n const rectCell = cell.getBoundingClientRect();\n const deltaX = previous.x - event.clientX;\n const deltaY = previous.y - event.clientY;\n if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX !== 0) {\n const centerCellX = rectCell.x + rectCell.width / 2;\n position = event.x > centerCellX ? 'right' : 'left';\n this.isXAxis = true;\n }\n if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY !== 0) {\n this.isXAxis = false;\n const centerCellY = rectCell.y + rectCell.height / 2;\n position = event.y > centerCellY ? 'top' : 'bottom';\n }\n hoveredInfo = {\n cell,\n position\n };\n }\n previous = {\n x: event.clientX,\n y: event.clientY\n };\n return position ? hoveredInfo : null;\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.isXAxis ? this.theTableComponent.initializeColumns() : this.theTableComponent.initializeRows();\n });\n }\n\n _listenEndDrag() {\n this.resizeNotifier.resizeCompleted.pipe(takeUntil(this.destroyed)).subscribe(() => {\n this.isXAxis ? this.theTableComponent.transformColumnsWidth() : this.theTableComponent.transformRowHeight();\n });\n }\n\n ngOnDestroy() {\n this.destroyed.next();\n this.destroyed.complete();\n }\n}\n","import { Component, OnInit, ElementRef, OnDestroy, ChangeDetectorRef, NgZone, AfterViewInit, ViewChild, HostListener } from '@angular/core';\nimport { fromEvent, Subject } from 'rxjs';\nimport { take, takeUntil, debounceTime } from 'rxjs/operators';\nimport { Editor, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { TablePosition } from '../utils';\nimport { ColumnResizeNotifierSource } from '../../../components/column-resize/column-resize-notifier';\nimport { TableCellEventDispatcher } from '../../../components/column-resize/event-dispatcher';\nimport { TableStore } from '../table.store';\nimport { getElementHeight, getElementWidth } from '../../../utils/dom';\nimport { TableService } from '../table.service';\nimport { TheTableContextMenuService } from '../../../services/table-contextmenu.service';\nimport { TheContextService } from '../../../services/context.service';\nimport { TheBaseElementComponent } from '../../../interfaces/view-base';\nimport { TableCellElement, TableElement, TableRowElement } from '../../../custom-types';\nimport { TableOptions, TheTableColumn, TheTableToken } from '../table.types';\nimport { TheEditor } from '../../../interfaces/editor';\nimport { SLA_TABLE_CELL_SELECTOR } from '../../../constants/selector';\nimport * as TheTransforms from '../../../transforms';\n\n@Component({\n selector: 'the-table, [theTable]',\n templateUrl: './table.component.html',\n providers: [\n TableStore,\n TableService,\n TheTableContextMenuService,\n TableCellEventDispatcher,\n ColumnResizeNotifierSource,\n {\n provide: TheTableToken,\n useExisting: TheTableComponent\n }\n ]\n})\nexport class TheTableComponent extends TheBaseElementComponent<TableElement, Editor> implements OnInit, AfterViewInit, OnDestroy {\n destroy$: Subject<any> = new Subject();\n theTableWrapperWidth: number;\n\n rowControls: { height: number; rowIndex: number }[] = [];\n\n colControls = [];\n\n normalizedColumns: TheTableColumn[];\n\n isInTable: boolean;\n\n get columns(): TheTableColumn[] {\n return this.normalizedColumns || (this.element && this.element.columns);\n }\n\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n get tbodyNativeElement(): HTMLElement {\n return this.tbodyElement?.nativeElement;\n }\n\n get isSelectedAllCell() {\n return (\n this.tableStore.selectedRowsIndex.length === this.rowControls.length &&\n this.tableStore.selectedColumnsIndex.length === this.colControls.length\n );\n }\n\n @ViewChild('tableWrapper', { read: ElementRef, static: true })\n tableWrapper: ElementRef;\n\n @ViewChild('theTable', { read: ElementRef, static: true })\n theTableElement: ElementRef;\n\n @ViewChild('tbody', { read: ElementRef, static: true })\n tbodyElement: ElementRef;\n\n @HostListener('mousedown', ['$event'])\n handleMousedown(event: MouseEvent) {\n if (event.target instanceof Element && this.tbodyNativeElement.contains(event.target)) {\n return;\n }\n if (!TheEditor.isFocused(this.editor)) {\n TheEditor.focus(this.editor);\n }\n AngularEditor.moveBlockCard(this.editor, this.element, { direction: 'left' });\n event.preventDefault();\n }\n\n onContextChange() {\n super.onContextChange();\n if (this.initialized) {\n Promise.resolve().then(() => {\n this.tableStore.emitTableChange();\n this.useRowControls();\n });\n this.getIsInTable();\n this.getColControls();\n if (this.normalizedColumns) {\n this.normalizeShowColumns();\n }\n }\n }\n\n constructor(\n elementRef: ElementRef,\n public eventDispatcher: TableCellEventDispatcher,\n public resizeNotifier: ColumnResizeNotifierSource,\n public tableStore: TableStore,\n public cdr: ChangeDetectorRef,\n public ngZone: NgZone,\n public tableService: TableService,\n private theContextService: TheContextService,\n private theTableContextMenuService: TheTableContextMenuService\n ) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.getColControls();\n this.getIsInTable();\n }\n\n ngAfterViewInit() {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n const blockCardElement = this.nativeElement.closest('slate-block-card');\n if (blockCardElement) {\n blockCardElement.classList.add(`slate-block-card-${this.element.type}`);\n }\n this.tableStore.initEditor(this.editor);\n this.subscribeCellsChange();\n this.subscribeCellPositionChange();\n this.listenTableContextMenuEvent();\n this.useTableWrapperWidth();\n // need view render complete\n this.useRowControls();\n });\n }\n\n subscribeCellPositionChange() {\n this.tableStore\n .cellsPositionChange()\n .pipe(debounceTime(100), takeUntil(this.destroy$))\n .subscribe(x => {\n this.cdr.detectChanges();\n });\n }\n\n useTableWrapperWidth() {\n const rootWidth = this.theContextService.getOptions().width;\n const tablePath = TheEditor.findPath(this.editor, this.element);\n if (tablePath.length > 1) {\n // 解决table不在顶层时,拖动单元格宽度计算问题\n this.theTableWrapperWidth = this.tableWrapper.nativeElement.offsetWidth;\n } else {\n this.theTableWrapperWidth = rootWidth;\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 (this.selection) {\n this.rowControls = this.calculateRowControls();\n this.cdr.markForCheck();\n }\n }\n\n detectChanges() {\n this.cdr.detectChanges();\n }\n\n calculateMinRowSpanCellForRows(): { cell?: TableCellElement; rowIndex: number }[] {\n const table = this.element;\n const cells = table.children.map((row, index) => {\n const noHiddenCells = row.children.filter(cell => !cell.hidden);\n if (noHiddenCells.length > 0) {\n const minRowspan = Math.min.apply(\n Math,\n noHiddenCells.map(cell => {\n return cell.rowspan || 1;\n })\n );\n\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 calculateRowControls() {\n const minRowSpanCellForRows = this.calculateMinRowSpanCellForRows();\n\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 this.calculateRowControlsAvgHeight(previousCombineRowIndex, previousRowIndex, rowControls);\n }\n return;\n }\n\n // calculate combine row height\n if (previousCombineRowIndex > previousRowIndex) {\n this.calculateRowControlsAvgHeight(previousCombineRowIndex, previousRowIndex, rowControls);\n previousCombineRowIndex = 0;\n }\n\n const cellDom = AngularEditor.toDOMNode(this.editor, cellInfo.cell);\n let height = getElementHeight(cellDom);\n // 当cell为合并的单元格(rowspan > 1),计算其实际高度(当前单元格的高度 - 下方合并单元格的高度)\n if (cellInfo.cell.rowspan > 1) {\n const calcHeight = height - this.getBelowRowHeight(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\n 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((item, _index) => _index > previousRowIndex && _index <= previousCombineRowIndex)\n .forEach(rowControl => {\n rowControl.height = avgHeight;\n });\n }\n\n getBelowRowHeight(\n cells: {\n cell?: TableCellElement;\n rowIndex: number;\n }[],\n index: number,\n rowIndex: number,\n rowspan: number\n ) {\n let belowRowlHeight = 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(this.editor, item.cell);\n if (item.cell.rowspan > 1) {\n // 如果下方单元格的rowspan > 1,递归计算\n const height = this.getBelowRowHeight(\n cells,\n cells.findIndex(cell => cell.rowIndex === item.rowIndex),\n item.rowIndex,\n item.cell.rowspan\n );\n belowRowlHeight += getElementHeight(cellDom) - height;\n } else {\n belowRowlHeight += getElementHeight(cellDom);\n }\n }\n });\n return belowRowlHeight;\n }\n\n getColControls() {\n this.colControls = this.element?.children[0]?.children || [];\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);\n this.tableService.openToolbar(event.target as HTMLElement, true);\n }\n }\n\n getIsInTable() {\n if (this.selection) {\n const opts = new TableOptions();\n const selection = this.editor.selection;\n const startPosition = TablePosition.create(opts, this.editor, selection.anchor.path);\n const endPosition = TablePosition.create(opts, this.editor, selection.focus.path);\n this.isInTable = startPosition.isInTable() && endPosition.isInTable();\n } else {\n this.isInTable = false;\n }\n }\n\n normalizeShowColumns() {\n const table = this.element;\n const tr = table.children[0];\n if (this.element.columns) {\n let isGood = true;\n this.normalizedColumns = table.columns.map(item => {\n return { ...item };\n });\n if (this.element.columns.length !== tr.children.length) {\n this.normalizedColumns = tr.children.map((item, i) => this.columns[i] || { width: 200 });\n isGood = false;\n }\n const totalWidth = this.normalizedColumns.reduce((pre, cur) => {\n return pre + cur.width;\n }, 0);\n if (totalWidth < this.theTableWrapperWidth) {\n const lastColumnWidth =\n this.theTableWrapperWidth - totalWidth + this.normalizedColumns[this.normalizedColumns.length - 1].width;\n this.normalizedColumns[this.normalizedColumns.length - 1] = { width: lastColumnWidth };\n isGood = false;\n }\n if (isGood) {\n this.normalizedColumns = null;\n }\n }\n }\n\n initializeColumns() {\n if (!this.element.columns) {\n const tr = this.element.children[0] as TableRowElement;\n const tableWidth = AngularEditor.toDOMNode(this.editor, tr).offsetWidth;\n const columns = tr.children.map(cell => {\n return { width: Math.round(tableWidth / tr.children.length) - tr.children.length };\n });\n TheTransforms.setNode(this.editor, { columns }, this.element);\n }\n }\n\n initializeRows() {\n this.element.children.map(row => {\n if (!row.height) {\n const element = TheEditor.toDOMNode(this.editor, row);\n TheTransforms.setNode(this.editor, { height: getElementHeight(element) }, row);\n }\n });\n }\n\n transformRowHeight() {\n const rowElements = this.nativeElement.querySelector('tbody').children;\n if (rowElements) {\n ([...rowElements] as HTMLTableRowElement[]).map((row, index) => {\n const height = getElementHeight(row);\n TheTransforms.setNode(this.editor, { height }, this.element.children[index]);\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 onRowMouseDown(event: MouseEvent, index: number) {\n event.stopPropagation();\n event.preventDefault();\n this.tableStore.selectRow(this.editor, index);\n this.tableService.openToolbar(event.target as HTMLElement, true);\n }\n\n onSelectTable(event: MouseEvent) {\n event.stopPropagation();\n event.preventDefault();\n this.tableStore.selectTable(this.editor);\n this.tableService.openToolbar(event.target as HTMLElement);\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 (!cell.classList.contains('selected-cell')) {\n this.tableStore.selectCell(cell, this.editor);\n }\n }\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.cdr.markForCheck();\n this.theTableContextMenuService.openMenuList(event);\n }\n\n // patch for right click select next cell\n setTimeout(() => {\n Transforms.select(this.editor, this.editor.selection.anchor.path);\n });\n });\n });\n }\n\n trackByFnRowCotrols(index: number) {\n return index;\n }\n\n trackByFnColCotrols(index: number) {\n return index;\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<div\n class=\"the-table-container\"\n theColumnResize\n [ngClass]=\"{\n 'the-table-with-controls': isInTable,\n 'the-table-selection-hide': tableStore.isCellSelecting || tableStore.isRightClicking\n }\"\n>\n <div class=\"the-table-row-controls-wrapper\" *ngIf=\"!readonly && isInTable\">\n <div>\n <div\n class=\"the-table-corner-controls\"\n [ngClass]=\"{ active: isSelectedAllCell, dangerous: tableStore.isSelectedTable && tableStore.dangerousCells.length > 0 }\"\n >\n <button type=\"button\" class=\"the-table-corner-button\" (mousedown)=\"onSelectTable($event)\"></button>\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 <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 </div>\n <div class=\"the-table-row-controls\">\n <div class=\"the-table-row-controls-inner\">\n <div\n class=\"the-table-row-controls-button-wrap\"\n *ngFor=\"let control of rowControls; let i = index; trackBy: trackByFnRowCotrols\"\n [ngClass]=\"{\n active: tableStore.selectedRowsIndex.includes(control.rowIndex),\n dangerous: tableStore.dangerousRowsIndex.includes(control.rowIndex) && tableStore.dangerousCells.length > 0\n }\"\n >\n <button\n (mousedown)=\"onRowMouseDown($event, control.rowIndex)\"\n type=\"button\"\n [ngStyle]=\"{ height: control.height + 1 + 'px' }\"\n class=\"the-table-row-controls-button the-table-controls-button\"\n ></button>\n <the-table-insert-mark type=\"row\" [at]=\"control.rowIndex + 1\" [tableStore]=\"tableStore\"></the-table-insert-mark>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"the-table-wrapper\" #tableWrapper>\n <table class=\"the-table\" #theTable [ngClass]=\"{ 'the-table-with-controls': isInTable }\">\n <colgroup *ngIf=\"columns\">\n <col *ngFor=\"let col of columns\" [ngStyle]=\"{ width: col.width + 'px' }\" />\n </colgroup>\n <thead>\n <tr class=\"the-table-col-controls-wrapper\">\n <th\n class=\"the-table-col-controls\"\n (mousedown)=\"onColMouseDown($event, i)\"\n *ngFor=\"let control of colControls; let i = index; trackBy: trackByFnColCotrols\"\n >\n <the-table-insert-mark\n *ngIf=\"isInTable\"\n type=\"column\"\n [at]=\"i + 1\"\n [tableStore]=\"tableStore\"\n ></the-table-insert-mark>\n <div\n class=\"the-table-col-controls-inner\"\n [ngClass]=\"{\n active: tableStore.selectedColumnsIndex.includes(i),\n dangerous: tableStore.dangerousColumnsIndex.includes(i) && tableStore.dangerousCells.length > 0\n }\"\n ></div>\n </th>\n </tr>\n </thead>\n <tbody #tbody>\n <slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"> </slate-children>\n </tbody>\n </table>\n </div>\n</div>\n","import { Editor, Transforms, Range } from 'slate';\nimport { createCell } from '../utils/create-cell';\nimport { TablePosition } from '../utils';\nimport { TableOptions } from '../table.types';\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 = TablePosition.create(opts, 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 { Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport * as TheQueries from '../../../queries';\n\nexport function calculateAnchorPositionInCell(editor: Editor) {\n let isFirstLine = false;\n let isLastLine = false;\n const anchorBlock = TheQueries.anchorBlock(editor);\n const anchorBlockPath = TheQueries.findPath(editor, anchorBlock);\n const anchorBlockDom = AngularEditor.toDOMNode(editor, anchorBlock);\n const valueRangeRect = anchorBlockDom.getBoundingClientRect();\n const anchorBlockHeight = window.getComputedStyle(anchorBlockDom).lineHeight;\n const nativeSelection = window.getSelection();\n const nativeRange = nativeSelection && nativeSelection.getRangeAt(0);\n const nativeRangeRect = nativeRange && nativeRange.getBoundingClientRect();\n if (valueRangeRect && nativeRangeRect && anchorBlockHeight) {\n const lineHeight = parseInt(anchorBlockHeight, 10);\n isFirstLine = nativeRangeRect.top - valueRangeRect.top < lineHeight;\n isLastLine = valueRangeRect.bottom - nativeRangeRect.bottom < lineHeight;\n }\n return {\n isFirstLine,\n isLastLine,\n anchorBlockPath\n };\n}\n","import { Component, HostBinding, OnInit } from '@angular/core';\nimport { TableRowElement } from '../../../../custom-types';\nimport { TheBaseElementComponent } from '../../../../interfaces/view-base';\n\n@Component({\n selector: 'tr[theTableRow]',\n template: '<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>'\n})\nexport class TheTableRowComponent extends TheBaseElementComponent<TableRowElement> implements OnInit {\n @HostBinding('style.backgroundColor') backgroundColor: string;\n @HostBinding('style.height') height: string;\n\n onContextChange() {\n super.onContextChange();\n if (this.initialized) {\n this.useBackground();\n this.useHeight();\n }\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.useBackground();\n this.useHeight();\n }\n\n useBackground() {\n if (this.element.header && !this.backgroundColor) {\n this.backgroundColor = '#F3F3F3';\n }\n if (!this.element.header && this.backgroundColor) {\n this.backgroundColor = null;\n }\n }\n\n useHeight() {\n if (this.element.height) {\n this.height = this.element.height + 'px';\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { getElementWidth, coercePixelsFromCssValue, getColsTotalWidth, getElementHeight, getRowsTotalHeight } from '../../utils/dom';\nimport { coerceCssPixelValue } from '@angular/cdk/coercion';\n\n@Injectable()\nexport class ColumnResizingStore {\n constructor() {\n this.resizeCols = [];\n this.resizeRows = [];\n }\n private direction: 'left' | 'right' | 'top' | 'bottom';\n private resizeCols: { colElement: HTMLTableColElement; baseWidth: number }[];\n private resizeRows: { rowElement: HTMLTableRowElement; baseHeight: number }[];\n private tableCols: { cols: HTMLTableColElement[]; baseWidth: number };\n private tableRows: { rows: HTMLTableRowElement[]; baseHeight: 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 storeResizingRow(rowElement: HTMLTableRowElement) {\n if (this.resizeRows.some(cache => cache.rowElement === rowElement)) {\n return;\n }\n this.resizeRows.push({ rowElement, baseHeight: getElementHeight(rowElement) });\n }\n\n storeTableWidth(cols: HTMLTableColElement[]) {\n if (!this.tableCols) {\n this.tableCols = { cols, baseWidth: getColsTotalWidth(cols) };\n }\n }\n\n storeTableHeight(rows: HTMLTableRowElement[]) {\n if (!this.tableRows) {\n this.tableRows = { rows, baseHeight: getRowsTotalHeight(rows) };\n }\n }\n\n cleanResizing() {\n this.tableCols = null;\n this.tableRows = null;\n this.resizeCols = [];\n this.resizeRows = [];\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 restoreTopRows(deltaY: number) {\n let index = this.resizeRows.length - 1;\n while (index >= 0 && deltaY > 0) {\n const currentHeight = coercePixelsFromCssValue(this.resizeRows[index].rowElement.style.height);\n if (this.resizeRows[index].baseHeight > currentHeight) {\n if (this.resizeRows[index].baseHeight > currentHeight + deltaY) {\n this.resizeRows[index].rowElement.style.height = coerceCssPixelValue(currentHeight + deltaY);\n deltaY = 0;\n } else {\n deltaY -= this.resizeRows[index].baseHeight - currentHeight;\n this.resizeRows[index].rowElement.style.height = coerceCssPixelValue(this.resizeRows[index].baseHeight);\n this.popRow();\n }\n }\n index--;\n }\n return deltaY;\n }\n\n restoreBottomRows(deltaY: number) {\n let index = this.resizeRows.length - 1;\n while (index >= 0 && deltaY < 0) {\n const currentHeight = coercePixelsFromCssValue(this.resizeRows[index].rowElement.style.height);\n if (this.resizeRows[index].baseHeight > currentHeight) {\n if (this.resizeRows[index].baseHeight > currentHeight + Math.abs(deltaY)) {\n this.resizeRows[index].rowElement.style.height = coerceCssPixelValue(currentHeight + Math.abs(deltaY));\n deltaY = 0;\n } else {\n deltaY += this.resizeRows[index].baseHeight - currentHeight;\n this.resizeRows[index].rowElement.style.height = coerceCssPixelValue(this.resizeRows[index].baseHeight);\n this.popRow();\n }\n }\n index--;\n }\n return deltaY;\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 getAddTableHeight(deltaY: number) {\n if (this.tableRows) {\n return getRowsTotalHeight(this.tableRows.rows) - this.tableRows.baseHeight - Math.abs(deltaY);\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 if (this.resizeRows.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 private popRow() {\n this.resizeRows.pop();\n }\n}\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';\n\n/** Tracks state of resize events in progress. */\nexport class ResizeRef {\n direction: 'X' | 'Y';\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","import {\n Component,\n OnDestroy,\n ElementRef,\n AfterViewInit,\n ChangeDetectionStrategy,\n ViewContainerRef,\n ChangeDetectorRef,\n NgZone,\n Inject\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { fromEvent, ReplaySubject } from 'rxjs';\nimport { takeUntil, mapTo, map, filter, startWith, pairwise, distinctUntilChanged } from 'rxjs/operators';\nimport { ResizeRef } from './resize-ref';\nimport { TableCellEventDispatcher } from './event-dispatcher';\nimport { ColumnResizeNotifierSource } from './column-resize-notifier';\n\n@Component({\n host: { class: 'the-table-resize-overlay-thumb' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: ''\n})\nexport class TheColumnResizeOverlayHandleComponent implements AfterViewInit, OnDestroy {\n protected readonly destroyed = new ReplaySubject<void>();\n\n constructor(\n public elementRef: ElementRef,\n public viewContainerRef: ViewContainerRef,\n public cdr: ChangeDetectorRef,\n public ngZone: NgZone,\n public resizeRef: ResizeRef,\n public eventDispatcher: TableCellEventDispatcher,\n @Inject(DOCUMENT) public document: any,\n public resizeNotifier: ColumnResizeNotifierSource\n ) {}\n\n ngAfterViewInit() {\n this._listenForMouseEvents();\n }\n\n private _listenForMouseEvents() {\n this.ngZone.runOutsideAngular(() => {\n const takeUntilDestroyed = takeUntil<MouseEvent>(this.destroyed);\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mouseenter')\n .pipe(takeUntilDestroyed, mapTo(this.resizeRef.origin.nativeElement))\n .subscribe(cell => {\n this.eventDispatcher.tableCellHovered.next({ cell });\n this.resizeRef.updateSizeAndOffset();\n });\n\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mousedown')\n .pipe(takeUntilDestroyed)\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>(this.document, 'mouseup');\n const mousemove = fromEvent<MouseEvent>(this.document, 'mousemove');\n const escape = fromEvent<KeyboardEvent>(this.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), takeUntil(this.destroyed)).subscribe(({ clientX, clientY }) => {\n this._notifyResizeEnded(size, isXAxis ? clientX !== startX : clientY !== startY);\n });\n\n escape.pipe(takeUntil(mouseup), takeUntil(this.destroyed)).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 takeUntil(this.destroyed)\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(active ? { cell: this.resizeRef.origin.nativeElement! } : null);\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 ngOnDestroy() {\n this.destroyed.next();\n this.destroyed.complete();\n }\n}\n","import { Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { TableElement } from '../../../custom-types';\nimport { BASE_CELL_HEIGHT } from '../table.types';\n\n/**\n * 计算每一行的基础高度(不包含隐藏或者跨行的单元格)\n * @param editor\n * @param table\n * @returns\n */\nexport function getBaseHeightForRows(editor: Editor, table: TableElement) {\n const baseHeightForRows = table.children.map((row, index) => {\n const baseCells = row.children.filter(cell => !cell.hidden && (!cell.rowspan || cell.rowspan <= 1));\n if (baseCells.length > 0) {\n const cellDom = AngularEditor.toDOMNode(editor, baseCells[0]);\n return cellDom.offsetHeight;\n } else {\n return BASE_CELL_HEIGHT;\n }\n });\n return baseHeightForRows;\n}\n","import {\n Component,\n OnInit,\n ElementRef,\n OnDestroy,\n ChangeDetectorRef,\n NgZone,\n HostBinding,\n Renderer2,\n ViewContainerRef,\n AfterViewInit,\n Injector,\n ViewChild\n} from '@angular/core';\nimport { filter, map, take, takeUntil } from 'rxjs/operators';\nimport { Editor } from 'slate';\nimport { ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport { SLA_TABLE_CELL_SELECTOR } from '../../../../constants/selector';\nimport { TheTableComponent } from '../table.component';\nimport { TablePosition } from '../../utils/table-position';\nimport { fromEvent, merge, Subject } from 'rxjs';\nimport { ColumnResizingStore } from '../../../../components/column-resize/resizing.store';\nimport { TableCellEventDispatcher } from '../../../../components/column-resize/event-dispatcher';\nimport { ColumnResizeNotifierSource, ColumnSizeAction } from '../../../../components/column-resize/column-resize-notifier';\nimport { ConnectedPosition, Overlay, OverlayRef, ScrollDispatcher } from '@angular/cdk/overlay';\nimport { ComponentPortal, PortalInjector } from '@angular/cdk/portal';\nimport { TheColumnResizeOverlayHandleComponent } from '../../../../components/column-resize/overlay-handle.component';\nimport { ResizeRef } from '../../../../components/column-resize/resize-ref';\nimport { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { coercePixelsFromCssValue, getElementHeight, getElementWidth, useElementStyle } from '../../../../utils/dom';\nimport { TheBaseElementComponent } from '../../../../interfaces/view-base';\nimport { BASE_FILL_HEIGHT, TableOptions } from '../../table.types';\nimport { TheEditor } from '../../../../interfaces/editor';\nimport { TableCellElement } from '../../../../custom-types';\nimport { getBaseHeightForRows } from '../../utils/get-base-height';\n\nconst OVERLAY_ACTIVE_CLASS = 'the-resizable-overlay-thumb-active';\nconst OVERLAY_INIT_SIZE = 16;\nexport const POSITION_MAP: { [key: string]: ConnectedPosition } = {\n top: {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'center'\n },\n bottom: {\n originX: 'start',\n originY: 'top',\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\n@Component({\n selector: 'td[theTd]',\n templateUrl: './td.component.html',\n providers: [ColumnResizingStore]\n})\nexport class TheTdComponent extends TheBaseElementComponent<TableCellElement, Editor> implements OnInit, AfterViewInit, OnDestroy {\n destroy$: Subject<any> = new Subject();\n public tablePosition: TablePosition;\n public tableComponent: TheTableComponent;\n protected overlayRef?: OverlayRef;\n public hoverdDirection: 'left' | 'right' | 'top' | 'bottom';\n public tableOptions: TableOptions = new TableOptions();\n public cellInnerMinHeight: number = 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 theTableWrapperWidth() {\n return this.tableComponent.theTableWrapperWidth;\n }\n\n get tableElement(): HTMLElement {\n return this.tableComponent.theTableElement.nativeElement;\n }\n\n get scrollableElementTop() {\n const cdkscrollable: HTMLElement = this.elementRef.nativeElement.closest('[cdkscrollable]');\n if (cdkscrollable) {\n return cdkscrollable.getBoundingClientRect().top;\n }\n return -window.scrollY;\n }\n\n get scrollableElementLeft() {\n return this.tableComponent.tableWrapper.nativeElement.scrollLeft;\n }\n\n get isXAxisHover() {\n return ['left', 'right'].includes(this.hoverdDirection);\n }\n\n public dotWrapperHovered: boolean;\n\n public resizeRef: ResizeRef;\n\n @HostBinding('style.backgroundColor') backgroundColor: string;\n\n @HostBinding('attr.colspan') colspan: number;\n\n @HostBinding('attr.rowspan') rowspan: number;\n\n @HostBinding('style.display') display: string;\n\n @ViewChild('cellInner', { static: true })\n cellInner: ElementRef;\n\n get cellInnerNativeElement(): HTMLElement {\n return this.cellInner.nativeElement;\n }\n\n onContextChange() {\n super.onContextChange();\n if (this.initialized) {\n this.useState();\n }\n }\n\n constructor(\n public elementRef: ElementRef,\n public cdr: ChangeDetectorRef,\n private renderer: Renderer2,\n private viewContainerRef: ViewContainerRef,\n private ngZone: NgZone,\n public injector: Injector,\n public overlay: Overlay,\n public resizingStore: ColumnResizingStore,\n public scrollDispatcher: ScrollDispatcher\n ) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.useBackground();\n this.useSpan();\n this.useDisplay();\n this.useFocus();\n useElementStyle(this.elementRef.nativeElement, this.element);\n }\n\n ngAfterViewInit() {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.useTablePosition();\n this.getInjectionService();\n this.subscribeSelectedCellsChange();\n this.subscribeDangerousCellsChange();\n this.subscribeTableChange();\n this.listenCellSelectEvents();\n this.listenForCellHoverEvents();\n this.listenForResizeEvents();\n // const height = this.calculateCellInnerMinHeight();\n // this.useMinHeight(height);\n });\n }\n\n getInjectionService() {\n this.tableComponent = ELEMENT_TO_COMPONENT.get(this.tablePosition.table) as TheTableComponent;\n }\n\n subscribeSelectedCellsChange() {\n this.tableStore\n .selectedCellsChange()\n .pipe(takeUntil(this.destroy$))\n .subscribe(x => {\n if (x.length === 0) {\n this.renderer.removeClass(this.elementRef.nativeElement, 'selected-cell');\n } else {\n const isSelectedCell = x.some(\n ({ row, col }) => row === this.tablePosition.getRowIndex() && col === this.tablePosition.getColumnIndex()\n );\n if (isSelectedCell) {\n this.renderer.addClass(this.elementRef.nativeElement, 'selected-cell');\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, 'selected-cell');\n }\n }\n this.cdr.detectChanges();\n });\n }\n\n subscribeDangerousCellsChange() {\n this.tableStore\n .dangerousCellsChange()\n .pipe(takeUntil(this.destroy$))\n .subscribe(x => {\n if (x.length === 0) {\n this.renderer.removeClass(this.elementRef.nativeElement, 'dangerous-cell');\n } else {\n const isSelectedCell = x.some(\n ({ row, col }) => row === this.tablePosition.getRowIndex() && col === this.tablePosition.getColumnIndex()\n );\n if (isSelectedCell) {\n this.renderer.addClass(this.elementRef.nativeElement, 'dangerous-cell');\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, 'dangerous-cell');\n }\n }\n this.cdr.detectChanges();\n });\n }\n\n subscribeTableChange() {\n this.tableStore\n .tableChange()\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.useTablePosition();\n // const height = this.calculateCellInnerMinHeight();\n // this.useMinHeight(height);\n });\n }\n\n useState() {\n this.useBackground();\n this.useSpan();\n this.useDisplay();\n this.useFocus();\n useElementStyle(this.elementRef.nativeElement, this.element);\n }\n\n useTablePosition() {\n const opts = new TableOptions();\n const path = TheEditor.findPath(this.editor, this.element);\n // must be path of cell's children\n this.tablePosition = TablePosition.create(opts, this.editor, path.concat(0));\n }\n\n useBackground() {\n if (this.element.backgroundColor !== this.backgroundColor) {\n this.backgroundColor = this.element.backgroundColor as string;\n }\n }\n\n useSpan() {\n this.colspan = undefined;\n this.rowspan = undefined;\n if (this.element.colspan) {\n this.colspan = this.element.colspan;\n }\n if (this.element.rowspan) {\n this.rowspan = this.element.rowspan;\n }\n }\n\n calculateCellInnerMinHeight() {\n if (this.element.colspan) {\n const rowIndex = this.tablePosition.getRowIndex();\n if (this.calculateCombinedRows().length > 0) {\n let height = 0;\n const heights = getBaseHeightForRows(this.editor, this.tableComponent.element);\n for (let index = rowIndex; index < this.element.rowspan + rowIndex; index++) {\n height += heights[index];\n }\n height = height - BASE_FILL_HEIGHT;\n return height;\n }\n }\n return undefined;\n }\n\n calculateCombinedRows() {\n const rowIndex = this.tablePosition.getRowIndex();\n const combinedRows: number[] = [];\n const table = this.tablePosition.table;\n table.children.forEach((row, _rowIndex) => {\n if (_rowIndex > rowIndex && _rowIndex <= rowIndex + this.element.rowspan) {\n const isCombined = row.children.every(cell => cell.hidden || cell.rowspan > 1);\n if (isCombined) {\n combinedRows.push(_rowIndex);\n }\n }\n });\n return combinedRows;\n }\n\n useDisplay() {\n this.display = this.element.hidden ? 'none' : '';\n }\n\n useFocus() {\n if (this.isCollapsed) {\n this.renderer.addClass(this.elementRef.nativeElement, 'focused-cell');\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, 'focused-cell');\n }\n }\n\n useMinHeight(minHeight: number) {\n if (this.cellInnerMinHeight === minHeight) {\n return;\n }\n this.cellInnerMinHeight = minHeight;\n // if (this.cellInnerMinHeight) {\n // this.cellInnerNativeElement.style.minHeight = `${this.cellInnerMinHeight}px`;\n // } else {\n // this.cellInnerNativeElement.style.removeProperty('min-height');\n // }\n }\n\n //#region cell-select\n listenCellSelectEvents() {\n this.ngZone.runOutsideAngular(() => {\n const element = this.elementRef.nativeElement!;\n fromEvent<MouseEvent>(element, 'mousedown')\n .pipe(\n takeUntil(this.destroy$),\n filter((e: MouseEvent) => e.button !== 2),\n map(event => {\n const cell = (event.target as HTMLElement).closest(SLA_TABLE_CELL_SELECTOR);\n return cell;\n }),\n filter(cell => !!cell)\n )\n .subscribe((cell: HTMLTableCellElement) => {\n this.tableStore.selectCellStart(cell, this.editor);\n if (this.overlayRef) {\n this.overlayRef.detach();\n }\n this.listenCellMouseEvents();\n });\n });\n }\n\n listenCellMouseEvents() {\n const mouseoverObservable = fromEvent<MouseEvent>(document, 'mouseover')\n .pipe(\n takeUntil(this.destroy$),\n map(event => {\n event.preventDefault();\n const cell = (event.target as HTMLElement).closest(SLA_TABLE_CELL_SELECTOR);\n return cell;\n }),\n filter((cell: HTMLTableCellElement) => !!cell)\n )\n .subscribe((cell: HTMLTableCellElement) => {\n this.tableStore.selectCellOngoing(cell, this.editor);\n });\n fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(take(1))\n .subscribe(() => {\n this.tableStore.selectCellEnd(this.editor);\n if (this.tableStore.isCellSelecting) {\n this.ngZone.run(() => {\n this.tableComponent.tableService.openToolbar(this.tableStore.focusCellElement);\n });\n }\n mouseoverObservable.unsubscribe();\n });\n }\n\n //#region resizable\n private listenForCellHoverEvents() {\n const element = this.elementRef.nativeElement!;\n this.eventDispatcher\n .resizeOverlayVisibleForTableCell(element)\n .pipe(takeUntil(this.destroy$))\n .subscribe(hoveredCellInfo => {\n if (hoveredCellInfo && hoveredCellInfo.position) {\n this.hoverdDirection = hoveredCellInfo.position;\n }\n // first column should not have left resize handle\n if (this.isXAxisHover && this.hoverdDirection === 'left' && this.tablePosition.getColumnIndex() === 0) {\n return;\n }\n if (!this.isXAxisHover && this.hoverdDirection === 'bottom' && this.tablePosition.getRowIndex() === 0) {\n return;\n }\n if (hoveredCellInfo) {\n if (!this.overlayRef) {\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 this.overlayRef = null;\n }\n });\n }\n\n private listenForResizeEvents() {\n const takeUntilDestroyed = takeUntil<ColumnSizeAction>(this.destroy$);\n\n merge(this.resizeNotifier.resizeCanceled, this.resizeNotifier.triggerResize)\n .pipe(\n takeUntilDestroyed,\n filter(columnSize => columnSize.tableCell === this.elementRef.nativeElement)\n )\n .subscribe(({ deltaSize, previousSize, completeImmediately }) => {\n this.elementRef.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(takeUntilDestroyed)\n .subscribe(columnSize => {\n this._cleanUpAfterResize(columnSize);\n this.resizingStore.cleanResizing();\n });\n }\n\n private _completeResizeOperation(): void {\n this.ngZone.run(() => {\n this.resizeNotifier.resizeCompleted.next({\n tableCell: this.elementRef.nativeElement\n });\n });\n }\n\n private _cleanUpAfterResize(columnSize: ColumnSizeAction): void {\n this.elementRef.nativeElement!.classList.remove(OVERLAY_ACTIVE_CLASS);\n }\n\n private _createHandlePortal(): ComponentPortal<TheColumnResizeOverlayHandleComponent> {\n const customTokens = new WeakMap();\n this.resizeRef = new ResizeRef(\n this.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 this.resizeRef.setDirection(this.isXAxisHover ? 'X' : 'Y');\n customTokens.set(ResizeRef, this.resizeRef);\n customTokens.set(TableCellEventDispatcher, this.eventDispatcher);\n customTokens.set(ColumnResizeNotifierSource, this.resizeNotifier);\n const injector = new PortalInjector(this.injector, customTokens);\n return new ComponentPortal(TheColumnResizeOverlayHandleComponent, this.viewContainerRef, injector);\n }\n\n private _showHandleOverlay(): void {\n this.overlayRef!.attach(this._createHandlePortal()).changeDetectorRef.markForCheck();\n this.updateOverlayHandleSizeAndOffset();\n }\n\n private updateOverlayHandleSizeAndOffset() {\n this.overlayRef?.removePanelClass(['the-column-resize-handle-panel', 'the-row-resize-handle-panel']);\n this.isXAxisHover ? this.updateOverlayHandleColumnSize() : this.updateOverlayHandleRowSize();\n this.overlayRef?.updatePositionStrategy(this.createPositionStrategy());\n }\n\n private updateOverlayHandleColumnSize() {\n let height = 0;\n const tableElementTop = this.tableElement.getBoundingClientRect().top;\n if (tableElementTop < this.scrollableElementTop) {\n height = this.tableElement.offsetHeight - (this.scrollableElementTop - tableElementTop);\n } else {\n height = this.tableElement.offsetHeight;\n }\n this.overlayRef!.addPanelClass('the-column-resize-handle-panel');\n this.overlayRef!.updateSize({ height, width: OVERLAY_INIT_SIZE });\n }\n\n private updateOverlayHandleRowSize() {\n const width = this.tableComponent.tableWrapper.nativeElement.offsetWidth + 11;\n this.overlayRef!.addPanelClass('the-row-resize-handle-panel');\n this.overlayRef!.updateSize({ width, height: OVERLAY_INIT_SIZE });\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 }\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 panelClass: 'the-column-resize-handle-panel'\n }\n : {\n height: OVERLAY_INIT_SIZE + 'px',\n panelClass: 'the-row-resize-handle-panel'\n };\n return this.overlay.create({\n // Always position the overlay based on left-indexed coordinates.\n disposeOnNavigation: true,\n positionStrategy: this.createPositionStrategy(),\n ...overlayOption\n });\n }\n\n private createPositionStrategy() {\n let offsetY = this.calculateOverlayHandleOffsetY();\n let offsetX = this.calculateOverlayHandleOffsetX();\n const position: ConnectedPosition = this.isXAxisHover\n ? { ...POSITION_MAP[this.hoverdDirection], offsetY }\n : { ...POSITION_MAP[this.hoverdDirection], offsetX };\n return this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef.nativeElement)\n .withFlexibleDimensions(false)\n .withGrowAfterOpen(false)\n .withPush(false)\n .withPositions([position]);\n }\n\n private calculateOverlayHandleOffsetY() {\n const tableElementTop = this.tableElement.getBoundingClientRect().top;\n if (tableElementTop < this.scrollableElementTop) {\n return this.scrollableElementTop - this.elementRef.nativeElement.getBoundingClientRect().top;\n } else {\n return tableElementTop - this.elementRef.nativeElement.getBoundingClientRect().top;\n }\n }\n\n private calculateOverlayHandleOffsetX() {\n const cellElementLeft = this.elementRef.nativeElement.getBoundingClientRect().left;\n const tableElementLeft = this.tableElement.getBoundingClientRect().left;\n return tableElementLeft - cellElementLeft + this.scrollableElementLeft;\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.elementRef.nativeElement.cellIndex;\n if (this.hoverdDirection === 'left') {\n cellIndex = cellIndex - 1;\n }\n const colspan = (this.elementRef.nativeElement as HTMLElement).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.theTableWrapperWidth;\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.storeTableHeight(rows);\n this.resizingStore.initDirection(deltaY, this.isXAxisHover);\n let rowIndex = this.elementRef.nativeElement.parentElement.rowIndex - 1; // subtract thead's tr\n\n if (this.hoverdDirection === 'bottom') {\n rowIndex = rowIndex - 1;\n } else {\n const cellRowpsan = (this.elementRef.nativeElement as HTMLTableCellElement).rowSpan;\n rowIndex = rowIndex + cellRowpsan - 1;\n }\n if (deltaY > 0) {\n this.applyBottomRows(rows, deltaY, rowIndex + 1);\n if (this.resizingStore.isRestoring(deltaY, this.isXAxisHover)) {\n deltaY = this.resizingStore.restoreTopRows(deltaY);\n }\n if (deltaY > 0) {\n let initHeight = getElementHeight(rows[rowIndex]);\n rows[rowIndex].style.height = coerceCssPixelValue(initHeight + deltaY);\n }\n } else {\n let addDeltaY = this.resizingStore.getAddTableHeight(deltaY);\n const _delta = this.applyTopRows(rows, deltaY, rowIndex);\n if (_delta === deltaY) {\n // can not resize\n return;\n }\n deltaY = deltaY - _delta;\n if (this.resizingStore.isRestoring(deltaY, this.isXAxisHover)) {\n if (addDeltaY < 0) {\n deltaY = this.resizingStore.restoreBottomRows(deltaY);\n }\n }\n }\n }\n\n applyTopRows(rows: HTMLTableRowElement[], deltaY: number, rowIndex: number): number {\n while (deltaY < 0 && rows[rowIndex]) {\n const rowOffsetHeight = getElementHeight(rows[rowIndex]);\n const rowStyleHeight = coercePixelsFromCssValue(rows[rowIndex].style.height);\n if (rowOffsetHeight > this.tableOptions.minHeightPx && rowOffsetHeight === rowStyleHeight) {\n if (this.resizingStore.isResizing(deltaY, this.isXAxisHover)) {\n this.resizingStore.storeResizingRow(rows[rowIndex]);\n }\n if (rowOffsetHeight > this.tableOptions.minHeightPx + Math.abs(deltaY)) {\n rows[rowIndex].style.height = coerceCssPixelValue(rowOffsetHeight - Math.abs(deltaY));\n deltaY = 0;\n } else {\n deltaY += rowOffsetHeight - this.tableOptions.minHeightPx;\n rows[rowIndex].style.height = coerceCssPixelValue(this.tableOptions.minHeightPx);\n }\n }\n rowIndex--;\n }\n return deltaY;\n }\n\n applyBottomRows(rows: HTMLTableRowElement[], deltaY: number, rowIndex: number): number {\n while (rows[rowIndex] && deltaY > 0) {\n const rowOffsetHeight = getElementHeight(rows[rowIndex]);\n const rowStyleHeight = coercePixelsFromCssValue(rows[rowIndex].style.height);\n if (rowOffsetHeight > this.tableOptions.minHeightPx && rowOffsetHeight === rowStyleHeight) {\n if (this.resizingStore.isResizing(deltaY, this.isXAxisHover)) {\n this.resizingStore.storeResizingRow(rows[rowIndex]);\n }\n if (rowOffsetHeight > deltaY + this.tableOptions.minHeightPx) {\n rows[rowIndex].style.height = coerceCssPixelValue(rowOffsetHeight - deltaY);\n deltaY = 0;\n } else {\n deltaY -= rowOffsetHeight - this.tableOptions.minHeightPx;\n rows[rowIndex].style.height = coerceCssPixelValue(this.tableOptions.minHeightPx);\n }\n }\n rowIndex++;\n }\n return deltaY;\n }\n\n //#region\n\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this.overlayRef) {\n this.overlayRef.detach();\n }\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<div #cellInner>\n <slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>\n</div>\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}","import { Transforms, Point, Node, Range, Editor, NodeEntry, Element, Path, Operation } from 'slate';\nimport { AngularEditor, ELEMENT_TO_COMPONENT, hotkeys, hasBlockCard, isCardLeft } from 'slate-angular';\nimport { TableOptions } from './table.types';\nimport { isRangeInTable, isSelectionInTable, TablePosition } from './utils';\nimport { TheEditor } from '../../interfaces';\nimport { ElementKinds } from '../../constants/node-types';\nimport { TableCellElement, TableElement, TableRowElement } from '../../custom-types';\nimport { TheTableComponent } from './components/table.component';\nimport { TableEditor } from './table.editor';\nimport { clearTableNode } from './transforms/clear-table-node';\nimport { isVirtualKey } from './utils/is-virtual-key';\nimport { insertColumnAtRow } from './transforms/insert-column';\nimport { calculateAnchorPositionInCell } from './utils/calc-anchor-position';\nimport { CLIPBOARD_FORMAT_KEY } from '../../constants/default';\nimport { getOriginCell } from './utils/calc-span';\nimport { resetTableCell } from './utils/split-cell';\nimport { removeColumns } from './utils/remove-columns';\nimport { addColumns } from './utils/add-columns';\nimport { TheTableRowComponent } from './components/row/row.component';\nimport { TheTdComponent } from './components/td/td.component';\nimport { extractFragment } from '../../utils/fragment';\nimport * as TheQueries from '../../queries';\nimport { normalizeTable } from './utils/normalize-table';\nimport { _ } from '../../utils/lodash';\n\nexport const withTable = (editor: Editor) => {\n const {\n deleteBackward,\n deleteForward,\n onKeydown,\n setFragmentData,\n insertData,\n normalizeNode,\n isBlockCard,\n renderElement,\n deleteCutData,\n isContainer,\n onChange\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 => Editor.isBlock(editor, n)\n });\n const startPosition = TablePosition.create(opts, editor, selection.anchor.path);\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 = TablePosition.create(opts, editor, editor.selection.anchor.path);\n const afterPosition = TablePosition.create(opts, editor, afterPoint.path);\n if (beforePosition.cell && beforePosition.cell !== afterPosition.cell) {\n return;\n }\n }\n deleteForward(unit);\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 = TablePosition.create(opts, editor, selection.anchor.path);\n const endPosition = TablePosition.create(opts, 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(editor, startPosition.table, startPosition.getRowIndex() - 1, startPosition.getColumnIndex(), false);\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(editor, startPosition.table, startPosition.getRowIndex() + 1, startPosition.getColumnIndex(), true);\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 && TablePosition.create(opts, 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 && TablePosition.create(opts, 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 = unit => {\n const opts = new TableOptions();\n if (!isSelectionInTable(opts, editor)) {\n setFragmentData(unit);\n return;\n }\n const { selection } = editor;\n const tablePosition = TablePosition.create(opts, editor, selection.anchor.path);\n const tableComponent = ELEMENT_TO_COMPONENT.get(tablePosition.table) as TheTableComponent;\n const cells = tableComponent.tableStore.selectedCells;\n let tableFragment = null;\n if (tableComponent.tableStore.selectedRowsIndex.length > 0) {\n const rows = tablePosition.table.children.slice(tableComponent.tableStore.selectedRowsIndex[0], tableComponent.tableStore.selectedRowsIndex[tableComponent.tableStore.selectedRowsIndex.length - 1] + 1);\n tableFragment =\n {\n ...tablePosition.table,\n children: rows\n };\n } else if (cells.length > 0) {\n const tempRows = {};\n for (const cell of cells) {\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 {\n type: ElementKinds.table,\n children: rows\n };\n }\n if (tableFragment) {\n tableFragment = normalizeTable(_.cloneDeep(tableFragment));\n const plainText = Node.string(tableFragment);\n tableFragment = [tableFragment];\n const stringObj = JSON.stringify(tableFragment);\n const encoded = window.btoa(encodeURIComponent(stringObj));\n unit.setData(`application/${CLIPBOARD_FORMAT_KEY}`, encoded);\n unit.setData('text/plain', plainText);\n return;\n }\n setFragmentData(unit);\n };\n\n editor.insertData = data => {\n const fragment = extractFragment(data);\n if (fragment) {\n const opts = new TableOptions();\n const { selection } = editor;\n if (\n isSelectionInTable(opts, editor) &&\n fragment.length === 1 &&\n Element.isElement(fragment[0]) &&\n fragment[0].type === ElementKinds.table\n ) {\n const tablePosition = TablePosition.create(opts, editor, selection.anchor.path);\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;\n }\n }\n insertData(data);\n };\n\n editor.normalizeNode = (entry: NodeEntry<Node>) => {\n if (Element.isElement(entry[0]) && entry[0].type === ElementKinds.table) {\n const table = entry[0] 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: [...entry[1], 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 entry 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: entry[1] });\n }\n }\n // adjust selection when selection is in hidden cell\n if (Element.isElement(entry[0]) && entry[0].type === ElementKinds.tableCell && entry[0].hidden) {\n if (editor.selection && Range.isCollapsed(editor.selection) && Path.isAncestor(entry[1], editor.selection.anchor.path)) {\n setTimeout(() => {\n const opts = new TableOptions();\n const tablePosition = TablePosition.create(opts, editor, editor.selection.anchor.path);\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 normalizeNode(entry);\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 TheTableComponent;\n }\n if (element.type === ElementKinds.tableRow) {\n return TheTableRowComponent;\n }\n if (element.type === ElementKinds.tableCell) {\n return TheTdComponent;\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 { selection } = editor;\n const element = TablePosition.create(opts, editor, selection.anchor.path);\n const tableComponent = ELEMENT_TO_COMPONENT.get(element.table) as TheTableComponent;\n const cells = tableComponent.tableStore.selectedCells;\n if (cells.length > 0) {\n Editor.withoutNormalizing(editor, () => {\n if (tableComponent.tableStore.isSelectedTable) {\n TableEditor.removeTable(editor);\n } else {\n tableComponent.tableStore.clearSelectedCellsContent();\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 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 = TablePosition.create(opts, editor, editor.selection.anchor.path);\n if (tablePosition.isInTable() && tablePosition.cell.hidden) {\n TableEditor.selectOriginCell(editor, tablePosition.table, tablePosition.getRowIndex(), tablePosition.getColumnIndex(), false);\n }\n }\n }\n\n return editor;\n};\n","import { Transforms, Element, Text, Editor } from 'slate';\nimport { createEmptyParagraph } from '../../utils/create-empty-paragraph';\nimport { ElementKinds } from '../../constants';\nimport { TransformEditor } from '../common/transforms.plugin';\nimport * as TheQueries from '../../queries';\nimport { CustomElementKinds } from '../../custom-types';\n\nexport const withInsertParagraphNodes =\n (types: CustomElementKinds[] = []) =>\n <T extends Editor & TransformEditor>(editor: T) => {\n const { normalizeNode } = editor;\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","import { TheiaConverter } from '@atinc/selene';\nimport { CLIPBOARD_FORMAT_KEY } from '../../constants/default';\nimport { Editor, Transforms } from 'slate';\nimport { ElementKinds } from '../../constants/node-types';\nimport { deleteColorAndBackgroundColorOfText } from '../../utils/fragment';\n\nexport const withDeserializeHMTL = (editor: Editor) => {\n const { insertData } = editor;\n\n editor.insertData = (data: DataTransfer) => {\n const html = data.getData(`text/html`);\n const slateFragment = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);\n\n if (html && !slateFragment) {\n const htmlDom = new DOMParser().parseFromString(html, 'text/html');\n const fragment = TheiaConverter.convertToTheia(Array.from(htmlDom.body.children));\n // 无法识别HTML内容时后退一下:识别纯文本\n if (fragment.length === 1 && Editor.isEmpty(editor, fragment[0]) && fragment[0].type === ElementKinds.paragraph) {\n insertData(data);\n return;\n }\n // 识出纯图片并且粘贴板中存在文件则不进行处理, hook 直接右键复制图片的场景,流转到上传图片流程\n // 后续需要做识别html图片后自动上传处理\n if (fragment.length === 1 && fragment[0].type === ElementKinds.image && data.files.length > 0) {\n insertData(data);\n return;\n }\n // 过滤 text 节点的 color/background-color 属性\n fragment.forEach((node) => deleteColorAndBackgroundColorOfText(node));\n Transforms.insertFragment(editor, fragment);\n return;\n }\n\n insertData(data);\n };\n return editor;\n};\n","import { VerticalAlignment } from '../../constants';\nimport { TheEditor } from '../../interfaces';\nimport { TableEditor } from '../table/table.editor';\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","import { Component, ElementRef, HostListener, Input, OnInit, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys';\nimport { Editor } from 'slate';\nimport { TheToolbarBaseItemComponent } from '../../components/toolbar-base-item/toolbar-base-item.component';\nimport { CustomEditor } from '../../custom-types';\nimport { DefaultToolbarItem, 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 '[class.hide]': '!active'\n }\n})\nexport class TheVerticalToolbarItemComponent extends TheToolbarBaseItemComponent implements OnInit {\n isHide = true;\n active: boolean | string = false;\n activeMenu: ToolbarItem;\n dropdownPopoverRef: ThyPopoverRef<any>;\n\n @Input() item: DefaultToolbarItem;\n\n @Input() menus: DefaultToolbarItem[];\n\n @Input() editor: CustomEditor;\n\n @Input() toolbarItem: ToolbarItem;\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(public elementRef: ElementRef, private thyPopover: ThyPopover, private viewContainerRef: ViewContainerRef) {\n super();\n }\n\n ngOnInit(): void {}\n\n public statusChange(editor: Editor) {\n this.active = this.toolbarItem?.active ? this.toolbarItem?.active(editor) : false;\n this.activeMenu = this.menusActive(editor);\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\n if (!this.item?.execute || 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 viewContainerRef: this.viewContainerRef,\n insideClosable: false,\n backdropClosable: false,\n hasBackdrop: false\n });\n }\n\n close() {\n if (this.dropdownPopoverRef) {\n this.dropdownPopoverRef.close();\n }\n }\n}\n","<a\n thyIconNavLink\n class=\"icon-mode link-with-down\"\n [thyTooltip]=\"toolbarItem?.name\"\n [thyIconNavLinkActive]=\"isOpened\"\n thyTooltipPlacement=\"top\"\n (mousedown)=\"execute($event)\"\n>\n <thy-icon [thyIconName]=\"activeMenu?.icon\"></thy-icon>\n <thy-icon class=\"caret-down-icon font-size-sm text-desc\" thyIconName=\"caret-down\"></thy-icon>\n</a>\n\n<ng-template #VerticalAlignItems>\n <thy-action-menu class=\"dropdown\">\n <ng-container *ngFor=\"let menu of toolbarItem?.includes\">\n <a\n thyActionMenuItem\n href=\"javascript:;\"\n [thyActionMenuItemActive]=\"menu.key === activeMenu?.key\"\n [ngStyle]=\"menu?.styles\"\n (mousedown)=\"itemMousedown($event, menu)\"\n >\n <span *ngIf=\"menu.icon\" thyActionMenuItemIcon>\n <thy-icon [thyIconName]=\"menu?.icon\"></thy-icon>\n </span>\n <span thyActionMenuItemName>{{ menu.name }}</span>\n </a>\n </ng-container>\n </thy-action-menu>\n</ng-template>\n","import { DropdownMode } from '../../constants';\nimport { ToolbarActionTypes, VerticalAlignment } from '../../constants/node-types';\nimport { ToolbarItem, ToolbarItemType } from '../../interfaces';\nimport { TableEditor } from '../table/table.editor';\nimport { VerticalAlignEditor } from './vertical-align.editor';\nimport { TheVerticalToolbarItemComponent } from './toolbar-item.component';\n\nexport const VerticalAlignOptions: ToolbarItem[] = [\n {\n key: ToolbarActionTypes.verticalAlign,\n name: '垂直对齐',\n type: ToolbarItemType.toolDropdown,\n dropdownMode: DropdownMode.icon,\n iconComponent: TheVerticalToolbarItemComponent,\n includes: [ToolbarActionTypes.verticalAlignTop, ToolbarActionTypes.verticalAlignMiddle, ToolbarActionTypes.verticalAlignBottom],\n active: editor => TableEditor.isActive(editor)\n },\n {\n key: ToolbarActionTypes.verticalAlignTop,\n icon: 'align-top',\n name: '顶部对齐',\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: '垂直居中',\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: '底部对齐',\n execute: editor => VerticalAlignEditor.setVerticalAlign(editor, VerticalAlignment.bottom),\n active: editor => VerticalAlignEditor.isVerticalActive(editor, VerticalAlignment.bottom)\n }\n];\n","import { take, skip, filter } from 'rxjs/operators';\nimport { Range } from 'slate';\nimport { HistoryEditor } from 'slate-history';\nimport { EDITOR_TO_ELEMENT } from 'slate-angular';\nimport { TheEditor } from '../../interfaces';\nimport { TheContextService } from '../../services/context.service';\nimport { MarkProps } from '../../constants/node-types';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\n\nexport const PaintFormatEditor = {\n formatBrush(editor: TheEditor) {\n const contextService = editor.injector.get(TheContextService);\n const obj = {};\n for (const key of MarkProps) {\n const k = contextService.paintFormatStatus.marks[key];\n obj[key] = k || null;\n }\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, obj, path);\n });\n } else {\n TheTransforms.setMarks(editor, obj);\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 skip(1),\n filter(event => element.contains(event.target as Element)),\n take(1)\n )\n .subscribe((event: MouseEvent) => {\n if (contextService.paintFormatStatus.isActive) {\n PaintFormatEditor.formatBrush(editor);\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","import { Editor, Range } from 'slate';\nimport { MarkProps, MarkTypes, ToolbarActionTypes } from '../../constants';\nimport { TheEditor, ToolbarItem } from '../../interfaces';\nimport { TableEditor } from '../table/table.editor';\nimport { PaintFormatEditor } from './paint-format.editor';\nimport * as TheTransforms from '../../transforms';\nimport { CONTROL_KEY } from '../../utils';\n\nexport const PaintFormatOptions: ToolbarItem[] = [\n {\n key: ToolbarActionTypes.undo,\n icon: 'undo',\n name: '撤销',\n shortcutKey: `${CONTROL_KEY}+Z`,\n execute: (editor: TheEditor) => editor.undo()\n },\n {\n key: ToolbarActionTypes.redo,\n icon: 'redo',\n name: '重做',\n shortcutKey: `${CONTROL_KEY}+Shift+Z`,\n execute: (editor: TheEditor) => editor.redo()\n },\n {\n key: ToolbarActionTypes.paintformat,\n icon: 'paintformat',\n name: '格式刷',\n execute: PaintFormatEditor.enableFormatBrush,\n active: PaintFormatEditor.isActive\n },\n {\n key: ToolbarActionTypes.clean,\n icon: 'clean',\n name: '清除格式',\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","import { Editor, Node, Text, Element, Range } from 'slate';\nimport { TheEditor } from '../interfaces';\nimport { 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 const textIndent = 'textIndent';\n const align = 'align';\n const hasTextIndent = block[textIndent];\n const hasAlign = block[align];\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 !hasTextIndent &&\n !hasAlign\n ) {\n return true;\n }\n return false;\n};\n","import { Component, ComponentFactoryResolver, Input, NgZone, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\nimport { Editor } from 'slate';\nimport { ToolbarItem } from '../../interfaces';\nimport { CustomEditor } from '../../custom-types';\nimport { TheToolbarBaseItemComponent } from '../toolbar-base-item/toolbar-base-item.component';\nimport { ToolbarItemMode } from '../../constants/toolbar';\nimport { isComponentType } from 'slate-angular';\n\n@Component({\n selector: 'the-toolbar-item',\n template: `\n <ng-container *ngIf=\"itemMode === ToolbarItemMode.horizontal; else selectionItem\">\n <a\n thyIconNavLink\n [thyIconNavLinkIcon]=\"item.icon\"\n [thyTooltip]=\"tooltip\"\n [thyTooltipTemplateContext]=\"{ name: item.name, shortcutKey: item.shortcutKey }\"\n thyTooltipPlacement=\"top\"\n [thyIconNavLinkActive]=\"active\"\n (mousedown)=\"execute($event)\"\n ></a>\n </ng-container>\n <ng-template #selectionItem>\n <ng-container *ngIf=\"!item?.quickItemComponent\">\n <thy-icon [thyIconName]=\"item?.icon\" [thyIconRotate]=\"0\" class=\"quick-toolbar-icon\"></thy-icon>\n <span class=\"quick-toolbar-name\">{{ item?.name }}</span>\n </ng-container>\n </ng-template>\n <ng-template #tooltip let-data> {{ data.name }} {{ data.shortcutKey }} </ng-template>\n <ng-container #toolbarContainer></ng-container>\n `,\n host: {\n class: 'the-toolbar-item'\n }\n})\nexport class TheToolbarItemComponent extends TheToolbarBaseItemComponent implements OnInit {\n @Input() item: ToolbarItem;\n\n @Input() editor: CustomEditor;\n\n @Input() itemMode: ToolbarItemMode = ToolbarItemMode.horizontal;\n\n ToolbarItemMode = ToolbarItemMode;\n\n active: string | boolean = false;\n\n @ViewChild('toolbarContainer', { read: ViewContainerRef, static: true })\n toolbarContainer: ViewContainerRef;\n\n constructor(private ngZone: NgZone, private cfr: ComponentFactoryResolver) {\n super();\n }\n\n ngOnInit() {\n if (this.item?.quickItemComponent && isComponentType(this.item?.quickItemComponent)) {\n this.renderToolbarItem();\n }\n }\n\n public statusChange(editor: Editor) {\n this.active = this.item?.active ? this.item?.active(editor) : false;\n }\n\n execute(event: MouseEvent) {\n super.execute(event);\n\n if (!this.item?.execute || this.editor?.disabled) {\n return;\n }\n\n this.item?.execute(this.editor);\n }\n\n renderToolbarItem() {\n this.ngZone.run(() => {\n const toolbarItemFactory = this.cfr.resolveComponentFactory(this.item.quickItemComponent);\n const tollbarItemRef = this.toolbarContainer.createComponent(toolbarItemFactory);\n tollbarItemRef.instance.editor = this.editor;\n tollbarItemRef.instance.item = this.item;\n tollbarItemRef.instance.itemMode = ToolbarItemMode.vertical;\n });\n }\n}\n","import { Component, OnInit, Input, HostListener, OnDestroy, ElementRef } from '@angular/core';\nimport { mixinUnsubscribe, MixinBase } from 'ngx-tethys/core';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor, Text, Node } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { ToolbarItem } from '../../../../interfaces/toolbar';\nimport { ToolbarActionTypes } from '../../../../constants/node-types';\nimport { QUICK_TOOLBAR_HOTKEY, ToolbarItemMode } from '../../../../constants/toolbar';\n\n@Component({\n selector: 'the-quick-toolbar',\n templateUrl: 'quick-toolbar.component.html'\n})\nexport class TheQuickToolbarComponent extends mixinUnsubscribe(MixinBase) implements OnInit, OnDestroy {\n @Input() editor: Editor;\n @Input() quickToolbarItems: ToolbarItem[];\n\n editorElement: HTMLElement;\n ToolbarItemMode = ToolbarItemMode;\n ToolbarActionTypes = ToolbarActionTypes;\n\n @HostListener('document: mousedown', ['$event'])\n handleMouseDown(event: MouseEvent) {\n if (!this.elementRef.nativeElement.contains(event.target as HTMLElement)) {\n this.popoverRef.close();\n } else {\n event.preventDefault();\n }\n }\n\n @HostListener('document: keydown.enter')\n handleEnter() {\n this.popoverRef.close();\n }\n\n constructor(private popoverRef: ThyPopoverRef<TheQuickToolbarComponent>, public elementRef: ElementRef) {\n super();\n }\n\n ngOnInit() {\n this.editorElement = AngularEditor.toDOMNode(this.editor, this.editor);\n }\n\n stopPropagation(event) {\n event.preventDefault();\n }\n\n selectionChange(event) {\n this.removeHotKey();\n const toolbarItem = this.quickToolbarItems.find(item => item.key === event.value);\n if (toolbarItem?.execute) {\n toolbarItem.execute(this.editor);\n }\n }\n\n removeHotKey() {\n const node = Node.get(this.editor, this.editor.selection.anchor.path) as Text;\n if (node && Text.equals({ text: QUICK_TOOLBAR_HOTKEY }, node)) {\n Editor.deleteBackward(this.editor);\n }\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<thy-selection-list\n class=\"the-quick-toolbar\"\n [thyBindKeyEventContainer]=\"editorElement\"\n (thySelectionChange)=\"selectionChange($event)\"\n [thyMultiple]=\"false\"\n>\n <ng-container *ngFor=\"let item of quickToolbarItems\">\n <ng-container *ngIf=\"item.key !== ToolbarActionTypes.split; else splitLine\">\n <thy-list-option [thyValue]=\"item?.key\" (mousedown)=\"stopPropagation($event)\">\n <the-toolbar-item [editor]=\"editor\" [item]=\"item\" [itemMode]=\"ToolbarItemMode.vertical\"></the-toolbar-item>\n </thy-list-option>\n </ng-container>\n </ng-container>\n</thy-selection-list>\n\n<ng-template #splitLine>\n <nav-split-line [mode]=\"ToolbarItemMode.horizontal\"></nav-split-line>\n</ng-template>\n","import { Overlay } from '@angular/cdk/overlay';\nimport { ElementRef, ViewContainerRef } from '@angular/core';\nimport { ThyPopover } from 'ngx-tethys/popover';\nimport { Editor, Node, Element, Range, InsertTextOperation } from 'slate';\nimport { THE_EDITOR_QUICK_TOOLBAR_REF } from '../../utils/weak-maps';\nimport { TheQuickToolbarComponent } from './components/quick-toolbar/quick-toolbar.component';\nimport { TheEditor } from '../../interfaces/editor';\nimport { ElementKinds } from '../../constants/node-types';\nimport { QUICK_TOOLBAR_HOTKEY } from '../../constants/toolbar';\nimport { ToolbarItem } from '../../interfaces/toolbar';\n\nconst OperationTypes = ['insert_text', 'remove_node', 'merge_node'];\n\nexport const QuickInsertEditor = {\n openQuickToolbar(editor: Editor, toolbarItems: ToolbarItem[], origin: HTMLElement | ElementRef) {\n const overlay = editor.injector.get(Overlay);\n const viewContainerRef = editor.injector.get(ViewContainerRef);\n const thyPopover = editor.injector.get(ThyPopover);\n\n const quickToolbarRef = thyPopover.open(TheQuickToolbarComponent, {\n initialState: {\n editor,\n quickToolbarItems: toolbarItems\n },\n origin,\n viewContainerRef: viewContainerRef,\n backdropClosable: true,\n placement: 'bottomLeft',\n offset: 4,\n hasBackdrop: false,\n insideClosable: true,\n panelClass: 'the-quick-toolbar-container',\n scrollStrategy: overlay.scrollStrategies.reposition(),\n manualClosure: true\n });\n THE_EDITOR_QUICK_TOOLBAR_REF.set(editor, quickToolbarRef);\n },\n closeQuickToolbar(editor: Editor) {\n const quickToolbarRef = THE_EDITOR_QUICK_TOOLBAR_REF.get(editor);\n if (quickToolbarRef) {\n quickToolbarRef.close();\n THE_EDITOR_QUICK_TOOLBAR_REF.set(editor, null);\n }\n },\n isOpenToolbar(editor: Editor, opTypes = OperationTypes) {\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 const { undos } = editor.history;\n const lastBatch = undos[undos.length - 1];\n const lastOp = lastBatch && lastBatch[lastBatch.length - 1];\n\n if (\n lastOp &&\n block.children.length === 1 &&\n block.type === ElementKinds.paragraph &&\n Node.string(block) === QUICK_TOOLBAR_HOTKEY &&\n opTypes.includes(lastOp.type) &&\n ((lastOp as InsertTextOperation).text === QUICK_TOOLBAR_HOTKEY || (lastOp as InsertTextOperation).text === undefined)\n ) {\n return true;\n }\n return false;\n }\n};\n","import { Editor, Node, Element } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { TheEditorComponent } from '../../editor.component';\nimport { QUICK_TOOLBAR_HOTKEY } from '../../constants';\nimport { isCleanEmptyParagraph } from '../../utils/is-clean-empty-paragraph';\nimport { QuickInsertEditor } from './quick-insert.editor';\n\nexport const withQuickInsert = (editor: Editor) => {\n const { onKeydown, deleteBackward, onChange } = editor;\n\n editor.onKeydown = (event: KeyboardEvent) => {\n if (event.key === QUICK_TOOLBAR_HOTKEY && isCleanEmptyParagraph(editor)) {\n const rootNode = AngularEditor.toDOMNode(editor, Node.ancestor(editor, [editor.selection.anchor.path[0]]));\n const theEditorComponent = editor.injector.get(TheEditorComponent);\n const quickToolbars = theEditorComponent.quickToolbarItems;\n QuickInsertEditor.openQuickToolbar(editor, quickToolbars, rootNode);\n }\n\n onKeydown(event);\n };\n\n editor.deleteBackward = unit => {\n if (!QuickInsertEditor.isOpenToolbar(editor, ['remove_text'])) {\n QuickInsertEditor.closeQuickToolbar(editor);\n }\n deleteBackward(unit);\n };\n\n editor.onChange = () => {\n onChange();\n\n if (editor.selection) {\n const editorComponent = editor.injector.get(TheEditorComponent);\n editorComponent.quickInsertInstance?.checkStatus();\n\n const block = Node.ancestor(editor, [editor.selection.anchor.path[0]]) as Element;\n if (!isCleanEmptyParagraph(editor) && Node.string(block) !== QUICK_TOOLBAR_HOTKEY) {\n QuickInsertEditor.closeQuickToolbar(editor);\n }\n }\n };\n\n return editor;\n};\n","import isHotkey from 'is-hotkey';\nimport { TransformEditor } from '../common/transforms.plugin';\nimport { SoftBreakOnKeyDownOptions } from './soft-break.types';\nimport { TheEditor } from '../../interfaces/editor';\nimport * as TheQueries from '../../queries';\n\nexport const withSoftBreak =\n (options: SoftBreakOnKeyDownOptions = { rules: [{ hotkey: 'shift+enter' }] }) =>\n <T extends TheEditor & TransformEditor>(editor: T) => {\n const { onKeydown } = editor;\n\n editor.onKeydown = (event: KeyboardEvent) => {\n const { rules } = options;\n const entry = TheQueries.getBlockAbove(editor as any);\n\n rules.forEach(({ hotkey, query }) => {\n if (isHotkey(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","import { Editor, Element, Text } from 'slate';\nimport { AngularEditor, ViewType } from 'slate-angular';\nimport * as Types from '../types';\nimport { TheEditor, ThePlugin, ToolbarItem } from '../interfaces';\nimport { ElementKinds, ELEMENT_UNIQUE_ID, HEADING_TYPES } from '../constants';\nimport { idCreator } from '../utils/id-creator';\nimport { autoFormatRules } from '../constants/auto-format-rules';\nimport { withTheHistory } from './common/history.plugin';\nimport { withDeserializeMd } from './deserializers/deserialize-md.plugin';\nimport { withAutoInsertData } from './common/auto-insert-data.';\nimport { withRemoveEmpty } from './common/remove-empty.plugin';\nimport { withResetType } from './common/reset-type.plugin';\nimport { withImage } from './image/image.plugin';\nimport { withIndent } from './indent/indent.plugin';\nimport { withList } from './list/list.plugin';\nimport { withTodoItem } from './todo-item/todo-item.plugin';\nimport { withHr } from './hr/hr.plugin';\nimport { withAlign } from './align/align.plugin';\nimport { withHeading } from './heading/heading.plugin';\nimport { withMark } from './mark/mark.plugin';\nimport { withNodeID } from './node-id/node-id.plugin';\nimport { withAutoFormat } from './autoformat/autoformat.plugin';\nimport { withTransforms } from './common/transforms.plugin';\nimport { withTrailingNode } from './normalizers/trailing-node.plugin';\nimport { withBlockCard } from './common/block-card.plugin';\nimport { withMoveSelection } from './common/move-selection.plugin';\nimport { withGetFragment } from './common/get-fragment.plugin';\nimport { TodoItemOptions } from './todo-item/options';\nimport { MarkOptions } from './mark/options';\nimport { ListOptions } from './list/options';\nimport { ImageOptions } from './image/options';\nimport { HrOptions } from './hr/options';\nimport { HeadingOptions } from './heading/options';\nimport { BlockquoteOptions } from './blockquote/options';\nimport { AlignOptions } from './align/options';\nimport { withBlockquote } from './blockquote/blockquote.plugin';\nimport { HistoryEditor } from 'slate-history';\nimport { ColorOptions } from './color/options';\nimport { withRemoveVoid } from './common/remove-void.plugin';\nimport { CodeOptions } from './code/options';\nimport { withCode } from './code/code.plugin';\nimport { LinkOptions } from './link/options';\nimport { withLink } from './link/link.plugin';\nimport { TableOptions } from './table/options';\nimport { withTable } from './table/table.plugin';\nimport { withInsertParagraphNodes } from './normalizers/insert-paragraph-nodes';\nimport { withDeserializeHMTL } from './deserializers/deserialize-html.plugin';\nimport { VerticalAlignOptions } from './vertical-align/options';\nimport { PaintFormatOptions } from './paint-format/options';\nimport * as TheTransforms from '../transforms';\nimport { withQuickInsert } from './quick-insert/quick-insert.plugint';\nimport { withSoftBreak } from './soft-break/soft-break.plugin';\n\nconst internalPlugins: ((editor: Editor) => Editor)[] = [\n withTheHistory,\n withAutoInsertData(),\n withRemoveEmpty,\n withRemoveVoid,\n withBlockCard, // should in the front of list、resettype、todo、deserialize-html\n withResetType,\n withIndent([ElementKinds.checkItem, ElementKinds.numberedList, ElementKinds.bulletedList, ElementKinds.paragraph, ...HEADING_TYPES]), // should in the front of list\n withList({ validLiChildrenTypes: [ElementKinds.image] }),\n withLink,\n withTable,\n withTodoItem,\n withHr,\n withAlign,\n withCode,\n withHeading,\n withMark(),\n withSoftBreak({\n rules: [\n { hotkey: 'shift+enter' },\n {\n hotkey: 'enter',\n query: {\n allow: [ElementKinds.blockquote]\n }\n }\n ]\n }),\n withBlockquote,\n withNodeID({ idKey: ELEMENT_UNIQUE_ID, idCreator }),\n withAutoFormat({ rules: autoFormatRules }),\n withTransforms(),\n withTrailingNode({ type: ElementKinds.paragraph, level: 0 }),\n withMoveSelection,\n withInsertParagraphNodes(),\n withGetFragment(),\n withImage, // must be before withDeserializeHMTL\n withDeserializeHMTL,\n withDeserializeMd(),\n withQuickInsert\n];\n\nconst internalToolbarItems: ToolbarItem[] = [\n ...AlignOptions,\n ...MarkOptions,\n ...ColorOptions,\n ...HeadingOptions,\n ...TodoItemOptions,\n ...ListOptions,\n ...ImageOptions,\n ...HrOptions,\n ...BlockquoteOptions,\n ...CodeOptions,\n ...LinkOptions,\n ...TableOptions,\n ...VerticalAlignOptions,\n ...PaintFormatOptions\n];\n\nexport const toolbarCompose = (toolbarItems: ToolbarItem[] = []) => {\n return [...internalToolbarItems, ...toolbarItems];\n};\n\nexport const withTheEditor = <T extends AngularEditor & HistoryEditor>(plugins: ThePlugin[], editor: T) => {\n const e = editor as T & TheEditor;\n\n e.renderElement = (element: Element): ViewType => null;\n e.renderLeaf = (text: Text): ViewType => null;\n e.insertElement = (element: Element) => TheTransforms.insertElementNext(e, element);\n e.isContainer = (value: Element) => false;\n e.extraElementOptions = [];\n e.disabled = false;\n\n const pluginList = [...internalPlugins, ...plugins];\n\n pluginList.reduce((prevEditor, nextEditor) => nextEditor(prevEditor), e);\n\n return e;\n};\n","import isHotkey from 'is-hotkey';\nimport { Editor } from 'slate';\nimport { 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': MarkTypes.codeLine\n};\nexport const markShortcuts = (editor: Editor, event: KeyboardEvent) => {\n for (const hotkey in HOTKEYS) {\n if (isHotkey(hotkey, event)) {\n event.preventDefault();\n const mark = HOTKEYS[hotkey];\n MarkEditor.toggleMark(editor, mark);\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 { Injectable } from '@angular/core';\nimport { DefaultQuickToolbarDefinition, 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 quick: string[] = DefaultQuickToolbarDefinition\n ): ToolbarInitOption {\n const toolbarDefinition = {\n global,\n inline,\n quick\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 => {\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 { Editor, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { HistoryEditor } from 'slate-history';\n\nexport const autoFocus = (editor: Editor, isFocus: boolean) => {\n setTimeout(() => {\n if (editor && editor.children.length > 0 && isFocus) {\n HistoryEditor.withoutMerging(editor, () => {\n Transforms.select(editor, Editor.start(editor, [0]));\n AngularEditor.focus(editor);\n });\n }\n });\n};\n","import { Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\n\nexport const getEditableElementHeight = (editor: Editor) => {\n const editable = AngularEditor.toDOMNode(editor, editor);\n return editable.clientHeight;\n};\n","import { Editor } from 'slate';\nimport { getEditableElementHeight } from './get-editable-element-height';\n\nlet previousHeight = 0;\n\n/**\n * reset the sliding distance when the viewport position of the sliding\n * container coincides with the viewport position of the focus element\n */\nexport const autoScrollViewHandle = (editor: Editor, scrollContainer: string) => {\n const currentHeight = getEditableElementHeight(editor);\n const currentNodeElement = window.getSelection().focusNode.parentElement;\n const scrollContainerElement = currentNodeElement.closest(scrollContainer);\n\n // the added sliding distance is the height of the\n // current editing area minus the height of the last editing area\n const scrollHeight = currentHeight - previousHeight;\n\n if (scrollContainerElement && previousHeight !== 0 && scrollHeight > 0) {\n const focusBlockRect = currentNodeElement.getBoundingClientRect();\n const scrollContainerRect = scrollContainerElement.getBoundingClientRect();\n const bottom = scrollContainerRect.bottom - focusBlockRect.bottom;\n if (bottom < 30) {\n scrollContainerElement.scrollTop = scrollContainerElement.scrollTop + scrollHeight;\n }\n }\n previousHeight = currentHeight;\n};\n","import {\n Component,\n Input,\n OnInit,\n ViewChild,\n ViewContainerRef,\n ComponentFactoryResolver,\n OnChanges,\n SimpleChanges,\n ComponentRef,\n ElementRef,\n OnDestroy,\n NgZone,\n Inject,\n TemplateRef\n} from '@angular/core';\nimport { Editor } from 'slate';\nimport { ComponentType } from 'slate-angular';\nimport { ToolbarAlignment, ToolbarItem, ToolbarItemsComposeReturn, ToolbarItemType } from '../../interfaces/toolbar';\nimport { TheToolbarGroupToken, ToolbarMoreGroup } from '../../constants/toolbar';\nimport { ElementKinds, ToolbarActionTypes } from '../../constants/node-types';\nimport { TheToolbarItemComponent } from '../toolbar-item/toolbar-item.component';\nimport { NavSplitLineComponent } from '../nav-split-line/nav-split-line.component';\nimport { TheToolbarDropdownComponent } from '../toolbar-dropdown/toolbar-dropdown.component';\nimport type { TheToolbarGroupComponent } from '../toolbar-group/toolbar-group.component';\n\n@Component({\n selector: 'the-toolbar',\n templateUrl: 'toolbar.component.html',\n host: {\n class: 'the-toolbar-container'\n }\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 components: Map<string, ComponentRef<any>> = new Map<string, ComponentRef<any>>();\n moreGroupMenu = ToolbarMoreGroup;\n resizeObserver;\n elementWidth = 0;\n\n constructor(\n private cfr: ComponentFactoryResolver,\n private elementRef: ElementRef,\n private ngZone: NgZone,\n @Inject(TheToolbarGroupToken) private toolbarGroupComponent: ComponentType<TheToolbarGroupComponent>\n ) {}\n\n ngOnInit(): void {\n this.setToolbarClass();\n this.renderToolbarView();\n this.statusChange(this.editor);\n\n if (this.isMore) {\n this.resizeElement();\n }\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 statusChange(editor: Editor) {\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) {\n itemComponent.instance.statusChange(editor);\n }\n }\n }\n }\n\n public renderToolbarView(): void {\n this.components.clear();\n this.toolbarContainer.clear();\n const toolbarItems = this.toolbarItemsCompose();\n const { items, group } = toolbarItems;\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 });\n }\n\n /**\n * calculation display toolbar and more grouped toolbars\n *\n *\t┌──────────────────────────────────────── GoolbarToolbarView ───────────────────────────────────┐\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 * split width: 6px\n * item width: default item: 35px; dropdown item: 50px\n * set aside 50px\n */\n private toolbarItemsCompose(): ToolbarItemsComposeReturn {\n let elementWidth = this.isMore ? this.elementWidth : null;\n const maxItemWidth = 50;\n const defaultItemWidth = 35;\n const splitWidth = 6;\n // special type\n const headingWidth = 70;\n const items: ToolbarItem[] = [];\n const group: ToolbarItem[] = [];\n\n for (const item of this.toolbarItems) {\n if (!this.isMore) {\n items.push(item);\n continue;\n }\n\n // not enough free space\n const allowRender = elementWidth && elementWidth > maxItemWidth;\n if (allowRender && item.key === ToolbarActionTypes.split) {\n items.push(item);\n elementWidth -= splitWidth;\n continue;\n }\n\n if (allowRender) {\n items.push(item);\n } else {\n group.push(item);\n }\n\n if (item.key === ElementKinds.headingList) {\n elementWidth -= headingWidth;\n continue;\n }\n const isCustomComponent = item?.type === ToolbarItemType.toolDropdown || !!item?.iconComponent;\n elementWidth -= isCustomComponent ? maxItemWidth : defaultItemWidth;\n }\n\n return {\n items: this.pureToolbarItems(items),\n group\n };\n }\n\n /**\n * externally designated more group\n */\n private toolbarItemsAndMoreCompose() {\n const items = [];\n const group = [];\n\n for (const item of this.toolbarItems) {\n if (item.key === ToolbarActionTypes.split) {\n items.push(item);\n continue;\n }\n items.push(item);\n }\n\n return {\n items: this.pureToolbarItems(items),\n group\n };\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, ...args } = item;\n const viewComponent = this.viewComponentType(type);\n const factory = this.cfr.resolveComponentFactory(iconComponent ? iconComponent : viewComponent);\n const compRef = this.toolbarContainer.createComponent(factory);\n compRef.instance.editor = this.editor;\n compRef.instance.toolbarItem = item;\n compRef.instance.menus = args.includes;\n compRef.instance.item = args?.includes && args.includes.length > 0 ? args.includes[0] : args;\n compRef.instance.mode = dropdownMode;\n this.components.set(item.key, compRef);\n }\n\n private createToolbarSplit() {\n const navSplitLineFactory = this.cfr.resolveComponentFactory(NavSplitLineComponent);\n this.toolbarContainer.createComponent(navSplitLineFactory);\n }\n\n private createMoreGroup(group: ToolbarItem[]) {\n if (group.length > 0) {\n const moreGroupFactory = this.cfr.resolveComponentFactory(this.toolbarGroupComponent);\n const compRef = this.toolbarContainer.createComponent(moreGroupFactory);\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 TheToolbarItemComponent;\n }\n if (type === ToolbarItemType.toolDropdown) {\n return TheToolbarDropdownComponent;\n }\n return TheToolbarItemComponent;\n }\n}\n","<thy-icon-nav [style.justifyContent]=\"align\">\n <ng-container #toolbarContainer></ng-container>\n <ng-content></ng-content>\n <ng-template *ngIf=\"afterTemplate\" [ngTemplateOutlet]=\"afterTemplate\"></ng-template>\n</thy-icon-nav>\n","import {\n Component,\n OnInit,\n OnDestroy,\n ChangeDetectorRef,\n Input,\n ElementRef,\n NgZone,\n ChangeDetectionStrategy,\n ViewChild\n} from '@angular/core';\nimport { ScrollDispatcher } from '@angular/cdk/overlay';\nimport { merge, fromEvent, Subject } from 'rxjs';\nimport { takeUntil, filter, debounceTime } from 'rxjs/operators';\nimport { Range as slateRange, Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport * as TheQueries from '../../queries';\nimport { THE_INLINE_TOOLBAR_TYPES } from '../../constants';\nimport { ToolbarItem } from '../../interfaces';\nimport { TheToolbarComponent } from '../toolbar/toolbar.component';\nimport { TheContextService } from '../../services/context.service';\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})\nexport class TheInlineToolbarComponent implements OnInit, OnDestroy {\n @Input() editor: Editor;\n @Input() toolbarItems: ToolbarItem[];\n @ViewChild('inlineToolbar') inlineToolbar: TheToolbarComponent;\n\n destroy$ = new Subject();\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 this.inlineToolbar?.statusChange(this.editor);\n this.cdr.detectChanges();\n });\n });\n }\n\n updateInlineToolbar() {\n const inlineToolbar = this.elementRef.nativeElement.firstElementChild;\n\n if (!this.editor.selection) {\n inlineToolbar.removeAttribute('style');\n return;\n }\n const anchorBlock = TheQueries.anchorBlock(this.editor);\n if (!inlineToolbar || !anchorBlock) {\n return;\n }\n const { editor } = this;\n const { selection } = editor;\n\n if (\n !selection ||\n !AngularEditor.isFocused(editor) ||\n slateRange.isCollapsed(selection) ||\n Editor.string(editor, selection) === ''\n ) {\n inlineToolbar.removeAttribute('style');\n return;\n }\n\n if (!THE_INLINE_TOOLBAR_TYPES.includes(anchorBlock.type)) {\n return;\n }\n const native = window.getSelection();\n if (native.type !== 'None') {\n const range = native.getRangeAt(0);\n this.updatePosition(inlineToolbar, range);\n }\n }\n\n updatePosition(toolbarElement: HTMLElement, range) {\n let boundary = range.getBoundingClientRect();\n\n if (!boundary || (boundary.height === 0 && boundary.width === 0 && range.startContainer === range.endContainer)) {\n if (range.startContainer.nodeType === 1 && range.startContainer.querySelector('img')) {\n boundary = range.startContainer.querySelector('img').getBoundingClientRect();\n } else {\n boundary = range.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 { Component, ElementRef, Input, HostListener, Renderer2, ChangeDetectorRef, ViewChild } from '@angular/core';\nimport { Editor, Node } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { ToolbarItem } from '../../../interfaces/toolbar';\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 host: {\n class: 'the-quick-insert',\n '[class.hide]': 'isHide'\n }\n})\nexport class TheQuickInsertComponent {\n @Input() editor: Editor;\n @Input() quickToolbarItems: ToolbarItem[];\n\n isHide = true;\n defaultIconName = 'plus-circle-thin';\n iconNameFill = 'plus-circle-thin-fill';\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 constructor(private renderer: Renderer2, private elementRef: ElementRef, private cdr: ChangeDetectorRef) {}\n\n public checkStatus() {\n const { editor } = this;\n if (isCleanEmptyParagraph(editor)) {\n setTimeout(() => {\n const block = Node.ancestor(editor, [editor?.selection?.anchor.path[0]]);\n const rootNode: HTMLElement = AngularEditor.toDOMNode(editor, block);\n this.updatePosition(rootNode.offsetLeft, rootNode.offsetTop);\n });\n return;\n }\n this.isHide = true;\n }\n\n private updatePosition(left: number, top?: number) {\n this.isHide = false;\n this.renderer.setStyle(this.elementRef.nativeElement, 'top', `${top}px`);\n this.renderer.setStyle(this.elementRef.nativeElement, 'left', `${left}px`);\n }\n\n mouseEnter(event: MouseEvent) {\n this.displayIconName = this.iconNameFill;\n this.cdr.markForCheck();\n }\n\n mouseLeave(event: MouseEvent) {\n this.displayIconName = this.defaultIconName;\n this.cdr.markForCheck();\n }\n\n handleClick(event: MouseEvent) {\n event.stopPropagation();\n event.preventDefault();\n QuickInsertEditor.openQuickToolbar(this.editor, this.quickToolbarItems, this.iconElement.nativeElement);\n }\n}\n","<thy-icon\n #iconElement\n [thyIconName]=\"displayIconName\"\n class=\"quick-insert-icon text-desc font-size-xlg\"\n (mouseenter)=\"mouseEnter($event)\"\n (mouseleave)=\"mouseLeave($event)\"\n (mousedown)=\"handleClick($event)\"\n></thy-icon>\n","import { Component, ElementRef, Input, HostListener, Renderer2 } from '@angular/core';\nimport { Editor, Node } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { isCleanEmptyParagraph } from '../../utils/is-clean-empty-paragraph';\nimport { TheContextService } from '../../services/context.service';\nimport * as TheQueries from '../../queries';\nimport { TheOptions } from '../../interfaces/editor';\n\n@Component({\n selector: 'div[thePlaceholder]',\n template: `{{ options?.placeholder }}`,\n host: {\n class: 'the-placeholder',\n '[class.hide]': 'isHide'\n }\n})\nexport class ThePlaceholderComponent {\n @Input() editor: Editor;\n @Input() options: TheOptions;\n\n isHide = true;\n\n @HostListener('document:compositionstart')\n handleCompositionStart() {\n if (this.editor?.selection) {\n this.hide();\n }\n }\n\n @HostListener('document:compositionend', ['$event'])\n handleCompositionEnd(event) {\n if (!event.data) {\n this.checkStatus();\n }\n }\n\n constructor(private renderer: Renderer2, private elementRef: ElementRef, private contextService: TheContextService) {}\n\n public checkStatus() {\n const { editor } = this;\n const isEmptyShow = typeof this.options?.isEmptyShowPlaceholder === 'undefined' ? true : this.options.isEmptyShowPlaceholder;\n const isMustShow = this.options?.isMustShowPlaceholder;\n const isReadonly = this.options?.readonly;\n\n // empty content and no selection processing\n if (!isReadonly && isEmptyShow && TheQueries.isEmptyContent(editor.children)) {\n const firstElementChild = this.contextService.getFirstElementChild();\n const offsetTop = firstElementChild.offsetTop;\n const offsetLeft = firstElementChild.offsetLeft;\n this.updatePosition(offsetLeft, offsetTop);\n return;\n }\n\n if (isMustShow && isCleanEmptyParagraph(editor)) {\n setTimeout(() => {\n const block = Node.ancestor(editor, [editor?.selection?.anchor.path[0]]);\n const rootNode: HTMLElement = AngularEditor.toDOMNode(editor, block);\n this.updatePosition(rootNode.offsetLeft, rootNode.offsetTop);\n });\n return;\n }\n this.isHide = true;\n }\n\n private updatePosition(left: number, top?: number) {\n this.isHide = false;\n this.renderer.setStyle(this.elementRef.nativeElement, 'top', `${top}px`);\n this.renderer.setStyle(this.elementRef.nativeElement, 'left', `${left}px`);\n }\n\n private hide() {\n this.isHide = true;\n }\n}\n","import { Component, ChangeDetectionStrategy, ViewChild, TemplateRef } from '@angular/core';\nimport { Element } from 'slate';\nimport { ElementKinds } from '../../constants';\n\n@Component({\n selector: 'the-template,[theTemplate]',\n templateUrl: 'template.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheTemplateComponent {\n @ViewChild('paragraph', { read: TemplateRef, static: true })\n paragraphTemplate: TemplateRef<any>;\n\n @ViewChild('headingOne', { read: TemplateRef, static: true })\n headingOneTemplate: TemplateRef<any>;\n\n @ViewChild('headingTwo', { read: TemplateRef, static: true })\n headingTwoTemplate: TemplateRef<any>;\n\n @ViewChild('headingThree', { read: TemplateRef, static: true })\n headingThreeTemplate: TemplateRef<any>;\n\n @ViewChild('headingFour', { read: TemplateRef, static: true })\n headingFourTemplate: TemplateRef<any>;\n\n @ViewChild('headingFive', { read: TemplateRef, static: true })\n headingFiveTemplate: TemplateRef<any>;\n\n @ViewChild('headingSix', { read: TemplateRef, static: true })\n headingSixTemplate: TemplateRef<any>;\n\n public renderElement = (element: Element) => {\n if (element.type === ElementKinds.default) {\n return this.paragraphTemplate;\n }\n if (element.type === ElementKinds.heading_1) {\n return this.headingOneTemplate;\n }\n if (element.type === ElementKinds.heading_2) {\n return this.headingTwoTemplate;\n }\n if (element.type === ElementKinds.heading_3) {\n return this.headingThreeTemplate;\n }\n if (element.type === ElementKinds.heading_4) {\n return this.headingFourTemplate;\n }\n if (element.type === ElementKinds.heading_5) {\n return this.headingFiveTemplate;\n }\n if (element.type === ElementKinds.heading_6) {\n return this.headingSixTemplate;\n }\n return null;\n };\n}\n","<ng-template #paragraph let-context=\"context\" let-viewContext=\"viewContext\">\n <div theDefaultElement [context]=\"context\" [viewContext]=\"viewContext\" [ngStyle]=\"context.element | elementStyle\"></div>\n</ng-template>\n<ng-template #headingOne let-context=\"context\" let-viewContext=\"viewContext\">\n <h1\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h1>\n</ng-template>\n<ng-template #headingTwo let-context=\"context\" let-viewContext=\"viewContext\">\n <h2\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h2>\n</ng-template>\n<ng-template #headingThree let-context=\"context\" let-viewContext=\"viewContext\">\n <h3\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h3>\n</ng-template>\n<ng-template #headingFour let-context=\"context\" let-viewContext=\"viewContext\">\n <h4\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h4>\n</ng-template>\n<ng-template #headingFive let-context=\"context\" let-viewContext=\"viewContext\">\n <h5\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h5>\n</ng-template>\n<ng-template #headingSix let-context=\"context\" let-viewContext=\"viewContext\">\n <h6\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h6>\n</ng-template>\n","import {\n OnInit,\n OnDestroy,\n Component,\n Input,\n ViewContainerRef,\n ViewChild,\n ElementRef,\n forwardRef,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n NgZone\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { mixinUnsubscribe, MixinBase } from 'ngx-tethys/core';\nimport isHotkey from 'is-hotkey';\nimport { Editor, Text, Transforms, createEditor, Element, Descendant, Range, Path, NodeEntry } from 'slate';\nimport { withHistory } from 'slate-history';\nimport { AngularEditor, SlateError, withAngular, DOMElement } from 'slate-angular';\nimport { ThePlugin, TheOptions, DomEventDataInfo, TheEditor, TheDataMode, ToolbarEntity } from './interfaces';\nimport { MarkTypes } from './constants';\nimport { withTheEditor, toolbarCompose } from './plugins/index';\nimport { TheTemplateComponent } from './components/template/template.component';\nimport { shortcuts } from './shortcuts';\nimport { TheToolbarComponent } from './components/toolbar/toolbar.component';\nimport { TheToolbarService } from './services/toolbar.service';\nimport { TheContextService } from './services/context.service';\nimport { TheTextComponent } from './components/text/text.component';\nimport { CLIPBOARD_FORMAT_KEY, DEFAULT_SCROLL_CONTAINER } from './constants/default';\nimport { TheColorSelectService } from './services/color-select.service';\nimport * as TheTransforms from './transforms';\nimport * as TheQueries from './queries';\nimport { autoFocus } from './utils/auto-focus';\nimport { autoScrollViewHandle } from './utils/auto-scroll-view';\nimport { _ } from './utils/lodash';\nimport { dataDeserialize, dataSerializing } from './utils/data-transform';\nimport { setEditorUUID } from './utils/editor-uuid';\nimport { idCreator } from './utils/id-creator';\nimport { TheQuickInsertComponent } from './plugins/quick-insert/components/quick-insert.component';\nimport { ThePlaceholderComponent } from './plugins/placeholder/placeholder.component';\nimport { getToolbarClass } from './utils/get-toolbar-class';\n\n@Component({\n selector: 'the-editor, theEditor',\n templateUrl: 'editor.component.html',\n providers: [\n TheToolbarService,\n TheContextService,\n TheColorSelectService,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TheEditorComponent),\n multi: true\n }\n ],\n host: {\n class: 'the-editor',\n '[class.the-editor-readonly]': 'theOptions?.readonly'\n }\n})\nexport class TheEditorComponent extends mixinUnsubscribe(MixinBase) implements OnInit, 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 @ViewChild('templateInstance', { static: true })\n templateInstance: TheTemplateComponent;\n\n @ViewChild('globalToolbar')\n globalToolbarInstance: TheToolbarComponent;\n\n @ViewChild('quickInsert', { static: true })\n quickInsertInstance: TheQuickInsertComponent;\n\n @ViewChild('placeholder')\n placeholderInstance: ThePlaceholderComponent;\n\n _plugins: ThePlugin[] = [];\n\n toolbarEntity: ToolbarEntity;\n\n editor: TheEditor;\n\n editorValue: Descendant[];\n\n globalToolbarClass: string[];\n\n decorate: (nodeEntry: NodeEntry) => Range[];\n\n get theGlobalToolbarInstance(): TheToolbarComponent {\n return this.theGlobalToolbar ? this.theGlobalToolbar : this.globalToolbarInstance;\n }\n\n get maxHeight() {\n return this.theOptions?.maxHeight ? `${this.theOptions?.maxHeight}px` : null;\n }\n\n get quickToolbarItems() {\n return this.toolbarEntity?.quick;\n }\n\n autoScrollView = _.debounce(function (editor: Editor, scrollContainer: string) {\n return autoScrollViewHandle(editor, scrollContainer);\n }, 80);\n\n elementToHtml: WeakMap<Element, string> = new WeakMap();\n\n private onChangeCallback: (_: any) => void = () => {};\n\n private onTouchedCallback: () => void = () => {};\n\n constructor(\n private toolbarService: TheToolbarService,\n private theContextService: TheContextService,\n private viewContainerRef: ViewContainerRef,\n private elementRef: ElementRef,\n private ngZone: NgZone\n ) {\n super();\n }\n\n ngOnInit() {\n this.initialize();\n this.onErrorHandler();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const options = changes.theOptions;\n\n if (options) {\n this.initializeOptions();\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 super.ngOnDestroy();\n }\n\n initialize() {\n this.editor = withTheEditor<TheEditor>(this.thePlugins, withHistory(withAngular(createEditor(), CLIPBOARD_FORMAT_KEY)));\n this.generateDecorate();\n this.editor.disabled = this.theOptions?.disabled;\n this.editor.extraElementOptions = this.theOptions?.extraElementOptions;\n setEditorUUID(this.editor, idCreator());\n this.theContextService.initialize({ nativeElement: this.elementRef.nativeElement, viewContainerRef: this.viewContainerRef });\n this.toolbarCalculate();\n setTimeout(() => {\n this.theEditorCreated.emit(this.editor);\n this.placeholderInstance?.checkStatus();\n this.applyAutoFocus();\n });\n }\n\n initializeOptions() {\n if (!this.theOptions) {\n this.theOptions = {\n readonly: false,\n mode: TheDataMode.html\n };\n }\n if (!this.theOptions.mode) {\n this.theOptions = {\n ...this.theOptions,\n mode: TheDataMode.html\n };\n }\n }\n\n applyAutoFocus() {\n if (!this.theOptions?.disabled && !this.theOptions?.readonly) {\n autoFocus(this.editor, this.theOptions?.autoFocus);\n }\n }\n\n toolbarCalculate() {\n const toolbar = this?.theOptions?.toolbar;\n const toolbarItems = toolbarCompose(toolbar?.toolbarItems);\n const toolbarOption = this.toolbarService.initialize(toolbarItems, toolbar?.global, toolbar?.inline, toolbar?.quick);\n this.globalToolbarClass = ['the-global-toolbar', getToolbarClass(this.editor)];\n this.toolbarEntity = toolbarOption.toolbarEntity;\n\n if (this.theGlobalToolbar) {\n this.theGlobalToolbarInstance.editor = this.editor;\n this.theGlobalToolbarInstance.toolbarItems = toolbarOption.toolbarEntity.global;\n this.theGlobalToolbarInstance.containerClass = this.globalToolbarClass;\n this.theGlobalToolbarInstance.align = toolbar?.align;\n this.theGlobalToolbarInstance.setToolbarClass();\n this.theGlobalToolbarInstance.renderToolbarView();\n }\n }\n\n writeValue(value: string | Descendant[]) {\n const data = dataDeserialize(this.theOptions?.mode, value);\n // data-deserialize\n this.editorValue = data;\n }\n\n registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n valueChange(value: Descendant[]) {\n this.theGlobalToolbarInstance?.statusChange(this.editor);\n this.quickInsertInstance?.checkStatus();\n this.placeholderInstance?.checkStatus();\n // auto scroll view\n const scrollContainer = this.theOptions?.scrollContainer;\n const maxHeight = this.theOptions?.maxHeight;\n if (!this.theOptions?.readonly && (scrollContainer || maxHeight)) {\n const container = maxHeight ? DEFAULT_SCROLL_CONTAINER : scrollContainer;\n this.autoScrollView(this.editor, container);\n }\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 serializingValue(value: Descendant[]): string | Descendant[] {\n if (this.theOptions?.mode === TheDataMode.html) {\n let htmlValue = '';\n value.forEach((element: Element) => {\n let elementHtml = this.elementToHtml.get(element);\n if (elementHtml === undefined) {\n // serializing\n elementHtml = dataSerializing(this.theOptions?.mode, [element]) as string;\n htmlValue += elementHtml;\n this.elementToHtml.set(element, elementHtml);\n return;\n }\n htmlValue += elementHtml;\n });\n return htmlValue;\n }\n return value;\n }\n\n 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 template = this.templateInstance.renderElement(element);\n const component = this.editor.renderElement(element);\n return component ? component : template;\n };\n\n renderLeaf = (text: Text) => {\n const leaf = this.editor.renderLeaf(text);\n return leaf ? leaf : null;\n };\n\n renderText = (text: Text) => {\n if (text.text.length === 0) {\n return;\n }\n for (const key in MarkTypes) {\n if (text[MarkTypes[key]]) {\n return TheTextComponent;\n }\n }\n };\n\n 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({\n nativeEvent: event,\n data: {\n key: event.key\n }\n });\n if (isHotkey('mod+s', event)) {\n this.ngZone.run(() => {\n this.theOnSave.emit(this.editorValue);\n });\n event.preventDefault();\n return;\n }\n if (isHotkey('mod+a', event)) {\n this.handleSelectAll();\n }\n AngularEditor.onKeydown(this.editor, event);\n };\n\n mousedown(event: MouseEvent) {\n const editableElement = AngularEditor.toDOMNode(this.editor, this.editor);\n if (event.target === editableElement) {\n const rectEditable = editableElement.getBoundingClientRect();\n const centerX = rectEditable.x + rectEditable.width / 2;\n const relativeElement = document.elementFromPoint(centerX, event.y);\n const relativeBlockCardElement: DOMElement = relativeElement.closest('.slate-block-card');\n if (relativeBlockCardElement) {\n const blockCardEntry = AngularEditor.toSlateCardEntry(this.editor, relativeBlockCardElement.firstElementChild);\n if (blockCardEntry && blockCardEntry[1]) {\n const rootNodePath = blockCardEntry[1].slice(0, 1);\n const rootNode = TheQueries.getNode(this.editor, rootNodePath);\n if (this.editor.isBlockCard(rootNode)) {\n event.preventDefault();\n AngularEditor.moveBlockCard(this.editor, rootNode, { direction: event.x < centerX ? 'left' : 'right' });\n }\n }\n }\n }\n }\n\n handleSelectAll() {\n let node;\n if (!this.editor.selection) {\n TheTransforms.setEndSelection(this.editor);\n }\n const [start, end] = Range.edges(this.editor.selection);\n const selectionRange = Editor.range(this.editor, start, end);\n const containerBlocks = TheQueries.getContainerBlocks(this.editor);\n for (let i = 0; i < containerBlocks.length; i++) {\n [node] = TheQueries.getNodesByType(this.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(this.editor, path);\n if (!Range.equals(nodeRange, selectionRange)) {\n Transforms.select(this.editor, nodeRange);\n break;\n }\n node = null;\n }\n }\n }\n if (!node) {\n Transforms.select(this.editor, []);\n }\n event.preventDefault();\n return;\n }\n\n onClick = (event: MouseEvent) => {\n AngularEditor.onClick(this.editor, event);\n this.theOnDOMEvent.emit({\n nativeEvent: event\n });\n };\n\n onSlaPaste = (event: ClipboardEvent) => {\n this.theOnDOMEvent.emit({\n data: {\n ...this.getTextAndJSON(event.clipboardData)\n },\n nativeEvent: event\n });\n };\n\n onSlaBeforeInput = (\n event: Event & {\n inputType: string;\n data: string | null;\n dataTransfer: DataTransfer | null;\n }\n ) => {\n let data = {\n inputType: event.inputType,\n text: (event.data || event.dataTransfer) as string\n };\n if (event.inputType === 'insertFromPaste') {\n data = {\n ...data,\n ...this.getTextAndJSON((event.data || event.dataTransfer) as DataTransfer)\n };\n }\n this.theOnDOMEvent.emit({\n data,\n nativeEvent: event\n });\n };\n\n onSlaBlur = (event: FocusEvent) => {\n this.theOnDOMEvent.emit({\n nativeEvent: event\n });\n };\n\n onSlaFocus = (event: Event) => {\n this.theOnDOMEvent.emit({\n nativeEvent: event\n });\n };\n\n onSlaCut = (event: ClipboardEvent) => {\n this.theOnDOMEvent.emit({\n nativeEvent: event\n });\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: Event) => {\n event.stopPropagation();\n this.theOnDOMEvent.emit({\n nativeEvent: event\n });\n };\n\n getTextAndJSON(data: DataTransfer) {\n const fragment = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);\n let json = [];\n if (fragment) {\n json = JSON.parse(decodeURIComponent(window.atob(fragment)));\n }\n const text = data.getData('text/plain');\n return {\n json,\n text\n };\n }\n}\n","<the-toolbar\n *ngIf=\"!theOptions?.readonly && !theGlobalToolbar\"\n [ngClass]=\"{\n 'the-toolbar-disabled': theOptions?.disabled\n }\"\n #globalToolbar\n [editor]=\"editor\"\n [toolbarItems]=\"toolbarEntity.global\"\n [containerClass]=\"globalToolbarClass\"\n [align]=\"theOptions?.toolbar?.align\"\n></the-toolbar>\n\n<div\n class=\"the-editable-container\"\n [ngClass]=\"{\n 'the-editor-disabled': theOptions?.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 (ngModelChange)=\"valueChange($event)\"\n [decorate]=\"decorate\"\n [renderElement]=\"renderElement\"\n [renderText]=\"renderText\"\n [renderLeaf]=\"renderLeaf\"\n [readonly]=\"theOptions?.readonly || theOptions?.disabled\"\n [keydown]=\"onKeyDown\"\n [click]=\"onClick\"\n [paste]=\"onSlaPaste\"\n [beforeInput]=\"onSlaBeforeInput\"\n [blur]=\"onSlaBlur\"\n [focus]=\"onSlaFocus\"\n [copy]=\"onSlaCopy\"\n [cut]=\"onSlaCut\"\n [isStrictDecorate]=\"false\"\n [compositionStart]=\"onSlaCompositionStart\"\n [compositionEnd]=\"onSlaCompositionEnd\"\n [dragStart]=\"onSlaDragStart\"\n [dragOver]=\"onSlaDragOver\"\n [drop]=\"onDrop\"\n (mousedown)=\"mousedown($event)\"\n ></slate-editable>\n <the-inline-toolbar *ngIf=\"!theOptions?.readonly\" [editor]=\"editor\" [toolbarItems]=\"toolbarEntity.inline\"></the-inline-toolbar>\n <div #quickInsert theQuickInsert [editor]=\"editor\" [quickToolbarItems]=\"quickToolbarItems\"></div>\n <div #placeholder thePlaceholder [editor]=\"editor\" [options]=\"theOptions\"></div>\n <the-template #templateInstance></the-template>\n</div>\n","import { NgModule } from '@angular/core';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { TheColumnResizeOverlayHandleComponent } from './overlay-handle.component';\nimport { TheColumnResizeDirective } from './column-resize.directive';\n\nconst ENTRY_COMMON_COMPONENTS = [TheColumnResizeOverlayHandleComponent];\nconst DIRECTIVES = [TheColumnResizeDirective];\n\n@NgModule({\n declarations: ENTRY_COMMON_COMPONENTS,\n exports: ENTRY_COMMON_COMPONENTS,\n entryComponents: ENTRY_COMMON_COMPONENTS\n})\nexport class TheColumnResizeCommonModule {}\n\n@NgModule({\n imports: [OverlayModule, TheColumnResizeCommonModule],\n declarations: DIRECTIVES,\n exports: DIRECTIVES\n})\nexport class TheColumnSizeModule {}\n","import { Component, OnInit, ElementRef, Input, ViewChild, TemplateRef, ViewContainerRef, OnDestroy, HostListener } from '@angular/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor } from 'slate';\nimport { DefaultToolbarItem } from '../../interfaces';\n\n@Component({\n selector: 'the-toolbar-group',\n templateUrl: './toolbar-group.component.html',\n host: {\n class: 'the-toolbar-group'\n }\n})\nexport class TheToolbarGroupComponent implements OnInit, OnDestroy {\n private _item: DefaultToolbarItem;\n\n @Input() menus: DefaultToolbarItem[];\n\n @Input()\n set item(i: DefaultToolbarItem) {\n this._item = i;\n this.activeMenu = i;\n }\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 active = false;\n activeMenu: DefaultToolbarItem;\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('click', ['$event'])\n clickHandle(event) {\n event.stopPropagation();\n }\n\n constructor(public elementRef: ElementRef, private thyPopover: ThyPopover, private viewContainerRef: ViewContainerRef) {}\n\n ngOnInit() {}\n\n ngOnDestroy(): void {\n this.colseGroup();\n }\n\n toggleGroupMenus(event: MouseEvent) {\n if (this.editor?.disabled) {\n return;\n }\n if (this.isOpened) {\n this.colseGroup();\n } else {\n this.openGroup(event);\n }\n }\n\n public statusChange(editor: Editor) {\n const activeItem = this.menusActive(editor);\n this.activeMenu = activeItem ? activeItem : null;\n this.activeChange();\n this.colseGroup();\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: 10,\n placement: 'bottomRight',\n origin: event.currentTarget as HTMLElement,\n viewContainerRef: this.viewContainerRef,\n hasBackdrop: false,\n outsideClosable: true\n });\n this.groupPopoverRef.afterClosed().subscribe(() => {\n this.activeChange();\n });\n }\n\n colseGroup() {\n if (this.isOpened) {\n this.groupPopoverRef.close();\n }\n }\n}\n","<a thyIconNavLink [thyIconNavLinkIcon]=\"item.icon\" [thyTooltip]=\"item?.name\" thyTooltipPlacement=\"top\" [thyIconNavLinkActive]=\"active\"></a>\n\n<ng-template #groupTemplate>\n <the-toolbar class=\"group\" [editor]=\"editor\" [toolbarItems]=\"menus\" [isMore]=\"false\"></the-toolbar>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { SlateModule } from 'slate-angular';\nimport { TheTextComponent } from './components/text/text.component';\nimport { TheDefaultElementComponent } from './components/element/element.component';\nimport { TheEditorComponent } from './editor.component';\nimport { TheImageComponent } from './plugins/image/image.component';\nimport { TheToolbarComponent } from './components/toolbar/toolbar.component';\nimport { TheToolbarDropdownComponent } from './components/toolbar-dropdown/toolbar-dropdown.component';\nimport { TheToolbarItemComponent } from './components/toolbar-item/toolbar-item.component';\nimport { NavSplitLineComponent } from './components/nav-split-line/nav-split-line.component';\nimport { TheTemplateComponent } from './components/template/template.component';\nimport { TheHrComponent } from './plugins/hr/hr.component';\nimport { TheBlockquoteComponent } from './plugins/blockquote/blockquote.component';\nimport { TheTodoItemComponent } from './plugins/todo-item/todo-item.component';\nimport { TheListItemComponent } from './plugins/list/components/list-item.component';\nimport { TheBulletedListComponent } from './plugins/list/components/bulleted-list.component';\nimport { TheNumberedListComponent } from './plugins/list/components/numbered-list.component';\nimport { ElementStylePipe, ElementClassPipe } from './pipes';\n\nimport { ThyNavModule } from 'ngx-tethys/nav';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyProgressModule } from 'ngx-tethys/progress';\nimport { ThyFormModule } from 'ngx-tethys/form';\nimport { ThyTooltipModule } from 'ngx-tethys/tooltip';\nimport { ThyAutocompleteModule } from 'ngx-tethys/autocomplete';\nimport { ThyAvatarModule } from 'ngx-tethys/avatar';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyListModule } from 'ngx-tethys/list';\nimport { ThyActionMenuModule } from 'ngx-tethys/action-menu';\nimport { ThyInputModule } from 'ngx-tethys/input';\nimport { ThySelectModule } from 'ngx-tethys/select';\nimport { ThyButtonModule } from 'ngx-tethys/button';\nimport { ThyNotifyModule } from 'ngx-tethys/notify';\nimport { ThyAlertModule } from 'ngx-tethys/alert';\nimport { TheColorSelectComponent } from './components/color-select/color-select.component';\nimport { TheColorToolbarItemComponent } from './plugins/color/toolbar-item.component';\nimport { TheCodeComponent } from './plugins/code/code.component';\nimport { CodemirrorModule } from 'ng-codemirror';\nimport { TheLinkComponent, TheReadonlyLinkComponent } from './plugins/link/link.component';\nimport { TheLinkEditComponent } from './plugins/link/edit/link-edit.component';\nimport { TheLinkHoverComponent } from './plugins/link/hover/link-hover.component';\nimport { TheTableToolbarComponent } from './plugins/table/components/toolbar/table-toolbar.component';\nimport { TheTableComponent } from './plugins/table/components/table.component';\nimport { TheTableRowComponent } from './plugins/table/components/row/row.component';\nimport { TheTdComponent } from './plugins/table/components/td/td.component';\nimport { TheContextMenuComponent } from './components/contextmenu/contextmenu.component';\nimport { TheColumnSizeModule } from './components/column-resize/column-resize.module';\nimport { TheInsertMarkComponent } from './plugins/table/components/insert-mark/insert-mark.component';\nimport { TheToolbarGroupComponent } from './components/toolbar-group/toolbar-group.component';\nimport { TheToolbarGroupToken } from './constants/toolbar';\nimport { TheTableSelectComponent } from './components/table-select/table-select.component';\nimport { TheTableToolbarItemComponent } from './plugins/table/toolbar-item.component';\nimport { TheConversionHintComponent } from './components/conversion-hint/conversion-hint.component';\nimport { TheVerticalToolbarItemComponent } from './plugins/vertical-align/toolbar-item.component';\nimport { THE_CODE_MODE_PROVIDER } from './constants';\nimport { TheInlineToolbarComponent } from './components/inline-toolbar/inline-toolbar.component';\nimport { TheQuickToolbarComponent } from './plugins/quick-insert/components/quick-toolbar/quick-toolbar.component';\nimport { TheQuickInsertComponent } from './plugins/quick-insert/components/quick-insert.component';\nimport { ThePlaceholderComponent } from './plugins/placeholder/placeholder.component';\n\nconst TETHYS = [\n ThyIconModule,\n ThyAvatarModule,\n ThyNavModule,\n ThyFormModule,\n ThySharedModule,\n ThyListModule,\n ThyTooltipModule,\n ThyProgressModule,\n ThyAutocompleteModule,\n ThyActionMenuModule,\n ThyInputModule,\n ThySelectModule,\n ThyButtonModule,\n ThyNotifyModule,\n ThyAlertModule\n];\n\nexport const COMPONENTS = [\n TheToolbarComponent,\n TheToolbarDropdownComponent,\n TheToolbarGroupComponent,\n TheToolbarItemComponent,\n TheInlineToolbarComponent,\n NavSplitLineComponent,\n TheTextComponent,\n TheDefaultElementComponent,\n TheQuickInsertComponent,\n TheQuickToolbarComponent,\n TheColorSelectComponent,\n TheColorToolbarItemComponent,\n TheContextMenuComponent,\n TheInsertMarkComponent,\n TheTableSelectComponent,\n TheTableToolbarItemComponent,\n TheConversionHintComponent,\n TheVerticalToolbarItemComponent\n];\n\nexport const PLUGIN_COMPONENTS = [\n TheImageComponent,\n TheTemplateComponent,\n TheHrComponent,\n TheBlockquoteComponent,\n TheTodoItemComponent,\n TheListItemComponent,\n TheBulletedListComponent,\n TheNumberedListComponent,\n TheCodeComponent,\n TheLinkComponent,\n TheReadonlyLinkComponent,\n TheLinkEditComponent,\n TheLinkHoverComponent,\n TheTableToolbarComponent,\n TheTableComponent,\n TheTableRowComponent,\n TheTdComponent,\n ThePlaceholderComponent\n];\n\nconst PIPES = [ElementStylePipe, ElementClassPipe];\n\n@NgModule({\n declarations: [TheEditorComponent, ...PIPES, ...COMPONENTS, ...PLUGIN_COMPONENTS],\n imports: [CommonModule, SlateModule, FormsModule, ...TETHYS, CodemirrorModule, TheColumnSizeModule],\n exports: [TheEditorComponent, TheToolbarComponent, TheToolbarDropdownComponent, TheToolbarItemComponent, TheDefaultElementComponent],\n entryComponents: [...COMPONENTS, ...PLUGIN_COMPONENTS],\n providers: [\n {\n provide: TheToolbarGroupToken,\n useValue: TheToolbarGroupComponent\n },\n THE_CODE_MODE_PROVIDER\n ]\n})\nexport class TheEditorModule {}\n","/*\n * Public API Surface of editor\n */\nexport * from './editor.module';\nexport * from './interfaces';\nexport * from './constants';\nexport * from './plugins';\nexport * from './plugins/public-api';\nexport * from './custom-types';\nexport * from './plugins/image/image.component';\nexport * from './services/toolbar.service';\nexport * from './editor.component';\nexport * from './components/toolbar/toolbar.component';\nexport * from './components/toolbar-base-item/toolbar-base-item.component';\nexport * from './components/toolbar-dropdown/toolbar-dropdown.component';\nexport * from './components/toolbar-group/toolbar-group.component';\nexport * from './components/toolbar-item/toolbar-item.component';\nexport * from './components/element/element.component';\nexport * as TheQueries from './queries/index';\nexport * as TheTransforms from './transforms/index';\nexport * from './utils/index';\nexport * from './services/context.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Element","getLastChild","TheQueries.anchorBlockEntry","TheQueries.isEmptyParagraph","TheQueries.findPath","TheQueries.isNodeTypeIn","TheQueries.getNode","TheQueries.isNodeType","TheQueries.isAncestor","TheQueries.getAboveByType","TheQueries.getNodesByType","TheQueries.anchorBlock","TheTransforms.unwrapNodesByType","TheQueries.isParagraph","TheQueries.isBlockActive","TheTransforms.closeConversionHint","TheQueries.isAcrossBlocks","TheTransforms.splitNode","isEmptyParagraph","anchorBlock","anchorBlockEntry","TheQueries.isAncestorEmpty","TheQueries.isCollapsed","TheQueries.getParent","TheQueries.isStart","TheQueries.isRangeAtRoot","TheQueries.isBlockTextEmptyAfterSelection","TheQueries.getLastChildPath","TheTransforms.moveChildren","TheQueries.findDescendant","TheQueries.isFirstChild","TheQueries.isBlockAboveEmpty","TheTransforms.onKeyDownResetBlockType","getPlainText","TheQueries.getPreviousPath","TheTransforms.setNode","TheQueries.getAnchorBlockEntry","TheQueries.isDescendant","TheTransforms.mergeDeepToNodes","TheQueries.getPointBefore","TheQueries.getText","TheQueries.getRangeFromBlockStart","TheQueries.someNode","TheQueries.getRangeBefore","TheQueries.getBlockAbove","TheQueries.getLastNode","TheTransforms.insertParagraph","TheQueries.isEmptyParagraphByPath","TheQueries.getBlockCardAbove","TheQueries.getContainerBlocks","TheQueries.getSelectionNodesByType","TableOptions","TheTransforms.insertElement","TheTransforms.setMarks","TheTransforms.handleContinualDeleteBackward","TheTransforms.handleContinualInsertBreak","TheQueries.getAbove","TheTransforms.deleteElement","SlateNode","index","TheQueries.getSelectionMarks","TheTransforms.insertElementNext","slateRange","TheQueries.isEmptyContent","TheTransforms.setEndSelection"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"worktile-theia.js","sources":["../../../packages/src/constants/default.ts","../../../packages/src/constants/node-types.ts","../../../packages/src/constants/toolbar.ts","../../../packages/src/constants/error.ts","../../../packages/src/constants/code.ts","../../../packages/src/components/text/text.component.ts","../../../packages/src/interfaces/view-base.ts","../../../packages/src/components/element/element.component.ts","../../../packages/src/interfaces/editor.ts","../../../packages/src/interfaces/toolbar.ts","../../../packages/src/interfaces/image.ts","../../../packages/src/interfaces/valid-children-types.ts","../../../packages/src/utils/id-creator.ts","../../../packages/src/queries/is-ancestor.ts","../../../packages/src/queries/get-last-node.ts","../../../packages/src/queries/is-collapsed.ts","../../../packages/src/queries/get-anchor-block-entry.ts","../../../packages/src/queries/is-empty-paragraph.ts","../../../packages/src/queries/is-paragraph.ts","../../../packages/src/queries/is-block-active.ts","../../../packages/src/queries/get-above-by-type.ts","../../../packages/src/queries/is-include-types.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/transforms/un-hang-range.ts","../../../packages/src/queries/get-nodes.ts","../../../packages/src/queries/get-nodes-by-type.ts","../../../packages/src/queries/anchor-block.ts","../../../packages/src/queries/get-block-above.ts","../../../packages/src/queries/is-ancestor-empty.ts","../../../packages/src/queries/is-block-above-empty.ts","../../../packages/src/queries/is-node-type-in.ts","../../../packages/src/queries/is-first-child.ts","../../../packages/src/queries/get-previous-path.ts","../../../packages/src/queries/get-node.ts","../../../packages/src/queries/get-parent.ts","../../../packages/src/queries/find-path.ts","../../../packages/src/utils/cast-array.ts","../../../packages/src/utils/match.ts","../../../packages/src/queries/find-node.ts","../../../packages/src/queries/find-descendant.ts","../../../packages/src/queries/get-last-child-path.ts","../../../packages/src/queries/is-point-at-root.ts","../../../packages/src/queries/is-range-at-root.ts","../../../packages/src/queries/get-next-sibling-nodes.ts","../../../packages/src/queries/is-block-text-empty-after-selection.ts","../../../packages/src/queries/get-above.ts","../../../packages/src/queries/is-start.ts","../../../packages/src/queries/is-range-across-blocks.ts","../../../packages/src/queries/some-node.ts","../../../packages/src/queries/get-children.ts","../../../packages/src/queries/is-descendant.ts","../../../packages/src/queries/is-node-type.ts","../../../packages/src/queries/anchor-inline-entry.ts","../../../packages/src/queries/anchor-inline.ts","../../../packages/src/utils/lodash.ts","../../../packages/src/queries/get-point-before.ts","../../../packages/src/queries/get-selection-nodes-by-type.ts","../../../packages/src/utils/fragment.ts","../../../packages/src/queries/is-across-blocks.ts","../../../packages/src/queries/get-text.ts","../../../packages/src/queries/get-point-from-location.ts","../../../packages/src/queries/get-rang-from-block-start.ts","../../../packages/src/queries/get-range-before.ts","../../../packages/src/queries/is-empty-content.ts","../../../packages/src/queries/get-block-card-above.ts","../../../packages/src/queries/get-plain-text.ts","../../../packages/src/queries/is-empty-paragraph-by-path.ts","../../../packages/src/queries/get-selection-marks.ts","../../../packages/src/queries/is-container-type.ts","../../../packages/src/queries/get-container-blocks.ts","../../../packages/src/transforms/set-marks.ts","../../../packages/src/transforms/clear-marks.ts","../../../packages/src/transforms/insert-element.ts","../../../packages/src/transforms/insert-element-next.ts","../../../packages/src/transforms/set-node.ts","../../../packages/src/transforms/unwrap-nodes-by-type.ts","../../../packages/src/transforms/on-keydown-reset-block-type.ts","../../../packages/src/transforms/move-children.ts","../../../packages/src/utils/create-empty-paragraph.ts","../../../packages/src/transforms/insert-paragraph.ts","../../../packages/src/transforms/apply-deep-to-nodes.ts","../../../packages/src/transforms/merge-deep-to-nodes.ts","../../../packages/src/transforms/un-wrap.ts","../../../packages/src/transforms/split-node.ts","../../../packages/src/transforms/delete-element.ts","../../../packages/src/transforms/set-end-selection.ts","../../../packages/src/utils/weak-maps.ts","../../../packages/src/transforms/close-conversion-hint.ts","../../../packages/src/transforms/handle-continual-delete-backward.ts","../../../packages/src/transforms/handle-continual-insert-break.ts","../../../packages/src/plugins/list/queries/is-node-type-list.ts","../../../packages/src/plugins/list/list.editor.ts","../../../packages/src/plugins/todo-item/todo-item.editor.ts","../../../packages/src/plugins/blockquote/blockquote.editor.ts","../../../packages/src/constants/auto-format-rules.ts","../../../packages/src/plugins/common/history.plugin.ts","../../../packages/src/components/conversion-hint/conversion-hint.component.ts","../../../packages/src/components/conversion-hint/conversion-hint.component.html","../../../packages/src/utils/data-transform.ts","../../../packages/src/utils/editor-uuid.ts","../../../packages/src/utils/get-toolbar-class.ts","../../../packages/src/utils/common.ts","../../../packages/src/plugins/deserializers/deserialize-md.plugin.ts","../../../packages/src/plugins/common/auto-insert-data..ts","../../../packages/src/plugins/common/remove-empty.plugin.ts","../../../packages/src/plugins/common/reset-type.plugin.ts","../../../packages/src/services/context.service.ts","../../../packages/src/plugins/image/image.component.ts","../../../packages/src/plugins/image/image.component.html","../../../packages/src/plugins/image/image.editor.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/list/queries/is-list.ts","../../../packages/src/plugins/list/queries/is-in-list.ts","../../../packages/src/plugins/list/queries/is-list-nested.ts","../../../packages/src/plugins/list/queries/get-list-types.ts","../../../packages/src/plugins/list/queries/get-start-list-item.ts","../../../packages/src/plugins/list/queries/has-list-in-list-item.ts","../../../packages/src/plugins/list/queries/is-single-list-item.ts","../../../packages/src/plugins/list/queries/get-list-item-entry.ts","../../../packages/src/plugins/list/queries/is-selection-at-list-item-start.ts","../../../packages/src/plugins/list/transforms/insert-list-data.ts","../../../packages/src/plugins/list/transforms/move-list-item-up.ts","../../../packages/src/plugins/list/transforms/insert-list-item.ts","../../../packages/src/plugins/list/transforms/unwrap-list.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/normalizers/normalize-list-item.ts","../../../packages/src/plugins/list/normalizers/normalize-no.ts","../../../packages/src/plugins/list/normalizers/get-list-normalizer.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/on-key-down-list.ts","../../../packages/src/pipes.ts","../../../packages/src/plugins/list/components/numbered-list.component.ts","../../../packages/src/plugins/list/components/bulleted-list.component.ts","../../../packages/src/plugins/list/components/list-item.component.ts","../../../packages/src/plugins/list/queries/is-selection-in-same-list-item.ts","../../../packages/src/plugins/list/list.plugin.ts","../../../packages/src/utils/dom.ts","../../../packages/src/plugins/todo-item/todo-item.component.ts","../../../packages/src/plugins/todo-item/todo-item.plugin.ts","../../../packages/src/plugins/hr/hr.component.ts","../../../packages/src/plugins/hr/hr.plugin.ts","../../../packages/src/plugins/align/align.plugin.ts","../../../packages/src/plugins/heading/heading.plugin.ts","../../../packages/src/plugins/mark/mark.plugin.ts","../../../packages/src/plugins/node-id/node-id.plugin.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/plugins/common/transforms.plugin.ts","../../../packages/src/plugins/normalizers/trailing-node.plugin.ts","../../../packages/src/plugins/common/block-card.plugin.ts","../../../packages/src/plugins/common/move-selection.plugin.ts","../../../packages/src/plugins/common/get-fragment.plugin.ts","../../../packages/src/plugins/todo-item/options.ts","../../../packages/src/plugins/table/table.types.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/table-position.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/calc-span.ts","../../../packages/src/plugins/table/utils/add-columns.ts","../../../packages/src/plugins/table/transforms/insert-column.ts","../../../packages/src/plugins/table/transforms/insert-row.ts","../../../packages/src/plugins/table/transforms/insert-table.ts","../../../packages/src/plugins/table/transforms/clear-cell.ts","../../../packages/src/plugins/table/utils/remove-columns.ts","../../../packages/src/plugins/table/transforms/remove-column.ts","../../../packages/src/plugins/table/transforms/remove-row.ts","../../../packages/src/plugins/table/utils/next-path.ts","../../../packages/src/plugins/table/transforms/remove-table.ts","../../../packages/src/plugins/table/table.editor.ts","../../../packages/src/plugins/mark/mark.editor.ts","../../../packages/src/plugins/mark/options.ts","../../../packages/src/plugins/list/options.ts","../../../packages/src/plugins/image/options.ts","../../../packages/src/plugins/hr/hr.editor.ts","../../../packages/src/plugins/hr/options.ts","../../../packages/src/plugins/heading/heading.editor.ts","../../../packages/src/plugins/heading/options.ts","../../../packages/src/plugins/blockquote/options.ts","../../../packages/src/plugins/align/align.editor.ts","../../../packages/src/plugins/align/options.ts","../../../packages/src/plugins/blockquote/blockquote.component.ts","../../../packages/src/plugins/blockquote/blockquote.plugin.ts","../../../packages/src/constants/color-select.ts","../../../packages/src/components/color-select/color-select.component.ts","../../../packages/src/components/color-select/color-select.component.html","../../../packages/src/services/color-select.service.ts","../../../packages/src/plugins/color/color.editor.ts","../../../packages/src/components/toolbar-base-item/toolbar-base-item.component.ts","../../../packages/src/plugins/color/toolbar-item.component.ts","../../../packages/src/plugins/color/options.ts","../../../packages/src/plugins/common/remove-void.plugin.ts","../../../packages/src/plugins/code/code.editor.ts","../../../packages/src/plugins/code/options.ts","../../../packages/src/components/toolbar-dropdown/toolbar-dropdown.component.ts","../../../packages/src/components/toolbar-dropdown/toolbar-dropdown.component.html","../../../packages/src/components/nav-split-line/nav-split-line.component.ts","../../../packages/src/plugins/code/code.component.ts","../../../packages/src/plugins/code/code.component.html","../../../packages/src/plugins/code/code.plugin.ts","../../../packages/src/plugins/link/link.types.ts","../../../packages/src/plugins/link/link.editor.ts","../../../packages/src/plugins/link/options.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.component.ts","../../../packages/src/plugins/normalizers/remove-empty-nodes.ts","../../../packages/src/plugins/link/link.plugin.ts","../../../packages/src/components/table-select/table-select.component.ts","../../../packages/src/components/table-select/table-select.component.html","../../../packages/src/plugins/table/toolbar-item.component.ts","../../../packages/src/plugins/table/options.ts","../../../packages/src/components/column-resize/column-resize-notifier.ts","../../../packages/src/components/column-resize/event-dispatcher.ts","../../../packages/src/plugins/table/utils/get-select-cell-node.ts","../../../packages/src/plugins/table/utils/merge-cell.ts","../../../packages/src/plugins/table/table.store.ts","../../../packages/src/plugins/table/utils/split-cell.ts","../../../packages/src/plugins/table/utils/set-menu-cell-invisibility.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/utils/is-virtual-key.ts","../../../packages/src/components/contextmenu/contextmenu.component.ts","../../../packages/src/components/contextmenu/contextmenu.component.html","../../../packages/src/services/table-contextmenu.service.ts","../../../packages/src/plugins/table/table.service.ts","../../../packages/src/constants/selector.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/components/column-resize/selectors.ts","../../../packages/src/components/column-resize/column-resize.directive.ts","../../../packages/src/plugins/table/components/table.component.ts","../../../packages/src/plugins/table/components/table.component.html","../../../packages/src/plugins/table/transforms/clear-table-node.ts","../../../packages/src/plugins/table/utils/calc-anchor-position.ts","../../../packages/src/plugins/table/components/row/row.component.ts","../../../packages/src/components/column-resize/resizing.store.ts","../../../packages/src/components/column-resize/resize-ref.ts","../../../packages/src/components/column-resize/overlay-handle.component.ts","../../../packages/src/plugins/table/utils/get-base-height.ts","../../../packages/src/plugins/table/components/td/td.component.ts","../../../packages/src/plugins/table/components/td/td.component.html","../../../packages/src/plugins/table/utils/normalize-table.ts","../../../packages/src/plugins/table/table.plugin.ts","../../../packages/src/plugins/normalizers/insert-paragraph-nodes.ts","../../../packages/src/plugins/deserializers/deserialize-html.plugin.ts","../../../packages/src/plugins/vertical-align/vertical-align.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/options.ts","../../../packages/src/plugins/paint-format/paint-format.editor.ts","../../../packages/src/plugins/paint-format/options.ts","../../../packages/src/utils/is-clean-empty-paragraph.ts","../../../packages/src/components/toolbar-item/toolbar-item.component.ts","../../../packages/src/plugins/quick-insert/components/quick-toolbar/quick-toolbar.component.ts","../../../packages/src/plugins/quick-insert/components/quick-toolbar/quick-toolbar.component.html","../../../packages/src/plugins/quick-insert/quick-insert.editor.ts","../../../packages/src/plugins/quick-insert/quick-insert.plugint.ts","../../../packages/src/plugins/soft-break/soft-break.plugin.ts","../../../packages/src/plugins/font-size/font-size.editor.ts","../../../packages/src/plugins/font-size/options.ts","../../../packages/src/plugins/index.ts","../../../packages/src/shortcuts/mark.ts","../../../packages/src/shortcuts/index.ts","../../../packages/src/services/toolbar.service.ts","../../../packages/src/utils/auto-focus.ts","../../../packages/src/utils/get-editable-element-height.ts","../../../packages/src/utils/auto-scroll-view.ts","../../../packages/src/components/toolbar/toolbar.component.ts","../../../packages/src/components/toolbar/toolbar.component.html","../../../packages/src/components/inline-toolbar/inline-toolbar.component.ts","../../../packages/src/plugins/quick-insert/components/quick-insert.component.ts","../../../packages/src/plugins/quick-insert/components/quick-insert.component.html","../../../packages/src/plugins/placeholder/placeholder.component.ts","../../../packages/src/components/template/template.component.ts","../../../packages/src/components/template/template.component.html","../../../packages/src/editor.component.ts","../../../packages/src/editor.component.html","../../../packages/src/components/column-resize/column-resize.module.ts","../../../packages/src/components/toolbar-group/toolbar-group.component.ts","../../../packages/src/components/toolbar-group/toolbar-group.component.html","../../../packages/src/editor.module.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'];\nexport const PICTURE_ACCEPTED_UPLOAD_SIZE = 20;\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';\n\nexport enum TheMode {\n fullMode = 'full',\n liteMode = 'lite'\n}\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}\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 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 MarkTypes {\n bold = 'bold',\n italic = 'italic',\n underline = 'underlined',\n strike = 'strike',\n color = 'color',\n backgroundColor = 'background-color',\n codeLine = 'code-line',\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}\n\nexport const MarkProps: Array<MarkTypes> = [\n MarkTypes.backgroundColor,\n MarkTypes.bold,\n MarkTypes.codeLine,\n MarkTypes.color,\n MarkTypes.italic,\n MarkTypes.strike,\n MarkTypes.underline,\n MarkTypes.fontSize\n];\n\nexport const THE_INLINE_TOOLBAR_TYPES: Array<ElementKinds> = [ElementKinds.default, ElementKinds.listItem, ElementKinds.checkItem];\n\nexport const STANDARD_HEADING_TYPES: CustomElementKinds[] = [\n ElementKinds.heading_1,\n ElementKinds.heading_2,\n ElementKinds.heading_3,\n ElementKinds.heading_4\n];\n\nexport const HEADING_TYPES: CustomElementKinds[] = [...STANDARD_HEADING_TYPES, ElementKinds.heading_5, ElementKinds.heading_6];\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_DELETEBACKWARD_TYPES: CustomElementKinds[] = [ElementKinds.tableCell];\n","import { ComponentType } from 'slate-angular';\nimport { InjectionToken } from '@angular/core';\nimport { ElementKinds, MarkTypes } from './node-types';\nimport { ToolbarItem, ToolbarKey } from '../interfaces';\nimport { ToolbarActionTypes, STANDARD_HEADING_TYPES } from '../constants/node-types';\nimport type { TheToolbarGroupComponent } from '../components/toolbar-group/toolbar-group.component';\n\nexport const TheToolbarGroupToken = new InjectionToken<ComponentType<TheToolbarGroupComponent>>('the-toolbar-group-token');\n\nexport const QUICK_TOOLBAR_HOTKEY = '/';\n\nexport enum DropdownMode {\n icon = 'icon-mode',\n text = 'text-mode'\n}\n\nexport enum ToolbarItemMode {\n horizontal,\n vertical\n}\n\nexport const DefaultGlobalToolbarDefinition: ToolbarKey[] = [\n ElementKinds.headingList,\n MarkTypes.fontSize,\n ToolbarActionTypes.split,\n MarkTypes.bold,\n MarkTypes.italic,\n MarkTypes.underline,\n MarkTypes.strike,\n MarkTypes.codeLine,\n MarkTypes.color,\n MarkTypes.backgroundColor,\n ToolbarActionTypes.split,\n ToolbarActionTypes.alignType,\n ToolbarActionTypes.verticalAlign,\n ToolbarActionTypes.split,\n ElementKinds.numberedList,\n ElementKinds.bulletedList,\n ElementKinds.checkItem,\n ToolbarActionTypes.split,\n ElementKinds.link,\n ElementKinds.image,\n ElementKinds.table,\n ElementKinds.blockquote,\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 MarkTypes.codeLine,\n MarkTypes.color,\n MarkTypes.backgroundColor,\n ToolbarActionTypes.split,\n ToolbarActionTypes.alignType,\n ToolbarActionTypes.split,\n ElementKinds.link\n];\n\nexport const DefaultQuickToolbarDefinition: ToolbarKey[] = [\n ...STANDARD_HEADING_TYPES,\n ToolbarActionTypes.split,\n ElementKinds.numberedList,\n ElementKinds.bulletedList,\n ElementKinds.checkItem,\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 ToolbarMoreGroup: ToolbarItem = {\n key: 'more',\n icon: 'more'\n};\n","export enum ErrorCodes {\n UNKNOW_ERROR = 1000,\n IMAGE_ERR_MIME_FORMAT = 1001,\n IMAGE_ERR_SIZE_LIMIT = 1002\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const DEFAULT_LANGUAGE = {\n showName: 'JavaScript',\n value: 'javascript'\n};\n\nexport const CODE_MODES = [\n {\n showName: 'Plain Text',\n value: ''\n },\n {\n showName: 'C-like',\n value: 'clike'\n },\n DEFAULT_LANGUAGE,\n {\n showName: 'CSS',\n value: 'css'\n },\n {\n showName: 'Dart',\n value: 'dart'\n },\n {\n showName: 'Django',\n value: 'django'\n },\n {\n showName: 'Dockerfile',\n value: 'dockerfile'\n },\n {\n showName: 'Go',\n value: 'go'\n },\n {\n showName: 'Markdown',\n value: 'markdown'\n },\n {\n showName: 'Nginx',\n value: 'nginx'\n },\n {\n showName: 'PHP',\n value: 'php'\n },\n {\n showName: 'Python',\n value: 'python'\n },\n {\n showName: 'Shell',\n value: 'shell'\n },\n {\n showName: 'SQL',\n value: 'sql'\n },\n {\n showName: 'Swift',\n value: 'swift'\n },\n {\n showName: 'HTML',\n value: 'htmlmixed'\n }\n];\n\nexport const CodeMode = {\n default: 'default',\n print: 'print'\n};\nexport type CodeMode = 'default' | 'print';\n\nexport class TheCodeConfig {\n mode: CodeMode;\n}\n\nexport const THE_CODE_MODE_TOKEN = new InjectionToken<TheCodeConfig>('the-code-mode');\n\nexport const THE_CODE_MODE_PROVIDER = {\n provide: THE_CODE_MODE_TOKEN,\n useValue: {\n mode: CodeMode.default\n }\n};\n\nexport const CODEMIRROR_PADDING_TOP = 10;\n","import { ChangeDetectorRef, Component, ElementRef, Renderer2 } from '@angular/core';\nimport { BaseTextComponent } from 'slate-angular';\nimport { MarkTypes } from '../../constants';\n\n@Component({\n selector: 'span[theText]',\n template: `<slate-leaves [context]=\"context\" [viewContext]=\"viewContext\"></slate-leaves>`,\n host: {\n 'data-slate-node': 'text'\n }\n})\nexport class TheTextComponent extends BaseTextComponent {\n constructor(public elementRef: ElementRef, public renderer2: Renderer2, cdr: ChangeDetectorRef) {\n super(elementRef, cdr);\n }\n\n excludes = ['color', 'font-size', 'background-color', 'text'];\n attributes = [];\n\n applyTextMark() {\n this.attributes.forEach(attr => {\n this.renderer2.removeAttribute(this.elementRef.nativeElement, 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.renderer2.setAttribute(this.elementRef.nativeElement, attr, 'true');\n this.attributes.push(attr);\n }\n }\n\n const fontSize = this.text[MarkTypes.fontSize];\n if (fontSize) {\n const attr = `the-${MarkTypes.fontSize}`;\n this.renderer2.setAttribute(this.elementRef.nativeElement, attr, fontSize);\n }\n\n if (this.text[MarkTypes.color]) {\n this.renderer2.setStyle(this.elementRef.nativeElement, 'color', this.text[MarkTypes.color]);\n } else {\n this.renderer2.removeStyle(this.elementRef.nativeElement, 'color');\n }\n\n if (this.text[MarkTypes.backgroundColor]) {\n this.renderer2.setStyle(this.elementRef.nativeElement, 'background-color', this.text[MarkTypes.backgroundColor]);\n } else {\n this.renderer2.removeStyle(this.elementRef.nativeElement, 'background-color');\n }\n }\n\n onContextChange() {\n super.onContextChange();\n this.applyTextMark();\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AngularEditor, BaseElementComponent } from 'slate-angular';\nimport { Editor, Element } from 'slate';\n\n@Component({\n selector: 'TheBaseElementComponent',\n template: ''\n})\nexport class TheBaseElementComponent<T extends Element = Element, K extends AngularEditor = Editor>\n extends BaseElementComponent<T, K>\n implements OnInit\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 }\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { TheBaseElementComponent } from '../../interfaces/view-base';\n\n@Component({\n selector: '[theDefaultElement]',\n template: '<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheDefaultElementComponent extends TheBaseElementComponent {}\n","import { Ancestor, Range, Path, Point, Node, Span, NodeEntry, Editor, Element, Text } from 'slate';\nimport { AngularEditor, ViewType } from 'slate-angular';\nimport { HistoryEditor } from 'slate-history';\nimport { ElementOptionsInfo } from './valid-children-types';\nimport { Predicate } from '../utils/match';\nimport { ToolbarOption } from './toolbar';\nimport { FontSizes } from '../constants/node-types';\n\nexport interface TheEditor extends AngularEditor, HistoryEditor {\n renderElement: (element: Element) => ViewType;\n renderLeaf: (text: Text) => ViewType;\n insertElement: (element: Element) => void;\n isContainer: (element: Element) => boolean;\n extraElementOptions: ElementOptionsInfo[];\n disabled: boolean;\n [key: string]: any;\n}\n\nexport const TheEditor = {\n ...AngularEditor\n};\n\nexport interface ThePlugin {\n (editor: Editor): Editor;\n}\n\nexport enum TheDataMode {\n json = 'json',\n html = 'html'\n}\n\nexport interface TheOptions {\n readonly?: boolean;\n mode?: TheDataMode;\n disabled?: boolean;\n autoFocus?: boolean;\n placeholder?: string;\n isEmptyShowPlaceholder?: boolean;\n isMustShowPlaceholder?: boolean;\n scrollContainer?: string;\n maxHeight?: number;\n fontSize?: FontSizes;\n toolbar?: ToolbarOption;\n disablePlugins?: string[];\n extraElementOptions?: ElementOptionsInfo[];\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 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 {\n inputType?: string;\n key?: string;\n text?: string;\n json?: Node[];\n}\n","import { ComponentType } from '@angular/cdk/portal';\nimport { Editor } from 'slate';\nimport { ElementKinds, MarkTypes, DropdownMode } from '../constants';\n\nexport type ToolbarKey = MarkTypes | ElementKinds | string;\n\nexport enum ToolbarItemType {\n default = 'default',\n toolDropdown = 'tool-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 quick?: string[];\n};\n\ninterface ToolbarItemBase {\n key: ToolbarKey;\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 quickItemComponent?: ComponentType<any>;\n type?: ToolbarItemType;\n dropdownMode?: DropdownMode;\n dropdownItemKey?: ToolbarKey;\n}\n\nexport interface DefaultToolbarItem extends ToolbarItemBase {\n icon?: string;\n name?: string;\n shortcutKey?: string;\n type?: ToolbarItemType;\n}\n\nexport type ToolbarItem = CustomizeToolbarItem & DefaultToolbarItem;\n\nexport type ToolbarEntity = {\n global?: ToolbarItem[];\n inline?: ToolbarItem[];\n quick?: 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 toolbarItems?: ToolbarItem[];\n}\n\nexport interface ToolbarItemsComposeReturn {\n items: ToolbarItem[];\n group: ToolbarItem[];\n}\n","import { Observable } from 'rxjs';\nimport { UploadFileEntity, FileUploadingItem } from './upload';\nimport { InjectionToken } from '@angular/core';\nimport { SafeUrl } from '@angular/platform-browser';\nimport { Alignment } from '../constants';\n\nexport interface ImageEntry {\n file?: File;\n name?: string;\n width?: number;\n height?: number;\n thumbUrl?: SafeUrl | string;\n originUrl?: SafeUrl | string;\n align?: Alignment;\n}\n\nexport interface TheImageUploaderService {\n uploadFileHandle: (files: any) => Observable<UploadFileEntity[]>;\n getUploadingItems$: () => Observable<FileUploadingItem[]>;\n}\n\nexport const THE_UPLOAD_SERVICE_TOKEN = new InjectionToken<TheImageUploaderService>('THE_UPLOAD_SERVICE_TOKEN');\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 isIndivisible?: 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 inValidChildrenTypes: [ElementKinds.table, ElementKinds.tableCell]\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 { 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 { 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, 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 => Editor.isBlock(editor, n),\n at\n });\n};\n","import { Editor, Path, Point } from 'slate';\nimport { ElementKinds } from '../constants/node-types';\nimport { getAnchorBlockEntry } from './get-anchor-block-entry';\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","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 { 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, 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, 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 { Editor } from 'slate';\n\nexport const getBlockCardCenterCursor = (editor: Editor) => {\n return Editor.start(editor, editor.selection.anchor.path);\n};\n","import { Editor } from 'slate';\n\nexport const isBlockCardCursor = (editor: Editor) => {\n return editor.selection.anchor.offset < 0;\n};\n","import { Editor, NodeEntry, Path, Point, Element } from 'slate';\nimport { getBlockCardCenterCursor } from './get-block-card-cursor';\nimport { isBlockCardCursor } from './is-block-card-cursor';\n\nexport const anchorBlockEntry = (editor: Editor, at?: Path | Point): NodeEntry<Element> | undefined => {\n if (!at && isBlockCardCursor(editor)) {\n at = getBlockCardCenterCursor(editor);\n }\n\n return Editor.above<Element>(editor, {\n match: n => Editor.isBlock(editor, n),\n at\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, Element } from 'slate';\nimport { anchorBlockEntry } from './anchor-block-entry';\n\nexport const anchorBlock = (editor: Editor): Element => {\n const entry = anchorBlockEntry(editor, editor.selection.anchor);\n return entry ? entry[0] : null;\n};\n","import { Ancestor, Editor, NodeEntry } 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 => Editor.isBlock(editor, n),\n ...options\n }) || [editor, []];\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 } 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 { 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 { 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, 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 { 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 { AngularEditor, NODE_TO_INDEX, NODE_TO_PARENT } from 'slate-angular';\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","export function castArray(data?: any) {\n if (!data) {\n return [];\n }\n return Array.isArray(data) ? data : [data];\n}\n","import { Editor } 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 || 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, Location, Node, NodeEntry, Path, Range, Span } 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 : 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","/**\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 } 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 : 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","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 { Point } from 'slate';\n\nexport const isPointAtRoot = (point: Point) => point.path.length === 2;\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 { 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, 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 { 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, 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, 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 { 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 { Node, NodeEntry, Path, Element } from 'slate';\n\n/**\n * Get children node entries of a node entry.\n * TODO: try Node.children\n */\nexport const getChildren = (nodeEntry: NodeEntry) => {\n const [node, path] = nodeEntry;\n\n const children = (Element.isElement(node) && (node.children as Node[])) || [];\n\n return children.map((child, index) => {\n const childPath = path.concat([index]) as Path;\n return [child, childPath] as NodeEntry;\n });\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 { 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, Element } from 'slate';\n\nexport const anchorInlineEntry = (editor: Editor) => {\n const match = Editor.above<Element>(editor, {\n match: n => Editor.isInline(editor, n)\n });\n if (match) {\n return match;\n }\n};\n","import { Editor } from 'slate';\nimport { anchorInlineEntry } from './anchor-inline-entry';\n\nexport const anchorInline = (editor: Editor) => {\n return anchorInlineEntry(editor)[0];\n};\n","import * as _lodash from 'lodash';\nexport const _ = _lodash;\n","import { Editor, Location, Path, Point } from 'slate';\nimport { castArray } from '../utils/cast-array';\nimport { _ } 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 > matchString.length) {\n return;\n }\n }\n }\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, Element, Text, Node } from 'slate';\nimport { CLIPBOARD_FORMAT_KEY, ELEMENT_UNIQUE_ID } from '../constants/default';\n\nexport const getStartBlock = (editor: Editor, fragment: Element) => {\n const firstChild = fragment.children && fragment.children[0];\n if (firstChild && !Editor.isInline(editor, firstChild) && !Text.isText(firstChild) && Element.isElement(firstChild)) {\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 (lastChild && !Editor.isInline(editor, lastChild) && !Text.isText(lastChild) && Element.isElement(lastChild)) {\n return getEndBlock(editor, lastChild);\n }\n return fragment;\n};\n\nexport const extractFragment = (data: DataTransfer, deleteKey = ELEMENT_UNIQUE_ID) => {\n const fragment = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);\n if (fragment) {\n const decoded = decodeURIComponent(window.atob(fragment));\n let nodes = JSON.parse(decoded) as Element[];\n if (!Array.isArray(nodes)) {\n nodes = [nodes];\n }\n // delete key to avoid duplicate keys\n if (deleteKey) {\n deleteElementKey(nodes, deleteKey);\n }\n return nodes;\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 * 删除 text 节点的 颜色/背景色\n * @param node \n */\nexport function deleteColorAndBackgroundColorOfText(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 } else {\n deleteColorAndBackgroundColorOfText(child);\n }\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 { 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, 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 { 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 { 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 { 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 { 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, 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 { 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 { Element, Editor } from 'slate';\n\nexport const isContainer = (editor: Editor, value: Element) => Element.isElement(value) && 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 { 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 } from 'slate';\nimport { TheEditor } from '../interfaces';\n\nexport const insertElement = (editor: TheEditor, element: Element) => editor.insertElement(element);\n","import { Editor, Range, Path, Transforms, Element } from 'slate';\nimport * as TheQueries from '../queries';\n\nexport const insertElementNext = (editor: Editor, node: Element) => {\n if (Range.isExpanded(editor.selection)) {\n Editor.deleteFragment(editor);\n }\n\n const anchorBlockPath = TheQueries.anchorBlockEntry(editor)[1];\n const isEmpty = TheQueries.isEmptyParagraph(editor);\n const nextPath = Path.next([anchorBlockPath[0]]);\n\n Transforms.insertNodes(editor, node, { at: nextPath });\n\n if (isEmpty && anchorBlockPath.length === 1) {\n Transforms.delete(editor, { at: anchorBlockPath });\n Transforms.select(editor, Editor.start(editor, anchorBlockPath));\n } else {\n Transforms.select(editor, Editor.start(editor, nextPath));\n }\n};\n","import { Editor, Transforms, Element } 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, 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 isHotkey from 'is-hotkey';\nimport { Editor, Transforms, Element } 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 && isHotkey(hotkey, event))) {\n if (predicate(editor) && TheQueries.isNodeTypeIn(editor, types)) {\n if (event !== null) {\n event.preventDefault();\n }\n Transforms.setNodes(editor, { type: defaultType } as Element);\n\n onReset(editor);\n\n reset = true;\n }\n }\n });\n }\n\n return reset;\n };\n","import { Editor, 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 (!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 { 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 { 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 { 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 { _ } 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, 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 { Transforms, Path, Editor, Element, NodeEntry } from 'slate';\nimport { CustomElementKinds } from '../custom-types';\nimport * as TheQueries from '../queries';\n\nexport const splitNode = (editor: Editor, indivisibleTypes: CustomElementKinds[]): Path => {\n const { selection } = editor;\n const indivisibleType = indivisibleTypes && indivisibleTypes.find(item => TheQueries.getAboveByType(editor, item, { mode: 'highest' }));\n let splitPath: Path;\n if (!indivisibleType) {\n Transforms.splitNodes(editor, {\n always: true,\n mode: 'highest'\n });\n splitPath = [selection.anchor.path[0]];\n } else {\n Transforms.splitNodes(editor, {\n always: true,\n mode: 'highest',\n match: (data: Element) => {\n if (data.type && !indivisibleTypes.includes(data.type)) {\n const [node] = TheQueries.getNodesByType(editor, data.type, { at: selection });\n const parentNode = Editor.parent(editor, node[1]) as NodeEntry<Element>;\n if (indivisibleTypes.includes(parentNode[0].type)) {\n splitPath = node[1];\n return true;\n }\n }\n }\n });\n }\n return splitPath;\n};\n","import { Editor, Element, Transforms, Path } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { createEmptyParagraph } from '../utils/create-empty-paragraph';\nimport * as TheQueries from '../queries';\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, 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 { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor } 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_EDITOR_QUICK_TOOLBAR_REF: WeakMap<Editor, ThyPopoverRef<any>> = new WeakMap();\n","import { Editor } from 'slate';\nimport { THE_EDITOR_CONVERSION_HINT_REF } from '../utils/weak-maps';\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","import { CustomElementKinds } from '../custom-types';\nimport { Editor, Element, NodeEntry } from 'slate';\nimport * as TheQueries from '../queries';\nimport { unWrap } from './un-wrap';\nimport { BlockElementKinds } from '../interfaces/element';\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 => Editor.isBlock(editor, n) && n.type === type\n });\n\n if (isEnd) {\n editor.marks = {};\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 { 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 { Transforms, Node, Editor, Path, Element } 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 this.buildListItem(editor);\n // Todo: types\n Transforms.wrapNodes(editor, { type, children: [], start: startIndex } as any, {\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 => Editor.isBlock(editor, node),\n mode: 'lowest'\n });\n for (const [node, path] of nodes) {\n if (!Editor.isVoid(editor, node) && Element.isElement(node) && node.type !== ElementKinds.paragraph) {\n Transforms.setNodes(\n editor,\n { type: ElementKinds.paragraph, checked: undefined } as any, // todo remove checked\n { at: path }\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 this.buildInsertDataChildren(listItem);\n }\n};\n","import { Editor, Transforms } from 'slate';\nimport { ElementKinds } from '../../constants/node-types';\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 = this.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 { Editor, Transforms, Element, Node } from 'slate';\nimport { ElementKinds } from '../../constants/node-types';\nimport * as TheQueries from '../../queries';\n\nexport const BlockquoteEditor = {\n toggleBlockquote(editor: Editor) {\n if (!TheQueries.isParagraph(editor)) {\n Transforms.insertNodes(editor, {\n type: ElementKinds.paragraph,\n mode: 'text',\n children: [\n {\n text: ''\n }\n ]\n } as Node);\n }\n const isActive = TheQueries.isBlockActive(editor, ElementKinds.blockquote);\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 } from 'slate';\nimport { AutoFormatRule } from '../interfaces/auto-format';\nimport { MarkTypes, ElementKinds } from './node-types';\nimport * as TheQueries from '../queries';\nimport { ListEditor } from '../plugins/list/list.editor';\nimport { TodoItemEditor } from '../plugins/todo-item/todo-item.editor';\nimport { BlockquoteEditor } from '../plugins/blockquote/blockquote.editor';\n\nexport const autoFormatRules: AutoFormatRule[] = [\n {\n type: ElementKinds.heading_1,\n markup: '#'\n },\n {\n type: ElementKinds.heading_2,\n markup: '##'\n },\n {\n type: ElementKinds.heading_3,\n markup: '###'\n },\n {\n type: ElementKinds.heading_4,\n markup: '####'\n },\n {\n type: ElementKinds.heading_5,\n markup: '#####'\n },\n {\n type: ElementKinds.heading_6,\n markup: '######'\n },\n {\n type: ElementKinds.blockquote,\n markup: ['>'],\n format: (editor: Editor) => {\n BlockquoteEditor.toggleBlockquote(editor);\n }\n },\n {\n type: MarkTypes.bold,\n between: ['**', '**'],\n mode: 'inline',\n insertTrigger: true\n },\n {\n type: MarkTypes.bold,\n between: ['__', '__'],\n mode: 'inline',\n insertTrigger: true\n },\n {\n type: MarkTypes.italic,\n between: ['*', '*'],\n mode: 'inline',\n insertTrigger: true\n },\n {\n type: MarkTypes.italic,\n between: ['_', '_'],\n mode: 'inline',\n insertTrigger: true\n },\n {\n type: MarkTypes.codeLine,\n between: ['`', '`'],\n mode: 'inline',\n insertTrigger: true\n },\n {\n type: MarkTypes.strike,\n between: ['~~', '~~'],\n mode: 'inline',\n insertTrigger: true\n },\n {\n type: ElementKinds.code,\n markup: '```',\n insertTrigger: true\n },\n {\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 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 = markup[0].split('.')[0] as unknown as number;\n if (startIndex === 0) {\n startIndex = 1;\n }\n }\n ListEditor.toggleList(editor, ElementKinds.numberedList, startIndex);\n }\n },\n {\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 type: ElementKinds.hr,\n markup: '---',\n insertTrigger: true\n }\n];\n","import { Editor } from 'slate';\n\nexport const UNDOING = new WeakMap<Editor, boolean | undefined>();\nexport const REDOING = new WeakMap<Editor, boolean | undefined>();\n\nexport const withTheHistory = (editor: Editor): Editor => {\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","import { ChangeDetectionStrategy, Component, HostListener, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Editor } from 'slate';\nimport * as TheTransforms from '../../transforms';\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})\nexport class TheConversionHintComponent implements OnInit, OnDestroy {\n @Input() editor: Editor;\n\n @Input() conversion: () => void;\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.creatCloseTimer();\n }\n }\n\n ngOnInit() {\n this.creatCloseTimer();\n }\n\n ngOnDestroy() {\n this.clearCloseTimer();\n }\n\n creatCloseTimer() {\n this.closeTimer = setInterval(() => {\n clearInterval(this.closeTimer);\n TheTransforms.closeConversionHint(this.editor);\n }, this.duration);\n }\n\n clearCloseTimer() {\n clearInterval(this.closeTimer);\n }\n}\n","<ng-container>\n <thy-alert\n thyType=\"primary-weak\"\n thyIcon=\"info-circle-fill\"\n thyCloseable=\"true\"\n thyMessage=\"检测到粘贴内容符合Markdown语法\"\n >\n <ng-template #operation>\n <a href=\"javascript:;\" thyAlertActionItem (click)=\"conversion()\">\n 立即转换\n </a>\n </ng-template>\n </thy-alert>\n</ng-container>\n","import { Descendant } from 'slate';\nimport { TheiaConverter } from '@atinc/selene';\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 { 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 { getEditorUUID } from './editor-uuid';\n\nexport const getToolbarClass = (editor: Editor) => {\n const uuid = getEditorUUID(editor);\n return `the-toolbar-${uuid}`;\n};\n","export const IS_MAC = typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);\n\nexport const CONTROL_KEY = IS_MAC ? '⌘' : 'Ctrl';\n","import { ChangeDetectorRef, ViewContainerRef } from '@angular/core';\nimport { Editor, Element, Node, Text, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport marked from 'marked';\nimport { TheiaConverter } from '@atinc/selene';\nimport { ThyPopover } from 'ngx-tethys/popover';\nimport { CLIPBOARD_FORMAT_KEY, ElementKinds } from '../../constants';\nimport * as TheTransforms from '../../transforms';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { TheConversionHintComponent } from '../../components/conversion-hint/conversion-hint.component';\nimport { THE_EDITOR_CONVERSION_HINT_REF, getToolbarClass } from '../../utils';\n\nexport const withDeserializeMd = (options?: Record<string, any>) => (editor: Editor) => {\n const { insertData, onKeydown } = editor;\n\n editor.onKeydown = (event: KeyboardEvent) => {\n TheTransforms.closeConversionHint(editor);\n onKeydown(event);\n };\n\n editor.insertData = (data: DataTransfer) => {\n const popover = editor.injector.get(ThyPopover);\n const viewContainerRef = editor.injector.get(ViewContainerRef);\n const cdr = editor.injector.get(ChangeDetectorRef);\n\n const plainFragment = data.getData('text/plain');\n const slateFragment = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);\n const oldRange = editor.selection;\n TheTransforms.closeConversionHint(editor);\n\n if (plainFragment && isMarkdownStynx(plainFragment) && !slateFragment) {\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 hintPopverRef = popover.open(TheConversionHintComponent, {\n initialState: {\n editor,\n conversion: () => {\n try {\n const html = marked(plainFragment.replace(/\\n```/g, \"\\n\\n```\"), { gfm: true });\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 TheTransforms.closeConversionHint(editor);\n\n editor.undo();\n\n setTimeout(() => {\n Transforms.select(editor, oldRange);\n Transforms.insertFragment(editor, fragment);\n AngularEditor.focus(editor);\n });\n return;\n } else {\n TheTransforms.closeConversionHint(editor);\n }\n } catch (error) {\n TheTransforms.closeConversionHint(editor);\n }\n }\n },\n origin,\n viewContainerRef,\n placement,\n offset: -100,\n hasBackdrop: false,\n backdropClosable: false,\n closeOnNavigation: false,\n scrollStrategy: overlay.scrollStrategies.reposition()\n });\n THE_EDITOR_CONVERSION_HINT_REF.set(editor, hintPopverRef);\n cdr.markForCheck();\n });\n }\n\n insertData(data);\n };\n return editor;\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 isMarkdownStynx = 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(>|\\>)(.*)/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 { Editor, Path, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport * as TheQueries from '../../queries';\nimport { DefaultElementOptions, ElementOptionsInfo } from '../../interfaces';\nimport * as TheTransforms from '../../transforms';\nimport { extractFragment } from '../../utils/fragment';\n\nexport const withAutoInsertData = (validChildren?: ElementOptionsInfo[]) => (editor: Editor) => {\n const { insertData } = editor;\n let allElementOptions = DefaultElementOptions;\n if (validChildren?.length) {\n const validInfo = mergeElementOptions(validChildren);\n allElementOptions = Object.values(validInfo);\n }\n\n editor.insertData = (data: DataTransfer) => {\n if (editor.extraElementOptions?.length) {\n const extraInfo = mergeElementOptions(editor.extraElementOptions);\n allElementOptions = Object.values(extraInfo);\n }\n const indivisibleTypes = allElementOptions.filter(item => item.isIndivisible).map(item => item.type);\n const fragment = extractFragment(data);\n if (fragment) {\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 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 validFragmentData = fragment.slice(0, invalidIndex);\n const invalidFragmentData = fragment.slice(invalidIndex, fragment.length);\n Editor.withoutNormalizing(editor, () => {\n if (validFragmentData.length > 0) {\n validFragmentData.forEach(item => {\n Transforms.insertNodes(editor, item);\n });\n }\n // split node\n const path = TheTransforms.splitNode(editor, indivisibleTypes);\n Transforms.insertNodes(editor, invalidFragmentData, {\n at: Path.next(path)\n });\n });\n return;\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 if (isEmptyParagraph) {\n Transforms.delete(editor, { at: emptyPath });\n const lastPath = emptyPath.pop();\n Transforms.select(editor, [...emptyPath, lastPath + fragment.length - 1]);\n } else {\n const lastPath = emptyPath.pop();\n Transforms.select(editor, [...emptyPath, lastPath + fragment.length]);\n }\n AngularEditor.focus(editor);\n Transforms.collapse(editor, { edge: 'end' });\n });\n return;\n }\n }\n insertData(data);\n };\n\n return editor;\n};\n\nconst 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, isIndivisible } = item;\n if (!dataInfo[type]) {\n dataInfo[type] = {\n type,\n inValidChildrenTypes,\n isIndivisible\n };\n }\n dataInfo[type].inValidChildrenTypes = Array.from(new Set([...inValidChildrenTypes, ...dataInfo[type].inValidChildrenTypes]));\n });\n return dataInfo;\n};\n","import { Path, Node, Editor, Transforms, Element } from 'slate';\nimport { HistoryEditor } from 'slate-history';\nimport { HEADING_TYPES } from '../../constants';\nimport * as TheQueries from '../../queries';\n\nexport const withRemoveEmpty = (editor: Editor): Editor => {\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 (\n (isEmptyParagraph || isEmptyHeading) &&\n parentPath[parentPath.length - 1] > 0 &&\n Editor.isVoid(editor, Node.get(editor, Path.previous(parentPath)))\n ) {\n Transforms.delete(editor, { at: editor.selection.anchor.path.slice(0, editor.selection.anchor.path.length - 1) });\n return;\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 => 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","import { Editor, Range } from 'slate';\nimport { hotkeys, IS_SAFARI } from 'slate-angular';\nimport { BLOCK_DELETEBACKWARD_TYPES } from '../../constants';\nimport * as TheQueries from '../../queries';\n\nexport const withResetType = (editor: Editor): Editor => {\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_DELETEBACKWARD_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","import { Injectable, NgZone, ViewContainerRef } from '@angular/core';\nimport { fromEvent, Observable } from 'rxjs';\nimport { MarkTypes } from '../constants/node-types';\n\nexport interface TheContextOptions {\n width?: number;\n nativeElement: HTMLElement;\n viewContainerRef: ViewContainerRef;\n}\n\ninterface PaintFormatStatus {\n isActive: boolean;\n marks: { [key in MarkTypes]?: any };\n}\n\n@Injectable()\nexport class TheContextService {\n private options: TheContextOptions;\n\n fileList: { url: string; file: File }[] = [];\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 constructor(private ngZone: NgZone) {\n this.ngZone.runOutsideAngular(() => {\n this.onMouseUp$ = fromEvent<MouseEvent>(window, `mouseup`);\n this.onMouseMove$ = fromEvent<MouseEvent>(window, `mousemove`);\n this.onMouseDown$ = fromEvent<MouseEvent>(window, `mousedown`);\n });\n }\n\n public initialize(options: TheContextOptions) {\n this.options = options;\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 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 setUploadFileList(file: { url: string; file: File }) {\n this.fileList.push(file);\n }\n\n removeUploadImage(file: File) {\n this.fileList.splice(\n this.fileList.findIndex(item => item.file === file),\n 1\n );\n }\n}\n","import { Component, OnInit, ElementRef, ViewChild, OnDestroy, Inject, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { AngularEditor, BeforeContextChange, SlateElementContext } from 'slate-angular';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ImageEntry, THE_UPLOAD_SERVICE_TOKEN, TheImageUploaderService } from '../../interfaces/image';\nimport { Alignment, ElementKinds } from '../../constants/node-types';\nimport { HistoryEditor } from 'slate-history';\nimport { Transforms, Editor } from 'slate';\nimport { Subscription } from 'rxjs/internal/Subscription';\nimport { map } from 'rxjs/operators';\nimport { ThyUploadStatus } from 'ngx-tethys/uploader';\nimport { TheContextService } from '../../services/context.service';\nimport { TheBaseElementComponent } from '../../interfaces';\nimport { ImageElement } from '../../custom-types';\n\ndeclare const $: any;\n\n@Component({\n selector: 'the-image, [theImage]',\n templateUrl: './image.component.html'\n})\nexport class TheImageComponent\n extends TheBaseElementComponent<ImageElement, Editor>\n implements OnInit, OnDestroy, AfterViewInit, BeforeContextChange<SlateElementContext>\n{\n imageEntry: ImageEntry = {};\n\n uploading = false;\n\n percentage = 0;\n\n file: File;\n\n private uploadingSubscription: Subscription;\n\n private mouseMoveSubscription: Subscription;\n\n private mouseUpSubscription: Subscription;\n\n private dragable = false;\n\n @ViewChild('imageContent')\n imageContent: ElementRef;\n\n @ViewChild('img', { static: false })\n img: ElementRef;\n\n constructor(\n public elementRef: ElementRef,\n public sanitizer: DomSanitizer,\n @Inject(THE_UPLOAD_SERVICE_TOKEN)\n private imageUploaderService: TheImageUploaderService,\n public cdr: ChangeDetectorRef,\n private theContextService: TheContextService\n ) {\n super(elementRef, cdr);\n }\n\n beforeContextChange = (value: SlateElementContext<ImageElement>) => {\n if (value.element !== this.element && value.element.thumbUrl) {\n this.imageEntry = {\n name: value.element.name,\n width: value.element.width,\n height: value.element.height,\n thumbUrl: value.element.thumbUrl,\n originUrl: value.element.originUrl,\n align: value.element.align || Alignment.center\n };\n }\n };\n\n ngOnInit() {\n this.file = this.theContextService.fileList.find(item => item.url === this.element.url)?.file;\n if (this.file && this.file instanceof File) {\n this.uploadImage(this.file);\n }\n super.ngOnInit();\n }\n\n ngOnDestroy() {\n this.uploadingSubscription.unsubscribe();\n this.mouseUpSubscription.unsubscribe();\n super.ngOnDestroy();\n }\n\n ngAfterViewInit() {\n this.mouseUpSubscription = this.theContextService.onMouseUp$.subscribe(e => this.endDrag(e));\n this.uploadingSubscription = this.imageUploaderService\n .getUploadingItems$()\n .pipe(map(fileUploadingItem => this.file && fileUploadingItem.find(item => item.file === this.file)))\n .subscribe(uploadingItem => {\n if (!uploadingItem || !uploadingItem.result) {\n return;\n }\n this.percentage = uploadingItem.result.uploadFile.progress.percentage;\n if (uploadingItem.result.status === ThyUploadStatus.done) {\n this.uploading = false;\n this.uploadingSubscription.unsubscribe();\n }\n this.cdr.detectChanges();\n });\n }\n\n async uploadImage(file: File) {\n const { width, height } = await this.resolveImageSize(file, this.theContextService.getOptions().width);\n this.imageEntry = {\n height,\n width,\n thumbUrl: this.sanitizer.bypassSecurityTrustResourceUrl(URL.createObjectURL(file))\n };\n this.uploading = true;\n const [uploadFileEntity] = await this.imageUploaderService.uploadFileHandle([file]).toPromise();\n const path = AngularEditor.findPath(this.editor, this.element);\n const { thumbUrl, originUrl } = uploadFileEntity;\n const imageInfo: ImageEntry = {\n name: file.name,\n width: this.imageEntry.width,\n height: this.imageEntry.height,\n thumbUrl,\n originUrl,\n align: this.imageEntry.align || Alignment.center\n };\n HistoryEditor.withoutSaving(this.editor, () =>\n Transforms.setNodes(\n this.editor,\n {\n type: ElementKinds.image,\n url: null,\n ...imageInfo\n },\n { at: path }\n )\n );\n }\n\n private resolveImageSize(imageFile: File, maxSize: number): Promise<{ height: number; width: number }> {\n const image = new Image();\n return new Promise(resolve => {\n image.onload = () => {\n const imageHeight = image.height;\n const imageWidth = image.width;\n const ratio = imageWidth > maxSize ? imageWidth / maxSize : false;\n const height = ratio ? imageHeight / ratio : imageHeight;\n const width = ratio ? imageWidth / ratio : imageWidth;\n resolve({ height, width });\n };\n image.src = URL.createObjectURL(imageFile);\n });\n }\n\n startDrag(event: MouseEvent, axis: string) {\n event.preventDefault();\n this.dragable = true;\n const imgElement = this.img.nativeElement as HTMLImageElement;\n const options = {\n axis,\n printerPositionX: event.pageX,\n printerPositionY: event.pageY,\n internalWidth: this.imageEntry.width | imgElement.width,\n internalHeight: this.imageEntry.height | imgElement.height,\n maxWidth: this.theContextService.getOptions().width\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.dragable) {\n const { axis, printerPositionX, printerPositionY, internalWidth, internalHeight, maxWidth } = options;\n const isReversal = axis.includes('-');\n let offsetX = event.pageX - printerPositionX;\n let offsetY = event.pageY - printerPositionY;\n if (isReversal) {\n offsetX = -offsetX;\n offsetY = -offsetY;\n }\n if (this.element.align === 'center') {\n offsetX = offsetX * 2;\n }\n let { width, height } = this.element;\n if (axis.includes('x')) {\n width = offsetX + internalWidth;\n if (width >= maxWidth) {\n width = maxWidth;\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 this.imageContent.nativeElement.style.width = width + 'px';\n this.imageContent.nativeElement.style.height = height + 'px';\n this.imageEntry.width = width;\n this.imageEntry.height = height;\n }\n }\n\n endDrag(event: MouseEvent) {\n if (this.dragable) {\n this.dragable = false;\n this.mouseMoveSubscription.unsubscribe();\n Transforms.setNodes(\n this.editor,\n {\n type: ElementKinds.image,\n ...this.imageEntry\n },\n { at: this.selection }\n );\n }\n }\n\n cancelUpload(event) {\n Transforms.removeNodes(this.editor, { at: this.selection });\n }\n\n preview($event: Event) {\n if (this.readonly || this.isCollapsed) {\n $.fancybox.open([{ src: this.imageEntry.originUrl }]);\n }\n $event.stopPropagation();\n }\n}\n","<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>\n<div class=\"image-container\" contenteditable=\"false\" [style.textAlign]=\"imageEntry.align || 'center'\">\n <div\n #imageContent\n *ngIf=\"imageEntry.thumbUrl\"\n class=\"image-content\"\n [class.pointer]=\"!selection\"\n [ngStyle]=\"{ width: imageEntry.width + 'px', height: imageEntry.height + 'px' }\"\n >\n <img #img class=\"main-image\" [src]=\"imageEntry.thumbUrl\" [alt]=\"imageEntry.name\" />\n <div *ngIf=\"selection\" class=\"image-profile\" [class.outline]=\"selection\">\n <span *ngIf=\"isCollapsed\" (mousedown)=\"startDrag($event, '-xl')\" class=\"image-pointer left top\"></span>\n <span *ngIf=\"isCollapsed\" (mousedown)=\"startDrag($event, 'xl')\" class=\"image-pointer right top\"></span>\n <span *ngIf=\"isCollapsed\" (mousedown)=\"startDrag($event, 'xl')\" class=\"image-pointer right bottom\"></span>\n <span *ngIf=\"isCollapsed\" (mousedown)=\"startDrag($event, '-xl')\" class=\"image-pointer left bottom\"></span>\n </div>\n <div *ngIf=\"uploading\" 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 <div *ngIf=\"!uploading\" class=\"layer\" (mousedown)=\"preview($event)\" [class.readonly]=\"readonly\"></div>\n </div>\n <div *ngIf=\"!imageEntry.thumbUrl\" class=\"image-loading\" contenteditable=\"false\">\n <thy-icon thyIconName=\"image\"></thy-icon>\n </div>\n</div>\n","import { Editor, Transforms, Element } from 'slate';\nimport { TheContextService } from '../../services/context.service';\nimport { ElementKinds, ErrorCodes, PICTURE_ACCEPTED_UPLOAD_MIME, PICTURE_ACCEPTED_UPLOAD_SIZE } from '../../constants';\nimport * as TheQueries from '../../queries';\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.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 const text = { text: '' };\n for (const image of imageFiles) {\n const verify = ImageEditor.verifyImage(editor, image);\n if (verify) {\n const url = URL.createObjectURL(image);\n contextService.setUploadFileList({\n url,\n file: image\n });\n imageNodes.push({ type: ElementKinds.image, url, children: [text] });\n }\n }\n if (imageNodes.length > 0) {\n const at = editor.selection;\n Transforms.insertNodes(editor, imageNodes, { at });\n if (TheQueries.isCollapsed(editor.selection) && TheQueries.isEmptyParagraph(editor)) {\n Transforms.removeNodes(editor, { at });\n Transforms.select(editor, at);\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 if (image.size / 1000000 >= PICTURE_ACCEPTED_UPLOAD_SIZE) {\n editor.onError({\n code: ErrorCodes.IMAGE_ERR_SIZE_LIMIT\n });\n return false;\n }\n return true;\n },\n isImageActive(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};\n","import { Editor, Element } from 'slate';\nimport { ElementKinds } from '../../constants/node-types';\nimport { TheImageComponent } from './image.component';\nimport { ImageEditor } from './image.editor';\n\nexport const withImage = (editor: Editor): Editor => {\n const { insertData, isVoid, renderElement, isBlockCard } = editor;\n\n editor.isVoid = (element: Element) => {\n return element.type === ElementKinds.image || isVoid(element);\n };\n\n editor.insertData = (data: DataTransfer) => {\n if (data.files.length) {\n const imageFiles: File[] = [];\n for (const file of data.files as FileList) {\n if (['image/png', 'image/jpeg', 'image/gif', 'image/bmp'].includes(file.type)) {\n imageFiles.push(file);\n }\n }\n if (imageFiles.length) {\n return ImageEditor.insertImages(editor, imageFiles);\n }\n }\n insertData(data);\n };\n\n editor.renderElement = (element: Element) => {\n if (element.type === ElementKinds.image) {\n return TheImageComponent;\n }\n return renderElement(element);\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 return editor;\n};\n","import { Transforms, Range, Editor, Element } from 'slate';\nimport { CustomElementKinds } from '../../custom-types';\nimport { ElementKinds } from '../../constants';\nimport { TAB_SPACE } from '../../constants/default';\n\nexport const onKeydownIndent = (editor: Editor, event: KeyboardEvent, kinds: CustomElementKinds[]) => {\n const { selection } = editor;\n if (event.key === 'Tab') {\n event.preventDefault();\n const isExpanded = Range.isExpanded(selection);\n const nodes = Array.from(\n Editor.nodes<Element>(editor, {\n mode: 'highest',\n match: indentNodeMatch(kinds)\n })\n );\n const startBlock = nodes[0];\n if (startBlock && (isExpanded || Editor.isStart(editor, selection.anchor, [startBlock[1][0]]))) {\n if (!editor.isVoid(startBlock[0])) {\n if (event.shiftKey) {\n return cancelTextIntent(editor, startBlock[0], kinds);\n }\n let { textIndent } = startBlock[0];\n textIndent = textIndent ? textIndent : 0;\n textIndent += 2;\n if (textIndent < 50) {\n Transforms.setNodes(\n editor,\n { textIndent },\n {\n mode: 'highest',\n match: indentNodeMatch(kinds)\n }\n );\n return true;\n }\n }\n } else {\n editor.insertText(TAB_SPACE);\n return true;\n }\n }\n if (selection && Range.isCollapsed(selection) && event.key === 'Backspace') {\n const nodes = Array.from(\n Editor.nodes<Element>(editor, {\n mode: 'highest',\n match: indentNodeMatch(kinds)\n })\n );\n const startBlock = nodes[0];\n if (startBlock && Editor.isStart(editor, selection.anchor, [startBlock[1][0]])) {\n return cancelTextIntent(editor, startBlock[0], kinds);\n }\n }\n return false;\n};\n\nconst indentNodeMatch = (kinds: CustomElementKinds[]) => node => Element.isElement(node) && kinds.includes(node.type);\n\nfunction cancelTextIntent(editor: Editor, anchorBlock: Element, kinds: CustomElementKinds[]) {\n let { textIndent } = anchorBlock;\n if (textIndent > 2) {\n // prevent deleteBackward function\n event.preventDefault();\n textIndent -= 2;\n Transforms.setNodes(\n editor,\n { textIndent },\n {\n mode: 'highest',\n match: indentNodeMatch(kinds)\n }\n );\n return true;\n }\n if (textIndent === 2) {\n // prevent deleteBackward function\n event.preventDefault();\n Transforms.setNodes(\n editor,\n { textIndent: null },\n {\n mode: 'highest',\n match: node => Element.isElement(node) && kinds.includes(node.type)\n }\n );\n return true;\n }\n return false;\n}\n","import { Editor } from 'slate';\nimport { CustomElementKinds } from '../../custom-types';\nimport { onKeydownIndent } from './on-keydown-indent';\n\nexport const withIndent =\n (kinds: CustomElementKinds[]) =>\n <T extends Editor>(editor: T): T => {\n const { onKeydown } = editor;\n\n editor.onKeydown = (event: KeyboardEvent) => {\n const isContinue = !onKeydownIndent(editor, event, kinds);\n if (isContinue) {\n onKeydown(event);\n }\n };\n\n return editor;\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, Path, Point, Range } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { ElementKinds } from '../../../constants';\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 { ElementKinds } from '../../../constants';\n\nexport const getListTypes = () => {\n return [ElementKinds.bulletedList, ElementKinds.numberedList];\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 { 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 { 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 { Editor, Location, Element } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { ElementKinds } from '../../../constants';\nimport { ListItemElement } from '../../../custom-types';\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 { Editor } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { ElementKinds } from '../../../constants';\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 { NodeEntry, Ancestor, Node, Path, Transforms, Editor, Element } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { hasListInListItem } from '../queries/has-list-in-list-item';\nimport { getListItemEntry } from '../queries/get-list-item-entry';\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 { Ancestor, Editor, NodeEntry, Path, Transforms, Element } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { ElementKinds } from '../../../constants';\nimport { ListItemElement } from '../../../custom-types';\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, Path, Range, Transforms, Element } from 'slate';\nimport { ElementKinds } from '../../../constants';\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, insert a list item after and select it\n */\n Editor.withoutNormalizing(editor, () => {\n Transforms.insertNodes(\n editor,\n {\n type: ElementKinds.listItem,\n children: [{ type: ElementKinds.paragraph, children: [{ text: '' }] }]\n },\n { at: nextListItemPath }\n );\n Transforms.select(editor, nextListItemPath);\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 { Editor } from 'slate';\nimport * as TheTransforms from '../../../transforms';\nimport { ElementKinds } from '../../../constants/node-types';\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 { 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, NodeEntry, Path, Transforms, Element } from 'slate';\nimport { moveChildren } from '../../../transforms/move-children';\nimport { getListItemSublist } from '../queries/get-list-item-sublist';\nimport * as TheQueries from '../../../queries';\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, 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 { Editor, Transforms, Path, Node, NodeEntry, Element } 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 { normalizeNo } from './normalize-no';\nimport { isList } from '../queries/is-list';\nimport { TheHistoryEditor } from '../../common/history.plugin';\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 { Ancestor, Editor, NodeEntry, Path, Transforms } from 'slate';\nimport { getListTypes } from '../queries/get-list-types';\nimport { moveChildren } from '../../../transforms/move-children';\nimport * as TheQueries from '../../../queries';\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 { Editor } from 'slate';\nimport { moveListItemUp } from './transforms/move-list-item-up';\nimport { moveListItemDown } from './transforms/move-list-item-down';\nimport { getListItemEntry } from './queries/get-list-item-entry';\nimport * as TheQueries from '../../queries';\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 { Pipe, PipeTransform } from '@angular/core';\nimport { Element } from 'slate';\nimport { Alignment } from './constants/node-types';\n\n@Pipe({\n name: 'elementStyle'\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})\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","import { Component, OnInit, ElementRef, OnDestroy, ChangeDetectorRef, HostBinding } from '@angular/core';\nimport { Editor } from 'slate';\nimport { ElementClassPipe } from '../../../pipes';\nimport { NumberedListElement } from '../../../custom-types';\nimport { TheBaseElementComponent } from '../../../interfaces';\n\n@Component({\n selector: 'ol[theOl]',\n template: `<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>`,\n providers: [ElementClassPipe]\n})\nexport class TheNumberedListComponent extends TheBaseElementComponent<NumberedListElement, Editor> implements OnInit, OnDestroy {\n @HostBinding('attr.start')\n get start() {\n return this.element.start;\n }\n\n @HostBinding('class')\n get class() {\n return this.elementClassPipe.transform(this.element);\n }\n\n constructor(public elementRef: ElementRef, public cdr: ChangeDetectorRef, private elementClassPipe: ElementClassPipe) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","import { Component, OnInit, ElementRef, OnDestroy, ChangeDetectorRef, HostBinding } from '@angular/core';\nimport { Editor } from 'slate';\nimport { ElementClassPipe } from '../../../pipes';\nimport { BulletedListElement } from '../../../custom-types';\nimport { TheBaseElementComponent } from '../../../interfaces';\n\n@Component({\n selector: 'ul[theUl]',\n template: `<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>`,\n providers: [ElementClassPipe]\n})\nexport class TheBulletedListComponent extends TheBaseElementComponent<BulletedListElement, Editor> implements OnInit, OnDestroy {\n @HostBinding('class')\n get class() {\n return this.elementClassPipe.transform(this.element);\n }\n\n constructor(public elementRef: ElementRef, public cdr: ChangeDetectorRef, private elementClassPipe: ElementClassPipe) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","import { Component, OnInit, ElementRef, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { Editor, Element } from 'slate';\nimport { TheBaseElementComponent } from '../../../interfaces';\n\n@Component({\n selector: 'li[theLi]',\n template: `<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>`\n})\nexport class TheListItemComponent extends TheBaseElementComponent<Element, Editor> implements OnInit, OnDestroy {\n constructor(public elementRef: ElementRef, public cdr: ChangeDetectorRef) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n }\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 = (\n editor: Editor\n) => {\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};","import { Transforms, Node, Editor, Path, Ancestor, Element } from 'slate';\nimport { AngularEditor, getPlainText } from 'slate-angular';\nimport { CLIPBOARD_FORMAT_KEY, ElementKinds } from '../../constants';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\nimport { isList } from './queries/is-list';\nimport { isInList } from './queries/is-in-list';\nimport { isListNested } from './queries/is-list-nested';\nimport { getListTypes } from './queries/get-list-types';\nimport { getStartListItem } from './queries/get-start-list-item';\nimport { isSingleListItem } from './queries/is-single-list-item';\nimport { getListItemEntry } from './queries/get-list-item-entry';\nimport { hasListInListItem, hasStableListInListItem, hasStableListItem } from './queries/has-list-in-list-item';\nimport { isSelectionAtListItemStart } from './queries/is-selection-at-list-item-start';\nimport { insertListData } from './transforms/insert-list-data';\nimport { moveListItemUp } from './transforms/move-list-item-up';\nimport { insertListItem } from './transforms/insert-list-item';\nimport { unwrapList } from './transforms/unwrap-list';\nimport { moveListItemSublistItemsToListItemSublist } from './transforms/move-list-item-sublist-items-to-list-item-sublist';\nimport { getListNormalizer } from './normalizers/get-list-normalizer';\nimport { onKeyDownList } from './on-key-down-list';\nimport { WithListOptions } from './types';\nimport { TheNumberedListComponent } from './components/numbered-list.component';\nimport { TheBulletedListComponent } from './components/bulleted-list.component';\nimport { TheListItemComponent } from './components/list-item.component';\nimport { extractFragment } from '../../utils/fragment';\nimport { isSelectionInSameListItem } from './queries/is-selection-in-same-list-item';\n\nexport const withList =\n ({ validLiChildrenTypes }: WithListOptions = {}) =>\n (editor: Editor) => {\n const { insertBreak, deleteBackward, onKeydown, insertData, setFragmentData, renderElement } = editor;\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 = unit => {\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 const fragment = fragmentNodes.concat(fragmentData.slice(1));\n const domRange = AngularEditor.toDOMRange(editor, selection);\n const contents = domRange.cloneContents();\n const stringObj = JSON.stringify(fragment);\n const encoded = window.btoa(encodeURIComponent(stringObj));\n unit.setData(`application/${CLIPBOARD_FORMAT_KEY}`, encoded);\n const div = document.createElement('div');\n div.appendChild(contents);\n div.setAttribute('hidden', 'true');\n document.body.appendChild(div);\n unit.setData('text/html', div.innerHTML);\n unit.setData('text/plain', getPlainText(div));\n document.body.removeChild(div);\n return;\n }\n }\n setFragmentData(unit);\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 (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 // TODO: types\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.insertData = (data: DataTransfer) => {\n const text = data.getData('text/plain');\n const fragment = extractFragment(data);\n const aboveEntry = Editor.above(editor, {\n match: n => Editor.isBlock(editor, n) && n.type === ElementKinds.listItem\n });\n if (fragment) {\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;\n }\n }\n\n insertData(data);\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 TheNumberedListComponent;\n }\n if (element.type === ElementKinds.bulletedList) {\n return TheBulletedListComponent;\n }\n if (element.type === ElementKinds.listItem) {\n return TheListItemComponent;\n }\n return renderElement(element);\n };\n\n return editor;\n };\n","import { Element } from 'slate';\nimport { DOMElement } from 'slate-angular';\nimport { Alignment } from '../constants';\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+)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.offsetWidth;\n}\n\nexport function getElementHeight(element: HTMLElement) {\n return Math.round(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 useElementStyle(el: HTMLElement, element: Element) {\n if (element.align) {\n el.style.textAlign = (element.align as string) || Alignment.left;\n }\n\n if (element.textIndent) {\n el.style.textIndent = element.textIndent + 'em';\n }\n\n if (element.verticalAlign) {\n el.style.verticalAlign = element.verticalAlign;\n }\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","import { Component, ElementRef, HostBinding, ChangeDetectorRef, OnInit } from '@angular/core';\nimport { Editor, Element } from 'slate';\nimport * as TheTransforms from '../../transforms';\nimport { TheBaseElementComponent } from '../../interfaces';\nimport { TodoItemElement } from '../../custom-types';\nimport { getElementClassByPrefix } from '../../utils/dom';\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 <slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>\n `\n})\nexport class TheTodoItemComponent extends TheBaseElementComponent<TodoItemElement, Editor> implements OnInit {\n checked: boolean;\n\n @HostBinding('class.the-check-item') checkItemClass = true;\n\n constructor(public elementRef: ElementRef, public cdr: ChangeDetectorRef) {\n super(elementRef, cdr);\n }\n\n onContextChange() {\n super.onContextChange();\n if (this.initialized) {\n this.useIndentClass(this.elementRef.nativeElement, this.element);\n }\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.useIndentClass(this.elementRef.nativeElement, this.element);\n }\n\n onCheck(checked: boolean) {\n if (this.readonly) {\n return false;\n }\n TheTransforms.setNode(this.editor, { checked }, this.element);\n }\n\n useIndentClass(el: HTMLElement, element: Element) {\n const prefix = 'indent';\n if (element.textIndent) {\n const oldClass = getElementClassByPrefix(el, prefix);\n if (oldClass) {\n el.classList.remove(oldClass);\n }\n const newClassName = `${prefix}-${element.textIndent}`;\n el.classList.add(newClassName);\n } else {\n const oldClass = getElementClassByPrefix(el, prefix);\n if (oldClass) {\n el.classList.remove(oldClass);\n }\n }\n }\n}\n","import { Transforms, Range, Editor, Element, Descendant } from 'slate';\nimport { ElementKinds } from '../../constants';\nimport * as TheQueries from '../../queries';\nimport { TheTodoItemComponent } from './todo-item.component';\n\nexport const withTodoItem = (editor: Editor): Editor => {\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\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 TheTodoItemComponent;\n }\n return renderElement(element);\n };\n\n return editor;\n};\n","import { Component, ElementRef, ChangeDetectorRef, AfterViewInit } from '@angular/core';\nimport { Editor, Element } from 'slate';\nimport { TheBaseElementComponent } from '../../interfaces';\n\n@Component({\n selector: 'the-hr, [theHr]',\n template: `\n <div class=\"the-hr\" contenteditable=\"false\" [ngClass]=\"{ active: selection }\">\n <hr class=\"the-hr\" />\n <slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>\n </div>\n `\n})\nexport class TheHrComponent extends TheBaseElementComponent<Element, Editor> implements AfterViewInit {\n constructor(public elementRef: ElementRef, public cdr: ChangeDetectorRef) {\n super(elementRef, cdr);\n }\n\n ngAfterViewInit() {\n setTimeout(() => {\n const blockCardElement = this.nativeElement.closest('slate-block-card');\n if (blockCardElement) {\n blockCardElement.classList.add(`slate-block-card-${this.element.type}`);\n }\n });\n }\n}\n","import { Editor, Element } from 'slate';\nimport { ElementKinds } from '../../constants';\nimport { TheHrComponent } from './hr.component';\n\nexport const withHr = (editor: Editor): Editor => {\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 TheHrComponent;\n }\n return renderElement(element);\n };\n\n return editor;\n};\n","import { Editor, Transforms } from 'slate';\nimport * as TheQueries from '../../queries';\nimport { Alignment } from '../../constants';\nimport { TheElement } from '../../custom-types';\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) as TheElement;\n const isVoid = 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","import { Editor, Transforms, Range } from 'slate';\nimport { ElementKinds } from '../../constants';\nimport * as TheQueries from '../../queries';\n\nexport const withHeading = (editor: Editor): Editor => {\n const { insertBreak } = editor;\n\n editor.insertBreak = () => {\n const { selection } = editor;\n const anchorBlock = TheQueries.getAnchorBlockEntry(editor);\n if (anchorBlock && Range.isCollapsed(selection) && anchorBlock[0].type.startsWith('heading')) {\n if (Editor.isStart(editor, selection.anchor, anchorBlock[1])) {\n insertBreak();\n Transforms.setNodes(\n editor,\n { type: ElementKinds.paragraph },\n {\n at: selection\n }\n );\n return;\n }\n if (Editor.isEnd(editor, selection.focus, anchorBlock[1])) {\n insertBreak();\n Transforms.setNodes(editor, { type: ElementKinds.paragraph });\n return;\n }\n }\n insertBreak();\n };\n\n return editor;\n};\n","import { Editor, Range, Text, Transforms } from 'slate';\nimport { MarkEditor } from './mark.editor';\n\nexport const withMark =\n () =>\n <T extends Editor>(editor: T) => {\n const e = editor as T & MarkEditor;\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","import { NodeEntry, Element, Node, Editor, Operation, Descendant } from 'slate';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\nimport { QueryOptions } from '../../interfaces';\nimport { _ } from '../../utils/lodash';\nimport { deleteElementKey } from '../../utils/fragment';\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 =\n ({ idKey = 'id', idCreator = () => Date.now(), filterText = true, filter = () => true }: WithNodeIDProps = {}) =>\n <T extends Editor>(e: T) => {\n const editor = e as T & { removedIDs: Set<any> };\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","import { Editor, Location, Transforms, Node } 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 } as Node, { match: n => Editor.isBlock(editor, n) });\n } else {\n format(editor, markups);\n }\n};\n","import { Range, Transforms } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { MarkEditor } from '../../../plugins/mark/mark.editor';\n\nexport const autoFormatInline = (\n editor: MarkEditor,\n {\n type,\n between,\n markup,\n ignoreTrim\n }: {\n type: string;\n between?: string[];\n markup?: string;\n ignoreTrim?: boolean;\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\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 const startMarkupPointBefore = TheQueries.getPointBefore(editor, selection, {\n matchString: startMarkup,\n skipInvalid: true\n });\n Transforms.delete(editor, {\n at: {\n anchor: startMarkupPointBefore,\n focus: startMarkupPointAfter\n }\n });\n\n return true;\n};\n","import { Editor, Range } from 'slate';\nimport * as TheQueries from '../../queries';\nimport { castArray } from '../../utils/cast-array';\nimport { WithAutoFormatOptions } from '../../interfaces/auto-format';\nimport { autoFormatBlock } from './transforms/auto-format-block';\nimport { autoFormatInline } from './transforms/auto-format-inline';\n\nexport const withAutoFormat =\n ({ rules }: WithAutoFormatOptions) =>\n <T extends Editor>(editor: T) => {\n const { insertText } = editor;\n\n editor.insertText = text => {\n if (!TheQueries.isCollapsed(editor.selection)) {\n return insertText(text);\n }\n\n for (const { query, ...rule } of rules) {\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 => 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 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","import { Editor, Transforms } from 'slate';\n\ntype Params = Parameters<typeof Transforms.insertNodes>;\n\nexport interface TransformEditor {\n insertNodes: (nodes: Params[1], options?: Params[2]) => void;\n}\n\nexport const withTransforms =\n () =>\n <T extends Editor>(editor: T) => {\n const e = editor as T & TransformEditor;\n\n e.insertNodes = (nodes, options) => {\n try {\n Transforms.insertNodes(editor, nodes, options);\n } catch (err) {}\n };\n\n return e;\n };\n","import { Editor, Path, Element, Node } from 'slate';\nimport { QueryOptions } from '../../interfaces';\nimport { ElementKinds } from '../../constants';\nimport { TransformEditor } from '../common/transforms.plugin';\nimport * as TheQueries from '../../queries';\nimport { CustomElementKinds } from '../../custom-types';\n\nexport interface WithTrailingNode extends QueryOptions {\n type?: CustomElementKinds;\n level?: number;\n}\n\nexport const withTrailingNode =\n ({ type = ElementKinds.paragraph, level = 1, ...query }: WithTrailingNode = {}) =>\n <T extends Editor & TransformEditor>(editor: T) => {\n const { normalizeNode } = editor;\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 editor.insertNodes(\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","import { Editor, Node, Range, Path, Transforms } from 'slate';\nimport { HistoryEditor } from 'slate-history';\nimport { AngularEditor, hotkeys, hasBlockCard, isCardLeft, FAKE_RIGHT_BLOCK_CARD_OFFSET } from 'slate-angular';\nimport * as TheTransforms from '../../transforms';\nimport * as TheQueries from '../../queries';\nimport { createEmptyParagraph } from '../../utils/create-empty-paragraph';\nimport { insertParagraph } from '../../transforms/insert-paragraph';\n\nexport const withBlockCard = (editor: Editor): Editor => {\n const { insertBreak, deleteBackward, onKeydown, deleteForward, insertData, insertText } = 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 return editor;\n};\n","import { Editor, Transforms, Range } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport * as TheQueries from '../../queries';\nimport { timer } from 'rxjs';\n\nexport const withMoveSelection = (editor: Editor) => {\n const { onClick, deleteBackward } = 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);\n const isNextStart = slateSelection.focus.offset === 0;\n\n if (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 return;\n }\n }\n onClick(event);\n };\n\n editor.deleteBackward = unit => {\n const { selection } = editor;\n const inlineBlockEntry = Editor.above(editor, {\n match: n => Editor.isInline(editor, n)\n });\n // fix deleteBackward on the start of inline block\n // deleteBackward logic bug\n if (inlineBlockEntry && !Editor.isVoid(editor, inlineBlockEntry[0]) && selection.anchor.offset === 0) {\n const beforePoint = TheQueries.getPointBefore(editor, selection.focus);\n Transforms.select(editor, beforePoint);\n }\n deleteBackward(unit);\n };\n\n return editor;\n};\n","import { Editor, Node, Element } from 'slate';\nimport * as TheQueries from '../../queries';\nimport { CustomElementKinds } from '../../custom-types';\n\nexport const withGetFragment =\n (elementKinds: CustomElementKinds[] = []) =>\n <T extends Editor>(editor: T) => {\n const { getFragment } = editor;\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","import { ElementKinds } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport { TodoItemEditor } from './todo-item.editor';\n\nexport const TodoItemOptions: ToolbarItem[] = [\n {\n key: ElementKinds.checkItem,\n icon: 'list-check',\n name: '待办事项',\n execute: editor => TodoItemEditor.insertTodoItem(editor),\n active: editor => TodoItemEditor.isActive(editor)\n }\n];\n","import { InjectionToken } from '@angular/core';\nimport { ComponentType } from 'slate-angular';\nimport { TheBaseElementComponent } from '../../interfaces/view-base';\nimport { ElementKinds } from '../../constants/node-types';\nimport type { TheTableComponent } from './components/table.component';\n\nexport const TheTableToken = new InjectionToken<ComponentType<TheTableComponent>>('the-Table-token');\n\nexport interface TheTableComponentBase extends TheBaseElementComponent {\n initializeColumns: () => void;\n transformColumnsWidth: () => void;\n initializeRows: () => void;\n transformRowHeight: () => 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\n\nexport interface TheTableColumn {\n width: number;\n}\n\nexport interface MenuEntity {\n icon: string;\n name: string;\n key: string;\n divider?: boolean;\n extendIcon?: string;\n invisibility?: boolean;\n backgroundColor?: string;\n actionHandle: (entity: MenuEntity) => void;\n activeHandle?: (event: MouseEvent) => void;\n deactiveHandle?: (event: MouseEvent) => void;\n}\n\nexport interface SelectedCell {\n row: number;\n col: number;\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 = 41;\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","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 rowNodes[0].header = true;\n return {\n type: opts.typeTable,\n children: rowNodes\n };\n}\n","import { Node, Path, NodeEntry, Element } from 'slate';\nimport { TableCellElement, TableElement } from '../../../custom-types';\nimport { SelectedCell, 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(): Element {\n if (!this.rowEntry) {\n throw new Error('Not in a row');\n }\n return this.rowEntry[0];\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 const { table } = this;\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 const { table } = this;\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: SelectedCell): TableCellElement {\n return this.table.children[cell.row].children[cell.col] as TableCellElement;\n }\n}\n","import { Node, Range } from 'slate';\nimport { TableOptions } from '../table.types';\nimport { TablePosition } from './table-position';\n\n/**\n * True if the given range is inside one table\n */\nexport function isRangeInTable(opts: TableOptions, node: Node, range: Range): boolean {\n const { anchor, focus } = range;\n const startPosition = TablePosition.create(opts, node, anchor.path);\n const endPosition = TablePosition.create(opts, node, 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 { TableOptions } from '../table.types';\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","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 { TableElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\n\nexport function addColumns(table: TableElement, columnsCount: number, insertIndex?: number) {\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 for (let i = 0; i < columnsCount - table.columns.length; i++) {\n columns.splice(insertIndex, 0, { width: opts.defaultWidth });\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 = Math.round(column.width * percentage > opts.minWidthPx ? column.width * percentage : opts.minWidthPx);\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';\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 = TablePosition.create(opts, editor, path);\n const { table, tableEntry } = tablePosition;\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 if (table.columns) {\n Transforms.setNodes(editor, { columns: addColumns(table, table.columns.length + 1, insertColumnIndex) }, { 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 { Editor, Element, Transforms } from 'slate';\nimport { TableRowElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\nimport { TablePosition, createRow } from '../utils';\nimport { calcSpanForRow } from '../utils/calc-span';\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 tablePosition = TablePosition.create(opts, editor, editor.selection.anchor.path);\n const { table, row } = tablePosition;\n\n // Create a new row with the right count of cells\n const columns = (table.children[0].children as Element[]).length;\n const newRows: TableRowElement[] = [];\n\n const rowIndex = tablePosition.getRowIndex();\n const insertRowIndex = typeof at === 'undefined' ? rowIndex + 1 : at;\n\n for (let i = 0; i < count; i++) {\n const newRow = createRow(opts, columns);\n newRows.push(newRow);\n }\n\n if (newRows.length === 1) {\n const rowspan = calcSpanForRow(table, insertRowIndex);\n newRows[0].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: tablePosition.tableEntry[1].concat(table.children.indexOf(dirtyRow)).concat(columnIndex)\n }\n );\n }\n }\n });\n }\n\n Transforms.insertNodes(editor, newRows, {\n at: tablePosition.tableEntry[1].concat(insertRowIndex)\n });\n}\n","import * as TheTransforms from '../../../transforms';\nimport { Editor, Node, Transforms } from 'slate';\nimport { TheEditor } from '../../../interfaces/editor';\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 columns: number = 3,\n rows: 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.insertElement(editor, table);\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 { 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: item.width + Math.round(addWidth) };\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';\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 = TablePosition.create(opts, 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 { Editor, Element, Transforms } from 'slate';\nimport { TableCellElement, TableRowElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\nimport { TablePosition } from '../utils';\nimport { clearCell } from './clear-cell';\n\nexport function removeRow(opts: TableOptions, editor: Editor, selectRowIndex?: number) {\n const { selection } = editor;\n const {\n anchor: { path }\n } = selection;\n\n const tablePosition = TablePosition.create(opts, editor, path);\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 { 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 { TablePosition } from '../utils';\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 = TablePosition.create(opts, editor, path);\n const {\n table,\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, NodeEntry, Transforms, Text, Path, Range, Node } from 'slate';\nimport { TableOptions } from './table.types';\nimport { Alignment, ALIGN_BLOCK_TYPES, ElementKinds, MarkProps, MarkTypes, VerticalAlignment } from '../../constants/node-types';\nimport { insertColumn } from './transforms/insert-column';\nimport { insertRow } from './transforms/insert-row';\nimport { insertTable } from './transforms/insert-table';\nimport { removeColumn } from './transforms/remove-column';\nimport { removeRow } from './transforms/remove-row';\nimport { removeTable } from './transforms/remove-table';\nimport { clearCell } from './transforms/clear-cell';\nimport { getAboveByType } from '../../queries/get-above-by-type';\nimport { AngularEditor, ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport type { TheTableComponent } from './components/table.component';\nimport { TheEditor } from '../../interfaces';\nimport { TableCellElement, TableRowElement } from '../../custom-types';\nimport * as TheTransforms from '../../transforms';\nimport { TableElement } from '../../custom-types';\nimport { getOriginCell } from './utils/calc-span';\n\nexport const TableEditor = {\n insertTable(editor: Editor, optionsParam?: TableOptions) {\n const opts = new TableOptions(optionsParam);\n insertTable(opts, editor);\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 insertRow(editor: Editor, count: number = 1, at?: number, optionsParam?: TableOptions) {\n const opts = new TableOptions(optionsParam);\n insertRow(opts, editor, count, at);\n },\n removeTable(editor: Editor, optionsParam?: TableOptions) {\n const opts = new TableOptions(optionsParam);\n removeTable(opts, editor);\n },\n removeRow(editor: Editor, rowIndex?: number, optionsParam?: TableOptions) {\n const opts = new TableOptions(optionsParam);\n removeRow(opts, editor, rowIndex);\n },\n removeColumn(editor: Editor, colIndex?: number, optionsParam?: TableOptions) {\n const opts = new TableOptions(optionsParam);\n removeColumn(opts, editor, colIndex);\n },\n clearCell(editor: Editor, nodeEntry?: NodeEntry<Element>, optionsParam?: TableOptions) {\n const opts = new TableOptions(optionsParam);\n clearCell(opts, editor, nodeEntry);\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 getSelectedCells(editor: Editor) {\n const tableNode = getAboveByType(editor, ElementKinds.table);\n if (tableNode) {\n const tableComponent = ELEMENT_TO_COMPONENT.get(tableNode[0]) as TheTableComponent;\n const cells = tableComponent.tableStore.selectedCells;\n if (cells.length > 0) {\n return cells;\n }\n }\n return null;\n },\n isAlignActive(editor: TheEditor, alignment: Alignment) {\n const cells = TableEditor.getSelectedCells(editor);\n if (cells) {\n const lastCell = cells[cells.length - 1];\n const tableNode = getAboveByType(editor, ElementKinds.table);\n const cellPath = [...tableNode[1], lastCell.row, lastCell.col];\n const cell = Node.get(editor, cellPath) as TableCellElement;\n const { align } = cell;\n if (!align && alignment === Alignment.left) {\n return true;\n }\n return align === alignment;\n }\n return null;\n },\n setAlign(editor: Editor, alignment: Alignment) {\n return TableEditor.handleSelectedCells(editor, (cellPath, cellRange) => {\n Transforms.setNodes(\n editor,\n { align: alignment },\n {\n at: cellPath\n }\n );\n Transforms.setNodes(\n editor,\n { align: undefined },\n {\n at: cellRange,\n match: (n: Element) => ALIGN_BLOCK_TYPES.includes(n.type)\n }\n );\n });\n },\n setVerticalAlign(editor: TheEditor, alignment: VerticalAlignment) {\n const isSelected = TableEditor.handleSelectedCells(editor, cellPath => {\n Transforms.setNodes(editor, { verticalAlign: alignment }, { at: cellPath });\n });\n if (!isSelected) {\n const cellEntry = 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 isVerticalAlignActive(editor: TheEditor, alignment: VerticalAlignment) {\n const cells = TableEditor.getSelectedCells(editor);\n if (cells) {\n const lastCell = cells[cells.length - 1];\n const tableNode = 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 = 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 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 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 handleSelectedCells(editor: TheEditor, handle: (cellPath: Path, cellRange: Range) => void) {\n const cells = TableEditor.getSelectedCells(editor);\n if (cells) {\n const tableNode = getAboveByType(editor, ElementKinds.table);\n Editor.withoutNormalizing(editor, () => {\n for (const cell of cells) {\n const { row, col } = cell;\n const cellPath = [...tableNode[1], row, col];\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 isActiveHeader(editor: TheEditor) {\n const [tableRowEntry] = Editor.nodes(editor, { match: (n: Element) => n.type === ElementKinds.tableRow });\n return tableRowEntry && tableRowEntry[0] && (tableRowEntry[0] as TableRowElement).header;\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","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 { CONTROL_KEY } from '../../utils';\nimport { MarkTypes } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport { MarkEditor } from './mark.editor';\n\nexport const MarkOptions: ToolbarItem[] = [\n {\n key: MarkTypes.bold,\n icon: 'bold',\n name: '加粗',\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: '斜体',\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: '删除线',\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: '下划线',\n shortcutKey: `${CONTROL_KEY}+U`,\n execute: editor => MarkEditor.toggleMark(editor, MarkTypes.underline),\n active: editor => MarkEditor.isMarkActive(editor, MarkTypes.underline)\n },\n {\n key: MarkTypes.codeLine,\n icon: 'code',\n name: '行内代码',\n shortcutKey: `${CONTROL_KEY}+E`,\n execute: editor => MarkEditor.toggleMark(editor, MarkTypes.codeLine),\n active: editor => MarkEditor.isMarkActive(editor, MarkTypes.codeLine)\n }\n];\n","import { ElementKinds } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport { ListEditor } from './list.editor';\n\nexport const ListOptions: ToolbarItem[] = [\n {\n key: ElementKinds.numberedList,\n icon: 'list-ordered',\n name: '有序列表',\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: '无序列表',\n execute: editor => ListEditor.toggleList(editor, ElementKinds.bulletedList),\n active: editor => ListEditor.isActive(editor, ElementKinds.bulletedList)\n }\n];\n","import { ElementKinds } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport { ImageEditor } from './image.editor';\n\nexport const ImageOptions: ToolbarItem[] = [\n {\n key: ElementKinds.image,\n icon: 'image',\n name: '图片',\n execute: editor => ImageEditor.openUpload(editor),\n active: editor => ImageEditor.isImageActive(editor)\n }\n];\n","import { Editor } from 'slate';\nimport { ElementKinds } from '../../constants/node-types';\nimport * as TheTransforms from '../../transforms';\n\nexport const HrEditor = {\n insertHr(editor: Editor) {\n TheTransforms.insertElement(editor, { type: ElementKinds.hr, children: [{ text: '' }] });\n }\n};\n","import { ElementKinds } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { HrEditor } from './hr.editor';\n\nexport const HrOptions: ToolbarItem[] = [\n {\n key: ElementKinds.hr,\n icon: 'horizontal-line',\n name: '分割线',\n active: editor => TheQueries.isBlockActive(editor, ElementKinds.hr),\n execute: editor => HrEditor.insertHr(editor)\n }\n];\n","import { Editor, Transforms, Element } from 'slate';\nimport { HeadingElementKinds } from '../../interfaces/element';\nimport { ElementKinds, MarkTypes } from '../../constants/node-types';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\n\nexport const HeadingEditor = {\n setHeading(editor: Editor, heading: HeadingElementKinds) {\n Editor.withoutNormalizing(editor, () => {\n const types = [ElementKinds.bulletedList, ElementKinds.numberedList, ElementKinds.listItem];\n Transforms.unwrapNodes(editor, {\n at: editor.selection,\n match: n => Element.isElement(n) && types.includes(n.type as any),\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};\n","import { Transforms } from 'slate';\nimport { ElementKinds, STANDARD_HEADING_TYPES } from '../../constants/node-types';\nimport { ToolbarItem, ToolbarItemType } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { HeadingEditor } from './heading.editor';\n\nexport const HeadingOptions: ToolbarItem[] = [\n {\n name: '正文',\n key: ElementKinds.headingList,\n type: ToolbarItemType.toolDropdown,\n dropdownItemKey: ElementKinds.paragraph,\n includes: [ElementKinds.paragraph, ...STANDARD_HEADING_TYPES]\n },\n {\n key: ElementKinds.paragraph,\n name: '正文',\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: '标题1',\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: '标题2',\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: '标题3',\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: '标题4',\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","import { ElementKinds } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { BlockquoteEditor } from './blockquote.editor';\n\nexport const BlockquoteOptions: ToolbarItem[] = [\n {\n key: ElementKinds.blockquote,\n icon: 'blockquote',\n name: '引用',\n active: editor => TheQueries.isBlockActive(editor, ElementKinds.blockquote),\n execute: editor => BlockquoteEditor.toggleBlockquote(editor)\n }\n];\n","import { Editor, Transforms, Element } from 'slate';\nimport * as TheQueries from '../../queries';\nimport { Alignment, ALIGN_BLOCK_TYPES, ElementKinds } from '../../constants/node-types';\nimport { TableEditor } from '../table/table.editor';\n\nexport const AlignEditor = {\n isActive(editor: Editor, alignment: Alignment) {\n if (!editor?.selection) {\n return;\n }\n const tableCellAlign = TableEditor.isAlignActive(editor, alignment);\n if (tableCellAlign !== null) {\n return tableCellAlign;\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 setAlign(editor: Editor, alignment: Alignment) {\n if (TableEditor.setAlign(editor, alignment)) {\n return;\n }\n const props = {\n align: alignment\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 { DropdownMode } from '../../constants';\nimport { Alignment, ToolbarActionTypes } from '../../constants/node-types';\nimport { ToolbarItem, ToolbarItemType } from '../../interfaces';\nimport { AlignEditor } from './align.editor';\n\nexport const AlignOptions: ToolbarItem[] = [\n {\n key: ToolbarActionTypes.alignType,\n type: ToolbarItemType.toolDropdown,\n dropdownMode: DropdownMode.icon,\n dropdownItemKey: ToolbarActionTypes.alignLeft,\n includes: [ToolbarActionTypes.alignLeft, ToolbarActionTypes.alignCenter, ToolbarActionTypes.alignRight],\n name: '对齐方式'\n },\n {\n key: ToolbarActionTypes.alignLeft,\n icon: 'align-left',\n name: '左对齐',\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: '居中',\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: '右对齐',\n execute: editor => AlignEditor.setAlign(editor, Alignment.right),\n active: editor => AlignEditor.isActive(editor, Alignment.right)\n }\n];\n","import { Component, ElementRef, ChangeDetectorRef } from '@angular/core';\nimport { Editor, Element } from 'slate';\nimport { TheBaseElementComponent } from '../../interfaces';\n\n@Component({\n selector: 'blockquote[theBlockquote]',\n template: `<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>`\n})\nexport class TheBlockquoteComponent extends TheBaseElementComponent<Element, Editor> {\n constructor(public elementRef: ElementRef, public cdr: ChangeDetectorRef) {\n super(elementRef, cdr);\n }\n}\n","import { Editor, Element, Transforms } from 'slate';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\nimport { ElementKinds } from '../../constants/node-types';\nimport { TheBlockquoteComponent } from './blockquote.component';\nimport { createEmptyParagraph } from '../../utils';\n\nexport const withBlockquote = (editor: Editor): Editor => {\n const { renderElement, deleteBackward, insertBreak, isContainer } = editor;\n\n editor.renderElement = (element: Element) => {\n if (element.type === ElementKinds.blockquote) {\n return TheBlockquoteComponent;\n }\n return renderElement(element);\n };\n\n editor.deleteBackward = unit => {\n const aboveResult = Editor.above<Element>(editor, {\n match: 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 => 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","export type ColorType = string;\n\nexport const Colors = [\n '#FFFFFF',\n '#333333',\n '#FF0100',\n '#FFDA00',\n '#A4E143',\n '#38D9F0',\n '#4EA8EE',\n '#9570E7',\n '#F3F3F3',\n '#CCCCCC',\n '#FEF3F1',\n '#FEFCDA',\n '#EDF6E8',\n '#E6FBFA',\n '#EBF4FC',\n '#F1EDF7',\n '#DDDDDD',\n '#A5A5A5',\n '#FCD5D0',\n '#F9EDA6',\n '#D4E9D7',\n '#C8E6EA',\n '#CCE0F2',\n '#DAD6EA',\n '#888888',\n '#494949',\n '#EE7976',\n '#E7B323',\n '#99C191',\n '#79C6CE',\n '#6EAAD7',\n '#9D8EC2',\n '#41464C',\n '#000000',\n '#BF1A1E',\n '#AD720E',\n '#1C7232',\n '#1C7892',\n '#18439D',\n '#521B78'\n];\n\nexport const BackgroundColors = [\n '#FFFFFF',\n '#FACCCC',\n '#FFEBCC',\n '#FFFFCC',\n '#CDE8CC',\n '#CCE0F5',\n '#EBD6FF',\n '#F3F3F3',\n '#F06665',\n '#FFC266',\n '#FFFF66',\n '#66B966',\n '#66A3E0',\n '#C285FF'\n];\n\nexport const SpecialTextColor = '#333333';\n\nexport const SpecialBackgroundColor = '#FFFFFF';\n\nexport const TableHeaderBackgroundColor = '#F3F3F3';\n\nexport interface ColorSelectOption {\n showCustom?: boolean;\n perRowColorNumbers: number;\n rowOptions: {\n [rowNumber: number]: string; // 设置每行选中的颜色\n };\n specialColor?: string;\n}\n","import { Component, OnInit, Input, ChangeDetectionStrategy, HostListener } from '@angular/core';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { ColorType, ColorSelectOption } from '../../constants/color-select';\n\n@Component({\n selector: 'the-color-select',\n templateUrl: 'color-select.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheColorSelectComponent implements OnInit {\n @Input() selectedColor: string;\n\n @Input() selectAction: (color: ColorType) => void;\n\n @Input() showCustom = true;\n\n @Input() colors: string[];\n\n @Input() option: ColorSelectOption;\n\n color: string;\n\n customColor: string;\n\n selectColors: { rowValue: { value: string; classMaps: object }[]; tickColor: string }[] = [];\n\n @HostListener('document: mousedown', ['$event'])\n handleDocumentMouseDown(event: MouseEvent) {\n if (!document.querySelector('.color-container').contains(event.target as HTMLElement)) {\n this.popoverRef.close();\n }\n }\n\n constructor(private popoverRef: ThyPopoverRef<TheColorSelectComponent>) {}\n\n ngOnInit() {\n if (this.selectedColor) {\n this.customColor = this.selectedColor.slice(1);\n }\n this.buildColors();\n }\n\n @HostListener('mousedown', ['$event'])\n handleMouseDown(event: MouseEvent) {\n event.stopPropagation();\n }\n\n @HostListener('keydown', ['$event'])\n handleKeydown(event: MouseEvent) {\n event.stopPropagation();\n }\n\n buildColors() {\n const rows = parseInt((this.colors.length / this.option.perRowColorNumbers).toFixed(0), 10);\n for (let i = 0; i < rows; i++) {\n this.selectColors.push({\n rowValue: [\n ...this.colors.slice(i * this.option.perRowColorNumbers, (i + 1) * this.option.perRowColorNumbers).map(color => {\n return {\n value: color,\n classMaps: {\n selected: color === this.selectedColor,\n white: color === '#FFFFFF',\n 'mr-0': i === this.option.perRowColorNumbers - 1,\n 'mb-0': i === this.selectColors.length - 1,\n 'special-color': color === this.option.specialColor\n }\n };\n })\n ],\n tickColor: this.option.rowOptions && this.option.rowOptions[i + 1]\n });\n }\n }\n\n _selectColor(event: MouseEvent, color: string) {\n event.preventDefault();\n event.stopPropagation();\n if (this.option.specialColor && color === this.option.specialColor) {\n color = '';\n }\n this.selectedColor = color;\n this.selectAction(this.selectedColor);\n this.popoverRef.close();\n }\n\n colorChange(isEnter: boolean) {\n this.customColor = this.customColor.toLocaleUpperCase();\n this.selectedColor = '#' + this.customColor;\n if (this.customColor.length === 3) {\n this.selectedColor = '#' + this.customColor.replace(/(.)/g, '$1$1');\n }\n if (this.selectedColor.length === 7 && this.selectedColor !== this.option.specialColor) {\n this.selectColors = [];\n this.buildColors();\n }\n if (isEnter) {\n this.selectAction(this.selectedColor);\n this.popoverRef.close();\n }\n }\n customInputColorEnter(event: KeyboardEvent) {\n event.stopPropagation();\n this.selectAction(this.selectedColor);\n this.popoverRef.close();\n }\n}\n","<div class=\"color-container\">\n <div class=\"colors\">\n <div *ngFor=\"let row of selectColors; let rowIndex = index\">\n <span\n class=\"color-item\"\n *ngFor=\"let _color of row.rowValue; let i = index\"\n [ngClass]=\"_color.classMaps\"\n (mousedown)=\"_selectColor($event, _color.value)\"\n >\n <span [ngStyle]=\"{ background: _color.value }\">\n <thy-icon thyIconName=\"check\" [ngStyle]=\"{ color: row.tickColor }\"></thy-icon>\n </span>\n </span>\n </div>\n </div>\n <div *ngIf=\"option.showCustom\" class=\"select-color\">\n <span class=\"color\" [ngStyle]=\"{ background: selectedColor }\"></span>\n #\n <input\n thyInput\n maxlength=\"6\"\n (keydown.enter)=\"customInputColorEnter($event)\"\n onkeyup=\"value=value.replace(/[^0-9A-Fa-f]/g,'')\"\n class=\"value\"\n [(ngModel)]=\"customColor\"\n (ngModelChange)=\"colorChange(false)\"\n />\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ThyPlacement } from 'ngx-tethys/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { TheColorSelectComponent } from '../components/color-select/color-select.component';\nimport { ColorType, ColorSelectOption } from '../constants/color-select';\n\n@Injectable()\nexport class TheColorSelectService {\n backdropClosable = false;\n\n hasBackdrop = false;\n\n insideClosable = false;\n\n placement: ThyPlacement = 'bottomLeft';\n\n offset = 10;\n\n colorSelectRef: ThyPopoverRef<TheColorSelectComponent>;\n\n get isOpenColorSelect() {\n return this.colorSelectRef && this.colorSelectRef.componentInstance;\n }\n\n constructor(private thyPopover: ThyPopover) {}\n\n toggleColorSelect(\n origin: HTMLElement,\n selectedColor: ColorType,\n colors: string[],\n option: ColorSelectOption,\n selectAction: (color: ColorType) => void,\n placement?: ThyPlacement,\n offset?: number\n ) {\n if (this.isOpenColorSelect) {\n this.colorSelectRef.close();\n }\n this.colorSelectRef = this.thyPopover.open(TheColorSelectComponent, {\n initialState: {\n selectedColor,\n selectAction,\n colors,\n option\n },\n origin,\n backdropClosable: this.backdropClosable,\n placement: placement || this.placement,\n offset: offset !== null ? offset : this.offset,\n hasBackdrop: this.hasBackdrop,\n insideClosable: this.insideClosable,\n panelClass: 'color-select-container'\n });\n return this.colorSelectRef;\n }\n\n closeColorSelect() {\n if (this.isOpenColorSelect) {\n this.colorSelectRef.close();\n }\n }\n}\n","import { Editor, Node, Text, Transforms } from 'slate';\nimport { Colors, ColorType, SpecialBackgroundColor, SpecialTextColor } from '../../constants/color-select';\nimport { MarkTypes } from '../../constants/node-types';\nimport { TheColorSelectService } from '../../services/color-select.service';\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 selectColor(editor: Editor, type: MarkTypes.color | MarkTypes.backgroundColor) {\n const rangeRef = Editor.rangeRef(editor, editor.selection);\n const colorSelectService = editor.injector.get(TheColorSelectService);\n const element = (event.target as HTMLElement).closest('.thy-icon-nav-link');\n colorSelectService.toggleColorSelect(\n element as HTMLElement,\n ColorEditor.getActiveColor(editor, type),\n Colors,\n {\n showCustom: true,\n perRowColorNumbers: 8,\n rowOptions: { 2: '#aaa' },\n specialColor: type === MarkTypes.color ? SpecialTextColor : SpecialBackgroundColor\n },\n (newColor: ColorType) => {\n Transforms.select(editor, rangeRef.current);\n ColorEditor.setColor(editor, newColor, type);\n },\n 'bottomLeft',\n 0\n );\n }\n};\n","import { Directive } from '@angular/core';\nimport { Editor, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { ToolbarItem } from '../../interfaces';\nimport * as TheQueries from '../../queries';\n\n@Directive()\nexport abstract class TheToolbarBaseItemComponent {\n editor: Editor;\n itemMousedownHandle: (item: ToolbarItem) => void;\n\n abstract statusChange(editor: Editor): void;\n\n execute(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n\n if (!this.itemMousedownHandle && !this.editor?.selection) {\n const lastNode = TheQueries.getLastNode(this.editor, 1);\n const end = Editor.end(this.editor, lastNode[1]);\n Transforms.select(this.editor, end);\n AngularEditor.focus(this.editor);\n }\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { Editor, Transforms } from 'slate';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { DefaultToolbarItem } from '../../interfaces';\nimport { ColorEditor } from './color.editor';\nimport { Colors, ColorType, SpecialBackgroundColor, SpecialTextColor } from '../../constants/color-select';\nimport { MarkTypes } from '../../constants/node-types';\nimport { TheColorSelectComponent } from '../../components/color-select/color-select.component';\nimport { TheToolbarBaseItemComponent } from '../../components/toolbar-base-item/toolbar-base-item.component';\n\n@Component({\n selector: 'the-color-toolbar-item',\n template: `\n <a\n class=\"link-width-down\"\n thyIconNavLink\n [ngStyle]=\"{\n width: item.key === 'color' ? '42px' : 'auto'\n }\"\n [thyTooltip]=\"item.name\"\n [thyIconNavLinkActive]=\"active\"\n thyTooltipPlacement=\"top\"\n (mousedown)=\"execute($event)\"\n >\n <thy-icon [thyIconName]=\"item.icon\" thyIconType=\"twotone\" [thyTwotoneColor]=\"active\"></thy-icon>\n <thy-icon\n [ngClass]=\"{\n 'link-down-icon': true,\n 'font-size-sm': true,\n 'text-desc': true\n }\"\n thyIconName=\"caret-down\"\n ></thy-icon>\n </a>\n `,\n host: {\n class: 'the-toolbar-item'\n }\n})\nexport class TheColorToolbarItemComponent extends TheToolbarBaseItemComponent {\n @Input() item: DefaultToolbarItem;\n\n @Input() editor: Editor;\n\n active: string | boolean = false;\n\n colorSelectRef: ThyPopoverRef<TheColorSelectComponent>;\n\n get isOpenColorSelect() {\n return this.colorSelectRef && this.colorSelectRef.componentInstance;\n }\n\n constructor(private thyPopover: ThyPopover) {\n super();\n }\n\n public statusChange(editor: Editor) {\n this.active = this.item?.active(editor);\n }\n\n execute(event: MouseEvent) {\n super.execute(event);\n if (this.editor?.disabled) {\n return;\n }\n const type = this.item.key as MarkTypes.color & MarkTypes.backgroundColor;\n this.toggleColorSelect(event, type);\n }\n\n toggleColorSelect(event: MouseEvent, type: MarkTypes.color | MarkTypes.backgroundColor) {\n if (this.isOpenColorSelect) {\n this.colorSelectRef.close();\n return;\n }\n this.colorSelectRef = this.thyPopover.open(TheColorSelectComponent, {\n initialState: {\n colors: Colors,\n selectedColor: ColorEditor.getActiveColor(this.editor, type),\n option: {\n showCustom: true,\n perRowColorNumbers: 8,\n rowOptions: { 2: '#aaa' },\n specialColor: type === MarkTypes.color ? SpecialTextColor : SpecialBackgroundColor\n },\n selectAction: (color: ColorType) => {\n Transforms.select(this.editor, this.editor.selection);\n ColorEditor.setColor(this.editor, color, type);\n }\n },\n origin: event.currentTarget as HTMLElement,\n backdropClosable: false,\n placement: 'bottomLeft',\n offset: 10,\n hasBackdrop: false,\n insideClosable: false,\n panelClass: 'color-select-container'\n });\n return this.colorSelectRef;\n }\n\n close() {\n if (this.isOpenColorSelect) {\n this.colorSelectRef.close();\n }\n }\n}\n","import { MarkTypes } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport { ColorEditor } from './color.editor';\nimport { TheColorToolbarItemComponent } from './toolbar-item.component';\n\nexport const ColorOptions: ToolbarItem[] = [\n {\n key: MarkTypes.color,\n icon: 'color-tt',\n name: '字体颜色',\n iconComponent: TheColorToolbarItemComponent,\n active: editor => ColorEditor.getActiveColor(editor, MarkTypes.color)\n },\n {\n key: MarkTypes.backgroundColor,\n icon: 'background-tt',\n name: '背景颜色',\n iconComponent: TheColorToolbarItemComponent,\n active: editor => ColorEditor.getActiveColor(editor, MarkTypes.backgroundColor)\n }\n];\n","import { Editor, Path, Transforms } from 'slate';\nimport { HistoryEditor } from 'slate-history';\nimport { hotkeys } from 'slate-angular';\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 = aboveEntry && 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 (aboveEntry && Editor.isVoid(editor, aboveEntry[0]) && Editor.isInline(editor, aboveEntry[0])) {\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","import { Editor, Node, Range, Path, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { CodeElement } from '../../custom-types';\nimport { ElementKinds } from '../../constants/node-types';\nimport * as TheTransforms from '../../transforms';\nimport { DEFAULT_LANGUAGE } from '../../constants/code';\n\nexport const CodeEditor = {\n setCodeAttribute(editor: Editor, element: CodeElement, value: { [key: string]: unknown }) {\n const at = AngularEditor.findPath(editor, element);\n Transforms.setNodes(editor, value, {\n at\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 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 Editor.withoutNormalizing(editor, () => {\n const lastPath = elementEntrys[elementEntrys.length - 1][1];\n Transforms.insertNodes(editor, codeElement, { at: Path.next(lastPath) });\n Transforms.select(editor, Path.next(lastPath));\n Transforms.removeNodes(editor, {\n at: {\n anchor: Editor.start(editor, elementEntrys[0][1]),\n focus: Editor.end(editor, lastPath)\n }\n });\n });\n } else {\n const codeElement: CodeElement = {\n type: ElementKinds.code,\n content: '',\n language: DEFAULT_LANGUAGE.value,\n children: [{ text: '' }]\n };\n TheTransforms.insertElement(editor, codeElement);\n }\n }\n};\n","import * as TheQueries from '../../queries';\nimport { ElementKinds } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport { CodeEditor } from './code.editor';\n\nexport const CodeOptions: ToolbarItem[] = [\n {\n key: ElementKinds.code,\n icon: 'code-syntax',\n name: '代码块',\n active: editor => TheQueries.isBlockActive(editor, ElementKinds.code),\n execute: editor => CodeEditor.insertCode(editor)\n }\n];\n","import { Component, OnInit, ElementRef, Input, HostListener, TemplateRef, ViewChild, ViewContainerRef, HostBinding } from '@angular/core';\nimport { ConnectedPosition, Overlay } from '@angular/cdk/overlay';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor } from 'slate';\nimport { DropdownMode } from '../../constants/toolbar';\nimport { ToolbarItem } from '../../interfaces/toolbar';\nimport { TheToolbarBaseItemComponent } from '../toolbar-base-item/toolbar-base-item.component';\n\n@Component({\n selector: 'the-toolbar-dropdown',\n templateUrl: './toolbar-dropdown.component.html',\n host: {\n class: 'the-toolbar-dropdown-container'\n }\n})\nexport class TheToolbarDropdownComponent extends TheToolbarBaseItemComponent implements OnInit {\n private _item: ToolbarItem;\n\n @Input() toolbarItem: ToolbarItem;\n\n @Input() menus: ToolbarItem[];\n\n @Input() mode: DropdownMode = DropdownMode.text;\n\n @Input()\n set item(i: ToolbarItem) {\n this._item = i;\n this.activeMenu = i;\n }\n get item() {\n return this._item;\n }\n\n @Input() itemMousedownHandle: (item: ToolbarItem) => void;\n\n editor: Editor;\n template: TemplateRef<any>;\n dropdownMode = DropdownMode;\n activeMenu: ToolbarItem;\n disabled = false;\n dropdownPopoverRef: ThyPopoverRef<any>;\n\n get isOpen() {\n return this.dropdownPopoverRef && this.dropdownPopoverRef.getOverlayRef() && this.dropdownPopoverRef.getOverlayRef().hasAttached();\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 @HostListener('mousedown', ['$event'])\n toggleDropdown(event: MouseEvent) {\n super.execute(event);\n\n if (this.editor?.disabled || this.disabled) {\n return;\n }\n this.openDropdownPopover();\n }\n\n @HostListener('document: mousedown', ['$event'])\n handleDocumentMouseDown(event: MouseEvent) {\n if (!this.elementRef.nativeElement.contains(event.target as HTMLElement)) {\n this.closeDropdownPopover();\n }\n }\n\n @HostBinding('class.disabled') get disabledState() {\n return this.disabled;\n }\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.template) {\n this.template = this.mode === this.dropdownMode.icon ? this.iconModeTemplate : this.textModeTemplate;\n }\n\n if (!this.activeMenu) {\n this.activeMenu = this.menus[0];\n }\n if (this.toolbarItem) {\n this.elementRef.nativeElement.classList.add(`${this.toolbarItem?.key}`);\n }\n }\n\n public statusChange(editor: Editor) {\n this.disabled = this.toolbarItem?.disable ? this.toolbarItem?.disable(editor) : false;\n const activeItem = this.menus.find(i => {\n if (i?.active) {\n return i?.active(editor);\n }\n });\n this.activeMenu = activeItem ? activeItem : this.item;\n }\n\n itemMousedown(event: MouseEvent, item: ToolbarItem) {\n super.execute(event);\n\n this.closeDropdownPopover();\n\n if (this.itemMousedownHandle) {\n this.itemMousedownHandle(item);\n return;\n }\n\n if (item?.execute) {\n item?.execute(this.editor);\n }\n }\n\n openDropdownPopover() {\n this.dropdownPopoverRef = this.thyPopover.open(this.dropdownTemplate, {\n origin: this.elementRef,\n panelClass: ['the-toolbar-dropdown-popover', this.toolbarItem?.key],\n placement: 'bottomLeft',\n insideClosable: false,\n backdropClosable: true,\n hasBackdrop: false,\n offset: 10,\n viewContainerRef: this.viewContainerRef,\n scrollStrategy: this.overlay.scrollStrategies.reposition()\n });\n this.dropdownPopoverRef?.getOverlayRef().updatePositionStrategy(this.createPositionStrategy());\n }\n\n closeDropdownPopover() {\n if (this.dropdownPopoverRef) {\n this.dropdownPopoverRef?.close();\n }\n }\n\n createPositionStrategy() {\n const topPosition: ConnectedPosition = {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetX: 0,\n offsetY: -15\n };\n const bottomPosition: ConnectedPosition = {\n ...topPosition,\n overlayY: 'top',\n offsetY: 42\n };\n return this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withFlexibleDimensions(false)\n .withGrowAfterOpen(false)\n .withPush(false)\n .withPositions([bottomPosition, topPosition]);\n }\n}\n","<ng-template [ngTemplateOutlet]=\"template\"></ng-template>\n\n<ng-template #iconModeTemplate>\n <a thyIconNavLink class=\"icon-mode link-with-down\" [thyTooltip]=\"activeMenu?.name\" thyTooltipPlacement=\"top\">\n <thy-icon [thyIconName]=\"activeMenu?.icon\"></thy-icon>\n <thy-icon class=\"caret-down-icon font-size-sm text-desc\" thyIconName=\"caret-down\"></thy-icon>\n </a>\n</ng-template>\n\n<ng-template #textModeTemplate>\n <a thyIconNavLink class=\"text-mode\" [thyTooltip]=\"activeMenu?.name\" thyTooltipPlacement=\"top\">\n <span class=\"show-text\">{{ activeMenu?.name }}</span>\n <thy-icon class=\"text-caret-down-icon font-size-sm text-desc\" thyIconName=\"caret-down\"></thy-icon>\n </a>\n</ng-template>\n\n<ng-template #dropdownTemplate>\n <thy-action-menu class=\"dropdown\">\n <ng-container *ngFor=\"let menu of menus\">\n <a\n *ngIf=\"menu.key !== 'split'\"\n thyActionMenuItem\n href=\"javascript:;\"\n [thyActionMenuItemActive]=\"menu.key === activeMenu.key\"\n (mousedown)=\"itemMousedown($event, menu)\"\n [ngStyle]=\"menu?.styles\"\n >\n <span *ngIf=\"menu.icon && mode === dropdownMode.icon\" thyActionMenuItemIcon>\n <thy-icon [thyIconName]=\"menu.icon\"></thy-icon>\n </span>\n <span *ngIf=\"menu.name\" thyActionMenuItemName>{{ menu.name }}</span>\n </a>\n <thy-action-menu-divider *ngIf=\"menu.key === 'split'\"></thy-action-menu-divider>\n </ng-container>\n </thy-action-menu>\n</ng-template>\n","import { Component, HostBinding, Input, OnInit } from '@angular/core';\nimport { ToolbarItemMode } from '../../constants/toolbar';\n\n@Component({\n selector: 'nav-split-line',\n template: ''\n})\nexport class NavSplitLineComponent implements OnInit {\n @Input() mode: ToolbarItemMode = ToolbarItemMode.vertical;\n\n @HostBinding('class.the-nav-split-line')\n theNavSplitLine = true;\n\n @HostBinding('class.horizontal') get horizontal() {\n return this.mode === ToolbarItemMode.horizontal;\n }\n\n @HostBinding('class.vertical') get vertical() {\n return this.mode === ToolbarItemMode.vertical;\n }\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","import {\n Component,\n ElementRef,\n ChangeDetectorRef,\n ChangeDetectionStrategy,\n OnInit,\n ViewChild,\n AfterViewInit,\n NgZone,\n Inject\n} from '@angular/core';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\nimport { Editor, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { CodeMirrorComponent } from 'ng-codemirror';\nimport {\n CODEMIRROR_PADDING_TOP,\n CODE_MODES,\n DropdownMode,\n CodeMode,\n THE_CODE_MODE_TOKEN,\n TheCodeConfig,\n ToolbarItemMode,\n ElementKinds\n} from '../../constants';\nimport { DefaultToolbarItem, TheBaseElementComponent } from '../../interfaces';\nimport { CodeElement } from '../../custom-types';\nimport { CodeEditor } from './code.editor';\nimport * as TheTransforms from '../../transforms';\nimport { delay, take } from 'rxjs/operators';\nimport { ThyResizeEvent } from 'ngx-tethys/resizable';\nimport { TheContextService } from '../../services/context.service';\n\n@Component({\n selector: 'div[theCode]',\n templateUrl: './code.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheCodeComponent extends TheBaseElementComponent<CodeElement, Editor> implements OnInit, AfterViewInit {\n startRenderCodemirror = false;\n dropdownMode = DropdownMode;\n maxHeight = this.config.mode === CodeMode.default ? 350 - CODEMIRROR_PADDING_TOP * 2 : 0;\n menus = CODE_MODES.map(item => {\n return { key: item.value, name: item.showName };\n });\n ToolbarItemMode = ToolbarItemMode;\n isFocusCode = false;\n resizeHeight: number = null;\n\n options = {\n mode: this.menus[0].key,\n lineNumbers: false,\n readOnly: false,\n autofocus: false,\n lineWiseCopyCut: true,\n lineWrapping: this.config.mode === CodeMode.default ? false : true,\n cursorBlinkRate: 500\n };\n\n actives: DefaultToolbarItem = this.menus[0];\n\n resizeBounds = null;\n\n get code() {\n return this.element.content;\n }\n\n @ViewChild('codemirror', { read: CodeMirrorComponent, static: false })\n codemirror: CodeMirrorComponent;\n\n onContextChange() {\n super.onContextChange();\n if (this.initialized) {\n if (this.options.readOnly !== this.readonly) {\n this.useReadonly();\n }\n if (this.options.mode !== this.element.language) {\n this.useMode();\n }\n if (this.options.lineWrapping !== this.element.autoWrap) {\n this.useAutoWrap();\n }\n if (this.resizeHeight !== this.element.height) {\n this.useHeight();\n }\n if (!this.isCollapsed) {\n this.isFocusCode = false;\n }\n }\n }\n\n constructor(\n public elementRef: ElementRef,\n public cdr: ChangeDetectorRef,\n private thyNotifyService: ThyNotifyService,\n private contextService: TheContextService,\n private ngZone: NgZone,\n @Inject(THE_CODE_MODE_TOKEN)\n private config: TheCodeConfig\n ) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.elementRef.nativeElement.classList.add('the-code-container');\n }\n\n ngAfterViewInit() {\n if (this.readonly) {\n // delay 20ms\n // ccodemirror is too slow\n this.ngZone.onStable.pipe(take(1), delay(20)).subscribe(() => {\n this.renderCodemirror();\n });\n } else {\n // edit mode can not delay\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.renderCodemirror();\n this.initializeCodemirrorFocus();\n this.resizeBounds = {\n nativeElement: this.contextService.getEditableElement()\n };\n });\n }\n }\n\n renderCodemirror() {\n this.startRenderCodemirror = true;\n this.useReadonly();\n this.useMode();\n this.useAutoWrap();\n this.useHeight();\n this.cdr.detectChanges();\n }\n\n initializeCodemirrorFocus() {\n if (this.isCollapsed) {\n setTimeout(() => {\n if (this.isCollapsed && this.codemirror && this.codemirror.editor && !this.codemirror.editor.hasFocus()) {\n AngularEditor.blur(this.editor);\n this.codemirror.editor.focus();\n this.codemirror.editor.refresh();\n }\n }, 200);\n }\n }\n\n codeChange($event) {\n CodeEditor.setCodeAttribute(this.editor, this.element, { content: $event });\n }\n\n onDelete(event: MouseEvent) {\n event.preventDefault();\n this.isFocusCode = false;\n TheTransforms.deleteElement(this.editor, this.element);\n }\n\n onCopy(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n // remove codemorrir selection\n const selection = window.getSelection();\n if (selection.rangeCount > 0) {\n selection.removeAllRanges();\n }\n AngularEditor.focus(this.editor);\n Transforms.select(this.editor, AngularEditor.findPath(this.editor, this.element));\n document.execCommand('copy');\n this.thyNotifyService.success('复制成功');\n AngularEditor.deselect(this.editor);\n }\n\n focusChange(codeMirrorFocused: boolean) {\n if (codeMirrorFocused) this.isFocusCode = codeMirrorFocused;\n }\n\n onChangeLangulage = item => {\n this.options = { ...this.options, mode: item.key };\n this.actives = item;\n CodeEditor.setCodeAttribute(this.editor, this.element, { language: item.key });\n };\n\n useMode() {\n this.options = { ...this.options, mode: this.element.language };\n this.actives = this.menus.find(i => i.key === this.element.language);\n }\n\n useAutoWrap() {\n this.options = { ...this.options, lineWrapping: this.element.autoWrap || false };\n }\n\n useHeight() {\n if (this.element.height) {\n this.resizeHeight = this.element.height;\n this.maxHeight = this.element.height;\n }\n }\n\n useReadonly() {\n this.options = { ...this.options, readOnly: this.readonly, cursorBlinkRate: this.readonly ? -1 : 500 };\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, this.element, { height: this.resizeHeight });\n }\n\n onChangeWrap(value: boolean) {\n this.options = { ...this.options, lineWrapping: value || false };\n CodeEditor.setCodeAttribute(this.editor, this.element, { autoWrap: value ? value : null });\n }\n}\n","<div contenteditable=\"false\" class=\"the-code-block-operation\" *ngIf=\"isFocusCode && !options.readOnly\">\n <thy-icon-nav>\n <the-toolbar-dropdown [menus]=\"menus\" [item]=\"actives\" [itemMousedownHandle]=\"onChangeLangulage\"> </the-toolbar-dropdown>\n <a\n href=\"javascript:;\"\n thyIconNavLink\n thyIconNavLinkIcon=\"copy\"\n thyTooltip=\"复制\"\n thyTooltipPlacement=\"top\"\n (mousedown)=\"onCopy($event)\"\n ></a>\n <a\n href=\"javascript:;\"\n thyIconNavLink\n thyIconNavLinkIcon=\"trash\"\n thyTooltip=\"删除\"\n class=\"remove-link\"\n thyTooltipPlacement=\"top\"\n (mousedown)=\"onDelete($event)\"\n ></a>\n <nav-split-line [mode]=\"ToolbarItemMode.vertical\"></nav-split-line>\n <span class=\"auto-wrap d-flex align-items-center\">\n <span>自动换行</span>\n <thy-switch\n class=\"auto-wrap-btn d-flex\"\n [(ngModel)]=\"options.lineWrapping\"\n (ngModelChange)=\"onChangeWrap($event)\"\n thySize=\"sm\"\n ></thy-switch>\n </span>\n </thy-icon-nav>\n</div>\n\n<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>\n<div\n thyResizable\n [thyMinHeight]=\"44\"\n [thyBounds]=\"resizeBounds\"\n [style.height.px]=\"resizeHeight\"\n (thyResize)=\"onResize($event)\"\n (thyResizeEnd)=\"onEndResize()\"\n class=\"resize-code-container\"\n>\n <ng-codemirror\n *ngIf=\"startRenderCodemirror\"\n #codemirror\n contenteditable=\"false\"\n class=\"ng-codemirror-wrapper\"\n [ngStyle]=\"{ maxHeight: maxHeight > 0 ? maxHeight + 'px' : 'auto' }\"\n [options]=\"options\"\n [ngModel]=\"code\"\n [delayRefreshTime]=\"300\"\n (ngModelChange)=\"codeChange($event)\"\n (focusChange)=\"focusChange($event)\"\n [autoMaxHeight]=\"maxHeight\"\n >\n </ng-codemirror>\n <thy-resize-handle thyDirection=\"bottom\" class=\"code-resize-icon\" *ngIf=\"isFocusCode && !options.readOnly\"></thy-resize-handle>\n</div>\n","import { Editor, Element } from 'slate';\nimport { ElementKinds } from '../../constants/node-types';\nimport { TheCodeComponent } from './code.component';\n\nexport const withCode = (editor: Editor) => {\n const { isVoid, isBlockCard, renderElement } = 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 TheCodeComponent;\n }\n return renderElement(element);\n };\n\n return editor;\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 { Range, Transforms, Editor, Element, Node } from 'slate';\nimport { ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport { LinkElement } from '../../custom-types';\nimport { ElementKinds, LINK_DEFAULT_TEXT } from '../../constants';\nimport { getAboveByType } from '../../queries/get-above-by-type';\nimport { TheLinkComponent } from './link.component';\nimport { LinkTags } from './link.types';\n\nexport const LinkEditor = {\n insertLink(editor: Editor) {\n if (Range.isCollapsed(editor.selection)) {\n Promise.resolve()\n .then(() => {\n LinkEditor.wrapLink(editor, LINK_DEFAULT_TEXT, '');\n })\n .then(() => {\n const [linkNode] = getAboveByType(editor, ElementKinds.link);\n const linkComponent = ELEMENT_TO_COMPONENT.get(linkNode) as TheLinkComponent;\n linkComponent.openLinkEdit(LinkTags.insert);\n });\n } else {\n const isActive = LinkEditor.isLinkActive(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 linkComponent = ELEMENT_TO_COMPONENT.get(linkNode) as TheLinkComponent;\n linkComponent.openLinkEdit(LinkTags.insert);\n });\n }\n },\n isLinkActive(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.isLinkActive(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 Transforms.insertNodes(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};\n","import { ElementKinds } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport { LinkEditor } from './link.editor';\n\nexport const LinkOptions: ToolbarItem[] = [\n {\n key: ElementKinds.link,\n icon: 'link-insert',\n name: '链接',\n execute: editor => LinkEditor.insertLink(editor),\n active: editor => LinkEditor.isLinkActive(editor)\n }\n];\n","import { Component, OnInit, Input } from '@angular/core';\nimport { A_TAG_REL_ATTR } from '../../../constants/default';\n\n@Component({\n selector: 'the-link-hover',\n templateUrl: './link-hover.component.html'\n})\nexport class TheLinkHoverComponent 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\">\n <a readonly href=\"{{ link }}\" target=\"_blank\" rel=\"{{ aTagRelAttr }}\" class=\"hover-control-plaintext text-truncate\">\n {{ link }}\n </a>\n <span class=\"operate-separator\"></span>\n <button thyButtonIcon=\"edit\" thySize=\"xs\" (mousedown)=\"editLink($event)\"></button>\n <span class=\"operate-separator\"></span>\n <button thyButtonIcon=\"unlink-insert\" thySize=\"xs\" (mousedown)=\"removeLink($event)\"></button>\n</div>\n","import { Component, OnInit, Input, HostBinding, HostListener } from '@angular/core';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Transforms, Range, Node, Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport * as TheQueries from '../../../queries';\nimport { TheEditor } from '../../../interfaces';\nimport { LinkCloseTypes, LinkTags } from '../link.types';\n\n@Component({\n selector: 'the-link-edit',\n templateUrl: './link-edit.component.html'\n})\nexport class TheLinkEditComponent implements OnInit {\n editor: Editor;\n\n @Input() tag: LinkTags;\n\n @Input() node: Node;\n\n @Input() link = '';\n\n @Input() text = '';\n\n @Input() originSelection: Range;\n\n originLink: string;\n\n @HostBinding('class')\n className = 'the-link-edit-container';\n\n originText: string;\n\n validatorConfig = {\n validationMessages: {\n link: {\n required: '链接不能为空',\n pattern: '请输入正确的链接'\n },\n text: {\n required: '文本不能为空'\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 linkRegExp(val) {\n return /(http|ftp|https):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&:/~\\+#]*[\\w\\-\\@?^=%&/~\\+#])?/.test(val);\n }\n\n closePopover(type?: string) {\n this.thyPopoverRef.close(type);\n }\n\n applyLink(form) {\n const link = this.link.trim();\n if (this.linkRegExp(link)) {\n const linkPath = TheQueries.findPath(this.editor, this.node);\n if (this.originLink !== link) {\n Transforms.setNodes(this.editor, { url: link }, { at: linkPath });\n }\n if (this.originText !== this.text) {\n const [start, end] = Editor.edges(this.editor, linkPath);\n Transforms.insertText(this.editor, this.text, { at: { anchor: end, focus: end } });\n Transforms.delete(this.editor, { at: { anchor: start, focus: end } });\n }\n TheEditor.focus(this.editor);\n Transforms.select(this.editor, Editor.after(this.editor, linkPath));\n this.closePopover(LinkCloseTypes.apply);\n } else {\n form.validator.setElementErrorMessage(`link`, '请输入正确的链接');\n }\n }\n}\n","<form\n thyForm\n #linkForm=\"thyForm\"\n [thyFormValidatorConfig]=\"validatorConfig\"\n name=\"linkForm\"\n>\n <thy-form-group thyLabelText=\"文本\">\n <input\n thyInput\n placeholder=\"请输入文本\"\n required\n name=\"text\"\n [(ngModel)]=\"text\"\n thyAutofocus\n type=\"text\"\n />\n </thy-form-group>\n <thy-form-group thyLabelText=\"链接\">\n <input\n name=\"link\"\n thyInput\n placeholder=\"请输入链接\"\n required\n type=\"text\"\n #linkControl=\"ngModel\"\n [(ngModel)]=\"link\"\n />\n </thy-form-group>\n <thy-form-group-footer>\n <div class=\"btn-pair\">\n <button\n thyButton=\"link-secondary\"\n thySize=\"sm\"\n (click)=\"closePopover()\"\n >取消</button>\n <button\n thyButton=\"primary-square\"\n thySize=\"sm\"\n (thyFormSubmit)=\"applyLink(linkForm)\"\n >应用</button>\n </div>\n </thy-form-group-footer>\n</form>\n","import { Overlay } from '@angular/cdk/overlay';\nimport { Component, OnInit, ElementRef, OnDestroy, ChangeDetectorRef, ViewContainerRef, HostListener, NgZone } from '@angular/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor, Element, Node as SlateNode, Transforms, Text } from 'slate';\nimport { ElementKinds } from '../../constants';\nimport { LinkElement } from '../../custom-types';\nimport { TheBaseElementComponent } from '../../interfaces';\nimport { LinkCloseTypes, LinkTags } from './link.types';\nimport { TheLinkHoverComponent } from './hover/link-hover.component';\nimport { TheLinkEditComponent } from './edit/link-edit.component';\nimport { ThyClickDispatcher } from 'ngx-tethys';\nimport { SlateElementContext } from 'slate-angular';\n\n@Component({\n selector: '[TheBaseLinkComponent]',\n template: ''\n})\nexport class TheBaseLinkComponent extends TheBaseElementComponent<LinkElement, Editor> implements OnInit, OnDestroy {\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 constructor(\n public elementRef: ElementRef,\n public cdr: ChangeDetectorRef,\n private thyPopover: ThyPopover,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private thyClickDispatcher: ThyClickDispatcher\n ) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n }\n\n closeHoverPopover() {\n if (this.linkHoverOpened) {\n this.thyPopoverHoverRef.close();\n }\n }\n\n beforeContextChange = (value: SlateElementContext) => {\n if (this.thyPopoverEditRef && this.thyPopoverEditRef.componentInstance) {\n let { originText } = this.thyPopoverEditRef.componentInstance;\n if (originText && originText !== (value.element.children[0] as Text).text) {\n this.thyPopoverEditRef.componentInstance.originText = (value.element.children[0] as Text).text;\n }\n }\n };\n\n @HostListener('click', ['$event'])\n mousedownHandle(event: MouseEvent) {\n this.openLinkHover();\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 isLinkEditOpenedByDom(dom: HTMLElement) {\n return this.linkEditOpened && this.thyPopoverEditRef.componentInstance.dom === dom;\n }\n\n closeEditPopover(type?: string) {\n if (this.linkEditOpened) {\n this.thyPopoverEditRef.close(type);\n }\n }\n\n openLinkHover() {\n const dom = this.nativeElement;\n const url = this.element.url;\n\n if (this.linkHoverOpened) {\n return;\n }\n this.thyPopoverHoverRef = this.thyPopover.open(TheLinkHoverComponent, {\n initialState: {\n link: url,\n dom: dom,\n editHandle: () => {\n this.openLinkEdit(LinkTags.edit);\n },\n deleteHandle: () => {\n Transforms.unwrapNodes(this.editor, { match: n => Element.isElement(n) && n.type === ElementKinds.link });\n this.closeHoverPopover();\n }\n },\n origin: dom,\n placement: 'bottomLeft',\n offset: 8,\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 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(TheLinkEditComponent, {\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 origin: this.elementRef.nativeElement,\n backdropClosable: true,\n placement: 'bottomLeft',\n offset: 8,\n hasBackdrop: false,\n originActiveClass: null,\n viewContainerRef: this.viewContainerRef,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n panelClass: 'the-link-edit'\n });\n this.cdr.markForCheck();\n }\n\n close(type?: string) {\n this.closeHoverPopover();\n this.closeEditPopover(type);\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n this.close(LinkCloseTypes.destroy);\n }\n}\n\n@Component({\n selector: 'span[theLink]',\n template: `<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>`\n})\nexport class TheLinkComponent extends TheBaseLinkComponent {}\n\n@Component({\n selector: 'a[theLink]',\n template: `<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>`,\n host: {\n '[attr.href]': 'element.url',\n target: '_blank'\n }\n})\nexport class TheReadonlyLinkComponent extends TheBaseLinkComponent {}\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 = (options: { type: string | string[] }) => <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\n Transforms.removeNodes(editor, { at: path });\n return;\n }\n\n normalizeNode([node, path]);\n };\n\n return editor;\n};\n","import isUrl from 'is-url';\nimport { Editor, Element } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { ElementKinds } from '../../constants/node-types';\nimport { LinkEditor } from './link.editor';\nimport { TheLinkComponent, TheReadonlyLinkComponent } from './link.component';\nimport { withRemoveEmptyNodes } from '../normalizers/remove-empty-nodes';\nimport { Transforms } from 'slate';\nimport { CLIPBOARD_FORMAT_KEY } from '../../constants/default';\n\nexport const withLink = (editor: Editor) => {\n const { insertData, insertText, isInline, 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.insertData = data => {\n const text = data.getData('text/plain');\n const fragment = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);\n\n if (text && isUrl(text) && !fragment) {\n LinkEditor.wrapLink(editor, text, text);\n Transforms.move(editor, { distance: 1, unit: \"offset\" });\n } else {\n insertData(data);\n }\n };\n\n editor.renderElement = (element: Element) => {\n if (element.type === ElementKinds.link) {\n return AngularEditor.isReadonly(editor) ? TheReadonlyLinkComponent : TheLinkComponent;\n }\n return renderElement(element);\n };\n\n editor = withRemoveEmptyNodes({ type: ElementKinds.link })(editor);\n\n return editor;\n};\n","import { Component, Input, OnInit } from '@angular/core';\nimport { insertTable } from '../../plugins/table/transforms/insert-table';\nimport { HostListener } from '@angular/core';\nimport { ThyPopoverRef } from 'ngx-tethys';\nimport { TheEditor } from '../../interfaces';\nimport { TableOptions } from '../../plugins/table/table.types';\n\n@Component({\n selector: 'table-select',\n templateUrl: './table-select.component.html'\n})\nexport class TheTableSelectComponent implements OnInit {\n @Input() optionsParam: TableOptions;\n @Input() editor: TheEditor;\n\n tableData = new Array(10);\n maxRowIndex = -1;\n maxColIndex = -1;\n\n @HostListener('document: mousedown', ['$event'])\n handleDocumentMouseDown(event: MouseEvent) {\n if (!document.querySelector('.table-selector-container').contains(event.target as HTMLElement)) {\n this.popoverRef.close();\n }\n }\n\n constructor(private popoverRef: ThyPopoverRef<TheTableSelectComponent>) {}\n\n ngOnInit(): void {}\n\n onSelectCells(rowIndex, colIndex) {\n this.maxRowIndex = rowIndex;\n this.maxColIndex = colIndex;\n }\n\n executeTable(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n const opts = new TableOptions(this.optionsParam);\n insertTable(opts, this.editor, this.maxRowIndex + 1, this.maxColIndex + 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 <div\n *ngFor=\"let item of tableData, let rowIndex = index\"\n class=\"selector-row\"\n (mousedown)=\"executeTable($event)\"\n >\n <span\n *ngFor=\"let item of tableData, let colIndex = index\"\n [ngClass]=\"{'active-cell': rowIndex<= maxRowIndex && colIndex <= maxColIndex, 'selector-cell': true}\"\n (mouseenter)=\"onSelectCells(rowIndex, colIndex)\"\n >\n </span>\n </div>\n <span class=\"selector-text\">{{maxRowIndex+1}} x {{maxColIndex+1}}</span>\n</div>\n","import { Overlay } from '@angular/cdk/overlay';\nimport { Component, Input } from '@angular/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys';\nimport { Editor } from 'slate';\nimport { TheToolbarBaseItemComponent } from '../../components/toolbar-base-item/toolbar-base-item.component';\nimport { TheTableSelectComponent } from '../../components/table-select/table-select.component';\nimport { ElementKinds } from '../../constants';\nimport { DefaultToolbarItem } from '../../interfaces';\nimport { TableOptions } from './table.types';\n\n@Component({\n selector: 'the-table-toolbar-item',\n template: `\n <a\n thyIconNavLink\n class=\"link-with-down\"\n [thyTooltip]=\"item?.name\"\n thyTooltipPlacement=\"top\"\n [thyIconNavLinkActive]=\"active\"\n (mousedown)=\"execute($event)\"\n >\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n <thy-icon class=\"link-down-icon font-size-sm text-desc table-down-icon\" thyIconName=\"caret-down\"> </thy-icon>\n </a>\n `,\n host: {\n class: 'the-toolbar-dropdown-container'\n }\n})\nexport class TheTableToolbarItemComponent extends TheToolbarBaseItemComponent {\n @Input() item: DefaultToolbarItem;\n\n @Input() editor: Editor;\n\n active: string | boolean = false;\n\n tableSelectRef: ThyPopoverRef<TheTableSelectComponent>;\n\n get isOpenTableSelect() {\n return this.tableSelectRef && this.tableSelectRef.componentInstance;\n }\n\n constructor(private thyPopover: ThyPopover, private overlay: Overlay) {\n super();\n }\n\n public statusChange(editor: Editor) {\n this.active = this.item?.active(editor);\n }\n\n execute(event: MouseEvent) {\n super.execute(event);\n\n if (this.editor?.disabled) {\n return;\n }\n const type = this.item.key;\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(TheTableSelectComponent, {\n origin: event.currentTarget as HTMLElement,\n initialState: {\n editor: this.editor,\n optionsParam\n },\n backdropClosable: false,\n hasBackdrop: false,\n insideClosable: false,\n placement: 'bottomLeft',\n offset: 10,\n panelClass: 'the-table-selector-pannel',\n scrollStrategy: this.overlay.scrollStrategies.reposition()\n });\n return this.tableSelectRef;\n }\n}\n","import { ElementKinds } from '../../constants/node-types';\nimport { ToolbarItem } from '../../interfaces';\nimport { TheTableToolbarItemComponent } from './toolbar-item.component';\nimport { TableEditor } from './table.editor';\n\nexport const TableOptions: ToolbarItem[] = [\n {\n key: ElementKinds.table,\n icon: 'table-border-all',\n name: '表格',\n iconComponent: TheTableToolbarItemComponent,\n execute: editor => TableEditor.insertTable(editor),\n active: editor => TableEditor.isActive(editor)\n }\n];\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 { Injectable, NgZone } from '@angular/core';\nimport { Subject, MonoTypeOperatorFunction, Observable, combineLatest } from 'rxjs';\nimport { distinctUntilChanged, share, map, startWith, skip, tap } from 'rxjs/operators';\n\nexport class HoveredCellInfo {\n cell: HTMLTableCellElement;\n position?: 'left' | 'right';\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","import { Editor } from 'slate';\nimport { TablePosition } from '.';\nimport { SelectedCell, TableOptions } from '../table.types';\n\nexport function getSelectCellNode(editor: Editor, selectedCells: SelectedCell[]) {\n const { anchor } = editor.selection;\n const opts = new TableOptions();\n const pos = TablePosition.create(opts, editor, anchor.path);\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 { Transforms, Node, Path, Element, Editor } from 'slate';\nimport { TablePosition } from './table-position';\nimport { ElementKinds } from '../../../constants';\nimport { getSelectCellNode } from './get-select-cell-node';\nimport { TableCellElement } from '../../../custom-types';\nimport { SelectedCell, TableOptions } from '../table.types';\nimport * as TheQueries from '../../../queries';\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 return (cell.colspan && cell.colspan !== 1) || (cell.rowspan && cell.rowspan !== 1);\n }\n return false;\n}\n\nexport function getLeftCellDict(selectCellNodes: SelectedCellInfo[]) {\n return selectCellNodes.reduce((dict, cell) => {\n if (!dict[cell.row]) {\n dict[cell.row] = cell;\n }\n return dict;\n }, {} as { [key: string]: SelectedCellInfo });\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: SelectedCell[]) {\n const selectCellNodes = getSelectCellNode(editor, selectedCells);\n Editor.withoutNormalizing(editor, () => {\n let leftTopCellPath: Path;\n const leftCellDict = getLeftCellDict(selectCellNodes);\n selectCellNodes.forEach((cell, index) => {\n const { row, node } = cell;\n if (node) {\n const cellPath = TheQueries.findPath(editor, node);\n if (index === 0) {\n leftTopCellPath = cellPath;\n } else {\n mergeCellContent(editor, leftTopCellPath, cellPath);\n Transforms.setNodes(editor, { colspan: null, rowspan: null, hidden: true }, { at: cellPath });\n }\n }\n });\n let { rowspan, colspan } = calculateCellSpan(selectCellNodes, leftCellDict);\n Transforms.setNodes(editor, { rowspan, colspan }, { at: leftTopCellPath });\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 { path } = Editor.end(editor, leftTopCellPath);\n const endRange = Editor.range(editor, Editor.start(editor, cellPath), Editor.end(editor, cellPath));\n let tableCell;\n\n path.pop();\n\n const nextPath = Path.next(path);\n\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","import { Injectable } from '@angular/core';\nimport { Subject, Observable, BehaviorSubject, merge } from 'rxjs';\nimport { skip } from 'rxjs/operators';\nimport { Transforms, Node, Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { TablePosition } from './utils';\nimport { _ } from '../../utils/lodash';\nimport { mergeCell } from './utils/merge-cell';\nimport { ColorType } from '../../constants/color-select';\nimport { SelectedCell, TableOptions } from './table.types';\nimport { TableCellElement, TableElement } from '../../custom-types';\nimport { TableEditor } from './table.editor';\n\n@Injectable()\nexport class TableStore {\n private selectedCells$: BehaviorSubject<SelectedCell[]> = new BehaviorSubject([]);\n private dangerousCells$: BehaviorSubject<SelectedCell[]> = new BehaviorSubject([]);\n private cellsChangeObject$: Subject<object> = new Subject();\n private tableChange$: Subject<object> = new Subject();\n\n selectedColumnsIndex: number[] = [];\n selectedRowsIndex: number[] = [];\n\n dangerousColumnsIndex: number[] = [];\n dangerousRowsIndex: number[] = [];\n\n isSelectedTable: boolean;\n\n editor: Editor;\n\n public anchorCellPath: number[];\n public focusCellPath: number[];\n public preFocusCellPath: number[];\n\n public focusCellElement: HTMLTableCellElement;\n\n public isPrepareSelecting = false;\n public isCellSelecting = false;\n public isRightClicking = false;\n\n public maxCol: number;\n\n get selectedCells() {\n return this.selectedCells$.getValue();\n }\n\n get dangerousCells() {\n return this.dangerousCells$.getValue();\n }\n\n constructor() {}\n\n getTablePath(editor: Editor) {\n const { selection } = editor;\n const {\n anchor: { path }\n } = selection;\n const opts = new TableOptions();\n return TablePosition.create(opts, editor, path).tableEntry[1];\n }\n\n getTablePosition(editor: Editor) {\n const { selection } = editor;\n const {\n anchor: { path }\n } = selection;\n const opts = new TableOptions();\n return TablePosition.create(opts, editor, path);\n }\n\n setSelectedCells(cells: SelectedCell[], pos: TablePosition) {\n const rowGroup = _.groupBy(cells, ({ row, col }) => row);\n const colGroup = _.groupBy(cells, ({ row, 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 (this.selectedRowsIndex.length === pos.getHeight() && this.selectedColumnsIndex.length === pos.getWidth()) {\n this.isSelectedTable = true;\n } else {\n this.isSelectedTable = false;\n }\n this.selectedCells$.next(cells);\n }\n\n initEditor(editor: Editor) {\n this.editor = editor;\n }\n\n selectRow(editor: Editor, index: number) {\n this.selectedRowsIndex = [index];\n this.selectedColumnsIndex = [];\n\n const { selection } = editor;\n const {\n anchor: { path }\n } = selection;\n const opts = new TableOptions();\n const pos = TablePosition.create(opts, editor, path);\n const result = [];\n for (let i = 0; i < pos.getWidth(); i++) {\n result.push({\n row: index,\n col: i\n });\n }\n this.setSelectedCells(result, pos);\n this.focusCell(editor, pos.tableEntry[1].concat([index, 0]));\n }\n\n selectColumn(editor: Editor, index: number) {\n this.selectedColumnsIndex = [index];\n this.selectedRowsIndex = [];\n\n const { selection } = editor;\n const {\n anchor: { path }\n } = selection;\n const opts = new TableOptions();\n const pos = TablePosition.create(opts, editor, path);\n const result = [];\n for (let i = 0; i < pos.getHeight(); i++) {\n result.push({\n row: i,\n col: index\n });\n }\n this.setSelectedCells(result, pos);\n this.focusCell(editor, pos.tableEntry[1].concat([0, index]));\n }\n\n selectTable(editor: Editor) {\n this.isSelectedTable = true;\n const { cells, pos } = this.getTableCellsAndPosition(editor);\n this.setSelectedCells(cells, pos);\n this.focusCell(editor, pos.tableEntry[1].concat([0, 0]));\n }\n\n private getTableCellsAndPosition(editor: Editor): { cells: SelectedCell[]; pos: TablePosition } {\n const pos = this.createTablePosition();\n const result = [];\n for (let i = 0; i < pos.getHeight(); i++) {\n for (let j = 0; j < pos.getWidth(); j++) {\n result.push({\n row: i,\n col: j\n });\n }\n }\n return { cells: result, pos };\n }\n\n selectCells(editor: Editor) {\n const opts = new TableOptions();\n const { anchor, focus } = editor.selection;\n const pos = TablePosition.create(opts, editor, anchor.path);\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 } = this.getMinAndMaxCellIndex(initMaxRow, initMaxCol, rows[0], columns[0], pos.table);\n const result = [];\n for (let i = minRow; i < maxRow + 1; i++) {\n for (let j = minCol; j < maxCol + 1; j++) {\n result.push({\n row: i,\n col: j\n });\n }\n }\n this.setSelectedCells(result, pos);\n }\n\n getMinAndMaxCellIndex(maxRow: number, maxCol: number, minRow: number, minCol: number, table: TableElement) {\n const beforeCols = [];\n const beforeRows = [];\n let spanSelectedCells = [];\n if (this.selectedCells.length) {\n spanSelectedCells = this.selectedCells\n .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 }\n })\n .filter(item => item);\n }\n table.children.map((row, rowIndex) => {\n if (rowIndex <= maxRow) {\n row.children.map((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(spanSelectedCells[0].row, minRow);\n minCol = Math.min(spanSelectedCells[0].col, 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 this.getMinAndMaxCellIndex(maxRow, maxCol, minRow, minCol, table);\n }\n return {\n minRow,\n maxRow,\n minCol,\n maxCol\n };\n }\n\n selectCell(cell: HTMLTableCellElement, editor: Editor) {\n if (!editor.selection) {\n return;\n }\n const node = AngularEditor.toSlateNode(editor, cell);\n const path = AngularEditor.findPath(editor, node);\n this.anchorCellPath = path;\n this.focusCellPath = path;\n this.focusCellElement = cell;\n const [row, col] = path.slice(-2);\n const opts = new TableOptions();\n const { anchor } = editor.selection;\n const pos = TablePosition.create(opts, editor, anchor.path);\n this.setSelectedCells([{ row, col }], pos);\n }\n\n selectedCellsChange(): Observable<SelectedCell[]> {\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 clearSelectedCells() {\n this.selectedColumnsIndex = [];\n this.selectedRowsIndex = [];\n this.isSelectedTable = false;\n this.isCellSelecting = false;\n this.isRightClicking = false;\n this.selectedCells$.next([]);\n }\n\n selectCellStart(cell: HTMLTableCellElement, editor: Editor) {\n this.isPrepareSelecting = true;\n const node = AngularEditor.toSlateNode(editor, cell);\n const path = AngularEditor.findPath(editor, node);\n this.anchorCellPath = path;\n this.focusCellPath = null;\n if (!this.preFocusCellPath) {\n this.preFocusCellPath = this.anchorCellPath;\n }\n }\n\n selectCellOngoing(cell: HTMLTableCellElement, editor: Editor) {\n if (AngularEditor.isReadonly(editor)) {\n return;\n }\n if (!editor.selection) {\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 || this.focusCellPath.toString() !== path.toString();\n this.focusCellPath = path;\n this.focusCellElement = cell;\n } else {\n isChanged =\n !this.focusCellPath ||\n (this.focusCellPath.toString() === this.anchorCellPath.toString() && this.selectedCells.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);\n this.preFocusCellPath = this.focusCellPath;\n }\n }\n }\n\n selectCellEnd(editor: Editor) {\n if (this.isCellSelecting) {\n this.focusCell(editor, this.focusCellPath);\n }\n this.isPrepareSelecting = false;\n this.preFocusCellPath = null;\n }\n\n focusCell(editor: Editor, path: number[]) {\n const at = Editor.start(editor, path);\n Transforms.select(editor, at);\n }\n\n dangerousCellsChange(): Observable<SelectedCell[]> {\n return this.dangerousCells$.asObservable().pipe(skip(1));\n }\n\n setDangerousCells() {\n this.dangerousRowsIndex = this.selectedRowsIndex;\n this.dangerousColumnsIndex = this.selectedColumnsIndex;\n this.dangerousCells$.next(this.selectedCells);\n }\n\n clearDangerousCells() {\n this.dangerousRowsIndex = [];\n this.dangerousColumnsIndex = [];\n this.dangerousCells$.next([]);\n const pos = this.createTablePosition();\n if (pos.table) {\n this.isSelectedTable = this.selectedRowsIndex.length === pos.getHeight() && this.selectedColumnsIndex.length === pos.getWidth();\n }\n }\n\n dangerousOrSelectedCellsChange(): Observable<SelectedCell[]> {\n return merge(this.dangerousCells$.asObservable().pipe(skip(1)), this.selectedCells$.asObservable().pipe(skip(1)));\n }\n\n setDangerousRows() {\n const cells = this.selectedCells;\n const rows = _(cells).map('row').uniq().valueOf();\n const pos = this.createTablePosition();\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 cells = this.selectedCells;\n const cols = _(cells).map('col').uniq().valueOf();\n const pos = this.createTablePosition();\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((v, 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 { cells, pos } = this.getTableCellsAndPosition(this.editor);\n this.dangerousRowsIndex = [...Array(pos.getHeight())].map((v, i) => i);\n this.dangerousColumnsIndex = [...Array(pos.getWidth())].map((v, i) => i);\n this.dangerousCells$.next(cells);\n }\n\n selectFirstCell() {\n const { row, col } = this.selectedCells[0];\n const tablePath = this.getTablePath(this.editor);\n const path = Editor.start(this.editor, [...tablePath, row, col]);\n Transforms.select(this.editor, path);\n }\n\n setSelectedCellsBackgroundColor(backgroundColor: ColorType) {\n const cells = this.selectedCells;\n const tablePath = this.getTablePath(this.editor);\n Editor.withoutNormalizing(this.editor, () => {\n for (const cell of cells) {\n const { row, col } = cell;\n const cellPath = [...tablePath, row, col];\n Transforms.setNodes(this.editor, { backgroundColor }, { at: cellPath });\n }\n });\n }\n\n getSelectedCellBackgroundColor(): string {\n if (this.editor && this.editor.selection) {\n const {\n anchor: { path }\n } = this.editor.selection;\n const opts = new TableOptions();\n const { cell } = TablePosition.create(opts, this.editor, path);\n return cell && cell.backgroundColor;\n }\n return '';\n }\n\n clearSelectedCellsContent() {\n const cells = this.selectedCells;\n const tablePosition = this.getTablePosition(this.editor);\n if (tablePosition.isInTable()) {\n Editor.withoutNormalizing(this.editor, () => {\n for (const cell of cells) {\n const { row, col } = cell;\n const cellPath = [...tablePosition.tableEntry[1], row, col];\n const node = Node.get(this.editor, cellPath) as TableCellElement;\n TableEditor.clearCell(this.editor, [node, cellPath]);\n }\n });\n Transforms.select(this.editor, Editor.start(this.editor, tablePosition.cellEntry[1]));\n }\n }\n\n mergeCell(editor: Editor) {\n mergeCell(editor, this.selectedCells);\n }\n\n removeDangerousColumns() {\n const { dangerousColumnsIndex, isSelectedTable } = this;\n if (isSelectedTable) {\n TableEditor.removeTable(this.editor);\n return;\n }\n dangerousColumnsIndex\n .sort((a, b) => b - a)\n .forEach(index => {\n TableEditor.removeColumn(this.editor, index);\n });\n this.changeCells();\n }\n\n removeDangerousRows() {\n const { dangerousRowsIndex, isSelectedTable } = this;\n if (isSelectedTable) {\n TableEditor.removeTable(this.editor);\n return;\n }\n dangerousRowsIndex\n .sort((a, b) => b - a)\n .forEach(index => {\n TableEditor.removeRow(this.editor, index);\n });\n this.changeCells();\n }\n\n createTablePosition(): TablePosition {\n const {\n anchor: { path }\n } = this.editor.selection;\n const opts = new TableOptions();\n return TablePosition.create(opts, this.editor, path);\n }\n\n removeColumnOrRows() {\n const { selectedRowsIndex, selectedColumnsIndex, isSelectedTable } = this;\n if (isSelectedTable) {\n TableEditor.removeTable(this.editor);\n return;\n }\n if (selectedRowsIndex.length > 0 && selectedColumnsIndex.length === 0) {\n selectedRowsIndex\n .sort((a, b) => b - a)\n .forEach(index => {\n TableEditor.removeRow(this.editor, index);\n });\n this.changeCells();\n }\n if (selectedColumnsIndex.length > 0 && selectedRowsIndex.length === 0) {\n selectedColumnsIndex\n .sort((a, b) => b - a)\n .forEach(index => {\n TableEditor.removeColumn(this.editor, index);\n });\n this.changeCells();\n }\n }\n}\n","import { Editor, Transforms } from 'slate';\nimport { TableCellElement, TableElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\nimport { TablePosition } from './table-position';\nimport * as TheQueries from '../../../queries';\n\nexport function splitCell(editor: Editor) {\n const opts = new TableOptions();\n const { anchor } = editor.selection;\n const tablePosition = TablePosition.create(opts, editor, anchor.path);\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 { isSelectedCellMerged } from './merge-cell';\nimport { getSelectCellNode } from './get-select-cell-node';\nimport { MenuEntity, SelectedCell } from '../table.types';\n\nexport function setCellMenuInvisibility(editor: Editor, menuList: MenuEntity[], selectedCells: SelectedCell[], isActiveSelect?: boolean) {\n const isCellMerged = isSelectedCellMerged(editor);\n const selectCellNodes = getSelectCellNode(editor, selectedCells).filter(item => !item.node.hidden);\n menuList.forEach(item => {\n if (item.key === 'merge-cells') {\n item.invisibility = !(selectCellNodes && selectCellNodes.length > 1 && !isActiveSelect);\n }\n if (item.key === 'split-cells') {\n item.invisibility = !(selectCellNodes && selectCellNodes.length === 1 && isCellMerged && !isActiveSelect);\n }\n });\n}\n","import { Component, OnInit, Input, NgZone, OnDestroy } from '@angular/core';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor } from 'slate';\nimport { TableStore } from '../../table.store';\nimport { ColorType, BackgroundColors, TableHeaderBackgroundColor, SpecialBackgroundColor } from '../../../../constants/color-select';\nimport { TheColorSelectService } from '../../../../services/color-select.service';\nimport { splitCell } from '../../utils/split-cell';\nimport { setCellMenuInvisibility } from '../../utils/set-menu-cell-invisibility';\nimport { MenuEntity } from '../../table.types';\nimport { TableEditor } from '../../table.editor';\n\n@Component({\n selector: 'the-table-toolbar',\n templateUrl: 'table-toolbar.component.html'\n})\nexport class TheTableToolbarComponent implements OnInit, OnDestroy {\n selectedColor: string;\n\n deleteIcon: string;\n\n iconName: string;\n\n @Input() tableStore: TableStore;\n\n @Input() isActiveSelect: boolean;\n\n get editor(): Editor {\n return this.tableStore && this.tableStore.editor;\n }\n\n cellMenuList: MenuEntity[] = [\n {\n key: 'merge-cells',\n name: '合并单元格',\n invisibility: false,\n icon: 'table-merge-cells',\n actionHandle: () => {\n event.preventDefault();\n event.stopPropagation();\n this.tableStore.mergeCell(this.editor);\n this.popoverRef.close();\n this.tableStore.clearSelectedCells();\n }\n },\n {\n key: 'split-cells',\n name: '拆分单元格',\n invisibility: false,\n icon: 'table-unmerge-cells',\n actionHandle: () => {\n event.preventDefault();\n event.stopPropagation();\n splitCell(this.editor);\n this.popoverRef.close();\n this.tableStore.clearSelectedCells();\n }\n }\n ];\n\n get isShowSplitLine() {\n return this.cellMenuList.filter(item => !item.invisibility).length > 1;\n }\n\n constructor(\n private ngZone: NgZone,\n private colorSelectService: TheColorSelectService,\n private popoverRef: ThyPopoverRef<TheTableToolbarComponent>\n ) {}\n\n ngOnInit() {\n this.deleteIcon = DeleteIcon[this.getDeleteIcon()];\n this.getIconName(this.deleteIcon);\n setCellMenuInvisibility(this.editor, this.cellMenuList, this.tableStore.selectedCells, this.isActiveSelect);\n this.selectedColor = this.tableStore.getSelectedCellBackgroundColor();\n }\n\n ngOnDestroy() {\n this.colorSelectService.closeColorSelect();\n }\n\n getIconName(key: string) {\n switch (key) {\n case 'trash':\n this.iconName = '删除表格';\n break;\n case 'table-delete-columns':\n this.iconName = '删除整列';\n break;\n case 'table-delete-rows':\n this.iconName = '删除整行';\n break;\n }\n }\n\n getDeleteIcon() {\n if (this.tableStore.isSelectedTable) {\n return DeleteIcon.trash;\n }\n if (this.tableStore.selectedRowsIndex.length > 0) {\n return DeleteIcon['table-delete-rows'];\n }\n if (this.tableStore.selectedColumnsIndex.length > 0) {\n return DeleteIcon['table-delete-columns'];\n }\n return null;\n }\n\n onDelete(event: MouseEvent) {\n event.preventDefault();\n this.tableStore.removeColumnOrRows();\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 openSelectColor(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n const element = (event.target as HTMLElement).closest('.thy-icon-nav-link');\n const isHeader = TableEditor.isActiveHeader(this.editor);\n this.ngZone.run(() => {\n this.colorSelectService.toggleColorSelect(\n element as HTMLElement,\n this.selectedColor,\n BackgroundColors,\n {\n perRowColorNumbers: 7,\n rowOptions: { 1: '#bbb', 2: '#bbb' },\n specialColor: isHeader ? TableHeaderBackgroundColor : SpecialBackgroundColor\n },\n (newColor: ColorType) => {\n if ((newColor === TableHeaderBackgroundColor && isHeader) || (newColor === SpecialBackgroundColor && !isHeader)) {\n this.tableStore.setSelectedCellsBackgroundColor(null);\n } else {\n this.tableStore.setSelectedCellsBackgroundColor(newColor);\n }\n this.selectedColor = newColor;\n }\n );\n });\n }\n}\n\nexport enum DeleteIcon {\n 'table-delete-rows',\n 'table-delete-columns',\n 'trash'\n}\n","<thy-icon-nav>\n <ng-container *ngFor=\"let item of cellMenuList\">\n <a href=\"javascript:;\" thyIconNavLink *ngIf=\"!item.invisibility\" [thyTooltip]=\"item.name\" (mousedown)=\"item.actionHandle()\">\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n </a>\n </ng-container>\n <nav-split-line *ngIf=\"!isActiveSelect && isShowSplitLine\"></nav-split-line>\n <a href=\"javascript:;\" thyIconNavLink thyTooltip=\"单元格背景\" (mousedown)=\"openSelectColor($event)\">\n <thy-icon thyIconName=\"background-tt\" thyIconType=\"twotone\" [thyTwotoneColor]=\"selectedColor\"></thy-icon>\n </a>\n <nav-split-line *ngIf=\"deleteIcon\"></nav-split-line>\n <a\n *ngIf=\"deleteIcon\"\n href=\"javascript:;\"\n thyIconNavLink\n [thyTooltip]=\"iconName\"\n class=\"danger\"\n [thyIconNavLinkIcon]=\"deleteIcon\"\n (mousedown)=\"onDelete($event)\"\n (mouseenter)=\"onEnterDelete($event)\"\n (mouseleave)=\"onLeaveDelete($event)\"\n ></a>\n</thy-icon-nav>\n","import isHotkey from 'is-hotkey';\n\nexport function isVirtualKey(e: KeyboardEvent) {\n const isMod = e.ctrlKey || e.metaKey;\n const isAlt = isHotkey('alt', e);\n const isShift = isHotkey('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 { OnInit, Component, Input, HostBinding, HostListener, ElementRef } from '@angular/core';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { MenuEntity } from '../../plugins/table/table.types';\n\n@Component({\n selector: 'the-contextmenu',\n templateUrl: 'contextmenu.component.html'\n})\nexport class TheContextMenuComponent 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 deactiveHandle: (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 (!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 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.deactiveHandle(event, entity);\n }\n\n itemMouseenter(event: MouseEvent, entity: MenuEntity) {\n event.preventDefault();\n this.activeHandle(event, entity);\n }\n\n constructor(public elementRef: ElementRef, private thyPopoverRef: ThyPopoverRef<TheContextMenuComponent>) {}\n\n ngOnInit() {}\n}\n","<thy-action-menu>\n <ng-container *ngFor=\"let menuItem of menuEntities\">\n <a\n thyActionMenuItem\n href=\"javascript:;\"\n *ngIf=\"!menuItem.invisibility\"\n (mousedown)=\"itemMousedown($event, menuItem)\"\n (mouseenter)=\"itemMouseenter($event, menuItem)\"\n (mouseleave)=\"itemMouseleave($event, menuItem)\"\n >\n <span thyActionMenuItemIcon>\n <thy-icon\n *ngIf=\"menuItem.backgroundColor; else elseIcon\"\n [thyIconName]=\"menuItem.icon\"\n thyIconType=\"twotone\"\n [thyTwotoneColor]=\"menuItem.backgroundColor\"\n ></thy-icon>\n <ng-template #elseIcon>\n <thy-icon [thyIconName]=\"menuItem.icon\"></thy-icon>\n </ng-template>\n </span>\n <span thyActionMenuItemName>{{ menuItem.name }}</span>\n <span *ngIf=\"menuItem.extendIcon\" thyActionMenuItemExtendIcon>\n <thy-icon thyIconName=\"{{ menuItem.extendIcon }}\"></thy-icon>\n </span>\n </a>\n <thy-action-menu-divider *ngIf=\"menuItem.divider\"></thy-action-menu-divider>\n </ng-container>\n</thy-action-menu>\n","import { Injectable, NgZone } from '@angular/core';\nimport { BackgroundColors, ColorType, SpecialBackgroundColor, TableHeaderBackgroundColor } from '../constants/color-select';\nimport { TableStore } from '../plugins/table/table.store';\nimport { TheColorSelectService } from './color-select.service';\nimport { TableEditor } from '../plugins/table/table.editor';\nimport { ThyPopoverRef, ThyPopover } from 'ngx-tethys/popover';\nimport { TheContextMenuComponent } from '../components/contextmenu/contextmenu.component';\nimport { TheContextService } from './context.service';\nimport { splitCell } from '../plugins/table/utils/split-cell';\nimport { setCellMenuInvisibility } from '../plugins/table/utils/set-menu-cell-invisibility';\nimport { MenuEntity } from '../plugins/table/table.types';\n\n@Injectable()\nexport class TheTableContextMenuService {\n menuRef: ThyPopoverRef<TheContextMenuComponent>;\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 return this.tableStore.getSelectedCellBackgroundColor();\n }\n\n constructor(\n private colorSelectService: TheColorSelectService,\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: '单元格背景',\n extendIcon: 'angle-right',\n actionHandle: () => {},\n activeHandle: (event: MouseEvent) => {\n if (this.colorSelectService.isOpenColorSelect) {\n return;\n }\n const isHeader = TableEditor.isActiveHeader(this.editor);\n this.colorSelectService.toggleColorSelect(\n event.target as HTMLElement,\n this.backgroundColor,\n BackgroundColors,\n {\n perRowColorNumbers: 7,\n rowOptions: { 1: '#bbb', 2: '#bbb' },\n specialColor: isHeader ? TableHeaderBackgroundColor : SpecialBackgroundColor\n },\n (newColor: ColorType) => {\n if ((newColor === TableHeaderBackgroundColor && isHeader) || (newColor === SpecialBackgroundColor && !isHeader)) {\n this.tableStore.setSelectedCellsBackgroundColor(null);\n } else {\n this.tableStore.setSelectedCellsBackgroundColor(newColor);\n }\n this.tableStore.selectFirstCell();\n },\n 'rightTop',\n 0\n );\n },\n deactiveHandle: (event: MouseEvent) => {\n if (event.relatedTarget instanceof HTMLElement) {\n if (event.relatedTarget.classList.contains('color-container')) {\n return;\n }\n }\n if (this.colorSelectService.isOpenColorSelect) {\n this.colorSelectService.closeColorSelect();\n }\n }\n },\n {\n key: 'clear-selection',\n icon: 'sweep',\n divider: true,\n name: '清空选中区域',\n actionHandle: () => {\n this.tableStore.clearSelectedCellsContent();\n this.tableStore.selectFirstCell();\n }\n },\n {\n key: 'merge-cells',\n icon: 'table-merge-cells',\n name: '合并单元格',\n actionHandle: () => {\n this.tableStore.mergeCell(this.editor);\n }\n },\n {\n key: 'split-cells',\n icon: 'table-unmerge-cells',\n name: '拆分单元格',\n divider: true,\n actionHandle: () => {\n splitCell(this.editor);\n }\n },\n {\n key: 'delete-selection-rows',\n icon: 'table-delete-rows',\n name: '删除所在行',\n actionHandle: () => {\n this.tableStore.removeDangerousRows();\n this.tableStore.clearDangerousCells();\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: '删除所在列',\n actionHandle: () => {\n this.tableStore.removeDangerousColumns();\n this.tableStore.clearDangerousCells();\n },\n activeHandle: () => {\n this.tableStore.setDangerousColumns();\n }\n },\n {\n key: 'delete-table',\n icon: 'trash',\n name: '删除表格',\n actionHandle: () => {\n TableEditor.removeTable(this.editor);\n this.tableStore.clearDangerousCells();\n },\n activeHandle: () => {\n this.tableStore.setDangerousTable();\n }\n }\n ];\n\n openMenuList(event: MouseEvent) {\n this.ngZone.run(() => {\n setCellMenuInvisibility(this.editor, this.menuEntities, this.tableStore.selectedCells);\n this.menuEntities.forEach(item => {\n if (item.key === 'background-color') {\n item.backgroundColor = this.tableStore.getSelectedCellBackgroundColor();\n }\n });\n this.menuRef = this.thyPopover.open(TheContextMenuComponent, {\n origin: event.target as HTMLElement,\n initialState: {\n menuEntities: this.menuEntities,\n actionHandle: (entity: MenuEntity) => {\n entity.actionHandle(entity);\n },\n activeHandle: (menuEvent: MouseEvent, entity: MenuEntity) => {\n if (entity.activeHandle) {\n entity.activeHandle(menuEvent);\n }\n },\n deactiveHandle: (menuEvent: MouseEvent, entity: MenuEntity) => {\n if (entity.key.indexOf('delete') >= 0) {\n this.tableStore.clearDangerousCells();\n }\n if (entity.deactiveHandle) {\n entity.deactiveHandle(menuEvent);\n }\n }\n },\n originPosition: {\n x: event.x + 30,\n y: event.y\n },\n hasBackdrop: false,\n placement: 'bottomLeft',\n viewContainerRef: this.theContextService.getOptions().viewContainerRef,\n manualClosure: true,\n insideClosable: false,\n backdropClosable: false\n });\n this.menuRef.afterClosed().subscribe(() => {\n this.tableStore.clearSelectedCells();\n });\n });\n }\n\n closeContextMenu() {\n if (this.isOpened) {\n this.menuRef.close();\n return this.menuRef.afterClosed();\n }\n }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { ThyPlacement } from 'ngx-tethys/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { TheTableToolbarComponent } from './components/toolbar/table-toolbar.component';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { TableStore } from './table.store';\nimport { TheTableContextMenuService } from '../../services/table-contextmenu.service';\nimport { TheContextService } from '../../services/context.service';\nimport { fromEvent, merge } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { isVirtualKey } from './utils/is-virtual-key';\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 theTableContextMenuService: TheTableContextMenuService,\n private ngZone: NgZone,\n private theContextService: TheContextService\n ) {}\n\n openToolbar(origin: HTMLElement, isActiveSelect?: boolean) {\n this.theTableContextMenuService.closeContextMenu();\n\n if (this.isOpened) {\n if (this.toolbarRef.containerInstance.config.origin === origin) {\n return;\n }\n this.toolbarRef.close();\n }\n this.toolbarRef = this.thyPopover.open(TheTableToolbarComponent, {\n initialState: {\n tableStore: this.tableStore,\n isActiveSelect\n },\n viewContainerRef: this.theContextService.getOptions().viewContainerRef,\n origin: this.getOrigin(origin),\n backdropClosable: this.backdropClosable,\n placement: this.placement,\n offset: this.offset,\n hasBackdrop: this.hasBackdrop,\n insideClosable: this.insideClosable,\n panelClass: 'the-table-toolbar-wrap',\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n manualClosure: true\n });\n this._listenCellClearEvent();\n }\n\n getOrigin(origin: HTMLElement): HTMLElement {\n if (origin instanceof HTMLTableCellElement && 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-controls-inner')[col] as HTMLElement;\n }\n if (selectedRowsIndex.length > 0 && col === 0) {\n return tableElement.querySelectorAll('.the-table-row-controls-button-wrap')[row] as HTMLElement;\n }\n }\n return origin;\n }\n\n closeToolbar() {\n if (this.isOpened) {\n this.ngZone.run(() => {\n this.toolbarRef.close();\n });\n return this.toolbarRef.afterClosed();\n }\n }\n\n _listenCellClearEvent() {\n const onMouseObservable = 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(take(1))\n .subscribe((e: MouseEvent) => {\n if (this.tableStore.selectedCells && this.tableStore.selectedCells.length > 0) {\n if (e.type === 'keydown') {\n this.tableStore.clearSelectedCellsContent();\n }\n this.tableStore.clearSelectedCells();\n this.closeToolbar();\n onMouseObservable.unsubscribe();\n }\n });\n }\n}\n","export const SLA_TABLE_SELECTOR = '.slate-element-table';\n\nexport const SLA_TABLE_CELL_SELECTOR = '.slate-element-table-cell';\n","import { Component, OnInit, OnDestroy, Input, ChangeDetectorRef } from '@angular/core';\nimport { Editor, Range, Transforms } from 'slate';\nimport { ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport { TableEditor } from '../../table.editor';\nimport { TablePosition } from '../../utils/table-position';\nimport { TableStore } from '../../table.store';\nimport type { TheTableComponent } from '../table.component';\nimport { TableOptions } from '../../table.types';\n\n@Component({\n selector: 'the-table-insert-mark',\n templateUrl: './insert-mark.component.html'\n})\nexport class TheInsertMarkComponent implements OnInit, OnDestroy {\n @Input() type: 'row' | 'column';\n @Input() at: number;\n @Input() tableStore: TableStore;\n\n public insertLength: string;\n\n public dotWrapperHovered: boolean;\n\n tooltipContent = '';\n\n get disabled(): boolean {\n return this.tableStore && !!this.tableStore.selectedCells.length;\n }\n\n get editor(): Editor {\n return this.tableStore && this.tableStore.editor;\n }\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {\n this.tooltipContent = this.type === 'row' ? '插入行' : '插入列';\n }\n\n onMouseDown(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\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 // update header\n if (this.type === 'row' && this.at === 0) {\n const { selection } = this.editor;\n const opts = new TableOptions();\n const table = TablePosition.create(opts, this.editor, selection.anchor.path);\n Transforms.setNodes(this.editor, { header: true }, { at: table.tableEntry[1].concat(0) });\n Transforms.setNodes(this.editor, { header: null }, { at: table.tableEntry[1].concat(1) });\n }\n this.tableStore.changeCells();\n }\n\n onMouseEnter(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n if (this.disabled) {\n return;\n }\n this.dotWrapperHovered = true;\n this.insertLength = this.getLength();\n this.cdr.detectChanges();\n }\n\n onMouseLeave(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n if (this.disabled) {\n return;\n }\n this.dotWrapperHovered = false;\n this.cdr.detectChanges();\n }\n\n getLength() {\n const { selection } = this.editor;\n if (selection && Range.isCollapsed(selection)) {\n const { table } = TablePosition.create(new TableOptions(), this.editor, selection.anchor.path);\n if (!table) {\n return;\n }\n const tableComponent = ELEMENT_TO_COMPONENT.get(table) as TheTableComponent;\n const tableWrapper = tableComponent.tableWrapper.nativeElement as HTMLElement;\n const tableElement = tableComponent.theTableElement.nativeElement as HTMLElement;\n let result = 0;\n if (this.type === 'row') {\n result = tableWrapper.offsetWidth + 11;\n } else {\n result = tableElement.offsetHeight - 1;\n }\n return result + 'px';\n }\n }\n\n ngOnDestroy() {}\n}\n","<div\n [thyTooltip]=\"!disabled && tooltipContent\"\n class=\"the-table-controls-insert-wrapper\"\n [ngClass]=\"{ disabled: disabled }\"\n contenteditable=\"false\"\n (mousedown)=\"onMouseDown($event)\"\n (mouseenter)=\"onMouseEnter($event)\"\n (mouseleave)=\"onMouseLeave($event)\"\n>\n <div\n class=\"the-table-controls-insert-line\"\n *ngIf=\"dotWrapperHovered\"\n [attr.data-dot-type]=\"type\"\n [ngStyle]=\"{ height: type === 'column' && insertLength, width: type === 'row' && insertLength }\"\n ></div>\n</div>\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","import { Directive, OnDestroy, AfterViewInit, ElementRef, ViewContainerRef, ChangeDetectorRef, NgZone, Inject } from '@angular/core';\nimport { fromEvent, ReplaySubject } from 'rxjs';\nimport { map, takeUntil, filter, mapTo, throttleTime } from 'rxjs/operators';\nimport { HoveredCellInfo, TableCellEventDispatcher } from './event-dispatcher';\nimport { RESIZE_OVERLAY_SELECTOR } from './selectors';\nimport { ColumnResizeNotifierSource } from './column-resize-notifier';\nimport { SLA_TABLE_CELL_SELECTOR } from '../../constants/selector';\nimport { TheTableComponentBase, TheTableToken } from '../../plugins/table/table.types';\n\n@Directive({\n selector: 'div[theColumnResize]'\n})\nexport class TheColumnResizeDirective implements AfterViewInit, OnDestroy {\n protected readonly destroyed = new ReplaySubject<void>();\n protected isXAxis: boolean;\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(TheTableToken)\n public theTableComponent: TheTableComponentBase\n ) {}\n\n ngAfterViewInit() {\n this._listenForCellEdgeHoverEvents();\n this._listenStartDrag();\n this._listenEndDrag();\n }\n\n _listenForCellEdgeHoverEvents() {\n this.ngZone.runOutsideAngular(() => {\n const element = this.elementRef.nativeElement!;\n let previous: { x: number; y: number } = { x: 0, y: 0 };\n fromEvent<MouseEvent>(element, 'mousemove') // mouseover to mousemove 增加灵敏性\n .pipe(\n throttleTime(300), // 防抖\n map(event => {\n if (!this.theTableComponent.isCollapsed) {\n return null;\n }\n const cell = (event.target as HTMLElement).closest(SLA_TABLE_CELL_SELECTOR) as HTMLTableCellElement;\n let hoveredInfo: HoveredCellInfo;\n let position;\n if (cell) {\n if (previous.x > 0) {\n const rectCell = cell.getBoundingClientRect();\n const deltaX = previous.x - event.clientX;\n const deltaY = previous.y - event.clientY;\n if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX !== 0) {\n const centerCellX = rectCell.x + rectCell.width / 2;\n position = event.x > centerCellX ? 'right' : 'left';\n this.isXAxis = true;\n }\n if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY !== 0) {\n this.isXAxis = false;\n const centerCellY = rectCell.y + rectCell.height / 2;\n position = event.y > centerCellY ? 'top' : 'bottom';\n }\n hoveredInfo = {\n cell,\n position\n };\n }\n previous = {\n x: event.clientX,\n y: event.clientY\n };\n return position ? hoveredInfo : null;\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.isXAxis ? this.theTableComponent.initializeColumns() : this.theTableComponent.initializeRows();\n });\n }\n\n _listenEndDrag() {\n this.resizeNotifier.resizeCompleted.pipe(takeUntil(this.destroyed)).subscribe(() => {\n this.isXAxis ? this.theTableComponent.transformColumnsWidth() : this.theTableComponent.transformRowHeight();\n });\n }\n\n ngOnDestroy() {\n this.destroyed.next();\n this.destroyed.complete();\n }\n}\n","import { Component, OnInit, ElementRef, OnDestroy, ChangeDetectorRef, NgZone, AfterViewInit, ViewChild, HostListener } from '@angular/core';\nimport { fromEvent, Subject } from 'rxjs';\nimport { take, takeUntil, debounceTime } from 'rxjs/operators';\nimport { Editor, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { TablePosition } from '../utils';\nimport { ColumnResizeNotifierSource } from '../../../components/column-resize/column-resize-notifier';\nimport { TableCellEventDispatcher } from '../../../components/column-resize/event-dispatcher';\nimport { TableStore } from '../table.store';\nimport { getElementHeight, getElementWidth } from '../../../utils/dom';\nimport { TableService } from '../table.service';\nimport { TheTableContextMenuService } from '../../../services/table-contextmenu.service';\nimport { TheContextService } from '../../../services/context.service';\nimport { TheBaseElementComponent } from '../../../interfaces/view-base';\nimport { TableCellElement, TableElement, TableRowElement } from '../../../custom-types';\nimport { TableOptions, TheTableColumn, TheTableToken } from '../table.types';\nimport { TheEditor } from '../../../interfaces/editor';\nimport { SLA_TABLE_CELL_SELECTOR } from '../../../constants/selector';\nimport * as TheTransforms from '../../../transforms';\n\n@Component({\n selector: 'the-table, [theTable]',\n templateUrl: './table.component.html',\n providers: [\n TableStore,\n TableService,\n TheTableContextMenuService,\n TableCellEventDispatcher,\n ColumnResizeNotifierSource,\n {\n provide: TheTableToken,\n useExisting: TheTableComponent\n }\n ]\n})\nexport class TheTableComponent extends TheBaseElementComponent<TableElement, Editor> implements OnInit, AfterViewInit, OnDestroy {\n destroy$: Subject<any> = new Subject();\n theTableWrapperWidth: number;\n\n rowControls: { height: number; rowIndex: number }[] = [];\n\n colControls = [];\n\n normalizedColumns: TheTableColumn[];\n\n isInTable: boolean;\n\n get columns(): TheTableColumn[] {\n return this.normalizedColumns || (this.element && this.element.columns);\n }\n\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n get tbodyNativeElement(): HTMLElement {\n return this.tbodyElement?.nativeElement;\n }\n\n get isSelectedAllCell() {\n return (\n this.tableStore.selectedRowsIndex.length === this.rowControls.length &&\n this.tableStore.selectedColumnsIndex.length === this.colControls.length\n );\n }\n\n @ViewChild('tableWrapper', { read: ElementRef, static: true })\n tableWrapper: ElementRef;\n\n @ViewChild('theTable', { read: ElementRef, static: true })\n theTableElement: ElementRef;\n\n @ViewChild('tbody', { read: ElementRef, static: true })\n tbodyElement: ElementRef;\n\n @HostListener('mousedown', ['$event'])\n handleMousedown(event: MouseEvent) {\n if (event.target instanceof Element && this.tbodyNativeElement.contains(event.target)) {\n return;\n }\n if (!TheEditor.isFocused(this.editor)) {\n TheEditor.focus(this.editor);\n }\n AngularEditor.moveBlockCard(this.editor, this.element, { direction: 'left' });\n event.preventDefault();\n }\n\n onContextChange() {\n super.onContextChange();\n if (this.initialized) {\n Promise.resolve().then(() => {\n this.tableStore.emitTableChange();\n this.useRowControls();\n });\n this.getIsInTable();\n this.getColControls();\n if (this.normalizedColumns) {\n this.normalizeShowColumns();\n }\n }\n }\n\n constructor(\n elementRef: ElementRef,\n public eventDispatcher: TableCellEventDispatcher,\n public resizeNotifier: ColumnResizeNotifierSource,\n public tableStore: TableStore,\n public cdr: ChangeDetectorRef,\n public ngZone: NgZone,\n public tableService: TableService,\n private theContextService: TheContextService,\n private theTableContextMenuService: TheTableContextMenuService\n ) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.getColControls();\n this.getIsInTable();\n }\n\n ngAfterViewInit() {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n const blockCardElement = this.nativeElement.closest('slate-block-card');\n if (blockCardElement) {\n blockCardElement.classList.add(`slate-block-card-${this.element.type}`);\n }\n this.tableStore.initEditor(this.editor);\n this.subscribeCellsChange();\n this.subscribeCellPositionChange();\n this.listenTableContextMenuEvent();\n this.useTableWrapperWidth();\n // need view render complete\n this.useRowControls();\n });\n }\n\n subscribeCellPositionChange() {\n this.tableStore\n .cellsPositionChange()\n .pipe(debounceTime(100), takeUntil(this.destroy$))\n .subscribe(x => {\n this.cdr.detectChanges();\n });\n }\n\n useTableWrapperWidth() {\n const rootWidth = this.theContextService.getOptions().width;\n const tablePath = TheEditor.findPath(this.editor, this.element);\n if (tablePath.length > 1) {\n // 解决table不在顶层时,拖动单元格宽度计算问题\n this.theTableWrapperWidth = this.tableWrapper.nativeElement.offsetWidth;\n } else {\n this.theTableWrapperWidth = rootWidth;\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 (this.selection) {\n this.rowControls = this.calculateRowControls();\n this.cdr.markForCheck();\n }\n }\n\n detectChanges() {\n this.cdr.detectChanges();\n }\n\n calculateMinRowSpanCellForRows(): { cell?: TableCellElement; rowIndex: number }[] {\n const table = this.element;\n const cells = table.children.map((row, index) => {\n const noHiddenCells = row.children.filter(cell => !cell.hidden);\n if (noHiddenCells.length > 0) {\n const minRowspan = Math.min.apply(\n Math,\n noHiddenCells.map(cell => {\n return cell.rowspan || 1;\n })\n );\n\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 calculateRowControls() {\n const minRowSpanCellForRows = this.calculateMinRowSpanCellForRows();\n\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 this.calculateRowControlsAvgHeight(previousCombineRowIndex, previousRowIndex, rowControls);\n }\n return;\n }\n\n // calculate combine row height\n if (previousCombineRowIndex > previousRowIndex) {\n this.calculateRowControlsAvgHeight(previousCombineRowIndex, previousRowIndex, rowControls);\n previousCombineRowIndex = 0;\n }\n\n const cellDom = AngularEditor.toDOMNode(this.editor, cellInfo.cell);\n let height = getElementHeight(cellDom);\n // 当cell为合并的单元格(rowspan > 1),计算其实际高度(当前单元格的高度 - 下方合并单元格的高度)\n if (cellInfo.cell.rowspan > 1) {\n const calcHeight = height - this.getBelowRowHeight(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\n 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((item, _index) => _index > previousRowIndex && _index <= previousCombineRowIndex)\n .forEach(rowControl => {\n rowControl.height = avgHeight;\n });\n }\n\n getBelowRowHeight(\n cells: {\n cell?: TableCellElement;\n rowIndex: number;\n }[],\n index: number,\n rowIndex: number,\n rowspan: number\n ) {\n let belowRowlHeight = 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(this.editor, item.cell);\n if (item.cell.rowspan > 1) {\n // 如果下方单元格的rowspan > 1,递归计算\n const height = this.getBelowRowHeight(\n cells,\n cells.findIndex(cell => cell.rowIndex === item.rowIndex),\n item.rowIndex,\n item.cell.rowspan\n );\n belowRowlHeight += getElementHeight(cellDom) - height;\n } else {\n belowRowlHeight += getElementHeight(cellDom);\n }\n }\n });\n return belowRowlHeight;\n }\n\n getColControls() {\n this.colControls = this.element?.children[0]?.children || [];\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);\n this.tableService.openToolbar(event.target as HTMLElement, true);\n }\n }\n\n getIsInTable() {\n if (this.selection) {\n const opts = new TableOptions();\n const selection = this.editor.selection;\n const startPosition = TablePosition.create(opts, this.editor, selection.anchor.path);\n const endPosition = TablePosition.create(opts, this.editor, selection.focus.path);\n this.isInTable = startPosition.isInTable() && endPosition.isInTable();\n } else {\n this.isInTable = false;\n }\n }\n\n normalizeShowColumns() {\n const table = this.element;\n const tr = table.children[0];\n if (this.element.columns) {\n let isGood = true;\n this.normalizedColumns = table.columns.map(item => {\n return { ...item };\n });\n if (this.element.columns.length !== tr.children.length) {\n this.normalizedColumns = tr.children.map((item, i) => this.columns[i] || { width: 200 });\n isGood = false;\n }\n const totalWidth = this.normalizedColumns.reduce((pre, cur) => {\n return pre + cur.width;\n }, 0);\n if (totalWidth < this.theTableWrapperWidth) {\n const lastColumnWidth =\n this.theTableWrapperWidth - totalWidth + this.normalizedColumns[this.normalizedColumns.length - 1].width;\n this.normalizedColumns[this.normalizedColumns.length - 1] = { width: lastColumnWidth };\n isGood = false;\n }\n if (isGood) {\n this.normalizedColumns = null;\n }\n }\n }\n\n initializeColumns() {\n if (!this.element.columns) {\n const tr = this.element.children[0] as TableRowElement;\n const tableWidth = AngularEditor.toDOMNode(this.editor, tr).offsetWidth;\n const columns = tr.children.map(cell => {\n return { width: Math.round(tableWidth / tr.children.length) - tr.children.length };\n });\n TheTransforms.setNode(this.editor, { columns }, this.element);\n }\n }\n\n initializeRows() {\n this.element.children.map(row => {\n if (!row.height) {\n const element = TheEditor.toDOMNode(this.editor, row);\n TheTransforms.setNode(this.editor, { height: getElementHeight(element) }, row);\n }\n });\n }\n\n transformRowHeight() {\n const rowElements = this.nativeElement.querySelector('tbody').children;\n if (rowElements) {\n ([...rowElements] as HTMLTableRowElement[]).map((row, index) => {\n const height = getElementHeight(row);\n TheTransforms.setNode(this.editor, { height }, this.element.children[index]);\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 onRowMouseDown(event: MouseEvent, index: number) {\n event.stopPropagation();\n event.preventDefault();\n this.tableStore.selectRow(this.editor, index);\n this.tableService.openToolbar(event.target as HTMLElement, true);\n }\n\n onSelectTable(event: MouseEvent) {\n event.stopPropagation();\n event.preventDefault();\n this.tableStore.selectTable(this.editor);\n this.tableService.openToolbar(event.target as HTMLElement);\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 (!cell.classList.contains('selected-cell')) {\n this.tableStore.selectCell(cell, this.editor);\n }\n }\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.cdr.markForCheck();\n this.theTableContextMenuService.openMenuList(event);\n }\n\n // patch for right click select next cell\n setTimeout(() => {\n Transforms.select(this.editor, this.editor.selection.anchor.path);\n });\n });\n });\n }\n\n trackByFnRowCotrols(index: number) {\n return index;\n }\n\n trackByFnColCotrols(index: number) {\n return index;\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<div\n class=\"the-table-container\"\n theColumnResize\n [ngClass]=\"{\n 'the-table-with-controls': isInTable,\n 'the-table-selection-hide': tableStore.isCellSelecting || tableStore.isRightClicking\n }\"\n>\n <div class=\"the-table-row-controls-wrapper\" *ngIf=\"!readonly && isInTable\">\n <div>\n <div\n class=\"the-table-corner-controls\"\n [ngClass]=\"{ active: isSelectedAllCell, dangerous: tableStore.isSelectedTable && tableStore.dangerousCells.length > 0 }\"\n >\n <button type=\"button\" class=\"the-table-corner-button\" (mousedown)=\"onSelectTable($event)\"></button>\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 <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 </div>\n <div class=\"the-table-row-controls\">\n <div class=\"the-table-row-controls-inner\">\n <div\n class=\"the-table-row-controls-button-wrap\"\n *ngFor=\"let control of rowControls; let i = index; trackBy: trackByFnRowCotrols\"\n [ngClass]=\"{\n active: tableStore.selectedRowsIndex.includes(control.rowIndex),\n dangerous: tableStore.dangerousRowsIndex.includes(control.rowIndex) && tableStore.dangerousCells.length > 0\n }\"\n >\n <button\n (mousedown)=\"onRowMouseDown($event, control.rowIndex)\"\n type=\"button\"\n [ngStyle]=\"{ height: control.height + 1 + 'px' }\"\n class=\"the-table-row-controls-button the-table-controls-button\"\n ></button>\n <the-table-insert-mark type=\"row\" [at]=\"control.rowIndex + 1\" [tableStore]=\"tableStore\"></the-table-insert-mark>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"the-table-wrapper\" #tableWrapper>\n <table class=\"the-table\" #theTable [ngClass]=\"{ 'the-table-with-controls': isInTable }\">\n <colgroup *ngIf=\"columns\">\n <col *ngFor=\"let col of columns\" [ngStyle]=\"{ width: col.width + 'px' }\" />\n </colgroup>\n <thead>\n <tr class=\"the-table-col-controls-wrapper\">\n <th\n class=\"the-table-col-controls\"\n (mousedown)=\"onColMouseDown($event, i)\"\n *ngFor=\"let control of colControls; let i = index; trackBy: trackByFnColCotrols\"\n >\n <the-table-insert-mark\n *ngIf=\"isInTable\"\n type=\"column\"\n [at]=\"i + 1\"\n [tableStore]=\"tableStore\"\n ></the-table-insert-mark>\n <div\n class=\"the-table-col-controls-inner\"\n [ngClass]=\"{\n active: tableStore.selectedColumnsIndex.includes(i),\n dangerous: tableStore.dangerousColumnsIndex.includes(i) && tableStore.dangerousCells.length > 0\n }\"\n ></div>\n </th>\n </tr>\n </thead>\n <tbody #tbody>\n <slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"> </slate-children>\n </tbody>\n </table>\n </div>\n</div>\n","import { Editor, Transforms, Range } from 'slate';\nimport { createCell } from '../utils/create-cell';\nimport { TablePosition } from '../utils';\nimport { TableOptions } from '../table.types';\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 = TablePosition.create(opts, 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 { Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport * as TheQueries from '../../../queries';\n\nexport function calculateAnchorPositionInCell(editor: Editor) {\n let isFirstLine = false;\n let isLastLine = false;\n const anchorBlock = TheQueries.anchorBlock(editor);\n const anchorBlockPath = TheQueries.findPath(editor, anchorBlock);\n const anchorBlockDom = AngularEditor.toDOMNode(editor, anchorBlock);\n const valueRangeRect = anchorBlockDom.getBoundingClientRect();\n const anchorBlockHeight = window.getComputedStyle(anchorBlockDom).lineHeight;\n const nativeSelection = window.getSelection();\n const nativeRange = nativeSelection && nativeSelection.getRangeAt(0);\n const nativeRangeRect = nativeRange && nativeRange.getBoundingClientRect();\n if (valueRangeRect && nativeRangeRect && anchorBlockHeight) {\n const lineHeight = parseInt(anchorBlockHeight, 10);\n isFirstLine = nativeRangeRect.top - valueRangeRect.top < lineHeight;\n isLastLine = valueRangeRect.bottom - nativeRangeRect.bottom < lineHeight;\n }\n return {\n isFirstLine,\n isLastLine,\n anchorBlockPath\n };\n}\n","import { Component, HostBinding, OnInit } from '@angular/core';\nimport { TableRowElement } from '../../../../custom-types';\nimport { TheBaseElementComponent } from '../../../../interfaces/view-base';\n\n@Component({\n selector: 'tr[theTableRow]',\n template: '<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>'\n})\nexport class TheTableRowComponent extends TheBaseElementComponent<TableRowElement> implements OnInit {\n @HostBinding('style.backgroundColor') backgroundColor: string;\n @HostBinding('style.height') height: string;\n\n onContextChange() {\n super.onContextChange();\n if (this.initialized) {\n this.useBackground();\n this.useHeight();\n }\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.useBackground();\n this.useHeight();\n }\n\n useBackground() {\n if (this.element.header && !this.backgroundColor) {\n this.backgroundColor = '#F3F3F3';\n }\n if (!this.element.header && this.backgroundColor) {\n this.backgroundColor = null;\n }\n }\n\n useHeight() {\n if (this.element.height) {\n this.height = this.element.height + 'px';\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { getElementWidth, coercePixelsFromCssValue, getColsTotalWidth, getElementHeight, getRowsTotalHeight } from '../../utils/dom';\nimport { coerceCssPixelValue } from '@angular/cdk/coercion';\n\n@Injectable()\nexport class ColumnResizingStore {\n constructor() {\n this.resizeCols = [];\n this.resizeRows = [];\n }\n private direction: 'left' | 'right' | 'top' | 'bottom';\n private resizeCols: { colElement: HTMLTableColElement; baseWidth: number }[];\n private resizeRows: { rowElement: HTMLTableRowElement; baseHeight: number }[];\n private tableCols: { cols: HTMLTableColElement[]; baseWidth: number };\n private tableRows: { rows: HTMLTableRowElement[]; baseHeight: 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 storeResizingRow(rowElement: HTMLTableRowElement) {\n if (this.resizeRows.some(cache => cache.rowElement === rowElement)) {\n return;\n }\n this.resizeRows.push({ rowElement, baseHeight: getElementHeight(rowElement) });\n }\n\n storeTableWidth(cols: HTMLTableColElement[]) {\n if (!this.tableCols) {\n this.tableCols = { cols, baseWidth: getColsTotalWidth(cols) };\n }\n }\n\n storeTableHeight(rows: HTMLTableRowElement[]) {\n if (!this.tableRows) {\n this.tableRows = { rows, baseHeight: getRowsTotalHeight(rows) };\n }\n }\n\n cleanResizing() {\n this.tableCols = null;\n this.tableRows = null;\n this.resizeCols = [];\n this.resizeRows = [];\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 restoreTopRows(deltaY: number) {\n let index = this.resizeRows.length - 1;\n while (index >= 0 && deltaY > 0) {\n const currentHeight = coercePixelsFromCssValue(this.resizeRows[index].rowElement.style.height);\n if (this.resizeRows[index].baseHeight > currentHeight) {\n if (this.resizeRows[index].baseHeight > currentHeight + deltaY) {\n this.resizeRows[index].rowElement.style.height = coerceCssPixelValue(currentHeight + deltaY);\n deltaY = 0;\n } else {\n deltaY -= this.resizeRows[index].baseHeight - currentHeight;\n this.resizeRows[index].rowElement.style.height = coerceCssPixelValue(this.resizeRows[index].baseHeight);\n this.popRow();\n }\n }\n index--;\n }\n return deltaY;\n }\n\n restoreBottomRows(deltaY: number) {\n let index = this.resizeRows.length - 1;\n while (index >= 0 && deltaY < 0) {\n const currentHeight = coercePixelsFromCssValue(this.resizeRows[index].rowElement.style.height);\n if (this.resizeRows[index].baseHeight > currentHeight) {\n if (this.resizeRows[index].baseHeight > currentHeight + Math.abs(deltaY)) {\n this.resizeRows[index].rowElement.style.height = coerceCssPixelValue(currentHeight + Math.abs(deltaY));\n deltaY = 0;\n } else {\n deltaY += this.resizeRows[index].baseHeight - currentHeight;\n this.resizeRows[index].rowElement.style.height = coerceCssPixelValue(this.resizeRows[index].baseHeight);\n this.popRow();\n }\n }\n index--;\n }\n return deltaY;\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 getAddTableHeight(deltaY: number) {\n if (this.tableRows) {\n return getRowsTotalHeight(this.tableRows.rows) - this.tableRows.baseHeight - Math.abs(deltaY);\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 if (this.resizeRows.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 private popRow() {\n this.resizeRows.pop();\n }\n}\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';\n\n/** Tracks state of resize events in progress. */\nexport class ResizeRef {\n direction: 'X' | 'Y';\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","import {\n Component,\n OnDestroy,\n ElementRef,\n AfterViewInit,\n ChangeDetectionStrategy,\n ViewContainerRef,\n ChangeDetectorRef,\n NgZone,\n Inject\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { fromEvent, ReplaySubject } from 'rxjs';\nimport { takeUntil, mapTo, map, filter, startWith, pairwise, distinctUntilChanged } from 'rxjs/operators';\nimport { ResizeRef } from './resize-ref';\nimport { TableCellEventDispatcher } from './event-dispatcher';\nimport { ColumnResizeNotifierSource } from './column-resize-notifier';\n\n@Component({\n host: { class: 'the-table-resize-overlay-thumb' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: ''\n})\nexport class TheColumnResizeOverlayHandleComponent implements AfterViewInit, OnDestroy {\n protected readonly destroyed = new ReplaySubject<void>();\n\n constructor(\n public elementRef: ElementRef,\n public viewContainerRef: ViewContainerRef,\n public cdr: ChangeDetectorRef,\n public ngZone: NgZone,\n public resizeRef: ResizeRef,\n public eventDispatcher: TableCellEventDispatcher,\n @Inject(DOCUMENT) public document: any,\n public resizeNotifier: ColumnResizeNotifierSource\n ) {}\n\n ngAfterViewInit() {\n this._listenForMouseEvents();\n }\n\n private _listenForMouseEvents() {\n this.ngZone.runOutsideAngular(() => {\n const takeUntilDestroyed = takeUntil<MouseEvent>(this.destroyed);\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mouseenter')\n .pipe(takeUntilDestroyed, mapTo(this.resizeRef.origin.nativeElement))\n .subscribe(cell => {\n this.eventDispatcher.tableCellHovered.next({ cell });\n this.resizeRef.updateSizeAndOffset();\n });\n\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mousedown')\n .pipe(takeUntilDestroyed)\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>(this.document, 'mouseup');\n const mousemove = fromEvent<MouseEvent>(this.document, 'mousemove');\n const escape = fromEvent<KeyboardEvent>(this.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), takeUntil(this.destroyed)).subscribe(({ clientX, clientY }) => {\n this._notifyResizeEnded(size, isXAxis ? clientX !== startX : clientY !== startY);\n });\n\n escape.pipe(takeUntil(mouseup), takeUntil(this.destroyed)).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 takeUntil(this.destroyed)\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(active ? { cell: this.resizeRef.origin.nativeElement! } : null);\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 ngOnDestroy() {\n this.destroyed.next();\n this.destroyed.complete();\n }\n}\n","import { Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { TableElement } from '../../../custom-types';\nimport { BASE_CELL_HEIGHT } from '../table.types';\n\n/**\n * 计算每一行的基础高度(不包含隐藏或者跨行的单元格)\n * @param editor\n * @param table\n * @returns\n */\nexport function getBaseHeightForRows(editor: Editor, table: TableElement) {\n const baseHeightForRows = table.children.map((row, index) => {\n const baseCells = row.children.filter(cell => !cell.hidden && (!cell.rowspan || cell.rowspan <= 1));\n if (baseCells.length > 0) {\n const cellDom = AngularEditor.toDOMNode(editor, baseCells[0]);\n return cellDom.offsetHeight;\n } else {\n return BASE_CELL_HEIGHT;\n }\n });\n return baseHeightForRows;\n}\n","import {\n Component,\n OnInit,\n ElementRef,\n OnDestroy,\n ChangeDetectorRef,\n NgZone,\n HostBinding,\n Renderer2,\n ViewContainerRef,\n AfterViewInit,\n Injector,\n ViewChild\n} from '@angular/core';\nimport { filter, map, take, takeUntil } from 'rxjs/operators';\nimport { Editor } from 'slate';\nimport { ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport { SLA_TABLE_CELL_SELECTOR } from '../../../../constants/selector';\nimport { TheTableComponent } from '../table.component';\nimport { TablePosition } from '../../utils/table-position';\nimport { fromEvent, merge, Subject } from 'rxjs';\nimport { ColumnResizingStore } from '../../../../components/column-resize/resizing.store';\nimport { TableCellEventDispatcher } from '../../../../components/column-resize/event-dispatcher';\nimport { ColumnResizeNotifierSource, ColumnSizeAction } from '../../../../components/column-resize/column-resize-notifier';\nimport { ConnectedPosition, Overlay, OverlayRef, ScrollDispatcher } from '@angular/cdk/overlay';\nimport { ComponentPortal, PortalInjector } from '@angular/cdk/portal';\nimport { TheColumnResizeOverlayHandleComponent } from '../../../../components/column-resize/overlay-handle.component';\nimport { ResizeRef } from '../../../../components/column-resize/resize-ref';\nimport { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { coercePixelsFromCssValue, getElementHeight, getElementWidth, useElementStyle } from '../../../../utils/dom';\nimport { TheBaseElementComponent } from '../../../../interfaces/view-base';\nimport { BASE_FILL_HEIGHT, TableOptions } from '../../table.types';\nimport { TheEditor } from '../../../../interfaces/editor';\nimport { TableCellElement } from '../../../../custom-types';\nimport { getBaseHeightForRows } from '../../utils/get-base-height';\n\nconst OVERLAY_ACTIVE_CLASS = 'the-resizable-overlay-thumb-active';\nconst OVERLAY_INIT_SIZE = 16;\nexport const POSITION_MAP: { [key: string]: ConnectedPosition } = {\n top: {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'center'\n },\n bottom: {\n originX: 'start',\n originY: 'top',\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\n@Component({\n selector: 'td[theTd]',\n templateUrl: './td.component.html',\n providers: [ColumnResizingStore]\n})\nexport class TheTdComponent extends TheBaseElementComponent<TableCellElement, Editor> implements OnInit, AfterViewInit, OnDestroy {\n destroy$: Subject<any> = new Subject();\n public tablePosition: TablePosition;\n public tableComponent: TheTableComponent;\n protected overlayRef?: OverlayRef;\n public hoverdDirection: 'left' | 'right' | 'top' | 'bottom';\n public tableOptions: TableOptions = new TableOptions();\n public cellInnerMinHeight: number = 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 theTableWrapperWidth() {\n return this.tableComponent.theTableWrapperWidth;\n }\n\n get tableElement(): HTMLElement {\n return this.tableComponent.theTableElement.nativeElement;\n }\n\n get scrollableElementTop() {\n const cdkscrollable: HTMLElement = this.elementRef.nativeElement.closest('[cdkscrollable]');\n if (cdkscrollable) {\n return cdkscrollable.getBoundingClientRect().top;\n }\n return -window.scrollY;\n }\n\n get scrollableElementLeft() {\n return this.tableComponent.tableWrapper.nativeElement.scrollLeft;\n }\n\n get isXAxisHover() {\n return ['left', 'right'].includes(this.hoverdDirection);\n }\n\n public dotWrapperHovered: boolean;\n\n public resizeRef: ResizeRef;\n\n @HostBinding('style.backgroundColor') backgroundColor: string;\n\n @HostBinding('attr.colspan') colspan: number;\n\n @HostBinding('attr.rowspan') rowspan: number;\n\n @HostBinding('style.display') display: string;\n\n @ViewChild('cellInner', { static: true })\n cellInner: ElementRef;\n\n get cellInnerNativeElement(): HTMLElement {\n return this.cellInner.nativeElement;\n }\n\n onContextChange() {\n super.onContextChange();\n if (this.initialized) {\n this.useState();\n }\n }\n\n constructor(\n public elementRef: ElementRef,\n public cdr: ChangeDetectorRef,\n private renderer: Renderer2,\n private viewContainerRef: ViewContainerRef,\n private ngZone: NgZone,\n public injector: Injector,\n public overlay: Overlay,\n public resizingStore: ColumnResizingStore,\n public scrollDispatcher: ScrollDispatcher\n ) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.useBackground();\n this.useSpan();\n this.useDisplay();\n this.useFocus();\n useElementStyle(this.elementRef.nativeElement, this.element);\n }\n\n ngAfterViewInit() {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.useTablePosition();\n this.getInjectionService();\n this.subscribeSelectedCellsChange();\n this.subscribeDangerousCellsChange();\n this.subscribeTableChange();\n this.listenCellSelectEvents();\n this.listenForCellHoverEvents();\n this.listenForResizeEvents();\n // const height = this.calculateCellInnerMinHeight();\n // this.useMinHeight(height);\n });\n }\n\n getInjectionService() {\n this.tableComponent = ELEMENT_TO_COMPONENT.get(this.tablePosition.table) as TheTableComponent;\n }\n\n subscribeSelectedCellsChange() {\n this.tableStore\n .selectedCellsChange()\n .pipe(takeUntil(this.destroy$))\n .subscribe(x => {\n if (x.length === 0) {\n this.renderer.removeClass(this.elementRef.nativeElement, 'selected-cell');\n } else {\n const isSelectedCell = x.some(\n ({ row, col }) => row === this.tablePosition.getRowIndex() && col === this.tablePosition.getColumnIndex()\n );\n if (isSelectedCell) {\n this.renderer.addClass(this.elementRef.nativeElement, 'selected-cell');\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, 'selected-cell');\n }\n }\n this.cdr.detectChanges();\n });\n }\n\n subscribeDangerousCellsChange() {\n this.tableStore\n .dangerousCellsChange()\n .pipe(takeUntil(this.destroy$))\n .subscribe(x => {\n if (x.length === 0) {\n this.renderer.removeClass(this.elementRef.nativeElement, 'dangerous-cell');\n } else {\n const isSelectedCell = x.some(\n ({ row, col }) => row === this.tablePosition.getRowIndex() && col === this.tablePosition.getColumnIndex()\n );\n if (isSelectedCell) {\n this.renderer.addClass(this.elementRef.nativeElement, 'dangerous-cell');\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, 'dangerous-cell');\n }\n }\n this.cdr.detectChanges();\n });\n }\n\n subscribeTableChange() {\n this.tableStore\n .tableChange()\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.useTablePosition();\n // const height = this.calculateCellInnerMinHeight();\n // this.useMinHeight(height);\n });\n }\n\n useState() {\n this.useBackground();\n this.useSpan();\n this.useDisplay();\n this.useFocus();\n useElementStyle(this.elementRef.nativeElement, this.element);\n }\n\n useTablePosition() {\n const opts = new TableOptions();\n const path = TheEditor.findPath(this.editor, this.element);\n // must be path of cell's children\n this.tablePosition = TablePosition.create(opts, this.editor, path.concat(0));\n }\n\n useBackground() {\n if (this.element.backgroundColor !== this.backgroundColor) {\n this.backgroundColor = this.element.backgroundColor as string;\n }\n }\n\n useSpan() {\n this.colspan = undefined;\n this.rowspan = undefined;\n if (this.element.colspan) {\n this.colspan = this.element.colspan;\n }\n if (this.element.rowspan) {\n this.rowspan = this.element.rowspan;\n }\n }\n\n calculateCellInnerMinHeight() {\n if (this.element.colspan) {\n const rowIndex = this.tablePosition.getRowIndex();\n if (this.calculateCombinedRows().length > 0) {\n let height = 0;\n const heights = getBaseHeightForRows(this.editor, this.tableComponent.element);\n for (let index = rowIndex; index < this.element.rowspan + rowIndex; index++) {\n height += heights[index];\n }\n height = height - BASE_FILL_HEIGHT;\n return height;\n }\n }\n return undefined;\n }\n\n calculateCombinedRows() {\n const rowIndex = this.tablePosition.getRowIndex();\n const combinedRows: number[] = [];\n const table = this.tablePosition.table;\n table.children.forEach((row, _rowIndex) => {\n if (_rowIndex > rowIndex && _rowIndex <= rowIndex + this.element.rowspan) {\n const isCombined = row.children.every(cell => cell.hidden || cell.rowspan > 1);\n if (isCombined) {\n combinedRows.push(_rowIndex);\n }\n }\n });\n return combinedRows;\n }\n\n useDisplay() {\n this.display = this.element.hidden ? 'none' : '';\n }\n\n useFocus() {\n if (this.isCollapsed) {\n this.renderer.addClass(this.elementRef.nativeElement, 'focused-cell');\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, 'focused-cell');\n }\n }\n\n useMinHeight(minHeight: number) {\n if (this.cellInnerMinHeight === minHeight) {\n return;\n }\n this.cellInnerMinHeight = minHeight;\n // if (this.cellInnerMinHeight) {\n // this.cellInnerNativeElement.style.minHeight = `${this.cellInnerMinHeight}px`;\n // } else {\n // this.cellInnerNativeElement.style.removeProperty('min-height');\n // }\n }\n\n //#region cell-select\n listenCellSelectEvents() {\n this.ngZone.runOutsideAngular(() => {\n const element = this.elementRef.nativeElement!;\n fromEvent<MouseEvent>(element, 'mousedown')\n .pipe(\n takeUntil(this.destroy$),\n filter((e: MouseEvent) => e.button !== 2),\n map(event => {\n const cell = (event.target as HTMLElement).closest(SLA_TABLE_CELL_SELECTOR);\n return cell;\n }),\n filter(cell => !!cell)\n )\n .subscribe((cell: HTMLTableCellElement) => {\n this.tableStore.selectCellStart(cell, this.editor);\n if (this.overlayRef) {\n this.overlayRef.detach();\n }\n this.listenCellMouseEvents();\n });\n });\n }\n\n listenCellMouseEvents() {\n const mouseoverObservable = fromEvent<MouseEvent>(document, 'mouseover')\n .pipe(\n takeUntil(this.destroy$),\n map(event => {\n event.preventDefault();\n const cell = (event.target as HTMLElement).closest(SLA_TABLE_CELL_SELECTOR);\n return cell;\n }),\n filter((cell: HTMLTableCellElement) => !!cell)\n )\n .subscribe((cell: HTMLTableCellElement) => {\n this.tableStore.selectCellOngoing(cell, this.editor);\n });\n fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(take(1))\n .subscribe(() => {\n this.tableStore.selectCellEnd(this.editor);\n if (this.tableStore.isCellSelecting) {\n this.ngZone.run(() => {\n this.tableComponent.tableService.openToolbar(this.tableStore.focusCellElement);\n });\n }\n mouseoverObservable.unsubscribe();\n });\n }\n\n //#region resizable\n private listenForCellHoverEvents() {\n const element = this.elementRef.nativeElement!;\n this.eventDispatcher\n .resizeOverlayVisibleForTableCell(element)\n .pipe(takeUntil(this.destroy$))\n .subscribe(hoveredCellInfo => {\n if (hoveredCellInfo && hoveredCellInfo.position) {\n this.hoverdDirection = hoveredCellInfo.position;\n }\n // first column should not have left resize handle\n if (this.isXAxisHover && this.hoverdDirection === 'left' && this.tablePosition.getColumnIndex() === 0) {\n return;\n }\n if (!this.isXAxisHover && this.hoverdDirection === 'bottom' && this.tablePosition.getRowIndex() === 0) {\n return;\n }\n if (hoveredCellInfo) {\n if (!this.overlayRef) {\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 this.overlayRef = null;\n }\n });\n }\n\n private listenForResizeEvents() {\n const takeUntilDestroyed = takeUntil<ColumnSizeAction>(this.destroy$);\n\n merge(this.resizeNotifier.resizeCanceled, this.resizeNotifier.triggerResize)\n .pipe(\n takeUntilDestroyed,\n filter(columnSize => columnSize.tableCell === this.elementRef.nativeElement)\n )\n .subscribe(({ deltaSize, previousSize, completeImmediately }) => {\n this.elementRef.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(takeUntilDestroyed)\n .subscribe(columnSize => {\n this._cleanUpAfterResize(columnSize);\n this.resizingStore.cleanResizing();\n });\n }\n\n private _completeResizeOperation(): void {\n this.ngZone.run(() => {\n this.resizeNotifier.resizeCompleted.next({\n tableCell: this.elementRef.nativeElement\n });\n });\n }\n\n private _cleanUpAfterResize(columnSize: ColumnSizeAction): void {\n this.elementRef.nativeElement!.classList.remove(OVERLAY_ACTIVE_CLASS);\n }\n\n private _createHandlePortal(): ComponentPortal<TheColumnResizeOverlayHandleComponent> {\n const customTokens = new WeakMap();\n this.resizeRef = new ResizeRef(\n this.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 this.resizeRef.setDirection(this.isXAxisHover ? 'X' : 'Y');\n customTokens.set(ResizeRef, this.resizeRef);\n customTokens.set(TableCellEventDispatcher, this.eventDispatcher);\n customTokens.set(ColumnResizeNotifierSource, this.resizeNotifier);\n const injector = new PortalInjector(this.injector, customTokens);\n return new ComponentPortal(TheColumnResizeOverlayHandleComponent, this.viewContainerRef, injector);\n }\n\n private _showHandleOverlay(): void {\n this.overlayRef!.attach(this._createHandlePortal()).changeDetectorRef.markForCheck();\n this.updateOverlayHandleSizeAndOffset();\n }\n\n private updateOverlayHandleSizeAndOffset() {\n this.overlayRef?.removePanelClass(['the-column-resize-handle-panel', 'the-row-resize-handle-panel']);\n this.isXAxisHover ? this.updateOverlayHandleColumnSize() : this.updateOverlayHandleRowSize();\n this.overlayRef?.updatePositionStrategy(this.createPositionStrategy());\n }\n\n private updateOverlayHandleColumnSize() {\n let height = 0;\n const tableElementTop = this.tableElement.getBoundingClientRect().top;\n if (tableElementTop < this.scrollableElementTop) {\n height = this.tableElement.offsetHeight - (this.scrollableElementTop - tableElementTop);\n } else {\n height = this.tableElement.offsetHeight;\n }\n this.overlayRef!.addPanelClass('the-column-resize-handle-panel');\n this.overlayRef!.updateSize({ height, width: OVERLAY_INIT_SIZE });\n }\n\n private updateOverlayHandleRowSize() {\n const width = this.tableComponent.tableWrapper.nativeElement.offsetWidth + 11;\n this.overlayRef!.addPanelClass('the-row-resize-handle-panel');\n this.overlayRef!.updateSize({ width, height: OVERLAY_INIT_SIZE });\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 }\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 panelClass: 'the-column-resize-handle-panel'\n }\n : {\n height: OVERLAY_INIT_SIZE + 'px',\n panelClass: 'the-row-resize-handle-panel'\n };\n return this.overlay.create({\n // Always position the overlay based on left-indexed coordinates.\n disposeOnNavigation: true,\n positionStrategy: this.createPositionStrategy(),\n ...overlayOption\n });\n }\n\n private createPositionStrategy() {\n let offsetY = this.calculateOverlayHandleOffsetY();\n let offsetX = this.calculateOverlayHandleOffsetX();\n const position: ConnectedPosition = this.isXAxisHover\n ? { ...POSITION_MAP[this.hoverdDirection], offsetY }\n : { ...POSITION_MAP[this.hoverdDirection], offsetX };\n return this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef.nativeElement)\n .withFlexibleDimensions(false)\n .withGrowAfterOpen(false)\n .withPush(false)\n .withPositions([position]);\n }\n\n private calculateOverlayHandleOffsetY() {\n const tableElementTop = this.tableElement.getBoundingClientRect().top;\n if (tableElementTop < this.scrollableElementTop) {\n return this.scrollableElementTop - this.elementRef.nativeElement.getBoundingClientRect().top;\n } else {\n return tableElementTop - this.elementRef.nativeElement.getBoundingClientRect().top;\n }\n }\n\n private calculateOverlayHandleOffsetX() {\n const cellElementLeft = this.elementRef.nativeElement.getBoundingClientRect().left;\n const tableElementLeft = this.tableElement.getBoundingClientRect().left;\n return tableElementLeft - cellElementLeft + this.scrollableElementLeft;\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.elementRef.nativeElement.cellIndex;\n if (this.hoverdDirection === 'left') {\n cellIndex = cellIndex - 1;\n }\n const colspan = (this.elementRef.nativeElement as HTMLElement).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.theTableWrapperWidth;\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.storeTableHeight(rows);\n this.resizingStore.initDirection(deltaY, this.isXAxisHover);\n let rowIndex = this.elementRef.nativeElement.parentElement.rowIndex - 1; // subtract thead's tr\n\n if (this.hoverdDirection === 'bottom') {\n rowIndex = rowIndex - 1;\n } else {\n const cellRowpsan = (this.elementRef.nativeElement as HTMLTableCellElement).rowSpan;\n rowIndex = rowIndex + cellRowpsan - 1;\n }\n if (deltaY > 0) {\n this.applyBottomRows(rows, deltaY, rowIndex + 1);\n if (this.resizingStore.isRestoring(deltaY, this.isXAxisHover)) {\n deltaY = this.resizingStore.restoreTopRows(deltaY);\n }\n if (deltaY > 0) {\n let initHeight = getElementHeight(rows[rowIndex]);\n rows[rowIndex].style.height = coerceCssPixelValue(initHeight + deltaY);\n }\n } else {\n let addDeltaY = this.resizingStore.getAddTableHeight(deltaY);\n const _delta = this.applyTopRows(rows, deltaY, rowIndex);\n if (_delta === deltaY) {\n // can not resize\n return;\n }\n deltaY = deltaY - _delta;\n if (this.resizingStore.isRestoring(deltaY, this.isXAxisHover)) {\n if (addDeltaY < 0) {\n deltaY = this.resizingStore.restoreBottomRows(deltaY);\n }\n }\n }\n }\n\n applyTopRows(rows: HTMLTableRowElement[], deltaY: number, rowIndex: number): number {\n while (deltaY < 0 && rows[rowIndex]) {\n const rowOffsetHeight = getElementHeight(rows[rowIndex]);\n const rowStyleHeight = coercePixelsFromCssValue(rows[rowIndex].style.height);\n if (rowOffsetHeight > this.tableOptions.minHeightPx && rowOffsetHeight === rowStyleHeight) {\n if (this.resizingStore.isResizing(deltaY, this.isXAxisHover)) {\n this.resizingStore.storeResizingRow(rows[rowIndex]);\n }\n if (rowOffsetHeight > this.tableOptions.minHeightPx + Math.abs(deltaY)) {\n rows[rowIndex].style.height = coerceCssPixelValue(rowOffsetHeight - Math.abs(deltaY));\n deltaY = 0;\n } else {\n deltaY += rowOffsetHeight - this.tableOptions.minHeightPx;\n rows[rowIndex].style.height = coerceCssPixelValue(this.tableOptions.minHeightPx);\n }\n }\n rowIndex--;\n }\n return deltaY;\n }\n\n applyBottomRows(rows: HTMLTableRowElement[], deltaY: number, rowIndex: number): number {\n while (rows[rowIndex] && deltaY > 0) {\n const rowOffsetHeight = getElementHeight(rows[rowIndex]);\n const rowStyleHeight = coercePixelsFromCssValue(rows[rowIndex].style.height);\n if (rowOffsetHeight > this.tableOptions.minHeightPx && rowOffsetHeight === rowStyleHeight) {\n if (this.resizingStore.isResizing(deltaY, this.isXAxisHover)) {\n this.resizingStore.storeResizingRow(rows[rowIndex]);\n }\n if (rowOffsetHeight > deltaY + this.tableOptions.minHeightPx) {\n rows[rowIndex].style.height = coerceCssPixelValue(rowOffsetHeight - deltaY);\n deltaY = 0;\n } else {\n deltaY -= rowOffsetHeight - this.tableOptions.minHeightPx;\n rows[rowIndex].style.height = coerceCssPixelValue(this.tableOptions.minHeightPx);\n }\n }\n rowIndex++;\n }\n return deltaY;\n }\n\n //#region\n\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this.overlayRef) {\n this.overlayRef.detach();\n }\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<div #cellInner>\n <slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>\n</div>\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}","import { Transforms, Point, Node, Range, Editor, NodeEntry, Element, Path, Operation } from 'slate';\nimport { AngularEditor, ELEMENT_TO_COMPONENT, hotkeys, hasBlockCard, isCardLeft } from 'slate-angular';\nimport { TableOptions } from './table.types';\nimport { isRangeInTable, isSelectionInTable, TablePosition } from './utils';\nimport { TheEditor } from '../../interfaces';\nimport { ElementKinds } from '../../constants/node-types';\nimport { TableCellElement, TableElement, TableRowElement } from '../../custom-types';\nimport { TheTableComponent } from './components/table.component';\nimport { TableEditor } from './table.editor';\nimport { clearTableNode } from './transforms/clear-table-node';\nimport { isVirtualKey } from './utils/is-virtual-key';\nimport { insertColumnAtRow } from './transforms/insert-column';\nimport { calculateAnchorPositionInCell } from './utils/calc-anchor-position';\nimport { CLIPBOARD_FORMAT_KEY } from '../../constants/default';\nimport { getOriginCell } from './utils/calc-span';\nimport { resetTableCell } from './utils/split-cell';\nimport { removeColumns } from './utils/remove-columns';\nimport { addColumns } from './utils/add-columns';\nimport { TheTableRowComponent } from './components/row/row.component';\nimport { TheTdComponent } from './components/td/td.component';\nimport { extractFragment } from '../../utils/fragment';\nimport * as TheQueries from '../../queries';\nimport { normalizeTable } from './utils/normalize-table';\nimport { _ } from '../../utils/lodash';\n\nexport const withTable = (editor: Editor) => {\n const {\n deleteBackward,\n deleteForward,\n onKeydown,\n setFragmentData,\n insertData,\n normalizeNode,\n isBlockCard,\n renderElement,\n deleteCutData,\n isContainer,\n onChange\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 => Editor.isBlock(editor, n)\n });\n const startPosition = TablePosition.create(opts, editor, selection.anchor.path);\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 = TablePosition.create(opts, editor, editor.selection.anchor.path);\n const afterPosition = TablePosition.create(opts, editor, afterPoint.path);\n if (beforePosition.cell && beforePosition.cell !== afterPosition.cell) {\n return;\n }\n }\n deleteForward(unit);\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 = TablePosition.create(opts, editor, selection.anchor.path);\n const endPosition = TablePosition.create(opts, 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(editor, startPosition.table, startPosition.getRowIndex() - 1, startPosition.getColumnIndex(), false);\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(editor, startPosition.table, startPosition.getRowIndex() + 1, startPosition.getColumnIndex(), true);\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 && TablePosition.create(opts, 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 && TablePosition.create(opts, 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 = unit => {\n const opts = new TableOptions();\n if (!isSelectionInTable(opts, editor)) {\n setFragmentData(unit);\n return;\n }\n const { selection } = editor;\n const tablePosition = TablePosition.create(opts, editor, selection.anchor.path);\n const tableComponent = ELEMENT_TO_COMPONENT.get(tablePosition.table) as TheTableComponent;\n const cells = tableComponent.tableStore.selectedCells;\n let tableFragment = null;\n if (tableComponent.tableStore.selectedRowsIndex.length > 0) {\n const rows = tablePosition.table.children.slice(tableComponent.tableStore.selectedRowsIndex[0], tableComponent.tableStore.selectedRowsIndex[tableComponent.tableStore.selectedRowsIndex.length - 1] + 1);\n tableFragment =\n {\n ...tablePosition.table,\n children: rows\n };\n } else if (cells.length > 0) {\n const tempRows = {};\n for (const cell of cells) {\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 {\n type: ElementKinds.table,\n children: rows\n };\n }\n if (tableFragment) {\n tableFragment = normalizeTable(_.cloneDeep(tableFragment));\n const plainText = Node.string(tableFragment);\n tableFragment = [tableFragment];\n const stringObj = JSON.stringify(tableFragment);\n const encoded = window.btoa(encodeURIComponent(stringObj));\n unit.setData(`application/${CLIPBOARD_FORMAT_KEY}`, encoded);\n unit.setData('text/plain', plainText);\n return;\n }\n setFragmentData(unit);\n };\n\n editor.insertData = data => {\n const fragment = extractFragment(data);\n if (fragment) {\n const opts = new TableOptions();\n const { selection } = editor;\n if (\n isSelectionInTable(opts, editor) &&\n fragment.length === 1 &&\n Element.isElement(fragment[0]) &&\n fragment[0].type === ElementKinds.table\n ) {\n const tablePosition = TablePosition.create(opts, editor, selection.anchor.path);\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;\n }\n }\n insertData(data);\n };\n\n editor.normalizeNode = (entry: NodeEntry<Node>) => {\n if (Element.isElement(entry[0]) && entry[0].type === ElementKinds.table) {\n const table = entry[0] 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: [...entry[1], 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 entry 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: entry[1] });\n }\n }\n // adjust selection when selection is in hidden cell\n if (Element.isElement(entry[0]) && entry[0].type === ElementKinds.tableCell && entry[0].hidden) {\n if (editor.selection && Range.isCollapsed(editor.selection) && Path.isAncestor(entry[1], editor.selection.anchor.path)) {\n setTimeout(() => {\n const opts = new TableOptions();\n const tablePosition = TablePosition.create(opts, editor, editor.selection.anchor.path);\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 normalizeNode(entry);\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 TheTableComponent;\n }\n if (element.type === ElementKinds.tableRow) {\n return TheTableRowComponent;\n }\n if (element.type === ElementKinds.tableCell) {\n return TheTdComponent;\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 { selection } = editor;\n const element = TablePosition.create(opts, editor, selection.anchor.path);\n const tableComponent = ELEMENT_TO_COMPONENT.get(element.table) as TheTableComponent;\n const cells = tableComponent.tableStore.selectedCells;\n if (cells.length > 0) {\n Editor.withoutNormalizing(editor, () => {\n if (tableComponent.tableStore.isSelectedTable) {\n TableEditor.removeTable(editor);\n } else {\n tableComponent.tableStore.clearSelectedCellsContent();\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 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 = TablePosition.create(opts, editor, editor.selection.anchor.path);\n if (tablePosition.isInTable() && tablePosition.cell.hidden) {\n TableEditor.selectOriginCell(editor, tablePosition.table, tablePosition.getRowIndex(), tablePosition.getColumnIndex(), false);\n }\n }\n }\n\n return editor;\n};\n","import { Transforms, Element, Text, Editor } from 'slate';\nimport { createEmptyParagraph } from '../../utils/create-empty-paragraph';\nimport { ElementKinds } from '../../constants';\nimport { TransformEditor } from '../common/transforms.plugin';\nimport * as TheQueries from '../../queries';\nimport { CustomElementKinds } from '../../custom-types';\n\nexport const withInsertParagraphNodes =\n (types: CustomElementKinds[] = []) =>\n <T extends Editor & TransformEditor>(editor: T) => {\n const { normalizeNode } = editor;\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","import { TheiaConverter } from '@atinc/selene';\nimport { CLIPBOARD_FORMAT_KEY } from '../../constants/default';\nimport { Editor, Transforms } from 'slate';\nimport { ElementKinds } from '../../constants/node-types';\nimport { deleteColorAndBackgroundColorOfText } from '../../utils/fragment';\n\nexport const withDeserializeHMTL = (editor: Editor) => {\n const { insertData } = editor;\n\n editor.insertData = (data: DataTransfer) => {\n const html = data.getData(`text/html`);\n const slateFragment = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);\n\n if (html && !slateFragment) {\n const htmlDom = new DOMParser().parseFromString(html, 'text/html');\n const fragment = TheiaConverter.convertToTheia(Array.from(htmlDom.body.children));\n // 无法识别HTML内容时后退一下:识别纯文本\n if (fragment.length === 1 && Editor.isEmpty(editor, fragment[0]) && fragment[0].type === ElementKinds.paragraph) {\n insertData(data);\n return;\n }\n // 识出纯图片并且粘贴板中存在文件则不进行处理, hook 直接右键复制图片的场景,流转到上传图片流程\n // 后续需要做识别html图片后自动上传处理\n if (fragment.length === 1 && fragment[0].type === ElementKinds.image && data.files.length > 0) {\n insertData(data);\n return;\n }\n // 过滤 text 节点的 color/background-color 属性\n fragment.forEach((node) => deleteColorAndBackgroundColorOfText(node));\n Transforms.insertFragment(editor, fragment);\n return;\n }\n\n insertData(data);\n };\n return editor;\n};\n","import { VerticalAlignment } from '../../constants';\nimport { TheEditor } from '../../interfaces';\nimport { TableEditor } from '../table/table.editor';\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","import { Component, ElementRef, HostListener, Input, OnInit, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys';\nimport { Editor } from 'slate';\nimport { TheToolbarBaseItemComponent } from '../../components/toolbar-base-item/toolbar-base-item.component';\nimport { CustomEditor } from '../../custom-types';\nimport { DefaultToolbarItem, 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 '[class.hide]': '!active'\n }\n})\nexport class TheVerticalToolbarItemComponent extends TheToolbarBaseItemComponent implements OnInit {\n isHide = true;\n active: boolean | string = false;\n activeMenu: ToolbarItem;\n dropdownPopoverRef: ThyPopoverRef<any>;\n\n @Input() item: DefaultToolbarItem;\n\n @Input() menus: DefaultToolbarItem[];\n\n @Input() editor: CustomEditor;\n\n @Input() toolbarItem: ToolbarItem;\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(public elementRef: ElementRef, private thyPopover: ThyPopover, private viewContainerRef: ViewContainerRef) {\n super();\n }\n\n ngOnInit(): void {}\n\n public statusChange(editor: Editor) {\n this.active = this.toolbarItem?.active ? this.toolbarItem?.active(editor) : false;\n this.activeMenu = this.menusActive(editor);\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\n if (!this.item?.execute || 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 viewContainerRef: this.viewContainerRef,\n insideClosable: false,\n backdropClosable: false,\n hasBackdrop: false\n });\n }\n\n close() {\n if (this.dropdownPopoverRef) {\n this.dropdownPopoverRef.close();\n }\n }\n}\n","<a\n thyIconNavLink\n class=\"icon-mode link-with-down\"\n [thyTooltip]=\"toolbarItem?.name\"\n [thyIconNavLinkActive]=\"isOpened\"\n thyTooltipPlacement=\"top\"\n (mousedown)=\"execute($event)\"\n>\n <thy-icon [thyIconName]=\"activeMenu?.icon\"></thy-icon>\n <thy-icon class=\"caret-down-icon font-size-sm text-desc\" thyIconName=\"caret-down\"></thy-icon>\n</a>\n\n<ng-template #VerticalAlignItems>\n <thy-action-menu class=\"dropdown\">\n <ng-container *ngFor=\"let menu of toolbarItem?.includes\">\n <a\n thyActionMenuItem\n href=\"javascript:;\"\n [thyActionMenuItemActive]=\"menu.key === activeMenu?.key\"\n [ngStyle]=\"menu?.styles\"\n (mousedown)=\"itemMousedown($event, menu)\"\n >\n <span *ngIf=\"menu.icon\" thyActionMenuItemIcon>\n <thy-icon [thyIconName]=\"menu?.icon\"></thy-icon>\n </span>\n <span thyActionMenuItemName>{{ menu.name }}</span>\n </a>\n </ng-container>\n </thy-action-menu>\n</ng-template>\n","import { DropdownMode } from '../../constants';\nimport { ToolbarActionTypes, VerticalAlignment } from '../../constants/node-types';\nimport { ToolbarItem, ToolbarItemType } from '../../interfaces';\nimport { TableEditor } from '../table/table.editor';\nimport { VerticalAlignEditor } from './vertical-align.editor';\nimport { TheVerticalToolbarItemComponent } from './toolbar-item.component';\n\nexport const VerticalAlignOptions: ToolbarItem[] = [\n {\n key: ToolbarActionTypes.verticalAlign,\n name: '垂直对齐',\n type: ToolbarItemType.toolDropdown,\n dropdownMode: DropdownMode.icon,\n iconComponent: TheVerticalToolbarItemComponent,\n includes: [ToolbarActionTypes.verticalAlignTop, ToolbarActionTypes.verticalAlignMiddle, ToolbarActionTypes.verticalAlignBottom],\n active: editor => TableEditor.isActive(editor)\n },\n {\n key: ToolbarActionTypes.verticalAlignTop,\n icon: 'align-top',\n name: '顶部对齐',\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: '垂直居中',\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: '底部对齐',\n execute: editor => VerticalAlignEditor.setVerticalAlign(editor, VerticalAlignment.bottom),\n active: editor => VerticalAlignEditor.isVerticalActive(editor, VerticalAlignment.bottom)\n }\n];\n","import { take, skip, filter } from 'rxjs/operators';\nimport { Range } from 'slate';\nimport { HistoryEditor } from 'slate-history';\nimport { EDITOR_TO_ELEMENT } from 'slate-angular';\nimport { TheEditor } from '../../interfaces';\nimport { TheContextService } from '../../services/context.service';\nimport { MarkProps } from '../../constants/node-types';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\n\nexport const PaintFormatEditor = {\n formatBrush(editor: TheEditor) {\n const contextService = editor.injector.get(TheContextService);\n const obj = {};\n for (const key of MarkProps) {\n const k = contextService.paintFormatStatus.marks[key];\n obj[key] = k || null;\n }\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, obj, path);\n });\n } else {\n TheTransforms.setMarks(editor, obj);\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 skip(1),\n filter(event => element.contains(event.target as Element)),\n take(1)\n )\n .subscribe((event: MouseEvent) => {\n if (contextService.paintFormatStatus.isActive) {\n PaintFormatEditor.formatBrush(editor);\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","import { Editor, Range } from 'slate';\nimport { MarkProps, MarkTypes, ToolbarActionTypes } from '../../constants';\nimport { TheEditor, ToolbarItem } from '../../interfaces';\nimport { TableEditor } from '../table/table.editor';\nimport { PaintFormatEditor } from './paint-format.editor';\nimport * as TheTransforms from '../../transforms';\nimport { CONTROL_KEY } from '../../utils';\n\nexport const PaintFormatOptions: ToolbarItem[] = [\n {\n key: ToolbarActionTypes.undo,\n icon: 'undo',\n name: '撤销',\n shortcutKey: `${CONTROL_KEY}+Z`,\n execute: (editor: TheEditor) => editor.undo()\n },\n {\n key: ToolbarActionTypes.redo,\n icon: 'redo',\n name: '重做',\n shortcutKey: `${CONTROL_KEY}+Shift+Z`,\n execute: (editor: TheEditor) => editor.redo()\n },\n {\n key: ToolbarActionTypes.paintformat,\n icon: 'paintformat',\n name: '格式刷',\n execute: PaintFormatEditor.enableFormatBrush,\n active: PaintFormatEditor.isActive\n },\n {\n key: ToolbarActionTypes.clean,\n icon: 'clean',\n name: '清除格式',\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","import { Editor, Node, Text, Element, Range } from 'slate';\nimport { TheEditor } from '../interfaces';\nimport { 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 const textIndent = 'textIndent';\n const align = 'align';\n const hasTextIndent = block[textIndent];\n const hasAlign = block[align];\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 !hasTextIndent &&\n !hasAlign\n ) {\n return true;\n }\n return false;\n};\n","import {\n Component,\n ComponentFactoryResolver,\n HostBinding,\n HostListener,\n Input,\n NgZone,\n OnInit,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport { Editor } from 'slate';\nimport { ToolbarItem } from '../../interfaces';\nimport { CustomEditor } from '../../custom-types';\nimport { TheToolbarBaseItemComponent } from '../toolbar-base-item/toolbar-base-item.component';\nimport { ToolbarItemMode } from '../../constants/toolbar';\nimport { isComponentType } from 'slate-angular';\n\n@Component({\n selector: 'the-toolbar-item',\n template: `\n <ng-container *ngIf=\"itemMode === ToolbarItemMode.horizontal; else selectionItem\">\n <a\n thyIconNavLink\n [thyIconNavLinkIcon]=\"item.icon\"\n [thyTooltip]=\"tooltip\"\n [thyTooltipTemplateContext]=\"{ name: item.name, shortcutKey: item.shortcutKey }\"\n thyTooltipPlacement=\"top\"\n [thyIconNavLinkActive]=\"active\"\n (mousedown)=\"execute($event)\"\n ></a>\n </ng-container>\n <ng-template #selectionItem>\n <ng-container *ngIf=\"!item?.quickItemComponent\">\n <thy-icon [thyIconName]=\"item?.icon\" [thyIconRotate]=\"0\" class=\"quick-toolbar-icon\"></thy-icon>\n <span class=\"quick-toolbar-name\">{{ item?.name }}</span>\n </ng-container>\n </ng-template>\n <ng-template #tooltip let-data> {{ data.name }} {{ data.shortcutKey }} </ng-template>\n <ng-container #toolbarContainer></ng-container>\n `,\n host: {\n class: 'the-toolbar-item'\n }\n})\nexport class TheToolbarItemComponent extends TheToolbarBaseItemComponent implements OnInit {\n @Input() item: ToolbarItem;\n\n @Input() editor: CustomEditor;\n\n @Input() itemMode: ToolbarItemMode = ToolbarItemMode.horizontal;\n\n ToolbarItemMode = ToolbarItemMode;\n\n active: string | boolean = false;\n\n disabled = false;\n\n @ViewChild('toolbarContainer', { read: ViewContainerRef, static: true })\n toolbarContainer: ViewContainerRef;\n\n @HostListener('mousedown', ['$event'])\n toggleDropdown(event: MouseEvent) {\n super.execute(event);\n }\n\n @HostBinding('class.disabled') get disabledState() {\n return this.disabled;\n }\n\n constructor(private ngZone: NgZone, private cfr: ComponentFactoryResolver) {\n super();\n }\n\n ngOnInit() {\n if (this.item?.quickItemComponent && isComponentType(this.item?.quickItemComponent)) {\n this.renderToolbarItem();\n }\n }\n\n public statusChange(editor: Editor) {\n this.disabled = this.item?.disable ? this.item?.disable(editor) : false;\n this.active = this.item?.active ? this.item?.active(editor) : false;\n }\n\n execute(event: MouseEvent) {\n super.execute(event);\n\n if (this.editor?.disabled || this.disabled || !this.item?.execute) {\n return;\n }\n\n this.item?.execute(this.editor);\n }\n\n renderToolbarItem() {\n this.ngZone.run(() => {\n const toolbarItemFactory = this.cfr.resolveComponentFactory(this.item.quickItemComponent);\n const tollbarItemRef = this.toolbarContainer.createComponent(toolbarItemFactory);\n tollbarItemRef.instance.editor = this.editor;\n tollbarItemRef.instance.item = this.item;\n tollbarItemRef.instance.itemMode = ToolbarItemMode.vertical;\n });\n }\n}\n","import { Component, OnInit, Input, HostListener, OnDestroy, ElementRef } from '@angular/core';\nimport { mixinUnsubscribe, MixinBase } from 'ngx-tethys/core';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor, Text, Node } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { ToolbarItem } from '../../../../interfaces/toolbar';\nimport { ToolbarActionTypes } from '../../../../constants/node-types';\nimport { QUICK_TOOLBAR_HOTKEY, ToolbarItemMode } from '../../../../constants/toolbar';\n\n@Component({\n selector: 'the-quick-toolbar',\n templateUrl: 'quick-toolbar.component.html'\n})\nexport class TheQuickToolbarComponent extends mixinUnsubscribe(MixinBase) implements OnInit, OnDestroy {\n @Input() editor: Editor;\n @Input() quickToolbarItems: ToolbarItem[];\n\n editorElement: HTMLElement;\n ToolbarItemMode = ToolbarItemMode;\n ToolbarActionTypes = ToolbarActionTypes;\n\n @HostListener('document: mousedown', ['$event'])\n handleMouseDown(event: MouseEvent) {\n if (!this.elementRef.nativeElement.contains(event.target as HTMLElement)) {\n this.popoverRef.close();\n } else {\n event.preventDefault();\n }\n }\n\n @HostListener('document: keydown.enter')\n handleEnter() {\n this.popoverRef.close();\n }\n\n constructor(private popoverRef: ThyPopoverRef<TheQuickToolbarComponent>, public elementRef: ElementRef) {\n super();\n }\n\n ngOnInit() {\n this.editorElement = AngularEditor.toDOMNode(this.editor, this.editor);\n }\n\n stopPropagation(event) {\n event.preventDefault();\n }\n\n selectionChange(event) {\n this.removeHotKey();\n const toolbarItem = this.quickToolbarItems.find(item => item.key === event.value);\n if (toolbarItem?.execute) {\n toolbarItem.execute(this.editor);\n }\n }\n\n removeHotKey() {\n const node = Node.get(this.editor, this.editor.selection.anchor.path) as Text;\n if (node && Text.equals({ text: QUICK_TOOLBAR_HOTKEY }, node)) {\n Editor.deleteBackward(this.editor);\n }\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<thy-selection-list\n class=\"the-quick-toolbar\"\n [thyBindKeyEventContainer]=\"editorElement\"\n (thySelectionChange)=\"selectionChange($event)\"\n [thyMultiple]=\"false\"\n>\n <ng-container *ngFor=\"let item of quickToolbarItems\">\n <ng-container *ngIf=\"item.key !== ToolbarActionTypes.split; else splitLine\">\n <thy-list-option [thyValue]=\"item?.key\" (mousedown)=\"stopPropagation($event)\">\n <the-toolbar-item [editor]=\"editor\" [item]=\"item\" [itemMode]=\"ToolbarItemMode.vertical\"></the-toolbar-item>\n </thy-list-option>\n </ng-container>\n </ng-container>\n</thy-selection-list>\n\n<ng-template #splitLine>\n <nav-split-line [mode]=\"ToolbarItemMode.horizontal\"></nav-split-line>\n</ng-template>\n","import { Overlay } from '@angular/cdk/overlay';\nimport { ElementRef, ViewContainerRef } from '@angular/core';\nimport { ThyPopover } from 'ngx-tethys/popover';\nimport { Editor, Node, Element, Range, InsertTextOperation } from 'slate';\nimport { THE_EDITOR_QUICK_TOOLBAR_REF } from '../../utils/weak-maps';\nimport { TheQuickToolbarComponent } from './components/quick-toolbar/quick-toolbar.component';\nimport { TheEditor } from '../../interfaces/editor';\nimport { ElementKinds } from '../../constants/node-types';\nimport { QUICK_TOOLBAR_HOTKEY } from '../../constants/toolbar';\nimport { ToolbarItem } from '../../interfaces/toolbar';\n\nconst OperationTypes = ['insert_text', 'remove_node', 'merge_node'];\n\nexport const QuickInsertEditor = {\n openQuickToolbar(editor: Editor, toolbarItems: ToolbarItem[], origin: HTMLElement | ElementRef) {\n const overlay = editor.injector.get(Overlay);\n const viewContainerRef = editor.injector.get(ViewContainerRef);\n const thyPopover = editor.injector.get(ThyPopover);\n\n const quickToolbarRef = thyPopover.open(TheQuickToolbarComponent, {\n initialState: {\n editor,\n quickToolbarItems: toolbarItems\n },\n origin,\n viewContainerRef: viewContainerRef,\n backdropClosable: true,\n placement: 'bottomLeft',\n offset: 4,\n hasBackdrop: false,\n insideClosable: true,\n panelClass: 'the-quick-toolbar-container',\n scrollStrategy: overlay.scrollStrategies.reposition(),\n manualClosure: true\n });\n THE_EDITOR_QUICK_TOOLBAR_REF.set(editor, quickToolbarRef);\n },\n closeQuickToolbar(editor: Editor) {\n const quickToolbarRef = THE_EDITOR_QUICK_TOOLBAR_REF.get(editor);\n if (quickToolbarRef) {\n quickToolbarRef.close();\n THE_EDITOR_QUICK_TOOLBAR_REF.set(editor, null);\n }\n },\n isOpenToolbar(editor: Editor, opTypes = OperationTypes) {\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 const { undos } = editor.history;\n const lastBatch = undos[undos.length - 1];\n const lastOp = lastBatch && lastBatch[lastBatch.length - 1];\n\n if (\n lastOp &&\n block.children.length === 1 &&\n block.type === ElementKinds.paragraph &&\n Node.string(block) === QUICK_TOOLBAR_HOTKEY &&\n opTypes.includes(lastOp.type) &&\n ((lastOp as InsertTextOperation).text === QUICK_TOOLBAR_HOTKEY || (lastOp as InsertTextOperation).text === undefined)\n ) {\n return true;\n }\n return false;\n }\n};\n","import { Editor, Node, Element } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { TheEditorComponent } from '../../editor.component';\nimport { QUICK_TOOLBAR_HOTKEY } from '../../constants';\nimport { isCleanEmptyParagraph } from '../../utils/is-clean-empty-paragraph';\nimport { QuickInsertEditor } from './quick-insert.editor';\n\nexport const withQuickInsert = (editor: Editor) => {\n const { onKeydown, deleteBackward, onChange } = editor;\n\n editor.onKeydown = (event: KeyboardEvent) => {\n if (event.key === QUICK_TOOLBAR_HOTKEY && isCleanEmptyParagraph(editor)) {\n const rootNode = AngularEditor.toDOMNode(editor, Node.ancestor(editor, [editor.selection.anchor.path[0]]));\n const theEditorComponent = editor.injector.get(TheEditorComponent);\n const quickToolbars = theEditorComponent.quickToolbarItems;\n QuickInsertEditor.openQuickToolbar(editor, quickToolbars, rootNode);\n }\n\n onKeydown(event);\n };\n\n editor.deleteBackward = unit => {\n if (!QuickInsertEditor.isOpenToolbar(editor, ['remove_text'])) {\n QuickInsertEditor.closeQuickToolbar(editor);\n }\n deleteBackward(unit);\n };\n\n editor.onChange = () => {\n onChange();\n\n if (editor.selection) {\n const editorComponent = editor.injector.get(TheEditorComponent);\n editorComponent.quickInsertInstance?.checkStatus();\n\n const block = Node.ancestor(editor, [editor.selection.anchor.path[0]]) as Element;\n if (!isCleanEmptyParagraph(editor) && Node.string(block) !== QUICK_TOOLBAR_HOTKEY) {\n QuickInsertEditor.closeQuickToolbar(editor);\n }\n }\n };\n\n return editor;\n};\n","import isHotkey from 'is-hotkey';\nimport { TransformEditor } from '../common/transforms.plugin';\nimport { SoftBreakOnKeyDownOptions } from './soft-break.types';\nimport { TheEditor } from '../../interfaces/editor';\nimport * as TheQueries from '../../queries';\n\nexport const withSoftBreak =\n (options: SoftBreakOnKeyDownOptions = { rules: [{ hotkey: 'shift+enter' }] }) =>\n <T extends TheEditor & TransformEditor>(editor: T) => {\n const { onKeydown } = editor;\n\n editor.onKeydown = (event: KeyboardEvent) => {\n const { rules } = options;\n const entry = TheQueries.getBlockAbove(editor as any);\n\n rules.forEach(({ hotkey, query }) => {\n if (isHotkey(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","import { Editor } from 'slate';\nimport { TheEditor } from '../../interfaces/editor';\nimport { ElementKinds, FontSizes, MarkTypes, HEADING_TYPES } from '../../constants/node-types';\nimport * as TheQueries from '../../queries';\nimport { TableEditor } from '../table/table.editor';\n\nexport const FontSizeEditor = {\n setFontSize(editor: TheEditor, size: FontSizes) {\n if (TableEditor.toggleMark(editor, false, MarkTypes.fontSize, Number(size))) {\n return;\n }\n Editor.addMark(editor, MarkTypes.fontSize, Number(size));\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 isDisabled(editor: TheEditor) {\n if (editor.selection) {\n const disableGroup = HEADING_TYPES;\n const anchorBlock = TheQueries.anchorBlock(editor);\n return anchorBlock && disableGroup.includes(anchorBlock?.type);\n }\n return false;\n }\n};\n","import { FontSizes, FontSizeTypes, MarkTypes } from '../../constants/node-types';\nimport { ToolbarItem, ToolbarItemType } from '../../interfaces/toolbar';\nimport { FontSizeEditor } from './font-size.editor';\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 FontSizeOptions: ToolbarItem[] = [\n {\n key: MarkTypes.fontSize,\n name: '字号',\n type: ToolbarItemType.toolDropdown,\n dropdownItemKey: FontSizes.fontSize14,\n includes: FontSizeTypes,\n disable: editor => FontSizeEditor.isDisabled(editor)\n },\n ...sizeOptions()\n];\n","import { Editor, Element, Text } from 'slate';\nimport { AngularEditor, ViewType } from 'slate-angular';\nimport * as Types from '../types';\nimport { TheEditor, ThePlugin, ToolbarItem } from '../interfaces';\nimport { ElementKinds, ELEMENT_UNIQUE_ID, HEADING_TYPES } from '../constants';\nimport { idCreator } from '../utils/id-creator';\nimport { autoFormatRules } from '../constants/auto-format-rules';\nimport { withTheHistory } from './common/history.plugin';\nimport { withDeserializeMd } from './deserializers/deserialize-md.plugin';\nimport { withAutoInsertData } from './common/auto-insert-data.';\nimport { withRemoveEmpty } from './common/remove-empty.plugin';\nimport { withResetType } from './common/reset-type.plugin';\nimport { withImage } from './image/image.plugin';\nimport { withIndent } from './indent/indent.plugin';\nimport { withList } from './list/list.plugin';\nimport { withTodoItem } from './todo-item/todo-item.plugin';\nimport { withHr } from './hr/hr.plugin';\nimport { withAlign } from './align/align.plugin';\nimport { withHeading } from './heading/heading.plugin';\nimport { withMark } from './mark/mark.plugin';\nimport { withNodeID } from './node-id/node-id.plugin';\nimport { withAutoFormat } from './autoformat/autoformat.plugin';\nimport { withTransforms } from './common/transforms.plugin';\nimport { withTrailingNode } from './normalizers/trailing-node.plugin';\nimport { withBlockCard } from './common/block-card.plugin';\nimport { withMoveSelection } from './common/move-selection.plugin';\nimport { withGetFragment } from './common/get-fragment.plugin';\nimport { TodoItemOptions } from './todo-item/options';\nimport { MarkOptions } from './mark/options';\nimport { ListOptions } from './list/options';\nimport { ImageOptions } from './image/options';\nimport { HrOptions } from './hr/options';\nimport { HeadingOptions } from './heading/options';\nimport { BlockquoteOptions } from './blockquote/options';\nimport { AlignOptions } from './align/options';\nimport { withBlockquote } from './blockquote/blockquote.plugin';\nimport { HistoryEditor } from 'slate-history';\nimport { ColorOptions } from './color/options';\nimport { withRemoveVoid } from './common/remove-void.plugin';\nimport { CodeOptions } from './code/options';\nimport { withCode } from './code/code.plugin';\nimport { LinkOptions } from './link/options';\nimport { withLink } from './link/link.plugin';\nimport { TableOptions } from './table/options';\nimport { withTable } from './table/table.plugin';\nimport { withInsertParagraphNodes } from './normalizers/insert-paragraph-nodes';\nimport { withDeserializeHMTL } from './deserializers/deserialize-html.plugin';\nimport { VerticalAlignOptions } from './vertical-align/options';\nimport { PaintFormatOptions } from './paint-format/options';\nimport * as TheTransforms from '../transforms';\nimport { withQuickInsert } from './quick-insert/quick-insert.plugint';\nimport { withSoftBreak } from './soft-break/soft-break.plugin';\nimport { FontSizeOptions } from './font-size/options';\n\nconst internalPlugins: ((editor: Editor) => Editor)[] = [\n withTheHistory,\n withAutoInsertData(),\n withRemoveEmpty,\n withRemoveVoid,\n withBlockCard, // should in the front of list、resettype、todo、deserialize-html\n withResetType,\n withIndent([ElementKinds.checkItem, ElementKinds.numberedList, ElementKinds.bulletedList, ElementKinds.paragraph, ...HEADING_TYPES]), // should in the front of list\n withList({ validLiChildrenTypes: [ElementKinds.image] }),\n withLink,\n withTable,\n withTodoItem,\n withHr,\n withAlign,\n withCode,\n withHeading,\n withMark(),\n withSoftBreak({\n rules: [\n { hotkey: 'shift+enter' },\n {\n hotkey: 'enter',\n query: {\n allow: [ElementKinds.blockquote]\n }\n }\n ]\n }),\n withBlockquote,\n withNodeID({ idKey: ELEMENT_UNIQUE_ID, idCreator }),\n withAutoFormat({ rules: autoFormatRules }),\n withTransforms(),\n withTrailingNode({ type: ElementKinds.paragraph, level: 0 }),\n withMoveSelection,\n withInsertParagraphNodes(),\n withGetFragment(),\n withImage, // must be before withDeserializeHMTL\n withDeserializeHMTL,\n withDeserializeMd(),\n withQuickInsert\n];\n\nconst internalToolbarItems: ToolbarItem[] = [\n ...AlignOptions,\n ...MarkOptions,\n ...ColorOptions,\n ...HeadingOptions,\n ...FontSizeOptions,\n ...TodoItemOptions,\n ...ListOptions,\n ...ImageOptions,\n ...HrOptions,\n ...BlockquoteOptions,\n ...CodeOptions,\n ...LinkOptions,\n ...TableOptions,\n ...VerticalAlignOptions,\n ...PaintFormatOptions\n];\n\nexport const toolbarCompose = (toolbarItems: ToolbarItem[] = []) => {\n return [...internalToolbarItems, ...toolbarItems];\n};\n\nexport const withTheEditor = <T extends AngularEditor & HistoryEditor>(plugins: ThePlugin[], editor: T) => {\n const e = editor as T & TheEditor;\n\n e.renderElement = (element: Element): ViewType => null;\n e.renderLeaf = (text: Text): ViewType => null;\n e.insertElement = (element: Element) => TheTransforms.insertElementNext(e, element);\n e.isContainer = (value: Element) => false;\n e.extraElementOptions = [];\n e.disabled = false;\n\n const pluginList = [...internalPlugins, ...plugins];\n\n pluginList.reduce((prevEditor, nextEditor) => nextEditor(prevEditor), e);\n\n return e;\n};\n","import isHotkey from 'is-hotkey';\nimport { Editor } from 'slate';\nimport { 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': MarkTypes.codeLine\n};\nexport const markShortcuts = (editor: Editor, event: KeyboardEvent) => {\n for (const hotkey in HOTKEYS) {\n if (isHotkey(hotkey, event)) {\n event.preventDefault();\n const mark = HOTKEYS[hotkey];\n MarkEditor.toggleMark(editor, mark);\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 { Injectable } from '@angular/core';\nimport { DefaultQuickToolbarDefinition, 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 quick: string[] = DefaultQuickToolbarDefinition\n ): ToolbarInitOption {\n const toolbarDefinition = {\n global,\n inline,\n quick\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 { Editor, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { HistoryEditor } from 'slate-history';\n\nexport const autoFocus = (editor: Editor, isFocus: boolean) => {\n setTimeout(() => {\n if (editor && editor.children.length > 0 && isFocus) {\n HistoryEditor.withoutMerging(editor, () => {\n Transforms.select(editor, Editor.start(editor, [0]));\n AngularEditor.focus(editor);\n });\n }\n });\n};\n","import { Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\n\nexport const getEditableElementHeight = (editor: Editor) => {\n const editable = AngularEditor.toDOMNode(editor, editor);\n return editable.clientHeight;\n};\n","import { Editor } from 'slate';\nimport { getEditableElementHeight } from './get-editable-element-height';\n\nlet previousHeight = 0;\n\n/**\n * reset the sliding distance when the viewport position of the sliding\n * container coincides with the viewport position of the focus element\n */\nexport const autoScrollViewHandle = (editor: Editor, scrollContainer: string) => {\n const currentHeight = getEditableElementHeight(editor);\n const currentNodeElement = window.getSelection().focusNode.parentElement;\n const scrollContainerElement = currentNodeElement.closest(scrollContainer);\n\n // the added sliding distance is the height of the\n // current editing area minus the height of the last editing area\n const scrollHeight = currentHeight - previousHeight;\n\n if (scrollContainerElement && previousHeight !== 0 && scrollHeight > 0) {\n const focusBlockRect = currentNodeElement.getBoundingClientRect();\n const scrollContainerRect = scrollContainerElement.getBoundingClientRect();\n const bottom = scrollContainerRect.bottom - focusBlockRect.bottom;\n if (bottom < 30) {\n scrollContainerElement.scrollTop = scrollContainerElement.scrollTop + scrollHeight;\n }\n }\n previousHeight = currentHeight;\n};\n","import {\n Component,\n Input,\n OnInit,\n ViewChild,\n ViewContainerRef,\n ComponentFactoryResolver,\n OnChanges,\n SimpleChanges,\n ComponentRef,\n ElementRef,\n OnDestroy,\n NgZone,\n Inject,\n TemplateRef\n} from '@angular/core';\nimport { Editor } from 'slate';\nimport { ComponentType } from 'slate-angular';\nimport { ToolbarAlignment, ToolbarItem, ToolbarItemsComposeReturn, ToolbarItemType, ToolbarKey } from '../../interfaces/toolbar';\nimport { TheToolbarGroupToken, ToolbarMoreGroup } from '../../constants/toolbar';\nimport { ElementKinds, FontSizes, MarkTypes, ToolbarActionTypes } from '../../constants/node-types';\nimport { TheToolbarItemComponent } from '../toolbar-item/toolbar-item.component';\nimport { NavSplitLineComponent } from '../nav-split-line/nav-split-line.component';\nimport { TheToolbarDropdownComponent } from '../toolbar-dropdown/toolbar-dropdown.component';\nimport type { TheToolbarGroupComponent } from '../toolbar-group/toolbar-group.component';\n\n@Component({\n selector: 'the-toolbar',\n templateUrl: 'toolbar.component.html',\n host: {\n class: 'the-toolbar-container'\n }\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() fontSize: FontSizes;\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 components: Map<string, ComponentRef<any>> = new Map<string, ComponentRef<any>>();\n moreGroupMenu = ToolbarMoreGroup;\n resizeObserver;\n elementWidth = 0;\n\n constructor(\n private cfr: ComponentFactoryResolver,\n private elementRef: ElementRef,\n private ngZone: NgZone,\n @Inject(TheToolbarGroupToken) private toolbarGroupComponent: ComponentType<TheToolbarGroupComponent>\n ) {}\n\n ngOnInit(): void {\n this.setToolbarClass();\n this.renderToolbarView();\n this.statusChange(this.editor);\n\n if (this.isMore) {\n this.resizeElement();\n }\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 statusChange(editor: Editor) {\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) {\n itemComponent.instance.statusChange(editor);\n }\n }\n }\n }\n\n public renderToolbarView(): void {\n this.components.clear();\n this.toolbarContainer.clear();\n const toolbarItems = this.toolbarItemsCompose();\n const { items, group } = toolbarItems;\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 });\n }\n\n /**\n * calculation display toolbar and more grouped toolbars\n *\n *\t┌──────────────────────────────────────── GoolbarToolbarView ───────────────────────────────────┐\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 * split width: 6px\n * item width: default item: 35px; dropdown item: 50px\n * set aside 50px\n */\n private toolbarItemsCompose(): ToolbarItemsComposeReturn {\n let elementWidth = this.isMore ? this.elementWidth : null;\n const maxItemWidth = 50;\n const defaultItemWidth = 35;\n const splitWidth = 6;\n // special type\n const headingWidth = 70;\n const items: ToolbarItem[] = [];\n const group: ToolbarItem[] = [];\n\n for (const item of this.toolbarItems) {\n if (!this.isMore) {\n items.push(item);\n continue;\n }\n\n // not enough free space\n const allowRender = elementWidth && elementWidth > maxItemWidth;\n if (allowRender && item.key === ToolbarActionTypes.split) {\n items.push(item);\n elementWidth -= splitWidth;\n continue;\n }\n\n if (allowRender) {\n items.push(item);\n } else {\n group.push(item);\n }\n\n if (item.key === ElementKinds.headingList) {\n elementWidth -= headingWidth;\n continue;\n }\n const isCustomComponent = item?.type === ToolbarItemType.toolDropdown || !!item?.iconComponent;\n elementWidth -= isCustomComponent ? maxItemWidth : defaultItemWidth;\n }\n\n return {\n items: this.pureToolbarItems(items),\n group\n };\n }\n\n /**\n * externally designated more group\n */\n private toolbarItemsAndMoreCompose() {\n const items = [];\n const group = [];\n\n for (const item of this.toolbarItems) {\n if (item.key === ToolbarActionTypes.split) {\n items.push(item);\n continue;\n }\n items.push(item);\n }\n\n return {\n items: this.pureToolbarItems(items),\n group\n };\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 dropdownItem = this.getDropdownItem(item);\n const factory = this.cfr.resolveComponentFactory(iconComponent ? iconComponent : viewComponent);\n const compRef = this.toolbarContainer.createComponent(factory);\n\n compRef.instance.editor = this.editor;\n compRef.instance.toolbarItem = item;\n compRef.instance.menus = includes;\n compRef.instance.item = includes && dropdownItem ? dropdownItem : args;\n compRef.instance.mode = dropdownMode;\n this.components.set(item.key, compRef);\n }\n\n private createToolbarSplit() {\n const navSplitLineFactory = this.cfr.resolveComponentFactory(NavSplitLineComponent);\n this.toolbarContainer.createComponent(navSplitLineFactory);\n }\n\n private createMoreGroup(group: ToolbarItem[]) {\n if (group.length > 0) {\n const moreGroupFactory = this.cfr.resolveComponentFactory(this.toolbarGroupComponent);\n const compRef = this.toolbarContainer.createComponent(moreGroupFactory);\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 TheToolbarItemComponent;\n }\n if (type === ToolbarItemType.toolDropdown) {\n return TheToolbarDropdownComponent;\n }\n return TheToolbarItemComponent;\n }\n\n private getDropdownItem(item: ToolbarItem) {\n let dropdownKey: ToolbarKey | string = item?.dropdownItemKey;\n // modify the fontsize option externally\n if (item.key === MarkTypes.fontSize && this.fontSize) {\n dropdownKey = this.fontSize;\n }\n return item?.includes?.find((item: ToolbarItem) => item.key === dropdownKey);\n }\n}\n","<thy-icon-nav [style.justifyContent]=\"align\">\n <ng-container #toolbarContainer></ng-container>\n <ng-content></ng-content>\n <ng-template *ngIf=\"afterTemplate\" [ngTemplateOutlet]=\"afterTemplate\"></ng-template>\n</thy-icon-nav>\n","import {\n Component,\n OnInit,\n OnDestroy,\n ChangeDetectorRef,\n Input,\n ElementRef,\n NgZone,\n ChangeDetectionStrategy,\n ViewChild\n} from '@angular/core';\nimport { ScrollDispatcher } from '@angular/cdk/overlay';\nimport { merge, fromEvent, Subject } from 'rxjs';\nimport { takeUntil, filter, debounceTime } from 'rxjs/operators';\nimport { Range as slateRange, Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport * as TheQueries from '../../queries';\nimport { THE_INLINE_TOOLBAR_TYPES } from '../../constants';\nimport { ToolbarItem } from '../../interfaces';\nimport { TheToolbarComponent } from '../toolbar/toolbar.component';\nimport { TheContextService } from '../../services/context.service';\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})\nexport class TheInlineToolbarComponent implements OnInit, OnDestroy {\n @Input() editor: Editor;\n @Input() toolbarItems: ToolbarItem[];\n @ViewChild('inlineToolbar') inlineToolbar: TheToolbarComponent;\n\n destroy$ = new Subject();\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 this.inlineToolbar?.statusChange(this.editor);\n this.cdr.detectChanges();\n });\n });\n }\n\n updateInlineToolbar() {\n const inlineToolbar = this.elementRef.nativeElement.firstElementChild;\n\n if (!this.editor.selection) {\n inlineToolbar.removeAttribute('style');\n return;\n }\n const anchorBlock = TheQueries.anchorBlock(this.editor);\n if (!inlineToolbar || !anchorBlock) {\n return;\n }\n const { editor } = this;\n const { selection } = editor;\n\n if (\n !selection ||\n !AngularEditor.isFocused(editor) ||\n slateRange.isCollapsed(selection) ||\n Editor.string(editor, selection) === ''\n ) {\n inlineToolbar.removeAttribute('style');\n return;\n }\n\n if (!THE_INLINE_TOOLBAR_TYPES.includes(anchorBlock.type)) {\n return;\n }\n const native = window.getSelection();\n if (native.type !== 'None') {\n const range = native.getRangeAt(0);\n this.updatePosition(inlineToolbar, range);\n }\n }\n\n updatePosition(toolbarElement: HTMLElement, range) {\n let boundary = range.getBoundingClientRect();\n\n if (!boundary || (boundary.height === 0 && boundary.width === 0 && range.startContainer === range.endContainer)) {\n if (range.startContainer.nodeType === 1 && range.startContainer.querySelector('img')) {\n boundary = range.startContainer.querySelector('img').getBoundingClientRect();\n } else {\n boundary = range.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 { Component, ElementRef, Input, HostListener, Renderer2, ChangeDetectorRef, ViewChild } from '@angular/core';\nimport { Editor, Node } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { ToolbarItem } from '../../../interfaces/toolbar';\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 host: {\n class: 'the-quick-insert',\n '[class.hide]': 'isHide'\n }\n})\nexport class TheQuickInsertComponent {\n @Input() editor: Editor;\n @Input() quickToolbarItems: ToolbarItem[];\n\n isHide = true;\n defaultIconName = 'plus-circle-thin';\n iconNameFill = 'plus-circle-thin-fill';\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 constructor(private renderer: Renderer2, private elementRef: ElementRef, private cdr: ChangeDetectorRef) {}\n\n public checkStatus() {\n const { editor } = this;\n if (isCleanEmptyParagraph(editor)) {\n setTimeout(() => {\n const block = Node.ancestor(editor, [editor?.selection?.anchor.path[0]]);\n const rootNode: HTMLElement = AngularEditor.toDOMNode(editor, block);\n this.updatePosition(rootNode.offsetLeft, rootNode.offsetTop);\n });\n return;\n }\n this.isHide = true;\n }\n\n private updatePosition(left: number, top?: number) {\n this.isHide = false;\n this.renderer.setStyle(this.elementRef.nativeElement, 'top', `${top}px`);\n this.renderer.setStyle(this.elementRef.nativeElement, 'left', `${left}px`);\n }\n\n mouseEnter(event: MouseEvent) {\n this.displayIconName = this.iconNameFill;\n this.cdr.markForCheck();\n }\n\n mouseLeave(event: MouseEvent) {\n this.displayIconName = this.defaultIconName;\n this.cdr.markForCheck();\n }\n\n handleClick(event: MouseEvent) {\n event.stopPropagation();\n event.preventDefault();\n QuickInsertEditor.openQuickToolbar(this.editor, this.quickToolbarItems, this.iconElement.nativeElement);\n }\n}\n","<thy-icon\n #iconElement\n [thyIconName]=\"displayIconName\"\n class=\"quick-insert-icon text-desc font-size-xlg\"\n (mouseenter)=\"mouseEnter($event)\"\n (mouseleave)=\"mouseLeave($event)\"\n (mousedown)=\"handleClick($event)\"\n></thy-icon>\n","import { Component, ElementRef, Input, HostListener, Renderer2 } from '@angular/core';\nimport { Editor, Node } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { isCleanEmptyParagraph } from '../../utils/is-clean-empty-paragraph';\nimport { TheContextService } from '../../services/context.service';\nimport * as TheQueries from '../../queries';\nimport { TheOptions } from '../../interfaces/editor';\n\n@Component({\n selector: 'div[thePlaceholder]',\n template: `{{ options?.placeholder }}`,\n host: {\n class: 'the-placeholder',\n '[class.hide]': 'isHide'\n }\n})\nexport class ThePlaceholderComponent {\n @Input() editor: Editor;\n @Input() options: TheOptions;\n\n isHide = true;\n\n @HostListener('document:compositionstart')\n handleCompositionStart() {\n if (this.editor?.selection) {\n this.hide();\n }\n }\n\n @HostListener('document:compositionend', ['$event'])\n handleCompositionEnd(event) {\n if (!event.data) {\n this.checkStatus();\n }\n }\n\n constructor(private renderer: Renderer2, private elementRef: ElementRef, private contextService: TheContextService) {}\n\n public checkStatus() {\n const { editor } = this;\n const isEmptyShow = typeof this.options?.isEmptyShowPlaceholder === 'undefined' ? true : this.options.isEmptyShowPlaceholder;\n const isMustShow = this.options?.isMustShowPlaceholder;\n const isReadonly = this.options?.readonly;\n\n // empty content and no selection processing\n if (!isReadonly && isEmptyShow && TheQueries.isEmptyContent(editor.children)) {\n const firstElementChild = this.contextService.getFirstElementChild();\n const offsetTop = firstElementChild.offsetTop;\n const offsetLeft = firstElementChild.offsetLeft;\n this.updatePosition(offsetLeft, offsetTop);\n return;\n }\n\n if (isMustShow && isCleanEmptyParagraph(editor)) {\n setTimeout(() => {\n const block = Node.ancestor(editor, [editor?.selection?.anchor.path[0]]);\n const rootNode: HTMLElement = AngularEditor.toDOMNode(editor, block);\n this.updatePosition(rootNode.offsetLeft, rootNode.offsetTop);\n });\n return;\n }\n this.isHide = true;\n }\n\n private updatePosition(left: number, top?: number) {\n this.isHide = false;\n this.renderer.setStyle(this.elementRef.nativeElement, 'top', `${top}px`);\n this.renderer.setStyle(this.elementRef.nativeElement, 'left', `${left}px`);\n }\n\n private hide() {\n this.isHide = true;\n }\n}\n","import { Component, ChangeDetectionStrategy, ViewChild, TemplateRef } from '@angular/core';\nimport { Element } from 'slate';\nimport { ElementKinds } from '../../constants';\n\n@Component({\n selector: 'the-template,[theTemplate]',\n templateUrl: 'template.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheTemplateComponent {\n @ViewChild('paragraph', { read: TemplateRef, static: true })\n paragraphTemplate: TemplateRef<any>;\n\n @ViewChild('headingOne', { read: TemplateRef, static: true })\n headingOneTemplate: TemplateRef<any>;\n\n @ViewChild('headingTwo', { read: TemplateRef, static: true })\n headingTwoTemplate: TemplateRef<any>;\n\n @ViewChild('headingThree', { read: TemplateRef, static: true })\n headingThreeTemplate: TemplateRef<any>;\n\n @ViewChild('headingFour', { read: TemplateRef, static: true })\n headingFourTemplate: TemplateRef<any>;\n\n @ViewChild('headingFive', { read: TemplateRef, static: true })\n headingFiveTemplate: TemplateRef<any>;\n\n @ViewChild('headingSix', { read: TemplateRef, static: true })\n headingSixTemplate: TemplateRef<any>;\n\n public renderElement = (element: Element) => {\n if (element.type === ElementKinds.default) {\n return this.paragraphTemplate;\n }\n if (element.type === ElementKinds.heading_1) {\n return this.headingOneTemplate;\n }\n if (element.type === ElementKinds.heading_2) {\n return this.headingTwoTemplate;\n }\n if (element.type === ElementKinds.heading_3) {\n return this.headingThreeTemplate;\n }\n if (element.type === ElementKinds.heading_4) {\n return this.headingFourTemplate;\n }\n if (element.type === ElementKinds.heading_5) {\n return this.headingFiveTemplate;\n }\n if (element.type === ElementKinds.heading_6) {\n return this.headingSixTemplate;\n }\n return null;\n };\n}\n","<ng-template #paragraph let-context=\"context\" let-viewContext=\"viewContext\">\n <div theDefaultElement [context]=\"context\" [viewContext]=\"viewContext\" [ngStyle]=\"context.element | elementStyle\"></div>\n</ng-template>\n<ng-template #headingOne let-context=\"context\" let-viewContext=\"viewContext\">\n <h1\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h1>\n</ng-template>\n<ng-template #headingTwo let-context=\"context\" let-viewContext=\"viewContext\">\n <h2\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h2>\n</ng-template>\n<ng-template #headingThree let-context=\"context\" let-viewContext=\"viewContext\">\n <h3\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h3>\n</ng-template>\n<ng-template #headingFour let-context=\"context\" let-viewContext=\"viewContext\">\n <h4\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h4>\n</ng-template>\n<ng-template #headingFive let-context=\"context\" let-viewContext=\"viewContext\">\n <h5\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h5>\n</ng-template>\n<ng-template #headingSix let-context=\"context\" let-viewContext=\"viewContext\">\n <h6\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h6>\n</ng-template>\n","import {\n OnInit,\n OnDestroy,\n Component,\n Input,\n ViewContainerRef,\n ViewChild,\n ElementRef,\n forwardRef,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n NgZone\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { mixinUnsubscribe, MixinBase } from 'ngx-tethys/core';\nimport isHotkey from 'is-hotkey';\nimport { Editor, Text, Transforms, createEditor, Element, Descendant, Range, Path, NodeEntry } from 'slate';\nimport { withHistory } from 'slate-history';\nimport { AngularEditor, SlateError, withAngular, DOMElement } from 'slate-angular';\nimport { ThePlugin, TheOptions, DomEventDataInfo, TheEditor, TheDataMode, ToolbarEntity } from './interfaces';\nimport { MarkTypes } from './constants';\nimport { withTheEditor, toolbarCompose } from './plugins/index';\nimport { TheTemplateComponent } from './components/template/template.component';\nimport { shortcuts } from './shortcuts';\nimport { TheToolbarComponent } from './components/toolbar/toolbar.component';\nimport { TheToolbarService } from './services/toolbar.service';\nimport { TheContextService } from './services/context.service';\nimport { TheTextComponent } from './components/text/text.component';\nimport { CLIPBOARD_FORMAT_KEY, DEFAULT_SCROLL_CONTAINER } from './constants/default';\nimport { TheColorSelectService } from './services/color-select.service';\nimport * as TheTransforms from './transforms';\nimport * as TheQueries from './queries';\nimport { autoFocus } from './utils/auto-focus';\nimport { autoScrollViewHandle } from './utils/auto-scroll-view';\nimport { _ } from './utils/lodash';\nimport { dataDeserialize, dataSerializing } from './utils/data-transform';\nimport { setEditorUUID } from './utils/editor-uuid';\nimport { idCreator } from './utils/id-creator';\nimport { TheQuickInsertComponent } from './plugins/quick-insert/components/quick-insert.component';\nimport { ThePlaceholderComponent } from './plugins/placeholder/placeholder.component';\nimport { getToolbarClass } from './utils/get-toolbar-class';\n\n@Component({\n selector: 'the-editor, theEditor',\n templateUrl: 'editor.component.html',\n providers: [\n TheToolbarService,\n TheContextService,\n TheColorSelectService,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TheEditorComponent),\n multi: true\n }\n ],\n host: {\n class: 'the-editor',\n '[class.the-editor-readonly]': 'theOptions?.readonly'\n }\n})\nexport class TheEditorComponent extends mixinUnsubscribe(MixinBase) implements OnInit, 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 @ViewChild('templateInstance', { static: true })\n templateInstance: TheTemplateComponent;\n\n @ViewChild('globalToolbar')\n globalToolbarInstance: TheToolbarComponent;\n\n @ViewChild('quickInsert', { static: true })\n quickInsertInstance: TheQuickInsertComponent;\n\n @ViewChild('placeholder')\n placeholderInstance: ThePlaceholderComponent;\n\n _plugins: ThePlugin[] = [];\n\n toolbarEntity: ToolbarEntity;\n\n editor: TheEditor;\n\n editorValue: Descendant[];\n\n globalToolbarClass: string[];\n\n decorate: (nodeEntry: NodeEntry) => Range[];\n\n get theGlobalToolbarInstance(): TheToolbarComponent {\n return this.theGlobalToolbar ? this.theGlobalToolbar : this.globalToolbarInstance;\n }\n\n get maxHeight() {\n return this.theOptions?.maxHeight ? `${this.theOptions?.maxHeight}px` : null;\n }\n\n get quickToolbarItems() {\n return this.toolbarEntity?.quick;\n }\n\n autoScrollView = _.debounce(function (editor: Editor, scrollContainer: string) {\n return autoScrollViewHandle(editor, scrollContainer);\n }, 80);\n\n elementToHtml: WeakMap<Element, string> = new WeakMap();\n\n private onChangeCallback: (_: any) => void = () => {};\n\n private onTouchedCallback: () => void = () => {};\n\n constructor(\n private toolbarService: TheToolbarService,\n private theContextService: TheContextService,\n private viewContainerRef: ViewContainerRef,\n private elementRef: ElementRef,\n private ngZone: NgZone\n ) {\n super();\n }\n\n ngOnInit() {\n this.initialize();\n this.onErrorHandler();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const options = changes.theOptions;\n\n if (options) {\n this.initializeOptions();\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 super.ngOnDestroy();\n }\n\n initialize() {\n this.editor = withTheEditor<TheEditor>(this.thePlugins, withHistory(withAngular(createEditor(), CLIPBOARD_FORMAT_KEY)));\n this.generateDecorate();\n this.editor.disabled = this.theOptions?.disabled;\n this.editor.extraElementOptions = this.theOptions?.extraElementOptions;\n setEditorUUID(this.editor, idCreator());\n this.theContextService.initialize({ nativeElement: this.elementRef.nativeElement, viewContainerRef: this.viewContainerRef });\n this.toolbarCalculate();\n setTimeout(() => {\n this.theEditorCreated.emit(this.editor);\n this.placeholderInstance?.checkStatus();\n this.applyAutoFocus();\n });\n }\n\n initializeOptions() {\n if (!this.theOptions) {\n this.theOptions = {\n readonly: false,\n mode: TheDataMode.html\n };\n }\n if (!this.theOptions.mode) {\n this.theOptions = {\n ...this.theOptions,\n mode: TheDataMode.html\n };\n }\n }\n\n applyAutoFocus() {\n if (!this.theOptions?.disabled && !this.theOptions?.readonly) {\n autoFocus(this.editor, this.theOptions?.autoFocus);\n }\n }\n\n toolbarCalculate() {\n const toolbar = this?.theOptions?.toolbar;\n const toolbarItems = toolbarCompose(toolbar?.toolbarItems);\n const toolbarOption = this.toolbarService.initialize(toolbarItems, toolbar?.global, toolbar?.inline, toolbar?.quick);\n this.globalToolbarClass = ['the-global-toolbar', getToolbarClass(this.editor)];\n this.toolbarEntity = toolbarOption.toolbarEntity;\n\n if (this.theGlobalToolbar) {\n this.theGlobalToolbarInstance.editor = this.editor;\n this.theGlobalToolbarInstance.toolbarItems = toolbarOption.toolbarEntity.global;\n this.theGlobalToolbarInstance.containerClass = this.globalToolbarClass;\n this.theGlobalToolbarInstance.align = toolbar?.align;\n this.theGlobalToolbarInstance.fontSize = this.theOptions?.fontSize;\n this.theGlobalToolbarInstance.setToolbarClass();\n this.theGlobalToolbarInstance.renderToolbarView();\n }\n }\n\n writeValue(value: string | Descendant[]) {\n const data = dataDeserialize(this.theOptions?.mode, value);\n // data-deserialize\n this.editorValue = data;\n }\n\n registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n valueChange(value: Descendant[]) {\n this.theGlobalToolbarInstance?.statusChange(this.editor);\n this.quickInsertInstance?.checkStatus();\n this.placeholderInstance?.checkStatus();\n // auto scroll view\n const scrollContainer = this.theOptions?.scrollContainer;\n const maxHeight = this.theOptions?.maxHeight;\n if (!this.theOptions?.readonly && (scrollContainer || maxHeight)) {\n const container = maxHeight ? DEFAULT_SCROLL_CONTAINER : scrollContainer;\n this.autoScrollView(this.editor, container);\n }\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 serializingValue(value: Descendant[]): string | Descendant[] {\n if (this.theOptions?.mode === TheDataMode.html) {\n let htmlValue = '';\n value.forEach((element: Element) => {\n let elementHtml = this.elementToHtml.get(element);\n if (elementHtml === undefined) {\n // serializing\n elementHtml = dataSerializing(this.theOptions?.mode, [element]) as string;\n htmlValue += elementHtml;\n this.elementToHtml.set(element, elementHtml);\n return;\n }\n htmlValue += elementHtml;\n });\n return htmlValue;\n }\n return value;\n }\n\n 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 template = this.templateInstance.renderElement(element);\n const component = this.editor.renderElement(element);\n return component ? component : template;\n };\n\n renderLeaf = (text: Text) => {\n const leaf = this.editor.renderLeaf(text);\n return leaf ? leaf : null;\n };\n\n renderText = (text: Text) => {\n for (const key in MarkTypes) {\n if (text[MarkTypes[key]]) {\n return TheTextComponent;\n }\n }\n if (text.text.length === 0) {\n return;\n }\n };\n\n 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({\n nativeEvent: event,\n data: {\n key: event.key\n }\n });\n if (isHotkey('mod+s', event)) {\n this.ngZone.run(() => {\n this.theOnSave.emit(this.editorValue);\n });\n event.preventDefault();\n return;\n }\n if (isHotkey('mod+a', event)) {\n this.handleSelectAll();\n }\n AngularEditor.onKeydown(this.editor, event);\n };\n\n mousedown(event: MouseEvent) {\n const editableElement = AngularEditor.toDOMNode(this.editor, this.editor);\n if (event.target === editableElement) {\n const rectEditable = editableElement.getBoundingClientRect();\n const centerX = rectEditable.x + rectEditable.width / 2;\n const relativeElement = document.elementFromPoint(centerX, event.y);\n const relativeBlockCardElement: DOMElement = relativeElement.closest('.slate-block-card');\n if (relativeBlockCardElement) {\n const blockCardEntry = AngularEditor.toSlateCardEntry(this.editor, relativeBlockCardElement.firstElementChild);\n if (blockCardEntry && blockCardEntry[1]) {\n const rootNodePath = blockCardEntry[1].slice(0, 1);\n const rootNode = TheQueries.getNode(this.editor, rootNodePath);\n if (this.editor.isBlockCard(rootNode)) {\n event.preventDefault();\n AngularEditor.moveBlockCard(this.editor, rootNode, { direction: event.x < centerX ? 'left' : 'right' });\n }\n }\n }\n }\n }\n\n handleSelectAll() {\n let node;\n if (!this.editor.selection) {\n TheTransforms.setEndSelection(this.editor);\n }\n const [start, end] = Range.edges(this.editor.selection);\n const selectionRange = Editor.range(this.editor, start, end);\n const containerBlocks = TheQueries.getContainerBlocks(this.editor);\n for (let i = 0; i < containerBlocks.length; i++) {\n [node] = TheQueries.getNodesByType(this.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(this.editor, path);\n if (!Range.equals(nodeRange, selectionRange)) {\n Transforms.select(this.editor, nodeRange);\n break;\n }\n node = null;\n }\n }\n }\n if (!node) {\n Transforms.select(this.editor, []);\n }\n event.preventDefault();\n return;\n }\n\n onClick = (event: MouseEvent) => {\n AngularEditor.onClick(this.editor, event);\n this.theOnDOMEvent.emit({\n nativeEvent: event\n });\n };\n\n onSlaPaste = (event: ClipboardEvent) => {\n this.theOnDOMEvent.emit({\n data: {\n ...this.getTextAndJSON(event.clipboardData)\n },\n nativeEvent: event\n });\n };\n\n onSlaBeforeInput = (\n event: Event & {\n inputType: string;\n data: string | null;\n dataTransfer: DataTransfer | null;\n }\n ) => {\n let data = {\n inputType: event.inputType,\n text: (event.data || event.dataTransfer) as string\n };\n if (event.inputType === 'insertFromPaste') {\n data = {\n ...data,\n ...this.getTextAndJSON((event.data || event.dataTransfer) as DataTransfer)\n };\n }\n this.theOnDOMEvent.emit({\n data,\n nativeEvent: event\n });\n };\n\n onSlaBlur = (event: FocusEvent) => {\n this.theOnDOMEvent.emit({\n nativeEvent: event\n });\n };\n\n onSlaFocus = (event: Event) => {\n this.theOnDOMEvent.emit({\n nativeEvent: event\n });\n };\n\n onSlaCut = (event: ClipboardEvent) => {\n this.theOnDOMEvent.emit({\n nativeEvent: event\n });\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: Event) => {\n event.stopPropagation();\n this.theOnDOMEvent.emit({\n nativeEvent: event\n });\n };\n\n getTextAndJSON(data: DataTransfer) {\n const fragment = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);\n let json = [];\n if (fragment) {\n json = JSON.parse(decodeURIComponent(window.atob(fragment)));\n }\n const text = data.getData('text/plain');\n return {\n json,\n text\n };\n }\n}\n","<the-toolbar\n *ngIf=\"!theOptions?.readonly && !theGlobalToolbar\"\n [ngClass]=\"{\n 'the-toolbar-disabled': theOptions?.disabled\n }\"\n #globalToolbar\n [editor]=\"editor\"\n [toolbarItems]=\"toolbarEntity.global\"\n [containerClass]=\"globalToolbarClass\"\n [align]=\"theOptions?.toolbar?.align\"\n [fontSize]=\"theOptions?.fontSize\"\n></the-toolbar>\n\n<div\n class=\"the-editable-container\"\n [ngClass]=\"{\n 'the-editor-disabled': theOptions?.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 (ngModelChange)=\"valueChange($event)\"\n [decorate]=\"decorate\"\n [renderElement]=\"renderElement\"\n [renderText]=\"renderText\"\n [renderLeaf]=\"renderLeaf\"\n [readonly]=\"theOptions?.readonly || theOptions?.disabled\"\n [keydown]=\"onKeyDown\"\n [click]=\"onClick\"\n [paste]=\"onSlaPaste\"\n [beforeInput]=\"onSlaBeforeInput\"\n [blur]=\"onSlaBlur\"\n [focus]=\"onSlaFocus\"\n [copy]=\"onSlaCopy\"\n [cut]=\"onSlaCut\"\n [isStrictDecorate]=\"false\"\n [compositionStart]=\"onSlaCompositionStart\"\n [compositionEnd]=\"onSlaCompositionEnd\"\n [dragStart]=\"onSlaDragStart\"\n [dragOver]=\"onSlaDragOver\"\n [drop]=\"onDrop\"\n (mousedown)=\"mousedown($event)\"\n ></slate-editable>\n <the-inline-toolbar *ngIf=\"!theOptions?.readonly\" [editor]=\"editor\" [toolbarItems]=\"toolbarEntity.inline\"></the-inline-toolbar>\n <div #quickInsert theQuickInsert [editor]=\"editor\" [quickToolbarItems]=\"quickToolbarItems\"></div>\n <div #placeholder thePlaceholder [editor]=\"editor\" [options]=\"theOptions\"></div>\n <the-template #templateInstance></the-template>\n</div>\n","import { NgModule } from '@angular/core';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { TheColumnResizeOverlayHandleComponent } from './overlay-handle.component';\nimport { TheColumnResizeDirective } from './column-resize.directive';\n\nconst ENTRY_COMMON_COMPONENTS = [TheColumnResizeOverlayHandleComponent];\nconst DIRECTIVES = [TheColumnResizeDirective];\n\n@NgModule({\n declarations: ENTRY_COMMON_COMPONENTS,\n exports: ENTRY_COMMON_COMPONENTS,\n entryComponents: ENTRY_COMMON_COMPONENTS\n})\nexport class TheColumnResizeCommonModule {}\n\n@NgModule({\n imports: [OverlayModule, TheColumnResizeCommonModule],\n declarations: DIRECTIVES,\n exports: DIRECTIVES\n})\nexport class TheColumnSizeModule {}\n","import { Component, OnInit, ElementRef, Input, ViewChild, TemplateRef, ViewContainerRef, OnDestroy, HostListener } from '@angular/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor } from 'slate';\nimport { DefaultToolbarItem } from '../../interfaces';\n\n@Component({\n selector: 'the-toolbar-group',\n templateUrl: './toolbar-group.component.html',\n host: {\n class: 'the-toolbar-group'\n }\n})\nexport class TheToolbarGroupComponent implements OnInit, OnDestroy {\n private _item: DefaultToolbarItem;\n\n @Input() menus: DefaultToolbarItem[];\n\n @Input()\n set item(i: DefaultToolbarItem) {\n this._item = i;\n this.activeMenu = i;\n }\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 active = false;\n activeMenu: DefaultToolbarItem;\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('click', ['$event'])\n clickHandle(event) {\n event.stopPropagation();\n }\n\n constructor(public elementRef: ElementRef, private thyPopover: ThyPopover, private viewContainerRef: ViewContainerRef) {}\n\n ngOnInit() {}\n\n ngOnDestroy(): void {\n this.colseGroup();\n }\n\n toggleGroupMenus(event: MouseEvent) {\n if (this.editor?.disabled) {\n return;\n }\n if (this.isOpened) {\n this.colseGroup();\n } else {\n this.openGroup(event);\n }\n }\n\n public statusChange(editor: Editor) {\n const activeItem = this.menusActive(editor);\n this.activeMenu = activeItem ? activeItem : null;\n this.activeChange();\n this.colseGroup();\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: 10,\n placement: 'bottomRight',\n origin: event.currentTarget as HTMLElement,\n viewContainerRef: this.viewContainerRef,\n hasBackdrop: false,\n outsideClosable: true\n });\n this.groupPopoverRef.afterClosed().subscribe(() => {\n this.activeChange();\n });\n }\n\n colseGroup() {\n if (this.isOpened) {\n this.groupPopoverRef.close();\n }\n }\n}\n","<a thyIconNavLink [thyIconNavLinkIcon]=\"item.icon\" [thyTooltip]=\"item?.name\" thyTooltipPlacement=\"top\" [thyIconNavLinkActive]=\"active\"></a>\n\n<ng-template #groupTemplate>\n <the-toolbar class=\"group\" [editor]=\"editor\" [toolbarItems]=\"menus\" [isMore]=\"false\"></the-toolbar>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { SlateModule } from 'slate-angular';\nimport { TheTextComponent } from './components/text/text.component';\nimport { TheDefaultElementComponent } from './components/element/element.component';\nimport { TheEditorComponent } from './editor.component';\nimport { TheImageComponent } from './plugins/image/image.component';\nimport { TheToolbarComponent } from './components/toolbar/toolbar.component';\nimport { TheToolbarDropdownComponent } from './components/toolbar-dropdown/toolbar-dropdown.component';\nimport { TheToolbarItemComponent } from './components/toolbar-item/toolbar-item.component';\nimport { NavSplitLineComponent } from './components/nav-split-line/nav-split-line.component';\nimport { TheTemplateComponent } from './components/template/template.component';\nimport { TheHrComponent } from './plugins/hr/hr.component';\nimport { TheBlockquoteComponent } from './plugins/blockquote/blockquote.component';\nimport { TheTodoItemComponent } from './plugins/todo-item/todo-item.component';\nimport { TheListItemComponent } from './plugins/list/components/list-item.component';\nimport { TheBulletedListComponent } from './plugins/list/components/bulleted-list.component';\nimport { TheNumberedListComponent } from './plugins/list/components/numbered-list.component';\nimport { ElementStylePipe, ElementClassPipe } from './pipes';\n\nimport { ThyNavModule } from 'ngx-tethys/nav';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyProgressModule } from 'ngx-tethys/progress';\nimport { ThyFormModule } from 'ngx-tethys/form';\nimport { ThyTooltipModule } from 'ngx-tethys/tooltip';\nimport { ThyAutocompleteModule } from 'ngx-tethys/autocomplete';\nimport { ThyAvatarModule } from 'ngx-tethys/avatar';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyListModule } from 'ngx-tethys/list';\nimport { ThyActionMenuModule } from 'ngx-tethys/action-menu';\nimport { ThyInputModule } from 'ngx-tethys/input';\nimport { ThySelectModule } from 'ngx-tethys/select';\nimport { ThyButtonModule } from 'ngx-tethys/button';\nimport { ThyNotifyModule } from 'ngx-tethys/notify';\nimport { ThyAlertModule } from 'ngx-tethys/alert';\nimport { TheColorSelectComponent } from './components/color-select/color-select.component';\nimport { TheColorToolbarItemComponent } from './plugins/color/toolbar-item.component';\nimport { TheCodeComponent } from './plugins/code/code.component';\nimport { CodemirrorModule } from 'ng-codemirror';\nimport { TheLinkComponent, TheReadonlyLinkComponent } from './plugins/link/link.component';\nimport { TheLinkEditComponent } from './plugins/link/edit/link-edit.component';\nimport { TheLinkHoverComponent } from './plugins/link/hover/link-hover.component';\nimport { TheTableToolbarComponent } from './plugins/table/components/toolbar/table-toolbar.component';\nimport { TheTableComponent } from './plugins/table/components/table.component';\nimport { TheTableRowComponent } from './plugins/table/components/row/row.component';\nimport { TheTdComponent } from './plugins/table/components/td/td.component';\nimport { TheContextMenuComponent } from './components/contextmenu/contextmenu.component';\nimport { TheColumnSizeModule } from './components/column-resize/column-resize.module';\nimport { TheInsertMarkComponent } from './plugins/table/components/insert-mark/insert-mark.component';\nimport { TheToolbarGroupComponent } from './components/toolbar-group/toolbar-group.component';\nimport { TheToolbarGroupToken } from './constants/toolbar';\nimport { TheTableSelectComponent } from './components/table-select/table-select.component';\nimport { TheTableToolbarItemComponent } from './plugins/table/toolbar-item.component';\nimport { TheConversionHintComponent } from './components/conversion-hint/conversion-hint.component';\nimport { TheVerticalToolbarItemComponent } from './plugins/vertical-align/toolbar-item.component';\nimport { THE_CODE_MODE_PROVIDER } from './constants';\nimport { TheInlineToolbarComponent } from './components/inline-toolbar/inline-toolbar.component';\nimport { TheQuickToolbarComponent } from './plugins/quick-insert/components/quick-toolbar/quick-toolbar.component';\nimport { TheQuickInsertComponent } from './plugins/quick-insert/components/quick-insert.component';\nimport { ThePlaceholderComponent } from './plugins/placeholder/placeholder.component';\nimport { ThyResizableModule } from 'ngx-tethys/resizable';\nimport { ThySwitchModule } from 'ngx-tethys/switch';\n\nconst TETHYS = [\n ThyIconModule,\n ThyAvatarModule,\n ThyNavModule,\n ThyFormModule,\n ThySharedModule,\n ThyListModule,\n ThyTooltipModule,\n ThyProgressModule,\n ThyAutocompleteModule,\n ThyActionMenuModule,\n ThyInputModule,\n ThySelectModule,\n ThyButtonModule,\n ThyNotifyModule,\n ThyAlertModule,\n ThyResizableModule,\n ThySwitchModule\n];\n\nexport const COMPONENTS = [\n TheToolbarComponent,\n TheToolbarDropdownComponent,\n TheToolbarGroupComponent,\n TheToolbarItemComponent,\n TheInlineToolbarComponent,\n NavSplitLineComponent,\n TheTextComponent,\n TheDefaultElementComponent,\n TheQuickInsertComponent,\n TheQuickToolbarComponent,\n TheColorSelectComponent,\n TheColorToolbarItemComponent,\n TheContextMenuComponent,\n TheInsertMarkComponent,\n TheTableSelectComponent,\n TheTableToolbarItemComponent,\n TheConversionHintComponent,\n TheVerticalToolbarItemComponent\n];\n\nexport const PLUGIN_COMPONENTS = [\n TheImageComponent,\n TheTemplateComponent,\n TheHrComponent,\n TheBlockquoteComponent,\n TheTodoItemComponent,\n TheListItemComponent,\n TheBulletedListComponent,\n TheNumberedListComponent,\n TheCodeComponent,\n TheLinkComponent,\n TheReadonlyLinkComponent,\n TheLinkEditComponent,\n TheLinkHoverComponent,\n TheTableToolbarComponent,\n TheTableComponent,\n TheTableRowComponent,\n TheTdComponent,\n ThePlaceholderComponent\n];\n\nconst PIPES = [ElementStylePipe, ElementClassPipe];\n\n@NgModule({\n declarations: [TheEditorComponent, ...PIPES, ...COMPONENTS, ...PLUGIN_COMPONENTS],\n imports: [CommonModule, SlateModule, FormsModule, ...TETHYS, CodemirrorModule, TheColumnSizeModule],\n exports: [TheEditorComponent, TheToolbarComponent, TheToolbarDropdownComponent, TheToolbarItemComponent, TheDefaultElementComponent],\n entryComponents: [...COMPONENTS, ...PLUGIN_COMPONENTS],\n providers: [\n {\n provide: TheToolbarGroupToken,\n useValue: TheToolbarGroupComponent\n },\n THE_CODE_MODE_PROVIDER\n ]\n})\nexport class TheEditorModule {}\n","/*\n * Public API Surface of editor\n */\nexport * from './editor.module';\nexport * from './interfaces';\nexport * from './constants';\nexport * from './plugins';\nexport * from './plugins/public-api';\nexport * from './custom-types';\nexport * from './plugins/image/image.component';\nexport * from './services/toolbar.service';\nexport * from './editor.component';\nexport * from './components/toolbar/toolbar.component';\nexport * from './components/toolbar-base-item/toolbar-base-item.component';\nexport * from './components/toolbar-dropdown/toolbar-dropdown.component';\nexport * from './components/toolbar-group/toolbar-group.component';\nexport * from './components/toolbar-item/toolbar-item.component';\nexport * from './components/element/element.component';\nexport * as TheQueries from './queries/index';\nexport * as TheTransforms from './transforms/index';\nexport * from './utils/index';\nexport * from './services/context.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Element","getLastChild","TheQueries.anchorBlockEntry","TheQueries.isEmptyParagraph","TheQueries.findPath","TheQueries.isNodeTypeIn","TheQueries.getNode","TheQueries.isNodeType","TheQueries.isAncestor","TheQueries.getAboveByType","TheQueries.getNodesByType","TheQueries.anchorBlock","TheTransforms.unwrapNodesByType","TheQueries.isParagraph","TheQueries.isBlockActive","TheTransforms.closeConversionHint","TheQueries.isAcrossBlocks","TheTransforms.splitNode","isEmptyParagraph","anchorBlock","anchorBlockEntry","TheQueries.isAncestorEmpty","TheQueries.isCollapsed","TheQueries.getParent","TheQueries.isStart","TheQueries.isRangeAtRoot","TheQueries.isBlockTextEmptyAfterSelection","TheQueries.getLastChildPath","TheTransforms.moveChildren","TheQueries.findDescendant","TheQueries.isFirstChild","TheQueries.isBlockAboveEmpty","TheTransforms.onKeyDownResetBlockType","getPlainText","TheQueries.getPreviousPath","TheTransforms.setNode","TheQueries.getAnchorBlockEntry","TheQueries.isDescendant","TheTransforms.mergeDeepToNodes","TheQueries.getPointBefore","TheQueries.getText","TheQueries.getRangeFromBlockStart","TheQueries.someNode","TheQueries.getRangeBefore","TheQueries.getBlockAbove","TheQueries.getLastNode","TheTransforms.insertParagraph","TheQueries.isEmptyParagraphByPath","TheQueries.getBlockCardAbove","TheQueries.getContainerBlocks","TheQueries.getSelectionNodesByType","TableOptions","TheTransforms.insertElement","TheTransforms.setMarks","TheTransforms.handleContinualDeleteBackward","TheTransforms.handleContinualInsertBreak","TheQueries.getAbove","TheTransforms.deleteElement","SlateNode","index","TheQueries.getSelectionMarks","TheTransforms.insertElementNext","slateRange","TheQueries.isEmptyContent","TheTransforms.setEndSelection"],"mappings":"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"}
|