@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,116 @@
1
+ /*
2
+ * Copyright (c) 2023-2025 Datalayer, Inc.
3
+ * Distributed under the terms of the MIT License.
4
+ */
5
+ import { TOGGLE_LINK_COMMAND } from '@lexical/link';
6
+ import { COMMAND_PRIORITY_NORMAL, FORMAT_ELEMENT_COMMAND, FORMAT_TEXT_COMMAND, INDENT_CONTENT_COMMAND, isModifierMatch, KEY_DOWN_COMMAND, OUTDENT_CONTENT_COMMAND, } from 'lexical';
7
+ import { useEffect } from 'react';
8
+ import { useToolbarState } from '../../context/ToolbarContext';
9
+ import { sanitizeUrl } from '../../utils/url';
10
+ import { INSERT_INLINE_COMMAND } from '../CommentPlugin';
11
+ import { clearFormatting, formatBulletList, formatCheckList, formatCode, formatHeading, formatNumberedList, formatParagraph, formatQuote, updateFontSize, UpdateFontSizeType, } from '../ToolbarPlugin/utils';
12
+ import { isAddComment, isCapitalize, isCenterAlign, isClearFormatting, isDecreaseFontSize, isFormatBulletList, isFormatCheckList, isFormatCode, isFormatHeading, isFormatNumberedList, isFormatParagraph, isFormatQuote, isIncreaseFontSize, isIndent, isInsertCodeBlock, isInsertLink, isJustifyAlign, isLeftAlign, isLowercase, isOutdent, isRightAlign, isStrikeThrough, isSubscript, isSuperscript, isUppercase, } from './shortcuts';
13
+ export default function ShortcutsPlugin({ editor, setIsLinkEditMode, }) {
14
+ const { toolbarState } = useToolbarState();
15
+ useEffect(() => {
16
+ const keyboardShortcutsHandler = (event) => {
17
+ // Short-circuit, a least one modifier must be set
18
+ if (isModifierMatch(event, {})) {
19
+ return false;
20
+ }
21
+ else if (isFormatParagraph(event)) {
22
+ formatParagraph(editor);
23
+ }
24
+ else if (isFormatHeading(event)) {
25
+ const { code } = event;
26
+ const headingSize = `h${code[code.length - 1]}`;
27
+ formatHeading(editor, toolbarState.blockType, headingSize);
28
+ }
29
+ else if (isFormatBulletList(event)) {
30
+ formatBulletList(editor, toolbarState.blockType);
31
+ }
32
+ else if (isFormatNumberedList(event)) {
33
+ formatNumberedList(editor, toolbarState.blockType);
34
+ }
35
+ else if (isFormatCheckList(event)) {
36
+ formatCheckList(editor, toolbarState.blockType);
37
+ }
38
+ else if (isFormatCode(event)) {
39
+ formatCode(editor, toolbarState.blockType);
40
+ }
41
+ else if (isFormatQuote(event)) {
42
+ formatQuote(editor, toolbarState.blockType);
43
+ }
44
+ else if (isStrikeThrough(event)) {
45
+ editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'strikethrough');
46
+ }
47
+ else if (isLowercase(event)) {
48
+ editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'lowercase');
49
+ }
50
+ else if (isUppercase(event)) {
51
+ editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'uppercase');
52
+ }
53
+ else if (isCapitalize(event)) {
54
+ editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'capitalize');
55
+ }
56
+ else if (isIndent(event)) {
57
+ editor.dispatchCommand(INDENT_CONTENT_COMMAND, undefined);
58
+ }
59
+ else if (isOutdent(event)) {
60
+ editor.dispatchCommand(OUTDENT_CONTENT_COMMAND, undefined);
61
+ }
62
+ else if (isCenterAlign(event)) {
63
+ editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'center');
64
+ }
65
+ else if (isLeftAlign(event)) {
66
+ editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'left');
67
+ }
68
+ else if (isRightAlign(event)) {
69
+ editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'right');
70
+ }
71
+ else if (isJustifyAlign(event)) {
72
+ editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'justify');
73
+ }
74
+ else if (isSubscript(event)) {
75
+ editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'subscript');
76
+ }
77
+ else if (isSuperscript(event)) {
78
+ editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'superscript');
79
+ }
80
+ else if (isInsertCodeBlock(event)) {
81
+ editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'code');
82
+ }
83
+ else if (isIncreaseFontSize(event)) {
84
+ updateFontSize(editor, UpdateFontSizeType.increment, toolbarState.fontSizeInputValue);
85
+ }
86
+ else if (isDecreaseFontSize(event)) {
87
+ updateFontSize(editor, UpdateFontSizeType.decrement, toolbarState.fontSizeInputValue);
88
+ }
89
+ else if (isClearFormatting(event)) {
90
+ clearFormatting(editor);
91
+ }
92
+ else if (isInsertLink(event)) {
93
+ const url = toolbarState.isLink ? null : sanitizeUrl('https://');
94
+ setIsLinkEditMode(!toolbarState.isLink);
95
+ editor.dispatchCommand(TOGGLE_LINK_COMMAND, url);
96
+ }
97
+ else if (isAddComment(event)) {
98
+ editor.dispatchCommand(INSERT_INLINE_COMMAND, undefined);
99
+ }
100
+ else {
101
+ // No match for any of the event handlers
102
+ return false;
103
+ }
104
+ event.preventDefault();
105
+ return true;
106
+ };
107
+ return editor.registerCommand(KEY_DOWN_COMMAND, keyboardShortcutsHandler, COMMAND_PRIORITY_NORMAL);
108
+ }, [
109
+ editor,
110
+ toolbarState.isLink,
111
+ toolbarState.blockType,
112
+ toolbarState.fontSizeInputValue,
113
+ setIsLinkEditMode,
114
+ ]);
115
+ return null;
116
+ }
@@ -0,0 +1,59 @@
1
+ export declare const SHORTCUTS: Readonly<{
2
+ NORMAL: "⌘+Opt+0" | "Ctrl+Alt+0";
3
+ HEADING1: "⌘+Opt+1" | "Ctrl+Alt+1";
4
+ HEADING2: "⌘+Opt+2" | "Ctrl+Alt+2";
5
+ HEADING3: "⌘+Opt+3" | "Ctrl+Alt+3";
6
+ NUMBERED_LIST: "⌘+Shift+7" | "Ctrl+Shift+7";
7
+ BULLET_LIST: "⌘+Shift+8" | "Ctrl+Shift+8";
8
+ CHECK_LIST: "⌘+Shift+9" | "Ctrl+Shift+9";
9
+ CODE_BLOCK: "⌘+Opt+C" | "Ctrl+Alt+C";
10
+ QUOTE: "⌃+Shift+Q" | "Ctrl+Shift+Q";
11
+ ADD_COMMENT: "⌘+Opt+M" | "Ctrl+Alt+M";
12
+ INCREASE_FONT_SIZE: "⌘+Shift+." | "Ctrl+Shift+.";
13
+ DECREASE_FONT_SIZE: "⌘+Shift+," | "Ctrl+Shift+,";
14
+ INSERT_CODE_BLOCK: "⌘+Shift+C" | "Ctrl+Shift+C";
15
+ STRIKETHROUGH: "⌘+Shift+X" | "Ctrl+Shift+X";
16
+ LOWERCASE: "⌃+Shift+1" | "Ctrl+Shift+1";
17
+ UPPERCASE: "⌃+Shift+2" | "Ctrl+Shift+2";
18
+ CAPITALIZE: "⌃+Shift+3" | "Ctrl+Shift+3";
19
+ CENTER_ALIGN: "⌘+Shift+E" | "Ctrl+Shift+E";
20
+ JUSTIFY_ALIGN: "⌘+Shift+J" | "Ctrl+Shift+J";
21
+ LEFT_ALIGN: "⌘+Shift+L" | "Ctrl+Shift+L";
22
+ RIGHT_ALIGN: "⌘+Shift+R" | "Ctrl+Shift+R";
23
+ SUBSCRIPT: "⌘+," | "Ctrl+,";
24
+ SUPERSCRIPT: "⌘+." | "Ctrl+.";
25
+ INDENT: "⌘+]" | "Ctrl+]";
26
+ OUTDENT: "⌘+[" | "Ctrl+[";
27
+ CLEAR_FORMATTING: "⌘+\\" | "Ctrl+\\";
28
+ REDO: "⌘+Shift+Z" | "Ctrl+Y";
29
+ UNDO: "⌘+Z" | "Ctrl+Z";
30
+ BOLD: "⌘+B" | "Ctrl+B";
31
+ ITALIC: "⌘+I" | "Ctrl+I";
32
+ UNDERLINE: "⌘+U" | "Ctrl+U";
33
+ INSERT_LINK: "⌘+K" | "Ctrl+K";
34
+ }>;
35
+ export declare function isFormatParagraph(event: KeyboardEvent): boolean;
36
+ export declare function isFormatHeading(event: KeyboardEvent): boolean;
37
+ export declare function isFormatNumberedList(event: KeyboardEvent): boolean;
38
+ export declare function isFormatBulletList(event: KeyboardEvent): boolean;
39
+ export declare function isFormatCheckList(event: KeyboardEvent): boolean;
40
+ export declare function isFormatCode(event: KeyboardEvent): boolean;
41
+ export declare function isFormatQuote(event: KeyboardEvent): boolean;
42
+ export declare function isLowercase(event: KeyboardEvent): boolean;
43
+ export declare function isUppercase(event: KeyboardEvent): boolean;
44
+ export declare function isCapitalize(event: KeyboardEvent): boolean;
45
+ export declare function isStrikeThrough(event: KeyboardEvent): boolean;
46
+ export declare function isIndent(event: KeyboardEvent): boolean;
47
+ export declare function isOutdent(event: KeyboardEvent): boolean;
48
+ export declare function isCenterAlign(event: KeyboardEvent): boolean;
49
+ export declare function isLeftAlign(event: KeyboardEvent): boolean;
50
+ export declare function isRightAlign(event: KeyboardEvent): boolean;
51
+ export declare function isJustifyAlign(event: KeyboardEvent): boolean;
52
+ export declare function isSubscript(event: KeyboardEvent): boolean;
53
+ export declare function isSuperscript(event: KeyboardEvent): boolean;
54
+ export declare function isInsertCodeBlock(event: KeyboardEvent): boolean;
55
+ export declare function isIncreaseFontSize(event: KeyboardEvent): boolean;
56
+ export declare function isDecreaseFontSize(event: KeyboardEvent): boolean;
57
+ export declare function isClearFormatting(event: KeyboardEvent): boolean;
58
+ export declare function isInsertLink(event: KeyboardEvent): boolean;
59
+ export declare function isAddComment(event: KeyboardEvent): boolean;
@@ -0,0 +1,173 @@
1
+ /*
2
+ * Copyright (c) 2023-2025 Datalayer, Inc.
3
+ * Distributed under the terms of the MIT License.
4
+ */
5
+ import { IS_APPLE } from '@lexical/utils';
6
+ import { isModifierMatch } from 'lexical';
7
+ //disable eslint sorting rule for quick reference to shortcuts
8
+ /* eslint-disable sort-keys-fix/sort-keys-fix */
9
+ export const SHORTCUTS = Object.freeze({
10
+ // (Ctrl|⌘) + (Alt|Option) + <key> shortcuts
11
+ NORMAL: IS_APPLE ? '⌘+Opt+0' : 'Ctrl+Alt+0',
12
+ HEADING1: IS_APPLE ? '⌘+Opt+1' : 'Ctrl+Alt+1',
13
+ HEADING2: IS_APPLE ? '⌘+Opt+2' : 'Ctrl+Alt+2',
14
+ HEADING3: IS_APPLE ? '⌘+Opt+3' : 'Ctrl+Alt+3',
15
+ NUMBERED_LIST: IS_APPLE ? '⌘+Shift+7' : 'Ctrl+Shift+7',
16
+ BULLET_LIST: IS_APPLE ? '⌘+Shift+8' : 'Ctrl+Shift+8',
17
+ CHECK_LIST: IS_APPLE ? '⌘+Shift+9' : 'Ctrl+Shift+9',
18
+ CODE_BLOCK: IS_APPLE ? '⌘+Opt+C' : 'Ctrl+Alt+C',
19
+ QUOTE: IS_APPLE ? '⌃+Shift+Q' : 'Ctrl+Shift+Q',
20
+ ADD_COMMENT: IS_APPLE ? '⌘+Opt+M' : 'Ctrl+Alt+M',
21
+ // (Ctrl|⌘) + Shift + <key> shortcuts
22
+ INCREASE_FONT_SIZE: IS_APPLE ? '⌘+Shift+.' : 'Ctrl+Shift+.',
23
+ DECREASE_FONT_SIZE: IS_APPLE ? '⌘+Shift+,' : 'Ctrl+Shift+,',
24
+ INSERT_CODE_BLOCK: IS_APPLE ? '⌘+Shift+C' : 'Ctrl+Shift+C',
25
+ STRIKETHROUGH: IS_APPLE ? '⌘+Shift+X' : 'Ctrl+Shift+X',
26
+ LOWERCASE: IS_APPLE ? '⌃+Shift+1' : 'Ctrl+Shift+1',
27
+ UPPERCASE: IS_APPLE ? '⌃+Shift+2' : 'Ctrl+Shift+2',
28
+ CAPITALIZE: IS_APPLE ? '⌃+Shift+3' : 'Ctrl+Shift+3',
29
+ CENTER_ALIGN: IS_APPLE ? '⌘+Shift+E' : 'Ctrl+Shift+E',
30
+ JUSTIFY_ALIGN: IS_APPLE ? '⌘+Shift+J' : 'Ctrl+Shift+J',
31
+ LEFT_ALIGN: IS_APPLE ? '⌘+Shift+L' : 'Ctrl+Shift+L',
32
+ RIGHT_ALIGN: IS_APPLE ? '⌘+Shift+R' : 'Ctrl+Shift+R',
33
+ // (Ctrl|⌘) + <key> shortcuts
34
+ SUBSCRIPT: IS_APPLE ? '⌘+,' : 'Ctrl+,',
35
+ SUPERSCRIPT: IS_APPLE ? '⌘+.' : 'Ctrl+.',
36
+ INDENT: IS_APPLE ? '⌘+]' : 'Ctrl+]',
37
+ OUTDENT: IS_APPLE ? '⌘+[' : 'Ctrl+[',
38
+ CLEAR_FORMATTING: IS_APPLE ? '⌘+\\' : 'Ctrl+\\',
39
+ REDO: IS_APPLE ? '⌘+Shift+Z' : 'Ctrl+Y',
40
+ UNDO: IS_APPLE ? '⌘+Z' : 'Ctrl+Z',
41
+ BOLD: IS_APPLE ? '⌘+B' : 'Ctrl+B',
42
+ ITALIC: IS_APPLE ? '⌘+I' : 'Ctrl+I',
43
+ UNDERLINE: IS_APPLE ? '⌘+U' : 'Ctrl+U',
44
+ INSERT_LINK: IS_APPLE ? '⌘+K' : 'Ctrl+K',
45
+ });
46
+ const CONTROL_OR_META = { ctrlKey: !IS_APPLE, metaKey: IS_APPLE };
47
+ export function isFormatParagraph(event) {
48
+ const { code } = event;
49
+ return ((code === 'Numpad0' || code === 'Digit0') &&
50
+ isModifierMatch(event, { ...CONTROL_OR_META, altKey: true }));
51
+ }
52
+ export function isFormatHeading(event) {
53
+ const { code } = event;
54
+ // Apple pencil keyboard events don't have a code property
55
+ if (!code) {
56
+ return false;
57
+ }
58
+ const keyNumber = code[code.length - 1];
59
+ return (['1', '2', '3'].includes(keyNumber) &&
60
+ isModifierMatch(event, { ...CONTROL_OR_META, altKey: true }));
61
+ }
62
+ export function isFormatNumberedList(event) {
63
+ const { code } = event;
64
+ return ((code === 'Numpad7' || code === 'Digit7') &&
65
+ isModifierMatch(event, { ...CONTROL_OR_META, shiftKey: true }));
66
+ }
67
+ export function isFormatBulletList(event) {
68
+ const { code } = event;
69
+ return ((code === 'Numpad8' || code === 'Digit8') &&
70
+ isModifierMatch(event, { ...CONTROL_OR_META, shiftKey: true }));
71
+ }
72
+ export function isFormatCheckList(event) {
73
+ const { code } = event;
74
+ return ((code === 'Numpad9' || code === 'Digit9') &&
75
+ isModifierMatch(event, { ...CONTROL_OR_META, shiftKey: true }));
76
+ }
77
+ export function isFormatCode(event) {
78
+ const { code } = event;
79
+ return (code === 'KeyC' &&
80
+ isModifierMatch(event, { ...CONTROL_OR_META, altKey: true }));
81
+ }
82
+ export function isFormatQuote(event) {
83
+ const { code } = event;
84
+ return (code === 'KeyQ' &&
85
+ isModifierMatch(event, {
86
+ ctrlKey: true,
87
+ shiftKey: true,
88
+ }));
89
+ }
90
+ export function isLowercase(event) {
91
+ const { code } = event;
92
+ return ((code === 'Numpad1' || code === 'Digit1') &&
93
+ isModifierMatch(event, { ctrlKey: true, shiftKey: true }));
94
+ }
95
+ export function isUppercase(event) {
96
+ const { code } = event;
97
+ return ((code === 'Numpad2' || code === 'Digit2') &&
98
+ isModifierMatch(event, { ctrlKey: true, shiftKey: true }));
99
+ }
100
+ export function isCapitalize(event) {
101
+ const { code } = event;
102
+ return ((code === 'Numpad3' || code === 'Digit3') &&
103
+ isModifierMatch(event, { ctrlKey: true, shiftKey: true }));
104
+ }
105
+ export function isStrikeThrough(event) {
106
+ const { code } = event;
107
+ return (code === 'KeyX' &&
108
+ isModifierMatch(event, { ...CONTROL_OR_META, shiftKey: true }));
109
+ }
110
+ export function isIndent(event) {
111
+ const { code } = event;
112
+ return code === 'BracketRight' && isModifierMatch(event, CONTROL_OR_META);
113
+ }
114
+ export function isOutdent(event) {
115
+ const { code } = event;
116
+ return code === 'BracketLeft' && isModifierMatch(event, CONTROL_OR_META);
117
+ }
118
+ export function isCenterAlign(event) {
119
+ const { code } = event;
120
+ return (code === 'KeyE' &&
121
+ isModifierMatch(event, { ...CONTROL_OR_META, shiftKey: true }));
122
+ }
123
+ export function isLeftAlign(event) {
124
+ const { code } = event;
125
+ return (code === 'KeyL' &&
126
+ isModifierMatch(event, { ...CONTROL_OR_META, shiftKey: true }));
127
+ }
128
+ export function isRightAlign(event) {
129
+ const { code } = event;
130
+ return (code === 'KeyR' &&
131
+ isModifierMatch(event, { ...CONTROL_OR_META, shiftKey: true }));
132
+ }
133
+ export function isJustifyAlign(event) {
134
+ const { code } = event;
135
+ return (code === 'KeyJ' &&
136
+ isModifierMatch(event, { ...CONTROL_OR_META, shiftKey: true }));
137
+ }
138
+ export function isSubscript(event) {
139
+ const { code } = event;
140
+ return code === 'Comma' && isModifierMatch(event, CONTROL_OR_META);
141
+ }
142
+ export function isSuperscript(event) {
143
+ const { code } = event;
144
+ return code === 'Period' && isModifierMatch(event, CONTROL_OR_META);
145
+ }
146
+ export function isInsertCodeBlock(event) {
147
+ const { code } = event;
148
+ return (code === 'KeyC' &&
149
+ isModifierMatch(event, { ...CONTROL_OR_META, shiftKey: true }));
150
+ }
151
+ export function isIncreaseFontSize(event) {
152
+ const { code } = event;
153
+ return (code === 'Period' &&
154
+ isModifierMatch(event, { ...CONTROL_OR_META, shiftKey: true }));
155
+ }
156
+ export function isDecreaseFontSize(event) {
157
+ const { code } = event;
158
+ return (code === 'Comma' &&
159
+ isModifierMatch(event, { ...CONTROL_OR_META, shiftKey: true }));
160
+ }
161
+ export function isClearFormatting(event) {
162
+ const { code } = event;
163
+ return code === 'Backslash' && isModifierMatch(event, CONTROL_OR_META);
164
+ }
165
+ export function isInsertLink(event) {
166
+ const { code } = event;
167
+ return code === 'KeyK' && isModifierMatch(event, CONTROL_OR_META);
168
+ }
169
+ export function isAddComment(event) {
170
+ const { code } = event;
171
+ return (code === 'KeyM' &&
172
+ isModifierMatch(event, { ...CONTROL_OR_META, altKey: true }));
173
+ }
@@ -0,0 +1,2 @@
1
+ import type { JSX } from 'react';
2
+ export default function SpecialTextPlugin(): JSX.Element | null;
@@ -0,0 +1,50 @@
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 { TextNode } from 'lexical';
7
+ import { useEffect } from 'react';
8
+ import { $createSpecialTextNode, SpecialTextNode, } from '../../nodes/SpecialTextNode';
9
+ const BRACKETED_TEXT_REGEX = /\[([^\[\]]+)\]/; // eslint-disable-line
10
+ function $findAndTransformText(node) {
11
+ const text = node.getTextContent();
12
+ const match = BRACKETED_TEXT_REGEX.exec(text);
13
+ if (match) {
14
+ const matchedText = match[1];
15
+ const startIndex = match.index;
16
+ let targetNode;
17
+ if (startIndex === 0) {
18
+ [targetNode] = node.splitText(startIndex + match[0].length);
19
+ }
20
+ else {
21
+ [, targetNode] = node.splitText(startIndex, startIndex + match[0].length);
22
+ }
23
+ const specialTextNode = $createSpecialTextNode(matchedText);
24
+ targetNode.replace(specialTextNode);
25
+ return specialTextNode;
26
+ }
27
+ return null;
28
+ }
29
+ function $textNodeTransform(node) {
30
+ let targetNode = node;
31
+ while (targetNode !== null) {
32
+ if (!targetNode.isSimpleText()) {
33
+ return;
34
+ }
35
+ targetNode = $findAndTransformText(targetNode);
36
+ }
37
+ }
38
+ function useTextTransformation(editor) {
39
+ useEffect(() => {
40
+ if (!editor.hasNodes([SpecialTextNode])) {
41
+ throw new Error('SpecialTextPlugin: SpecialTextNode not registered on editor');
42
+ }
43
+ return editor.registerNodeTransform(TextNode, $textNodeTransform);
44
+ }, [editor]);
45
+ }
46
+ export default function SpecialTextPlugin() {
47
+ const [editor] = useLexicalComposerContext();
48
+ useTextTransformation(editor);
49
+ return null;
50
+ }
@@ -0,0 +1,5 @@
1
+ import type { LexicalCommand } from 'lexical';
2
+ export declare const SPEECH_TO_TEXT_COMMAND: LexicalCommand<boolean>;
3
+ export declare const SUPPORT_SPEECH_RECOGNITION: boolean;
4
+ declare const _default: () => null;
5
+ export default _default;
@@ -0,0 +1,86 @@
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 { $getSelection, $isRangeSelection, COMMAND_PRIORITY_EDITOR, createCommand, REDO_COMMAND, UNDO_COMMAND, } from 'lexical';
7
+ import { useEffect, useRef, useState } from 'react';
8
+ import useReport from '../../hooks/useReport';
9
+ export const SPEECH_TO_TEXT_COMMAND = createCommand('SPEECH_TO_TEXT_COMMAND');
10
+ const VOICE_COMMANDS = {
11
+ '\n': ({ selection }) => {
12
+ selection.insertParagraph();
13
+ },
14
+ redo: ({ editor }) => {
15
+ editor.dispatchCommand(REDO_COMMAND, undefined);
16
+ },
17
+ undo: ({ editor }) => {
18
+ editor.dispatchCommand(UNDO_COMMAND, undefined);
19
+ },
20
+ };
21
+ export const SUPPORT_SPEECH_RECOGNITION = 'SpeechRecognition' in window || 'webkitSpeechRecognition' in window;
22
+ function SpeechToTextPlugin() {
23
+ const [editor] = useLexicalComposerContext();
24
+ const [isEnabled, setIsEnabled] = useState(false);
25
+ const SpeechRecognition =
26
+ // @ts-expect-error missing type
27
+ window.SpeechRecognition || window.webkitSpeechRecognition;
28
+ const recognition = useRef(null);
29
+ const report = useReport();
30
+ useEffect(() => {
31
+ if (isEnabled && recognition.current === null) {
32
+ recognition.current = new SpeechRecognition();
33
+ recognition.current.continuous = true;
34
+ recognition.current.interimResults = true;
35
+ recognition.current.addEventListener('result', (event) => {
36
+ const resultItem = event.results.item(event.resultIndex);
37
+ const { transcript } = resultItem.item(0);
38
+ report(transcript);
39
+ if (!resultItem.isFinal) {
40
+ return;
41
+ }
42
+ editor.update(() => {
43
+ const selection = $getSelection();
44
+ if ($isRangeSelection(selection)) {
45
+ const command = VOICE_COMMANDS[transcript.toLowerCase().trim()];
46
+ if (command) {
47
+ command({
48
+ editor,
49
+ selection,
50
+ });
51
+ }
52
+ else if (transcript.match(/\s*\n\s*/)) {
53
+ selection.insertParagraph();
54
+ }
55
+ else {
56
+ selection.insertText(transcript);
57
+ }
58
+ }
59
+ });
60
+ });
61
+ }
62
+ if (recognition.current) {
63
+ if (isEnabled) {
64
+ recognition.current.start();
65
+ }
66
+ else {
67
+ recognition.current.stop();
68
+ }
69
+ }
70
+ return () => {
71
+ if (recognition.current !== null) {
72
+ recognition.current.stop();
73
+ }
74
+ };
75
+ }, [SpeechRecognition, editor, isEnabled, report]);
76
+ useEffect(() => {
77
+ return editor.registerCommand(SPEECH_TO_TEXT_COMMAND, (_isEnabled) => {
78
+ setIsEnabled(_isEnabled);
79
+ return true;
80
+ }, COMMAND_PRIORITY_EDITOR);
81
+ }, [editor]);
82
+ return null;
83
+ }
84
+ export default (SUPPORT_SPEECH_RECOGNITION
85
+ ? SpeechToTextPlugin
86
+ : () => null);
@@ -0,0 +1,2 @@
1
+ import type { JSX } from 'react';
2
+ export default function StickyPlugin(): JSX.Element | null;
@@ -0,0 +1,16 @@
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 { useEffect } from 'react';
7
+ import { StickyNode } from '../../nodes/StickyNode';
8
+ export default function StickyPlugin() {
9
+ const [editor] = useLexicalComposerContext();
10
+ useEffect(() => {
11
+ if (!editor.hasNodes([StickyNode])) {
12
+ throw new Error('StickyPlugin: StickyNode not registered on editor');
13
+ }
14
+ }, [editor]);
15
+ return null;
16
+ }
@@ -0,0 +1 @@
1
+ export default function TabFocusPlugin(): null;
@@ -0,0 +1,38 @@
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 { $getSelection, $isRangeSelection, $setSelection, COMMAND_PRIORITY_LOW, FOCUS_COMMAND, } from 'lexical';
7
+ import { useEffect } from 'react';
8
+ const TAB_TO_FOCUS_INTERVAL = 100;
9
+ let lastTabKeyDownTimestamp = 0;
10
+ let hasRegisteredKeyDownListener = false;
11
+ function registerKeyTimeStampTracker() {
12
+ window.addEventListener('keydown', (event) => {
13
+ // Tab
14
+ if (event.key === 'Tab') {
15
+ lastTabKeyDownTimestamp = event.timeStamp;
16
+ }
17
+ }, true);
18
+ }
19
+ export default function TabFocusPlugin() {
20
+ const [editor] = useLexicalComposerContext();
21
+ useEffect(() => {
22
+ if (!hasRegisteredKeyDownListener) {
23
+ registerKeyTimeStampTracker();
24
+ hasRegisteredKeyDownListener = true;
25
+ }
26
+ return editor.registerCommand(FOCUS_COMMAND, (event) => {
27
+ const selection = $getSelection();
28
+ if ($isRangeSelection(selection)) {
29
+ if (lastTabKeyDownTimestamp + TAB_TO_FOCUS_INTERVAL >
30
+ event.timeStamp) {
31
+ $setSelection(selection.clone());
32
+ }
33
+ }
34
+ return false;
35
+ }, COMMAND_PRIORITY_LOW);
36
+ }, [editor]);
37
+ return null;
38
+ }
@@ -0,0 +1,5 @@
1
+ import { ReactPortal } from 'react';
2
+ export default function TableActionMenuPlugin({ anchorElem, cellMerge, }: {
3
+ anchorElem?: HTMLElement;
4
+ cellMerge?: boolean;
5
+ }): null | ReactPortal;