@datalayer/lexical-loro 0.2.4 → 0.2.5

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/lib/App.d.ts +2 -0
  2. package/lib/App.js +141 -0
  3. package/lib/Editor.d.ts +2 -0
  4. package/lib/Editor.js +115 -0
  5. package/lib/Settings.d.ts +2 -0
  6. package/lib/Settings.js +57 -0
  7. package/lib/appSettings.d.ts +36 -0
  8. package/lib/appSettings.js +48 -0
  9. package/lib/collab/loro/Bindings.d.ts +41 -0
  10. package/lib/collab/loro/Bindings.js +99 -0
  11. package/lib/collab/loro/Debug.d.ts +33 -0
  12. package/lib/collab/loro/Debug.js +452 -0
  13. package/lib/collab/loro/LexicalCollaborationContext.d.ts +19 -0
  14. package/lib/collab/loro/LexicalCollaborationContext.js +52 -0
  15. package/lib/collab/loro/LexicalCollaborationPlugin.d.ts +24 -0
  16. package/lib/collab/loro/LexicalCollaborationPlugin.js +83 -0
  17. package/lib/collab/loro/State.d.ts +53 -0
  18. package/lib/collab/loro/State.js +94 -0
  19. package/lib/collab/loro/components/LoroCollaborationUI.d.ts +13 -0
  20. package/lib/collab/loro/components/LoroCollaborationUI.js +9 -0
  21. package/lib/collab/loro/components/LoroCollaborators.d.ts +8 -0
  22. package/lib/collab/loro/components/LoroCollaborators.js +102 -0
  23. package/lib/collab/loro/components/index.d.ts +2 -0
  24. package/lib/collab/loro/components/index.js +6 -0
  25. package/lib/collab/loro/index.d.ts +6 -0
  26. package/lib/collab/loro/index.js +10 -0
  27. package/lib/collab/loro/integrators/BaseIntegrator.d.ts +14 -0
  28. package/lib/collab/loro/integrators/BaseIntegrator.js +5 -0
  29. package/lib/collab/loro/integrators/CounterIntegrator.d.ts +23 -0
  30. package/lib/collab/loro/integrators/CounterIntegrator.js +44 -0
  31. package/lib/collab/loro/integrators/ListIntegrator.d.ts +23 -0
  32. package/lib/collab/loro/integrators/ListIntegrator.js +53 -0
  33. package/lib/collab/loro/integrators/MapIntegrator.d.ts +24 -0
  34. package/lib/collab/loro/integrators/MapIntegrator.js +235 -0
  35. package/lib/collab/loro/integrators/TextIntegrator.d.ts +25 -0
  36. package/lib/collab/loro/integrators/TextIntegrator.js +55 -0
  37. package/lib/collab/loro/integrators/TreeIntegrator.d.ts +36 -0
  38. package/lib/collab/loro/integrators/TreeIntegrator.js +251 -0
  39. package/lib/collab/loro/nodes/NodeFactory.d.ts +15 -0
  40. package/lib/collab/loro/nodes/NodeFactory.js +101 -0
  41. package/lib/collab/loro/nodes/NodesMapper.d.ts +120 -0
  42. package/lib/collab/loro/nodes/NodesMapper.js +277 -0
  43. package/lib/collab/loro/propagators/DecoratorNodePropagator.d.ts +60 -0
  44. package/lib/collab/loro/propagators/DecoratorNodePropagator.js +306 -0
  45. package/lib/collab/loro/propagators/ElementNodePropagator.d.ts +62 -0
  46. package/lib/collab/loro/propagators/ElementNodePropagator.js +326 -0
  47. package/lib/collab/loro/propagators/LineBreakNodePropagator.d.ts +57 -0
  48. package/lib/collab/loro/propagators/LineBreakNodePropagator.js +200 -0
  49. package/lib/collab/loro/propagators/RootNodePropagator.d.ts +55 -0
  50. package/lib/collab/loro/propagators/RootNodePropagator.js +174 -0
  51. package/lib/collab/loro/propagators/TextNodePropagator.d.ts +60 -0
  52. package/lib/collab/loro/propagators/TextNodePropagator.js +440 -0
  53. package/lib/collab/loro/propagators/index.d.ts +49 -0
  54. package/lib/collab/loro/propagators/index.js +30 -0
  55. package/lib/collab/loro/provider/websocket.d.ts +116 -0
  56. package/lib/collab/loro/provider/websocket.js +911 -0
  57. package/lib/collab/loro/servers/index.d.ts +0 -0
  58. package/lib/collab/loro/servers/index.js +4 -0
  59. package/lib/collab/loro/servers/ws/callback.d.ts +5 -0
  60. package/lib/collab/loro/servers/ws/callback.js +89 -0
  61. package/lib/collab/loro/servers/ws/server.d.ts +2 -0
  62. package/lib/collab/loro/servers/ws/server.js +29 -0
  63. package/lib/collab/loro/servers/ws/utils.d.ts +40 -0
  64. package/lib/collab/loro/servers/ws/utils.js +517 -0
  65. package/lib/collab/loro/sync/SyncCursors.d.ts +32 -0
  66. package/lib/collab/loro/sync/SyncCursors.js +475 -0
  67. package/lib/collab/loro/sync/SyncLexicalToLoro.d.ts +4 -0
  68. package/lib/collab/loro/sync/SyncLexicalToLoro.js +113 -0
  69. package/lib/collab/loro/sync/SyncLoroToLexical.d.ts +5 -0
  70. package/lib/collab/loro/sync/SyncLoroToLexical.js +100 -0
  71. package/lib/collab/loro/types/LexicalNodeData.d.ts +32 -0
  72. package/lib/collab/loro/types/LexicalNodeData.js +75 -0
  73. package/lib/collab/loro/useCollaboration.d.ts +12 -0
  74. package/lib/collab/loro/useCollaboration.js +260 -0
  75. package/lib/collab/loro/utils/InitialContent.d.ts +64 -0
  76. package/lib/collab/loro/utils/InitialContent.js +113 -0
  77. package/lib/collab/loro/utils/LexicalToLoro.d.ts +18 -0
  78. package/lib/collab/loro/utils/LexicalToLoro.js +100 -0
  79. package/lib/collab/loro/utils/Utils.d.ts +44 -0
  80. package/lib/collab/loro/utils/Utils.js +157 -0
  81. package/lib/collab/loro/wsProvider.d.ts +8 -0
  82. package/lib/collab/loro/wsProvider.js +35 -0
  83. package/lib/collab/utils/invariant.d.ts +1 -0
  84. package/lib/collab/utils/invariant.js +15 -0
  85. package/lib/collab/utils/simpleDiffWithCursor.d.ts +5 -0
  86. package/lib/collab/utils/simpleDiffWithCursor.js +35 -0
  87. package/lib/collab/yjs/Bindings.d.ts +23 -0
  88. package/lib/collab/yjs/Bindings.js +26 -0
  89. package/lib/collab/yjs/Debug.d.ts +23 -0
  90. package/lib/collab/yjs/Debug.js +213 -0
  91. package/lib/collab/yjs/LexicalCollaborationContext.d.ts +10 -0
  92. package/lib/collab/yjs/LexicalCollaborationContext.js +37 -0
  93. package/lib/collab/yjs/LexicalCollaborationPlugin.d.ts +21 -0
  94. package/lib/collab/yjs/LexicalCollaborationPlugin.js +63 -0
  95. package/lib/collab/yjs/State.d.ts +51 -0
  96. package/lib/collab/yjs/State.js +35 -0
  97. package/lib/collab/yjs/nodes/AnyCollabNode.d.ts +5 -0
  98. package/lib/collab/yjs/nodes/AnyCollabNode.js +1 -0
  99. package/lib/collab/yjs/nodes/CollabDecoratorNode.d.ts +22 -0
  100. package/lib/collab/yjs/nodes/CollabDecoratorNode.js +64 -0
  101. package/lib/collab/yjs/nodes/CollabElementNode.d.ts +40 -0
  102. package/lib/collab/yjs/nodes/CollabElementNode.js +462 -0
  103. package/lib/collab/yjs/nodes/CollabLineBreakNode.d.ts +19 -0
  104. package/lib/collab/yjs/nodes/CollabLineBreakNode.js +44 -0
  105. package/lib/collab/yjs/nodes/CollabTextNode.d.ts +25 -0
  106. package/lib/collab/yjs/nodes/CollabTextNode.js +103 -0
  107. package/lib/collab/yjs/provider/websocket.d.ts +88 -0
  108. package/lib/collab/yjs/provider/websocket.js +415 -0
  109. package/lib/collab/yjs/servers/index.d.ts +0 -0
  110. package/lib/collab/yjs/servers/index.js +0 -0
  111. package/lib/collab/yjs/servers/ws/callback.d.ts +5 -0
  112. package/lib/collab/yjs/servers/ws/callback.js +72 -0
  113. package/lib/collab/yjs/servers/ws/server.d.ts +2 -0
  114. package/lib/collab/yjs/servers/ws/server.js +25 -0
  115. package/lib/collab/yjs/servers/ws/utils.d.ts +49 -0
  116. package/lib/collab/yjs/servers/ws/utils.js +284 -0
  117. package/lib/collab/yjs/sync/SyncCursors.d.ts +39 -0
  118. package/lib/collab/yjs/sync/SyncCursors.js +351 -0
  119. package/lib/collab/yjs/sync/SyncEditorStates.d.ts +10 -0
  120. package/lib/collab/yjs/sync/SyncEditorStates.js +200 -0
  121. package/lib/collab/yjs/useCollaboration.d.ts +12 -0
  122. package/lib/collab/yjs/useCollaboration.js +255 -0
  123. package/lib/collab/yjs/utils/Utils.d.ts +25 -0
  124. package/lib/collab/yjs/utils/Utils.js +402 -0
  125. package/lib/collab/yjs/wsProvider.d.ts +3 -0
  126. package/lib/collab/yjs/wsProvider.js +21 -0
  127. package/lib/commenting/index.d.ts +41 -0
  128. package/lib/commenting/index.js +328 -0
  129. package/lib/context/FlashMessageContext.d.ts +7 -0
  130. package/lib/context/FlashMessageContext.js +24 -0
  131. package/lib/context/SettingsContext.d.ts +12 -0
  132. package/lib/context/SettingsContext.js +38 -0
  133. package/lib/context/SharedHistoryContext.d.ts +11 -0
  134. package/lib/context/SharedHistoryContext.js +11 -0
  135. package/lib/context/ToolbarContext.d.ts +65 -0
  136. package/lib/context/ToolbarContext.js +84 -0
  137. package/lib/demo.d.ts +12 -0
  138. package/lib/demo.js +45 -0
  139. package/lib/hooks/useFlashMessage.d.ts +2 -0
  140. package/lib/hooks/useFlashMessage.js +8 -0
  141. package/lib/hooks/useModal.d.ts +5 -0
  142. package/lib/hooks/useModal.js +26 -0
  143. package/lib/hooks/useReport.d.ts +1 -0
  144. package/lib/hooks/useReport.js +50 -0
  145. package/lib/index.d.ts +1 -0
  146. package/lib/index.js +5 -0
  147. package/lib/nodes/AutocompleteNode.d.ts +27 -0
  148. package/lib/nodes/AutocompleteNode.js +60 -0
  149. package/lib/nodes/CounterComponent.d.ts +6 -0
  150. package/lib/nodes/CounterComponent.js +137 -0
  151. package/lib/nodes/CounterNode.d.ts +23 -0
  152. package/lib/nodes/CounterNode.js +47 -0
  153. package/lib/nodes/DateTimeNode/DateTimeComponent.d.ts +8 -0
  154. package/lib/nodes/DateTimeNode/DateTimeComponent.js +119 -0
  155. package/lib/nodes/DateTimeNode/DateTimeNode.d.ts +27 -0
  156. package/lib/nodes/DateTimeNode/DateTimeNode.js +82 -0
  157. package/lib/nodes/EmojiNode.d.ts +18 -0
  158. package/lib/nodes/EmojiNode.js +54 -0
  159. package/lib/nodes/EquationComponent.d.ts +9 -0
  160. package/lib/nodes/EquationComponent.js +75 -0
  161. package/lib/nodes/EquationNode.d.ts +26 -0
  162. package/lib/nodes/EquationNode.js +109 -0
  163. package/lib/nodes/ExcalidrawNode/ExcalidrawComponent.d.ts +8 -0
  164. package/lib/nodes/ExcalidrawNode/ExcalidrawComponent.js +110 -0
  165. package/lib/nodes/ExcalidrawNode/ExcalidrawImage.d.ts +50 -0
  166. package/lib/nodes/ExcalidrawNode/ExcalidrawImage.js +55 -0
  167. package/lib/nodes/ExcalidrawNode/index.d.ts +32 -0
  168. package/lib/nodes/ExcalidrawNode/index.js +117 -0
  169. package/lib/nodes/FigmaNode.d.ts +20 -0
  170. package/lib/nodes/FigmaNode.js +52 -0
  171. package/lib/nodes/ImageComponent.d.ts +16 -0
  172. package/lib/nodes/ImageComponent.js +272 -0
  173. package/lib/nodes/ImageNode.d.ts +50 -0
  174. package/lib/nodes/ImageNode.js +151 -0
  175. package/lib/nodes/InlineImageNode/InlineImageComponent.d.ts +26 -0
  176. package/lib/nodes/InlineImageNode/InlineImageComponent.js +161 -0
  177. package/lib/nodes/InlineImageNode/InlineImageNode.d.ts +59 -0
  178. package/lib/nodes/InlineImageNode/InlineImageNode.js +162 -0
  179. package/lib/nodes/KeywordNode.d.ts +14 -0
  180. package/lib/nodes/KeywordNode.js +37 -0
  181. package/lib/nodes/LayoutContainerNode.d.ts +24 -0
  182. package/lib/nodes/LayoutContainerNode.js +95 -0
  183. package/lib/nodes/LayoutItemNode.d.ts +16 -0
  184. package/lib/nodes/LayoutItemNode.js +69 -0
  185. package/lib/nodes/MentionNode.d.ts +20 -0
  186. package/lib/nodes/MentionNode.js +85 -0
  187. package/lib/nodes/PageBreakNode/index.d.ts +17 -0
  188. package/lib/nodes/PageBreakNode/index.js +83 -0
  189. package/lib/nodes/PlaygroundNodes.d.ts +3 -0
  190. package/lib/nodes/PlaygroundNodes.js +75 -0
  191. package/lib/nodes/PollComponent.d.ts +9 -0
  192. package/lib/nodes/PollComponent.js +85 -0
  193. package/lib/nodes/PollNode.d.ts +43 -0
  194. package/lib/nodes/PollNode.js +153 -0
  195. package/lib/nodes/SpecialTextNode.d.ts +24 -0
  196. package/lib/nodes/SpecialTextNode.js +54 -0
  197. package/lib/nodes/StickyComponent.d.ts +10 -0
  198. package/lib/nodes/StickyComponent.js +162 -0
  199. package/lib/nodes/StickyNode.d.ts +31 -0
  200. package/lib/nodes/StickyNode.js +76 -0
  201. package/lib/nodes/TweetNode.d.ts +21 -0
  202. package/lib/nodes/TweetNode.js +119 -0
  203. package/lib/nodes/YouTubeNode.d.ts +22 -0
  204. package/lib/nodes/YouTubeNode.js +84 -0
  205. package/lib/plugins/ActionsPlugin/index.d.ts +5 -0
  206. package/lib/plugins/ActionsPlugin/index.js +168 -0
  207. package/lib/plugins/AutoEmbedPlugin/index.d.ts +19 -0
  208. package/lib/plugins/AutoEmbedPlugin/index.js +158 -0
  209. package/lib/plugins/AutoLinkPlugin/index.d.ts +2 -0
  210. package/lib/plugins/AutoLinkPlugin/index.js +15 -0
  211. package/lib/plugins/AutocompletePlugin/index.d.ts +10 -0
  212. package/lib/plugins/AutocompletePlugin/index.js +2477 -0
  213. package/lib/plugins/CodeActionMenuPlugin/components/CopyButton/index.d.ts +7 -0
  214. package/lib/plugins/CodeActionMenuPlugin/components/CopyButton/index.js +46 -0
  215. package/lib/plugins/CodeActionMenuPlugin/components/PrettierButton/index.d.ts +17 -0
  216. package/lib/plugins/CodeActionMenuPlugin/components/PrettierButton/index.js +115 -0
  217. package/lib/plugins/CodeActionMenuPlugin/index.d.ts +5 -0
  218. package/lib/plugins/CodeActionMenuPlugin/index.js +104 -0
  219. package/lib/plugins/CodeActionMenuPlugin/utils.d.ts +1 -0
  220. package/lib/plugins/CodeActionMenuPlugin/utils.js +22 -0
  221. package/lib/plugins/CodeHighlightPrismPlugin/index.d.ts +2 -0
  222. package/lib/plugins/CodeHighlightPrismPlugin/index.js +14 -0
  223. package/lib/plugins/CodeHighlightShikiPlugin/index.d.ts +2 -0
  224. package/lib/plugins/CodeHighlightShikiPlugin/index.js +14 -0
  225. package/lib/plugins/CollapsiblePlugin/CollapsibleContainerNode.d.ts +25 -0
  226. package/lib/plugins/CollapsiblePlugin/CollapsibleContainerNode.js +135 -0
  227. package/lib/plugins/CollapsiblePlugin/CollapsibleContentNode.d.ts +16 -0
  228. package/lib/plugins/CollapsiblePlugin/CollapsibleContentNode.js +83 -0
  229. package/lib/plugins/CollapsiblePlugin/CollapsibleTitleNode.d.ts +16 -0
  230. package/lib/plugins/CollapsiblePlugin/CollapsibleTitleNode.js +85 -0
  231. package/lib/plugins/CollapsiblePlugin/CollapsibleUtils.d.ts +2 -0
  232. package/lib/plugins/CollapsiblePlugin/CollapsibleUtils.js +12 -0
  233. package/lib/plugins/CollapsiblePlugin/index.d.ts +3 -0
  234. package/lib/plugins/CollapsiblePlugin/index.js +132 -0
  235. package/lib/plugins/CommentPlugin/index.d.ts +9 -0
  236. package/lib/plugins/CommentPlugin/index.js +460 -0
  237. package/lib/plugins/ComponentPickerPlugin/index.d.ts +2 -0
  238. package/lib/plugins/ComponentPickerPlugin/index.js +276 -0
  239. package/lib/plugins/ContextMenuPlugin/index.d.ts +2 -0
  240. package/lib/plugins/ContextMenuPlugin/index.js +112 -0
  241. package/lib/plugins/CounterPlugin/index.d.ts +3 -0
  242. package/lib/plugins/CounterPlugin/index.js +24 -0
  243. package/lib/plugins/DateTimePlugin/index.d.ts +8 -0
  244. package/lib/plugins/DateTimePlugin/index.js +28 -0
  245. package/lib/plugins/DebugPlugin/index.d.ts +3 -0
  246. package/lib/plugins/DebugPlugin/index.js +219 -0
  247. package/lib/plugins/DocsPlugin/index.d.ts +2 -0
  248. package/lib/plugins/DocsPlugin/index.js +4 -0
  249. package/lib/plugins/DragDropPastePlugin/index.d.ts +1 -0
  250. package/lib/plugins/DragDropPastePlugin/index.js +37 -0
  251. package/lib/plugins/DraggableBlockPlugin/index.d.ts +12 -0
  252. package/lib/plugins/DraggableBlockPlugin/index.js +36 -0
  253. package/lib/plugins/EmojiPickerPlugin/index.d.ts +1 -0
  254. package/lib/plugins/EmojiPickerPlugin/index.js +84 -0
  255. package/lib/plugins/EmojisPlugin/index.d.ts +2 -0
  256. package/lib/plugins/EmojisPlugin/index.js +56 -0
  257. package/lib/plugins/EquationsPlugin/index.d.ts +14 -0
  258. package/lib/plugins/EquationsPlugin/index.js +34 -0
  259. package/lib/plugins/ExcalidrawPlugin/index.d.ts +5 -0
  260. package/lib/plugins/ExcalidrawPlugin/index.js +44 -0
  261. package/lib/plugins/FigmaPlugin/index.d.ts +4 -0
  262. package/lib/plugins/FigmaPlugin/index.js +24 -0
  263. package/lib/plugins/FloatingLinkEditorPlugin/index.d.ts +15 -0
  264. package/lib/plugins/FloatingLinkEditorPlugin/index.js +280 -0
  265. package/lib/plugins/FloatingTextFormatToolbarPlugin/index.d.ts +7 -0
  266. package/lib/plugins/FloatingTextFormatToolbarPlugin/index.js +219 -0
  267. package/lib/plugins/ImagesPlugin/index.d.ts +24 -0
  268. package/lib/plugins/ImagesPlugin/index.js +195 -0
  269. package/lib/plugins/InlineImagePlugin/index.d.ts +17 -0
  270. package/lib/plugins/InlineImagePlugin/index.js +180 -0
  271. package/lib/plugins/KeywordsPlugin/index.d.ts +2 -0
  272. package/lib/plugins/KeywordsPlugin/index.js +35 -0
  273. package/lib/plugins/LayoutPlugin/InsertLayoutDialog.d.ts +6 -0
  274. package/lib/plugins/LayoutPlugin/InsertLayoutDialog.js +21 -0
  275. package/lib/plugins/LayoutPlugin/LayoutPlugin.d.ts +7 -0
  276. package/lib/plugins/LayoutPlugin/LayoutPlugin.js +135 -0
  277. package/lib/plugins/LinkPlugin/index.d.ts +6 -0
  278. package/lib/plugins/LinkPlugin/index.js +11 -0
  279. package/lib/plugins/MarkdownShortcutPlugin/index.d.ts +2 -0
  280. package/lib/plugins/MarkdownShortcutPlugin/index.js +6 -0
  281. package/lib/plugins/MarkdownTransformers/index.d.ts +8 -0
  282. package/lib/plugins/MarkdownTransformers/index.js +238 -0
  283. package/lib/plugins/MaxLengthPlugin/index.d.ts +3 -0
  284. package/lib/plugins/MaxLengthPlugin/index.js +41 -0
  285. package/lib/plugins/MentionsPlugin/index.d.ts +2 -0
  286. package/lib/plugins/MentionsPlugin/index.js +564 -0
  287. package/lib/plugins/PageBreakPlugin/index.d.ts +4 -0
  288. package/lib/plugins/PageBreakPlugin/index.js +31 -0
  289. package/lib/plugins/PasteLogPlugin/index.d.ts +2 -0
  290. package/lib/plugins/PasteLogPlugin/index.js +27 -0
  291. package/lib/plugins/PollPlugin/index.d.ts +8 -0
  292. package/lib/plugins/PollPlugin/index.js +38 -0
  293. package/lib/plugins/ShortcutsPlugin/index.d.ts +6 -0
  294. package/lib/plugins/ShortcutsPlugin/index.js +116 -0
  295. package/lib/plugins/ShortcutsPlugin/shortcuts.d.ts +59 -0
  296. package/lib/plugins/ShortcutsPlugin/shortcuts.js +173 -0
  297. package/lib/plugins/SpecialTextPlugin/index.d.ts +2 -0
  298. package/lib/plugins/SpecialTextPlugin/index.js +50 -0
  299. package/lib/plugins/SpeechToTextPlugin/index.d.ts +5 -0
  300. package/lib/plugins/SpeechToTextPlugin/index.js +86 -0
  301. package/lib/plugins/StickyPlugin/index.d.ts +2 -0
  302. package/lib/plugins/StickyPlugin/index.js +16 -0
  303. package/lib/plugins/TabFocusPlugin/index.d.ts +1 -0
  304. package/lib/plugins/TabFocusPlugin/index.js +38 -0
  305. package/lib/plugins/TableActionMenuPlugin/index.d.ts +5 -0
  306. package/lib/plugins/TableActionMenuPlugin/index.js +492 -0
  307. package/lib/plugins/TableCellResizer/index.d.ts +3 -0
  308. package/lib/plugins/TableCellResizer/index.js +297 -0
  309. package/lib/plugins/TableHoverActionsPlugin/index.d.ts +4 -0
  310. package/lib/plugins/TableHoverActionsPlugin/index.js +188 -0
  311. package/lib/plugins/TableOfContentsPlugin/index.d.ts +2 -0
  312. package/lib/plugins/TableOfContentsPlugin/index.js +116 -0
  313. package/lib/plugins/TablePlugin.d.ts +31 -0
  314. package/lib/plugins/TablePlugin.js +63 -0
  315. package/lib/plugins/TestRecorderPlugin/index.d.ts +3 -0
  316. package/lib/plugins/TestRecorderPlugin/index.js +346 -0
  317. package/lib/plugins/ToolbarPlugin/fontSize.d.ts +9 -0
  318. package/lib/plugins/ToolbarPlugin/fontSize.js +84 -0
  319. package/lib/plugins/ToolbarPlugin/index.d.ts +9 -0
  320. package/lib/plugins/ToolbarPlugin/index.js +500 -0
  321. package/lib/plugins/ToolbarPlugin/utils.d.ts +26 -0
  322. package/lib/plugins/ToolbarPlugin/utils.js +247 -0
  323. package/lib/plugins/TreeViewPlugin/index.d.ts +2 -0
  324. package/lib/plugins/TreeViewPlugin/index.js +7 -0
  325. package/lib/plugins/TwitterPlugin/index.d.ts +4 -0
  326. package/lib/plugins/TwitterPlugin/index.js +24 -0
  327. package/lib/plugins/TypingPerfPlugin/index.d.ts +2 -0
  328. package/lib/plugins/TypingPerfPlugin/index.js +97 -0
  329. package/lib/plugins/YouTubePlugin/index.d.ts +4 -0
  330. package/lib/plugins/YouTubePlugin/index.js +24 -0
  331. package/lib/server/validation.d.ts +1 -0
  332. package/lib/server/validation.js +115 -0
  333. package/lib/setupEnv.d.ts +2 -0
  334. package/lib/setupEnv.js +29 -0
  335. package/lib/themes/CommentEditorTheme.d.ts +4 -0
  336. package/lib/themes/CommentEditorTheme.js +11 -0
  337. package/lib/themes/PlaygroundEditorTheme.d.ts +4 -0
  338. package/lib/themes/PlaygroundEditorTheme.js +124 -0
  339. package/lib/themes/StickyEditorTheme.d.ts +4 -0
  340. package/lib/themes/StickyEditorTheme.js +11 -0
  341. package/lib/tyes.dt.d.ts +12 -0
  342. package/lib/tyes.dt.js +4 -0
  343. package/lib/ui/Button.d.ts +12 -0
  344. package/lib/ui/Button.js +6 -0
  345. package/lib/ui/ColorPicker.d.ts +14 -0
  346. package/lib/ui/ColorPicker.js +219 -0
  347. package/lib/ui/ContentEditable.d.ts +9 -0
  348. package/lib/ui/ContentEditable.js +6 -0
  349. package/lib/ui/Dialog.d.ts +10 -0
  350. package/lib/ui/Dialog.js +8 -0
  351. package/lib/ui/DropDown.d.ts +18 -0
  352. package/lib/ui/DropDown.js +133 -0
  353. package/lib/ui/DropdownColorPicker.d.ts +13 -0
  354. package/lib/ui/DropdownColorPicker.js +6 -0
  355. package/lib/ui/EquationEditor.d.ts +8 -0
  356. package/lib/ui/EquationEditor.js +11 -0
  357. package/lib/ui/ExcalidrawModal.d.ts +42 -0
  358. package/lib/ui/ExcalidrawModal.js +103 -0
  359. package/lib/ui/FileInput.d.ts +10 -0
  360. package/lib/ui/FileInput.js +5 -0
  361. package/lib/ui/FlashMessage.d.ts +7 -0
  362. package/lib/ui/FlashMessage.js +6 -0
  363. package/lib/ui/ImageResizer.d.ts +17 -0
  364. package/lib/ui/ImageResizer.js +171 -0
  365. package/lib/ui/KatexEquationAlterer.d.ts +8 -0
  366. package/lib/ui/KatexEquationAlterer.js +23 -0
  367. package/lib/ui/KatexRenderer.d.ts +6 -0
  368. package/lib/ui/KatexRenderer.js +24 -0
  369. package/lib/ui/Modal.d.ts +9 -0
  370. package/lib/ui/Modal.js +48 -0
  371. package/lib/ui/Select.d.ts +8 -0
  372. package/lib/ui/Select.js +5 -0
  373. package/lib/ui/Switch.d.ts +8 -0
  374. package/lib/ui/Switch.js +6 -0
  375. package/lib/ui/TextInput.d.ts +13 -0
  376. package/lib/ui/TextInput.js +7 -0
  377. package/lib/utils/docSerialization.d.ts +3 -0
  378. package/lib/utils/docSerialization.js +60 -0
  379. package/lib/utils/emoji-list.d.ts +20 -0
  380. package/lib/utils/emoji-list.js +16609 -0
  381. package/lib/utils/getDOMRangeRect.d.ts +8 -0
  382. package/lib/utils/getDOMRangeRect.js +26 -0
  383. package/lib/utils/getSelectedNode.d.ts +2 -0
  384. package/lib/utils/getSelectedNode.js +28 -0
  385. package/lib/utils/getThemeSelector.d.ts +2 -0
  386. package/lib/utils/getThemeSelector.js +14 -0
  387. package/lib/utils/isMobileWidth.d.ts +7 -0
  388. package/lib/utils/isMobileWidth.js +11 -0
  389. package/lib/utils/joinClasses.d.ts +1 -0
  390. package/lib/utils/joinClasses.js +7 -0
  391. package/lib/utils/setFloatingElemPosition.d.ts +1 -0
  392. package/lib/utils/setFloatingElemPosition.js +59 -0
  393. package/lib/utils/setFloatingElemPositionForLinkEditor.d.ts +1 -0
  394. package/lib/utils/setFloatingElemPositionForLinkEditor.js +36 -0
  395. package/lib/utils/swipe.d.ts +4 -0
  396. package/lib/utils/swipe.js +94 -0
  397. package/lib/utils/url.d.ts +2 -0
  398. package/lib/utils/url.js +31 -0
  399. package/package.json +1 -1
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Setup global debugging utilities for Y.js collaboration
3
+ * This function creates comprehensive debugging tools including:
4
+ * - Tree structure visualization
5
+ * - Node inspection utilities
6
+ * - Interactive debug panel
7
+ * - Console logging functions
8
+ *
9
+ * @param binding - The Y.js binding instance to debug
10
+ */
11
+ export function setupYjsDebugging(binding) {
12
+ // Setup global debugging for Y.js
13
+ window.debugYjs = {
14
+ binding: null, // Will be set after binding is created
15
+ logStructure: () => {
16
+ const binding = window.debugYjs.binding;
17
+ if (binding) {
18
+ console.log('=== YJS STRUCTURE DEBUG ===');
19
+ console.log('Root children:', binding.root._children.length);
20
+ binding.root._children.forEach((child, index) => {
21
+ console.log(` ${index}: ${child.constructor.name}(${child._key})`);
22
+ });
23
+ console.log('=== END DEBUG ===');
24
+ }
25
+ else {
26
+ console.log('Y.js binding not available yet');
27
+ }
28
+ },
29
+ verifyStructure: () => {
30
+ const binding = window.debugYjs.binding;
31
+ if (!binding)
32
+ return console.log('❌ Binding not available');
33
+ console.log('🔍 YJS STRUCTURE VERIFICATION:');
34
+ console.log('Root children count:', binding.root._children.length);
35
+ binding.root._children.forEach((child, index) => {
36
+ console.log(`\n📍 Root child ${index}:`);
37
+ console.log(' Type:', child.constructor.name);
38
+ console.log(' Key:', child._key);
39
+ console.log(' Element Type:', child.getType ? child.getType() : 'N/A');
40
+ console.log(' Children Count:', child._children ? child._children.length : 0);
41
+ if (child._children && child._children.length > 0) {
42
+ console.log(' Children:');
43
+ child._children.forEach((grandChild, gIndex) => {
44
+ console.log(` ${gIndex}: ${grandChild.constructor.name}(${grandChild._key})`);
45
+ });
46
+ }
47
+ });
48
+ // Check for any orphaned text nodes at root level
49
+ const textNodesAtRoot = binding.root._children.filter(child => child.constructor.name === 'CollabTextNode');
50
+ if (textNodesAtRoot.length > 0) {
51
+ console.log('⚠️ WARNING: Found text nodes directly under root:');
52
+ textNodesAtRoot.forEach(node => console.log(' -', node._key));
53
+ }
54
+ },
55
+ inspectNode: (nodeKey) => {
56
+ const binding = window.debugYjs.binding;
57
+ if (!binding)
58
+ return console.log('Binding not available');
59
+ // Search for node in tree
60
+ const findNode = (node, key) => {
61
+ if (node._key === key)
62
+ return node;
63
+ if (node._children) {
64
+ for (const child of node._children) {
65
+ const found = findNode(child, key);
66
+ if (found)
67
+ return found;
68
+ }
69
+ }
70
+ return null;
71
+ };
72
+ const node = findNode(binding.root, nodeKey);
73
+ if (node) {
74
+ console.log('🔍 Node Details:', {
75
+ key: node._key,
76
+ type: node.constructor.name,
77
+ elementType: node.getType ? node.getType() : 'N/A',
78
+ children: node._children ? node._children.length : 0,
79
+ properties: node._xmlText ? 'Has XmlText' : 'No XmlText',
80
+ parent: node._parent ? node._parent._key : 'No parent'
81
+ });
82
+ }
83
+ else {
84
+ console.warn(`Node with key "${nodeKey}" not found`);
85
+ }
86
+ },
87
+ generateTreeHTML: (node, prefix = '', isLast = true) => {
88
+ const nodeKey = node._key || 'no-key';
89
+ const nodeType = node.getType ? node.getType() : 'no-type';
90
+ const nodeInfo = `${node.constructor.name}(${nodeKey}) [${nodeType}]`;
91
+ const connector = isLast ? '└── ' : '├── ';
92
+ const childPrefix = prefix + (isLast ? ' ' : '│ ');
93
+ const clickIntegrator = nodeKey !== 'no-key' ? `onclick="window.debugYjs.inspectNode('${nodeKey}')"` : '';
94
+ const nodeColor = nodeKey !== 'no-key' ? '#00ff88' : '#888';
95
+ const cursor = nodeKey !== 'no-key' ? 'cursor: pointer; text-decoration: underline;' : '';
96
+ // Convert spaces to non-breaking spaces for proper HTML rendering
97
+ const htmlPrefix = prefix.replace(/ /g, ' ');
98
+ const htmlConnector = connector.replace(/ /g, ' ');
99
+ let result = `<div style="color: ${nodeColor}; ${cursor}" ${clickIntegrator}>${htmlPrefix}${htmlConnector}${nodeInfo}</div>`;
100
+ if (node._children && node._children.length > 0) {
101
+ node._children.forEach((child, index) => {
102
+ const isLastChild = index === node._children.length - 1;
103
+ if (child) {
104
+ result += window.debugYjs.generateTreeHTML(child, childPrefix, isLastChild);
105
+ }
106
+ else {
107
+ const childConnector = isLastChild ? '└── ' : '├── ';
108
+ const htmlChildPrefix = childPrefix.replace(/ /g, '&nbsp;');
109
+ const htmlChildConnector = childConnector.replace(/ /g, '&nbsp;');
110
+ result += `<div style="color: #ffaa00;">${htmlChildPrefix}${htmlChildConnector}null</div>`;
111
+ }
112
+ });
113
+ }
114
+ return result;
115
+ },
116
+ addDebugToPage: () => {
117
+ const binding = window.debugYjs.binding;
118
+ if (!binding)
119
+ return;
120
+ // Debug: log the actual structure to console
121
+ console.log('🟢 YJS Root structure:', {
122
+ rootChildren: binding.root._children.length,
123
+ children: binding.root._children.map((child, index) => ({
124
+ index,
125
+ type: child.constructor.name,
126
+ key: child._key,
127
+ childrenCount: child._children ? child._children.length : 0,
128
+ children: child._children ? child._children.map((grandChild) => ({
129
+ type: grandChild.constructor.name,
130
+ key: grandChild._key
131
+ })) : []
132
+ }))
133
+ });
134
+ const treeHTML = window.debugYjs.generateTreeHTML(binding.root);
135
+ const debugDiv = document.getElementById('debug-yjs') || document.createElement('div');
136
+ const existingDiv = document.getElementById('debug-yjs');
137
+ // Preserve current position if panel already exists
138
+ let currentLeft = '10px';
139
+ let currentTop = '700px';
140
+ if (existingDiv) {
141
+ currentLeft = existingDiv.style.left || '10px';
142
+ currentTop = existingDiv.style.top || '700px';
143
+ }
144
+ debugDiv.id = 'debug-yjs';
145
+ debugDiv.style.cssText = `position: fixed; top: ${currentTop}; left: ${currentLeft}; background: rgba(0,100,0,0.9); color: white; padding: 0; border-radius: 8px; font-family: "Courier New", monospace; font-size: 11px; z-index: 9999; max-width: 500px; max-height: 80vh; box-shadow: 0 4px 8px rgba(0,0,0,0.3); border: 1px solid #51cf66; user-select: none;`;
146
+ // Add drag functionality if not already added
147
+ if (!debugDiv.classList.contains('draggable-initialized')) {
148
+ debugDiv.classList.add('draggable-initialized');
149
+ let isDragging = false;
150
+ let startX = 0;
151
+ let startY = 0;
152
+ let startLeft = 0;
153
+ let startTop = 0;
154
+ debugDiv.addEventListener('mousedown', (e) => {
155
+ // Only start drag if clicking on the header area
156
+ const target = e.target;
157
+ const dragHandle = debugDiv.querySelector('.debug-drag-handle');
158
+ if (!dragHandle || !dragHandle.contains(target))
159
+ return;
160
+ isDragging = true;
161
+ startX = e.clientX;
162
+ startY = e.clientY;
163
+ const rect = debugDiv.getBoundingClientRect();
164
+ startLeft = rect.left;
165
+ startTop = rect.top;
166
+ document.addEventListener('mousemove', onMouseMove);
167
+ document.addEventListener('mouseup', onMouseUp);
168
+ e.preventDefault();
169
+ });
170
+ function onMouseMove(e) {
171
+ if (!isDragging)
172
+ return;
173
+ const deltaX = e.clientX - startX;
174
+ const deltaY = e.clientY - startY;
175
+ const newLeft = Math.max(0, Math.min(window.innerWidth - debugDiv.offsetWidth, startLeft + deltaX));
176
+ const newTop = Math.max(0, Math.min(window.innerHeight - debugDiv.offsetHeight, startTop + deltaY));
177
+ debugDiv.style.left = newLeft + 'px';
178
+ debugDiv.style.top = newTop + 'px';
179
+ }
180
+ function onMouseUp() {
181
+ isDragging = false;
182
+ document.removeEventListener('mousemove', onMouseMove);
183
+ document.removeEventListener('mouseup', onMouseUp);
184
+ }
185
+ }
186
+ debugDiv.innerHTML = `
187
+ <div class="debug-drag-handle" style="color: #51cf66; font-weight: bold; margin-bottom: 10px; border-bottom: 1px solid #444; padding: 15px 15px 5px 15px; cursor: move; background: linear-gradient(90deg, rgba(81,207,102,0.1), transparent);">
188
+ 🟢 YJS STRUCTURE <span style="float: right; font-size: 9px; color: #666;">⋮⋮ drag</span>
189
+ </div>
190
+ <div style="padding: 0 15px 15px 15px; overflow-y: auto; max-height: calc(80vh - 50px);">
191
+ <div style="color: #74c0fc; margin-bottom: 8px;">Root children: ${binding.root._children.length}</div>
192
+ <div style="color: #ffd43b; margin-bottom: 10px;">Time: ${new Date().toLocaleTimeString()}</div>
193
+ <div style="border-top: 1px solid #444; padding-top: 8px;">
194
+ ${treeHTML}
195
+ </div>
196
+ <div style="margin-top: 10px; font-size: 10px; color: #888;">
197
+ <span onclick="window.debugYjs.addDebugToPage()" style="color: #74c0fc; cursor: pointer; text-decoration: underline;">🔄 Refresh</span> |
198
+ <span onclick="window.debugYjs.verifyStructure()" style="color: #00ff88; cursor: pointer; text-decoration: underline;">✅ Verify</span> |
199
+ <span onclick="window.debugYjs.logStructure()" style="color: #ffd43b; cursor: pointer; text-decoration: underline;">📝 Console Log</span> |
200
+ <span onclick="document.getElementById('debug-yjs').remove()" style="color: #51cf66; cursor: pointer; text-decoration: underline;">❌ Close</span>
201
+ </div>
202
+ </div>
203
+ `;
204
+ document.body.appendChild(debugDiv);
205
+ }
206
+ };
207
+ // Expose binding for debugging
208
+ window.debugYjs.binding = binding;
209
+ // Auto-initialize debug window after a short delay
210
+ setTimeout(() => {
211
+ window.debugYjs.addDebugToPage();
212
+ }, 1500); // Slightly later than Y.js to avoid overlap
213
+ }
@@ -0,0 +1,10 @@
1
+ import type { Doc } from 'yjs';
2
+ export type CollaborationContextType = {
3
+ clientID: number;
4
+ color: string;
5
+ isCollabActive: boolean;
6
+ name: string;
7
+ docMap: Map<string, Doc>;
8
+ };
9
+ export declare const CollaborationContext: import("react").Context<CollaborationContextType>;
10
+ export declare function useCollaborationContext(username?: string, color?: string): CollaborationContextType;
@@ -0,0 +1,37 @@
1
+ import { createContext, useContext } from 'react';
2
+ const ENTRIES = [
3
+ ['Cat', 'rgb(125, 50, 0)'],
4
+ ['Dog', 'rgb(100, 0, 0)'],
5
+ ['Rabbit', 'rgb(150, 0, 0)'],
6
+ ['Frog', 'rgb(200, 0, 0)'],
7
+ ['Fox', 'rgb(200, 75, 0)'],
8
+ ['Hedgehog', 'rgb(0, 75, 0)'],
9
+ ['Pigeon', 'rgb(0, 125, 0)'],
10
+ ['Squirrel', 'rgb(75, 100, 0)'],
11
+ ['Bear', 'rgb(125, 100, 0)'],
12
+ ['Tiger', 'rgb(0, 0, 150)'],
13
+ ['Leopard', 'rgb(0, 0, 200)'],
14
+ ['Zebra', 'rgb(0, 0, 250)'],
15
+ ['Wolf', 'rgb(0, 100, 150)'],
16
+ ['Owl', 'rgb(0, 100, 100)'],
17
+ ['Gull', 'rgb(100, 0, 100)'],
18
+ ['Squid', 'rgb(150, 0, 150)'],
19
+ ];
20
+ const randomEntry = ENTRIES[Math.floor(Math.random() * ENTRIES.length)];
21
+ export const CollaborationContext = createContext({
22
+ clientID: 0,
23
+ color: randomEntry[1],
24
+ isCollabActive: false,
25
+ name: randomEntry[0],
26
+ docMap: new Map(),
27
+ });
28
+ export function useCollaborationContext(username, color) {
29
+ const collabContext = useContext(CollaborationContext);
30
+ if (username != null) {
31
+ collabContext.name = username;
32
+ }
33
+ if (color != null) {
34
+ collabContext.color = color;
35
+ }
36
+ return collabContext;
37
+ }
@@ -0,0 +1,21 @@
1
+ import type { JSX } from 'react';
2
+ import type { Doc } from 'yjs';
3
+ import { InitialEditorStateType } from '@lexical/react/LexicalComposer';
4
+ import { Provider } from './State';
5
+ import { CursorsContainerRef } from './useCollaboration';
6
+ import { SyncCursorPositionsFn } from './sync/SyncCursors';
7
+ import { ExcludedProperties } from './Bindings';
8
+ type Props = {
9
+ id: string;
10
+ providerFactory: (id: string, docMap: Map<string, Doc>) => Provider;
11
+ shouldBootstrap: boolean;
12
+ username?: string;
13
+ cursorColor?: string;
14
+ cursorsContainerRef?: CursorsContainerRef;
15
+ initialEditorState?: InitialEditorStateType;
16
+ excludedProperties?: ExcludedProperties;
17
+ awarenessData?: object;
18
+ syncCursorPositionsFn?: SyncCursorPositionsFn;
19
+ };
20
+ export declare function CollaborationPlugin({ id, providerFactory, shouldBootstrap, username, cursorColor, cursorsContainerRef, initialEditorState, excludedProperties, awarenessData, syncCursorPositionsFn, }: Props): JSX.Element;
21
+ export {};
@@ -0,0 +1,63 @@
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, } from './LexicalCollaborationContext';
5
+ import { useCollaboration, useFocusTracking, useHistory, } from './useCollaboration';
6
+ import { createBinding } from './Bindings';
7
+ export function CollaborationPlugin({ id, providerFactory, shouldBootstrap, username, cursorColor, cursorsContainerRef, initialEditorState, excludedProperties, awarenessData, syncCursorPositionsFn, }) {
8
+ const isBindingInitialized = useRef(false);
9
+ const isProviderInitialized = useRef(false);
10
+ const collabContext = useCollaborationContext(username, cursorColor);
11
+ const { docMap, name, color } = collabContext;
12
+ const [editor] = useLexicalComposerContext();
13
+ useEffect(() => {
14
+ collabContext.isCollabActive = true;
15
+ return () => {
16
+ // Resetting flag only when unmount top level editor collab plugin. Nested
17
+ // editors (e.g. image caption) should unmount without affecting it
18
+ if (editor._parentEditor == null) {
19
+ collabContext.isCollabActive = false;
20
+ }
21
+ };
22
+ }, [collabContext, editor]);
23
+ const [provider, setProvider] = useState();
24
+ const [doc, setDoc] = useState();
25
+ useEffect(() => {
26
+ if (isProviderInitialized.current) {
27
+ return;
28
+ }
29
+ isProviderInitialized.current = true;
30
+ const provider = providerFactory(id, docMap);
31
+ setProvider(provider);
32
+ setDoc(docMap.get(id));
33
+ return () => {
34
+ provider.disconnect();
35
+ };
36
+ }, [id, providerFactory, docMap]);
37
+ const [binding, setBinding] = useState();
38
+ useEffect(() => {
39
+ if (!provider) {
40
+ return;
41
+ }
42
+ if (isBindingInitialized.current) {
43
+ return;
44
+ }
45
+ isBindingInitialized.current = true;
46
+ const binding = createBinding(editor, provider, id, doc || docMap.get(id), docMap, excludedProperties);
47
+ setBinding(binding);
48
+ return () => {
49
+ binding.root.destroy(binding);
50
+ };
51
+ }, [editor, provider, id, docMap, doc, excludedProperties]);
52
+ if (!provider || !binding) {
53
+ return _jsx(_Fragment, {});
54
+ }
55
+ return (_jsx(YjsCollaborationCursors, { 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 }));
56
+ }
57
+ function YjsCollaborationCursors({ editor, id, provider, docMap, name, color, shouldBootstrap, cursorsContainerRef, initialEditorState, awarenessData, collabContext, binding, setDoc, syncCursorPositionsFn, }) {
58
+ const cursorsElement = useCollaboration(editor, id, provider, docMap, name, color, shouldBootstrap, binding, setDoc, cursorsContainerRef, initialEditorState, awarenessData, syncCursorPositionsFn);
59
+ collabContext.clientID = binding.clientID;
60
+ useHistory(editor, binding);
61
+ useFocusTracking(editor, provider, name, color, awarenessData);
62
+ return cursorsElement;
63
+ }
@@ -0,0 +1,51 @@
1
+ import type { LexicalCommand } from 'lexical';
2
+ import type { Doc, RelativePosition, UndoManager, XmlText } from 'yjs';
3
+ import type { Binding } from './Bindings';
4
+ export type UserState = {
5
+ anchorPos: RelativePosition | null;
6
+ color: string;
7
+ focusing: boolean;
8
+ focusPos: RelativePosition | null;
9
+ name: string;
10
+ awarenessData: object;
11
+ [key: string]: unknown;
12
+ };
13
+ export declare const CONNECTED_COMMAND: LexicalCommand<boolean>;
14
+ export declare const TOGGLE_CONNECT_COMMAND: LexicalCommand<boolean>;
15
+ export type AwarenessProvider = {
16
+ getLocalState: () => UserState | null;
17
+ getStates: () => Map<number, UserState>;
18
+ off: (type: 'update', cb: () => void) => void;
19
+ on: (type: 'update', cb: () => void) => void;
20
+ setLocalState: (userState: UserState) => void;
21
+ setLocalStateField: (field: string, value: unknown) => void;
22
+ };
23
+ export type Provider = {
24
+ awareness: AwarenessProvider;
25
+ connect(): void | Promise<void>;
26
+ disconnect(): void;
27
+ off(type: 'sync', cb: (isSynced: boolean) => void): void;
28
+ off(type: 'update', cb: (update: unknown) => void): void;
29
+ off(type: 'status', cb: (status: {
30
+ status: string;
31
+ }) => void): void;
32
+ off(type: 'reload', cb: (doc: Doc) => void): void;
33
+ on(type: 'sync', cb: (isSynced: boolean) => void): void;
34
+ on(type: 'status', cb: (status: {
35
+ status: string;
36
+ }) => void): void;
37
+ on(type: 'update', cb: (update: unknown) => void): void;
38
+ on(type: 'reload', cb: (doc: Doc) => void): void;
39
+ };
40
+ export type Operation = {
41
+ attributes: {
42
+ __type: string;
43
+ };
44
+ insert: string | Record<string, unknown>;
45
+ };
46
+ export type Delta = Array<Operation>;
47
+ export type YjsNode = Record<string, unknown>;
48
+ export type YjsEvent = Record<string, unknown>;
49
+ export declare function createUndoManager(binding: Binding, root: XmlText): UndoManager;
50
+ export declare function initLocalState(provider: Provider, name: string, color: string, focusing: boolean, awarenessData: object): void;
51
+ export declare function setLocalStateFocus(provider: Provider, name: string, color: string, focusing: boolean, awarenessData: object): void;
@@ -0,0 +1,35 @@
1
+ import { createCommand } from 'lexical';
2
+ import { UndoManager as YjsUndoManager } from 'yjs';
3
+ export const CONNECTED_COMMAND = createCommand('CONNECTED_COMMAND');
4
+ export const TOGGLE_CONNECT_COMMAND = createCommand('TOGGLE_CONNECT_COMMAND');
5
+ export function createUndoManager(binding, root) {
6
+ return new YjsUndoManager(root, {
7
+ trackedOrigins: new Set([binding, null]),
8
+ });
9
+ }
10
+ export function initLocalState(provider, name, color, focusing, awarenessData) {
11
+ provider.awareness.setLocalState({
12
+ anchorPos: null,
13
+ awarenessData,
14
+ color,
15
+ focusPos: null,
16
+ focusing,
17
+ name,
18
+ });
19
+ }
20
+ export function setLocalStateFocus(provider, name, color, focusing, awarenessData) {
21
+ const { awareness } = provider;
22
+ let localState = awareness.getLocalState();
23
+ if (localState === null) {
24
+ localState = {
25
+ anchorPos: null,
26
+ awarenessData,
27
+ color,
28
+ focusPos: null,
29
+ focusing: focusing,
30
+ name,
31
+ };
32
+ }
33
+ localState.focusing = focusing;
34
+ awareness.setLocalState(localState);
35
+ }
@@ -0,0 +1,5 @@
1
+ import { CollabDecoratorNode } from "./CollabDecoratorNode";
2
+ import { CollabElementNode } from "./CollabElementNode";
3
+ import { CollabLineBreakNode } from "./CollabLineBreakNode";
4
+ import { CollabTextNode } from "./CollabTextNode";
5
+ export type AnyCollabNode = CollabDecoratorNode | CollabElementNode | CollabTextNode | CollabLineBreakNode;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ import type { XmlElement } from 'yjs';
2
+ import type { DecoratorNode, NodeKey, NodeMap } from 'lexical';
3
+ import type { Binding } from '../Bindings';
4
+ import type { CollabElementNode } from './CollabElementNode';
5
+ export declare class CollabDecoratorNode {
6
+ _xmlElem: XmlElement;
7
+ _key: NodeKey;
8
+ _parent: CollabElementNode;
9
+ _type: string;
10
+ constructor(xmlElem: XmlElement, parent: CollabElementNode, type: string);
11
+ getPrevNode(nodeMap: null | NodeMap): null | DecoratorNode<unknown>;
12
+ getNode(): null | DecoratorNode<unknown>;
13
+ getSharedType(): XmlElement;
14
+ getType(): string;
15
+ getKey(): NodeKey;
16
+ getSize(): number;
17
+ getOffset(): number;
18
+ syncPropertiesFromLexical(binding: Binding, nextLexicalNode: DecoratorNode<unknown>, prevNodeMap: null | NodeMap): void;
19
+ syncPropertiesFromYjs(binding: Binding, keysChanged: null | Set<string>): void;
20
+ destroy(binding: Binding): void;
21
+ }
22
+ export declare function $createCollabDecoratorNode(xmlElem: XmlElement, parent: CollabElementNode, type: string): CollabDecoratorNode;
@@ -0,0 +1,64 @@
1
+ import { $getNodeByKey, $isDecoratorNode } from 'lexical';
2
+ import invariant from '../../utils/invariant';
3
+ import { $syncPropertiesFromYjs, syncPropertiesFromLexical } from '../utils/Utils';
4
+ export class CollabDecoratorNode {
5
+ _xmlElem;
6
+ _key;
7
+ _parent;
8
+ _type;
9
+ constructor(xmlElem, parent, type) {
10
+ this._key = '';
11
+ this._xmlElem = xmlElem;
12
+ this._parent = parent;
13
+ this._type = type;
14
+ }
15
+ getPrevNode(nodeMap) {
16
+ if (nodeMap === null) {
17
+ return null;
18
+ }
19
+ const node = nodeMap.get(this._key);
20
+ return $isDecoratorNode(node) ? node : null;
21
+ }
22
+ getNode() {
23
+ const node = $getNodeByKey(this._key);
24
+ return $isDecoratorNode(node) ? node : null;
25
+ }
26
+ getSharedType() {
27
+ return this._xmlElem;
28
+ }
29
+ getType() {
30
+ return this._type;
31
+ }
32
+ getKey() {
33
+ return this._key;
34
+ }
35
+ getSize() {
36
+ return 1;
37
+ }
38
+ getOffset() {
39
+ const collabElementNode = this._parent;
40
+ return collabElementNode.getChildOffset(this);
41
+ }
42
+ syncPropertiesFromLexical(binding, nextLexicalNode, prevNodeMap) {
43
+ const prevLexicalNode = this.getPrevNode(prevNodeMap);
44
+ const xmlElem = this._xmlElem;
45
+ syncPropertiesFromLexical(binding, xmlElem, prevLexicalNode, nextLexicalNode);
46
+ }
47
+ syncPropertiesFromYjs(binding, keysChanged) {
48
+ const lexicalNode = this.getNode();
49
+ invariant(lexicalNode !== null, 'syncPropertiesFromYjs: could not find decorator node');
50
+ const xmlElem = this._xmlElem;
51
+ $syncPropertiesFromYjs(binding, xmlElem, lexicalNode, keysChanged);
52
+ }
53
+ destroy(binding) {
54
+ const collabNodeMap = binding.collabNodeMap;
55
+ if (collabNodeMap.get(this._key) === this) {
56
+ collabNodeMap.delete(this._key);
57
+ }
58
+ }
59
+ }
60
+ export function $createCollabDecoratorNode(xmlElem, parent, type) {
61
+ const collabNode = new CollabDecoratorNode(xmlElem, parent, type);
62
+ xmlElem._collabNode = collabNode;
63
+ return collabNode;
64
+ }
@@ -0,0 +1,40 @@
1
+ import type { ElementNode, NodeKey, NodeMap } from 'lexical';
2
+ import type { AbstractType, XmlText } from 'yjs';
3
+ import type { Binding } from '../Bindings';
4
+ import { AnyCollabNode } from './AnyCollabNode';
5
+ type IntentionallyMarkedAsDirtyElement = boolean;
6
+ export declare class CollabElementNode {
7
+ _key: NodeKey;
8
+ _children: Array<AnyCollabNode>;
9
+ _xmlText: XmlText;
10
+ _type: string;
11
+ _parent: null | CollabElementNode;
12
+ constructor(xmlText: XmlText, parent: null | CollabElementNode, type: string);
13
+ getPrevNode(nodeMap: null | NodeMap): null | ElementNode;
14
+ getNode(): null | ElementNode;
15
+ getSharedType(): XmlText;
16
+ getType(): string;
17
+ getKey(): NodeKey;
18
+ isEmpty(): boolean;
19
+ getSize(): number;
20
+ getOffset(): number;
21
+ syncPropertiesFromYjs(binding: Binding, keysChanged: null | Set<string>): void;
22
+ applyChildrenYjsDelta(binding: Binding, deltas: Array<{
23
+ insert?: string | object | AbstractType<unknown>;
24
+ delete?: number;
25
+ retain?: number;
26
+ attributes?: {
27
+ [x: string]: unknown;
28
+ };
29
+ }>): void;
30
+ syncChildrenFromYjs(binding: Binding): void;
31
+ syncPropertiesFromLexical(binding: Binding, nextLexicalNode: ElementNode, prevNodeMap: null | NodeMap): void;
32
+ _syncChildFromLexical(binding: Binding, index: number, key: NodeKey, prevNodeMap: null | NodeMap, dirtyElements: null | Map<NodeKey, IntentionallyMarkedAsDirtyElement>, dirtyLeaves: null | Set<NodeKey>): void;
33
+ syncChildrenFromLexical(binding: Binding, nextLexicalNode: ElementNode, prevNodeMap: null | NodeMap, dirtyElements: null | Map<NodeKey, IntentionallyMarkedAsDirtyElement>, dirtyLeaves: null | Set<NodeKey>): void;
34
+ append(collabNode: AnyCollabNode): void;
35
+ splice(binding: Binding, index: number, delCount: number, collabNode?: AnyCollabNode): void;
36
+ getChildOffset(collabNode: AnyCollabNode): number;
37
+ destroy(binding: Binding): void;
38
+ }
39
+ export declare function $createCollabElementNode(xmlText: XmlText, parent: null | CollabElementNode, type: string): CollabElementNode;
40
+ export {};