@maketribe/ms-app 3.2.33 → 3.2.35

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.
Files changed (306) hide show
  1. package/dist/cjs/components/basic/doc-editor/core/LexicalComposer.vue.js +74 -0
  2. package/dist/cjs/components/basic/doc-editor/core/LexicalComposer.vue.js.map +1 -0
  3. package/dist/cjs/components/basic/doc-editor/core/LexicalComposer.vue2.js +4 -0
  4. package/dist/cjs/components/basic/doc-editor/core/LexicalComposer.vue2.js.map +1 -0
  5. package/dist/cjs/components/basic/doc-editor/core/composables/inject.js +5 -0
  6. package/dist/cjs/components/basic/doc-editor/core/composables/inject.js.map +1 -0
  7. package/dist/cjs/components/basic/doc-editor/core/composables/listenerManager.js +18 -0
  8. package/dist/cjs/components/basic/doc-editor/core/composables/listenerManager.js.map +1 -0
  9. package/dist/cjs/components/basic/doc-editor/core/composables/useCanShowPlaceholder.js +31 -0
  10. package/dist/cjs/components/basic/doc-editor/core/composables/useCanShowPlaceholder.js.map +1 -0
  11. package/dist/cjs/components/basic/doc-editor/core/composables/useDecorators.js +31 -0
  12. package/dist/cjs/components/basic/doc-editor/core/composables/useDecorators.js.map +1 -0
  13. package/dist/cjs/components/basic/doc-editor/core/composables/useHistory.js +15 -0
  14. package/dist/cjs/components/basic/doc-editor/core/composables/useHistory.js.map +1 -0
  15. package/dist/cjs/components/basic/doc-editor/core/composables/useLexicalComposer.js +17 -0
  16. package/dist/cjs/components/basic/doc-editor/core/composables/useLexicalComposer.js.map +1 -0
  17. package/dist/cjs/components/basic/doc-editor/core/composables/useLexicalTextEntity.js +16 -0
  18. package/dist/cjs/components/basic/doc-editor/core/composables/useLexicalTextEntity.js.map +1 -0
  19. package/dist/cjs/components/basic/doc-editor/core/composables/useList.js +48 -0
  20. package/dist/cjs/components/basic/doc-editor/core/composables/useList.js.map +1 -0
  21. package/dist/cjs/components/basic/doc-editor/core/composables/useMounted.js +14 -0
  22. package/dist/cjs/components/basic/doc-editor/core/composables/useMounted.js.map +1 -0
  23. package/dist/cjs/components/basic/doc-editor/core/composables/useRichTextSetup.js +16 -0
  24. package/dist/cjs/components/basic/doc-editor/core/composables/useRichTextSetup.js.map +1 -0
  25. package/dist/cjs/components/basic/doc-editor/core/element-block.js +12 -3
  26. package/dist/cjs/components/basic/doc-editor/core/element-block.js.map +1 -1
  27. package/dist/cjs/components/basic/doc-editor/core/index.js +14 -0
  28. package/dist/cjs/components/basic/doc-editor/core/index.js.map +1 -1
  29. package/dist/cjs/components/basic/doc-editor/{plugins/RichTextPlugin/nodes/RichTextNode.js → core/nodes/RichElementNode.js} +81 -35
  30. package/dist/cjs/components/basic/doc-editor/core/nodes/RichElementNode.js.map +1 -0
  31. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoFocusPlugin.vue.js +42 -0
  32. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoFocusPlugin.vue.js.map +1 -0
  33. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoFocusPlugin.vue2.js +4 -0
  34. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoFocusPlugin.vue2.js.map +1 -0
  35. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue.js +4 -0
  36. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue.js.map +1 -0
  37. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue2.js +37 -0
  38. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue2.js.map +1 -0
  39. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/shared.js +176 -0
  40. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/shared.js.map +1 -0
  41. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalCheckListPlugin.vue.js +215 -0
  42. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalCheckListPlugin.vue.js.map +1 -0
  43. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalCheckListPlugin.vue2.js +4 -0
  44. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalCheckListPlugin.vue2.js.map +1 -0
  45. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalHashtagPlugin.vue.js +75 -0
  46. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalHashtagPlugin.vue.js.map +1 -0
  47. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalHashtagPlugin.vue2.js +4 -0
  48. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalHashtagPlugin.vue2.js.map +1 -0
  49. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalHistoryPlugin.vue.js +29 -0
  50. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalHistoryPlugin.vue.js.map +1 -0
  51. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalHistoryPlugin.vue2.js +4 -0
  52. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalHistoryPlugin.vue2.js.map +1 -0
  53. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalLinkPlugin.vue.js +4 -0
  54. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalLinkPlugin.vue.js.map +1 -0
  55. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalLinkPlugin.vue2.js +77 -0
  56. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalLinkPlugin.vue2.js.map +1 -0
  57. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalListPlugin.vue.js +25 -0
  58. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalListPlugin.vue.js.map +1 -0
  59. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalListPlugin.vue2.js +4 -0
  60. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalListPlugin.vue2.js.map +1 -0
  61. package/dist/cjs/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/ContentEditable.vue.js +14 -3
  62. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalRichTextPlugin/ContentEditable.vue.js.map +1 -0
  63. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalRichTextPlugin/DecoratedTeleports.js +24 -0
  64. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalRichTextPlugin/DecoratedTeleports.js.map +1 -0
  65. package/dist/cjs/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/index.vue.js +20 -9
  66. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalRichTextPlugin/index.vue.js.map +1 -0
  67. package/dist/cjs/components/basic/doc-editor/editor.vue.js +19 -12
  68. package/dist/cjs/components/basic/doc-editor/editor.vue.js.map +1 -1
  69. package/dist/cjs/components/basic/doc-editor/{plugins/nodes.js → nodes.js} +13 -11
  70. package/dist/cjs/components/basic/doc-editor/nodes.js.map +1 -0
  71. package/dist/cjs/components/basic/doc-editor/plugins/AutoLinkPlugin/index.vue.js +5 -3
  72. package/dist/cjs/components/basic/doc-editor/plugins/AutoLinkPlugin/index.vue.js.map +1 -1
  73. package/dist/cjs/components/basic/doc-editor/plugins/ElementBlockSelectionPlugin/index.vue.js +13 -4
  74. package/dist/cjs/components/basic/doc-editor/plugins/ElementBlockSelectionPlugin/index.vue.js.map +1 -1
  75. package/dist/cjs/components/basic/doc-editor/plugins/GridPlugin/index.vue.js +10 -2
  76. package/dist/cjs/components/basic/doc-editor/plugins/GridPlugin/index.vue.js.map +1 -1
  77. package/dist/cjs/components/basic/doc-editor/plugins/ImagePlugin/index.vue.js +23 -15
  78. package/dist/cjs/components/basic/doc-editor/plugins/ImagePlugin/index.vue.js.map +1 -1
  79. package/dist/cjs/components/basic/doc-editor/plugins/ModulePlugin/composables.js.map +1 -1
  80. package/dist/cjs/components/basic/doc-editor/plugins/ModulePlugin/index.vue.js +10 -2
  81. package/dist/cjs/components/basic/doc-editor/plugins/ModulePlugin/index.vue.js.map +1 -1
  82. package/dist/cjs/components/basic/doc-editor/plugins/TemplatePlugin/composables.js +12 -3
  83. package/dist/cjs/components/basic/doc-editor/plugins/TemplatePlugin/composables.js.map +1 -1
  84. package/dist/cjs/components/basic/doc-editor/plugins/TemplatePlugin/index.vue.js +13 -3
  85. package/dist/cjs/components/basic/doc-editor/plugins/TemplatePlugin/index.vue.js.map +1 -1
  86. package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/ContentStyleTool.vue.js +8 -2
  87. package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/ContentStyleTool.vue.js.map +1 -1
  88. package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleDefines.js +9 -2
  89. package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleDefines.js.map +1 -1
  90. package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleTool.vue.js +10 -2
  91. package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleTool.vue.js.map +1 -1
  92. package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/PreviewToolbar.vue.js +16 -4
  93. package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/PreviewToolbar.vue.js.map +1 -1
  94. package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js +10 -2
  95. package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js.map +1 -1
  96. package/dist/cjs/components/basic/doc-editor/themes/doc-editor-edit.css.js +1 -1
  97. package/dist/cjs/components/basic/doc-editor/themes/doc-editor-edit.css.js.map +1 -1
  98. package/dist/cjs/modules/cms/composables/part-extensions.js +3 -4
  99. package/dist/cjs/modules/cms/composables/part-extensions.js.map +1 -1
  100. package/dist/cjs/modules/cms/pages/cms-contents/components/article-list.vue.js +7 -5
  101. package/dist/cjs/modules/cms/pages/cms-contents/components/article-list.vue.js.map +1 -1
  102. package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js +2 -2
  103. package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js.map +1 -1
  104. package/dist/cjs/modules/cms/pages/cms-contents/components/part-info.vue.js +0 -3
  105. package/dist/cjs/modules/cms/pages/cms-contents/components/part-info.vue.js.map +1 -1
  106. package/dist/cjs/modules/cms/pages/cms-contents/index.vue2.js +229 -190
  107. package/dist/cjs/modules/cms/pages/cms-contents/index.vue2.js.map +1 -1
  108. package/dist/cjs/modules/ms/components/rich-text-editor/index.js.map +1 -1
  109. package/dist/cjs/modules/ms/components/rich-text-editor/rich-text-editor-options.js +2 -4
  110. package/dist/cjs/modules/ms/components/rich-text-editor/rich-text-editor-options.js.map +1 -1
  111. package/dist/cjs/modules/ms/components/rich-text-editor/rich-text-editor.js +5 -4
  112. package/dist/cjs/modules/ms/components/rich-text-editor/rich-text-editor.js.map +1 -1
  113. package/dist/esm/components/basic/doc-editor/core/LexicalComposer.vue.js +75 -0
  114. package/dist/esm/components/basic/doc-editor/core/LexicalComposer.vue.js.map +1 -0
  115. package/dist/esm/components/basic/doc-editor/core/LexicalComposer.vue2.js +5 -0
  116. package/dist/esm/components/basic/doc-editor/core/LexicalComposer.vue2.js.map +1 -0
  117. package/dist/esm/components/basic/doc-editor/core/composables/inject.js +5 -0
  118. package/dist/esm/components/basic/doc-editor/core/composables/inject.js.map +1 -0
  119. package/dist/esm/components/basic/doc-editor/core/composables/listenerManager.js +18 -0
  120. package/dist/esm/components/basic/doc-editor/core/composables/listenerManager.js.map +1 -0
  121. package/dist/esm/components/basic/doc-editor/core/composables/useCanShowPlaceholder.js +31 -0
  122. package/dist/esm/components/basic/doc-editor/core/composables/useCanShowPlaceholder.js.map +1 -0
  123. package/dist/esm/components/basic/doc-editor/core/composables/useDecorators.js +31 -0
  124. package/dist/esm/components/basic/doc-editor/core/composables/useDecorators.js.map +1 -0
  125. package/dist/esm/components/basic/doc-editor/core/composables/useHistory.js +15 -0
  126. package/dist/esm/components/basic/doc-editor/core/composables/useHistory.js.map +1 -0
  127. package/dist/esm/components/basic/doc-editor/core/composables/useLexicalComposer.js +17 -0
  128. package/dist/esm/components/basic/doc-editor/core/composables/useLexicalComposer.js.map +1 -0
  129. package/dist/esm/components/basic/doc-editor/core/composables/useLexicalTextEntity.js +16 -0
  130. package/dist/esm/components/basic/doc-editor/core/composables/useLexicalTextEntity.js.map +1 -0
  131. package/dist/esm/components/basic/doc-editor/core/composables/useList.js +48 -0
  132. package/dist/esm/components/basic/doc-editor/core/composables/useList.js.map +1 -0
  133. package/dist/esm/components/basic/doc-editor/core/composables/useMounted.js +14 -0
  134. package/dist/esm/components/basic/doc-editor/core/composables/useMounted.js.map +1 -0
  135. package/dist/esm/components/basic/doc-editor/core/composables/useRichTextSetup.js +16 -0
  136. package/dist/esm/components/basic/doc-editor/core/composables/useRichTextSetup.js.map +1 -0
  137. package/dist/esm/components/basic/doc-editor/core/element-block.js +10 -1
  138. package/dist/esm/components/basic/doc-editor/core/element-block.js.map +1 -1
  139. package/dist/esm/components/basic/doc-editor/core/index.js +14 -0
  140. package/dist/esm/components/basic/doc-editor/core/index.js.map +1 -1
  141. package/dist/esm/components/basic/doc-editor/{plugins/RichTextPlugin/nodes/RichTextNode.js → core/nodes/RichElementNode.js} +82 -36
  142. package/dist/esm/components/basic/doc-editor/core/nodes/RichElementNode.js.map +1 -0
  143. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoFocusPlugin.vue.js +43 -0
  144. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoFocusPlugin.vue.js.map +1 -0
  145. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoFocusPlugin.vue2.js +5 -0
  146. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoFocusPlugin.vue2.js.map +1 -0
  147. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue.js +5 -0
  148. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue.js.map +1 -0
  149. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue2.js +38 -0
  150. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue2.js.map +1 -0
  151. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/shared.js +176 -0
  152. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/shared.js.map +1 -0
  153. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalCheckListPlugin.vue.js +216 -0
  154. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalCheckListPlugin.vue.js.map +1 -0
  155. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalCheckListPlugin.vue2.js +5 -0
  156. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalCheckListPlugin.vue2.js.map +1 -0
  157. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalHashtagPlugin.vue.js +76 -0
  158. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalHashtagPlugin.vue.js.map +1 -0
  159. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalHashtagPlugin.vue2.js +5 -0
  160. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalHashtagPlugin.vue2.js.map +1 -0
  161. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalHistoryPlugin.vue.js +30 -0
  162. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalHistoryPlugin.vue.js.map +1 -0
  163. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalHistoryPlugin.vue2.js +5 -0
  164. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalHistoryPlugin.vue2.js.map +1 -0
  165. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalLinkPlugin.vue.js +5 -0
  166. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalLinkPlugin.vue.js.map +1 -0
  167. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalLinkPlugin.vue2.js +78 -0
  168. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalLinkPlugin.vue2.js.map +1 -0
  169. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalListPlugin.vue.js +26 -0
  170. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalListPlugin.vue.js.map +1 -0
  171. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalListPlugin.vue2.js +5 -0
  172. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalListPlugin.vue2.js.map +1 -0
  173. package/dist/esm/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/ContentEditable.vue.js +12 -1
  174. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalRichTextPlugin/ContentEditable.vue.js.map +1 -0
  175. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalRichTextPlugin/DecoratedTeleports.js +25 -0
  176. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalRichTextPlugin/DecoratedTeleports.js.map +1 -0
  177. package/dist/esm/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/index.vue.js +19 -8
  178. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalRichTextPlugin/index.vue.js.map +1 -0
  179. package/dist/esm/components/basic/doc-editor/editor.vue.js +31 -24
  180. package/dist/esm/components/basic/doc-editor/editor.vue.js.map +1 -1
  181. package/dist/esm/components/basic/doc-editor/{plugins/nodes.js → nodes.js} +13 -11
  182. package/dist/esm/components/basic/doc-editor/nodes.js.map +1 -0
  183. package/dist/esm/components/basic/doc-editor/plugins/AutoLinkPlugin/index.vue.js +5 -3
  184. package/dist/esm/components/basic/doc-editor/plugins/AutoLinkPlugin/index.vue.js.map +1 -1
  185. package/dist/esm/components/basic/doc-editor/plugins/ElementBlockSelectionPlugin/index.vue.js +12 -3
  186. package/dist/esm/components/basic/doc-editor/plugins/ElementBlockSelectionPlugin/index.vue.js.map +1 -1
  187. package/dist/esm/components/basic/doc-editor/plugins/GridPlugin/index.vue.js +9 -1
  188. package/dist/esm/components/basic/doc-editor/plugins/GridPlugin/index.vue.js.map +1 -1
  189. package/dist/esm/components/basic/doc-editor/plugins/ImagePlugin/index.vue.js +14 -6
  190. package/dist/esm/components/basic/doc-editor/plugins/ImagePlugin/index.vue.js.map +1 -1
  191. package/dist/esm/components/basic/doc-editor/plugins/ModulePlugin/composables.js.map +1 -1
  192. package/dist/esm/components/basic/doc-editor/plugins/ModulePlugin/index.vue.js +9 -1
  193. package/dist/esm/components/basic/doc-editor/plugins/ModulePlugin/index.vue.js.map +1 -1
  194. package/dist/esm/components/basic/doc-editor/plugins/TemplatePlugin/composables.js +10 -1
  195. package/dist/esm/components/basic/doc-editor/plugins/TemplatePlugin/composables.js.map +1 -1
  196. package/dist/esm/components/basic/doc-editor/plugins/TemplatePlugin/index.vue.js +12 -2
  197. package/dist/esm/components/basic/doc-editor/plugins/TemplatePlugin/index.vue.js.map +1 -1
  198. package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/ContentStyleTool.vue.js +7 -1
  199. package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/ContentStyleTool.vue.js.map +1 -1
  200. package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleDefines.js +9 -2
  201. package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleDefines.js.map +1 -1
  202. package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleTool.vue.js +9 -1
  203. package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleTool.vue.js.map +1 -1
  204. package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/PreviewToolbar.vue.js +13 -1
  205. package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/PreviewToolbar.vue.js.map +1 -1
  206. package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js +9 -1
  207. package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js.map +1 -1
  208. package/dist/esm/components/basic/doc-editor/themes/doc-editor-edit.css.js +1 -1
  209. package/dist/esm/components/basic/doc-editor/themes/doc-editor-edit.css.js.map +1 -1
  210. package/dist/esm/modules/cms/composables/part-extensions.js +3 -4
  211. package/dist/esm/modules/cms/composables/part-extensions.js.map +1 -1
  212. package/dist/esm/modules/cms/pages/cms-contents/components/article-list.vue.js +7 -5
  213. package/dist/esm/modules/cms/pages/cms-contents/components/article-list.vue.js.map +1 -1
  214. package/dist/esm/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js +2 -2
  215. package/dist/esm/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js.map +1 -1
  216. package/dist/esm/modules/cms/pages/cms-contents/components/part-info.vue.js +0 -3
  217. package/dist/esm/modules/cms/pages/cms-contents/components/part-info.vue.js.map +1 -1
  218. package/dist/esm/modules/cms/pages/cms-contents/index.vue2.js +229 -190
  219. package/dist/esm/modules/cms/pages/cms-contents/index.vue2.js.map +1 -1
  220. package/dist/esm/modules/ms/components/rich-text-editor/index.js.map +1 -1
  221. package/dist/esm/modules/ms/components/rich-text-editor/rich-text-editor-options.js +2 -4
  222. package/dist/esm/modules/ms/components/rich-text-editor/rich-text-editor-options.js.map +1 -1
  223. package/dist/esm/modules/ms/components/rich-text-editor/rich-text-editor.js +5 -4
  224. package/dist/esm/modules/ms/components/rich-text-editor/rich-text-editor.js.map +1 -1
  225. package/dist/style/components/basic/doc-editor/index.css +1 -1
  226. package/dist/style/components/index.css +1 -1
  227. package/dist/style/index.css +2 -2
  228. package/dist/style/modules/cms/index.css +1 -1
  229. package/dist/style/modules/cms/pages/cms-contents/components/article-list.css +1 -1
  230. package/dist/style/modules/cms/pages/cms-contents/index.css +1 -1
  231. package/dist/style/modules/ms/components/rich-text-editor/index.css +1 -1
  232. package/dist/style/modules/ms/index.css +1 -1
  233. package/dist/style/src/components/basic/doc-editor/index.scss +3 -2
  234. package/dist/style/src/modules/cms/pages/cms-contents/components/article-list.scss +1 -0
  235. package/dist/style/src/modules/ms/components/rich-text-editor/index.scss +1 -1
  236. package/dist/types/components/basic/doc-editor/core/LexicalComposer.vue.d.ts +29 -0
  237. package/dist/types/components/basic/doc-editor/core/composables/index.d.ts +15 -0
  238. package/dist/types/components/basic/doc-editor/core/composables/inject.d.ts +1 -0
  239. package/dist/types/components/basic/doc-editor/core/composables/listenerManager.d.ts +1 -0
  240. package/dist/types/components/basic/doc-editor/core/composables/useCanShowPlaceholder.d.ts +2 -0
  241. package/dist/types/components/basic/doc-editor/core/composables/useCharacterLimit.d.ts +9 -0
  242. package/dist/types/components/basic/doc-editor/core/composables/useDecorators.d.ts +4 -0
  243. package/dist/types/components/basic/doc-editor/core/composables/useEffect.d.ts +5 -0
  244. package/dist/types/components/basic/doc-editor/core/composables/useHistory.d.ts +4 -0
  245. package/dist/types/components/basic/doc-editor/core/composables/useLexicalCommandsLog.d.ts +5 -0
  246. package/dist/types/components/basic/doc-editor/core/composables/useLexicalComposer.d.ts +6 -0
  247. package/dist/types/components/basic/doc-editor/core/composables/useLexicalIsTextContentEmpty.d.ts +2 -0
  248. package/dist/types/components/basic/doc-editor/core/composables/useLexicalNodeSelection.d.ts +7 -0
  249. package/dist/types/components/basic/doc-editor/core/composables/useLexicalTextEntity.d.ts +3 -0
  250. package/dist/types/components/basic/doc-editor/core/composables/useList.d.ts +2 -0
  251. package/dist/types/components/basic/doc-editor/core/composables/useMounted.d.ts +4 -0
  252. package/dist/types/components/basic/doc-editor/core/composables/usePlainTextSetup.d.ts +2 -0
  253. package/dist/types/components/basic/doc-editor/core/composables/useReactiveEditor.d.ts +2 -0
  254. package/dist/types/components/basic/doc-editor/core/composables/useRichTextSetup.d.ts +2 -0
  255. package/dist/types/components/basic/doc-editor/core/composables/useTableOfContents.d.ts +8 -0
  256. package/dist/types/components/basic/doc-editor/core/index.d.ts +8 -0
  257. package/dist/types/components/basic/doc-editor/core/nodes/RichElementNode.d.ts +46 -0
  258. package/dist/types/components/basic/doc-editor/core/nodes/index.d.ts +1 -0
  259. package/dist/types/components/basic/doc-editor/core/plugins/LexicalAutoFocusPlugin.vue.d.ts +15 -0
  260. package/dist/types/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue.d.ts +26 -0
  261. package/dist/types/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/shared.d.ts +14 -0
  262. package/dist/types/components/basic/doc-editor/core/plugins/LexicalCheckListPlugin.vue.d.ts +2 -0
  263. package/dist/types/components/basic/doc-editor/core/plugins/LexicalHashtagPlugin.vue.d.ts +2 -0
  264. package/dist/types/components/basic/doc-editor/core/plugins/LexicalHistoryPlugin.vue.d.ts +16 -0
  265. package/dist/types/components/basic/doc-editor/core/plugins/LexicalLinkPlugin.vue.d.ts +15 -0
  266. package/dist/types/components/basic/doc-editor/core/plugins/LexicalListPlugin.vue.d.ts +2 -0
  267. package/dist/types/components/basic/doc-editor/core/types.d.ts +2 -0
  268. package/dist/types/components/basic/doc-editor/plugins/ModulePlugin/composables.d.ts +1 -1
  269. package/dist/types/components/basic/doc-editor/plugins/TemplatePlugin/composables.d.ts +1 -0
  270. package/dist/types/components/basic/doc-editor/plugins/index.d.ts +1 -3
  271. package/dist/types/components/data-model/data-table/views/table/index.d.ts +1 -1
  272. package/dist/types/components/data-model/data-table/views/table/table.d.ts +1 -1
  273. package/dist/types/components/data-model/data-table/views/tree/index.d.ts +1 -1
  274. package/dist/types/components/data-model/data-table/views/tree/tree.d.ts +1 -1
  275. package/dist/types/modules/cms/composables/part-extensions.d.ts +1 -1
  276. package/dist/types/modules/ms/components/material-list/material-item.vue.d.ts +1 -1
  277. package/dist/types/modules/ms/components/rich-text-editor/index.d.ts +2 -2
  278. package/dist/types/modules/ms/components/rich-text-editor/rich-text-editor-options.d.ts +1 -1
  279. package/dist/types/modules/ms/components/rich-text-editor/rich-text-editor.d.ts +2 -2
  280. package/package.json +22 -23
  281. package/dist/cjs/components/basic/doc-editor/plugins/RichTextPlugin/ContentEditable.vue.js.map +0 -1
  282. package/dist/cjs/components/basic/doc-editor/plugins/RichTextPlugin/DecoratedTeleports.js +0 -13
  283. package/dist/cjs/components/basic/doc-editor/plugins/RichTextPlugin/DecoratedTeleports.js.map +0 -1
  284. package/dist/cjs/components/basic/doc-editor/plugins/RichTextPlugin/index.vue.js.map +0 -1
  285. package/dist/cjs/components/basic/doc-editor/plugins/RichTextPlugin/nodes/RichTextNode.js.map +0 -1
  286. package/dist/cjs/components/basic/doc-editor/plugins/nodes.js.map +0 -1
  287. package/dist/esm/components/basic/doc-editor/plugins/RichTextPlugin/ContentEditable.vue.js.map +0 -1
  288. package/dist/esm/components/basic/doc-editor/plugins/RichTextPlugin/DecoratedTeleports.js +0 -14
  289. package/dist/esm/components/basic/doc-editor/plugins/RichTextPlugin/DecoratedTeleports.js.map +0 -1
  290. package/dist/esm/components/basic/doc-editor/plugins/RichTextPlugin/index.vue.js.map +0 -1
  291. package/dist/esm/components/basic/doc-editor/plugins/RichTextPlugin/nodes/RichTextNode.js.map +0 -1
  292. package/dist/esm/components/basic/doc-editor/plugins/nodes.js.map +0 -1
  293. package/dist/types/components/basic/doc-editor/plugins/RichTextPlugin/nodes/RichTextNode.d.ts +0 -13
  294. package/dist/types/components/basic/doc-editor/plugins/VideoPlugin/VideoNode.d.ts +0 -23
  295. /package/dist/cjs/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/ContentEditable.vue2.js +0 -0
  296. /package/dist/cjs/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/ContentEditable.vue2.js.map +0 -0
  297. /package/dist/cjs/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/index.vue2.js +0 -0
  298. /package/dist/cjs/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/index.vue2.js.map +0 -0
  299. /package/dist/esm/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/ContentEditable.vue2.js +0 -0
  300. /package/dist/esm/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/ContentEditable.vue2.js.map +0 -0
  301. /package/dist/esm/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/index.vue2.js +0 -0
  302. /package/dist/esm/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/index.vue2.js.map +0 -0
  303. /package/dist/types/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/ContentEditable.vue.d.ts +0 -0
  304. /package/dist/types/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/DecoratedTeleports.d.ts +0 -0
  305. /package/dist/types/components/basic/doc-editor/{plugins/RichTextPlugin → core/plugins/LexicalRichTextPlugin}/index.vue.d.ts +0 -0
  306. /package/dist/types/components/basic/doc-editor/{plugins/nodes.d.ts → nodes.d.ts} +0 -0
