@maketribe/ms-app 3.2.4 → 3.2.6
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/assets/iconfonts/iconfont.js +1 -1
- package/dist/cjs/assets/iconfonts/iconfont.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/lexical-vue/components/LexicalBlockWithAlignableContents.vue.js +4 -0
- package/dist/cjs/components/basic/doc-editor/lexical-vue/components/LexicalBlockWithAlignableContents.vue.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/lexical-vue/components/LexicalBlockWithAlignableContents.vue2.js +108 -0
- package/dist/cjs/components/basic/doc-editor/lexical-vue/components/LexicalBlockWithAlignableContents.vue2.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/lexical-vue/components/LexicalDecoratorBlockNode.js +4 -0
- package/dist/cjs/components/basic/doc-editor/lexical-vue/components/LexicalDecoratorBlockNode.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/lexical-vue/components/LexicalRichTextPlugin.vue.js +24 -18
- package/dist/cjs/components/basic/doc-editor/lexical-vue/components/LexicalRichTextPlugin.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/HtmlBlockPlugin/DocHtmlBlockComponent.js +93 -0
- package/dist/cjs/components/basic/doc-editor/plugins/HtmlBlockPlugin/DocHtmlBlockComponent.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/plugins/HtmlBlockPlugin/index.js +128 -0
- package/dist/cjs/components/basic/doc-editor/plugins/HtmlBlockPlugin/index.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/plugins/HtmlBlockPlugin/index.vue.js +51 -0
- package/dist/cjs/components/basic/doc-editor/plugins/HtmlBlockPlugin/index.vue.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/plugins/HtmlBlockPlugin/index.vue2.js +4 -0
- package/dist/cjs/components/basic/doc-editor/plugins/HtmlBlockPlugin/index.vue2.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/plugins/ImagePlugin/DocImageComponent.js +26 -46
- package/dist/cjs/components/basic/doc-editor/plugins/ImagePlugin/DocImageComponent.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ImagePlugin/ImageEditPanel.js +14 -5
- package/dist/cjs/components/basic/doc-editor/plugins/ImagePlugin/ImageEditPanel.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ImagePlugin/index.js +0 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ImagePlugin/index.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ImagePlugin/index.vue.js +2 -0
- package/dist/cjs/components/basic/doc-editor/plugins/ImagePlugin/index.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ImageTextPlugin/index.js +7 -0
- package/dist/cjs/components/basic/doc-editor/plugins/ImageTextPlugin/index.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ImageTextPlugin/index.vue.js +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ImageTextPlugin/index.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/{HtmlCodeTool.vue.js → PreviewToolbar.vue.js} +56 -43
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/PreviewToolbar.vue.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/PreviewToolbar.vue2.js +4 -0
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/PreviewToolbar.vue2.js.map +1 -0
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js +2 -2
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/index.vue.js +3 -1
- package/dist/cjs/components/basic/doc-editor/plugins/index.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/nodes.js +3 -1
- package/dist/cjs/components/basic/doc-editor/plugins/nodes.js.map +1 -1
- package/dist/cjs/components/business/resource-list/ResourceManager.js +0 -24
- package/dist/cjs/components/business/resource-list/ResourceManager.js.map +1 -1
- package/dist/cjs/components/business/resource-list/resource-list.vue.js +38 -15
- package/dist/cjs/components/business/resource-list/resource-list.vue.js.map +1 -1
- package/dist/cjs/components/business/resource-manager/resource-manager.vue.js +1 -12
- package/dist/cjs/components/business/resource-manager/resource-manager.vue.js.map +1 -1
- package/dist/cjs/components/data-model/data-table/views/table/table.js +0 -1
- package/dist/cjs/components/data-model/data-table/views/table/table.js.map +1 -1
- package/dist/cjs/components/data-model/data-table/views/table-view/header/header.js +12 -9
- package/dist/cjs/components/data-model/data-table/views/table-view/header/header.js.map +1 -1
- package/dist/cjs/components/data-model/data-table/views/tree/tree-options.js +1 -0
- package/dist/cjs/components/data-model/data-table/views/tree/tree-options.js.map +1 -1
- package/dist/cjs/components/data-model/data-table/views/tree/tree.js +14 -2
- package/dist/cjs/components/data-model/data-table/views/tree/tree.js.map +1 -1
- package/dist/cjs/composables/use-single-view.js +2 -0
- package/dist/cjs/composables/use-single-view.js.map +1 -1
- package/dist/cjs/core/MSAppClient.js +8 -6
- package/dist/cjs/core/MSAppClient.js.map +1 -1
- package/dist/cjs/core/PageManager.js.map +1 -1
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/modules/cms/components/part-tree/index.vue.js +24 -9
- package/dist/cjs/modules/cms/components/part-tree/index.vue.js.map +1 -1
- package/dist/cjs/modules/cms/dataviews/cms-parts/CmsContentManPartForm.js +26 -0
- package/dist/cjs/modules/cms/dataviews/cms-parts/CmsContentManPartForm.js.map +1 -0
- package/dist/cjs/modules/cms/index.js +2 -1
- package/dist/cjs/modules/cms/index.js.map +1 -1
- package/dist/cjs/modules/cms/pages/cms-contents/article-edit-add-page.vue2.js +44 -22
- package/dist/cjs/modules/cms/pages/cms-contents/article-edit-add-page.vue2.js.map +1 -1
- package/dist/cjs/modules/cms/pages/cms-contents/components/article-list.vue.js +2 -2
- package/dist/cjs/modules/cms/pages/cms-contents/components/article-list.vue.js.map +1 -1
- package/dist/cjs/modules/cms/pages/cms-contents/index.vue2.js +99 -87
- package/dist/cjs/modules/cms/pages/cms-contents/index.vue2.js.map +1 -1
- package/dist/cjs/modules/cms/pages/cms-resource/index.vue2.js +45 -5
- package/dist/cjs/modules/cms/pages/cms-resource/index.vue2.js.map +1 -1
- package/dist/cjs/modules/ms/components/material-list/material-item.vue.js +0 -1
- package/dist/cjs/modules/ms/components/material-list/material-item.vue.js.map +1 -1
- package/dist/cjs/modules/ms/components/material-list/material-list-options.js +1 -1
- package/dist/cjs/modules/ms/components/material-list/material-list-options.js.map +1 -1
- package/dist/cjs/modules/ms/components/material-select/material-select-api.js +1 -1
- package/dist/cjs/modules/ms/dataviews/ms-menu/MsMenuTree.js +18 -0
- package/dist/cjs/modules/ms/dataviews/ms-menu/MsMenuTree.js.map +1 -1
- package/dist/cjs/modules/ms/dataviews/ms-role/MsRolePermissionConfigTable.js +4 -1
- package/dist/cjs/modules/ms/dataviews/ms-role/MsRolePermissionConfigTable.js.map +1 -1
- package/dist/cjs/modules/ms/index.js +2 -2
- package/dist/cjs/modules/ms/pages/ms-material/index.vue2.js +13 -16
- package/dist/cjs/modules/ms/pages/ms-material/index.vue2.js.map +1 -1
- package/dist/cjs/modules/ms/pages/ms-menu/index.vue2.js +49 -7
- package/dist/cjs/modules/ms/pages/ms-menu/index.vue2.js.map +1 -1
- package/dist/esm/assets/iconfonts/iconfont.js +1 -1
- package/dist/esm/assets/iconfonts/iconfont.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/lexical-vue/components/LexicalBlockWithAlignableContents.vue.js +5 -0
- package/dist/esm/components/basic/doc-editor/lexical-vue/components/LexicalBlockWithAlignableContents.vue.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/lexical-vue/components/LexicalBlockWithAlignableContents.vue2.js +109 -0
- package/dist/esm/components/basic/doc-editor/lexical-vue/components/LexicalBlockWithAlignableContents.vue2.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/lexical-vue/components/LexicalDecoratorBlockNode.js +4 -0
- package/dist/esm/components/basic/doc-editor/lexical-vue/components/LexicalDecoratorBlockNode.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/lexical-vue/components/LexicalRichTextPlugin.vue.js +25 -19
- package/dist/esm/components/basic/doc-editor/lexical-vue/components/LexicalRichTextPlugin.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/HtmlBlockPlugin/DocHtmlBlockComponent.js +94 -0
- package/dist/esm/components/basic/doc-editor/plugins/HtmlBlockPlugin/DocHtmlBlockComponent.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/plugins/HtmlBlockPlugin/index.js +128 -0
- package/dist/esm/components/basic/doc-editor/plugins/HtmlBlockPlugin/index.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/plugins/HtmlBlockPlugin/index.vue.js +52 -0
- package/dist/esm/components/basic/doc-editor/plugins/HtmlBlockPlugin/index.vue.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/plugins/HtmlBlockPlugin/index.vue2.js +5 -0
- package/dist/esm/components/basic/doc-editor/plugins/HtmlBlockPlugin/index.vue2.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/plugins/ImagePlugin/DocImageComponent.js +27 -47
- package/dist/esm/components/basic/doc-editor/plugins/ImagePlugin/DocImageComponent.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/ImagePlugin/ImageEditPanel.js +14 -5
- package/dist/esm/components/basic/doc-editor/plugins/ImagePlugin/ImageEditPanel.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/ImagePlugin/index.js +0 -1
- package/dist/esm/components/basic/doc-editor/plugins/ImagePlugin/index.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/ImagePlugin/index.vue.js +2 -0
- package/dist/esm/components/basic/doc-editor/plugins/ImagePlugin/index.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/ImageTextPlugin/index.js +7 -0
- package/dist/esm/components/basic/doc-editor/plugins/ImageTextPlugin/index.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/ImageTextPlugin/index.vue.js +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/ImageTextPlugin/index.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/PreviewToolbar.vue.js +117 -0
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/PreviewToolbar.vue.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/PreviewToolbar.vue2.js +5 -0
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/PreviewToolbar.vue2.js.map +1 -0
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/index.vue.js +3 -1
- package/dist/esm/components/basic/doc-editor/plugins/index.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/nodes.js +3 -1
- package/dist/esm/components/basic/doc-editor/plugins/nodes.js.map +1 -1
- package/dist/esm/components/business/resource-list/ResourceManager.js +1 -25
- package/dist/esm/components/business/resource-list/ResourceManager.js.map +1 -1
- package/dist/esm/components/business/resource-list/resource-list.vue.js +39 -16
- package/dist/esm/components/business/resource-list/resource-list.vue.js.map +1 -1
- package/dist/esm/components/business/resource-manager/resource-manager.vue.js +2 -13
- package/dist/esm/components/business/resource-manager/resource-manager.vue.js.map +1 -1
- package/dist/esm/components/data-model/data-table/views/table/table.js +0 -1
- package/dist/esm/components/data-model/data-table/views/table/table.js.map +1 -1
- package/dist/esm/components/data-model/data-table/views/table-view/header/header.js +12 -9
- package/dist/esm/components/data-model/data-table/views/table-view/header/header.js.map +1 -1
- package/dist/esm/components/data-model/data-table/views/tree/tree-options.js +1 -0
- package/dist/esm/components/data-model/data-table/views/tree/tree-options.js.map +1 -1
- package/dist/esm/components/data-model/data-table/views/tree/tree.js +15 -3
- package/dist/esm/components/data-model/data-table/views/tree/tree.js.map +1 -1
- package/dist/esm/composables/use-single-view.js +2 -0
- package/dist/esm/composables/use-single-view.js.map +1 -1
- package/dist/esm/core/MSAppClient.js +8 -6
- package/dist/esm/core/MSAppClient.js.map +1 -1
- package/dist/esm/core/PageManager.js.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/modules/cms/components/part-tree/index.vue.js +25 -10
- package/dist/esm/modules/cms/components/part-tree/index.vue.js.map +1 -1
- package/dist/esm/modules/cms/dataviews/cms-parts/CmsContentManPartForm.js +26 -0
- package/dist/esm/modules/cms/dataviews/cms-parts/CmsContentManPartForm.js.map +1 -0
- package/dist/esm/modules/cms/index.js +2 -1
- package/dist/esm/modules/cms/index.js.map +1 -1
- package/dist/esm/modules/cms/pages/cms-contents/article-edit-add-page.vue2.js +46 -24
- package/dist/esm/modules/cms/pages/cms-contents/article-edit-add-page.vue2.js.map +1 -1
- package/dist/esm/modules/cms/pages/cms-contents/components/article-list.vue.js +2 -2
- package/dist/esm/modules/cms/pages/cms-contents/components/article-list.vue.js.map +1 -1
- package/dist/esm/modules/cms/pages/cms-contents/index.vue2.js +101 -89
- package/dist/esm/modules/cms/pages/cms-contents/index.vue2.js.map +1 -1
- package/dist/esm/modules/cms/pages/cms-resource/index.vue2.js +46 -6
- package/dist/esm/modules/cms/pages/cms-resource/index.vue2.js.map +1 -1
- package/dist/esm/modules/ms/components/material-list/material-item.vue.js +0 -1
- package/dist/esm/modules/ms/components/material-list/material-item.vue.js.map +1 -1
- package/dist/esm/modules/ms/components/material-list/material-list-options.js +1 -1
- package/dist/esm/modules/ms/components/material-list/material-list-options.js.map +1 -1
- package/dist/esm/modules/ms/components/material-select/material-select-api.js +1 -1
- package/dist/esm/modules/ms/dataviews/ms-menu/MsMenuTree.js +18 -0
- package/dist/esm/modules/ms/dataviews/ms-menu/MsMenuTree.js.map +1 -1
- package/dist/esm/modules/ms/dataviews/ms-role/MsRolePermissionConfigTable.js +4 -1
- package/dist/esm/modules/ms/dataviews/ms-role/MsRolePermissionConfigTable.js.map +1 -1
- package/dist/esm/modules/ms/index.js +2 -2
- package/dist/esm/modules/ms/pages/ms-material/index.vue2.js +14 -17
- package/dist/esm/modules/ms/pages/ms-material/index.vue2.js.map +1 -1
- package/dist/esm/modules/ms/pages/ms-menu/index.vue2.js +50 -8
- package/dist/esm/modules/ms/pages/ms-menu/index.vue2.js.map +1 -1
- package/dist/style/components/basic/doc-editor/index.css +1 -1
- package/dist/style/components/index.css +2 -2
- package/dist/style/components/material-item.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/index.css +1 -1
- package/dist/style/modules/cms/resource-manager.css +1 -1
- package/dist/style/src/components/basic/doc-editor/index.scss +22 -2
- package/dist/style/src/components/material-item.scss +66 -63
- package/dist/style/src/modules/cms/pages/cms-contents/index.scss +1 -2
- package/dist/style/src/modules/cms/resource-manager.scss +63 -0
- package/dist/style/src/theme/theme.scss +310 -303
- package/dist/style/theme/theme.css +1 -1
- package/dist/types/components/basic/doc-editor/plugins/HtmlBlockPlugin/DocHtmlBlockComponent.d.ts +20 -0
- package/dist/types/components/basic/doc-editor/plugins/HtmlBlockPlugin/index.d.ts +57 -0
- package/dist/types/components/basic/doc-editor/plugins/ImageTextPlugin/index.d.ts +1 -0
- package/dist/types/components/basic/doc-editor/plugins/ToolbarPlugin/PreviewToolbar.vue.d.ts +2 -0
- package/dist/types/components/business/resource-list/ResourceManager.d.ts +0 -1
- package/dist/types/components/business/resource-manager/index.d.ts +32 -6
- package/dist/types/components/business/resource-manager/resource-manager.vue.d.ts +10 -1
- 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 +3 -0
- package/dist/types/components/data-model/data-table/views/tree/tree-options.d.ts +1 -0
- package/dist/types/components/data-model/data-table/views/tree/tree.d.ts +3 -0
- package/dist/types/modules/cms/components/part-tree/index.d.ts +5 -9
- package/dist/types/modules/cms/components/part-tree/index.vue.d.ts +16 -15
- package/dist/types/modules/cms/dataviews/cms-parts/CmsContentManPartForm.d.ts +8 -0
- package/dist/types/modules/cms/dataviews/cms-parts/index.d.ts +1 -0
- package/dist/types/modules/ms/dataviews/ms-material/index.d.ts +0 -1
- package/dist/types/modules/ms/dataviews/ms-menu/MsMenuTree.d.ts +1 -0
- package/package.json +5 -5
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/HtmlCodeTool.vue.js.map +0 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/HtmlCodeTool.vue2.js +0 -4
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/HtmlCodeTool.vue2.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-material/MsMaterialMan.js +0 -131
- package/dist/cjs/modules/ms/dataviews/ms-material/MsMaterialMan.js.map +0 -1
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/HtmlCodeTool.vue.js +0 -104
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/HtmlCodeTool.vue.js.map +0 -1
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/HtmlCodeTool.vue2.js +0 -5
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/HtmlCodeTool.vue2.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-material/MsMaterialMan.js +0 -131
- package/dist/esm/modules/ms/dataviews/ms-material/MsMaterialMan.js.map +0 -1
- package/dist/style/modules/cms/pages/cms-contents/part-edit-add-page.css +0 -1
- package/dist/style/src/modules/cms/pages/cms-contents/part-edit-add-page.scss +0 -127
- package/dist/types/modules/ms/dataviews/ms-material/MsMaterialMan.d.ts +0 -31
- /package/dist/types/components/basic/doc-editor/plugins/{ToolbarPlugin/HtmlCodeTool.vue.d.ts → HtmlBlockPlugin/index.vue.d.ts} +0 -0
- /package/dist/types/{modules/cms/pages/cms-contents/part-edit-add-page.vue.d.ts → components/basic/doc-editor/plugins/ToolbarPlugin/PreviewToolba-back.vue.d.ts} +0 -0
package/dist/cjs/components/basic/doc-editor/lexical-vue/components/LexicalDecoratorBlockNode.js
CHANGED
|
@@ -28,5 +28,9 @@ class DecoratorBlockNode extends lexical.DecoratorNode {
|
|
|
28
28
|
self.__format = format;
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
+
function $isDecoratorBlockNode(node) {
|
|
32
|
+
return node instanceof DecoratorBlockNode;
|
|
33
|
+
}
|
|
34
|
+
exports.$isDecoratorBlockNode = $isDecoratorBlockNode;
|
|
31
35
|
exports.DecoratorBlockNode = DecoratorBlockNode;
|
|
32
36
|
//# sourceMappingURL=LexicalDecoratorBlockNode.js.map
|
package/dist/cjs/components/basic/doc-editor/lexical-vue/components/LexicalDecoratorBlockNode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LexicalDecoratorBlockNode.js","sources":["../../../../../../../src/components/basic/doc-editor/lexical-vue/components/LexicalDecoratorBlockNode.ts"],"sourcesContent":["import type { ElementFormatType, LexicalNode, NodeKey, SerializedLexicalNode, Spread } from 'lexical'\r\n\r\nimport { DecoratorNode } from 'lexical'\r\nimport type { Component } from 'vue'\r\n\r\nexport type SerializedDecoratorBlockNode = Spread<\r\n {\r\n format: ElementFormatType\r\n },\r\n SerializedLexicalNode\r\n>\r\n\r\nexport class DecoratorBlockNode extends DecoratorNode<Component> {\r\n __format?: ElementFormatType\r\n\r\n constructor(format?: ElementFormatType, key?: NodeKey) {\r\n super(key)\r\n this.__format = format || ''\r\n }\r\n\r\n exportJSON(): SerializedDecoratorBlockNode {\r\n return {\r\n format: this.__format || '',\r\n type: 'decorator-block',\r\n version: 1,\r\n }\r\n }\r\n\r\n createDOM() {\r\n return document.createElement('div')\r\n }\r\n\r\n updateDOM() {\r\n return false\r\n }\r\n\r\n setFormat(format: ElementFormatType) {\r\n const self = this.getWritable()\r\n self.__format = format\r\n }\r\n}\r\n\r\nexport function $createDecoratorBlockNode() {\r\n return new DecoratorBlockNode()\r\n}\r\n\r\nexport function $isDecoratorBlockNode(node: LexicalNode | null | undefined): node is DecoratorBlockNode {\r\n return node instanceof DecoratorBlockNode\r\n}\r\n"],"names":["DecoratorNode"],"mappings":";;;;;;AAYO,MAAM,2BAA2BA,QAAAA,cAAyB;AAAA,EAG/D,YAAY,QAA4B,KAAe;AACrD,UAAM,GAAG;AAHX;AAIE,SAAK,WAAW,UAAU;AAAA,EAC5B;AAAA,EAEA,aAA2C;AAClC,WAAA;AAAA,MACL,QAAQ,KAAK,YAAY;AAAA,MACzB,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,EAEb;AAAA,EAEA,YAAY;AACH,WAAA,SAAS,cAAc,KAAK;AAAA,EACrC;AAAA,EAEA,YAAY;AACH,WAAA;AAAA,EACT;AAAA,EAEA,UAAU,QAA2B;AAC7B,UAAA,OAAO,KAAK;AAClB,SAAK,WAAW;AAAA,EAClB;AACF
|
|
1
|
+
{"version":3,"file":"LexicalDecoratorBlockNode.js","sources":["../../../../../../../src/components/basic/doc-editor/lexical-vue/components/LexicalDecoratorBlockNode.ts"],"sourcesContent":["import type { ElementFormatType, LexicalNode, NodeKey, SerializedLexicalNode, Spread } from 'lexical'\r\n\r\nimport { DecoratorNode } from 'lexical'\r\nimport type { Component } from 'vue'\r\n\r\nexport type SerializedDecoratorBlockNode = Spread<\r\n {\r\n format: ElementFormatType\r\n },\r\n SerializedLexicalNode\r\n>\r\n\r\nexport class DecoratorBlockNode extends DecoratorNode<Component> {\r\n __format?: ElementFormatType\r\n\r\n constructor(format?: ElementFormatType, key?: NodeKey) {\r\n super(key)\r\n this.__format = format || ''\r\n }\r\n\r\n exportJSON(): SerializedDecoratorBlockNode {\r\n return {\r\n format: this.__format || '',\r\n type: 'decorator-block',\r\n version: 1,\r\n }\r\n }\r\n\r\n createDOM() {\r\n return document.createElement('div')\r\n }\r\n\r\n updateDOM() {\r\n return false\r\n }\r\n\r\n setFormat(format: ElementFormatType) {\r\n const self = this.getWritable()\r\n self.__format = format\r\n }\r\n}\r\n\r\nexport function $createDecoratorBlockNode() {\r\n return new DecoratorBlockNode()\r\n}\r\n\r\nexport function $isDecoratorBlockNode(node: LexicalNode | null | undefined): node is DecoratorBlockNode {\r\n return node instanceof DecoratorBlockNode\r\n}\r\n"],"names":["DecoratorNode"],"mappings":";;;;;;AAYO,MAAM,2BAA2BA,QAAAA,cAAyB;AAAA,EAG/D,YAAY,QAA4B,KAAe;AACrD,UAAM,GAAG;AAHX;AAIE,SAAK,WAAW,UAAU;AAAA,EAC5B;AAAA,EAEA,aAA2C;AAClC,WAAA;AAAA,MACL,QAAQ,KAAK,YAAY;AAAA,MACzB,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,EAEb;AAAA,EAEA,YAAY;AACH,WAAA,SAAS,cAAc,KAAK;AAAA,EACrC;AAAA,EAEA,YAAY;AACH,WAAA;AAAA,EACT;AAAA,EAEA,UAAU,QAA2B;AAC7B,UAAA,OAAO,KAAK;AAClB,SAAK,WAAW;AAAA,EAClB;AACF;AAMO,SAAS,sBAAsB,MAAkE;AACtG,SAAO,gBAAgB;AACzB;;;"}
|
package/dist/cjs/components/basic/doc-editor/lexical-vue/components/LexicalRichTextPlugin.vue.js
CHANGED
|
@@ -33,26 +33,32 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
33
33
|
const htmlContent = vue.ref("");
|
|
34
34
|
const contentIsEmpty = vue.computed(() => htmlContent.value == `<p class="mk-doc__paragraph"><br></p>` || !htmlContent.value);
|
|
35
35
|
const setHtml = (html$1) => {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
36
|
+
if (htmlContent.value != html$1) {
|
|
37
|
+
let nodes = [];
|
|
38
|
+
htmlContent.value = html$1;
|
|
39
|
+
editor.update(() => {
|
|
40
|
+
var _a, _b;
|
|
41
|
+
if (html$1.trim()) {
|
|
42
|
+
nodes = html.$generateNodesFromDOM(editor, parser.parseFromString(html$1.trim(), "text/html"));
|
|
43
|
+
}
|
|
44
|
+
lexical.$selectAll();
|
|
45
|
+
if (nodes.length > 0) {
|
|
46
|
+
(_a = lexical.$getSelection()) == null ? void 0 : _a.insertNodes(nodes);
|
|
47
|
+
} else {
|
|
48
|
+
(_b = lexical.$getSelection()) == null ? void 0 : _b.insertText("");
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
46
52
|
};
|
|
47
|
-
const unregisterMergeListener = editor.registerUpdateListener(({ editorState }) => {
|
|
48
|
-
editorState.read(() => {
|
|
49
|
-
htmlContent.value = html.$generateHtmlFromNodes(editor);
|
|
50
|
-
emit("change", htmlContent.value);
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
vue.onUnmounted(() => unregisterMergeListener());
|
|
54
53
|
vue.onMounted(() => {
|
|
55
|
-
|
|
54
|
+
vue.watch(() => props.content, setHtml, { immediate: true });
|
|
55
|
+
vue.watch(htmlContent, (value) => emit("change", value));
|
|
56
|
+
const unregisterMergeListener = editor.registerUpdateListener(({ editorState }) => {
|
|
57
|
+
editorState.read(() => {
|
|
58
|
+
htmlContent.value = html.$generateHtmlFromNodes(editor);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
vue.onUnmounted(() => unregisterMergeListener());
|
|
56
62
|
});
|
|
57
63
|
useRichTextSetup.useRichTextSetup(editor);
|
|
58
64
|
return (_ctx, _cache) => {
|
package/dist/cjs/components/basic/doc-editor/lexical-vue/components/LexicalRichTextPlugin.vue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LexicalRichTextPlugin.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/lexical-vue/components/LexicalRichTextPlugin.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { useCanShowPlaceholder, useLexicalComposer, useRichTextSetup } from '../composables'\r\nimport Decorators from './LexicalDecoratedTeleports'\r\nimport { ref,defineProps,computed,defineEmits,onMounted,onUnmounted } from \"vue\"\r\nimport { $getRoot, $getSelection ,$createRangeSelection,$selectAll } from 'lexical'\r\nimport { $generateHtmlFromNodes,$generateNodesFromDOM } from '@lexical/html'\r\n\r\n// 事件\r\nconst emit = defineEmits([\"change\"]);\r\n\r\n// 参数\r\nconst props = defineProps({\r\n content:{ type:String,default:`` }\r\n})\r\n\r\nconst editor = useLexicalComposer()\r\n\r\nconst canShowPlaceholder = useCanShowPlaceholder(editor)\r\n\r\nconst parser = new DOMParser();\r\n\r\nconst htmlContent = ref(\"\");\r\n\r\n// 空内容\r\nconst contentIsEmpty = computed(()=>htmlContent.value == `<p class=\"mk-doc__paragraph\"><br></p>` || !htmlContent.value);\r\n\r\n// 设置 HTML\r\nconst setHtml = (html : any)=>{\r\n\r\n let nodes : Array<any> = [];\r\n\r\n
|
|
1
|
+
{"version":3,"file":"LexicalRichTextPlugin.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/lexical-vue/components/LexicalRichTextPlugin.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { useCanShowPlaceholder, useLexicalComposer, useRichTextSetup } from '../composables'\r\nimport Decorators from './LexicalDecoratedTeleports'\r\nimport { ref,defineProps,computed,defineEmits,onMounted,onUnmounted,watch } from \"vue\"\r\nimport { $getRoot, $getSelection ,$createRangeSelection,$selectAll } from 'lexical'\r\nimport { $generateHtmlFromNodes,$generateNodesFromDOM } from '@lexical/html'\r\n\r\n// 事件\r\nconst emit = defineEmits([\"change\"]);\r\n\r\n// 参数\r\nconst props = defineProps({\r\n content:{ type:String,default:`` }\r\n})\r\n\r\nconst editor = useLexicalComposer()\r\n\r\nconst canShowPlaceholder = useCanShowPlaceholder(editor)\r\n\r\nconst parser = new DOMParser();\r\n\r\n// html 内容\r\nconst htmlContent = ref(\"\");\r\n\r\n// 空内容\r\nconst contentIsEmpty = computed(()=>htmlContent.value == `<p class=\"mk-doc__paragraph\"><br></p>` || !htmlContent.value);\r\n\r\n// 设置 HTML\r\nconst setHtml = (html : any)=>{\r\n\r\n // 内容不同则重置 \r\n if(htmlContent.value != html){\r\n\r\n let nodes : Array<any> = [];\r\n\r\n htmlContent.value = html;\r\n\r\n editor.update(()=>{\r\n\r\n if(html.trim()){\r\n // Once you have the DOM instance it's easy to generate LexicalNodes.\r\n nodes = $generateNodesFromDOM(editor,parser.parseFromString(html.trim(),\"text/html\"));\r\n }\r\n // 设置权限替换\r\n $selectAll();\r\n\r\n if(nodes.length > 0){\r\n $getSelection()?.insertNodes(nodes);\r\n }\r\n else{\r\n $getSelection()?.insertText(\"\")\r\n }\r\n \r\n })\r\n }\r\n}\r\n\r\n\r\nonMounted(()=>{\r\n // 初始化\r\n watch(()=>props.content,setHtml,{ immediate:true });\r\n // 监听内容变化\r\n watch(htmlContent,(value:any)=>emit('change',value));\r\n\r\n // 更新操作\r\n const unregisterMergeListener = editor.registerUpdateListener(({ editorState }) => {\r\n editorState.read(() => {\r\n htmlContent.value = $generateHtmlFromNodes(editor);\r\n })\r\n })\r\n\r\n // 取消华仔\r\n onUnmounted(() => unregisterMergeListener());\r\n})\r\n\r\n\r\n// 使用富文本\r\nuseRichTextSetup(editor)\r\n\r\n</script>\r\n\r\n<template>\r\n <div class=\"mk-doc-editor__stage__editable\">\r\n <slot name=\"contentEditable\"></slot>\r\n <slot v-if=\"canShowPlaceholder && contentIsEmpty\" name=\"placeholder\"></slot>\r\n <Decorators />\r\n </div>\r\n\r\n</template>\r\n"],"names":["useLexicalComposer","useCanShowPlaceholder","ref","computed","html","$generateNodesFromDOM","$selectAll","$getSelection","onMounted","watch","$generateHtmlFromNodes","onUnmounted","useRichTextSetup"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,UAAM,OAAO;AAGb,UAAM,QAAQ;AAId,UAAM,SAASA,mBAAAA;AAET,UAAA,qBAAqBC,4CAAsB,MAAM;AAEjD,UAAA,SAAS,IAAI;AAGb,UAAA,cAAcC,QAAI,EAAE;AAGpB,UAAA,iBAAiBC,aAAS,MAAI,YAAY,SAAS,2CAA2C,CAAC,YAAY,KAAK;AAGhH,UAAA,UAAU,CAACC,WAAa;AAGvB,UAAA,YAAY,SAASA,QAAK;AAE3B,YAAI,QAAqB,CAAA;AAEzB,oBAAY,QAAQA;AAEpB,eAAO,OAAO,MAAI;;AAEb,cAAAA,OAAK,QAAO;AAEL,oBAAAC,KAAAA,sBAAsB,QAAO,OAAO,gBAAgBD,OAAK,KAAK,GAAE,WAAW,CAAC;AAAA,UACtF;AAEWE,kBAAAA;AAER,cAAA,MAAM,SAAS,GAAE;AACJC,wCAAA,MAAAA,mBAAG,YAAY;AAAA,UAAK,OAEhC;AACYA,wCAAA,MAAAA,mBAAG,WAAW;AAAA,UAC9B;AAAA,QAAA,CAED;AAAA,MACH;AAAA,IAAA;AAIJC,QAAAA,UAAU,MAAI;AAEZC,UAAA,MAAM,MAAI,MAAM,SAAQ,SAAQ,EAAE,WAAU,MAAM;AAElDA,UAAA,MAAM,aAAY,CAAC,UAAY,KAAK,UAAS,KAAK,CAAC;AAGnD,YAAM,0BAA0B,OAAO,uBAAuB,CAAC,EAAE,kBAAkB;AACjF,oBAAY,KAAK,MAAM;AACT,sBAAA,QAAQC,4BAAuB,MAAM;AAAA,QAAA,CAClD;AAAA,MAAA,CACF;AAGWC,sBAAA,MAAM,yBAAyB;AAAA,IAAA,CAC5C;AAIDC,qBAAA,iBAAiB,MAAM;;;;;;;;;;;"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const vue = require("vue");
|
|
3
|
+
const lexical = require("lexical");
|
|
4
|
+
const utils = require("@lexical/utils");
|
|
5
|
+
require("@lexical/text");
|
|
6
|
+
const useMounted = require("../../lexical-vue/composables/useMounted.js");
|
|
7
|
+
require("@lexical/overflow");
|
|
8
|
+
require("tiny-invariant");
|
|
9
|
+
require("@lexical/history");
|
|
10
|
+
const useLexicalComposer = require("../../lexical-vue/composables/useLexicalComposer.js");
|
|
11
|
+
const useLexicalNodeSelection = require("../../lexical-vue/composables/useLexicalNodeSelection.js");
|
|
12
|
+
require("@lexical/list");
|
|
13
|
+
require("@lexical/dragon");
|
|
14
|
+
require("@lexical/plain-text");
|
|
15
|
+
require("@lexical/rich-text");
|
|
16
|
+
require("@lexical/yjs");
|
|
17
|
+
require("yjs");
|
|
18
|
+
require("../../lexical-vue/components/LexicalDecoratedTeleports.js");
|
|
19
|
+
require("@lexical/html");
|
|
20
|
+
require("@lexical/link");
|
|
21
|
+
require("@lexical/mark");
|
|
22
|
+
require("@lexical/table");
|
|
23
|
+
require("@lexical/hashtag");
|
|
24
|
+
const LexicalBlockWithAlignableContents_vue_vue_type_script_setup_true_lang = require("../../lexical-vue/components/LexicalBlockWithAlignableContents.vue2.js");
|
|
25
|
+
require("@lexical/markdown");
|
|
26
|
+
require("../../lexical-vue/composables/useCollaborationContext.js");
|
|
27
|
+
require("../../lexical-vue/components/LexicalMenu/shared.js");
|
|
28
|
+
require("../../lexical-vue/components/LexicalAutoEmbedPlugin/shared.js");
|
|
29
|
+
require("../../lexical-vue/components/LexicalTypeaheadMenuPlugin/shared.js");
|
|
30
|
+
const DocHtmlBlockComponent = /* @__PURE__ */ vue.defineComponent({
|
|
31
|
+
name: "DocHtmlBlockComponent",
|
|
32
|
+
props: ["baseClass", "focusClass", "nodeKey", "attrs"],
|
|
33
|
+
setup(props) {
|
|
34
|
+
const editor = useLexicalComposer.useLexicalComposer();
|
|
35
|
+
const {
|
|
36
|
+
isSelected,
|
|
37
|
+
setSelected,
|
|
38
|
+
clearSelection
|
|
39
|
+
} = useLexicalNodeSelection.useLexicalNodeSelection(props.nodeKey);
|
|
40
|
+
const selfElRef = vue.ref(null);
|
|
41
|
+
useMounted.useMounted(() => {
|
|
42
|
+
return utils.mergeRegister(
|
|
43
|
+
// 选中图
|
|
44
|
+
editor.registerCommand(lexical.CLICK_COMMAND, (event) => {
|
|
45
|
+
console.log(event.target);
|
|
46
|
+
if (event.target === selfElRef.value) {
|
|
47
|
+
event.preventDefault();
|
|
48
|
+
if (!event.shiftKey) {
|
|
49
|
+
clearSelection();
|
|
50
|
+
}
|
|
51
|
+
setSelected(true);
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
return false;
|
|
55
|
+
}, lexical.COMMAND_PRIORITY_LOW)
|
|
56
|
+
);
|
|
57
|
+
});
|
|
58
|
+
return () => {
|
|
59
|
+
return vue.createVNode(LexicalBlockWithAlignableContents_vue_vue_type_script_setup_true_lang, {
|
|
60
|
+
"nodeKey": "props.nodeKey"
|
|
61
|
+
}, {
|
|
62
|
+
default: () => [vue.createVNode("iframe", vue.mergeProps({
|
|
63
|
+
"ref": (el) => selfElRef.value = el,
|
|
64
|
+
"srcdoc": `
|
|
65
|
+
<html>
|
|
66
|
+
<head>
|
|
67
|
+
<style type="text/css">
|
|
68
|
+
${props.attrs.css}
|
|
69
|
+
</style>
|
|
70
|
+
<script>
|
|
71
|
+
${props.attrs.js}
|
|
72
|
+
<\/script>
|
|
73
|
+
</head>
|
|
74
|
+
<body>${props.attrs.content}</body>
|
|
75
|
+
</html>
|
|
76
|
+
`,
|
|
77
|
+
"style": {
|
|
78
|
+
width: "100%",
|
|
79
|
+
padding: 0,
|
|
80
|
+
margin: 0
|
|
81
|
+
}
|
|
82
|
+
}, {
|
|
83
|
+
frameborder: 0,
|
|
84
|
+
allowFullScreen: true
|
|
85
|
+
}, {
|
|
86
|
+
"allow": "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
|
87
|
+
}), null)]
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
module.exports = DocHtmlBlockComponent;
|
|
93
|
+
//# sourceMappingURL=DocHtmlBlockComponent.js.map
|
package/dist/cjs/components/basic/doc-editor/plugins/HtmlBlockPlugin/DocHtmlBlockComponent.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocHtmlBlockComponent.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/HtmlBlockPlugin/DocHtmlBlockComponent.tsx"],"sourcesContent":["import type { ElementFormatType } from \"lexical\";\nimport {\n $getSelection,\n $isNodeSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_LOW,\n} from \"lexical\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport {\n useLexicalComposer,\n useLexicalNodeSelection,\n useMounted,\n DecoratorBlockNode,\n LexicalBlockWithAlignableContents,\n} from \"../../lexical-vue\";\nimport { defineComponent, ref, reactive, computed, watch } from \"vue\";\nimport { Messager } from \"@maketribe/dm\";\n\n/**\n * 图片渲染组件\n */\nexport default defineComponent({\n name: \"DocHtmlBlockComponent\",\n props: [\"baseClass\", \"focusClass\", \"nodeKey\", \"attrs\"],\n setup(props) {\n const editor = useLexicalComposer();\n const { isSelected, setSelected, clearSelection } = useLexicalNodeSelection(\n props.nodeKey\n );\n const selfElRef = ref<any>(null);\n\n // 编辑器挂载的时候\n useMounted(() => {\n return mergeRegister(\n // 选中图\n editor.registerCommand<MouseEvent>(\n CLICK_COMMAND,\n (event) => {\n console.log(event.target);\n if (event.target === selfElRef.value) {\n event.preventDefault();\n\n if (!event.shiftKey) {\n clearSelection();\n }\n\n setSelected(true);\n\n return true;\n }\n\n return false;\n },\n COMMAND_PRIORITY_LOW\n )\n );\n });\n\n return () => {\n return (\n <LexicalBlockWithAlignableContents nodeKey=\"props.nodeKey\">\n <iframe\n ref={(el) => (selfElRef.value = el)}\n srcdoc={`\n <html>\n <head>\n <style type=\"text/css\">\n ${props.attrs.css}\n </style>\n <script>\n ${props.attrs.js}\n </script>\n </head>\n <body>${props.attrs.content}</body>\n </html>\n `}\n style={{ width: \"100%\", padding: 0, margin: 0 }}\n {...{ frameborder: 0, allowFullScreen: true }}\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n ></iframe>\n </LexicalBlockWithAlignableContents>\n );\n };\n },\n});\n"],"names":["defineComponent","name","props","setup","editor","useLexicalComposer","isSelected","setSelected","clearSelection","useLexicalNodeSelection","nodeKey","selfElRef","ref","useMounted","mergeRegister","registerCommand","CLICK_COMMAND","event","console","log","target","value","preventDefault","shiftKey","COMMAND_PRIORITY_LOW","_createVNode","LexicalBlockWithAlignableContents","default","_mergeProps","el","attrs","css","js","content","width","padding","margin","frameborder","allowFullScreen"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,MAAeA,4DAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAO,CAAC,aAAa,cAAc,WAAW,OAAO;AAAA,EACrDC,MAAMD,OAAO;AACX,UAAME,SAASC,mBAAAA;AACf,UAAM;AAAA,MAAEC;AAAAA,MAAYC;AAAAA,MAAaC;AAAAA,IAAe,IAAIC,wBAAuB,wBACzEP,MAAMQ,OACR;AACA,UAAMC,YAAYC,QAAS,IAAI;AAG/BC,eAAAA,WAAW,MAAM;AACf,aAAOC,MAAa;AAAA;AAAA,QAElBV,OAAOW,gBACLC,QAAa,eACZC,WAAU;AACTC,kBAAQC,IAAIF,MAAMG,MAAM;AACxB,cAAIH,MAAMG,WAAWT,UAAUU,OAAO;AACpCJ,kBAAMK,eAAc;AAEpB,gBAAI,CAACL,MAAMM,UAAU;AACnBf;YACF;AAEAD,wBAAY,IAAI;AAEhB,mBAAO;AAAA,UACT;AAEA,iBAAO;AAAA,WAETiB,QAAAA,oBACF;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,aAAAC,IAAAA,YAAAC,uEAAA;AAAA,QAAA,WAAA;AAAA,MAAA,GAAA;AAAA,QAAAC,SAAAA,MAAAF,CAAAA,0BAAAG,IAAAA,WAAA;AAAA,UAAA,OAGYC,QAAQlB,UAAUU,QAAQQ;AAAAA,UAAG,UAC3B;AAAA;AAAA;AAAA;AAAA,kBAIF3B,MAAM4B,MAAMC,GAAG;AAAA;AAAA;AAAA,kBAGf7B,MAAM4B,MAAME,EAAE;AAAA;AAAA;AAAA,oBAGZ9B,MAAM4B,MAAMG,OAAO;AAAA;AAAA;AAAA,UAE5B,SACQ;AAAA,YAAEC,OAAO;AAAA,YAAQC,SAAS;AAAA,YAAGC,QAAQ;AAAA,UAAE;AAAA,QAAC,GAAA;AAAA,UACzCC,aAAa;AAAA,UAAGC,iBAAiB;AAAA,QAAI,GAAA;AAAA,UAAA,SAAA;AAAA,QAAA,CAAA,GAAA,IAAA,CAAA;AAAA,MAAA,CAAA;AAAA;EAMrD;AACF,CAAC;;"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
6
|
+
const lexical = require("lexical");
|
|
7
|
+
const vue = require("vue");
|
|
8
|
+
require("@lexical/text");
|
|
9
|
+
require("@lexical/utils");
|
|
10
|
+
require("@lexical/overflow");
|
|
11
|
+
require("tiny-invariant");
|
|
12
|
+
require("@lexical/history");
|
|
13
|
+
require("@lexical/list");
|
|
14
|
+
require("@lexical/dragon");
|
|
15
|
+
require("@lexical/plain-text");
|
|
16
|
+
require("@lexical/rich-text");
|
|
17
|
+
require("@lexical/yjs");
|
|
18
|
+
require("yjs");
|
|
19
|
+
require("../../lexical-vue/components/LexicalDecoratedTeleports.js");
|
|
20
|
+
require("@lexical/html");
|
|
21
|
+
require("@lexical/link");
|
|
22
|
+
require("@lexical/mark");
|
|
23
|
+
require("@lexical/table");
|
|
24
|
+
require("@lexical/hashtag");
|
|
25
|
+
const LexicalDecoratorBlockNode = require("../../lexical-vue/components/LexicalDecoratorBlockNode.js");
|
|
26
|
+
require("@lexical/markdown");
|
|
27
|
+
require("../../lexical-vue/composables/useCollaborationContext.js");
|
|
28
|
+
require("../../lexical-vue/components/LexicalMenu/shared.js");
|
|
29
|
+
require("../../lexical-vue/components/LexicalAutoEmbedPlugin/shared.js");
|
|
30
|
+
require("../../lexical-vue/components/LexicalTypeaheadMenuPlugin/shared.js");
|
|
31
|
+
const DocHtmlBlockComponent = require("./DocHtmlBlockComponent.js");
|
|
32
|
+
lexical.createCommand("HTML_BLOCK_CHANGE");
|
|
33
|
+
lexical.createCommand("REMOVE_HTML_BLOCK_COMMAND");
|
|
34
|
+
const INSERT_HTML_BLOCK_COMMAND = lexical.createCommand("INSERT_HTML_BLOCK_COMMAND");
|
|
35
|
+
class HtmlBlockNode extends LexicalDecoratorBlockNode.DecoratorBlockNode {
|
|
36
|
+
constructor(attrs, format, key) {
|
|
37
|
+
super(format, key);
|
|
38
|
+
__publicField(this, "__attrs");
|
|
39
|
+
this.__attrs = attrs;
|
|
40
|
+
}
|
|
41
|
+
static getType() {
|
|
42
|
+
return "HtmlBlock";
|
|
43
|
+
}
|
|
44
|
+
static clone(node) {
|
|
45
|
+
return new HtmlBlockNode(node.__attrs, node.__format, node.__key);
|
|
46
|
+
}
|
|
47
|
+
static importJSON(serializedNode) {
|
|
48
|
+
const node = $createHtmlBlockNode(serializedNode.attrs);
|
|
49
|
+
node.setFormat(serializedNode.format);
|
|
50
|
+
return node;
|
|
51
|
+
}
|
|
52
|
+
exportJSON() {
|
|
53
|
+
return {
|
|
54
|
+
...super.exportJSON(),
|
|
55
|
+
type: this.getType(),
|
|
56
|
+
version: 1,
|
|
57
|
+
attrs: this.__attrs
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
exportDOM() {
|
|
61
|
+
const element = document.createElement("div");
|
|
62
|
+
element.innerHTML = this.__attrs.content;
|
|
63
|
+
if (this.__attrs.js) {
|
|
64
|
+
const script = document.createElement("script");
|
|
65
|
+
script.innerHTML = this.__attrs.js;
|
|
66
|
+
element.append(script);
|
|
67
|
+
}
|
|
68
|
+
if (this.__attrs.css) {
|
|
69
|
+
const style = document.createElement("style");
|
|
70
|
+
style.innerHTML = this.__attrs.css;
|
|
71
|
+
element.append(style);
|
|
72
|
+
}
|
|
73
|
+
element.setAttribute("class", "mk-doc-html-block");
|
|
74
|
+
return { element };
|
|
75
|
+
}
|
|
76
|
+
static importDOM() {
|
|
77
|
+
return {
|
|
78
|
+
img: (dn) => {
|
|
79
|
+
return {
|
|
80
|
+
conversion: (domNode) => {
|
|
81
|
+
let css = "";
|
|
82
|
+
let js = "";
|
|
83
|
+
domNode.childNodes.forEach((node) => {
|
|
84
|
+
if (node.nodeName.toLowerCase() == "style") {
|
|
85
|
+
css += "\r\n" + node.textContent;
|
|
86
|
+
node.remove();
|
|
87
|
+
} else if (node.nodeName.toLowerCase() == "script") {
|
|
88
|
+
js += "\r\n" + node.textContent;
|
|
89
|
+
node.remove();
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
return domNode.classList.contains("mk-doc-html-block") ? {
|
|
93
|
+
node: $createHtmlBlockNode({
|
|
94
|
+
content: domNode.innerHTML,
|
|
95
|
+
css,
|
|
96
|
+
js
|
|
97
|
+
})
|
|
98
|
+
} : null;
|
|
99
|
+
},
|
|
100
|
+
priority: 0
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
updateDOM() {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
getTextContent(_includeInert, _includeDirectionless) {
|
|
109
|
+
return this.__attrs.content;
|
|
110
|
+
}
|
|
111
|
+
decorate(_editor, config) {
|
|
112
|
+
const embedBlockTheme = config.theme.embedBlock || {};
|
|
113
|
+
return vue.h(DocHtmlBlockComponent, {
|
|
114
|
+
baseClass: embedBlockTheme.base || "",
|
|
115
|
+
focusClass: embedBlockTheme.focus || "",
|
|
116
|
+
format: this.__format,
|
|
117
|
+
nodeKey: this.getKey(),
|
|
118
|
+
attrs: this.__attrs
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function $createHtmlBlockNode(attrs) {
|
|
123
|
+
return new HtmlBlockNode(attrs);
|
|
124
|
+
}
|
|
125
|
+
exports.$createHtmlBlockNode = $createHtmlBlockNode;
|
|
126
|
+
exports.HtmlBlockNode = HtmlBlockNode;
|
|
127
|
+
exports.INSERT_HTML_BLOCK_COMMAND = INSERT_HTML_BLOCK_COMMAND;
|
|
128
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/HtmlBlockPlugin/index.ts"],"sourcesContent":["\r\nimport type {\r\n DOMConversionMap,\r\n DOMConversionOutput,\r\n DOMExportOutput,\r\n EditorConfig,\r\n ElementFormatType,\r\n LexicalEditor,\r\n LexicalNode,\r\n NodeKey,\r\n Spread,\r\n LexicalCommand\r\n} from 'lexical'\r\nimport { createCommand } from 'lexical'\r\nimport { DecoratorBlockNode,type SerializedDecoratorBlockNode } from '../../lexical-vue'\r\nimport { h ,type Component} from 'vue'\r\nimport DocHtmlBlockComponent from \"./DocHtmlBlockComponent\"\r\n\r\n/**\r\n * html块类型\r\n */\r\nexport type HtmlBlockAttrs = { content:string, css?:string, js?:string };\r\n\r\n/**\r\n * html块改变\r\n */\r\nexport const HTML_BLOCK_CHANGE: LexicalCommand<HtmlBlockAttrs> = createCommand('HTML_BLOCK_CHANGE')\r\n\r\n/**\r\n * 删除html块\r\n */\r\nexport const REMOVE_HTML_BLOCK_COMMAND: LexicalCommand<undefined|null> = createCommand('REMOVE_HTML_BLOCK_COMMAND')\r\n\r\n\r\n/**\r\n * 插入html块指令\r\n */\r\nexport const INSERT_HTML_BLOCK_COMMAND: LexicalCommand<HtmlBlockAttrs> = createCommand('INSERT_HTML_BLOCK_COMMAND')\r\n\r\n/**\r\n * 图片节点序列化\r\n */\r\nexport type SerializedHtmlBlockNode = Spread<\r\n {\r\n attrs: HtmlBlockAttrs\r\n },\r\n SerializedDecoratorBlockNode\r\n>\r\n\r\n/**\r\n * 定义图片节点\r\n */\r\nexport class HtmlBlockNode extends DecoratorBlockNode {\r\n __attrs: HtmlBlockAttrs\r\n\r\n static getType(): string {\r\n return 'HtmlBlock'\r\n }\r\n\r\n static clone(node: HtmlBlockNode): HtmlBlockNode {\r\n return new HtmlBlockNode(node.__attrs, node.__format, node.__key)\r\n }\r\n\r\n static importJSON(serializedNode: SerializedHtmlBlockNode): HtmlBlockNode {\r\n const node = $createHtmlBlockNode(serializedNode.attrs)\r\n node.setFormat(serializedNode.format)\r\n return node\r\n }\r\n\r\n constructor(attrs: HtmlBlockAttrs, format?: ElementFormatType, key?: NodeKey) {\r\n super(format, key)\r\n this.__attrs = attrs\r\n }\r\n\r\n exportJSON(): SerializedHtmlBlockNode {\r\n\r\n return {\r\n ...super.exportJSON(),\r\n type: this.getType(),\r\n version: 1,\r\n attrs: this.__attrs,\r\n }\r\n }\r\n\r\n exportDOM(): DOMExportOutput {\r\n\r\n const element = document.createElement('div') \r\n\r\n // 内容\r\n element.innerHTML = this.__attrs.content;\r\n\r\n if(this.__attrs.js){\r\n const script = document.createElement('script') \r\n script.innerHTML = this.__attrs.js;\r\n element.append(script);\r\n }\r\n\r\n if(this.__attrs.css){\r\n const style = document.createElement('style')\r\n style.innerHTML = this.__attrs.css;\r\n element.append(style);\r\n }\r\n\r\n\r\n element.setAttribute(\"class\",\"mk-doc-html-block\")\r\n \r\n return { element }\r\n }\r\n\r\n static importDOM(): DOMConversionMap | null {\r\n return {\r\n img: (dn: HTMLElement) => {\r\n return {\r\n conversion: (domNode: HTMLElement) => {\r\n\r\n let css = \"\";\r\n let js = \"\";\r\n\r\n domNode.childNodes.forEach((node:ChildNode)=>{\r\n\r\n if(node.nodeName.toLowerCase() == \"style\"){\r\n css+=\"\\r\\n\"+node.textContent;\r\n node.remove()\r\n }\r\n else if(node.nodeName.toLowerCase() == \"script\"){\r\n js+=\"\\r\\n\"+node.textContent;\r\n node.remove()\r\n }\r\n });\r\n \r\n return domNode.classList.contains(\"mk-doc-html-block\") ? { \r\n node:$createHtmlBlockNode({\r\n content:domNode.innerHTML, css, js\r\n } as HtmlBlockAttrs) \r\n } : null;\r\n },\r\n priority: 0\r\n }\r\n },\r\n }\r\n }\r\n\r\n updateDOM(): false {\r\n return false\r\n }\r\n\r\n getTextContent(\r\n _includeInert?: boolean | undefined,\r\n _includeDirectionless?: false | undefined,\r\n ): string {\r\n return this.__attrs.content\r\n }\r\n\r\n decorate(_editor: LexicalEditor, config: EditorConfig): Component {\r\n const embedBlockTheme = config.theme.embedBlock || {}\r\n return h(DocHtmlBlockComponent, {\r\n baseClass: embedBlockTheme.base || '',\r\n focusClass: embedBlockTheme.focus || '',\r\n format: this.__format,\r\n nodeKey: this.getKey(),\r\n attrs: this.__attrs\r\n })\r\n }\r\n}\r\n\r\n/**\r\n * 创建图片节点\r\n * @param src \r\n * @returns \r\n */\r\nexport function $createHtmlBlockNode(attrs: HtmlBlockAttrs): HtmlBlockNode {\r\n return new HtmlBlockNode(attrs)\r\n}\r\n\r\n/**\r\n * 判断是否是图片节点\r\n * @param node \r\n * @returns \r\n */\r\nexport function $isHtmlBlockNode(\r\n node: HtmlBlockNode | LexicalNode | null | undefined,\r\n): node is HtmlBlockNode {\r\n return node instanceof HtmlBlockNode\r\n}\r\n"],"names":["createCommand","DecoratorBlockNode","h"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BiEA,sBAAc,mBAAmB;AAKzBA,sBAAc,2BAA2B;AAMrG,MAAA,4BAA4DA,sBAAc,2BAA2B;AAe3G,MAAM,sBAAsBC,0BAAAA,mBAAmB;AAAA,EAiBpD,YAAY,OAAuB,QAA4B,KAAe;AAC5E,UAAM,QAAQ,GAAG;AAjBnB;AAkBE,SAAK,UAAU;AAAA,EACjB;AAAA,EAjBA,OAAO,UAAkB;AAChB,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,MAAoC;AAC/C,WAAO,IAAI,cAAc,KAAK,SAAS,KAAK,UAAU,KAAK,KAAK;AAAA,EAClE;AAAA,EAEA,OAAO,WAAW,gBAAwD;AAClE,UAAA,OAAO,qBAAqB,eAAe,KAAK;AACjD,SAAA,UAAU,eAAe,MAAM;AAC7B,WAAA;AAAA,EACT;AAAA,EAOA,aAAsC;AAE7B,WAAA;AAAA,MACL,GAAG,MAAM,WAAW;AAAA,MACpB,MAAM,KAAK,QAAQ;AAAA,MACnB,SAAS;AAAA,MACT,OAAO,KAAK;AAAA,IAAA;AAAA,EAEhB;AAAA,EAEA,YAA6B;AAErB,UAAA,UAAU,SAAS,cAAc,KAAK;AAGpC,YAAA,YAAY,KAAK,QAAQ;AAE9B,QAAA,KAAK,QAAQ,IAAG;AACX,YAAA,SAAS,SAAS,cAAc,QAAQ;AACvC,aAAA,YAAY,KAAK,QAAQ;AAChC,cAAQ,OAAO,MAAM;AAAA,IACvB;AAEG,QAAA,KAAK,QAAQ,KAAI;AACZ,YAAA,QAAQ,SAAS,cAAc,OAAO;AACtC,YAAA,YAAY,KAAK,QAAQ;AAC/B,cAAQ,OAAO,KAAK;AAAA,IACtB;AAGQ,YAAA,aAAa,SAAQ,mBAAmB;AAEhD,WAAO,EAAE,QAAQ;AAAA,EACnB;AAAA,EAEA,OAAO,YAAqC;AACnC,WAAA;AAAA,MACL,KAAK,CAAC,OAAoB;AAChB,eAAA;AAAA,UACN,YAAY,CAAC,YAAyB;AAEpC,gBAAI,MAAM;AACV,gBAAI,KAAK;AAED,oBAAA,WAAW,QAAQ,CAAC,SAAiB;AAE3C,kBAAG,KAAK,SAAS,YAAY,KAAK,SAAQ;AACxC,uBAAK,SAAO,KAAK;AACjB,qBAAK,OAAO;AAAA,cAEN,WAAA,KAAK,SAAS,YAAA,KAAiB,UAAS;AAC9C,sBAAI,SAAO,KAAK;AAChB,qBAAK,OAAO;AAAA,cACd;AAAA,YAAA,CACD;AAED,mBAAO,QAAQ,UAAU,SAAS,mBAAmB,IAAK;AAAA,cACxD,MAAK,qBAAqB;AAAA,gBACxB,SAAQ,QAAQ;AAAA,gBAAW;AAAA,gBAAK;AAAA,cAAA,CACf;AAAA,YACjB,IAAA;AAAA,UACN;AAAA,UACA,UAAU;AAAA,QAAA;AAAA,MAEd;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,YAAmB;AACV,WAAA;AAAA,EACT;AAAA,EAEA,eACE,eACA,uBACQ;AACR,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,SAAS,SAAwB,QAAiC;AAChE,UAAM,kBAAkB,OAAO,MAAM,cAAc,CAAA;AACnD,WAAOC,IAAAA,EAAE,uBAAuB;AAAA,MAC9B,WAAW,gBAAgB,QAAQ;AAAA,MACnC,YAAY,gBAAgB,SAAS;AAAA,MACrC,QAAQ,KAAK;AAAA,MACb,SAAS,KAAK,OAAO;AAAA,MACrB,OAAO,KAAK;AAAA,IAAA,CACb;AAAA,EACH;AACF;AAOO,SAAS,qBAAqB,OAAsC;AAClE,SAAA,IAAI,cAAc,KAAK;AAChC;;;;"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const vue = require("vue");
|
|
3
|
+
require("@lexical/text");
|
|
4
|
+
const utils = require("@lexical/utils");
|
|
5
|
+
require("@lexical/overflow");
|
|
6
|
+
const lexical = require("lexical");
|
|
7
|
+
require("tiny-invariant");
|
|
8
|
+
require("@lexical/history");
|
|
9
|
+
const useLexicalComposer = require("../../lexical-vue/composables/useLexicalComposer.js");
|
|
10
|
+
require("@lexical/list");
|
|
11
|
+
require("@lexical/dragon");
|
|
12
|
+
require("@lexical/plain-text");
|
|
13
|
+
require("@lexical/rich-text");
|
|
14
|
+
require("@lexical/yjs");
|
|
15
|
+
require("yjs");
|
|
16
|
+
require("../../lexical-vue/components/LexicalDecoratedTeleports.js");
|
|
17
|
+
require("@lexical/html");
|
|
18
|
+
require("@lexical/link");
|
|
19
|
+
require("@lexical/mark");
|
|
20
|
+
require("@lexical/table");
|
|
21
|
+
require("@lexical/hashtag");
|
|
22
|
+
require("@lexical/markdown");
|
|
23
|
+
require("../../lexical-vue/composables/useCollaborationContext.js");
|
|
24
|
+
require("../../lexical-vue/components/LexicalMenu/shared.js");
|
|
25
|
+
require("../../lexical-vue/components/LexicalAutoEmbedPlugin/shared.js");
|
|
26
|
+
require("../../lexical-vue/components/LexicalTypeaheadMenuPlugin/shared.js");
|
|
27
|
+
const index = require("./index.js");
|
|
28
|
+
const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
29
|
+
__name: "index",
|
|
30
|
+
setup(__props) {
|
|
31
|
+
const editor = useLexicalComposer.useLexicalComposer();
|
|
32
|
+
vue.onMounted(() => {
|
|
33
|
+
if (!editor.hasNodes([index.HtmlBlockNode])) {
|
|
34
|
+
throw new Error("HtmlBlockPlugin: 自定义HTML代码块节点未注册!");
|
|
35
|
+
}
|
|
36
|
+
const unregister = utils.mergeRegister(
|
|
37
|
+
// 插入
|
|
38
|
+
editor.registerCommand(index.INSERT_HTML_BLOCK_COMMAND, (payload) => {
|
|
39
|
+
utils.$insertNodeToNearestRoot(index.$createHtmlBlockNode(payload));
|
|
40
|
+
return true;
|
|
41
|
+
}, lexical.COMMAND_PRIORITY_EDITOR)
|
|
42
|
+
);
|
|
43
|
+
vue.onUnmounted(() => unregister());
|
|
44
|
+
});
|
|
45
|
+
return (_ctx, _cache) => {
|
|
46
|
+
return null;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
module.exports = _sfc_main;
|
|
51
|
+
//# sourceMappingURL=index.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/HtmlBlockPlugin/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useLexicalComposer } from '../../lexical-vue'\nimport { $insertNodeToNearestRoot,mergeRegister } from '@lexical/utils'\nimport { COMMAND_PRIORITY_EDITOR,COMMAND_PRIORITY_LOW,$getSelection,CLICK_COMMAND } from 'lexical'\n\nimport { onMounted, onUnmounted } from 'vue'\nimport { INSERT_HTML_BLOCK_COMMAND,HtmlBlockNode,$createHtmlBlockNode,HtmlBlockAttrs } from './index'\nimport { RegisterToolbarExtend,type ToolbarExtendPlugin } from \"../ToolbarPlugin/defines\"\n\n\nconst editor = useLexicalComposer()\n\nonMounted(() => {\n\n if (!editor.hasNodes([HtmlBlockNode])){\n throw new Error('HtmlBlockPlugin: 自定义HTML代码块节点未注册!')\n }\n \n // 注册到工具条\n // RegisterToolbarExtend({\n // icon:\"html-code\",\n // text:\"自定义代码块\",\n // action:async ()=>{\n // editor.dispatchCommand(INSERT_HTML_BLOCK_COMMAND,{\n // content:`<div class=\"aa\">我是自定义代码块</div>`,\n // css:\"div.aa{ width:100%;height:300px }\"\n // })\n // },\n // sort:9\n // } as ToolbarExtendPlugin)\n\n // 注册指令\n const unregister = mergeRegister(\n\n // 插入\n editor.registerCommand<HtmlBlockAttrs>(INSERT_HTML_BLOCK_COMMAND,(payload) => {\n $insertNodeToNearestRoot($createHtmlBlockNode(payload))\n return true\n },COMMAND_PRIORITY_EDITOR),\n );\n\n onUnmounted(() => unregister())\n})\n</script>\n\n<template />\n"],"names":["useLexicalComposer","onMounted","HtmlBlockNode","mergeRegister","INSERT_HTML_BLOCK_COMMAND","$insertNodeToNearestRoot","$createHtmlBlockNode","COMMAND_PRIORITY_EDITOR","onUnmounted"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,UAAM,SAASA,mBAAAA;AAEfC,QAAAA,UAAU,MAAM;AAEd,UAAI,CAAC,OAAO,SAAS,CAACC,MAAAA,aAAa,CAAC,GAAE;AAC9B,cAAA,IAAI,MAAM,mCAAmC;AAAA,MACrD;AAgBA,YAAM,aAAaC,MAAA;AAAA;AAAA,QAGjB,OAAO,gBAAgCC,iCAA0B,CAAC,YAAY;AACnDC,yCAAAC,MAAAA,qBAAqB,OAAO,CAAC;AAC/C,iBAAA;AAAA,WACPC,+BAAuB;AAAA,MAAA;AAGfC,sBAAA,MAAM,YAAY;AAAA,IAAA,CAC/B;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.vue2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
|
@@ -74,21 +74,27 @@ const DocImageComponent = /* @__PURE__ */ vue.defineComponent({
|
|
|
74
74
|
loading.value = true;
|
|
75
75
|
return new Promise((resolve, reject) => {
|
|
76
76
|
const image = new Image();
|
|
77
|
-
|
|
77
|
+
const loadComplete = () => {
|
|
78
|
+
viewSrc.value = image.src;
|
|
79
|
+
attrs.src = src;
|
|
80
|
+
loadingText.value = "";
|
|
81
|
+
loading.value = false;
|
|
82
|
+
resolve(image.src);
|
|
83
|
+
};
|
|
84
|
+
image.onload = () => loadComplete();
|
|
78
85
|
image.onerror = reject;
|
|
79
86
|
image.src = src;
|
|
80
87
|
if (image.complete) {
|
|
81
|
-
|
|
88
|
+
loadComplete();
|
|
82
89
|
}
|
|
83
90
|
});
|
|
84
91
|
};
|
|
85
|
-
vue.
|
|
92
|
+
vue.watch(() => attrs.src, (src) => {
|
|
86
93
|
loadingText.value = "";
|
|
87
|
-
if (
|
|
94
|
+
if (src && src.indexOf("data:image/") == 0) {
|
|
88
95
|
loadingText.value = "上传中...";
|
|
89
|
-
const blob = utils.base64ToBlob(
|
|
90
|
-
|
|
91
|
-
webFileUpload.upload(new File([blob], `${utils.md5(Math.random().toString())}.png`, {
|
|
96
|
+
const blob = utils.base64ToBlob(src);
|
|
97
|
+
webFileUpload.upload(new File([blob], `${utils.md5(Math.random().toString())}.${blob.type.toString().replace("image/", "") || "png"}`, {
|
|
92
98
|
type: blob.type
|
|
93
99
|
})).then((result) => {
|
|
94
100
|
if (result.data.code !== 200) {
|
|
@@ -97,50 +103,19 @@ const DocImageComponent = /* @__PURE__ */ vue.defineComponent({
|
|
|
97
103
|
});
|
|
98
104
|
return;
|
|
99
105
|
}
|
|
100
|
-
imageLoad(
|
|
101
|
-
viewSrc.value = src;
|
|
102
|
-
}).finally(() => {
|
|
103
|
-
loading.value = false;
|
|
104
|
-
});
|
|
106
|
+
imageLoad(result.data.data.path);
|
|
105
107
|
});
|
|
108
|
+
} else if (src) {
|
|
109
|
+
imageLoad(src);
|
|
106
110
|
} else {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}).finally(() => {
|
|
110
|
-
loading.value = false;
|
|
111
|
-
});
|
|
111
|
+
loading.value = true;
|
|
112
|
+
loadingText.value = "无图片内容";
|
|
112
113
|
}
|
|
114
|
+
}, {
|
|
115
|
+
immediate: true
|
|
113
116
|
});
|
|
114
117
|
useMounted.useMounted(() => {
|
|
115
118
|
return utils$1.mergeRegister(
|
|
116
|
-
// editor.registerCommand<ElementFormatType>(FORMAT_ELEMENT_COMMAND,(formatType) => {
|
|
117
|
-
// if (isSelected.value) {
|
|
118
|
-
// const selection = $getSelection()
|
|
119
|
-
// if ($isNodeSelection(selection)) {
|
|
120
|
-
// const node = $getNodeByKey(props.nodeKey)
|
|
121
|
-
// if (node && $isImageNode(node)){
|
|
122
|
-
// node.setFormat(formatType)
|
|
123
|
-
// }
|
|
124
|
-
// }
|
|
125
|
-
// else if ($isRangeSelection(selection)) {
|
|
126
|
-
// const nodes = selection.getNodes()
|
|
127
|
-
// for (const node of nodes) {
|
|
128
|
-
// if ($isImageNode(node)) {
|
|
129
|
-
// node.setFormat(formatType)
|
|
130
|
-
// }
|
|
131
|
-
// else {
|
|
132
|
-
// const element = $getNearestBlockElementAncestorOrThrow(node)
|
|
133
|
-
// element.setFormat(formatType)
|
|
134
|
-
// }
|
|
135
|
-
// }
|
|
136
|
-
// }
|
|
137
|
-
// setTimeout(()=>updateImageActiveBox(),10)
|
|
138
|
-
// return true
|
|
139
|
-
// }
|
|
140
|
-
// return false
|
|
141
|
-
// },
|
|
142
|
-
// COMMAND_PRIORITY_LOW,
|
|
143
|
-
// ),
|
|
144
119
|
// 选中图
|
|
145
120
|
editor.registerCommand(lexical.CLICK_COMMAND, (event) => {
|
|
146
121
|
if (event.target === selfElRef.value) {
|
|
@@ -182,8 +157,13 @@ const DocImageComponent = /* @__PURE__ */ vue.defineComponent({
|
|
|
182
157
|
(_a = node == null ? void 0 : node.getParent()) == null ? void 0 : _a.setFormat(payload.value);
|
|
183
158
|
}
|
|
184
159
|
} else if (payload.name == "edit") {
|
|
185
|
-
ImageEditPanel.ShowImageEditPanel(
|
|
160
|
+
ImageEditPanel.ShowImageEditPanel({
|
|
161
|
+
...attrs
|
|
162
|
+
}).then((data) => {
|
|
186
163
|
Object.assign(attrs, data || {});
|
|
164
|
+
setTimeout(() => updateImageActiveBox(), 10);
|
|
165
|
+
}).catch((err) => {
|
|
166
|
+
console.log(err);
|
|
187
167
|
});
|
|
188
168
|
} else {
|
|
189
169
|
attrs[payload.name] = payload.value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocImageComponent.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/ImagePlugin/DocImageComponent.tsx"],"sourcesContent":["import type { ElementFormatType } from 'lexical'\r\nimport { $getSelection,$isNodeSelection, CLICK_COMMAND,COMMAND_PRIORITY_LOW } from 'lexical'\r\nimport { mergeRegister } from '@lexical/utils'\r\nimport { useLexicalComposer,useLexicalNodeSelection,useMounted } from '../../lexical-vue'\r\nimport { defineComponent, ref,reactive,computed,onMounted } from 'vue'\r\nimport { Messager } from \"@maketribe/dm\";\r\nimport { DEVICE_VIEW_MODE,SELECTED_COMPONENT_COMMAND,ComponentSelectEvent } from \"../commands\"\r\nimport { WebFileUpload } from \"@maketribe/request\";\r\nimport { REMOVE_IMAGE_COMMAND,ImageAttrData,IMAGE_ATTRS_CHANGE,ImageNode } from './index'\r\nimport { base64ToBlob,md5 } from \"@maketribe/utils\";\r\nimport { ShowImageEditPanel } from \"./ImageEditPanel\"\r\nimport ImageTools from './ImageTools.vue'\r\n\r\n// 默认图片\r\nconst ImageDefaultSrc = \"data:image/png;base64,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\";\r\n\r\n/**\r\n * 图片渲染组件\r\n */\r\nexport default defineComponent({\r\n name: 'DocImageComponent',\r\n props: ['format','baseClass','focusClass', 'nodeKey', 'attrs'],\r\n setup(props) {\r\n\r\n const editor = useLexicalComposer()\r\n const { isSelected, setSelected, clearSelection } = useLexicalNodeSelection(props.nodeKey)\r\n const selfElRef = ref<any>(null);\r\n const imageActiveBoxStyle = reactive({ width:\"\", height:\"\", top:\"\", left:\"\" });\r\n const updateImageActiveBox = ()=>{\r\n let stageRect = selfElRef.value.parentElement.getBoundingClientRect();\r\n let rect = selfElRef.value.getBoundingClientRect();\r\n imageActiveBoxStyle.width = rect.width+ \"px\";\r\n imageActiveBoxStyle.height = rect.height+ \"px\";\r\n imageActiveBoxStyle.left = rect.x - stageRect.x + \"px\";\r\n imageActiveBoxStyle.top = \"0px\";\r\n }\r\n\r\n const styles = computed<string[]>(()=>{\r\n return Object.keys(attrs).filter(k=>attrs[k] && k != \"float\" && k!=\"margin\" && k!=\"src\" && k!=\"alt\").map(k=>{\r\n return k.replace(/([A-Z])/g,\"-$1\").toLowerCase()+\":\"+attrs[k]\r\n });\r\n })\r\n\r\n // 显示的图\r\n const viewSrc = ref<string>(ImageDefaultSrc)\r\n const loading = ref(true);\r\n const loadingText = ref(\"\");\r\n const attrs = reactive(props.attrs)\r\n const webFileUpload = new WebFileUpload();\r\n // 图片加载\r\n const imageLoad = (src:string)=>{\r\n // 加载文案\r\n loadingText.value = \"加载中...\";\r\n loading.value = true;\r\n return new Promise((resolve,reject)=>{\r\n // 加载一下\r\n const image = new Image();\r\n image.onload = ()=>resolve(image.src)\r\n image.onerror = reject\r\n image.src = src;\r\n if(image.complete){\r\n resolve(image.src);\r\n }\r\n })\r\n }\r\n\r\n onMounted(()=>{\r\n // 初始化\r\n loadingText.value = \"\";\r\n // 多半 base64\r\n if(props.attrs.src && props.attrs.src.indexOf(\"data:image/\") == 0){\r\n\r\n // 文件上传\r\n loadingText.value = \"上传中...\";\r\n\r\n // 开始上传\r\n const blob = base64ToBlob(props.attrs.src); \r\n\r\n console.log(blob.type);\r\n\r\n webFileUpload.upload(new File([blob], `${md5(Math.random().toString())}.png`, { type: blob.type })).then(result=>{\r\n\r\n if (result.data.code !== 200) {\r\n Messager.error({ message: result.data.msg });\r\n return;\r\n }\r\n\r\n // 加载一下\r\n imageLoad(props.attrs.src).then(src=>{\r\n viewSrc.value = src as string;\r\n }).finally(()=>{\r\n loading.value = false;\r\n });\r\n\r\n });\r\n\r\n \r\n }\r\n else{\r\n // 加载一下\r\n imageLoad(props.attrs.src).then(src=>{\r\n viewSrc.value = src as string;\r\n }).finally(()=>{\r\n loading.value = false;\r\n });\r\n }\r\n })\r\n\r\n useMounted(() => {\r\n return mergeRegister(\r\n // editor.registerCommand<ElementFormatType>(FORMAT_ELEMENT_COMMAND,(formatType) => {\r\n // if (isSelected.value) {\r\n\r\n // const selection = $getSelection()\r\n\r\n // if ($isNodeSelection(selection)) {\r\n\r\n // const node = $getNodeByKey(props.nodeKey)\r\n\r\n // if (node && $isImageNode(node)){ \r\n // node.setFormat(formatType) \r\n // }\r\n // }\r\n // else if ($isRangeSelection(selection)) {\r\n\r\n // const nodes = selection.getNodes()\r\n \r\n // for (const node of nodes) {\r\n // if ($isImageNode(node)) {\r\n // node.setFormat(formatType)\r\n // }\r\n // else {\r\n // const element = $getNearestBlockElementAncestorOrThrow(node)\r\n // element.setFormat(formatType)\r\n // }\r\n // }\r\n // }\r\n // setTimeout(()=>updateImageActiveBox(),10)\r\n // return true\r\n // }\r\n // return false\r\n // },\r\n // COMMAND_PRIORITY_LOW,\r\n // ),\r\n // 选中图\r\n editor.registerCommand<MouseEvent>(CLICK_COMMAND,(event) => {\r\n\r\n if (event.target === selfElRef.value) {\r\n\r\n event.preventDefault();\r\n\r\n if (!event.shiftKey){ clearSelection() }\r\n \r\n setSelected(true)\r\n updateImageActiveBox();\r\n \r\n editor.dispatchCommand(SELECTED_COMPONENT_COMMAND,{ \r\n el:selfElRef.value,\r\n component:ImageTools\r\n } as ComponentSelectEvent);\r\n return true\r\n }\r\n\r\n // 没选中\r\n editor.dispatchCommand(SELECTED_COMPONENT_COMMAND,null);\r\n return false\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n // 删除\r\n editor.registerCommand(REMOVE_IMAGE_COMMAND, () => {\r\n \r\n const selection = $getSelection();\r\n \r\n if($isNodeSelection(selection)){\r\n \r\n selection.getNodes().forEach(node=>node.remove());\r\n // 没选中\r\n editor.dispatchCommand(SELECTED_COMPONENT_COMMAND,null);\r\n }\r\n return false;\r\n },COMMAND_PRIORITY_LOW),\r\n // 修改图片属性\r\n editor.registerCommand(IMAGE_ATTRS_CHANGE,(payload:ImageAttrData) => {\r\n\r\n const selection = $getSelection();\r\n\r\n if($isNodeSelection(selection)){\r\n \r\n const node = selection.getNodes()[0] as ImageNode;\r\n \r\n // 是图片\r\n if(node.__key == props.nodeKey){\r\n\r\n // 对齐方式的改变\r\n if(payload.name == \"align\"){\r\n\r\n // 有浮动走浮动的逻辑\r\n if(attrs.float != null && attrs.float != \"\"){ attrs.float = payload.value }\r\n else{\r\n // 否则走文本对齐\r\n node?.getParent()?.setFormat(payload.value as ElementFormatType)\r\n }\r\n }\r\n else if(payload.name==\"edit\"){\r\n // 更新属性\r\n ShowImageEditPanel(attrs).then(data=>{\r\n Object.assign(attrs,data||{});\r\n });\r\n }\r\n else{\r\n // 单个其他属性的改变\r\n attrs[payload.name] = payload.value\r\n }\r\n }\r\n }\r\n setTimeout(()=>updateImageActiveBox(),10)\r\n return false\r\n },COMMAND_PRIORITY_LOW),\r\n editor.registerCommand(DEVICE_VIEW_MODE,(payload: string) => {\r\n setTimeout(()=>updateImageActiveBox(),10)\r\n return false\r\n },COMMAND_PRIORITY_LOW)\r\n )\r\n })\r\n\r\n return () =>{\r\n return <div class={`${props.baseClass} ${isSelected.value ? props.focusClass : ''}`}\r\n style={`text-align: ${props.format};float:${ attrs.float };margin:${attrs.margin}`}>\r\n <img ref={el=>selfElRef.value=el} src={viewSrc.value} style={styles.value.join(\";\")} class={attrs.className} />\r\n {isSelected.value ? <div style={imageActiveBoxStyle} class=\"mk-doc-active-mark\"></div> : null}\r\n {loading.value ? <div class=\"mk-doc-loading-mark\">\r\n {loadingText.value}\r\n </div> : null}\r\n </div>\r\n }\r\n },\r\n})\r\n"],"names":["ImageDefaultSrc","defineComponent","name","props","setup","editor","useLexicalComposer","isSelected","setSelected","clearSelection","useLexicalNodeSelection","nodeKey","selfElRef","ref","imageActiveBoxStyle","reactive","width","height","top","left","updateImageActiveBox","stageRect","value","parentElement","getBoundingClientRect","rect","x","styles","computed","Object","keys","attrs","filter","k","map","replace","toLowerCase","viewSrc","loading","loadingText","webFileUpload","WebFileUpload","imageLoad","src","Promise","resolve","reject","image","Image","onload","onerror","complete","onMounted","indexOf","blob","base64ToBlob","console","log","type","upload","File","md5","Math","random","toString","then","result","data","code","Messager","error","message","msg","finally","useMounted","mergeRegister","registerCommand","CLICK_COMMAND","event","target","preventDefault","shiftKey","dispatchCommand","SELECTED_COMPONENT_COMMAND","el","component","ImageTools","COMMAND_PRIORITY_LOW","REMOVE_IMAGE_COMMAND","selection","$getSelection","$isNodeSelection","getNodes","forEach","node","remove","IMAGE_ATTRS_CHANGE","payload","__key","float","getParent","setFormat","ShowImageEditPanel","assign","setTimeout","DEVICE_VIEW_MODE","_createVNode","baseClass","focusClass","format","margin","join","className"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DocImageComponent.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/ImagePlugin/DocImageComponent.tsx"],"sourcesContent":["import type { ElementFormatType } from 'lexical'\r\nimport { $getSelection,$isNodeSelection, CLICK_COMMAND,COMMAND_PRIORITY_LOW } from 'lexical'\r\nimport { mergeRegister } from '@lexical/utils'\r\nimport { useLexicalComposer,useLexicalNodeSelection,useMounted } from '../../lexical-vue'\r\nimport { defineComponent, ref,reactive,computed,onMounted,watch } from 'vue'\r\nimport { Messager } from \"@maketribe/dm\";\r\nimport { DEVICE_VIEW_MODE,SELECTED_COMPONENT_COMMAND,ComponentSelectEvent } from \"../commands\"\r\nimport { WebFileUpload } from \"@maketribe/request\";\r\nimport { REMOVE_IMAGE_COMMAND,ImageAttrData,IMAGE_ATTRS_CHANGE,ImageNode } from './index'\r\nimport { base64ToBlob,md5 } from \"@maketribe/utils\";\r\nimport { ShowImageEditPanel } from \"./ImageEditPanel\"\r\nimport ImageTools from './ImageTools.vue'\r\n\r\n// 默认图片\r\nconst ImageDefaultSrc = \"data:image/png;base64,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\";\r\n\r\n/**\r\n * 图片渲染组件\r\n */\r\nexport default defineComponent({\r\n name: 'DocImageComponent',\r\n props: ['format','baseClass','focusClass', 'nodeKey', 'attrs'],\r\n setup(props) {\r\n\r\n const editor = useLexicalComposer()\r\n const { isSelected, setSelected, clearSelection } = useLexicalNodeSelection(props.nodeKey)\r\n const selfElRef = ref<any>(null);\r\n const imageActiveBoxStyle = reactive({ width:\"\", height:\"\", top:\"\", left:\"\" });\r\n const updateImageActiveBox = ()=>{\r\n let stageRect = selfElRef.value.parentElement.getBoundingClientRect();\r\n let rect = selfElRef.value.getBoundingClientRect();\r\n imageActiveBoxStyle.width = rect.width+ \"px\";\r\n imageActiveBoxStyle.height = rect.height+ \"px\";\r\n imageActiveBoxStyle.left = rect.x - stageRect.x + \"px\";\r\n imageActiveBoxStyle.top = \"0px\";\r\n }\r\n\r\n const styles = computed<string[]>(()=>{\r\n return Object.keys(attrs).filter(k=>attrs[k] && k != \"float\" && k!=\"margin\" && k!=\"src\" && k!=\"alt\").map(k=>{\r\n return k.replace(/([A-Z])/g,\"-$1\").toLowerCase()+\":\"+attrs[k]\r\n });\r\n })\r\n\r\n // 显示的图\r\n const viewSrc = ref<string>(ImageDefaultSrc)\r\n const loading = ref(true);\r\n const loadingText = ref(\"\");\r\n const attrs = reactive(props.attrs)\r\n const webFileUpload = new WebFileUpload();\r\n // 图片加载\r\n const imageLoad = (src:string)=>{\r\n // 加载文案\r\n loadingText.value = \"加载中...\";\r\n loading.value = true;\r\n return new Promise((resolve,reject)=>{\r\n // 加载一下\r\n const image = new Image();\r\n const loadComplete = ()=>{\r\n viewSrc.value = image.src;\r\n attrs.src = src;\r\n loadingText.value = \"\";\r\n loading.value = false;\r\n resolve(image.src);\r\n }\r\n image.onload = ()=>loadComplete()\r\n image.onerror = reject\r\n image.src = src;\r\n if(image.complete){\r\n loadComplete();\r\n }\r\n })\r\n // .finally(()=>{\r\n // loading.value = false;\r\n // });\r\n }\r\n\r\n // 图片路径变更的时候\r\n watch(()=>attrs.src,(src:string)=>{\r\n // 初始化\r\n loadingText.value = \"\";\r\n // 多半 base64\r\n if(src && src.indexOf(\"data:image/\") == 0){\r\n\r\n // 文件上传 \r\n loadingText.value = \"上传中...\";\r\n\r\n // 开始上传\r\n const blob = base64ToBlob(src); \r\n\r\n // 上传\r\n webFileUpload.upload(\r\n new File([blob], `${md5(Math.random().toString())}.${blob.type.toString().replace(\"image/\",\"\") || \"png\"}`, { type: blob.type })\r\n ).then(result=>{\r\n\r\n if (result.data.code !== 200) {\r\n Messager.error({ message: result.data.msg });\r\n return;\r\n }\r\n // 加载一下\r\n imageLoad(result.data.data.path);\r\n });\r\n }\r\n else if(src){\r\n // 加载一下\r\n imageLoad(src);\r\n }\r\n else{\r\n // 文件上传\r\n loading.value = true;\r\n loadingText.value = \"无图片内容\";\r\n }\r\n },{ immediate:true })\r\n \r\n // 编辑器挂载的时候\r\n useMounted(() => {\r\n return mergeRegister(\r\n // 选中图\r\n editor.registerCommand<MouseEvent>(CLICK_COMMAND,(event) => {\r\n\r\n if (event.target === selfElRef.value) {\r\n\r\n event.preventDefault();\r\n\r\n if (!event.shiftKey){ clearSelection() }\r\n \r\n setSelected(true)\r\n updateImageActiveBox();\r\n \r\n editor.dispatchCommand(SELECTED_COMPONENT_COMMAND,{ \r\n el:selfElRef.value,\r\n component:ImageTools\r\n } as ComponentSelectEvent);\r\n return true\r\n }\r\n\r\n // 没选中\r\n editor.dispatchCommand(SELECTED_COMPONENT_COMMAND,null);\r\n return false\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n // 删除\r\n editor.registerCommand(REMOVE_IMAGE_COMMAND, () => {\r\n \r\n const selection = $getSelection();\r\n \r\n if($isNodeSelection(selection)){\r\n \r\n selection.getNodes().forEach(node=>node.remove());\r\n // 没选中\r\n editor.dispatchCommand(SELECTED_COMPONENT_COMMAND,null);\r\n }\r\n return false;\r\n },COMMAND_PRIORITY_LOW),\r\n // 修改图片属性\r\n editor.registerCommand(IMAGE_ATTRS_CHANGE,(payload:ImageAttrData) => {\r\n\r\n const selection = $getSelection();\r\n\r\n if($isNodeSelection(selection)){\r\n \r\n const node = selection.getNodes()[0] as ImageNode;\r\n \r\n // 是图片\r\n if(node.__key == props.nodeKey){\r\n\r\n // 对齐方式的改变\r\n if(payload.name == \"align\"){\r\n\r\n // 有浮动走浮动的逻辑\r\n if(attrs.float != null && attrs.float != \"\"){ attrs.float = payload.value }\r\n else{\r\n // 否则走文本对齐\r\n node?.getParent()?.setFormat(payload.value as ElementFormatType)\r\n }\r\n }\r\n // 属性编辑\r\n else if(payload.name == \"edit\"){\r\n // 更新属性\r\n ShowImageEditPanel({...attrs}).then((data:any)=>{\r\n Object.assign(attrs,data||{});\r\n setTimeout(()=>updateImageActiveBox(),10)\r\n }).catch(err=>{\r\n console.log(err);\r\n });\r\n \r\n }\r\n else{\r\n // 单个其他属性的改变\r\n attrs[payload.name] = payload.value\r\n }\r\n }\r\n }\r\n setTimeout(()=>updateImageActiveBox(),10)\r\n return false\r\n },COMMAND_PRIORITY_LOW),\r\n editor.registerCommand(DEVICE_VIEW_MODE,(payload: string) => {\r\n setTimeout(()=>updateImageActiveBox(),10)\r\n return false\r\n },COMMAND_PRIORITY_LOW)\r\n )\r\n })\r\n\r\n return () =>{\r\n return <div class={`${props.baseClass} ${isSelected.value ? props.focusClass : ''}`}\r\n style={`text-align: ${props.format};float:${ attrs.float };margin:${attrs.margin}`}>\r\n <img ref={el=>selfElRef.value=el} src={viewSrc.value} style={styles.value.join(\";\")} class={attrs.className} />\r\n {isSelected.value ? <div style={imageActiveBoxStyle} class=\"mk-doc-active-mark\"></div> : null}\r\n {loading.value ? <div class=\"mk-doc-loading-mark\">\r\n {loadingText.value}\r\n </div> : null}\r\n </div>\r\n }\r\n },\r\n})\r\n"],"names":["ImageDefaultSrc","defineComponent","name","props","setup","editor","useLexicalComposer","isSelected","setSelected","clearSelection","useLexicalNodeSelection","nodeKey","selfElRef","ref","imageActiveBoxStyle","reactive","width","height","top","left","updateImageActiveBox","stageRect","value","parentElement","getBoundingClientRect","rect","x","styles","computed","Object","keys","attrs","filter","k","map","replace","toLowerCase","viewSrc","loading","loadingText","webFileUpload","WebFileUpload","imageLoad","src","Promise","resolve","reject","image","Image","loadComplete","onload","onerror","complete","watch","indexOf","blob","base64ToBlob","upload","File","md5","Math","random","toString","type","then","result","data","code","Messager","error","message","msg","path","immediate","useMounted","mergeRegister","registerCommand","CLICK_COMMAND","event","target","preventDefault","shiftKey","dispatchCommand","SELECTED_COMPONENT_COMMAND","el","component","ImageTools","COMMAND_PRIORITY_LOW","REMOVE_IMAGE_COMMAND","selection","$getSelection","$isNodeSelection","getNodes","forEach","node","remove","IMAGE_ATTRS_CHANGE","payload","__key","float","getParent","setFormat","ShowImageEditPanel","assign","setTimeout","catch","err","console","log","DEVICE_VIEW_MODE","_createVNode","baseClass","focusClass","format","margin","join","className"],"mappings":"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"}
|