@lobehub/editor 4.15.1 → 4.16.0

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 (537) 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 +60 -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 +2 -0
  66. package/es/headless.js +782 -20254
  67. package/es/index.d.ts +113 -3059
  68. package/es/index.js +102 -8485
  69. package/es/locale/index.d.ts +63 -0
  70. package/es/locale/index.js +66 -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 +162 -0
  87. package/es/plugins/block/react/ReactBlockPlugin.d.ts +18 -0
  88. package/es/plugins/block/react/ReactBlockPlugin.js +613 -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 +122 -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 +61 -0
  96. package/es/plugins/block/service/i-block-menu-service.js +67 -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 +181 -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 +106 -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 +29 -0
  364. package/es/plugins/table/command/index.js +238 -0
  365. package/es/plugins/table/index.d.ts +4 -0
  366. package/es/plugins/table/node/index.d.ts +2 -0
  367. package/es/plugins/table/node/index.js +146 -0
  368. package/es/plugins/table/plugin/index.d.ts +14 -0
  369. package/es/plugins/table/plugin/index.js +361 -0
  370. package/es/plugins/table/react/TableActionMenu/ActionMenu.js +296 -0
  371. package/es/plugins/table/react/TableActionMenu/index.js +133 -0
  372. package/es/plugins/table/react/TableActionMenu/style.js +20 -0
  373. package/es/plugins/table/react/TableActionMenu/utils.js +34 -0
  374. package/es/plugins/table/react/TableColController.js +354 -0
  375. package/es/plugins/table/react/TableController/hooks.js +201 -0
  376. package/es/plugins/table/react/TableController/style.js +264 -0
  377. package/es/plugins/table/react/TableController/utils.js +25 -0
  378. package/es/plugins/table/react/TableControllerButton.js +81 -0
  379. package/es/plugins/table/react/TableControllerMenu.js +123 -0
  380. package/es/plugins/table/react/TableHoverActions/index.js +147 -0
  381. package/es/plugins/table/react/TableHoverActions/style.js +14 -0
  382. package/es/plugins/table/react/TableHoverActions/utils.js +32 -0
  383. package/es/plugins/table/react/TableInsertButton.js +25 -0
  384. package/es/plugins/table/react/TableResize/index.js +328 -0
  385. package/es/plugins/table/react/TableResize/style.js +16 -0
  386. package/es/plugins/table/react/TableResize/utils.js +9 -0
  387. package/es/plugins/table/react/TableRowController.js +349 -0
  388. package/es/plugins/table/react/hooks.js +77 -0
  389. package/es/plugins/table/react/index.d.ts +7 -0
  390. package/es/plugins/table/react/index.js +172 -0
  391. package/es/plugins/table/react/style.js +144 -0
  392. package/es/plugins/table/react/type.d.ts +10 -0
  393. package/es/plugins/table/react/useAutoFitPastedTable.js +189 -0
  394. package/es/plugins/table/service/i-table-controller-menu-service.d.ts +44 -0
  395. package/es/plugins/table/service/i-table-controller-menu-service.js +31 -0
  396. package/es/plugins/table/service/index.d.ts +1 -0
  397. package/es/plugins/table/utils/autoFitColumnWidth.js +87 -0
  398. package/es/plugins/table/utils/distributeColumnWidth.js +37 -0
  399. package/es/plugins/table/utils/index.js +148 -0
  400. package/es/plugins/toolbar/command/index.d.ts +12 -0
  401. package/es/plugins/toolbar/command/index.js +17 -0
  402. package/es/plugins/toolbar/index.d.ts +2 -0
  403. package/es/plugins/toolbar/react/index.d.ts +7 -0
  404. package/es/plugins/toolbar/react/index.js +109 -0
  405. package/es/plugins/toolbar/react/style.js +55 -0
  406. package/es/plugins/toolbar/react/type.d.ts +9 -0
  407. package/es/plugins/toolbar/utils/getDOMRangeRect.js +20 -0
  408. package/es/plugins/toolbar/utils/setFloatingElemPosition.js +50 -0
  409. package/es/plugins/upload/index.d.ts +2 -0
  410. package/es/plugins/upload/plugin/index.d.ts +6 -0
  411. package/es/plugins/upload/plugin/index.js +47 -0
  412. package/es/plugins/upload/service/i-upload-service.d.ts +13 -0
  413. package/es/plugins/upload/service/i-upload-service.js +30 -0
  414. package/es/plugins/upload/utils/index.js +15 -0
  415. package/es/plugins/virtual-block/index.d.ts +2 -0
  416. package/es/plugins/virtual-block/plugin/index.d.ts +8 -0
  417. package/es/plugins/virtual-block/plugin/index.js +19 -0
  418. package/es/plugins/virtual-block/plugin/register.js +150 -0
  419. package/es/plugins/virtual-block/react/ReactVirtualBlock.d.ts +6 -0
  420. package/es/plugins/virtual-block/react/ReactVirtualBlock.js +15 -0
  421. package/es/plugins/virtual-block/react/index.d.ts +1 -0
  422. package/es/react/ChatInput/ChatInput.d.ts +7 -0
  423. package/es/react/ChatInput/ChatInput.js +91 -0
  424. package/es/react/ChatInput/index.d.ts +2 -0
  425. package/es/react/ChatInput/style.js +115 -0
  426. package/es/react/ChatInput/type.d.ts +32 -0
  427. package/es/react/ChatInputActionBar/ChatInputActionBar.d.ts +7 -0
  428. package/es/react/ChatInputActionBar/ChatInputActionBar.js +22 -0
  429. package/es/react/ChatInputActionBar/index.d.ts +2 -0
  430. package/es/react/ChatInputActionBar/style.js +7 -0
  431. package/es/react/ChatInputActionBar/type.d.ts +10 -0
  432. package/es/react/ChatInputActions/ChatInputActions.d.ts +7 -0
  433. package/es/react/ChatInputActions/ChatInputActions.js +65 -0
  434. package/es/react/ChatInputActions/components/ActionItem.js +46 -0
  435. package/es/react/ChatInputActions/components/ActionRender.js +45 -0
  436. package/es/react/ChatInputActions/components/CollapsedActions.js +60 -0
  437. package/es/react/ChatInputActions/components/useDisplayActionCount.js +45 -0
  438. package/es/react/ChatInputActions/index.d.ts +2 -0
  439. package/es/react/ChatInputActions/style.js +20 -0
  440. package/es/react/ChatInputActions/type.d.ts +36 -0
  441. package/es/react/CodeLanguageSelect/CodeLanguageSelect.d.ts +7 -0
  442. package/es/react/CodeLanguageSelect/CodeLanguageSelect.js +67 -0
  443. package/es/react/CodeLanguageSelect/index.d.ts +2 -0
  444. package/es/react/CodeLanguageSelect/style.js +7 -0
  445. package/es/react/CodeLanguageSelect/type.d.ts +6 -0
  446. package/es/react/Editor/Editor.js +108 -0
  447. package/es/react/Editor/index.d.ts +16 -0
  448. package/es/react/Editor/index.js +11 -0
  449. package/es/react/Editor/type.d.ts +64 -0
  450. package/es/react/Editor/utils.d.ts +6 -0
  451. package/es/react/Editor/utils.js +6 -0
  452. package/es/react/EditorProvider/index.d.ts +28 -0
  453. package/es/react/EditorProvider/index.js +18 -0
  454. package/es/react/FloatActions/FloatActions.d.ts +7 -0
  455. package/es/react/FloatActions/FloatActions.js +34 -0
  456. package/es/react/FloatActions/components/ActionItem.js +46 -0
  457. package/es/react/FloatActions/components/ActionRender.js +45 -0
  458. package/es/react/FloatActions/components/CollapsedActions.js +60 -0
  459. package/es/react/FloatActions/index.d.ts +2 -0
  460. package/es/react/FloatActions/style.js +19 -0
  461. package/es/react/FloatActions/type.d.ts +33 -0
  462. package/es/react/FloatMenu/FloatMenu.d.ts +7 -0
  463. package/es/react/FloatMenu/FloatMenu.js +32 -0
  464. package/es/react/FloatMenu/index.d.ts +2 -0
  465. package/es/react/FloatMenu/style.js +28 -0
  466. package/es/react/FloatMenu/type.d.ts +25 -0
  467. package/es/react/SendButton/SendButton.d.ts +7 -0
  468. package/es/react/SendButton/SendButton.js +107 -0
  469. package/es/react/SendButton/components/SendIcon.js +23 -0
  470. package/es/react/SendButton/components/StopIcon.js +56 -0
  471. package/es/react/SendButton/index.d.ts +2 -0
  472. package/es/react/SendButton/style.js +68 -0
  473. package/es/react/SendButton/type.d.ts +12 -0
  474. package/es/react/SlashMenu/SlashMenu.d.ts +7 -0
  475. package/es/react/SlashMenu/SlashMenu.js +40 -0
  476. package/es/react/SlashMenu/index.d.ts +2 -0
  477. package/es/react/SlashMenu/type.d.ts +17 -0
  478. package/es/react/hooks/useEditor.d.ts +5 -0
  479. package/es/react/hooks/useEditor.js +8 -0
  480. package/es/react/hooks/useEditorState/index.d.ts +71 -0
  481. package/es/react/hooks/useEditorState/index.js +347 -0
  482. package/es/react/hooks/useEditorState/utils.js +28 -0
  483. package/es/react/hooks/useSize.js +61 -0
  484. package/es/react.d.ts +22 -334
  485. package/es/react.js +13 -1573
  486. package/es/renderer/LexicalDiff.d.ts +41 -0
  487. package/es/renderer/LexicalDiff.js +96 -0
  488. package/es/renderer/LexicalRenderer.d.ts +16 -0
  489. package/es/renderer/LexicalRenderer.js +48 -0
  490. package/es/renderer/diff/compute.js +396 -0
  491. package/es/renderer/diff/style.d.ts +4 -0
  492. package/es/renderer/diff/style.js +104 -0
  493. package/es/renderer/diff/types.d.ts +32 -0
  494. package/es/renderer/engine/render-builtin-node.js +196 -0
  495. package/es/renderer/engine/render-text-node.js +33 -0
  496. package/es/renderer/engine/render-tree.js +35 -0
  497. package/es/renderer/engine/shiki.d.ts +4 -0
  498. package/es/renderer/engine/shiki.js +24 -0
  499. package/es/renderer/engine/utils.js +16 -0
  500. package/es/renderer/nodes/index.d.ts +6 -0
  501. package/es/renderer/nodes/index.js +44 -0
  502. package/es/renderer/renderers/codeblock.js +21 -0
  503. package/es/renderer/renderers/file.js +29 -0
  504. package/es/renderer/renderers/horizontalrule.js +29 -0
  505. package/es/renderer/renderers/image.js +35 -0
  506. package/es/renderer/renderers/index.d.ts +6 -0
  507. package/es/renderer/renderers/index.js +21 -0
  508. package/es/renderer/renderers/math.js +19 -0
  509. package/es/renderer/renderers/mention.js +15 -0
  510. package/es/renderer/renderers/mermaid.js +17 -0
  511. package/es/renderer/style.js +52 -0
  512. package/es/renderer/types.d.ts +29 -0
  513. package/es/renderer.d.ts +8 -114
  514. package/es/renderer.js +5 -1153
  515. package/es/types/hotkey.d.ts +76 -0
  516. package/es/types/hotkey.js +65 -0
  517. package/es/types/index.d.ts +2 -0
  518. package/es/types/kernel.d.ts +359 -0
  519. package/es/types/locale.d.ts +11 -0
  520. package/es/utils/cx.js +4 -0
  521. package/es/utils/debug.d.ts +425 -0
  522. package/es/{debug-CIvbNHJu.js → utils/debug.js} +3 -35
  523. package/es/utils/hotkey/isHotkeyMatch.js +17 -0
  524. package/es/utils/hotkey/parseHotkeys.js +53 -0
  525. package/es/utils/hotkey/registerHotkey.d.ts +18 -0
  526. package/es/utils/hotkey/registerHotkey.js +35 -0
  527. package/es/utils/scrollIntoView.d.ts +8 -0
  528. package/es/utils/scrollIntoView.js +29 -0
  529. package/es/utils/updatePosition.js +26 -0
  530. package/es/utils/url.d.ts +18 -0
  531. package/es/utils/url.js +34 -0
  532. package/package.json +4 -1
  533. package/es/ReactSlashPlugin-BiVy_Iwf.js +0 -23072
  534. package/es/codemirror-3POv7f__.js +0 -923
  535. package/es/index-DHGp94p0.d.ts +0 -916
  536. package/es/style-DADgHVA1.js +0 -2889
  537. package/es/style-DMdPzCo-.js +0 -999