@@ -1,7 +1,19 @@
1
- import { defineComponent, ref, computed, onMounted, watch, onUnmounted, openBlock, createElementBlock, createVNode, unref, toDisplayString, createCommentVNode } from "vue";
2
- import { useLexicalComposer, useCanShowPlaceholder, useRichTextSetup } from "lexical-vue";
1
+ import { defineComponent, ref, computed, watch, openBlock, createElementBlock, createVNode, unref, toDisplayString, createCommentVNode } from "vue";
2
+ import { useCanShowPlaceholder } from "../../composables/useCanShowPlaceholder.js";
3
+ import "@lexical/overflow";
4
+ import "@lexical/text";
5
+ import "@lexical/utils";
3
6
  import { $selectAll, $getSelection } from "lexical";
4
- import { $generateHtmlFromNodes, $generateNodesFromDOM } from "@lexical/html";
7
+ import "tiny-invariant";
8
+ import { useMounted } from "../../composables/useMounted.js";
9
+ import "@lexical/history";
10
+ import { useLexicalComposer } from "../../composables/useLexicalComposer.js";
11
+ import "@lexical/list";
12
+ import "@lexical/dragon";
13
+ import "@lexical/plain-text";
14
+ import { useRichTextSetup } from "../../composables/useRichTextSetup.js";
15
+ import "@lexical/rich-text";
16
+ import { $generateNodesFromDOM, $generateHtmlFromNodes } from "@lexical/html";
5
17
  import _sfc_main$1 from "./ContentEditable.vue.js";
6
18
  import DecoratedTeleports from "./DecoratedTeleports.js";
7
19
  const _hoisted_1 = { class: "mk-doc-editor__stage__editable" };
@@ -41,16 +53,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
41
53
  });
42
54
  }
43
55
  };
