@lobehub/editor 4.15.1 → 4.15.2

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 (520) hide show
  1. package/es/_virtual/_rolldown/runtime.js +28 -0
  2. package/es/codemirror/components/CopyButton.d.ts +7 -0
  3. package/es/codemirror/components/CopyButton.js +24 -0
  4. package/es/codemirror/components/LanguageSelect.d.ts +7 -0
  5. package/es/codemirror/components/LanguageSelect.js +59 -0
  6. package/es/codemirror/components/MoreOptions.d.ts +7 -0
  7. package/es/codemirror/components/MoreOptions.js +66 -0
  8. package/es/codemirror/components/Toolbar.d.ts +7 -0
  9. package/es/codemirror/components/Toolbar.js +51 -0
  10. package/es/codemirror/components/style.js +7 -0
  11. package/es/codemirror/constants.d.ts +6 -0
  12. package/es/codemirror/constants.js +512 -0
  13. package/es/codemirror/loader.d.ts +61 -0
  14. package/es/codemirror/loader.js +77 -0
  15. package/es/codemirror/style.d.ts +4 -0
  16. package/es/codemirror/style.js +82 -0
  17. package/es/codemirror/theme.d.ts +132 -0
  18. package/es/codemirror/theme.js +75 -0
  19. package/es/codemirror/types.d.ts +53 -0
  20. package/es/codemirror.d.ts +9 -263
  21. package/es/codemirror.js +8 -1
  22. package/es/common/canUseDOM.js +11 -0
  23. package/es/common/sys.js +27 -0
  24. package/es/const/hotkey.js +100 -0
  25. package/es/editor-kernel/data-source.d.ts +15 -0
  26. package/es/editor-kernel/data-source.js +15 -0
  27. package/es/editor-kernel/event.d.ts +7 -0
  28. package/es/editor-kernel/event.js +19 -0
  29. package/es/editor-kernel/index.d.ts +5 -0
  30. package/es/editor-kernel/index.js +17 -0
  31. package/es/editor-kernel/inode/helper.js +87 -0
  32. package/es/editor-kernel/inode/i-element-node.d.ts +6 -0
  33. package/es/editor-kernel/inode/i-node.d.ts +6 -0
  34. package/es/editor-kernel/inode/index.d.ts +4 -0
  35. package/es/editor-kernel/inode/paragraph-node.d.ts +1 -0
  36. package/es/editor-kernel/inode/root-node.d.ts +9 -0
  37. package/es/editor-kernel/inode/text-node.d.ts +9 -0
  38. package/es/editor-kernel/kernel.d.ts +122 -0
  39. package/es/editor-kernel/kernel.js +661 -0
  40. package/es/editor-kernel/plugin.js +59 -0
  41. package/es/editor-kernel/react/LexicalErrorBoundary.d.ts +13 -0
  42. package/es/editor-kernel/react/LexicalErrorBoundary.js +19 -0
  43. package/es/editor-kernel/react/PortalAnchor.js +12 -0
  44. package/es/editor-kernel/react/PortalContainer.d.ts +14 -0
  45. package/es/editor-kernel/react/PortalContainer.js +25 -0
  46. package/es/editor-kernel/react/index.d.ts +5 -0
  47. package/es/editor-kernel/react/react-context.d.ts +11 -0
  48. package/es/editor-kernel/react/react-context.js +21 -0
  49. package/es/editor-kernel/react/react-editor.d.ts +16 -0
  50. package/es/editor-kernel/react/react-editor.js +32 -0
  51. package/es/editor-kernel/react/useAnchor.js +17 -0
  52. package/es/editor-kernel/react/useDecorators.js +54 -0
  53. package/es/editor-kernel/react/useEditable.js +25 -0
  54. package/es/editor-kernel/react/useLexicalEditor.d.ts +6 -0
  55. package/es/editor-kernel/react/useLexicalEditor.js +23 -0
  56. package/es/editor-kernel/react/useLexicalNodeSelection.js +86 -0
  57. package/es/editor-kernel/react/useTranslation.js +9 -0
  58. package/es/editor-kernel/utils.d.ts +46 -0
  59. package/es/editor-kernel/utils.js +138 -0
  60. package/es/headless/extract-media-from-editor-state.d.ts +22 -0
  61. package/es/headless/extract-media-from-editor-state.js +49 -0
  62. package/es/headless/index.d.ts +69 -0
  63. package/es/headless/index.js +189 -0
  64. package/es/headless/plugins/codeblock.js +82 -0
  65. package/es/headless.js +3 -20139
  66. package/es/index.d.ts +112 -3059
  67. package/es/index.js +100 -8484
  68. package/es/locale/index.d.ts +61 -0
  69. package/es/locale/index.js +62 -0
  70. package/es/node_modules/.pnpm/@types_mdast@4.0.4/node_modules/@types/mdast/index.d.ts +953 -0
  71. package/es/node_modules/.pnpm/@types_unist@3.0.3/node_modules/@types/unist/index.d.ts +83 -0
  72. package/es/plugins/auto-complete/index.d.ts +2 -0
  73. package/es/plugins/auto-complete/node/placeholderNode.js +89 -0
  74. package/es/plugins/auto-complete/plugin/index.d.ts +31 -0
  75. package/es/plugins/auto-complete/plugin/index.js +395 -0
  76. package/es/plugins/auto-complete/react/ReactAutoCompletePlugin.d.ts +7 -0
  77. package/es/plugins/auto-complete/react/ReactAutoCompletePlugin.js +60 -0
  78. package/es/plugins/auto-complete/react/index.d.ts +1 -0
  79. package/es/plugins/auto-complete/react/style.js +12 -0
  80. package/es/plugins/auto-complete/react/type.d.ts +25 -0
  81. package/es/plugins/block/command/index.d.ts +13 -0
  82. package/es/plugins/block/command/index.js +161 -0
  83. package/es/plugins/block/index.d.ts +5 -0
  84. package/es/plugins/block/plugin/index.d.ts +9 -0
  85. package/es/plugins/block/plugin/index.js +86 -0
  86. package/es/plugins/block/react/ReactBlockPlugin.d.ts +18 -0
  87. package/es/plugins/block/react/ReactBlockPlugin.js +457 -0
  88. package/es/plugins/block/react/core/runtime-context.js +19 -0
  89. package/es/plugins/block/react/core/types.d.ts +6 -0
  90. package/es/plugins/block/react/drag/drag-session.js +264 -0
  91. package/es/plugins/block/react/drag/drag-utils.js +95 -0
  92. package/es/plugins/block/react/index.d.ts +2 -0
  93. package/es/plugins/block/react/style.js +66 -0
  94. package/es/plugins/block/service/i-block-menu-service.d.ts +44 -0
  95. package/es/plugins/block/service/i-block-menu-service.js +43 -0
  96. package/es/plugins/block/service/index.d.ts +1 -0
  97. package/es/plugins/code/command/index.d.ts +7 -0
  98. package/es/plugins/code/command/index.js +30 -0
  99. package/es/plugins/code/index.d.ts +3 -0
  100. package/es/plugins/code/node/code.js +91 -0
  101. package/es/plugins/code/plugin/index.d.ts +9 -0
  102. package/es/plugins/code/plugin/index.js +74 -0
  103. package/es/plugins/code/plugin/registry.js +33 -0
  104. package/es/plugins/code/react/CodeReactPlugin.d.ts +7 -0
  105. package/es/plugins/code/react/CodeReactPlugin.js +27 -0
  106. package/es/plugins/code/react/index.d.ts +1 -0
  107. package/es/plugins/code/react/style.js +21 -0
  108. package/es/plugins/code/react/type.d.ts +7 -0
  109. package/es/plugins/codeblock/command/index.d.ts +8 -0
  110. package/es/plugins/codeblock/command/index.js +40 -0
  111. package/es/plugins/codeblock/index.d.ts +6 -0
  112. package/es/plugins/codeblock/index.js +5 -0
  113. package/es/plugins/codeblock/plugin/CodeHighlighterShiki.js +415 -0
  114. package/es/plugins/codeblock/plugin/FacadeShiki.js +193 -0
  115. package/es/plugins/codeblock/plugin/index.d.ts +16 -0
  116. package/es/plugins/codeblock/plugin/index.js +157 -0
  117. package/es/plugins/codeblock/plugin/invariant.js +14 -0
  118. package/es/plugins/codeblock/react/ReactCodeblockPlugin.d.ts +7 -0
  119. package/es/plugins/codeblock/react/ReactCodeblockPlugin.js +27 -0
  120. package/es/plugins/codeblock/react/index.d.ts +2 -0
  121. package/es/plugins/codeblock/react/style.js +58 -0
  122. package/es/plugins/codeblock/react/type.d.ts +8 -0
  123. package/es/plugins/codeblock/utils/language.js +9 -0
  124. package/es/plugins/codemirror-block/command/index.d.ts +13 -0
  125. package/es/plugins/codemirror-block/command/index.js +67 -0
  126. package/es/plugins/codemirror-block/index.d.ts +3 -0
  127. package/es/plugins/codemirror-block/lib/mode.js +8 -0
  128. package/es/plugins/codemirror-block/node/CodeMirrorNode.d.ts +48 -0
  129. package/es/plugins/codemirror-block/node/CodeMirrorNode.js +205 -0
  130. package/es/plugins/codemirror-block/plugin/index.d.ts +12 -0
  131. package/es/plugins/codemirror-block/plugin/index.js +80 -0
  132. package/es/plugins/codemirror-block/react/CodemirrorNode.js +219 -0
  133. package/es/plugins/codemirror-block/react/ReactCodemirrorNode.d.ts +7 -0
  134. package/es/plugins/codemirror-block/react/ReactCodemirrorNode.js +26 -0
  135. package/es/plugins/codemirror-block/react/index.d.ts +1 -0
  136. package/es/plugins/codemirror-block/react/type.d.ts +6 -0
  137. package/es/plugins/common/command/index.d.ts +11 -0
  138. package/es/plugins/common/command/index.js +24 -0
  139. package/es/plugins/common/data-source/json-data-source.js +133 -0
  140. package/es/plugins/common/data-source/text-data-source.js +32 -0
  141. package/es/plugins/common/index.d.ts +6 -0
  142. package/es/plugins/common/node/ElementDOMSlot.js +30 -0
  143. package/es/plugins/common/node/cursor.d.ts +16 -0
  144. package/es/plugins/common/node/cursor.js +189 -0
  145. package/es/plugins/common/plugin/index.d.ts +43 -0
  146. package/es/plugins/common/plugin/index.js +338 -0
  147. package/es/plugins/common/plugin/mdReader.js +62 -0
  148. package/es/plugins/common/plugin/paste-handler.d.ts +11 -0
  149. package/es/plugins/common/plugin/paste-handler.js +61 -0
  150. package/es/plugins/common/plugin/register.js +306 -0
  151. package/es/plugins/common/react/Placeholder/index.js +65 -0
  152. package/es/plugins/common/react/Placeholder/style.js +22 -0
  153. package/es/plugins/common/react/ReactEditorContent.d.ts +7 -0
  154. package/es/plugins/common/react/ReactEditorContent.js +8 -0
  155. package/es/plugins/common/react/ReactPlainText.d.ts +7 -0
  156. package/es/plugins/common/react/ReactPlainText.js +192 -0
  157. package/es/plugins/common/react/index.d.ts +3 -0
  158. package/es/plugins/common/react/style.js +206 -0
  159. package/es/plugins/common/react/type.d.ts +94 -0
  160. package/es/plugins/common/utils/index.js +135 -0
  161. package/es/plugins/content-blocks/data-source/content-blocks-data-source.d.ts +15 -0
  162. package/es/plugins/content-blocks/data-source/content-blocks-data-source.js +21 -0
  163. package/es/plugins/content-blocks/index.d.ts +6 -0
  164. package/es/plugins/content-blocks/plugin/index.d.ts +10 -0
  165. package/es/plugins/content-blocks/plugin/index.js +24 -0
  166. package/es/plugins/content-blocks/types.d.ts +33 -0
  167. package/es/plugins/content-blocks/types.js +4 -0
  168. package/es/plugins/content-blocks/utils/extract-media-lists.d.ts +7 -0
  169. package/es/plugins/content-blocks/utils/extract-media-lists.js +32 -0
  170. package/es/plugins/content-blocks/utils/extract.d.ts +8 -0
  171. package/es/plugins/content-blocks/utils/extract.js +188 -0
  172. package/es/plugins/file/command/index.d.ts +9 -0
  173. package/es/plugins/file/command/index.js +31 -0
  174. package/es/plugins/file/index.d.ts +4 -0
  175. package/es/plugins/file/node/FileNode.d.ts +38 -0
  176. package/es/plugins/file/node/FileNode.js +106 -0
  177. package/es/plugins/file/plugin/index.d.ts +18 -0
  178. package/es/plugins/file/plugin/index.js +103 -0
  179. package/es/plugins/file/react/ReactFilePlugin.d.ts +7 -0
  180. package/es/plugins/file/react/ReactFilePlugin.js +35 -0
  181. package/es/plugins/file/react/components/ReactFile.js +50 -0
  182. package/es/plugins/file/react/index.d.ts +2 -0
  183. package/es/plugins/file/react/style.js +32 -0
  184. package/es/plugins/file/react/type.d.ts +17 -0
  185. package/es/plugins/file/utils/index.js +29 -0
  186. package/es/plugins/hr/command/index.d.ts +7 -0
  187. package/es/plugins/hr/command/index.js +14 -0
  188. package/es/plugins/hr/index.d.ts +4 -0
  189. package/es/plugins/hr/node/HorizontalRuleNode.d.ts +18 -0
  190. package/es/plugins/hr/node/HorizontalRuleNode.js +59 -0
  191. package/es/plugins/hr/plugin/index.d.ts +12 -0
  192. package/es/plugins/hr/plugin/index.js +60 -0
  193. package/es/plugins/hr/react/ReactHRPlugin.d.ts +7 -0
  194. package/es/plugins/hr/react/ReactHRPlugin.js +28 -0
  195. package/es/plugins/hr/react/components/HRNode.js +36 -0
  196. package/es/plugins/hr/react/index.d.ts +2 -0
  197. package/es/plugins/hr/react/style.js +32 -0
  198. package/es/plugins/hr/react/type.d.ts +6 -0
  199. package/es/plugins/image/command/index.d.ts +12 -0
  200. package/es/plugins/image/command/index.js +53 -0
  201. package/es/plugins/image/index.d.ts +4 -0
  202. package/es/plugins/image/node/basie-image-node.d.ts +33 -0
  203. package/es/plugins/image/node/basie-image-node.js +68 -0
  204. package/es/plugins/image/node/block-image-node.d.ts +43 -0
  205. package/es/plugins/image/node/block-image-node.js +137 -0
  206. package/es/plugins/image/node/image-node.d.ts +41 -0
  207. package/es/plugins/image/node/image-node.js +128 -0
  208. package/es/plugins/image/plugin/index.d.ts +24 -0
  209. package/es/plugins/image/plugin/index.js +183 -0
  210. package/es/plugins/image/react/ReactImagePlugin.d.ts +7 -0
  211. package/es/plugins/image/react/ReactImagePlugin.js +41 -0
  212. package/es/plugins/image/react/components/BrokenImage.js +16 -0
  213. package/es/plugins/image/react/components/Image.js +190 -0
  214. package/es/plugins/image/react/components/ImageEditPopover.js +160 -0
  215. package/es/plugins/image/react/components/LazyImage.js +73 -0
  216. package/es/plugins/image/react/components/ResizeHandle.js +62 -0
  217. package/es/plugins/image/react/components/style.js +135 -0
  218. package/es/plugins/image/react/components/useSupenseImage.js +22 -0
  219. package/es/plugins/image/react/index.d.ts +2 -0
  220. package/es/plugins/image/react/style.js +31 -0
  221. package/es/plugins/image/react/type.d.ts +23 -0
  222. package/es/plugins/inode/index.d.ts +3 -0
  223. package/es/plugins/inode/plugin/index.d.ts +19 -0
  224. package/es/plugins/inode/plugin/index.js +23 -0
  225. package/es/plugins/inode/react/index.d.ts +6 -0
  226. package/es/plugins/inode/react/index.js +15 -0
  227. package/es/plugins/inode/service/index.d.ts +17 -0
  228. package/es/plugins/inode/service/index.js +22 -0
  229. package/es/plugins/link/command/index.d.ts +10 -0
  230. package/es/plugins/link/command/index.js +33 -0
  231. package/es/plugins/link/index.d.ts +5 -0
  232. package/es/plugins/link/node/LinkNode.d.ts +10 -0
  233. package/es/plugins/link/node/LinkNode.js +448 -0
  234. package/es/plugins/link/plugin/index.d.ts +16 -0
  235. package/es/plugins/link/plugin/index.js +106 -0
  236. package/es/plugins/link/plugin/registry.js +82 -0
  237. package/es/plugins/link/react/ReactLinkPlugin.d.ts +7 -0
  238. package/es/plugins/link/react/ReactLinkPlugin.js +50 -0
  239. package/es/plugins/link/react/components/LinkEdit.js +204 -0
  240. package/es/plugins/link/react/components/LinkToolbar.js +148 -0
  241. package/es/plugins/link/react/index.d.ts +2 -0
  242. package/es/plugins/link/react/style.js +34 -0
  243. package/es/plugins/link/react/type.d.ts +14 -0
  244. package/es/plugins/link/service/i-link-service.d.ts +10 -0
  245. package/es/plugins/link/service/i-link-service.js +19 -0
  246. package/es/plugins/link/utils/index.js +45 -0
  247. package/es/plugins/link-highlight/command/index.d.ts +8 -0
  248. package/es/plugins/link-highlight/command/index.js +30 -0
  249. package/es/plugins/link-highlight/index.d.ts +3 -0
  250. package/es/plugins/link-highlight/node/link-highlight.js +80 -0
  251. package/es/plugins/link-highlight/plugin/index.d.ts +18 -0
  252. package/es/plugins/link-highlight/plugin/index.js +109 -0
  253. package/es/plugins/link-highlight/plugin/registry.js +33 -0
  254. package/es/plugins/link-highlight/react/ReactLinkHighlightPlugin.d.ts +7 -0
  255. package/es/plugins/link-highlight/react/ReactLinkHighlightPlugin.js +29 -0
  256. package/es/plugins/link-highlight/react/index.d.ts +1 -0
  257. package/es/plugins/link-highlight/react/style.js +14 -0
  258. package/es/plugins/link-highlight/react/type.d.ts +16 -0
  259. package/es/plugins/list/command/index.d.ts +3 -0
  260. package/es/plugins/list/command/index.js +3 -0
  261. package/es/plugins/list/index.d.ts +5 -0
  262. package/es/plugins/list/plugin/checkList.d.ts +6 -0
  263. package/es/plugins/list/plugin/checkList.js +140 -0
  264. package/es/plugins/list/plugin/index.d.ts +9 -0
  265. package/es/plugins/list/plugin/index.js +195 -0
  266. package/es/plugins/list/plugin/registry.js +68 -0
  267. package/es/plugins/list/react/ReactListPlugin.d.ts +7 -0
  268. package/es/plugins/list/react/ReactListPlugin.js +21 -0
  269. package/es/plugins/list/react/index.d.ts +2 -0
  270. package/es/plugins/list/react/style.js +123 -0
  271. package/es/plugins/list/react/type.d.ts +7 -0
  272. package/es/plugins/list/utils/index.js +58 -0
  273. package/es/plugins/litexml/command/diffCommand.d.ts +17 -0
  274. package/es/plugins/litexml/command/diffCommand.js +97 -0
  275. package/es/plugins/litexml/command/index.d.ts +38 -0
  276. package/es/plugins/litexml/command/index.js +333 -0
  277. package/es/plugins/litexml/data-source/litexml-data-source.d.ts +65 -0
  278. package/es/plugins/litexml/data-source/litexml-data-source.js +286 -0
  279. package/es/plugins/litexml/index.d.ts +7 -0
  280. package/es/plugins/litexml/node/DiffNode.d.ts +29 -0
  281. package/es/plugins/litexml/node/DiffNode.js +95 -0
  282. package/es/plugins/litexml/plugin/index.d.ts +24 -0
  283. package/es/plugins/litexml/plugin/index.js +100 -0
  284. package/es/plugins/litexml/react/DiffNodeToolbar/index.js +60 -0
  285. package/es/plugins/litexml/react/DiffNodeToolbar/style.js +24 -0
  286. package/es/plugins/litexml/react/hooks/useHasDiffNode.d.ts +7 -0
  287. package/es/plugins/litexml/react/hooks/useHasDiffNode.js +35 -0
  288. package/es/plugins/litexml/react/index.d.ts +6 -0
  289. package/es/plugins/litexml/react/index.js +26 -0
  290. package/es/plugins/litexml/react/style.js +124 -0
  291. package/es/plugins/litexml/service/litexml-service.d.ts +93 -0
  292. package/es/plugins/litexml/service/litexml-service.js +42 -0
  293. package/es/plugins/litexml/utils/index.js +59 -0
  294. package/es/plugins/markdown/command/index.d.ts +14 -0
  295. package/es/plugins/markdown/command/index.js +74 -0
  296. package/es/plugins/markdown/data-source/markdown/parse.d.ts +14 -0
  297. package/es/plugins/markdown/data-source/markdown/parse.js +195 -0
  298. package/es/plugins/markdown/data-source/markdown-data-source.js +148 -0
  299. package/es/plugins/markdown/data-source/markdown-writer-context.js +40 -0
  300. package/es/plugins/markdown/index.d.ts +7 -0
  301. package/es/plugins/markdown/plugin/index.d.ts +22 -0
  302. package/es/plugins/markdown/plugin/index.js +285 -0
  303. package/es/plugins/markdown/react/index.d.ts +6 -0
  304. package/es/plugins/markdown/react/index.js +31 -0
  305. package/es/plugins/markdown/service/shortcut.d.ts +57 -0
  306. package/es/plugins/markdown/service/shortcut.js +101 -0
  307. package/es/plugins/markdown/service/transformers.d.ts +61 -0
  308. package/es/plugins/markdown/service/transformers.js +119 -0
  309. package/es/plugins/markdown/utils/detectLanguage.d.ts +22 -0
  310. package/es/plugins/markdown/utils/detectLanguage.js +251 -0
  311. package/es/plugins/markdown/utils/index.d.ts +11 -0
  312. package/es/plugins/markdown/utils/index.js +143 -0
  313. package/es/plugins/markdown/utils/logger.js +6 -0
  314. package/es/plugins/math/command/index.d.ts +9 -0
  315. package/es/plugins/math/command/index.js +38 -0
  316. package/es/plugins/math/index.d.ts +3 -0
  317. package/es/plugins/math/node/index.d.ts +44 -0
  318. package/es/plugins/math/node/index.js +161 -0
  319. package/es/plugins/math/plugin/index.d.ts +15 -0
  320. package/es/plugins/math/plugin/index.js +119 -0
  321. package/es/plugins/math/react/components/MathEditor.js +198 -0
  322. package/es/plugins/math/react/components/MathEditorContainer.js +101 -0
  323. package/es/plugins/math/react/components/MathEditorContent.js +133 -0
  324. package/es/plugins/math/react/components/MathInline.js +86 -0
  325. package/es/plugins/math/react/components/Placeholder.js +24 -0
  326. package/es/plugins/math/react/index.d.ts +7 -0
  327. package/es/plugins/math/react/index.js +35 -0
  328. package/es/plugins/math/react/style.js +96 -0
  329. package/es/plugins/math/react/type.d.ts +17 -0
  330. package/es/plugins/math/utils/index.js +23 -0
  331. package/es/plugins/mention/command/index.d.ts +10 -0
  332. package/es/plugins/mention/command/index.js +18 -0
  333. package/es/plugins/mention/index.d.ts +5 -0
  334. package/es/plugins/mention/node/MentionNode.d.ts +28 -0
  335. package/es/plugins/mention/node/MentionNode.js +86 -0
  336. package/es/plugins/mention/plugin/index.d.ts +18 -0
  337. package/es/plugins/mention/plugin/index.js +63 -0
  338. package/es/plugins/mention/plugin/register.js +30 -0
  339. package/es/plugins/mention/react/ReactMentionPlugin.d.ts +7 -0
  340. package/es/plugins/mention/react/ReactMentionPlugin.js +36 -0
  341. package/es/plugins/mention/react/components/Mention.js +33 -0
  342. package/es/plugins/mention/react/index.d.ts +2 -0
  343. package/es/plugins/mention/react/style.js +34 -0
  344. package/es/plugins/mention/react/type.d.ts +12 -0
  345. package/es/plugins/slash/index.d.ts +6 -0
  346. package/es/plugins/slash/plugin/index.d.ts +27 -0
  347. package/es/plugins/slash/plugin/index.js +160 -0
  348. package/es/plugins/slash/react/ReactSlashOption.d.ts +7 -0
  349. package/es/plugins/slash/react/ReactSlashOption.js +8 -0
  350. package/es/plugins/slash/react/ReactSlashPlugin.d.ts +7 -0
  351. package/es/plugins/slash/react/ReactSlashPlugin.js +190 -0
  352. package/es/plugins/slash/react/components/DefaultSlashMenu.js +168 -0
  353. package/es/plugins/slash/react/components/SlashMenu.d.ts +11 -0
  354. package/es/plugins/slash/react/components/SlashMenu.js +40 -0
  355. package/es/plugins/slash/react/index.d.ts +4 -0
  356. package/es/plugins/slash/react/type.d.ts +114 -0
  357. package/es/plugins/slash/react/utils.js +18 -0
  358. package/es/plugins/slash/service/i-slash-service.d.ts +50 -0
  359. package/es/plugins/slash/service/i-slash-service.js +55 -0
  360. package/es/plugins/slash/utils/utils.d.ts +1 -0
  361. package/es/plugins/slash/utils/utils.js +97 -0
  362. package/es/plugins/table/command/index.d.ts +17 -0
  363. package/es/plugins/table/command/index.js +57 -0
  364. package/es/plugins/table/index.d.ts +3 -0
  365. package/es/plugins/table/node/index.js +18 -0
  366. package/es/plugins/table/plugin/index.d.ts +8 -0
  367. package/es/plugins/table/plugin/index.js +172 -0
  368. package/es/plugins/table/react/TableActionMenu/ActionMenu.js +220 -0
  369. package/es/plugins/table/react/TableActionMenu/index.js +128 -0
  370. package/es/plugins/table/react/TableActionMenu/style.js +20 -0
  371. package/es/plugins/table/react/TableActionMenu/utils.js +34 -0
  372. package/es/plugins/table/react/TableHoverActions/index.js +147 -0
  373. package/es/plugins/table/react/TableHoverActions/style.js +14 -0
  374. package/es/plugins/table/react/TableHoverActions/utils.js +32 -0
  375. package/es/plugins/table/react/TableResize/index.js +253 -0
  376. package/es/plugins/table/react/TableResize/style.js +16 -0
  377. package/es/plugins/table/react/TableResize/utils.js +9 -0
  378. package/es/plugins/table/react/index.d.ts +7 -0
  379. package/es/plugins/table/react/index.js +49 -0
  380. package/es/plugins/table/react/style.js +63 -0
  381. package/es/plugins/table/react/type.d.ts +8 -0
  382. package/es/plugins/table/utils/index.js +48 -0
  383. package/es/plugins/toolbar/command/index.d.ts +12 -0
  384. package/es/plugins/toolbar/command/index.js +17 -0
  385. package/es/plugins/toolbar/index.d.ts +2 -0
  386. package/es/plugins/toolbar/react/index.d.ts +7 -0
  387. package/es/plugins/toolbar/react/index.js +109 -0
  388. package/es/plugins/toolbar/react/style.js +55 -0
  389. package/es/plugins/toolbar/react/type.d.ts +9 -0
  390. package/es/plugins/toolbar/utils/getDOMRangeRect.js +20 -0
  391. package/es/plugins/toolbar/utils/setFloatingElemPosition.js +50 -0
  392. package/es/plugins/upload/index.d.ts +2 -0
  393. package/es/plugins/upload/plugin/index.d.ts +6 -0
  394. package/es/plugins/upload/plugin/index.js +47 -0
  395. package/es/plugins/upload/service/i-upload-service.d.ts +13 -0
  396. package/es/plugins/upload/service/i-upload-service.js +30 -0
  397. package/es/plugins/upload/utils/index.js +15 -0
  398. package/es/plugins/virtual-block/index.d.ts +2 -0
  399. package/es/plugins/virtual-block/plugin/index.d.ts +8 -0
  400. package/es/plugins/virtual-block/plugin/index.js +19 -0
  401. package/es/plugins/virtual-block/plugin/register.js +150 -0
  402. package/es/plugins/virtual-block/react/ReactVirtualBlock.d.ts +6 -0
  403. package/es/plugins/virtual-block/react/ReactVirtualBlock.js +15 -0
  404. package/es/plugins/virtual-block/react/index.d.ts +1 -0
  405. package/es/react/ChatInput/ChatInput.d.ts +7 -0
  406. package/es/react/ChatInput/ChatInput.js +91 -0
  407. package/es/react/ChatInput/index.d.ts +2 -0
  408. package/es/react/ChatInput/style.js +115 -0
  409. package/es/react/ChatInput/type.d.ts +32 -0
  410. package/es/react/ChatInputActionBar/ChatInputActionBar.d.ts +7 -0
  411. package/es/react/ChatInputActionBar/ChatInputActionBar.js +22 -0
  412. package/es/react/ChatInputActionBar/index.d.ts +2 -0
  413. package/es/react/ChatInputActionBar/style.js +7 -0
  414. package/es/react/ChatInputActionBar/type.d.ts +10 -0
  415. package/es/react/ChatInputActions/ChatInputActions.d.ts +7 -0
  416. package/es/react/ChatInputActions/ChatInputActions.js +65 -0
  417. package/es/react/ChatInputActions/components/ActionItem.js +46 -0
  418. package/es/react/ChatInputActions/components/ActionRender.js +45 -0
  419. package/es/react/ChatInputActions/components/CollapsedActions.js +60 -0
  420. package/es/react/ChatInputActions/components/useDisplayActionCount.js +45 -0
  421. package/es/react/ChatInputActions/index.d.ts +2 -0
  422. package/es/react/ChatInputActions/style.js +20 -0
  423. package/es/react/ChatInputActions/type.d.ts +36 -0
  424. package/es/react/CodeLanguageSelect/CodeLanguageSelect.d.ts +7 -0
  425. package/es/react/CodeLanguageSelect/CodeLanguageSelect.js +67 -0
  426. package/es/react/CodeLanguageSelect/index.d.ts +2 -0
  427. package/es/react/CodeLanguageSelect/style.js +7 -0
  428. package/es/react/CodeLanguageSelect/type.d.ts +6 -0
  429. package/es/react/Editor/Editor.js +108 -0
  430. package/es/react/Editor/index.d.ts +16 -0
  431. package/es/react/Editor/index.js +11 -0
  432. package/es/react/Editor/type.d.ts +64 -0
  433. package/es/react/Editor/utils.d.ts +6 -0
  434. package/es/react/Editor/utils.js +6 -0
  435. package/es/react/EditorProvider/index.d.ts +28 -0
  436. package/es/react/EditorProvider/index.js +18 -0
  437. package/es/react/FloatActions/FloatActions.d.ts +7 -0
  438. package/es/react/FloatActions/FloatActions.js +34 -0
  439. package/es/react/FloatActions/components/ActionItem.js +46 -0
  440. package/es/react/FloatActions/components/ActionRender.js +45 -0
  441. package/es/react/FloatActions/components/CollapsedActions.js +60 -0
  442. package/es/react/FloatActions/index.d.ts +2 -0
  443. package/es/react/FloatActions/style.js +19 -0
  444. package/es/react/FloatActions/type.d.ts +33 -0
  445. package/es/react/FloatMenu/FloatMenu.d.ts +7 -0
  446. package/es/react/FloatMenu/FloatMenu.js +32 -0
  447. package/es/react/FloatMenu/index.d.ts +2 -0
  448. package/es/react/FloatMenu/style.js +28 -0
  449. package/es/react/FloatMenu/type.d.ts +25 -0
  450. package/es/react/SendButton/SendButton.d.ts +7 -0
  451. package/es/react/SendButton/SendButton.js +107 -0
  452. package/es/react/SendButton/components/SendIcon.js +23 -0
  453. package/es/react/SendButton/components/StopIcon.js +56 -0
  454. package/es/react/SendButton/index.d.ts +2 -0
  455. package/es/react/SendButton/style.js +68 -0
  456. package/es/react/SendButton/type.d.ts +12 -0
  457. package/es/react/SlashMenu/SlashMenu.d.ts +7 -0
  458. package/es/react/SlashMenu/SlashMenu.js +40 -0
  459. package/es/react/SlashMenu/index.d.ts +2 -0
  460. package/es/react/SlashMenu/type.d.ts +17 -0
  461. package/es/react/hooks/useEditor.d.ts +5 -0
  462. package/es/react/hooks/useEditor.js +8 -0
  463. package/es/react/hooks/useEditorState/index.d.ts +71 -0
  464. package/es/react/hooks/useEditorState/index.js +347 -0
  465. package/es/react/hooks/useEditorState/utils.js +28 -0
  466. package/es/react/hooks/useSize.js +61 -0
  467. package/es/react.d.ts +22 -334
  468. package/es/react.js +13 -1573
  469. package/es/renderer/LexicalDiff.d.ts +41 -0
  470. package/es/renderer/LexicalDiff.js +96 -0
  471. package/es/renderer/LexicalRenderer.d.ts +16 -0
  472. package/es/renderer/LexicalRenderer.js +48 -0
  473. package/es/renderer/diff/compute.js +396 -0
  474. package/es/renderer/diff/style.d.ts +4 -0
  475. package/es/renderer/diff/style.js +104 -0
  476. package/es/renderer/diff/types.d.ts +32 -0
  477. package/es/renderer/engine/render-builtin-node.js +196 -0
  478. package/es/renderer/engine/render-text-node.js +33 -0
  479. package/es/renderer/engine/render-tree.js +35 -0
  480. package/es/renderer/engine/shiki.d.ts +4 -0
  481. package/es/renderer/engine/shiki.js +24 -0
  482. package/es/renderer/engine/utils.js +16 -0
  483. package/es/renderer/nodes/index.d.ts +6 -0
  484. package/es/renderer/nodes/index.js +44 -0
  485. package/es/renderer/renderers/codeblock.js +21 -0
  486. package/es/renderer/renderers/file.js +29 -0
  487. package/es/renderer/renderers/horizontalrule.js +29 -0
  488. package/es/renderer/renderers/image.js +35 -0
  489. package/es/renderer/renderers/index.d.ts +6 -0
  490. package/es/renderer/renderers/index.js +21 -0
  491. package/es/renderer/renderers/math.js +19 -0
  492. package/es/renderer/renderers/mention.js +15 -0
  493. package/es/renderer/renderers/mermaid.js +17 -0
  494. package/es/renderer/style.js +52 -0
  495. package/es/renderer/types.d.ts +29 -0
  496. package/es/renderer.d.ts +8 -114
  497. package/es/renderer.js +5 -1153
  498. package/es/types/hotkey.d.ts +76 -0
  499. package/es/types/hotkey.js +65 -0
  500. package/es/types/index.d.ts +2 -0
  501. package/es/types/kernel.d.ts +359 -0
  502. package/es/types/locale.d.ts +11 -0
  503. package/es/utils/cx.js +4 -0
  504. package/es/utils/debug.d.ts +425 -0
  505. package/es/{debug-CIvbNHJu.js → utils/debug.js} +3 -35
  506. package/es/utils/hotkey/isHotkeyMatch.js +17 -0
  507. package/es/utils/hotkey/parseHotkeys.js +53 -0
  508. package/es/utils/hotkey/registerHotkey.d.ts +18 -0
  509. package/es/utils/hotkey/registerHotkey.js +35 -0
  510. package/es/utils/scrollIntoView.d.ts +8 -0
  511. package/es/utils/scrollIntoView.js +29 -0
  512. package/es/utils/updatePosition.js +26 -0
  513. package/es/utils/url.d.ts +18 -0
  514. package/es/utils/url.js +34 -0
  515. package/package.json +4 -1
  516. package/es/ReactSlashPlugin-BiVy_Iwf.js +0 -23072
  517. package/es/codemirror-3POv7f__.js +0 -923
  518. package/es/index-DHGp94p0.d.ts +0 -916
  519. package/es/style-DADgHVA1.js +0 -2889
  520. package/es/style-DMdPzCo-.js +0 -999
