@datalayer/lexical-loro 0.0.7 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (406) hide show
  1. package/README.md +24 -137
  2. package/lib/App.d.ts +2 -0
  3. package/lib/App.js +141 -0
  4. package/lib/Editor.d.ts +2 -0
  5. package/lib/Editor.js +111 -0
  6. package/lib/Settings.d.ts +2 -0
  7. package/lib/Settings.js +57 -0
  8. package/lib/appSettings.d.ts +36 -0
  9. package/lib/appSettings.js +44 -0
  10. package/lib/collab/loro/Bindings.d.ts +41 -0
  11. package/lib/collab/loro/Bindings.js +95 -0
  12. package/lib/collab/loro/Debug.d.ts +33 -0
  13. package/lib/collab/loro/Debug.js +448 -0
  14. package/lib/collab/loro/LexicalCollaborationContext.d.ts +19 -0
  15. package/lib/collab/loro/LexicalCollaborationContext.js +48 -0
  16. package/lib/collab/loro/LexicalCollaborationPlugin.d.ts +24 -0
  17. package/lib/collab/loro/LexicalCollaborationPlugin.js +83 -0
  18. package/lib/collab/loro/State.d.ts +53 -0
  19. package/lib/collab/loro/State.js +90 -0
  20. package/lib/collab/loro/components/LoroCollaborationUI.d.ts +13 -0
  21. package/lib/collab/loro/components/LoroCollaborationUI.js +9 -0
  22. package/lib/collab/loro/components/LoroCollaborators.d.ts +8 -0
  23. package/lib/collab/loro/components/LoroCollaborators.js +97 -0
  24. package/lib/collab/loro/components/index.d.ts +2 -0
  25. package/lib/collab/loro/components/index.js +2 -0
  26. package/lib/collab/loro/index.d.ts +6 -0
  27. package/lib/collab/loro/index.js +6 -0
  28. package/lib/collab/loro/integrators/BaseIntegrator.d.ts +14 -0
  29. package/lib/collab/loro/integrators/BaseIntegrator.js +1 -0
  30. package/lib/collab/loro/integrators/CounterIntegrator.d.ts +23 -0
  31. package/lib/collab/loro/integrators/CounterIntegrator.js +40 -0
  32. package/lib/collab/loro/integrators/ListIntegrator.d.ts +23 -0
  33. package/lib/collab/loro/integrators/ListIntegrator.js +49 -0
  34. package/lib/collab/loro/integrators/MapIntegrator.d.ts +24 -0
  35. package/lib/collab/loro/integrators/MapIntegrator.js +177 -0
  36. package/lib/collab/loro/integrators/TextIntegrator.d.ts +25 -0
  37. package/lib/collab/loro/integrators/TextIntegrator.js +51 -0
  38. package/lib/collab/loro/integrators/TreeIntegrator.d.ts +25 -0
  39. package/lib/collab/loro/integrators/TreeIntegrator.js +201 -0
  40. package/lib/collab/loro/nodes/NodeFactory.d.ts +8 -0
  41. package/lib/collab/loro/nodes/NodeFactory.js +105 -0
  42. package/lib/collab/loro/nodes/NodesMapper.d.ts +111 -0
  43. package/lib/collab/loro/nodes/NodesMapper.js +258 -0
  44. package/lib/collab/loro/propagators/DecoratorNodePropagator.d.ts +60 -0
  45. package/lib/collab/loro/propagators/DecoratorNodePropagator.js +302 -0
  46. package/lib/collab/loro/propagators/ElementNodePropagator.d.ts +62 -0
  47. package/lib/collab/loro/propagators/ElementNodePropagator.js +335 -0
  48. package/lib/collab/loro/propagators/LineBreakNodePropagator.d.ts +57 -0
  49. package/lib/collab/loro/propagators/LineBreakNodePropagator.js +196 -0
  50. package/lib/collab/loro/propagators/RootNodePropagator.d.ts +55 -0
  51. package/lib/collab/loro/propagators/RootNodePropagator.js +168 -0
  52. package/lib/collab/loro/propagators/TextNodePropagator.d.ts +60 -0
  53. package/lib/collab/loro/propagators/TextNodePropagator.js +434 -0
  54. package/lib/collab/loro/propagators/index.d.ts +49 -0
  55. package/lib/collab/loro/propagators/index.js +32 -0
  56. package/lib/collab/loro/provider/websocket.d.ts +116 -0
  57. package/lib/collab/loro/provider/websocket.js +907 -0
  58. package/lib/collab/loro/servers/index.d.ts +0 -0
  59. package/lib/collab/loro/servers/index.js +0 -0
  60. package/lib/collab/loro/servers/ws/callback.d.ts +5 -0
  61. package/lib/collab/loro/servers/ws/callback.js +85 -0
  62. package/lib/collab/loro/servers/ws/server.d.ts +2 -0
  63. package/lib/collab/loro/servers/ws/server.js +25 -0
  64. package/lib/collab/loro/servers/ws/utils.d.ts +40 -0
  65. package/lib/collab/loro/servers/ws/utils.js +513 -0
  66. package/lib/collab/loro/sync/SyncCursors.d.ts +32 -0
  67. package/lib/collab/loro/sync/SyncCursors.js +435 -0
  68. package/lib/collab/loro/sync/SyncLexicalToLoro.d.ts +4 -0
  69. package/lib/collab/loro/sync/SyncLexicalToLoro.js +80 -0
  70. package/lib/collab/loro/sync/SyncLoroToLexical.d.ts +5 -0
  71. package/lib/collab/loro/sync/SyncLoroToLexical.js +96 -0
  72. package/lib/collab/loro/types/LexicalNodeData.d.ts +32 -0
  73. package/lib/collab/loro/types/LexicalNodeData.js +71 -0
  74. package/lib/collab/loro/useCollaboration.d.ts +12 -0
  75. package/lib/collab/loro/useCollaboration.js +248 -0
  76. package/lib/collab/loro/utils/InitialContent.d.ts +64 -0
  77. package/lib/collab/loro/utils/InitialContent.js +109 -0
  78. package/lib/collab/loro/utils/LexicalToLoro.d.ts +18 -0
  79. package/lib/collab/loro/utils/LexicalToLoro.js +96 -0
  80. package/lib/collab/loro/utils/Utils.d.ts +44 -0
  81. package/lib/collab/loro/utils/Utils.js +153 -0
  82. package/lib/collab/loro/wsProvider.d.ts +8 -0
  83. package/lib/collab/loro/wsProvider.js +31 -0
  84. package/lib/collab/utils/invariant.d.ts +1 -0
  85. package/lib/collab/utils/invariant.js +11 -0
  86. package/lib/collab/utils/simpleDiffWithCursor.d.ts +5 -0
  87. package/lib/collab/utils/simpleDiffWithCursor.js +31 -0
  88. package/lib/collab/yjs/Bindings.d.ts +23 -0
  89. package/lib/collab/yjs/Bindings.js +26 -0
  90. package/lib/collab/yjs/Debug.d.ts +23 -0
  91. package/lib/collab/yjs/Debug.js +213 -0
  92. package/lib/collab/yjs/LexicalCollaborationContext.d.ts +10 -0
  93. package/lib/collab/yjs/LexicalCollaborationContext.js +37 -0
  94. package/lib/collab/yjs/LexicalCollaborationPlugin.d.ts +21 -0
  95. package/lib/collab/yjs/LexicalCollaborationPlugin.js +63 -0
  96. package/lib/collab/yjs/State.d.ts +51 -0
  97. package/lib/collab/yjs/State.js +35 -0
  98. package/lib/collab/yjs/nodes/AnyCollabNode.d.ts +5 -0
  99. package/lib/collab/yjs/nodes/AnyCollabNode.js +1 -0
  100. package/lib/collab/yjs/nodes/CollabDecoratorNode.d.ts +22 -0
  101. package/lib/collab/yjs/nodes/CollabDecoratorNode.js +64 -0
  102. package/lib/collab/yjs/nodes/CollabElementNode.d.ts +40 -0
  103. package/lib/collab/yjs/nodes/CollabElementNode.js +462 -0
  104. package/lib/collab/yjs/nodes/CollabLineBreakNode.d.ts +19 -0
  105. package/lib/collab/yjs/nodes/CollabLineBreakNode.js +44 -0
  106. package/lib/collab/yjs/nodes/CollabTextNode.d.ts +25 -0
  107. package/lib/collab/yjs/nodes/CollabTextNode.js +103 -0
  108. package/lib/collab/yjs/provider/websocket.d.ts +88 -0
  109. package/lib/collab/yjs/provider/websocket.js +415 -0
  110. package/lib/collab/yjs/servers/index.d.ts +0 -0
  111. package/lib/collab/yjs/servers/index.js +0 -0
  112. package/lib/collab/yjs/servers/ws/callback.d.ts +5 -0
  113. package/lib/collab/yjs/servers/ws/callback.js +72 -0
  114. package/lib/collab/yjs/servers/ws/server.d.ts +2 -0
  115. package/lib/collab/yjs/servers/ws/server.js +25 -0
  116. package/lib/collab/yjs/servers/ws/utils.d.ts +49 -0
  117. package/lib/collab/yjs/servers/ws/utils.js +284 -0
  118. package/lib/collab/yjs/sync/SyncCursors.d.ts +39 -0
  119. package/lib/collab/yjs/sync/SyncCursors.js +351 -0
  120. package/lib/collab/yjs/sync/SyncEditorStates.d.ts +10 -0
  121. package/lib/collab/yjs/sync/SyncEditorStates.js +200 -0
  122. package/lib/collab/yjs/useCollaboration.d.ts +12 -0
  123. package/lib/collab/yjs/useCollaboration.js +255 -0
  124. package/lib/collab/yjs/utils/Utils.d.ts +25 -0
  125. package/lib/collab/yjs/utils/Utils.js +402 -0
  126. package/lib/collab/yjs/wsProvider.d.ts +3 -0
  127. package/lib/collab/yjs/wsProvider.js +21 -0
  128. package/lib/commenting/index.d.ts +41 -0
  129. package/lib/commenting/index.js +324 -0
  130. package/lib/context/FlashMessageContext.d.ts +7 -0
  131. package/lib/context/FlashMessageContext.js +24 -0
  132. package/lib/context/SettingsContext.d.ts +12 -0
  133. package/lib/context/SettingsContext.js +38 -0
  134. package/lib/context/SharedHistoryContext.d.ts +11 -0
  135. package/lib/context/SharedHistoryContext.js +11 -0
  136. package/lib/context/ToolbarContext.d.ts +65 -0
  137. package/lib/context/ToolbarContext.js +84 -0
  138. package/lib/demo.d.ts +12 -0
  139. package/lib/demo.js +41 -0
  140. package/lib/hooks/useFlashMessage.d.ts +2 -0
  141. package/lib/hooks/useFlashMessage.js +4 -0
  142. package/lib/hooks/useModal.d.ts +5 -0
  143. package/lib/hooks/useModal.js +26 -0
  144. package/lib/hooks/useReport.d.ts +1 -0
  145. package/lib/hooks/useReport.js +46 -0
  146. package/lib/index.d.ts +1 -1
  147. package/lib/index.js +1 -5
  148. package/lib/nodes/AutocompleteNode.d.ts +27 -0
  149. package/lib/nodes/AutocompleteNode.js +56 -0
  150. package/lib/nodes/CounterComponent.d.ts +6 -0
  151. package/lib/nodes/CounterComponent.js +137 -0
  152. package/lib/nodes/CounterNode.d.ts +23 -0
  153. package/lib/nodes/CounterNode.js +47 -0
  154. package/lib/nodes/DateTimeNode/DateTimeComponent.d.ts +8 -0
  155. package/lib/nodes/DateTimeNode/DateTimeComponent.js +119 -0
  156. package/lib/nodes/DateTimeNode/DateTimeNode.d.ts +27 -0
  157. package/lib/nodes/DateTimeNode/DateTimeNode.js +82 -0
  158. package/lib/nodes/EmojiNode.d.ts +18 -0
  159. package/lib/nodes/EmojiNode.js +50 -0
  160. package/lib/nodes/EquationComponent.d.ts +9 -0
  161. package/lib/nodes/EquationComponent.js +75 -0
  162. package/lib/nodes/EquationNode.d.ts +26 -0
  163. package/lib/nodes/EquationNode.js +109 -0
  164. package/lib/nodes/ExcalidrawNode/ExcalidrawComponent.d.ts +8 -0
  165. package/lib/nodes/ExcalidrawNode/ExcalidrawComponent.js +110 -0
  166. package/lib/nodes/ExcalidrawNode/ExcalidrawImage.d.ts +50 -0
  167. package/lib/nodes/ExcalidrawNode/ExcalidrawImage.js +55 -0
  168. package/lib/nodes/ExcalidrawNode/index.d.ts +32 -0
  169. package/lib/nodes/ExcalidrawNode/index.js +117 -0
  170. package/lib/nodes/FigmaNode.d.ts +20 -0
  171. package/lib/nodes/FigmaNode.js +52 -0
  172. package/lib/nodes/ImageComponent.d.ts +16 -0
  173. package/lib/nodes/ImageComponent.js +272 -0
  174. package/lib/nodes/ImageNode.d.ts +50 -0
  175. package/lib/nodes/ImageNode.js +151 -0
  176. package/lib/nodes/InlineImageNode/InlineImageComponent.d.ts +26 -0
  177. package/lib/nodes/InlineImageNode/InlineImageComponent.js +161 -0
  178. package/lib/nodes/InlineImageNode/InlineImageNode.d.ts +59 -0
  179. package/lib/nodes/InlineImageNode/InlineImageNode.js +162 -0
  180. package/lib/nodes/KeywordNode.d.ts +14 -0
  181. package/lib/nodes/KeywordNode.js +33 -0
  182. package/lib/nodes/LayoutContainerNode.d.ts +24 -0
  183. package/lib/nodes/LayoutContainerNode.js +91 -0
  184. package/lib/nodes/LayoutItemNode.d.ts +16 -0
  185. package/lib/nodes/LayoutItemNode.js +65 -0
  186. package/lib/nodes/MentionNode.d.ts +20 -0
  187. package/lib/nodes/MentionNode.js +81 -0
  188. package/lib/nodes/PageBreakNode/index.d.ts +17 -0
  189. package/lib/nodes/PageBreakNode/index.js +83 -0
  190. package/lib/nodes/PlaygroundNodes.d.ts +3 -0
  191. package/lib/nodes/PlaygroundNodes.js +71 -0
  192. package/lib/nodes/PollComponent.d.ts +9 -0
  193. package/lib/nodes/PollComponent.js +85 -0
  194. package/lib/nodes/PollNode.d.ts +43 -0
  195. package/lib/nodes/PollNode.js +153 -0
  196. package/lib/nodes/SpecialTextNode.d.ts +24 -0
  197. package/lib/nodes/SpecialTextNode.js +50 -0
  198. package/lib/nodes/StickyComponent.d.ts +10 -0
  199. package/lib/nodes/StickyComponent.js +162 -0
  200. package/lib/nodes/StickyNode.d.ts +31 -0
  201. package/lib/nodes/StickyNode.js +76 -0
  202. package/lib/nodes/TweetNode.d.ts +21 -0
  203. package/lib/nodes/TweetNode.js +119 -0
  204. package/lib/nodes/YouTubeNode.d.ts +22 -0
  205. package/lib/nodes/YouTubeNode.js +84 -0
  206. package/lib/plugins/ActionsPlugin/index.d.ts +5 -0
  207. package/lib/plugins/ActionsPlugin/index.js +168 -0
  208. package/lib/plugins/AutoEmbedPlugin/index.d.ts +19 -0
  209. package/lib/plugins/AutoEmbedPlugin/index.js +158 -0
  210. package/lib/plugins/AutoLinkPlugin/index.d.ts +2 -0
  211. package/lib/plugins/AutoLinkPlugin/index.js +15 -0
  212. package/lib/plugins/AutocompletePlugin/index.d.ts +10 -0
  213. package/lib/plugins/AutocompletePlugin/index.js +2473 -0
  214. package/lib/plugins/CodeActionMenuPlugin/components/CopyButton/index.d.ts +7 -0
  215. package/lib/plugins/CodeActionMenuPlugin/components/CopyButton/index.js +42 -0
  216. package/lib/plugins/CodeActionMenuPlugin/components/PrettierButton/index.d.ts +17 -0
  217. package/lib/plugins/CodeActionMenuPlugin/components/PrettierButton/index.js +111 -0
  218. package/lib/plugins/CodeActionMenuPlugin/index.d.ts +5 -0
  219. package/lib/plugins/CodeActionMenuPlugin/index.js +104 -0
  220. package/lib/plugins/CodeActionMenuPlugin/utils.d.ts +1 -0
  221. package/lib/plugins/CodeActionMenuPlugin/utils.js +18 -0
  222. package/lib/plugins/CodeHighlightPrismPlugin/index.d.ts +2 -0
  223. package/lib/plugins/CodeHighlightPrismPlugin/index.js +10 -0
  224. package/lib/plugins/CodeHighlightShikiPlugin/index.d.ts +2 -0
  225. package/lib/plugins/CodeHighlightShikiPlugin/index.js +10 -0
  226. package/lib/plugins/CollapsiblePlugin/CollapsibleContainerNode.d.ts +25 -0
  227. package/lib/plugins/CollapsiblePlugin/CollapsibleContainerNode.js +131 -0
  228. package/lib/plugins/CollapsiblePlugin/CollapsibleContentNode.d.ts +16 -0
  229. package/lib/plugins/CollapsiblePlugin/CollapsibleContentNode.js +79 -0
  230. package/lib/plugins/CollapsiblePlugin/CollapsibleTitleNode.d.ts +16 -0
  231. package/lib/plugins/CollapsiblePlugin/CollapsibleTitleNode.js +81 -0
  232. package/lib/plugins/CollapsiblePlugin/CollapsibleUtils.d.ts +2 -0
  233. package/lib/plugins/CollapsiblePlugin/CollapsibleUtils.js +8 -0
  234. package/lib/plugins/CollapsiblePlugin/index.d.ts +3 -0
  235. package/lib/plugins/CollapsiblePlugin/index.js +128 -0
  236. package/lib/plugins/CommentPlugin/index.d.ts +9 -0
  237. package/lib/plugins/CommentPlugin/index.js +460 -0
  238. package/lib/plugins/ComponentPickerPlugin/index.d.ts +2 -0
  239. package/lib/plugins/ComponentPickerPlugin/index.js +276 -0
  240. package/lib/plugins/ContextMenuPlugin/index.d.ts +2 -0
  241. package/lib/plugins/ContextMenuPlugin/index.js +112 -0
  242. package/lib/plugins/CounterPlugin/index.d.ts +3 -0
  243. package/lib/plugins/CounterPlugin/index.js +20 -0
  244. package/lib/plugins/DatalayerPlugin/index.d.ts +2 -0
  245. package/lib/plugins/DatalayerPlugin/index.js +218 -0
  246. package/lib/plugins/DateTimePlugin/index.d.ts +8 -0
  247. package/lib/plugins/DateTimePlugin/index.js +24 -0
  248. package/lib/plugins/DocsPlugin/index.d.ts +2 -0
  249. package/lib/plugins/DocsPlugin/index.js +4 -0
  250. package/lib/plugins/DragDropPastePlugin/index.d.ts +1 -0
  251. package/lib/plugins/DragDropPastePlugin/index.js +33 -0
  252. package/lib/plugins/DraggableBlockPlugin/index.d.ts +12 -0
  253. package/lib/plugins/DraggableBlockPlugin/index.js +36 -0
  254. package/lib/plugins/EmojiPickerPlugin/index.d.ts +1 -0
  255. package/lib/plugins/EmojiPickerPlugin/index.js +80 -0
  256. package/lib/plugins/EmojisPlugin/index.d.ts +2 -0
  257. package/lib/plugins/EmojisPlugin/index.js +52 -0
  258. package/lib/plugins/EquationsPlugin/index.d.ts +14 -0
  259. package/lib/plugins/EquationsPlugin/index.js +34 -0
  260. package/lib/plugins/ExcalidrawPlugin/index.d.ts +5 -0
  261. package/lib/plugins/ExcalidrawPlugin/index.js +44 -0
  262. package/lib/plugins/FigmaPlugin/index.d.ts +4 -0
  263. package/lib/plugins/FigmaPlugin/index.js +20 -0
  264. package/lib/plugins/FloatingLinkEditorPlugin/index.d.ts +15 -0
  265. package/lib/plugins/FloatingLinkEditorPlugin/index.js +280 -0
  266. package/lib/plugins/FloatingTextFormatToolbarPlugin/index.d.ts +7 -0
  267. package/lib/plugins/FloatingTextFormatToolbarPlugin/index.js +219 -0
  268. package/lib/plugins/ImagesPlugin/index.d.ts +24 -0
  269. package/lib/plugins/ImagesPlugin/index.js +195 -0
  270. package/lib/plugins/InlineImagePlugin/index.d.ts +17 -0
  271. package/lib/plugins/InlineImagePlugin/index.js +180 -0
  272. package/lib/plugins/KeywordsPlugin/index.d.ts +2 -0
  273. package/lib/plugins/KeywordsPlugin/index.js +31 -0
  274. package/lib/plugins/LayoutPlugin/InsertLayoutDialog.d.ts +6 -0
  275. package/lib/plugins/LayoutPlugin/InsertLayoutDialog.js +21 -0
  276. package/lib/plugins/LayoutPlugin/LayoutPlugin.d.ts +7 -0
  277. package/lib/plugins/LayoutPlugin/LayoutPlugin.js +131 -0
  278. package/lib/plugins/LinkPlugin/index.d.ts +6 -0
  279. package/lib/plugins/LinkPlugin/index.js +11 -0
  280. package/lib/plugins/MarkdownShortcutPlugin/index.d.ts +2 -0
  281. package/lib/plugins/MarkdownShortcutPlugin/index.js +6 -0
  282. package/lib/plugins/MarkdownTransformers/index.d.ts +8 -0
  283. package/lib/plugins/MarkdownTransformers/index.js +234 -0
  284. package/lib/plugins/MaxLengthPlugin/index.d.ts +3 -0
  285. package/lib/plugins/MaxLengthPlugin/index.js +37 -0
  286. package/lib/plugins/MentionsPlugin/index.d.ts +2 -0
  287. package/lib/plugins/MentionsPlugin/index.js +564 -0
  288. package/lib/plugins/PageBreakPlugin/index.d.ts +4 -0
  289. package/lib/plugins/PageBreakPlugin/index.js +27 -0
  290. package/lib/plugins/PasteLogPlugin/index.d.ts +2 -0
  291. package/lib/plugins/PasteLogPlugin/index.js +27 -0
  292. package/lib/plugins/PollPlugin/index.d.ts +8 -0
  293. package/lib/plugins/PollPlugin/index.js +38 -0
  294. package/lib/plugins/ShortcutsPlugin/index.d.ts +6 -0
  295. package/lib/plugins/ShortcutsPlugin/index.js +112 -0
  296. package/lib/plugins/ShortcutsPlugin/shortcuts.d.ts +59 -0
  297. package/lib/plugins/ShortcutsPlugin/shortcuts.js +169 -0
  298. package/lib/plugins/SpecialTextPlugin/index.d.ts +2 -0
  299. package/lib/plugins/SpecialTextPlugin/index.js +46 -0
  300. package/lib/plugins/SpeechToTextPlugin/index.d.ts +5 -0
  301. package/lib/plugins/SpeechToTextPlugin/index.js +82 -0
  302. package/lib/plugins/StickyPlugin/index.d.ts +2 -0
  303. package/lib/plugins/StickyPlugin/index.js +12 -0
  304. package/lib/plugins/TabFocusPlugin/index.d.ts +1 -0
  305. package/lib/plugins/TabFocusPlugin/index.js +34 -0
  306. package/lib/plugins/TableActionMenuPlugin/index.d.ts +5 -0
  307. package/lib/plugins/TableActionMenuPlugin/index.js +492 -0
  308. package/lib/plugins/TableCellResizer/index.d.ts +3 -0
  309. package/lib/plugins/TableCellResizer/index.js +297 -0
  310. package/lib/plugins/TableHoverActionsPlugin/index.d.ts +4 -0
  311. package/lib/plugins/TableHoverActionsPlugin/index.js +188 -0
  312. package/lib/plugins/TableOfContentsPlugin/index.d.ts +2 -0
  313. package/lib/plugins/TableOfContentsPlugin/index.js +116 -0
  314. package/lib/plugins/TablePlugin.d.ts +31 -0
  315. package/lib/plugins/TablePlugin.js +63 -0
  316. package/lib/plugins/TestRecorderPlugin/index.d.ts +3 -0
  317. package/lib/plugins/TestRecorderPlugin/index.js +346 -0
  318. package/lib/plugins/ToolbarPlugin/fontSize.d.ts +9 -0
  319. package/lib/plugins/ToolbarPlugin/fontSize.js +80 -0
  320. package/lib/plugins/ToolbarPlugin/index.d.ts +9 -0
  321. package/lib/plugins/ToolbarPlugin/index.js +500 -0
  322. package/lib/plugins/ToolbarPlugin/utils.d.ts +26 -0
  323. package/lib/plugins/ToolbarPlugin/utils.js +243 -0
  324. package/lib/plugins/TreeViewPlugin/index.d.ts +2 -0
  325. package/lib/plugins/TreeViewPlugin/index.js +7 -0
  326. package/lib/plugins/TwitterPlugin/index.d.ts +4 -0
  327. package/lib/plugins/TwitterPlugin/index.js +20 -0
  328. package/lib/plugins/TypingPerfPlugin/index.d.ts +2 -0
  329. package/lib/plugins/TypingPerfPlugin/index.js +93 -0
  330. package/lib/plugins/YouTubePlugin/index.d.ts +4 -0
  331. package/lib/plugins/YouTubePlugin/index.js +20 -0
  332. package/lib/server/validation.d.ts +1 -0
  333. package/lib/server/validation.js +111 -0
  334. package/lib/setupEnv.d.ts +2 -0
  335. package/lib/setupEnv.js +25 -0
  336. package/lib/themes/CommentEditorTheme.d.ts +4 -0
  337. package/lib/themes/CommentEditorTheme.js +7 -0
  338. package/lib/themes/PlaygroundEditorTheme.d.ts +4 -0
  339. package/lib/themes/PlaygroundEditorTheme.js +120 -0
  340. package/lib/themes/StickyEditorTheme.d.ts +4 -0
  341. package/lib/themes/StickyEditorTheme.js +7 -0
  342. package/lib/tyes.dt.d.ts +12 -0
  343. package/lib/tyes.dt.js +0 -0
  344. package/lib/ui/Button.d.ts +12 -0
  345. package/lib/ui/Button.js +6 -0
  346. package/lib/ui/ColorPicker.d.ts +14 -0
  347. package/lib/ui/ColorPicker.js +219 -0
  348. package/lib/ui/ContentEditable.d.ts +9 -0
  349. package/lib/ui/ContentEditable.js +6 -0
  350. package/lib/ui/Dialog.d.ts +10 -0
  351. package/lib/ui/Dialog.js +8 -0
  352. package/lib/ui/DropDown.d.ts +18 -0
  353. package/lib/ui/DropDown.js +133 -0
  354. package/lib/ui/DropdownColorPicker.d.ts +13 -0
  355. package/lib/ui/DropdownColorPicker.js +6 -0
  356. package/lib/ui/EquationEditor.d.ts +8 -0
  357. package/lib/ui/EquationEditor.js +11 -0
  358. package/lib/ui/ExcalidrawModal.d.ts +42 -0
  359. package/lib/ui/ExcalidrawModal.js +103 -0
  360. package/lib/ui/FileInput.d.ts +10 -0
  361. package/lib/ui/FileInput.js +5 -0
  362. package/lib/ui/FlashMessage.d.ts +7 -0
  363. package/lib/ui/FlashMessage.js +6 -0
  364. package/lib/ui/ImageResizer.d.ts +17 -0
  365. package/lib/ui/ImageResizer.js +171 -0
  366. package/lib/ui/KatexEquationAlterer.d.ts +8 -0
  367. package/lib/ui/KatexEquationAlterer.js +23 -0
  368. package/lib/ui/KatexRenderer.d.ts +6 -0
  369. package/lib/ui/KatexRenderer.js +24 -0
  370. package/lib/ui/Modal.d.ts +9 -0
  371. package/lib/ui/Modal.js +48 -0
  372. package/lib/ui/Select.d.ts +8 -0
  373. package/lib/ui/Select.js +5 -0
  374. package/lib/ui/Switch.d.ts +8 -0
  375. package/lib/ui/Switch.js +6 -0
  376. package/lib/ui/TextInput.d.ts +13 -0
  377. package/lib/ui/TextInput.js +7 -0
  378. package/lib/utils/docSerialization.d.ts +3 -0
  379. package/lib/utils/docSerialization.js +56 -0
  380. package/lib/utils/emoji-list.d.ts +20 -0
  381. package/lib/utils/emoji-list.js +16605 -0
  382. package/lib/utils/getDOMRangeRect.d.ts +8 -0
  383. package/lib/utils/getDOMRangeRect.js +22 -0
  384. package/lib/utils/getSelectedNode.d.ts +2 -0
  385. package/lib/utils/getSelectedNode.js +24 -0
  386. package/lib/utils/getThemeSelector.d.ts +2 -0
  387. package/lib/utils/getThemeSelector.js +10 -0
  388. package/lib/utils/isMobileWidth.d.ts +7 -0
  389. package/lib/utils/isMobileWidth.js +7 -0
  390. package/lib/utils/joinClasses.d.ts +1 -0
  391. package/lib/utils/joinClasses.js +3 -0
  392. package/lib/utils/setFloatingElemPosition.d.ts +1 -0
  393. package/lib/utils/setFloatingElemPosition.js +55 -0
  394. package/lib/utils/setFloatingElemPositionForLinkEditor.d.ts +1 -0
  395. package/lib/utils/setFloatingElemPositionForLinkEditor.js +32 -0
  396. package/lib/utils/swipe.d.ts +4 -0
  397. package/lib/utils/swipe.js +90 -0
  398. package/lib/utils/url.d.ts +2 -0
  399. package/lib/utils/url.js +27 -0
  400. package/package.json +82 -51
  401. package/lib/DiffMerge.d.ts +0 -39
  402. package/lib/DiffMerge.js +0 -437
  403. package/lib/LoroCollaborativePlugin.d.ts +0 -62
  404. package/lib/LoroCollaborativePlugin.js +0 -2826
  405. package/lib/stableNodeState.d.ts +0 -8
  406. package/lib/stableNodeState.js +0 -15
