@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,54 @@
1
+ /*
2
+ * Copyright (c) 2023-2025 Datalayer, Inc.
3
+ * Distributed under the terms of the MIT License.
4
+ */
5
+ import { $applyNodeReplacement, TextNode } from 'lexical';
6
+ export class EmojiNode extends TextNode {
7
+ __className;
8
+ static getType() {
9
+ return 'emoji';
10
+ }
11
+ static clone(node) {
12
+ return new EmojiNode(node.__className, node.__text, node.__key);
13
+ }
14
+ constructor(className, text, key) {
15
+ super(text, key);
16
+ this.__className = className;
17
+ }
18
+ createDOM(config) {
19
+ const dom = document.createElement('span');
20
+ const inner = super.createDOM(config);
21
+ dom.className = this.__className;
22
+ inner.className = 'emoji-inner';
23
+ dom.appendChild(inner);
24
+ return dom;
25
+ }
26
+ updateDOM(prevNode, dom, config) {
27
+ const inner = dom.firstChild;
28
+ if (inner === null) {
29
+ return true;
30
+ }
31
+ super.updateDOM(prevNode, inner, config);
32
+ return false;
33
+ }
34
+ static importJSON(serializedNode) {
35
+ return $createEmojiNode(serializedNode.className, serializedNode.text).updateFromJSON(serializedNode);
36
+ }
37
+ exportJSON() {
38
+ return {
39
+ ...super.exportJSON(),
40
+ className: this.getClassName(),
41
+ };
42
+ }
43
+ getClassName() {
44
+ const self = this.getLatest();
45
+ return self.__className;
46
+ }
47
+ }
48
+ export function $isEmojiNode(node) {
49
+ return node instanceof EmojiNode;
50
+ }
51
+ export function $createEmojiNode(className, emojiText) {
52
+ const node = new EmojiNode(className, emojiText).setMode('token');
53
+ return $applyNodeReplacement(node);
54
+ }
@@ -0,0 +1,9 @@
1
+ import type { JSX } from 'react';
2
+ import { NodeKey } from 'lexical';
3
+ type EquationComponentProps = {
4
+ equation: string;
5
+ inline: boolean;
6
+ nodeKey: NodeKey;
7
+ };
8
+ export default function EquationComponent({ equation, inline, nodeKey, }: EquationComponentProps): JSX.Element;
9
+ export {};
@@ -0,0 +1,75 @@
1
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
3
+ import { useLexicalEditable } from '@lexical/react/useLexicalEditable';
4
+ import { mergeRegister } from '@lexical/utils';
5
+ import { $getNodeByKey, $getSelection, $isNodeSelection, COMMAND_PRIORITY_HIGH, KEY_ESCAPE_COMMAND, SELECTION_CHANGE_COMMAND, } from 'lexical';
6
+ import { useCallback, useEffect, useRef, useState } from 'react';
7
+ import { ErrorBoundary } from 'react-error-boundary';
8
+ import EquationEditor from '../ui/EquationEditor';
9
+ import KatexRenderer from '../ui/KatexRenderer';
10
+ import { $isEquationNode } from './EquationNode';
11
+ export default function EquationComponent({ equation, inline, nodeKey, }) {
12
+ const [editor] = useLexicalComposerContext();
13
+ const isEditable = useLexicalEditable();
14
+ const [equationValue, setEquationValue] = useState(equation);
15
+ const [showEquationEditor, setShowEquationEditor] = useState(false);
16
+ const inputRef = useRef(null);
17
+ const onHide = useCallback((restoreSelection) => {
18
+ setShowEquationEditor(false);
19
+ editor.update(() => {
20
+ const node = $getNodeByKey(nodeKey);
21
+ if ($isEquationNode(node)) {
22
+ node.setEquation(equationValue);
23
+ if (restoreSelection) {
24
+ node.selectNext(0, 0);
25
+ }
26
+ }
27
+ });
28
+ }, [editor, equationValue, nodeKey]);
29
+ useEffect(() => {
30
+ if (!showEquationEditor && equationValue !== equation) {
31
+ setEquationValue(equation);
32
+ }
33
+ }, [showEquationEditor, equation, equationValue]);
34
+ useEffect(() => {
35
+ if (!isEditable) {
36
+ return;
37
+ }
38
+ if (showEquationEditor) {
39
+ return mergeRegister(editor.registerCommand(SELECTION_CHANGE_COMMAND, (payload) => {
40
+ const activeElement = document.activeElement;
41
+ const inputElem = inputRef.current;
42
+ if (inputElem !== activeElement) {
43
+ onHide();
44
+ }
45
+ return false;
46
+ }, COMMAND_PRIORITY_HIGH), editor.registerCommand(KEY_ESCAPE_COMMAND, (payload) => {
47
+ const activeElement = document.activeElement;
48
+ const inputElem = inputRef.current;
49
+ if (inputElem === activeElement) {
50
+ onHide(true);
51
+ return true;
52
+ }
53
+ return false;
54
+ }, COMMAND_PRIORITY_HIGH));
55
+ }
56
+ else {
57
+ return editor.registerUpdateListener(({ editorState }) => {
58
+ const isSelected = editorState.read(() => {
59
+ const selection = $getSelection();
60
+ return ($isNodeSelection(selection) &&
61
+ selection.has(nodeKey) &&
62
+ selection.getNodes().length === 1);
63
+ });
64
+ if (isSelected) {
65
+ setShowEquationEditor(true);
66
+ }
67
+ });
68
+ }
69
+ }, [editor, nodeKey, onHide, showEquationEditor, isEditable]);
70
+ return (_jsx(_Fragment, { children: showEquationEditor && isEditable ? (_jsx(EquationEditor, { equation: equationValue, setEquation: setEquationValue, inline: inline, ref: inputRef })) : (_jsx(ErrorBoundary, { onError: (e) => editor._onError(e), fallback: null, children: _jsx(KatexRenderer, { equation: equationValue, inline: inline, onDoubleClick: () => {
71
+ if (isEditable) {
72
+ setShowEquationEditor(true);
73
+ }
74
+ } }) })) }));
75
+ }
@@ -0,0 +1,26 @@
1
+ import type { DOMConversionMap, EditorConfig, LexicalNode, NodeKey, SerializedLexicalNode, Spread } from 'lexical';
2
+ import type { JSX } from 'react';
3
+ import { DecoratorNode, DOMExportOutput } from 'lexical';
4
+ export type SerializedEquationNode = Spread<{
5
+ equation: string;
6
+ inline: boolean;
7
+ }, SerializedLexicalNode>;
8
+ export declare class EquationNode extends DecoratorNode<JSX.Element> {
9
+ __equation: string;
10
+ __inline: boolean;
11
+ static getType(): string;
12
+ static clone(node: EquationNode): EquationNode;
13
+ constructor(equation: string, inline?: boolean, key?: NodeKey);
14
+ static importJSON(serializedNode: SerializedEquationNode): EquationNode;
15
+ exportJSON(): SerializedEquationNode;
16
+ createDOM(_config: EditorConfig): HTMLElement;
17
+ exportDOM(): DOMExportOutput;
18
+ static importDOM(): DOMConversionMap | null;
19
+ updateDOM(prevNode: this): boolean;
20
+ getTextContent(): string;
21
+ getEquation(): string;
22
+ setEquation(equation: string): void;
23
+ decorate(): JSX.Element;
24
+ }
25
+ export declare function $createEquationNode(equation?: string, inline?: boolean): EquationNode;
26
+ export declare function $isEquationNode(node: LexicalNode | null | undefined): node is EquationNode;
@@ -0,0 +1,109 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import katex from 'katex';
3
+ import { $applyNodeReplacement, DecoratorNode } from 'lexical';
4
+ import * as React from 'react';
5
+ const EquationComponent = React.lazy(() => import('./EquationComponent'));
6
+ function $convertEquationElement(domNode) {
7
+ let equation = domNode.getAttribute('data-lexical-equation');
8
+ const inline = domNode.getAttribute('data-lexical-inline') === 'true';
9
+ // Decode the equation from base64
10
+ equation = atob(equation || '');
11
+ if (equation) {
12
+ const node = $createEquationNode(equation, inline);
13
+ return { node };
14
+ }
15
+ return null;
16
+ }
17
+ export class EquationNode extends DecoratorNode {
18
+ __equation;
19
+ __inline;
20
+ static getType() {
21
+ return 'equation';
22
+ }
23
+ static clone(node) {
24
+ return new EquationNode(node.__equation, node.__inline, node.__key);
25
+ }
26
+ constructor(equation, inline, key) {
27
+ super(key);
28
+ this.__equation = equation;
29
+ this.__inline = inline ?? false;
30
+ }
31
+ static importJSON(serializedNode) {
32
+ return $createEquationNode(serializedNode.equation, serializedNode.inline).updateFromJSON(serializedNode);
33
+ }
34
+ exportJSON() {
35
+ return {
36
+ ...super.exportJSON(),
37
+ equation: this.getEquation(),
38
+ inline: this.__inline,
39
+ };
40
+ }
41
+ createDOM(_config) {
42
+ const element = document.createElement(this.__inline ? 'span' : 'div');
43
+ // EquationNodes should implement `user-action:none` in their CSS to avoid issues with deletion on Android.
44
+ element.className = 'editor-equation';
45
+ return element;
46
+ }
47
+ exportDOM() {
48
+ const element = document.createElement(this.__inline ? 'span' : 'div');
49
+ // Encode the equation as base64 to avoid issues with special characters
50
+ const equation = btoa(this.__equation);
51
+ element.setAttribute('data-lexical-equation', equation);
52
+ element.setAttribute('data-lexical-inline', `${this.__inline}`);
53
+ katex.render(this.__equation, element, {
54
+ displayMode: !this.__inline, // true === block display //
55
+ errorColor: '#cc0000',
56
+ output: 'html',
57
+ strict: 'warn',
58
+ throwOnError: false,
59
+ trust: false,
60
+ });
61
+ return { element };
62
+ }
63
+ static importDOM() {
64
+ return {
65
+ div: (domNode) => {
66
+ if (!domNode.hasAttribute('data-lexical-equation')) {
67
+ return null;
68
+ }
69
+ return {
70
+ conversion: $convertEquationElement,
71
+ priority: 2,
72
+ };
73
+ },
74
+ span: (domNode) => {
75
+ if (!domNode.hasAttribute('data-lexical-equation')) {
76
+ return null;
77
+ }
78
+ return {
79
+ conversion: $convertEquationElement,
80
+ priority: 1,
81
+ };
82
+ },
83
+ };
84
+ }
85
+ updateDOM(prevNode) {
86
+ // If the inline property changes, replace the element
87
+ return this.__inline !== prevNode.__inline;
88
+ }
89
+ getTextContent() {
90
+ return this.__equation;
91
+ }
92
+ getEquation() {
93
+ return this.__equation;
94
+ }
95
+ setEquation(equation) {
96
+ const writable = this.getWritable();
97
+ writable.__equation = equation;
98
+ }
99
+ decorate() {
100
+ return (_jsx(EquationComponent, { equation: this.__equation, inline: this.__inline, nodeKey: this.__key }));
101
+ }
102
+ }
103
+ export function $createEquationNode(equation = '', inline = false) {
104
+ const equationNode = new EquationNode(equation, inline);
105
+ return $applyNodeReplacement(equationNode);
106
+ }
107
+ export function $isEquationNode(node) {
108
+ return node instanceof EquationNode;
109
+ }
@@ -0,0 +1,8 @@
1
+ import type { NodeKey } from 'lexical';
2
+ import type { JSX } from 'react';
3
+ export default function ExcalidrawComponent({ nodeKey, data, width, height, }: {
4
+ data: string;
5
+ nodeKey: NodeKey;
6
+ width: 'inherit' | number;
7
+ height: 'inherit' | number;
8
+ }): JSX.Element;
@@ -0,0 +1,110 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
3
+ import { useLexicalEditable } from '@lexical/react/useLexicalEditable';
4
+ import { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection';
5
+ import { mergeRegister } from '@lexical/utils';
6
+ import { $getNodeByKey, CLICK_COMMAND, COMMAND_PRIORITY_LOW, isDOMNode, } from 'lexical';
7
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
8
+ import ExcalidrawModal from '../../ui/ExcalidrawModal';
9
+ import ImageResizer from '../../ui/ImageResizer';
10
+ import { $isExcalidrawNode } from '.';
11
+ import ExcalidrawImage from './ExcalidrawImage';
12
+ export default function ExcalidrawComponent({ nodeKey, data, width, height, }) {
13
+ const [editor] = useLexicalComposerContext();
14
+ const isEditable = useLexicalEditable();
15
+ const [isModalOpen, setModalOpen] = useState(data === '[]' && editor.isEditable());
16
+ const imageContainerRef = useRef(null);
17
+ const buttonRef = useRef(null);
18
+ const captionButtonRef = useRef(null);
19
+ const [isSelected, setSelected, clearSelection] = useLexicalNodeSelection(nodeKey);
20
+ const [isResizing, setIsResizing] = useState(false);
21
+ useEffect(() => {
22
+ if (!isEditable) {
23
+ if (isSelected) {
24
+ clearSelection();
25
+ }
26
+ return;
27
+ }
28
+ return mergeRegister(editor.registerCommand(CLICK_COMMAND, (event) => {
29
+ const buttonElem = buttonRef.current;
30
+ const eventTarget = event.target;
31
+ if (isResizing) {
32
+ return true;
33
+ }
34
+ if (buttonElem !== null &&
35
+ isDOMNode(eventTarget) &&
36
+ buttonElem.contains(eventTarget)) {
37
+ if (!event.shiftKey) {
38
+ clearSelection();
39
+ }
40
+ setSelected(!isSelected);
41
+ if (event.detail > 1) {
42
+ setModalOpen(true);
43
+ }
44
+ return true;
45
+ }
46
+ return false;
47
+ }, COMMAND_PRIORITY_LOW));
48
+ }, [clearSelection, editor, isSelected, isResizing, setSelected, isEditable]);
49
+ const deleteNode = useCallback(() => {
50
+ setModalOpen(false);
51
+ return editor.update(() => {
52
+ const node = $getNodeByKey(nodeKey);
53
+ if (node) {
54
+ node.remove();
55
+ }
56
+ });
57
+ }, [editor, nodeKey]);
58
+ const setData = (els, aps, fls) => {
59
+ return editor.update(() => {
60
+ const node = $getNodeByKey(nodeKey);
61
+ if ($isExcalidrawNode(node)) {
62
+ if ((els && els.length > 0) || Object.keys(fls).length > 0) {
63
+ node.setData(JSON.stringify({
64
+ appState: aps,
65
+ elements: els,
66
+ files: fls,
67
+ }));
68
+ }
69
+ else {
70
+ node.remove();
71
+ }
72
+ }
73
+ });
74
+ };
75
+ const onResizeStart = () => {
76
+ setIsResizing(true);
77
+ };
78
+ const onResizeEnd = (nextWidth, nextHeight) => {
79
+ // Delay hiding the resize bars for click case
80
+ setTimeout(() => {
81
+ setIsResizing(false);
82
+ }, 200);
83
+ editor.update(() => {
84
+ const node = $getNodeByKey(nodeKey);
85
+ if ($isExcalidrawNode(node)) {
86
+ node.setWidth(nextWidth);
87
+ node.setHeight(nextHeight);
88
+ }
89
+ });
90
+ };
91
+ const openModal = useCallback(() => {
92
+ setModalOpen(true);
93
+ }, []);
94
+ const { elements = [], files = {}, appState = {}, } = useMemo(() => JSON.parse(data), [data]);
95
+ const closeModal = useCallback(() => {
96
+ setModalOpen(false);
97
+ if (elements.length === 0) {
98
+ editor.update(() => {
99
+ const node = $getNodeByKey(nodeKey);
100
+ if (node) {
101
+ node.remove();
102
+ }
103
+ });
104
+ }
105
+ }, [editor, nodeKey, elements.length]);
106
+ return (_jsxs(_Fragment, { children: [isEditable && isModalOpen && (_jsx(ExcalidrawModal, { initialElements: elements, initialFiles: files, initialAppState: appState, isShown: isModalOpen, onDelete: deleteNode, onClose: closeModal, onSave: (els, aps, fls) => {
107
+ setData(els, aps, fls);
108
+ setModalOpen(false);
109
+ }, closeOnClickOutside: false })), elements.length > 0 && (_jsxs("button", { ref: buttonRef, className: `excalidraw-button ${isSelected ? 'selected' : ''}`, children: [_jsx(ExcalidrawImage, { imageContainerRef: imageContainerRef, className: "image", elements: elements, files: files, appState: appState, width: width, height: height }), isSelected && isEditable && (_jsx("div", { className: "image-edit-button", role: "button", tabIndex: 0, onMouseDown: (event) => event.preventDefault(), onClick: openModal })), (isSelected || isResizing) && isEditable && (_jsx(ImageResizer, { buttonRef: captionButtonRef, showCaption: true, setShowCaption: () => null, imageRef: imageContainerRef, editor: editor, onResizeStart: onResizeStart, onResizeEnd: onResizeEnd, captionsEnabled: true }))] }))] }));
110
+ }
@@ -0,0 +1,50 @@
1
+ import type { ExcalidrawElement, NonDeleted } from '@excalidraw/excalidraw/element/types';
2
+ import type { AppState, BinaryFiles } from '@excalidraw/excalidraw/types';
3
+ import type { JSX } from 'react';
4
+ import * as React from 'react';
5
+ type ImageType = 'svg' | 'canvas';
6
+ type Dimension = 'inherit' | number;
7
+ type Props = {
8
+ /**
9
+ * Configures the export setting for SVG/Canvas
10
+ */
11
+ appState: AppState;
12
+ /**
13
+ * The css class applied to image to be rendered
14
+ */
15
+ className?: string;
16
+ /**
17
+ * The Excalidraw elements to be rendered as an image
18
+ */
19
+ elements: NonDeleted<ExcalidrawElement>[];
20
+ /**
21
+ * The Excalidraw files associated with the elements
22
+ */
23
+ files: BinaryFiles;
24
+ /**
25
+ * The height of the image to be rendered
26
+ */
27
+ height?: Dimension;
28
+ /**
29
+ * The ref object to be used to render the image
30
+ */
31
+ imageContainerRef: React.MutableRefObject<HTMLDivElement | null>;
32
+ /**
33
+ * The type of image to be rendered
34
+ */
35
+ imageType?: ImageType;
36
+ /**
37
+ * The css class applied to the root element of this component
38
+ */
39
+ rootClassName?: string | null;
40
+ /**
41
+ * The width of the image to be rendered
42
+ */
43
+ width?: Dimension;
44
+ };
45
+ /**
46
+ * @explorer-desc
47
+ * A component for rendering Excalidraw elements as a static image
48
+ */
49
+ export default function ExcalidrawImage({ elements, files, imageContainerRef, appState, rootClassName, width, height, }: Props): JSX.Element;
50
+ export {};
@@ -0,0 +1,55 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { exportToSvg } from '@excalidraw/excalidraw';
3
+ import { useEffect, useState } from 'react';
4
+ // exportToSvg has fonts from excalidraw.com
5
+ // We don't want them to be used in open source
6
+ const removeStyleFromSvg_HACK = (svg) => {
7
+ const styleTag = svg?.firstElementChild?.firstElementChild;
8
+ // Generated SVG is getting double-sized by height and width attributes
9
+ // We want to match the real size of the SVG element
10
+ const viewBox = svg.getAttribute('viewBox');
11
+ if (viewBox != null) {
12
+ const viewBoxDimensions = viewBox.split(' ');
13
+ svg.setAttribute('width', viewBoxDimensions[2]);
14
+ svg.setAttribute('height', viewBoxDimensions[3]);
15
+ }
16
+ if (styleTag && styleTag.tagName === 'style') {
17
+ styleTag.remove();
18
+ }
19
+ };
20
+ /**
21
+ * @explorer-desc
22
+ * A component for rendering Excalidraw elements as a static image
23
+ */
24
+ export default function ExcalidrawImage({ elements, files, imageContainerRef, appState, rootClassName = null, width = 'inherit', height = 'inherit', }) {
25
+ const [Svg, setSvg] = useState(null);
26
+ useEffect(() => {
27
+ const setContent = async () => {
28
+ const svg = await exportToSvg({
29
+ appState,
30
+ elements,
31
+ files,
32
+ });
33
+ removeStyleFromSvg_HACK(svg);
34
+ svg.setAttribute('width', '100%');
35
+ svg.setAttribute('height', '100%');
36
+ svg.setAttribute('display', 'block');
37
+ setSvg(svg);
38
+ };
39
+ setContent();
40
+ }, [elements, files, appState]);
41
+ const containerStyle = {};
42
+ if (width !== 'inherit') {
43
+ containerStyle.width = `${width}px`;
44
+ }
45
+ if (height !== 'inherit') {
46
+ containerStyle.height = `${height}px`;
47
+ }
48
+ return (_jsx("div", { ref: (node) => {
49
+ if (node) {
50
+ if (imageContainerRef) {
51
+ imageContainerRef.current = node;
52
+ }
53
+ }
54
+ }, className: rootClassName ?? '', style: containerStyle, dangerouslySetInnerHTML: { __html: Svg?.outerHTML ?? '' } }));
55
+ }
@@ -0,0 +1,32 @@
1
+ import type { DOMConversionMap, DOMExportOutput, EditorConfig, LexicalEditor, LexicalNode, NodeKey, SerializedLexicalNode, Spread } from 'lexical';
2
+ import type { JSX } from 'react';
3
+ import { DecoratorNode } from 'lexical';
4
+ type Dimension = number | 'inherit';
5
+ export type SerializedExcalidrawNode = Spread<{
6
+ data: string;
7
+ width?: Dimension;
8
+ height?: Dimension;
9
+ }, SerializedLexicalNode>;
10
+ export declare class ExcalidrawNode extends DecoratorNode<JSX.Element> {
11
+ __data: string;
12
+ __width: Dimension;
13
+ __height: Dimension;
14
+ static getType(): string;
15
+ static clone(node: ExcalidrawNode): ExcalidrawNode;
16
+ static importJSON(serializedNode: SerializedExcalidrawNode): ExcalidrawNode;
17
+ exportJSON(): SerializedExcalidrawNode;
18
+ constructor(data?: string, width?: Dimension, height?: Dimension, key?: NodeKey);
19
+ createDOM(config: EditorConfig): HTMLElement;
20
+ updateDOM(): false;
21
+ static importDOM(): DOMConversionMap<HTMLSpanElement> | null;
22
+ exportDOM(editor: LexicalEditor): DOMExportOutput;
23
+ setData(data: string): void;
24
+ getWidth(): Dimension;
25
+ setWidth(width: Dimension): void;
26
+ getHeight(): Dimension;
27
+ setHeight(height: Dimension): void;
28
+ decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element;
29
+ }
30
+ export declare function $createExcalidrawNode(data?: string, width?: Dimension, height?: Dimension): ExcalidrawNode;
31
+ export declare function $isExcalidrawNode(node: LexicalNode | null | undefined): node is ExcalidrawNode;
32
+ export {};
@@ -0,0 +1,117 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { DecoratorNode } from 'lexical';
3
+ import * as React from 'react';
4
+ const ExcalidrawComponent = React.lazy(() => import('./ExcalidrawComponent'));
5
+ function $convertExcalidrawElement(domNode) {
6
+ const excalidrawData = domNode.getAttribute('data-lexical-excalidraw-json');
7
+ const styleAttributes = window.getComputedStyle(domNode);
8
+ const heightStr = styleAttributes.getPropertyValue('height');
9
+ const widthStr = styleAttributes.getPropertyValue('width');
10
+ const height = !heightStr || heightStr === 'inherit' ? 'inherit' : parseInt(heightStr, 10);
11
+ const width = !widthStr || widthStr === 'inherit' ? 'inherit' : parseInt(widthStr, 10);
12
+ if (excalidrawData) {
13
+ const node = $createExcalidrawNode(excalidrawData, width, height);
14
+ return {
15
+ node,
16
+ };
17
+ }
18
+ return null;
19
+ }
20
+ export class ExcalidrawNode extends DecoratorNode {
21
+ __data;
22
+ __width;
23
+ __height;
24
+ static getType() {
25
+ return 'excalidraw';
26
+ }
27
+ static clone(node) {
28
+ return new ExcalidrawNode(node.__data, node.__width, node.__height, node.__key);
29
+ }
30
+ static importJSON(serializedNode) {
31
+ return new ExcalidrawNode(serializedNode.data, serializedNode.width ?? 'inherit', serializedNode.height ?? 'inherit').updateFromJSON(serializedNode);
32
+ }
33
+ exportJSON() {
34
+ return {
35
+ ...super.exportJSON(),
36
+ data: this.__data,
37
+ height: this.__height === 'inherit' ? undefined : this.__height,
38
+ width: this.__width === 'inherit' ? undefined : this.__width,
39
+ };
40
+ }
41
+ constructor(data = '[]', width = 'inherit', height = 'inherit', key) {
42
+ super(key);
43
+ this.__data = data;
44
+ this.__width = width;
45
+ this.__height = height;
46
+ }
47
+ // View
48
+ createDOM(config) {
49
+ const span = document.createElement('span');
50
+ const theme = config.theme;
51
+ const className = theme.image;
52
+ if (className !== undefined) {
53
+ span.className = className;
54
+ }
55
+ return span;
56
+ }
57
+ updateDOM() {
58
+ return false;
59
+ }
60
+ static importDOM() {
61
+ return {
62
+ span: (domNode) => {
63
+ if (!domNode.hasAttribute('data-lexical-excalidraw-json')) {
64
+ return null;
65
+ }
66
+ return {
67
+ conversion: $convertExcalidrawElement,
68
+ priority: 1,
69
+ };
70
+ },
71
+ };
72
+ }
73
+ exportDOM(editor) {
74
+ const element = document.createElement('span');
75
+ element.style.display = 'inline-block';
76
+ const content = editor.getElementByKey(this.getKey());
77
+ if (content !== null) {
78
+ const svg = content.querySelector('svg');
79
+ if (svg !== null) {
80
+ element.innerHTML = svg.outerHTML;
81
+ }
82
+ }
83
+ element.style.width =
84
+ this.__width === 'inherit' ? 'inherit' : `${this.__width}px`;
85
+ element.style.height =
86
+ this.__height === 'inherit' ? 'inherit' : `${this.__height}px`;
87
+ element.setAttribute('data-lexical-excalidraw-json', this.__data);
88
+ return { element };
89
+ }
90
+ setData(data) {
91
+ const self = this.getWritable();
92
+ self.__data = data;
93
+ }
94
+ getWidth() {
95
+ return this.getLatest().__width;
96
+ }
97
+ setWidth(width) {
98
+ const self = this.getWritable();
99
+ self.__width = width;
100
+ }
101
+ getHeight() {
102
+ return this.getLatest().__height;
103
+ }
104
+ setHeight(height) {
105
+ const self = this.getWritable();
106
+ self.__height = height;
107
+ }
108
+ decorate(editor, config) {
109
+ return (_jsx(ExcalidrawComponent, { nodeKey: this.getKey(), data: this.__data, width: this.__width, height: this.__height }));
110
+ }
111
+ }
112
+ export function $createExcalidrawNode(data = '[]', width = 'inherit', height = 'inherit') {
113
+ return new ExcalidrawNode(data, width, height);
114
+ }
115
+ export function $isExcalidrawNode(node) {
116
+ return node instanceof ExcalidrawNode;
117
+ }
@@ -0,0 +1,20 @@
1
+ import type { EditorConfig, ElementFormatType, LexicalEditor, LexicalNode, NodeKey, Spread } from 'lexical';
2
+ import type { JSX } from 'react';
3
+ import { DecoratorBlockNode, SerializedDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode';
4
+ export type SerializedFigmaNode = Spread<{
5
+ documentID: string;
6
+ }, SerializedDecoratorBlockNode>;
7
+ export declare class FigmaNode extends DecoratorBlockNode {
8
+ __id: string;
9
+ static getType(): string;
10
+ static clone(node: FigmaNode): FigmaNode;
11
+ static importJSON(serializedNode: SerializedFigmaNode): FigmaNode;
12
+ exportJSON(): SerializedFigmaNode;
13
+ constructor(id: string, format?: ElementFormatType, key?: NodeKey);
14
+ updateDOM(): false;
15
+ getId(): string;
16
+ getTextContent(_includeInert?: boolean | undefined, _includeDirectionless?: false | undefined): string;
17
+ decorate(_editor: LexicalEditor, config: EditorConfig): JSX.Element;
18
+ }
19
+ export declare function $createFigmaNode(documentID: string): FigmaNode;
20
+ export declare function $isFigmaNode(node: FigmaNode | LexicalNode | null | undefined): node is FigmaNode;