@worktile/theia 15.3.2 → 16.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/contextmenu/contextmenu.component.d.ts +1 -1
- package/components/conversion-hint/conversion-hint.component.d.ts +3 -3
- package/components/inline-toolbar/inline-toolbar.component.d.ts +3 -4
- package/components/listbox/listbox.d.ts +3 -3
- package/components/plugin-menu/plugin-menu.component.d.ts +4 -3
- package/components/table-select/table-select.component.d.ts +1 -1
- package/components/template/template.component.d.ts +2 -2
- package/components/toolbar/toolbar.component.d.ts +4 -4
- package/components/toolbar-dropdown/toolbar-dropdown.component.d.ts +2 -2
- package/components/toolbar-group/toolbar-group.component.d.ts +5 -6
- package/constants/default.d.ts +1 -1
- package/core/toolbar-item/base-toolbar-item.d.ts +6 -7
- package/core/utils/plugin-menu.d.ts +2 -2
- package/editor.component.d.ts +1 -1
- package/editor.module.d.ts +1 -1
- package/{esm2020 → esm2022}/components/action/prevent-default.mjs +4 -4
- package/{esm2020 → esm2022}/components/column-resize/column-resize-notifier.mjs +4 -4
- package/{esm2020 → esm2022}/components/column-resize/column-resize.directive.mjs +4 -4
- package/{esm2020 → esm2022}/components/column-resize/column-resize.module.mjs +9 -9
- package/{esm2020 → esm2022}/components/column-resize/event-dispatcher.mjs +4 -4
- package/{esm2020 → esm2022}/components/column-resize/overlay-handle.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/column-resize/resizing.store.mjs +4 -4
- package/{esm2020 → esm2022}/components/contextmenu/contextmenu.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/conversion-hint/conversion-hint.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/element/element.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/inline-toolbar/inline-toolbar.component.mjs +6 -6
- package/esm2022/components/listbox/listbox.mjs +375 -0
- package/esm2022/components/plugin-menu/plugin-menu.component.mjs +191 -0
- package/{esm2020 → esm2022}/components/table-select/table-select.component.mjs +4 -4
- package/esm2022/components/template/template.component.mjs +62 -0
- package/{esm2020 → esm2022}/components/text/text.component.mjs +4 -4
- package/esm2022/components/toolbar/toolbar.component.mjs +266 -0
- package/esm2022/components/toolbar-dropdown/toolbar-dropdown.component.mjs +144 -0
- package/esm2022/components/toolbar-group/toolbar-group.component.mjs +122 -0
- package/{esm2020 → esm2022}/components/toolbar-item/toolbar-item.component.mjs +6 -6
- package/esm2022/constants/auto-format-rules.mjs +167 -0
- package/{esm2020 → esm2022}/constants/default.mjs +2 -2
- package/esm2022/constants/plugin-menu.mjs +328 -0
- package/esm2022/core/toolbar-item/base-toolbar-item.mjs +87 -0
- package/{esm2020 → esm2022}/core/utils/combine-plugins.mjs +1 -1
- package/esm2022/core/utils/plugin-menu.mjs +33 -0
- package/esm2022/custom-types.mjs +2 -0
- package/{esm2020 → esm2022}/editor.component.mjs +11 -11
- package/esm2022/editor.module.mjs +254 -0
- package/esm2022/interfaces/auto-format.mjs +2 -0
- package/esm2022/interfaces/editor.mjs +25 -0
- package/esm2022/interfaces/plugins/plugin-menu.mjs +19 -0
- package/esm2022/interfaces/plugins/with-override.mjs +2 -0
- package/esm2022/interfaces/reset-block-type-plugin-options.mjs +2 -0
- package/esm2022/interfaces/toolbar.mjs +12 -0
- package/{esm2020 → esm2022}/interfaces/view-base.mjs +4 -4
- package/esm2022/pipes.mjs +42 -0
- package/esm2022/plugins/align/align.editor.mjs +43 -0
- package/esm2022/plugins/align/align.plugin.mjs +64 -0
- package/{esm2020 → esm2022}/plugins/autoformat/autoformat.plugin.mjs +1 -1
- package/esm2022/plugins/autoformat/transforms/auto-format-block.mjs +14 -0
- package/esm2022/plugins/autoformat/transforms/auto-format-inline.mjs +78 -0
- package/esm2022/plugins/blockquote/blockquote.component.mjs +21 -0
- package/esm2022/plugins/blockquote/blockquote.editor.mjs +17 -0
- package/esm2022/plugins/blockquote/blockquote.plugin.mjs +85 -0
- package/{esm2020 → esm2022}/plugins/code/code.component.mjs +4 -4
- package/esm2022/plugins/code/code.editor.mjs +48 -0
- package/{esm2020 → esm2022}/plugins/code/code.plugin.mjs +1 -1
- package/esm2022/plugins/color/color.editor.mjs +27 -0
- package/{esm2020 → esm2022}/plugins/color/toolbar-item.component.mjs +4 -4
- package/{esm2020 → esm2022}/plugins/common/block-card.plugin.mjs +1 -1
- package/{esm2020 → esm2022}/plugins/common/common.plugin.mjs +1 -1
- package/{esm2020 → esm2022}/plugins/common/get-fragment.plugin.mjs +1 -1
- package/esm2022/plugins/common/history.plugin.mjs +31 -0
- package/{esm2020 → esm2022}/plugins/common/insert-data-by-invalid-type.mjs +1 -1
- package/{esm2020 → esm2022}/plugins/common/move-selection.plugin.mjs +1 -1
- package/{esm2020 → esm2022}/plugins/common/remove-empty.plugin.mjs +1 -1
- package/{esm2020 → esm2022}/plugins/common/remove-void.plugin.mjs +1 -1
- package/{esm2020 → esm2022}/plugins/common/reset-type.plugin.mjs +1 -1
- package/esm2022/plugins/common/transforms.plugin.mjs +18 -0
- package/esm2022/plugins/deserialize/deserialize-html.plugin.mjs +53 -0
- package/esm2022/plugins/deserialize/deserialize-md.plugin.mjs +130 -0
- package/esm2022/plugins/font-size/font-size.editor.mjs +98 -0
- package/esm2022/plugins/heading/heading.editor.mjs +54 -0
- package/esm2022/plugins/heading/heading.plugin.mjs +136 -0
- package/{esm2020 → esm2022}/plugins/hr/hr.component.mjs +6 -6
- package/esm2022/plugins/hr/hr.editor.mjs +16 -0
- package/esm2022/plugins/hr/hr.plugin.mjs +56 -0
- package/esm2022/plugins/image/image.component.mjs +420 -0
- package/esm2022/plugins/image/image.editor.mjs +81 -0
- package/esm2022/plugins/indent/indent.editor.mjs +78 -0
- package/{esm2020 → esm2022}/plugins/indent/indent.plugin.mjs +1 -1
- package/esm2022/plugins/indent/on-keydown-indent.mjs +59 -0
- package/esm2022/plugins/inline-code/inline-code.component.mjs +26 -0
- package/esm2022/plugins/inline-code/inline-code.editor.mjs +48 -0
- package/esm2022/plugins/inline-code/inline-code.plugin.mjs +66 -0
- package/esm2022/plugins/link/edit/link-edit.component.mjs +103 -0
- package/{esm2020 → esm2022}/plugins/link/hover/link-hover.component.mjs +4 -4
- package/esm2022/plugins/link/link.component.mjs +167 -0
- package/esm2022/plugins/link/link.editor.mjs +66 -0
- package/{esm2020 → esm2022}/plugins/link/link.plugin.mjs +1 -1
- package/esm2022/plugins/list/components/bulleted-list.component.mjs +33 -0
- package/esm2022/plugins/list/components/list-item.component.mjs +93 -0
- package/esm2022/plugins/list/components/numbered-list.component.mjs +39 -0
- package/esm2022/plugins/list/list.editor.mjs +126 -0
- package/esm2022/plugins/list/list.plugin.mjs +312 -0
- package/esm2022/plugins/list/normalizers/get-list-normalizer.mjs +39 -0
- package/esm2022/plugins/list/normalizers/normalize-list-item.mjs +18 -0
- package/esm2022/plugins/list/normalizers/normalize-no.mjs +43 -0
- package/esm2022/plugins/list/on-key-down-list.mjs +33 -0
- package/esm2022/plugins/list/queries/get-list-item-entry.mjs +28 -0
- package/esm2022/plugins/list/queries/get-start-list-item.mjs +27 -0
- package/esm2022/plugins/list/queries/has-list-in-list-item.mjs +27 -0
- package/esm2022/plugins/list/queries/is-in-list.mjs +6 -0
- package/esm2022/plugins/list/queries/is-list-nested.mjs +10 -0
- package/esm2022/plugins/list/queries/is-list.mjs +5 -0
- package/{esm2020 → esm2022}/plugins/list/queries/is-node-type-list.mjs +1 -1
- package/esm2022/plugins/list/queries/is-selection-at-list-item-start.mjs +13 -0
- package/esm2022/plugins/list/queries/is-selection-in-same-list-item.mjs +17 -0
- package/{esm2020 → esm2022}/plugins/list/queries/is-single-list-item.mjs +1 -1
- package/esm2022/plugins/list/transforms/insert-list-data.mjs +72 -0
- package/esm2022/plugins/list/transforms/insert-list-item.mjs +72 -0
- package/esm2022/plugins/list/transforms/move-list-item-down.mjs +41 -0
- package/esm2022/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.mjs +43 -0
- package/esm2022/plugins/list/transforms/move-list-item-sublist-items-to-list.mjs +30 -0
- package/esm2022/plugins/list/transforms/move-list-item-up.mjs +78 -0
- package/esm2022/plugins/list/transforms/unwrap-list.mjs +10 -0
- package/esm2022/plugins/mark/mark.editor.mjs +28 -0
- package/{esm2020 → esm2022}/plugins/mark/mark.plugin.mjs +1 -1
- package/{esm2020 → esm2022}/plugins/mention/mention.editor.mjs +1 -1
- package/esm2022/plugins/mention/mention.plugin.mjs +91 -0
- package/{esm2020 → esm2022}/plugins/mention/suggestion.component.mjs +4 -4
- package/{esm2020 → esm2022}/plugins/node-id/node-id.plugin.mjs +1 -1
- package/{esm2020 → esm2022}/plugins/normalizers/insert-paragraph-nodes.mjs +1 -1
- package/esm2022/plugins/normalizers/remove-empty-nodes.mjs +18 -0
- package/{esm2020 → esm2022}/plugins/normalizers/trailing-node.plugin.mjs +1 -1
- package/{esm2020 → esm2022}/plugins/paint-format/paint-format.editor.mjs +1 -1
- package/{esm2020 → esm2022}/plugins/quick-insert/components/quick-insert.component.mjs +4 -4
- package/esm2022/plugins/quick-insert/quick-insert.editor.mjs +68 -0
- package/esm2022/plugins/quick-insert/quick-insert.plugin.mjs +104 -0
- package/esm2022/plugins/table/components/insert-mark/insert-mark.component.mjs +104 -0
- package/{esm2020 → esm2022}/plugins/table/components/row/row.component.mjs +6 -6
- package/{esm2020 → esm2022}/plugins/table/components/table.component.mjs +16 -16
- package/{esm2020 → esm2022}/plugins/table/components/td/td.component.mjs +4 -4
- package/{esm2020 → esm2022}/plugins/table/components/toolbar/table-options.component.mjs +6 -6
- package/esm2022/plugins/table/components/toolbar/table-toolbar.component.mjs +189 -0
- package/esm2022/plugins/table/table.editor.mjs +209 -0
- package/{esm2020 → esm2022}/plugins/table/table.pipe.mjs +7 -7
- package/esm2022/plugins/table/table.plugin.mjs +544 -0
- package/{esm2020 → esm2022}/plugins/table/table.service.mjs +4 -4
- package/esm2022/plugins/table/table.store.mjs +426 -0
- package/esm2022/plugins/table/table.types.mjs +60 -0
- package/{esm2020 → esm2022}/plugins/table/toolbar-item.component.mjs +6 -6
- package/esm2022/plugins/table/transforms/clear-cell.mjs +14 -0
- package/esm2022/plugins/table/transforms/clear-table-node.mjs +27 -0
- package/esm2022/plugins/table/transforms/insert-column.mjs +69 -0
- package/esm2022/plugins/table/transforms/insert-row.mjs +50 -0
- package/esm2022/plugins/table/transforms/insert-table.mjs +15 -0
- package/esm2022/plugins/table/transforms/remove-column.mjs +51 -0
- package/esm2022/plugins/table/transforms/remove-row.mjs +48 -0
- package/esm2022/plugins/table/transforms/remove-table.mjs +49 -0
- package/esm2022/plugins/table/utils/calc-anchor-position.mjs +25 -0
- package/esm2022/plugins/table/utils/cell-position.mjs +60 -0
- package/esm2022/plugins/table/utils/create-table-position.mjs +10 -0
- package/esm2022/plugins/table/utils/get-min-max-cell-index.mjs +69 -0
- package/esm2022/plugins/table/utils/get-select-cell-node.mjs +23 -0
- package/esm2022/plugins/table/utils/handle-cell.mjs +25 -0
- package/esm2022/plugins/table/utils/is-range-in-table.mjs +16 -0
- package/esm2022/plugins/table/utils/is-selection-in-table.mjs +51 -0
- package/esm2022/plugins/table/utils/merge-cell.mjs +108 -0
- package/esm2022/plugins/table/utils/set-menu-cell-invisibility.mjs +45 -0
- package/esm2022/plugins/table/utils/split-cell.mjs +29 -0
- package/esm2022/plugins/table/utils/table-entry.mjs +21 -0
- package/{esm2020 → esm2022}/plugins/todo-item/todo-item.component.mjs +7 -7
- package/esm2022/plugins/todo-item/todo-item.editor.mjs +32 -0
- package/esm2022/plugins/todo-item/todo-item.plugin.mjs +93 -0
- package/esm2022/plugins/vertical-align/toolbar-item.component.mjs +83 -0
- package/esm2022/queries/anchor-block-entry.mjs +13 -0
- package/esm2022/queries/anchor-block.mjs +6 -0
- package/esm2022/queries/anchor-inline-entry.mjs +10 -0
- package/{esm2020 → esm2022}/queries/find-descendant.mjs +1 -1
- package/esm2022/queries/find-node.mjs +45 -0
- package/esm2022/queries/get-above-by-type.mjs +14 -0
- package/esm2022/queries/get-above.mjs +9 -0
- package/esm2022/queries/get-anchor-block-entry.mjs +8 -0
- package/esm2022/queries/get-block-above.mjs +10 -0
- package/esm2022/queries/get-block-card-above.mjs +10 -0
- package/esm2022/queries/get-block-card-cursor.mjs +5 -0
- package/esm2022/queries/get-container-blocks.mjs +12 -0
- package/esm2022/queries/get-insert-elements-path.mjs +44 -0
- package/{esm2020 → esm2022}/queries/get-last-node.mjs +1 -1
- package/esm2022/queries/get-node.mjs +10 -0
- package/esm2022/queries/get-nodes-by-type.mjs +15 -0
- package/esm2022/queries/get-nodes.mjs +7 -0
- package/esm2022/queries/get-parent.mjs +12 -0
- package/esm2022/queries/get-plain-text.mjs +16 -0
- package/esm2022/queries/get-plugin-by-toolbar.mjs +13 -0
- package/{esm2020 → esm2022}/queries/get-point-before.mjs +1 -1
- package/esm2022/queries/get-point-from-location.mjs +15 -0
- package/esm2022/queries/get-rang-from-block-start.mjs +16 -0
- package/esm2022/queries/get-range-before.mjs +17 -0
- package/{esm2020 → esm2022}/queries/get-selection-marks.mjs +1 -1
- package/esm2022/queries/get-selection-nodes-by-type.mjs +30 -0
- package/esm2022/queries/get-text.mjs +9 -0
- package/esm2022/queries/get-toolbar-disabled.mjs +13 -0
- package/esm2022/queries/is-across-blocks.mjs +7 -0
- package/esm2022/queries/is-ancestor-empty.mjs +6 -0
- package/esm2022/queries/is-block-above-empty.mjs +11 -0
- package/esm2022/queries/is-block-active.mjs +8 -0
- package/esm2022/queries/is-block-card-cursor.mjs +4 -0
- package/{esm2020 → esm2022}/queries/is-block-text-empty-after-selection.mjs +1 -1
- package/esm2022/queries/is-contain-nested-type.mjs +29 -0
- package/esm2022/queries/is-container-type.mjs +3 -0
- package/esm2022/queries/is-empty-content-filter.mjs +23 -0
- package/{esm2020 → esm2022}/queries/is-empty-content.mjs +1 -1
- package/esm2022/queries/is-empty-paragraph-by-path.mjs +7 -0
- package/esm2022/queries/is-empty-paragraph.mjs +28 -0
- package/esm2022/queries/is-global-collapsed.mjs +5 -0
- package/esm2022/queries/is-include-types.mjs +12 -0
- package/esm2022/queries/is-node-type-in.mjs +9 -0
- package/esm2022/queries/is-node-type.mjs +15 -0
- package/esm2022/queries/is-paragraph.mjs +9 -0
- package/esm2022/queries/is-range-across-blocks.mjs +22 -0
- package/esm2022/queries/is-start.mjs +6 -0
- package/esm2022/queries/some-node.mjs +9 -0
- package/{esm2020 → esm2022}/services/context.service.mjs +4 -4
- package/{esm2020 → esm2022}/services/table-contextmenu.service.mjs +4 -4
- package/{esm2020 → esm2022}/services/toolbar.service.mjs +4 -4
- package/{esm2020 → esm2022}/shortcuts/index.mjs +1 -1
- package/esm2022/shortcuts/mark.mjs +25 -0
- package/esm2022/test/utils/with-editor.mjs +8 -0
- package/esm2022/test/utils/with-plugin.mjs +8 -0
- package/{esm2020 → esm2022}/transforms/clear-marks.mjs +1 -1
- package/esm2022/transforms/close-conversion-hint.mjs +8 -0
- package/{esm2020 → esm2022}/transforms/delete-element.mjs +1 -1
- package/esm2022/transforms/handle-continual-delete-backward.mjs +18 -0
- package/esm2022/transforms/handle-continual-insert-break.mjs +20 -0
- package/esm2022/transforms/insert-elements.mjs +38 -0
- package/esm2022/transforms/insert-paragraph.mjs +6 -0
- package/esm2022/transforms/move-children.mjs +22 -0
- package/esm2022/transforms/on-keydown-reset-block-type.mjs +22 -0
- package/{esm2020 → esm2022}/transforms/set-end-selection.mjs +1 -1
- package/esm2022/transforms/set-marks.mjs +9 -0
- package/esm2022/transforms/set-node.mjs +6 -0
- package/esm2022/transforms/un-hang-range.mjs +11 -0
- package/esm2022/transforms/un-wrap.mjs +12 -0
- package/esm2022/transforms/unwrap-nodes-by-type.mjs +14 -0
- package/{esm2020 → esm2022}/utils/auto-focus.mjs +1 -1
- package/esm2022/utils/copy-node.mjs +32 -0
- package/esm2022/utils/create-empty-paragraph.mjs +5 -0
- package/esm2022/utils/create-paragraph.mjs +14 -0
- package/{esm2020 → esm2022}/utils/dom.mjs +1 -1
- package/esm2022/utils/editor-uuid.mjs +8 -0
- package/esm2022/utils/fragment.mjs +74 -0
- package/esm2022/utils/get-editable-element-height.mjs +6 -0
- package/esm2022/utils/get-toolbar-class.mjs +6 -0
- package/esm2022/utils/index.mjs +20 -0
- package/esm2022/utils/insert-data-by-invalid-type.mjs +62 -0
- package/esm2022/utils/is-clean-empty-paragraph.mjs +37 -0
- package/esm2022/utils/is-inline.mjs +9 -0
- package/{esm2020 → esm2022}/utils/match.mjs +1 -1
- package/esm2022/utils/merge-element-options.mjs +19 -0
- package/esm2022/utils/scroll-into-view.mjs +38 -0
- package/{fesm2020 → fesm2022}/worktile-theia.mjs +398 -389
- package/fesm2022/worktile-theia.mjs.map +1 -0
- package/interfaces/auto-format.d.ts +5 -5
- package/interfaces/editor.d.ts +8 -6
- package/interfaces/plugins/plugin-menu.d.ts +5 -5
- package/interfaces/plugins/with-override.d.ts +2 -2
- package/interfaces/reset-block-type-plugin-options.d.ts +3 -3
- package/interfaces/toolbar.d.ts +5 -5
- package/interfaces/view-base.d.ts +3 -2
- package/package.json +11 -17
- package/pipes.d.ts +3 -3
- package/plugins/align/align.editor.d.ts +4 -4
- package/plugins/align/align.plugin.d.ts +2 -1
- package/plugins/autoformat/autoformat.plugin.d.ts +2 -1
- package/plugins/autoformat/transforms/auto-format-block.d.ts +5 -4
- package/plugins/autoformat/transforms/auto-format-inline.d.ts +2 -2
- package/plugins/blockquote/blockquote.component.d.ts +3 -3
- package/plugins/blockquote/blockquote.editor.d.ts +2 -2
- package/plugins/blockquote/blockquote.plugin.d.ts +2 -1
- package/plugins/code/code.component.d.ts +2 -3
- package/plugins/code/code.editor.d.ts +3 -3
- package/plugins/code/code.plugin.d.ts +2 -1
- package/plugins/color/color.editor.d.ts +3 -3
- package/plugins/common/block-card.plugin.d.ts +2 -1
- package/plugins/common/common.plugin.d.ts +2 -1
- package/plugins/common/get-fragment.plugin.d.ts +2 -1
- package/plugins/common/history.plugin.d.ts +6 -6
- package/plugins/common/insert-data-by-invalid-type.d.ts +2 -1
- package/plugins/common/move-selection.plugin.d.ts +2 -1
- package/plugins/common/remove-empty.plugin.d.ts +2 -1
- package/plugins/common/remove-void.plugin.d.ts +2 -1
- package/plugins/common/reset-type.plugin.d.ts +2 -1
- package/plugins/common/transforms.plugin.d.ts +2 -1
- package/plugins/deserialize/deserialize-html.plugin.d.ts +2 -1
- package/plugins/deserialize/deserialize-md.plugin.d.ts +2 -1
- package/plugins/font-size/font-size.editor.d.ts +3 -4
- package/plugins/heading/heading.editor.d.ts +3 -4
- package/plugins/heading/heading.plugin.d.ts +2 -2
- package/plugins/hr/hr.component.d.ts +3 -3
- package/plugins/hr/hr.editor.d.ts +3 -3
- package/plugins/hr/hr.plugin.d.ts +2 -1
- package/plugins/image/image.component.d.ts +2 -3
- package/plugins/image/image.editor.d.ts +8 -7
- package/plugins/indent/indent.editor.d.ts +3 -4
- package/plugins/indent/indent.plugin.d.ts +2 -1
- package/plugins/indent/on-keydown-indent.d.ts +2 -2
- package/plugins/inline-code/inline-code.component.d.ts +2 -3
- package/plugins/inline-code/inline-code.editor.d.ts +6 -5
- package/plugins/inline-code/inline-code.plugin.d.ts +2 -1
- package/plugins/link/edit/link-edit.component.d.ts +4 -3
- package/plugins/link/hover/link-hover.component.d.ts +1 -1
- package/plugins/link/link.component.d.ts +2 -3
- package/plugins/link/link.editor.d.ts +5 -5
- package/plugins/link/link.plugin.d.ts +2 -1
- package/plugins/list/components/bulleted-list.component.d.ts +2 -3
- package/plugins/list/components/list-item.component.d.ts +3 -3
- package/plugins/list/components/numbered-list.component.d.ts +2 -3
- package/plugins/list/list.editor.d.ts +11 -9
- package/plugins/list/list.plugin.d.ts +2 -1
- package/plugins/list/normalizers/get-list-normalizer.d.ts +3 -2
- package/plugins/list/normalizers/normalize-list-item.d.ts +3 -2
- package/plugins/list/normalizers/normalize-no.d.ts +3 -2
- package/plugins/list/on-key-down-list.d.ts +2 -2
- package/plugins/list/queries/get-list-item-entry.d.ts +3 -2
- package/plugins/list/queries/get-start-list-item.d.ts +2 -2
- package/plugins/list/queries/has-list-in-list-item.d.ts +5 -4
- package/plugins/list/queries/is-in-list.d.ts +3 -2
- package/plugins/list/queries/is-list-nested.d.ts +3 -2
- package/plugins/list/queries/is-list.d.ts +2 -2
- package/plugins/list/queries/is-node-type-list.d.ts +2 -1
- package/plugins/list/queries/is-selection-at-list-item-start.d.ts +2 -2
- package/plugins/list/queries/is-selection-in-same-list-item.d.ts +2 -2
- package/plugins/list/transforms/insert-list-data.d.ts +5 -3
- package/plugins/list/transforms/insert-list-item.d.ts +2 -2
- package/plugins/list/transforms/move-list-item-down.d.ts +3 -2
- package/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.d.ts +3 -2
- package/plugins/list/transforms/move-list-item-sublist-items-to-list.d.ts +3 -2
- package/plugins/list/transforms/move-list-item-up.d.ts +3 -2
- package/plugins/list/transforms/unwrap-list.d.ts +2 -2
- package/plugins/mark/mark.editor.d.ts +3 -2
- package/plugins/mark/mark.plugin.d.ts +2 -1
- package/plugins/mention/mention.plugin.d.ts +2 -1
- package/plugins/mention/suggestion.component.d.ts +1 -1
- package/plugins/node-id/node-id.plugin.d.ts +2 -2
- package/plugins/normalizers/insert-paragraph-nodes.d.ts +2 -1
- package/plugins/normalizers/trailing-node.plugin.d.ts +2 -2
- package/plugins/quick-insert/components/quick-insert.component.d.ts +3 -3
- package/plugins/quick-insert/quick-insert.editor.d.ts +6 -6
- package/plugins/quick-insert/quick-insert.plugin.d.ts +3 -3
- package/plugins/table/components/insert-mark/insert-mark.component.d.ts +3 -3
- package/plugins/table/components/table.component.d.ts +2 -3
- package/plugins/table/components/td/td.component.d.ts +2 -2
- package/plugins/table/components/toolbar/table-options.component.d.ts +3 -3
- package/plugins/table/components/toolbar/table-toolbar.component.d.ts +3 -3
- package/plugins/table/table.editor.d.ts +11 -11
- package/plugins/table/table.store.d.ts +12 -12
- package/plugins/table/table.types.d.ts +4 -3
- package/plugins/table/transforms/clear-cell.d.ts +3 -2
- package/plugins/table/transforms/clear-table-node.d.ts +2 -2
- package/plugins/table/transforms/insert-column.d.ts +5 -4
- package/plugins/table/transforms/insert-row.d.ts +2 -2
- package/plugins/table/transforms/insert-table.d.ts +3 -2
- package/plugins/table/transforms/remove-column.d.ts +2 -2
- package/plugins/table/transforms/remove-row.d.ts +2 -2
- package/plugins/table/transforms/remove-table.d.ts +2 -2
- package/plugins/table/utils/calc-anchor-position.d.ts +2 -2
- package/plugins/table/utils/cell-position.d.ts +3 -3
- package/plugins/table/utils/create-table-position.d.ts +3 -2
- package/plugins/table/utils/get-min-max-cell-index.d.ts +2 -2
- package/plugins/table/utils/get-select-cell-node.d.ts +3 -3
- package/plugins/table/utils/handle-cell.d.ts +3 -2
- package/plugins/table/utils/is-range-in-table.d.ts +3 -2
- package/plugins/table/utils/is-selection-in-table.d.ts +3 -3
- package/plugins/table/utils/merge-cell.d.ts +6 -5
- package/plugins/table/utils/set-menu-cell-invisibility.d.ts +2 -2
- package/plugins/table/utils/split-cell.d.ts +3 -3
- package/plugins/table/utils/table-entry.d.ts +5 -5
- package/plugins/todo-item/todo-item.component.d.ts +2 -3
- package/plugins/todo-item/todo-item.editor.d.ts +3 -3
- package/plugins/todo-item/todo-item.plugin.d.ts +2 -1
- package/plugins/vertical-align/toolbar-item.component.d.ts +2 -3
- package/queries/anchor-block-entry.d.ts +4 -2
- package/queries/anchor-block.d.ts +3 -2
- package/queries/anchor-inline-entry.d.ts +3 -2
- package/queries/find-descendant.d.ts +3 -2
- package/queries/find-node.d.ts +3 -3
- package/queries/get-above-by-type.d.ts +2 -3
- package/queries/get-above.d.ts +3 -3
- package/queries/get-anchor-block-entry.d.ts +4 -2
- package/queries/get-block-above.d.ts +3 -3
- package/queries/get-block-card-above.d.ts +3 -3
- package/queries/get-block-card-cursor.d.ts +2 -2
- package/queries/get-container-blocks.d.ts +2 -2
- package/queries/get-last-node.d.ts +3 -2
- package/queries/get-node.d.ts +3 -2
- package/queries/get-nodes-by-type.d.ts +2 -3
- package/queries/get-nodes.d.ts +2 -3
- package/queries/get-parent.d.ts +3 -3
- package/queries/get-plain-text.d.ts +2 -2
- package/queries/get-plugin-by-toolbar.d.ts +2 -3
- package/queries/get-point-before.d.ts +3 -2
- package/queries/get-point-from-location.d.ts +3 -2
- package/queries/get-rang-from-block-start.d.ts +2 -3
- package/queries/get-range-before.d.ts +3 -2
- package/queries/get-selection-marks.d.ts +2 -2
- package/queries/get-selection-nodes-by-type.d.ts +3 -2
- package/queries/get-text.d.ts +3 -2
- package/queries/get-toolbar-disabled.d.ts +2 -3
- package/queries/is-across-blocks.d.ts +3 -2
- package/queries/is-ancestor-empty.d.ts +3 -2
- package/queries/is-block-above-empty.d.ts +2 -2
- package/queries/is-block-active.d.ts +2 -2
- package/queries/is-block-card-cursor.d.ts +2 -2
- package/queries/is-block-text-empty-after-selection.d.ts +2 -2
- package/queries/is-contain-nested-type.d.ts +2 -2
- package/queries/is-container-type.d.ts +3 -2
- package/queries/is-empty-content-filter.d.ts +2 -2
- package/queries/is-empty-paragraph-by-path.d.ts +3 -2
- package/queries/is-empty-paragraph.d.ts +6 -4
- package/queries/is-global-collapsed.d.ts +2 -2
- package/queries/is-include-types.d.ts +2 -2
- package/queries/is-node-type-in.d.ts +2 -3
- package/queries/is-paragraph.d.ts +2 -2
- package/queries/is-range-across-blocks.d.ts +3 -3
- package/queries/is-start.d.ts +3 -2
- package/queries/some-node.d.ts +3 -2
- package/shortcuts/index.d.ts +2 -2
- package/shortcuts/mark.d.ts +2 -2
- package/test/utils/with-editor.d.ts +2 -0
- package/transforms/clear-marks.d.ts +2 -2
- package/transforms/close-conversion-hint.d.ts +2 -2
- package/transforms/delete-element.d.ts +3 -2
- package/transforms/handle-continual-delete-backward.d.ts +4 -3
- package/transforms/handle-continual-insert-break.d.ts +3 -3
- package/transforms/insert-elements.d.ts +3 -2
- package/transforms/insert-paragraph.d.ts +3 -2
- package/transforms/move-children.d.ts +3 -2
- package/transforms/on-keydown-reset-block-type.d.ts +2 -2
- package/transforms/set-end-selection.d.ts +2 -2
- package/transforms/set-marks.d.ts +3 -2
- package/transforms/set-node.d.ts +3 -2
- package/transforms/un-hang-range.d.ts +3 -2
- package/transforms/un-wrap.d.ts +2 -2
- package/transforms/unwrap-nodes-by-type.d.ts +2 -3
- package/utils/auto-focus.d.ts +2 -2
- package/utils/copy-node.d.ts +5 -3
- package/utils/create-paragraph.d.ts +2 -0
- package/utils/dom.d.ts +2 -2
- package/utils/editor-uuid.d.ts +3 -3
- package/utils/fragment.d.ts +7 -5
- package/utils/get-editable-element-height.d.ts +2 -2
- package/utils/get-toolbar-class.d.ts +2 -2
- package/utils/index.d.ts +1 -0
- package/utils/is-clean-empty-paragraph.d.ts +4 -3
- package/utils/is-inline.d.ts +3 -2
- package/utils/match.d.ts +2 -2
- package/utils/merge-element-options.d.ts +1 -1
- package/utils/scroll-into-view.d.ts +2 -2
- package/esm2020/components/listbox/listbox.mjs +0 -375
- package/esm2020/components/plugin-menu/plugin-menu.component.mjs +0 -191
- package/esm2020/components/template/template.component.mjs +0 -62
- package/esm2020/components/toolbar/toolbar.component.mjs +0 -266
- package/esm2020/components/toolbar-dropdown/toolbar-dropdown.component.mjs +0 -144
- package/esm2020/components/toolbar-group/toolbar-group.component.mjs +0 -122
- package/esm2020/constants/auto-format-rules.mjs +0 -167
- package/esm2020/constants/plugin-menu.mjs +0 -325
- package/esm2020/core/toolbar-item/base-toolbar-item.mjs +0 -87
- package/esm2020/core/utils/plugin-menu.mjs +0 -33
- package/esm2020/custom-types.mjs +0 -2
- package/esm2020/editor.module.mjs +0 -254
- package/esm2020/interfaces/auto-format.mjs +0 -2
- package/esm2020/interfaces/editor.mjs +0 -25
- package/esm2020/interfaces/plugins/plugin-menu.mjs +0 -19
- package/esm2020/interfaces/plugins/with-override.mjs +0 -2
- package/esm2020/interfaces/reset-block-type-plugin-options.mjs +0 -2
- package/esm2020/interfaces/toolbar.mjs +0 -12
- package/esm2020/pipes.mjs +0 -42
- package/esm2020/plugins/align/align.editor.mjs +0 -43
- package/esm2020/plugins/align/align.plugin.mjs +0 -64
- package/esm2020/plugins/autoformat/transforms/auto-format-block.mjs +0 -14
- package/esm2020/plugins/autoformat/transforms/auto-format-inline.mjs +0 -78
- package/esm2020/plugins/blockquote/blockquote.component.mjs +0 -21
- package/esm2020/plugins/blockquote/blockquote.editor.mjs +0 -20
- package/esm2020/plugins/blockquote/blockquote.plugin.mjs +0 -85
- package/esm2020/plugins/code/code.editor.mjs +0 -48
- package/esm2020/plugins/color/color.editor.mjs +0 -27
- package/esm2020/plugins/common/history.plugin.mjs +0 -31
- package/esm2020/plugins/common/transforms.plugin.mjs +0 -18
- package/esm2020/plugins/deserialize/deserialize-html.plugin.mjs +0 -53
- package/esm2020/plugins/deserialize/deserialize-md.plugin.mjs +0 -130
- package/esm2020/plugins/font-size/font-size.editor.mjs +0 -98
- package/esm2020/plugins/heading/heading.editor.mjs +0 -54
- package/esm2020/plugins/heading/heading.plugin.mjs +0 -136
- package/esm2020/plugins/hr/hr.editor.mjs +0 -16
- package/esm2020/plugins/hr/hr.plugin.mjs +0 -56
- package/esm2020/plugins/image/image.component.mjs +0 -420
- package/esm2020/plugins/image/image.editor.mjs +0 -81
- package/esm2020/plugins/indent/indent.editor.mjs +0 -78
- package/esm2020/plugins/indent/on-keydown-indent.mjs +0 -59
- package/esm2020/plugins/inline-code/inline-code.component.mjs +0 -26
- package/esm2020/plugins/inline-code/inline-code.editor.mjs +0 -48
- package/esm2020/plugins/inline-code/inline-code.plugin.mjs +0 -66
- package/esm2020/plugins/link/edit/link-edit.component.mjs +0 -103
- package/esm2020/plugins/link/link.component.mjs +0 -167
- package/esm2020/plugins/link/link.editor.mjs +0 -66
- package/esm2020/plugins/list/components/bulleted-list.component.mjs +0 -33
- package/esm2020/plugins/list/components/list-item.component.mjs +0 -93
- package/esm2020/plugins/list/components/numbered-list.component.mjs +0 -39
- package/esm2020/plugins/list/list.editor.mjs +0 -126
- package/esm2020/plugins/list/list.plugin.mjs +0 -312
- package/esm2020/plugins/list/normalizers/get-list-normalizer.mjs +0 -39
- package/esm2020/plugins/list/normalizers/normalize-list-item.mjs +0 -18
- package/esm2020/plugins/list/normalizers/normalize-no.mjs +0 -43
- package/esm2020/plugins/list/on-key-down-list.mjs +0 -33
- package/esm2020/plugins/list/queries/get-list-item-entry.mjs +0 -28
- package/esm2020/plugins/list/queries/get-start-list-item.mjs +0 -27
- package/esm2020/plugins/list/queries/has-list-in-list-item.mjs +0 -27
- package/esm2020/plugins/list/queries/is-in-list.mjs +0 -6
- package/esm2020/plugins/list/queries/is-list-nested.mjs +0 -10
- package/esm2020/plugins/list/queries/is-list.mjs +0 -5
- package/esm2020/plugins/list/queries/is-selection-at-list-item-start.mjs +0 -13
- package/esm2020/plugins/list/queries/is-selection-in-same-list-item.mjs +0 -17
- package/esm2020/plugins/list/transforms/insert-list-data.mjs +0 -72
- package/esm2020/plugins/list/transforms/insert-list-item.mjs +0 -73
- package/esm2020/plugins/list/transforms/move-list-item-down.mjs +0 -41
- package/esm2020/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.mjs +0 -43
- package/esm2020/plugins/list/transforms/move-list-item-sublist-items-to-list.mjs +0 -30
- package/esm2020/plugins/list/transforms/move-list-item-up.mjs +0 -78
- package/esm2020/plugins/list/transforms/unwrap-list.mjs +0 -10
- package/esm2020/plugins/mark/mark.editor.mjs +0 -28
- package/esm2020/plugins/mention/mention.plugin.mjs +0 -91
- package/esm2020/plugins/normalizers/remove-empty-nodes.mjs +0 -18
- package/esm2020/plugins/quick-insert/quick-insert.editor.mjs +0 -68
- package/esm2020/plugins/quick-insert/quick-insert.plugin.mjs +0 -104
- package/esm2020/plugins/table/components/insert-mark/insert-mark.component.mjs +0 -104
- package/esm2020/plugins/table/components/toolbar/table-toolbar.component.mjs +0 -189
- package/esm2020/plugins/table/table.editor.mjs +0 -209
- package/esm2020/plugins/table/table.plugin.mjs +0 -544
- package/esm2020/plugins/table/table.store.mjs +0 -426
- package/esm2020/plugins/table/table.types.mjs +0 -60
- package/esm2020/plugins/table/transforms/clear-cell.mjs +0 -14
- package/esm2020/plugins/table/transforms/clear-table-node.mjs +0 -27
- package/esm2020/plugins/table/transforms/insert-column.mjs +0 -69
- package/esm2020/plugins/table/transforms/insert-row.mjs +0 -50
- package/esm2020/plugins/table/transforms/insert-table.mjs +0 -15
- package/esm2020/plugins/table/transforms/remove-column.mjs +0 -51
- package/esm2020/plugins/table/transforms/remove-row.mjs +0 -48
- package/esm2020/plugins/table/transforms/remove-table.mjs +0 -49
- package/esm2020/plugins/table/utils/calc-anchor-position.mjs +0 -25
- package/esm2020/plugins/table/utils/cell-position.mjs +0 -60
- package/esm2020/plugins/table/utils/create-table-position.mjs +0 -10
- package/esm2020/plugins/table/utils/get-min-max-cell-index.mjs +0 -69
- package/esm2020/plugins/table/utils/get-select-cell-node.mjs +0 -23
- package/esm2020/plugins/table/utils/handle-cell.mjs +0 -25
- package/esm2020/plugins/table/utils/is-range-in-table.mjs +0 -16
- package/esm2020/plugins/table/utils/is-selection-in-table.mjs +0 -51
- package/esm2020/plugins/table/utils/merge-cell.mjs +0 -108
- package/esm2020/plugins/table/utils/set-menu-cell-invisibility.mjs +0 -45
- package/esm2020/plugins/table/utils/split-cell.mjs +0 -29
- package/esm2020/plugins/table/utils/table-entry.mjs +0 -21
- package/esm2020/plugins/todo-item/todo-item.editor.mjs +0 -32
- package/esm2020/plugins/todo-item/todo-item.plugin.mjs +0 -93
- package/esm2020/plugins/vertical-align/toolbar-item.component.mjs +0 -83
- package/esm2020/queries/anchor-block-entry.mjs +0 -13
- package/esm2020/queries/anchor-block.mjs +0 -6
- package/esm2020/queries/anchor-inline-entry.mjs +0 -10
- package/esm2020/queries/find-node.mjs +0 -45
- package/esm2020/queries/get-above-by-type.mjs +0 -14
- package/esm2020/queries/get-above.mjs +0 -9
- package/esm2020/queries/get-anchor-block-entry.mjs +0 -8
- package/esm2020/queries/get-block-above.mjs +0 -10
- package/esm2020/queries/get-block-card-above.mjs +0 -10
- package/esm2020/queries/get-block-card-cursor.mjs +0 -5
- package/esm2020/queries/get-container-blocks.mjs +0 -12
- package/esm2020/queries/get-insert-elements-path.mjs +0 -44
- package/esm2020/queries/get-node.mjs +0 -10
- package/esm2020/queries/get-nodes-by-type.mjs +0 -15
- package/esm2020/queries/get-nodes.mjs +0 -7
- package/esm2020/queries/get-parent.mjs +0 -12
- package/esm2020/queries/get-plain-text.mjs +0 -16
- package/esm2020/queries/get-plugin-by-toolbar.mjs +0 -13
- package/esm2020/queries/get-point-from-location.mjs +0 -15
- package/esm2020/queries/get-rang-from-block-start.mjs +0 -16
- package/esm2020/queries/get-range-before.mjs +0 -17
- package/esm2020/queries/get-selection-nodes-by-type.mjs +0 -30
- package/esm2020/queries/get-text.mjs +0 -9
- package/esm2020/queries/get-toolbar-disabled.mjs +0 -13
- package/esm2020/queries/is-across-blocks.mjs +0 -7
- package/esm2020/queries/is-ancestor-empty.mjs +0 -6
- package/esm2020/queries/is-block-above-empty.mjs +0 -11
- package/esm2020/queries/is-block-active.mjs +0 -8
- package/esm2020/queries/is-block-card-cursor.mjs +0 -4
- package/esm2020/queries/is-contain-nested-type.mjs +0 -29
- package/esm2020/queries/is-container-type.mjs +0 -3
- package/esm2020/queries/is-empty-content-filter.mjs +0 -23
- package/esm2020/queries/is-empty-paragraph-by-path.mjs +0 -7
- package/esm2020/queries/is-empty-paragraph.mjs +0 -28
- package/esm2020/queries/is-global-collapsed.mjs +0 -5
- package/esm2020/queries/is-include-types.mjs +0 -12
- package/esm2020/queries/is-node-type-in.mjs +0 -9
- package/esm2020/queries/is-node-type.mjs +0 -15
- package/esm2020/queries/is-paragraph.mjs +0 -9
- package/esm2020/queries/is-range-across-blocks.mjs +0 -22
- package/esm2020/queries/is-start.mjs +0 -6
- package/esm2020/queries/some-node.mjs +0 -9
- package/esm2020/shortcuts/mark.mjs +0 -25
- package/esm2020/test/utils/with-plugin.mjs +0 -11
- package/esm2020/transforms/close-conversion-hint.mjs +0 -8
- package/esm2020/transforms/handle-continual-delete-backward.mjs +0 -18
- package/esm2020/transforms/handle-continual-insert-break.mjs +0 -20
- package/esm2020/transforms/insert-elements.mjs +0 -38
- package/esm2020/transforms/insert-paragraph.mjs +0 -6
- package/esm2020/transforms/move-children.mjs +0 -22
- package/esm2020/transforms/on-keydown-reset-block-type.mjs +0 -23
- package/esm2020/transforms/set-marks.mjs +0 -9
- package/esm2020/transforms/set-node.mjs +0 -6
- package/esm2020/transforms/un-hang-range.mjs +0 -11
- package/esm2020/transforms/un-wrap.mjs +0 -12
- package/esm2020/transforms/unwrap-nodes-by-type.mjs +0 -14
- package/esm2020/utils/copy-node.mjs +0 -32
- package/esm2020/utils/create-empty-paragraph.mjs +0 -14
- package/esm2020/utils/editor-uuid.mjs +0 -8
- package/esm2020/utils/fragment.mjs +0 -74
- package/esm2020/utils/get-editable-element-height.mjs +0 -6
- package/esm2020/utils/get-toolbar-class.mjs +0 -6
- package/esm2020/utils/index.mjs +0 -19
- package/esm2020/utils/insert-data-by-invalid-type.mjs +0 -62
- package/esm2020/utils/is-clean-empty-paragraph.mjs +0 -37
- package/esm2020/utils/is-inline.mjs +0 -9
- package/esm2020/utils/merge-element-options.mjs +0 -19
- package/esm2020/utils/scroll-into-view.mjs +0 -38
- package/fesm2015/worktile-theia.mjs +0 -16674
- package/fesm2015/worktile-theia.mjs.map +0 -1
- package/fesm2020/worktile-theia.mjs.map +0 -1
- /package/{esm2020 → esm2022}/components/column-resize/resize-ref.mjs +0 -0
- /package/{esm2020 → esm2022}/components/column-resize/selectors.mjs +0 -0
- /package/{esm2020 → esm2022}/components/index.mjs +0 -0
- /package/{esm2020 → esm2022}/components/listbox/listbox.type.mjs +0 -0
- /package/{esm2020 → esm2022}/constants/code.mjs +0 -0
- /package/{esm2020 → esm2022}/constants/color-select.mjs +0 -0
- /package/{esm2020 → esm2022}/constants/error.mjs +0 -0
- /package/{esm2020 → esm2022}/constants/index.mjs +0 -0
- /package/{esm2020 → esm2022}/constants/node-types.mjs +0 -0
- /package/{esm2020 → esm2022}/constants/selector.mjs +0 -0
- /package/{esm2020 → esm2022}/constants/toolbar.mjs +0 -0
- /package/{esm2020 → esm2022}/core/create-plugin.mjs +0 -0
- /package/{esm2020 → esm2022}/core/create-toolbar.mjs +0 -0
- /package/{esm2020 → esm2022}/core/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/utils/flatten-deep-plugins.mjs +0 -0
- /package/{esm2020 → esm2022}/core/utils/get-plugin-options.mjs +0 -0
- /package/{esm2020 → esm2022}/core/utils/get-plugin.mjs +0 -0
- /package/{esm2020 → esm2022}/core/utils/get-plugins.mjs +0 -0
- /package/{esm2020 → esm2022}/core/utils/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/utils/merge-array.mjs +0 -0
- /package/{esm2020 → esm2022}/core/utils/merge-deep-plugins.mjs +0 -0
- /package/{esm2020 → esm2022}/core/utils/merge-options.mjs +0 -0
- /package/{esm2020 → esm2022}/core/utils/nested-structure-by-key.mjs +0 -0
- /package/{esm2020 → esm2022}/core/utils/plugins-by-key.mjs +0 -0
- /package/{esm2020 → esm2022}/core/with-theia.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/element.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/image.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/index.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/plugins/index.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/plugins/no-infer.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/plugins/plugin-key.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/plugins/plugins.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/upload.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/utility/index.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/utility/nested-structure-by-key.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/utility/override-by-key.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/utility/types.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/valid-children-types.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/color/color.plugin.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/image/image.plugin.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/index.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/link/link.types.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/list/queries/get-list-item-sublist.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/list/queries/get-list-types.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/list/types.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/mention/index.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/mention/mention.type.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/soft-break/soft-break.plugin.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/soft-break/soft-break.types.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/table/transforms/index.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/table/utils/add-columns.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/table/utils/calc-span.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/table/utils/calculate-table.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/table/utils/create-cell.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/table/utils/create-row.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/table/utils/create-table.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/table/utils/get-grid-columns.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/table/utils/index.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/table/utils/is-header-row.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/table/utils/is-legal-table.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/table/utils/is-virtual-key.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/table/utils/next-path.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/table/utils/normalize-table.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/table/utils/remove-columns.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/table/utils/remove-row-column.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/table/utils/set-cells-background-color.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/table/utils/set-node-options.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/table/utils/table-position.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/vertical-align/vertical-align.editor.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/find-path.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/get-directly-parent.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/get-last-child-path.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/get-next-sibling-nodes.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/get-previous-path.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/index.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/is-ancestor.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/is-collapsed.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/is-descendant.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/is-first-child.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/is-point-at-root.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/is-range-at-root.mjs +0 -0
- /package/{esm2020 → esm2022}/test/index.mjs +0 -0
- /package/{esm2020 → esm2022}/transforms/apply-deep-to-nodes.mjs +0 -0
- /package/{esm2020 → esm2022}/transforms/index.mjs +0 -0
- /package/{esm2020 → esm2022}/transforms/merge-deep-to-nodes.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/blob.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/cast-array.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/color-picker.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/common.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/data-transform.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/id-creator.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/lodash.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/refocus.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/weak-maps.mjs +0 -0
- /package/{esm2020 → esm2022}/worktile-theia.mjs +0 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { Transforms, Node, Editor, Path, Element } from 'slate';
|
|
2
|
+
import { ElementKinds, LIST_BLOCK_TYPES } from '../../constants/node-types';
|
|
3
|
+
import { isNodeTypeList } from './queries/is-node-type-list';
|
|
4
|
+
import * as TheQueries from '../../queries';
|
|
5
|
+
import * as TheTransforms from '../../transforms';
|
|
6
|
+
export const ListEditor = {
|
|
7
|
+
isList(editor, element, type) {
|
|
8
|
+
return Editor.isBlock(editor, element) && element.type === type;
|
|
9
|
+
},
|
|
10
|
+
toggleList(editor, type, startIndex) {
|
|
11
|
+
if (!editor.selection) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
if (!startIndex) {
|
|
15
|
+
startIndex = 1;
|
|
16
|
+
}
|
|
17
|
+
const types = [ElementKinds.bulletedList, ElementKinds.numberedList];
|
|
18
|
+
Editor.withoutNormalizing(editor, () => {
|
|
19
|
+
const [...listItems] = Editor.nodes(editor, {
|
|
20
|
+
match: (n) => Element.isElement(n) && n.type === ElementKinds.listItem,
|
|
21
|
+
mode: 'lowest'
|
|
22
|
+
});
|
|
23
|
+
const firstListItemPath = listItems.length && listItems[0][1];
|
|
24
|
+
const activeListPath = listItems.length && Path.parent(firstListItemPath);
|
|
25
|
+
const activeListNode = listItems.length && Node.get(editor, activeListPath);
|
|
26
|
+
// 同级且类型相同:unwrap
|
|
27
|
+
const isLowestActive = listItems.length &&
|
|
28
|
+
listItems.every(([, path]) => activeListNode.type === type && (Path.isSibling(firstListItemPath, path) || Path.equals(firstListItemPath, path)));
|
|
29
|
+
if (isLowestActive) {
|
|
30
|
+
const upListItem = Path.parent(activeListPath);
|
|
31
|
+
Transforms.unwrapNodes(editor, {
|
|
32
|
+
at: editor.selection,
|
|
33
|
+
match: node => node === activeListNode,
|
|
34
|
+
split: true,
|
|
35
|
+
mode: 'lowest'
|
|
36
|
+
});
|
|
37
|
+
if (upListItem && Node.get(editor, upListItem).type === ElementKinds.listItem) {
|
|
38
|
+
Transforms.moveNodes(editor, {
|
|
39
|
+
at: editor.selection,
|
|
40
|
+
to: Path.next(upListItem),
|
|
41
|
+
match: (n) => Element.isElement(n) && n.type === ElementKinds.listItem
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
Transforms.unwrapNodes(editor, {
|
|
46
|
+
match: (n) => Element.isElement(n) && n.type === ElementKinds.listItem
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// 跨级、同级且类型不同
|
|
52
|
+
if (activeListNode && types.includes(activeListNode.type)) {
|
|
53
|
+
Transforms.setNodes(editor, { type }, { match: (n) => Element.isElement(n) && n.type !== type && types.includes(n.type) });
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// wrap
|
|
57
|
+
ListEditor.buildListItem(editor);
|
|
58
|
+
Transforms.wrapNodes(editor, { type, children: [], start: startIndex }, {
|
|
59
|
+
at: editor.selection,
|
|
60
|
+
match: (n) => Element.isElement(n) && n.type === ElementKinds.listItem
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
},
|
|
64
|
+
unwrapList(editor) {
|
|
65
|
+
Editor.withoutNormalizing(editor, () => {
|
|
66
|
+
TheTransforms.unwrapNodesByType(editor, [ElementKinds.bulletedList, ElementKinds.numberedList], { split: true, mode: 'all' });
|
|
67
|
+
TheTransforms.unwrapNodesByType(editor, [ElementKinds.listItem], { split: true, mode: 'all' });
|
|
68
|
+
});
|
|
69
|
+
},
|
|
70
|
+
wrapList(editor, type) {
|
|
71
|
+
Editor.withoutNormalizing(editor, () => {
|
|
72
|
+
const listItem = {
|
|
73
|
+
type: ElementKinds.listItem,
|
|
74
|
+
children: []
|
|
75
|
+
};
|
|
76
|
+
const list = {
|
|
77
|
+
type,
|
|
78
|
+
children: []
|
|
79
|
+
};
|
|
80
|
+
Transforms.wrapNodes(editor, list, { split: true });
|
|
81
|
+
Transforms.wrapNodes(editor, listItem, { split: true });
|
|
82
|
+
});
|
|
83
|
+
},
|
|
84
|
+
isActive(editor, type) {
|
|
85
|
+
const [match] = TheQueries.getNodesByType(editor, type);
|
|
86
|
+
return !!match;
|
|
87
|
+
},
|
|
88
|
+
getActiveList(editor) {
|
|
89
|
+
const [match] = TheQueries.getNodesByType(editor, LIST_BLOCK_TYPES);
|
|
90
|
+
return match;
|
|
91
|
+
},
|
|
92
|
+
buildListItem(editor) {
|
|
93
|
+
const nodes = Editor.nodes(editor, {
|
|
94
|
+
match: (n) => Editor.isBlock(editor, n),
|
|
95
|
+
mode: 'lowest'
|
|
96
|
+
});
|
|
97
|
+
for (const [node, path] of nodes) {
|
|
98
|
+
if (!Editor.isVoid(editor, node) && Element.isElement(node) && node.type !== ElementKinds.paragraph) {
|
|
99
|
+
Transforms.setNodes(editor, { type: ElementKinds.paragraph, checked: undefined }, // todo remove checked
|
|
100
|
+
{ at: path });
|
|
101
|
+
}
|
|
102
|
+
else if (Element.isElement(node) && node.type === ElementKinds.paragraph) {
|
|
103
|
+
let { textIndent } = node;
|
|
104
|
+
if (textIndent) {
|
|
105
|
+
Transforms.setNodes(editor, { textIndent: undefined, indent: undefined }, // remove indent
|
|
106
|
+
{ at: path });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (Node.parent(editor, path).type !== ElementKinds.listItem) {
|
|
110
|
+
Transforms.wrapNodes(editor, { type: ElementKinds.listItem, children: [] }, {
|
|
111
|
+
at: path,
|
|
112
|
+
split: true
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
buildInsertDataChildren(node) {
|
|
118
|
+
const { children } = node;
|
|
119
|
+
const listItem = children[0];
|
|
120
|
+
if (isNodeTypeList(node) && Element.isElement(listItem) && listItem.children[0].type === ElementKinds.paragraph) {
|
|
121
|
+
return node;
|
|
122
|
+
}
|
|
123
|
+
return ListEditor.buildInsertDataChildren(listItem);
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5lZGl0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy9saXN0L2xpc3QuZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFN0QsT0FBTyxLQUFLLFVBQVUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxLQUFLLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUc7SUFDdEIsTUFBTSxDQUFDLE1BQWlCLEVBQUUsT0FBc0IsRUFBRSxJQUEyRDtRQUN6RyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDO0lBQ3BFLENBQUM7SUFDRCxVQUFVLENBQUMsTUFBaUIsRUFBRSxJQUEyRCxFQUFFLFVBQW1CO1FBQzFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ25CLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDYixVQUFVLEdBQUcsQ0FBQyxDQUFDO1NBQ2xCO1FBQ0QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVyRSxNQUFNLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtZQUNuQyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0s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LFlBQVksQ0FBQyxTQUFTLEVBQUU7WUFDaEksT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE9BQU8sVUFBVSxDQUFDLHVCQUF1QixDQUFDLFFBQXlCLENBQUMsQ0FBQztJQUN6RSxDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zZm9ybXMsIE5vZGUsIEVkaXRvciwgUGF0aCwgRWxlbWVudCB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IEVsZW1lbnRLaW5kcywgTElTVF9CTE9DS19UWVBFUyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ub2RlLXR5cGVzJztcbmltcG9ydCB7IEN1c3RvbUVsZW1lbnQgfSBmcm9tICcuLi8uLi9jdXN0b20tdHlwZXMnO1xuaW1wb3J0IHsgaXNOb2RlVHlwZUxpc3QgfSBmcm9tICcuL3F1ZXJpZXMvaXMtbm9kZS10eXBlLWxpc3QnO1xuaW1wb3J0IHsgVGhlRWRpdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgKiBhcyBUaGVRdWVyaWVzIGZyb20gJy4uLy4uL3F1ZXJpZXMnO1xuaW1wb3J0ICogYXMgVGhlVHJhbnNmb3JtcyBmcm9tICcuLi8uLi90cmFuc2Zvcm1zJztcblxuZXhwb3J0IGNvbnN0IExpc3RFZGl0b3IgPSB7XG4gICAgaXNMaXN0KGVkaXRvcjogVGhlRWRpdG9yLCBlbGVtZW50OiBDdXN0b21FbGVtZW50LCB0eXBlOiBFbGVtZW50S2luZHMuYnVsbGV0ZWRMaXN0IHwgRWxlbWVudEtpbmRzLm51bWJlcmVkTGlzdCkge1xuICAgICAgICByZXR1cm4gRWRpdG9yLmlzQmxvY2soZWRpdG9yLCBlbGVtZW50KSAmJiBlbGVtZW50LnR5cGUgPT09IHR5cGU7XG4gICAgfSxcbiAgICB0b2dnbGVMaXN0KGVkaXRvcjogVGhlRWRpdG9yLCB0eXBlOiBFbGVtZW50S2luZHMuYnVsbGV0ZWRMaXN0IHwgRWxlbWVudEtpbmRzLm51bWJlcmVkTGlzdCwgc3RhcnRJbmRleD86IG51bWJlcikge1xuICAgICAgICBpZiAoIWVkaXRvci5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAxO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHR5cGVzID0gW0VsZW1lbnRLaW5kcy5idWxsZXRlZExpc3QsIEVsZW1lbnRLaW5kcy5udW1iZXJlZExpc3RdO1xuXG4gICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBbLi4ubGlzdEl0ZW1zXSA9IEVkaXRvci5ub2RlcyhlZGl0b3IsIHtcbiAgICAgICAgICAgICAgICBtYXRjaDogKG46IEN1c3RvbUVsZW1lbnQpID0+IEVsZW1lbnQuaXNFbGVtZW50KG4pICYmIG4udHlwZSA9PT0gRWxlbWVudEtpbmRzLmxpc3RJdGVtLFxuICAgICAgICAgICAgICAgIG1vZGU6ICdsb3dlc3QnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0TGlzdEl0ZW1QYXRoID0gbGlzdEl0ZW1zLmxlbmd0aCAmJiBsaXN0SXRlbXNbMF1bMV07XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVMaXN0UGF0aCA9IGxpc3RJdGVtcy5sZW5ndGggJiYgUGF0aC5wYXJlbnQoZmlyc3RMaXN0SXRlbVBhdGgpO1xuICAgICAgICAgICAgY29uc3QgYWN0aXZlTGlzdE5vZGUgPSBsaXN0SXRlbXMubGVuZ3RoICYmIChOb2RlLmdldChlZGl0b3IsIGFjdGl2ZUxpc3RQYXRoKSBhcyBDdXN0b21FbGVtZW50KTtcblxuICAgICAgICAgICAgLy8g5ZCM57qn5LiU57G75Z6L55u45ZCM77yadW53cmFwXG4gICAgICAgICAgICBjb25zdCBpc0xvd2VzdEFjdGl2ZSA9XG4gICAgICAgICAgICAgICAgbGlzdEl0ZW1zLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgIGxpc3RJdGVtcy5ldmVyeShcbiAgICAgICAgICAgICAgICAgICAgKFssIHBhdGhdKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlTGlzdE5vZGUudHlwZSA9PT0gdHlwZSAmJiAoUGF0aC5pc1NpYmxpbmcoZmlyc3RMaXN0SXRlbVBhdGgsIHBhdGgpIHx8IFBhdGguZXF1YWxzKGZpcnN0TGlzdEl0ZW1QYXRoLCBwYXRoKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGlzTG93ZXN0QWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBMaXN0SXRlbSA9IFBhdGgucGFyZW50KGFjdGl2ZUxpc3RQYXRoKTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnVud3JhcE5vZGVzKGVkaXRvciwge1xuICAgICAgICAgICAgICAgICAgICBhdDogZWRpdG9yLnNlbGVjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2g6IG5vZGUgPT4gbm9kZSA9PT0gYWN0aXZlTGlzdE5vZGUsXG4gICAgICAgICAgICAgICAgICAgIHNwbGl0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBtb2RlOiAnbG93ZXN0J1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICh1cExpc3RJdGVtICYmIChOb2RlLmdldChlZGl0b3IsIHVwTGlzdEl0ZW0pIGFzIEN1c3RvbUVsZW1lbnQpLnR5cGUgPT09IEVsZW1lbnRLaW5kcy5saXN0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1vdmVOb2RlcyhlZGl0b3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0OiBlZGl0b3Iuc2VsZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG86IFBhdGgubmV4dCh1cExpc3RJdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoOiAobjogQ3VzdG9tRWxlbWVudCkgPT4gRWxlbWVudC5pc0VsZW1lbnQobikgJiYgbi50eXBlID09PSBFbGVtZW50S2luZHMubGlzdEl0ZW1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy51bndyYXBOb2RlcyhlZGl0b3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoOiAobjogQ3VzdG9tRWxlbWVudCkgPT4gRWxlbWVudC5pc0VsZW1lbnQobikgJiYgbi50eXBlID09PSBFbGVtZW50S2luZHMubGlzdEl0ZW1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8g6Leo57qn44CB5ZCM57qn5LiU57G75Z6L5LiN5ZCMXG4gICAgICAgICAgICBpZiAoYWN0aXZlTGlzdE5vZGUgJiYgdHlwZXMuaW5jbHVkZXMoYWN0aXZlTGlzdE5vZGUudHlwZSkpIHtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGVzKFxuICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZSB9IGFzIEN1c3RvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHsgbWF0Y2g6IChuOiBDdXN0b21FbGVtZW50KSA9PiBFbGVtZW50LmlzRWxlbWVudChuKSAmJiBuLnR5cGUgIT09IHR5cGUgJiYgdHlwZXMuaW5jbHVkZXMobi50eXBlKSB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHdyYXBcbiAgICAgICAgICAgIExpc3RFZGl0b3IuYnVpbGRMaXN0SXRlbShlZGl0b3IpO1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy53cmFwTm9kZXMoZWRpdG9yLCB7IHR5cGUsIGNoaWxkcmVuOiBbXSwgc3RhcnQ6IHN0YXJ0SW5kZXggfSBhcyBDdXN0b21FbGVtZW50LCB7XG4gICAgICAgICAgICAgICAgYXQ6IGVkaXRvci5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgbWF0Y2g6IChuOiBDdXN0b21FbGVtZW50KSA9PiBFbGVtZW50LmlzRWxlbWVudChuKSAmJiBuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy5saXN0SXRlbVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgdW53cmFwTGlzdChlZGl0b3I6IFRoZUVkaXRvcikge1xuICAgICAgICBFZGl0b3Iud2l0aG91dE5vcm1hbGl6aW5nKGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgVGhlVHJhbnNmb3Jtcy51bndyYXBOb2Rlc0J5VHlwZShlZGl0b3IsIFtFbGVtZW50S2luZHMuYnVsbGV0ZWRMaXN0LCBFbGVtZW50S2luZHMubnVtYmVyZWRMaXN0XSwgeyBzcGxpdDogdHJ1ZSwgbW9kZTogJ2FsbCcgfSk7XG4gICAgICAgICAgICBUaGVUcmFuc2Zvcm1zLnVud3JhcE5vZGVzQnlUeXBlKGVkaXRvciwgW0VsZW1lbnRLaW5kcy5saXN0SXRlbV0sIHsgc3BsaXQ6IHRydWUsIG1vZGU6ICdhbGwnIH0pO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHdyYXBMaXN0KGVkaXRvcjogVGhlRWRpdG9yLCB0eXBlOiBFbGVtZW50S2luZHMuYnVsbGV0ZWRMaXN0IHwgRWxlbWVudEtpbmRzLm51bWJlcmVkTGlzdCkge1xuICAgICAgICBFZGl0b3Iud2l0aG91dE5vcm1hbGl6aW5nKGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGlzdEl0ZW06IEN1c3RvbUVsZW1lbnQgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogRWxlbWVudEtpbmRzLmxpc3RJdGVtLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSB7XG4gICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLndyYXBOb2RlcyhlZGl0b3IsIGxpc3QsIHsgc3BsaXQ6IHRydWUgfSk7XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLndyYXBOb2RlcyhlZGl0b3IsIGxpc3RJdGVtLCB7IHNwbGl0OiB0cnVlIH0pO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGlzQWN0aXZlKGVkaXRvcjogVGhlRWRpdG9yLCB0eXBlOiBFbGVtZW50S2luZHMuYnVsbGV0ZWRMaXN0IHwgRWxlbWVudEtpbmRzLm51bWJlcmVkTGlzdCkge1xuICAgICAgICBjb25zdCBbbWF0Y2hdID0gVGhlUXVlcmllcy5nZXROb2Rlc0J5VHlwZShlZGl0b3IsIHR5cGUpO1xuICAgICAgICByZXR1cm4gISFtYXRjaDtcbiAgICB9LFxuICAgIGdldEFjdGl2ZUxpc3QoZWRpdG9yOiBUaGVFZGl0b3IpIHtcbiAgICAgICAgY29uc3QgW21hdGNoXSA9IFRoZVF1ZXJpZXMuZ2V0Tm9kZXNCeVR5cGUoZWRpdG9yLCBMSVNUX0JMT0NLX1RZUEVTIGFzIHN0cmluZ1tdKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH0sXG4gICAgYnVpbGRMaXN0SXRlbShlZGl0b3I6IFRoZUVkaXRvcikge1xuICAgICAgICBjb25zdCBub2RlcyA9IEVkaXRvci5ub2RlcyhlZGl0b3IsIHtcbiAgICAgICAgICAgIG1hdGNoOiAobjogQ3VzdG9tRWxlbWVudCkgPT4gRWRpdG9yLmlzQmxvY2soZWRpdG9yLCBuKSxcbiAgICAgICAgICAgIG1vZGU6ICdsb3dlc3QnXG4gICAgICAgIH0pO1xuICAgICAgICBmb3IgKGNvbnN0IFtub2RlLCBwYXRoXSBvZiBub2Rlcykge1xuICAgICAgICAgICAgaWYgKCFFZGl0b3IuaXNWb2lkKGVkaXRvciwgbm9kZSkgJiYgRWxlbWVudC5pc0VsZW1lbnQobm9kZSkgJiYgKG5vZGUgYXMgYW55KS50eXBlICE9PSBFbGVtZW50S2luZHMucGFyYWdyYXBoKSB7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlcyhcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6IEVsZW1lbnRLaW5kcy5wYXJhZ3JhcGgsIGNoZWNrZWQ6IHVuZGVmaW5lZCB9IGFzIGFueSwgLy8gdG9kbyByZW1vdmUgY2hlY2tlZFxuICAgICAgICAgICAgICAgICAgICB7IGF0OiBwYXRoIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChFbGVtZW50LmlzRWxlbWVudChub2RlKSAmJiAobm9kZSBhcyBDdXN0b21FbGVtZW50KS50eXBlID09PSBFbGVtZW50S2luZHMucGFyYWdyYXBoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHsgdGV4dEluZGVudCB9ID0gbm9kZSBhcyBDdXN0b21FbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmICh0ZXh0SW5kZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHRleHRJbmRlbnQ6IHVuZGVmaW5lZCwgaW5kZW50OiB1bmRlZmluZWQgfSBhcyBDdXN0b21FbGVtZW50LCAvLyByZW1vdmUgaW5kZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB7IGF0OiBwYXRoIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKE5vZGUucGFyZW50KGVkaXRvciwgcGF0aCkgYXMgQ3VzdG9tRWxlbWVudCkudHlwZSAhPT0gRWxlbWVudEtpbmRzLmxpc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy53cmFwTm9kZXMoXG4gICAgICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiBFbGVtZW50S2luZHMubGlzdEl0ZW0sIGNoaWxkcmVuOiBbXSB9IGFzIEN1c3RvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0OiBwYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGJ1aWxkSW5zZXJ0RGF0YUNoaWxkcmVuKG5vZGU6IEN1c3RvbUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gbm9kZTtcbiAgICAgICAgY29uc3QgbGlzdEl0ZW0gPSBjaGlsZHJlblswXTtcbiAgICAgICAgaWYgKGlzTm9kZVR5cGVMaXN0KG5vZGUpICYmIEVsZW1lbnQuaXNFbGVtZW50KGxpc3RJdGVtKSAmJiAobGlzdEl0ZW0uY2hpbGRyZW5bMF0gYXMgQ3VzdG9tRWxlbWVudCkudHlwZSA9PT0gRWxlbWVudEtpbmRzLnBhcmFncmFwaCkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gTGlzdEVkaXRvci5idWlsZEluc2VydERhdGFDaGlsZHJlbihsaXN0SXRlbSBhcyBDdXN0b21FbGVtZW50KTtcbiAgICB9XG59O1xuIl19
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import { Transforms, Node, Editor, Path } from 'slate';
|
|
2
|
+
import { AngularEditor, getPlainText } from 'slate-angular';
|
|
3
|
+
import { CLIPBOARD_FORMAT_KEY, ElementKinds, PluginMenuIcons, ThePluginMenuItemType } from '../../constants';
|
|
4
|
+
import * as TheQueries from '../../queries';
|
|
5
|
+
import * as TheTransforms from '../../transforms';
|
|
6
|
+
import { isList } from './queries/is-list';
|
|
7
|
+
import { isInList } from './queries/is-in-list';
|
|
8
|
+
import { isListNested } from './queries/is-list-nested';
|
|
9
|
+
import { getListTypes } from './queries/get-list-types';
|
|
10
|
+
import { getStartListItem } from './queries/get-start-list-item';
|
|
11
|
+
import { isSingleListItem } from './queries/is-single-list-item';
|
|
12
|
+
import { getListItemEntry } from './queries/get-list-item-entry';
|
|
13
|
+
import { hasListInListItem, hasStableListInListItem, hasStableListItem } from './queries/has-list-in-list-item';
|
|
14
|
+
import { isSelectionAtListItemStart } from './queries/is-selection-at-list-item-start';
|
|
15
|
+
import { insertListData } from './transforms/insert-list-data';
|
|
16
|
+
import { moveListItemUp } from './transforms/move-list-item-up';
|
|
17
|
+
import { insertListItem } from './transforms/insert-list-item';
|
|
18
|
+
import { unwrapList } from './transforms/unwrap-list';
|
|
19
|
+
import { moveListItemSublistItemsToListItemSublist } from './transforms/move-list-item-sublist-items-to-list-item-sublist';
|
|
20
|
+
import { getListNormalizer } from './normalizers/get-list-normalizer';
|
|
21
|
+
import { onKeyDownList } from './on-key-down-list';
|
|
22
|
+
import { TheNumberedListComponent } from './components/numbered-list.component';
|
|
23
|
+
import { TheBulletedListComponent } from './components/bulleted-list.component';
|
|
24
|
+
import { TheListItemComponent } from './components/list-item.component';
|
|
25
|
+
import { extractFragment } from '../../utils/fragment';
|
|
26
|
+
import { isSelectionInSameListItem } from './queries/is-selection-in-same-list-item';
|
|
27
|
+
import { createPluginFactory, getPluginOptions } from '../../core';
|
|
28
|
+
import { PluginKeys } from '../../interfaces';
|
|
29
|
+
import { ListEditor } from './list.editor';
|
|
30
|
+
export const withList = (editor) => {
|
|
31
|
+
const { insertBreak, deleteBackward, onKeydown, insertData, setFragmentData, renderElement } = editor;
|
|
32
|
+
const validLiChildrenTypes = getPluginOptions(editor, PluginKeys.list)?.validLiChildrenTypes ?? [];
|
|
33
|
+
const resetBlockTypesListRule = {
|
|
34
|
+
types: [ElementKinds.listItem],
|
|
35
|
+
defaultType: ElementKinds.paragraph,
|
|
36
|
+
onReset: (_editor) => unwrapList(_editor)
|
|
37
|
+
};
|
|
38
|
+
editor.insertBreak = () => {
|
|
39
|
+
const node = TheQueries.anchorBlock(editor);
|
|
40
|
+
if (!node) {
|
|
41
|
+
insertBreak();
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const isVoid = Editor.isVoid(editor, node);
|
|
45
|
+
if (isVoid) {
|
|
46
|
+
insertBreak();
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const listEntry = getListItemEntry(editor, {});
|
|
50
|
+
if (listEntry) {
|
|
51
|
+
let moved;
|
|
52
|
+
const { list, listItem } = listEntry;
|
|
53
|
+
const [listItemNode, listItemPath] = listItem;
|
|
54
|
+
const cursor = editor.selection.focus;
|
|
55
|
+
const isStart = Editor.isStart(editor, cursor, listItemPath);
|
|
56
|
+
// deprecated
|
|
57
|
+
// 如果有子级
|
|
58
|
+
if (hasListInListItem(listItemNode)) {
|
|
59
|
+
/**
|
|
60
|
+
* If selection is at the end of li,
|
|
61
|
+
* insert below li where children will be moved.
|
|
62
|
+
*/
|
|
63
|
+
if (Editor.isEnd(editor, cursor, listItemPath)) {
|
|
64
|
+
return Transforms.insertNodes(editor, {
|
|
65
|
+
type: ElementKinds.listItem,
|
|
66
|
+
children: [{ type: ElementKinds.paragraph, children: [{ text: '' }] }]
|
|
67
|
+
}, { at: Path.next(listItemPath), select: true });
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 如果选区是在listItem的开头,则在listItem上方插入
|
|
71
|
+
*/
|
|
72
|
+
if (isStart) {
|
|
73
|
+
return Transforms.insertNodes(editor, {
|
|
74
|
+
type: ElementKinds.listItem,
|
|
75
|
+
children: [{ type: ElementKinds.paragraph, children: [{ text: '' }] }]
|
|
76
|
+
}, { at: listItemPath });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// 如果选择的listItem为空则将其向上移动
|
|
80
|
+
if (isStart && TheQueries.isBlockAboveEmpty(editor)) {
|
|
81
|
+
moved = moveListItemUp(editor, { list, listItem });
|
|
82
|
+
if (moved)
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const didReset = TheTransforms.onKeyDownResetBlockType({
|
|
86
|
+
rules: [
|
|
87
|
+
{
|
|
88
|
+
...resetBlockTypesListRule,
|
|
89
|
+
predicate: () => !moved && isStart && TheQueries.isBlockAboveEmpty(editor)
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
})(null, editor);
|
|
93
|
+
if (didReset) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Add a new list item if selection is in a LIST_ITEM > p.type.
|
|
98
|
+
*/
|
|
99
|
+
if (!moved) {
|
|
100
|
+
const inserted = insertListItem(editor);
|
|
101
|
+
if (inserted) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
insertBreak();
|
|
107
|
+
};
|
|
108
|
+
editor.setFragmentData = unit => {
|
|
109
|
+
const { selection } = editor;
|
|
110
|
+
const [start] = Editor.edges(editor, selection);
|
|
111
|
+
if (isInList(editor, start)) {
|
|
112
|
+
const fragmentData = editor.getFragment();
|
|
113
|
+
const fragmentElement = fragmentData[0];
|
|
114
|
+
if (getListTypes().includes(fragmentElement.type)) {
|
|
115
|
+
const startNodes = getStartListItem([fragmentElement.children[0]]);
|
|
116
|
+
const children = startNodes.concat(fragmentElement.children.slice(1));
|
|
117
|
+
let fragmentNodes = [
|
|
118
|
+
{
|
|
119
|
+
...fragmentElement,
|
|
120
|
+
children
|
|
121
|
+
}
|
|
122
|
+
];
|
|
123
|
+
if (isSelectionInSameListItem(editor)) {
|
|
124
|
+
// 仅仅复制列表中的内容
|
|
125
|
+
fragmentNodes = children[0].children;
|
|
126
|
+
}
|
|
127
|
+
const fragment = fragmentNodes.concat(fragmentData.slice(1));
|
|
128
|
+
const domRange = AngularEditor.toDOMRange(editor, selection);
|
|
129
|
+
const contents = domRange.cloneContents();
|
|
130
|
+
const stringObj = JSON.stringify(fragment);
|
|
131
|
+
const encoded = window.btoa(encodeURIComponent(stringObj));
|
|
132
|
+
unit.setData(`application/${CLIPBOARD_FORMAT_KEY}`, encoded);
|
|
133
|
+
const div = document.createElement('div');
|
|
134
|
+
div.appendChild(contents);
|
|
135
|
+
div.setAttribute('hidden', 'true');
|
|
136
|
+
document.body.appendChild(div);
|
|
137
|
+
unit.setData('text/html', div.innerHTML);
|
|
138
|
+
unit.setData('text/plain', getPlainText(div));
|
|
139
|
+
document.body.removeChild(div);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
setFragmentData(unit);
|
|
144
|
+
};
|
|
145
|
+
editor.deleteBackward = unit => {
|
|
146
|
+
const res = getListItemEntry(editor, {});
|
|
147
|
+
if (res && isSelectionAtListItemStart(editor)) {
|
|
148
|
+
const { list, listItem } = res;
|
|
149
|
+
const [, listPath] = list;
|
|
150
|
+
const [listItemNode, listItemPath] = listItem;
|
|
151
|
+
const previousListItemPath = TheQueries.getPreviousPath(listItemPath);
|
|
152
|
+
if (previousListItemPath) {
|
|
153
|
+
const beforePoint = Editor.before(editor, listItemPath);
|
|
154
|
+
const parentPath = Path.parent(beforePoint.path);
|
|
155
|
+
const parentNode = Node.get(editor, parentPath);
|
|
156
|
+
if (Editor.isVoid(editor, parentNode)) {
|
|
157
|
+
Editor.withoutNormalizing(editor, () => {
|
|
158
|
+
TheTransforms.unwrapNodesByType(editor, [ElementKinds.bulletedList, ElementKinds.numberedList], {
|
|
159
|
+
split: true
|
|
160
|
+
});
|
|
161
|
+
TheTransforms.unwrapNodesByType(editor, ElementKinds.listItem);
|
|
162
|
+
});
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if (previousListItemPath && hasStableListInListItem(listItemNode)) {
|
|
167
|
+
Editor.withoutNormalizing(editor, () => {
|
|
168
|
+
deleteBackward(unit);
|
|
169
|
+
const [previousListItemNode] = Editor.node(editor, previousListItemPath);
|
|
170
|
+
moveListItemSublistItemsToListItemSublist(editor, {
|
|
171
|
+
fromListItem: listItem,
|
|
172
|
+
toListItem: [previousListItemNode, previousListItemPath],
|
|
173
|
+
start: false
|
|
174
|
+
}, {});
|
|
175
|
+
});
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
// move listItem children to before listItem
|
|
179
|
+
if (listItemNode.children.length > 1) {
|
|
180
|
+
Editor.withoutNormalizing(editor, () => {
|
|
181
|
+
const beforePathRef = Editor.pathRef(editor, listItemPath);
|
|
182
|
+
const beforePoint = Editor.before(editor, listItemPath);
|
|
183
|
+
const startPoint = Editor.start(editor, listItemPath);
|
|
184
|
+
const endPoint = Editor.end(editor, listItemPath);
|
|
185
|
+
const isInFirstChild = !isListNested(editor, listPath) && TheQueries.isFirstChild(listItemPath);
|
|
186
|
+
const to = isInFirstChild ? listPath : Path.next(Path.parent(beforePoint.path));
|
|
187
|
+
Transforms.moveNodes(editor, {
|
|
188
|
+
at: Editor.range(editor, startPoint, endPoint),
|
|
189
|
+
to,
|
|
190
|
+
match: node => listItemNode.children.includes(node)
|
|
191
|
+
});
|
|
192
|
+
Transforms.delete(editor, { at: beforePathRef.unref() });
|
|
193
|
+
if (!isInFirstChild) {
|
|
194
|
+
deleteBackward(unit);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
// deprecated
|
|
200
|
+
if (!isListNested(editor, listPath) && TheQueries.isFirstChild(listItemPath)) {
|
|
201
|
+
unwrapList(editor);
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
deleteBackward(unit);
|
|
206
|
+
};
|
|
207
|
+
editor.insertData = (data) => {
|
|
208
|
+
const text = data.getData('text/plain');
|
|
209
|
+
const fragment = extractFragment(data);
|
|
210
|
+
const aboveEntry = Editor.above(editor, {
|
|
211
|
+
match: (n) => Editor.isBlock(editor, n) && n.type === ElementKinds.listItem
|
|
212
|
+
});
|
|
213
|
+
if (fragment) {
|
|
214
|
+
const res = getListItemEntry(editor, {});
|
|
215
|
+
if (fragment.length === 1 &&
|
|
216
|
+
isList(fragment[0]) &&
|
|
217
|
+
aboveEntry &&
|
|
218
|
+
!isSingleListItem(fragment[0]) &&
|
|
219
|
+
hasStableListItem(res.listItem[0])) {
|
|
220
|
+
insertListData(editor, { fromList: fragment[0], toListItemEntry: aboveEntry });
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
insertData(data);
|
|
225
|
+
};
|
|
226
|
+
editor.onKeydown = (event) => {
|
|
227
|
+
const isContinue = !onKeyDownList(event, editor);
|
|
228
|
+
if (isContinue) {
|
|
229
|
+
onKeydown(event);
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
editor.normalizeNode = getListNormalizer(editor, { validLiChildrenTypes: validLiChildrenTypes });
|
|
233
|
+
editor.renderElement = (element) => {
|
|
234
|
+
if (element.type === ElementKinds.numberedList) {
|
|
235
|
+
return TheNumberedListComponent;
|
|
236
|
+
}
|
|
237
|
+
if (element.type === ElementKinds.bulletedList) {
|
|
238
|
+
return TheBulletedListComponent;
|
|
239
|
+
}
|
|
240
|
+
if (element.type === ElementKinds.listItem) {
|
|
241
|
+
return TheListItemComponent;
|
|
242
|
+
}
|
|
243
|
+
return renderElement(element);
|
|
244
|
+
};
|
|
245
|
+
return editor;
|
|
246
|
+
};
|
|
247
|
+
const listOptions = {
|
|
248
|
+
validLiChildrenTypes: [ElementKinds.image],
|
|
249
|
+
allowParentTypes: [ElementKinds.listItem, ElementKinds.tableCell, ElementKinds.blockquote]
|
|
250
|
+
};
|
|
251
|
+
export const createListPlugin = createPluginFactory({
|
|
252
|
+
key: PluginKeys.list,
|
|
253
|
+
withOverrides: withList,
|
|
254
|
+
plugins: [
|
|
255
|
+
{
|
|
256
|
+
key: PluginKeys.numberedList,
|
|
257
|
+
options: listOptions
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
key: PluginKeys.bulletedList,
|
|
261
|
+
options: listOptions
|
|
262
|
+
}
|
|
263
|
+
],
|
|
264
|
+
nestedStructureByKey: {
|
|
265
|
+
[ElementKinds.bulletedList]: ElementKinds.listItem,
|
|
266
|
+
[ElementKinds.numberedList]: ElementKinds.listItem
|
|
267
|
+
},
|
|
268
|
+
toolbarItems: [
|
|
269
|
+
{
|
|
270
|
+
key: ElementKinds.numberedList,
|
|
271
|
+
icon: 'list-ordered',
|
|
272
|
+
name: '有序列表',
|
|
273
|
+
execute: editor => ListEditor.toggleList(editor, ElementKinds.numberedList),
|
|
274
|
+
active: editor => ListEditor.isActive(editor, ElementKinds.numberedList)
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
key: ElementKinds.bulletedList,
|
|
278
|
+
icon: 'list-bullet',
|
|
279
|
+
name: '无序列表',
|
|
280
|
+
execute: editor => ListEditor.toggleList(editor, ElementKinds.bulletedList),
|
|
281
|
+
active: editor => ListEditor.isActive(editor, ElementKinds.bulletedList)
|
|
282
|
+
}
|
|
283
|
+
],
|
|
284
|
+
menuItems: [
|
|
285
|
+
{
|
|
286
|
+
key: ElementKinds.numberedList,
|
|
287
|
+
keywords: 'yxlb,youxuliebiao,numbered list,numberedlist,有序列表',
|
|
288
|
+
execute: editor => ListEditor.toggleList(editor, ElementKinds.numberedList),
|
|
289
|
+
active: editor => ListEditor.isActive(editor, ElementKinds.numberedList),
|
|
290
|
+
type: ThePluginMenuItemType.icon,
|
|
291
|
+
name: '有序列表',
|
|
292
|
+
description: '插入有序列表',
|
|
293
|
+
displayKey: '/yxlb',
|
|
294
|
+
icon: 'list-ordered',
|
|
295
|
+
menuIcon: PluginMenuIcons.numberedList
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
key: ElementKinds.bulletedList,
|
|
299
|
+
keywords: 'wxlb,wuxuliebiao,bulletedlist,bulleted list,无序列表',
|
|
300
|
+
execute: editor => ListEditor.toggleList(editor, ElementKinds.bulletedList),
|
|
301
|
+
active: editor => ListEditor.isActive(editor, ElementKinds.bulletedList),
|
|
302
|
+
type: ThePluginMenuItemType.icon,
|
|
303
|
+
name: '无序列表',
|
|
304
|
+
description: '插入无序列表',
|
|
305
|
+
displayKey: '/wxlb',
|
|
306
|
+
icon: 'list-bullet',
|
|
307
|
+
menuIcon: PluginMenuIcons.bulletedList
|
|
308
|
+
}
|
|
309
|
+
],
|
|
310
|
+
options: listOptions
|
|
311
|
+
});
|
|
312
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy9saXN0L2xpc3QucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQXFCLE1BQU0sT0FBTyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0csT0FBTyxLQUFLLFVBQVUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxLQUFLLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEgsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxj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RUFBRSxrREFBa0Q7WUFDNUQsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLFlBQVksQ0FBQztZQUMzRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsWUFBWSxDQUFDO1lBQ3hFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxJQUFJO1lBQ2hDLElBQUksRUFBRSxNQUFNO1lBQ1osV0FBVyxFQUFFLFFBQVE7WUFDckIsVUFBVSxFQUFFLE9BQU87WUFDbkIsSUFBSSxFQUFFLGFBQWE7WUFDbkIsUUFBUSxFQUFFLGVBQWUsQ0FBQyxZQUFZO1NBQ3pDO0tBQ0o7SUFDRCxPQUFPLEVBQUUsV0FBVztDQUN2QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2Zvcm1zLCBOb2RlLCBFZGl0b3IsIFBhdGgsIEFuY2VzdG9yLCBFbGVtZW50IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvciwgZ2V0UGxhaW5UZXh0IH0gZnJvbSAnc2xhdGUtYW5ndWxhcic7XG5pbXBvcnQgeyBDTElQQk9BUkRfRk9STUFUX0tFWSwgRWxlbWVudEtpbmRzLCBQbHVnaW5NZW51SWNvbnMsIFRoZVBsdWdpbk1lbnVJdGVtVHlwZSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgKiBhcyBUaGVRdWVyaWVzIGZyb20gJy4uLy4uL3F1ZXJpZXMnO1xuaW1wb3J0ICogYXMgVGhlVHJhbnNmb3JtcyBmcm9tICcuLi8uLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IGlzTGlzdCB9IGZyb20gJy4vcXVlcmllcy9pcy1saXN0JztcbmltcG9ydCB7IGlzSW5MaXN0IH0gZnJvbSAnLi9xdWVyaWVzL2lzLWluLWxpc3QnO1xuaW1wb3J0IHsgaXNMaXN0TmVzdGVkIH0gZnJvbSAnLi9xdWVyaWVzL2lzLWxpc3QtbmVzdGVkJztcbmltcG9ydCB7IGdldExpc3RUeXBlcyB9IGZyb20gJy4vcXVlcmllcy9nZXQtbGlzdC10eXBlcyc7XG5pbXBvcnQgeyBnZXRTdGFydExpc3RJdGVtIH0gZnJvbSAnLi9xdWVyaWVzL2dldC1zdGFydC1saXN0LWl0ZW0nO1xuaW1wb3J0IHsgaXNTaW5nbGVMaXN0SXRlbSB9IGZyb20gJy4vcXVlcmllcy9pcy1zaW5nbGUtbGlzdC1pdGVtJztcbmltcG9ydCB7IGdldExpc3RJdGVtRW50cnkgfSBmcm9tICcuL3F1ZXJpZXMvZ2V0LWxpc3QtaXRlbS1lbnRyeSc7XG5pbXBvcnQgeyBoYXNMaXN0SW5MaXN0SXRlbSwgaGFzU3RhYmxlTGlzdEluTGlzdEl0ZW0sIGhhc1N0YWJsZUxpc3RJdGVtIH0gZnJvbSAnLi9xdWVyaWVzL2hhcy1saXN0LWluLWxpc3QtaXRlbSc7XG5pbXBvcnQgeyBpc1NlbGVjdGlvbkF0TGlzdEl0ZW1TdGFydCB9IGZyb20gJy4vcXVlcmllcy9pcy1zZWxlY3Rpb24tYXQtbGlzdC1pdGVtLXN0YXJ0JztcbmltcG9ydCB7IGluc2VydExpc3REYXRhIH0gZnJvbSAnLi90cmFuc2Zvcm1zL2luc2VydC1saXN0LWRhdGEnO1xuaW1wb3J0IHsgbW92ZUxpc3RJdGVtVXAgfSBmcm9tICcuL3RyYW5zZm9ybXMvbW92ZS1saXN0LWl0ZW0tdXAnO1xuaW1wb3J0IHsgaW5zZXJ0TGlzdEl0ZW0gfSBmcm9tICcuL3RyYW5zZm9ybXMvaW5zZXJ0LWxpc3QtaXRlbSc7XG5pbXBvcnQgeyB1bndyYXBMaXN0IH0gZnJvbSAnLi90cmFuc2Zvcm1zL3Vud3JhcC1saXN0JztcbmltcG9ydCB7IG1vdmVMaXN0SXRlbVN1Ymxpc3RJdGVtc1RvTGlzdEl0ZW1TdWJsaXN0IH0gZnJvbSAnLi90cmFuc2Zvcm1zL21vdmUtbGlzdC1pdGVtLXN1Ymxpc3QtaXRlbXMtdG8tbGlzdC1pdGVtLXN1Ymxpc3QnO1xuaW1wb3J0IHsgZ2V0TGlzdE5vcm1hbGl6ZXIgfSBmcm9tICcuL25vcm1hbGl6ZXJzL2dldC1saXN0LW5vcm1hbGl6ZXInO1xuaW1wb3J0IHsgb25LZXlEb3duTGlzdCB9IGZyb20gJy4vb24ta2V5LWRvd24tbGlzdCc7XG5pbXBvcnQgeyBXaXRoTGlzdE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFRoZU51bWJlcmVkTGlzdENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9udW1iZXJlZC1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaGVCdWxsZXRlZExpc3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYnVsbGV0ZWQtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGhlTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbGlzdC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBleHRyYWN0RnJhZ21lbnQgfSBmcm9tICcuLi8uLi91dGlscy9mcmFnbWVudCc7XG5pbXBvcnQgeyBpc1NlbGVjdGlvbkluU2FtZUxpc3RJdGVtIH0gZnJvbSAnLi9xdWVyaWVzL2lzLXNlbGVjdGlvbi1pbi1zYW1lLWxpc3QtaXRlbSc7XG5pbXBvcnQgeyBjcmVhdGVQbHVnaW5GYWN0b3J5LCBnZXRQbHVnaW5PcHRpb25zIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBQbHVnaW5LZXlzLCBUaGVFZGl0b3IgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IExpc3RFZGl0b3IgfSBmcm9tICcuL2xpc3QuZWRpdG9yJztcbmltcG9ydCB7IEN1c3RvbUVsZW1lbnQgfSBmcm9tICcuLi8uLi9jdXN0b20tdHlwZXMnO1xuXG5leHBvcnQgY29uc3Qgd2l0aExpc3QgPSA8VCBleHRlbmRzIFRoZUVkaXRvcj4oZWRpdG9yOiBUKTogVCA9PiB7XG4gICAgY29uc3QgeyBpbnNlcnRCcmVhaywgZGVsZXRlQmFja3dhcmQsIG9uS2V5ZG93biwgaW5zZXJ0RGF0YSwgc2V0RnJhZ21lbnREYXRhLCByZW5kZXJFbGVtZW50IH0gPSBlZGl0b3I7XG5cbiAgICBjb25zdCB2YWxpZExpQ2hpbGRyZW5UeXBlcyA9IGdldFBsdWdpbk9wdGlvbnM8V2l0aExpc3RPcHRpb25zPihlZGl0b3IsIFBsdWdpbktleXMubGlzdCk/LnZhbGlkTGlDaGlsZHJlblR5cGVzID8/IFtdO1xuXG4gICAgY29uc3QgcmVzZXRCbG9ja1R5cGVzTGlzdFJ1bGUgPSB7XG4gICAgICAgIHR5cGVzOiBbRWxlbWVudEtpbmRzLmxpc3RJdGVtXSxcbiAgICAgICAgZGVmYXVsdFR5cGU6IEVsZW1lbnRLaW5kcy5wYXJhZ3JhcGgsXG4gICAgICAgIG9uUmVzZXQ6IChfZWRpdG9yOiBUaGVFZGl0b3IpID0+IHVud3JhcExpc3QoX2VkaXRvcilcbiAgICB9O1xuXG4gICAgZWRpdG9yLmluc2VydEJyZWFrID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gVGhlUXVlcmllcy5hbmNob3JCbG9jayhlZGl0b3IpO1xuXG4gICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgaW5zZXJ0QnJlYWsoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzVm9pZCA9IEVkaXRvci5pc1ZvaWQoZWRpdG9yLCBub2RlKTtcbiAgICAgICAgaWYgKGlzVm9pZCkge1xuICAgICAgICAgICAgaW5zZXJ0QnJlYWsoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsaXN0RW50cnkgPSBnZXRMaXN0SXRlbUVudHJ5KGVkaXRvciwge30pO1xuICAgICAgICBpZiAobGlzdEVudHJ5KSB7XG4gICAgICAgICAgICBsZXQgbW92ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCB7IGxpc3QsIGxpc3RJdGVtIH0gPSBsaXN0RW50cnk7XG4gICAgICAgICAgICBjb25zdCBbbGlzdEl0ZW1Ob2RlLCBsaXN0SXRlbVBhdGhdID0gbGlzdEl0ZW07XG4gICAgICAgICAgICBjb25zdCBjdXJzb3IgPSBlZGl0b3Iuc2VsZWN0aW9uLmZvY3VzO1xuICAgICAgICAgICAgY29uc3QgaXNTdGFydCA9IEVkaXRvci5pc1N0YXJ0KGVkaXRvciwgY3Vyc29yLCBsaXN0SXRlbVBhdGgpO1xuXG4gICAgICAgICAgICAvLyBkZXByZWNhdGVkXG4gICAgICAgICAgICAvLyDlpoLmnpzmnInlrZDnuqdcbiAgICAgICAgICAgIGlmIChoYXNMaXN0SW5MaXN0SXRlbShsaXN0SXRlbU5vZGUpKSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogSWYgc2VsZWN0aW9uIGlzIGF0IHRoZSBlbmQgb2YgbGksXG4gICAgICAgICAgICAgICAgICogaW5zZXJ0IGJlbG93IGxpIHdoZXJlIGNoaWxkcmVuIHdpbGwgYmUgbW92ZWQuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgaWYgKEVkaXRvci5pc0VuZChlZGl0b3IsIGN1cnNvciwgbGlzdEl0ZW1QYXRoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJhbnNmb3Jtcy5pbnNlcnROb2RlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBFbGVtZW50S2luZHMubGlzdEl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFt7IHR5cGU6IEVsZW1lbnRLaW5kcy5wYXJhZ3JhcGgsIGNoaWxkcmVuOiBbeyB0ZXh0OiAnJyB9XSB9XVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXQ6IFBhdGgubmV4dChsaXN0SXRlbVBhdGgpLCBzZWxlY3Q6IHRydWUgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIOWmguaenOmAieWMuuaYr+WcqGxpc3RJdGVt55qE5byA5aS077yM5YiZ5ZyobGlzdEl0ZW3kuIrmlrnmj5LlhaVcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBpZiAoaXNTdGFydCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJhbnNmb3Jtcy5pbnNlcnROb2RlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBFbGVtZW50S2luZHMubGlzdEl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFt7IHR5cGU6IEVsZW1lbnRLaW5kcy5wYXJhZ3JhcGgsIGNoaWxkcmVuOiBbeyB0ZXh0OiAnJyB9XSB9XVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXQ6IGxpc3RJdGVtUGF0aCB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDlpoLmnpzpgInmi6nnmoRsaXN0SXRlbeS4uuepuuWImeWwhuWFtuWQkeS4iuenu+WKqFxuICAgICAgICAgICAgaWYgKGlzU3RhcnQgJiYgVGhlUXVlcmllcy5pc0Jsb2NrQWJvdmVFbXB0eShlZGl0b3IpKSB7XG4gICAgICAgICAgICAgICAgbW92ZWQgPSBtb3ZlTGlzdEl0ZW1VcChlZGl0b3IsIHsgbGlzdCwgbGlzdEl0ZW0gfSk7XG4gICAgICAgICAgICAgICAgaWYgKG1vdmVkKSByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRpZFJlc2V0ID0gVGhlVHJhbnNmb3Jtcy5vbktleURvd25SZXNldEJsb2NrVHlwZSh7XG4gICAgICAgICAgICAgICAgcnVsZXM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVzZXRCbG9ja1R5cGVzTGlzdFJ1bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVkaWNhdGU6ICgpID0+ICFtb3ZlZCAmJiBpc1N0YXJ0ICYmIFRoZVF1ZXJpZXMuaXNCbG9ja0Fib3ZlRW1wdHkoZWRpdG9yKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSkobnVsbCwgZWRpdG9yKTtcbiAgICAgICAgICAgIGlmIChkaWRSZXNldCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBBZGQgYSBuZXcgbGlzdCBpdGVtIGlmIHNlbGVjdGlvbiBpcyBpbiBhIExJU1RfSVRFTSA+IHAudHlwZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKCFtb3ZlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydGVkID0gaW5zZXJ0TGlzdEl0ZW0oZWRpdG9yKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGluc2VydEJyZWFrKCk7XG4gICAgfTtcblxuICAgIGVkaXRvci5zZXRGcmFnbWVudERhdGEgPSB1bml0ID0+IHtcbiAgICAgICAgY29uc3QgeyBzZWxlY3Rpb24gfSA9IGVkaXRvcjtcbiAgICAgICAgY29uc3QgW3N0YXJ0XSA9IEVkaXRvci5lZGdlcyhlZGl0b3IsIHNlbGVjdGlvbik7XG4gICAgICAgIGlmIChpc0luTGlzdChlZGl0b3IsIHN0YXJ0KSkge1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREYXRhID0gZWRpdG9yLmdldEZyYWdtZW50KCk7XG4gICAgICAgICAgICBjb25zdCBmcmFnbWVudEVsZW1lbnQgPSBmcmFnbWVudERhdGFbMF0gYXMgQ3VzdG9tRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChnZXRMaXN0VHlwZXMoKS5pbmNsdWRlcyhmcmFnbWVudEVsZW1lbnQudHlwZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydE5vZGVzID0gZ2V0U3RhcnRMaXN0SXRlbShbZnJhZ21lbnRFbGVtZW50LmNoaWxkcmVuWzBdXSBhcyBDdXN0b21FbGVtZW50W10pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gc3RhcnROb2Rlcy5jb25jYXQoKGZyYWdtZW50RWxlbWVudC5jaGlsZHJlbiBhcyBDdXN0b21FbGVtZW50W10pLnNsaWNlKDEpKTtcbiAgICAgICAgICAgICAgICBsZXQgZnJhZ21lbnROb2RlcyA9IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZnJhZ21lbnRFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0gYXMgTm9kZVtdO1xuICAgICAgICAgICAgICAgIGlmIChpc1NlbGVjdGlvbkluU2FtZUxpc3RJdGVtKGVkaXRvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g5LuF5LuF5aSN5Yi25YiX6KGo5Lit55qE5YaF5a65XG4gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50Tm9kZXMgPSBjaGlsZHJlblswXS5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBmcmFnbWVudE5vZGVzLmNvbmNhdChmcmFnbWVudERhdGEuc2xpY2UoMSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvbVJhbmdlID0gQW5ndWxhckVkaXRvci50b0RPTVJhbmdlKGVkaXRvciwgc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50cyA9IGRvbVJhbmdlLmNsb25lQ29udGVudHMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdPYmogPSBKU09OLnN0cmluZ2lmeShmcmFnbWVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5jb2RlZCA9IHdpbmRvdy5idG9hKGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdPYmopKTtcbiAgICAgICAgICAgICAgICB1bml0LnNldERhdGEoYGFwcGxpY2F0aW9uLyR7Q0xJUEJPQVJEX0ZPUk1BVF9LRVl9YCwgZW5jb2RlZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGNvbnRlbnRzKTtcbiAgICAgICAgICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICAgICAgICAgICAgICB1bml0LnNldERhdGEoJ3RleHQvaHRtbCcsIGRpdi5pbm5lckhUTUwpO1xuICAgICAgICAgICAgICAgIHVuaXQuc2V0RGF0YSgndGV4dC9wbGFpbicsIGdldFBsYWluVGV4dChkaXYpKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldEZyYWdtZW50RGF0YSh1bml0KTtcbiAgICB9O1xuXG4gICAgZWRpdG9yLmRlbGV0ZUJhY2t3YXJkID0gdW5pdCA9PiB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGdldExpc3RJdGVtRW50cnkoZWRpdG9yLCB7fSk7XG5cbiAgICAgICAgaWYgKHJlcyAmJiBpc1NlbGVjdGlvbkF0TGlzdEl0ZW1TdGFydChlZGl0b3IpKSB7XG4gICAgICAgICAgICBjb25zdCB7IGxpc3QsIGxpc3RJdGVtIH0gPSByZXM7XG4gICAgICAgICAgICBjb25zdCBbLCBsaXN0UGF0aF0gPSBsaXN0O1xuICAgICAgICAgICAgY29uc3QgW2xpc3RJdGVtTm9kZSwgbGlzdEl0ZW1QYXRoXSA9IGxpc3RJdGVtO1xuXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0xpc3RJdGVtUGF0aCA9IFRoZVF1ZXJpZXMuZ2V0UHJldmlvdXNQYXRoKGxpc3RJdGVtUGF0aCk7XG5cbiAgICAgICAgICAgIGlmIChwcmV2aW91c0xpc3RJdGVtUGF0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZVBvaW50ID0gRWRpdG9yLmJlZm9yZShlZGl0b3IsIGxpc3RJdGVtUGF0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IFBhdGgucGFyZW50KGJlZm9yZVBvaW50LnBhdGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBOb2RlLmdldChlZGl0b3IsIHBhcmVudFBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChFZGl0b3IuaXNWb2lkKGVkaXRvciwgcGFyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgRWRpdG9yLndpdGhvdXROb3JtYWxpemluZyhlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRoZVRyYW5zZm9ybXMudW53cmFwTm9kZXNCeVR5cGUoZWRpdG9yLCBbRWxlbWVudEtpbmRzLmJ1bGxldGVkTGlzdCwgRWxlbWVudEtpbmRzLm51bWJlcmVkTGlzdF0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBUaGVUcmFuc2Zvcm1zLnVud3JhcE5vZGVzQnlUeXBlKGVkaXRvciwgRWxlbWVudEtpbmRzLmxpc3RJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwcmV2aW91c0xpc3RJdGVtUGF0aCAmJiBoYXNTdGFibGVMaXN0SW5MaXN0SXRlbShsaXN0SXRlbU5vZGUpKSB7XG4gICAgICAgICAgICAgICAgRWRpdG9yLndpdGhvdXROb3JtYWxpemluZyhlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlQmFja3dhcmQodW5pdCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFtwcmV2aW91c0xpc3RJdGVtTm9kZV0gPSBFZGl0b3Iubm9kZShlZGl0b3IsIHByZXZpb3VzTGlzdEl0ZW1QYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgbW92ZUxpc3RJdGVtU3VibGlzdEl0ZW1zVG9MaXN0SXRlbVN1Ymxpc3QoXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUxpc3RJdGVtOiBsaXN0SXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0xpc3RJdGVtOiBbcHJldmlvdXNMaXN0SXRlbU5vZGUgYXMgQW5jZXN0b3IsIHByZXZpb3VzTGlzdEl0ZW1QYXRoXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbW92ZSBsaXN0SXRlbSBjaGlsZHJlbiB0byBiZWZvcmUgbGlzdEl0ZW1cbiAgICAgICAgICAgIGlmIChsaXN0SXRlbU5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZVBhdGhSZWYgPSBFZGl0b3IucGF0aFJlZihlZGl0b3IsIGxpc3RJdGVtUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZVBvaW50ID0gRWRpdG9yLmJlZm9yZShlZGl0b3IsIGxpc3RJdGVtUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0UG9pbnQgPSBFZGl0b3Iuc3RhcnQoZWRpdG9yLCBsaXN0SXRlbVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRQb2ludCA9IEVkaXRvci5lbmQoZWRpdG9yLCBsaXN0SXRlbVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0luRmlyc3RDaGlsZCA9ICFpc0xpc3ROZXN0ZWQoZWRpdG9yLCBsaXN0UGF0aCkgJiYgVGhlUXVlcmllcy5pc0ZpcnN0Q2hpbGQobGlzdEl0ZW1QYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG8gPSBpc0luRmlyc3RDaGlsZCA/IGxpc3RQYXRoIDogUGF0aC5uZXh0KFBhdGgucGFyZW50KGJlZm9yZVBvaW50LnBhdGgpKTtcblxuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1vdmVOb2RlcyhlZGl0b3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0OiBFZGl0b3IucmFuZ2UoZWRpdG9yLCBzdGFydFBvaW50LCBlbmRQb2ludCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0byxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoOiBub2RlID0+IGxpc3RJdGVtTm9kZS5jaGlsZHJlbi5pbmNsdWRlcyhub2RlIGFzIGFueSlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuZGVsZXRlKGVkaXRvciwgeyBhdDogYmVmb3JlUGF0aFJlZi51bnJlZigpIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNJbkZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUJhY2t3YXJkKHVuaXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkZXByZWNhdGVkXG4gICAgICAgICAgICBpZiAoIWlzTGlzdE5lc3RlZChlZGl0b3IsIGxpc3RQYXRoKSAmJiBUaGVRdWVyaWVzLmlzRmlyc3RDaGlsZChsaXN0SXRlbVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgdW53cmFwTGlzdChlZGl0b3IpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZUJhY2t3YXJkKHVuaXQpO1xuICAgIH07XG5cbiAgICBlZGl0b3IuaW5zZXJ0RGF0YSA9IChkYXRhOiBEYXRhVHJhbnNmZXIpID0+IHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGRhdGEuZ2V0RGF0YSgndGV4dC9wbGFpbicpO1xuICAgICAgICBjb25zdCBmcmFnbWVudCA9IGV4dHJhY3RGcmFnbWVudChkYXRhKTtcbiAgICAgICAgY29uc3QgYWJvdmVFbnRyeSA9IEVkaXRvci5hYm92ZShlZGl0b3IsIHtcbiAgICAgICAgICAgIG1hdGNoOiAobjogQ3VzdG9tRWxlbWVudCkgPT4gRWRpdG9yLmlzQmxvY2soZWRpdG9yLCBuKSAmJiBuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy5saXN0SXRlbVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGZyYWdtZW50KSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBnZXRMaXN0SXRlbUVudHJ5KGVkaXRvciwge30pO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZyYWdtZW50Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgICAgIGlzTGlzdChmcmFnbWVudFswXSBhcyBDdXN0b21FbGVtZW50KSAmJlxuICAgICAgICAgICAgICAgIGFib3ZlRW50cnkgJiZcbiAgICAgICAgICAgICAgICAhaXNTaW5nbGVMaXN0SXRlbShmcmFnbWVudFswXSkgJiZcbiAgICAgICAgICAgICAgICBoYXNTdGFibGVMaXN0SXRlbShyZXMubGlzdEl0ZW1bMF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpbnNlcnRMaXN0RGF0YShlZGl0b3IsIHsgZnJvbUxpc3Q6IGZyYWdtZW50WzBdIGFzIEN1c3RvbUVsZW1lbnQsIHRvTGlzdEl0ZW1FbnRyeTogYWJvdmVFbnRyeSB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpbnNlcnREYXRhKGRhdGEpO1xuICAgIH07XG5cbiAgICBlZGl0b3Iub25LZXlkb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQ29udGludWUgPSAhb25LZXlEb3duTGlzdChldmVudCwgZWRpdG9yKTtcbiAgICAgICAgaWYgKGlzQ29udGludWUpIHtcbiAgICAgICAgICAgIG9uS2V5ZG93bihldmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZWRpdG9yLm5vcm1hbGl6ZU5vZGUgPSBnZXRMaXN0Tm9ybWFsaXplcihlZGl0b3IsIHsgdmFsaWRMaUNoaWxkcmVuVHlwZXM6IHZhbGlkTGlDaGlsZHJlblR5cGVzIH0pO1xuXG4gICAgZWRpdG9yLnJlbmRlckVsZW1lbnQgPSAoZWxlbWVudDogQ3VzdG9tRWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBFbGVtZW50S2luZHMubnVtYmVyZWRMaXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gVGhlTnVtYmVyZWRMaXN0Q29tcG9uZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy5idWxsZXRlZExpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBUaGVCdWxsZXRlZExpc3RDb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gRWxlbWVudEtpbmRzLmxpc3RJdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gVGhlTGlzdEl0ZW1Db21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlbmRlckVsZW1lbnQoZWxlbWVudCk7XG4gICAgfTtcblxuICAgIHJldHVybiBlZGl0b3I7XG59O1xuXG5jb25zdCBsaXN0T3B0aW9ucyA9IHtcbiAgICB2YWxpZExpQ2hpbGRyZW5UeXBlczogW0VsZW1lbnRLaW5kcy5pbWFnZV0sXG4gICAgYWxsb3dQYXJlbnRUeXBlczogW0VsZW1lbnRLaW5kcy5saXN0SXRlbSwgRWxlbWVudEtpbmRzLnRhYmxlQ2VsbCwgRWxlbWVudEtpbmRzLmJsb2NrcXVvdGVdXG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTGlzdFBsdWdpbiA9IGNyZWF0ZVBsdWdpbkZhY3Rvcnk8V2l0aExpc3RPcHRpb25zPih7XG4gICAga2V5OiBQbHVnaW5LZXlzLmxpc3QsXG4gICAgd2l0aE92ZXJyaWRlczogd2l0aExpc3QsXG4gICAgcGx1Z2luczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFBsdWdpbktleXMubnVtYmVyZWRMaXN0LFxuICAgICAgICAgICAgb3B0aW9uczogbGlzdE9wdGlvbnNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBQbHVnaW5LZXlzLmJ1bGxldGVkTGlzdCxcbiAgICAgICAgICAgIG9wdGlvbnM6IGxpc3RPcHRpb25zXG4gICAgICAgIH1cbiAgICBdLFxuICAgIG5lc3RlZFN0cnVjdHVyZUJ5S2V5OiB7XG4gICAgICAgIFtFbGVtZW50S2luZHMuYnVsbGV0ZWRMaXN0XTogRWxlbWVudEtpbmRzLmxpc3RJdGVtLFxuICAgICAgICBbRWxlbWVudEtpbmRzLm51bWJlcmVkTGlzdF06IEVsZW1lbnRLaW5kcy5saXN0SXRlbVxuICAgIH0sXG4gICAgdG9vbGJhckl0ZW1zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogRWxlbWVudEtpbmRzLm51bWJlcmVkTGlzdCxcbiAgICAgICAgICAgIGljb246ICdsaXN0LW9yZGVyZWQnLFxuICAgICAgICAgICAgbmFtZTogJ+acieW6j+WIl+ihqCcsXG4gICAgICAgICAgICBleGVjdXRlOiBlZGl0b3IgPT4gTGlzdEVkaXRvci50b2dnbGVMaXN0KGVkaXRvciwgRWxlbWVudEtpbmRzLm51bWJlcmVkTGlzdCksXG4gICAgICAgICAgICBhY3RpdmU6IGVkaXRvciA9PiBMaXN0RWRpdG9yLmlzQWN0aXZlKGVkaXRvciwgRWxlbWVudEtpbmRzLm51bWJlcmVkTGlzdClcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBFbGVtZW50S2luZHMuYnVsbGV0ZWRMaXN0LFxuICAgICAgICAgICAgaWNvbjogJ2xpc3QtYnVsbGV0JyxcbiAgICAgICAgICAgIG5hbWU6ICfml6Dluo/liJfooagnLFxuICAgICAgICAgICAgZXhlY3V0ZTogZWRpdG9yID0+IExpc3RFZGl0b3IudG9nZ2xlTGlzdChlZGl0b3IsIEVsZW1lbnRLaW5kcy5idWxsZXRlZExpc3QpLFxuICAgICAgICAgICAgYWN0aXZlOiBlZGl0b3IgPT4gTGlzdEVkaXRvci5pc0FjdGl2ZShlZGl0b3IsIEVsZW1lbnRLaW5kcy5idWxsZXRlZExpc3QpXG4gICAgICAgIH1cbiAgICBdLFxuICAgIG1lbnVJdGVtczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IEVsZW1lbnRLaW5kcy5udW1iZXJlZExpc3QsXG4gICAgICAgICAgICBrZXl3b3JkczogJ3l4bGIseW91eHVsaWViaWFvLG51bWJlcmVkIGxpc3QsbnVtYmVyZWRsaXN0LOacieW6j+WIl+ihqCcsXG4gICAgICAgICAgICBleGVjdXRlOiBlZGl0b3IgPT4gTGlzdEVkaXRvci50b2dnbGVMaXN0KGVkaXRvciwgRWxlbWVudEtpbmRzLm51bWJlcmVkTGlzdCksXG4gICAgICAgICAgICBhY3RpdmU6IGVkaXRvciA9PiBMaXN0RWRpdG9yLmlzQWN0aXZlKGVkaXRvciwgRWxlbWVudEtpbmRzLm51bWJlcmVkTGlzdCksXG4gICAgICAgICAgICB0eXBlOiBUaGVQbHVnaW5NZW51SXRlbVR5cGUuaWNvbixcbiAgICAgICAgICAgIG5hbWU6ICfmnInluo/liJfooagnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICfmj5LlhaXmnInluo/liJfooagnLFxuICAgICAgICAgICAgZGlzcGxheUtleTogJy95eGxiJyxcbiAgICAgICAgICAgIGljb246ICdsaXN0LW9yZGVyZWQnLFxuICAgICAgICAgICAgbWVudUljb246IFBsdWdpbk1lbnVJY29ucy5udW1iZXJlZExpc3RcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBFbGVtZW50S2luZHMuYnVsbGV0ZWRMaXN0LFxuICAgICAgICAgICAga2V5d29yZHM6ICd3eGxiLHd1eHVsaWViaWFvLGJ1bGxldGVkbGlzdCxidWxsZXRlZCBsaXN0LOaXoOW6j+WIl+ihqCcsXG4gICAgICAgICAgICBleGVjdXRlOiBlZGl0b3IgPT4gTGlzdEVkaXRvci50b2dnbGVMaXN0KGVkaXRvciwgRWxlbWVudEtpbmRzLmJ1bGxldGVkTGlzdCksXG4gICAgICAgICAgICBhY3RpdmU6IGVkaXRvciA9PiBMaXN0RWRpdG9yLmlzQWN0aXZlKGVkaXRvciwgRWxlbWVudEtpbmRzLmJ1bGxldGVkTGlzdCksXG4gICAgICAgICAgICB0eXBlOiBUaGVQbHVnaW5NZW51SXRlbVR5cGUuaWNvbixcbiAgICAgICAgICAgIG5hbWU6ICfml6Dluo/liJfooagnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICfmj5LlhaXml6Dluo/liJfooagnLFxuICAgICAgICAgICAgZGlzcGxheUtleTogJy93eGxiJyxcbiAgICAgICAgICAgIGljb246ICdsaXN0LWJ1bGxldCcsXG4gICAgICAgICAgICBtZW51SWNvbjogUGx1Z2luTWVudUljb25zLmJ1bGxldGVkTGlzdFxuICAgICAgICB9XG4gICAgXSxcbiAgICBvcHRpb25zOiBsaXN0T3B0aW9uc1xufSk7XG4iXX0=
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Transforms, Element } from 'slate';
|
|
2
|
+
import { ElementKinds } from '../../../constants';
|
|
3
|
+
import { match } from '../../../utils/match';
|
|
4
|
+
import { getListTypes } from '../queries/get-list-types';
|
|
5
|
+
import { normalizeListItem } from './normalize-list-item';
|
|
6
|
+
import { normalizeNo } from './normalize-no';
|
|
7
|
+
import { isList } from '../queries/is-list';
|
|
8
|
+
import { TheHistoryEditor } from '../../common/history.plugin';
|
|
9
|
+
/**
|
|
10
|
+
* Normalize list node to force the ul>li>p+ul structure.
|
|
11
|
+
*/
|
|
12
|
+
export const getListNormalizer = (editor, { validLiChildrenTypes }) => {
|
|
13
|
+
const { normalizeNode } = editor;
|
|
14
|
+
return ([node, path]) => {
|
|
15
|
+
// 不是选区, 执行续号检测操作
|
|
16
|
+
if (isList(node) && !TheHistoryEditor.isUndoing(editor)) {
|
|
17
|
+
const moved = normalizeNo(editor, [node, path]);
|
|
18
|
+
if (moved) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if (match(node, { type: getListTypes() })) {
|
|
23
|
+
if (Element.isElement(node) && !node.children.length) {
|
|
24
|
+
return Transforms.removeNodes(editor, { at: path });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// normalize list item
|
|
28
|
+
// 1. list-item at least one child
|
|
29
|
+
// 2. list-item first child is not list
|
|
30
|
+
if (Element.isElement(node) && node.type === ElementKinds.listItem) {
|
|
31
|
+
if (normalizeListItem(editor, { nodeEntry: [node, path] })) {
|
|
32
|
+
// Tree changed - kick off another normalization
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
normalizeNode([node, path]);
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWxpc3Qtbm9ybWFsaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9wbHVnaW5zL2xpc3Qvbm9ybWFsaXplcnMvZ2V0LWxpc3Qtbm9ybWFsaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXlCLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFHbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUvRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBaUIsRUFBRSxFQUFFLG9CQUFvQixFQUF5QixFQUFFLEVBQUU7SUFDcEcsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUVqQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFZLEVBQUUsRUFBRTtRQUMvQixpQkFBaUI7UUFDakIsSUFBSSxNQUFNLENBQUMsSUFBcUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3RFLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNoRCxJQUFJLEtBQUssRUFBRTtnQkFDUCxPQUFPO2FBQ1Y7U0FDSjtRQUVELElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDdkMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUUsSUFBSSxDQUFDLFFBQXlCLENBQUMsTUFBTSxFQUFFO2dCQUNwRSxPQUFPLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7YUFDdkQ7U0FDSjtRQUVELHNCQUFzQjtRQUN0QixrQ0FBa0M7UUFDbEMsdUNBQXVDO1FBQ3ZDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxRQUFRLEVBQUU7WUFDaEUsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUN4RCxnREFBZ0Q7Z0JBQ2hELE9BQU87YUFDVjtTQUNKO1FBRUQsYUFBYSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDaEMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY2VuZGFudCwgTm9kZUVudHJ5LCBUcmFuc2Zvcm1zLCBFbGVtZW50IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgVGhlRWRpdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDdXN0b21FbGVtZW50IH0gZnJvbSAnLi4vLi4vLi4vY3VzdG9tLXR5cGVzJztcbmltcG9ydCB7IEVsZW1lbnRLaW5kcyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBtYXRjaCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL21hdGNoJztcbmltcG9ydCB7IGdldExpc3RUeXBlcyB9IGZyb20gJy4uL3F1ZXJpZXMvZ2V0LWxpc3QtdHlwZXMnO1xuaW1wb3J0IHsgbm9ybWFsaXplTGlzdEl0ZW0gfSBmcm9tICcuL25vcm1hbGl6ZS1saXN0LWl0ZW0nO1xuaW1wb3J0IHsgTGlzdE5vcm1hbGl6ZXJPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgbm9ybWFsaXplTm8gfSBmcm9tICcuL25vcm1hbGl6ZS1ubyc7XG5pbXBvcnQgeyBpc0xpc3QgfSBmcm9tICcuLi9xdWVyaWVzL2lzLWxpc3QnO1xuaW1wb3J0IHsgVGhlSGlzdG9yeUVkaXRvciB9IGZyb20gJy4uLy4uL2NvbW1vbi9oaXN0b3J5LnBsdWdpbic7XG5cbi8qKlxuICogTm9ybWFsaXplIGxpc3Qgbm9kZSB0byBmb3JjZSB0aGUgdWw+bGk+cCt1bCBzdHJ1Y3R1cmUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRMaXN0Tm9ybWFsaXplciA9IChlZGl0b3I6IFRoZUVkaXRvciwgeyB2YWxpZExpQ2hpbGRyZW5UeXBlcyB9OiBMaXN0Tm9ybWFsaXplck9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7IG5vcm1hbGl6ZU5vZGUgfSA9IGVkaXRvcjtcblxuICAgIHJldHVybiAoW25vZGUsIHBhdGhdOiBOb2RlRW50cnkpID0+IHtcbiAgICAgICAgLy8g5LiN5piv6YCJ5Yy6LCDmiafooYznu63lj7fmo4DmtYvmk43kvZxcbiAgICAgICAgaWYgKGlzTGlzdChub2RlIGFzIEN1c3RvbUVsZW1lbnQpICYmICFUaGVIaXN0b3J5RWRpdG9yLmlzVW5kb2luZyhlZGl0b3IpKSB7XG4gICAgICAgICAgICBjb25zdCBtb3ZlZCA9IG5vcm1hbGl6ZU5vKGVkaXRvciwgW25vZGUsIHBhdGhdKTtcbiAgICAgICAgICAgIGlmIChtb3ZlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXRjaChub2RlLCB7IHR5cGU6IGdldExpc3RUeXBlcygpIH0pKSB7XG4gICAgICAgICAgICBpZiAoRWxlbWVudC5pc0VsZW1lbnQobm9kZSkgJiYgIShub2RlLmNoaWxkcmVuIGFzIERlc2NlbmRhbnRbXSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybXMucmVtb3ZlTm9kZXMoZWRpdG9yLCB7IGF0OiBwYXRoIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm9ybWFsaXplIGxpc3QgaXRlbVxuICAgICAgICAvLyAxLiBsaXN0LWl0ZW0gYXQgbGVhc3Qgb25lIGNoaWxkXG4gICAgICAgIC8vIDIuIGxpc3QtaXRlbSBmaXJzdCBjaGlsZCBpcyBub3QgbGlzdFxuICAgICAgICBpZiAoRWxlbWVudC5pc0VsZW1lbnQobm9kZSkgJiYgbm9kZS50eXBlID09PSBFbGVtZW50S2luZHMubGlzdEl0ZW0pIHtcbiAgICAgICAgICAgIGlmIChub3JtYWxpemVMaXN0SXRlbShlZGl0b3IsIHsgbm9kZUVudHJ5OiBbbm9kZSwgcGF0aF0gfSkpIHtcbiAgICAgICAgICAgICAgICAvLyBUcmVlIGNoYW5nZWQgLSBraWNrIG9mZiBhbm90aGVyIG5vcm1hbGl6YXRpb25cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBub3JtYWxpemVOb2RlKFtub2RlLCBwYXRoXSk7XG4gICAgfTtcbn07XG4iXX0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Element } from 'slate';
|
|
2
|
+
import { ElementKinds } from '../../../constants';
|
|
3
|
+
import { insertParagraph } from '../../../transforms/insert-paragraph';
|
|
4
|
+
export const normalizeListItem = (editor, { nodeEntry }) => {
|
|
5
|
+
const [listItemNode, listItemPath] = nodeEntry;
|
|
6
|
+
const firstChildPath = listItemPath.concat([0]);
|
|
7
|
+
const firstChild = listItemNode.children?.[0];
|
|
8
|
+
if (!firstChild) {
|
|
9
|
+
insertParagraph(editor, firstChildPath);
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
// Ensure that all lists have a <p> tag as a first element
|
|
13
|
+
if (Element.isElement(firstChild) && (firstChild.type === ElementKinds.bulletedList || firstChild.type === ElementKinds.numberedList)) {
|
|
14
|
+
insertParagraph(editor, firstChildPath);
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLWxpc3QtaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9wbHVnaW5zL2xpc3Qvbm9ybWFsaXplcnMvbm9ybWFsaXplLWxpc3QtaXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXlCLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUd2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRXZFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBaUIsRUFBRSxFQUFFLFNBQVMsRUFBNkMsRUFBRSxFQUFFO0lBQzdHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQy9DLE1BQU0sY0FBYyxHQUFTLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sVUFBVSxHQUFJLFlBQVksQ0FBQyxRQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFMUQsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNiLGVBQWUsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUVELDBEQUEwRDtJQUMxRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxZQUFZLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUU7UUFDbkksZUFBZSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQztLQUNmO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTm9kZSwgTm9kZUVudHJ5LCBQYXRoLCBFbGVtZW50IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgVGhlRWRpdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMaXN0SXRlbUVsZW1lbnQgfSBmcm9tICcuLi8uLi8uLi9jdXN0b20tdHlwZXMnO1xuaW1wb3J0IHsgRWxlbWVudEtpbmRzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGluc2VydFBhcmFncmFwaCB9IGZyb20gJy4uLy4uLy4uL3RyYW5zZm9ybXMvaW5zZXJ0LXBhcmFncmFwaCc7XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemVMaXN0SXRlbSA9IChlZGl0b3I6IFRoZUVkaXRvciwgeyBub2RlRW50cnkgfTogeyBub2RlRW50cnk6IE5vZGVFbnRyeTxMaXN0SXRlbUVsZW1lbnQ+IH0pID0+IHtcbiAgICBjb25zdCBbbGlzdEl0ZW1Ob2RlLCBsaXN0SXRlbVBhdGhdID0gbm9kZUVudHJ5O1xuICAgIGNvbnN0IGZpcnN0Q2hpbGRQYXRoOiBQYXRoID0gbGlzdEl0ZW1QYXRoLmNvbmNhdChbMF0pO1xuICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSAobGlzdEl0ZW1Ob2RlLmNoaWxkcmVuIGFzIE5vZGVbXSk/LlswXTtcblxuICAgIGlmICghZmlyc3RDaGlsZCkge1xuICAgICAgICBpbnNlcnRQYXJhZ3JhcGgoZWRpdG9yLCBmaXJzdENoaWxkUGF0aCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSB0aGF0IGFsbCBsaXN0cyBoYXZlIGEgPHA+IHRhZyBhcyBhIGZpcnN0IGVsZW1lbnRcbiAgICBpZiAoRWxlbWVudC5pc0VsZW1lbnQoZmlyc3RDaGlsZCkgJiYgKGZpcnN0Q2hpbGQudHlwZSA9PT0gRWxlbWVudEtpbmRzLmJ1bGxldGVkTGlzdCB8fCBmaXJzdENoaWxkLnR5cGUgPT09IEVsZW1lbnRLaW5kcy5udW1iZXJlZExpc3QpKSB7XG4gICAgICAgIGluc2VydFBhcmFncmFwaChlZGl0b3IsIGZpcnN0Q2hpbGRQYXRoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufTtcbiJdfQ==
|