@lobehub/editor 4.15.0 → 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 (521) 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.d.ts +20 -1
  66. package/es/headless.js +219 -20307
  67. package/es/index.d.ts +112 -3059
  68. package/es/index.js +100 -8484
  69. package/es/locale/index.d.ts +61 -0
  70. package/es/locale/index.js +62 -0
  71. package/es/node_modules/.pnpm/@types_mdast@4.0.4/node_modules/@types/mdast/index.d.ts +953 -0
  72. package/es/node_modules/.pnpm/@types_unist@3.0.3/node_modules/@types/unist/index.d.ts +83 -0
  73. package/es/plugins/auto-complete/index.d.ts +2 -0
  74. package/es/plugins/auto-complete/node/placeholderNode.js +89 -0
  75. package/es/plugins/auto-complete/plugin/index.d.ts +31 -0
  76. package/es/plugins/auto-complete/plugin/index.js +395 -0
  77. package/es/plugins/auto-complete/react/ReactAutoCompletePlugin.d.ts +7 -0
  78. package/es/plugins/auto-complete/react/ReactAutoCompletePlugin.js +60 -0
  79. package/es/plugins/auto-complete/react/index.d.ts +1 -0
  80. package/es/plugins/auto-complete/react/style.js +12 -0
  81. package/es/plugins/auto-complete/react/type.d.ts +25 -0
  82. package/es/plugins/block/command/index.d.ts +13 -0
  83. package/es/plugins/block/command/index.js +161 -0
  84. package/es/plugins/block/index.d.ts +5 -0
  85. package/es/plugins/block/plugin/index.d.ts +9 -0
  86. package/es/plugins/block/plugin/index.js +86 -0
  87. package/es/plugins/block/react/ReactBlockPlugin.d.ts +18 -0
  88. package/es/plugins/block/react/ReactBlockPlugin.js +457 -0
  89. package/es/plugins/block/react/core/runtime-context.js +19 -0
  90. package/es/plugins/block/react/core/types.d.ts +6 -0
  91. package/es/plugins/block/react/drag/drag-session.js +264 -0
  92. package/es/plugins/block/react/drag/drag-utils.js +95 -0
  93. package/es/plugins/block/react/index.d.ts +2 -0
  94. package/es/plugins/block/react/style.js +66 -0
  95. package/es/plugins/block/service/i-block-menu-service.d.ts +44 -0
  96. package/es/plugins/block/service/i-block-menu-service.js +43 -0
  97. package/es/plugins/block/service/index.d.ts +1 -0
  98. package/es/plugins/code/command/index.d.ts +7 -0
  99. package/es/plugins/code/command/index.js +30 -0
  100. package/es/plugins/code/index.d.ts +3 -0
  101. package/es/plugins/code/node/code.js +91 -0
  102. package/es/plugins/code/plugin/index.d.ts +9 -0
  103. package/es/plugins/code/plugin/index.js +74 -0
  104. package/es/plugins/code/plugin/registry.js +33 -0
  105. package/es/plugins/code/react/CodeReactPlugin.d.ts +7 -0
  106. package/es/plugins/code/react/CodeReactPlugin.js +27 -0
  107. package/es/plugins/code/react/index.d.ts +1 -0
  108. package/es/plugins/code/react/style.js +21 -0
  109. package/es/plugins/code/react/type.d.ts +7 -0
  110. package/es/plugins/codeblock/command/index.d.ts +8 -0
  111. package/es/plugins/codeblock/command/index.js +40 -0
  112. package/es/plugins/codeblock/index.d.ts +6 -0
  113. package/es/plugins/codeblock/index.js +5 -0
  114. package/es/plugins/codeblock/plugin/CodeHighlighterShiki.js +415 -0
  115. package/es/plugins/codeblock/plugin/FacadeShiki.js +193 -0
  116. package/es/plugins/codeblock/plugin/index.d.ts +16 -0
  117. package/es/plugins/codeblock/plugin/index.js +157 -0
  118. package/es/plugins/codeblock/plugin/invariant.js +14 -0
  119. package/es/plugins/codeblock/react/ReactCodeblockPlugin.d.ts +7 -0
  120. package/es/plugins/codeblock/react/ReactCodeblockPlugin.js +27 -0
  121. package/es/plugins/codeblock/react/index.d.ts +2 -0
  122. package/es/plugins/codeblock/react/style.js +58 -0
  123. package/es/plugins/codeblock/react/type.d.ts +8 -0
  124. package/es/plugins/codeblock/utils/language.js +9 -0
  125. package/es/plugins/codemirror-block/command/index.d.ts +13 -0
  126. package/es/plugins/codemirror-block/command/index.js +67 -0
  127. package/es/plugins/codemirror-block/index.d.ts +3 -0
  128. package/es/plugins/codemirror-block/lib/mode.js +8 -0
  129. package/es/plugins/codemirror-block/node/CodeMirrorNode.d.ts +48 -0
  130. package/es/plugins/codemirror-block/node/CodeMirrorNode.js +205 -0
  131. package/es/plugins/codemirror-block/plugin/index.d.ts +12 -0
  132. package/es/plugins/codemirror-block/plugin/index.js +80 -0
  133. package/es/plugins/codemirror-block/react/CodemirrorNode.js +219 -0
  134. package/es/plugins/codemirror-block/react/ReactCodemirrorNode.d.ts +7 -0
  135. package/es/plugins/codemirror-block/react/ReactCodemirrorNode.js +26 -0
  136. package/es/plugins/codemirror-block/react/index.d.ts +1 -0
  137. package/es/plugins/codemirror-block/react/type.d.ts +6 -0
  138. package/es/plugins/common/command/index.d.ts +11 -0
  139. package/es/plugins/common/command/index.js +24 -0
  140. package/es/plugins/common/data-source/json-data-source.js +133 -0
  141. package/es/plugins/common/data-source/text-data-source.js +32 -0
  142. package/es/plugins/common/index.d.ts +6 -0
  143. package/es/plugins/common/node/ElementDOMSlot.js +30 -0
  144. package/es/plugins/common/node/cursor.d.ts +16 -0
  145. package/es/plugins/common/node/cursor.js +189 -0
  146. package/es/plugins/common/plugin/index.d.ts +43 -0
  147. package/es/plugins/common/plugin/index.js +338 -0
  148. package/es/plugins/common/plugin/mdReader.js +62 -0
  149. package/es/plugins/common/plugin/paste-handler.d.ts +11 -0
  150. package/es/plugins/common/plugin/paste-handler.js +61 -0
  151. package/es/plugins/common/plugin/register.js +306 -0
  152. package/es/plugins/common/react/Placeholder/index.js +65 -0
  153. package/es/plugins/common/react/Placeholder/style.js +22 -0
  154. package/es/plugins/common/react/ReactEditorContent.d.ts +7 -0
  155. package/es/plugins/common/react/ReactEditorContent.js +8 -0
  156. package/es/plugins/common/react/ReactPlainText.d.ts +7 -0
  157. package/es/plugins/common/react/ReactPlainText.js +192 -0
  158. package/es/plugins/common/react/index.d.ts +3 -0
  159. package/es/plugins/common/react/style.js +206 -0
  160. package/es/plugins/common/react/type.d.ts +94 -0
  161. package/es/plugins/common/utils/index.js +135 -0
  162. package/es/plugins/content-blocks/data-source/content-blocks-data-source.d.ts +15 -0
  163. package/es/plugins/content-blocks/data-source/content-blocks-data-source.js +21 -0
  164. package/es/plugins/content-blocks/index.d.ts +6 -0
  165. package/es/plugins/content-blocks/plugin/index.d.ts +10 -0
  166. package/es/plugins/content-blocks/plugin/index.js +24 -0
  167. package/es/plugins/content-blocks/types.d.ts +33 -0
  168. package/es/plugins/content-blocks/types.js +4 -0
  169. package/es/plugins/content-blocks/utils/extract-media-lists.d.ts +7 -0
  170. package/es/plugins/content-blocks/utils/extract-media-lists.js +32 -0
  171. package/es/plugins/content-blocks/utils/extract.d.ts +8 -0
  172. package/es/plugins/content-blocks/utils/extract.js +188 -0
  173. package/es/plugins/file/command/index.d.ts +9 -0
  174. package/es/plugins/file/command/index.js +31 -0
  175. package/es/plugins/file/index.d.ts +4 -0
  176. package/es/plugins/file/node/FileNode.d.ts +38 -0
  177. package/es/plugins/file/node/FileNode.js +106 -0
  178. package/es/plugins/file/plugin/index.d.ts +18 -0
  179. package/es/plugins/file/plugin/index.js +103 -0
  180. package/es/plugins/file/react/ReactFilePlugin.d.ts +7 -0
  181. package/es/plugins/file/react/ReactFilePlugin.js +35 -0
  182. package/es/plugins/file/react/components/ReactFile.js +50 -0
  183. package/es/plugins/file/react/index.d.ts +2 -0
  184. package/es/plugins/file/react/style.js +32 -0
  185. package/es/plugins/file/react/type.d.ts +17 -0
  186. package/es/plugins/file/utils/index.js +29 -0
  187. package/es/plugins/hr/command/index.d.ts +7 -0
  188. package/es/plugins/hr/command/index.js +14 -0
  189. package/es/plugins/hr/index.d.ts +4 -0
  190. package/es/plugins/hr/node/HorizontalRuleNode.d.ts +18 -0
  191. package/es/plugins/hr/node/HorizontalRuleNode.js +59 -0
  192. package/es/plugins/hr/plugin/index.d.ts +12 -0
  193. package/es/plugins/hr/plugin/index.js +60 -0
  194. package/es/plugins/hr/react/ReactHRPlugin.d.ts +7 -0
  195. package/es/plugins/hr/react/ReactHRPlugin.js +28 -0
  196. package/es/plugins/hr/react/components/HRNode.js +36 -0
  197. package/es/plugins/hr/react/index.d.ts +2 -0
  198. package/es/plugins/hr/react/style.js +32 -0
  199. package/es/plugins/hr/react/type.d.ts +6 -0
  200. package/es/plugins/image/command/index.d.ts +12 -0
  201. package/es/plugins/image/command/index.js +53 -0
  202. package/es/plugins/image/index.d.ts +4 -0
  203. package/es/plugins/image/node/basie-image-node.d.ts +33 -0
  204. package/es/plugins/image/node/basie-image-node.js +68 -0
  205. package/es/plugins/image/node/block-image-node.d.ts +43 -0
  206. package/es/plugins/image/node/block-image-node.js +137 -0
  207. package/es/plugins/image/node/image-node.d.ts +41 -0
  208. package/es/plugins/image/node/image-node.js +128 -0
  209. package/es/plugins/image/plugin/index.d.ts +24 -0
  210. package/es/plugins/image/plugin/index.js +183 -0
  211. package/es/plugins/image/react/ReactImagePlugin.d.ts +7 -0
  212. package/es/plugins/image/react/ReactImagePlugin.js +41 -0
  213. package/es/plugins/image/react/components/BrokenImage.js +16 -0
  214. package/es/plugins/image/react/components/Image.js +190 -0
  215. package/es/plugins/image/react/components/ImageEditPopover.js +160 -0
  216. package/es/plugins/image/react/components/LazyImage.js +73 -0
  217. package/es/plugins/image/react/components/ResizeHandle.js +62 -0
  218. package/es/plugins/image/react/components/style.js +135 -0
  219. package/es/plugins/image/react/components/useSupenseImage.js +22 -0
  220. package/es/plugins/image/react/index.d.ts +2 -0
  221. package/es/plugins/image/react/style.js +31 -0
  222. package/es/plugins/image/react/type.d.ts +23 -0
  223. package/es/plugins/inode/index.d.ts +3 -0
  224. package/es/plugins/inode/plugin/index.d.ts +19 -0
  225. package/es/plugins/inode/plugin/index.js +23 -0
  226. package/es/plugins/inode/react/index.d.ts +6 -0
  227. package/es/plugins/inode/react/index.js +15 -0
  228. package/es/plugins/inode/service/index.d.ts +17 -0
  229. package/es/plugins/inode/service/index.js +22 -0
  230. package/es/plugins/link/command/index.d.ts +10 -0
  231. package/es/plugins/link/command/index.js +33 -0
  232. package/es/plugins/link/index.d.ts +5 -0
  233. package/es/plugins/link/node/LinkNode.d.ts +10 -0
  234. package/es/plugins/link/node/LinkNode.js +448 -0
  235. package/es/plugins/link/plugin/index.d.ts +16 -0
  236. package/es/plugins/link/plugin/index.js +106 -0
  237. package/es/plugins/link/plugin/registry.js +82 -0
  238. package/es/plugins/link/react/ReactLinkPlugin.d.ts +7 -0
  239. package/es/plugins/link/react/ReactLinkPlugin.js +50 -0
  240. package/es/plugins/link/react/components/LinkEdit.js +204 -0
  241. package/es/plugins/link/react/components/LinkToolbar.js +148 -0
  242. package/es/plugins/link/react/index.d.ts +2 -0
  243. package/es/plugins/link/react/style.js +34 -0
  244. package/es/plugins/link/react/type.d.ts +14 -0
  245. package/es/plugins/link/service/i-link-service.d.ts +10 -0
  246. package/es/plugins/link/service/i-link-service.js +19 -0
  247. package/es/plugins/link/utils/index.js +45 -0
  248. package/es/plugins/link-highlight/command/index.d.ts +8 -0
  249. package/es/plugins/link-highlight/command/index.js +30 -0
  250. package/es/plugins/link-highlight/index.d.ts +3 -0
  251. package/es/plugins/link-highlight/node/link-highlight.js +80 -0
  252. package/es/plugins/link-highlight/plugin/index.d.ts +18 -0
  253. package/es/plugins/link-highlight/plugin/index.js +109 -0
  254. package/es/plugins/link-highlight/plugin/registry.js +33 -0
  255. package/es/plugins/link-highlight/react/ReactLinkHighlightPlugin.d.ts +7 -0
  256. package/es/plugins/link-highlight/react/ReactLinkHighlightPlugin.js +29 -0
  257. package/es/plugins/link-highlight/react/index.d.ts +1 -0
  258. package/es/plugins/link-highlight/react/style.js +14 -0
  259. package/es/plugins/link-highlight/react/type.d.ts +16 -0
  260. package/es/plugins/list/command/index.d.ts +3 -0
  261. package/es/plugins/list/command/index.js +3 -0
  262. package/es/plugins/list/index.d.ts +5 -0
  263. package/es/plugins/list/plugin/checkList.d.ts +6 -0
  264. package/es/plugins/list/plugin/checkList.js +140 -0
  265. package/es/plugins/list/plugin/index.d.ts +9 -0
  266. package/es/plugins/list/plugin/index.js +195 -0
  267. package/es/plugins/list/plugin/registry.js +68 -0
  268. package/es/plugins/list/react/ReactListPlugin.d.ts +7 -0
  269. package/es/plugins/list/react/ReactListPlugin.js +21 -0
  270. package/es/plugins/list/react/index.d.ts +2 -0
  271. package/es/plugins/list/react/style.js +123 -0
  272. package/es/plugins/list/react/type.d.ts +7 -0
  273. package/es/plugins/list/utils/index.js +58 -0
  274. package/es/plugins/litexml/command/diffCommand.d.ts +17 -0
  275. package/es/plugins/litexml/command/diffCommand.js +97 -0
  276. package/es/plugins/litexml/command/index.d.ts +38 -0
  277. package/es/plugins/litexml/command/index.js +333 -0
  278. package/es/plugins/litexml/data-source/litexml-data-source.d.ts +65 -0
  279. package/es/plugins/litexml/data-source/litexml-data-source.js +286 -0
  280. package/es/plugins/litexml/index.d.ts +7 -0
  281. package/es/plugins/litexml/node/DiffNode.d.ts +29 -0
  282. package/es/plugins/litexml/node/DiffNode.js +95 -0
  283. package/es/plugins/litexml/plugin/index.d.ts +24 -0
  284. package/es/plugins/litexml/plugin/index.js +100 -0
  285. package/es/plugins/litexml/react/DiffNodeToolbar/index.js +60 -0
  286. package/es/plugins/litexml/react/DiffNodeToolbar/style.js +24 -0
  287. package/es/plugins/litexml/react/hooks/useHasDiffNode.d.ts +7 -0
  288. package/es/plugins/litexml/react/hooks/useHasDiffNode.js +35 -0
  289. package/es/plugins/litexml/react/index.d.ts +6 -0
  290. package/es/plugins/litexml/react/index.js +26 -0
  291. package/es/plugins/litexml/react/style.js +124 -0
  292. package/es/plugins/litexml/service/litexml-service.d.ts +93 -0
  293. package/es/plugins/litexml/service/litexml-service.js +42 -0
  294. package/es/plugins/litexml/utils/index.js +59 -0
  295. package/es/plugins/markdown/command/index.d.ts +14 -0
  296. package/es/plugins/markdown/command/index.js +74 -0
  297. package/es/plugins/markdown/data-source/markdown/parse.d.ts +14 -0
  298. package/es/plugins/markdown/data-source/markdown/parse.js +195 -0
  299. package/es/plugins/markdown/data-source/markdown-data-source.js +148 -0
  300. package/es/plugins/markdown/data-source/markdown-writer-context.js +40 -0
  301. package/es/plugins/markdown/index.d.ts +7 -0
  302. package/es/plugins/markdown/plugin/index.d.ts +22 -0
  303. package/es/plugins/markdown/plugin/index.js +285 -0
  304. package/es/plugins/markdown/react/index.d.ts +6 -0
  305. package/es/plugins/markdown/react/index.js +31 -0
  306. package/es/plugins/markdown/service/shortcut.d.ts +57 -0
  307. package/es/plugins/markdown/service/shortcut.js +101 -0
  308. package/es/plugins/markdown/service/transformers.d.ts +61 -0
  309. package/es/plugins/markdown/service/transformers.js +119 -0
  310. package/es/plugins/markdown/utils/detectLanguage.d.ts +22 -0
  311. package/es/plugins/markdown/utils/detectLanguage.js +251 -0
  312. package/es/plugins/markdown/utils/index.d.ts +11 -0
  313. package/es/plugins/markdown/utils/index.js +143 -0
  314. package/es/plugins/markdown/utils/logger.js +6 -0
  315. package/es/plugins/math/command/index.d.ts +9 -0
  316. package/es/plugins/math/command/index.js +38 -0
  317. package/es/plugins/math/index.d.ts +3 -0
  318. package/es/plugins/math/node/index.d.ts +44 -0
  319. package/es/plugins/math/node/index.js +161 -0
  320. package/es/plugins/math/plugin/index.d.ts +15 -0
  321. package/es/plugins/math/plugin/index.js +119 -0
  322. package/es/plugins/math/react/components/MathEditor.js +198 -0
  323. package/es/plugins/math/react/components/MathEditorContainer.js +101 -0
  324. package/es/plugins/math/react/components/MathEditorContent.js +133 -0
  325. package/es/plugins/math/react/components/MathInline.js +86 -0
  326. package/es/plugins/math/react/components/Placeholder.js +24 -0
  327. package/es/plugins/math/react/index.d.ts +7 -0
  328. package/es/plugins/math/react/index.js +35 -0
  329. package/es/plugins/math/react/style.js +96 -0
  330. package/es/plugins/math/react/type.d.ts +17 -0
  331. package/es/plugins/math/utils/index.js +23 -0
  332. package/es/plugins/mention/command/index.d.ts +10 -0
  333. package/es/plugins/mention/command/index.js +18 -0
  334. package/es/plugins/mention/index.d.ts +5 -0
  335. package/es/plugins/mention/node/MentionNode.d.ts +28 -0
  336. package/es/plugins/mention/node/MentionNode.js +86 -0
  337. package/es/plugins/mention/plugin/index.d.ts +18 -0
  338. package/es/plugins/mention/plugin/index.js +63 -0
  339. package/es/plugins/mention/plugin/register.js +30 -0
  340. package/es/plugins/mention/react/ReactMentionPlugin.d.ts +7 -0
  341. package/es/plugins/mention/react/ReactMentionPlugin.js +36 -0
  342. package/es/plugins/mention/react/components/Mention.js +33 -0
  343. package/es/plugins/mention/react/index.d.ts +2 -0
  344. package/es/plugins/mention/react/style.js +34 -0
  345. package/es/plugins/mention/react/type.d.ts +12 -0
  346. package/es/plugins/slash/index.d.ts +6 -0
  347. package/es/plugins/slash/plugin/index.d.ts +27 -0
  348. package/es/plugins/slash/plugin/index.js +160 -0
  349. package/es/plugins/slash/react/ReactSlashOption.d.ts +7 -0
  350. package/es/plugins/slash/react/ReactSlashOption.js +8 -0
  351. package/es/plugins/slash/react/ReactSlashPlugin.d.ts +7 -0
  352. package/es/plugins/slash/react/ReactSlashPlugin.js +190 -0
  353. package/es/plugins/slash/react/components/DefaultSlashMenu.js +168 -0
  354. package/es/plugins/slash/react/components/SlashMenu.d.ts +11 -0
  355. package/es/plugins/slash/react/components/SlashMenu.js +40 -0
  356. package/es/plugins/slash/react/index.d.ts +4 -0
  357. package/es/plugins/slash/react/type.d.ts +114 -0
  358. package/es/plugins/slash/react/utils.js +18 -0
  359. package/es/plugins/slash/service/i-slash-service.d.ts +50 -0
  360. package/es/plugins/slash/service/i-slash-service.js +55 -0
  361. package/es/plugins/slash/utils/utils.d.ts +1 -0
  362. package/es/plugins/slash/utils/utils.js +97 -0
  363. package/es/plugins/table/command/index.d.ts +17 -0
  364. package/es/plugins/table/command/index.js +57 -0
  365. package/es/plugins/table/index.d.ts +3 -0
  366. package/es/plugins/table/node/index.js +18 -0
  367. package/es/plugins/table/plugin/index.d.ts +8 -0
  368. package/es/plugins/table/plugin/index.js +172 -0
  369. package/es/plugins/table/react/TableActionMenu/ActionMenu.js +220 -0
  370. package/es/plugins/table/react/TableActionMenu/index.js +128 -0
  371. package/es/plugins/table/react/TableActionMenu/style.js +20 -0
  372. package/es/plugins/table/react/TableActionMenu/utils.js +34 -0
  373. package/es/plugins/table/react/TableHoverActions/index.js +147 -0
  374. package/es/plugins/table/react/TableHoverActions/style.js +14 -0
  375. package/es/plugins/table/react/TableHoverActions/utils.js +32 -0
  376. package/es/plugins/table/react/TableResize/index.js +253 -0
  377. package/es/plugins/table/react/TableResize/style.js +16 -0
  378. package/es/plugins/table/react/TableResize/utils.js +9 -0
  379. package/es/plugins/table/react/index.d.ts +7 -0
  380. package/es/plugins/table/react/index.js +49 -0
  381. package/es/plugins/table/react/style.js +63 -0
  382. package/es/plugins/table/react/type.d.ts +8 -0
  383. package/es/plugins/table/utils/index.js +48 -0
  384. package/es/plugins/toolbar/command/index.d.ts +12 -0
  385. package/es/plugins/toolbar/command/index.js +17 -0
  386. package/es/plugins/toolbar/index.d.ts +2 -0
  387. package/es/plugins/toolbar/react/index.d.ts +7 -0
  388. package/es/plugins/toolbar/react/index.js +109 -0
  389. package/es/plugins/toolbar/react/style.js +55 -0
  390. package/es/plugins/toolbar/react/type.d.ts +9 -0
  391. package/es/plugins/toolbar/utils/getDOMRangeRect.js +20 -0
  392. package/es/plugins/toolbar/utils/setFloatingElemPosition.js +50 -0
  393. package/es/plugins/upload/index.d.ts +2 -0
  394. package/es/plugins/upload/plugin/index.d.ts +6 -0
  395. package/es/plugins/upload/plugin/index.js +47 -0
  396. package/es/plugins/upload/service/i-upload-service.d.ts +13 -0
  397. package/es/plugins/upload/service/i-upload-service.js +30 -0
  398. package/es/plugins/upload/utils/index.js +15 -0
  399. package/es/plugins/virtual-block/index.d.ts +2 -0
  400. package/es/plugins/virtual-block/plugin/index.d.ts +8 -0
  401. package/es/plugins/virtual-block/plugin/index.js +19 -0
  402. package/es/plugins/virtual-block/plugin/register.js +150 -0
  403. package/es/plugins/virtual-block/react/ReactVirtualBlock.d.ts +6 -0
  404. package/es/plugins/virtual-block/react/ReactVirtualBlock.js +15 -0
  405. package/es/plugins/virtual-block/react/index.d.ts +1 -0
  406. package/es/react/ChatInput/ChatInput.d.ts +7 -0
  407. package/es/react/ChatInput/ChatInput.js +91 -0
  408. package/es/react/ChatInput/index.d.ts +2 -0
  409. package/es/react/ChatInput/style.js +115 -0
  410. package/es/react/ChatInput/type.d.ts +32 -0
  411. package/es/react/ChatInputActionBar/ChatInputActionBar.d.ts +7 -0
  412. package/es/react/ChatInputActionBar/ChatInputActionBar.js +22 -0
  413. package/es/react/ChatInputActionBar/index.d.ts +2 -0
  414. package/es/react/ChatInputActionBar/style.js +7 -0
  415. package/es/react/ChatInputActionBar/type.d.ts +10 -0
  416. package/es/react/ChatInputActions/ChatInputActions.d.ts +7 -0
  417. package/es/react/ChatInputActions/ChatInputActions.js +65 -0
  418. package/es/react/ChatInputActions/components/ActionItem.js +46 -0
  419. package/es/react/ChatInputActions/components/ActionRender.js +45 -0
  420. package/es/react/ChatInputActions/components/CollapsedActions.js +60 -0
  421. package/es/react/ChatInputActions/components/useDisplayActionCount.js +45 -0
  422. package/es/react/ChatInputActions/index.d.ts +2 -0
  423. package/es/react/ChatInputActions/style.js +20 -0
  424. package/es/react/ChatInputActions/type.d.ts +36 -0
  425. package/es/react/CodeLanguageSelect/CodeLanguageSelect.d.ts +7 -0
  426. package/es/react/CodeLanguageSelect/CodeLanguageSelect.js +67 -0
  427. package/es/react/CodeLanguageSelect/index.d.ts +2 -0
  428. package/es/react/CodeLanguageSelect/style.js +7 -0
  429. package/es/react/CodeLanguageSelect/type.d.ts +6 -0
  430. package/es/react/Editor/Editor.js +108 -0
  431. package/es/react/Editor/index.d.ts +16 -0
  432. package/es/react/Editor/index.js +11 -0
  433. package/es/react/Editor/type.d.ts +64 -0
  434. package/es/react/Editor/utils.d.ts +6 -0
  435. package/es/react/Editor/utils.js +6 -0
  436. package/es/react/EditorProvider/index.d.ts +28 -0
  437. package/es/react/EditorProvider/index.js +18 -0
  438. package/es/react/FloatActions/FloatActions.d.ts +7 -0
  439. package/es/react/FloatActions/FloatActions.js +34 -0
  440. package/es/react/FloatActions/components/ActionItem.js +46 -0
  441. package/es/react/FloatActions/components/ActionRender.js +45 -0
  442. package/es/react/FloatActions/components/CollapsedActions.js +60 -0
  443. package/es/react/FloatActions/index.d.ts +2 -0
  444. package/es/react/FloatActions/style.js +19 -0
  445. package/es/react/FloatActions/type.d.ts +33 -0
  446. package/es/react/FloatMenu/FloatMenu.d.ts +7 -0
  447. package/es/react/FloatMenu/FloatMenu.js +32 -0
  448. package/es/react/FloatMenu/index.d.ts +2 -0
  449. package/es/react/FloatMenu/style.js +28 -0
  450. package/es/react/FloatMenu/type.d.ts +25 -0
  451. package/es/react/SendButton/SendButton.d.ts +7 -0
  452. package/es/react/SendButton/SendButton.js +107 -0
  453. package/es/react/SendButton/components/SendIcon.js +23 -0
  454. package/es/react/SendButton/components/StopIcon.js +56 -0
  455. package/es/react/SendButton/index.d.ts +2 -0
  456. package/es/react/SendButton/style.js +68 -0
  457. package/es/react/SendButton/type.d.ts +12 -0
  458. package/es/react/SlashMenu/SlashMenu.d.ts +7 -0
  459. package/es/react/SlashMenu/SlashMenu.js +40 -0
  460. package/es/react/SlashMenu/index.d.ts +2 -0
  461. package/es/react/SlashMenu/type.d.ts +17 -0
  462. package/es/react/hooks/useEditor.d.ts +5 -0
  463. package/es/react/hooks/useEditor.js +8 -0
  464. package/es/react/hooks/useEditorState/index.d.ts +71 -0
  465. package/es/react/hooks/useEditorState/index.js +347 -0
  466. package/es/react/hooks/useEditorState/utils.js +28 -0
  467. package/es/react/hooks/useSize.js +61 -0
  468. package/es/react.d.ts +22 -334
  469. package/es/react.js +13 -1573
  470. package/es/renderer/LexicalDiff.d.ts +41 -0
  471. package/es/renderer/LexicalDiff.js +96 -0
  472. package/es/renderer/LexicalRenderer.d.ts +16 -0
  473. package/es/renderer/LexicalRenderer.js +48 -0
  474. package/es/renderer/diff/compute.js +396 -0
  475. package/es/renderer/diff/style.d.ts +4 -0
  476. package/es/renderer/diff/style.js +104 -0
  477. package/es/renderer/diff/types.d.ts +32 -0
  478. package/es/renderer/engine/render-builtin-node.js +196 -0
  479. package/es/renderer/engine/render-text-node.js +33 -0
  480. package/es/renderer/engine/render-tree.js +35 -0
  481. package/es/renderer/engine/shiki.d.ts +4 -0
  482. package/es/renderer/engine/shiki.js +24 -0
  483. package/es/renderer/engine/utils.js +16 -0
  484. package/es/renderer/nodes/index.d.ts +6 -0
  485. package/es/renderer/nodes/index.js +44 -0
  486. package/es/renderer/renderers/codeblock.js +21 -0
  487. package/es/renderer/renderers/file.js +29 -0
  488. package/es/renderer/renderers/horizontalrule.js +29 -0
  489. package/es/renderer/renderers/image.js +35 -0
  490. package/es/renderer/renderers/index.d.ts +6 -0
  491. package/es/renderer/renderers/index.js +21 -0
  492. package/es/renderer/renderers/math.js +19 -0
  493. package/es/renderer/renderers/mention.js +15 -0
  494. package/es/renderer/renderers/mermaid.js +17 -0
  495. package/es/renderer/style.js +52 -0
  496. package/es/renderer/types.d.ts +29 -0
  497. package/es/renderer.d.ts +8 -114
  498. package/es/renderer.js +5 -1153
  499. package/es/types/hotkey.d.ts +76 -0
  500. package/es/types/hotkey.js +65 -0
  501. package/es/types/index.d.ts +2 -0
  502. package/es/types/kernel.d.ts +359 -0
  503. package/es/types/locale.d.ts +11 -0
  504. package/es/utils/cx.js +4 -0
  505. package/es/utils/debug.d.ts +425 -0
  506. package/es/{debug-CIvbNHJu.js → utils/debug.js} +3 -35
  507. package/es/utils/hotkey/isHotkeyMatch.js +17 -0
  508. package/es/utils/hotkey/parseHotkeys.js +53 -0
  509. package/es/utils/hotkey/registerHotkey.d.ts +18 -0
  510. package/es/utils/hotkey/registerHotkey.js +35 -0
  511. package/es/utils/scrollIntoView.d.ts +8 -0
  512. package/es/utils/scrollIntoView.js +29 -0
  513. package/es/utils/updatePosition.js +26 -0
  514. package/es/utils/url.d.ts +18 -0
  515. package/es/utils/url.js +34 -0
  516. package/package.json +4 -1
  517. package/es/ReactSlashPlugin-BiVy_Iwf.js +0 -23072
  518. package/es/codemirror-3POv7f__.js +0 -923
  519. package/es/index-DHGp94p0.d.ts +0 -916
  520. package/es/style-DADgHVA1.js +0 -2889
  521. package/es/style-DMdPzCo-.js +0 -999
