@maketribe/ms-app 3.2.33 → 3.2.34
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/dist/cjs/components/basic/doc-editor/core/LexicalComposer.vue.js +74 -0
- package/dist/cjs/components/basic/doc-editor/core/LexicalComposer.vue.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/LexicalComposer.vue2.js +4 -0
- package/dist/cjs/components/basic/doc-editor/core/LexicalComposer.vue2.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/inject.js +5 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/inject.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/listenerManager.js +18 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/listenerManager.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/useCanShowPlaceholder.js +31 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/useCanShowPlaceholder.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/useDecorators.js +31 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/useDecorators.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/useHistory.js +15 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/useHistory.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/useLexicalComposer.js +17 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/useLexicalComposer.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/useLexicalTextEntity.js +16 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/useLexicalTextEntity.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/useList.js +48 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/useList.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/useMounted.js +14 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/useMounted.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/useRichTextSetup.js +16 -0
- package/dist/cjs/components/basic/doc-editor/core/composables/useRichTextSetup.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/element-block.js +12 -3
- package/dist/cjs/components/basic/doc-editor/core/element-block.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/core/index.js +14 -0
- package/dist/cjs/components/basic/doc-editor/core/index.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/{plugins/RichTextPlugin/nodes/RichTextNode.js → core/nodes/RichElementNode.js} +81 -35
- package/dist/cjs/components/basic/doc-editor/core/nodes/RichElementNode.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoFocusPlugin.vue.js +42 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoFocusPlugin.vue.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoFocusPlugin.vue2.js +4 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoFocusPlugin.vue2.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue.js +4 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue2.js +37 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue2.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/shared.js +176 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/shared.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalCheckListPlugin.vue.js +215 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalCheckListPlugin.vue.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalCheckListPlugin.vue2.js +4 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalCheckListPlugin.vue2.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalHashtagPlugin.vue.js +75 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalHashtagPlugin.vue.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalHashtagPlugin.vue2.js +4 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalHashtagPlugin.vue2.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalHistoryPlugin.vue.js +29 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalHistoryPlugin.vue.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalHistoryPlugin.vue2.js +4 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalHistoryPlugin.vue2.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalLinkPlugin.vue.js +4 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalLinkPlugin.vue.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalLinkPlugin.vue2.js +77 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalLinkPlugin.vue2.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalListPlugin.vue.js +25 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalListPlugin.vue.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalListPlugin.vue2.js +4 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalListPlugin.vue2.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/ContentEditable.vue.js +14 -3
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalRichTextPlugin/ContentEditable.vue.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalRichTextPlugin/DecoratedTeleports.js +24 -0
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalRichTextPlugin/DecoratedTeleports.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/index.vue.js +20 -9
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalRichTextPlugin/index.vue.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/editor.vue.js +19 -12
- package/dist/cjs/components/basic/doc-editor/editor.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/{plugins/nodes.js → nodes.js} +13 -11
- package/dist/cjs/components/basic/doc-editor/nodes.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/plugins/AutoLinkPlugin/index.vue.js +5 -3
- package/dist/cjs/components/basic/doc-editor/plugins/AutoLinkPlugin/index.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ElementBlockSelectionPlugin/index.vue.js +13 -4
- package/dist/cjs/components/basic/doc-editor/plugins/ElementBlockSelectionPlugin/index.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/GridPlugin/index.vue.js +10 -2
- package/dist/cjs/components/basic/doc-editor/plugins/GridPlugin/index.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ImagePlugin/index.vue.js +23 -15
- package/dist/cjs/components/basic/doc-editor/plugins/ImagePlugin/index.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ModulePlugin/composables.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ModulePlugin/index.vue.js +10 -2
- package/dist/cjs/components/basic/doc-editor/plugins/ModulePlugin/index.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/TemplatePlugin/composables.js +12 -3
- package/dist/cjs/components/basic/doc-editor/plugins/TemplatePlugin/composables.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/TemplatePlugin/index.vue.js +13 -3
- package/dist/cjs/components/basic/doc-editor/plugins/TemplatePlugin/index.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/ContentStyleTool.vue.js +8 -2
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/ContentStyleTool.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleTool.vue.js +10 -2
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleTool.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/PreviewToolbar.vue.js +16 -4
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/PreviewToolbar.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js +10 -2
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/themes/doc-editor-edit.css.js +1 -1
- package/dist/cjs/components/basic/doc-editor/themes/doc-editor-edit.css.js.map +1 -1
- package/dist/cjs/modules/cms/pages/cms-contents/components/article-list.vue.js +7 -5
- package/dist/cjs/modules/cms/pages/cms-contents/components/article-list.vue.js.map +1 -1
- package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js +2 -2
- package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js.map +1 -1
- package/dist/cjs/modules/cms/pages/cms-contents/components/part-info.vue.js +0 -3
- package/dist/cjs/modules/cms/pages/cms-contents/components/part-info.vue.js.map +1 -1
- package/dist/cjs/modules/cms/pages/cms-contents/index.vue2.js +9 -5
- package/dist/cjs/modules/cms/pages/cms-contents/index.vue2.js.map +1 -1
- package/dist/cjs/modules/ms/components/rich-text-editor/index.js.map +1 -1
- package/dist/cjs/modules/ms/components/rich-text-editor/rich-text-editor-options.js +2 -4
- package/dist/cjs/modules/ms/components/rich-text-editor/rich-text-editor-options.js.map +1 -1
- package/dist/cjs/modules/ms/components/rich-text-editor/rich-text-editor.js +5 -4
- package/dist/cjs/modules/ms/components/rich-text-editor/rich-text-editor.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/core/LexicalComposer.vue.js +75 -0
- package/dist/esm/components/basic/doc-editor/core/LexicalComposer.vue.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/LexicalComposer.vue2.js +5 -0
- package/dist/esm/components/basic/doc-editor/core/LexicalComposer.vue2.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/composables/inject.js +5 -0
- package/dist/esm/components/basic/doc-editor/core/composables/inject.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/composables/listenerManager.js +18 -0
- package/dist/esm/components/basic/doc-editor/core/composables/listenerManager.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/composables/useCanShowPlaceholder.js +31 -0
- package/dist/esm/components/basic/doc-editor/core/composables/useCanShowPlaceholder.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/composables/useDecorators.js +31 -0
- package/dist/esm/components/basic/doc-editor/core/composables/useDecorators.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/composables/useHistory.js +15 -0
- package/dist/esm/components/basic/doc-editor/core/composables/useHistory.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/composables/useLexicalComposer.js +17 -0
- package/dist/esm/components/basic/doc-editor/core/composables/useLexicalComposer.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/composables/useLexicalTextEntity.js +16 -0
- package/dist/esm/components/basic/doc-editor/core/composables/useLexicalTextEntity.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/composables/useList.js +48 -0
- package/dist/esm/components/basic/doc-editor/core/composables/useList.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/composables/useMounted.js +14 -0
- package/dist/esm/components/basic/doc-editor/core/composables/useMounted.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/composables/useRichTextSetup.js +16 -0
- package/dist/esm/components/basic/doc-editor/core/composables/useRichTextSetup.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/element-block.js +10 -1
- package/dist/esm/components/basic/doc-editor/core/element-block.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/core/index.js +14 -0
- package/dist/esm/components/basic/doc-editor/core/index.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/{plugins/RichTextPlugin/nodes/RichTextNode.js → core/nodes/RichElementNode.js} +82 -36
- package/dist/esm/components/basic/doc-editor/core/nodes/RichElementNode.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoFocusPlugin.vue.js +43 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoFocusPlugin.vue.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoFocusPlugin.vue2.js +5 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoFocusPlugin.vue2.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue.js +5 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue2.js +38 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue2.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/shared.js +176 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/shared.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalCheckListPlugin.vue.js +216 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalCheckListPlugin.vue.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalCheckListPlugin.vue2.js +5 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalCheckListPlugin.vue2.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalHashtagPlugin.vue.js +76 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalHashtagPlugin.vue.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalHashtagPlugin.vue2.js +5 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalHashtagPlugin.vue2.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalHistoryPlugin.vue.js +30 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalHistoryPlugin.vue.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalHistoryPlugin.vue2.js +5 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalHistoryPlugin.vue2.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalLinkPlugin.vue.js +5 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalLinkPlugin.vue.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalLinkPlugin.vue2.js +78 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalLinkPlugin.vue2.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalListPlugin.vue.js +26 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalListPlugin.vue.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalListPlugin.vue2.js +5 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalListPlugin.vue2.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/ContentEditable.vue.js +12 -1
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalRichTextPlugin/ContentEditable.vue.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalRichTextPlugin/DecoratedTeleports.js +25 -0
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalRichTextPlugin/DecoratedTeleports.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/index.vue.js +19 -8
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalRichTextPlugin/index.vue.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/editor.vue.js +31 -24
- package/dist/esm/components/basic/doc-editor/editor.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/{plugins/nodes.js → nodes.js} +13 -11
- package/dist/esm/components/basic/doc-editor/nodes.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/plugins/AutoLinkPlugin/index.vue.js +5 -3
- package/dist/esm/components/basic/doc-editor/plugins/AutoLinkPlugin/index.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/ElementBlockSelectionPlugin/index.vue.js +12 -3
- package/dist/esm/components/basic/doc-editor/plugins/ElementBlockSelectionPlugin/index.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/GridPlugin/index.vue.js +9 -1
- package/dist/esm/components/basic/doc-editor/plugins/GridPlugin/index.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/ImagePlugin/index.vue.js +14 -6
- package/dist/esm/components/basic/doc-editor/plugins/ImagePlugin/index.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/ModulePlugin/composables.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/ModulePlugin/index.vue.js +9 -1
- package/dist/esm/components/basic/doc-editor/plugins/ModulePlugin/index.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/TemplatePlugin/composables.js +10 -1
- package/dist/esm/components/basic/doc-editor/plugins/TemplatePlugin/composables.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/TemplatePlugin/index.vue.js +12 -2
- package/dist/esm/components/basic/doc-editor/plugins/TemplatePlugin/index.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/ContentStyleTool.vue.js +7 -1
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/ContentStyleTool.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleTool.vue.js +9 -1
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleTool.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/PreviewToolbar.vue.js +13 -1
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/PreviewToolbar.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js +9 -1
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/themes/doc-editor-edit.css.js +1 -1
- package/dist/esm/components/basic/doc-editor/themes/doc-editor-edit.css.js.map +1 -1
- package/dist/esm/modules/cms/pages/cms-contents/components/article-list.vue.js +7 -5
- package/dist/esm/modules/cms/pages/cms-contents/components/article-list.vue.js.map +1 -1
- package/dist/esm/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js +2 -2
- package/dist/esm/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js.map +1 -1
- package/dist/esm/modules/cms/pages/cms-contents/components/part-info.vue.js +0 -3
- package/dist/esm/modules/cms/pages/cms-contents/components/part-info.vue.js.map +1 -1
- package/dist/esm/modules/cms/pages/cms-contents/index.vue2.js +9 -5
- package/dist/esm/modules/cms/pages/cms-contents/index.vue2.js.map +1 -1
- package/dist/esm/modules/ms/components/rich-text-editor/index.js.map +1 -1
- package/dist/esm/modules/ms/components/rich-text-editor/rich-text-editor-options.js +2 -4
- package/dist/esm/modules/ms/components/rich-text-editor/rich-text-editor-options.js.map +1 -1
- package/dist/esm/modules/ms/components/rich-text-editor/rich-text-editor.js +5 -4
- package/dist/esm/modules/ms/components/rich-text-editor/rich-text-editor.js.map +1 -1
- package/dist/style/components/basic/doc-editor/index.css +1 -1
- package/dist/style/components/index.css +1 -1
- package/dist/style/index.css +2 -2
- package/dist/style/modules/cms/index.css +1 -1
- package/dist/style/modules/cms/pages/cms-contents/components/article-list.css +1 -1
- package/dist/style/modules/cms/pages/cms-contents/index.css +1 -1
- package/dist/style/modules/ms/components/rich-text-editor/index.css +1 -1
- package/dist/style/modules/ms/index.css +1 -1
- package/dist/style/src/components/basic/doc-editor/index.scss +3 -2
- package/dist/style/src/modules/cms/pages/cms-contents/components/article-list.scss +1 -0
- package/dist/style/src/modules/ms/components/rich-text-editor/index.scss +1 -1
- package/dist/types/components/basic/doc-editor/core/LexicalComposer.vue.d.ts +29 -0
- package/dist/types/components/basic/doc-editor/core/composables/index.d.ts +15 -0
- package/dist/types/components/basic/doc-editor/core/composables/inject.d.ts +1 -0
- package/dist/types/components/basic/doc-editor/core/composables/listenerManager.d.ts +1 -0
- package/dist/types/components/basic/doc-editor/core/composables/useCanShowPlaceholder.d.ts +2 -0
- package/dist/types/components/basic/doc-editor/core/composables/useCharacterLimit.d.ts +9 -0
- package/dist/types/components/basic/doc-editor/core/composables/useDecorators.d.ts +4 -0
- package/dist/types/components/basic/doc-editor/core/composables/useEffect.d.ts +5 -0
- package/dist/types/components/basic/doc-editor/core/composables/useHistory.d.ts +4 -0
- package/dist/types/components/basic/doc-editor/core/composables/useLexicalCommandsLog.d.ts +5 -0
- package/dist/types/components/basic/doc-editor/core/composables/useLexicalComposer.d.ts +6 -0
- package/dist/types/components/basic/doc-editor/core/composables/useLexicalIsTextContentEmpty.d.ts +2 -0
- package/dist/types/components/basic/doc-editor/core/composables/useLexicalNodeSelection.d.ts +7 -0
- package/dist/types/components/basic/doc-editor/core/composables/useLexicalTextEntity.d.ts +3 -0
- package/dist/types/components/basic/doc-editor/core/composables/useList.d.ts +2 -0
- package/dist/types/components/basic/doc-editor/core/composables/useMounted.d.ts +4 -0
- package/dist/types/components/basic/doc-editor/core/composables/usePlainTextSetup.d.ts +2 -0
- package/dist/types/components/basic/doc-editor/core/composables/useReactiveEditor.d.ts +2 -0
- package/dist/types/components/basic/doc-editor/core/composables/useRichTextSetup.d.ts +2 -0
- package/dist/types/components/basic/doc-editor/core/composables/useTableOfContents.d.ts +8 -0
- package/dist/types/components/basic/doc-editor/core/index.d.ts +8 -0
- package/dist/types/components/basic/doc-editor/core/nodes/RichElementNode.d.ts +46 -0
- package/dist/types/components/basic/doc-editor/core/nodes/index.d.ts +1 -0
- package/dist/types/components/basic/doc-editor/core/plugins/LexicalAutoFocusPlugin.vue.d.ts +15 -0
- package/dist/types/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue.d.ts +26 -0
- package/dist/types/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/shared.d.ts +14 -0
- package/dist/types/components/basic/doc-editor/core/plugins/LexicalCheckListPlugin.vue.d.ts +2 -0
- package/dist/types/components/basic/doc-editor/core/plugins/LexicalHashtagPlugin.vue.d.ts +2 -0
- package/dist/types/components/basic/doc-editor/core/plugins/LexicalHistoryPlugin.vue.d.ts +16 -0
- package/dist/types/components/basic/doc-editor/core/plugins/LexicalLinkPlugin.vue.d.ts +15 -0
- package/dist/types/components/basic/doc-editor/core/plugins/LexicalListPlugin.vue.d.ts +2 -0
- package/dist/types/components/basic/doc-editor/core/types.d.ts +2 -0
- package/dist/types/components/basic/doc-editor/plugins/ModulePlugin/composables.d.ts +1 -1
- package/dist/types/components/basic/doc-editor/plugins/TemplatePlugin/composables.d.ts +1 -0
- package/dist/types/components/basic/doc-editor/plugins/index.d.ts +1 -3
- package/dist/types/components/data-model/data-table/views/table/index.d.ts +1 -1
- package/dist/types/components/data-model/data-table/views/table/table.d.ts +1 -1
- package/dist/types/components/data-model/data-table/views/tree/index.d.ts +1 -1
- package/dist/types/components/data-model/data-table/views/tree/tree.d.ts +1 -1
- package/dist/types/modules/ms/components/material-list/material-item.vue.d.ts +1 -1
- package/dist/types/modules/ms/components/rich-text-editor/index.d.ts +2 -2
- package/dist/types/modules/ms/components/rich-text-editor/rich-text-editor-options.d.ts +1 -1
- package/dist/types/modules/ms/components/rich-text-editor/rich-text-editor.d.ts +2 -2
- package/package.json +21 -22
- package/dist/cjs/components/basic/doc-editor/plugins/RichTextPlugin/ContentEditable.vue.js.map +0 -1
- package/dist/cjs/components/basic/doc-editor/plugins/RichTextPlugin/DecoratedTeleports.js +0 -13
- package/dist/cjs/components/basic/doc-editor/plugins/RichTextPlugin/DecoratedTeleports.js.map +0 -1
- package/dist/cjs/components/basic/doc-editor/plugins/RichTextPlugin/index.vue.js.map +0 -1
- package/dist/cjs/components/basic/doc-editor/plugins/RichTextPlugin/nodes/RichTextNode.js.map +0 -1
- package/dist/cjs/components/basic/doc-editor/plugins/nodes.js.map +0 -1
- package/dist/esm/components/basic/doc-editor/plugins/RichTextPlugin/ContentEditable.vue.js.map +0 -1
- package/dist/esm/components/basic/doc-editor/plugins/RichTextPlugin/DecoratedTeleports.js +0 -14
- package/dist/esm/components/basic/doc-editor/plugins/RichTextPlugin/DecoratedTeleports.js.map +0 -1
- package/dist/esm/components/basic/doc-editor/plugins/RichTextPlugin/index.vue.js.map +0 -1
- package/dist/esm/components/basic/doc-editor/plugins/RichTextPlugin/nodes/RichTextNode.js.map +0 -1
- package/dist/esm/components/basic/doc-editor/plugins/nodes.js.map +0 -1
- package/dist/types/components/basic/doc-editor/plugins/RichTextPlugin/nodes/RichTextNode.d.ts +0 -13
- package/dist/types/components/basic/doc-editor/plugins/VideoPlugin/VideoNode.d.ts +0 -23
- /package/dist/cjs/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/ContentEditable.vue2.js +0 -0
- /package/dist/cjs/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/ContentEditable.vue2.js.map +0 -0
- /package/dist/cjs/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/index.vue2.js +0 -0
- /package/dist/cjs/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/index.vue2.js.map +0 -0
- /package/dist/esm/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/ContentEditable.vue2.js +0 -0
- /package/dist/esm/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/ContentEditable.vue2.js.map +0 -0
- /package/dist/esm/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/index.vue2.js +0 -0
- /package/dist/esm/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/index.vue2.js.map +0 -0
- /package/dist/types/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/ContentEditable.vue.d.ts +0 -0
- /package/dist/types/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/DecoratedTeleports.d.ts +0 -0
- /package/dist/types/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/index.vue.d.ts +0 -0
- /package/dist/types/components/basic/doc-editor/{plugins/nodes.d.ts → nodes.d.ts} +0 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { defineComponent } from "vue";
|
|
2
|
+
import "@lexical/text";
|
|
3
|
+
import "@lexical/utils";
|
|
4
|
+
import "@lexical/overflow";
|
|
5
|
+
import "lexical";
|
|
6
|
+
import "tiny-invariant";
|
|
7
|
+
import "@lexical/history";
|
|
8
|
+
import { useLexicalComposer } from "../../composables/useLexicalComposer.js";
|
|
9
|
+
import "@lexical/list";
|
|
10
|
+
import "@lexical/dragon";
|
|
11
|
+
import "@lexical/plain-text";
|
|
12
|
+
import "@lexical/rich-text";
|
|
13
|
+
import { useAutoLink } from "./shared.js";
|
|
14
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
15
|
+
__name: "index",
|
|
16
|
+
props: {
|
|
17
|
+
matchers: {}
|
|
18
|
+
},
|
|
19
|
+
emits: ["change"],
|
|
20
|
+
setup(__props, { emit: __emit }) {
|
|
21
|
+
const props = __props;
|
|
22
|
+
const emit = __emit;
|
|
23
|
+
const editor = useLexicalComposer();
|
|
24
|
+
useAutoLink(editor, props.matchers, (url, prevUrl) => {
|
|
25
|
+
emit("change", {
|
|
26
|
+
url,
|
|
27
|
+
prevUrl
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
return (_ctx, _cache) => {
|
|
31
|
+
return null;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
export {
|
|
36
|
+
_sfc_main as default
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=index.vue2.js.map
|
package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue2.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.vue2.js","sources":["../../../../../../../../src/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { useLexicalComposer } from '../../composables'\r\nimport { type LinkMatcher, useAutoLink } from './shared'\r\n\r\nconst props = defineProps<{\r\n matchers: LinkMatcher[]\r\n}>()\r\n\r\nconst emit = defineEmits<{\r\n (e: 'change', value: { url: string | null, prevUrl: string | null }): void\r\n}>()\r\n\r\nconst editor = useLexicalComposer()\r\n\r\nuseAutoLink(editor, props.matchers, (url: string | null, prevUrl: string | null) => {\r\n emit('change', {\r\n url,\r\n prevUrl,\r\n })\r\n})\r\n</script>\r\n\r\n<template />\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAIA,UAAM,QAAQ;AAId,UAAM,OAAO;AAIb,UAAM,SAAS;AAEf,gBAAY,QAAQ,MAAM,UAAU,CAAC,KAAoB,YAA2B;AAClF,WAAK,UAAU;AAAA,QACb;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IAAA,CACF;;;;;;"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { watchEffect, unref } from "vue";
|
|
2
|
+
import invariant from "tiny-invariant";
|
|
3
|
+
import { AutoLinkNode, $isAutoLinkNode, $isLinkNode, $createAutoLinkNode } from "@lexical/link";
|
|
4
|
+
import { mergeRegister } from "@lexical/utils";
|
|
5
|
+
import { TextNode, $createTextNode, $isTextNode, $isElementNode, $isLineBreakNode } from "lexical";
|
|
6
|
+
function findFirstMatch(text, matchers) {
|
|
7
|
+
for (let i = 0; i < matchers.length; i++) {
|
|
8
|
+
const match = matchers[i](text);
|
|
9
|
+
if (match)
|
|
10
|
+
return match;
|
|
11
|
+
}
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
const PUNCTUATION_OR_SPACE = /[.,;\s]/;
|
|
15
|
+
function isSeparator(char) {
|
|
16
|
+
return PUNCTUATION_OR_SPACE.test(char);
|
|
17
|
+
}
|
|
18
|
+
function endsWithSeparator(textContent) {
|
|
19
|
+
return isSeparator(textContent[textContent.length - 1]);
|
|
20
|
+
}
|
|
21
|
+
function startsWithSeparator(textContent) {
|
|
22
|
+
return isSeparator(textContent[0]);
|
|
23
|
+
}
|
|
24
|
+
function isPreviousNodeValid(node) {
|
|
25
|
+
let previousNode = node.getPreviousSibling();
|
|
26
|
+
if ($isElementNode(previousNode))
|
|
27
|
+
previousNode = previousNode.getLastDescendant();
|
|
28
|
+
return previousNode === null || $isLineBreakNode(previousNode) || $isTextNode(previousNode) && endsWithSeparator(previousNode.getTextContent());
|
|
29
|
+
}
|
|
30
|
+
function isNextNodeValid(node) {
|
|
31
|
+
let nextNode = node.getNextSibling();
|
|
32
|
+
if ($isElementNode(nextNode))
|
|
33
|
+
nextNode = nextNode.getFirstDescendant();
|
|
34
|
+
return nextNode === null || $isLineBreakNode(nextNode) || $isTextNode(nextNode) && startsWithSeparator(nextNode.getTextContent());
|
|
35
|
+
}
|
|
36
|
+
function isContentAroundIsValid(matchStart, matchEnd, text, node) {
|
|
37
|
+
const contentBeforeIsValid = matchStart > 0 ? isSeparator(text[matchStart - 1]) : isPreviousNodeValid(node);
|
|
38
|
+
if (!contentBeforeIsValid)
|
|
39
|
+
return false;
|
|
40
|
+
const contentAfterIsValid = matchEnd < text.length ? isSeparator(text[matchEnd]) : isNextNodeValid(node);
|
|
41
|
+
return contentAfterIsValid;
|
|
42
|
+
}
|
|
43
|
+
function handleLinkCreation(node, matchers, onChange) {
|
|
44
|
+
const nodeText = node.getTextContent();
|
|
45
|
+
let text = nodeText;
|
|
46
|
+
let invalidMatchEnd = 0;
|
|
47
|
+
let remainingTextNode = node;
|
|
48
|
+
let match;
|
|
49
|
+
while ((match = findFirstMatch(text, matchers)) && match !== null) {
|
|
50
|
+
const matchStart = match.index;
|
|
51
|
+
const matchLength = match.length;
|
|
52
|
+
const matchEnd = matchStart + matchLength;
|
|
53
|
+
const isValid = isContentAroundIsValid(
|
|
54
|
+
invalidMatchEnd + matchStart,
|
|
55
|
+
invalidMatchEnd + matchEnd,
|
|
56
|
+
nodeText,
|
|
57
|
+
node
|
|
58
|
+
);
|
|
59
|
+
if (isValid) {
|
|
60
|
+
let linkTextNode;
|
|
61
|
+
if (invalidMatchEnd + matchStart === 0) {
|
|
62
|
+
[linkTextNode, remainingTextNode] = remainingTextNode.splitText(
|
|
63
|
+
invalidMatchEnd + matchLength
|
|
64
|
+
);
|
|
65
|
+
} else {
|
|
66
|
+
[, linkTextNode, remainingTextNode] = remainingTextNode.splitText(
|
|
67
|
+
invalidMatchEnd + matchStart,
|
|
68
|
+
invalidMatchEnd + matchStart + matchLength
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
const linkNode = $createAutoLinkNode(match.url, match.attributes);
|
|
72
|
+
const textNode = $createTextNode(match.text);
|
|
73
|
+
textNode.setFormat(linkTextNode.getFormat());
|
|
74
|
+
textNode.setDetail(linkTextNode.getDetail());
|
|
75
|
+
linkNode.append(textNode);
|
|
76
|
+
linkTextNode.replace(linkNode);
|
|
77
|
+
onChange(match.url, null);
|
|
78
|
+
invalidMatchEnd = 0;
|
|
79
|
+
} else {
|
|
80
|
+
invalidMatchEnd += matchEnd;
|
|
81
|
+
}
|
|
82
|
+
text = text.substring(matchEnd);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function handleLinkEdit(linkNode, matchers, onChange) {
|
|
86
|
+
const children = linkNode.getChildren();
|
|
87
|
+
const childrenLength = children.length;
|
|
88
|
+
for (let i = 0; i < childrenLength; i++) {
|
|
89
|
+
const child = children[i];
|
|
90
|
+
if (!$isTextNode(child) || !child.isSimpleText()) {
|
|
91
|
+
replaceWithChildren(linkNode);
|
|
92
|
+
onChange(null, linkNode.getURL());
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const text = linkNode.getTextContent();
|
|
97
|
+
const match = findFirstMatch(text, matchers);
|
|
98
|
+
if (match === null || match.text !== text) {
|
|
99
|
+
replaceWithChildren(linkNode);
|
|
100
|
+
onChange(null, linkNode.getURL());
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (!isPreviousNodeValid(linkNode) || !isNextNodeValid(linkNode)) {
|
|
104
|
+
replaceWithChildren(linkNode);
|
|
105
|
+
onChange(null, linkNode.getURL());
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const url = linkNode.getURL();
|
|
109
|
+
if (url !== match.url) {
|
|
110
|
+
linkNode.setURL(match.url);
|
|
111
|
+
onChange(match.url, url);
|
|
112
|
+
}
|
|
113
|
+
if (match.attributes) {
|
|
114
|
+
const rel = linkNode.getRel();
|
|
115
|
+
if (rel !== match.attributes.rel) {
|
|
116
|
+
linkNode.setRel(match.attributes.rel || null);
|
|
117
|
+
onChange(match.attributes.rel || null, rel);
|
|
118
|
+
}
|
|
119
|
+
const target = linkNode.getTarget();
|
|
120
|
+
if (target !== match.attributes.target) {
|
|
121
|
+
linkNode.setTarget(match.attributes.target || null);
|
|
122
|
+
onChange(match.attributes.target || null, target);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
function handleBadNeighbors(textNode, onChange) {
|
|
127
|
+
const previousSibling = textNode.getPreviousSibling();
|
|
128
|
+
const nextSibling = textNode.getNextSibling();
|
|
129
|
+
const text = textNode.getTextContent();
|
|
130
|
+
if ($isAutoLinkNode(previousSibling) && !startsWithSeparator(text)) {
|
|
131
|
+
replaceWithChildren(previousSibling);
|
|
132
|
+
onChange(null, previousSibling.getURL());
|
|
133
|
+
}
|
|
134
|
+
if ($isAutoLinkNode(nextSibling) && !endsWithSeparator(text)) {
|
|
135
|
+
replaceWithChildren(nextSibling);
|
|
136
|
+
onChange(null, nextSibling.getURL());
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
function replaceWithChildren(node) {
|
|
140
|
+
const children = node.getChildren();
|
|
141
|
+
const childrenLength = children.length;
|
|
142
|
+
for (let j = childrenLength - 1; j >= 0; j--)
|
|
143
|
+
node.insertAfter(children[j]);
|
|
144
|
+
node.remove();
|
|
145
|
+
return children.map((child) => child.getLatest());
|
|
146
|
+
}
|
|
147
|
+
function useAutoLink(editor, matchers, onChange) {
|
|
148
|
+
watchEffect((onInvalidate) => {
|
|
149
|
+
if (!editor.hasNodes([AutoLinkNode]))
|
|
150
|
+
invariant(false, "LexicalAutoLinkPlugin: AutoLinkNode not registered on editor");
|
|
151
|
+
const onChangeWrapped = (url, prevUrl) => {
|
|
152
|
+
if (onChange)
|
|
153
|
+
onChange(url, prevUrl);
|
|
154
|
+
};
|
|
155
|
+
const fn = mergeRegister(
|
|
156
|
+
editor.registerNodeTransform(TextNode, (textNode) => {
|
|
157
|
+
const parent = textNode.getParentOrThrow();
|
|
158
|
+
if ($isAutoLinkNode(parent)) {
|
|
159
|
+
handleLinkEdit(parent, unref(matchers), onChangeWrapped);
|
|
160
|
+
} else if (!$isLinkNode(parent)) {
|
|
161
|
+
if (textNode.isSimpleText())
|
|
162
|
+
handleLinkCreation(textNode, unref(matchers), onChangeWrapped);
|
|
163
|
+
handleBadNeighbors(textNode, onChangeWrapped);
|
|
164
|
+
}
|
|
165
|
+
}),
|
|
166
|
+
editor.registerNodeTransform(AutoLinkNode, (linkNode) => {
|
|
167
|
+
handleLinkEdit(linkNode, unref(matchers), onChangeWrapped);
|
|
168
|
+
})
|
|
169
|
+
);
|
|
170
|
+
onInvalidate(fn);
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
export {
|
|
174
|
+
useAutoLink
|
|
175
|
+
};
|
|
176
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sources":["../../../../../../../../src/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/shared.ts"],"sourcesContent":["import type { LinkAttributes } from '@lexical/link'\r\nimport type { ElementNode, LexicalEditor, LexicalNode } from 'lexical'\r\nimport { unref, watchEffect } from 'vue'\r\nimport invariant from 'tiny-invariant'\r\n\r\nimport {\r\n $createAutoLinkNode,\r\n $isAutoLinkNode,\r\n $isLinkNode,\r\n AutoLinkNode,\r\n} from '@lexical/link'\r\nimport { mergeRegister } from '@lexical/utils'\r\nimport {\r\n $createTextNode,\r\n $isElementNode,\r\n $isLineBreakNode,\r\n $isTextNode,\r\n TextNode,\r\n} from 'lexical'\r\nimport type { MaybeRef } from 'vue'\r\n\r\ntype ChangeHandler = (url: string | null, prevUrl: string | null) => void\r\n\r\ninterface LinkMatcherResult {\r\n attributes?: LinkAttributes\r\n index: number\r\n length: number\r\n text: string\r\n url: string\r\n}\r\n\r\nexport type LinkMatcher = (text: string) => LinkMatcherResult | null\r\n\r\nfunction findFirstMatch(\r\n text: string,\r\n matchers: Array<LinkMatcher>,\r\n): LinkMatcherResult | null {\r\n for (let i = 0; i < matchers.length; i++) {\r\n const match = matchers[i](text)\r\n\r\n if (match)\r\n return match\r\n }\r\n\r\n return null\r\n}\r\n\r\nconst PUNCTUATION_OR_SPACE = /[.,;\\s]/\r\n\r\nfunction isSeparator(char: string): boolean {\r\n return PUNCTUATION_OR_SPACE.test(char)\r\n}\r\n\r\nfunction endsWithSeparator(textContent: string): boolean {\r\n return isSeparator(textContent[textContent.length - 1])\r\n}\r\n\r\nfunction startsWithSeparator(textContent: string): boolean {\r\n return isSeparator(textContent[0])\r\n}\r\n\r\nfunction isPreviousNodeValid(node: LexicalNode): boolean {\r\n let previousNode = node.getPreviousSibling()\r\n if ($isElementNode(previousNode))\r\n previousNode = previousNode.getLastDescendant()\r\n\r\n return (\r\n previousNode === null\r\n || $isLineBreakNode(previousNode)\r\n || ($isTextNode(previousNode)\r\n && endsWithSeparator(previousNode.getTextContent()))\r\n )\r\n}\r\n\r\nfunction isNextNodeValid(node: LexicalNode): boolean {\r\n let nextNode = node.getNextSibling()\r\n if ($isElementNode(nextNode))\r\n nextNode = nextNode.getFirstDescendant()\r\n\r\n return (\r\n nextNode === null\r\n || $isLineBreakNode(nextNode)\r\n || ($isTextNode(nextNode) && startsWithSeparator(nextNode.getTextContent()))\r\n )\r\n}\r\n\r\nfunction isContentAroundIsValid(\r\n matchStart: number,\r\n matchEnd: number,\r\n text: string,\r\n node: TextNode,\r\n): boolean {\r\n const contentBeforeIsValid\r\n = matchStart > 0\r\n ? isSeparator(text[matchStart - 1])\r\n : isPreviousNodeValid(node)\r\n if (!contentBeforeIsValid)\r\n return false\r\n\r\n const contentAfterIsValid\r\n = matchEnd < text.length\r\n ? isSeparator(text[matchEnd])\r\n : isNextNodeValid(node)\r\n return contentAfterIsValid\r\n}\r\n\r\nfunction handleLinkCreation(\r\n node: TextNode,\r\n matchers: Array<LinkMatcher>,\r\n onChange: ChangeHandler,\r\n): void {\r\n const nodeText = node.getTextContent()\r\n let text = nodeText\r\n let invalidMatchEnd = 0\r\n let remainingTextNode = node\r\n let match\r\n\r\n // eslint-disable-next-line no-cond-assign\r\n while ((match = findFirstMatch(text, matchers)) && match !== null) {\r\n const matchStart = match.index\r\n const matchLength = match.length\r\n const matchEnd = matchStart + matchLength\r\n const isValid = isContentAroundIsValid(\r\n invalidMatchEnd + matchStart,\r\n invalidMatchEnd + matchEnd,\r\n nodeText,\r\n node,\r\n )\r\n\r\n if (isValid) {\r\n let linkTextNode\r\n if (invalidMatchEnd + matchStart === 0) {\r\n [linkTextNode, remainingTextNode] = remainingTextNode.splitText(\r\n invalidMatchEnd + matchLength,\r\n )\r\n }\r\n else {\r\n [, linkTextNode, remainingTextNode] = remainingTextNode.splitText(\r\n invalidMatchEnd + matchStart,\r\n invalidMatchEnd + matchStart + matchLength,\r\n )\r\n }\r\n const linkNode = $createAutoLinkNode(match.url, match.attributes)\r\n const textNode = $createTextNode(match.text)\r\n textNode.setFormat(linkTextNode.getFormat())\r\n textNode.setDetail(linkTextNode.getDetail())\r\n linkNode.append(textNode)\r\n linkTextNode.replace(linkNode)\r\n onChange(match.url, null)\r\n invalidMatchEnd = 0\r\n }\r\n else {\r\n invalidMatchEnd += matchEnd\r\n }\r\n\r\n text = text.substring(matchEnd)\r\n }\r\n}\r\n\r\nfunction handleLinkEdit(\r\n linkNode: AutoLinkNode,\r\n matchers: Array<LinkMatcher>,\r\n onChange: ChangeHandler,\r\n): void {\r\n // Check children are simple text\r\n const children = linkNode.getChildren()\r\n const childrenLength = children.length\r\n for (let i = 0; i < childrenLength; i++) {\r\n const child = children[i]\r\n if (!$isTextNode(child) || !child.isSimpleText()) {\r\n replaceWithChildren(linkNode)\r\n onChange(null, linkNode.getURL())\r\n return\r\n }\r\n }\r\n\r\n // Check text content fully matches\r\n const text = linkNode.getTextContent()\r\n const match = findFirstMatch(text, matchers)\r\n if (match === null || match.text !== text) {\r\n replaceWithChildren(linkNode)\r\n onChange(null, linkNode.getURL())\r\n return\r\n }\r\n\r\n // Check neighbors\r\n if (!isPreviousNodeValid(linkNode) || !isNextNodeValid(linkNode)) {\r\n replaceWithChildren(linkNode)\r\n onChange(null, linkNode.getURL())\r\n return\r\n }\r\n\r\n const url = linkNode.getURL()\r\n if (url !== match.url) {\r\n linkNode.setURL(match.url)\r\n onChange(match.url, url)\r\n }\r\n\r\n if (match.attributes) {\r\n const rel = linkNode.getRel()\r\n if (rel !== match.attributes.rel) {\r\n linkNode.setRel(match.attributes.rel || null)\r\n onChange(match.attributes.rel || null, rel)\r\n }\r\n\r\n const target = linkNode.getTarget()\r\n if (target !== match.attributes.target) {\r\n linkNode.setTarget(match.attributes.target || null)\r\n onChange(match.attributes.target || null, target)\r\n }\r\n }\r\n}\r\n\r\n// Bad neighbours are edits in neighbor nodes that make AutoLinks incompatible.\r\n// Given the creation preconditions, these can only be simple text nodes.\r\nfunction handleBadNeighbors(textNode: TextNode, onChange: ChangeHandler): void {\r\n const previousSibling = textNode.getPreviousSibling()\r\n const nextSibling = textNode.getNextSibling()\r\n const text = textNode.getTextContent()\r\n\r\n if ($isAutoLinkNode(previousSibling) && !startsWithSeparator(text)) {\r\n replaceWithChildren(previousSibling)\r\n onChange(null, previousSibling.getURL())\r\n }\r\n\r\n if ($isAutoLinkNode(nextSibling) && !endsWithSeparator(text)) {\r\n replaceWithChildren(nextSibling)\r\n onChange(null, nextSibling.getURL())\r\n }\r\n}\r\n\r\nfunction replaceWithChildren(node: ElementNode): Array<LexicalNode> {\r\n const children = node.getChildren()\r\n const childrenLength = children.length\r\n\r\n for (let j = childrenLength - 1; j >= 0; j--)\r\n node.insertAfter(children[j])\r\n\r\n node.remove()\r\n return children.map(child => child.getLatest())\r\n}\r\n\r\nexport function useAutoLink(\r\n editor: LexicalEditor,\r\n matchers: MaybeRef<Array<LinkMatcher>>,\r\n onChange?: ChangeHandler,\r\n) {\r\n watchEffect((onInvalidate) => {\r\n if (!editor.hasNodes([AutoLinkNode]))\r\n invariant(false, 'LexicalAutoLinkPlugin: AutoLinkNode not registered on editor')\r\n\r\n const onChangeWrapped = (url: string | null, prevUrl: string | null) => {\r\n if (onChange)\r\n onChange(url, prevUrl)\r\n }\r\n\r\n const fn = mergeRegister(\r\n editor.registerNodeTransform(TextNode, (textNode: TextNode) => {\r\n const parent = textNode.getParentOrThrow()\r\n if ($isAutoLinkNode(parent)) {\r\n handleLinkEdit(parent, unref(matchers), onChangeWrapped)\r\n }\r\n else if (!$isLinkNode(parent)) {\r\n if (textNode.isSimpleText())\r\n handleLinkCreation(textNode, unref(matchers), onChangeWrapped)\r\n\r\n handleBadNeighbors(textNode, onChangeWrapped)\r\n }\r\n }),\r\n\r\n editor.registerNodeTransform(AutoLinkNode, (linkNode: AutoLinkNode) => {\r\n handleLinkEdit(linkNode, unref(matchers), onChangeWrapped)\r\n }),\r\n )\r\n\r\n onInvalidate(fn)\r\n })\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { defineComponent } from "vue";
|
|
2
|
+
import { COMMAND_PRIORITY_LOW, KEY_ARROW_DOWN_COMMAND, KEY_ARROW_UP_COMMAND, KEY_ESCAPE_COMMAND, KEY_SPACE_COMMAND, $getNearestNodeFromDOMNode, KEY_ARROW_LEFT_COMMAND, $getSelection, $isRangeSelection, $isElementNode } from "lexical";
|
|
3
|
+
import { INSERT_CHECK_LIST_COMMAND, insertList, $isListItemNode, $isListNode } from "@lexical/list";
|
|
4
|
+
import { mergeRegister, $findMatchingParent } from "@lexical/utils";
|
|
5
|
+
import "@lexical/text";
|
|
6
|
+
import { useMounted } from "../composables/useMounted.js";
|
|
7
|
+
import "@lexical/overflow";
|
|
8
|
+
import "tiny-invariant";
|
|
9
|
+
import "@lexical/history";
|
|
10
|
+
import { useLexicalComposer } from "../composables/useLexicalComposer.js";
|
|
11
|
+
import "@lexical/dragon";
|
|
12
|
+
import "@lexical/plain-text";
|
|
13
|
+
import "@lexical/rich-text";
|
|
14
|
+
import { registerClickAndPointerListeners } from "../composables/listenerManager.js";
|
|
15
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
16
|
+
__name: "LexicalCheckListPlugin",
|
|
17
|
+
setup(__props) {
|
|
18
|
+
const editor = useLexicalComposer();
|
|
19
|
+
useMounted(() => {
|
|
20
|
+
return mergeRegister(
|
|
21
|
+
editor.registerCommand(
|
|
22
|
+
INSERT_CHECK_LIST_COMMAND,
|
|
23
|
+
() => {
|
|
24
|
+
insertList(editor, "check");
|
|
25
|
+
return true;
|
|
26
|
+
},
|
|
27
|
+
COMMAND_PRIORITY_LOW
|
|
28
|
+
),
|
|
29
|
+
editor.registerCommand(
|
|
30
|
+
KEY_ARROW_DOWN_COMMAND,
|
|
31
|
+
(event) => {
|
|
32
|
+
return handleArrownUpOrDown(event, editor, false);
|
|
33
|
+
},
|
|
34
|
+
COMMAND_PRIORITY_LOW
|
|
35
|
+
),
|
|
36
|
+
editor.registerCommand(
|
|
37
|
+
KEY_ARROW_UP_COMMAND,
|
|
38
|
+
(event) => {
|
|
39
|
+
return handleArrownUpOrDown(event, editor, true);
|
|
40
|
+
},
|
|
41
|
+
COMMAND_PRIORITY_LOW
|
|
42
|
+
),
|
|
43
|
+
editor.registerCommand(
|
|
44
|
+
KEY_ESCAPE_COMMAND,
|
|
45
|
+
(_event) => {
|
|
46
|
+
const activeItem = getActiveCheckListItem();
|
|
47
|
+
if (activeItem != null) {
|
|
48
|
+
const rootElement = editor.getRootElement();
|
|
49
|
+
if (rootElement != null)
|
|
50
|
+
rootElement.focus();
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
return false;
|
|
54
|
+
},
|
|
55
|
+
COMMAND_PRIORITY_LOW
|
|
56
|
+
),
|
|
57
|
+
editor.registerCommand(
|
|
58
|
+
KEY_SPACE_COMMAND,
|
|
59
|
+
(event) => {
|
|
60
|
+
const activeItem = getActiveCheckListItem();
|
|
61
|
+
if (activeItem != null) {
|
|
62
|
+
editor.update(() => {
|
|
63
|
+
const listItemNode = $getNearestNodeFromDOMNode(activeItem);
|
|
64
|
+
if ($isListItemNode(listItemNode)) {
|
|
65
|
+
event.preventDefault();
|
|
66
|
+
listItemNode.toggleChecked();
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
},
|
|
73
|
+
COMMAND_PRIORITY_LOW
|
|
74
|
+
),
|
|
75
|
+
editor.registerCommand(
|
|
76
|
+
KEY_ARROW_LEFT_COMMAND,
|
|
77
|
+
(event) => {
|
|
78
|
+
return editor.getEditorState().read(() => {
|
|
79
|
+
const selection = $getSelection();
|
|
80
|
+
if ($isRangeSelection(selection) && selection.isCollapsed()) {
|
|
81
|
+
const { anchor } = selection;
|
|
82
|
+
const isElement = anchor.type === "element";
|
|
83
|
+
if (isElement || anchor.offset === 0) {
|
|
84
|
+
const anchorNode = anchor.getNode();
|
|
85
|
+
const elementNode = $findMatchingParent(
|
|
86
|
+
anchorNode,
|
|
87
|
+
(node) => $isElementNode(node) && !node.isInline()
|
|
88
|
+
);
|
|
89
|
+
if ($isListItemNode(elementNode)) {
|
|
90
|
+
const parent = elementNode.getParent();
|
|
91
|
+
if ($isListNode(parent) && parent.getListType() === "check" && (isElement || elementNode.getFirstDescendant() === anchorNode)) {
|
|
92
|
+
const domNode = editor.getElementByKey(elementNode.__key);
|
|
93
|
+
if (domNode != null && document.activeElement !== domNode) {
|
|
94
|
+
domNode.focus();
|
|
95
|
+
event.preventDefault();
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return false;
|
|
103
|
+
});
|
|
104
|
+
},
|
|
105
|
+
COMMAND_PRIORITY_LOW
|
|
106
|
+
),
|
|
107
|
+
listenPointerDown()
|
|
108
|
+
);
|
|
109
|
+
});
|
|
110
|
+
function listenPointerDown() {
|
|
111
|
+
return registerClickAndPointerListeners(() => {
|
|
112
|
+
document.addEventListener("click", handleClick);
|
|
113
|
+
document.addEventListener("pointerdown", handlePointerDown);
|
|
114
|
+
}, () => {
|
|
115
|
+
document.removeEventListener("click", handleClick);
|
|
116
|
+
document.removeEventListener("pointerdown", handlePointerDown);
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
function handleCheckItemEvent(event, callback) {
|
|
120
|
+
const target = event.target;
|
|
121
|
+
if (!(target instanceof HTMLElement))
|
|
122
|
+
return;
|
|
123
|
+
const firstChild = target.firstChild;
|
|
124
|
+
if (firstChild != null && (firstChild.tagName === "UL" || firstChild.tagName === "OL")) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const parentNode = target.parentNode;
|
|
128
|
+
if (!parentNode || parentNode.__lexicalListType !== "check")
|
|
129
|
+
return;
|
|
130
|
+
const pageX = event.pageX;
|
|
131
|
+
const rect = target.getBoundingClientRect();
|
|
132
|
+
if (target.dir === "rtl" ? pageX < rect.right && pageX > rect.right - 20 : pageX > rect.left && pageX < rect.left + 20) {
|
|
133
|
+
callback();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
function handleClick(event) {
|
|
137
|
+
handleCheckItemEvent(event, () => {
|
|
138
|
+
const domNode = event.target;
|
|
139
|
+
const editor2 = findEditor(domNode);
|
|
140
|
+
if (editor2 !== null) {
|
|
141
|
+
editor2.update(() => {
|
|
142
|
+
const node = $getNearestNodeFromDOMNode(domNode);
|
|
143
|
+
if ($isListItemNode(node)) {
|
|
144
|
+
domNode.focus();
|
|
145
|
+
node.toggleChecked();
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
function handlePointerDown(event) {
|
|
152
|
+
handleCheckItemEvent(event, () => {
|
|
153
|
+
event.preventDefault();
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
function findEditor(target) {
|
|
157
|
+
let node = target;
|
|
158
|
+
while (node) {
|
|
159
|
+
if (node.__lexicalEditor)
|
|
160
|
+
return node.__lexicalEditor;
|
|
161
|
+
node = node.parentNode;
|
|
162
|
+
}
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
function getActiveCheckListItem() {
|
|
166
|
+
const { activeElement } = document;
|
|
167
|
+
return activeElement !== null && activeElement.tagName === "LI" && activeElement.parentNode !== null && activeElement.parentNode.__lexicalListType === "check" ? activeElement : null;
|
|
168
|
+
}
|
|
169
|
+
function findCheckListItemSibling(node, backward) {
|
|
170
|
+
let sibling = backward ? node.getPreviousSibling() : node.getNextSibling();
|
|
171
|
+
let parent = node;
|
|
172
|
+
while (sibling == null && $isListItemNode(parent)) {
|
|
173
|
+
parent = parent.getParentOrThrow().getParent();
|
|
174
|
+
if (parent !== null) {
|
|
175
|
+
sibling = backward ? parent.getPreviousSibling() : parent.getNextSibling();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
while ($isListItemNode(sibling)) {
|
|
179
|
+
const firstChild = backward ? sibling.getLastChild() : sibling.getFirstChild();
|
|
180
|
+
if (!$isListNode(firstChild))
|
|
181
|
+
return sibling;
|
|
182
|
+
sibling = backward ? firstChild.getLastChild() : firstChild.getFirstChild();
|
|
183
|
+
}
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
function handleArrownUpOrDown(event, editor2, backward) {
|
|
187
|
+
const activeItem = getActiveCheckListItem();
|
|
188
|
+
if (activeItem != null) {
|
|
189
|
+
editor2.update(() => {
|
|
190
|
+
const listItem = $getNearestNodeFromDOMNode(activeItem);
|
|
191
|
+
if (!$isListItemNode(listItem))
|
|
192
|
+
return;
|
|
193
|
+
const nextListItem = findCheckListItemSibling(listItem, backward);
|
|
194
|
+
if (nextListItem != null) {
|
|
195
|
+
nextListItem.selectStart();
|
|
196
|
+
const dom = editor2.getElementByKey(nextListItem.__key);
|
|
197
|
+
if (dom != null) {
|
|
198
|
+
event.preventDefault();
|
|
199
|
+
setTimeout(() => {
|
|
200
|
+
dom.focus();
|
|
201
|
+
}, 0);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
return (_ctx, _cache) => {
|
|
209
|
+
return null;
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
export {
|
|
214
|
+
_sfc_main as default
|
|
215
|
+
};
|
|
216
|
+
//# sourceMappingURL=LexicalCheckListPlugin.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LexicalCheckListPlugin.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/core/plugins/LexicalCheckListPlugin.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\n/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n * @flow strict\r\n */\r\n\r\nimport type { ListItemNode } from '@lexical/list'\r\nimport {\r\n $getNearestNodeFromDOMNode,\r\n $getSelection,\r\n $isElementNode,\r\n $isRangeSelection,\r\n COMMAND_PRIORITY_LOW,\r\n KEY_ARROW_DOWN_COMMAND,\r\n KEY_ARROW_LEFT_COMMAND,\r\n KEY_ARROW_UP_COMMAND,\r\n KEY_ESCAPE_COMMAND,\r\n KEY_SPACE_COMMAND,\r\n} from 'lexical'\r\nimport type { LexicalEditor } from 'lexical'\r\n\r\nimport {\r\n $isListItemNode,\r\n $isListNode,\r\n INSERT_CHECK_LIST_COMMAND,\r\n insertList,\r\n} from '@lexical/list'\r\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\r\nimport { useLexicalComposer } from '../composables'\r\nimport { useMounted } from '../composables/useMounted'\r\nimport { registerClickAndPointerListeners } from '../composables/listenerManager'\r\n\r\nconst editor = useLexicalComposer()\r\n\r\nuseMounted(() => {\r\n return mergeRegister(\r\n editor.registerCommand(\r\n INSERT_CHECK_LIST_COMMAND,\r\n () => {\r\n insertList(editor, 'check')\r\n return true\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(\r\n KEY_ARROW_DOWN_COMMAND,\r\n (event) => {\r\n return handleArrownUpOrDown(event, editor, false)\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(\r\n KEY_ARROW_UP_COMMAND,\r\n (event) => {\r\n return handleArrownUpOrDown(event, editor, true)\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(\r\n KEY_ESCAPE_COMMAND,\r\n (_event) => {\r\n const activeItem = getActiveCheckListItem()\r\n if (activeItem != null) {\r\n const rootElement = editor.getRootElement()\r\n if (rootElement != null)\r\n rootElement.focus()\r\n\r\n return true\r\n }\r\n return false\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(\r\n KEY_SPACE_COMMAND,\r\n (event) => {\r\n const activeItem = getActiveCheckListItem()\r\n if (activeItem != null) {\r\n editor.update(() => {\r\n const listItemNode = $getNearestNodeFromDOMNode(activeItem)\r\n if ($isListItemNode(listItemNode!)) {\r\n event.preventDefault()\r\n listItemNode.toggleChecked()\r\n }\r\n })\r\n return true\r\n }\r\n return false\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(\r\n KEY_ARROW_LEFT_COMMAND,\r\n (event) => {\r\n return editor.getEditorState().read(() => {\r\n const selection = $getSelection()\r\n if ($isRangeSelection(selection) && selection.isCollapsed()) {\r\n const { anchor } = selection\r\n const isElement = anchor.type === 'element'\r\n if (isElement || anchor.offset === 0) {\r\n const anchorNode = anchor.getNode()\r\n const elementNode = $findMatchingParent(\r\n anchorNode,\r\n node => $isElementNode(node) && !node.isInline(),\r\n )\r\n\r\n if ($isListItemNode(elementNode)) {\r\n const parent = elementNode.getParent()\r\n if (\r\n $isListNode(parent)\r\n && parent.getListType() === 'check'\r\n && (isElement\r\n || elementNode.getFirstDescendant() === anchorNode)\r\n ) {\r\n const domNode = editor.getElementByKey(elementNode.__key)\r\n\r\n if (domNode != null && document.activeElement !== domNode) {\r\n domNode.focus()\r\n event.preventDefault()\r\n return true\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return false\r\n })\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n listenPointerDown(),\r\n )\r\n})\r\n\r\nfunction listenPointerDown() {\r\n return registerClickAndPointerListeners(() => {\r\n // @ts-expect-error: speculation ambiguous\r\n document.addEventListener('click', handleClick)\r\n document.addEventListener('pointerdown', handlePointerDown)\r\n }, () => {\r\n // @ts-expect-error: speculation ambiguous\r\n document.removeEventListener('click', handleClick)\r\n document.removeEventListener('pointerdown', handlePointerDown)\r\n })\r\n}\r\n\r\nfunction handleCheckItemEvent(event: PointerEvent, callback: () => void) {\r\n const target = event.target\r\n if (!(target instanceof HTMLElement))\r\n return\r\n\r\n // Ignore clicks on LI that have nested lists\r\n // @ts-expect-error: internal field\r\n const firstChild: HTMLElement | null = target.firstChild\r\n if (\r\n firstChild != null\r\n && (firstChild.tagName === 'UL' || firstChild.tagName === 'OL')\r\n ) {\r\n return\r\n }\r\n\r\n const parentNode = target.parentNode\r\n // @ts-expect-error: Internal field\r\n if (!parentNode || parentNode.__lexicalListType !== 'check')\r\n return\r\n\r\n const pageX = event.pageX\r\n const rect = target.getBoundingClientRect()\r\n\r\n if (\r\n target.dir === 'rtl'\r\n ? pageX < rect.right && pageX > rect.right - 20\r\n : pageX > rect.left && pageX < rect.left + 20\r\n ) {\r\n callback()\r\n }\r\n}\r\n\r\nfunction handleClick(event: PointerEvent) {\r\n handleCheckItemEvent(event as PointerEvent, () => {\r\n const domNode = event.target as HTMLElement\r\n const editor = findEditor(domNode)\r\n\r\n if (editor !== null) {\r\n editor.update(() => {\r\n const node = $getNearestNodeFromDOMNode(domNode)\r\n if ($isListItemNode(node!)) {\r\n domNode.focus()\r\n node.toggleChecked()\r\n }\r\n })\r\n }\r\n })\r\n}\r\n\r\nfunction handlePointerDown(event: PointerEvent) {\r\n handleCheckItemEvent(event, () => {\r\n // Prevents caret moving when clicking on check mark\r\n event.preventDefault()\r\n })\r\n}\r\n\r\nfunction findEditor(target: Node) {\r\n let node: ParentNode | Node | null = target\r\n\r\n while (node) {\r\n // @ts-expect-error internal field\r\n if (node.__lexicalEditor)\r\n // @ts-expect-error internal field\r\n return (node.__lexicalEditor)\r\n\r\n node = node.parentNode\r\n }\r\n return null\r\n}\r\n\r\nfunction getActiveCheckListItem(): HTMLElement | Element | null {\r\n const { activeElement } = document\r\n return activeElement !== null\r\n && activeElement.tagName === 'LI'\r\n && activeElement.parentNode !== null\r\n // @ts-expect-error: internal field missing\r\n && activeElement.parentNode.__lexicalListType === 'check'\r\n ? activeElement\r\n : null\r\n}\r\n\r\nfunction findCheckListItemSibling(\r\n node: ListItemNode,\r\n backward: boolean,\r\n): ListItemNode | null {\r\n let sibling = backward ? node.getPreviousSibling() : node.getNextSibling()\r\n let parent = node\r\n // Going up in a tree to get non-null sibling\r\n while (sibling == null && $isListItemNode(parent)) {\r\n // Get li -> parent ul/ol -> parent li\r\n parent = parent.getParentOrThrow().getParent() as ListItemNode\r\n if (parent !== null) {\r\n sibling = backward\r\n ? parent.getPreviousSibling()\r\n : parent.getNextSibling()\r\n }\r\n }\r\n\r\n // Going down in a tree to get first non-nested list item\r\n while ($isListItemNode(sibling!)) {\r\n const firstChild = backward\r\n ? sibling.getLastChild()\r\n : sibling.getFirstChild()\r\n if (!$isListNode(firstChild!))\r\n return sibling\r\n\r\n sibling = backward ? firstChild.getLastChild() : firstChild.getFirstChild()\r\n }\r\n\r\n return null\r\n}\r\n\r\nfunction handleArrownUpOrDown(\r\n event: KeyboardEvent,\r\n editor: LexicalEditor,\r\n backward: boolean,\r\n) {\r\n const activeItem = getActiveCheckListItem()\r\n\r\n if (activeItem != null) {\r\n editor.update(() => {\r\n const listItem = $getNearestNodeFromDOMNode(activeItem)\r\n if (!$isListItemNode(listItem!))\r\n return\r\n\r\n const nextListItem = findCheckListItemSibling(listItem, backward)\r\n if (nextListItem != null) {\r\n nextListItem.selectStart()\r\n const dom = editor.getElementByKey(nextListItem.__key)\r\n if (dom != null) {\r\n event.preventDefault()\r\n setTimeout(() => {\r\n dom.focus()\r\n }, 0)\r\n }\r\n }\r\n })\r\n }\r\n\r\n return false\r\n}\r\n</script>\r\n\r\n<template />\r\n"],"names":["editor"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LexicalCheckListPlugin.vue2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { defineComponent, onMounted } from "vue";
|
|
2
|
+
import { HashtagNode, $createHashtagNode } from "@lexical/hashtag";
|
|
3
|
+
import invariant from "tiny-invariant";
|
|
4
|
+
import "@lexical/text";
|
|
5
|
+
import "@lexical/utils";
|
|
6
|
+
import "@lexical/overflow";
|
|
7
|
+
import "lexical";
|
|
8
|
+
import "@lexical/history";
|
|
9
|
+
import { useLexicalComposer } from "../composables/useLexicalComposer.js";
|
|
10
|
+
import { useLexicalTextEntity } from "../composables/useLexicalTextEntity.js";
|
|
11
|
+
import "@lexical/list";
|
|
12
|
+
import "@lexical/dragon";
|
|
13
|
+
import "@lexical/plain-text";
|
|
14
|
+
import "@lexical/rich-text";
|
|
15
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
16
|
+
__name: "LexicalHashtagPlugin",
|
|
17
|
+
setup(__props) {
|
|
18
|
+
function getHashtagRegexStringChars() {
|
|
19
|
+
const latinAccents = "À-ÖØ-öø-ÿĀ-ɏɓ-ɔɖ-ɗəɛɣɨɯɲʉʋʻ̀-ͯḀ-ỿ";
|
|
20
|
+
const nonLatinChars = "Ѐ-ӿԀ-ԧⷠ-ⷿꙀ-֑ꚟ-ֿׁ-ׂׄ-ׇׅא-תװ-״-ﬨשׁ-זּטּ-לּמּנּ-סּףּ-פּצּ-ﭏؐ-ؚؠ-ٟٮ-ۓە-ۜ۞-۪ۨ-ۯۺ-ۼۿݐ-ݿࢠࢢ-ࢬࣤ-ࣾﭐ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼ-ก-ฺเ-๎ᄀ-ᇿ-ㆅꥠ-가-ힰ-ᄀ-ᅵ";
|
|
21
|
+
const charCode = String.fromCharCode;
|
|
22
|
+
const cjkChars = `ァ-ヺー-ヾヲ-゚0-9A-Za-zぁ-ゖ゙-ゞ㐀-䶿一-鿿${// Kanji (Unified)
|
|
23
|
+
// Disabled as it breaks the Regex.
|
|
24
|
+
// charCode(0x20000) + '-' + charCode(0x2A6DF) + // Kanji (CJK Extension B)
|
|
25
|
+
charCode(173824)}-${charCode(177983)}${charCode(177984)}-${charCode(178207)}${charCode(194560)}-${charCode(195103)}〃々〻`;
|
|
26
|
+
const otherChars = latinAccents + nonLatinChars + cjkChars;
|
|
27
|
+
const unicodeLetters = "A-Za-zªµºÀ-ÖØ-öø-Ɂɐ-ˁˆ-ˑˠ-ˤˮͺΆΈ-ΊΌΎ-ΡΣ-ώϐ-ϵϷ-ҁҊ-ӎӐ-ӹԀ-ԏԱ-Ֆՙա-ևא-תװ-ײء-غـ-يٮ-ٯٱ-ۓەۥ-ۦۮ-ۯۺ-ۼۿܐܒ-ܯݍ-ݭހ-ޥޱऄ-हऽॐक़-ॡॽঅ-ঌএ-ঐও-নপ-রলশ-হঽৎড়-ঢ়য়-ৡৰ-ৱਅ-ਊਏ-ਐਓ-ਨਪ-ਰਲ-ਲ਼ਵ-ਸ਼ਸ-ਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલ-ળવ-હઽૐૠ-ૡଅ-ଌଏ-ଐଓ-ନପ-ରଲ-ଳଵ-ହଽଡ଼-ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கங-சஜஞ-டண-தந-பம-ஹఅ-ఌఎ-ఐఒ-నప-ళవ-హౠ-ౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠ-ೡഅ-ഌഎ-ഐഒ-നപ-ഹൠ-ൡඅ-ඖක-නඳ-රලව-ෆก-ะา-ำเ-ๆກ-ຂຄງ-ຈຊຍດ-ທນ-ຟມ-ຣລວສ-ຫອ-ະາ-ຳຽເ-ໄໆໜ-ໝༀཀ-ཇཉ-ཪྈ-ྋက-အဣ-ဧဩ-ဪၐ-ၕႠ-Ⴥა-ჺჼᄀ-ᅙᅟ-ᆢᆨ-ᇹሀ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙶᚁ-ᚚᚠ-ᛪᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᤀ-ᤜᥐ-ᥭᥰ-ᥴᦀ-ᦩᧁ-ᧇᨀ-ᨖᴀ-ᶿḀ-ẛẠ-ỹἀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₔℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℱℳ-ℹℼ-ℿⅅ-ⅉⰀ-Ⱞⰰ-ⱞⲀ-ⳤⴀ-ⴥⴰ-ⵥⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ々-〆〱-〵〻-〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄬㄱ-ㆎㆠ-ㆷㇰ-ㇿ㐀-䶵一-龻ꀀ-ꒌꠀ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢ가-힣豈-鶴侮-頻並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּ-סּףּ-פּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ";
|
|
28
|
+
const unicodeAccents = "̀-ͯ҃-֑҆-ֹֻ-ֽֿׁ-ׂׄ-ׇׅؐ-ًؕ-ٰٞۖ-ۜ۟-ۤۧ-۪ۨ-ܑۭܰ-݊ަ-ްँ-ः़ा-्॑-॔ॢ-ॣঁ-ঃ়া-ৄে-ৈো-্ৗৢ-ৣਁ-ਃ਼ਾ-ੂੇ-ੈੋ-੍ੰ-ੱઁ-ઃ઼ા-ૅે-ૉો-્ૢ-ૣଁ-ଃ଼ା-ୃେ-ୈୋ-୍ୖ-ୗஂா-ூெ-ைொ-்ௗఁ-ఃా-ౄె-ైొ-్ౕ-ౖಂ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕ-ೖം-ഃാ-ൃെ-ൈൊ-്ൗං-ඃ්ා-ුූෘ-ෟෲ-ෳัิ-ฺ็-๎ັິ-ູົ-ຼ່-ໍ༘-༹༙༵༷༾-༿ཱ-྄྆-྇ྐ-ྗྙ-ྼ࿆ာ-ဲံ-္ၖ-ၙ፟ᜒ-᜔ᜲ-᜴ᝒ-ᝓᝲ-ᝳា-៓៝᠋-᠍ᢩᤠ-ᤫᤰ-᤻ᦰ-ᧀᧈ-ᧉᨗ-ᨛ᷀-᷃⃐-⃥⃜⃡-⃫〪-゙〯-゚ꠂ꠆ꠋꠣ-ꠧﬞ︀-️︠-︣";
|
|
29
|
+
const unicodeDigits = "0-9٠-٩۰-۹०-९০-৯੦-੯૦-૯୦-୯௦-௯౦-౯೦-೯൦-൯๐-๙໐-໙༠-༩၀-၉០-៩᠐-᠙᥆-᥏᧐-᧙0-9";
|
|
30
|
+
const alpha = unicodeLetters + unicodeAccents + otherChars;
|
|
31
|
+
const numeric = `${unicodeDigits}_`;
|
|
32
|
+
const alphanumeric = alpha + numeric;
|
|
33
|
+
const hashChars = "#\\uFF03";
|
|
34
|
+
return {
|
|
35
|
+
alpha,
|
|
36
|
+
alphanumeric,
|
|
37
|
+
hashChars
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function getHashtagRegexString() {
|
|
41
|
+
const { alpha, alphanumeric, hashChars } = getHashtagRegexStringChars();
|
|
42
|
+
const hashtagAlpha = `[${alpha}]`;
|
|
43
|
+
const hashtagAlphanumeric = `[${alphanumeric}]`;
|
|
44
|
+
const hashtagBoundary = `^|$|[^&/${alphanumeric}]`;
|
|
45
|
+
const hashCharList = `[${hashChars}]`;
|
|
46
|
+
const hashtag = `(${hashtagBoundary})(${hashCharList})(${hashtagAlphanumeric}*${hashtagAlpha}${hashtagAlphanumeric}*)`;
|
|
47
|
+
return hashtag;
|
|
48
|
+
}
|
|
49
|
+
const REGEX = new RegExp(getHashtagRegexString(), "i");
|
|
50
|
+
const editor = useLexicalComposer();
|
|
51
|
+
onMounted(() => {
|
|
52
|
+
if (!editor.hasNodes([HashtagNode]))
|
|
53
|
+
invariant(false, "HashtagPlugin: HashtagNode not registered on editor");
|
|
54
|
+
});
|
|
55
|
+
function createHashtagNode(textNode) {
|
|
56
|
+
return $createHashtagNode(textNode.getTextContent());
|
|
57
|
+
}
|
|
58
|
+
function getHashtagMatch(text) {
|
|
59
|
+
const matchArr = REGEX.exec(text);
|
|
60
|
+
if (matchArr === null)
|
|
61
|
+
return null;
|
|
62
|
+
const hashtagLength = matchArr[3].length + 1;
|
|
63
|
+
const startOffset = matchArr.index + matchArr[1].length;
|
|
64
|
+
const endOffset = startOffset + hashtagLength;
|
|
65
|
+
return { end: endOffset, start: startOffset };
|
|
66
|
+
}
|
|
67
|
+
useLexicalTextEntity(getHashtagMatch, HashtagNode, createHashtagNode);
|
|
68
|
+
return (_ctx, _cache) => {
|
|
69
|
+
return null;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
export {
|
|
74
|
+
_sfc_main as default
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=LexicalHashtagPlugin.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LexicalHashtagPlugin.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/core/plugins/LexicalHashtagPlugin.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport type { TextNode } from 'lexical'\r\n\r\nimport { $createHashtagNode, HashtagNode } from '@lexical/hashtag'\r\nimport { onMounted } from 'vue'\r\nimport invariant from 'tiny-invariant'\r\nimport { useLexicalComposer, useLexicalTextEntity } from '../composables'\r\n\r\nfunction getHashtagRegexStringChars(): {\r\n alpha: string\r\n alphanumeric: string\r\n hashChars: string\r\n} {\r\n // Latin accented characters\r\n // Excludes 0xd7 from the range\r\n // (the multiplication sign, confusable with \"x\").\r\n // Also excludes 0xf7, the division sign\r\n const latinAccents\r\n = '\\xC0-\\xD6'\r\n + '\\xD8-\\xF6'\r\n + '\\xF8-\\xFF'\r\n + '\\u0100-\\u024F'\r\n + '\\u0253-\\u0254'\r\n + '\\u0256-\\u0257'\r\n + '\\u0259'\r\n + '\\u025B'\r\n + '\\u0263'\r\n + '\\u0268'\r\n + '\\u026F'\r\n + '\\u0272'\r\n + '\\u0289'\r\n + '\\u028B'\r\n + '\\u02BB'\r\n + '\\u0300-\\u036F'\r\n + '\\u1E00-\\u1EFF'\r\n\r\n // Cyrillic (Russian, Ukrainian, etc.)\r\n const nonLatinChars\r\n = '\\u0400-\\u04FF' // Cyrillic\r\n + '\\u0500-\\u0527' // Cyrillic Supplement\r\n + '\\u2DE0-\\u2DFF' // Cyrillic Extended A\r\n + '\\uA640-\\uA69F' // Cyrillic Extended B\r\n + '\\u0591-\\u05BF' // Hebrew\r\n + '\\u05C1-\\u05C2'\r\n + '\\u05C4-\\u05C5'\r\n + '\\u05C7'\r\n + '\\u05D0-\\u05EA'\r\n + '\\u05F0-\\u05F4'\r\n + '\\uFB12-\\uFB28' // Hebrew Presentation Forms\r\n + '\\uFB2A-\\uFB36'\r\n + '\\uFB38-\\uFB3C'\r\n + '\\uFB3E'\r\n + '\\uFB40-\\uFB41'\r\n + '\\uFB43-\\uFB44'\r\n + '\\uFB46-\\uFB4F'\r\n + '\\u0610-\\u061A' // Arabic\r\n + '\\u0620-\\u065F'\r\n + '\\u066E-\\u06D3'\r\n + '\\u06D5-\\u06DC'\r\n + '\\u06DE-\\u06E8'\r\n + '\\u06EA-\\u06EF'\r\n + '\\u06FA-\\u06FC'\r\n + '\\u06FF'\r\n + '\\u0750-\\u077F' // Arabic Supplement\r\n + '\\u08A0' // Arabic Extended A\r\n + '\\u08A2-\\u08AC'\r\n + '\\u08E4-\\u08FE'\r\n + '\\uFB50-\\uFBB1' // Arabic Pres. Forms A\r\n + '\\uFBD3-\\uFD3D'\r\n + '\\uFD50-\\uFD8F'\r\n + '\\uFD92-\\uFDC7'\r\n + '\\uFDF0-\\uFDFB'\r\n + '\\uFE70-\\uFE74' // Arabic Pres. Forms B\r\n + '\\uFE76-\\uFEFC'\r\n + '\\u200C-\\u200C' // Zero-Width Non-Joiner\r\n + '\\u0E01-\\u0E3A' // Thai\r\n + '\\u0E40-\\u0E4E' // Hangul (Korean)\r\n + '\\u1100-\\u11FF' // Hangul Jamo\r\n + '\\u3130-\\u3185' // Hangul Compatibility Jamo\r\n + '\\uA960-\\uA97F' // Hangul Jamo Extended-A\r\n + '\\uAC00-\\uD7AF' // Hangul Syllables\r\n + '\\uD7B0-\\uD7FF' // Hangul Jamo Extended-B\r\n + '\\uFFA1-\\uFFDC' // Half-width Hangul\r\n\r\n const charCode = String.fromCharCode\r\n\r\n const cjkChars\r\n = '\\u30A1-\\u30FA\\u30FC-\\u30FE' // Katakana (full-width)\r\n + '\\uFF66-\\uFF9F' // Katakana (half-width)\r\n + '\\uFF10-\\uFF19\\uFF21-\\uFF3A'\r\n + '\\uFF41-\\uFF5A' // Latin (full-width)\r\n + '\\u3041-\\u3096\\u3099-\\u309E' // Hiragana\r\n + '\\u3400-\\u4DBF' // Kanji (CJK Extension A)\r\n + `\\u4E00-\\u9FFF${// Kanji (Unified)\r\n // Disabled as it breaks the Regex.\r\n // charCode(0x20000) + '-' + charCode(0x2A6DF) + // Kanji (CJK Extension B)\r\n charCode(0x2A700)\r\n }-${\r\n charCode(0x2B73F) // Kanji (CJK Extension C)\r\n }${charCode(0x2B740)\r\n }-${\r\n charCode(0x2B81F) // Kanji (CJK Extension D)\r\n }${charCode(0x2F800)\r\n }-${\r\n charCode(0x2FA1F)\r\n }\\u3003\\u3005\\u303B` // Kanji (CJK supplement)\r\n\r\n const otherChars = latinAccents + nonLatinChars + cjkChars\r\n\r\n // equivalent of \\p{L}\r\n const unicodeLetters\r\n = '\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6'\r\n + '\\u00F8-\\u0241\\u0250-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EE\\u037A\\u0386'\r\n + '\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03CE\\u03D0-\\u03F5\\u03F7-\\u0481'\r\n + '\\u048A-\\u04CE\\u04D0-\\u04F9\\u0500-\\u050F\\u0531-\\u0556\\u0559\\u0561-\\u0587'\r\n + '\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u063A\\u0640-\\u064A\\u066E-\\u066F'\r\n + '\\u0671-\\u06D3\\u06D5\\u06E5-\\u06E6\\u06EE-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710'\r\n + '\\u0712-\\u072F\\u074D-\\u076D\\u0780-\\u07A5\\u07B1\\u0904-\\u0939\\u093D\\u0950'\r\n + '\\u0958-\\u0961\\u097D\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0'\r\n + '\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC-\\u09DD\\u09DF-\\u09E1\\u09F0-\\u09F1'\r\n + '\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32-\\u0A33'\r\n + '\\u0A35-\\u0A36\\u0A38-\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D'\r\n + '\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABD'\r\n + '\\u0AD0\\u0AE0-\\u0AE1\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30'\r\n + '\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C-\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83'\r\n + '\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F'\r\n + '\\u0BA3-\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0C05-\\u0C0C\\u0C0E-\\u0C10'\r\n + '\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C60-\\u0C61\\u0C85-\\u0C8C'\r\n + '\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE'\r\n + '\\u0CE0-\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39'\r\n + '\\u0D60-\\u0D61\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6'\r\n + '\\u0E01-\\u0E30\\u0E32-\\u0E33\\u0E40-\\u0E46\\u0E81-\\u0E82\\u0E84\\u0E87-\\u0E88'\r\n + '\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7'\r\n + '\\u0EAA-\\u0EAB\\u0EAD-\\u0EB0\\u0EB2-\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6'\r\n + '\\u0EDC-\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6A\\u0F88-\\u0F8B\\u1000-\\u1021'\r\n + '\\u1023-\\u1027\\u1029-\\u102A\\u1050-\\u1055\\u10A0-\\u10C5\\u10D0-\\u10FA\\u10FC'\r\n + '\\u1100-\\u1159\\u115F-\\u11A2\\u11A8-\\u11F9\\u1200-\\u1248\\u124A-\\u124D'\r\n + '\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0'\r\n + '\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310'\r\n + '\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C'\r\n + '\\u166F-\\u1676\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711'\r\n + '\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7'\r\n + '\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974'\r\n + '\\u1980-\\u19A9\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1D00-\\u1DBF\\u1E00-\\u1E9B'\r\n + '\\u1EA0-\\u1EF9\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D'\r\n + '\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC'\r\n + '\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC'\r\n + '\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u2094\\u2102\\u2107'\r\n + '\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D'\r\n + '\\u212F-\\u2131\\u2133-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u2C00-\\u2C2E'\r\n + '\\u2C30-\\u2C5E\\u2C80-\\u2CE4\\u2D00-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96'\r\n + '\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6'\r\n + '\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3006\\u3031-\\u3035'\r\n + '\\u303B-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF'\r\n + '\\u3105-\\u312C\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31FF\\u3400-\\u4DB5'\r\n + '\\u4E00-\\u9FBB\\uA000-\\uA48C\\uA800-\\uA801\\uA803-\\uA805\\uA807-\\uA80A'\r\n + '\\uA80C-\\uA822\\uAC00-\\uD7A3\\uF900-\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD9'\r\n + '\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C'\r\n + '\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F'\r\n + '\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A'\r\n + '\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7'\r\n + '\\uFFDA-\\uFFDC'\r\n\r\n // equivalent of \\p{Mn}\\p{Mc}\r\n const unicodeAccents\r\n = '\\u0300-\\u036F\\u0483-\\u0486\\u0591-\\u05B9\\u05BB-\\u05BD\\u05BF'\r\n + '\\u05C1-\\u05C2\\u05C4-\\u05C5\\u05C7\\u0610-\\u0615\\u064B-\\u065E\\u0670'\r\n + '\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7-\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A'\r\n + '\\u07A6-\\u07B0\\u0901-\\u0903\\u093C\\u093E-\\u094D\\u0951-\\u0954\\u0962-\\u0963'\r\n + '\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7-\\u09C8\\u09CB-\\u09CD\\u09D7'\r\n + '\\u09E2-\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47-\\u0A48\\u0A4B-\\u0A4D'\r\n + '\\u0A70-\\u0A71\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD'\r\n + '\\u0AE2-\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B43\\u0B47-\\u0B48\\u0B4B-\\u0B4D'\r\n + '\\u0B56-\\u0B57\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7'\r\n + '\\u0C01-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55-\\u0C56'\r\n + '\\u0C82-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5-\\u0CD6'\r\n + '\\u0D02-\\u0D03\\u0D3E-\\u0D43\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D82-\\u0D83'\r\n + '\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2-\\u0DF3\\u0E31\\u0E34-\\u0E3A'\r\n + '\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB-\\u0EBC\\u0EC8-\\u0ECD\\u0F18-\\u0F19'\r\n + '\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F3F\\u0F71-\\u0F84\\u0F86-\\u0F87\\u0F90-\\u0F97'\r\n + '\\u0F99-\\u0FBC\\u0FC6\\u102C-\\u1032\\u1036-\\u1039\\u1056-\\u1059\\u135F'\r\n + '\\u1712-\\u1714\\u1732-\\u1734\\u1752-\\u1753\\u1772-\\u1773\\u17B6-\\u17D3\\u17DD'\r\n + '\\u180B-\\u180D\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u19B0-\\u19C0\\u19C8-\\u19C9'\r\n + '\\u1A17-\\u1A1B\\u1DC0-\\u1DC3\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20EB\\u302A-\\u302F'\r\n + '\\u3099-\\u309A\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uFB1E\\uFE00-\\uFE0F'\r\n + '\\uFE20-\\uFE23'\r\n\r\n // equivalent of \\p{Dn}\r\n const unicodeDigits\r\n = '\\u0030-\\u0039\\u0660-\\u0669\\u06F0-\\u06F9\\u0966-\\u096F\\u09E6-\\u09EF'\r\n + '\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F'\r\n + '\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29'\r\n + '\\u1040-\\u1049\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9'\r\n + '\\uFF10-\\uFF19'\r\n // An alpha char is a unicode chars including unicode marks or\r\n // letter or char in otherChars range\r\n const alpha = unicodeLetters + unicodeAccents + otherChars\r\n // A numeric character is any with the number digit property, or\r\n // underscore. These characters can be included in hashtags, but a hashtag\r\n // cannot have only these characters.\r\n const numeric = `${unicodeDigits}_`\r\n // Alphanumeric char is any alpha char or a unicode char with decimal\r\n // number property \\p{Nd}\r\n const alphanumeric = alpha + numeric\r\n\r\n const hashChars = '#\\\\uFF03' // normal '#' or full-width '#'\r\n\r\n return {\r\n alpha,\r\n alphanumeric,\r\n hashChars,\r\n }\r\n}\r\n\r\nfunction getHashtagRegexString(): string {\r\n const { alpha, alphanumeric, hashChars } = getHashtagRegexStringChars()\r\n\r\n const hashtagAlpha = `[${alpha}]`\r\n const hashtagAlphanumeric = `[${alphanumeric}]`\r\n const hashtagBoundary = `^|$|[^&/${alphanumeric}]`\r\n const hashCharList = `[${hashChars}]`\r\n\r\n // A hashtag contains characters, numbers and underscores,\r\n // but not all numbers.\r\n const hashtag\r\n = `(${\r\n hashtagBoundary\r\n })(${\r\n hashCharList\r\n })(${\r\n hashtagAlphanumeric\r\n }*${\r\n hashtagAlpha\r\n }${hashtagAlphanumeric\r\n }*)`\r\n\r\n return hashtag\r\n}\r\n\r\nconst REGEX = new RegExp(getHashtagRegexString(), 'i')\r\n\r\nconst editor = useLexicalComposer()\r\n\r\nonMounted(() => {\r\n if (!editor.hasNodes([HashtagNode]))\r\n invariant(false, 'HashtagPlugin: HashtagNode not registered on editor')\r\n})\r\n\r\nfunction createHashtagNode(textNode: TextNode) {\r\n return $createHashtagNode(textNode.getTextContent())\r\n}\r\n\r\nfunction getHashtagMatch(text: string) {\r\n const matchArr = REGEX.exec(text)\r\n if (matchArr === null)\r\n return null\r\n\r\n const hashtagLength = matchArr[3].length + 1\r\n const startOffset = matchArr.index + matchArr[1].length\r\n const endOffset = startOffset + hashtagLength\r\n return { end: endOffset, start: startOffset }\r\n}\r\n\r\nuseLexicalTextEntity<HashtagNode>(getHashtagMatch, HashtagNode, createHashtagNode)\r\n</script>\r\n\r\n<template />\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAQA,aAAS,6BAIP;AAKA,YAAM,eACF;AAmBJ,YAAM,gBACF;AA8CJ,YAAM,WAAW,OAAO;AAExB,YAAM,WACF;AAAA;AAAA;AAAA,MASA,SAAS,MAAO,CAClB,IACE,SAAS,MAAO,CAClB,GAAG,SAAS,MAAO,CACnB,IACE,SAAS,MAAO,CAClB,GAAG,SAAS,MAAO,CACnB,IACE,SAAS,MAAO,CAClB;AAEI,YAAA,aAAa,eAAe,gBAAgB;AAGlD,YAAM,iBACF;AAqDJ,YAAM,iBACF;AAuBJ,YAAM,gBACF;AAOE,YAAA,QAAQ,iBAAiB,iBAAiB;AAI1C,YAAA,UAAU,GAAG,aAAa;AAGhC,YAAM,eAAe,QAAQ;AAE7B,YAAM,YAAY;AAEX,aAAA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,aAAS,wBAAgC;AACvC,YAAM,EAAE,OAAO,cAAc,cAAc,2BAA2B;AAEhE,YAAA,eAAe,IAAI,KAAK;AACxB,YAAA,sBAAsB,IAAI,YAAY;AACtC,YAAA,kBAAkB,WAAW,YAAY;AACzC,YAAA,eAAe,IAAI,SAAS;AAI5B,YAAA,UACF,IACA,eACF,KACE,YACF,KACE,mBACF,IACE,YACF,GAAG,mBACH;AAEK,aAAA;AAAA,IACT;AAEA,UAAM,QAAQ,IAAI,OAAO,yBAAyB,GAAG;AAErD,UAAM,SAAS;AAEf,cAAU,MAAM;AACd,UAAI,CAAC,OAAO,SAAS,CAAC,WAAW,CAAC;AAChC,kBAAU,OAAO,qDAAqD;AAAA,IAAA,CACzE;AAED,aAAS,kBAAkB,UAAoB;AACtC,aAAA,mBAAmB,SAAS,eAAA,CAAgB;AAAA,IACrD;AAEA,aAAS,gBAAgB,MAAc;AAC/B,YAAA,WAAW,MAAM,KAAK,IAAI;AAChC,UAAI,aAAa;AACR,eAAA;AAET,YAAM,gBAAgB,SAAS,CAAC,EAAE,SAAS;AAC3C,YAAM,cAAc,SAAS,QAAQ,SAAS,CAAC,EAAE;AACjD,YAAM,YAAY,cAAc;AAChC,aAAO,EAAE,KAAK,WAAW,OAAO,YAAY;AAAA,IAC9C;AAEkC,yBAAA,iBAAiB,aAAa,iBAAiB;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LexicalHashtagPlugin.vue2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|