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