@datalayer/lexical-loro 0.0.7 → 0.1.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 (406) hide show
  1. package/README.md +24 -137
  2. package/lib/App.d.ts +2 -0
  3. package/lib/App.js +141 -0
  4. package/lib/Editor.d.ts +2 -0
  5. package/lib/Editor.js +111 -0
  6. package/lib/Settings.d.ts +2 -0
  7. package/lib/Settings.js +57 -0
  8. package/lib/appSettings.d.ts +36 -0
  9. package/lib/appSettings.js +44 -0
  10. package/lib/collab/loro/Bindings.d.ts +41 -0
  11. package/lib/collab/loro/Bindings.js +95 -0
  12. package/lib/collab/loro/Debug.d.ts +33 -0
  13. package/lib/collab/loro/Debug.js +448 -0
  14. package/lib/collab/loro/LexicalCollaborationContext.d.ts +19 -0
  15. package/lib/collab/loro/LexicalCollaborationContext.js +48 -0
  16. package/lib/collab/loro/LexicalCollaborationPlugin.d.ts +24 -0
  17. package/lib/collab/loro/LexicalCollaborationPlugin.js +83 -0
  18. package/lib/collab/loro/State.d.ts +53 -0
  19. package/lib/collab/loro/State.js +90 -0
  20. package/lib/collab/loro/components/LoroCollaborationUI.d.ts +13 -0
  21. package/lib/collab/loro/components/LoroCollaborationUI.js +9 -0
  22. package/lib/collab/loro/components/LoroCollaborators.d.ts +8 -0
  23. package/lib/collab/loro/components/LoroCollaborators.js +97 -0
  24. package/lib/collab/loro/components/index.d.ts +2 -0
  25. package/lib/collab/loro/components/index.js +2 -0
  26. package/lib/collab/loro/index.d.ts +6 -0
  27. package/lib/collab/loro/index.js +6 -0
  28. package/lib/collab/loro/integrators/BaseIntegrator.d.ts +14 -0
  29. package/lib/collab/loro/integrators/BaseIntegrator.js +1 -0
  30. package/lib/collab/loro/integrators/CounterIntegrator.d.ts +23 -0
  31. package/lib/collab/loro/integrators/CounterIntegrator.js +40 -0
  32. package/lib/collab/loro/integrators/ListIntegrator.d.ts +23 -0
  33. package/lib/collab/loro/integrators/ListIntegrator.js +49 -0
  34. package/lib/collab/loro/integrators/MapIntegrator.d.ts +24 -0
  35. package/lib/collab/loro/integrators/MapIntegrator.js +177 -0
  36. package/lib/collab/loro/integrators/TextIntegrator.d.ts +25 -0
  37. package/lib/collab/loro/integrators/TextIntegrator.js +51 -0
  38. package/lib/collab/loro/integrators/TreeIntegrator.d.ts +25 -0
  39. package/lib/collab/loro/integrators/TreeIntegrator.js +201 -0
  40. package/lib/collab/loro/nodes/NodeFactory.d.ts +8 -0
  41. package/lib/collab/loro/nodes/NodeFactory.js +105 -0
  42. package/lib/collab/loro/nodes/NodesMapper.d.ts +111 -0
  43. package/lib/collab/loro/nodes/NodesMapper.js +258 -0
  44. package/lib/collab/loro/propagators/DecoratorNodePropagator.d.ts +60 -0
  45. package/lib/collab/loro/propagators/DecoratorNodePropagator.js +302 -0
  46. package/lib/collab/loro/propagators/ElementNodePropagator.d.ts +62 -0
  47. package/lib/collab/loro/propagators/ElementNodePropagator.js +335 -0
  48. package/lib/collab/loro/propagators/LineBreakNodePropagator.d.ts +57 -0
  49. package/lib/collab/loro/propagators/LineBreakNodePropagator.js +196 -0
  50. package/lib/collab/loro/propagators/RootNodePropagator.d.ts +55 -0
  51. package/lib/collab/loro/propagators/RootNodePropagator.js +168 -0
  52. package/lib/collab/loro/propagators/TextNodePropagator.d.ts +60 -0
  53. package/lib/collab/loro/propagators/TextNodePropagator.js +434 -0
  54. package/lib/collab/loro/propagators/index.d.ts +49 -0
  55. package/lib/collab/loro/propagators/index.js +32 -0
  56. package/lib/collab/loro/provider/websocket.d.ts +116 -0
  57. package/lib/collab/loro/provider/websocket.js +907 -0
  58. package/lib/collab/loro/servers/index.d.ts +0 -0
  59. package/lib/collab/loro/servers/index.js +0 -0
  60. package/lib/collab/loro/servers/ws/callback.d.ts +5 -0
  61. package/lib/collab/loro/servers/ws/callback.js +85 -0
  62. package/lib/collab/loro/servers/ws/server.d.ts +2 -0
  63. package/lib/collab/loro/servers/ws/server.js +25 -0
  64. package/lib/collab/loro/servers/ws/utils.d.ts +40 -0
  65. package/lib/collab/loro/servers/ws/utils.js +513 -0
  66. package/lib/collab/loro/sync/SyncCursors.d.ts +32 -0
  67. package/lib/collab/loro/sync/SyncCursors.js +435 -0
  68. package/lib/collab/loro/sync/SyncLexicalToLoro.d.ts +4 -0
  69. package/lib/collab/loro/sync/SyncLexicalToLoro.js +80 -0
  70. package/lib/collab/loro/sync/SyncLoroToLexical.d.ts +5 -0
  71. package/lib/collab/loro/sync/SyncLoroToLexical.js +96 -0
  72. package/lib/collab/loro/types/LexicalNodeData.d.ts +32 -0
  73. package/lib/collab/loro/types/LexicalNodeData.js +71 -0
  74. package/lib/collab/loro/useCollaboration.d.ts +12 -0
  75. package/lib/collab/loro/useCollaboration.js +248 -0
  76. package/lib/collab/loro/utils/InitialContent.d.ts +64 -0
  77. package/lib/collab/loro/utils/InitialContent.js +109 -0
  78. package/lib/collab/loro/utils/LexicalToLoro.d.ts +18 -0
  79. package/lib/collab/loro/utils/LexicalToLoro.js +96 -0
  80. package/lib/collab/loro/utils/Utils.d.ts +44 -0
  81. package/lib/collab/loro/utils/Utils.js +153 -0
  82. package/lib/collab/loro/wsProvider.d.ts +8 -0
  83. package/lib/collab/loro/wsProvider.js +31 -0
  84. package/lib/collab/utils/invariant.d.ts +1 -0
  85. package/lib/collab/utils/invariant.js +11 -0
  86. package/lib/collab/utils/simpleDiffWithCursor.d.ts +5 -0
  87. package/lib/collab/utils/simpleDiffWithCursor.js +31 -0
  88. package/lib/collab/yjs/Bindings.d.ts +23 -0
  89. package/lib/collab/yjs/Bindings.js +26 -0
  90. package/lib/collab/yjs/Debug.d.ts +23 -0
  91. package/lib/collab/yjs/Debug.js +213 -0
  92. package/lib/collab/yjs/LexicalCollaborationContext.d.ts +10 -0
  93. package/lib/collab/yjs/LexicalCollaborationContext.js +37 -0
  94. package/lib/collab/yjs/LexicalCollaborationPlugin.d.ts +21 -0
  95. package/lib/collab/yjs/LexicalCollaborationPlugin.js +63 -0
  96. package/lib/collab/yjs/State.d.ts +51 -0
  97. package/lib/collab/yjs/State.js +35 -0
  98. package/lib/collab/yjs/nodes/AnyCollabNode.d.ts +5 -0
  99. package/lib/collab/yjs/nodes/AnyCollabNode.js +1 -0
  100. package/lib/collab/yjs/nodes/CollabDecoratorNode.d.ts +22 -0
  101. package/lib/collab/yjs/nodes/CollabDecoratorNode.js +64 -0
  102. package/lib/collab/yjs/nodes/CollabElementNode.d.ts +40 -0
  103. package/lib/collab/yjs/nodes/CollabElementNode.js +462 -0
  104. package/lib/collab/yjs/nodes/CollabLineBreakNode.d.ts +19 -0
  105. package/lib/collab/yjs/nodes/CollabLineBreakNode.js +44 -0
  106. package/lib/collab/yjs/nodes/CollabTextNode.d.ts +25 -0
  107. package/lib/collab/yjs/nodes/CollabTextNode.js +103 -0
  108. package/lib/collab/yjs/provider/websocket.d.ts +88 -0
  109. package/lib/collab/yjs/provider/websocket.js +415 -0
  110. package/lib/collab/yjs/servers/index.d.ts +0 -0
  111. package/lib/collab/yjs/servers/index.js +0 -0
  112. package/lib/collab/yjs/servers/ws/callback.d.ts +5 -0
  113. package/lib/collab/yjs/servers/ws/callback.js +72 -0
  114. package/lib/collab/yjs/servers/ws/server.d.ts +2 -0
  115. package/lib/collab/yjs/servers/ws/server.js +25 -0
  116. package/lib/collab/yjs/servers/ws/utils.d.ts +49 -0
  117. package/lib/collab/yjs/servers/ws/utils.js +284 -0
  118. package/lib/collab/yjs/sync/SyncCursors.d.ts +39 -0
  119. package/lib/collab/yjs/sync/SyncCursors.js +351 -0
  120. package/lib/collab/yjs/sync/SyncEditorStates.d.ts +10 -0
  121. package/lib/collab/yjs/sync/SyncEditorStates.js +200 -0
  122. package/lib/collab/yjs/useCollaboration.d.ts +12 -0
  123. package/lib/collab/yjs/useCollaboration.js +255 -0
  124. package/lib/collab/yjs/utils/Utils.d.ts +25 -0
  125. package/lib/collab/yjs/utils/Utils.js +402 -0
  126. package/lib/collab/yjs/wsProvider.d.ts +3 -0
  127. package/lib/collab/yjs/wsProvider.js +21 -0
  128. package/lib/commenting/index.d.ts +41 -0
  129. package/lib/commenting/index.js +324 -0
  130. package/lib/context/FlashMessageContext.d.ts +7 -0
  131. package/lib/context/FlashMessageContext.js +24 -0
  132. package/lib/context/SettingsContext.d.ts +12 -0
  133. package/lib/context/SettingsContext.js +38 -0
  134. package/lib/context/SharedHistoryContext.d.ts +11 -0
  135. package/lib/context/SharedHistoryContext.js +11 -0
  136. package/lib/context/ToolbarContext.d.ts +65 -0
  137. package/lib/context/ToolbarContext.js +84 -0
  138. package/lib/demo.d.ts +12 -0
  139. package/lib/demo.js +41 -0
  140. package/lib/hooks/useFlashMessage.d.ts +2 -0
  141. package/lib/hooks/useFlashMessage.js +4 -0
  142. package/lib/hooks/useModal.d.ts +5 -0
  143. package/lib/hooks/useModal.js +26 -0
  144. package/lib/hooks/useReport.d.ts +1 -0
  145. package/lib/hooks/useReport.js +46 -0
  146. package/lib/index.d.ts +1 -1
  147. package/lib/index.js +1 -5
  148. package/lib/nodes/AutocompleteNode.d.ts +27 -0
  149. package/lib/nodes/AutocompleteNode.js +56 -0
  150. package/lib/nodes/CounterComponent.d.ts +6 -0
  151. package/lib/nodes/CounterComponent.js +137 -0
  152. package/lib/nodes/CounterNode.d.ts +23 -0
  153. package/lib/nodes/CounterNode.js +47 -0
  154. package/lib/nodes/DateTimeNode/DateTimeComponent.d.ts +8 -0
  155. package/lib/nodes/DateTimeNode/DateTimeComponent.js +119 -0
  156. package/lib/nodes/DateTimeNode/DateTimeNode.d.ts +27 -0
  157. package/lib/nodes/DateTimeNode/DateTimeNode.js +82 -0
  158. package/lib/nodes/EmojiNode.d.ts +18 -0
  159. package/lib/nodes/EmojiNode.js +50 -0
  160. package/lib/nodes/EquationComponent.d.ts +9 -0
  161. package/lib/nodes/EquationComponent.js +75 -0
  162. package/lib/nodes/EquationNode.d.ts +26 -0
  163. package/lib/nodes/EquationNode.js +109 -0
  164. package/lib/nodes/ExcalidrawNode/ExcalidrawComponent.d.ts +8 -0
  165. package/lib/nodes/ExcalidrawNode/ExcalidrawComponent.js +110 -0
  166. package/lib/nodes/ExcalidrawNode/ExcalidrawImage.d.ts +50 -0
  167. package/lib/nodes/ExcalidrawNode/ExcalidrawImage.js +55 -0
  168. package/lib/nodes/ExcalidrawNode/index.d.ts +32 -0
  169. package/lib/nodes/ExcalidrawNode/index.js +117 -0
  170. package/lib/nodes/FigmaNode.d.ts +20 -0
  171. package/lib/nodes/FigmaNode.js +52 -0
  172. package/lib/nodes/ImageComponent.d.ts +16 -0
  173. package/lib/nodes/ImageComponent.js +272 -0
  174. package/lib/nodes/ImageNode.d.ts +50 -0
  175. package/lib/nodes/ImageNode.js +151 -0
  176. package/lib/nodes/InlineImageNode/InlineImageComponent.d.ts +26 -0
  177. package/lib/nodes/InlineImageNode/InlineImageComponent.js +161 -0
  178. package/lib/nodes/InlineImageNode/InlineImageNode.d.ts +59 -0
  179. package/lib/nodes/InlineImageNode/InlineImageNode.js +162 -0
  180. package/lib/nodes/KeywordNode.d.ts +14 -0
  181. package/lib/nodes/KeywordNode.js +33 -0
  182. package/lib/nodes/LayoutContainerNode.d.ts +24 -0
  183. package/lib/nodes/LayoutContainerNode.js +91 -0
  184. package/lib/nodes/LayoutItemNode.d.ts +16 -0
  185. package/lib/nodes/LayoutItemNode.js +65 -0
  186. package/lib/nodes/MentionNode.d.ts +20 -0
  187. package/lib/nodes/MentionNode.js +81 -0
  188. package/lib/nodes/PageBreakNode/index.d.ts +17 -0
  189. package/lib/nodes/PageBreakNode/index.js +83 -0
  190. package/lib/nodes/PlaygroundNodes.d.ts +3 -0
  191. package/lib/nodes/PlaygroundNodes.js +71 -0
  192. package/lib/nodes/PollComponent.d.ts +9 -0
  193. package/lib/nodes/PollComponent.js +85 -0
  194. package/lib/nodes/PollNode.d.ts +43 -0
  195. package/lib/nodes/PollNode.js +153 -0
  196. package/lib/nodes/SpecialTextNode.d.ts +24 -0
  197. package/lib/nodes/SpecialTextNode.js +50 -0
  198. package/lib/nodes/StickyComponent.d.ts +10 -0
  199. package/lib/nodes/StickyComponent.js +162 -0
  200. package/lib/nodes/StickyNode.d.ts +31 -0
  201. package/lib/nodes/StickyNode.js +76 -0
  202. package/lib/nodes/TweetNode.d.ts +21 -0
  203. package/lib/nodes/TweetNode.js +119 -0
  204. package/lib/nodes/YouTubeNode.d.ts +22 -0
  205. package/lib/nodes/YouTubeNode.js +84 -0
  206. package/lib/plugins/ActionsPlugin/index.d.ts +5 -0
  207. package/lib/plugins/ActionsPlugin/index.js +168 -0
  208. package/lib/plugins/AutoEmbedPlugin/index.d.ts +19 -0
  209. package/lib/plugins/AutoEmbedPlugin/index.js +158 -0
  210. package/lib/plugins/AutoLinkPlugin/index.d.ts +2 -0
  211. package/lib/plugins/AutoLinkPlugin/index.js +15 -0
  212. package/lib/plugins/AutocompletePlugin/index.d.ts +10 -0
  213. package/lib/plugins/AutocompletePlugin/index.js +2473 -0
  214. package/lib/plugins/CodeActionMenuPlugin/components/CopyButton/index.d.ts +7 -0
  215. package/lib/plugins/CodeActionMenuPlugin/components/CopyButton/index.js +42 -0
  216. package/lib/plugins/CodeActionMenuPlugin/components/PrettierButton/index.d.ts +17 -0
  217. package/lib/plugins/CodeActionMenuPlugin/components/PrettierButton/index.js +111 -0
  218. package/lib/plugins/CodeActionMenuPlugin/index.d.ts +5 -0
  219. package/lib/plugins/CodeActionMenuPlugin/index.js +104 -0
  220. package/lib/plugins/CodeActionMenuPlugin/utils.d.ts +1 -0
  221. package/lib/plugins/CodeActionMenuPlugin/utils.js +18 -0
  222. package/lib/plugins/CodeHighlightPrismPlugin/index.d.ts +2 -0
  223. package/lib/plugins/CodeHighlightPrismPlugin/index.js +10 -0
  224. package/lib/plugins/CodeHighlightShikiPlugin/index.d.ts +2 -0
  225. package/lib/plugins/CodeHighlightShikiPlugin/index.js +10 -0
  226. package/lib/plugins/CollapsiblePlugin/CollapsibleContainerNode.d.ts +25 -0
  227. package/lib/plugins/CollapsiblePlugin/CollapsibleContainerNode.js +131 -0
  228. package/lib/plugins/CollapsiblePlugin/CollapsibleContentNode.d.ts +16 -0
  229. package/lib/plugins/CollapsiblePlugin/CollapsibleContentNode.js +79 -0
  230. package/lib/plugins/CollapsiblePlugin/CollapsibleTitleNode.d.ts +16 -0
  231. package/lib/plugins/CollapsiblePlugin/CollapsibleTitleNode.js +81 -0
  232. package/lib/plugins/CollapsiblePlugin/CollapsibleUtils.d.ts +2 -0
  233. package/lib/plugins/CollapsiblePlugin/CollapsibleUtils.js +8 -0
  234. package/lib/plugins/CollapsiblePlugin/index.d.ts +3 -0
  235. package/lib/plugins/CollapsiblePlugin/index.js +128 -0
  236. package/lib/plugins/CommentPlugin/index.d.ts +9 -0
  237. package/lib/plugins/CommentPlugin/index.js +460 -0
  238. package/lib/plugins/ComponentPickerPlugin/index.d.ts +2 -0
  239. package/lib/plugins/ComponentPickerPlugin/index.js +276 -0
  240. package/lib/plugins/ContextMenuPlugin/index.d.ts +2 -0
  241. package/lib/plugins/ContextMenuPlugin/index.js +112 -0
  242. package/lib/plugins/CounterPlugin/index.d.ts +3 -0
  243. package/lib/plugins/CounterPlugin/index.js +20 -0
  244. package/lib/plugins/DatalayerPlugin/index.d.ts +2 -0
  245. package/lib/plugins/DatalayerPlugin/index.js +218 -0
  246. package/lib/plugins/DateTimePlugin/index.d.ts +8 -0
  247. package/lib/plugins/DateTimePlugin/index.js +24 -0
  248. package/lib/plugins/DocsPlugin/index.d.ts +2 -0
  249. package/lib/plugins/DocsPlugin/index.js +4 -0
  250. package/lib/plugins/DragDropPastePlugin/index.d.ts +1 -0
  251. package/lib/plugins/DragDropPastePlugin/index.js +33 -0
  252. package/lib/plugins/DraggableBlockPlugin/index.d.ts +12 -0
  253. package/lib/plugins/DraggableBlockPlugin/index.js +36 -0
  254. package/lib/plugins/EmojiPickerPlugin/index.d.ts +1 -0
  255. package/lib/plugins/EmojiPickerPlugin/index.js +80 -0
  256. package/lib/plugins/EmojisPlugin/index.d.ts +2 -0
  257. package/lib/plugins/EmojisPlugin/index.js +52 -0
  258. package/lib/plugins/EquationsPlugin/index.d.ts +14 -0
  259. package/lib/plugins/EquationsPlugin/index.js +34 -0
  260. package/lib/plugins/ExcalidrawPlugin/index.d.ts +5 -0
  261. package/lib/plugins/ExcalidrawPlugin/index.js +44 -0
  262. package/lib/plugins/FigmaPlugin/index.d.ts +4 -0
  263. package/lib/plugins/FigmaPlugin/index.js +20 -0
  264. package/lib/plugins/FloatingLinkEditorPlugin/index.d.ts +15 -0
  265. package/lib/plugins/FloatingLinkEditorPlugin/index.js +280 -0
  266. package/lib/plugins/FloatingTextFormatToolbarPlugin/index.d.ts +7 -0
  267. package/lib/plugins/FloatingTextFormatToolbarPlugin/index.js +219 -0
  268. package/lib/plugins/ImagesPlugin/index.d.ts +24 -0
  269. package/lib/plugins/ImagesPlugin/index.js +195 -0
  270. package/lib/plugins/InlineImagePlugin/index.d.ts +17 -0
  271. package/lib/plugins/InlineImagePlugin/index.js +180 -0
  272. package/lib/plugins/KeywordsPlugin/index.d.ts +2 -0
  273. package/lib/plugins/KeywordsPlugin/index.js +31 -0
  274. package/lib/plugins/LayoutPlugin/InsertLayoutDialog.d.ts +6 -0
  275. package/lib/plugins/LayoutPlugin/InsertLayoutDialog.js +21 -0
  276. package/lib/plugins/LayoutPlugin/LayoutPlugin.d.ts +7 -0
  277. package/lib/plugins/LayoutPlugin/LayoutPlugin.js +131 -0
  278. package/lib/plugins/LinkPlugin/index.d.ts +6 -0
  279. package/lib/plugins/LinkPlugin/index.js +11 -0
  280. package/lib/plugins/MarkdownShortcutPlugin/index.d.ts +2 -0
  281. package/lib/plugins/MarkdownShortcutPlugin/index.js +6 -0
  282. package/lib/plugins/MarkdownTransformers/index.d.ts +8 -0
  283. package/lib/plugins/MarkdownTransformers/index.js +234 -0
  284. package/lib/plugins/MaxLengthPlugin/index.d.ts +3 -0
  285. package/lib/plugins/MaxLengthPlugin/index.js +37 -0
  286. package/lib/plugins/MentionsPlugin/index.d.ts +2 -0
  287. package/lib/plugins/MentionsPlugin/index.js +564 -0
  288. package/lib/plugins/PageBreakPlugin/index.d.ts +4 -0
  289. package/lib/plugins/PageBreakPlugin/index.js +27 -0
  290. package/lib/plugins/PasteLogPlugin/index.d.ts +2 -0
  291. package/lib/plugins/PasteLogPlugin/index.js +27 -0
  292. package/lib/plugins/PollPlugin/index.d.ts +8 -0
  293. package/lib/plugins/PollPlugin/index.js +38 -0
  294. package/lib/plugins/ShortcutsPlugin/index.d.ts +6 -0
  295. package/lib/plugins/ShortcutsPlugin/index.js +112 -0
  296. package/lib/plugins/ShortcutsPlugin/shortcuts.d.ts +59 -0
  297. package/lib/plugins/ShortcutsPlugin/shortcuts.js +169 -0
  298. package/lib/plugins/SpecialTextPlugin/index.d.ts +2 -0
  299. package/lib/plugins/SpecialTextPlugin/index.js +46 -0
  300. package/lib/plugins/SpeechToTextPlugin/index.d.ts +5 -0
  301. package/lib/plugins/SpeechToTextPlugin/index.js +82 -0
  302. package/lib/plugins/StickyPlugin/index.d.ts +2 -0
  303. package/lib/plugins/StickyPlugin/index.js +12 -0
  304. package/lib/plugins/TabFocusPlugin/index.d.ts +1 -0
  305. package/lib/plugins/TabFocusPlugin/index.js +34 -0
  306. package/lib/plugins/TableActionMenuPlugin/index.d.ts +5 -0
  307. package/lib/plugins/TableActionMenuPlugin/index.js +492 -0
  308. package/lib/plugins/TableCellResizer/index.d.ts +3 -0
  309. package/lib/plugins/TableCellResizer/index.js +297 -0
  310. package/lib/plugins/TableHoverActionsPlugin/index.d.ts +4 -0
  311. package/lib/plugins/TableHoverActionsPlugin/index.js +188 -0
  312. package/lib/plugins/TableOfContentsPlugin/index.d.ts +2 -0
  313. package/lib/plugins/TableOfContentsPlugin/index.js +116 -0
  314. package/lib/plugins/TablePlugin.d.ts +31 -0
  315. package/lib/plugins/TablePlugin.js +63 -0
  316. package/lib/plugins/TestRecorderPlugin/index.d.ts +3 -0
  317. package/lib/plugins/TestRecorderPlugin/index.js +346 -0
  318. package/lib/plugins/ToolbarPlugin/fontSize.d.ts +9 -0
  319. package/lib/plugins/ToolbarPlugin/fontSize.js +80 -0
  320. package/lib/plugins/ToolbarPlugin/index.d.ts +9 -0
  321. package/lib/plugins/ToolbarPlugin/index.js +500 -0
  322. package/lib/plugins/ToolbarPlugin/utils.d.ts +26 -0
  323. package/lib/plugins/ToolbarPlugin/utils.js +243 -0
  324. package/lib/plugins/TreeViewPlugin/index.d.ts +2 -0
  325. package/lib/plugins/TreeViewPlugin/index.js +7 -0
  326. package/lib/plugins/TwitterPlugin/index.d.ts +4 -0
  327. package/lib/plugins/TwitterPlugin/index.js +20 -0
  328. package/lib/plugins/TypingPerfPlugin/index.d.ts +2 -0
  329. package/lib/plugins/TypingPerfPlugin/index.js +93 -0
  330. package/lib/plugins/YouTubePlugin/index.d.ts +4 -0
  331. package/lib/plugins/YouTubePlugin/index.js +20 -0
  332. package/lib/server/validation.d.ts +1 -0
  333. package/lib/server/validation.js +111 -0
  334. package/lib/setupEnv.d.ts +2 -0
  335. package/lib/setupEnv.js +25 -0
  336. package/lib/themes/CommentEditorTheme.d.ts +4 -0
  337. package/lib/themes/CommentEditorTheme.js +7 -0
  338. package/lib/themes/PlaygroundEditorTheme.d.ts +4 -0
  339. package/lib/themes/PlaygroundEditorTheme.js +120 -0
  340. package/lib/themes/StickyEditorTheme.d.ts +4 -0
  341. package/lib/themes/StickyEditorTheme.js +7 -0
  342. package/lib/tyes.dt.d.ts +12 -0
  343. package/lib/tyes.dt.js +0 -0
  344. package/lib/ui/Button.d.ts +12 -0
  345. package/lib/ui/Button.js +6 -0
  346. package/lib/ui/ColorPicker.d.ts +14 -0
  347. package/lib/ui/ColorPicker.js +219 -0
  348. package/lib/ui/ContentEditable.d.ts +9 -0
  349. package/lib/ui/ContentEditable.js +6 -0
  350. package/lib/ui/Dialog.d.ts +10 -0
  351. package/lib/ui/Dialog.js +8 -0
  352. package/lib/ui/DropDown.d.ts +18 -0
  353. package/lib/ui/DropDown.js +133 -0
  354. package/lib/ui/DropdownColorPicker.d.ts +13 -0
  355. package/lib/ui/DropdownColorPicker.js +6 -0
  356. package/lib/ui/EquationEditor.d.ts +8 -0
  357. package/lib/ui/EquationEditor.js +11 -0
  358. package/lib/ui/ExcalidrawModal.d.ts +42 -0
  359. package/lib/ui/ExcalidrawModal.js +103 -0
  360. package/lib/ui/FileInput.d.ts +10 -0
  361. package/lib/ui/FileInput.js +5 -0
  362. package/lib/ui/FlashMessage.d.ts +7 -0
  363. package/lib/ui/FlashMessage.js +6 -0
  364. package/lib/ui/ImageResizer.d.ts +17 -0
  365. package/lib/ui/ImageResizer.js +171 -0
  366. package/lib/ui/KatexEquationAlterer.d.ts +8 -0
  367. package/lib/ui/KatexEquationAlterer.js +23 -0
  368. package/lib/ui/KatexRenderer.d.ts +6 -0
  369. package/lib/ui/KatexRenderer.js +24 -0
  370. package/lib/ui/Modal.d.ts +9 -0
  371. package/lib/ui/Modal.js +48 -0
  372. package/lib/ui/Select.d.ts +8 -0
  373. package/lib/ui/Select.js +5 -0
  374. package/lib/ui/Switch.d.ts +8 -0
  375. package/lib/ui/Switch.js +6 -0
  376. package/lib/ui/TextInput.d.ts +13 -0
  377. package/lib/ui/TextInput.js +7 -0
  378. package/lib/utils/docSerialization.d.ts +3 -0
  379. package/lib/utils/docSerialization.js +56 -0
  380. package/lib/utils/emoji-list.d.ts +20 -0
  381. package/lib/utils/emoji-list.js +16605 -0
  382. package/lib/utils/getDOMRangeRect.d.ts +8 -0
  383. package/lib/utils/getDOMRangeRect.js +22 -0
  384. package/lib/utils/getSelectedNode.d.ts +2 -0
  385. package/lib/utils/getSelectedNode.js +24 -0
  386. package/lib/utils/getThemeSelector.d.ts +2 -0
  387. package/lib/utils/getThemeSelector.js +10 -0
  388. package/lib/utils/isMobileWidth.d.ts +7 -0
  389. package/lib/utils/isMobileWidth.js +7 -0
  390. package/lib/utils/joinClasses.d.ts +1 -0
  391. package/lib/utils/joinClasses.js +3 -0
  392. package/lib/utils/setFloatingElemPosition.d.ts +1 -0
  393. package/lib/utils/setFloatingElemPosition.js +55 -0
  394. package/lib/utils/setFloatingElemPositionForLinkEditor.d.ts +1 -0
  395. package/lib/utils/setFloatingElemPositionForLinkEditor.js +32 -0
  396. package/lib/utils/swipe.d.ts +4 -0
  397. package/lib/utils/swipe.js +90 -0
  398. package/lib/utils/url.d.ts +2 -0
  399. package/lib/utils/url.js +27 -0
  400. package/package.json +82 -51
  401. package/lib/DiffMerge.d.ts +0 -39
  402. package/lib/DiffMerge.js +0 -437
  403. package/lib/LoroCollaborativePlugin.d.ts +0 -62
  404. package/lib/LoroCollaborativePlugin.js +0 -2826
  405. package/lib/stableNodeState.d.ts +0 -8
  406. package/lib/stableNodeState.js +0 -15
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ export declare function getDOMRangeRect(nativeSelection: Selection, rootElement: HTMLElement): DOMRect;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ export function getDOMRangeRect(nativeSelection, rootElement) {
9
+ const domRange = nativeSelection.getRangeAt(0);
10
+ let rect;
11
+ if (nativeSelection.anchorNode === rootElement) {
12
+ let inner = rootElement;
13
+ while (inner.firstElementChild != null) {
14
+ inner = inner.firstElementChild;
15
+ }
16
+ rect = inner.getBoundingClientRect();
17
+ }
18
+ else {
19
+ rect = domRange.getBoundingClientRect();
20
+ }
21
+ return rect;
22
+ }
@@ -0,0 +1,2 @@
1
+ import { ElementNode, RangeSelection, TextNode } from 'lexical';
2
+ export declare function getSelectedNode(selection: RangeSelection): TextNode | ElementNode;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ import { $isAtNodeEnd } from '@lexical/selection';
9
+ export function getSelectedNode(selection) {
10
+ const anchor = selection.anchor;
11
+ const focus = selection.focus;
12
+ const anchorNode = selection.anchor.getNode();
13
+ const focusNode = selection.focus.getNode();
14
+ if (anchorNode === focusNode) {
15
+ return anchorNode;
16
+ }
17
+ const isBackward = selection.isBackward();
18
+ if (isBackward) {
19
+ return $isAtNodeEnd(focus) ? anchorNode : focusNode;
20
+ }
21
+ else {
22
+ return $isAtNodeEnd(anchor) ? anchorNode : focusNode;
23
+ }
24
+ }
@@ -0,0 +1,2 @@
1
+ import { EditorThemeClasses } from 'lexical';
2
+ export declare function getThemeSelector(getTheme: () => EditorThemeClasses | null | undefined, name: keyof EditorThemeClasses): string;
@@ -0,0 +1,10 @@
1
+ export function getThemeSelector(getTheme, name) {
2
+ const className = getTheme()?.[name];
3
+ if (typeof className !== 'string') {
4
+ throw new Error(`getThemeClass: required theme property ${name} not defined`);
5
+ }
6
+ return className
7
+ .split(/\s+/g)
8
+ .map((cls) => `.${cls}`)
9
+ .join();
10
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
@@ -0,0 +1 @@
1
+ export default function joinClasses(...args: Array<string | boolean | null | undefined>): string;
@@ -0,0 +1,3 @@
1
+ export default function joinClasses(...args) {
2
+ return args.filter(Boolean).join(' ');
3
+ }
@@ -0,0 +1 @@
1
+ export declare function setFloatingElemPosition(targetRect: DOMRect | null, floatingElem: HTMLElement, anchorElem: HTMLElement, isLink?: boolean, verticalGap?: number, horizontalOffset?: number): void;
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ const VERTICAL_GAP = 10;
9
+ const HORIZONTAL_OFFSET = 5;
10
+ export function setFloatingElemPosition(targetRect, floatingElem, anchorElem, isLink = false, verticalGap = VERTICAL_GAP, horizontalOffset = HORIZONTAL_OFFSET) {
11
+ const scrollerElem = anchorElem.parentElement;
12
+ if (targetRect === null || !scrollerElem) {
13
+ floatingElem.style.opacity = '0';
14
+ floatingElem.style.transform = 'translate(-10000px, -10000px)';
15
+ return;
16
+ }
17
+ const floatingElemRect = floatingElem.getBoundingClientRect();
18
+ const anchorElementRect = anchorElem.getBoundingClientRect();
19
+ const editorScrollerRect = scrollerElem.getBoundingClientRect();
20
+ let top = targetRect.top - floatingElemRect.height - verticalGap;
21
+ let left = targetRect.left - horizontalOffset;
22
+ // Check if text is end-aligned
23
+ const selection = window.getSelection();
24
+ if (selection && selection.rangeCount > 0) {
25
+ const range = selection.getRangeAt(0);
26
+ const textNode = range.startContainer;
27
+ if (textNode.nodeType === Node.ELEMENT_NODE || textNode.parentElement) {
28
+ const textElement = textNode.nodeType === Node.ELEMENT_NODE
29
+ ? textNode
30
+ : textNode.parentElement;
31
+ const textAlign = window.getComputedStyle(textElement).textAlign;
32
+ if (textAlign === 'right' || textAlign === 'end') {
33
+ // For end-aligned text, position the toolbar relative to the text end
34
+ left = targetRect.right - floatingElemRect.width + horizontalOffset;
35
+ }
36
+ }
37
+ }
38
+ if (top < editorScrollerRect.top) {
39
+ // adjusted height for link element if the element is at top
40
+ top +=
41
+ floatingElemRect.height +
42
+ targetRect.height +
43
+ verticalGap * (isLink ? 9 : 2);
44
+ }
45
+ if (left + floatingElemRect.width > editorScrollerRect.right) {
46
+ left = editorScrollerRect.right - floatingElemRect.width - horizontalOffset;
47
+ }
48
+ if (left < editorScrollerRect.left) {
49
+ left = editorScrollerRect.left + horizontalOffset;
50
+ }
51
+ top -= anchorElementRect.top;
52
+ left -= anchorElementRect.left;
53
+ floatingElem.style.opacity = '1';
54
+ floatingElem.style.transform = `translate(${left}px, ${top}px)`;
55
+ }
@@ -0,0 +1 @@
1
+ export declare function setFloatingElemPositionForLinkEditor(targetRect: DOMRect | null, floatingElem: HTMLElement, anchorElem: HTMLElement, verticalGap?: number, horizontalOffset?: number): void;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ const VERTICAL_GAP = 10;
9
+ const HORIZONTAL_OFFSET = 5;
10
+ export function setFloatingElemPositionForLinkEditor(targetRect, floatingElem, anchorElem, verticalGap = VERTICAL_GAP, horizontalOffset = HORIZONTAL_OFFSET) {
11
+ const scrollerElem = anchorElem.parentElement;
12
+ if (targetRect === null || !scrollerElem) {
13
+ floatingElem.style.opacity = '0';
14
+ floatingElem.style.transform = 'translate(-10000px, -10000px)';
15
+ return;
16
+ }
17
+ const floatingElemRect = floatingElem.getBoundingClientRect();
18
+ const anchorElementRect = anchorElem.getBoundingClientRect();
19
+ const editorScrollerRect = scrollerElem.getBoundingClientRect();
20
+ let top = targetRect.top - verticalGap;
21
+ let left = targetRect.left - horizontalOffset;
22
+ if (top < editorScrollerRect.top) {
23
+ top += floatingElemRect.height + targetRect.height + verticalGap * 2;
24
+ }
25
+ if (left + floatingElemRect.width > editorScrollerRect.right) {
26
+ left = editorScrollerRect.right - floatingElemRect.width - horizontalOffset;
27
+ }
28
+ top -= anchorElementRect.top;
29
+ left -= anchorElementRect.left;
30
+ floatingElem.style.opacity = '1';
31
+ floatingElem.style.transform = `translate(${left}px, ${top}px)`;
32
+ }
@@ -0,0 +1,4 @@
1
+ export declare function addSwipeLeftListener(element: HTMLElement, cb: (_force: number, e: TouchEvent) => void): () => void;
2
+ export declare function addSwipeRightListener(element: HTMLElement, cb: (_force: number, e: TouchEvent) => void): () => void;
3
+ export declare function addSwipeUpListener(element: HTMLElement, cb: (_force: number, e: TouchEvent) => void): () => void;
4
+ export declare function addSwipeDownListener(element: HTMLElement, cb: (_force: number, e: TouchEvent) => void): () => void;
@@ -0,0 +1,90 @@
1
+ const elements = new WeakMap();
2
+ function readTouch(e) {
3
+ const touch = e.changedTouches[0];
4
+ if (touch === undefined) {
5
+ return null;
6
+ }
7
+ return [touch.clientX, touch.clientY];
8
+ }
9
+ function addListener(element, cb) {
10
+ let elementValues = elements.get(element);
11
+ if (elementValues === undefined) {
12
+ const listeners = new Set();
13
+ const handleTouchstart = (e) => {
14
+ if (elementValues !== undefined) {
15
+ elementValues.start = readTouch(e);
16
+ }
17
+ };
18
+ const handleTouchend = (e) => {
19
+ if (elementValues === undefined) {
20
+ return;
21
+ }
22
+ const start = elementValues.start;
23
+ if (start === null) {
24
+ return;
25
+ }
26
+ const end = readTouch(e);
27
+ for (const listener of listeners) {
28
+ if (end !== null) {
29
+ listener([end[0] - start[0], end[1] - start[1]], e);
30
+ }
31
+ }
32
+ };
33
+ element.addEventListener('touchstart', handleTouchstart);
34
+ element.addEventListener('touchend', handleTouchend);
35
+ elementValues = {
36
+ handleTouchend,
37
+ handleTouchstart,
38
+ listeners,
39
+ start: null,
40
+ };
41
+ elements.set(element, elementValues);
42
+ }
43
+ elementValues.listeners.add(cb);
44
+ return () => deleteListener(element, cb);
45
+ }
46
+ function deleteListener(element, cb) {
47
+ const elementValues = elements.get(element);
48
+ if (elementValues === undefined) {
49
+ return;
50
+ }
51
+ const listeners = elementValues.listeners;
52
+ listeners.delete(cb);
53
+ if (listeners.size === 0) {
54
+ elements.delete(element);
55
+ element.removeEventListener('touchstart', elementValues.handleTouchstart);
56
+ element.removeEventListener('touchend', elementValues.handleTouchend);
57
+ }
58
+ }
59
+ export function addSwipeLeftListener(element, cb) {
60
+ return addListener(element, (force, e) => {
61
+ const [x, y] = force;
62
+ if (x < 0 && -x > Math.abs(y)) {
63
+ cb(x, e);
64
+ }
65
+ });
66
+ }
67
+ export function addSwipeRightListener(element, cb) {
68
+ return addListener(element, (force, e) => {
69
+ const [x, y] = force;
70
+ if (x > 0 && x > Math.abs(y)) {
71
+ cb(x, e);
72
+ }
73
+ });
74
+ }
75
+ export function addSwipeUpListener(element, cb) {
76
+ return addListener(element, (force, e) => {
77
+ const [x, y] = force;
78
+ if (y < 0 && -y > Math.abs(x)) {
79
+ cb(x, e);
80
+ }
81
+ });
82
+ }
83
+ export function addSwipeDownListener(element, cb) {
84
+ return addListener(element, (force, e) => {
85
+ const [x, y] = force;
86
+ if (y > 0 && y > Math.abs(x)) {
87
+ cb(x, e);
88
+ }
89
+ });
90
+ }
@@ -0,0 +1,2 @@
1
+ export declare function sanitizeUrl(url: string): string;
2
+ export declare function validateUrl(url: string): boolean;
@@ -0,0 +1,27 @@
1
+ const SUPPORTED_URL_PROTOCOLS = new Set([
2
+ 'http:',
3
+ 'https:',
4
+ 'mailto:',
5
+ 'sms:',
6
+ 'tel:',
7
+ ]);
8
+ export function sanitizeUrl(url) {
9
+ try {
10
+ const parsedUrl = new URL(url);
11
+ // eslint-disable-next-line no-script-url
12
+ if (!SUPPORTED_URL_PROTOCOLS.has(parsedUrl.protocol)) {
13
+ return 'about:blank';
14
+ }
15
+ }
16
+ catch {
17
+ return url;
18
+ }
19
+ return url;
20
+ }
21
+ // Source: https://stackoverflow.com/a/8234912/2013580
22
+ const urlRegExp = new RegExp(/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=+$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=+$,\w]+@)[A-Za-z0-9.-]+)((?:\/[+~%/.\w-_]*)?\??(?:[-+=&;%@.\w_]*)#?(?:[\w]*))?)/);
23
+ export function validateUrl(url) {
24
+ // TODO Fix UI for link insertion; it should never default to an invalid URL such as https://.
25
+ // Maybe show a dialog where they user can type the URL before inserting it.
26
+ return url === 'https://' || urlRegExp.test(url);
27
+ }
package/package.json CHANGED
@@ -1,37 +1,47 @@
1
1
  {
2
2
  "name": "@datalayer/lexical-loro",
3
+ "version": "0.1.0",
3
4
  "private": false,
4
- "version": "0.0.7",
5
- "type": "module",
6
- "description": "Collaborative editing solution for Lexical based on Loro CRDT",
7
5
  "main": "lib/index.js",
8
- "types": "lib/index.d.ts",
9
6
  "files": [
10
- "lib/**/*.*"
7
+ "lib/**/*.{css,d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}",
8
+ "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}",
9
+ "schema/*.json"
11
10
  ],
12
11
  "keywords": [
13
- "lexical",
14
- "loro",
15
- "crdt",
16
- "collaborative",
17
- "editor",
18
- "plugin",
19
- "react",
20
- "rich-editor"
12
+ "jupyter",
13
+ "jupyterlab",
14
+ "react"
21
15
  ],
22
16
  "repository": {
23
17
  "type": "git",
24
18
  "url": "https://github.com/datalayer/lexical-loro.git"
25
19
  },
26
- "author": "Datalayer <info@datalayer.io>",
27
- "license": "MIT",
20
+ "sideEffects": [
21
+ "style/*.css",
22
+ "src/**/*.css",
23
+ "style/index.js"
24
+ ],
25
+ "styleModule": "style/index.js",
28
26
  "publishConfig": {
29
27
  "access": "public"
30
28
  },
31
29
  "scripts": {
32
30
  "build": "tsc -b && vite build",
31
+ "dev": "cross-env NODE_ENV=development concurrently \"npm:server:py:ws\" \"npm:server:mcp\" \"vite --host --port 3000\"",
32
+ "build:tsc": "tsc",
33
+ "build:dev": "vite build",
34
+ "build:prod": "vite build --mode production",
35
+ "server:loro": "fkill -s :1235 && cross-env HOST=localhost PORT=1235 YPERSISTENCE=./.wss-loro tsx src/collab/loro/servers/ws/server.ts",
36
+ "server:yjs": "fkill -s :1234 && cross-env HOST=localhost PORT=1234 YPERSISTENCE=./.wss-yjs tsx src/collab/yjs/servers/ws/server.ts",
37
+ "server:yjs:dist": "cross-env HOST=localhost PORT=1234 YPERSISTENCE=./.yjs-wss-db npx y-websocket",
38
+ "test": "npm run test:js && npm run test:py",
39
+ "test:watch": "jest --watch",
40
+ "test:coverage": "npm run test:js:coverage && npm run test:py:coverage",
41
+ "test:js:coverage": "jest --coverage",
42
+ "preview": "vite preview",
43
+ "watch:lib": "tsc -b -w",
33
44
  "clean": "rimraf dist lib",
34
- "dev": "npm run example",
35
45
  "dev:all:js": "npm run example:js",
36
46
  "dev:all:py": "npm run example:py",
37
47
  "dev:vite": "npm run example:vite",
@@ -40,54 +50,75 @@
40
50
  "example:py": "concurrently \"npm run server:py:dev\" \"npm run example:vite\"",
41
51
  "example:vite": "vite",
42
52
  "lint": "eslint .",
43
- "preview": "vite preview",
44
53
  "server": "tsx dev/node-server.ts",
45
54
  "server:py": "lexical-loro-server",
46
55
  "server:py:dev": "python3 -m lexical_loro.cli",
47
- "server:mcp": "python3 -m lexical_loro.mcp start --transport streamable-http --port 3001 --host 0.0.0.0",
48
- "test": "vitest",
56
+ "server:py:ws": "python3 -m lexical_loro.cli --host localhost --port 3002 --autosave-interval 5",
57
+ "server:mcp": "python3 -m lexical_loro.mcp.server --host 0.0.0.0 --port 3001",
49
58
  "test:js": "vitest run",
50
- "test:py": "python3 -m pytest lexical_loro/tests/ -v",
51
- "test:py:coverage": "python3 -m pytest lexical_loro/tests/ --cov=. --cov-report=html --cov-report=term",
52
- "test:py:watch": "python3 -m pytest lexical_loro/tests/ -v --tb=short -f",
53
- "watch:lib": "tsc -b -w"
59
+ "test:py": "python3 -m pytest tests/ -v",
60
+ "test:py:coverage": "python3 -m pytest tests/ --cov=lexical_loro --cov-report=html --cov-report=term",
61
+ "test:py:watch": "python3 -m pytest tests/ -v --tb=short -f"
54
62
  },
55
63
  "dependencies": {
56
- "loro-crdt": "^1.5.10",
57
- "react": "^18.3.1",
58
- "react-dom": "^18.3.1",
59
- "lexical": "^0.33.1",
60
- "@lexical/react": "^0.33.1",
61
- "@lexical/selection": "^0.33.1"
64
+ "@excalidraw/excalidraw": "^0.18.0",
65
+ "@floating-ui/react": "^0.27.8",
66
+ "@lexical/clipboard": "^0.35.0",
67
+ "@lexical/code": "^0.35.0",
68
+ "@lexical/code-shiki": "^0.35.0",
69
+ "@lexical/file": "^0.35.0",
70
+ "@lexical/hashtag": "^0.35.0",
71
+ "@lexical/headless": "^0.35.0",
72
+ "@lexical/link": "^0.35.0",
73
+ "@lexical/list": "^0.35.0",
74
+ "@lexical/mark": "^0.35.0",
75
+ "@lexical/overflow": "^0.35.0",
76
+ "@lexical/plain-text": "^0.35.0",
77
+ "@lexical/react": "^0.35.0",
78
+ "@lexical/rich-text": "^0.35.0",
79
+ "@lexical/selection": "^0.35.0",
80
+ "@lexical/table": "^0.35.0",
81
+ "@lexical/utils": "^0.35.0",
82
+ "date-fns": "^4.1.0",
83
+ "katex": "^0.16.10",
84
+ "lexical": "^0.35.0",
85
+ "loro-crdt": "^1.8.0",
86
+ "lodash-es": "^4.17.21",
87
+ "prettier": "^2.8.8",
88
+ "react": "^18.2.0",
89
+ "react-day-picker": "^9.7.0",
90
+ "react-dom": "^18.2.0",
91
+ "react-error-boundary": "^3.1.4",
92
+ "y-websocket": "3.0.0",
93
+ "yjs": ">=13.5.42"
62
94
  },
63
95
  "devDependencies": {
64
- "@eslint/js": "^9.30.1",
65
- "@types/react": "18.3.20",
66
- "@types/react-dom": "18.3.6",
67
- "@types/ws": "^8.18.1",
68
- "@vitejs/plugin-react": "^4.6.0",
96
+ "@babel/plugin-transform-flow-strip-types": "^7.24.7",
97
+ "@babel/preset-react": "^7.24.7",
98
+ "@rollup/plugin-babel": "^6.0.4",
99
+ "@rollup/plugin-commonjs": "^25.0.7",
100
+ "@types/jest": "^29.5.12",
101
+ "@types/lodash-es": "^4.14.182",
102
+ "@types/prettier": "^3.0.0",
103
+ "@vitejs/plugin-react": "^4.2.1",
69
104
  "concurrently": "^9.2.0",
105
+ "cross-env": "^7.0.3",
70
106
  "eslint": "^9.30.1",
71
107
  "eslint-plugin-react-hooks": "^5.2.0",
72
108
  "eslint-plugin-react-refresh": "^0.4.20",
73
- "globals": "^16.3.0",
74
- "@lexical/code": "^0.33.1",
75
- "@lexical/history": "^0.33.1",
76
- "@lexical/html": "^0.33.1",
77
- "@lexical/list": "^0.33.1",
78
- "@lexical/mark": "^0.33.1",
79
- "@lexical/plain-text": "^0.33.1",
80
- "@lexical/rich-text": "^0.33.1",
81
- "@lexical/table": "^0.33.1",
82
- "@lexical/utils": "^0.33.1",
83
- "rimraf": "^6.0.1",
84
- "tsx": "^4.20.3",
85
- "typescript": "~5.8.3",
86
- "typescript-eslint": "^8.35.1",
87
- "vite": "^7.0.4",
88
- "vitest": "^2.1.4",
109
+ "fkill-cli": "^8.0.0",
110
+ "jest": "^29.7.0",
111
+ "jest-environment-jsdom": "^29.7.0",
112
+ "prettier": "^3.3.2",
113
+ "rollup-plugin-copy": "^3.5.0",
114
+ "ts-jest": "^29.1.2",
115
+ "ts-node": "^10.9.2",
116
+ "tsx": "^4.20.5",
117
+ "typescript": "^5.9.2",
118
+ "vite": "^7.0.0",
119
+ "vite-plugin-static-copy": "^3.1.2",
89
120
  "vite-plugin-top-level-await": "^1.6.0",
90
121
  "vite-plugin-wasm": "^3.5.0",
91
- "ws": "^8.18.3"
122
+ "vitest": "^3.2.4"
92
123
  }
93
124
  }
@@ -1,39 +0,0 @@
1
- import { type LexicalEditor } from 'lexical';
2
- /**
3
- * DiffMerge System for Lexical Editor
4
- *
5
- * This module provides sophisticated differential updates for Lexical editor states,
6
- * preventing wholesale state replacement that would destroy React decorator nodes
7
- * like YouTube embeds, counters, and other custom components.
8
- *
9
- * Key Features:
10
- * - Selective node updates (only changed content)
11
- * - Decorator node preservation (YouTube, Counter nodes remain untouched)
12
- * - Table structure support with cell-level updates
13
- * - Graceful fallback for unsupported operations
14
- * - Deep content comparison to minimize unnecessary updates
15
- *
16
- * Usage:
17
- * ```typescript
18
- * const success = applyDifferentialUpdate(editor, newState, 'collaboration');
19
- * if (!success) {
20
- * // Fall back to setEditorState if differential update fails
21
- * editor.setEditorState(newState);
22
- * }
23
- * ```
24
- */
25
- interface EditorStateData {
26
- root: {
27
- type: 'root';
28
- children: any[];
29
- direction?: string | null;
30
- format?: number;
31
- indent?: number;
32
- version?: number;
33
- };
34
- }
35
- /**
36
- * Main function to apply differential updates to the editor
37
- */
38
- export declare function applyDifferentialUpdate(editor: LexicalEditor, newStateData: EditorStateData | any, source?: string): boolean;
39
- export {};