@@ -0,0 +1,114 @@
1
+ import { IEditor } from "../../../types/kernel.js";
2
+ import { ISlashMenuOption, ISlashOption, SlashOptions } from "../service/i-slash-service.js";
3
+ import { FC, ReactElement } from "react";
4
+ import { IFuseOptions } from "fuse.js";
5
+
6
+ //#region src/plugins/slash/react/type.d.ts
7
+ interface ReactSlashOptionProps {
8
+ /**
9
+ * Complete Fuse.js configuration options
10
+ * @example
11
+ * {
12
+ * keys: ['key', 'label', 'description'],
13
+ * threshold: 0.3,
14
+ * includeScore: true,
15
+ * includeMatches: true
16
+ * }
17
+ */
18
+ fuseOptions?: IFuseOptions<ISlashMenuOption>;
19
+ /**
20
+ * Searchable options
21
+ */
22
+ items?: SlashOptions['items'];
23
+ /**
24
+ * Maximum search length
25
+ * Default is 75
26
+ */
27
+ maxLength?: number;
28
+ onSelect?: (editor: IEditor, option: ISlashMenuOption) => void;
29
+ /**
30
+ * Custom render component
31
+ */
32
+ renderComp?: FC<MenuRenderProps>;
33
+ /**
34
+ * Fuse.js search keys for fuzzy matching
35
+ * Default is ['key']
36
+ * @example ['key', 'label', 'description']
37
+ * @deprecated Use fuseOptions instead
38
+ */
39
+ searchKeys?: string[];
40
+ /**
41
+ * Trigger character
42
+ */
43
+ trigger?: SlashOptions['trigger'];
44
+ }
45
+ interface MenuRenderProps {
46
+ /**
47
+ * Current active option key
48
+ */
49
+ activeKey: string | null;
50
+ /**
51
+ * Loading state
52
+ */
53
+ loading?: boolean;
54
+ /**
55
+ * Actively trigger selection
56
+ * @param option Currently selected element
57
+ */
58
+ onSelect?: (option: ISlashMenuOption) => void;
59
+ open?: boolean;
60
+ /**
61
+ * Currently searched options
62
+ */
63
+ options: Array<ISlashOption>;
64
+ /**
65
+ * Actively set current active option key
66
+ * @param key
67
+ * @returns
68
+ */
69
+ setActiveKey: (key: string | null) => void;
70
+ }
71
+ /**
72
+ * SlashMenu component props - only responsible for rendering
73
+ */
74
+ interface SlashMenuProps {
75
+ /** Current active option key */
76
+ activeKey: string | null;
77
+ /** Anchor element className */
78
+ anchorClassName?: string;
79
+ /** Custom render component if provided */
80
+ customRender?: FC<MenuRenderProps>;
81
+ /** Custom popup container for portal rendering and scroll tracking */
82
+ getPopupContainer?: () => HTMLElement | null;
83
+ /** Loading state */
84
+ loading: boolean;
85
+ /** Callback to set active key */
86
+ onActiveKeyChange: (key: string | null) => void;
87
+ /** Callback when menu should close */
88
+ onClose: () => void;
89
+ /** Callback when an option is selected */
90
+ onSelect: (option: ISlashMenuOption) => void;
91
+ /** Whether the menu is open */
92
+ open: boolean;
93
+ /** Available options to display */
94
+ options: Array<ISlashOption>;
95
+ /** Force menu placement direction, skipping auto-flip detection */
96
+ placement?: 'bottom' | 'top';
97
+ /** Menu position */
98
+ position: {
99
+ getRect?: () => DOMRect;
100
+ rect?: DOMRect;
101
+ x: number;
102
+ y: number;
103
+ };
104
+ }
105
+ interface ReactSlashPluginProps {
106
+ anchorClassName?: string;
107
+ children?: (ReactElement<ReactSlashOptionProps> | undefined) | (ReactElement<ReactSlashOptionProps> | undefined)[];
108
+ /** Custom popup container for portal rendering and scroll tracking */
109
+ getPopupContainer?: () => HTMLElement | null;
110
+ /** Force menu placement direction, skipping auto-flip detection */
111
+ placement?: 'bottom' | 'top';
112
+ }
113
+ //#endregion
114
+ export { MenuRenderProps, ReactSlashOptionProps, ReactSlashPluginProps, SlashMenuProps };
@@ -0,0 +1,18 @@
1
+ //#region src/plugins/slash/react/utils.ts
2
+ function setCancelablePromise(executor) {
3
+ let isCancelled = false;
4
+ return {
5
+ cancel: () => {
6
+ isCancelled = true;
7
+ },
8
+ promise: new Promise((resolve, reject) => {
9
+ executor((value) => {
10
+ if (!isCancelled) resolve(value);
11
+ }, (reason) => {
12
+ if (!isCancelled) reject(reason);
13
+ });
14
+ })
15
+ };
16
+ }
17
+ //#endregion
18
+ export { setCancelablePromise };
@@ -0,0 +1,50 @@
1
+ import { IEditor, IServiceID } from "../../../types/kernel.js";
2
+ import { DropdownMenuItemType } from "@lobehub/ui";
3
+ import Fuse, { IFuseOptions } from "fuse.js";
4
+
5
+ //#region src/plugins/slash/service/i-slash-service.d.ts
6
+ type ISlashDividerOption = {
7
+ type: 'divider';
8
+ };
9
+ interface ISlashMenuOption extends DropdownMenuItemType {
10
+ metadata?: Record<string, any>;
11
+ onSelect?: (editor: IEditor, matchingString: string) => void;
12
+ }
13
+ type ISlashOption = ISlashMenuOption | ISlashDividerOption;
14
+ interface SlashOptions {
15
+ allowWhitespace?: boolean;
16
+ /**
17
+ * Complete Fuse.js configuration options
18
+ * @example
19
+ * {
20
+ * keys: ['key', 'label', 'description'],
21
+ * threshold: 0.3,
22
+ * includeScore: true,
23
+ * includeMatches: true
24
+ * }
25
+ */
26
+ fuseOptions?: IFuseOptions<ISlashMenuOption>;
27
+ items: Array<ISlashOption> | ((search: {
28
+ leadOffset: number;
29
+ matchingString: string;
30
+ replaceableString: string;
31
+ } | null) => Promise<Array<ISlashOption>>);
32
+ maxLength?: number;
33
+ minLength?: number;
34
+ punctuation?: string;
35
+ /**
36
+ * Fuse.js search keys for fuzzy matching
37
+ * Default is ['key']
38
+ * @example ['key', 'label', 'description']
39
+ * @deprecated Use fuseOptions instead
40
+ */
41
+ searchKeys?: string[];
42
+ trigger: string;
43
+ }
44
+ interface ISlashService {
45
+ registerSlash(options: SlashOptions): void;
46
+ updateOptions(options: SlashOptions[]): void;
47
+ }
48
+ declare const ISlashService: IServiceID<ISlashService>;
49
+ //#endregion
50
+ export { ISlashMenuOption, ISlashOption, ISlashService, SlashOptions };
@@ -0,0 +1,55 @@
1
+ import { createDebugLogger, init_debug } from "../../../utils/debug.js";
2
+ import { genServiceId } from "../../../editor-kernel/utils.js";
3
+ import { getBasicTypeaheadTriggerMatch } from "../utils/utils.js";
4
+ import Fuse from "fuse.js";
5
+ //#region src/plugins/slash/service/i-slash-service.ts
6
+ init_debug();
7
+ const ISlashService = genServiceId("SlashService");
8
+ var SlashService = class {
9
+ constructor(kernel) {
10
+ this.kernel = kernel;
11
+ this.triggerMap = /* @__PURE__ */ new Map();
12
+ this.triggerFnMap = /* @__PURE__ */ new Map();
13
+ this.triggerFuseMap = /* @__PURE__ */ new Map();
14
+ this.logger = createDebugLogger("service", "slash");
15
+ }
16
+ registerSlash(options, update = false) {
17
+ if (this.triggerMap.has(options.trigger) && !update) if (this.kernel.isHotReloadMode()) this.logger.warn(`🔄 Overriding slash trigger "${options.trigger}"`);
18
+ else throw new Error(`Slash trigger "${options.trigger}" is already registered.`);
19
+ this.triggerMap.set(options.trigger, options);
20
+ this.triggerFnMap.set(options.trigger, getBasicTypeaheadTriggerMatch(options.trigger, {
21
+ allowWhitespace: options.allowWhitespace,
22
+ maxLength: options.maxLength,
23
+ minLength: options.minLength,
24
+ punctuation: options.punctuation
25
+ }));
26
+ this.logger.debug(`⚡ Slash trigger: ${options.trigger}`);
27
+ if (Array.isArray(options.items)) {
28
+ const searchableItems = options.items.filter((item) => !("type" in item) || item.type !== "divider");
29
+ const fuseConfig = options.fuseOptions || { keys: options.searchKeys || ["key"] };
30
+ this.triggerFuseMap.set(options.trigger, new Fuse(searchableItems, fuseConfig));
31
+ }
32
+ }
33
+ removeAllOptions() {
34
+ this.triggerMap.clear();
35
+ this.triggerFnMap.clear();
36
+ this.triggerFuseMap.clear();
37
+ }
38
+ updateOptions(options) {
39
+ this.removeAllOptions();
40
+ options.forEach((option) => {
41
+ this.registerSlash(option);
42
+ });
43
+ }
44
+ getSlashOptions(trigger) {
45
+ return this.triggerMap.get(trigger);
46
+ }
47
+ getSlashTriggerFn(trigger) {
48
+ return this.triggerFnMap.get(trigger);
49
+ }
50
+ getSlashFuse(trigger) {
51
+ return this.triggerFuseMap.get(trigger);
52
+ }
53
+ };
54
+ //#endregion
55
+ export { ISlashService, SlashService };
@@ -0,0 +1 @@
1
+ import { LexicalEditor, RangeSelection, TextNode } from "lexical";
@@ -0,0 +1,97 @@
1
+ import { $getSelection, $isRangeSelection, getDOMSelection } from "lexical";
2
+ //#region src/plugins/slash/utils/utils.ts
3
+ /**
4
+ * Get the text content of the editor up to the anchor point of the selection.
5
+ * Get the text content before the anchor point of the selection
6
+ * @param selection Selection object from Lexical editor
7
+ * @returns
8
+ */
9
+ function getTextUpToAnchor(selection) {
10
+ const anchor = selection.anchor;
11
+ if (anchor.type !== "text") return null;
12
+ const anchorNode = anchor.getNode();
13
+ if (!anchorNode.isSimpleText()) return null;
14
+ const anchorOffset = anchor.offset;
15
+ return anchorNode.getTextContent().slice(0, anchorOffset);
16
+ }
17
+ /**
18
+ *
19
+ * @param editor Lexical editor instance
20
+ * Get the text content before the selection anchor point in the editor
21
+ * @returns
22
+ */
23
+ function getQueryTextForSearch(editor) {
24
+ let text = null;
25
+ editor.getEditorState().read(() => {
26
+ const selection = $getSelection();
27
+ if (!$isRangeSelection(selection)) return;
28
+ text = getTextUpToAnchor(selection);
29
+ });
30
+ return text;
31
+ }
32
+ function tryToPositionRange(leadOffset, range, editorWindow) {
33
+ const domSelection = getDOMSelection(editorWindow);
34
+ if (domSelection === null || !domSelection.isCollapsed) return false;
35
+ const anchorNode = domSelection.anchorNode;
36
+ const startOffset = leadOffset;
37
+ const endOffset = domSelection.anchorOffset;
38
+ if (anchorNode === null || endOffset === null) return false;
39
+ try {
40
+ range.setStart(anchorNode, startOffset);
41
+ range.setEnd(anchorNode, endOffset);
42
+ } catch {
43
+ return false;
44
+ }
45
+ return true;
46
+ }
47
+ const PUNCTUATION = "\\.,\\+\\*\\?\\$\\@\\|#{}\\(\\)\\^\\-\\[\\]\\\\/!%'\"~=<>_:;";
48
+ function getBasicTypeaheadTriggerMatch(trigger, { minLength = 0, maxLength = 75, punctuation = PUNCTUATION, allowWhitespace = false }) {
49
+ return (text) => {
50
+ const validCharsSuffix = allowWhitespace ? "" : "\\s";
51
+ const validChars = "[^" + trigger + punctuation + validCharsSuffix + "]";
52
+ const regexPattern = allowWhitespace ? "(^|\\s|\\()([" + trigger + "]((?:" + validChars + "){0," + maxLength + "}))$" : "(^|\\s|\\()([" + trigger + "]((?:" + validChars + ")*?))(?=\\s|$)";
53
+ const match = new RegExp(regexPattern).exec(text);
54
+ if (match !== null) {
55
+ const maybeLeadingWhitespace = match[1];
56
+ const matchingString = match[3];
57
+ if (matchingString.length >= minLength && matchingString.length <= maxLength) return {
58
+ leadOffset: match.index + maybeLeadingWhitespace.length,
59
+ matchingString,
60
+ replaceableString: match[2]
61
+ };
62
+ }
63
+ return null;
64
+ };
65
+ }
66
+ /**
67
+ * Walk backwards along user input and forward through entity title to try
68
+ * and replace more of the user's text with entity.
69
+ */
70
+ function getFullMatchOffset(documentText, entryText, offset) {
71
+ let triggerOffset = offset;
72
+ for (let i = triggerOffset; i <= entryText.length; i++) if (documentText.slice(-i) === entryText.slice(0, Math.max(0, i))) triggerOffset = i;
73
+ return triggerOffset;
74
+ }
75
+ /**
76
+ * Split Lexical TextNode and return a new TextNode only containing matched text.
77
+ * Common use cases include: removing the node, replacing with a new node.
78
+ */
79
+ function $splitNodeContainingQuery(match) {
80
+ const selection = $getSelection();
81
+ if (!$isRangeSelection(selection) || !selection.isCollapsed()) return null;
82
+ const anchor = selection.anchor;
83
+ if (anchor.type !== "text") return null;
84
+ const anchorNode = anchor.getNode();
85
+ if (!anchorNode.isSimpleText()) return null;
86
+ const selectionOffset = anchor.offset;
87
+ const textContent = anchorNode.getTextContent().slice(0, selectionOffset);
88
+ const characterOffset = match.replaceableString.length;
89
+ const startOffset = selectionOffset - getFullMatchOffset(textContent, match.matchingString, characterOffset);
90
+ if (startOffset < 0) return null;
91
+ let newNode;
92
+ if (startOffset === 0) [newNode] = anchorNode.splitText(selectionOffset);
93
+ else [, newNode] = anchorNode.splitText(startOffset, selectionOffset);
94
+ return newNode;
95
+ }
96
+ //#endregion
97
+ export { $splitNodeContainingQuery, getBasicTypeaheadTriggerMatch, getQueryTextForSearch, tryToPositionRange };
@@ -0,0 +1,29 @@
1
+ import { InsertTableCommandPayloadHeaders } from "@lexical/table";
2
+ import * as _$lexical from "lexical";
3
+ import { LexicalEditor } from "lexical";
4
+
5
+ //#region src/plugins/table/command/index.d.ts
6
+ declare const INSERT_TABLE_COMMAND: _$lexical.LexicalCommand<{
7
+ columns: string;
8
+ includeHeaders?: InsertTableCommandPayloadHeaders;
9
+ rows: string;
10
+ }>;
11
+ declare const SELECT_TABLE_COMMAND: _$lexical.LexicalCommand<{
12
+ anchorIndex?: number;
13
+ columnIndex?: number;
14
+ extend?: boolean;
15
+ rowIndex?: number;
16
+ table: string;
17
+ }>;
18
+ declare const INSERT_TABLE_COLUMN_COMMAND: _$lexical.LexicalCommand<{
19
+ columnIndex: number;
20
+ insertAfter?: boolean;
21
+ table: string;
22
+ }>;
23
+ declare const INSERT_TABLE_ROW_COMMAND: _$lexical.LexicalCommand<{
24
+ insertAfter?: boolean;
25
+ rowIndex: number;
26
+ table: string;
27
+ }>;
28
+ //#endregion
29
+ export { INSERT_TABLE_COLUMN_COMMAND, INSERT_TABLE_COMMAND, INSERT_TABLE_ROW_COMMAND, SELECT_TABLE_COMMAND };
@@ -0,0 +1,238 @@
1
+ import { createDefaultTableColWidths, syncTableWidthDOM } from "../utils/index.js";
2
+ import { getAutoFitTableColumnWidths } from "../utils/autoFitColumnWidth.js";
3
+ import { getDistributedTableColumnWidths } from "../utils/distributeColumnWidth.js";
4
+ import { $computeTableMapSkipCellCheck, $createTableNodeWithDimensions, $createTableSelection, $findTableNode, $insertTableColumnAtSelection, $insertTableRowAtSelection, $isSimpleTable, $isTableNode, $isTableRowNode, $isTableSelection } from "@lexical/table";
5
+ import { $getNodeByKey, $getPreviousSelection, $getSelection, $isElementNode, $isRangeSelection, $isTextNode, $setSelection, COMMAND_PRIORITY_EDITOR, createCommand } from "lexical";
6
+ import { $insertNodeToNearestRoot, mergeRegister } from "@lexical/utils";
7
+ //#region src/plugins/table/command/index.ts
8
+ const INSERT_TABLE_COMMAND = createCommand();
9
+ const SELECT_TABLE_COMMAND = createCommand();
10
+ const INSERT_TABLE_COLUMN_COMMAND = createCommand();
11
+ const INSERT_TABLE_ROW_COMMAND = createCommand();
12
+ const SYNC_TABLE_COLUMN_WIDTH_COMMAND = createCommand();
13
+ const AUTO_FIT_TABLE_COLUMN_WIDTH_COMMAND = createCommand();
14
+ const DISTRIBUTE_TABLE_COLUMN_WIDTH_COMMAND = createCommand();
15
+ const MOVE_TABLE_COLUMN_COMMAND = createCommand();
16
+ const MOVE_TABLE_ROW_COMMAND = createCommand();
17
+ const resetTableScrollLeft = (editor, tableKey) => {
18
+ const tableElement = editor.getElementByKey(tableKey);
19
+ const scrollWrapper = (tableElement instanceof HTMLTableElement ? tableElement : tableElement?.querySelector("table.editor_table, table"))?.closest(".lobe-editor-table-scroll-wrapper");
20
+ if (scrollWrapper) scrollWrapper.scrollLeft = 0;
21
+ };
22
+ const $selectFirstDescendant = (node) => {
23
+ const firstDescendant = node.getFirstDescendant();
24
+ if ($isTextNode(firstDescendant)) firstDescendant.select();
25
+ else node.selectStart();
26
+ };
27
+ const getMoveRange = (selectedIndexes, targetIndex, insertAfter = false) => {
28
+ if (selectedIndexes.length === 0) return null;
29
+ const sortedIndexes = [...selectedIndexes].sort((a, b) => a - b);
30
+ const from = sortedIndexes[0];
31
+ const to = sortedIndexes.at(-1) ?? from;
32
+ const count = to - from + 1;
33
+ const insertionIndex = insertAfter ? targetIndex + 1 : targetIndex;
34
+ if (insertionIndex >= from && insertionIndex <= to + 1) return null;
35
+ return {
36
+ count,
37
+ from,
38
+ target: insertionIndex > to ? insertionIndex - count : insertionIndex,
39
+ to
40
+ };
41
+ };
42
+ const $selectTableRows = (tableNode, from, to) => {
43
+ const [tableMap] = $computeTableMapSkipCellCheck(tableNode, null, null);
44
+ const firstRow = tableMap[from];
45
+ const lastRow = tableMap[to];
46
+ const firstCell = firstRow?.[0]?.cell;
47
+ const lastCell = lastRow?.[lastRow.length - 1]?.cell;
48
+ if (!firstCell || !lastCell) return false;
49
+ const tableSelection = $createTableSelection();
50
+ tableSelection.set(tableNode.getKey(), firstCell.getKey(), lastCell.getKey());
51
+ $setSelection(tableSelection);
52
+ return true;
53
+ };
54
+ const $selectTableColumns = (tableNode, from, to) => {
55
+ const [tableMap] = $computeTableMapSkipCellCheck(tableNode, null, null);
56
+ const firstCell = tableMap.find((row) => row[from])?.[from]?.cell;
57
+ const lastCell = [...tableMap].reverse().find((row) => row[to])?.[to]?.cell;
58
+ if (!firstCell || !lastCell) return false;
59
+ const tableSelection = $createTableSelection();
60
+ tableSelection.set(tableNode.getKey(), firstCell.getKey(), lastCell.getKey());
61
+ $setSelection(tableSelection);
62
+ return true;
63
+ };
64
+ const getRangeFromSelection = (selection, table, targetIndex, direction, crossAxisLength, anchorIndex) => {
65
+ if (anchorIndex !== void 0) return {
66
+ from: Math.min(anchorIndex, targetIndex),
67
+ to: Math.max(anchorIndex, targetIndex)
68
+ };
69
+ if (!$isTableSelection(selection) || selection.tableKey !== table) return {
70
+ from: 0,
71
+ to: targetIndex
72
+ };
73
+ const shape = selection.getShape();
74
+ if (!(direction === "row" ? shape.fromX === 0 && shape.toX === crossAxisLength - 1 : shape.fromY === 0 && shape.toY === crossAxisLength - 1)) return {
75
+ from: 0,
76
+ to: targetIndex
77
+ };
78
+ const from = direction === "row" ? shape.fromY : shape.fromX;
79
+ const to = direction === "row" ? shape.toY : shape.toX;
80
+ return {
81
+ from: Math.min(from, targetIndex),
82
+ to: Math.max(to, targetIndex)
83
+ };
84
+ };
85
+ function registerTableCommand(editor) {
86
+ return mergeRegister(editor.registerCommand(INSERT_TABLE_COMMAND, ({ rows, columns, includeHeaders }) => {
87
+ const selection = $getSelection() || $getPreviousSelection();
88
+ if (!selection || !$isRangeSelection(selection)) return false;
89
+ const anchorNode = $getNodeByKey(selection.anchor.key);
90
+ if (!anchorNode) return false;
91
+ if ($findTableNode(anchorNode)) return false;
92
+ const rowCount = Number(rows);
93
+ const columnCount = Number(columns);
94
+ const tableNode = $createTableNodeWithDimensions(rowCount, columnCount, includeHeaders);
95
+ tableNode.setColWidths(createDefaultTableColWidths(columnCount));
96
+ if ($isElementNode(anchorNode) && anchorNode.isEmpty()) anchorNode.replace(tableNode);
97
+ else $insertNodeToNearestRoot(tableNode);
98
+ const firstDescendant = tableNode.getFirstDescendant();
99
+ if ($isTextNode(firstDescendant)) firstDescendant.select();
100
+ return true;
101
+ }, COMMAND_PRIORITY_EDITOR), editor.registerCommand(INSERT_TABLE_COLUMN_COMMAND, ({ table, columnIndex, insertAfter = true }) => {
102
+ const tableNode = $getNodeByKey(table);
103
+ if (!tableNode || !$isTableNode(tableNode)) return false;
104
+ const [tableMap] = $computeTableMapSkipCellCheck(tableNode, null, null);
105
+ const firstCell = tableMap.find((row) => row[columnIndex])?.[columnIndex]?.cell;
106
+ const lastCell = [...tableMap].reverse().find((row) => row[columnIndex])?.[columnIndex]?.cell;
107
+ if (!firstCell || !lastCell) return false;
108
+ const tableSelection = $createTableSelection();
109
+ tableSelection.set(table, firstCell.getKey(), lastCell.getKey());
110
+ $setSelection(tableSelection);
111
+ $insertTableColumnAtSelection(insertAfter);
112
+ return true;
113
+ }, COMMAND_PRIORITY_EDITOR), editor.registerCommand(INSERT_TABLE_ROW_COMMAND, ({ table, rowIndex, insertAfter = true }) => {
114
+ const tableNode = $getNodeByKey(table);
115
+ if (!tableNode || !$isTableNode(tableNode)) return false;
116
+ const [tableMap] = $computeTableMapSkipCellCheck(tableNode, null, null);
117
+ const row = tableMap[rowIndex];
118
+ const firstCell = row?.[0]?.cell;
119
+ const lastCell = row?.[row.length - 1]?.cell;
120
+ if (!firstCell || !lastCell) return false;
121
+ const tableSelection = $createTableSelection();
122
+ tableSelection.set(table, firstCell.getKey(), lastCell.getKey());
123
+ $setSelection(tableSelection);
124
+ const insertedRow = $insertTableRowAtSelection(insertAfter);
125
+ if (insertedRow) $selectFirstDescendant(insertedRow);
126
+ return true;
127
+ }, COMMAND_PRIORITY_EDITOR), editor.registerCommand(SYNC_TABLE_COLUMN_WIDTH_COMMAND, ({ table, columnIndex }) => {
128
+ const tableNode = $getNodeByKey(table);
129
+ if (!tableNode || !$isTableNode(tableNode)) return false;
130
+ const columnCount = tableNode.getColumnCount();
131
+ const selectedWidth = (tableNode.getColWidths() || createDefaultTableColWidths(columnCount))[columnIndex];
132
+ if (selectedWidth === void 0) return false;
133
+ const nextColWidths = Array.from({ length: columnCount }, () => selectedWidth);
134
+ tableNode.setColWidths(nextColWidths);
135
+ requestAnimationFrame(() => {
136
+ syncTableWidthDOM(editor, table, nextColWidths);
137
+ });
138
+ return true;
139
+ }, COMMAND_PRIORITY_EDITOR), editor.registerCommand(AUTO_FIT_TABLE_COLUMN_WIDTH_COMMAND, ({ table, columnIndexes }) => {
140
+ const tableNode = $getNodeByKey(table);
141
+ if (!tableNode || !$isTableNode(tableNode)) return false;
142
+ const nextColWidths = getAutoFitTableColumnWidths(editor, tableNode, columnIndexes);
143
+ if (!nextColWidths) return false;
144
+ tableNode.setColWidths(nextColWidths);
145
+ requestAnimationFrame(() => {
146
+ syncTableWidthDOM(editor, table, nextColWidths);
147
+ });
148
+ return true;
149
+ }, COMMAND_PRIORITY_EDITOR), editor.registerCommand(DISTRIBUTE_TABLE_COLUMN_WIDTH_COMMAND, ({ table }) => {
150
+ const tableNode = $getNodeByKey(table);
151
+ if (!tableNode || !$isTableNode(tableNode)) return false;
152
+ const nextColWidths = getDistributedTableColumnWidths(editor, tableNode);
153
+ if (!nextColWidths) return false;
154
+ tableNode.setColWidths(nextColWidths);
155
+ requestAnimationFrame(() => {
156
+ syncTableWidthDOM(editor, table, nextColWidths);
157
+ resetTableScrollLeft(editor, table);
158
+ });
159
+ return true;
160
+ }, COMMAND_PRIORITY_EDITOR), editor.registerCommand(MOVE_TABLE_COLUMN_COMMAND, ({ table, selectedColumns, columnIndex, insertAfter = false }) => {
161
+ const tableNode = $getNodeByKey(table);
162
+ if (!tableNode || !$isTableNode(tableNode) || !$isSimpleTable(tableNode)) return false;
163
+ const moveRange = getMoveRange(selectedColumns, columnIndex, insertAfter);
164
+ if (!moveRange) return false;
165
+ const { count, from, target, to } = moveRange;
166
+ tableNode.getChildren().filter($isTableRowNode).forEach((row) => {
167
+ const cells = row.getChildren();
168
+ const movedCells = cells.slice(from, to + 1);
169
+ const nextCells = [...cells.slice(0, from), ...cells.slice(to + 1)];
170
+ nextCells.splice(target, 0, ...movedCells);
171
+ row.splice(0, cells.length, nextCells);
172
+ });
173
+ const colWidths = tableNode.getColWidths();
174
+ if (colWidths && colWidths.length === tableNode.getColumnCount()) {
175
+ const movedWidths = colWidths.slice(from, to + 1);
176
+ const nextWidths = [...colWidths.slice(0, from), ...colWidths.slice(to + 1)];
177
+ nextWidths.splice(target, 0, ...movedWidths);
178
+ tableNode.setColWidths(nextWidths);
179
+ }
180
+ $selectTableColumns(tableNode, target, target + count - 1);
181
+ return true;
182
+ }, COMMAND_PRIORITY_EDITOR), editor.registerCommand(MOVE_TABLE_ROW_COMMAND, ({ table, selectedRows, rowIndex, insertAfter = false }) => {
183
+ const tableNode = $getNodeByKey(table);
184
+ if (!tableNode || !$isTableNode(tableNode) || !$isSimpleTable(tableNode)) return false;
185
+ const moveRange = getMoveRange(selectedRows, rowIndex, insertAfter);
186
+ if (!moveRange) return false;
187
+ const { count, from, target, to } = moveRange;
188
+ const rows = tableNode.getChildren();
189
+ const movedRows = rows.slice(from, to + 1);
190
+ const nextRows = [...rows.slice(0, from), ...rows.slice(to + 1)];
191
+ nextRows.splice(target, 0, ...movedRows);
192
+ tableNode.splice(0, rows.length, nextRows);
193
+ $selectTableRows(tableNode, target, target + count - 1);
194
+ return true;
195
+ }, COMMAND_PRIORITY_EDITOR), editor.registerCommand(SELECT_TABLE_COMMAND, ({ table, anchorIndex, columnIndex, extend, rowIndex }) => {
196
+ const prevSelection = $getSelection();
197
+ const tableNode = $getNodeByKey(table);
198
+ if (!tableNode || !$isTableNode(tableNode)) return false;
199
+ const tableSelection = $isTableSelection(prevSelection) ? prevSelection : $createTableSelection();
200
+ const [tableMap] = $computeTableMapSkipCellCheck(tableNode, null, null);
201
+ if (rowIndex !== void 0) {
202
+ const { from, to } = extend ? getRangeFromSelection(prevSelection, table, rowIndex, "row", tableNode.getColumnCount(), anchorIndex) : {
203
+ from: rowIndex,
204
+ to: rowIndex
205
+ };
206
+ const firstRow = tableMap[from];
207
+ const lastRow = tableMap[to];
208
+ const firstCell = firstRow?.[0]?.cell;
209
+ const lastCell = lastRow?.[lastRow.length - 1]?.cell;
210
+ if (!firstCell || !lastCell) return false;
211
+ tableSelection.set(table, firstCell.getKey(), lastCell.getKey());
212
+ $setSelection(tableSelection);
213
+ return true;
214
+ }
215
+ if (columnIndex !== void 0) {
216
+ const { from, to } = extend ? getRangeFromSelection(prevSelection, table, columnIndex, "column", tableMap.length, anchorIndex) : {
217
+ from: columnIndex,
218
+ to: columnIndex
219
+ };
220
+ const firstCell = tableMap.find((row) => row[from])?.[from]?.cell;
221
+ const lastCell = [...tableMap].reverse().find((row) => row[to])?.[to]?.cell;
222
+ if (!firstCell || !lastCell) return false;
223
+ tableSelection.set(table, firstCell.getKey(), lastCell.getKey());
224
+ $setSelection(tableSelection);
225
+ return true;
226
+ }
227
+ const firstRow = tableMap[0];
228
+ const lastRow = tableMap.at(-1);
229
+ const firstCell = firstRow?.[0]?.cell;
230
+ const lastCell = lastRow?.[lastRow.length - 1]?.cell;
231
+ if (!firstCell || !lastCell) return false;
232
+ tableSelection.set(table, firstCell.getKey(), lastCell.getKey());
233
+ $setSelection(tableSelection);
234
+ return true;
235
+ }, COMMAND_PRIORITY_EDITOR));
236
+ }
237
+ //#endregion
238
+ export { AUTO_FIT_TABLE_COLUMN_WIDTH_COMMAND, DISTRIBUTE_TABLE_COLUMN_WIDTH_COMMAND, INSERT_TABLE_COLUMN_COMMAND, INSERT_TABLE_COMMAND, INSERT_TABLE_ROW_COMMAND, MOVE_TABLE_COLUMN_COMMAND, MOVE_TABLE_ROW_COMMAND, SELECT_TABLE_COMMAND, SYNC_TABLE_COLUMN_WIDTH_COMMAND, registerTableCommand };
@@ -0,0 +1,4 @@
1
+ import { INSERT_TABLE_COLUMN_COMMAND, INSERT_TABLE_COMMAND, INSERT_TABLE_ROW_COMMAND, SELECT_TABLE_COMMAND } from "./command/index.js";
2
+ import { TablePlugin, TablePluginOptions } from "./plugin/index.js";
3
+ import { ReactTablePlugin } from "./react/index.js";
4
+ import { ITableControllerMenuActionItem, ITableControllerMenuItem, ITableControllerMenuRenderContext, ITableControllerMenuSeparatorItem, ITableControllerMenuService, TableControllerMenuAxis, TableControllerMenuService } from "./service/i-table-controller-menu-service.js";
@@ -0,0 +1,2 @@
1
+ import { TableNode as TableNode$1 } from "@lexical/table";
2
+ export { TableNode$1 as TableNode };