@@ -0,0 +1,243 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ import { $createCodeNode } from '@lexical/code';
9
+ import { INSERT_CHECK_LIST_COMMAND, INSERT_ORDERED_LIST_COMMAND, INSERT_UNORDERED_LIST_COMMAND, } from '@lexical/list';
10
+ import { $isDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode';
11
+ import { $createHeadingNode, $createQuoteNode, $isHeadingNode, $isQuoteNode, } from '@lexical/rich-text';
12
+ import { $patchStyleText, $setBlocksType } from '@lexical/selection';
13
+ import { $isTableSelection } from '@lexical/table';
14
+ import { $getNearestBlockElementAncestorOrThrow } from '@lexical/utils';
15
+ import { $createParagraphNode, $getSelection, $isRangeSelection, $isTextNode, } from 'lexical';
16
+ import { DEFAULT_FONT_SIZE, MAX_ALLOWED_FONT_SIZE, MIN_ALLOWED_FONT_SIZE, } from '../../context/ToolbarContext';
17
+ // eslint-disable-next-line no-shadow
18
+ export var UpdateFontSizeType;
19
+ (function (UpdateFontSizeType) {
20
+ UpdateFontSizeType[UpdateFontSizeType["increment"] = 1] = "increment";
21
+ UpdateFontSizeType[UpdateFontSizeType["decrement"] = 2] = "decrement";
22
+ })(UpdateFontSizeType || (UpdateFontSizeType = {}));
23
+ /**
24
+ * Calculates the new font size based on the update type.
25
+ * @param currentFontSize - The current font size
26
+ * @param updateType - The type of change, either increment or decrement
27
+ * @returns the next font size
28
+ */
29
+ export const calculateNextFontSize = (currentFontSize, updateType) => {
30
+ if (!updateType) {
31
+ return currentFontSize;
32
+ }
33
+ let updatedFontSize = currentFontSize;
34
+ switch (updateType) {
35
+ case UpdateFontSizeType.decrement:
36
+ switch (true) {
37
+ case currentFontSize > MAX_ALLOWED_FONT_SIZE:
38
+ updatedFontSize = MAX_ALLOWED_FONT_SIZE;
39
+ break;
40
+ case currentFontSize >= 48:
41
+ updatedFontSize -= 12;
42
+ break;
43
+ case currentFontSize >= 24:
44
+ updatedFontSize -= 4;
45
+ break;
46
+ case currentFontSize >= 14:
47
+ updatedFontSize -= 2;
48
+ break;
49
+ case currentFontSize >= 9:
50
+ updatedFontSize -= 1;
51
+ break;
52
+ default:
53
+ updatedFontSize = MIN_ALLOWED_FONT_SIZE;
54
+ break;
55
+ }
56
+ break;
57
+ case UpdateFontSizeType.increment:
58
+ switch (true) {
59
+ case currentFontSize < MIN_ALLOWED_FONT_SIZE:
60
+ updatedFontSize = MIN_ALLOWED_FONT_SIZE;
61
+ break;
62
+ case currentFontSize < 12:
63
+ updatedFontSize += 1;
64
+ break;
65
+ case currentFontSize < 20:
66
+ updatedFontSize += 2;
67
+ break;
68
+ case currentFontSize < 36:
69
+ updatedFontSize += 4;
70
+ break;
71
+ case currentFontSize <= 60:
72
+ updatedFontSize += 12;
73
+ break;
74
+ default:
75
+ updatedFontSize = MAX_ALLOWED_FONT_SIZE;
76
+ break;
77
+ }
78
+ break;
79
+ default:
80
+ break;
81
+ }
82
+ return updatedFontSize;
83
+ };
84
+ /**
85
+ * Patches the selection with the updated font size.
86
+ */
87
+ export const updateFontSizeInSelection = (editor, newFontSize, updateType) => {
88
+ const getNextFontSize = (prevFontSize) => {
89
+ if (!prevFontSize) {
90
+ prevFontSize = `${DEFAULT_FONT_SIZE}px`;
91
+ }
92
+ prevFontSize = prevFontSize.slice(0, -2);
93
+ const nextFontSize = calculateNextFontSize(Number(prevFontSize), updateType);
94
+ return `${nextFontSize}px`;
95
+ };
96
+ editor.update(() => {
97
+ if (editor.isEditable()) {
98
+ const selection = $getSelection();
99
+ if (selection !== null) {
100
+ $patchStyleText(selection, {
101
+ 'font-size': newFontSize || getNextFontSize,
102
+ });
103
+ }
104
+ }
105
+ });
106
+ };
107
+ export const updateFontSize = (editor, updateType, inputValue) => {
108
+ if (inputValue !== '') {
109
+ const nextFontSize = calculateNextFontSize(Number(inputValue), updateType);
110
+ updateFontSizeInSelection(editor, String(nextFontSize) + 'px', null);
111
+ }
112
+ else {
113
+ updateFontSizeInSelection(editor, null, updateType);
114
+ }
115
+ };
116
+ export const formatParagraph = (editor) => {
117
+ editor.update(() => {
118
+ const selection = $getSelection();
119
+ $setBlocksType(selection, () => $createParagraphNode());
120
+ });
121
+ };
122
+ export const formatHeading = (editor, blockType, headingSize) => {
123
+ if (blockType !== headingSize) {
124
+ editor.update(() => {
125
+ const selection = $getSelection();
126
+ $setBlocksType(selection, () => $createHeadingNode(headingSize));
127
+ });
128
+ }
129
+ };
130
+ export const formatBulletList = (editor, blockType) => {
131
+ if (blockType !== 'bullet') {
132
+ editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);
133
+ }
134
+ else {
135
+ formatParagraph(editor);
136
+ }
137
+ };
138
+ export const formatCheckList = (editor, blockType) => {
139
+ if (blockType !== 'check') {
140
+ editor.dispatchCommand(INSERT_CHECK_LIST_COMMAND, undefined);
141
+ }
142
+ else {
143
+ formatParagraph(editor);
144
+ }
145
+ };
146
+ export const formatNumberedList = (editor, blockType) => {
147
+ if (blockType !== 'number') {
148
+ editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);
149
+ }
150
+ else {
151
+ formatParagraph(editor);
152
+ }
153
+ };
154
+ export const formatQuote = (editor, blockType) => {
155
+ if (blockType !== 'quote') {
156
+ editor.update(() => {
157
+ const selection = $getSelection();
158
+ $setBlocksType(selection, () => $createQuoteNode());
159
+ });
160
+ }
161
+ };
162
+ export const formatCode = (editor, blockType) => {
163
+ if (blockType !== 'code') {
164
+ editor.update(() => {
165
+ let selection = $getSelection();
166
+ if (!selection) {
167
+ return;
168
+ }
169
+ if (!$isRangeSelection(selection) || selection.isCollapsed()) {
170
+ $setBlocksType(selection, () => $createCodeNode());
171
+ }
172
+ else {
173
+ const textContent = selection.getTextContent();
174
+ const codeNode = $createCodeNode();
175
+ selection.insertNodes([codeNode]);
176
+ selection = $getSelection();
177
+ if ($isRangeSelection(selection)) {
178
+ selection.insertRawText(textContent);
179
+ }
180
+ }
181
+ });
182
+ }
183
+ };
184
+ export const clearFormatting = (editor) => {
185
+ editor.update(() => {
186
+ const selection = $getSelection();
187
+ if ($isRangeSelection(selection) || $isTableSelection(selection)) {
188
+ const anchor = selection.anchor;
189
+ const focus = selection.focus;
190
+ const nodes = selection.getNodes();
191
+ const extractedNodes = selection.extract();
192
+ if (anchor.key === focus.key && anchor.offset === focus.offset) {
193
+ return;
194
+ }
195
+ nodes.forEach((node, idx) => {
196
+ // We split the first and last node by the selection
197
+ // So that we don't format unselected text inside those nodes
198
+ if ($isTextNode(node)) {
199
+ // Use a separate variable to ensure TS does not lose the refinement
200
+ let textNode = node;
201
+ if (idx === 0 && anchor.offset !== 0) {
202
+ textNode = textNode.splitText(anchor.offset)[1] || textNode;
203
+ }
204
+ if (idx === nodes.length - 1) {
205
+ textNode = textNode.splitText(focus.offset)[0] || textNode;
206
+ }
207
+ /**
208
+ * If the selected text has one format applied
209
+ * selecting a portion of the text, could
210
+ * clear the format to the wrong portion of the text.
211
+ *
212
+ * The cleared text is based on the length of the selected text.
213
+ */
214
+ // We need this in case the selected text only has one format
215
+ const extractedTextNode = extractedNodes[0];
216
+ if (nodes.length === 1 && $isTextNode(extractedTextNode)) {
217
+ textNode = extractedTextNode;
218
+ }
219
+ if (textNode.__style !== '') {
220
+ textNode.setStyle('');
221
+ }
222
+ if (textNode.__format !== 0) {
223
+ textNode.setFormat(0);
224
+ }
225
+ const nearestBlockElement = $getNearestBlockElementAncestorOrThrow(textNode);
226
+ if (nearestBlockElement.__format !== 0) {
227
+ nearestBlockElement.setFormat('');
228
+ }
229
+ if (nearestBlockElement.__indent !== 0) {
230
+ nearestBlockElement.setIndent(0);
231
+ }
232
+ node = textNode;
233
+ }
234
+ else if ($isHeadingNode(node) || $isQuoteNode(node)) {
235
+ node.replace($createParagraphNode(), true);
236
+ }
237
+ else if ($isDecoratorBlockNode(node)) {
238
+ node.setFormat('');
239
+ }
240
+ });
241
+ }
242
+ });
243
+ };
@@ -0,0 +1,2 @@
1
+ import type { JSX } from 'react';
2
+ export default function TreeViewPlugin(): JSX.Element;
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
3
+ import { TreeView } from '@lexical/react/LexicalTreeView';
4
+ export default function TreeViewPlugin() {
5
+ const [editor] = useLexicalComposerContext();
6
+ return (_jsx(TreeView, { viewClassName: "tree-view-output", treeTypeButtonClassName: "debug-treetype-button", timeTravelPanelClassName: "debug-timetravel-panel", timeTravelButtonClassName: "debug-timetravel-button", timeTravelPanelSliderClassName: "debug-timetravel-panel-slider", timeTravelPanelButtonClassName: "debug-timetravel-panel-button", editor: editor }));
7
+ }
@@ -0,0 +1,4 @@
1
+ import type { JSX } from 'react';
2
+ import { LexicalCommand } from 'lexical';
3
+ export declare const INSERT_TWEET_COMMAND: LexicalCommand<string>;
4
+ export default function TwitterPlugin(): JSX.Element | null;
@@ -0,0 +1,20 @@
1
+ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
2
+ import { $insertNodeToNearestRoot } from '@lexical/utils';
3
+ import { COMMAND_PRIORITY_EDITOR, createCommand } from 'lexical';
4
+ import { useEffect } from 'react';
5
+ import { $createTweetNode, TweetNode } from '../../nodes/TweetNode';
6
+ export const INSERT_TWEET_COMMAND = createCommand('INSERT_TWEET_COMMAND');
7
+ export default function TwitterPlugin() {
8
+ const [editor] = useLexicalComposerContext();
9
+ useEffect(() => {
10
+ if (!editor.hasNodes([TweetNode])) {
11
+ throw new Error('TwitterPlugin: TweetNode not registered on editor');
12
+ }
13
+ return editor.registerCommand(INSERT_TWEET_COMMAND, (payload) => {
14
+ const tweetNode = $createTweetNode(payload);
15
+ $insertNodeToNearestRoot(tweetNode);
16
+ return true;
17
+ }, COMMAND_PRIORITY_EDITOR);
18
+ }, [editor]);
19
+ return null;
20
+ }
@@ -0,0 +1,2 @@
1
+ import type { JSX } from 'react';
2
+ export default function TypingPerfPlugin(): JSX.Element | null;
@@ -0,0 +1,93 @@
1
+ import { useEffect } from 'react';
2
+ import useReport from '../../hooks/useReport';
3
+ const validInputTypes = new Set([
4
+ 'insertText',
5
+ 'insertCompositionText',
6
+ 'insertFromComposition',
7
+ 'insertLineBreak',
8
+ 'insertParagraph',
9
+ 'deleteCompositionText',
10
+ 'deleteContentBackward',
11
+ 'deleteByComposition',
12
+ 'deleteContent',
13
+ 'deleteContentForward',
14
+ 'deleteWordBackward',
15
+ 'deleteWordForward',
16
+ 'deleteHardLineBackward',
17
+ 'deleteSoftLineBackward',
18
+ 'deleteHardLineForward',
19
+ 'deleteSoftLineForward',
20
+ ]);
21
+ export default function TypingPerfPlugin() {
22
+ const report = useReport();
23
+ useEffect(() => {
24
+ let start = 0;
25
+ let timerId;
26
+ let keyPressTimerId;
27
+ let log = [];
28
+ let invalidatingEvent = false;
29
+ const measureEventEnd = function logKeyPress() {
30
+ if (keyPressTimerId != null) {
31
+ if (invalidatingEvent) {
32
+ invalidatingEvent = false;
33
+ }
34
+ else {
35
+ log.push(performance.now() - start);
36
+ }
37
+ clearTimeout(keyPressTimerId);
38
+ keyPressTimerId = null;
39
+ }
40
+ };
41
+ const measureEventStart = function measureEvent() {
42
+ if (timerId != null) {
43
+ clearTimeout(timerId);
44
+ timerId = null;
45
+ }
46
+ // We use a setTimeout(0) instead of requestAnimationFrame, due to
47
+ // inconsistencies between the sequencing of rAF in different browsers.
48
+ keyPressTimerId = setTimeout(measureEventEnd, 0);
49
+ // Schedule a timer to report the results.
50
+ timerId = setTimeout(() => {
51
+ const total = log.reduce((a, b) => a + b, 0);
52
+ const reportedText = 'Typing Perf: ' + Math.round((total / log.length) * 100) / 100 + 'ms';
53
+ report(reportedText);
54
+ log = [];
55
+ }, 2000);
56
+ // Make the time after we do the previous logic, so we don't measure the overhead
57
+ // for it all.
58
+ start = performance.now();
59
+ };
60
+ const beforeInputHandler = function beforeInputHandler(event) {
61
+ if (!validInputTypes.has(event.inputType) || invalidatingEvent) {
62
+ invalidatingEvent = false;
63
+ return;
64
+ }
65
+ measureEventStart();
66
+ };
67
+ const keyDownHandler = function keyDownHandler(event) {
68
+ const key = event.key;
69
+ if (key === 'Backspace' || key === 'Enter') {
70
+ measureEventStart();
71
+ }
72
+ };
73
+ const pasteHandler = function pasteHandler() {
74
+ invalidatingEvent = true;
75
+ };
76
+ const cutHandler = function cutHandler() {
77
+ invalidatingEvent = true;
78
+ };
79
+ window.addEventListener('keydown', keyDownHandler, true);
80
+ window.addEventListener('selectionchange', measureEventEnd, true);
81
+ window.addEventListener('beforeinput', beforeInputHandler, true);
82
+ window.addEventListener('paste', pasteHandler, true);
83
+ window.addEventListener('cut', cutHandler, true);
84
+ return () => {
85
+ window.removeEventListener('keydown', keyDownHandler, true);
86
+ window.removeEventListener('selectionchange', measureEventEnd, true);
87
+ window.removeEventListener('beforeinput', beforeInputHandler, true);
88
+ window.removeEventListener('paste', pasteHandler, true);
89
+ window.removeEventListener('cut', cutHandler, true);
90
+ };
91
+ }, [report]);
92
+ return null;
93
+ }
@@ -0,0 +1,4 @@
1
+ import type { JSX } from 'react';
2
+ import { LexicalCommand } from 'lexical';
3
+ export declare const INSERT_YOUTUBE_COMMAND: LexicalCommand<string>;
4
+ export default function YouTubePlugin(): JSX.Element | null;
@@ -0,0 +1,20 @@
1
+ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
2
+ import { $insertNodeToNearestRoot } from '@lexical/utils';
3
+ import { COMMAND_PRIORITY_EDITOR, createCommand } from 'lexical';
4
+ import { useEffect } from 'react';
5
+ import { $createYouTubeNode, YouTubeNode } from '../../nodes/YouTubeNode';
6
+ export const INSERT_YOUTUBE_COMMAND = createCommand('INSERT_YOUTUBE_COMMAND');
7
+ export default function YouTubePlugin() {
8
+ const [editor] = useLexicalComposerContext();
9
+ useEffect(() => {
10
+ if (!editor.hasNodes([YouTubeNode])) {
11
+ throw new Error('YouTubePlugin: YouTubeNode not registered on editor');
12
+ }
13
+ return editor.registerCommand(INSERT_YOUTUBE_COMMAND, (payload) => {
14
+ const youTubeNode = $createYouTubeNode(payload);
15
+ $insertNodeToNearestRoot(youTubeNode);
16
+ return true;
17
+ }, COMMAND_PRIORITY_EDITOR);
18
+ }, [editor]);
19
+ return null;
20
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,111 @@
1
+ import { createHeadlessEditor } from '@lexical/headless';
2
+ import { $isMarkNode, $unwrapMarkNode } from '@lexical/mark';
3
+ import * as http from 'http';
4
+ import { $getRoot, $isElementNode } from 'lexical';
5
+ import * as url from 'url';
6
+ import PlaygroundNodes from '../nodes/PlaygroundNodes';
7
+ const hostname = 'localhost';
8
+ const port = 1235;
9
+ let stringifiedEditorStateJSON = '';
10
+ global.__DEV__ = true;
11
+ const editor = createHeadlessEditor({
12
+ namespace: 'validation',
13
+ nodes: [...PlaygroundNodes],
14
+ onError: (error) => {
15
+ console.error(error);
16
+ },
17
+ });
18
+ const getJSONData = (req) => {
19
+ const body = [];
20
+ return new Promise((resolve) => {
21
+ req
22
+ .on('data', (chunk) => {
23
+ body.push(chunk);
24
+ })
25
+ .on('end', () => {
26
+ resolve(Buffer.concat(body).toString());
27
+ })
28
+ .on('error', (error) => {
29
+ // eslint-disable-next-line no-console
30
+ console.log(error);
31
+ });
32
+ });
33
+ };
34
+ const $sanitizeNode = (node) => {
35
+ if ($isMarkNode(node)) {
36
+ $unwrapMarkNode(node);
37
+ return;
38
+ }
39
+ if ($isElementNode(node)) {
40
+ const children = node.getChildren();
41
+ for (const child of children) {
42
+ $sanitizeNode(child);
43
+ }
44
+ }
45
+ };
46
+ const validateEditorState = async (stringifiedJSON) => {
47
+ if (stringifiedEditorStateJSON === stringifiedJSON) {
48
+ return true;
49
+ }
50
+ const prevEditorState = editor.getEditorState();
51
+ const nextEditorState = editor.parseEditorState(stringifiedJSON);
52
+ editor.setEditorState(nextEditorState);
53
+ editor.update(() => {
54
+ const root = $getRoot();
55
+ $sanitizeNode(root);
56
+ });
57
+ await Promise.resolve().then();
58
+ const assertion = JSON.stringify(editor.getEditorState().toJSON());
59
+ const success = assertion === stringifiedEditorStateJSON;
60
+ if (success) {
61
+ // eslint-disable-next-line no-console
62
+ console.log('Editor state updated successfully.');
63
+ editor.setEditorState(nextEditorState);
64
+ stringifiedEditorStateJSON = assertion;
65
+ }
66
+ else {
67
+ // eslint-disable-next-line no-console
68
+ console.log('Editor state was rejected!');
69
+ editor.setEditorState(prevEditorState);
70
+ }
71
+ return success;
72
+ };
73
+ const server = http.createServer(async (req, res) => {
74
+ const pathname = url.parse(req.url).pathname;
75
+ const { method } = req;
76
+ res.setHeader('Content-Type', 'application/json');
77
+ res.setHeader('Access-Control-Allow-Origin', '*');
78
+ res.setHeader('Access-Control-Request-Method', '*');
79
+ res.setHeader('Access-Control-Allow-Methods', 'OPTIONS, POST, GET');
80
+ res.setHeader('Access-Control-Allow-Headers', '*');
81
+ if (method === 'OPTIONS') {
82
+ res.end();
83
+ return;
84
+ }
85
+ if (method === 'POST' && pathname === '/setEditorState') {
86
+ const stringifiedJSON = await getJSONData(req);
87
+ const editorState = editor.parseEditorState(stringifiedJSON);
88
+ editor.setEditorState(editorState);
89
+ stringifiedEditorStateJSON = stringifiedJSON;
90
+ res.statusCode = 200;
91
+ res.end();
92
+ }
93
+ else if (method === 'POST' && pathname === '/validateEditorState') {
94
+ const stringifiedJSON = await getJSONData(req);
95
+ if (await validateEditorState(stringifiedJSON)) {
96
+ res.statusCode = 200;
97
+ }
98
+ else {
99
+ res.statusCode = 403;
100
+ }
101
+ res.end();
102
+ }
103
+ else {
104
+ res.statusCode = 404;
105
+ res.end();
106
+ }
107
+ });
108
+ server.listen(port, hostname, () => {
109
+ // eslint-disable-next-line no-console
110
+ console.log(`Read-only validation server running at http://${hostname}:${port}/`);
111
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: Record<"useYjs" | "disableBeforeInput" | "emptyEditor" | "hasLinkAttributes" | "isAutocomplete" | "isCharLimit" | "isCharLimitUtf8" | "isCodeHighlighted" | "isCodeShiki" | "isCollab" | "isMaxLength" | "isRichText" | "listStrictIndent" | "measureTypingPerf" | "selectionAlwaysOnDisplay" | "shouldAllowHighlightingWithBrackets" | "shouldPreserveNewLinesInMarkdown" | "shouldUseLexicalContextMenu" | "showNestedEditorTreeView" | "showTableOfContents" | "showTreeView" | "tableCellBackgroundColor" | "tableCellMerge" | "tableHorizontalScroll" | "debug", boolean>;
2
+ export default _default;
@@ -0,0 +1,25 @@
1
+ import { INITIAL_SETTINGS } from './appSettings';
2
+ // Export a function so this is not tree-shaken,
3
+ // but evaluate it immediately so it executes before
4
+ // lexical computes CAN_USE_BEFORE_INPUT
5
+ export default (() => {
6
+ // override default options with query parameters if any
7
+ const urlSearchParams = new URLSearchParams(window.location.search);
8
+ for (const param of Object.keys(INITIAL_SETTINGS)) {
9
+ if (urlSearchParams.has(param)) {
10
+ try {
11
+ const value = JSON.parse(urlSearchParams.get(param) ?? 'true');
12
+ INITIAL_SETTINGS[param] = Boolean(value);
13
+ }
14
+ catch (error) {
15
+ console.warn(`Unable to parse query parameter "${param}"`);
16
+ }
17
+ }
18
+ }
19
+ if (INITIAL_SETTINGS.disableBeforeInput) {
20
+ delete window.InputEvent.prototype.getTargetRanges;
21
+ }
22
+ // @ts-ignore
23
+ window.EXCALIDRAW_ASSET_PATH = process.env.EXCALIDRAW_ASSET_PATH;
24
+ return INITIAL_SETTINGS;
25
+ })();
@@ -0,0 +1,4 @@
1
+ import type { EditorThemeClasses } from 'lexical';
2
+ import './CommentEditorTheme.css';
3
+ declare const theme: EditorThemeClasses;
4
+ export default theme;
@@ -0,0 +1,7 @@
1
+ import './CommentEditorTheme.css';
2
+ import baseTheme from './PlaygroundEditorTheme';
3
+ const theme = {
4
+ ...baseTheme,
5
+ paragraph: 'CommentEditorTheme__paragraph',
6
+ };
7
+ export default theme;
@@ -0,0 +1,4 @@
1
+ import type { EditorThemeClasses } from 'lexical';
2
+ import './PlaygroundEditorTheme.css';
3
+ declare const theme: EditorThemeClasses;
4
+ export default theme;