@datalayer/lexical-loro 0.2.5 → 1.0.1
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.
- package/package.json +1 -1
- package/lib/App.d.ts +0 -2
- package/lib/App.js +0 -141
- package/lib/Editor.d.ts +0 -2
- package/lib/Editor.js +0 -115
- package/lib/Settings.d.ts +0 -2
- package/lib/Settings.js +0 -57
- package/lib/appSettings.d.ts +0 -36
- package/lib/appSettings.js +0 -48
- package/lib/collab/loro/Bindings.d.ts +0 -41
- package/lib/collab/loro/Bindings.js +0 -99
- package/lib/collab/loro/Debug.d.ts +0 -33
- package/lib/collab/loro/Debug.js +0 -452
- package/lib/collab/loro/LexicalCollaborationContext.d.ts +0 -19
- package/lib/collab/loro/LexicalCollaborationContext.js +0 -52
- package/lib/collab/loro/LexicalCollaborationPlugin.d.ts +0 -24
- package/lib/collab/loro/LexicalCollaborationPlugin.js +0 -83
- package/lib/collab/loro/State.d.ts +0 -53
- package/lib/collab/loro/State.js +0 -94
- package/lib/collab/loro/components/LoroCollaborationUI.d.ts +0 -13
- package/lib/collab/loro/components/LoroCollaborationUI.js +0 -9
- package/lib/collab/loro/components/LoroCollaborators.d.ts +0 -8
- package/lib/collab/loro/components/LoroCollaborators.js +0 -102
- package/lib/collab/loro/components/index.d.ts +0 -2
- package/lib/collab/loro/components/index.js +0 -6
- package/lib/collab/loro/index.d.ts +0 -6
- package/lib/collab/loro/index.js +0 -10
- package/lib/collab/loro/integrators/BaseIntegrator.d.ts +0 -14
- package/lib/collab/loro/integrators/BaseIntegrator.js +0 -5
- package/lib/collab/loro/integrators/CounterIntegrator.d.ts +0 -23
- package/lib/collab/loro/integrators/CounterIntegrator.js +0 -44
- package/lib/collab/loro/integrators/ListIntegrator.d.ts +0 -23
- package/lib/collab/loro/integrators/ListIntegrator.js +0 -53
- package/lib/collab/loro/integrators/MapIntegrator.d.ts +0 -24
- package/lib/collab/loro/integrators/MapIntegrator.js +0 -235
- package/lib/collab/loro/integrators/TextIntegrator.d.ts +0 -25
- package/lib/collab/loro/integrators/TextIntegrator.js +0 -55
- package/lib/collab/loro/integrators/TreeIntegrator.d.ts +0 -36
- package/lib/collab/loro/integrators/TreeIntegrator.js +0 -251
- package/lib/collab/loro/nodes/NodeFactory.d.ts +0 -15
- package/lib/collab/loro/nodes/NodeFactory.js +0 -101
- package/lib/collab/loro/nodes/NodesMapper.d.ts +0 -120
- package/lib/collab/loro/nodes/NodesMapper.js +0 -277
- package/lib/collab/loro/propagators/DecoratorNodePropagator.d.ts +0 -60
- package/lib/collab/loro/propagators/DecoratorNodePropagator.js +0 -306
- package/lib/collab/loro/propagators/ElementNodePropagator.d.ts +0 -62
- package/lib/collab/loro/propagators/ElementNodePropagator.js +0 -326
- package/lib/collab/loro/propagators/LineBreakNodePropagator.d.ts +0 -57
- package/lib/collab/loro/propagators/LineBreakNodePropagator.js +0 -200
- package/lib/collab/loro/propagators/RootNodePropagator.d.ts +0 -55
- package/lib/collab/loro/propagators/RootNodePropagator.js +0 -174
- package/lib/collab/loro/propagators/TextNodePropagator.d.ts +0 -60
- package/lib/collab/loro/propagators/TextNodePropagator.js +0 -440
- package/lib/collab/loro/propagators/index.d.ts +0 -49
- package/lib/collab/loro/propagators/index.js +0 -30
- package/lib/collab/loro/provider/websocket.d.ts +0 -116
- package/lib/collab/loro/provider/websocket.js +0 -911
- package/lib/collab/loro/servers/index.d.ts +0 -0
- package/lib/collab/loro/servers/index.js +0 -4
- package/lib/collab/loro/servers/ws/callback.d.ts +0 -5
- package/lib/collab/loro/servers/ws/callback.js +0 -89
- package/lib/collab/loro/servers/ws/server.d.ts +0 -2
- package/lib/collab/loro/servers/ws/server.js +0 -29
- package/lib/collab/loro/servers/ws/utils.d.ts +0 -40
- package/lib/collab/loro/servers/ws/utils.js +0 -517
- package/lib/collab/loro/sync/SyncCursors.d.ts +0 -32
- package/lib/collab/loro/sync/SyncCursors.js +0 -475
- package/lib/collab/loro/sync/SyncLexicalToLoro.d.ts +0 -4
- package/lib/collab/loro/sync/SyncLexicalToLoro.js +0 -113
- package/lib/collab/loro/sync/SyncLoroToLexical.d.ts +0 -5
- package/lib/collab/loro/sync/SyncLoroToLexical.js +0 -100
- package/lib/collab/loro/types/LexicalNodeData.d.ts +0 -32
- package/lib/collab/loro/types/LexicalNodeData.js +0 -75
- package/lib/collab/loro/useCollaboration.d.ts +0 -12
- package/lib/collab/loro/useCollaboration.js +0 -260
- package/lib/collab/loro/utils/InitialContent.d.ts +0 -64
- package/lib/collab/loro/utils/InitialContent.js +0 -113
- package/lib/collab/loro/utils/LexicalToLoro.d.ts +0 -18
- package/lib/collab/loro/utils/LexicalToLoro.js +0 -100
- package/lib/collab/loro/utils/Utils.d.ts +0 -44
- package/lib/collab/loro/utils/Utils.js +0 -157
- package/lib/collab/loro/wsProvider.d.ts +0 -8
- package/lib/collab/loro/wsProvider.js +0 -35
- package/lib/collab/utils/invariant.d.ts +0 -1
- package/lib/collab/utils/invariant.js +0 -15
- package/lib/collab/utils/simpleDiffWithCursor.d.ts +0 -5
- package/lib/collab/utils/simpleDiffWithCursor.js +0 -35
- package/lib/collab/yjs/Bindings.d.ts +0 -23
- package/lib/collab/yjs/Bindings.js +0 -26
- package/lib/collab/yjs/Debug.d.ts +0 -23
- package/lib/collab/yjs/Debug.js +0 -213
- package/lib/collab/yjs/LexicalCollaborationContext.d.ts +0 -10
- package/lib/collab/yjs/LexicalCollaborationContext.js +0 -37
- package/lib/collab/yjs/LexicalCollaborationPlugin.d.ts +0 -21
- package/lib/collab/yjs/LexicalCollaborationPlugin.js +0 -63
- package/lib/collab/yjs/State.d.ts +0 -51
- package/lib/collab/yjs/State.js +0 -35
- package/lib/collab/yjs/nodes/AnyCollabNode.d.ts +0 -5
- package/lib/collab/yjs/nodes/AnyCollabNode.js +0 -1
- package/lib/collab/yjs/nodes/CollabDecoratorNode.d.ts +0 -22
- package/lib/collab/yjs/nodes/CollabDecoratorNode.js +0 -64
- package/lib/collab/yjs/nodes/CollabElementNode.d.ts +0 -40
- package/lib/collab/yjs/nodes/CollabElementNode.js +0 -462
- package/lib/collab/yjs/nodes/CollabLineBreakNode.d.ts +0 -19
- package/lib/collab/yjs/nodes/CollabLineBreakNode.js +0 -44
- package/lib/collab/yjs/nodes/CollabTextNode.d.ts +0 -25
- package/lib/collab/yjs/nodes/CollabTextNode.js +0 -103
- package/lib/collab/yjs/provider/websocket.d.ts +0 -88
- package/lib/collab/yjs/provider/websocket.js +0 -415
- package/lib/collab/yjs/servers/index.d.ts +0 -0
- package/lib/collab/yjs/servers/index.js +0 -0
- package/lib/collab/yjs/servers/ws/callback.d.ts +0 -5
- package/lib/collab/yjs/servers/ws/callback.js +0 -72
- package/lib/collab/yjs/servers/ws/server.d.ts +0 -2
- package/lib/collab/yjs/servers/ws/server.js +0 -25
- package/lib/collab/yjs/servers/ws/utils.d.ts +0 -49
- package/lib/collab/yjs/servers/ws/utils.js +0 -284
- package/lib/collab/yjs/sync/SyncCursors.d.ts +0 -39
- package/lib/collab/yjs/sync/SyncCursors.js +0 -351
- package/lib/collab/yjs/sync/SyncEditorStates.d.ts +0 -10
- package/lib/collab/yjs/sync/SyncEditorStates.js +0 -200
- package/lib/collab/yjs/useCollaboration.d.ts +0 -12
- package/lib/collab/yjs/useCollaboration.js +0 -255
- package/lib/collab/yjs/utils/Utils.d.ts +0 -25
- package/lib/collab/yjs/utils/Utils.js +0 -402
- package/lib/collab/yjs/wsProvider.d.ts +0 -3
- package/lib/collab/yjs/wsProvider.js +0 -21
- package/lib/commenting/index.d.ts +0 -41
- package/lib/commenting/index.js +0 -328
- package/lib/context/FlashMessageContext.d.ts +0 -7
- package/lib/context/FlashMessageContext.js +0 -24
- package/lib/context/SettingsContext.d.ts +0 -12
- package/lib/context/SettingsContext.js +0 -38
- package/lib/context/SharedHistoryContext.d.ts +0 -11
- package/lib/context/SharedHistoryContext.js +0 -11
- package/lib/context/ToolbarContext.d.ts +0 -65
- package/lib/context/ToolbarContext.js +0 -84
- package/lib/demo.d.ts +0 -12
- package/lib/demo.js +0 -45
- package/lib/hooks/useFlashMessage.d.ts +0 -2
- package/lib/hooks/useFlashMessage.js +0 -8
- package/lib/hooks/useModal.d.ts +0 -5
- package/lib/hooks/useModal.js +0 -26
- package/lib/hooks/useReport.d.ts +0 -1
- package/lib/hooks/useReport.js +0 -50
- package/lib/index.d.ts +0 -1
- package/lib/index.js +0 -5
- package/lib/nodes/AutocompleteNode.d.ts +0 -27
- package/lib/nodes/AutocompleteNode.js +0 -60
- package/lib/nodes/CounterComponent.d.ts +0 -6
- package/lib/nodes/CounterComponent.js +0 -137
- package/lib/nodes/CounterNode.d.ts +0 -23
- package/lib/nodes/CounterNode.js +0 -47
- package/lib/nodes/DateTimeNode/DateTimeComponent.d.ts +0 -8
- package/lib/nodes/DateTimeNode/DateTimeComponent.js +0 -119
- package/lib/nodes/DateTimeNode/DateTimeNode.d.ts +0 -27
- package/lib/nodes/DateTimeNode/DateTimeNode.js +0 -82
- package/lib/nodes/EmojiNode.d.ts +0 -18
- package/lib/nodes/EmojiNode.js +0 -54
- package/lib/nodes/EquationComponent.d.ts +0 -9
- package/lib/nodes/EquationComponent.js +0 -75
- package/lib/nodes/EquationNode.d.ts +0 -26
- package/lib/nodes/EquationNode.js +0 -109
- package/lib/nodes/ExcalidrawNode/ExcalidrawComponent.d.ts +0 -8
- package/lib/nodes/ExcalidrawNode/ExcalidrawComponent.js +0 -110
- package/lib/nodes/ExcalidrawNode/ExcalidrawImage.d.ts +0 -50
- package/lib/nodes/ExcalidrawNode/ExcalidrawImage.js +0 -55
- package/lib/nodes/ExcalidrawNode/index.d.ts +0 -32
- package/lib/nodes/ExcalidrawNode/index.js +0 -117
- package/lib/nodes/FigmaNode.d.ts +0 -20
- package/lib/nodes/FigmaNode.js +0 -52
- package/lib/nodes/ImageComponent.d.ts +0 -16
- package/lib/nodes/ImageComponent.js +0 -272
- package/lib/nodes/ImageNode.d.ts +0 -50
- package/lib/nodes/ImageNode.js +0 -151
- package/lib/nodes/InlineImageNode/InlineImageComponent.d.ts +0 -26
- package/lib/nodes/InlineImageNode/InlineImageComponent.js +0 -161
- package/lib/nodes/InlineImageNode/InlineImageNode.d.ts +0 -59
- package/lib/nodes/InlineImageNode/InlineImageNode.js +0 -162
- package/lib/nodes/KeywordNode.d.ts +0 -14
- package/lib/nodes/KeywordNode.js +0 -37
- package/lib/nodes/LayoutContainerNode.d.ts +0 -24
- package/lib/nodes/LayoutContainerNode.js +0 -95
- package/lib/nodes/LayoutItemNode.d.ts +0 -16
- package/lib/nodes/LayoutItemNode.js +0 -69
- package/lib/nodes/MentionNode.d.ts +0 -20
- package/lib/nodes/MentionNode.js +0 -85
- package/lib/nodes/PageBreakNode/index.d.ts +0 -17
- package/lib/nodes/PageBreakNode/index.js +0 -83
- package/lib/nodes/PlaygroundNodes.d.ts +0 -3
- package/lib/nodes/PlaygroundNodes.js +0 -75
- package/lib/nodes/PollComponent.d.ts +0 -9
- package/lib/nodes/PollComponent.js +0 -85
- package/lib/nodes/PollNode.d.ts +0 -43
- package/lib/nodes/PollNode.js +0 -153
- package/lib/nodes/SpecialTextNode.d.ts +0 -24
- package/lib/nodes/SpecialTextNode.js +0 -54
- package/lib/nodes/StickyComponent.d.ts +0 -10
- package/lib/nodes/StickyComponent.js +0 -162
- package/lib/nodes/StickyNode.d.ts +0 -31
- package/lib/nodes/StickyNode.js +0 -76
- package/lib/nodes/TweetNode.d.ts +0 -21
- package/lib/nodes/TweetNode.js +0 -119
- package/lib/nodes/YouTubeNode.d.ts +0 -22
- package/lib/nodes/YouTubeNode.js +0 -84
- package/lib/plugins/ActionsPlugin/index.d.ts +0 -5
- package/lib/plugins/ActionsPlugin/index.js +0 -168
- package/lib/plugins/AutoEmbedPlugin/index.d.ts +0 -19
- package/lib/plugins/AutoEmbedPlugin/index.js +0 -158
- package/lib/plugins/AutoLinkPlugin/index.d.ts +0 -2
- package/lib/plugins/AutoLinkPlugin/index.js +0 -15
- package/lib/plugins/AutocompletePlugin/index.d.ts +0 -10
- package/lib/plugins/AutocompletePlugin/index.js +0 -2477
- package/lib/plugins/CodeActionMenuPlugin/components/CopyButton/index.d.ts +0 -7
- package/lib/plugins/CodeActionMenuPlugin/components/CopyButton/index.js +0 -46
- package/lib/plugins/CodeActionMenuPlugin/components/PrettierButton/index.d.ts +0 -17
- package/lib/plugins/CodeActionMenuPlugin/components/PrettierButton/index.js +0 -115
- package/lib/plugins/CodeActionMenuPlugin/index.d.ts +0 -5
- package/lib/plugins/CodeActionMenuPlugin/index.js +0 -104
- package/lib/plugins/CodeActionMenuPlugin/utils.d.ts +0 -1
- package/lib/plugins/CodeActionMenuPlugin/utils.js +0 -22
- package/lib/plugins/CodeHighlightPrismPlugin/index.d.ts +0 -2
- package/lib/plugins/CodeHighlightPrismPlugin/index.js +0 -14
- package/lib/plugins/CodeHighlightShikiPlugin/index.d.ts +0 -2
- package/lib/plugins/CodeHighlightShikiPlugin/index.js +0 -14
- package/lib/plugins/CollapsiblePlugin/CollapsibleContainerNode.d.ts +0 -25
- package/lib/plugins/CollapsiblePlugin/CollapsibleContainerNode.js +0 -135
- package/lib/plugins/CollapsiblePlugin/CollapsibleContentNode.d.ts +0 -16
- package/lib/plugins/CollapsiblePlugin/CollapsibleContentNode.js +0 -83
- package/lib/plugins/CollapsiblePlugin/CollapsibleTitleNode.d.ts +0 -16
- package/lib/plugins/CollapsiblePlugin/CollapsibleTitleNode.js +0 -85
- package/lib/plugins/CollapsiblePlugin/CollapsibleUtils.d.ts +0 -2
- package/lib/plugins/CollapsiblePlugin/CollapsibleUtils.js +0 -12
- package/lib/plugins/CollapsiblePlugin/index.d.ts +0 -3
- package/lib/plugins/CollapsiblePlugin/index.js +0 -132
- package/lib/plugins/CommentPlugin/index.d.ts +0 -9
- package/lib/plugins/CommentPlugin/index.js +0 -460
- package/lib/plugins/ComponentPickerPlugin/index.d.ts +0 -2
- package/lib/plugins/ComponentPickerPlugin/index.js +0 -276
- package/lib/plugins/ContextMenuPlugin/index.d.ts +0 -2
- package/lib/plugins/ContextMenuPlugin/index.js +0 -112
- package/lib/plugins/CounterPlugin/index.d.ts +0 -3
- package/lib/plugins/CounterPlugin/index.js +0 -24
- package/lib/plugins/DateTimePlugin/index.d.ts +0 -8
- package/lib/plugins/DateTimePlugin/index.js +0 -28
- package/lib/plugins/DebugPlugin/index.d.ts +0 -3
- package/lib/plugins/DebugPlugin/index.js +0 -219
- package/lib/plugins/DocsPlugin/index.d.ts +0 -2
- package/lib/plugins/DocsPlugin/index.js +0 -4
- package/lib/plugins/DragDropPastePlugin/index.d.ts +0 -1
- package/lib/plugins/DragDropPastePlugin/index.js +0 -37
- package/lib/plugins/DraggableBlockPlugin/index.d.ts +0 -12
- package/lib/plugins/DraggableBlockPlugin/index.js +0 -36
- package/lib/plugins/EmojiPickerPlugin/index.d.ts +0 -1
- package/lib/plugins/EmojiPickerPlugin/index.js +0 -84
- package/lib/plugins/EmojisPlugin/index.d.ts +0 -2
- package/lib/plugins/EmojisPlugin/index.js +0 -56
- package/lib/plugins/EquationsPlugin/index.d.ts +0 -14
- package/lib/plugins/EquationsPlugin/index.js +0 -34
- package/lib/plugins/ExcalidrawPlugin/index.d.ts +0 -5
- package/lib/plugins/ExcalidrawPlugin/index.js +0 -44
- package/lib/plugins/FigmaPlugin/index.d.ts +0 -4
- package/lib/plugins/FigmaPlugin/index.js +0 -24
- package/lib/plugins/FloatingLinkEditorPlugin/index.d.ts +0 -15
- package/lib/plugins/FloatingLinkEditorPlugin/index.js +0 -280
- package/lib/plugins/FloatingTextFormatToolbarPlugin/index.d.ts +0 -7
- package/lib/plugins/FloatingTextFormatToolbarPlugin/index.js +0 -219
- package/lib/plugins/ImagesPlugin/index.d.ts +0 -24
- package/lib/plugins/ImagesPlugin/index.js +0 -195
- package/lib/plugins/InlineImagePlugin/index.d.ts +0 -17
- package/lib/plugins/InlineImagePlugin/index.js +0 -180
- package/lib/plugins/KeywordsPlugin/index.d.ts +0 -2
- package/lib/plugins/KeywordsPlugin/index.js +0 -35
- package/lib/plugins/LayoutPlugin/InsertLayoutDialog.d.ts +0 -6
- package/lib/plugins/LayoutPlugin/InsertLayoutDialog.js +0 -21
- package/lib/plugins/LayoutPlugin/LayoutPlugin.d.ts +0 -7
- package/lib/plugins/LayoutPlugin/LayoutPlugin.js +0 -135
- package/lib/plugins/LinkPlugin/index.d.ts +0 -6
- package/lib/plugins/LinkPlugin/index.js +0 -11
- package/lib/plugins/MarkdownShortcutPlugin/index.d.ts +0 -2
- package/lib/plugins/MarkdownShortcutPlugin/index.js +0 -6
- package/lib/plugins/MarkdownTransformers/index.d.ts +0 -8
- package/lib/plugins/MarkdownTransformers/index.js +0 -238
- package/lib/plugins/MaxLengthPlugin/index.d.ts +0 -3
- package/lib/plugins/MaxLengthPlugin/index.js +0 -41
- package/lib/plugins/MentionsPlugin/index.d.ts +0 -2
- package/lib/plugins/MentionsPlugin/index.js +0 -564
- package/lib/plugins/PageBreakPlugin/index.d.ts +0 -4
- package/lib/plugins/PageBreakPlugin/index.js +0 -31
- package/lib/plugins/PasteLogPlugin/index.d.ts +0 -2
- package/lib/plugins/PasteLogPlugin/index.js +0 -27
- package/lib/plugins/PollPlugin/index.d.ts +0 -8
- package/lib/plugins/PollPlugin/index.js +0 -38
- package/lib/plugins/ShortcutsPlugin/index.d.ts +0 -6
- package/lib/plugins/ShortcutsPlugin/index.js +0 -116
- package/lib/plugins/ShortcutsPlugin/shortcuts.d.ts +0 -59
- package/lib/plugins/ShortcutsPlugin/shortcuts.js +0 -173
- package/lib/plugins/SpecialTextPlugin/index.d.ts +0 -2
- package/lib/plugins/SpecialTextPlugin/index.js +0 -50
- package/lib/plugins/SpeechToTextPlugin/index.d.ts +0 -5
- package/lib/plugins/SpeechToTextPlugin/index.js +0 -86
- package/lib/plugins/StickyPlugin/index.d.ts +0 -2
- package/lib/plugins/StickyPlugin/index.js +0 -16
- package/lib/plugins/TabFocusPlugin/index.d.ts +0 -1
- package/lib/plugins/TabFocusPlugin/index.js +0 -38
- package/lib/plugins/TableActionMenuPlugin/index.d.ts +0 -5
- package/lib/plugins/TableActionMenuPlugin/index.js +0 -492
- package/lib/plugins/TableCellResizer/index.d.ts +0 -3
- package/lib/plugins/TableCellResizer/index.js +0 -297
- package/lib/plugins/TableHoverActionsPlugin/index.d.ts +0 -4
- package/lib/plugins/TableHoverActionsPlugin/index.js +0 -188
- package/lib/plugins/TableOfContentsPlugin/index.d.ts +0 -2
- package/lib/plugins/TableOfContentsPlugin/index.js +0 -116
- package/lib/plugins/TablePlugin.d.ts +0 -31
- package/lib/plugins/TablePlugin.js +0 -63
- package/lib/plugins/TestRecorderPlugin/index.d.ts +0 -3
- package/lib/plugins/TestRecorderPlugin/index.js +0 -346
- package/lib/plugins/ToolbarPlugin/fontSize.d.ts +0 -9
- package/lib/plugins/ToolbarPlugin/fontSize.js +0 -84
- package/lib/plugins/ToolbarPlugin/index.d.ts +0 -9
- package/lib/plugins/ToolbarPlugin/index.js +0 -500
- package/lib/plugins/ToolbarPlugin/utils.d.ts +0 -26
- package/lib/plugins/ToolbarPlugin/utils.js +0 -247
- package/lib/plugins/TreeViewPlugin/index.d.ts +0 -2
- package/lib/plugins/TreeViewPlugin/index.js +0 -7
- package/lib/plugins/TwitterPlugin/index.d.ts +0 -4
- package/lib/plugins/TwitterPlugin/index.js +0 -24
- package/lib/plugins/TypingPerfPlugin/index.d.ts +0 -2
- package/lib/plugins/TypingPerfPlugin/index.js +0 -97
- package/lib/plugins/YouTubePlugin/index.d.ts +0 -4
- package/lib/plugins/YouTubePlugin/index.js +0 -24
- package/lib/server/validation.d.ts +0 -1
- package/lib/server/validation.js +0 -115
- package/lib/setupEnv.d.ts +0 -2
- package/lib/setupEnv.js +0 -29
- package/lib/themes/CommentEditorTheme.d.ts +0 -4
- package/lib/themes/CommentEditorTheme.js +0 -11
- package/lib/themes/PlaygroundEditorTheme.d.ts +0 -4
- package/lib/themes/PlaygroundEditorTheme.js +0 -124
- package/lib/themes/StickyEditorTheme.d.ts +0 -4
- package/lib/themes/StickyEditorTheme.js +0 -11
- package/lib/tyes.dt.d.ts +0 -12
- package/lib/tyes.dt.js +0 -4
- package/lib/ui/Button.d.ts +0 -12
- package/lib/ui/Button.js +0 -6
- package/lib/ui/ColorPicker.d.ts +0 -14
- package/lib/ui/ColorPicker.js +0 -219
- package/lib/ui/ContentEditable.d.ts +0 -9
- package/lib/ui/ContentEditable.js +0 -6
- package/lib/ui/Dialog.d.ts +0 -10
- package/lib/ui/Dialog.js +0 -8
- package/lib/ui/DropDown.d.ts +0 -18
- package/lib/ui/DropDown.js +0 -133
- package/lib/ui/DropdownColorPicker.d.ts +0 -13
- package/lib/ui/DropdownColorPicker.js +0 -6
- package/lib/ui/EquationEditor.d.ts +0 -8
- package/lib/ui/EquationEditor.js +0 -11
- package/lib/ui/ExcalidrawModal.d.ts +0 -42
- package/lib/ui/ExcalidrawModal.js +0 -103
- package/lib/ui/FileInput.d.ts +0 -10
- package/lib/ui/FileInput.js +0 -5
- package/lib/ui/FlashMessage.d.ts +0 -7
- package/lib/ui/FlashMessage.js +0 -6
- package/lib/ui/ImageResizer.d.ts +0 -17
- package/lib/ui/ImageResizer.js +0 -171
- package/lib/ui/KatexEquationAlterer.d.ts +0 -8
- package/lib/ui/KatexEquationAlterer.js +0 -23
- package/lib/ui/KatexRenderer.d.ts +0 -6
- package/lib/ui/KatexRenderer.js +0 -24
- package/lib/ui/Modal.d.ts +0 -9
- package/lib/ui/Modal.js +0 -48
- package/lib/ui/Select.d.ts +0 -8
- package/lib/ui/Select.js +0 -5
- package/lib/ui/Switch.d.ts +0 -8
- package/lib/ui/Switch.js +0 -6
- package/lib/ui/TextInput.d.ts +0 -13
- package/lib/ui/TextInput.js +0 -7
- package/lib/utils/docSerialization.d.ts +0 -3
- package/lib/utils/docSerialization.js +0 -60
- package/lib/utils/emoji-list.d.ts +0 -20
- package/lib/utils/emoji-list.js +0 -16609
- package/lib/utils/getDOMRangeRect.d.ts +0 -8
- package/lib/utils/getDOMRangeRect.js +0 -26
- package/lib/utils/getSelectedNode.d.ts +0 -2
- package/lib/utils/getSelectedNode.js +0 -28
- package/lib/utils/getThemeSelector.d.ts +0 -2
- package/lib/utils/getThemeSelector.js +0 -14
- package/lib/utils/isMobileWidth.d.ts +0 -7
- package/lib/utils/isMobileWidth.js +0 -11
- package/lib/utils/joinClasses.d.ts +0 -1
- package/lib/utils/joinClasses.js +0 -7
- package/lib/utils/setFloatingElemPosition.d.ts +0 -1
- package/lib/utils/setFloatingElemPosition.js +0 -59
- package/lib/utils/setFloatingElemPositionForLinkEditor.d.ts +0 -1
- package/lib/utils/setFloatingElemPositionForLinkEditor.js +0 -36
- package/lib/utils/swipe.d.ts +0 -4
- package/lib/utils/swipe.js +0 -94
- package/lib/utils/url.d.ts +0 -2
- package/lib/utils/url.js +0 -31
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { useState, useEffect } from 'react';
|
|
3
|
-
import { $getRoot, $createTextNode, $createParagraphNode } from 'lexical';
|
|
4
|
-
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
5
|
-
export function DebugPlugin() {
|
|
6
|
-
const [editor] = useLexicalComposerContext();
|
|
7
|
-
const [mcpTools, setMcpTools] = useState([]);
|
|
8
|
-
const [selectedTool, setSelectedTool] = useState('');
|
|
9
|
-
const [isLoadingTools, setIsLoadingTools] = useState(false);
|
|
10
|
-
const [toolsError, setToolsError] = useState(null);
|
|
11
|
-
// Fetch available MCP tools from the server
|
|
12
|
-
const fetchMCPTools = async () => {
|
|
13
|
-
setIsLoadingTools(true);
|
|
14
|
-
setToolsError(null);
|
|
15
|
-
try {
|
|
16
|
-
// Query the MCP server for available tools
|
|
17
|
-
const response = await fetch('http://localhost:3001/tools/list', {
|
|
18
|
-
method: 'GET',
|
|
19
|
-
headers: {
|
|
20
|
-
'Content-Type': 'application/json',
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
if (!response.ok) {
|
|
24
|
-
throw new Error(`HTTP error! status: ${response.status}`);
|
|
25
|
-
}
|
|
26
|
-
const data = await response.json();
|
|
27
|
-
if (data.tools) {
|
|
28
|
-
const tools = data.tools.map((tool) => ({
|
|
29
|
-
name: tool.name,
|
|
30
|
-
description: tool.description || '',
|
|
31
|
-
parameters: tool.parameters || {}
|
|
32
|
-
}));
|
|
33
|
-
setMcpTools(tools);
|
|
34
|
-
console.log('Fetched MCP tools:', tools);
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
throw new Error('Invalid response format from MCP server');
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
catch (error) {
|
|
41
|
-
console.error('Error fetching MCP tools:', error);
|
|
42
|
-
setToolsError(error instanceof Error ? error.message : 'Unknown error occurred');
|
|
43
|
-
// Set some mock tools for development
|
|
44
|
-
setMcpTools([
|
|
45
|
-
{ name: 'create_file', description: 'Create a new file in the workspace' },
|
|
46
|
-
{ name: 'read_file', description: 'Read contents of a file' },
|
|
47
|
-
{ name: 'list_dir', description: 'List directory contents' }
|
|
48
|
-
]);
|
|
49
|
-
}
|
|
50
|
-
finally {
|
|
51
|
-
setIsLoadingTools(false);
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
// MCP tool execution functions
|
|
55
|
-
const executeGetDocument = async () => {
|
|
56
|
-
try {
|
|
57
|
-
console.log('🔍 Executing get_document MCP tool...');
|
|
58
|
-
const response = await fetch('http://localhost:3001/', {
|
|
59
|
-
method: 'POST',
|
|
60
|
-
headers: {
|
|
61
|
-
'Content-Type': 'application/json',
|
|
62
|
-
},
|
|
63
|
-
body: JSON.stringify({
|
|
64
|
-
jsonrpc: '2.0',
|
|
65
|
-
id: Date.now(),
|
|
66
|
-
method: 'get_document',
|
|
67
|
-
params: {
|
|
68
|
-
doc_id: 'playground/0/main'
|
|
69
|
-
}
|
|
70
|
-
})
|
|
71
|
-
});
|
|
72
|
-
if (!response.ok) {
|
|
73
|
-
throw new Error(`HTTP error! status: ${response.status}`);
|
|
74
|
-
}
|
|
75
|
-
const data = await response.json();
|
|
76
|
-
console.log('📄 get_document result:', data);
|
|
77
|
-
if (data.result) {
|
|
78
|
-
console.log('✅ Document retrieved successfully:', data.result);
|
|
79
|
-
}
|
|
80
|
-
else if (data.error) {
|
|
81
|
-
console.error('❌ MCP error:', data.error);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
catch (error) {
|
|
85
|
-
console.error('💥 Error executing get_document:', error);
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
const executeAppendParagraph = async () => {
|
|
89
|
-
try {
|
|
90
|
-
const timestamp = new Date().toISOString();
|
|
91
|
-
const paragraphText = `New paragraph added at via MCP at ${timestamp}`;
|
|
92
|
-
console.log('✏️ Executing append_paragraph MCP tool with text:', paragraphText);
|
|
93
|
-
const response = await fetch('http://localhost:3001/', {
|
|
94
|
-
method: 'POST',
|
|
95
|
-
headers: {
|
|
96
|
-
'Content-Type': 'application/json',
|
|
97
|
-
},
|
|
98
|
-
body: JSON.stringify({
|
|
99
|
-
jsonrpc: '2.0',
|
|
100
|
-
id: Date.now(),
|
|
101
|
-
method: 'append_paragraph',
|
|
102
|
-
params: {
|
|
103
|
-
doc_id: 'playground/0/main',
|
|
104
|
-
text: paragraphText
|
|
105
|
-
}
|
|
106
|
-
})
|
|
107
|
-
});
|
|
108
|
-
if (!response.ok) {
|
|
109
|
-
throw new Error(`HTTP error! status: ${response.status}`);
|
|
110
|
-
}
|
|
111
|
-
const data = await response.json();
|
|
112
|
-
console.log('📝 append_paragraph result:', data);
|
|
113
|
-
if (data.result) {
|
|
114
|
-
console.log('✅ Paragraph appended successfully:', data.result);
|
|
115
|
-
}
|
|
116
|
-
else if (data.error) {
|
|
117
|
-
console.error('❌ MCP error:', data.error);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
catch (error) {
|
|
121
|
-
console.error('💥 Error executing append_paragraph:', error);
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
// Handle tool selection and execution
|
|
125
|
-
const handleToolChange = (toolName) => {
|
|
126
|
-
if (toolName === '') {
|
|
127
|
-
setSelectedTool('');
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
setSelectedTool(toolName);
|
|
131
|
-
if (toolName === 'get_document') {
|
|
132
|
-
executeGetDocument();
|
|
133
|
-
}
|
|
134
|
-
else if (toolName === 'append_paragraph') {
|
|
135
|
-
executeAppendParagraph();
|
|
136
|
-
}
|
|
137
|
-
// Reset selection back to "Select a tool" after execution
|
|
138
|
-
setTimeout(() => {
|
|
139
|
-
setSelectedTool('');
|
|
140
|
-
}, 100);
|
|
141
|
-
};
|
|
142
|
-
// Set hardcoded tools instead of fetching from server
|
|
143
|
-
useEffect(() => {
|
|
144
|
-
const hardcodedTools = [
|
|
145
|
-
{
|
|
146
|
-
name: 'get_document',
|
|
147
|
-
description: 'Get document',
|
|
148
|
-
parameters: {}
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
name: 'append_paragraph',
|
|
152
|
-
description: 'Append paragraph',
|
|
153
|
-
parameters: {}
|
|
154
|
-
}
|
|
155
|
-
];
|
|
156
|
-
setMcpTools(hardcodedTools);
|
|
157
|
-
console.log('🔧 Hardcoded MCP tools loaded:', hardcodedTools);
|
|
158
|
-
}, []);
|
|
159
|
-
const reloadState = (editor) => {
|
|
160
|
-
const state = editor.getEditorState();
|
|
161
|
-
// JSON needs to be parsed to load an new state.
|
|
162
|
-
const newEditorState = editor.parseEditorState(JSON.stringify(state));
|
|
163
|
-
editor.update(() => {
|
|
164
|
-
// editor.setEditorState(state);
|
|
165
|
-
editor.setEditorState(newEditorState);
|
|
166
|
-
});
|
|
167
|
-
console.log(editor.getEditorState().toJSON());
|
|
168
|
-
};
|
|
169
|
-
function addParagraph(editor) {
|
|
170
|
-
editor.update(() => {
|
|
171
|
-
const root = $getRoot();
|
|
172
|
-
const timestamp = new Date().toISOString();
|
|
173
|
-
const textNode = $createTextNode(`Hello ${timestamp}`);
|
|
174
|
-
const paragraphNode = $createParagraphNode();
|
|
175
|
-
paragraphNode.append(textNode);
|
|
176
|
-
// Insert the paragraph at the beginning of the editor
|
|
177
|
-
const firstChild = root.getFirstChild();
|
|
178
|
-
if (firstChild) {
|
|
179
|
-
firstChild.insertBefore(paragraphNode);
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
root.append(paragraphNode);
|
|
183
|
-
}
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
function first100Keys(editor) {
|
|
187
|
-
editor.getEditorState().read(() => {
|
|
188
|
-
const root = $getRoot();
|
|
189
|
-
const children = root.getChildren();
|
|
190
|
-
const keys = [];
|
|
191
|
-
// Get up to 100 node keys
|
|
192
|
-
const maxNodes = Math.min(100, children.length);
|
|
193
|
-
for (let i = 0; i < maxNodes; i++) {
|
|
194
|
-
keys.push(children[i].getKey());
|
|
195
|
-
}
|
|
196
|
-
console.log(`First ${keys.length} node keys:`, keys);
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
return (_jsxs(_Fragment, { children: [_jsx("button", { onClick: () => { reloadState(editor); }, children: "Reload State" }), _jsx("button", { onClick: () => { addParagraph(editor); }, children: "Add Paragraph" }), _jsx("button", { onClick: () => { first100Keys(editor); }, children: "100 First keys" }), _jsxs("div", { style: { marginLeft: '10px', display: 'inline-block' }, children: [_jsx("label", { htmlFor: "mcp-tools-select", style: { marginRight: '5px', fontSize: '12px' }, children: "MCP Tools:" }), _jsxs("select", { id: "mcp-tools-select", value: selectedTool, onChange: (e) => handleToolChange(e.target.value), disabled: isLoadingTools, style: {
|
|
200
|
-
padding: '4px 8px',
|
|
201
|
-
borderRadius: '4px',
|
|
202
|
-
border: '1px solid #ccc',
|
|
203
|
-
minWidth: '150px',
|
|
204
|
-
fontSize: '12px'
|
|
205
|
-
}, children: [_jsx("option", { value: "", children: isLoadingTools ? 'Loading tools...' : 'Select a tool' }), mcpTools.map((tool) => (_jsxs("option", { value: tool.name, children: [tool.name, " ", tool.description ? `- ${tool.description}` : ''] }, tool.name)))] }), toolsError && (_jsxs("span", { style: {
|
|
206
|
-
marginLeft: '10px',
|
|
207
|
-
color: 'red',
|
|
208
|
-
fontSize: '12px'
|
|
209
|
-
}, children: ["Error: ", toolsError] })), _jsx("button", { onClick: fetchMCPTools, disabled: isLoadingTools, style: {
|
|
210
|
-
marginLeft: '5px',
|
|
211
|
-
padding: '4px 8px',
|
|
212
|
-
fontSize: '12px'
|
|
213
|
-
}, children: "\uD83D\uDD04 Refresh" }), selectedTool && (_jsx("span", { style: {
|
|
214
|
-
marginLeft: '10px',
|
|
215
|
-
color: 'green',
|
|
216
|
-
fontSize: '12px'
|
|
217
|
-
}, children: selectedTool }))] })] }));
|
|
218
|
-
}
|
|
219
|
-
export default DebugPlugin;
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
export default function DocsPlugin() {
|
|
3
|
-
return (_jsx("a", { target: "__blank", href: "https://lexical.dev/docs/intro", children: _jsx("button", { id: "docs-button", className: "editor-dev-button", title: "Lexical Docs" }) }));
|
|
4
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default function DragDropPaste(): null;
|
|
@@ -1,37 +0,0 @@
|
|
|
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 { DRAG_DROP_PASTE } from '@lexical/rich-text';
|
|
7
|
-
import { isMimeType, mediaFileReader } from '@lexical/utils';
|
|
8
|
-
import { COMMAND_PRIORITY_LOW } from 'lexical';
|
|
9
|
-
import { useEffect } from 'react';
|
|
10
|
-
import { INSERT_IMAGE_COMMAND } from '../ImagesPlugin';
|
|
11
|
-
const ACCEPTABLE_IMAGE_TYPES = [
|
|
12
|
-
'image/',
|
|
13
|
-
'image/heic',
|
|
14
|
-
'image/heif',
|
|
15
|
-
'image/gif',
|
|
16
|
-
'image/webp',
|
|
17
|
-
];
|
|
18
|
-
export default function DragDropPaste() {
|
|
19
|
-
const [editor] = useLexicalComposerContext();
|
|
20
|
-
useEffect(() => {
|
|
21
|
-
return editor.registerCommand(DRAG_DROP_PASTE, (files) => {
|
|
22
|
-
(async () => {
|
|
23
|
-
const filesResult = await mediaFileReader(files, [ACCEPTABLE_IMAGE_TYPES].flatMap((x) => x));
|
|
24
|
-
for (const { file, result } of filesResult) {
|
|
25
|
-
if (isMimeType(file, ACCEPTABLE_IMAGE_TYPES)) {
|
|
26
|
-
editor.dispatchCommand(INSERT_IMAGE_COMMAND, {
|
|
27
|
-
altText: file.name,
|
|
28
|
-
src: result,
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
})();
|
|
33
|
-
return true;
|
|
34
|
-
}, COMMAND_PRIORITY_LOW);
|
|
35
|
-
}, [editor]);
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
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 type { JSX } from 'react';
|
|
9
|
-
import './index.css';
|
|
10
|
-
export default function DraggableBlockPlugin({ anchorElem, }: {
|
|
11
|
-
anchorElem?: HTMLElement;
|
|
12
|
-
}): JSX.Element;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import './index.css';
|
|
3
|
-
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
4
|
-
import { DraggableBlockPlugin_EXPERIMENTAL } from '@lexical/react/LexicalDraggableBlockPlugin';
|
|
5
|
-
import { $createParagraphNode, $getNearestNodeFromDOMNode } from 'lexical';
|
|
6
|
-
import { useRef, useState } from 'react';
|
|
7
|
-
const DRAGGABLE_BLOCK_MENU_CLASSNAME = 'draggable-block-menu';
|
|
8
|
-
function isOnMenu(element) {
|
|
9
|
-
return !!element.closest(`.${DRAGGABLE_BLOCK_MENU_CLASSNAME}`);
|
|
10
|
-
}
|
|
11
|
-
export default function DraggableBlockPlugin({ anchorElem = document.body, }) {
|
|
12
|
-
const [editor] = useLexicalComposerContext();
|
|
13
|
-
const menuRef = useRef(null);
|
|
14
|
-
const targetLineRef = useRef(null);
|
|
15
|
-
const [draggableElement, setDraggableElement] = useState(null);
|
|
16
|
-
function insertBlock(e) {
|
|
17
|
-
if (!draggableElement || !editor) {
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
editor.update(() => {
|
|
21
|
-
const node = $getNearestNodeFromDOMNode(draggableElement);
|
|
22
|
-
if (!node) {
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
const pNode = $createParagraphNode();
|
|
26
|
-
if (e.altKey || e.ctrlKey) {
|
|
27
|
-
node.insertBefore(pNode);
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
node.insertAfter(pNode);
|
|
31
|
-
}
|
|
32
|
-
pNode.select();
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
return (_jsx(DraggableBlockPlugin_EXPERIMENTAL, { anchorElem: anchorElem, menuRef: menuRef, targetLineRef: targetLineRef, menuComponent: _jsxs("div", { ref: menuRef, className: "icon draggable-block-menu", children: [_jsx("button", { title: "Click to add below", className: "icon icon-plus", onClick: insertBlock }), _jsx("div", { className: "icon" })] }), targetLineComponent: _jsx("div", { ref: targetLineRef, className: "draggable-block-target-line" }), isOnMenu: isOnMenu, onElementChanged: setDraggableElement }));
|
|
36
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default function EmojiPickerPlugin(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
/*
|
|
3
|
-
* Copyright (c) 2023-2025 Datalayer, Inc.
|
|
4
|
-
* Distributed under the terms of the MIT License.
|
|
5
|
-
*/
|
|
6
|
-
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
7
|
-
import { LexicalTypeaheadMenuPlugin, MenuOption, useBasicTypeaheadTriggerMatch, } from '@lexical/react/LexicalTypeaheadMenuPlugin';
|
|
8
|
-
import { $createTextNode, $getSelection, $isRangeSelection, } from 'lexical';
|
|
9
|
-
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
10
|
-
import * as ReactDOM from 'react-dom';
|
|
11
|
-
class EmojiOption extends MenuOption {
|
|
12
|
-
title;
|
|
13
|
-
emoji;
|
|
14
|
-
keywords;
|
|
15
|
-
constructor(title, emoji, options) {
|
|
16
|
-
super(title);
|
|
17
|
-
this.title = title;
|
|
18
|
-
this.emoji = emoji;
|
|
19
|
-
this.keywords = options.keywords || [];
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
function EmojiMenuItem({ index, isSelected, onClick, onMouseEnter, option, }) {
|
|
23
|
-
let className = 'item';
|
|
24
|
-
if (isSelected) {
|
|
25
|
-
className += ' selected';
|
|
26
|
-
}
|
|
27
|
-
return (_jsx("li", { tabIndex: -1, className: className, ref: option.setRefElement, role: "option", "aria-selected": isSelected, id: 'typeahead-item-' + index, onMouseEnter: onMouseEnter, onClick: onClick, children: _jsxs("span", { className: "text", children: [option.emoji, " ", option.title] }) }, option.key));
|
|
28
|
-
}
|
|
29
|
-
const MAX_EMOJI_SUGGESTION_COUNT = 10;
|
|
30
|
-
export default function EmojiPickerPlugin() {
|
|
31
|
-
const [editor] = useLexicalComposerContext();
|
|
32
|
-
const [queryString, setQueryString] = useState(null);
|
|
33
|
-
const [emojis, setEmojis] = useState([]);
|
|
34
|
-
useEffect(() => {
|
|
35
|
-
import('../../utils/emoji-list').then((file) => setEmojis(file.default));
|
|
36
|
-
}, []);
|
|
37
|
-
const emojiOptions = useMemo(() => emojis != null
|
|
38
|
-
? emojis.map(({ emoji, aliases, tags }) => new EmojiOption(aliases[0], emoji, {
|
|
39
|
-
keywords: [...aliases, ...tags],
|
|
40
|
-
}))
|
|
41
|
-
: [], [emojis]);
|
|
42
|
-
const checkForTriggerMatch = useBasicTypeaheadTriggerMatch(':', {
|
|
43
|
-
minLength: 0,
|
|
44
|
-
punctuation: '\\.,\\+\\*\\?\\$\\@\\|#{}\\(\\)\\^\\[\\]\\\\/!%\'"~=<>:;', // allow _ and -
|
|
45
|
-
});
|
|
46
|
-
const options = useMemo(() => {
|
|
47
|
-
return emojiOptions
|
|
48
|
-
.filter((option) => {
|
|
49
|
-
return queryString != null
|
|
50
|
-
? new RegExp(queryString, 'gi').exec(option.title) ||
|
|
51
|
-
option.keywords != null
|
|
52
|
-
? option.keywords.some((keyword) => new RegExp(queryString, 'gi').exec(keyword))
|
|
53
|
-
: false
|
|
54
|
-
: emojiOptions;
|
|
55
|
-
})
|
|
56
|
-
.slice(0, MAX_EMOJI_SUGGESTION_COUNT);
|
|
57
|
-
}, [emojiOptions, queryString]);
|
|
58
|
-
const onSelectOption = useCallback((selectedOption, nodeToRemove, closeMenu) => {
|
|
59
|
-
editor.update(() => {
|
|
60
|
-
const selection = $getSelection();
|
|
61
|
-
if (!$isRangeSelection(selection) || selectedOption == null) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
if (nodeToRemove) {
|
|
65
|
-
nodeToRemove.remove();
|
|
66
|
-
}
|
|
67
|
-
selection.insertNodes([$createTextNode(selectedOption.emoji)]);
|
|
68
|
-
closeMenu();
|
|
69
|
-
});
|
|
70
|
-
}, [editor]);
|
|
71
|
-
return (_jsx(LexicalTypeaheadMenuPlugin, { onQueryChange: setQueryString, onSelectOption: onSelectOption, triggerFn: checkForTriggerMatch, options: options, menuRenderFn: (anchorElementRef, { selectedIndex, selectOptionAndCleanUp, setHighlightedIndex }) => {
|
|
72
|
-
if (anchorElementRef.current == null || options.length === 0) {
|
|
73
|
-
return null;
|
|
74
|
-
}
|
|
75
|
-
return anchorElementRef.current && options.length
|
|
76
|
-
? ReactDOM.createPortal(_jsx("div", { className: "typeahead-popover emoji-menu", children: _jsx("ul", { children: options.map((option, index) => (_jsx(EmojiMenuItem, { index: index, isSelected: selectedIndex === index, onClick: () => {
|
|
77
|
-
setHighlightedIndex(index);
|
|
78
|
-
selectOptionAndCleanUp(option);
|
|
79
|
-
}, onMouseEnter: () => {
|
|
80
|
-
setHighlightedIndex(index);
|
|
81
|
-
}, option: option }, option.key))) }) }), anchorElementRef.current)
|
|
82
|
-
: null;
|
|
83
|
-
} }));
|
|
84
|
-
}
|
|
@@ -1,56 +0,0 @@
|
|
|
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 { $createEmojiNode, EmojiNode } from '../../nodes/EmojiNode';
|
|
9
|
-
const emojis = new Map([
|
|
10
|
-
[':)', ['emoji happysmile', '🙂']],
|
|
11
|
-
[':D', ['emoji veryhappysmile', '😀']],
|
|
12
|
-
[':(', ['emoji unhappysmile', '🙁']],
|
|
13
|
-
['<3', ['emoji heart', '❤']],
|
|
14
|
-
]);
|
|
15
|
-
function $findAndTransformEmoji(node) {
|
|
16
|
-
const text = node.getTextContent();
|
|
17
|
-
for (let i = 0; i < text.length; i++) {
|
|
18
|
-
const emojiData = emojis.get(text[i]) || emojis.get(text.slice(i, i + 2));
|
|
19
|
-
if (emojiData !== undefined) {
|
|
20
|
-
const [emojiStyle, emojiText] = emojiData;
|
|
21
|
-
let targetNode;
|
|
22
|
-
if (i === 0) {
|
|
23
|
-
[targetNode] = node.splitText(i + 2);
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
[, targetNode] = node.splitText(i, i + 2);
|
|
27
|
-
}
|
|
28
|
-
const emojiNode = $createEmojiNode(emojiStyle, emojiText);
|
|
29
|
-
targetNode.replace(emojiNode);
|
|
30
|
-
return emojiNode;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return null;
|
|
34
|
-
}
|
|
35
|
-
function $textNodeTransform(node) {
|
|
36
|
-
let targetNode = node;
|
|
37
|
-
while (targetNode !== null) {
|
|
38
|
-
if (!targetNode.isSimpleText()) {
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
targetNode = $findAndTransformEmoji(targetNode);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
function useEmojis(editor) {
|
|
45
|
-
useEffect(() => {
|
|
46
|
-
if (!editor.hasNodes([EmojiNode])) {
|
|
47
|
-
throw new Error('EmojisPlugin: EmojiNode not registered on editor');
|
|
48
|
-
}
|
|
49
|
-
return editor.registerNodeTransform(TextNode, $textNodeTransform);
|
|
50
|
-
}, [editor]);
|
|
51
|
-
}
|
|
52
|
-
export default function EmojisPlugin() {
|
|
53
|
-
const [editor] = useLexicalComposerContext();
|
|
54
|
-
useEmojis(editor);
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { JSX } from 'react';
|
|
2
|
-
import 'katex/dist/katex.css';
|
|
3
|
-
import { LexicalCommand, LexicalEditor } from 'lexical';
|
|
4
|
-
type CommandPayload = {
|
|
5
|
-
equation: string;
|
|
6
|
-
inline: boolean;
|
|
7
|
-
};
|
|
8
|
-
export declare const INSERT_EQUATION_COMMAND: LexicalCommand<CommandPayload>;
|
|
9
|
-
export declare function InsertEquationDialog({ activeEditor, onClose, }: {
|
|
10
|
-
activeEditor: LexicalEditor;
|
|
11
|
-
onClose: () => void;
|
|
12
|
-
}): JSX.Element;
|
|
13
|
-
export default function EquationsPlugin(): JSX.Element | null;
|
|
14
|
-
export {};
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import 'katex/dist/katex.css';
|
|
3
|
-
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
4
|
-
import { $wrapNodeInElement } from '@lexical/utils';
|
|
5
|
-
import { $createParagraphNode, $insertNodes, $isRootOrShadowRoot, COMMAND_PRIORITY_EDITOR, createCommand, } from 'lexical';
|
|
6
|
-
import { useCallback, useEffect } from 'react';
|
|
7
|
-
import { $createEquationNode, EquationNode } from '../../nodes/EquationNode';
|
|
8
|
-
import KatexEquationAlterer from '../../ui/KatexEquationAlterer';
|
|
9
|
-
export const INSERT_EQUATION_COMMAND = createCommand('INSERT_EQUATION_COMMAND');
|
|
10
|
-
export function InsertEquationDialog({ activeEditor, onClose, }) {
|
|
11
|
-
const onEquationConfirm = useCallback((equation, inline) => {
|
|
12
|
-
activeEditor.dispatchCommand(INSERT_EQUATION_COMMAND, { equation, inline });
|
|
13
|
-
onClose();
|
|
14
|
-
}, [activeEditor, onClose]);
|
|
15
|
-
return _jsx(KatexEquationAlterer, { onConfirm: onEquationConfirm });
|
|
16
|
-
}
|
|
17
|
-
export default function EquationsPlugin() {
|
|
18
|
-
const [editor] = useLexicalComposerContext();
|
|
19
|
-
useEffect(() => {
|
|
20
|
-
if (!editor.hasNodes([EquationNode])) {
|
|
21
|
-
throw new Error('EquationsPlugins: EquationsNode not registered on editor');
|
|
22
|
-
}
|
|
23
|
-
return editor.registerCommand(INSERT_EQUATION_COMMAND, (payload) => {
|
|
24
|
-
const { equation, inline } = payload;
|
|
25
|
-
const equationNode = $createEquationNode(equation, inline);
|
|
26
|
-
$insertNodes([equationNode]);
|
|
27
|
-
if ($isRootOrShadowRoot(equationNode.getParentOrThrow())) {
|
|
28
|
-
$wrapNodeInElement(equationNode, $createParagraphNode).selectEnd();
|
|
29
|
-
}
|
|
30
|
-
return true;
|
|
31
|
-
}, COMMAND_PRIORITY_EDITOR);
|
|
32
|
-
}, [editor]);
|
|
33
|
-
return null;
|
|
34
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import '@excalidraw/excalidraw/index.css';
|
|
3
|
-
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
4
|
-
import { $wrapNodeInElement } from '@lexical/utils';
|
|
5
|
-
import { $createParagraphNode, $insertNodes, $isRootOrShadowRoot, COMMAND_PRIORITY_EDITOR, createCommand, } from 'lexical';
|
|
6
|
-
import { useEffect, useState } from 'react';
|
|
7
|
-
import { $createExcalidrawNode, ExcalidrawNode, } from '../../nodes/ExcalidrawNode';
|
|
8
|
-
import ExcalidrawModal from '../../ui/ExcalidrawModal';
|
|
9
|
-
export const INSERT_EXCALIDRAW_COMMAND = createCommand('INSERT_EXCALIDRAW_COMMAND');
|
|
10
|
-
export default function ExcalidrawPlugin() {
|
|
11
|
-
const [editor] = useLexicalComposerContext();
|
|
12
|
-
const [isModalOpen, setModalOpen] = useState(false);
|
|
13
|
-
useEffect(() => {
|
|
14
|
-
if (!editor.hasNodes([ExcalidrawNode])) {
|
|
15
|
-
throw new Error('ExcalidrawPlugin: ExcalidrawNode not registered on editor');
|
|
16
|
-
}
|
|
17
|
-
return editor.registerCommand(INSERT_EXCALIDRAW_COMMAND, () => {
|
|
18
|
-
setModalOpen(true);
|
|
19
|
-
return true;
|
|
20
|
-
}, COMMAND_PRIORITY_EDITOR);
|
|
21
|
-
}, [editor]);
|
|
22
|
-
const onClose = () => {
|
|
23
|
-
setModalOpen(false);
|
|
24
|
-
};
|
|
25
|
-
const onDelete = () => {
|
|
26
|
-
setModalOpen(false);
|
|
27
|
-
};
|
|
28
|
-
const onSave = (elements, appState, files) => {
|
|
29
|
-
editor.update(() => {
|
|
30
|
-
const excalidrawNode = $createExcalidrawNode();
|
|
31
|
-
excalidrawNode.setData(JSON.stringify({
|
|
32
|
-
appState,
|
|
33
|
-
elements,
|
|
34
|
-
files,
|
|
35
|
-
}));
|
|
36
|
-
$insertNodes([excalidrawNode]);
|
|
37
|
-
if ($isRootOrShadowRoot(excalidrawNode.getParentOrThrow())) {
|
|
38
|
-
$wrapNodeInElement(excalidrawNode, $createParagraphNode).selectEnd();
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
setModalOpen(false);
|
|
42
|
-
};
|
|
43
|
-
return isModalOpen ? (_jsx(ExcalidrawModal, { initialElements: [], initialAppState: {}, initialFiles: {}, isShown: isModalOpen, onDelete: onDelete, onClose: onClose, onSave: onSave, closeOnClickOutside: false })) : null;
|
|
44
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
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 { COMMAND_PRIORITY_EDITOR, createCommand } from 'lexical';
|
|
8
|
-
import { useEffect } from 'react';
|
|
9
|
-
import { $createFigmaNode, FigmaNode } from '../../nodes/FigmaNode';
|
|
10
|
-
export const INSERT_FIGMA_COMMAND = createCommand('INSERT_FIGMA_COMMAND');
|
|
11
|
-
export default function FigmaPlugin() {
|
|
12
|
-
const [editor] = useLexicalComposerContext();
|
|
13
|
-
useEffect(() => {
|
|
14
|
-
if (!editor.hasNodes([FigmaNode])) {
|
|
15
|
-
throw new Error('FigmaPlugin: FigmaNode not registered on editor');
|
|
16
|
-
}
|
|
17
|
-
return editor.registerCommand(INSERT_FIGMA_COMMAND, (payload) => {
|
|
18
|
-
const figmaNode = $createFigmaNode(payload);
|
|
19
|
-
$insertNodeToNearestRoot(figmaNode);
|
|
20
|
-
return true;
|
|
21
|
-
}, COMMAND_PRIORITY_EDITOR);
|
|
22
|
-
}, [editor]);
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
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 type { JSX } from 'react';
|
|
9
|
-
import './index.css';
|
|
10
|
-
import { Dispatch } from 'react';
|
|
11
|
-
export default function FloatingLinkEditorPlugin({ anchorElem, isLinkEditMode, setIsLinkEditMode, }: {
|
|
12
|
-
anchorElem?: HTMLElement;
|
|
13
|
-
isLinkEditMode: boolean;
|
|
14
|
-
setIsLinkEditMode: Dispatch<boolean>;
|
|
15
|
-
}): JSX.Element | null;
|