@datalayer/lexical-loro 0.2.5 → 1.0.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 (399) hide show
  1. package/package.json +1 -1
  2. package/lib/App.d.ts +0 -2
  3. package/lib/App.js +0 -141
  4. package/lib/Editor.d.ts +0 -2
  5. package/lib/Editor.js +0 -115
  6. package/lib/Settings.d.ts +0 -2
  7. package/lib/Settings.js +0 -57
  8. package/lib/appSettings.d.ts +0 -36
  9. package/lib/appSettings.js +0 -48
  10. package/lib/collab/loro/Bindings.d.ts +0 -41
  11. package/lib/collab/loro/Bindings.js +0 -99
  12. package/lib/collab/loro/Debug.d.ts +0 -33
  13. package/lib/collab/loro/Debug.js +0 -452
  14. package/lib/collab/loro/LexicalCollaborationContext.d.ts +0 -19
  15. package/lib/collab/loro/LexicalCollaborationContext.js +0 -52
  16. package/lib/collab/loro/LexicalCollaborationPlugin.d.ts +0 -24
  17. package/lib/collab/loro/LexicalCollaborationPlugin.js +0 -83
  18. package/lib/collab/loro/State.d.ts +0 -53
  19. package/lib/collab/loro/State.js +0 -94
  20. package/lib/collab/loro/components/LoroCollaborationUI.d.ts +0 -13
  21. package/lib/collab/loro/components/LoroCollaborationUI.js +0 -9
  22. package/lib/collab/loro/components/LoroCollaborators.d.ts +0 -8
  23. package/lib/collab/loro/components/LoroCollaborators.js +0 -102
  24. package/lib/collab/loro/components/index.d.ts +0 -2
  25. package/lib/collab/loro/components/index.js +0 -6
  26. package/lib/collab/loro/index.d.ts +0 -6
  27. package/lib/collab/loro/index.js +0 -10
  28. package/lib/collab/loro/integrators/BaseIntegrator.d.ts +0 -14
  29. package/lib/collab/loro/integrators/BaseIntegrator.js +0 -5
  30. package/lib/collab/loro/integrators/CounterIntegrator.d.ts +0 -23
  31. package/lib/collab/loro/integrators/CounterIntegrator.js +0 -44
  32. package/lib/collab/loro/integrators/ListIntegrator.d.ts +0 -23
  33. package/lib/collab/loro/integrators/ListIntegrator.js +0 -53
  34. package/lib/collab/loro/integrators/MapIntegrator.d.ts +0 -24
  35. package/lib/collab/loro/integrators/MapIntegrator.js +0 -235
  36. package/lib/collab/loro/integrators/TextIntegrator.d.ts +0 -25
  37. package/lib/collab/loro/integrators/TextIntegrator.js +0 -55
  38. package/lib/collab/loro/integrators/TreeIntegrator.d.ts +0 -36
  39. package/lib/collab/loro/integrators/TreeIntegrator.js +0 -251
  40. package/lib/collab/loro/nodes/NodeFactory.d.ts +0 -15
  41. package/lib/collab/loro/nodes/NodeFactory.js +0 -101
  42. package/lib/collab/loro/nodes/NodesMapper.d.ts +0 -120
  43. package/lib/collab/loro/nodes/NodesMapper.js +0 -277
  44. package/lib/collab/loro/propagators/DecoratorNodePropagator.d.ts +0 -60
  45. package/lib/collab/loro/propagators/DecoratorNodePropagator.js +0 -306
  46. package/lib/collab/loro/propagators/ElementNodePropagator.d.ts +0 -62
  47. package/lib/collab/loro/propagators/ElementNodePropagator.js +0 -326
  48. package/lib/collab/loro/propagators/LineBreakNodePropagator.d.ts +0 -57
  49. package/lib/collab/loro/propagators/LineBreakNodePropagator.js +0 -200
  50. package/lib/collab/loro/propagators/RootNodePropagator.d.ts +0 -55
  51. package/lib/collab/loro/propagators/RootNodePropagator.js +0 -174
  52. package/lib/collab/loro/propagators/TextNodePropagator.d.ts +0 -60
  53. package/lib/collab/loro/propagators/TextNodePropagator.js +0 -440
  54. package/lib/collab/loro/propagators/index.d.ts +0 -49
  55. package/lib/collab/loro/propagators/index.js +0 -30
  56. package/lib/collab/loro/provider/websocket.d.ts +0 -116
  57. package/lib/collab/loro/provider/websocket.js +0 -911
  58. package/lib/collab/loro/servers/index.d.ts +0 -0
  59. package/lib/collab/loro/servers/index.js +0 -4
  60. package/lib/collab/loro/servers/ws/callback.d.ts +0 -5
  61. package/lib/collab/loro/servers/ws/callback.js +0 -89
  62. package/lib/collab/loro/servers/ws/server.d.ts +0 -2
  63. package/lib/collab/loro/servers/ws/server.js +0 -29
  64. package/lib/collab/loro/servers/ws/utils.d.ts +0 -40
  65. package/lib/collab/loro/servers/ws/utils.js +0 -517
  66. package/lib/collab/loro/sync/SyncCursors.d.ts +0 -32
  67. package/lib/collab/loro/sync/SyncCursors.js +0 -475
  68. package/lib/collab/loro/sync/SyncLexicalToLoro.d.ts +0 -4
  69. package/lib/collab/loro/sync/SyncLexicalToLoro.js +0 -113
  70. package/lib/collab/loro/sync/SyncLoroToLexical.d.ts +0 -5
  71. package/lib/collab/loro/sync/SyncLoroToLexical.js +0 -100
  72. package/lib/collab/loro/types/LexicalNodeData.d.ts +0 -32
  73. package/lib/collab/loro/types/LexicalNodeData.js +0 -75
  74. package/lib/collab/loro/useCollaboration.d.ts +0 -12
  75. package/lib/collab/loro/useCollaboration.js +0 -260
  76. package/lib/collab/loro/utils/InitialContent.d.ts +0 -64
  77. package/lib/collab/loro/utils/InitialContent.js +0 -113
  78. package/lib/collab/loro/utils/LexicalToLoro.d.ts +0 -18
  79. package/lib/collab/loro/utils/LexicalToLoro.js +0 -100
  80. package/lib/collab/loro/utils/Utils.d.ts +0 -44
  81. package/lib/collab/loro/utils/Utils.js +0 -157
  82. package/lib/collab/loro/wsProvider.d.ts +0 -8
  83. package/lib/collab/loro/wsProvider.js +0 -35
  84. package/lib/collab/utils/invariant.d.ts +0 -1
  85. package/lib/collab/utils/invariant.js +0 -15
  86. package/lib/collab/utils/simpleDiffWithCursor.d.ts +0 -5
  87. package/lib/collab/utils/simpleDiffWithCursor.js +0 -35
  88. package/lib/collab/yjs/Bindings.d.ts +0 -23
  89. package/lib/collab/yjs/Bindings.js +0 -26
  90. package/lib/collab/yjs/Debug.d.ts +0 -23
  91. package/lib/collab/yjs/Debug.js +0 -213
  92. package/lib/collab/yjs/LexicalCollaborationContext.d.ts +0 -10
  93. package/lib/collab/yjs/LexicalCollaborationContext.js +0 -37
  94. package/lib/collab/yjs/LexicalCollaborationPlugin.d.ts +0 -21
  95. package/lib/collab/yjs/LexicalCollaborationPlugin.js +0 -63
  96. package/lib/collab/yjs/State.d.ts +0 -51
  97. package/lib/collab/yjs/State.js +0 -35
  98. package/lib/collab/yjs/nodes/AnyCollabNode.d.ts +0 -5
  99. package/lib/collab/yjs/nodes/AnyCollabNode.js +0 -1
  100. package/lib/collab/yjs/nodes/CollabDecoratorNode.d.ts +0 -22
  101. package/lib/collab/yjs/nodes/CollabDecoratorNode.js +0 -64
  102. package/lib/collab/yjs/nodes/CollabElementNode.d.ts +0 -40
  103. package/lib/collab/yjs/nodes/CollabElementNode.js +0 -462
  104. package/lib/collab/yjs/nodes/CollabLineBreakNode.d.ts +0 -19
  105. package/lib/collab/yjs/nodes/CollabLineBreakNode.js +0 -44
  106. package/lib/collab/yjs/nodes/CollabTextNode.d.ts +0 -25
  107. package/lib/collab/yjs/nodes/CollabTextNode.js +0 -103
  108. package/lib/collab/yjs/provider/websocket.d.ts +0 -88
  109. package/lib/collab/yjs/provider/websocket.js +0 -415
  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 +0 -5
  113. package/lib/collab/yjs/servers/ws/callback.js +0 -72
  114. package/lib/collab/yjs/servers/ws/server.d.ts +0 -2
  115. package/lib/collab/yjs/servers/ws/server.js +0 -25
  116. package/lib/collab/yjs/servers/ws/utils.d.ts +0 -49
  117. package/lib/collab/yjs/servers/ws/utils.js +0 -284
  118. package/lib/collab/yjs/sync/SyncCursors.d.ts +0 -39
  119. package/lib/collab/yjs/sync/SyncCursors.js +0 -351
  120. package/lib/collab/yjs/sync/SyncEditorStates.d.ts +0 -10
  121. package/lib/collab/yjs/sync/SyncEditorStates.js +0 -200
  122. package/lib/collab/yjs/useCollaboration.d.ts +0 -12
  123. package/lib/collab/yjs/useCollaboration.js +0 -255
  124. package/lib/collab/yjs/utils/Utils.d.ts +0 -25
  125. package/lib/collab/yjs/utils/Utils.js +0 -402
  126. package/lib/collab/yjs/wsProvider.d.ts +0 -3
  127. package/lib/collab/yjs/wsProvider.js +0 -21
  128. package/lib/commenting/index.d.ts +0 -41
  129. package/lib/commenting/index.js +0 -328
  130. package/lib/context/FlashMessageContext.d.ts +0 -7
  131. package/lib/context/FlashMessageContext.js +0 -24
  132. package/lib/context/SettingsContext.d.ts +0 -12
  133. package/lib/context/SettingsContext.js +0 -38
  134. package/lib/context/SharedHistoryContext.d.ts +0 -11
  135. package/lib/context/SharedHistoryContext.js +0 -11
  136. package/lib/context/ToolbarContext.d.ts +0 -65
  137. package/lib/context/ToolbarContext.js +0 -84
  138. package/lib/demo.d.ts +0 -12
  139. package/lib/demo.js +0 -45
  140. package/lib/hooks/useFlashMessage.d.ts +0 -2
  141. package/lib/hooks/useFlashMessage.js +0 -8
  142. package/lib/hooks/useModal.d.ts +0 -5
  143. package/lib/hooks/useModal.js +0 -26
  144. package/lib/hooks/useReport.d.ts +0 -1
  145. package/lib/hooks/useReport.js +0 -50
  146. package/lib/index.d.ts +0 -1
  147. package/lib/index.js +0 -5
  148. package/lib/nodes/AutocompleteNode.d.ts +0 -27
  149. package/lib/nodes/AutocompleteNode.js +0 -60
  150. package/lib/nodes/CounterComponent.d.ts +0 -6
  151. package/lib/nodes/CounterComponent.js +0 -137
  152. package/lib/nodes/CounterNode.d.ts +0 -23
  153. package/lib/nodes/CounterNode.js +0 -47
  154. package/lib/nodes/DateTimeNode/DateTimeComponent.d.ts +0 -8
  155. package/lib/nodes/DateTimeNode/DateTimeComponent.js +0 -119
  156. package/lib/nodes/DateTimeNode/DateTimeNode.d.ts +0 -27
  157. package/lib/nodes/DateTimeNode/DateTimeNode.js +0 -82
  158. package/lib/nodes/EmojiNode.d.ts +0 -18
  159. package/lib/nodes/EmojiNode.js +0 -54
  160. package/lib/nodes/EquationComponent.d.ts +0 -9
  161. package/lib/nodes/EquationComponent.js +0 -75
  162. package/lib/nodes/EquationNode.d.ts +0 -26
  163. package/lib/nodes/EquationNode.js +0 -109
  164. package/lib/nodes/ExcalidrawNode/ExcalidrawComponent.d.ts +0 -8
  165. package/lib/nodes/ExcalidrawNode/ExcalidrawComponent.js +0 -110
  166. package/lib/nodes/ExcalidrawNode/ExcalidrawImage.d.ts +0 -50
  167. package/lib/nodes/ExcalidrawNode/ExcalidrawImage.js +0 -55
  168. package/lib/nodes/ExcalidrawNode/index.d.ts +0 -32
  169. package/lib/nodes/ExcalidrawNode/index.js +0 -117
  170. package/lib/nodes/FigmaNode.d.ts +0 -20
  171. package/lib/nodes/FigmaNode.js +0 -52
  172. package/lib/nodes/ImageComponent.d.ts +0 -16
  173. package/lib/nodes/ImageComponent.js +0 -272
  174. package/lib/nodes/ImageNode.d.ts +0 -50
  175. package/lib/nodes/ImageNode.js +0 -151
  176. package/lib/nodes/InlineImageNode/InlineImageComponent.d.ts +0 -26
  177. package/lib/nodes/InlineImageNode/InlineImageComponent.js +0 -161
  178. package/lib/nodes/InlineImageNode/InlineImageNode.d.ts +0 -59
  179. package/lib/nodes/InlineImageNode/InlineImageNode.js +0 -162
  180. package/lib/nodes/KeywordNode.d.ts +0 -14
  181. package/lib/nodes/KeywordNode.js +0 -37
  182. package/lib/nodes/LayoutContainerNode.d.ts +0 -24
  183. package/lib/nodes/LayoutContainerNode.js +0 -95
  184. package/lib/nodes/LayoutItemNode.d.ts +0 -16
  185. package/lib/nodes/LayoutItemNode.js +0 -69
  186. package/lib/nodes/MentionNode.d.ts +0 -20
  187. package/lib/nodes/MentionNode.js +0 -85
  188. package/lib/nodes/PageBreakNode/index.d.ts +0 -17
  189. package/lib/nodes/PageBreakNode/index.js +0 -83
  190. package/lib/nodes/PlaygroundNodes.d.ts +0 -3
  191. package/lib/nodes/PlaygroundNodes.js +0 -75
  192. package/lib/nodes/PollComponent.d.ts +0 -9
  193. package/lib/nodes/PollComponent.js +0 -85
  194. package/lib/nodes/PollNode.d.ts +0 -43
  195. package/lib/nodes/PollNode.js +0 -153
  196. package/lib/nodes/SpecialTextNode.d.ts +0 -24
  197. package/lib/nodes/SpecialTextNode.js +0 -54
  198. package/lib/nodes/StickyComponent.d.ts +0 -10
  199. package/lib/nodes/StickyComponent.js +0 -162
  200. package/lib/nodes/StickyNode.d.ts +0 -31
  201. package/lib/nodes/StickyNode.js +0 -76
  202. package/lib/nodes/TweetNode.d.ts +0 -21
  203. package/lib/nodes/TweetNode.js +0 -119
  204. package/lib/nodes/YouTubeNode.d.ts +0 -22
  205. package/lib/nodes/YouTubeNode.js +0 -84
  206. package/lib/plugins/ActionsPlugin/index.d.ts +0 -5
  207. package/lib/plugins/ActionsPlugin/index.js +0 -168
  208. package/lib/plugins/AutoEmbedPlugin/index.d.ts +0 -19
  209. package/lib/plugins/AutoEmbedPlugin/index.js +0 -158
  210. package/lib/plugins/AutoLinkPlugin/index.d.ts +0 -2
  211. package/lib/plugins/AutoLinkPlugin/index.js +0 -15
  212. package/lib/plugins/AutocompletePlugin/index.d.ts +0 -10
  213. package/lib/plugins/AutocompletePlugin/index.js +0 -2477
  214. package/lib/plugins/CodeActionMenuPlugin/components/CopyButton/index.d.ts +0 -7
  215. package/lib/plugins/CodeActionMenuPlugin/components/CopyButton/index.js +0 -46
  216. package/lib/plugins/CodeActionMenuPlugin/components/PrettierButton/index.d.ts +0 -17
  217. package/lib/plugins/CodeActionMenuPlugin/components/PrettierButton/index.js +0 -115
  218. package/lib/plugins/CodeActionMenuPlugin/index.d.ts +0 -5
  219. package/lib/plugins/CodeActionMenuPlugin/index.js +0 -104
  220. package/lib/plugins/CodeActionMenuPlugin/utils.d.ts +0 -1
  221. package/lib/plugins/CodeActionMenuPlugin/utils.js +0 -22
  222. package/lib/plugins/CodeHighlightPrismPlugin/index.d.ts +0 -2
  223. package/lib/plugins/CodeHighlightPrismPlugin/index.js +0 -14
  224. package/lib/plugins/CodeHighlightShikiPlugin/index.d.ts +0 -2
  225. package/lib/plugins/CodeHighlightShikiPlugin/index.js +0 -14
  226. package/lib/plugins/CollapsiblePlugin/CollapsibleContainerNode.d.ts +0 -25
  227. package/lib/plugins/CollapsiblePlugin/CollapsibleContainerNode.js +0 -135
  228. package/lib/plugins/CollapsiblePlugin/CollapsibleContentNode.d.ts +0 -16
  229. package/lib/plugins/CollapsiblePlugin/CollapsibleContentNode.js +0 -83
  230. package/lib/plugins/CollapsiblePlugin/CollapsibleTitleNode.d.ts +0 -16
  231. package/lib/plugins/CollapsiblePlugin/CollapsibleTitleNode.js +0 -85
  232. package/lib/plugins/CollapsiblePlugin/CollapsibleUtils.d.ts +0 -2
  233. package/lib/plugins/CollapsiblePlugin/CollapsibleUtils.js +0 -12
  234. package/lib/plugins/CollapsiblePlugin/index.d.ts +0 -3
  235. package/lib/plugins/CollapsiblePlugin/index.js +0 -132
  236. package/lib/plugins/CommentPlugin/index.d.ts +0 -9
  237. package/lib/plugins/CommentPlugin/index.js +0 -460
  238. package/lib/plugins/ComponentPickerPlugin/index.d.ts +0 -2
  239. package/lib/plugins/ComponentPickerPlugin/index.js +0 -276
  240. package/lib/plugins/ContextMenuPlugin/index.d.ts +0 -2
  241. package/lib/plugins/ContextMenuPlugin/index.js +0 -112
  242. package/lib/plugins/CounterPlugin/index.d.ts +0 -3
  243. package/lib/plugins/CounterPlugin/index.js +0 -24
  244. package/lib/plugins/DateTimePlugin/index.d.ts +0 -8
  245. package/lib/plugins/DateTimePlugin/index.js +0 -28
  246. package/lib/plugins/DebugPlugin/index.d.ts +0 -3
  247. package/lib/plugins/DebugPlugin/index.js +0 -219
  248. package/lib/plugins/DocsPlugin/index.d.ts +0 -2
  249. package/lib/plugins/DocsPlugin/index.js +0 -4
  250. package/lib/plugins/DragDropPastePlugin/index.d.ts +0 -1
  251. package/lib/plugins/DragDropPastePlugin/index.js +0 -37
  252. package/lib/plugins/DraggableBlockPlugin/index.d.ts +0 -12
  253. package/lib/plugins/DraggableBlockPlugin/index.js +0 -36
  254. package/lib/plugins/EmojiPickerPlugin/index.d.ts +0 -1
  255. package/lib/plugins/EmojiPickerPlugin/index.js +0 -84
  256. package/lib/plugins/EmojisPlugin/index.d.ts +0 -2
  257. package/lib/plugins/EmojisPlugin/index.js +0 -56
  258. package/lib/plugins/EquationsPlugin/index.d.ts +0 -14
  259. package/lib/plugins/EquationsPlugin/index.js +0 -34
  260. package/lib/plugins/ExcalidrawPlugin/index.d.ts +0 -5
  261. package/lib/plugins/ExcalidrawPlugin/index.js +0 -44
  262. package/lib/plugins/FigmaPlugin/index.d.ts +0 -4
  263. package/lib/plugins/FigmaPlugin/index.js +0 -24
  264. package/lib/plugins/FloatingLinkEditorPlugin/index.d.ts +0 -15
  265. package/lib/plugins/FloatingLinkEditorPlugin/index.js +0 -280
  266. package/lib/plugins/FloatingTextFormatToolbarPlugin/index.d.ts +0 -7
  267. package/lib/plugins/FloatingTextFormatToolbarPlugin/index.js +0 -219
  268. package/lib/plugins/ImagesPlugin/index.d.ts +0 -24
  269. package/lib/plugins/ImagesPlugin/index.js +0 -195
  270. package/lib/plugins/InlineImagePlugin/index.d.ts +0 -17
  271. package/lib/plugins/InlineImagePlugin/index.js +0 -180
  272. package/lib/plugins/KeywordsPlugin/index.d.ts +0 -2
  273. package/lib/plugins/KeywordsPlugin/index.js +0 -35
  274. package/lib/plugins/LayoutPlugin/InsertLayoutDialog.d.ts +0 -6
  275. package/lib/plugins/LayoutPlugin/InsertLayoutDialog.js +0 -21
  276. package/lib/plugins/LayoutPlugin/LayoutPlugin.d.ts +0 -7
  277. package/lib/plugins/LayoutPlugin/LayoutPlugin.js +0 -135
  278. package/lib/plugins/LinkPlugin/index.d.ts +0 -6
  279. package/lib/plugins/LinkPlugin/index.js +0 -11
  280. package/lib/plugins/MarkdownShortcutPlugin/index.d.ts +0 -2
  281. package/lib/plugins/MarkdownShortcutPlugin/index.js +0 -6
  282. package/lib/plugins/MarkdownTransformers/index.d.ts +0 -8
  283. package/lib/plugins/MarkdownTransformers/index.js +0 -238
  284. package/lib/plugins/MaxLengthPlugin/index.d.ts +0 -3
  285. package/lib/plugins/MaxLengthPlugin/index.js +0 -41
  286. package/lib/plugins/MentionsPlugin/index.d.ts +0 -2
  287. package/lib/plugins/MentionsPlugin/index.js +0 -564
  288. package/lib/plugins/PageBreakPlugin/index.d.ts +0 -4
  289. package/lib/plugins/PageBreakPlugin/index.js +0 -31
  290. package/lib/plugins/PasteLogPlugin/index.d.ts +0 -2
  291. package/lib/plugins/PasteLogPlugin/index.js +0 -27
  292. package/lib/plugins/PollPlugin/index.d.ts +0 -8
  293. package/lib/plugins/PollPlugin/index.js +0 -38
  294. package/lib/plugins/ShortcutsPlugin/index.d.ts +0 -6
  295. package/lib/plugins/ShortcutsPlugin/index.js +0 -116
  296. package/lib/plugins/ShortcutsPlugin/shortcuts.d.ts +0 -59
  297. package/lib/plugins/ShortcutsPlugin/shortcuts.js +0 -173
  298. package/lib/plugins/SpecialTextPlugin/index.d.ts +0 -2
  299. package/lib/plugins/SpecialTextPlugin/index.js +0 -50
  300. package/lib/plugins/SpeechToTextPlugin/index.d.ts +0 -5
  301. package/lib/plugins/SpeechToTextPlugin/index.js +0 -86
  302. package/lib/plugins/StickyPlugin/index.d.ts +0 -2
  303. package/lib/plugins/StickyPlugin/index.js +0 -16
  304. package/lib/plugins/TabFocusPlugin/index.d.ts +0 -1
  305. package/lib/plugins/TabFocusPlugin/index.js +0 -38
  306. package/lib/plugins/TableActionMenuPlugin/index.d.ts +0 -5
  307. package/lib/plugins/TableActionMenuPlugin/index.js +0 -492
  308. package/lib/plugins/TableCellResizer/index.d.ts +0 -3
  309. package/lib/plugins/TableCellResizer/index.js +0 -297
  310. package/lib/plugins/TableHoverActionsPlugin/index.d.ts +0 -4
  311. package/lib/plugins/TableHoverActionsPlugin/index.js +0 -188
  312. package/lib/plugins/TableOfContentsPlugin/index.d.ts +0 -2
  313. package/lib/plugins/TableOfContentsPlugin/index.js +0 -116
  314. package/lib/plugins/TablePlugin.d.ts +0 -31
  315. package/lib/plugins/TablePlugin.js +0 -63
  316. package/lib/plugins/TestRecorderPlugin/index.d.ts +0 -3
  317. package/lib/plugins/TestRecorderPlugin/index.js +0 -346
  318. package/lib/plugins/ToolbarPlugin/fontSize.d.ts +0 -9
  319. package/lib/plugins/ToolbarPlugin/fontSize.js +0 -84
  320. package/lib/plugins/ToolbarPlugin/index.d.ts +0 -9
  321. package/lib/plugins/ToolbarPlugin/index.js +0 -500
  322. package/lib/plugins/ToolbarPlugin/utils.d.ts +0 -26
  323. package/lib/plugins/ToolbarPlugin/utils.js +0 -247
  324. package/lib/plugins/TreeViewPlugin/index.d.ts +0 -2
  325. package/lib/plugins/TreeViewPlugin/index.js +0 -7
  326. package/lib/plugins/TwitterPlugin/index.d.ts +0 -4
  327. package/lib/plugins/TwitterPlugin/index.js +0 -24
  328. package/lib/plugins/TypingPerfPlugin/index.d.ts +0 -2
  329. package/lib/plugins/TypingPerfPlugin/index.js +0 -97
  330. package/lib/plugins/YouTubePlugin/index.d.ts +0 -4
  331. package/lib/plugins/YouTubePlugin/index.js +0 -24
  332. package/lib/server/validation.d.ts +0 -1
  333. package/lib/server/validation.js +0 -115
  334. package/lib/setupEnv.d.ts +0 -2
  335. package/lib/setupEnv.js +0 -29
  336. package/lib/themes/CommentEditorTheme.d.ts +0 -4
  337. package/lib/themes/CommentEditorTheme.js +0 -11
  338. package/lib/themes/PlaygroundEditorTheme.d.ts +0 -4
  339. package/lib/themes/PlaygroundEditorTheme.js +0 -124
  340. package/lib/themes/StickyEditorTheme.d.ts +0 -4
  341. package/lib/themes/StickyEditorTheme.js +0 -11
  342. package/lib/tyes.dt.d.ts +0 -12
  343. package/lib/tyes.dt.js +0 -4
  344. package/lib/ui/Button.d.ts +0 -12
  345. package/lib/ui/Button.js +0 -6
  346. package/lib/ui/ColorPicker.d.ts +0 -14
  347. package/lib/ui/ColorPicker.js +0 -219
  348. package/lib/ui/ContentEditable.d.ts +0 -9
  349. package/lib/ui/ContentEditable.js +0 -6
  350. package/lib/ui/Dialog.d.ts +0 -10
  351. package/lib/ui/Dialog.js +0 -8
  352. package/lib/ui/DropDown.d.ts +0 -18
  353. package/lib/ui/DropDown.js +0 -133
  354. package/lib/ui/DropdownColorPicker.d.ts +0 -13
  355. package/lib/ui/DropdownColorPicker.js +0 -6
  356. package/lib/ui/EquationEditor.d.ts +0 -8
  357. package/lib/ui/EquationEditor.js +0 -11
  358. package/lib/ui/ExcalidrawModal.d.ts +0 -42
  359. package/lib/ui/ExcalidrawModal.js +0 -103
  360. package/lib/ui/FileInput.d.ts +0 -10
  361. package/lib/ui/FileInput.js +0 -5
  362. package/lib/ui/FlashMessage.d.ts +0 -7
  363. package/lib/ui/FlashMessage.js +0 -6
  364. package/lib/ui/ImageResizer.d.ts +0 -17
  365. package/lib/ui/ImageResizer.js +0 -171
  366. package/lib/ui/KatexEquationAlterer.d.ts +0 -8
  367. package/lib/ui/KatexEquationAlterer.js +0 -23
  368. package/lib/ui/KatexRenderer.d.ts +0 -6
  369. package/lib/ui/KatexRenderer.js +0 -24
  370. package/lib/ui/Modal.d.ts +0 -9
  371. package/lib/ui/Modal.js +0 -48
  372. package/lib/ui/Select.d.ts +0 -8
  373. package/lib/ui/Select.js +0 -5
  374. package/lib/ui/Switch.d.ts +0 -8
  375. package/lib/ui/Switch.js +0 -6
  376. package/lib/ui/TextInput.d.ts +0 -13
  377. package/lib/ui/TextInput.js +0 -7
  378. package/lib/utils/docSerialization.d.ts +0 -3
  379. package/lib/utils/docSerialization.js +0 -60
  380. package/lib/utils/emoji-list.d.ts +0 -20
  381. package/lib/utils/emoji-list.js +0 -16609
  382. package/lib/utils/getDOMRangeRect.d.ts +0 -8
  383. package/lib/utils/getDOMRangeRect.js +0 -26
  384. package/lib/utils/getSelectedNode.d.ts +0 -2
  385. package/lib/utils/getSelectedNode.js +0 -28
  386. package/lib/utils/getThemeSelector.d.ts +0 -2
  387. package/lib/utils/getThemeSelector.js +0 -14
  388. package/lib/utils/isMobileWidth.d.ts +0 -7
  389. package/lib/utils/isMobileWidth.js +0 -11
  390. package/lib/utils/joinClasses.d.ts +0 -1
  391. package/lib/utils/joinClasses.js +0 -7
  392. package/lib/utils/setFloatingElemPosition.d.ts +0 -1
  393. package/lib/utils/setFloatingElemPosition.js +0 -59
  394. package/lib/utils/setFloatingElemPositionForLinkEditor.d.ts +0 -1
  395. package/lib/utils/setFloatingElemPositionForLinkEditor.js +0 -36
  396. package/lib/utils/swipe.d.ts +0 -4
  397. package/lib/utils/swipe.js +0 -94
  398. package/lib/utils/url.d.ts +0 -2
  399. package/lib/utils/url.js +0 -31