@@ -0,0 +1,333 @@
1
+ import { createDebugLogger, init_debug } from "../../../utils/debug.js";
2
+ import { $closest } from "../../../editor-kernel/utils.js";
3
+ import { $createDiffNode, DiffNode } from "../node/DiffNode.js";
4
+ import { $cloneNode, $parseSerializedNodeImpl, charToId } from "../utils/index.js";
5
+ import { $createParagraphNode, $getNodeByKey, $getRoot, $insertNodes, $isElementNode, COMMAND_PRIORITY_EDITOR, createCommand } from "lexical";
6
+ import { mergeRegister } from "@lexical/utils";
7
+ import { $isListItemNode } from "@lexical/list";
8
+ //#region src/plugins/litexml/command/index.ts
9
+ init_debug();
10
+ const logger = createDebugLogger("plugin", "litexml");
11
+ function toArrayXml(litexml) {
12
+ return Array.isArray(litexml) ? litexml : [litexml];
13
+ }
14
+ function tryParseChild(child, editor) {
15
+ try {
16
+ const oldNode = $getNodeByKey(child.id);
17
+ return {
18
+ newNode: $parseSerializedNodeImpl(child, editor),
19
+ oldNode
20
+ };
21
+ } catch (error) {
22
+ logger.error("❌ Error parsing child node:", error);
23
+ return {
24
+ newNode: null,
25
+ oldNode: null
26
+ };
27
+ }
28
+ }
29
+ function handleReplaceForApplyDelay(oldNode, newNode, modifyBlockNodes, diffNodeMap, editor) {
30
+ const oldBlock = $closest(oldNode, (node) => node.isInline() === false);
31
+ if (!oldBlock) throw new Error("Old block node not found for diffing.");
32
+ if ($closest(oldNode, (node) => node.getType() === DiffNode.getType())) {
33
+ oldNode.replace(newNode, false);
34
+ return;
35
+ }
36
+ if (oldNode === oldBlock) {
37
+ const diffNode = $createDiffNode("modify");
38
+ diffNode.append($cloneNode(oldBlock, editor), newNode);
39
+ oldNode.replace(diffNode, false);
40
+ } else {
41
+ if (!modifyBlockNodes.has(oldBlock.getKey())) {
42
+ modifyBlockNodes.add(oldBlock.getKey());
43
+ const diffNode = $createDiffNode("modify");
44
+ diffNode.append($cloneNode(oldBlock, editor));
45
+ diffNodeMap.set(oldBlock.getKey(), diffNode);
46
+ }
47
+ oldNode.replace(newNode, false);
48
+ }
49
+ }
50
+ function finalizeModifyBlocks(modifyBlockNodes, diffNodeMap, editor) {
51
+ for (const blockNodeKey of modifyBlockNodes) {
52
+ const blockNode = $getNodeByKey(blockNodeKey);
53
+ const diffNode = diffNodeMap.get(blockNodeKey);
54
+ if (diffNode && blockNode) if (blockNode.getType() === "listitem" && $isElementNode(blockNode)) {
55
+ const newDiffNode = $createDiffNode("listItemModify");
56
+ const firstChild = diffNode.getFirstChild();
57
+ if (firstChild && $isElementNode(firstChild)) newDiffNode.append(firstChild);
58
+ const children = blockNode.getChildren();
59
+ const p = $createParagraphNode();
60
+ children.forEach((child) => {
61
+ child.remove();
62
+ p.append(child);
63
+ });
64
+ newDiffNode.append(p);
65
+ blockNode.append(newDiffNode);
66
+ continue;
67
+ } else {
68
+ diffNode.append($cloneNode(blockNode, editor));
69
+ blockNode.replace(diffNode, false);
70
+ }
71
+ }
72
+ }
73
+ /**
74
+ * Wrap a block-level change with a `modify` diff: clone the old block, run the
75
+ * provided changeFn (which should mutate nodes inside the block), then clone
76
+ * the new block and replace it with the diff node. Useful for inline->block
77
+ * transitions where we want to show a modify diff.
78
+ */
79
+ function wrapBlockModify(oldBlock, editor, changeFn) {
80
+ if ($isListItemNode(oldBlock)) {
81
+ const diffNode = $createDiffNode("listItemModify");
82
+ const p = $createParagraphNode();
83
+ oldBlock.getChildren().forEach((child) => {
84
+ p.append($cloneNode(child, editor));
85
+ });
86
+ changeFn();
87
+ diffNode.append(p);
88
+ const pNew = $createParagraphNode();
89
+ oldBlock.getChildren().forEach((child) => {
90
+ pNew.append(child);
91
+ });
92
+ diffNode.append(pNew);
93
+ oldBlock.append(diffNode);
94
+ return;
95
+ }
96
+ const diffNode = $createDiffNode("modify");
97
+ diffNode.append($cloneNode(oldBlock, editor));
98
+ changeFn();
99
+ const newBlock = $getNodeByKey(oldBlock.getKey());
100
+ if (!newBlock) throw new Error("New block node not found for modify wrapper.");
101
+ diffNode.append($cloneNode(newBlock, editor));
102
+ newBlock.replace(diffNode, false);
103
+ }
104
+ const LITEXML_MODIFY_COMMAND = createCommand("LITEXML_MODIFY_COMMAND");
105
+ const LITEXML_APPLY_COMMAND = createCommand("LITEXML_APPLY_COMMAND");
106
+ const LITEXML_REMOVE_COMMAND = createCommand("LITEXML_REMOVE_COMMAND");
107
+ const LITEXML_INSERT_COMMAND = createCommand("LITEXML_INSERT_COMMAND");
108
+ function registerLiteXMLCommand(editor, dataSource) {
109
+ return mergeRegister(editor.registerCommand(LITEXML_MODIFY_COMMAND, (payload) => {
110
+ const resultPayload = payload.reduce((acc, cur) => {
111
+ if (cur.action === "insert") acc.unshift(cur);
112
+ else acc.push(cur);
113
+ return acc;
114
+ }, []);
115
+ try {
116
+ resultPayload.forEach((item) => {
117
+ const { action } = item;
118
+ switch (action) {
119
+ case "modify": {
120
+ const { litexml } = item;
121
+ handleModify(editor, dataSource, toArrayXml(litexml), true);
122
+ break;
123
+ }
124
+ case "remove": {
125
+ const { id } = item;
126
+ handleRemove(editor, charToId(id), true);
127
+ break;
128
+ }
129
+ case "insert":
130
+ handleInsert(editor, {
131
+ ...item,
132
+ delay: true
133
+ }, dataSource);
134
+ break;
135
+ default: logger.warn(`⚠️ Unknown action type: ${action}`);
136
+ }
137
+ });
138
+ return false;
139
+ } catch (error) {
140
+ logger.error("❌ Error processing LITEXML_MODIFY_COMMAND:", error);
141
+ return false;
142
+ }
143
+ }, COMMAND_PRIORITY_EDITOR), editor.registerCommand(LITEXML_APPLY_COMMAND, (payload) => {
144
+ const { litexml, delay } = payload;
145
+ handleModify(editor, dataSource, toArrayXml(litexml), delay);
146
+ return false;
147
+ }, COMMAND_PRIORITY_EDITOR), editor.registerCommand(LITEXML_REMOVE_COMMAND, (payload) => {
148
+ const { id, delay } = payload;
149
+ handleRemove(editor, charToId(id), delay);
150
+ return false;
151
+ }, COMMAND_PRIORITY_EDITOR), editor.registerCommand(LITEXML_INSERT_COMMAND, (payload) => {
152
+ handleInsert(editor, payload, dataSource);
153
+ return false;
154
+ }, COMMAND_PRIORITY_EDITOR));
155
+ }
156
+ function handleModify(editor, dataSource, arrayXml, delay) {
157
+ if (delay) editor.update(() => {
158
+ const modifyBlockNodes = /* @__PURE__ */ new Set();
159
+ const diffNodeMap = /* @__PURE__ */ new Map();
160
+ arrayXml.forEach((xml) => {
161
+ dataSource.readLiteXMLToInode(xml).root.children.forEach((child) => {
162
+ try {
163
+ const { oldNode, newNode } = tryParseChild(child, editor);
164
+ if (oldNode && newNode) handleReplaceForApplyDelay(oldNode, newNode, modifyBlockNodes, diffNodeMap, editor);
165
+ else logger.warn(`⚠️ Node with key ${child.id} not found for diffing.`);
166
+ } catch (error) {
167
+ logger.error("❌ Error replacing node:", error);
168
+ }
169
+ });
170
+ });
171
+ finalizeModifyBlocks(modifyBlockNodes, diffNodeMap, editor);
172
+ });
173
+ else editor.update(() => {
174
+ arrayXml.forEach((xml) => {
175
+ const inode = dataSource.readLiteXMLToInode(xml);
176
+ let prevNode = null;
177
+ inode.root.children.forEach((child) => {
178
+ try {
179
+ const { oldNode, newNode } = tryParseChild(child, editor);
180
+ if (oldNode && newNode) prevNode = oldNode.replace(newNode, false);
181
+ else if (newNode) if (prevNode) if (!newNode.isInline()) {
182
+ const prevBlock = $closest(prevNode, (node) => node.isInline() === false);
183
+ if (prevBlock) prevNode = prevBlock.insertAfter(newNode);
184
+ else {
185
+ $insertNodes([newNode]);
186
+ prevNode = newNode;
187
+ }
188
+ } else prevNode = prevNode.insertAfter(newNode);
189
+ else $insertNodes([newNode]);
190
+ } catch (error) {
191
+ logger.error("❌ Error replacing node:", error);
192
+ }
193
+ });
194
+ });
195
+ });
196
+ }
197
+ function handleRemove(editor, key, delay) {
198
+ editor.update(() => {
199
+ const node = $getNodeByKey(key);
200
+ if (!node) return;
201
+ if (!delay) {
202
+ node.remove();
203
+ return;
204
+ }
205
+ if (node.isInline() === false) {
206
+ const originDiffNode = $closest(node, (node) => node.getType() === DiffNode.getType());
207
+ if (originDiffNode) {
208
+ switch (originDiffNode.diffType) {
209
+ case "add":
210
+ originDiffNode.remove();
211
+ return;
212
+ case "modify": {
213
+ const children = originDiffNode.getChildren();
214
+ const newDiff = $createDiffNode("remove");
215
+ newDiff.append(children[0]);
216
+ originDiffNode.replace(newDiff, false);
217
+ return;
218
+ }
219
+ case "listItemModify": {
220
+ const children = originDiffNode.getChildren();
221
+ originDiffNode.replace(children[0], false).selectEnd();
222
+ return;
223
+ }
224
+ case "remove":
225
+ case "unchanged": break;
226
+ }
227
+ return;
228
+ }
229
+ if ($isListItemNode(node)) {
230
+ const diffNode = $createDiffNode("listItemRemove");
231
+ node.getChildren().forEach((child) => {
232
+ diffNode.append($cloneNode(child, editor));
233
+ });
234
+ node.clear();
235
+ node.append(diffNode);
236
+ } else {
237
+ const diffNode = $createDiffNode("remove");
238
+ diffNode.append($cloneNode(node, editor));
239
+ node.replace(diffNode, false);
240
+ }
241
+ } else {
242
+ const oldBlock = $closest(node, (node) => node.isInline() === false);
243
+ if (!oldBlock) throw new Error("Old block node not found for removal.");
244
+ if ($closest(node, (node) => node.getType() === DiffNode.getType())) {
245
+ node.remove();
246
+ return;
247
+ }
248
+ wrapBlockModify(oldBlock, editor, () => {
249
+ node.remove();
250
+ });
251
+ }
252
+ });
253
+ }
254
+ function handleInsert(editor, payload, dataSource) {
255
+ const { litexml, delay } = payload;
256
+ const isBefore = "beforeId" in payload;
257
+ const inode = dataSource.readLiteXMLToInode(litexml);
258
+ editor.update(() => {
259
+ try {
260
+ let referenceNode = null;
261
+ if (isBefore) if (payload.beforeId === "root") referenceNode = $getRoot().getFirstChild();
262
+ else referenceNode = $getNodeByKey(charToId(payload.beforeId));
263
+ else if (payload.afterId === "root") referenceNode = $getRoot().getLastChild();
264
+ else referenceNode = $getNodeByKey(charToId(payload.afterId));
265
+ if (!referenceNode) throw new Error("Reference node not found for insertion.");
266
+ const newNodes = inode.root.children.map((child) => $parseSerializedNodeImpl(child, editor));
267
+ if (!delay) {
268
+ if (isBefore) newNodes.reverse().forEach((node) => {
269
+ referenceNode = referenceNode.insertBefore(node);
270
+ });
271
+ else newNodes.forEach((node) => {
272
+ if (referenceNode) referenceNode = referenceNode.insertAfter(node);
273
+ });
274
+ return;
275
+ }
276
+ if (isBefore) if (referenceNode.isInline() === false) {
277
+ const originDiffNode = $closest(referenceNode, (node) => node.getType() === DiffNode.getType());
278
+ if (originDiffNode) referenceNode = originDiffNode;
279
+ newNodes.map((node) => {
280
+ const diffNode = $createDiffNode("add");
281
+ diffNode.append(node);
282
+ return diffNode;
283
+ }).reverse().forEach((diffNode) => {
284
+ if (referenceNode) referenceNode = referenceNode.insertBefore(diffNode);
285
+ });
286
+ } else {
287
+ const refBlock = $closest(referenceNode, (node) => node.isInline() === false);
288
+ if (!refBlock) throw new Error("Reference block node not found for insertion.");
289
+ if ($closest(referenceNode, (node) => node.getType() === DiffNode.getType())) newNodes.forEach((node) => {
290
+ if (referenceNode) referenceNode = referenceNode.insertBefore(node);
291
+ });
292
+ else wrapBlockModify(refBlock, editor, () => {
293
+ newNodes.forEach((node) => {
294
+ if (referenceNode) referenceNode = referenceNode.insertBefore(node);
295
+ });
296
+ });
297
+ }
298
+ else if (referenceNode.isInline() === false) {
299
+ const originDiffNode = $closest(referenceNode, (node) => node.getType() === DiffNode.getType());
300
+ if (originDiffNode) referenceNode = originDiffNode;
301
+ newNodes.forEach((node) => {
302
+ if (referenceNode) if ($isListItemNode(node)) {
303
+ const diffNode = $createDiffNode("listItemAdd");
304
+ node.getChildren().forEach((child) => {
305
+ diffNode.append(child);
306
+ });
307
+ node.append(diffNode);
308
+ referenceNode = referenceNode.insertAfter(node);
309
+ } else {
310
+ const diffNode = $createDiffNode("add");
311
+ diffNode.append(node);
312
+ referenceNode = referenceNode.insertAfter(diffNode);
313
+ }
314
+ });
315
+ } else {
316
+ const refBlock = $closest(referenceNode, (node) => node.isInline() === false);
317
+ if (!refBlock) throw new Error("Reference block node not found for insertion.");
318
+ if ($closest(referenceNode, (node) => node.getType() === DiffNode.getType())) newNodes.forEach((node) => {
319
+ if (referenceNode) referenceNode = referenceNode.insertAfter(node);
320
+ });
321
+ else wrapBlockModify(refBlock, editor, () => {
322
+ newNodes.forEach((node) => {
323
+ if (referenceNode) referenceNode = referenceNode.insertAfter(node);
324
+ });
325
+ });
326
+ }
327
+ } catch (error) {
328
+ logger.error("❌ Error inserting node:", error);
329
+ }
330
+ });
331
+ }
332
+ //#endregion
333
+ export { LITEXML_APPLY_COMMAND, LITEXML_INSERT_COMMAND, LITEXML_MODIFY_COMMAND, LITEXML_REMOVE_COMMAND, registerLiteXMLCommand };
@@ -0,0 +1,65 @@
1
+ import { DataSource, IWriteOptions } from "../../../editor-kernel/data-source.js";
2
+ import { IServiceID } from "../../../types/kernel.js";
3
+ import { ILitexmlService } from "../service/litexml-service.js";
4
+ import { LexicalEditor } from "lexical";
5
+
6
+ //#region src/plugins/litexml/data-source/litexml-data-source.d.ts
7
+ /**
8
+ * LitexmlDataSource - Handles conversion between Lexical editor state and XML format
9
+ * Provides read (parse XML to Lexical) and write (export Lexical to XML) capabilities
10
+ */
11
+ declare class LitexmlDataSource extends DataSource {
12
+ protected dataType: string;
13
+ protected getService?: (<T>(serviceId: IServiceID<T>) => T | null) | undefined;
14
+ private litexmlService;
15
+ private ctx;
16
+ constructor(dataType?: string, getService?: (<T>(serviceId: IServiceID<T>) => T | null) | undefined, service?: ILitexmlService);
17
+ readLiteXMLToInode(litexml: string): any;
18
+ /**
19
+ * Parse XML string and set it to the editor
20
+ * @param editor - The Lexical editor instance
21
+ * @param data - XML string to parse
22
+ */
23
+ read(editor: LexicalEditor, data: string): void;
24
+ /**
25
+ * Export editor content to XML format
26
+ * @param editor - The Lexical editor instance
27
+ * @param options - Write options (e.g., selection flag)
28
+ * @returns XML string representation of the editor content
29
+ */
30
+ write(editor: LexicalEditor, options?: IWriteOptions): any;
31
+ /**
32
+ * Parse XML string using browser's built-in parser
33
+ */
34
+ private parseXMLString;
35
+ /**
36
+ * Convert XML document to Lexical node structure
37
+ */
38
+ private xmlToLexical;
39
+ /**
40
+ * Recursively process XML elements and convert to Lexical nodes
41
+ */
42
+ private processXMLElement;
43
+ /**
44
+ * Process XML element's children
45
+ */
46
+ private processXMLChildren;
47
+ /**
48
+ * Convert Lexical node structure to XML string
49
+ */
50
+ private lexicalToXML;
51
+ /**
52
+ * Recursively convert Lexical nodes to XML elements
53
+ */
54
+ private nodesToXML;
55
+ /**
56
+ * Build XML attribute string from attributes object
57
+ */
58
+ private buildXMLAttributes;
59
+ /**
60
+ * Escape XML special characters
61
+ */
62
+ private escapeXML;
63
+ }
64
+ //#endregion
65
+ export { LitexmlDataSource };
@@ -0,0 +1,286 @@
1
+ import { createDebugLogger, init_debug } from "../../../utils/debug.js";
2
+ import { INodeHelper, init_helper } from "../../../editor-kernel/inode/helper.js";
3
+ import DataSource from "../../../editor-kernel/data-source.js";
4
+ import { $parseSerializedNodeImpl, charToId, idToChar } from "../utils/index.js";
5
+ import { INodeService } from "../../inode/service/index.js";
6
+ import { LitexmlService } from "../service/litexml-service.js";
7
+ import { $getRoot, $getSelection, $isElementNode, $isRangeSelection } from "lexical";
8
+ import { DOMParser } from "@xmldom/xmldom";
9
+ //#region src/plugins/litexml/data-source/litexml-data-source.ts
10
+ init_helper();
11
+ init_debug();
12
+ const logger = createDebugLogger("plugin", "litexml");
13
+ var IXmlWriterContext = class {
14
+ createXmlNode(tagName, attributes, textContent) {
15
+ return {
16
+ attributes: attributes || {},
17
+ children: [],
18
+ tagName,
19
+ textContent
20
+ };
21
+ }
22
+ };
23
+ /**
24
+ * LitexmlDataSource - Handles conversion between Lexical editor state and XML format
25
+ * Provides read (parse XML to Lexical) and write (export Lexical to XML) capabilities
26
+ */
27
+ var LitexmlDataSource = class extends DataSource {
28
+ constructor(dataType = "litexml", getService, service) {
29
+ super(dataType);
30
+ this.dataType = dataType;
31
+ this.getService = getService;
32
+ this.ctx = new IXmlWriterContext();
33
+ this.litexmlService = service || new LitexmlService();
34
+ }
35
+ readLiteXMLToInode(litexml) {
36
+ if (typeof litexml !== "string") throw new Error("Invalid data type. Expected string, got " + typeof litexml);
37
+ const xml = this.parseXMLString(litexml);
38
+ const inode = this.xmlToLexical(xml);
39
+ this.getService?.(INodeService)?.processNodeTree(inode);
40
+ logger.debug("Parsed XML to Lexical State:", inode);
41
+ return inode;
42
+ }
43
+ /**
44
+ * Parse XML string and set it to the editor
45
+ * @param editor - The Lexical editor instance
46
+ * @param data - XML string to parse
47
+ */
48
+ read(editor, data) {
49
+ try {
50
+ const inode = this.readLiteXMLToInode(data);
51
+ const newState = editor.parseEditorState({ root: INodeHelper.createRootNode() }, (state) => {
52
+ try {
53
+ const root = $parseSerializedNodeImpl(inode.root, editor, true, state);
54
+ state._nodeMap.set(root.getKey(), root);
55
+ } catch (error) {
56
+ console.error(error);
57
+ }
58
+ });
59
+ editor.setEditorState(newState);
60
+ } catch (error) {
61
+ logger.error("Failed to parse XML:", error);
62
+ throw error;
63
+ }
64
+ }
65
+ /**
66
+ * Export editor content to XML format
67
+ * @param editor - The Lexical editor instance
68
+ * @param options - Write options (e.g., selection flag)
69
+ * @returns XML string representation of the editor content
70
+ */
71
+ write(editor, options) {
72
+ try {
73
+ if (options?.selection) return editor.getEditorState().read(() => {
74
+ const selection = $getSelection();
75
+ if (!selection) return null;
76
+ if ($isRangeSelection(selection)) {
77
+ const selectedNodes = selection.getNodes();
78
+ const rootNode = INodeHelper.createRootNode();
79
+ if (selectedNodes.some((node) => node.isInline())) {
80
+ const p = INodeHelper.createParagraph();
81
+ INodeHelper.appendChild(p, ...selectedNodes.map((node) => node.exportJSON()));
82
+ INodeHelper.appendChild(rootNode, p);
83
+ } else INodeHelper.appendChild(rootNode, ...selectedNodes.map((node) => node.exportJSON()));
84
+ return editor.parseEditorState({ root: rootNode }).read(() => {
85
+ const lexicalRootNode = $getRoot();
86
+ return this.lexicalToXML(lexicalRootNode);
87
+ });
88
+ }
89
+ return null;
90
+ });
91
+ return editor.getEditorState().read(() => {
92
+ const rootNode = $getRoot();
93
+ return this.lexicalToXML(rootNode);
94
+ });
95
+ } catch (error) {
96
+ logger.error("Failed to export to XML:", error);
97
+ throw error;
98
+ }
99
+ }
100
+ /**
101
+ * Parse XML string using browser's built-in parser
102
+ */
103
+ parseXMLString(xmlString) {
104
+ const doc = new DOMParser().parseFromString(xmlString, "text/xml");
105
+ if (doc.getElementsByTagName("parsererror").length > 0) throw new Error("Invalid XML: " + xmlString);
106
+ return doc;
107
+ }
108
+ /**
109
+ * Convert XML document to Lexical node structure
110
+ */
111
+ xmlToLexical(xml) {
112
+ const rootNode = INodeHelper.createRootNode();
113
+ const xmlRoot = xml.documentElement;
114
+ if (xmlRoot) this.processXMLElement(xmlRoot, rootNode);
115
+ return { root: rootNode };
116
+ }
117
+ /**
118
+ * Recursively process XML elements and convert to Lexical nodes
119
+ */
120
+ processXMLElement(xmlElement, parentNode) {
121
+ const tagName = xmlElement.tagName.toLowerCase();
122
+ const customReaders = this.litexmlService.getXMLReaders();
123
+ if (customReaders[tagName]) {
124
+ const readerOrReaders = customReaders[tagName];
125
+ const readers = Array.isArray(readerOrReaders) ? readerOrReaders : [readerOrReaders];
126
+ for (const reader of readers) {
127
+ const children = [];
128
+ this.processXMLChildren(xmlElement, { children });
129
+ const result = reader(xmlElement, children);
130
+ if (result !== false) {
131
+ if (Array.isArray(result)) {
132
+ if (result.length > 0) {
133
+ const attrId = xmlElement.getAttribute("id");
134
+ result[0].id = attrId ? charToId(attrId) : void 0;
135
+ }
136
+ INodeHelper.appendChild(parentNode, ...result);
137
+ } else if (result) {
138
+ const attrId = xmlElement.getAttribute("id");
139
+ result.id = attrId ? charToId(attrId) : void 0;
140
+ INodeHelper.appendChild(parentNode, result);
141
+ }
142
+ return;
143
+ }
144
+ }
145
+ }
146
+ switch (tagName) {
147
+ case "p":
148
+ case "paragraph": {
149
+ const paragraph = INodeHelper.createParagraph();
150
+ this.processXMLChildren(xmlElement, paragraph);
151
+ INodeHelper.appendChild(parentNode, paragraph);
152
+ break;
153
+ }
154
+ case "h1":
155
+ case "h2":
156
+ case "h3":
157
+ case "h4":
158
+ case "h5":
159
+ case "h6": {
160
+ const level = parseInt(tagName.charAt(1));
161
+ const heading = INodeHelper.createElementNode("heading", {
162
+ children: [],
163
+ tag: `h${level}`
164
+ });
165
+ this.processXMLChildren(xmlElement, heading);
166
+ INodeHelper.appendChild(parentNode, heading);
167
+ break;
168
+ }
169
+ case "ul":
170
+ case "ol":
171
+ xmlElement.querySelectorAll(":scope > li").forEach((li) => {
172
+ const listItem = INodeHelper.createElementNode("listitem", {
173
+ children: [],
174
+ value: 1
175
+ });
176
+ this.processXMLChildren(li, listItem);
177
+ INodeHelper.appendChild(parentNode, listItem);
178
+ });
179
+ break;
180
+ case "blockquote": {
181
+ const quote = INodeHelper.createElementNode("quote", { children: [] });
182
+ this.processXMLChildren(xmlElement, quote);
183
+ INodeHelper.appendChild(parentNode, quote);
184
+ break;
185
+ }
186
+ case "code": {
187
+ const codeNode = INodeHelper.createElementNode("codeInline", { children: [INodeHelper.createTextNode(xmlElement.textContent || "")] });
188
+ INodeHelper.appendChild(parentNode, codeNode);
189
+ break;
190
+ }
191
+ case "text": {
192
+ const textContent = xmlElement.textContent || "";
193
+ if (textContent) {
194
+ const textNode = INodeHelper.createTextNode(textContent);
195
+ INodeHelper.appendChild(parentNode, textNode);
196
+ }
197
+ break;
198
+ }
199
+ default: this.processXMLChildren(xmlElement, parentNode);
200
+ }
201
+ }
202
+ /**
203
+ * Process XML element's children
204
+ */
205
+ processXMLChildren(xmlElement, parentNode) {
206
+ Array.from(xmlElement.childNodes).forEach((child) => {
207
+ if (child.nodeType === 1) this.processXMLElement(child, parentNode);
208
+ else if (child.nodeType === 3) {
209
+ const text = child.textContent || "";
210
+ if (text.trim()) {
211
+ const textNode = INodeHelper.createTextNode(text);
212
+ INodeHelper.appendChild(parentNode, textNode);
213
+ }
214
+ }
215
+ });
216
+ }
217
+ /**
218
+ * Convert Lexical node structure to XML string
219
+ */
220
+ lexicalToXML(rootNode) {
221
+ const xmlLines = ["<?xml version=\"1.0\" encoding=\"UTF-8\"?>"];
222
+ xmlLines.push("<root>");
223
+ rootNode.getChildren().forEach((child) => {
224
+ this.nodesToXML(child, xmlLines);
225
+ });
226
+ xmlLines.push("</root>");
227
+ return xmlLines.join("\n");
228
+ }
229
+ /**
230
+ * Recursively convert Lexical nodes to XML elements
231
+ */
232
+ nodesToXML(node, lines, indent = 1) {
233
+ const indentStr = " ".repeat(indent * 2);
234
+ const type = node.getType();
235
+ const customWriters = this.litexmlService.getXMLWriters();
236
+ const childLines = [];
237
+ if (customWriters[type]) {
238
+ const writerOrWriters = customWriters[type];
239
+ const writers = Array.isArray(writerOrWriters) ? writerOrWriters : [writerOrWriters];
240
+ for (const writer of writers) {
241
+ const handled = writer(node, this.ctx, indent, this.nodesToXML.bind(this));
242
+ if (handled) {
243
+ if ("lines" in handled) {
244
+ lines.push(...handled.lines);
245
+ return;
246
+ }
247
+ const attrs = this.buildXMLAttributes({
248
+ id: idToChar(node.getKey()),
249
+ ...handled.attributes
250
+ });
251
+ const openTag = `${indentStr}<${handled.tagName}${attrs}>`;
252
+ const closeTag = `</${handled.tagName}>`;
253
+ if (handled.textContent) lines.push(`${openTag}${handled.textContent}${closeTag}`);
254
+ else if ($isElementNode(node)) {
255
+ node.getChildren().forEach((child) => {
256
+ this.nodesToXML(child, childLines, indent + 1);
257
+ });
258
+ lines.push(openTag, ...childLines, `${indentStr}${closeTag}`);
259
+ } else lines.push(openTag, `${indentStr}${closeTag}`);
260
+ return;
261
+ }
262
+ }
263
+ }
264
+ if ($isElementNode(node)) node.getChildren().forEach((child) => {
265
+ this.nodesToXML(child, childLines, indent);
266
+ });
267
+ lines.push(...childLines);
268
+ }
269
+ /**
270
+ * Build XML attribute string from attributes object
271
+ */
272
+ buildXMLAttributes(attributes) {
273
+ if (!attributes || typeof attributes !== "object") return "";
274
+ return Object.entries(attributes).filter(([, value]) => value !== void 0 && value !== null && value !== "").map(([key, value]) => {
275
+ return ` ${key}="${this.escapeXML(String(value))}"`;
276
+ }).join("");
277
+ }
278
+ /**
279
+ * Escape XML special characters
280
+ */
281
+ escapeXML(text) {
282
+ return text.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\"", "&quot;").replaceAll("'", "&apos;");
283
+ }
284
+ };
285
+ //#endregion
286
+ export { LitexmlDataSource as default };
@@ -0,0 +1,7 @@
1
+ import { ILitexmlService, LitexmlService, XMLReaderFunc, XMLReaderRecord, XMLWriterFunc, XMLWriterRecord } from "./service/litexml-service.js";
2
+ import { LitexmlDataSource } from "./data-source/litexml-data-source.js";
3
+ import { LITEXML_APPLY_COMMAND, LITEXML_INSERT_COMMAND, LITEXML_MODIFY_COMMAND, LITEXML_REMOVE_COMMAND } from "./command/index.js";
4
+ import { DiffAction, LITEXML_DIFFNODE_ALL_COMMAND, LITEXML_DIFFNODE_COMMAND } from "./command/diffCommand.js";
5
+ import { LitexmlPlugin, LitexmlPluginOptions } from "./plugin/index.js";
6
+ import { ReactLiteXmlPlugin } from "./react/index.js";
7
+ import { useHasDiffNode } from "./react/hooks/useHasDiffNode.js";