@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,276 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { $createCodeNode } from '@lexical/code';
3
+ import { INSERT_CHECK_LIST_COMMAND, INSERT_ORDERED_LIST_COMMAND, INSERT_UNORDERED_LIST_COMMAND, } from '@lexical/list';
4
+ import { INSERT_EMBED_COMMAND } from '@lexical/react/LexicalAutoEmbedPlugin';
5
+ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
6
+ import { INSERT_HORIZONTAL_RULE_COMMAND } from '@lexical/react/LexicalHorizontalRuleNode';
7
+ import { LexicalTypeaheadMenuPlugin, MenuOption, useBasicTypeaheadTriggerMatch, } from '@lexical/react/LexicalTypeaheadMenuPlugin';
8
+ import { $createHeadingNode, $createQuoteNode } from '@lexical/rich-text';
9
+ import { $setBlocksType } from '@lexical/selection';
10
+ import { INSERT_TABLE_COMMAND } from '@lexical/table';
11
+ import { $createParagraphNode, $getSelection, $isRangeSelection, FORMAT_ELEMENT_COMMAND, } from 'lexical';
12
+ import { useCallback, useMemo, useState } from 'react';
13
+ import * as ReactDOM from 'react-dom';
14
+ import useModal from '../../hooks/useModal';
15
+ import catTypingGif from '../../images/cat-typing.gif';
16
+ import { EmbedConfigs } from '../AutoEmbedPlugin';
17
+ import { INSERT_COLLAPSIBLE_COMMAND } from '../CollapsiblePlugin';
18
+ import { INSERT_DATETIME_COMMAND } from '../DateTimePlugin';
19
+ import { InsertEquationDialog } from '../EquationsPlugin';
20
+ import { INSERT_EXCALIDRAW_COMMAND } from '../ExcalidrawPlugin';
21
+ import { INSERT_IMAGE_COMMAND, InsertImageDialog } from '../ImagesPlugin';
22
+ import InsertLayoutDialog from '../LayoutPlugin/InsertLayoutDialog';
23
+ import { INSERT_PAGE_BREAK } from '../PageBreakPlugin';
24
+ import { InsertPollDialog } from '../PollPlugin';
25
+ import { InsertTableDialog } from '../TablePlugin';
26
+ class ComponentPickerOption extends MenuOption {
27
+ // What shows up in the editor
28
+ title;
29
+ // Icon for display
30
+ icon;
31
+ // For extra searching.
32
+ keywords;
33
+ // TBD
34
+ keyboardShortcut;
35
+ // What happens when you select this option?
36
+ onSelect;
37
+ constructor(title, options) {
38
+ super(title);
39
+ this.title = title;
40
+ this.keywords = options.keywords || [];
41
+ this.icon = options.icon;
42
+ this.keyboardShortcut = options.keyboardShortcut;
43
+ this.onSelect = options.onSelect.bind(this);
44
+ }
45
+ }
46
+ function ComponentPickerMenuItem({ index, isSelected, onClick, onMouseEnter, option, }) {
47
+ let className = 'item';
48
+ if (isSelected) {
49
+ className += ' selected';
50
+ }
51
+ return (_jsxs("li", { tabIndex: -1, className: className, ref: option.setRefElement, role: "option", "aria-selected": isSelected, id: 'typeahead-item-' + index, onMouseEnter: onMouseEnter, onClick: onClick, children: [option.icon, _jsx("span", { className: "text", children: option.title })] }, option.key));
52
+ }
53
+ function getDynamicOptions(editor, queryString) {
54
+ const options = [];
55
+ if (queryString == null) {
56
+ return options;
57
+ }
58
+ const tableMatch = queryString.match(/^([1-9]\d?)(?:x([1-9]\d?)?)?$/);
59
+ if (tableMatch !== null) {
60
+ const rows = tableMatch[1];
61
+ const colOptions = tableMatch[2]
62
+ ? [tableMatch[2]]
63
+ : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(String);
64
+ options.push(...colOptions.map((columns) => new ComponentPickerOption(`${rows}x${columns} Table`, {
65
+ icon: _jsx("i", { className: "icon table" }),
66
+ keywords: ['table'],
67
+ onSelect: () => editor.dispatchCommand(INSERT_TABLE_COMMAND, { columns, rows }),
68
+ })));
69
+ }
70
+ return options;
71
+ }
72
+ function getBaseOptions(editor, showModal) {
73
+ return [
74
+ new ComponentPickerOption('Paragraph', {
75
+ icon: _jsx("i", { className: "icon paragraph" }),
76
+ keywords: ['normal', 'paragraph', 'p', 'text'],
77
+ onSelect: () => editor.update(() => {
78
+ const selection = $getSelection();
79
+ if ($isRangeSelection(selection)) {
80
+ $setBlocksType(selection, () => $createParagraphNode());
81
+ }
82
+ }),
83
+ }),
84
+ ...[1, 2, 3].map((n) => new ComponentPickerOption(`Heading ${n}`, {
85
+ icon: _jsx("i", { className: `icon h${n}` }),
86
+ keywords: ['heading', 'header', `h${n}`],
87
+ onSelect: () => editor.update(() => {
88
+ const selection = $getSelection();
89
+ if ($isRangeSelection(selection)) {
90
+ $setBlocksType(selection, () => $createHeadingNode(`h${n}`));
91
+ }
92
+ }),
93
+ })),
94
+ new ComponentPickerOption('Table', {
95
+ icon: _jsx("i", { className: "icon table" }),
96
+ keywords: ['table', 'grid', 'spreadsheet', 'rows', 'columns'],
97
+ onSelect: () => showModal('Insert Table', (onClose) => (_jsx(InsertTableDialog, { activeEditor: editor, onClose: onClose }))),
98
+ }),
99
+ new ComponentPickerOption('Numbered List', {
100
+ icon: _jsx("i", { className: "icon number" }),
101
+ keywords: ['numbered list', 'ordered list', 'ol'],
102
+ onSelect: () => editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined),
103
+ }),
104
+ new ComponentPickerOption('Bulleted List', {
105
+ icon: _jsx("i", { className: "icon bullet" }),
106
+ keywords: ['bulleted list', 'unordered list', 'ul'],
107
+ onSelect: () => editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined),
108
+ }),
109
+ new ComponentPickerOption('Check List', {
110
+ icon: _jsx("i", { className: "icon check" }),
111
+ keywords: ['check list', 'todo list'],
112
+ onSelect: () => editor.dispatchCommand(INSERT_CHECK_LIST_COMMAND, undefined),
113
+ }),
114
+ new ComponentPickerOption('Quote', {
115
+ icon: _jsx("i", { className: "icon quote" }),
116
+ keywords: ['block quote'],
117
+ onSelect: () => editor.update(() => {
118
+ const selection = $getSelection();
119
+ if ($isRangeSelection(selection)) {
120
+ $setBlocksType(selection, () => $createQuoteNode());
121
+ }
122
+ }),
123
+ }),
124
+ new ComponentPickerOption('Code', {
125
+ icon: _jsx("i", { className: "icon code" }),
126
+ keywords: ['javascript', 'python', 'js', 'codeblock'],
127
+ onSelect: () => editor.update(() => {
128
+ const selection = $getSelection();
129
+ if ($isRangeSelection(selection)) {
130
+ if (selection.isCollapsed()) {
131
+ $setBlocksType(selection, () => $createCodeNode());
132
+ }
133
+ else {
134
+ // Will this ever happen?
135
+ const textContent = selection.getTextContent();
136
+ const codeNode = $createCodeNode();
137
+ selection.insertNodes([codeNode]);
138
+ selection.insertRawText(textContent);
139
+ }
140
+ }
141
+ }),
142
+ }),
143
+ new ComponentPickerOption('Divider', {
144
+ icon: _jsx("i", { className: "icon horizontal-rule" }),
145
+ keywords: ['horizontal rule', 'divider', 'hr'],
146
+ onSelect: () => editor.dispatchCommand(INSERT_HORIZONTAL_RULE_COMMAND, undefined),
147
+ }),
148
+ new ComponentPickerOption('Page Break', {
149
+ icon: _jsx("i", { className: "icon page-break" }),
150
+ keywords: ['page break', 'divider'],
151
+ onSelect: () => editor.dispatchCommand(INSERT_PAGE_BREAK, undefined),
152
+ }),
153
+ new ComponentPickerOption('Excalidraw', {
154
+ icon: _jsx("i", { className: "icon diagram-2" }),
155
+ keywords: ['excalidraw', 'diagram', 'drawing'],
156
+ onSelect: () => editor.dispatchCommand(INSERT_EXCALIDRAW_COMMAND, undefined),
157
+ }),
158
+ new ComponentPickerOption('Poll', {
159
+ icon: _jsx("i", { className: "icon poll" }),
160
+ keywords: ['poll', 'vote'],
161
+ onSelect: () => showModal('Insert Poll', (onClose) => (_jsx(InsertPollDialog, { activeEditor: editor, onClose: onClose }))),
162
+ }),
163
+ ...EmbedConfigs.map((embedConfig) => new ComponentPickerOption(`Embed ${embedConfig.contentName}`, {
164
+ icon: embedConfig.icon,
165
+ keywords: [...embedConfig.keywords, 'embed'],
166
+ onSelect: () => editor.dispatchCommand(INSERT_EMBED_COMMAND, embedConfig.type),
167
+ })),
168
+ new ComponentPickerOption('Date', {
169
+ icon: _jsx("i", { className: "icon calendar" }),
170
+ keywords: ['date', 'calendar', 'time'],
171
+ onSelect: () => {
172
+ const dateTime = new Date();
173
+ dateTime.setHours(0, 0, 0, 0); // Set time to midnight
174
+ editor.dispatchCommand(INSERT_DATETIME_COMMAND, { dateTime });
175
+ },
176
+ }),
177
+ new ComponentPickerOption('Today', {
178
+ icon: _jsx("i", { className: "icon calendar" }),
179
+ keywords: ['date', 'calendar', 'time', 'today'],
180
+ onSelect: () => {
181
+ const dateTime = new Date();
182
+ dateTime.setHours(0, 0, 0, 0); // Set time to midnight
183
+ editor.dispatchCommand(INSERT_DATETIME_COMMAND, { dateTime });
184
+ },
185
+ }),
186
+ new ComponentPickerOption('Tomorrow', {
187
+ icon: _jsx("i", { className: "icon calendar" }),
188
+ keywords: ['date', 'calendar', 'time', 'tomorrow'],
189
+ onSelect: () => {
190
+ const dateTime = new Date();
191
+ dateTime.setDate(dateTime.getDate() + 1);
192
+ dateTime.setHours(0, 0, 0, 0); // Set time to midnight
193
+ editor.dispatchCommand(INSERT_DATETIME_COMMAND, { dateTime });
194
+ },
195
+ }),
196
+ new ComponentPickerOption('Yesterday', {
197
+ icon: _jsx("i", { className: "icon calendar" }),
198
+ keywords: ['date', 'calendar', 'time', 'yesterday'],
199
+ onSelect: () => {
200
+ const dateTime = new Date();
201
+ dateTime.setDate(dateTime.getDate() - 1);
202
+ dateTime.setHours(0, 0, 0, 0); // Set time to midnight
203
+ editor.dispatchCommand(INSERT_DATETIME_COMMAND, { dateTime });
204
+ },
205
+ }),
206
+ new ComponentPickerOption('Equation', {
207
+ icon: _jsx("i", { className: "icon equation" }),
208
+ keywords: ['equation', 'latex', 'math'],
209
+ onSelect: () => showModal('Insert Equation', (onClose) => (_jsx(InsertEquationDialog, { activeEditor: editor, onClose: onClose }))),
210
+ }),
211
+ new ComponentPickerOption('GIF', {
212
+ icon: _jsx("i", { className: "icon gif" }),
213
+ keywords: ['gif', 'animate', 'image', 'file'],
214
+ onSelect: () => editor.dispatchCommand(INSERT_IMAGE_COMMAND, {
215
+ altText: 'Cat typing on a laptop',
216
+ src: catTypingGif,
217
+ }),
218
+ }),
219
+ new ComponentPickerOption('Image', {
220
+ icon: _jsx("i", { className: "icon image" }),
221
+ keywords: ['image', 'photo', 'picture', 'file'],
222
+ onSelect: () => showModal('Insert Image', (onClose) => (_jsx(InsertImageDialog, { activeEditor: editor, onClose: onClose }))),
223
+ }),
224
+ new ComponentPickerOption('Collapsible', {
225
+ icon: _jsx("i", { className: "icon caret-right" }),
226
+ keywords: ['collapse', 'collapsible', 'toggle'],
227
+ onSelect: () => editor.dispatchCommand(INSERT_COLLAPSIBLE_COMMAND, undefined),
228
+ }),
229
+ new ComponentPickerOption('Columns Layout', {
230
+ icon: _jsx("i", { className: "icon columns" }),
231
+ keywords: ['columns', 'layout', 'grid'],
232
+ onSelect: () => showModal('Insert Columns Layout', (onClose) => (_jsx(InsertLayoutDialog, { activeEditor: editor, onClose: onClose }))),
233
+ }),
234
+ ...['left', 'center', 'right', 'justify'].map((alignment) => new ComponentPickerOption(`Align ${alignment}`, {
235
+ icon: _jsx("i", { className: `icon ${alignment}-align` }),
236
+ keywords: ['align', 'justify', alignment],
237
+ onSelect: () => editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, alignment),
238
+ })),
239
+ ];
240
+ }
241
+ export default function ComponentPickerMenuPlugin() {
242
+ const [editor] = useLexicalComposerContext();
243
+ const [modal, showModal] = useModal();
244
+ const [queryString, setQueryString] = useState(null);
245
+ const checkForTriggerMatch = useBasicTypeaheadTriggerMatch('/', {
246
+ allowWhitespace: true,
247
+ minLength: 0,
248
+ });
249
+ const options = useMemo(() => {
250
+ const baseOptions = getBaseOptions(editor, showModal);
251
+ if (!queryString) {
252
+ return baseOptions;
253
+ }
254
+ const regex = new RegExp(queryString, 'i');
255
+ return [
256
+ ...getDynamicOptions(editor, queryString),
257
+ ...baseOptions.filter((option) => regex.test(option.title) ||
258
+ option.keywords.some((keyword) => regex.test(keyword))),
259
+ ];
260
+ }, [editor, queryString, showModal]);
261
+ const onSelectOption = useCallback((selectedOption, nodeToRemove, closeMenu, matchingString) => {
262
+ editor.update(() => {
263
+ nodeToRemove?.remove();
264
+ selectedOption.onSelect(matchingString);
265
+ closeMenu();
266
+ });
267
+ }, [editor]);
268
+ return (_jsxs(_Fragment, { children: [modal, _jsx(LexicalTypeaheadMenuPlugin, { onQueryChange: setQueryString, onSelectOption: onSelectOption, triggerFn: checkForTriggerMatch, options: options, menuRenderFn: (anchorElementRef, { selectedIndex, selectOptionAndCleanUp, setHighlightedIndex }) => anchorElementRef.current && options.length
269
+ ? ReactDOM.createPortal(_jsx("div", { className: "typeahead-popover component-picker-menu", children: _jsx("ul", { children: options.map((option, i) => (_jsx(ComponentPickerMenuItem, { index: i, isSelected: selectedIndex === i, onClick: () => {
270
+ setHighlightedIndex(i);
271
+ selectOptionAndCleanUp(option);
272
+ }, onMouseEnter: () => {
273
+ setHighlightedIndex(i);
274
+ }, option: option }, option.key))) }) }), anchorElementRef.current)
275
+ : null })] }));
276
+ }
@@ -0,0 +1,2 @@
1
+ import type { JSX } from 'react';
2
+ export default function ContextMenuPlugin(): JSX.Element;
@@ -0,0 +1,112 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { $isLinkNode, TOGGLE_LINK_COMMAND } from '@lexical/link';
3
+ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
4
+ import { NodeContextMenuOption, NodeContextMenuPlugin, NodeContextMenuSeparator, } from '@lexical/react/LexicalNodeContextMenuPlugin';
5
+ import { $getSelection, $isDecoratorNode, $isNodeSelection, $isRangeSelection, COPY_COMMAND, CUT_COMMAND, PASTE_COMMAND, } from 'lexical';
6
+ import { useMemo } from 'react';
7
+ export default function ContextMenuPlugin() {
8
+ const [editor] = useLexicalComposerContext();
9
+ const items = useMemo(() => {
10
+ return [
11
+ new NodeContextMenuOption(`Remove Link`, {
12
+ $onSelect: () => {
13
+ editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);
14
+ },
15
+ $showOn: (node) => $isLinkNode(node.getParent()),
16
+ disabled: false,
17
+ icon: _jsx("i", { className: "PlaygroundEditorTheme__contextMenuItemIcon" }),
18
+ }),
19
+ new NodeContextMenuSeparator({
20
+ $showOn: (node) => $isLinkNode(node.getParent()),
21
+ }),
22
+ new NodeContextMenuOption(`Cut`, {
23
+ $onSelect: () => {
24
+ editor.dispatchCommand(CUT_COMMAND, null);
25
+ },
26
+ disabled: false,
27
+ icon: (_jsx("i", { className: "PlaygroundEditorTheme__contextMenuItemIcon page-break" })),
28
+ }),
29
+ new NodeContextMenuOption(`Copy`, {
30
+ $onSelect: () => {
31
+ editor.dispatchCommand(COPY_COMMAND, null);
32
+ },
33
+ disabled: false,
34
+ icon: _jsx("i", { className: "PlaygroundEditorTheme__contextMenuItemIcon copy" }),
35
+ }),
36
+ new NodeContextMenuOption(`Paste`, {
37
+ $onSelect: () => {
38
+ navigator.clipboard.read().then(async function (...args) {
39
+ const data = new DataTransfer();
40
+ const readClipboardItems = await navigator.clipboard.read();
41
+ const item = readClipboardItems[0];
42
+ const permission = await navigator.permissions.query({
43
+ // @ts-expect-error These types are incorrect.
44
+ name: 'clipboard-read',
45
+ });
46
+ if (permission.state === 'denied') {
47
+ alert('Not allowed to paste from clipboard.');
48
+ return;
49
+ }
50
+ for (const type of item.types) {
51
+ const dataString = await (await item.getType(type)).text();
52
+ data.setData(type, dataString);
53
+ }
54
+ const event = new ClipboardEvent('paste', {
55
+ clipboardData: data,
56
+ });
57
+ editor.dispatchCommand(PASTE_COMMAND, event);
58
+ });
59
+ },
60
+ disabled: false,
61
+ icon: (_jsx("i", { className: "PlaygroundEditorTheme__contextMenuItemIcon paste" })),
62
+ }),
63
+ new NodeContextMenuOption(`Paste as Plain Text`, {
64
+ $onSelect: () => {
65
+ navigator.clipboard.read().then(async function (...args) {
66
+ const permission = await navigator.permissions.query({
67
+ // @ts-expect-error These types are incorrect.
68
+ name: 'clipboard-read',
69
+ });
70
+ if (permission.state === 'denied') {
71
+ alert('Not allowed to paste from clipboard.');
72
+ return;
73
+ }
74
+ const data = new DataTransfer();
75
+ const clipboardText = await navigator.clipboard.readText();
76
+ data.setData('text/plain', clipboardText);
77
+ const event = new ClipboardEvent('paste', {
78
+ clipboardData: data,
79
+ });
80
+ editor.dispatchCommand(PASTE_COMMAND, event);
81
+ });
82
+ },
83
+ disabled: false,
84
+ icon: _jsx("i", { className: "PlaygroundEditorTheme__contextMenuItemIcon" }),
85
+ }),
86
+ new NodeContextMenuSeparator(),
87
+ new NodeContextMenuOption(`Delete Node`, {
88
+ $onSelect: () => {
89
+ const selection = $getSelection();
90
+ if ($isRangeSelection(selection)) {
91
+ const currentNode = selection.anchor.getNode();
92
+ const ancestorNodeWithRootAsParent = currentNode
93
+ .getParents()
94
+ .at(-2);
95
+ ancestorNodeWithRootAsParent?.remove();
96
+ }
97
+ else if ($isNodeSelection(selection)) {
98
+ const selectedNodes = selection.getNodes();
99
+ selectedNodes.forEach((node) => {
100
+ if ($isDecoratorNode(node)) {
101
+ node.remove();
102
+ }
103
+ });
104
+ }
105
+ },
106
+ disabled: false,
107
+ icon: (_jsx("i", { className: "PlaygroundEditorTheme__contextMenuItemIcon clear" })),
108
+ }),
109
+ ];
110
+ }, [editor]);
111
+ return (_jsx(NodeContextMenuPlugin, { className: "PlaygroundEditorTheme__contextMenu", itemClassName: "PlaygroundEditorTheme__contextMenuItem", separatorClassName: "PlaygroundEditorTheme__contextMenuSeparator", items: items }));
112
+ }
@@ -0,0 +1,3 @@
1
+ import type { LexicalCommand } from 'lexical';
2
+ export declare const INSERT_COUNTER_COMMAND: LexicalCommand<number | undefined>;
3
+ export default function CounterPlugin(): null;
@@ -0,0 +1,24 @@
1
+ /*
2
+ * Copyright (c) 2023-2025 Datalayer, Inc.
3
+ * Distributed under the terms of the MIT License.
4
+ */
5
+ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
6
+ import { $insertNodeToNearestRoot } from '@lexical/utils';
7
+ import { createCommand, COMMAND_PRIORITY_EDITOR } from 'lexical';
8
+ import { useEffect } from 'react';
9
+ import { $createCounterNode, CounterNode } from '../../nodes/CounterNode';
10
+ export const INSERT_COUNTER_COMMAND = createCommand('INSERT_COUNTER_COMMAND');
11
+ export default function CounterPlugin() {
12
+ const [editor] = useLexicalComposerContext();
13
+ useEffect(() => {
14
+ if (!editor.hasNodes([CounterNode])) {
15
+ throw new Error('CounterPlugin: CounterNode not registered on editor');
16
+ }
17
+ return editor.registerCommand(INSERT_COUNTER_COMMAND, (payload) => {
18
+ const counterNode = $createCounterNode(payload || 0);
19
+ $insertNodeToNearestRoot(counterNode);
20
+ return true;
21
+ }, COMMAND_PRIORITY_EDITOR);
22
+ }, [editor]);
23
+ return null;
24
+ }
@@ -0,0 +1,8 @@
1
+ import type { JSX } from 'react';
2
+ import { LexicalCommand } from 'lexical';
3
+ type CommandPayload = {
4
+ dateTime: Date;
5
+ };
6
+ export declare const INSERT_DATETIME_COMMAND: LexicalCommand<CommandPayload>;
7
+ export default function DateTimePlugin(): JSX.Element | null;
8
+ export {};
@@ -0,0 +1,28 @@
1
+ /*
2
+ * Copyright (c) 2023-2025 Datalayer, Inc.
3
+ * Distributed under the terms of the MIT License.
4
+ */
5
+ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
6
+ import { $wrapNodeInElement, mergeRegister } from '@lexical/utils';
7
+ import { $createParagraphNode, $insertNodes, $isRootOrShadowRoot, COMMAND_PRIORITY_EDITOR, createCommand, } from 'lexical';
8
+ import { useEffect } from 'react';
9
+ import { $createDateTimeNode, DateTimeNode, } from '../../nodes/DateTimeNode/DateTimeNode';
10
+ export const INSERT_DATETIME_COMMAND = createCommand('INSERT_DATETIME_COMMAND');
11
+ export default function DateTimePlugin() {
12
+ const [editor] = useLexicalComposerContext();
13
+ useEffect(() => {
14
+ if (!editor.hasNodes([DateTimeNode])) {
15
+ throw new Error('DateTimePlugin: DateTimeNode not registered on editor');
16
+ }
17
+ return mergeRegister(editor.registerCommand(INSERT_DATETIME_COMMAND, (payload) => {
18
+ const { dateTime } = payload;
19
+ const dateTimeNode = $createDateTimeNode(dateTime);
20
+ $insertNodes([dateTimeNode]);
21
+ if ($isRootOrShadowRoot(dateTimeNode.getParentOrThrow())) {
22
+ $wrapNodeInElement(dateTimeNode, $createParagraphNode).selectEnd();
23
+ }
24
+ return true;
25
+ }, COMMAND_PRIORITY_EDITOR));
26
+ }, [editor]);
27
+ return null;
28
+ }
@@ -0,0 +1,3 @@
1
+ import type { JSX } from 'react';
2
+ export declare function DebugPlugin(): JSX.Element | null;
3
+ export default DebugPlugin;