@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,83 @@
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from 'react';
3
+ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
4
+ import { useCollaborationContext, generateDeterministicUserData, } from './LexicalCollaborationContext';
5
+ import { updateLocalStateName } from './State';
6
+ import { useCollaboration, useFocusTracking, useHistory, } from './useCollaboration';
7
+ import { createBinding, LoroCollaborationUI } from './Bindings';
8
+ export function LoroCollaborationPlugin({ id, providerFactory, shouldBootstrap, username, cursorColor, cursorsContainerRef, initialEditorState, excludedProperties, awarenessData, syncCursorPositionsFn, showCollaborators = true, websocketUrl = 'ws://localhost:3002', onInitialization, }) {
9
+ const isBindingInitialized = useRef(false);
10
+ const isProviderInitialized = useRef(false);
11
+ const collabContext = useCollaborationContext(username, cursorColor);
12
+ const { docMap, name, color } = collabContext;
13
+ const [editor] = useLexicalComposerContext();
14
+ useEffect(() => {
15
+ collabContext.isCollabActive = true;
16
+ return () => {
17
+ // Resetting flag only when unmount top level editor collab plugin. Nested
18
+ // editors (e.g. image caption) should unmount without affecting it
19
+ if (editor._parentEditor == null) {
20
+ collabContext.isCollabActive = false;
21
+ }
22
+ };
23
+ }, [collabContext, editor]);
24
+ const [provider, setProvider] = useState();
25
+ const [doc, setDoc] = useState();
26
+ useEffect(() => {
27
+ if (isProviderInitialized.current) {
28
+ return;
29
+ }
30
+ isProviderInitialized.current = true;
31
+ const provider = providerFactory(id, docMap, websocketUrl);
32
+ setProvider(provider);
33
+ setDoc(docMap.get(id));
34
+ return () => {
35
+ provider.disconnect();
36
+ };
37
+ }, [id, providerFactory, docMap, websocketUrl]);
38
+ const [binding, setBinding] = useState();
39
+ useEffect(() => {
40
+ if (!provider) {
41
+ return;
42
+ }
43
+ if (isBindingInitialized.current) {
44
+ return;
45
+ }
46
+ isBindingInitialized.current = true;
47
+ const binding = createBinding(editor, provider, id, doc || docMap.get(id), docMap, excludedProperties);
48
+ // Update collaboration context with deterministic name based on client ID
49
+ // This ensures consistent names across browser sessions
50
+ const deterministicUserData = generateDeterministicUserData(binding.clientID);
51
+ console.log('Setting deterministic user data based on client ID:', {
52
+ clientId: binding.clientID,
53
+ name: deterministicUserData.name,
54
+ color: deterministicUserData.color
55
+ });
56
+ // Update the collaboration context with stable name and color
57
+ const finalName = username || deterministicUserData.name;
58
+ const finalColor = cursorColor || deterministicUserData.color;
59
+ collabContext.name = finalName;
60
+ collabContext.color = finalColor;
61
+ collabContext.clientID = binding.clientID;
62
+ // Update the awareness state immediately with the deterministic name
63
+ updateLocalStateName(provider, finalName, finalColor);
64
+ setBinding(binding);
65
+ return () => {
66
+ // Clean up binding resources if needed
67
+ };
68
+ }, [editor, provider, id, docMap, doc, excludedProperties, collabContext, username, cursorColor]);
69
+ if (!provider || !binding) {
70
+ return _jsx(_Fragment, {});
71
+ }
72
+ return (_jsx(LoroCollaborationCursors, { awarenessData: awarenessData, binding: binding, collabContext: collabContext, color: color, cursorsContainerRef: cursorsContainerRef, editor: editor, id: id, initialEditorState: initialEditorState, name: name, provider: provider, setDoc: setDoc, shouldBootstrap: shouldBootstrap, docMap: docMap, syncCursorPositionsFn: syncCursorPositionsFn, showCollaborators: showCollaborators, onInitialization: onInitialization }));
73
+ }
74
+ function LoroCollaborationCursors({ editor, id, provider, docMap, name, color, shouldBootstrap, cursorsContainerRef, initialEditorState, awarenessData, collabContext, binding, setDoc, syncCursorPositionsFn, showCollaborators = false, onInitialization, }) {
75
+ const cursorsElement = useCollaboration(editor, id, provider, docMap, name, color, shouldBootstrap, binding, setDoc, cursorsContainerRef, initialEditorState, awarenessData, syncCursorPositionsFn, onInitialization);
76
+ collabContext.clientID = binding.clientID;
77
+ useHistory(editor, binding);
78
+ useFocusTracking(editor, provider, name, color, awarenessData);
79
+ if (showCollaborators) {
80
+ return (_jsx(LoroCollaborationUI, { binding: binding, cursorsContainer: cursorsElement, currentUserName: name, currentUserColor: color, showCollaborators: true }));
81
+ }
82
+ return cursorsElement;
83
+ }
@@ -0,0 +1,53 @@
1
+ import type { LexicalCommand } from 'lexical';
2
+ import type { LoroDoc, Cursor } from 'loro-crdt';
3
+ import { UndoManager } from 'loro-crdt';
4
+ import type { Binding } from './Bindings';
5
+ export type UserState = {
6
+ anchorPos: Cursor | null;
7
+ color: string;
8
+ focusing: boolean;
9
+ focusPos: Cursor | null;
10
+ name: string;
11
+ awarenessData: object;
12
+ [key: string]: unknown;
13
+ };
14
+ export declare const CONNECTED_COMMAND: LexicalCommand<boolean>;
15
+ export declare const TOGGLE_CONNECT_COMMAND: LexicalCommand<boolean>;
16
+ export type AwarenessProvider = {
17
+ getLocalState: () => UserState | null;
18
+ getStates: () => Map<number, UserState>;
19
+ off: (type: 'update', cb: () => void) => void;
20
+ on: (type: 'update', cb: () => void) => void;
21
+ setLocalState: (userState: UserState) => void;
22
+ setLocalStateField: (field: string, value: unknown) => void;
23
+ };
24
+ export type Provider = {
25
+ awareness: AwarenessProvider;
26
+ connect(): void | Promise<void>;
27
+ disconnect(): void;
28
+ off(type: 'sync', cb: (isSynced: boolean) => void): void;
29
+ off(type: 'update', cb: (update: unknown) => void): void;
30
+ off(type: 'status', cb: (status: {
31
+ status: string;
32
+ }) => void): void;
33
+ off(type: 'reload', cb: (doc: LoroDoc) => void): void;
34
+ on(type: 'sync', cb: (isSynced: boolean) => void): void;
35
+ on(type: 'status', cb: (status: {
36
+ status: string;
37
+ }) => void): void;
38
+ on(type: 'update', cb: (update: unknown) => void): void;
39
+ on(type: 'reload', cb: (doc: LoroDoc) => void): void;
40
+ };
41
+ export type Operation = {
42
+ attributes: {
43
+ __type: string;
44
+ };
45
+ insert: string | Record<string, unknown>;
46
+ };
47
+ export type Delta = Array<Operation>;
48
+ export type LoroNode = Record<string, unknown>;
49
+ export type LoroEvent = Record<string, unknown>;
50
+ export declare function createUndoManager(binding: Binding): UndoManager;
51
+ export declare function initLocalState(provider: Provider, name: string, color: string, focusing: boolean, awarenessData: object): void;
52
+ export declare function setLocalStateFocus(provider: Provider, name: string, color: string, focusing: boolean, awarenessData: object): void;
53
+ export declare function updateLocalStateName(provider: Provider, name: string, color: string): void;
@@ -0,0 +1,90 @@
1
+ import { createCommand } from 'lexical';
2
+ import { UndoManager } from 'loro-crdt';
3
+ export const CONNECTED_COMMAND = createCommand('CONNECTED_COMMAND');
4
+ export const TOGGLE_CONNECT_COMMAND = createCommand('TOGGLE_CONNECT_COMMAND');
5
+ export function createUndoManager(binding) {
6
+ // Create Loro UndoManager with configuration
7
+ const undoManager = new UndoManager(binding.doc, {
8
+ mergeInterval: 1000, // Merge operations within 1 second
9
+ maxUndoSteps: 100, // Keep up to 100 undo steps
10
+ excludeOriginPrefixes: ['collab-', 'sync-'], // Exclude collaboration operations
11
+ /*
12
+ onPush: (isUndo, counterRange, event) => {
13
+ // Save cursor positions when adding to undo stack
14
+ const selection = binding.editor.getEditorState().read(() => {
15
+ return binding.editor.getEditorState()._selection;
16
+ });
17
+ // Get cursors for the current state
18
+ const cursors: Cursor[] = [];
19
+ if (selection) {
20
+ // TODO: Convert Lexical selection to Loro cursors
21
+ // This would need to be implemented based on the specific selection format
22
+ }
23
+ return {
24
+ value: binding.doc.toJSON(), // Save document state
25
+ cursors: cursors
26
+ };
27
+ },
28
+ onPop: (isUndo, metadata, counterRange) => {
29
+ // Restore cursor positions when undoing/redoing
30
+ if (metadata?.cursors && metadata.cursors.length > 0) {
31
+ binding.editor.update(() => {
32
+ // TODO: Restore selection state from cursors
33
+ // This would need to convert Loro cursors back to Lexical selection
34
+ });
35
+ }
36
+ }
37
+ */
38
+ });
39
+ return undoManager;
40
+ }
41
+ export function initLocalState(provider, name, color, focusing, awarenessData) {
42
+ provider.awareness.setLocalState({
43
+ anchorPos: null,
44
+ awarenessData,
45
+ color,
46
+ focusPos: null,
47
+ focusing,
48
+ name,
49
+ });
50
+ }
51
+ export function setLocalStateFocus(provider, name, color, focusing, awarenessData) {
52
+ const { awareness } = provider;
53
+ let localState = awareness.getLocalState();
54
+ if (localState === null) {
55
+ localState = {
56
+ anchorPos: null,
57
+ awarenessData,
58
+ color,
59
+ focusPos: null,
60
+ focusing: focusing,
61
+ name,
62
+ };
63
+ }
64
+ // Always update name and color in case they changed
65
+ localState.name = name;
66
+ localState.color = color;
67
+ localState.focusing = focusing;
68
+ awareness.setLocalState(localState);
69
+ }
70
+ export function updateLocalStateName(provider, name, color) {
71
+ const { awareness } = provider;
72
+ let localState = awareness.getLocalState();
73
+ if (localState === null) {
74
+ // Initialize with the new name if no state exists
75
+ localState = {
76
+ anchorPos: null,
77
+ awarenessData: {},
78
+ color,
79
+ focusPos: null,
80
+ focusing: false,
81
+ name,
82
+ };
83
+ }
84
+ else {
85
+ // Update existing state with new name and color
86
+ localState.name = name;
87
+ localState.color = color;
88
+ }
89
+ awareness.setLocalState(localState);
90
+ }
@@ -0,0 +1,13 @@
1
+ import type { Binding } from '../Bindings';
2
+ export interface LoroCollaborationUIProps {
3
+ binding: Binding;
4
+ cursorsContainer: JSX.Element | null;
5
+ currentUserName?: string;
6
+ currentUserColor?: string;
7
+ showCollaborators?: boolean;
8
+ }
9
+ /**
10
+ * Combines the cursors container with the collaborators list
11
+ */
12
+ export declare function LoroCollaborationUI({ binding, cursorsContainer, currentUserName, currentUserColor, showCollaborators }: LoroCollaborationUIProps): JSX.Element;
13
+ export default LoroCollaborationUI;
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { LoroCollaborators } from './LoroCollaborators';
3
+ /**
4
+ * Combines the cursors container with the collaborators list
5
+ */
6
+ export function LoroCollaborationUI({ binding, cursorsContainer, currentUserName = 'You', currentUserColor = '#007acc', showCollaborators = true }) {
7
+ return (_jsxs(_Fragment, { children: [showCollaborators && (_jsx(LoroCollaborators, { binding: binding, currentUserName: currentUserName, currentUserColor: currentUserColor })), cursorsContainer] }));
8
+ }
9
+ export default LoroCollaborationUI;
@@ -0,0 +1,8 @@
1
+ import type { Binding } from '../Bindings';
2
+ export interface LoroCollaboratorsProps {
3
+ binding: Binding;
4
+ currentUserName?: string;
5
+ currentUserColor?: string;
6
+ }
7
+ export declare function LoroCollaborators({ binding, currentUserName, currentUserColor }: LoroCollaboratorsProps): JSX.Element;
8
+ export default LoroCollaborators;
@@ -0,0 +1,97 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect } from 'react';
3
+ export function LoroCollaborators({ binding, currentUserName = 'Me', currentUserColor = '#007acc' }) {
4
+ // Force re-render when cursors change
5
+ const [updateTrigger, setUpdateTrigger] = useState(0);
6
+ // Monitor cursors map changes
7
+ useEffect(() => {
8
+ const interval = setInterval(() => {
9
+ setUpdateTrigger(prev => prev + 1);
10
+ }, 1000); // Check for updates every second
11
+ return () => clearInterval(interval);
12
+ }, []);
13
+ // Get current user's client ID
14
+ const currentClientID = binding.clientID;
15
+ // Debug: Log cursor information
16
+ const allCursorsDebug = Array.from(binding.cursors.entries()).map(([id, cursor]) => ({
17
+ clientId: id,
18
+ name: cursor.name,
19
+ color: cursor.color,
20
+ isCurrentUser: id === currentClientID
21
+ }));
22
+ // Get all collaborators including current user
23
+ const allCollaborators = Array.from(binding.cursors.entries())
24
+ .map(([clientId, cursor]) => ({ clientId, cursor, isCurrentUser: clientId === currentClientID }));
25
+ // Get current user's cursor if it exists
26
+ const currentUserCursor = binding.cursors.get(currentClientID);
27
+ const currentDisplayColor = currentUserCursor?.color || currentUserColor;
28
+ const currentDisplayName = currentUserCursor?.name || currentUserName;
29
+ // Separate current user and others for display order (current user first)
30
+ const currentUserData = allCollaborators.find(({ isCurrentUser }) => isCurrentUser);
31
+ const otherCollaborators = allCollaborators.filter(({ isCurrentUser }) => !isCurrentUser);
32
+ return (_jsxs("div", { style: {
33
+ display: 'flex',
34
+ alignItems: 'center',
35
+ padding: '8px 12px',
36
+ backgroundColor: '#f8f9fa',
37
+ borderBottom: '1px solid #e1e5e9',
38
+ fontSize: '14px',
39
+ fontFamily: 'system-ui, -apple-system, sans-serif',
40
+ gap: '8px',
41
+ flexWrap: 'wrap'
42
+ }, children: [currentUserData && (_jsx(CollaboratorBadge, { name: `${currentUserData.cursor.name}`, color: currentDisplayColor, isCurrentUser: true, clientId: currentClientID })), !currentUserData && (_jsx(CollaboratorBadge, { name: `${currentDisplayName} (Me)`, color: currentDisplayColor, isCurrentUser: true, clientId: currentClientID })), otherCollaborators.length > 0 && (_jsx("div", { style: {
43
+ width: '1px',
44
+ height: '20px',
45
+ backgroundColor: '#d1d5db',
46
+ margin: '0 4px'
47
+ } })), otherCollaborators.map(({ clientId, cursor }) => (_jsx(CollaboratorBadge, { name: cursor.name, color: cursor.color, isCurrentUser: false, clientId: clientId }, clientId))), otherCollaborators.length === 0 && (_jsx("span", { style: {
48
+ color: '#6b7280',
49
+ fontStyle: 'italic',
50
+ marginLeft: '8px'
51
+ }, children: "No other collaborators" }))] }));
52
+ }
53
+ function CollaboratorBadge({ name, color, isCurrentUser, clientId }) {
54
+ // Convert color to rgba for transparency when current user
55
+ const getColorWithOpacity = (color, opacity = 1) => {
56
+ // If it's a hex color, convert to rgba
57
+ if (color.startsWith('#')) {
58
+ const hex = color.slice(1);
59
+ const r = parseInt(hex.slice(0, 2), 16);
60
+ const g = parseInt(hex.slice(2, 4), 16);
61
+ const b = parseInt(hex.slice(4, 6), 16);
62
+ return `rgba(${r}, ${g}, ${b}, ${opacity})`;
63
+ }
64
+ // If it's already rgba or rgb, just return as is (basic support)
65
+ return color;
66
+ };
67
+ const circleColor = isCurrentUser ? getColorWithOpacity(color, 0.1) : color;
68
+ const badgeColor = isCurrentUser ? getColorWithOpacity(color, 0.1) : color;
69
+ return (_jsxs("div", { style: {
70
+ display: 'flex',
71
+ alignItems: 'center',
72
+ gap: '6px'
73
+ }, title: `${name} (Client ID: ${clientId})`, children: [_jsx("div", { style: {
74
+ width: '12px',
75
+ height: '12px',
76
+ borderRadius: '50%',
77
+ backgroundColor: circleColor,
78
+ border: isCurrentUser ? '2px solid #ffffff' : 'none',
79
+ boxShadow: isCurrentUser ? '0 0 0 1px #d1d5db' : 'none',
80
+ flexShrink: 0
81
+ } }), _jsx("span", { style: {
82
+ backgroundColor: badgeColor,
83
+ color: '#ffffff',
84
+ padding: '3px 8px',
85
+ borderRadius: '12px',
86
+ fontSize: '12px',
87
+ fontWeight: '500',
88
+ lineHeight: '1.2',
89
+ whiteSpace: 'nowrap',
90
+ textShadow: '0 1px 2px rgba(0,0,0,0.1)',
91
+ boxShadow: isCurrentUser
92
+ ? '0 1px 3px rgba(0,0,0,0.2), inset 0 1px 0 rgba(255,255,255,0.2)'
93
+ : '0 1px 2px rgba(0,0,0,0.1)',
94
+ opacity: isCurrentUser ? 0.9 : 1
95
+ }, children: name })] }));
96
+ }
97
+ export default LoroCollaborators;
@@ -0,0 +1,2 @@
1
+ export { LoroCollaborators, type LoroCollaboratorsProps } from './LoroCollaborators';
2
+ export { LoroCollaborationUI, type LoroCollaborationUIProps } from './LoroCollaborationUI';
@@ -0,0 +1,2 @@
1
+ export { LoroCollaborators } from './LoroCollaborators';
2
+ export { LoroCollaborationUI } from './LoroCollaborationUI';
@@ -0,0 +1,6 @@
1
+ export * from './Bindings';
2
+ export * from './LexicalCollaborationContext';
3
+ export * from './LexicalCollaborationPlugin';
4
+ export * from './State';
5
+ export * from './useCollaboration';
6
+ export * from './wsProvider';
@@ -0,0 +1,6 @@
1
+ export * from './Bindings';
2
+ export * from './LexicalCollaborationContext';
3
+ export * from './LexicalCollaborationPlugin';
4
+ export * from './State';
5
+ export * from './useCollaboration';
6
+ export * from './wsProvider';
@@ -0,0 +1,14 @@
1
+ import { Binding } from '../Bindings';
2
+ import { Provider } from '../State';
3
+ /**
4
+ * Base interface for all diff integrators
5
+ */
6
+ export interface BaseIntegrator<T = any> {
7
+ /**
8
+ * Handle the diff event
9
+ * @param diff The diff event to integrate
10
+ * @param binding The binding instance
11
+ * @param provider The provider instance
12
+ */
13
+ integrate(diff: T, binding: Binding, provider: Provider): void;
14
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ import { BaseIntegrator } from './BaseIntegrator';
2
+ import { Binding } from '../Bindings';
3
+ import { Provider } from '../State';
4
+ interface CounterDiff {
5
+ type: 'counter';
6
+ increment?: number;
7
+ value?: number;
8
+ }
9
+ /**
10
+ * Handles counter changes (increment/decrement operations)
11
+ */
12
+ export declare class CounterIntegrator implements BaseIntegrator<CounterDiff> {
13
+ integrate(diff: CounterDiff, binding: Binding, provider: Provider): void;
14
+ integrateInternal(diff: CounterDiff, binding: Binding, provider: Provider): void;
15
+ private integrateIncrement;
16
+ private integrateSetValue;
17
+ /**
18
+ * Helper method to update a counter property in a specific node
19
+ * This would be used when counters are associated with particular nodes
20
+ */
21
+ private updateNodeCounter;
22
+ }
23
+ export {};
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Handles counter changes (increment/decrement operations)
3
+ */
4
+ export class CounterIntegrator {
5
+ integrate(diff, binding, provider) {
6
+ this.integrateInternal(diff, binding, provider);
7
+ }
8
+ // Internal method for use when already inside editor.update()
9
+ integrateInternal(diff, binding, provider) {
10
+ if (diff.increment !== undefined) {
11
+ this.integrateIncrement(diff.increment, binding, provider);
12
+ }
13
+ if (diff.value !== undefined) {
14
+ this.integrateSetValue(diff.value, binding, provider);
15
+ }
16
+ }
17
+ integrateIncrement(increment, binding, provider) {
18
+ // Counter operations in Lexical context might be used for:
19
+ // - Version numbers
20
+ // - Reference counts
21
+ // - Numeric properties in nodes
22
+ // - Analytics or tracking data
23
+ // For now, this is a placeholder since counters are not commonly
24
+ // used in basic text editing scenarios
25
+ }
26
+ integrateSetValue(value, binding, provider) {
27
+ // Similar to increment, the specific implementation would depend
28
+ // on what the counter represents in the document structure
29
+ }
30
+ /**
31
+ * Helper method to update a counter property in a specific node
32
+ * This would be used when counters are associated with particular nodes
33
+ */
34
+ updateNodeCounter(nodeKey, counterName, operation, value, binding) {
35
+ // This is a hypothetical implementation
36
+ // Real usage would depend on how counters are integrated into the document model
37
+ // In practice, this might update metadata or special numeric properties
38
+ // associated with Lexical nodes
39
+ }
40
+ }
@@ -0,0 +1,23 @@
1
+ import { BaseIntegrator } from './BaseIntegrator';
2
+ import { Binding } from '../Bindings';
3
+ import { Provider } from '../State';
4
+ interface ListDiff {
5
+ type: 'list';
6
+ diff?: Array<{
7
+ type: 'insert' | 'delete' | 'retain';
8
+ index?: number;
9
+ length?: number;
10
+ value?: any;
11
+ }>;
12
+ }
13
+ /**
14
+ * Handles list changes (insertions, deletions, moves in ordered structures)
15
+ */
16
+ export declare class ListIntegrator implements BaseIntegrator<ListDiff> {
17
+ integrate(diff: ListDiff, binding: Binding, provider: Provider): void;
18
+ integrateInternal(diff: ListDiff, binding: Binding, provider: Provider): void;
19
+ private integrateInsert;
20
+ private integrateDelete;
21
+ private integrateRetain;
22
+ }
23
+ export {};
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Handles list changes (insertions, deletions, moves in ordered structures)
3
+ */
4
+ export class ListIntegrator {
5
+ integrate(diff, binding, provider) {
6
+ console.log('📋 Handling ListDiff:', diff);
7
+ this.integrateInternal(diff, binding, provider);
8
+ }
9
+ // Internal method for use when already inside editor.update()
10
+ integrateInternal(diff, binding, provider) {
11
+ if (diff.diff) {
12
+ diff.diff.forEach((change) => {
13
+ switch (change.type) {
14
+ case 'insert':
15
+ this.integrateInsert(change, binding, provider);
16
+ break;
17
+ case 'delete':
18
+ this.integrateDelete(change, binding, provider);
19
+ break;
20
+ case 'retain':
21
+ this.integrateRetain(change, binding, provider);
22
+ break;
23
+ default:
24
+ console.warn(`📋 Unknown list change type: ${change.type}`);
25
+ }
26
+ });
27
+ }
28
+ }
29
+ integrateInsert(change, binding, provider) {
30
+ // This typically represents insertion of child nodes in an ElementNode
31
+ // The actual node creation should be integrated by TreeIntegrator
32
+ // This integrater focuses on the ordering and position updates
33
+ // For now, log the operation - specific implementation would depend on
34
+ // the context of which list/container this change applies to
35
+ }
36
+ integrateDelete(change, binding, provider) {
37
+ // This typically represents removal of child nodes from an ElementNode
38
+ // The actual node deletion should be integrated by TreeIntegrator
39
+ // This integrater focuses on the ordering and position updates
40
+ }
41
+ integrateRetain(change, binding, provider) {
42
+ // Retain operations typically don't require action in Lexical
43
+ // They represent portions of the list that remain unchanged
44
+ if (change.attributes) {
45
+ console.log(`📋 List retain with attributes at ${change.index}, length: ${change.length}`, change.attributes);
46
+ // Handle any attribute changes if needed
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,24 @@
1
+ import { BaseIntegrator } from './BaseIntegrator';
2
+ import { Binding } from '../Bindings';
3
+ import { Provider } from '../State';
4
+ interface MapDiff {
5
+ type: 'map';
6
+ updated?: Record<string, any>;
7
+ deleted?: string[];
8
+ }
9
+ /**
10
+ * Handles map data changes (node properties, metadata updates)
11
+ */
12
+ export declare class MapIntegrator implements BaseIntegrator<MapDiff> {
13
+ integrate(diff: MapDiff, binding: Binding, provider: Provider): void;
14
+ integrateWithContext(diff: MapDiff, treeId: any, binding: Binding, provider: Provider): void;
15
+ integrateInternal(diff: MapDiff, binding: Binding, provider: Provider): void;
16
+ integrateWithContextInternal(diff: MapDiff, treeId: any, binding: Binding, provider: Provider): void;
17
+ private integratePropertyUpdateWithContext;
18
+ private integratePropertyUpdateWithContextInternal;
19
+ private integratePropertyUpdate;
20
+ private integratePropertyDelete;
21
+ private integrateLexicalDataUpdateWithContext;
22
+ private integrateLexicalDataUpdateInternal;
23
+ }
24
+ export {};