package/es/renderer.js CHANGED
@@ -1,1154 +1,6 @@
1
- import { E as CodeNode, L as CursorNode, M as CodeMirrorNode, O as styles, _ as AutoLinkNode, b as LinkNode, c as MathBlockNode, f as LinkHighlightNode, i as MentionNode, l as MathInlineNode, t as styles$1 } from "./style-DADgHVA1.js";
2
- import { S as DiffNode, _ as PlaceholderNode, a as styles$5, b as HorizontalRuleNode, c as ImageNode, d as BlockImageNode, f as styles$6, g as PlaceholderBlockNode, h as FileNode, n as styles$4, r as styles$2, t as styles$3 } from "./style-DMdPzCo-.js";
3
- import { Highlighter, Mermaid } from "@lobehub/ui";
4
- import { createElement, useMemo } from "react";
5
- import { jsx, jsxs } from "react/jsx-runtime";
6
- import { createStaticStyles, cx } from "antd-style";
7
- import { createHeadlessEditor } from "@lexical/headless";
8
- import { TableCellNode, TableNode, TableRowNode } from "@lexical/table";
9
- import { $getRoot, $isElementNode, $isTextNode } from "lexical";
10
- import { HeadingNode, QuoteNode } from "@lexical/rich-text";
11
- import { ListItemNode, ListNode } from "@lexical/list";
12
- import katex from "katex";
13
- import { bundledLanguagesInfo } from "shiki";
14
- import { createHighlighterCoreSync, isSpecialLang } from "@shikijs/core";
15
- import { createJavaScriptRegexEngine } from "@shikijs/engine-javascript";
16
- //#region src/renderer/engine/shiki.ts
17
- let _highlighter = null;
18
- function getHighlighter() {
19
- if (!_highlighter) _highlighter = createHighlighterCoreSync({
20
- engine: createJavaScriptRegexEngine(),
21
- langs: [],
22
- themes: []
23
- });
24
- return _highlighter;
25
- }
26
- function isLanguageLoaded(language) {
27
- if (isSpecialLang(language)) return true;
28
- return getHighlighter().getLoadedLanguages().includes(language);
29
- }
30
- async function loadLanguage(language) {
31
- if (isLanguageLoaded(language)) return;
32
- const info = bundledLanguagesInfo.find((desc) => desc.id === language || desc.aliases?.includes(language));
33
- if (info) await getHighlighter().loadLanguage(info.import());
34
- }
35
- //#endregion
36
- //#region src/renderer/style.ts
37
- const tableHeaderFix = createStaticStyles(({ css, cssVar }) => css`
38
- .editor_table > tbody > tr:first-of-type {
39
- background: ${cssVar.colorFillQuaternary};
40
-
41
- .editor_table_cell_header {
42
- font-weight: bold;
43
- }
44
- }
45
- `);
46
- function getRendererClassName(className) {
47
- return cx(styles.root, styles.variant, className);
48
- }
49
- function getListClassName(listType) {
50
- return cx(listType === "number" ? "editor_listOrdered" : "editor_listUnordered", styles$2);
51
- }
52
- function getTableWrapperClassName() {
53
- return cx("editor_table_scrollable_wrapper", styles$3, tableHeaderFix);
54
- }
55
- function getMathInlineClassName() {
56
- return styles$4.mathInline;
57
- }
58
- function getMathBlockClassName() {
59
- return styles$4.mathBlock;
60
- }
61
- function getImageClassName() {
62
- return styles$5.image;
63
- }
64
- function getBlockImageClassName() {
65
- return styles$5.blockImage;
66
- }
67
- function getMentionClassName() {
68
- return cx("editor_mention", styles$1.mention);
69
- }
70
- function getCSSVariables(variant) {
71
- const isChat = variant === "chat";
72
- return {
73
- "--common-font-size": `${isChat ? 14 : 16}px`,
74
- "--common-header-multiple": String(isChat ? .25 : .6),
75
- "--common-line-height": String(isChat ? 1.4 : 1.6),
76
- "--common-margin-multiple": String(isChat ? 1 : 2)
77
- };
78
- }
79
- //#endregion
80
- //#region src/renderer/engine/utils.ts
81
- function parseCSSText(cssText) {
82
- const style = {};
83
- for (const part of cssText.split(";")) {
84
- const colonIndex = part.indexOf(":");
85
- if (colonIndex === -1) continue;
86
- const prop = part.slice(0, colonIndex).trim();
87
- const value = part.slice(colonIndex + 1).trim();
88
- if (!prop || !value) continue;
89
- const camelProp = prop.replaceAll(/-([a-z])/g, (_, c) => c.toUpperCase());
90
- style[camelProp] = value;
91
- }
92
- return style;
93
- }
94
- //#endregion
95
- //#region src/renderer/engine/render-builtin-node.tsx
96
- const SAFE_URL_PROTOCOLS = new Set([
97
- "http:",
98
- "https:",
99
- "mailto:",
100
- "sms:",
101
- "tel:"
102
- ]);
103
- function sanitizeUrl(url) {
104
- try {
105
- const parsed = new URL(url);
106
- if (!SAFE_URL_PROTOCOLS.has(parsed.protocol)) return "about:blank";
107
- } catch {
108
- return url;
109
- }
110
- return url;
111
- }
112
- function formatLinkHighlightUrl(url) {
113
- if (/^[a-z][\d+.a-z-]*:/i.test(url)) return url;
114
- if (/^[#./]/.test(url)) return url;
115
- if (url.includes("@") && !url.startsWith("mailto:")) return `mailto:${url}`;
116
- if (/^\+?[\d\s()-]{5,}$/.test(url)) return `tel:${url}`;
117
- if (url.startsWith("www.")) return `https://${url}`;
118
- if (!url.includes("://")) return `https://${url}`;
119
- return url;
120
- }
121
- function textToSlug(text) {
122
- return text.toLowerCase().trim().replaceAll(/[^\s\w\u3000-\u9FFF\uAC00-\uD7AF\uFF00-\uFFEF-]/g, "").replaceAll(/[\s_]+/g, "-").replaceAll(/^-+|-+$/g, "");
123
- }
124
- const DIFF_ROOT_STYLE = { position: "relative" };
125
- const DIFF_LIST_ITEM_ROOT_STYLE = {
126
- display: "inline-block",
127
- minWidth: "100%",
128
- position: "relative"
129
- };
130
- const DIFF_DELETED_STYLE = {
131
- color: "var(--ant-color-text-quaternary, rgba(0, 0, 0, 0.45))",
132
- textDecoration: "line-through"
133
- };
134
- function renderDiffNode(node, key, children) {
135
- const diffType = typeof node.diffType === "string" ? node.diffType : "unchanged";
136
- const renderedChildren = children ?? [];
137
- const sharedContentStyle = {
138
- marginBlockStart: "calc(var(--lobe-markdown-margin-multiple, 1) * 0.5em)",
139
- paddingInlineEnd: 4
140
- };
141
- const borderColor = diffType === "add" || diffType === "listItemAdd" ? "var(--ant-color-success, #52c41a)" : diffType === "remove" || diffType === "listItemRemove" ? "var(--ant-color-error, #ff4d4f)" : "var(--ant-color-warning, #faad14)";
142
- const contentStyle = diffType === "unchanged" ? sharedContentStyle : {
143
- ...sharedContentStyle,
144
- borderInlineEnd: `3px solid ${borderColor}`
145
- };
146
- const rootStyle = diffType === "listItemAdd" || diffType === "listItemModify" || diffType === "listItemRemove" ? DIFF_LIST_ITEM_ROOT_STYLE : DIFF_ROOT_STYLE;
147
- const wrapChild = (child, childKey, style) => {
148
- if (child === void 0 || child === null) return null;
149
- return /* @__PURE__ */ jsx("div", {
150
- style,
151
- children: child
152
- }, childKey);
153
- };
154
- let content;
155
- switch (diffType) {
156
- case "add":
157
- case "listItemAdd":
158
- content = wrapChild(renderedChildren[0], `${key}-add`);
159
- break;
160
- case "remove":
161
- case "listItemRemove":
162
- content = wrapChild(renderedChildren[0], `${key}-remove`, DIFF_DELETED_STYLE);
163
- break;
164
- case "modify":
165
- case "listItemModify":
166
- content = [wrapChild(renderedChildren[0], `${key}-old`, DIFF_DELETED_STYLE), wrapChild(renderedChildren[1], `${key}-new`)];
167
- break;
168
- default:
169
- content = renderedChildren;
170
- break;
171
- }
172
- return /* @__PURE__ */ jsx("div", {
173
- className: "ne-diff",
174
- "data-diff-type": diffType,
175
- style: rootStyle,
176
- children: /* @__PURE__ */ jsx("div", {
177
- className: "content",
178
- style: contentStyle,
179
- children: content
180
- })
181
- }, key);
182
- }
183
- function renderBuiltinNode(node, key, children, headingSlugs, textContent) {
184
- switch (node.type) {
185
- case "root": return children;
186
- case "paragraph": return /* @__PURE__ */ jsx("p", {
187
- style: node.format ? { textAlign: node.format } : void 0,
188
- children
189
- }, key);
190
- case "heading": {
191
- const tag = node.tag;
192
- const baseSlug = textToSlug(textContent || "");
193
- let slug = baseSlug;
194
- if (baseSlug) {
195
- const count = headingSlugs.get(baseSlug);
196
- if (count !== void 0) {
197
- slug = `${baseSlug}-${count}`;
198
- headingSlugs.set(baseSlug, count + 1);
199
- } else headingSlugs.set(baseSlug, 1);
200
- }
201
- return createElement(tag, {
202
- id: slug || void 0,
203
- key
204
- }, children);
205
- }
206
- case "quote": return /* @__PURE__ */ jsx("blockquote", {
207
- className: "editor_quote",
208
- children
209
- }, key);
210
- case "list": return /* @__PURE__ */ jsx(node.listType === "number" ? "ol" : "ul", {
211
- className: getListClassName(node.listType),
212
- start: node.start !== 1 ? node.start : void 0,
213
- children
214
- }, key);
215
- case "listitem": {
216
- const isChecklist = node.checked !== void 0;
217
- const hasNestedList = node.children?.some((c) => c.type === "list");
218
- const value = typeof node.value === "number" && node.value > 1 ? node.value : void 0;
219
- let cls = "editor_listItem";
220
- if (hasNestedList) cls = "editor_listItemNested";
221
- else if (isChecklist) cls = node.checked ? "editor_listItem editor_listItemChecked" : "editor_listItem editor_listItemUnchecked";
222
- return /* @__PURE__ */ jsx("li", {
223
- className: cls,
224
- role: isChecklist ? "checkbox" : void 0,
225
- value,
226
- children
227
- }, key);
228
- }
229
- case "link":
230
- case "autolink": return /* @__PURE__ */ jsx("a", {
231
- href: sanitizeUrl(node.url),
232
- rel: node.rel || "noopener noreferrer",
233
- target: node.target || void 0,
234
- children
235
- }, key);
236
- case "linkHighlight": return /* @__PURE__ */ jsx("a", {
237
- href: textContent ? sanitizeUrl(formatLinkHighlightUrl(textContent)) : void 0,
238
- rel: "noopener noreferrer",
239
- target: "_blank",
240
- children
241
- }, key);
242
- case "table": return /* @__PURE__ */ jsx("div", {
243
- className: getTableWrapperClassName(),
244
- children: /* @__PURE__ */ jsx("table", {
245
- className: "editor_table",
246
- children: /* @__PURE__ */ jsx("tbody", { children })
247
- })
248
- }, key);
249
- case "tablerow": return /* @__PURE__ */ jsx("tr", { children }, key);
250
- case "tablecell": {
251
- const isHeader = !!node.headerState;
252
- const CellTag = isHeader ? "th" : "td";
253
- const cls = isHeader ? "editor_table_cell editor_table_cell_header" : "editor_table_cell";
254
- const cellStyle = {};
255
- if (node.width) cellStyle.width = `${node.width}px`;
256
- if (node.backgroundColor) cellStyle.backgroundColor = node.backgroundColor;
257
- if (node.verticalAlign) cellStyle.verticalAlign = node.verticalAlign;
258
- return /* @__PURE__ */ jsx(CellTag, {
259
- className: cls,
260
- colSpan: node.colSpan > 1 ? node.colSpan : void 0,
261
- rowSpan: node.rowSpan > 1 ? node.rowSpan : void 0,
262
- style: Object.keys(cellStyle).length > 0 ? cellStyle : void 0,
263
- children
264
- }, key);
265
- }
266
- case "linebreak": return /* @__PURE__ */ jsx("br", {}, key);
267
- case "tab": return /* @__PURE__ */ jsx("span", { children: " " }, key);
268
- case "codeInline": return /* @__PURE__ */ jsx("code", {
269
- className: "editor_code",
270
- children
271
- }, key);
272
- case "code-highlight":
273
- if (node.style) return /* @__PURE__ */ jsx("span", {
274
- style: parseCSSText(node.style),
275
- children: node.text
276
- }, key);
277
- return /* @__PURE__ */ jsx("span", { children: node.text }, key);
278
- case "diff": return renderDiffNode(node, key, children);
279
- case "cursor": return null;
280
- default:
281
- console.warn(`[LexicalRenderer] Unknown node type: "${node.type}"`);
282
- return children ?? null;
283
- }
284
- }
285
- //#endregion
286
- //#region src/renderer/engine/render-text-node.tsx
287
- const FORMAT_TAGS = [
288
- [1, "strong"],
289
- [2, "em"],
290
- [4, "s"],
291
- [8, "u"],
292
- [16, "code"],
293
- [32, "sub"],
294
- [64, "sup"],
295
- [128, "mark"]
296
- ];
297
- function shouldPreserveWhitespace(text) {
298
- return /[\t\n]| {2,}|^ | $/.test(text);
299
- }
300
- function renderTextNode(node, key) {
301
- const style = node.style ? parseCSSText(node.style) : void 0;
302
- const preserveWhitespace = shouldPreserveWhitespace(node.text);
303
- let element = node.text;
304
- const format = node.format || 0;
305
- for (const [flag, tag] of FORMAT_TAGS) if (format & flag) element = createElement(tag, { key: `${key}-${flag}` }, element);
306
- if (style || preserveWhitespace) element = createElement("span", {
307
- key,
308
- style: {
309
- ...style,
310
- ...preserveWhitespace ? { whiteSpace: "break-spaces" } : void 0
311
- }
312
- }, element);
313
- return element;
314
- }
315
- //#endregion
316
- //#region src/renderer/engine/render-tree.ts
317
- function isHeadlessRenderableNode(node) {
318
- return typeof node.renderHeadless === "function";
319
- }
320
- function renderNode(node, registry, headingSlugs, overrides, key, renderContext) {
321
- const type = node.getType();
322
- if (type === "cursor") return null;
323
- if ($isTextNode(node)) return renderTextNode(node.exportJSON(), key);
324
- const serialized = node.exportJSON();
325
- let children = null;
326
- if ($isElementNode(node)) {
327
- const childNodes = node.getChildren();
328
- if (childNodes.length > 0) children = childNodes.map((child, i) => renderNode(child, registry, headingSlugs, overrides, `${key}-${i}`, renderContext));
329
- }
330
- const textContent = node.getTextContent ? node.getTextContent() : void 0;
331
- const override = overrides?.[type];
332
- if (override) return override(serialized, key, children);
333
- if (isHeadlessRenderableNode(node)) {
334
- const context = {
335
- children,
336
- extra: renderContext?.extra,
337
- key,
338
- variant: renderContext?.variant
339
- };
340
- return node.renderHeadless(context);
341
- }
342
- const renderer = registry.get(type);
343
- if (renderer) return renderer(serialized, key, children);
344
- return renderBuiltinNode(serialized, key, children, headingSlugs, textContent);
345
- }
346
- //#endregion
347
- //#region src/renderer/nodes/index.ts
348
- const rendererNodes = [
349
- HeadingNode,
350
- QuoteNode,
351
- ListNode,
352
- ListItemNode,
353
- TableNode,
354
- TableRowNode,
355
- TableCellNode,
356
- ImageNode,
357
- BlockImageNode,
358
- MathInlineNode,
359
- MathBlockNode,
360
- CodeMirrorNode,
361
- HorizontalRuleNode,
362
- MentionNode,
363
- FileNode,
364
- CodeNode,
365
- LinkNode,
366
- AutoLinkNode,
367
- CursorNode,
368
- DiffNode,
369
- LinkHighlightNode,
370
- PlaceholderNode,
371
- PlaceholderBlockNode
372
- ];
373
- //#endregion
374
- //#region src/renderer/renderers/mermaid.tsx
375
- function renderMermaidBlock(node, key) {
376
- return /* @__PURE__ */ jsx(Mermaid, {
377
- animated: false,
378
- defaultExpand: true,
379
- fullFeatured: true,
380
- style: { width: "100%" },
381
- theme: "lobe-theme",
382
- variant: "filled",
383
- children: node.code || ""
384
- }, key);
385
- }
386
- //#endregion
387
- //#region src/renderer/renderers/codeblock.tsx
388
- function CodeBlockRenderer({ node }) {
389
- const language = node.language || "";
390
- const code = node.code || "";
391
- return /* @__PURE__ */ jsx(Highlighter, {
392
- defaultExpand: true,
393
- language: language || "text",
394
- variant: "filled",
395
- children: code
396
- });
397
- }
398
- function renderCodeBlock(node, key) {
399
- if ((node.language || "").toLowerCase() === "mermaid") return renderMermaidBlock(node, key);
400
- return /* @__PURE__ */ jsx(CodeBlockRenderer, { node }, key);
401
- }
402
- //#endregion
403
- //#region src/renderer/renderers/file.tsx
404
- function renderFile(node, key) {
405
- const { name, fileUrl, status, message } = node;
406
- const cls = styles$6.file;
407
- if (status === "error") return /* @__PURE__ */ jsxs("span", {
408
- className: cls,
409
- "data-file-status": "error",
410
- children: [
411
- name,
412
- ": ",
413
- message || "Upload failed"
414
- ]
415
- }, key);
416
- if (status === "pending" || !fileUrl) return /* @__PURE__ */ jsx("span", {
417
- className: cls,
418
- "data-file-status": "pending",
419
- children: name
420
- }, key);
421
- return /* @__PURE__ */ jsx("a", {
422
- className: cls,
423
- download: name,
424
- href: fileUrl,
425
- children: name
426
- }, key);
427
- }
428
- //#endregion
429
- //#region src/renderer/renderers/horizontalrule.tsx
430
- const useStyles = createStaticStyles(({ css, cssVar }) => css`
431
- display: flex;
432
- align-items: center;
433
-
434
- width: 100%;
435
- height: calc(var(--lobe-markdown-margin-multiple) * 1em);
436
- margin-block: calc(var(--lobe-markdown-margin-multiple) * 1em);
437
-
438
- hr {
439
- width: 100%;
440
- border-color: ${cssVar.colorBorder};
441
- border-style: dashed;
442
- border-width: 1px;
443
- border-block-start: none;
444
- border-inline-start: none;
445
- border-inline-end: none;
446
- }
447
- `);
448
- function renderHR(_node, key) {
449
- return createElement("div", {
450
- className: useStyles,
451
- key
452
- }, createElement("hr"));
453
- }
454
- //#endregion
455
- //#region src/renderer/renderers/image.tsx
456
- function renderImage(node, key) {
457
- const { src, altText, width, height, maxWidth } = node;
458
- const style = {};
459
- if (maxWidth) style.maxWidth = maxWidth;
460
- if (width && width !== "inherit") style.width = width;
461
- if (height && height !== "inherit") style.height = height;
462
- return /* @__PURE__ */ jsx("span", {
463
- className: getImageClassName(),
464
- children: /* @__PURE__ */ jsx("img", {
465
- alt: altText || "",
466
- src,
467
- style
468
- })
469
- }, key);
470
- }
471
- function renderBlockImage(node, key) {
472
- const { src, altText, width, height, maxWidth } = node;
473
- const style = {};
474
- if (maxWidth) style.maxWidth = maxWidth;
475
- if (width && width !== "inherit") style.width = width;
476
- if (height && height !== "inherit") style.height = height;
477
- return /* @__PURE__ */ jsx("figure", {
478
- className: getBlockImageClassName(),
479
- children: /* @__PURE__ */ jsx("img", {
480
- alt: altText || "",
481
- src,
482
- style
483
- })
484
- }, key);
485
- }
486
- //#endregion
487
- //#region src/renderer/renderers/math.tsx
488
- function renderMath(node, key) {
489
- const code = node.code || "";
490
- const displayMode = node.type === "mathBlock";
491
- const html = katex.renderToString(code, {
492
- displayMode,
493
- throwOnError: false
494
- });
495
- return createElement(displayMode ? "div" : "span", {
496
- className: displayMode ? getMathBlockClassName() : getMathInlineClassName(),
497
- dangerouslySetInnerHTML: { __html: html },
498
- key
499
- });
500
- }
501
- //#endregion
502
- //#region src/renderer/renderers/mention.tsx
503
- function renderMention(node, key) {
504
- const label = node.label || "";
505
- return /* @__PURE__ */ jsx("span", {
506
- className: getMentionClassName(),
507
- children: /* @__PURE__ */ jsxs("span", {
508
- className: "editor_mention",
509
- children: ["@", label]
510
- })
511
- }, key);
512
- }
513
- //#endregion
514
- //#region src/renderer/renderers/index.ts
515
- function createDefaultRenderers() {
516
- return new Map([
517
- ["image", renderImage],
518
- ["block-image", renderBlockImage],
519
- ["math", renderMath],
520
- ["mathBlock", renderMath],
521
- ["code", renderCodeBlock],
522
- ["horizontalrule", renderHR],
523
- ["mention", renderMention],
524
- ["file", renderFile]
525
- ]);
526
- }
527
- //#endregion
528
- //#region src/renderer/LexicalRenderer.tsx
529
- function LexicalRenderer({ value, overrides, extraNodes, renderContext, as: Tag = "div", className, style, variant }) {
530
- const content = useMemo(() => {
531
- const nodes = extraNodes ? [...rendererNodes, ...extraNodes] : rendererNodes;
532
- const registry = createDefaultRenderers();
533
- const editor = createHeadlessEditor({
534
- editable: false,
535
- nodes,
536
- onError: (error) => {
537
- console.error("[LexicalRenderer]", error);
538
- }
539
- });
540
- const state = editor.parseEditorState(value);
541
- editor.setEditorState(state);
542
- let result = null;
543
- const headingSlugs = /* @__PURE__ */ new Map();
544
- state.read(() => {
545
- result = $getRoot().getChildren().map((child, i) => renderNode(child, registry, headingSlugs, overrides, `r-${i}`, {
546
- ...renderContext,
547
- variant
548
- }));
549
- });
550
- return result;
551
- }, [
552
- value,
553
- overrides,
554
- extraNodes,
555
- renderContext,
556
- variant
557
- ]);
558
- const cssVars = getCSSVariables(variant);
559
- return createElement(Tag, {
560
- className: getRendererClassName(className),
561
- style: {
562
- ...cssVars,
563
- ...style
564
- }
565
- }, createElement("div", null, content));
566
- }
567
- //#endregion
568
- //#region src/renderer/diff/compute.ts
569
- const CHAR_DIFF_MAX_MATRIX_CELLS = 5e4;
570
- const DELETE_MARK_STYLE = "background-color: color-mix(in srgb, var(--ant-color-error) 18%, transparent); text-decoration: line-through;";
571
- const INSERT_MARK_STYLE = "background-color: color-mix(in srgb, var(--ant-color-success) 18%, transparent);";
572
- function getBaseNodeType(node) {
573
- if (!node) return null;
574
- const type = node.type;
575
- return typeof type === "string" ? type : null;
576
- }
577
- function getNormalizedBlockType(node) {
578
- if (!node) return null;
579
- const record = node;
580
- const type = getBaseNodeType(node);
581
- if (!type) return null;
582
- if (type === "heading") return `heading:${String(record.tag || "unknown")}`;
583
- if (type === "list") return `list:${String(record.listType || "bullet")}`;
584
- return type;
585
- }
586
- function createCell(block) {
587
- if (!block) return null;
588
- return {
589
- baseBlockType: getBaseNodeType(block),
590
- block,
591
- blockType: getNormalizedBlockType(block)
592
- };
593
- }
594
- function getChildren(node) {
595
- const children = node.children;
596
- return Array.isArray(children) ? children : null;
597
- }
598
- function nodesEqual(a, b) {
599
- return JSON.stringify(a) === JSON.stringify(b);
600
- }
601
- function isTextNode(node) {
602
- const record = node;
603
- return record.type === "text" && typeof record.text === "string";
604
- }
605
- function appendStyle(baseStyle, extraStyle) {
606
- const normalizedBase = typeof baseStyle === "string" ? baseStyle.trim() : "";
607
- if (!normalizedBase) return extraStyle;
608
- return `${normalizedBase}${normalizedBase.endsWith(";") ? "" : ";"} ${extraStyle}`;
609
- }
610
- function cloneTextNode(node, text, markKind) {
611
- let { style } = node;
612
- if (markKind === "delete") style = appendStyle(style, DELETE_MARK_STYLE);
613
- else if (markKind === "insert") style = appendStyle(style, INSERT_MARK_STYLE);
614
- return {
615
- ...node,
616
- style,
617
- text
618
- };
619
- }
620
- function cloneNodeWithChildren(node, children) {
621
- return {
622
- ...node,
623
- children
624
- };
625
- }
626
- function decorateSubtree(node, kind) {
627
- if (isTextNode(node)) return cloneTextNode(node, node.text, kind);
628
- const children = getChildren(node);
629
- if (!children) return node;
630
- return cloneNodeWithChildren(node, children.map((child) => decorateSubtree(child, kind)));
631
- }
632
- function reverseText(value) {
633
- return Array.from(value).reverse().join("");
634
- }
635
- function mergeTextOps(ops) {
636
- const merged = [];
637
- for (const op of ops) {
638
- if (!op.text) continue;
639
- const last = merged.at(-1);
640
- if (last && last.kind === op.kind) {
641
- last.text += op.text;
642
- continue;
643
- }
644
- merged.push({ ...op });
645
- }
646
- return merged;
647
- }
648
- function diffMiddleChars(oldChars, newChars) {
649
- const m = oldChars.length;
650
- const n = newChars.length;
651
- if (m === 0 && n === 0) return [];
652
- if (m === 0) return [{
653
- kind: "insert",
654
- text: newChars.join("")
655
- }];
656
- if (n === 0) return [{
657
- kind: "delete",
658
- text: oldChars.join("")
659
- }];
660
- if (m * n > CHAR_DIFF_MAX_MATRIX_CELLS) return [{
661
- kind: "delete",
662
- text: oldChars.join("")
663
- }, {
664
- kind: "insert",
665
- text: newChars.join("")
666
- }];
667
- const dp = Array.from({ length: m + 1 }, () => Array.from({ length: n + 1 }).fill(0));
668
- for (let i = 1; i <= m; i++) for (let j = 1; j <= n; j++) if (oldChars[i - 1] === newChars[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;
669
- else dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
670
- const reversedOps = [];
671
- let i = m;
672
- let j = n;
673
- while (i > 0 && j > 0) {
674
- if (oldChars[i - 1] === newChars[j - 1]) {
675
- const last = reversedOps.at(-1);
676
- if (last && last.kind === "equal") last.text += oldChars[i - 1];
677
- else reversedOps.push({
678
- kind: "equal",
679
- text: oldChars[i - 1]
680
- });
681
- i--;
682
- j--;
683
- continue;
684
- }
685
- if (dp[i - 1][j] >= dp[i][j - 1]) {
686
- const last = reversedOps.at(-1);
687
- if (last && last.kind === "delete") last.text += oldChars[i - 1];
688
- else reversedOps.push({
689
- kind: "delete",
690
- text: oldChars[i - 1]
691
- });
692
- i--;
693
- } else {
694
- const last = reversedOps.at(-1);
695
- if (last && last.kind === "insert") last.text += newChars[j - 1];
696
- else reversedOps.push({
697
- kind: "insert",
698
- text: newChars[j - 1]
699
- });
700
- j--;
701
- }
702
- }
703
- while (i > 0) {
704
- const last = reversedOps.at(-1);
705
- if (last && last.kind === "delete") last.text += oldChars[i - 1];
706
- else reversedOps.push({
707
- kind: "delete",
708
- text: oldChars[i - 1]
709
- });
710
- i--;
711
- }
712
- while (j > 0) {
713
- const last = reversedOps.at(-1);
714
- if (last && last.kind === "insert") last.text += newChars[j - 1];
715
- else reversedOps.push({
716
- kind: "insert",
717
- text: newChars[j - 1]
718
- });
719
- j--;
720
- }
721
- return mergeTextOps(reversedOps.reverse().map((op) => ({
722
- kind: op.kind,
723
- text: reverseText(op.text)
724
- })));
725
- }
726
- function diffTextByChar(oldText, newText) {
727
- const oldChars = Array.from(oldText);
728
- const newChars = Array.from(newText);
729
- let prefix = 0;
730
- while (prefix < oldChars.length && prefix < newChars.length && oldChars[prefix] === newChars[prefix]) prefix++;
731
- let oldSuffix = oldChars.length - 1;
732
- let newSuffix = newChars.length - 1;
733
- while (oldSuffix >= prefix && newSuffix >= prefix && oldChars[oldSuffix] === newChars[newSuffix]) {
734
- oldSuffix--;
735
- newSuffix--;
736
- }
737
- const ops = [];
738
- if (prefix > 0) ops.push({
739
- kind: "equal",
740
- text: oldChars.slice(0, prefix).join("")
741
- });
742
- ops.push(...diffMiddleChars(oldChars.slice(prefix, oldSuffix + 1), newChars.slice(prefix, newSuffix + 1)));
743
- if (oldSuffix < oldChars.length - 1) ops.push({
744
- kind: "equal",
745
- text: oldChars.slice(oldSuffix + 1).join("")
746
- });
747
- return mergeTextOps(ops);
748
- }
749
- function splitTextNodeByCharDiff(oldNode, newNode) {
750
- const ops = diffTextByChar(oldNode.text, newNode.text);
751
- const oldNodes = [];
752
- const newNodes = [];
753
- let changed = false;
754
- for (const op of ops) {
755
- if (!op.text) continue;
756
- if (op.kind === "equal") {
757
- oldNodes.push(cloneTextNode(oldNode, op.text));
758
- newNodes.push(cloneTextNode(newNode, op.text));
759
- continue;
760
- }
761
- changed = true;
762
- if (op.kind === "delete") {
763
- oldNodes.push(cloneTextNode(oldNode, op.text, "delete"));
764
- continue;
765
- }
766
- newNodes.push(cloneTextNode(newNode, op.text, "insert"));
767
- }
768
- return {
769
- changed,
770
- newNodes: newNodes.length > 0 ? newNodes : [newNode],
771
- oldNodes: oldNodes.length > 0 ? oldNodes : [oldNode]
772
- };
773
- }
774
- function alignNodes(oldNodes, newNodes) {
775
- const m = oldNodes.length;
776
- const n = newNodes.length;
777
- const dp = Array.from({ length: m + 1 }, () => Array.from({ length: n + 1 }).fill(0));
778
- for (let i = 1; i <= m; i++) for (let j = 1; j <= n; j++) {
779
- const skip = Math.max(dp[i - 1][j], dp[i][j - 1]);
780
- const oldType = getNormalizedBlockType(oldNodes[i - 1]);
781
- const newType = getNormalizedBlockType(newNodes[j - 1]);
782
- if (oldType && oldType === newType) {
783
- const score = nodesEqual(oldNodes[i - 1], newNodes[j - 1]) ? 2 : 1;
784
- dp[i][j] = Math.max(skip, dp[i - 1][j - 1] + score);
785
- } else dp[i][j] = skip;
786
- }
787
- const ops = [];
788
- let i = m;
789
- let j = n;
790
- while (i > 0 && j > 0) {
791
- const oldType = getNormalizedBlockType(oldNodes[i - 1]);
792
- const newType = getNormalizedBlockType(newNodes[j - 1]);
793
- if (oldType && oldType === newType) {
794
- const exact = nodesEqual(oldNodes[i - 1], newNodes[j - 1]);
795
- const score = exact ? 2 : 1;
796
- if (dp[i][j] === dp[i - 1][j - 1] + score) {
797
- ops.push(exact ? {
798
- kind: "equal",
799
- node: oldNodes[i - 1]
800
- } : {
801
- kind: "modify",
802
- newNode: newNodes[j - 1],
803
- oldNode: oldNodes[i - 1]
804
- });
805
- i--;
806
- j--;
807
- continue;
808
- }
809
- }
810
- if (dp[i - 1][j] >= dp[i][j - 1]) {
811
- ops.push({
812
- kind: "delete",
813
- node: oldNodes[i - 1]
814
- });
815
- i--;
816
- } else {
817
- ops.push({
818
- kind: "insert",
819
- node: newNodes[j - 1]
820
- });
821
- j--;
822
- }
823
- }
824
- while (i > 0) ops.push({
825
- kind: "delete",
826
- node: oldNodes[--i]
827
- });
828
- while (j > 0) ops.push({
829
- kind: "insert",
830
- node: newNodes[--j]
831
- });
832
- return ops.reverse();
833
- }
834
- function diffChildrenInline(oldChildren, newChildren) {
835
- const ops = alignNodes(oldChildren, newChildren);
836
- const nextOldChildren = [];
837
- const nextNewChildren = [];
838
- let changed = false;
839
- for (const op of ops) switch (op.kind) {
840
- case "equal":
841
- nextOldChildren.push(op.node);
842
- nextNewChildren.push(op.node);
843
- break;
844
- case "delete":
845
- changed = true;
846
- nextOldChildren.push(decorateSubtree(op.node, "delete"));
847
- break;
848
- case "insert":
849
- changed = true;
850
- nextNewChildren.push(decorateSubtree(op.node, "insert"));
851
- break;
852
- case "modify": {
853
- changed = true;
854
- if (isTextNode(op.oldNode) && isTextNode(op.newNode)) {
855
- const textDiff = splitTextNodeByCharDiff(op.oldNode, op.newNode);
856
- nextOldChildren.push(...textDiff.oldNodes);
857
- nextNewChildren.push(...textDiff.newNodes);
858
- break;
859
- }
860
- const nested = diffNodeInline(op.oldNode, op.newNode);
861
- nextOldChildren.push(nested.oldNode);
862
- nextNewChildren.push(nested.newNode);
863
- break;
864
- }
865
- }
866
- return {
867
- changed,
868
- newChildren: nextNewChildren,
869
- oldChildren: nextOldChildren
870
- };
871
- }
872
- function diffNodeInline(oldNode, newNode) {
873
- if (nodesEqual(oldNode, newNode)) return {
874
- changed: false,
875
- newNode,
876
- oldNode
877
- };
878
- const oldChildren = getChildren(oldNode);
879
- const newChildren = getChildren(newNode);
880
- if (!oldChildren || !newChildren) return {
881
- changed: true,
882
- newNode,
883
- oldNode
884
- };
885
- const childDiff = diffChildrenInline(oldChildren, newChildren);
886
- if (!childDiff.changed) return {
887
- changed: false,
888
- newNode,
889
- oldNode
890
- };
891
- return {
892
- changed: true,
893
- newNode: cloneNodeWithChildren(newNode, childDiff.newChildren),
894
- oldNode: cloneNodeWithChildren(oldNode, childDiff.oldChildren)
895
- };
896
- }
897
- function getRootChildren(state) {
898
- return Array.isArray(state.root.children) ? [...state.root.children] : [];
899
- }
900
- function computeLexicalDiffRows(oldState, newState) {
901
- const ops = alignNodes(getRootChildren(oldState), getRootChildren(newState));
902
- const rows = [];
903
- let index = 0;
904
- while (index < ops.length) {
905
- const op = ops[index];
906
- if (op.kind === "equal") {
907
- rows.push({
908
- kind: "equal",
909
- newCell: createCell(op.node),
910
- oldCell: createCell(op.node)
911
- });
912
- index++;
913
- continue;
914
- }
915
- if (op.kind === "modify") {
916
- const diffed = diffNodeInline(op.oldNode, op.newNode);
917
- rows.push({
918
- kind: "modify",
919
- newCell: createCell(diffed.newNode),
920
- oldCell: createCell(diffed.oldNode)
921
- });
922
- index++;
923
- continue;
924
- }
925
- const deletes = [];
926
- const inserts = [];
927
- while (index < ops.length && (ops[index].kind === "delete" || ops[index].kind === "insert")) {
928
- const current = ops[index];
929
- if (current.kind === "delete") deletes.push(current.node);
930
- else if (current.kind === "insert") inserts.push(current.node);
931
- index++;
932
- }
933
- const maxLength = Math.max(deletes.length, inserts.length);
934
- for (let pairIndex = 0; pairIndex < maxLength; pairIndex++) {
935
- const oldBlock = deletes[pairIndex] ?? null;
936
- const newBlock = inserts[pairIndex] ?? null;
937
- if (oldBlock && newBlock) {
938
- rows.push({
939
- kind: "modify",
940
- newCell: createCell(newBlock),
941
- oldCell: createCell(oldBlock)
942
- });
943
- continue;
944
- }
945
- if (oldBlock) {
946
- rows.push({
947
- kind: "delete",
948
- newCell: null,
949
- oldCell: createCell(oldBlock)
950
- });
951
- continue;
952
- }
953
- rows.push({
954
- kind: "insert",
955
- newCell: createCell(newBlock),
956
- oldCell: null
957
- });
958
- }
959
- }
960
- return rows;
961
- }
962
- //#endregion
963
- //#region src/renderer/diff/style.ts
964
- const base = createStaticStyles(({ css, cssVar }) => ({
965
- body: css`
966
- display: flex;
967
- flex-direction: column;
968
- background: ${cssVar.colorBgContainer};
969
- `,
970
- cell: css`
971
- overflow: auto;
972
-
973
- min-width: 0;
974
- min-height: 24px;
975
- padding-block: 8px;
976
- padding-inline: 16px;
977
-
978
- > div {
979
- width: 100%;
980
- min-width: 0;
981
- }
982
- `,
983
- deleteCell: css`
984
- background: color-mix(in srgb, ${cssVar.colorError} 10%, transparent);
985
- `,
986
- emptyCell: css`
987
- background: ${cssVar.colorFillQuaternary};
988
- `,
989
- insertCell: css`
990
- background: color-mix(in srgb, ${cssVar.colorSuccess} 10%, transparent);
991
- `,
992
- row: css`
993
- display: grid;
994
- grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
995
- `
996
- }));
997
- const defaultOverrides = createStaticStyles(({ css, cssVar }) => ({
998
- header: css`
999
- display: grid;
1000
- grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
1001
- border-block-end: 1px solid ${cssVar.colorBorderSecondary};
1002
- background: ${cssVar.colorFillQuaternary};
1003
- `,
1004
- headerCell: css`
1005
- padding-block: 8px;
1006
- padding-inline: 16px;
1007
-
1008
- font-size: 12px;
1009
- font-weight: 600;
1010
- color: ${cssVar.colorTextSecondary};
1011
- text-transform: uppercase;
1012
- letter-spacing: 0.05em;
1013
- `,
1014
- headerOld: css`
1015
- border-inline-end: 1px solid ${cssVar.colorBorderSecondary};
1016
- `,
1017
- root: css`
1018
- overflow: hidden;
1019
-
1020
- border: 1px solid ${cssVar.colorBorderSecondary};
1021
- border-radius: ${cssVar.borderRadiusSM};
1022
-
1023
- font-size: 14px;
1024
-
1025
- background: ${cssVar.colorBgContainer};
1026
- `
1027
- }));
1028
- const borderlessOverrides = createStaticStyles(({ css, cssVar }) => ({
1029
- body: css`
1030
- & > *:nth-child(odd) {
1031
- background: ${cssVar.colorFillQuaternary};
1032
- }
1033
- `,
1034
- header: css`
1035
- display: grid;
1036
- grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
1037
- `,
1038
- headerCell: css`
1039
- padding-block: 8px;
1040
- padding-inline: 16px;
1041
-
1042
- font-size: 12px;
1043
- font-weight: 600;
1044
- color: ${cssVar.colorTextSecondary};
1045
- text-transform: uppercase;
1046
- letter-spacing: 0.05em;
1047
- `,
1048
- root: css`
1049
- overflow: hidden;
1050
- font-size: 14px;
1051
- background: ${cssVar.colorBgContainer};
1052
- `
1053
- }));
1054
- function merge(baseSet, overrides) {
1055
- const result = {};
1056
- const allKeys = new Set([...Object.keys(baseSet), ...Object.keys(overrides)]);
1057
- for (const key of allKeys) result[key] = cx(baseSet[key], overrides[key]);
1058
- return result;
1059
- }
1060
- const diffStyles = {
1061
- borderless: merge(base, borderlessOverrides),
1062
- default: merge(base, defaultOverrides)
1063
- };
1064
- //#endregion
1065
- //#region src/renderer/LexicalDiff.tsx
1066
- function wrapBlock(block) {
1067
- return { root: {
1068
- children: [block],
1069
- direction: "ltr",
1070
- format: "",
1071
- indent: 0,
1072
- type: "root",
1073
- version: 1
1074
- } };
1075
- }
1076
- function RowCell({ className, content }) {
1077
- return /* @__PURE__ */ jsx("div", {
1078
- className,
1079
- children: content
1080
- });
1081
- }
1082
- function LexicalDiff({ oldValue, newValue, variant = "default", appearance = "default", extraNodes, overrides, renderContext, labels, blockRenderers, renderBlockDiff, className, style }) {
1083
- const styles = diffStyles[appearance];
1084
- const rows = useMemo(() => computeLexicalDiffRows(oldValue, newValue), [oldValue, newValue]);
1085
- const renderDefaultCell = (block) => {
1086
- if (!block) return null;
1087
- return /* @__PURE__ */ jsx(LexicalRenderer, {
1088
- extraNodes,
1089
- overrides,
1090
- renderContext,
1091
- value: wrapBlock(block),
1092
- variant
1093
- });
1094
- };
1095
- const renderRow = (row, index) => {
1096
- const blockType = row.oldCell?.blockType && row.newCell?.blockType ? row.oldCell.blockType === row.newCell.blockType ? row.oldCell.blockType : null : row.oldCell?.blockType ?? row.newCell?.blockType ?? null;
1097
- const baseBlockType = row.oldCell?.baseBlockType && row.newCell?.baseBlockType ? row.oldCell.baseBlockType === row.newCell.baseBlockType ? row.oldCell.baseBlockType : null : row.oldCell?.baseBlockType ?? row.newCell?.baseBlockType ?? null;
1098
- const context = {
1099
- baseBlockType,
1100
- blockType,
1101
- newBaseBlockType: row.newCell?.baseBlockType ?? null,
1102
- newBlockType: row.newCell?.blockType ?? null,
1103
- oldBaseBlockType: row.oldCell?.baseBlockType ?? null,
1104
- oldBlockType: row.oldCell?.blockType ?? null,
1105
- renderDefaultNew: () => renderDefaultCell(row.newCell?.block ?? null),
1106
- renderDefaultOld: () => renderDefaultCell(row.oldCell?.block ?? null),
1107
- row
1108
- };
1109
- const renderers = [
1110
- blockType ? blockRenderers?.[blockType] : void 0,
1111
- baseBlockType && baseBlockType !== blockType ? blockRenderers?.[baseBlockType] : void 0,
1112
- renderBlockDiff
1113
- ];
1114
- let rendered;
1115
- for (const renderer of renderers) {
1116
- if (!renderer) continue;
1117
- const next = renderer(context);
1118
- if (next === null) continue;
1119
- rendered = next;
1120
- break;
1121
- }
1122
- const oldContent = rendered?.old ?? context.renderDefaultOld();
1123
- const newContent = rendered?.new ?? context.renderDefaultNew();
1124
- return /* @__PURE__ */ jsxs("div", {
1125
- className: styles.row,
1126
- children: [/* @__PURE__ */ jsx(RowCell, {
1127
- className: cx(styles.cell, !row.oldCell && styles.emptyCell, row.kind === "delete" && styles.deleteCell),
1128
- content: oldContent
1129
- }), /* @__PURE__ */ jsx(RowCell, {
1130
- className: cx(styles.cell, !row.newCell && styles.emptyCell, row.kind === "insert" && styles.insertCell),
1131
- content: newContent
1132
- })]
1133
- }, `row-${index}`);
1134
- };
1135
- return /* @__PURE__ */ jsxs("div", {
1136
- className: cx(styles.root, className),
1137
- style,
1138
- children: [/* @__PURE__ */ jsxs("div", {
1139
- className: styles.header,
1140
- children: [/* @__PURE__ */ jsx("div", {
1141
- className: cx(styles.headerCell, styles.headerOld),
1142
- children: labels?.old ?? "Old"
1143
- }), /* @__PURE__ */ jsx("div", {
1144
- className: styles.headerCell,
1145
- children: labels?.new ?? "New"
1146
- })]
1147
- }), /* @__PURE__ */ jsx("div", {
1148
- className: styles.body,
1149
- children: rows.map(renderRow)
1150
- })]
1151
- });
1152
- }
1153
- //#endregion
1
+ import { loadLanguage } from "./renderer/engine/shiki.js";
2
+ import { rendererNodes } from "./renderer/nodes/index.js";
3
+ import { createDefaultRenderers } from "./renderer/renderers/index.js";
4
+ import { LexicalRenderer } from "./renderer/LexicalRenderer.js";
5
+ import { LexicalDiff } from "./renderer/LexicalDiff.js";
1154
6
  export { LexicalDiff, LexicalRenderer, createDefaultRenderers, loadLanguage, rendererNodes };