44
- onMounted(() => {
45
- watch(() => props.content, setHtml, { immediate: true });
46
- watch(htmlContent, (value) => emit("change", value));
47
- const unregisterMergeListener = editor.registerUpdateListener(({ editorState }) => {
56
+ useMounted(() => {
57
+ return editor.registerUpdateListener(({ editorState }) => {
48
58
  editorState.read(() => {
49
59
  htmlContent.value = $generateHtmlFromNodes(editor);
50
60
  });
51
61
  });
52
- onUnmounted(() => unregisterMergeListener());
53
62
  });
63
+ watch(() => props.content, setHtml, { immediate: true });
64
+ watch(htmlContent, (value) => emit("change", value));
54
65
  useRichTextSetup(editor);
55
66
  return (_ctx, _cache) => {
56
67
  return openBlock(), createElementBlock("div", _hoisted_1, [
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.vue.js","sources":["../../../../../../../../src/components/basic/doc-editor/core/plugins/LexicalRichTextPlugin/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\n\r\nimport { ref,defineProps,computed,defineEmits,watch } from \"vue\"\r\nimport { useCanShowPlaceholder, useLexicalComposer, useRichTextSetup,useMounted } from '../../composables'\r\nimport { $getSelection ,$selectAll } from 'lexical'\r\nimport { $generateHtmlFromNodes,$generateNodesFromDOM } from '@lexical/html'\r\nimport ContentEditable from \"./ContentEditable.vue\"\r\nimport DecoratedTeleports from \"./DecoratedTeleports\"\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 placeholder:{ 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 // console.log($generateNodesFromDOM,parser.parseFromString(html.trim(),\"text/html\"));\r\n }\r\n // 设置权限替换\r\n $selectAll();\r\n $getSelection()?.insertText(\"\")\r\n if(nodes.length > 0){\r\n $getSelection()?.insertNodes(nodes);\r\n }\r\n })\r\n }\r\n}\r\n\r\nuseMounted(()=>{\r\n return editor.registerUpdateListener(({ editorState }) => {\r\n editorState.read(() => {\r\n htmlContent.value = $generateHtmlFromNodes(editor);\r\n })\r\n })\r\n})\r\n\r\n\r\n// 初始化\r\nwatch(()=>props.content,setHtml,{ immediate:true });\r\n\r\n// 监听内容变化\r\nwatch(htmlContent,(value:any)=>emit('change',value));\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 <ContentEditable />\r\n <template v-if=\"canShowPlaceholder && contentIsEmpty\">\r\n <div class=\"mk-doc-editor__stage__placeholder mk-doc__paragraph\">\r\n {{props.placeholder}}\r\n </div>\r\n </template>\r\n <DecoratedTeleports />\r\n </div>\r\n\r\n</template>\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,UAAM,OAAO;AAGb,UAAM,QAAQ;AAKd,UAAM,SAAS;AAET,UAAA,qBAAqB,sBAAsB,MAAM;AAEjD,UAAA,SAAS,IAAI;AAGb,UAAA,cAAc,IAAI,EAAE;AAGpB,UAAA,iBAAiB,SAAS,MAAI,YAAY,SAAS,2CAA2C,CAAC,YAAY,KAAK;AAGhH,UAAA,UAAU,CAAC,SAAa;AAGvB,UAAA,YAAY,SAAS,MAAK;AAE3B,YAAI,QAAqB,CAAA;AAEzB,oBAAY,QAAQ;AAEpB,eAAO,OAAO,MAAI;;AAEb,cAAA,KAAK,QAAO;AAEL,oBAAA,sBAAsB,QAAO,OAAO,gBAAgB,KAAK,KAAK,GAAE,WAAW,CAAC;AAAA,UAEtF;AAEW;AACG,8BAAA,MAAA,mBAAG,WAAW;AACzB,cAAA,MAAM,SAAS,GAAE;AACJ,gCAAA,MAAA,mBAAG,YAAY;AAAA,UAC/B;AAAA,QAAA,CACD;AAAA,MACH;AAAA,IAAA;AAGJ,eAAW,MAAI;AACb,aAAO,OAAO,uBAAuB,CAAC,EAAE,kBAAkB;AACxD,oBAAY,KAAK,MAAM;AACT,sBAAA,QAAQ,uBAAuB,MAAM;AAAA,QAAA,CAClD;AAAA,MAAA,CACF;AAAA,IAAA,CACF;AAID,UAAM,MAAI,MAAM,SAAQ,SAAQ,EAAE,WAAU,MAAM;AAGlD,UAAM,aAAY,CAAC,UAAY,KAAK,UAAS,KAAK,CAAC;AAGnD,qBAAiB,MAAM;;;;;;;;;;"}
@@ -1,20 +1,26 @@
1
- import { defineComponent, ref, computed, onMounted, watch, resolveDirective, openBlock, createBlock, unref, withCtx, withDirectives, createElementBlock, normalizeClass, createVNode, createElementVNode, renderSlot, Teleport, createCommentVNode } from "vue";
2
- import { LexicalComposer, LexicalAutoFocusPlugin, LexicalCheckListPlugin, LexicalHashtagPlugin, LexicalListPlugin, LexicalHistoryPlugin } from "lexical-vue";
3
- import _sfc_main$4 from "./plugins/AutoLinkPlugin/index.vue.js";
4
- import _sfc_main$3 from "./plugins/ImagePlugin/index.vue.js";
5
- import _sfc_main$1 from "./plugins/ToolbarPlugin/index.vue.js";
6
- import _sfc_main$2 from "./plugins/RichTextPlugin/index.vue.js";
7
- import _sfc_main$7 from "./plugins/ElementBlockSelectionPlugin/index.vue.js";
8
- import _sfc_main$5 from "./plugins/ModulePlugin/index.vue.js";
9
- import _sfc_main$6 from "./plugins/GridPlugin/index.vue.js";
10
- import _sfc_main$8 from "./plugins/TemplatePlugin/index.vue.js";
11
- import Nodes from "./plugins/nodes.js";
12
- import { useModule } from "./plugins/ModulePlugin/composables.js";
1
+ import { defineComponent, ref, computed, onMounted, watch, resolveDirective, openBlock, createBlock, withCtx, withDirectives, createElementBlock, normalizeClass, unref, createVNode, createElementVNode, renderSlot, Teleport, createCommentVNode } from "vue";
2
+ import _sfc_main$1 from "./core/LexicalComposer.vue.js";
13
3
  import { DEVICE_VIEW_MODE } from "./core/index.js";
4
+ import _sfc_main$5 from "./plugins/AutoLinkPlugin/index.vue.js";
5
+ import _sfc_main$4 from "./plugins/ImagePlugin/index.vue.js";
6
+ import _sfc_main$2 from "./plugins/ToolbarPlugin/index.vue.js";
7
+ import _sfc_main$8 from "./plugins/ElementBlockSelectionPlugin/index.vue.js";
8
+ import _sfc_main$6 from "./plugins/ModulePlugin/index.vue.js";
9
+ import _sfc_main$7 from "./plugins/GridPlugin/index.vue.js";
10
+ import _sfc_main$9 from "./plugins/TemplatePlugin/index.vue.js";
11
+ import Nodes from "./nodes.js";
12
+ import { useModule } from "./plugins/ModulePlugin/composables.js";
13
+ import { Templates } from "./plugins/TemplatePlugin/composables.js";
14
14
  import theme from "./themes/DocTheme.js";
15
15
  import DocEditorCss from "./themes/doc-editor.css.js";
16
16
  import DocEditorEditCss from "./themes/doc-editor-edit.css.js";
17
17
  import DocThemeCss from "./themes/doc-theme.css.js";
18
+ import _sfc_main$3 from "./core/plugins/LexicalRichTextPlugin/index.vue.js";
19
+ import _sfc_main$a from "./core/plugins/LexicalAutoFocusPlugin.vue.js";
20
+ import _sfc_main$b from "./core/plugins/LexicalCheckListPlugin.vue.js";
21
+ import _sfc_main$c from "./core/plugins/LexicalHashtagPlugin.vue.js";
22
+ import _sfc_main$d from "./core/plugins/LexicalListPlugin.vue.js";
23
+ import _sfc_main$e from "./core/plugins/LexicalHistoryPlugin.vue.js";
18
24
  const _hoisted_1 = { class: "mk-doc-editor__stage_warp" };
19
25
  const _hoisted_2 = { class: "mk-doc-editor__stage_body" };
20
26
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -66,6 +72,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
66
72
  style.setAttribute("type", "text/css");
67
73
  style.innerHTML = [DocEditorCss, DocThemeCss, DocEditorEditCss].join("\r\n");
68
74
  style.innerHTML += Modules.filter((item) => item.editorCss).map((item) => item.editorCss).join("\r\n");
75
+ style.innerHTML += Templates.filter((item) => item.editorCss).map((item) => item.editorCss).join("\r\n");
69
76
  doc.head.append(style);
70
77
  props.js.split(",").filter((item) => !!item).forEach((path) => {
71
78
  const script = document.createElement("script");
@@ -89,12 +96,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
89
96
  });
90
97
  return (_ctx, _cache) => {
91
98
  const _directive_loading = resolveDirective("loading");
92
- return openBlock(), createBlock(unref(LexicalComposer), { "initial-config": config }, {
99
+ return openBlock(), createBlock(_sfc_main$1, { "initial-config": config }, {
93
100
  default: withCtx(() => [
94
101
  withDirectives((openBlock(), createElementBlock("div", {
95
102
  class: normalizeClass(["mk-doc-editor", unref(DEVICE_VIEW_MODE)])
96
103
  }, [
97
- createVNode(unref(_sfc_main$1), {
104
+ createVNode(unref(_sfc_main$2), {
98
105
  js: __props.js,
99
106
  css: __props.css
100
107
  }, null, 8, ["js", "css"]),
@@ -112,17 +119,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
112
119
  key: 0,
113
120
  to: iframeBody.value
114
121
  }, [
115
- createVNode(unref(_sfc_main$2), {
122
+ createVNode(unref(_sfc_main$3), {
116
123
  content: props.content,
117
124
  onChange: contentChangeHandle,
118
125
  placeholder: __props.placeholder
119
126
  }, null, 8, ["content", "placeholder"]),
120
- createVNode(unref(_sfc_main$3)),
121
127
  createVNode(unref(_sfc_main$4)),
122
128
  createVNode(unref(_sfc_main$5)),
123
- createVNode(unref(_sfc_main$6))
129
+ createVNode(unref(_sfc_main$6)),
130
+ createVNode(unref(_sfc_main$7))
124
131
  ], 8, ["to"])) : createCommentVNode("", true),
125
- createVNode(unref(_sfc_main$7)),
132
+ createVNode(unref(_sfc_main$8)),
126
133
  renderSlot(_ctx.$slots, "footer")
127
134
  ]),
128
135
  renderSlot(_ctx.$slots, "after-extentions")
@@ -130,12 +137,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
130
137
  ], 2)), [
131
138
  [_directive_loading, __props.loading]
132
139
  ]),
133
- createVNode(unref(_sfc_main$8)),
134
- createVNode(unref(LexicalAutoFocusPlugin)),
135
- createVNode(unref(LexicalCheckListPlugin)),
136
- createVNode(unref(LexicalHashtagPlugin)),
137
- createVNode(unref(LexicalListPlugin)),
138
- createVNode(unref(LexicalHistoryPlugin))
140
+ createVNode(unref(_sfc_main$9)),
141
+ createVNode(unref(_sfc_main$a)),
142
+ createVNode(unref(_sfc_main$b)),
143
+ createVNode(unref(_sfc_main$c)),
144
+ createVNode(unref(_sfc_main$d)),
145
+ createVNode(unref(_sfc_main$e))
139
146
  ]),
140
147
  _: 3
141
148
  });
@@ -1 +1 @@
1
- {"version":3,"file":"editor.vue.js","sources":["../../../../../src/components/basic/doc-editor/editor.vue"],"sourcesContent":["<template>\r\n <LexicalComposer :initial-config=\"config\">\r\n <div class=\"mk-doc-editor\" v-loading=\"loading\" :class=\"DEVICE_VIEW_MODE\">\r\n <ToolbarPlugin :js=\"js\" :css=\"css\" />\r\n <div class=\"mk-doc-editor__stage_warp\">\r\n <slot name=\"before-extentions\"></slot>\r\n <div class=\"mk-doc-editor__stage_body\">\r\n <slot name=\"header\"></slot>\r\n <iframe title=\"iframe\" class=\"mk-doc-editor__stage_iframe\" ref=\"iframeContentRef\"></iframe>\r\n <Teleport v-if=\"iframeBody\" :to=\"iframeBody\">\r\n <RichTextPlugin :content=\"props.content\" @change=\"contentChangeHandle\" :placeholder=\"placeholder\">\r\n </RichTextPlugin>\r\n <ImagePlugin />\r\n <AutoLinkPlugin />\r\n <ModulePlugin />\r\n <GridPlugin />\r\n </Teleport>\r\n <ElementBlockSelectionPlugin />\r\n <slot name=\"footer\"></slot>\r\n </div>\r\n <slot name=\"after-extentions\"></slot>\r\n </div>\r\n \r\n </div>\r\n <TemplatePlguin />\r\n <LexicalAutoFocusPlugin />\r\n <LexicalCheckListPlugin />\r\n <LexicalHashtagPlugin />\r\n <LexicalListPlugin />\r\n <LexicalHistoryPlugin />\r\n </LexicalComposer>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { defineOptions,defineProps,defineEmits,computed,ref,onMounted,watch } from \"vue\"\r\nimport {\r\n LexicalComposer,\r\n LexicalAutoFocusPlugin,\r\n LexicalCheckListPlugin,\r\n LexicalHashtagPlugin,\r\n LexicalHistoryPlugin,\r\n LexicalListPlugin,\r\n} from 'lexical-vue'\r\nimport { \r\n ToolbarPlugin,\r\n RichTextPlugin,\r\n AutoLinkPlugin,\r\n ImagePlugin,\r\n ElementBlockSelectionPlugin,\r\n GridPlugin,\r\n ModulePlugin,\r\n TemplatePlguin\r\n} from \"./plugins\"\r\nimport { useModule } from \"./plugins/ModulePlugin/composables\"\r\nimport { DEVICE_VIEW_MODE } from \"./core\"\r\n\r\nimport DocTheme from \"./themes/DocTheme\";\r\nimport DocNodes from \"./plugins/nodes\"\r\nimport DocEditorCss from \"./themes/doc-editor.css?raw\";\r\nimport DocEditorEditCss from \"./themes/doc-editor-edit.css?raw\";\r\nimport DocThemeCss from \"./themes/doc-theme.css?raw\";\r\n\r\n// 定义组件\r\ndefineOptions({ name: \"MKDocEditor\" })\r\n\r\n// 事件\r\nconst emit = defineEmits(['change']);\r\n\r\n// 参数\r\nconst props = defineProps({\r\n placeholder:{type:String,default:\"这里输入正文...\"},\r\n content:{ type:String,default:`` },\r\n loading:{ type:Boolean,defualt:false},\r\n js:{ type:String,default:`` },\r\n css:{ type:String,default:`` }\r\n})\r\n \r\n\r\n// 配置\r\nconst config = {\r\n namespace: 'MyEditor',\r\n theme: DocTheme,\r\n nodes: [\r\n ...DocNodes,\r\n ],\r\n onError(error:Error) {\r\n // Catch any errors that occur during Lexical updates and log them\r\n // or throw them as needed. If you don't throw them, Lexical will\r\n // try to recover gracefully without losing user data.\r\n console.error(error)\r\n },\r\n}\r\n\r\n// iframe 编辑器\r\nconst iframeContentRef = ref(null as any);\r\nconst iframeBody = computed(()=>iframeContentRef.value?.contentWindow?.document?.body)\r\n\r\n//内容改变时\r\nconst updateStage = ()=>{\r\n setTimeout(() => {\r\n if(iframeBody.value?.scrollHeight > iframeBody.value?.offsetHeight){\r\n iframeContentRef.value.style.height = (iframeBody.value?.scrollHeight + 10)+\"px\";\r\n }\r\n }, 10);\r\n}\r\nconst contentChangeHandle = (content:any)=>{\r\n emit('change',content);\r\n updateStage();\r\n}\r\n\r\nonMounted(()=>{\r\n\r\n const doc = iframeContentRef.value?.contentWindow?.document;\r\n const { Modules } = useModule();\r\n\r\n // 样式\r\n const style = document.createElement(\"style\");\r\n style.setAttribute(\"type\",\"text/css\")\r\n\r\n // 默认样式\r\n style.innerHTML = [DocEditorCss,DocThemeCss,DocEditorEditCss].join(\"\\r\\n\");\r\n\r\n //模块渲染样式\r\n style.innerHTML += Modules.filter(item=>item.editorCss).map(item=>item.editorCss).join(\"\\r\\n\");\r\n\r\n doc.head.append(style);\r\n\r\n // 扩展的js和css\r\n props.js.split(\",\").filter(item=>!!item).forEach(path=>{\r\n const script = document.createElement(\"script\");\r\n script.src = path;\r\n script.setAttribute(\"crossorigin\",\"true\")\r\n doc.head.append(script);\r\n })\r\n\r\n props.css.split(\",\").filter(item=>!!item).forEach(path=>{\r\n const link = document.createElement(\"link\");\r\n link.href = path;\r\n link.setAttribute(\"rel\",\"stylesheet\")\r\n link.setAttribute(\"crossorigin\",\"true\")\r\n doc.head.append(link);\r\n })\r\n\r\n // 设备显示模式改变\r\n watch(DEVICE_VIEW_MODE,(payload: string) => {\r\n doc.body.style.fontSize = payload == \"pc\" ? \"14px\" : \"18px\";\r\n updateStage();\r\n return false\r\n },{ immediate :true})\r\n\r\n // 初始化计算舞台\r\n setTimeout(()=> updateStage(),500)\r\n});\r\n\r\n</script>\r\n"],"names":["DocNodes"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkEA,UAAM,OAAO;AAGb,UAAM,QAAQ;AAUd,UAAM,SAAS;AAAA,MACb,WAAW;AAAA,MACX;AAAA,MACA,OAAO;AAAA,QACL,GAAGA;AAAAA,MACL;AAAA,MACA,QAAQ,OAAa;AAInB,gBAAQ,MAAM,KAAK;AAAA,MACrB;AAAA,IAAA;AAII,UAAA,mBAAmB,IAAI,IAAW;AACxC,UAAM,aAAa,SAAS;;AAAI,gDAAiB,UAAjB,mBAAwB,kBAAxB,mBAAuC,aAAvC,mBAAiD;AAAA,KAAI;AAGrF,UAAM,cAAc,MAAI;AACtB,iBAAW,MAAM;;AACf,cAAG,gBAAW,UAAX,mBAAkB,kBAAe,gBAAW,UAAX,mBAAkB,eAAa;AACjE,2BAAiB,MAAM,MAAM,WAAU,gBAAW,UAAX,mBAAkB,gBAAe,KAAI;AAAA,QAC9E;AAAA,SACC,EAAE;AAAA,IAAA;AAED,UAAA,sBAAsB,CAAC,YAAc;AACzC,WAAK,UAAS,OAAO;AACT;IAAA;AAGd,cAAU,MAAI;;AAEN,YAAA,OAAM,4BAAiB,UAAjB,mBAAwB,kBAAxB,mBAAuC;AAC7C,YAAA,EAAE,YAAY;AAGd,YAAA,QAAQ,SAAS,cAAc,OAAO;AACtC,YAAA,aAAa,QAAO,UAAU;AAGpC,YAAM,YAAY,CAAC,cAAa,aAAY,gBAAgB,EAAE,KAAK,MAAM;AAGzE,YAAM,aAAa,QAAQ,OAAO,CAAA,SAAM,KAAK,SAAS,EAAE,IAAI,CAAM,SAAA,KAAK,SAAS,EAAE,KAAK,MAAM;AAEzF,UAAA,KAAK,OAAO,KAAK;AAGf,YAAA,GAAG,MAAM,GAAG,EAAE,OAAO,CAAM,SAAA,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAM,SAAA;AAC/C,cAAA,SAAS,SAAS,cAAc,QAAQ;AAC9C,eAAO,MAAM;AACN,eAAA,aAAa,eAAc,MAAM;AACpC,YAAA,KAAK,OAAO,MAAM;AAAA,MAAA,CACvB;AAEK,YAAA,IAAI,MAAM,GAAG,EAAE,OAAO,CAAM,SAAA,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAM,SAAA;AAChD,cAAA,OAAO,SAAS,cAAc,MAAM;AAC1C,aAAK,OAAO;AACP,aAAA,aAAa,OAAM,YAAY;AAC/B,aAAA,aAAa,eAAc,MAAM;AAClC,YAAA,KAAK,OAAO,IAAI;AAAA,MAAA,CACrB;AAGK,YAAA,kBAAiB,CAAC,YAAoB;AAC1C,YAAI,KAAK,MAAM,WAAW,WAAW,OAAO,SAAS;AACzC;AACL,eAAA;AAAA,MAAA,GACP,EAAE,WAAW,KAAA,CAAK;AAGT,iBAAA,MAAK,eAAc,GAAG;AAAA,IAAA,CAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"editor.vue.js","sources":["../../../../../src/components/basic/doc-editor/editor.vue"],"sourcesContent":["<template>\r\n <LexicalComposer :initial-config=\"config\">\r\n <div class=\"mk-doc-editor\" v-loading=\"loading\" :class=\"DEVICE_VIEW_MODE\">\r\n <ToolbarPlugin :js=\"js\" :css=\"css\" />\r\n <div class=\"mk-doc-editor__stage_warp\">\r\n <slot name=\"before-extentions\"></slot>\r\n <div class=\"mk-doc-editor__stage_body\">\r\n <slot name=\"header\"></slot>\r\n <iframe title=\"iframe\" class=\"mk-doc-editor__stage_iframe\" ref=\"iframeContentRef\"></iframe>\r\n <Teleport v-if=\"iframeBody\" :to=\"iframeBody\">\r\n <LexicalRichTextPlugin :content=\"props.content\" @change=\"contentChangeHandle\" :placeholder=\"placeholder\">\r\n </LexicalRichTextPlugin>\r\n <ImagePlugin />\r\n <AutoLinkPlugin />\r\n <ModulePlugin />\r\n <GridPlugin />\r\n </Teleport>\r\n <ElementBlockSelectionPlugin />\r\n <slot name=\"footer\"></slot>\r\n </div>\r\n <slot name=\"after-extentions\"></slot>\r\n </div>\r\n \r\n </div>\r\n <TemplatePlguin />\r\n <LexicalAutoFocusPlugin />\r\n <LexicalCheckListPlugin />\r\n <LexicalHashtagPlugin />\r\n <LexicalListPlugin />\r\n <LexicalHistoryPlugin />\r\n </LexicalComposer>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { defineOptions,defineProps,defineEmits,computed,ref,onMounted,watch } from \"vue\"\r\nimport LexicalComposer from \"./core/LexicalComposer.vue\"\r\nimport { \r\n DEVICE_VIEW_MODE,\r\n LexicalAutoFocusPlugin,\r\n LexicalCheckListPlugin,\r\n LexicalHashtagPlugin,\r\n LexicalHistoryPlugin,\r\n LexicalListPlugin,\r\n LexicalRichTextPlugin,\r\n} from \"./core\"\r\n\r\nimport { \r\n ToolbarPlugin,\r\n AutoLinkPlugin,\r\n ImagePlugin,\r\n ElementBlockSelectionPlugin,\r\n GridPlugin,\r\n ModulePlugin,\r\n TemplatePlguin\r\n} from \"./plugins\"\r\n\r\nimport DocNodes from \"./nodes\"\r\n\r\nimport { useModule } from \"./plugins/ModulePlugin/composables\"\r\nimport { Templates } from \"./plugins/TemplatePlugin/composables\"\r\nimport DocTheme from \"./themes/DocTheme\";\r\nimport DocEditorCss from \"./themes/doc-editor.css?raw\";\r\nimport DocEditorEditCss from \"./themes/doc-editor-edit.css?raw\";\r\nimport DocThemeCss from \"./themes/doc-theme.css?raw\";\r\n\r\n// 定义组件\r\ndefineOptions({ name: \"MKDocEditor\" })\r\n\r\n// 事件\r\nconst emit = defineEmits(['change']);\r\n\r\n// 参数\r\nconst props = defineProps({\r\n placeholder:{type:String,default:\"这里输入正文...\"},\r\n content:{ type:String,default:`` },\r\n loading:{ type:Boolean,defualt:false},\r\n js:{ type:String,default:`` },\r\n css:{ type:String,default:`` }\r\n})\r\n \r\n\r\n// 配置\r\nconst config = {\r\n namespace: 'MyEditor',\r\n theme: DocTheme,\r\n nodes: [\r\n ...DocNodes,\r\n ],\r\n onError(error:Error) {\r\n // Catch any errors that occur during Lexical updates and log them\r\n // or throw them as needed. If you don't throw them, Lexical will\r\n // try to recover gracefully without losing user data.\r\n console.error(error)\r\n },\r\n}\r\n\r\n// iframe 编辑器\r\nconst iframeContentRef = ref(null as any);\r\nconst iframeBody = computed(()=>iframeContentRef.value?.contentWindow?.document?.body)\r\n\r\n//内容改变时\r\nconst updateStage = ()=>{\r\n setTimeout(() => {\r\n if(iframeBody.value?.scrollHeight > iframeBody.value?.offsetHeight){\r\n iframeContentRef.value.style.height = (iframeBody.value?.scrollHeight + 10)+\"px\";\r\n }\r\n }, 10);\r\n}\r\nconst contentChangeHandle = (content:any)=>{\r\n emit('change',content);\r\n updateStage();\r\n}\r\n\r\nonMounted(()=>{\r\n\r\n const doc = iframeContentRef.value?.contentWindow?.document;\r\n const { Modules } = useModule(); \r\n\r\n // 样式\r\n const style = document.createElement(\"style\");\r\n style.setAttribute(\"type\",\"text/css\")\r\n\r\n // 默认样式\r\n style.innerHTML = [DocEditorCss,DocThemeCss,DocEditorEditCss].join(\"\\r\\n\");\r\n\r\n //模块渲染样式\r\n style.innerHTML += Modules.filter(item=>item.editorCss).map(item=>item.editorCss).join(\"\\r\\n\");\r\n\r\n //模版渲染样式\r\n style.innerHTML += Templates.filter(item=>item.editorCss).map(item=>item.editorCss).join(\"\\r\\n\");\r\n\r\n doc.head.append(style);\r\n\r\n // 扩展的js和css\r\n props.js.split(\",\").filter(item=>!!item).forEach(path=>{\r\n const script = document.createElement(\"script\");\r\n script.src = path;\r\n script.setAttribute(\"crossorigin\",\"true\")\r\n doc.head.append(script);\r\n })\r\n\r\n props.css.split(\",\").filter(item=>!!item).forEach(path=>{\r\n const link = document.createElement(\"link\");\r\n link.href = path;\r\n link.setAttribute(\"rel\",\"stylesheet\")\r\n link.setAttribute(\"crossorigin\",\"true\")\r\n doc.head.append(link);\r\n })\r\n\r\n // 设备显示模式改变\r\n watch(DEVICE_VIEW_MODE,(payload: string) => {\r\n doc.body.style.fontSize = payload == \"pc\" ? \"14px\" : \"18px\";\r\n updateStage();\r\n return false\r\n },{ immediate :true})\r\n\r\n // 初始化计算舞台\r\n setTimeout(()=> updateStage(),500)\r\n});\r\n\r\n</script>\r\n"],"names":["DocNodes"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqEA,UAAM,OAAO;AAGb,UAAM,QAAQ;AAUd,UAAM,SAAS;AAAA,MACb,WAAW;AAAA,MACX;AAAA,MACA,OAAO;AAAA,QACL,GAAGA;AAAAA,MACL;AAAA,MACA,QAAQ,OAAa;AAInB,gBAAQ,MAAM,KAAK;AAAA,MACrB;AAAA,IAAA;AAII,UAAA,mBAAmB,IAAI,IAAW;AACxC,UAAM,aAAa,SAAS;;AAAI,gDAAiB,UAAjB,mBAAwB,kBAAxB,mBAAuC,aAAvC,mBAAiD;AAAA,KAAI;AAGrF,UAAM,cAAc,MAAI;AACtB,iBAAW,MAAM;;AACf,cAAG,gBAAW,UAAX,mBAAkB,kBAAe,gBAAW,UAAX,mBAAkB,eAAa;AACjE,2BAAiB,MAAM,MAAM,WAAU,gBAAW,UAAX,mBAAkB,gBAAe,KAAI;AAAA,QAC9E;AAAA,SACC,EAAE;AAAA,IAAA;AAED,UAAA,sBAAsB,CAAC,YAAc;AACzC,WAAK,UAAS,OAAO;AACT;IAAA;AAGd,cAAU,MAAI;;AAEN,YAAA,OAAM,4BAAiB,UAAjB,mBAAwB,kBAAxB,mBAAuC;AAC7C,YAAA,EAAE,YAAY;AAGd,YAAA,QAAQ,SAAS,cAAc,OAAO;AACtC,YAAA,aAAa,QAAO,UAAU;AAGpC,YAAM,YAAY,CAAC,cAAa,aAAY,gBAAgB,EAAE,KAAK,MAAM;AAGzE,YAAM,aAAa,QAAQ,OAAO,CAAA,SAAM,KAAK,SAAS,EAAE,IAAI,CAAM,SAAA,KAAK,SAAS,EAAE,KAAK,MAAM;AAG7F,YAAM,aAAa,UAAU,OAAO,CAAA,SAAM,KAAK,SAAS,EAAE,IAAI,CAAM,SAAA,KAAK,SAAS,EAAE,KAAK,MAAM;AAE3F,UAAA,KAAK,OAAO,KAAK;AAGf,YAAA,GAAG,MAAM,GAAG,EAAE,OAAO,CAAM,SAAA,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAM,SAAA;AAC/C,cAAA,SAAS,SAAS,cAAc,QAAQ;AAC9C,eAAO,MAAM;AACN,eAAA,aAAa,eAAc,MAAM;AACpC,YAAA,KAAK,OAAO,MAAM;AAAA,MAAA,CACvB;AAEK,YAAA,IAAI,MAAM,GAAG,EAAE,OAAO,CAAM,SAAA,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAM,SAAA;AAChD,cAAA,OAAO,SAAS,cAAc,MAAM;AAC1C,aAAK,OAAO;AACP,aAAA,aAAa,OAAM,YAAY;AAC/B,aAAA,aAAa,eAAc,MAAM;AAClC,YAAA,KAAK,OAAO,IAAI;AAAA,MAAA,CACrB;AAGK,YAAA,kBAAiB,CAAC,YAAoB;AAC1C,YAAI,KAAK,MAAM,WAAW,WAAW,OAAO,SAAS;AACzC;AACL,eAAA;AAAA,MAAA,GACP,EAAE,WAAW,KAAA,CAAK;AAGT,iBAAA,MAAK,eAAc,GAAG;AAAA,IAAA,CAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,20 +1,22 @@
1
+ import { TextNode } from "lexical";
1
2
  import { HeadingNode, QuoteNode } from "@lexical/rich-text";
2
3
  import { TableNode, TableCellNode, TableRowNode } from "@lexical/table";
3
4
  import { ListNode, ListItemNode } from "@lexical/list";
4
5
  import { CodeNode, CodeHighlightNode } from "@lexical/code";
5
6
  import { AutoLinkNode, LinkNode } from "@lexical/link";
6
7
  import { HashtagNode } from "@lexical/hashtag";
7
- import "./ImagePlugin/commands.js";
8
- import { ImageNode, InlineImageNode } from "./ImagePlugin/ImageNode.js";
9
- import { RichTextNode } from "./RichTextPlugin/nodes/RichTextNode.js";
10
- import "./ModulePlugin/commands.js";
11
- import { ModuleBlockNode } from "./ModulePlugin/ModuleBlockNode.js";
12
- import { GridNode } from "./GridPlugin/GridNode.js";
13
- import { TextGridNode } from "./GridPlugin/TextGridNode.js";
14
- import { LayoutGridNode } from "./GridPlugin/LayoutGridNode.js";
15
- import { ImageTextGridNode } from "./GridPlugin/ImageTextGridNode.js";
16
- import { ModuleGridNode } from "./GridPlugin/ModuleGridNode.js";
8
+ import "./plugins/ImagePlugin/commands.js";
9
+ import { ImageNode, InlineImageNode } from "./plugins/ImagePlugin/ImageNode.js";
10
+ import "./plugins/ModulePlugin/commands.js";
11
+ import { ModuleBlockNode } from "./plugins/ModulePlugin/ModuleBlockNode.js";
12
+ import { GridNode } from "./plugins/GridPlugin/GridNode.js";
13
+ import { TextGridNode } from "./plugins/GridPlugin/TextGridNode.js";
14
+ import { LayoutGridNode } from "./plugins/GridPlugin/LayoutGridNode.js";
15
+ import { ImageTextGridNode } from "./plugins/GridPlugin/ImageTextGridNode.js";
16
+ import { ModuleGridNode } from "./plugins/GridPlugin/ModuleGridNode.js";
17
+ import { RichElementNode } from "./core/nodes/RichElementNode.js";
17
18
  const Nodes = [
19
+ TextNode,
18
20
  HeadingNode,
19
21
  ListNode,
20
22
  ListItemNode,
@@ -27,7 +29,7 @@ const Nodes = [
27
29
  AutoLinkNode,
28
30
  LinkNode,
29
31
  HashtagNode,
30
- RichTextNode,
32
+ RichElementNode,
31
33
  ImageNode,
32
34
  InlineImageNode,
33
35
  ModuleBlockNode,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodes.js","sources":["../../../../../src/components/basic/doc-editor/nodes.ts"],"sourcesContent":["\r\nimport { type Klass, type LexicalNode,TextNode } from 'lexical'\r\nimport { HeadingNode, QuoteNode } from '@lexical/rich-text'\r\nimport { TableCellNode, TableNode, TableRowNode } from '@lexical/table'\r\nimport { ListItemNode, ListNode } from '@lexical/list'\r\nimport { CodeHighlightNode, CodeNode } from '@lexical/code'\r\nimport { AutoLinkNode, LinkNode } from '@lexical/link'\r\nimport { HashtagNode } from '@lexical/hashtag'\r\nimport { ImageNode,InlineImageNode } from \"./plugins/ImagePlugin\"\r\nimport { ModuleBlockNode } from \"./plugins/ModulePlugin\"\r\nimport { GridNode,LayoutGridNode,TextGridNode,ImageTextGridNode,ModuleGridNode } from \"./plugins/GridPlugin\"\r\n\r\nimport { RichElementNode} from \"./core/nodes\"\r\n\r\nconst Nodes: Array<Klass<LexicalNode>> = [\r\n TextNode,\r\n HeadingNode,\r\n ListNode,\r\n ListItemNode,\r\n QuoteNode,\r\n CodeNode,\r\n CodeHighlightNode,\r\n TableNode,\r\n TableCellNode,\r\n TableRowNode,\r\n AutoLinkNode,\r\n LinkNode,\r\n HashtagNode,\r\n\r\n RichElementNode,\r\n ImageNode,\r\n InlineImageNode,\r\n ModuleBlockNode,\r\n GridNode,\r\n TextGridNode,\r\n LayoutGridNode,\r\n ImageTextGridNode,\r\n ModuleGridNode\r\n]\r\n\r\nexport default Nodes\r\n\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAcA,MAAM,QAAmC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;"}
@@ -1,5 +1,7 @@
1
1
  import { defineComponent, openBlock, createElementBlock, Fragment, createVNode, unref } from "vue";
2
- import { LexicalAutoLinkPlugin, LexicalLinkPlugin } from "lexical-vue";
2
+ import "../../core/index.js";
3
+ import _sfc_main$1 from "../../core/plugins/LexicalAutoLinkPlugin/index.vue2.js";
4
+ import _sfc_main$2 from "../../core/plugins/LexicalLinkPlugin.vue2.js";
3
5
  const _sfc_main = /* @__PURE__ */ defineComponent({
4
6
  __name: "index",
5
7
  setup(__props) {
@@ -27,8 +29,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
27
29
  ];
28
30
  return (_ctx, _cache) => {
29
31
  return openBlock(), createElementBlock(Fragment, null, [
30
- createVNode(unref(LexicalAutoLinkPlugin), { matchers: MATCHERS }),
31
- createVNode(unref(LexicalLinkPlugin))
32
+ createVNode(unref(_sfc_main$1), { matchers: MATCHERS }),
33
+ createVNode(unref(_sfc_main$2))
32
34
  ], 64);
33
35
  };
34
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/AutoLinkPlugin/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { LexicalAutoLinkPlugin,LexicalLinkPlugin } from 'lexical-vue'\r\n\r\n\r\nconst URL_MATCHER = /((https?:\\/\\/(www\\.)?)|(www\\.))[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/\r\n\r\nconst EMAIL_MATCHER = /(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))/\r\n\r\nconst MATCHERS = [\r\n (text: string) => {\r\n const match = URL_MATCHER.exec(text)\r\n return (\r\n match && {\r\n index: match.index,\r\n length: match[0].length,\r\n text: match[0],\r\n url: match[0],\r\n }\r\n )\r\n },\r\n (text: string) => {\r\n const match = EMAIL_MATCHER.exec(text)\r\n return (\r\n match && {\r\n index: match.index,\r\n length: match[0].length,\r\n text: match[0],\r\n url: `mailto:${match[0]}`,\r\n }\r\n )\r\n },\r\n]\r\n</script>\r\n\r\n<template>\r\n <LexicalAutoLinkPlugin :matchers=\"MATCHERS\" />\r\n <LexicalLinkPlugin />\r\n</template>\r\n"],"names":[],"mappings":";;;;;AAIA,UAAM,cAAc;AAEpB,UAAM,gBAAgB;AAEtB,UAAM,WAAW;AAAA,MACf,CAAC,SAAiB;AACV,cAAA,QAAQ,YAAY,KAAK,IAAI;AACnC,eACE,SAAS;AAAA,UACP,OAAO,MAAM;AAAA,UACb,QAAQ,MAAM,CAAC,EAAE;AAAA,UACjB,MAAM,MAAM,CAAC;AAAA,UACb,KAAK,MAAM,CAAC;AAAA,QAAA;AAAA,MAGlB;AAAA,MACA,CAAC,SAAiB;AACV,cAAA,QAAQ,cAAc,KAAK,IAAI;AACrC,eACE,SAAS;AAAA,UACP,OAAO,MAAM;AAAA,UACb,QAAQ,MAAM,CAAC,EAAE;AAAA,UACjB,MAAM,MAAM,CAAC;AAAA,UACb,KAAK,UAAU,MAAM,CAAC,CAAC;AAAA,QAAA;AAAA,MAG7B;AAAA,IAAA;;;;;;;;;"}
1
+ {"version":3,"file":"index.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/AutoLinkPlugin/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { LexicalAutoLinkPlugin,LexicalLinkPlugin } from '../../core'\r\n\r\n\r\nconst URL_MATCHER = /((https?:\\/\\/(www\\.)?)|(www\\.))[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/\r\n\r\nconst EMAIL_MATCHER = /(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))/\r\n\r\nconst MATCHERS = [\r\n (text: string) => {\r\n const match = URL_MATCHER.exec(text)\r\n return (\r\n match && {\r\n index: match.index,\r\n length: match[0].length,\r\n text: match[0],\r\n url: match[0],\r\n }\r\n )\r\n },\r\n (text: string) => {\r\n const match = EMAIL_MATCHER.exec(text)\r\n return (\r\n match && {\r\n index: match.index,\r\n length: match[0].length,\r\n text: match[0],\r\n url: `mailto:${match[0]}`,\r\n }\r\n )\r\n },\r\n]\r\n</script>\r\n\r\n<template>\r\n <LexicalAutoLinkPlugin :matchers=\"MATCHERS\" />\r\n <LexicalLinkPlugin />\r\n</template>\r\n"],"names":[],"mappings":";;;;;;;AAIA,UAAM,cAAc;AAEpB,UAAM,gBAAgB;AAEtB,UAAM,WAAW;AAAA,MACf,CAAC,SAAiB;AACV,cAAA,QAAQ,YAAY,KAAK,IAAI;AACnC,eACE,SAAS;AAAA,UACP,OAAO,MAAM;AAAA,UACb,QAAQ,MAAM,CAAC,EAAE;AAAA,UACjB,MAAM,MAAM,CAAC;AAAA,UACb,KAAK,MAAM,CAAC;AAAA,QAAA;AAAA,MAGlB;AAAA,MACA,CAAC,SAAiB;AACV,cAAA,QAAQ,cAAc,KAAK,IAAI;AACrC,eACE,SAAS;AAAA,UACP,OAAO,MAAM;AAAA,UACb,QAAQ,MAAM,CAAC,EAAE;AAAA,UACjB,MAAM,MAAM,CAAC;AAAA,UACb,KAAK,UAAU,MAAM,CAAC,CAAC;AAAA,QAAA;AAAA,MAG7B;AAAA,IAAA;;;;;;;;;"}
@@ -1,7 +1,16 @@
1
1
  import { defineComponent, ref, shallowRef, reactive, watch, computed, resolveComponent, openBlock, createElementBlock, Fragment, normalizeStyle, createVNode, withCtx, createBlock, createTextVNode, toDisplayString, createCommentVNode, renderList, unref, normalizeClass, nextTick } from "vue";
2
2
  import { $getNodeByKey, $getSelection, $isNodeSelection, SELECTION_CHANGE_COMMAND } from "lexical";
3
3
  import { mergeRegister } from "@lexical/utils";
4
- import { useLexicalComposer, useMounted } from "lexical-vue";
4
+ import "@lexical/text";
5
+ import { useMounted } from "../../core/composables/useMounted.js";
6
+ import "@lexical/overflow";
7
+ import "tiny-invariant";
8
+ import "@lexical/history";
9
+ import { useLexicalComposer } from "../../core/composables/useLexicalComposer.js";
10
+ import "@lexical/list";
11
+ import "@lexical/dragon";
12
+ import "@lexical/plain-text";
13
+ import "@lexical/rich-text";
5
14
  import { $isGridNode } from "../GridPlugin/GridNode.js";
6
15
  import "../GridPlugin/TextGridNode.js";
7
16
  import "../GridPlugin/LayoutGridNode.js";
@@ -12,7 +21,7 @@ import { $isImageNode } from "../ImagePlugin/ImageNode.js";
12
21
  import "../ModulePlugin/commands.js";
13
22
  import { $isModuleBlockNode } from "../ModulePlugin/ModuleBlockNode.js";
14
23
  import { DEVICE_VIEW_MODE } from "../../core/index.js";
15
- import { UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND, SELECTED_ELEMENTBLOCK_COMMAND, REMOVE_ELEMENTBLOCK_COMMAND, setElementBlockSelection } from "../../core/element-block.js";
24
+ import { UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND, REMOVE_ELEMENTBLOCK_COMMAND, setElementBlockSelection, SELECTED_ELEMENTBLOCK_COMMAND } from "../../core/element-block.js";
16
25
  const lowPriority = 1;
17
26
  const _sfc_main = /* @__PURE__ */ defineComponent({
18
27
  __name: "index",
@@ -37,7 +46,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
37
46
  const toolsRect = toolbarRef.value.getBoundingClientRect();
38
47
  if (toolsRect) {
39
48
  toolsPos.top = Math.max(selectRect.y - toolsRect.height - 5 + baseY, 5 + baseY) + "px";
40
- toolsPos.left = Math.max(toolsRect.width / -2 + selectRect.x + selectRect.width / 2, -50) + "px";
49
+ toolsPos.left = Math.max(toolsRect.width / -2 + selectRect.x + selectRect.width / 2, 0) + "px";
41
50
  }
42
51
  selectionMarkPos.value = {
43
52
  top: `${selectRect.y + baseY}px`,
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/ElementBlockSelectionPlugin/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { type CommandListenerPriority, $isNodeSelection, $getSelection, $getNodeByKey, SELECTION_CHANGE_COMMAND } from 'lexical'\r\nimport { mergeRegister } from '@lexical/utils'\r\nimport { useLexicalComposer, useMounted } from 'lexical-vue'\r\nimport { ref, reactive, shallowRef, nextTick, watch,computed } from 'vue'\r\nimport { $isGridNode } from '../GridPlugin'\r\nimport { $isImageNode } from '../ImagePlugin'\r\nimport { $isModuleBlockNode } from '../ModulePlugin'\r\nimport {\r\n UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND, SELECTED_ELEMENTBLOCK_COMMAND, REMOVE_ELEMENTBLOCK_COMMAND,\r\n type SelectElementBlocktEventType, DEVICE_VIEW_MODE, setElementBlockSelection\r\n} from \"../../core\"\r\n\r\n// 点击工具条按钮\r\nconst lowPriority: CommandListenerPriority = 1\r\nconst editor = useLexicalComposer()\r\nconst isSelectGrid = ref(false)\r\nconst selectionMarkPos = ref({ left: \"px\", top: \"0px\",width:\"0\",height:\"0\" });\r\nconst toolbarRef = ref<HTMLDivElement | null>(null)\r\nconst selectPayload = shallowRef<any>(null);\r\nconst toolsPos = reactive({ left: \"px\", top: \"0px\" });\r\n\r\nwatch(DEVICE_VIEW_MODE, () => {\r\n editor.dispatchCommand(UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND, null);\r\n})\r\n\r\n// 更新工具条坐标\r\nconst updateToolsPos = () => {\r\n\r\n nextTick(() => {\r\n \r\n if (selectPayload.value != null && toolbarRef.value != null) {\r\n\r\n const element = editor.getElementByKey(selectPayload.value.nodeKey) as HTMLElement\r\n\r\n const editIframeRect = (toolbarRef.value.getRootNode() as any).body.querySelector(\".mk-doc-editor__stage_iframe\").getBoundingClientRect();\r\n const editBodyRect = (toolbarRef.value.getRootNode() as any).body.querySelector(\".mk-doc-editor__stage_body\").getBoundingClientRect();\r\n\r\n const baseY = editIframeRect.y - editBodyRect.y;\r\n const selectRect = element.getBoundingClientRect();\r\n const toolsRect = toolbarRef.value.getBoundingClientRect();\r\n\r\n if (toolsRect) {\r\n // 中心点\r\n toolsPos.top = Math.max(selectRect.y - toolsRect.height - 5 + baseY, 5 + baseY) + \"px\"\r\n toolsPos.left = Math.max(toolsRect.width / -2 + selectRect.x + selectRect.width / 2,-50) + \"px\";\r\n }\r\n\r\n // 选中框\r\n selectionMarkPos.value = {\r\n top:`${selectRect.y + baseY }px`,left:`${selectRect.x}px`,\r\n width:`${selectRect.width}px`,height:`${selectRect.height}px`\r\n };\r\n\r\n }\r\n })\r\n return false;\r\n}\r\n\r\n// 节点描述\r\nconst nodeDesc = computed(()=>{\r\n if(selectPayload.value){\r\n const node = editor.getEditorState().read(() => {\r\n return $getNodeByKey(selectPayload.value.nodeKey)\r\n }) as any;\r\n return node.getTitle ? node.getTitle() : \"\";\r\n }\r\n else{\r\n return \"\";\r\n }\r\n})\r\n\r\n// 选中上层节点\r\nconst canSelectedParentNode = ref(false);\r\nconst selectedParentNode = ()=>{\r\n const node = editor.getEditorState().read(() => {\r\n return $getNodeByKey(selectPayload.value.nodeKey)\r\n }) as any;\r\n \r\n if(node && node.__parent){\r\n setElementBlockSelection(editor,node.__parent);\r\n }\r\n \r\n}\r\n// 选中兄弟节点\r\nconst canSelectedNextNode = ref(false);\r\nconst selectedNextNode = ()=>{\r\n const node = editor.getEditorState().read(() => {\r\n return $getNodeByKey(selectPayload.value.nodeKey)\r\n }) as any;\r\n \r\n if(node && node.__next){\r\n setElementBlockSelection(editor,node.__next);\r\n }\r\n}\r\nconst canSelectedPrevNode = ref(false);\r\nconst selectedPrevNode = ()=>{\r\n const node = editor.getEditorState().read(() => {\r\n return $getNodeByKey(selectPayload.value.nodeKey)\r\n }) as any;\r\n \r\n if(node && node.__prev){\r\n setElementBlockSelection(editor,node.__prev);\r\n }\r\n}\r\n\r\nuseMounted(() => {\r\n return mergeRegister(\r\n editor.registerCommand(UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND, () => updateToolsPos(), lowPriority),\r\n editor.registerUpdateListener(() => setTimeout(()=> updateToolsPos(),50)),\r\n // 选中模块\r\n editor.registerCommand(SELECTED_ELEMENTBLOCK_COMMAND, (payload: SelectElementBlocktEventType) => {\r\n \r\n if (payload != null) {\r\n\r\n let toolsbarList = [];\r\n\r\n // 如果是函数的话\r\n if (typeof payload.toolsbars == \"function\") {\r\n toolsbarList = payload.toolsbars(payload.nodeKey) ?? [];\r\n }\r\n else {\r\n toolsbarList = payload.toolsbars;\r\n }\r\n // 选中的元数据\r\n selectPayload.value = { nodeKey: payload.nodeKey, toolsbars: toolsbarList };\r\n }\r\n else {\r\n selectPayload.value = null;\r\n }\r\n\r\n return updateToolsPos();\r\n }, lowPriority),\r\n // 删除模块\r\n editor.registerCommand(REMOVE_ELEMENTBLOCK_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 // 没选中\r\n editor.dispatchCommand(SELECTED_ELEMENTBLOCK_COMMAND, null);\r\n }\r\n return false;\r\n }, lowPriority),\r\n editor.registerCommand(SELECTION_CHANGE_COMMAND, () => {\r\n\r\n const selection = $getSelection();\r\n\r\n if($isNodeSelection(selection)){\r\n\r\n const node = selection.getNodes()[0]\r\n\r\n // 显示父亲节点选中\r\n canSelectedParentNode.value = $isGridNode(node?.getParent());\r\n\r\n if(node?.__next){\r\n const nextNode = $getNodeByKey(node.__next);\r\n canSelectedNextNode.value = node?.__next ? $isGridNode(nextNode) || $isModuleBlockNode(nextNode) || $isImageNode(nextNode) : false;\r\n }\r\n else{\r\n canSelectedNextNode.value = false;\r\n }\r\n\r\n if(node?.__prev){\r\n const prevNode = $getNodeByKey(node.__prev);\r\n canSelectedPrevNode.value = node?.__prev ? $isGridNode(prevNode) || $isModuleBlockNode(prevNode) || $isImageNode(prevNode) : false;\r\n }\r\n else{\r\n canSelectedPrevNode.value = false;\r\n }\r\n }\r\n else{\r\n canSelectedParentNode.value = false;\r\n canSelectedNextNode.value = false;\r\n canSelectedPrevNode.value = false;\r\n }\r\n\r\n return updateToolsPos();\r\n },lowPriority)\r\n )\r\n})\r\n\r\n</script>\r\n\r\n<template>\r\n <div v-if=\"selectPayload != null\" ref=\"toolbarRef\" class=\"mk-doc-editor-decorator-module-toolbar\" :style=\"toolsPos\">\r\n <el-button-group>\r\n <el-button v-if=\"nodeDesc\" text bg style=\"font-size: 14px;\">{{nodeDesc}}</el-button>\r\n <template v-for=\"item in selectPayload.toolsbars\">\r\n <el-tooltip effect=\"dark\" :content=\"item.title\" placement=\"top\">\r\n <el-button text @click=\"item.action()\">\r\n <MKSvgIcon :iconClass=\"item.icon\" />\r\n </el-button>\r\n </el-tooltip>\r\n </template>\r\n <el-tooltip effect=\"dark\" content=\"上层容器\" v-if=\"canSelectedParentNode\" placement=\"top\">\r\n <el-button text @click=\"selectedParentNode()\">\r\n <MKSvgIcon :iconClass=\"`ArrowUpBold`\" />\r\n </el-button>\r\n </el-tooltip>\r\n <el-tooltip effect=\"dark\" content=\"上一个\" v-if=\"canSelectedPrevNode\" placement=\"top\">\r\n <el-button text @click=\"selectedPrevNode()\">\r\n <MKSvgIcon :iconClass=\"`ArrowLeftBold`\" />\r\n </el-button>\r\n </el-tooltip>\r\n <el-tooltip effect=\"dark\" content=\"下一个\" v-if=\"canSelectedNextNode\" placement=\"top\">\r\n <el-button text @click=\"selectedNextNode()\">\r\n <MKSvgIcon :iconClass=\"`ArrowRightBold`\" />\r\n </el-button>\r\n </el-tooltip>\r\n <el-tooltip effect=\"dark\" content=\"删除\" placement=\"top\">\r\n <el-button text type=\"danger\" @click=\"editor.dispatchCommand(REMOVE_ELEMENTBLOCK_COMMAND, null)\">\r\n <MKSvgIcon :iconClass=\"`Delete`\" />\r\n </el-button>\r\n </el-tooltip>\r\n\r\n </el-button-group>\r\n </div>\r\n <div class=\"mk-doc-selection-element-block-mark box\" v-if=\"selectPayload != null\" :class=\"{box:isSelectGrid}\" :style=\"selectionMarkPos\"></div>\r\n</template>\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/ElementBlockSelectionPlugin/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { type CommandListenerPriority, $isNodeSelection, $getSelection, $getNodeByKey, SELECTION_CHANGE_COMMAND } from 'lexical'\r\nimport { mergeRegister } from '@lexical/utils'\r\nimport { useLexicalComposer, useMounted } from '../../core/composables'\r\nimport { ref, reactive, shallowRef, nextTick, watch,computed } from 'vue'\r\nimport { $isGridNode } from '../GridPlugin'\r\nimport { $isImageNode } from '../ImagePlugin'\r\nimport { $isModuleBlockNode } from '../ModulePlugin'\r\nimport {\r\n UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND, SELECTED_ELEMENTBLOCK_COMMAND, REMOVE_ELEMENTBLOCK_COMMAND,\r\n type SelectElementBlocktEventType, DEVICE_VIEW_MODE, setElementBlockSelection\r\n} from \"../../core\"\r\n\r\n// 点击工具条按钮\r\nconst lowPriority: CommandListenerPriority = 1\r\nconst editor = useLexicalComposer()\r\nconst isSelectGrid = ref(false)\r\nconst selectionMarkPos = ref({ left: \"px\", top: \"0px\",width:\"0\",height:\"0\" });\r\nconst toolbarRef = ref<HTMLDivElement | null>(null)\r\nconst selectPayload = shallowRef<any>(null);\r\nconst toolsPos = reactive({ left: \"px\", top: \"0px\" });\r\n\r\nwatch(DEVICE_VIEW_MODE, () => {\r\n editor.dispatchCommand(UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND, null);\r\n})\r\n\r\n// 更新工具条坐标\r\nconst updateToolsPos = () => {\r\n\r\n nextTick(() => {\r\n \r\n if (selectPayload.value != null && toolbarRef.value != null) {\r\n\r\n const element = editor.getElementByKey(selectPayload.value.nodeKey) as HTMLElement\r\n\r\n const editIframeRect = (toolbarRef.value.getRootNode() as any).body.querySelector(\".mk-doc-editor__stage_iframe\").getBoundingClientRect();\r\n const editBodyRect = (toolbarRef.value.getRootNode() as any).body.querySelector(\".mk-doc-editor__stage_body\").getBoundingClientRect();\r\n\r\n const baseY = editIframeRect.y - editBodyRect.y;\r\n const selectRect = element.getBoundingClientRect();\r\n const toolsRect = toolbarRef.value.getBoundingClientRect();\r\n\r\n if (toolsRect) {\r\n // 中心点\r\n toolsPos.top = Math.max(selectRect.y - toolsRect.height - 5 + baseY, 5 + baseY) + \"px\"\r\n toolsPos.left = Math.max(toolsRect.width / -2 + selectRect.x + selectRect.width / 2,0) + \"px\";\r\n }\r\n\r\n // 选中框\r\n selectionMarkPos.value = {\r\n top:`${selectRect.y + baseY }px`,left:`${selectRect.x}px`,\r\n width:`${selectRect.width}px`,height:`${selectRect.height}px`\r\n };\r\n\r\n }\r\n })\r\n return false;\r\n}\r\n\r\n// 节点描述\r\nconst nodeDesc = computed(()=>{\r\n if(selectPayload.value){\r\n const node = editor.getEditorState().read(() => {\r\n return $getNodeByKey(selectPayload.value.nodeKey)\r\n }) as any;\r\n return node.getTitle ? node.getTitle() : \"\";\r\n }\r\n else{\r\n return \"\";\r\n }\r\n})\r\n\r\n// 选中上层节点\r\nconst canSelectedParentNode = ref(false);\r\nconst selectedParentNode = ()=>{\r\n const node = editor.getEditorState().read(() => {\r\n return $getNodeByKey(selectPayload.value.nodeKey)\r\n }) as any;\r\n \r\n if(node && node.__parent){\r\n setElementBlockSelection(editor,node.__parent);\r\n }\r\n \r\n}\r\n// 选中兄弟节点\r\nconst canSelectedNextNode = ref(false);\r\nconst selectedNextNode = ()=>{\r\n const node = editor.getEditorState().read(() => {\r\n return $getNodeByKey(selectPayload.value.nodeKey)\r\n }) as any;\r\n \r\n if(node && node.__next){\r\n setElementBlockSelection(editor,node.__next);\r\n }\r\n}\r\nconst canSelectedPrevNode = ref(false);\r\nconst selectedPrevNode = ()=>{\r\n const node = editor.getEditorState().read(() => {\r\n return $getNodeByKey(selectPayload.value.nodeKey)\r\n }) as any;\r\n \r\n if(node && node.__prev){\r\n setElementBlockSelection(editor,node.__prev);\r\n }\r\n}\r\n\r\nuseMounted(() => {\r\n return mergeRegister(\r\n editor.registerCommand(UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND, () => updateToolsPos(), lowPriority),\r\n editor.registerUpdateListener(() => setTimeout(()=> updateToolsPos(),50)),\r\n // 选中模块\r\n editor.registerCommand(SELECTED_ELEMENTBLOCK_COMMAND, (payload: SelectElementBlocktEventType) => {\r\n \r\n if (payload != null) {\r\n\r\n let toolsbarList = [];\r\n\r\n // 如果是函数的话\r\n if (typeof payload.toolsbars == \"function\") {\r\n toolsbarList = payload.toolsbars(payload.nodeKey) ?? [];\r\n }\r\n else {\r\n toolsbarList = payload.toolsbars;\r\n }\r\n // 选中的元数据\r\n selectPayload.value = { nodeKey: payload.nodeKey, toolsbars: toolsbarList };\r\n }\r\n else {\r\n selectPayload.value = null;\r\n }\r\n\r\n return updateToolsPos();\r\n }, lowPriority),\r\n // 删除模块\r\n editor.registerCommand(REMOVE_ELEMENTBLOCK_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 // 没选中\r\n editor.dispatchCommand(SELECTED_ELEMENTBLOCK_COMMAND, null);\r\n }\r\n return false;\r\n }, lowPriority),\r\n editor.registerCommand(SELECTION_CHANGE_COMMAND, () => {\r\n\r\n const selection = $getSelection();\r\n\r\n if($isNodeSelection(selection)){\r\n\r\n const node = selection.getNodes()[0]\r\n\r\n // 显示父亲节点选中\r\n canSelectedParentNode.value = $isGridNode(node?.getParent());\r\n\r\n if(node?.__next){\r\n const nextNode = $getNodeByKey(node.__next);\r\n canSelectedNextNode.value = node?.__next ? $isGridNode(nextNode) || $isModuleBlockNode(nextNode) || $isImageNode(nextNode) : false;\r\n }\r\n else{\r\n canSelectedNextNode.value = false;\r\n }\r\n\r\n if(node?.__prev){\r\n const prevNode = $getNodeByKey(node.__prev);\r\n canSelectedPrevNode.value = node?.__prev ? $isGridNode(prevNode) || $isModuleBlockNode(prevNode) || $isImageNode(prevNode) : false;\r\n }\r\n else{\r\n canSelectedPrevNode.value = false;\r\n }\r\n }\r\n else{\r\n canSelectedParentNode.value = false;\r\n canSelectedNextNode.value = false;\r\n canSelectedPrevNode.value = false;\r\n }\r\n\r\n return updateToolsPos();\r\n },lowPriority)\r\n )\r\n})\r\n\r\n</script>\r\n\r\n<template>\r\n <div v-if=\"selectPayload != null\" ref=\"toolbarRef\" class=\"mk-doc-editor-decorator-module-toolbar\" :style=\"toolsPos\">\r\n <el-button-group>\r\n <el-button v-if=\"nodeDesc\" text bg style=\"font-size: 14px;\">{{nodeDesc}}</el-button>\r\n <template v-for=\"item in selectPayload.toolsbars\">\r\n <el-tooltip effect=\"dark\" :content=\"item.title\" placement=\"top\">\r\n <el-button text @click=\"item.action()\">\r\n <MKSvgIcon :iconClass=\"item.icon\" />\r\n </el-button>\r\n </el-tooltip>\r\n </template>\r\n <el-tooltip effect=\"dark\" content=\"上层容器\" v-if=\"canSelectedParentNode\" placement=\"top\">\r\n <el-button text @click=\"selectedParentNode()\">\r\n <MKSvgIcon :iconClass=\"`ArrowUpBold`\" />\r\n </el-button>\r\n </el-tooltip>\r\n <el-tooltip effect=\"dark\" content=\"上一个\" v-if=\"canSelectedPrevNode\" placement=\"top\">\r\n <el-button text @click=\"selectedPrevNode()\">\r\n <MKSvgIcon :iconClass=\"`ArrowLeftBold`\" />\r\n </el-button>\r\n </el-tooltip>\r\n <el-tooltip effect=\"dark\" content=\"下一个\" v-if=\"canSelectedNextNode\" placement=\"top\">\r\n <el-button text @click=\"selectedNextNode()\">\r\n <MKSvgIcon :iconClass=\"`ArrowRightBold`\" />\r\n </el-button>\r\n </el-tooltip>\r\n <el-tooltip effect=\"dark\" content=\"删除\" placement=\"top\">\r\n <el-button text type=\"danger\" @click=\"editor.dispatchCommand(REMOVE_ELEMENTBLOCK_COMMAND, null)\">\r\n <MKSvgIcon :iconClass=\"`Delete`\" />\r\n </el-button>\r\n </el-tooltip>\r\n\r\n </el-button-group>\r\n </div>\r\n <div class=\"mk-doc-selection-element-block-mark box\" v-if=\"selectPayload != null\" :class=\"{box:isSelectGrid}\" :style=\"selectionMarkPos\"></div>\r\n</template>\r\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,15 @@
1
1
  import { defineComponent, onMounted, onUnmounted } from "vue";
2
- import { useLexicalComposer } from "lexical-vue";
2
+ import "@lexical/text";
3
3
  import { mergeRegister, $insertNodeToNearestRoot } from "@lexical/utils";
4
+ import "@lexical/overflow";
4
5
  import { COMMAND_PRIORITY_EDITOR, $createParagraphNode, $getNodeByKey, $getSelection, $isNodeSelection } from "lexical";
6
+ import "tiny-invariant";
7
+ import "@lexical/history";
8
+ import { useLexicalComposer } from "../../core/composables/useLexicalComposer.js";
9
+ import "@lexical/list";
10
+ import "@lexical/dragon";
11
+ import "@lexical/plain-text";
12
+ import "@lexical/rich-text";
5
13
  import { registerDocEditorToolbarExtend } from "../../core/index.js";
6
14
  import { $isGridNode, GridNode } from "./GridNode.js";
7
15
  import { INSERT_LAYOUTGRID_COMMAND, LayoutGridNode } from "./LayoutGridNode.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/GridPlugin/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\n\r\nimport { useLexicalComposer, useMounted } from 'lexical-vue'\r\nimport { $insertNodeToNearestRoot, mergeRegister } from '@lexical/utils'\r\nimport {\r\n $getNodeByKey, $createParagraphNode, $isNodeSelection, $getSelection,\r\n ElementNode, COMMAND_PRIORITY_EDITOR,\r\n CLICK_COMMAND,\r\n COMMAND_PRIORITY_LOW\r\n} from 'lexical'\r\nimport { onMounted, onUnmounted, ref } from 'vue'\r\nimport { registerDocEditorToolbarExtend, REMOVE_ELEMENTBLOCK_COMMAND, SELECTED_ELEMENTBLOCK_COMMAND, SelectElementBlocktEventType, type ToolbarExtendPlugin } from \"../../core\"\r\nimport { GridNode, $isGridNode } from \"./GridNode\"\r\nimport { type LayoutGridNodeAttrType, LayoutGridNode, INSERT_LAYOUTGRID_COMMAND } from \"./LayoutGridNode\"\r\nimport { type TextGridNodeAttrType, TextGridNode, INSERT_TEXTGRID_COMMAND } from \"./TextGridNode\"\r\nimport { type ImageTextGridNodeAttrType, ImageTextGridNode, INSERT_IMAGETEXTGRID_COMMAND } from \"./ImageTextGridNode\"\r\nimport { type ModuleGridNodeAttrType, ModuleGridNode, INSERT_MODULEGRID_COMMAND, $isModuleGridNode } from \"./ModuleGridNode\"\r\nimport { INSERT_MODULE_COMMAND } from \"../ModulePlugin/commands\"\r\nimport { showModuleSelectDialog } from \"../ModulePlugin/utils\"\r\nimport { ModuleType } from \"../ModulePlugin/composables\"\r\nimport { ImageAttrType, InlineImageNode } from '../ImagePlugin'\r\nimport { useElementBlockSelection } from '../../core'\r\nimport { createDefaultFormData } from \"../../../dynamic-form-panel/utils\"\r\nimport { showGridEditDialoger } from \"./utils\"\r\n\r\n// 编辑器\r\nconst editor = useLexicalComposer()\r\n\r\n// 注册到工具条\r\nregisterDocEditorToolbarExtend({\r\n icon: \"richtext-outline\",\r\n text: \"图文环绕\",\r\n action: async () => {\r\n editor.dispatchCommand(INSERT_IMAGETEXTGRID_COMMAND, { width: \"100%\" } as ImageTextGridNodeAttrType)\r\n },\r\n sort: 80\r\n} as ToolbarExtendPlugin)\r\nregisterDocEditorToolbarExtend({\r\n icon: \"Grid\",\r\n text: \"文本容器\",\r\n action: async () => {\r\n editor.dispatchCommand(INSERT_TEXTGRID_COMMAND, { width: \"100%\" } as TextGridNodeAttrType)\r\n },\r\n sort: 81\r\n} as ToolbarExtendPlugin)\r\nregisterDocEditorToolbarExtend({\r\n icon: \"Grid\",\r\n text: \"模块容器\",\r\n action: async () => {\r\n editor.dispatchCommand(INSERT_MODULEGRID_COMMAND, { width: \"100%\" } as ModuleGridNodeAttrType)\r\n },\r\n sort: 70\r\n} as ToolbarExtendPlugin)\r\nregisterDocEditorToolbarExtend({\r\n icon: \"Grid\",\r\n text: \"布局容器\",\r\n action: async () => {\r\n editor.dispatchCommand(INSERT_LAYOUTGRID_COMMAND, { display: \"flex\", width: \"100%\" } as LayoutGridNodeAttrType)\r\n },\r\n sort: 1\r\n} as ToolbarExtendPlugin)\r\n\r\n// 使用元素模块 集成了模块选中删除以及工具条\r\nuseElementBlockSelection((el) => {\r\n\r\n // 文本环绕的文本框不做选中处理\r\n if (el != null && el.parentElement != null && TextGridNode.hasGridNodeByElement(el) && ImageTextGridNode.hasGridNodeByElement(el.parentElement)) {\r\n return el.parentElement;\r\n }\r\n\r\n return GridNode.hasGridNodeByElement(el);\r\n\r\n}, (nodeKey) => {\r\n\r\n const node = $getNodeByKey(nodeKey as any)\r\n\r\n if ($isGridNode(node)) {\r\n\r\n const parent = node.getParent() as ElementNode\r\n\r\n const toolbars = [\r\n {\r\n title: `编辑容器`, icon: \"Edit\", action: async () => {\r\n\r\n var result = await showGridEditDialoger(node, parent, node.getAttrs());\r\n\r\n editor.update(() => node.setAttrs(result as any))\r\n }\r\n },\r\n {\r\n title: `在此之前插入布局容器`, icon: \"BottomLeft\", action: async () => {\r\n editor.update(() => {\r\n node.insertBefore(new LayoutGridNode({ display: \"block\", width: \"100%\" } as any))\r\n })\r\n }\r\n },\r\n {\r\n title: `在此之后插入布局容器`, icon: \"BottomRight\", action: async () => {\r\n editor.update(() => {\r\n node.insertAfter(new LayoutGridNode({ display: \"block\", width: \"100%\" } as any))\r\n })\r\n }\r\n }\r\n ];\r\n\r\n // 模块容器\r\n if ($isModuleGridNode(node)) {\r\n toolbars.push(...[\r\n {\r\n title: \"添加模块\", icon: \"Plus\", action: async () => {\r\n // 打开模块面板\r\n const result = (await showModuleSelectDialog()) as ModuleType;\r\n const defaultData = createDefaultFormData(result.options);\r\n // 插入模块\r\n editor.dispatchCommand(INSERT_MODULE_COMMAND, { name: result.name, data: defaultData })\r\n }\r\n }\r\n ])\r\n }\r\n\r\n return toolbars;\r\n }\r\n\r\n return null;\r\n})\r\n\r\nonMounted(() => {\r\n\r\n // 插入格子\r\n const insertGridHandle = (layoutGrid: GridNode) => {\r\n const selection = $getSelection()\r\n const elementNode = $isNodeSelection(selection) ? selection?.getNodes()[0] as ElementNode : null;\r\n if (elementNode) {\r\n elementNode.append(layoutGrid);\r\n }\r\n else {\r\n $insertNodeToNearestRoot(layoutGrid)\r\n }\r\n }\r\n\r\n // 注册指令\r\n const unregister = mergeRegister(\r\n // 插入布局格子\r\n editor.registerCommand<LayoutGridNodeAttrType>(INSERT_LAYOUTGRID_COMMAND, (payload) => {\r\n\r\n insertGridHandle(new LayoutGridNode(payload));\r\n\r\n return true\r\n }, COMMAND_PRIORITY_EDITOR),\r\n // 插入文本格子\r\n editor.registerCommand<TextGridNodeAttrType>(INSERT_TEXTGRID_COMMAND, (payload) => {\r\n\r\n const textGrid = new TextGridNode(payload)\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n insertGridHandle(textGrid);\r\n\r\n return true\r\n }, COMMAND_PRIORITY_EDITOR),\r\n // 插入模块格子\r\n editor.registerCommand<ModuleGridNodeAttrType>(INSERT_MODULEGRID_COMMAND, (payload) => {\r\n insertGridHandle(new ModuleGridNode(payload));\r\n return true\r\n }, COMMAND_PRIORITY_EDITOR),\r\n // 插入图文环绕格子\r\n editor.registerCommand<ImageTextGridNodeAttrType>(INSERT_IMAGETEXTGRID_COMMAND, (payload) => {\r\n\r\n const textImageGrid = new ImageTextGridNode(payload)\r\n const textGrid = new TextGridNode({} as TextGridNodeAttrType)\r\n\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n\r\n textImageGrid.append(new InlineImageNode({\r\n src: \"\",\r\n float: \"left\",\r\n width: \"200px\",\r\n margin: \"0 10px 10px 0\"\r\n } as ImageAttrType))\r\n textImageGrid.append(textGrid)\r\n\r\n\r\n insertGridHandle(textImageGrid);\r\n\r\n return true\r\n }, COMMAND_PRIORITY_EDITOR)\r\n );\r\n\r\n onUnmounted(() => unregister())\r\n})\r\n</script>\r\n\r\n<template></template>\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/GridPlugin/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\n\r\nimport { useLexicalComposer } from '../../core/composables'\r\nimport { $insertNodeToNearestRoot,mergeRegister } from '@lexical/utils'\r\nimport { \r\n $getNodeByKey,$createParagraphNode,$isNodeSelection, $getSelection,\r\n ElementNode,COMMAND_PRIORITY_EDITOR\r\n} from 'lexical'\r\nimport { onMounted, onUnmounted,ref } from 'vue'\r\nimport { registerDocEditorToolbarExtend,type ToolbarExtendPlugin } from \"../../core\"\r\nimport { GridNode,$isGridNode } from \"./GridNode\"\r\nimport { type LayoutGridNodeAttrType,LayoutGridNode,INSERT_LAYOUTGRID_COMMAND } from \"./LayoutGridNode\"\r\nimport { type TextGridNodeAttrType,TextGridNode,INSERT_TEXTGRID_COMMAND } from \"./TextGridNode\"\r\nimport { type ImageTextGridNodeAttrType,ImageTextGridNode,INSERT_IMAGETEXTGRID_COMMAND } from \"./ImageTextGridNode\"\r\nimport { type ModuleGridNodeAttrType,ModuleGridNode,INSERT_MODULEGRID_COMMAND,$isModuleGridNode } from \"./ModuleGridNode\"\r\nimport { INSERT_MODULE_COMMAND } from \"../ModulePlugin/commands\"\r\nimport { showModuleSelectDialog } from \"../ModulePlugin/utils\"\r\nimport { ModuleType } from \"../ModulePlugin/composables\"\r\nimport { ImageAttrType, InlineImageNode } from '../ImagePlugin'\r\nimport { useElementBlockSelection } from '../../core'\r\nimport { createDefaultFormData } from \"../../../dynamic-form-panel/utils\"\r\nimport { showGridEditDialoger } from \"./utils\"\r\n\r\n// 编辑器\r\nconst editor = useLexicalComposer()\r\n\r\n// 注册到工具条\r\nregisterDocEditorToolbarExtend({\r\n icon: \"richtext-outline\",\r\n text: \"图文环绕\",\r\n action: async () => {\r\n editor.dispatchCommand(INSERT_IMAGETEXTGRID_COMMAND, { width: \"100%\" } as ImageTextGridNodeAttrType)\r\n },\r\n sort: 80\r\n} as ToolbarExtendPlugin)\r\nregisterDocEditorToolbarExtend({\r\n icon: \"Grid\",\r\n text: \"文本容器\",\r\n action: async () => {\r\n editor.dispatchCommand(INSERT_TEXTGRID_COMMAND, { width: \"100%\" } as TextGridNodeAttrType)\r\n },\r\n sort: 81\r\n} as ToolbarExtendPlugin)\r\nregisterDocEditorToolbarExtend({\r\n icon: \"Grid\",\r\n text: \"模块容器\",\r\n action: async () => {\r\n editor.dispatchCommand(INSERT_MODULEGRID_COMMAND, { width: \"100%\" } as ModuleGridNodeAttrType)\r\n },\r\n sort: 70\r\n} as ToolbarExtendPlugin)\r\nregisterDocEditorToolbarExtend({\r\n icon: \"Grid\",\r\n text: \"布局容器\",\r\n action: async () => {\r\n editor.dispatchCommand(INSERT_LAYOUTGRID_COMMAND, { display: \"flex\", width: \"100%\" } as LayoutGridNodeAttrType)\r\n },\r\n sort: 1\r\n} as ToolbarExtendPlugin)\r\n\r\n// 使用元素模块 集成了模块选中删除以及工具条\r\nuseElementBlockSelection((el) => {\r\n\r\n // 文本环绕的文本框不做选中处理\r\n if (el != null && el.parentElement != null && TextGridNode.hasGridNodeByElement(el) && ImageTextGridNode.hasGridNodeByElement(el.parentElement)) {\r\n return el.parentElement;\r\n }\r\n\r\n return GridNode.hasGridNodeByElement(el);\r\n\r\n}, (nodeKey) => {\r\n\r\n const node = $getNodeByKey(nodeKey as any)\r\n\r\n if ($isGridNode(node)) {\r\n\r\n const parent = node.getParent() as ElementNode\r\n\r\n const toolbars = [\r\n {\r\n title: `编辑容器`, icon: \"Edit\", action: async () => {\r\n\r\n var result = await showGridEditDialoger(node, parent, node.getAttrs());\r\n\r\n editor.update(() => node.setAttrs(result as any))\r\n }\r\n },\r\n {\r\n title: `在此之前插入布局容器`, icon: \"BottomLeft\", action: async () => {\r\n editor.update(() => {\r\n node.insertBefore(new LayoutGridNode({ display: \"block\", width: \"100%\" } as any))\r\n })\r\n }\r\n },\r\n {\r\n title: `在此之后插入布局容器`, icon: \"BottomRight\", action: async () => {\r\n editor.update(() => {\r\n node.insertAfter(new LayoutGridNode({ display: \"block\", width: \"100%\" } as any))\r\n })\r\n }\r\n }\r\n ];\r\n\r\n // 模块容器\r\n if ($isModuleGridNode(node)) {\r\n toolbars.push(...[\r\n {\r\n title: \"添加模块\", icon: \"Plus\", action: async () => {\r\n // 打开模块面板\r\n const result = (await showModuleSelectDialog()) as ModuleType;\r\n const defaultData = createDefaultFormData(result.options);\r\n // 插入模块\r\n editor.dispatchCommand(INSERT_MODULE_COMMAND, { name: result.name, data: defaultData })\r\n }\r\n }\r\n ])\r\n }\r\n\r\n return toolbars;\r\n }\r\n\r\n return null;\r\n})\r\n\r\nonMounted(() => {\r\n\r\n // 插入格子\r\n const insertGridHandle = (layoutGrid: GridNode) => {\r\n const selection = $getSelection()\r\n const elementNode = $isNodeSelection(selection) ? selection?.getNodes()[0] as ElementNode : null;\r\n if (elementNode) {\r\n elementNode.append(layoutGrid);\r\n }\r\n else {\r\n $insertNodeToNearestRoot(layoutGrid)\r\n }\r\n }\r\n\r\n // 注册指令\r\n const unregister = mergeRegister(\r\n // 插入布局格子\r\n editor.registerCommand<LayoutGridNodeAttrType>(INSERT_LAYOUTGRID_COMMAND, (payload) => {\r\n\r\n insertGridHandle(new LayoutGridNode(payload));\r\n\r\n return true\r\n }, COMMAND_PRIORITY_EDITOR),\r\n // 插入文本格子\r\n editor.registerCommand<TextGridNodeAttrType>(INSERT_TEXTGRID_COMMAND, (payload) => {\r\n\r\n const textGrid = new TextGridNode(payload)\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n insertGridHandle(textGrid);\r\n\r\n return true\r\n }, COMMAND_PRIORITY_EDITOR),\r\n // 插入模块格子\r\n editor.registerCommand<ModuleGridNodeAttrType>(INSERT_MODULEGRID_COMMAND, (payload) => {\r\n insertGridHandle(new ModuleGridNode(payload));\r\n return true\r\n }, COMMAND_PRIORITY_EDITOR),\r\n // 插入图文环绕格子\r\n editor.registerCommand<ImageTextGridNodeAttrType>(INSERT_IMAGETEXTGRID_COMMAND, (payload) => {\r\n\r\n const textImageGrid = new ImageTextGridNode(payload)\r\n const textGrid = new TextGridNode({} as TextGridNodeAttrType)\r\n\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n textGrid.append($createParagraphNode())\r\n\r\n textImageGrid.append(new InlineImageNode({\r\n src: \"\",\r\n float: \"left\",\r\n width: \"200px\",\r\n margin: \"0 10px 10px 0\"\r\n } as ImageAttrType))\r\n textImageGrid.append(textGrid)\r\n\r\n\r\n insertGridHandle(textImageGrid);\r\n\r\n return true\r\n }, COMMAND_PRIORITY_EDITOR)\r\n );\r\n\r\n onUnmounted(() => unregister())\r\n})\r\n</script>\r\n\r\n<template></template>\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,UAAM,SAAS;AAGgB,mCAAA;AAAA,MAC7B,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAQ,YAAY;AAClB,eAAO,gBAAgB,8BAA8B,EAAE,OAAO,OAAqC,CAAA;AAAA,MACrG;AAAA,MACA,MAAM;AAAA,IAAA,CACgB;AACO,mCAAA;AAAA,MAC7B,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAQ,YAAY;AAClB,eAAO,gBAAgB,yBAAyB,EAAE,OAAO,OAAgC,CAAA;AAAA,MAC3F;AAAA,MACA,MAAM;AAAA,IAAA,CACgB;AACO,mCAAA;AAAA,MAC7B,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAQ,YAAY;AAClB,eAAO,gBAAgB,2BAA2B,EAAE,OAAO,OAAkC,CAAA;AAAA,MAC/F;AAAA,MACA,MAAM;AAAA,IAAA,CACgB;AACO,mCAAA;AAAA,MAC7B,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAQ,YAAY;AAClB,eAAO,gBAAgB,2BAA2B,EAAE,SAAS,QAAQ,OAAO,QAAkC;AAAA,MAChH;AAAA,MACA,MAAM;AAAA,IAAA,CACgB;AAGxB,6BAAyB,CAAC,OAAO;AAG/B,UAAI,MAAM,QAAQ,GAAG,iBAAiB,QAAQ,aAAa,qBAAqB,EAAE,KAAK,kBAAkB,qBAAqB,GAAG,aAAa,GAAG;AAC/I,eAAO,GAAG;AAAA,MACZ;AAEO,aAAA,SAAS,qBAAqB,EAAE;AAAA,IAEzC,GAAG,CAAC,YAAY;AAER,YAAA,OAAO,cAAc,OAAc;AAErC,UAAA,YAAY,IAAI,GAAG;AAEf,cAAA,SAAS,KAAK;AAEpB,cAAM,WAAW;AAAA,UACf;AAAA,YACE,OAAO;AAAA,YAAQ,MAAM;AAAA,YAAQ,QAAQ,YAAY;AAE/C,kBAAI,SAAS,MAAM,qBAAqB,MAAM,QAAQ,KAAK,UAAU;AAErE,qBAAO,OAAO,MAAM,KAAK,SAAS,MAAa,CAAC;AAAA,YAClD;AAAA,UACF;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YAAc,MAAM;AAAA,YAAc,QAAQ,YAAY;AAC3D,qBAAO,OAAO,MAAM;AACb,qBAAA,aAAa,IAAI,eAAe,EAAE,SAAS,SAAS,OAAO,OAAe,CAAA,CAAC;AAAA,cAAA,CACjF;AAAA,YACH;AAAA,UACF;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YAAc,MAAM;AAAA,YAAe,QAAQ,YAAY;AAC5D,qBAAO,OAAO,MAAM;AACb,qBAAA,YAAY,IAAI,eAAe,EAAE,SAAS,SAAS,OAAO,OAAe,CAAA,CAAC;AAAA,cAAA,CAChF;AAAA,YACH;AAAA,UACF;AAAA,QAAA;AAIE,YAAA,kBAAkB,IAAI,GAAG;AAC3B,mBAAS,KAAK,GAAG;AAAA,YACf;AAAA,cACE,OAAO;AAAA,cAAQ,MAAM;AAAA,cAAQ,QAAQ,YAAY;AAEzC,sBAAA,SAAU,MAAM;AAChB,sBAAA,cAAc,sBAAsB,OAAO,OAAO;AAEjD,uBAAA,gBAAgB,uBAAuB,EAAE,MAAM,OAAO,MAAM,MAAM,aAAa;AAAA,cACxF;AAAA,YACF;AAAA,UAAA,CACD;AAAA,QACH;AAEO,eAAA;AAAA,MACT;AAEO,aAAA;AAAA,IAAA,CACR;AAED,cAAU,MAAM;AAGR,YAAA,mBAAmB,CAAC,eAAyB;AACjD,cAAM,YAAY;AACZ,cAAA,cAAc,iBAAiB,SAAS,IAAI,uCAAW,WAAW,KAAoB;AAC5F,YAAI,aAAa;AACf,sBAAY,OAAO,UAAU;AAAA,QAAA,OAE1B;AACH,mCAAyB,UAAU;AAAA,QACrC;AAAA,MAAA;AAIF,YAAM,aAAa;AAAA;AAAA,QAEjB,OAAO,gBAAwC,2BAA2B,CAAC,YAAY;AAEpE,2BAAA,IAAI,eAAe,OAAO,CAAC;AAErC,iBAAA;AAAA,WACN,uBAAuB;AAAA;AAAA,QAE1B,OAAO,gBAAsC,yBAAyB,CAAC,YAAY;AAE3E,gBAAA,WAAW,IAAI,aAAa,OAAO;AAChC,mBAAA,OAAO,sBAAsB;AAC7B,mBAAA,OAAO,sBAAsB;AAC7B,mBAAA,OAAO,sBAAsB;AAC7B,mBAAA,OAAO,sBAAsB;AAC7B,mBAAA,OAAO,sBAAsB;AAC7B,mBAAA,OAAO,sBAAsB;AACtC,2BAAiB,QAAQ;AAElB,iBAAA;AAAA,WACN,uBAAuB;AAAA;AAAA,QAE1B,OAAO,gBAAwC,2BAA2B,CAAC,YAAY;AACpE,2BAAA,IAAI,eAAe,OAAO,CAAC;AACrC,iBAAA;AAAA,WACN,uBAAuB;AAAA;AAAA,QAE1B,OAAO,gBAA2C,8BAA8B,CAAC,YAAY;AAErF,gBAAA,gBAAgB,IAAI,kBAAkB,OAAO;AACnD,gBAAM,WAAW,IAAI,aAAa,CAAA,CAA0B;AAEnD,mBAAA,OAAO,sBAAsB;AAC7B,mBAAA,OAAO,sBAAsB;AAC7B,mBAAA,OAAO,sBAAsB;AAC7B,mBAAA,OAAO,sBAAsB;AAC7B,mBAAA,OAAO,sBAAsB;AAC7B,mBAAA,OAAO,sBAAsB;AAExB,wBAAA,OAAO,IAAI,gBAAgB;AAAA,YACvC,KAAK;AAAA,YACL,OAAO;AAAA,YACP,OAAO;AAAA,YACP,QAAQ;AAAA,UACQ,CAAA,CAAC;AACnB,wBAAc,OAAO,QAAQ;AAG7B,2BAAiB,aAAa;AAEvB,iBAAA;AAAA,WACN,uBAAuB;AAAA,MAAA;AAGhB,kBAAA,MAAM,YAAY;AAAA,IAAA,CAC/B;;;;;;"}
@@ -1,10 +1,18 @@
1
1
  import { defineComponent, onMounted } from "vue";
2
2
  import { mergeRegister, $insertNodeToNearestRoot, mediaFileReader, isMimeType } from "@lexical/utils";
3
- import { $getSelection, $isNodeSelection, $createParagraphNode, COMMAND_PRIORITY_EDITOR, COMMAND_PRIORITY_LOW, $getNodeByKey, $isParagraphNode } from "lexical";
3
+ import { $getNodeByKey, $isParagraphNode, $getSelection, $isNodeSelection, $createParagraphNode, COMMAND_PRIORITY_EDITOR, COMMAND_PRIORITY_LOW } from "lexical";
4
4
  import { DRAG_DROP_PASTE } from "@lexical/rich-text";
5
- import { useLexicalComposer, useMounted } from "lexical-vue";
5
+ import "@lexical/text";
6
+ import { useMounted } from "../../core/composables/useMounted.js";
7
+ import "@lexical/overflow";
8
+ import "tiny-invariant";
9
+ import "@lexical/history";
10
+ import { useLexicalComposer } from "../../core/composables/useLexicalComposer.js";
11
+ import "@lexical/list";
12
+ import "@lexical/dragon";
13
+ import "@lexical/plain-text";
6
14
  import { INSERT_IMAGE_COMMAND } from "./commands.js";
7
- import { $createImageNode, ImageNode } from "./ImageNode.js";
15
+ import { ImageNode, $createImageNode } from "./ImageNode.js";
8
16
  import "../GridPlugin/TextGridNode.js";
9
17
  import "../GridPlugin/LayoutGridNode.js";
10
18
  import { $isImageTextGridNode } from "../GridPlugin/ImageTextGridNode.js";
@@ -78,7 +86,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
78
86
  toolbarList.push({
79
87
  title: isImageText ? "居左" : "左对齐",
80
88
  icon: `doc-align-left`,
81
- async action() {
89
+ action: async () => {
82
90
  editor.update(() => {
83
91
  if (isImageText) {
84
92
  node.setAttrs({ float: "left" });
@@ -93,7 +101,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
93
101
  toolbarList.push({
94
102
  title: "居中对齐",
95
103
  icon: `doc-align-center`,
96
- async action() {
104
+ action: async () => {
97
105
  editor.update(() => {
98
106
  parent.setFormat("center");
99
107
  });
@@ -104,7 +112,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
104
112
  toolbarList.push({
105
113
  title: isImageText ? "居右" : "右对齐",
106
114
  icon: `doc-align-right`,
107
- async action() {
115
+ action: async () => {
108
116
  editor.update(() => {
109
117
  if (isImageText) {
110
118
  node.setAttrs({ float: "right" });
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/ImagePlugin/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { $insertNodeToNearestRoot, mergeRegister, mediaFileReader, isMimeType } from '@lexical/utils'\r\nimport {\r\n COMMAND_PRIORITY_EDITOR, COMMAND_PRIORITY_LOW, $isParagraphNode,\r\n $getSelection, $createParagraphNode, $isNodeSelection, $getNodeByKey,\r\n ElementNode,\r\n NodeKey\r\n} from 'lexical'\r\nimport { DRAG_DROP_PASTE } from '@lexical/rich-text'\r\nimport { useLexicalComposer, useMounted } from 'lexical-vue'\r\nimport { onMounted, } from 'vue'\r\nimport { INSERT_IMAGE_COMMAND, $createImageNode, ImageNode, type ImageAttrType } from './index'\r\nimport { $isImageTextGridNode } from '../GridPlugin'\r\nimport { registerDocEditorToolbarExtend, type ToolbarExtendPlugin } from \"../../core\"\r\nimport { showImageEditDialog, imageUpload } from \"./utils\"\r\nimport { useElementBlockSelection } from '../../core'\r\nimport { ElLoading } from 'element-plus'\r\n\r\n// 图片类型\r\nconst ACCEPTABLE_IMAGE_TYPES = [\r\n 'image/',\r\n 'image/heic',\r\n 'image/heif',\r\n 'image/gif',\r\n 'image/webp',\r\n]\r\n\r\n// 注册到工具条\r\nregisterDocEditorToolbarExtend({\r\n icon: \"Picture\",\r\n text: \"图片\",\r\n action: async () => {\r\n // 显示图片编辑面板\r\n showImageEditDialog({\r\n src: \"\", alt: \"\", width: \"\", height: \"\", maxWidth: \"100%\", maxHeight: \"\", margin: \"\"\r\n }).then(async (data: any) => {\r\n const result = await uploadhandle([data.src])\r\n data.src = result[0];\r\n editor.dispatchCommand(INSERT_IMAGE_COMMAND, data)\r\n });\r\n },\r\n sort: 90\r\n} as ToolbarExtendPlugin)\r\n\r\nconst editor = useLexicalComposer()\r\n\r\n// 上传处理函数\r\nconst uploadhandle = async (pathList: Array<string>) => {\r\n\r\n if (pathList.length) {\r\n\r\n const loadingInstance = ElLoading.service({ fullscreen: true, text: \"图片上传中...\" })\r\n\r\n const reesult = await Promise.all(pathList.map(path => {\r\n return imageUpload(path)\r\n }))\r\n\r\n loadingInstance.close();\r\n\r\n return reesult;\r\n }\r\n\r\n return [];\r\n}\r\n\r\n// 使用元素模块 集成了模块选中删除以及工具条\r\nuseElementBlockSelection(el => {\r\n return el.tagName.toLowerCase() == \"img\" ? el : null\r\n}, (nodeKey) => {\r\n\r\n const node = $getNodeByKey(nodeKey as NodeKey) as ImageNode;\r\n\r\n if (node != null) {\r\n\r\n const parent = node.getParent();\r\n const isImageText = $isImageTextGridNode(parent)\r\n\r\n // 工具条\r\n const toolbarList = [\r\n {\r\n title: \"编辑\", icon: \"Edit\", action: async () => {\r\n // 显示图片编辑面板\r\n const data: any = await showImageEditDialog(node.__attrs);\r\n const result = await uploadhandle([data.src])\r\n data.src = result[0];\r\n editor.update(() => node.setAttrs(data))\r\n }\r\n }\r\n ];\r\n\r\n if ($isParagraphNode(parent) || isImageText) {\r\n toolbarList.push({\r\n title: isImageText ? \"居左\" : \"左对齐\", icon: `doc-align-left`, async action() {\r\n editor.update(() => {\r\n if (isImageText) {\r\n node.setAttrs({ float: \"left\" })\r\n }\r\n else {\r\n parent.setFormat(\"left\")\r\n }\r\n })\r\n }\r\n });\r\n }\r\n\r\n if ($isParagraphNode(parent)) {\r\n toolbarList.push({\r\n title: \"居中对齐\", icon: `doc-align-center`, async action() {\r\n editor.update(() => {\r\n parent.setFormat(\"center\")\r\n })\r\n }\r\n });\r\n }\r\n\r\n if ($isParagraphNode(parent) || isImageText) {\r\n toolbarList.push({\r\n title: isImageText ? \"居右\" : \"右对齐\", icon: `doc-align-right`, async action() {\r\n editor.update(() => {\r\n\r\n if (isImageText) {\r\n node.setAttrs({ float: \"right\" })\r\n }\r\n else {\r\n parent.setFormat(\"right\")\r\n }\r\n })\r\n }\r\n });\r\n }\r\n\r\n return toolbarList;\r\n }\r\n\r\n return null;\r\n})\r\n\r\n// 编辑器挂载\r\nuseMounted(() => {\r\n // 注册事件\r\n return mergeRegister(\r\n // 插入图片\r\n editor.registerCommand<ImageAttrType>(INSERT_IMAGE_COMMAND, (payload) => {\r\n\r\n const selection = $getSelection()\r\n const elementNode = $isNodeSelection(selection) ? selection?.getNodes()[0] as ElementNode : null;\r\n\r\n if (elementNode) {\r\n elementNode.append($createImageNode(payload));\r\n }\r\n else {\r\n const p = $createParagraphNode()\r\n p.append($createImageNode(payload))\r\n $insertNodeToNearestRoot(p)\r\n }\r\n return true\r\n }, COMMAND_PRIORITY_EDITOR),\r\n\r\n // 剪切板图片\r\n editor.registerCommand(DRAG_DROP_PASTE, (files) => {\r\n\r\n (async () => {\r\n\r\n const filesResult = await mediaFileReader(files, [ACCEPTABLE_IMAGE_TYPES].flatMap((x) => x))\r\n\r\n const result = await uploadhandle(filesResult.filter(f => isMimeType(f.file, ACCEPTABLE_IMAGE_TYPES)).map(f => f.result))\r\n\r\n result.forEach(path => {\r\n editor.dispatchCommand(INSERT_IMAGE_COMMAND, {\r\n src: path, alt: \"\", maxWidth: \":100%\"\r\n } as ImageAttrType)\r\n })\r\n\r\n })()\r\n\r\n return true\r\n }, COMMAND_PRIORITY_LOW)\r\n )\r\n})\r\n\r\n// 当前插件挂载\r\nonMounted(() => {\r\n\r\n if (!editor.hasNodes([ImageNode])) {\r\n throw new Error('ImagePlugin: 图片节点未注册!')\r\n }\r\n\r\n})\r\n\r\n</script>\r\n\r\n<template></template>\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/ImagePlugin/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { $insertNodeToNearestRoot, mergeRegister, mediaFileReader, isMimeType } from '@lexical/utils'\r\nimport {\r\n COMMAND_PRIORITY_EDITOR, COMMAND_PRIORITY_LOW, $isParagraphNode,\r\n $getSelection, $createParagraphNode, $isNodeSelection, $getNodeByKey,\r\n ElementNode,\r\n NodeKey\r\n} from 'lexical'\r\nimport { DRAG_DROP_PASTE } from '@lexical/rich-text'\r\nimport { useLexicalComposer,useMounted } from '../../core/composables'\r\nimport { onMounted, } from 'vue'\r\nimport { INSERT_IMAGE_COMMAND,$createImageNode,ImageNode,type ImageAttrType } from './index'\r\nimport { $isImageTextGridNode } from '../GridPlugin'\r\nimport { registerDocEditorToolbarExtend, type ToolbarExtendPlugin } from \"../../core\"\r\nimport { showImageEditDialog, imageUpload } from \"./utils\"\r\nimport { useElementBlockSelection } from '../../core'\r\nimport { ElLoading } from 'element-plus'\r\n\r\n// 图片类型\r\nconst ACCEPTABLE_IMAGE_TYPES = [\r\n 'image/',\r\n 'image/heic',\r\n 'image/heif',\r\n 'image/gif',\r\n 'image/webp',\r\n]\r\n\r\n// 注册到工具条\r\nregisterDocEditorToolbarExtend({\r\n icon: \"Picture\",\r\n text: \"图片\",\r\n action: async () => {\r\n // 显示图片编辑面板\r\n showImageEditDialog({\r\n src: \"\", alt: \"\", width: \"\", height: \"\", maxWidth: \"100%\", maxHeight: \"\", margin: \"\"\r\n }).then(async (data: any) => {\r\n const result = await uploadhandle([data.src])\r\n data.src = result[0];\r\n editor.dispatchCommand(INSERT_IMAGE_COMMAND, data)\r\n });\r\n },\r\n sort: 90\r\n} as ToolbarExtendPlugin)\r\n\r\nconst editor = useLexicalComposer()\r\n\r\n// 上传处理函数\r\nconst uploadhandle = async (pathList: Array<string>) => {\r\n\r\n if (pathList.length) {\r\n\r\n const loadingInstance = ElLoading.service({ fullscreen: true, text: \"图片上传中...\" })\r\n\r\n const reesult = await Promise.all(pathList.map(path => {\r\n return imageUpload(path)\r\n }))\r\n\r\n loadingInstance.close();\r\n\r\n return reesult;\r\n }\r\n\r\n return [];\r\n}\r\n\r\n// 使用元素模块 集成了模块选中删除以及工具条\r\nuseElementBlockSelection(el => {\r\n return el.tagName.toLowerCase() == \"img\" ? el : null\r\n}, (nodeKey) => {\r\n\r\n const node = $getNodeByKey(nodeKey as NodeKey) as ImageNode;\r\n\r\n if (node != null) {\r\n\r\n const parent = node.getParent();\r\n const isImageText = $isImageTextGridNode(parent)\r\n\r\n // 工具条\r\n const toolbarList = [\r\n {\r\n title: \"编辑\", icon: \"Edit\", action: async () => {\r\n // 显示图片编辑面板\r\n const data: any = await showImageEditDialog(node.__attrs);\r\n const result = await uploadhandle([data.src])\r\n data.src = result[0];\r\n editor.update(() => node.setAttrs(data))\r\n }\r\n }\r\n ];\r\n\r\n if($isParagraphNode(parent) || isImageText){\r\n toolbarList.push({ title: isImageText ? \"居左\" : \"左对齐\",icon:`doc-align-left`,action:async ()=>{\r\n editor.update(()=>{\r\n if(isImageText){\r\n node.setAttrs({float:\"left\"})\r\n }\r\n else {\r\n parent.setFormat(\"left\")\r\n }\r\n })\r\n }\r\n });\r\n }\r\n\r\n if($isParagraphNode(parent)){\r\n toolbarList.push({ title: \"居中对齐\",icon:`doc-align-center`,action:async ()=>{\r\n editor.update(()=>{ \r\n parent.setFormat(\"center\") \r\n })\r\n }\r\n });\r\n }\r\n\r\n if($isParagraphNode(parent) || isImageText){\r\n toolbarList.push({ title: isImageText ? \"居右\" : \"右对齐\",icon:`doc-align-right`,action:async ()=>{\r\n editor.update(()=>{\r\n\r\n if (isImageText) {\r\n node.setAttrs({ float: \"right\" })\r\n }\r\n else {\r\n parent.setFormat(\"right\")\r\n }\r\n })\r\n }\r\n });\r\n }\r\n\r\n return toolbarList;\r\n }\r\n\r\n return null;\r\n})\r\n\r\n// 编辑器挂载\r\nuseMounted(() => {\r\n // 注册事件\r\n return mergeRegister(\r\n // 插入图片\r\n editor.registerCommand<ImageAttrType>(INSERT_IMAGE_COMMAND, (payload) => {\r\n\r\n const selection = $getSelection()\r\n const elementNode = $isNodeSelection(selection) ? selection?.getNodes()[0] as ElementNode : null;\r\n\r\n if (elementNode) {\r\n elementNode.append($createImageNode(payload));\r\n }\r\n else {\r\n const p = $createParagraphNode()\r\n p.append($createImageNode(payload))\r\n $insertNodeToNearestRoot(p)\r\n }\r\n return true\r\n }, COMMAND_PRIORITY_EDITOR),\r\n\r\n // 剪切板图片\r\n editor.registerCommand(DRAG_DROP_PASTE, (files) => {\r\n\r\n (async () => {\r\n\r\n const filesResult = await mediaFileReader(files, [ACCEPTABLE_IMAGE_TYPES].flatMap((x) => x))\r\n\r\n const result = await uploadhandle(filesResult.filter(f => isMimeType(f.file, ACCEPTABLE_IMAGE_TYPES)).map(f => f.result))\r\n\r\n result.forEach(path => {\r\n editor.dispatchCommand(INSERT_IMAGE_COMMAND, {\r\n src: path, alt: \"\", maxWidth: \":100%\"\r\n } as ImageAttrType)\r\n })\r\n\r\n })()\r\n\r\n return true\r\n }, COMMAND_PRIORITY_LOW)\r\n )\r\n})\r\n\r\n// 当前插件挂载\r\nonMounted(() => {\r\n\r\n if (!editor.hasNodes([ImageNode])) {\r\n throw new Error('ImagePlugin: 图片节点未注册!')\r\n }\r\n\r\n})\r\n\r\n</script>\r\n\r\n<template></template>\r\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"composables.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/ModulePlugin/composables.ts"],"sourcesContent":["import { DynamicFormItemType } from \"../../../dynamic-form-panel\"\r\n\r\n/**\r\n * 模块模版类型\r\n */\r\nexport type ModuleType = {\r\n name:string,\r\n title:string,\r\n cover:string,\r\n template:string,\r\n editorCss:string|null|undefined,\r\n options:DynamicFormItemType[]\r\n}\r\n\r\n\r\n/**\r\n * 模块模版定义\r\n */\r\nexport const Modules:ModuleType[] = [];\r\n\r\n/**\r\n * 注册模块模版\r\n * @param options \r\n */\r\nexport const registerDocModule = (options:ModuleType) => {\r\n\r\n if(Modules.findIndex(item=>item.name == options.name) >= 0){\r\n console.warn(`模块【${options.title}】重复注册!`);\r\n }\r\n else{\r\n Modules.push(options);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * 卸载模块\r\n * @param name \r\n */\r\nexport const unRegisterDocModule = (name:string) => {\r\n\r\n for(let i = 0;i < Modules.length; i++){\r\n if(Modules[i].name == name){\r\n Modules.splice(i,1);\r\n break;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * \r\n * @param name \r\n * @returns \r\n */\r\nexport const useModule = () => {\r\n return { \r\n Modules,\r\n findModuleByName:(name:string) => {\r\n\r\n const module = Modules.find(item=>item.name == name);\r\n \r\n if(module == null){\r\n throw new Error(\"未知的模块模版:【\" + name + \"】\");\r\n }\r\n \r\n return module;\r\n }\r\n };\r\n}\r\n\r\n"],"names":[],"mappings":"AAkBO,MAAM,UAAuB,CAAC;AAMxB,MAAA,oBAAoB,CAAC,YAAuB;AAEpD,MAAA,QAAQ,UAAU,CAAM,SAAA,KAAK,QAAQ,QAAQ,IAAI,KAAK,GAAE;AACzD,YAAQ,KAAK,MAAM,QAAQ,KAAK,QAAQ;AAAA,EAAA,OAEtC;AACF,YAAQ,KAAK,OAAO;AAAA,EACtB;AACF;AAOa,MAAA,sBAAsB,CAAC,SAAgB;AAElD,WAAQ,IAAI,GAAE,IAAI,QAAQ,QAAQ,KAAI;AACpC,QAAG,QAAQ,CAAC,EAAE,QAAQ,MAAK;AACjB,cAAA,OAAO,GAAE,CAAC;AAClB;AAAA,IACF;AAAA,EACF;AACF;AAOO,MAAM,YAAY,MAAM;AACtB,SAAA;AAAA,IACL;AAAA,IACA,kBAAiB,CAAC,SAAgB;AAEhC,YAAM,SAAS,QAAQ,KAAK,CAAM,SAAA,KAAK,QAAQ,IAAI;AAEnD,UAAG,UAAU,MAAK;AAChB,cAAM,IAAI,MAAM,cAAc,OAAO,GAAG;AAAA,MAC1C;AAEO,aAAA;AAAA,IACT;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"composables.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/ModulePlugin/composables.ts"],"sourcesContent":["import { DynamicFormItemType } from \"../../../dynamic-form-panel\"\r\n\r\n/**\r\n * 模块模版类型\r\n */\r\nexport type ModuleType = {\r\n name:string,\r\n title:string,\r\n cover:string,\r\n template:string,\r\n editorCss?:string|null|undefined,\r\n options:DynamicFormItemType[]\r\n}\r\n\r\n\r\n/**\r\n * 模块模版定义\r\n */\r\nexport const Modules:ModuleType[] = [];\r\n\r\n/**\r\n * 注册模块模版\r\n * @param options \r\n */\r\nexport const registerDocModule = (options:ModuleType) => {\r\n\r\n if(Modules.findIndex(item=>item.name == options.name) >= 0){\r\n console.warn(`模块【${options.title}】重复注册!`);\r\n }\r\n else{\r\n Modules.push(options);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * 卸载模块\r\n * @param name \r\n */\r\nexport const unRegisterDocModule = (name:string) => {\r\n\r\n for(let i = 0;i < Modules.length; i++){\r\n if(Modules[i].name == name){\r\n Modules.splice(i,1);\r\n break;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * \r\n * @param name \r\n * @returns \r\n */\r\nexport const useModule = () => {\r\n return { \r\n Modules,\r\n findModuleByName:(name:string) => {\r\n\r\n const module = Modules.find(item=>item.name == name);\r\n \r\n if(module == null){\r\n throw new Error(\"未知的模块模版:【\" + name + \"】\");\r\n }\r\n \r\n return module;\r\n }\r\n };\r\n}\r\n\r\n"],"names":[],"mappings":"AAkBO,MAAM,UAAuB,CAAC;AAMxB,MAAA,oBAAoB,CAAC,YAAuB;AAEpD,MAAA,QAAQ,UAAU,CAAM,SAAA,KAAK,QAAQ,QAAQ,IAAI,KAAK,GAAE;AACzD,YAAQ,KAAK,MAAM,QAAQ,KAAK,QAAQ;AAAA,EAAA,OAEtC;AACF,YAAQ,KAAK,OAAO;AAAA,EACtB;AACF;AAOa,MAAA,sBAAsB,CAAC,SAAgB;AAElD,WAAQ,IAAI,GAAE,IAAI,QAAQ,QAAQ,KAAI;AACpC,QAAG,QAAQ,CAAC,EAAE,QAAQ,MAAK;AACjB,cAAA,OAAO,GAAE,CAAC;AAClB;AAAA,IACF;AAAA,EACF;AACF;AAOO,MAAM,YAAY,MAAM;AACtB,SAAA;AAAA,IACL;AAAA,IACA,kBAAiB,CAAC,SAAgB;AAEhC,YAAM,SAAS,QAAQ,KAAK,CAAM,SAAA,KAAK,QAAQ,IAAI;AAEnD,UAAG,UAAU,MAAK;AAChB,cAAM,IAAI,MAAM,cAAc,OAAO,GAAG;AAAA,MAC1C;AAEO,aAAA;AAAA,IACT;AAAA,EAAA;AAEJ;"}
@@ -1,7 +1,15 @@
1
1
  import { defineComponent, onMounted, onUnmounted } from "vue";
2
- import { useLexicalComposer } from "lexical-vue";
2
+ import "@lexical/text";
3
3
  import { mergeRegister } from "@lexical/utils";
4
+ import "@lexical/overflow";
4
5
  import { $getSelection, $isNodeSelection, COMMAND_PRIORITY_EDITOR, $getNodeByKey } from "lexical";
6
+ import "tiny-invariant";
7
+ import "@lexical/history";
8
+ import { useLexicalComposer } from "../../core/composables/useLexicalComposer.js";
9
+ import "@lexical/list";
10
+ import "@lexical/dragon";
11
+ import "@lexical/plain-text";
12
+ import "@lexical/rich-text";
5
13
  import { useModule } from "./composables.js";
6
14
  import { ModuleBlockNode, $createModuleBlockNode, $isModuleBlockNode } from "./ModuleBlockNode.js";
7
15
  import { $isModuleGridNode } from "../GridPlugin/ModuleGridNode.js";