@@ -1,100 +0,0 @@
1
- /*
2
- * Copyright (c) 2023-2025 Datalayer, Inc.
3
- * Distributed under the terms of the MIT License.
4
- */
5
- import { $addUpdateTag, $createParagraphNode, $getRoot, $getSelection, $isRangeSelection, $setSelection, SKIP_COLLAB_TAG, SKIP_SCROLL_INTO_VIEW_TAG } from 'lexical';
6
- import { $syncLocalCursorPosition, syncCursorPositions, syncLexicalSelectionToLoro } from './SyncCursors';
7
- // Import the new diff integrators
8
- import { TreeIntegrator } from '../integrators/TreeIntegrator';
9
- import { MapIntegrator } from '../integrators/MapIntegrator';
10
- import { ListIntegrator } from '../integrators/ListIntegrator';
11
- import { TextIntegrator } from '../integrators/TextIntegrator';
12
- import { CounterIntegrator } from '../integrators/CounterIntegrator';
13
- import { $moveSelectionToPreviousNode, doesSelectionNeedRecovering } from '../utils/Utils';
14
- // Create singleton instances of the diff integrators (created once, reused across calls)
15
- const treeIntegrator = new TreeIntegrator();
16
- const mapIntegrator = new MapIntegrator();
17
- const listIntegrator = new ListIntegrator();
18
- const textIntegrator = new TextIntegrator();
19
- const counterIntegrator = new CounterIntegrator();
20
- export function syncLoroToLexical(binding, provider, eventBatch, isFromUndoManger, syncCursorPositionsFn = syncCursorPositions) {
21
- const editor = binding.editor;
22
- const currentEditorState = editor._editorState;
23
- // Batch all events into a single discrete editor.update() to avoid race conditions
24
- // Using discrete: true ensures immediate synchronous commit before other operations
25
- binding.editor.update(() => {
26
- // Clear selection temporarily to avoid cursor position conflicts during text updates
27
- const currentSelection = $getSelection();
28
- if (currentSelection) {
29
- $setSelection(null);
30
- }
31
- // Process Loro events and apply them to Lexical using the appropriate integrators
32
- eventBatch.events.forEach((event, index) => {
33
- switch (event.diff.type) {
34
- case 'tree':
35
- // Call internal method that doesn't wrap in editor.update()
36
- treeIntegrator.integrateInternal(event.diff, binding, provider);
37
- break;
38
- case 'map':
39
- // Call internal method that doesn't wrap in editor.update()
40
- if (event.target) {
41
- mapIntegrator.integrateWithContextInternal(event.diff, event.target, binding, provider);
42
- }
43
- else {
44
- mapIntegrator.integrateInternal(event.diff, binding, provider);
45
- }
46
- break;
47
- case 'list':
48
- listIntegrator.integrateInternal(event.diff, binding, provider);
49
- break;
50
- case 'text':
51
- textIntegrator.integrateInternal(event.diff, binding, provider);
52
- break;
53
- case 'counter':
54
- counterIntegrator.integrateInternal(event.diff, binding, provider);
55
- break;
56
- default:
57
- throw new Error(`Unsupported event diff type: ${event.diff.type}. Supported types are: 'tree', 'map', 'list', 'text', 'counter'.`);
58
- }
59
- });
60
- const selection = $getSelection();
61
- if ($isRangeSelection(selection)) {
62
- if (doesSelectionNeedRecovering(selection)) {
63
- const prevSelection = currentEditorState._selection;
64
- if ($isRangeSelection(prevSelection)) {
65
- $syncLocalCursorPosition(binding, provider);
66
- if (doesSelectionNeedRecovering(selection)) {
67
- // If the selected node is deleted, move the selection to the previous or parent node.
68
- const anchorNodeKey = selection.anchor.key;
69
- $moveSelectionToPreviousNode(anchorNodeKey, currentEditorState);
70
- }
71
- }
72
- syncLexicalSelectionToLoro(binding, provider, prevSelection, $getSelection());
73
- }
74
- else {
75
- $syncLocalCursorPosition(binding, provider);
76
- }
77
- }
78
- if (!isFromUndoManger) {
79
- // If it is an external change, we don't want the current scroll position to get changed
80
- // since the user might've intentionally scrolled somewhere else in the document.
81
- $addUpdateTag(SKIP_SCROLL_INTO_VIEW_TAG);
82
- }
83
- }, {
84
- onUpdate: () => {
85
- syncCursorPositionsFn(binding, provider);
86
- // If there was a collision on the top level paragraph
87
- // we need to re-add a paragraph. To ensure this insertion properly syncs with other clients,
88
- // it must be placed outside of the update block above that has tags 'collaboration' or 'historic'.
89
- editor.update(() => {
90
- if ($getRoot().getChildrenSize() === 0) {
91
- $getRoot().append($createParagraphNode());
92
- }
93
- });
94
- },
95
- // discrete: true,
96
- skipTransforms: true,
97
- // tag: isFromUndoManger ? HISTORIC_TAG : COLLABORATION_TAG,
98
- tag: SKIP_COLLAB_TAG
99
- });
100
- }
@@ -1,32 +0,0 @@
1
- import { LexicalNode } from 'lexical';
2
- /**
3
- * Data structure stored in Loro tree node data
4
- */
5
- export interface LexicalNodeData {
6
- lexicalNode: LexicalNode;
7
- }
8
- /**
9
- * Helper functions for working with LexicalNodeData
10
- */
11
- export declare class LexicalNodeDataHelper {
12
- /**
13
- * Create LexicalNodeData from a Lexical node
14
- */
15
- static create(lexicalNode: LexicalNode): LexicalNodeData;
16
- /**
17
- * Serialize LexicalNodeData for storage in Loro
18
- */
19
- static serialize(data: LexicalNodeData): string;
20
- /**
21
- * Deserialize LexicalNodeData from Loro storage
22
- */
23
- static deserialize(serialized: string): LexicalNodeData | null;
24
- /**
25
- * Extract the LexicalNode from LexicalNodeData
26
- */
27
- static getLexicalNode(data: LexicalNodeData): LexicalNode;
28
- /**
29
- * Get node type from LexicalNodeData
30
- */
31
- static getNodeType(data: LexicalNodeData): string;
32
- }
@@ -1,75 +0,0 @@
1
- /*
2
- * Copyright (c) 2023-2025 Datalayer, Inc.
3
- * Distributed under the terms of the MIT License.
4
- */
5
- /**
6
- * Helper functions for working with LexicalNodeData
7
- */
8
- export class LexicalNodeDataHelper {
9
- /**
10
- * Create LexicalNodeData from a Lexical node
11
- */
12
- static create(lexicalNode) {
13
- return {
14
- lexicalNode
15
- };
16
- }
17
- /**
18
- * Serialize LexicalNodeData for storage in Loro
19
- */
20
- static serialize(data) {
21
- try {
22
- return JSON.stringify({
23
- lexicalNode: data.lexicalNode.exportJSON()
24
- });
25
- }
26
- catch (error) {
27
- console.warn('Failed to serialize LexicalNodeData:', error);
28
- return JSON.stringify({
29
- lexicalNode: {
30
- type: data.lexicalNode.getType(),
31
- key: data.lexicalNode.getKey()
32
- }
33
- });
34
- }
35
- }
36
- /**
37
- * Deserialize LexicalNodeData from Loro storage
38
- */
39
- static deserialize(serialized) {
40
- try {
41
- const parsed = JSON.parse(serialized);
42
- // Validate that we have the expected structure
43
- if (!parsed || !parsed.lexicalNode) {
44
- console.warn('Invalid LexicalNodeData structure:', parsed);
45
- return null;
46
- }
47
- return {
48
- lexicalNode: parsed.lexicalNode
49
- };
50
- }
51
- catch (error) {
52
- console.warn('Failed to deserialize LexicalNodeData:', error);
53
- return null;
54
- }
55
- }
56
- /**
57
- * Extract the LexicalNode from LexicalNodeData
58
- */
59
- static getLexicalNode(data) {
60
- return data.lexicalNode;
61
- }
62
- /**
63
- * Get node type from LexicalNodeData
64
- */
65
- static getNodeType(data) {
66
- // Handle both actual Lexical nodes (with getType method) and deserialized JSON objects
67
- if (typeof data.lexicalNode.getType === 'function') {
68
- return data.lexicalNode.getType();
69
- }
70
- else {
71
- // Fallback to direct property access for deserialized JSON
72
- return data.lexicalNode.__type || 'unknown';
73
- }
74
- }
75
- }
@@ -1,12 +0,0 @@
1
- import * as React from 'react';
2
- import type { JSX } from 'react';
3
- import type { LexicalEditor } from 'lexical';
4
- import { InitialEditorStateType } from '@lexical/react/LexicalComposer';
5
- import { LoroDoc } from 'loro-crdt';
6
- import type { Provider } from './State';
7
- import { Binding } from './Bindings';
8
- import { SyncCursorPositionsFn } from './sync/SyncCursors';
9
- export type CursorsContainerRef = React.MutableRefObject<HTMLElement | null>;
10
- export declare function useCollaboration(editor: LexicalEditor, id: string, provider: Provider, docMap: Map<string, LoroDoc>, name: string, color: string, shouldBootstrap: boolean, binding: Binding, setDoc: React.Dispatch<React.SetStateAction<LoroDoc | undefined>>, cursorsContainerRef?: CursorsContainerRef, initialEditorState?: InitialEditorStateType, awarenessData?: object, syncCursorPositionsFn?: SyncCursorPositionsFn, onInitialization?: (isInitialized: boolean) => void): JSX.Element;
11
- export declare function useFocusTracking(editor: LexicalEditor, provider: Provider, name: string, color: string, awarenessData?: object): void;
12
- export declare function useHistory(editor: LexicalEditor, binding: Binding): () => void;
@@ -1,260 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- /*
3
- * Copyright (c) 2023-2025 Datalayer, Inc.
4
- * Distributed under the terms of the MIT License.
5
- */
6
- import * as React from 'react';
7
- import { useCallback, useEffect, useMemo, useRef } from 'react';
8
- import { createPortal } from 'react-dom';
9
- import { mergeRegister } from '@lexical/utils';
10
- import { $getRoot, BLUR_COMMAND, CAN_REDO_COMMAND, CAN_UNDO_COMMAND, COMMAND_PRIORITY_EDITOR, FOCUS_COMMAND, HISTORY_MERGE_TAG, REDO_COMMAND, SKIP_COLLAB_TAG, UNDO_COMMAND, } from 'lexical';
11
- import { CONNECTED_COMMAND, createUndoManager, initLocalState, setLocalStateFocus, TOGGLE_CONNECT_COMMAND, } from './State';
12
- import { syncLexicalToLoro } from './sync/SyncLexicalToLoro';
13
- import { syncLoroToLexical } from './sync/SyncLoroToLexical';
14
- import { syncCursorPositions } from './sync/SyncCursors';
15
- export function useCollaboration(editor, id, provider, docMap, name, color, shouldBootstrap, binding, setDoc, cursorsContainerRef, initialEditorState, awarenessData, syncCursorPositionsFn = syncCursorPositions, onInitialization) {
16
- const isReloadingDoc = useRef(false);
17
- const connect = useCallback(() => provider.connect(), [provider]);
18
- const disconnect = useCallback(() => {
19
- try {
20
- provider.disconnect();
21
- }
22
- catch (e) {
23
- // Do nothing
24
- }
25
- }, [provider]);
26
- useEffect(() => {
27
- const { awareness } = provider;
28
- const onStatus = ({ status }) => {
29
- editor.dispatchCommand(CONNECTED_COMMAND, status === 'connected');
30
- };
31
- const onSync = (isSynced) => {
32
- if (shouldBootstrap &&
33
- isSynced &&
34
- isReloadingDoc.current === false) {
35
- initializeEditor(editor, initialEditorState);
36
- // Call the initialization callback after initializing the editor
37
- if (onInitialization) {
38
- onInitialization(true);
39
- }
40
- }
41
- isReloadingDoc.current = false;
42
- };
43
- const onAwarenessUpdate = () => {
44
- syncCursorPositionsFn(binding, provider);
45
- };
46
- initLocalState(provider, name, color, document.activeElement === editor.getRootElement(), awarenessData || {});
47
- const onProviderDocReload = (doc) => {
48
- clearEditorSkipCollab(editor, binding);
49
- setDoc(doc);
50
- docMap.set(id, doc);
51
- isReloadingDoc.current = true;
52
- };
53
- provider.on('reload', onProviderDocReload);
54
- provider.on('status', onStatus);
55
- provider.on('sync', onSync);
56
- awareness.on('update', onAwarenessUpdate);
57
- const onLoroUpdates = (eventBatch) => {
58
- // Only skip if the origin is from this specific editor's changes.
59
- // We set 'lexical-edit' as origin when making changes from this editor.
60
- // So we should skip only if the origin is 'lexical-edit' (our own changes).
61
- if (eventBatch.origin !== binding.doc.peerIdStr) {
62
- // Check if this change is from the undo manager
63
- // const isFromUndoManger = origin instanceof UndoManager;
64
- const isFromUndoManager = false;
65
- syncLoroToLexical(binding, provider, eventBatch, isFromUndoManager, syncCursorPositionsFn);
66
- }
67
- };
68
- // This updates the local editor state when we receive updates from other clients.
69
- const unsubscribe = binding.doc.subscribe(onLoroUpdates);
70
- const removeListener = editor.registerUpdateListener((update) => {
71
- if (update.tags.has(SKIP_COLLAB_TAG) === false) {
72
- syncLexicalToLoro(binding, provider, update);
73
- }
74
- });
75
- const connectionPromise = connect();
76
- return () => {
77
- if (isReloadingDoc.current === false) {
78
- if (connectionPromise) {
79
- connectionPromise.then(disconnect);
80
- }
81
- else {
82
- // Workaround for race condition in StrictMode. It's possible there
83
- // is a different race for the above case where connect returns a
84
- // promise, but we don't have an example of that in-repo.
85
- // It's possible that there is a similar issue with
86
- // TOGGLE_CONNECT_COMMAND below when the provider connect returns a
87
- // promise.
88
- // https://github.com/facebook/lexical/issues/6640
89
- disconnect();
90
- }
91
- }
92
- provider.off('sync', onSync);
93
- provider.off('status', onStatus);
94
- provider.off('reload', onProviderDocReload);
95
- awareness.off('update', onAwarenessUpdate);
96
- // Unsubscribe from Loro document changes
97
- unsubscribe?.();
98
- docMap.delete(id);
99
- removeListener();
100
- };
101
- }, [
102
- binding,
103
- color,
104
- connect,
105
- disconnect,
106
- docMap,
107
- editor,
108
- id,
109
- initialEditorState,
110
- name,
111
- provider,
112
- shouldBootstrap,
113
- awarenessData,
114
- setDoc,
115
- syncCursorPositionsFn,
116
- onInitialization,
117
- ]);
118
- const cursorsContainer = useMemo(() => {
119
- const ref = (element) => {
120
- binding.cursorsContainer = element;
121
- };
122
- return createPortal(_jsx("div", { ref: ref, style: {
123
- position: 'fixed',
124
- top: 0,
125
- left: 0,
126
- width: '100vw',
127
- height: '100vh',
128
- pointerEvents: 'none',
129
- zIndex: 1000,
130
- overflow: 'visible',
131
- } }), (cursorsContainerRef && cursorsContainerRef.current) || document.body);
132
- }, [binding, cursorsContainerRef]);
133
- useEffect(() => {
134
- return editor.registerCommand(TOGGLE_CONNECT_COMMAND, (payload) => {
135
- const shouldConnect = payload;
136
- if (shouldConnect) {
137
- connect();
138
- }
139
- else {
140
- disconnect();
141
- }
142
- return true;
143
- }, COMMAND_PRIORITY_EDITOR);
144
- }, [connect, disconnect, editor]);
145
- return cursorsContainer;
146
- }
147
- export function useFocusTracking(editor, provider, name, color, awarenessData) {
148
- useEffect(() => {
149
- return mergeRegister(editor.registerCommand(FOCUS_COMMAND, () => {
150
- setLocalStateFocus(provider, name, color, true, awarenessData || {});
151
- return false;
152
- }, COMMAND_PRIORITY_EDITOR), editor.registerCommand(BLUR_COMMAND, () => {
153
- setLocalStateFocus(provider, name, color, false, awarenessData || {});
154
- return false;
155
- }, COMMAND_PRIORITY_EDITOR));
156
- }, [color, editor, name, provider, awarenessData]);
157
- }
158
- export function useHistory(editor, binding) {
159
- const undoManager = useMemo(() => createUndoManager(binding), [binding]);
160
- useEffect(() => {
161
- const undo = () => {
162
- undoManager.undo();
163
- };
164
- const redo = () => {
165
- undoManager.redo();
166
- };
167
- return mergeRegister(editor.registerCommand(UNDO_COMMAND, () => {
168
- undo();
169
- return true;
170
- }, COMMAND_PRIORITY_EDITOR), editor.registerCommand(REDO_COMMAND, () => {
171
- redo();
172
- return true;
173
- }, COMMAND_PRIORITY_EDITOR));
174
- });
175
- const clearHistory = useCallback(() => {
176
- undoManager.clear();
177
- }, [undoManager]);
178
- // Exposing undo and redo states
179
- React.useEffect(() => {
180
- const updateUndoRedoStates = () => {
181
- editor.dispatchCommand(CAN_UNDO_COMMAND, undoManager.canUndo());
182
- editor.dispatchCommand(CAN_REDO_COMMAND, undoManager.canRedo());
183
- };
184
- // Initial state update
185
- updateUndoRedoStates();
186
- // Loro UndoManager doesn't have event listeners like YJS
187
- // We would need to check state periodically or after operations
188
- // For now, update after each operation
189
- return () => {
190
- // No cleanup needed for Loro UndoManager events
191
- };
192
- }, [editor, undoManager]);
193
- return clearHistory;
194
- }
195
- function initializeEditor(editor, initialEditorState) {
196
- editor.update(() => {
197
- const root = $getRoot();
198
- if (root.isEmpty()) {
199
- if (initialEditorState) {
200
- switch (typeof initialEditorState) {
201
- case 'string': {
202
- const parsedEditorState = editor.parseEditorState(initialEditorState);
203
- editor.setEditorState(parsedEditorState, {
204
- tag: HISTORY_MERGE_TAG,
205
- });
206
- break;
207
- }
208
- case 'object': {
209
- editor.setEditorState(initialEditorState, {
210
- tag: HISTORY_MERGE_TAG,
211
- });
212
- break;
213
- }
214
- case 'function': {
215
- editor.update(() => {
216
- const root1 = $getRoot();
217
- if (root1.isEmpty()) {
218
- initialEditorState(editor);
219
- }
220
- }, { tag: HISTORY_MERGE_TAG });
221
- break;
222
- }
223
- }
224
- }
225
- }
226
- }, { tag: HISTORY_MERGE_TAG });
227
- }
228
- function clearEditorSkipCollab(editor, binding) {
229
- // reset editor state
230
- editor.update(() => {
231
- const root = $getRoot();
232
- root.clear();
233
- root.select();
234
- }, {
235
- tag: SKIP_COLLAB_TAG,
236
- });
237
- if (binding.cursors == null) {
238
- return;
239
- }
240
- const cursors = binding.cursors;
241
- if (cursors == null) {
242
- return;
243
- }
244
- const cursorsContainer = binding.cursorsContainer;
245
- if (cursorsContainer == null) {
246
- return;
247
- }
248
- // reset cursors in dom
249
- const cursorsArr = Array.from(cursors.values());
250
- for (let i = 0; i < cursorsArr.length; i++) {
251
- const cursor = cursorsArr[i];
252
- const selection = cursor.selection;
253
- if (selection && selection.selections != null) {
254
- const selections = selection.selections;
255
- for (let j = 0; j < selections.length; j++) {
256
- cursorsContainer.removeChild(selections[i]);
257
- }
258
- }
259
- }
260
- }
@@ -1,64 +0,0 @@
1
- import { LoroDoc } from 'loro-crdt';
2
- /**
3
- * Initial Lexical JSON structure that matches what the Python server uses
4
- */
5
- export declare const INITIAL_LEXICAL_JSON: {
6
- root: {
7
- children: ({
8
- children: {
9
- detail: number;
10
- format: number;
11
- mode: string;
12
- style: string;
13
- text: string;
14
- type: string;
15
- version: number;
16
- }[];
17
- direction: any;
18
- format: string;
19
- indent: number;
20
- type: string;
21
- version: number;
22
- tag: string;
23
- textFormat?: undefined;
24
- textStyle?: undefined;
25
- } | {
26
- children: {
27
- detail: number;
28
- format: number;
29
- mode: string;
30
- style: string;
31
- text: string;
32
- type: string;
33
- version: number;
34
- }[];
35
- direction: any;
36
- format: string;
37
- indent: number;
38
- type: string;
39
- version: number;
40
- textFormat: number;
41
- textStyle: string;
42
- tag?: undefined;
43
- })[];
44
- direction: any;
45
- format: string;
46
- indent: number;
47
- type: string;
48
- version: number;
49
- };
50
- };
51
- /**
52
- * Initialize a new Loro document with the initial Lexical content
53
- * This ensures consistent starting state across all clients
54
- */
55
- export declare function initializeLoroDocWithLexicalContent(doc: LoroDoc): void;
56
- /**
57
- * Check if a Loro document is empty (has no tree content)
58
- */
59
- export declare function isLoroDocumentEmpty(doc: LoroDoc): boolean;
60
- /**
61
- * Check if a Loro document should be initialized (more robust check)
62
- * This helps prevent race conditions where multiple clients try to initialize
63
- */
64
- export declare function shouldInitializeLoroDoc(doc: LoroDoc): boolean;
@@ -1,113 +0,0 @@
1
- /*
2
- * Copyright (c) 2023-2025 Datalayer, Inc.
3
- * Distributed under the terms of the MIT License.
4
- */
5
- import { lexicalToLoroTree } from './LexicalToLoro';
6
- /**
7
- * Initial Lexical JSON structure that matches what the Python server uses
8
- */
9
- export const INITIAL_LEXICAL_JSON = {
10
- "root": {
11
- "children": [
12
- {
13
- "children": [
14
- {
15
- "detail": 0,
16
- "format": 0,
17
- "mode": "normal",
18
- "style": "",
19
- "text": "Lexical with Loro",
20
- "type": "text",
21
- "version": 1
22
- }
23
- ],
24
- "direction": null,
25
- "format": "",
26
- "indent": 0,
27
- "type": "heading",
28
- "version": 1,
29
- "tag": "h1"
30
- },
31
- {
32
- "children": [
33
- {
34
- "detail": 0,
35
- "format": 0,
36
- "mode": "normal",
37
- "style": "",
38
- "text": "Type something...",
39
- "type": "text",
40
- "version": 1
41
- }
42
- ],
43
- "direction": null,
44
- "format": "",
45
- "indent": 0,
46
- "type": "paragraph",
47
- "version": 1,
48
- "textFormat": 0,
49
- "textStyle": ""
50
- }
51
- ],
52
- "direction": null,
53
- "format": "",
54
- "indent": 0,
55
- "type": "root",
56
- "version": 1
57
- }
58
- };
59
- /**
60
- * Initialize a new Loro document with the initial Lexical content
61
- * This ensures consistent starting state across all clients
62
- */
63
- export function initializeLoroDocWithLexicalContent(doc) {
64
- const tree = doc.getTree('tree');
65
- tree.enableFractionalIndex(0.001);
66
- // Convert the initial Lexical JSON to Loro tree structure
67
- lexicalToLoroTree(INITIAL_LEXICAL_JSON, tree);
68
- }
69
- /**
70
- * Check if a Loro document is empty (has no tree content)
71
- */
72
- export function isLoroDocumentEmpty(doc) {
73
- const tree = doc.getTree('tree');
74
- try {
75
- // Get all root nodes
76
- const roots = tree.roots();
77
- // Also check if the document has any nodes at all
78
- const allNodes = tree.nodes();
79
- return roots.length === 0 && allNodes.length === 0;
80
- }
81
- catch (error) {
82
- // If there's an error accessing roots, consider it empty
83
- return true;
84
- }
85
- }
86
- /**
87
- * Check if a Loro document should be initialized (more robust check)
88
- * This helps prevent race conditions where multiple clients try to initialize
89
- */
90
- export function shouldInitializeLoroDoc(doc) {
91
- const tree = doc.getTree('tree');
92
- try {
93
- const allNodes = tree.nodes();
94
- const roots = tree.roots();
95
- // Only initialize if there are truly no nodes
96
- const isEmpty = allNodes.length === 0;
97
- // Additional check: look for any existing root nodes with our content
98
- if (!isEmpty) {
99
- // Check if any root has the expected initial structure
100
- for (const root of roots) {
101
- const data = Object.fromEntries(root.data.entries());
102
- if (data.elementType === 'root') {
103
- return false;
104
- }
105
- }
106
- }
107
- return isEmpty;
108
- }
109
- catch (error) {
110
- console.warn('Error checking if doc should be initialized:', error);
111
- return false; // Don't initialize if there's an error
112
- }
113
- }
@@ -1,18 +0,0 @@
1
- import { LoroTree, TreeID } from 'loro-crdt';
2
- /**
3
- * Utility to convert Lexical JSON structure to Loro tree
4
- */
5
- interface LexicalNodeJSON {
6
- type: string;
7
- children?: LexicalNodeJSON[];
8
- [key: string]: any;
9
- }
10
- interface LexicalJSON {
11
- root: LexicalNodeJSON;
12
- }
13
- /**
14
- * Convert a Lexical JSON structure to a Loro tree
15
- * This is used to initialize a Loro tree from existing Lexical content
16
- */
17
- export declare function lexicalToLoroTree(lexicalJson: string | LexicalJSON, tree: LoroTree): TreeID;
18
- export {};