@datalayer/lexical-loro 0.0.7 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -137
- package/lib/App.d.ts +2 -0
- package/lib/App.js +141 -0
- package/lib/Editor.d.ts +2 -0
- package/lib/Editor.js +111 -0
- package/lib/Settings.d.ts +2 -0
- package/lib/Settings.js +57 -0
- package/lib/appSettings.d.ts +36 -0
- package/lib/appSettings.js +44 -0
- package/lib/collab/loro/Bindings.d.ts +41 -0
- package/lib/collab/loro/Bindings.js +95 -0
- package/lib/collab/loro/Debug.d.ts +33 -0
- package/lib/collab/loro/Debug.js +448 -0
- package/lib/collab/loro/LexicalCollaborationContext.d.ts +19 -0
- package/lib/collab/loro/LexicalCollaborationContext.js +48 -0
- package/lib/collab/loro/LexicalCollaborationPlugin.d.ts +24 -0
- package/lib/collab/loro/LexicalCollaborationPlugin.js +83 -0
- package/lib/collab/loro/State.d.ts +53 -0
- package/lib/collab/loro/State.js +90 -0
- package/lib/collab/loro/components/LoroCollaborationUI.d.ts +13 -0
- package/lib/collab/loro/components/LoroCollaborationUI.js +9 -0
- package/lib/collab/loro/components/LoroCollaborators.d.ts +8 -0
- package/lib/collab/loro/components/LoroCollaborators.js +97 -0
- package/lib/collab/loro/components/index.d.ts +2 -0
- package/lib/collab/loro/components/index.js +2 -0
- package/lib/collab/loro/index.d.ts +6 -0
- package/lib/collab/loro/index.js +6 -0
- package/lib/collab/loro/integrators/BaseIntegrator.d.ts +14 -0
- package/lib/collab/loro/integrators/BaseIntegrator.js +1 -0
- package/lib/collab/loro/integrators/CounterIntegrator.d.ts +23 -0
- package/lib/collab/loro/integrators/CounterIntegrator.js +40 -0
- package/lib/collab/loro/integrators/ListIntegrator.d.ts +23 -0
- package/lib/collab/loro/integrators/ListIntegrator.js +49 -0
- package/lib/collab/loro/integrators/MapIntegrator.d.ts +24 -0
- package/lib/collab/loro/integrators/MapIntegrator.js +177 -0
- package/lib/collab/loro/integrators/TextIntegrator.d.ts +25 -0
- package/lib/collab/loro/integrators/TextIntegrator.js +51 -0
- package/lib/collab/loro/integrators/TreeIntegrator.d.ts +25 -0
- package/lib/collab/loro/integrators/TreeIntegrator.js +201 -0
- package/lib/collab/loro/nodes/NodeFactory.d.ts +8 -0
- package/lib/collab/loro/nodes/NodeFactory.js +105 -0
- package/lib/collab/loro/nodes/NodesMapper.d.ts +111 -0
- package/lib/collab/loro/nodes/NodesMapper.js +258 -0
- package/lib/collab/loro/propagators/DecoratorNodePropagator.d.ts +60 -0
- package/lib/collab/loro/propagators/DecoratorNodePropagator.js +302 -0
- package/lib/collab/loro/propagators/ElementNodePropagator.d.ts +62 -0
- package/lib/collab/loro/propagators/ElementNodePropagator.js +335 -0
- package/lib/collab/loro/propagators/LineBreakNodePropagator.d.ts +57 -0
- package/lib/collab/loro/propagators/LineBreakNodePropagator.js +196 -0
- package/lib/collab/loro/propagators/RootNodePropagator.d.ts +55 -0
- package/lib/collab/loro/propagators/RootNodePropagator.js +168 -0
- package/lib/collab/loro/propagators/TextNodePropagator.d.ts +60 -0
- package/lib/collab/loro/propagators/TextNodePropagator.js +434 -0
- package/lib/collab/loro/propagators/index.d.ts +49 -0
- package/lib/collab/loro/propagators/index.js +32 -0
- package/lib/collab/loro/provider/websocket.d.ts +116 -0
- package/lib/collab/loro/provider/websocket.js +907 -0
- 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 +5 -0
- package/lib/collab/loro/servers/ws/callback.js +85 -0
- package/lib/collab/loro/servers/ws/server.d.ts +2 -0
- package/lib/collab/loro/servers/ws/server.js +25 -0
- package/lib/collab/loro/servers/ws/utils.d.ts +40 -0
- package/lib/collab/loro/servers/ws/utils.js +513 -0
- package/lib/collab/loro/sync/SyncCursors.d.ts +32 -0
- package/lib/collab/loro/sync/SyncCursors.js +435 -0
- package/lib/collab/loro/sync/SyncLexicalToLoro.d.ts +4 -0
- package/lib/collab/loro/sync/SyncLexicalToLoro.js +80 -0
- package/lib/collab/loro/sync/SyncLoroToLexical.d.ts +5 -0
- package/lib/collab/loro/sync/SyncLoroToLexical.js +96 -0
- package/lib/collab/loro/types/LexicalNodeData.d.ts +32 -0
- package/lib/collab/loro/types/LexicalNodeData.js +71 -0
- package/lib/collab/loro/useCollaboration.d.ts +12 -0
- package/lib/collab/loro/useCollaboration.js +248 -0
- package/lib/collab/loro/utils/InitialContent.d.ts +64 -0
- package/lib/collab/loro/utils/InitialContent.js +109 -0
- package/lib/collab/loro/utils/LexicalToLoro.d.ts +18 -0
- package/lib/collab/loro/utils/LexicalToLoro.js +96 -0
- package/lib/collab/loro/utils/Utils.d.ts +44 -0
- package/lib/collab/loro/utils/Utils.js +153 -0
- package/lib/collab/loro/wsProvider.d.ts +8 -0
- package/lib/collab/loro/wsProvider.js +31 -0
- package/lib/collab/utils/invariant.d.ts +1 -0
- package/lib/collab/utils/invariant.js +11 -0
- package/lib/collab/utils/simpleDiffWithCursor.d.ts +5 -0
- package/lib/collab/utils/simpleDiffWithCursor.js +31 -0
- package/lib/collab/yjs/Bindings.d.ts +23 -0
- package/lib/collab/yjs/Bindings.js +26 -0
- package/lib/collab/yjs/Debug.d.ts +23 -0
- package/lib/collab/yjs/Debug.js +213 -0
- package/lib/collab/yjs/LexicalCollaborationContext.d.ts +10 -0
- package/lib/collab/yjs/LexicalCollaborationContext.js +37 -0
- package/lib/collab/yjs/LexicalCollaborationPlugin.d.ts +21 -0
- package/lib/collab/yjs/LexicalCollaborationPlugin.js +63 -0
- package/lib/collab/yjs/State.d.ts +51 -0
- package/lib/collab/yjs/State.js +35 -0
- package/lib/collab/yjs/nodes/AnyCollabNode.d.ts +5 -0
- package/lib/collab/yjs/nodes/AnyCollabNode.js +1 -0
- package/lib/collab/yjs/nodes/CollabDecoratorNode.d.ts +22 -0
- package/lib/collab/yjs/nodes/CollabDecoratorNode.js +64 -0
- package/lib/collab/yjs/nodes/CollabElementNode.d.ts +40 -0
- package/lib/collab/yjs/nodes/CollabElementNode.js +462 -0
- package/lib/collab/yjs/nodes/CollabLineBreakNode.d.ts +19 -0
- package/lib/collab/yjs/nodes/CollabLineBreakNode.js +44 -0
- package/lib/collab/yjs/nodes/CollabTextNode.d.ts +25 -0
- package/lib/collab/yjs/nodes/CollabTextNode.js +103 -0
- package/lib/collab/yjs/provider/websocket.d.ts +88 -0
- package/lib/collab/yjs/provider/websocket.js +415 -0
- 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 +5 -0
- package/lib/collab/yjs/servers/ws/callback.js +72 -0
- package/lib/collab/yjs/servers/ws/server.d.ts +2 -0
- package/lib/collab/yjs/servers/ws/server.js +25 -0
- package/lib/collab/yjs/servers/ws/utils.d.ts +49 -0
- package/lib/collab/yjs/servers/ws/utils.js +284 -0
- package/lib/collab/yjs/sync/SyncCursors.d.ts +39 -0
- package/lib/collab/yjs/sync/SyncCursors.js +351 -0
- package/lib/collab/yjs/sync/SyncEditorStates.d.ts +10 -0
- package/lib/collab/yjs/sync/SyncEditorStates.js +200 -0
- package/lib/collab/yjs/useCollaboration.d.ts +12 -0
- package/lib/collab/yjs/useCollaboration.js +255 -0
- package/lib/collab/yjs/utils/Utils.d.ts +25 -0
- package/lib/collab/yjs/utils/Utils.js +402 -0
- package/lib/collab/yjs/wsProvider.d.ts +3 -0
- package/lib/collab/yjs/wsProvider.js +21 -0
- package/lib/commenting/index.d.ts +41 -0
- package/lib/commenting/index.js +324 -0
- package/lib/context/FlashMessageContext.d.ts +7 -0
- package/lib/context/FlashMessageContext.js +24 -0
- package/lib/context/SettingsContext.d.ts +12 -0
- package/lib/context/SettingsContext.js +38 -0
- package/lib/context/SharedHistoryContext.d.ts +11 -0
- package/lib/context/SharedHistoryContext.js +11 -0
- package/lib/context/ToolbarContext.d.ts +65 -0
- package/lib/context/ToolbarContext.js +84 -0
- package/lib/demo.d.ts +12 -0
- package/lib/demo.js +41 -0
- package/lib/hooks/useFlashMessage.d.ts +2 -0
- package/lib/hooks/useFlashMessage.js +4 -0
- package/lib/hooks/useModal.d.ts +5 -0
- package/lib/hooks/useModal.js +26 -0
- package/lib/hooks/useReport.d.ts +1 -0
- package/lib/hooks/useReport.js +46 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -5
- package/lib/nodes/AutocompleteNode.d.ts +27 -0
- package/lib/nodes/AutocompleteNode.js +56 -0
- package/lib/nodes/CounterComponent.d.ts +6 -0
- package/lib/nodes/CounterComponent.js +137 -0
- package/lib/nodes/CounterNode.d.ts +23 -0
- package/lib/nodes/CounterNode.js +47 -0
- package/lib/nodes/DateTimeNode/DateTimeComponent.d.ts +8 -0
- package/lib/nodes/DateTimeNode/DateTimeComponent.js +119 -0
- package/lib/nodes/DateTimeNode/DateTimeNode.d.ts +27 -0
- package/lib/nodes/DateTimeNode/DateTimeNode.js +82 -0
- package/lib/nodes/EmojiNode.d.ts +18 -0
- package/lib/nodes/EmojiNode.js +50 -0
- package/lib/nodes/EquationComponent.d.ts +9 -0
- package/lib/nodes/EquationComponent.js +75 -0
- package/lib/nodes/EquationNode.d.ts +26 -0
- package/lib/nodes/EquationNode.js +109 -0
- package/lib/nodes/ExcalidrawNode/ExcalidrawComponent.d.ts +8 -0
- package/lib/nodes/ExcalidrawNode/ExcalidrawComponent.js +110 -0
- package/lib/nodes/ExcalidrawNode/ExcalidrawImage.d.ts +50 -0
- package/lib/nodes/ExcalidrawNode/ExcalidrawImage.js +55 -0
- package/lib/nodes/ExcalidrawNode/index.d.ts +32 -0
- package/lib/nodes/ExcalidrawNode/index.js +117 -0
- package/lib/nodes/FigmaNode.d.ts +20 -0
- package/lib/nodes/FigmaNode.js +52 -0
- package/lib/nodes/ImageComponent.d.ts +16 -0
- package/lib/nodes/ImageComponent.js +272 -0
- package/lib/nodes/ImageNode.d.ts +50 -0
- package/lib/nodes/ImageNode.js +151 -0
- package/lib/nodes/InlineImageNode/InlineImageComponent.d.ts +26 -0
- package/lib/nodes/InlineImageNode/InlineImageComponent.js +161 -0
- package/lib/nodes/InlineImageNode/InlineImageNode.d.ts +59 -0
- package/lib/nodes/InlineImageNode/InlineImageNode.js +162 -0
- package/lib/nodes/KeywordNode.d.ts +14 -0
- package/lib/nodes/KeywordNode.js +33 -0
- package/lib/nodes/LayoutContainerNode.d.ts +24 -0
- package/lib/nodes/LayoutContainerNode.js +91 -0
- package/lib/nodes/LayoutItemNode.d.ts +16 -0
- package/lib/nodes/LayoutItemNode.js +65 -0
- package/lib/nodes/MentionNode.d.ts +20 -0
- package/lib/nodes/MentionNode.js +81 -0
- package/lib/nodes/PageBreakNode/index.d.ts +17 -0
- package/lib/nodes/PageBreakNode/index.js +83 -0
- package/lib/nodes/PlaygroundNodes.d.ts +3 -0
- package/lib/nodes/PlaygroundNodes.js +71 -0
- package/lib/nodes/PollComponent.d.ts +9 -0
- package/lib/nodes/PollComponent.js +85 -0
- package/lib/nodes/PollNode.d.ts +43 -0
- package/lib/nodes/PollNode.js +153 -0
- package/lib/nodes/SpecialTextNode.d.ts +24 -0
- package/lib/nodes/SpecialTextNode.js +50 -0
- package/lib/nodes/StickyComponent.d.ts +10 -0
- package/lib/nodes/StickyComponent.js +162 -0
- package/lib/nodes/StickyNode.d.ts +31 -0
- package/lib/nodes/StickyNode.js +76 -0
- package/lib/nodes/TweetNode.d.ts +21 -0
- package/lib/nodes/TweetNode.js +119 -0
- package/lib/nodes/YouTubeNode.d.ts +22 -0
- package/lib/nodes/YouTubeNode.js +84 -0
- package/lib/plugins/ActionsPlugin/index.d.ts +5 -0
- package/lib/plugins/ActionsPlugin/index.js +168 -0
- package/lib/plugins/AutoEmbedPlugin/index.d.ts +19 -0
- package/lib/plugins/AutoEmbedPlugin/index.js +158 -0
- package/lib/plugins/AutoLinkPlugin/index.d.ts +2 -0
- package/lib/plugins/AutoLinkPlugin/index.js +15 -0
- package/lib/plugins/AutocompletePlugin/index.d.ts +10 -0
- package/lib/plugins/AutocompletePlugin/index.js +2473 -0
- package/lib/plugins/CodeActionMenuPlugin/components/CopyButton/index.d.ts +7 -0
- package/lib/plugins/CodeActionMenuPlugin/components/CopyButton/index.js +42 -0
- package/lib/plugins/CodeActionMenuPlugin/components/PrettierButton/index.d.ts +17 -0
- package/lib/plugins/CodeActionMenuPlugin/components/PrettierButton/index.js +111 -0
- package/lib/plugins/CodeActionMenuPlugin/index.d.ts +5 -0
- package/lib/plugins/CodeActionMenuPlugin/index.js +104 -0
- package/lib/plugins/CodeActionMenuPlugin/utils.d.ts +1 -0
- package/lib/plugins/CodeActionMenuPlugin/utils.js +18 -0
- package/lib/plugins/CodeHighlightPrismPlugin/index.d.ts +2 -0
- package/lib/plugins/CodeHighlightPrismPlugin/index.js +10 -0
- package/lib/plugins/CodeHighlightShikiPlugin/index.d.ts +2 -0
- package/lib/plugins/CodeHighlightShikiPlugin/index.js +10 -0
- package/lib/plugins/CollapsiblePlugin/CollapsibleContainerNode.d.ts +25 -0
- package/lib/plugins/CollapsiblePlugin/CollapsibleContainerNode.js +131 -0
- package/lib/plugins/CollapsiblePlugin/CollapsibleContentNode.d.ts +16 -0
- package/lib/plugins/CollapsiblePlugin/CollapsibleContentNode.js +79 -0
- package/lib/plugins/CollapsiblePlugin/CollapsibleTitleNode.d.ts +16 -0
- package/lib/plugins/CollapsiblePlugin/CollapsibleTitleNode.js +81 -0
- package/lib/plugins/CollapsiblePlugin/CollapsibleUtils.d.ts +2 -0
- package/lib/plugins/CollapsiblePlugin/CollapsibleUtils.js +8 -0
- package/lib/plugins/CollapsiblePlugin/index.d.ts +3 -0
- package/lib/plugins/CollapsiblePlugin/index.js +128 -0
- package/lib/plugins/CommentPlugin/index.d.ts +9 -0
- package/lib/plugins/CommentPlugin/index.js +460 -0
- package/lib/plugins/ComponentPickerPlugin/index.d.ts +2 -0
- package/lib/plugins/ComponentPickerPlugin/index.js +276 -0
- package/lib/plugins/ContextMenuPlugin/index.d.ts +2 -0
- package/lib/plugins/ContextMenuPlugin/index.js +112 -0
- package/lib/plugins/CounterPlugin/index.d.ts +3 -0
- package/lib/plugins/CounterPlugin/index.js +20 -0
- package/lib/plugins/DatalayerPlugin/index.d.ts +2 -0
- package/lib/plugins/DatalayerPlugin/index.js +218 -0
- package/lib/plugins/DateTimePlugin/index.d.ts +8 -0
- package/lib/plugins/DateTimePlugin/index.js +24 -0
- package/lib/plugins/DocsPlugin/index.d.ts +2 -0
- package/lib/plugins/DocsPlugin/index.js +4 -0
- package/lib/plugins/DragDropPastePlugin/index.d.ts +1 -0
- package/lib/plugins/DragDropPastePlugin/index.js +33 -0
- package/lib/plugins/DraggableBlockPlugin/index.d.ts +12 -0
- package/lib/plugins/DraggableBlockPlugin/index.js +36 -0
- package/lib/plugins/EmojiPickerPlugin/index.d.ts +1 -0
- package/lib/plugins/EmojiPickerPlugin/index.js +80 -0
- package/lib/plugins/EmojisPlugin/index.d.ts +2 -0
- package/lib/plugins/EmojisPlugin/index.js +52 -0
- package/lib/plugins/EquationsPlugin/index.d.ts +14 -0
- package/lib/plugins/EquationsPlugin/index.js +34 -0
- package/lib/plugins/ExcalidrawPlugin/index.d.ts +5 -0
- package/lib/plugins/ExcalidrawPlugin/index.js +44 -0
- package/lib/plugins/FigmaPlugin/index.d.ts +4 -0
- package/lib/plugins/FigmaPlugin/index.js +20 -0
- package/lib/plugins/FloatingLinkEditorPlugin/index.d.ts +15 -0
- package/lib/plugins/FloatingLinkEditorPlugin/index.js +280 -0
- package/lib/plugins/FloatingTextFormatToolbarPlugin/index.d.ts +7 -0
- package/lib/plugins/FloatingTextFormatToolbarPlugin/index.js +219 -0
- package/lib/plugins/ImagesPlugin/index.d.ts +24 -0
- package/lib/plugins/ImagesPlugin/index.js +195 -0
- package/lib/plugins/InlineImagePlugin/index.d.ts +17 -0
- package/lib/plugins/InlineImagePlugin/index.js +180 -0
- package/lib/plugins/KeywordsPlugin/index.d.ts +2 -0
- package/lib/plugins/KeywordsPlugin/index.js +31 -0
- package/lib/plugins/LayoutPlugin/InsertLayoutDialog.d.ts +6 -0
- package/lib/plugins/LayoutPlugin/InsertLayoutDialog.js +21 -0
- package/lib/plugins/LayoutPlugin/LayoutPlugin.d.ts +7 -0
- package/lib/plugins/LayoutPlugin/LayoutPlugin.js +131 -0
- package/lib/plugins/LinkPlugin/index.d.ts +6 -0
- package/lib/plugins/LinkPlugin/index.js +11 -0
- package/lib/plugins/MarkdownShortcutPlugin/index.d.ts +2 -0
- package/lib/plugins/MarkdownShortcutPlugin/index.js +6 -0
- package/lib/plugins/MarkdownTransformers/index.d.ts +8 -0
- package/lib/plugins/MarkdownTransformers/index.js +234 -0
- package/lib/plugins/MaxLengthPlugin/index.d.ts +3 -0
- package/lib/plugins/MaxLengthPlugin/index.js +37 -0
- package/lib/plugins/MentionsPlugin/index.d.ts +2 -0
- package/lib/plugins/MentionsPlugin/index.js +564 -0
- package/lib/plugins/PageBreakPlugin/index.d.ts +4 -0
- package/lib/plugins/PageBreakPlugin/index.js +27 -0
- package/lib/plugins/PasteLogPlugin/index.d.ts +2 -0
- package/lib/plugins/PasteLogPlugin/index.js +27 -0
- package/lib/plugins/PollPlugin/index.d.ts +8 -0
- package/lib/plugins/PollPlugin/index.js +38 -0
- package/lib/plugins/ShortcutsPlugin/index.d.ts +6 -0
- package/lib/plugins/ShortcutsPlugin/index.js +112 -0
- package/lib/plugins/ShortcutsPlugin/shortcuts.d.ts +59 -0
- package/lib/plugins/ShortcutsPlugin/shortcuts.js +169 -0
- package/lib/plugins/SpecialTextPlugin/index.d.ts +2 -0
- package/lib/plugins/SpecialTextPlugin/index.js +46 -0
- package/lib/plugins/SpeechToTextPlugin/index.d.ts +5 -0
- package/lib/plugins/SpeechToTextPlugin/index.js +82 -0
- package/lib/plugins/StickyPlugin/index.d.ts +2 -0
- package/lib/plugins/StickyPlugin/index.js +12 -0
- package/lib/plugins/TabFocusPlugin/index.d.ts +1 -0
- package/lib/plugins/TabFocusPlugin/index.js +34 -0
- package/lib/plugins/TableActionMenuPlugin/index.d.ts +5 -0
- package/lib/plugins/TableActionMenuPlugin/index.js +492 -0
- package/lib/plugins/TableCellResizer/index.d.ts +3 -0
- package/lib/plugins/TableCellResizer/index.js +297 -0
- package/lib/plugins/TableHoverActionsPlugin/index.d.ts +4 -0
- package/lib/plugins/TableHoverActionsPlugin/index.js +188 -0
- package/lib/plugins/TableOfContentsPlugin/index.d.ts +2 -0
- package/lib/plugins/TableOfContentsPlugin/index.js +116 -0
- package/lib/plugins/TablePlugin.d.ts +31 -0
- package/lib/plugins/TablePlugin.js +63 -0
- package/lib/plugins/TestRecorderPlugin/index.d.ts +3 -0
- package/lib/plugins/TestRecorderPlugin/index.js +346 -0
- package/lib/plugins/ToolbarPlugin/fontSize.d.ts +9 -0
- package/lib/plugins/ToolbarPlugin/fontSize.js +80 -0
- package/lib/plugins/ToolbarPlugin/index.d.ts +9 -0
- package/lib/plugins/ToolbarPlugin/index.js +500 -0
- package/lib/plugins/ToolbarPlugin/utils.d.ts +26 -0
- package/lib/plugins/ToolbarPlugin/utils.js +243 -0
- package/lib/plugins/TreeViewPlugin/index.d.ts +2 -0
- package/lib/plugins/TreeViewPlugin/index.js +7 -0
- package/lib/plugins/TwitterPlugin/index.d.ts +4 -0
- package/lib/plugins/TwitterPlugin/index.js +20 -0
- package/lib/plugins/TypingPerfPlugin/index.d.ts +2 -0
- package/lib/plugins/TypingPerfPlugin/index.js +93 -0
- package/lib/plugins/YouTubePlugin/index.d.ts +4 -0
- package/lib/plugins/YouTubePlugin/index.js +20 -0
- package/lib/server/validation.d.ts +1 -0
- package/lib/server/validation.js +111 -0
- package/lib/setupEnv.d.ts +2 -0
- package/lib/setupEnv.js +25 -0
- package/lib/themes/CommentEditorTheme.d.ts +4 -0
- package/lib/themes/CommentEditorTheme.js +7 -0
- package/lib/themes/PlaygroundEditorTheme.d.ts +4 -0
- package/lib/themes/PlaygroundEditorTheme.js +120 -0
- package/lib/themes/StickyEditorTheme.d.ts +4 -0
- package/lib/themes/StickyEditorTheme.js +7 -0
- package/lib/tyes.dt.d.ts +12 -0
- package/lib/tyes.dt.js +0 -0
- package/lib/ui/Button.d.ts +12 -0
- package/lib/ui/Button.js +6 -0
- package/lib/ui/ColorPicker.d.ts +14 -0
- package/lib/ui/ColorPicker.js +219 -0
- package/lib/ui/ContentEditable.d.ts +9 -0
- package/lib/ui/ContentEditable.js +6 -0
- package/lib/ui/Dialog.d.ts +10 -0
- package/lib/ui/Dialog.js +8 -0
- package/lib/ui/DropDown.d.ts +18 -0
- package/lib/ui/DropDown.js +133 -0
- package/lib/ui/DropdownColorPicker.d.ts +13 -0
- package/lib/ui/DropdownColorPicker.js +6 -0
- package/lib/ui/EquationEditor.d.ts +8 -0
- package/lib/ui/EquationEditor.js +11 -0
- package/lib/ui/ExcalidrawModal.d.ts +42 -0
- package/lib/ui/ExcalidrawModal.js +103 -0
- package/lib/ui/FileInput.d.ts +10 -0
- package/lib/ui/FileInput.js +5 -0
- package/lib/ui/FlashMessage.d.ts +7 -0
- package/lib/ui/FlashMessage.js +6 -0
- package/lib/ui/ImageResizer.d.ts +17 -0
- package/lib/ui/ImageResizer.js +171 -0
- package/lib/ui/KatexEquationAlterer.d.ts +8 -0
- package/lib/ui/KatexEquationAlterer.js +23 -0
- package/lib/ui/KatexRenderer.d.ts +6 -0
- package/lib/ui/KatexRenderer.js +24 -0
- package/lib/ui/Modal.d.ts +9 -0
- package/lib/ui/Modal.js +48 -0
- package/lib/ui/Select.d.ts +8 -0
- package/lib/ui/Select.js +5 -0
- package/lib/ui/Switch.d.ts +8 -0
- package/lib/ui/Switch.js +6 -0
- package/lib/ui/TextInput.d.ts +13 -0
- package/lib/ui/TextInput.js +7 -0
- package/lib/utils/docSerialization.d.ts +3 -0
- package/lib/utils/docSerialization.js +56 -0
- package/lib/utils/emoji-list.d.ts +20 -0
- package/lib/utils/emoji-list.js +16605 -0
- package/lib/utils/getDOMRangeRect.d.ts +8 -0
- package/lib/utils/getDOMRangeRect.js +22 -0
- package/lib/utils/getSelectedNode.d.ts +2 -0
- package/lib/utils/getSelectedNode.js +24 -0
- package/lib/utils/getThemeSelector.d.ts +2 -0
- package/lib/utils/getThemeSelector.js +10 -0
- package/lib/utils/isMobileWidth.d.ts +7 -0
- package/lib/utils/isMobileWidth.js +7 -0
- package/lib/utils/joinClasses.d.ts +1 -0
- package/lib/utils/joinClasses.js +3 -0
- package/lib/utils/setFloatingElemPosition.d.ts +1 -0
- package/lib/utils/setFloatingElemPosition.js +55 -0
- package/lib/utils/setFloatingElemPositionForLinkEditor.d.ts +1 -0
- package/lib/utils/setFloatingElemPositionForLinkEditor.js +32 -0
- package/lib/utils/swipe.d.ts +4 -0
- package/lib/utils/swipe.js +90 -0
- package/lib/utils/url.d.ts +2 -0
- package/lib/utils/url.js +27 -0
- package/package.json +82 -51
- package/lib/DiffMerge.d.ts +0 -39
- package/lib/DiffMerge.js +0 -437
- package/lib/LoroCollaborativePlugin.d.ts +0 -62
- package/lib/LoroCollaborativePlugin.js +0 -2826
- package/lib/stableNodeState.d.ts +0 -8
- package/lib/stableNodeState.js +0 -15
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { LoroTree, LoroTreeNode, TreeID } from 'loro-crdt';
|
|
2
|
+
import { LexicalNode, NodeKey, EditorState } from 'lexical';
|
|
3
|
+
import { Binding } from '../Bindings';
|
|
4
|
+
/**
|
|
5
|
+
* Bidirectional mapping between Lexical NodeKeys and Loro TreeIDs
|
|
6
|
+
*/
|
|
7
|
+
export declare class NodeMapper {
|
|
8
|
+
private lexicalToLoro;
|
|
9
|
+
private loroToLexical;
|
|
10
|
+
private tree;
|
|
11
|
+
constructor(binding: Binding);
|
|
12
|
+
/**
|
|
13
|
+
* Create a bidirectional mapping between Lexical NodeKey and Loro TreeID
|
|
14
|
+
*/
|
|
15
|
+
private createMapping;
|
|
16
|
+
/**
|
|
17
|
+
* Remove bidirectional mapping
|
|
18
|
+
*/
|
|
19
|
+
private removeMapping;
|
|
20
|
+
/**
|
|
21
|
+
* Get Loro TreeNode based on Lexical NodeKey
|
|
22
|
+
* If the node doesn't exist, create it with proper parent-child relationship
|
|
23
|
+
*/
|
|
24
|
+
getLoroNodeByLexicalKey(nodeKey: NodeKey, lexicalNode?: LexicalNode, parentTreeID?: TreeID, index?: number): LoroTreeNode;
|
|
25
|
+
/**
|
|
26
|
+
* Get Lexical NodeKey based on Loro TreeID
|
|
27
|
+
* If the node doesn't exist in Lexical, it needs to be created externally
|
|
28
|
+
*/
|
|
29
|
+
getLexicalKeyByLoroId(treeId: TreeID): NodeKey | null;
|
|
30
|
+
/**
|
|
31
|
+
* Get Lexical Node from EditorState based on Loro TreeID
|
|
32
|
+
*/
|
|
33
|
+
getLexicalNodeByLoroId(treeId: TreeID, editorState: EditorState): LexicalNode | null;
|
|
34
|
+
/**
|
|
35
|
+
* Get Lexical parent node key for a Loro TreeID
|
|
36
|
+
* Returns null if no parent or if parent not found in Lexical
|
|
37
|
+
* Note: This method needs the LoroTree API to be clarified for parent relationships
|
|
38
|
+
*/
|
|
39
|
+
getLexicalParentByLoroId(treeId: TreeID, loroTree: LoroTree): NodeKey | null;
|
|
40
|
+
/**
|
|
41
|
+
* Manually set bidirectional mapping between Lexical NodeKey and Loro TreeID
|
|
42
|
+
*/
|
|
43
|
+
setMapping(nodeKey: NodeKey, treeId: TreeID): void;
|
|
44
|
+
/**
|
|
45
|
+
* Create a new Loro TreeNode and establish mapping
|
|
46
|
+
*/
|
|
47
|
+
private createLoroNode;
|
|
48
|
+
/**
|
|
49
|
+
* Update the mapping when a node is moved or modified
|
|
50
|
+
*/
|
|
51
|
+
updateMapping(oldNodeKey: NodeKey, newNodeKey: NodeKey): void;
|
|
52
|
+
/**
|
|
53
|
+
* Remove mapping when a node is deleted
|
|
54
|
+
*/
|
|
55
|
+
deleteMapping(nodeKey: NodeKey): void;
|
|
56
|
+
/**
|
|
57
|
+
* Get TreeID by Lexical NodeKey (without creating if not found)
|
|
58
|
+
*/
|
|
59
|
+
getTreeIDByLexicalKey(nodeKey: NodeKey): TreeID | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Check if a mapping exists for a Lexical NodeKey
|
|
62
|
+
*/
|
|
63
|
+
hasLexicalMapping(nodeKey: NodeKey): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Check if a mapping exists for a Loro TreeID
|
|
66
|
+
*/
|
|
67
|
+
hasLoroMapping(treeId: TreeID): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Get all current mappings (for debugging)
|
|
70
|
+
*/
|
|
71
|
+
getAllMappings(): {
|
|
72
|
+
lexicalToLoro: Map<NodeKey, TreeID>;
|
|
73
|
+
loroToLexical: Map<TreeID, NodeKey>;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Clear all mappings (useful for testing or reset)
|
|
77
|
+
*/
|
|
78
|
+
clearMappings(): void;
|
|
79
|
+
/**
|
|
80
|
+
* Synchronize existing tree nodes with Lexical editor state
|
|
81
|
+
* This should be called during initialization to establish mappings
|
|
82
|
+
*
|
|
83
|
+
* Note: Since lexicalKey is no longer persisted in tree node data,
|
|
84
|
+
* this method now relies on the TreeIntegrator to create mappings
|
|
85
|
+
* as nodes are integrated from Loro tree operations.
|
|
86
|
+
*/
|
|
87
|
+
syncExistingNodes(editorState: EditorState): void;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Initialize the global node mapper
|
|
91
|
+
*/
|
|
92
|
+
export declare function initializeNodeMapper(binding: Binding): NodeMapper;
|
|
93
|
+
/**
|
|
94
|
+
* Get the global node mapper instance
|
|
95
|
+
*/
|
|
96
|
+
export declare function getNodeMapper(): NodeMapper;
|
|
97
|
+
/**
|
|
98
|
+
* Utility functions for common operations
|
|
99
|
+
*/
|
|
100
|
+
/**
|
|
101
|
+
* Get Loro TreeNode by Lexical NodeKey (using global mapper)
|
|
102
|
+
*/
|
|
103
|
+
export declare function getLoroNodeByLexicalKey(nodeKey: NodeKey, lexicalNode?: LexicalNode, parentTreeID?: TreeID, index?: number): LoroTreeNode;
|
|
104
|
+
/**
|
|
105
|
+
* Get Lexical NodeKey by Loro TreeID (using global mapper)
|
|
106
|
+
*/
|
|
107
|
+
export declare function getLexicalKeyByLoroId(treeId: TreeID): NodeKey | null;
|
|
108
|
+
/**
|
|
109
|
+
* Get Lexical Node by Loro TreeID (using global mapper)
|
|
110
|
+
*/
|
|
111
|
+
export declare function getLexicalNodeByLoroId(treeId: TreeID, editorState: EditorState): LexicalNode | null;
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bidirectional mapping between Lexical NodeKeys and Loro TreeIDs
|
|
3
|
+
*/
|
|
4
|
+
export class NodeMapper {
|
|
5
|
+
// Maps Lexical NodeKey to Loro TreeID
|
|
6
|
+
lexicalToLoro = new Map();
|
|
7
|
+
// Maps Loro TreeID to Lexical NodeKey
|
|
8
|
+
loroToLexical = new Map();
|
|
9
|
+
tree;
|
|
10
|
+
constructor(binding) {
|
|
11
|
+
this.tree = binding.tree;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Create a bidirectional mapping between Lexical NodeKey and Loro TreeID
|
|
15
|
+
*/
|
|
16
|
+
createMapping(nodeKey, treeId) {
|
|
17
|
+
this.lexicalToLoro.set(nodeKey, treeId);
|
|
18
|
+
this.loroToLexical.set(treeId, nodeKey);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Remove bidirectional mapping
|
|
22
|
+
*/
|
|
23
|
+
removeMapping(nodeKey, treeId) {
|
|
24
|
+
this.lexicalToLoro.delete(nodeKey);
|
|
25
|
+
this.loroToLexical.delete(treeId);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get Loro TreeNode based on Lexical NodeKey
|
|
29
|
+
* If the node doesn't exist, create it with proper parent-child relationship
|
|
30
|
+
*/
|
|
31
|
+
getLoroNodeByLexicalKey(nodeKey, lexicalNode, parentTreeID, index) {
|
|
32
|
+
// Check if mapping already exists
|
|
33
|
+
const existingTreeID = this.lexicalToLoro.get(nodeKey);
|
|
34
|
+
if (existingTreeID && this.tree.has(existingTreeID)) {
|
|
35
|
+
return this.tree.getNodeByID(existingTreeID);
|
|
36
|
+
}
|
|
37
|
+
// Get parent TreeID from Lexical node if not provided
|
|
38
|
+
if (!parentTreeID && lexicalNode) {
|
|
39
|
+
const lexicalParent = lexicalNode.getParent();
|
|
40
|
+
if (lexicalParent) {
|
|
41
|
+
const parentKey = lexicalParent.getKey();
|
|
42
|
+
parentTreeID = this.lexicalToLoro.get(parentKey);
|
|
43
|
+
// If parent doesn't exist in Loro, create it first
|
|
44
|
+
if (!parentTreeID) {
|
|
45
|
+
const parentLoroNode = this.getLoroNodeByLexicalKey(parentKey, lexicalParent, undefined, undefined);
|
|
46
|
+
parentTreeID = parentLoroNode.id;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Get index from Lexical node if not provided
|
|
51
|
+
if (index === undefined && lexicalNode) {
|
|
52
|
+
index = lexicalNode.getIndexWithinParent();
|
|
53
|
+
}
|
|
54
|
+
// Create new tree node if it doesn't exist
|
|
55
|
+
const newTreeID = this.createLoroNode(nodeKey, lexicalNode, parentTreeID, index);
|
|
56
|
+
return this.tree.getNodeByID(newTreeID);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get Lexical NodeKey based on Loro TreeID
|
|
60
|
+
* If the node doesn't exist in Lexical, it needs to be created externally
|
|
61
|
+
*/
|
|
62
|
+
getLexicalKeyByLoroId(treeId) {
|
|
63
|
+
// Check if mapping exists
|
|
64
|
+
const existingNodeKey = this.loroToLexical.get(treeId);
|
|
65
|
+
if (existingNodeKey) {
|
|
66
|
+
return existingNodeKey;
|
|
67
|
+
}
|
|
68
|
+
// If no mapping exists, we can't create a Lexical node here
|
|
69
|
+
// The caller should integrate Lexical node creation
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get Lexical Node from EditorState based on Loro TreeID
|
|
74
|
+
*/
|
|
75
|
+
getLexicalNodeByLoroId(treeId, editorState) {
|
|
76
|
+
const nodeKey = this.getLexicalKeyByLoroId(treeId);
|
|
77
|
+
if (!nodeKey) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
return editorState._nodeMap.get(nodeKey) || null;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get Lexical parent node key for a Loro TreeID
|
|
84
|
+
* Returns null if no parent or if parent not found in Lexical
|
|
85
|
+
* Note: This method needs the LoroTree API to be clarified for parent relationships
|
|
86
|
+
*/
|
|
87
|
+
getLexicalParentByLoroId(treeId, loroTree) {
|
|
88
|
+
// TODO: Implement once LoroTree parent API is confirmed
|
|
89
|
+
// For now, we'll rely on the bidirectional mapping without tree traversal
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Manually set bidirectional mapping between Lexical NodeKey and Loro TreeID
|
|
94
|
+
*/
|
|
95
|
+
setMapping(nodeKey, treeId) {
|
|
96
|
+
this.lexicalToLoro.set(nodeKey, treeId);
|
|
97
|
+
this.loroToLexical.set(treeId, nodeKey);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Create a new Loro TreeNode and establish mapping
|
|
101
|
+
*/
|
|
102
|
+
createLoroNode(nodeKey, lexicalNode, parentTreeID, index) {
|
|
103
|
+
// Create the tree node first
|
|
104
|
+
const treeNode = this.tree.createNode(parentTreeID, index);
|
|
105
|
+
// Get the TreeID from the created node
|
|
106
|
+
const treeId = treeNode.id;
|
|
107
|
+
// Debug logging for parent relationship issues
|
|
108
|
+
if (parentTreeID) {
|
|
109
|
+
const actualParent = treeNode.parent();
|
|
110
|
+
if (!actualParent || actualParent.id !== parentTreeID) {
|
|
111
|
+
console.warn(`⚠️ Parent relationship not set correctly for ${nodeKey}: expected ${parentTreeID}, got ${actualParent?.id || 'None'}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Store basic metadata
|
|
115
|
+
treeNode.data.set('createdAt', Date.now());
|
|
116
|
+
// Store complete lexical node data if lexical node is provided
|
|
117
|
+
if (lexicalNode) {
|
|
118
|
+
try {
|
|
119
|
+
const lexicalNodeJSON = lexicalNode.exportJSON();
|
|
120
|
+
// Remove all key-related fields to avoid duplication (TreeID serves as the key)
|
|
121
|
+
if ('key' in lexicalNodeJSON || '__key' in lexicalNodeJSON || 'lexicalKey' in lexicalNodeJSON) {
|
|
122
|
+
const { key, __key, lexicalKey, ...cleanedData } = lexicalNodeJSON;
|
|
123
|
+
treeNode.data.set('lexical', cleanedData);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
treeNode.data.set('lexical', lexicalNodeJSON);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
console.warn('Failed to export lexical node JSON in NodesMapper:', error);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Create bidirectional mapping
|
|
134
|
+
this.createMapping(nodeKey, treeId);
|
|
135
|
+
return treeId;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Update the mapping when a node is moved or modified
|
|
139
|
+
*/
|
|
140
|
+
updateMapping(oldNodeKey, newNodeKey) {
|
|
141
|
+
const treeId = this.lexicalToLoro.get(oldNodeKey);
|
|
142
|
+
if (treeId) {
|
|
143
|
+
this.removeMapping(oldNodeKey, treeId);
|
|
144
|
+
this.createMapping(newNodeKey, treeId);
|
|
145
|
+
// Update timestamp in tree node data
|
|
146
|
+
const treeNode = this.tree.getNodeByID(treeId);
|
|
147
|
+
if (treeNode) {
|
|
148
|
+
treeNode.data.set('updatedAt', Date.now());
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Remove mapping when a node is deleted
|
|
154
|
+
*/
|
|
155
|
+
deleteMapping(nodeKey) {
|
|
156
|
+
const treeId = this.lexicalToLoro.get(nodeKey);
|
|
157
|
+
if (treeId) {
|
|
158
|
+
this.removeMapping(nodeKey, treeId);
|
|
159
|
+
// Delete the tree node
|
|
160
|
+
if (this.tree.has(treeId)) {
|
|
161
|
+
this.tree.delete(treeId);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Get TreeID by Lexical NodeKey (without creating if not found)
|
|
167
|
+
*/
|
|
168
|
+
getTreeIDByLexicalKey(nodeKey) {
|
|
169
|
+
return this.lexicalToLoro.get(nodeKey);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Check if a mapping exists for a Lexical NodeKey
|
|
173
|
+
*/
|
|
174
|
+
hasLexicalMapping(nodeKey) {
|
|
175
|
+
return this.lexicalToLoro.has(nodeKey);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Check if a mapping exists for a Loro TreeID
|
|
179
|
+
*/
|
|
180
|
+
hasLoroMapping(treeId) {
|
|
181
|
+
return this.loroToLexical.has(treeId);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get all current mappings (for debugging)
|
|
185
|
+
*/
|
|
186
|
+
getAllMappings() {
|
|
187
|
+
return {
|
|
188
|
+
lexicalToLoro: new Map(this.lexicalToLoro),
|
|
189
|
+
loroToLexical: new Map(this.loroToLexical)
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Clear all mappings (useful for testing or reset)
|
|
194
|
+
*/
|
|
195
|
+
clearMappings() {
|
|
196
|
+
this.lexicalToLoro.clear();
|
|
197
|
+
this.loroToLexical.clear();
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Synchronize existing tree nodes with Lexical editor state
|
|
201
|
+
* This should be called during initialization to establish mappings
|
|
202
|
+
*
|
|
203
|
+
* Note: Since lexicalKey is no longer persisted in tree node data,
|
|
204
|
+
* this method now relies on the TreeIntegrator to create mappings
|
|
205
|
+
* as nodes are integrated from Loro tree operations.
|
|
206
|
+
*/
|
|
207
|
+
syncExistingNodes(editorState) {
|
|
208
|
+
// Since we no longer persist lexicalKey in tree node data,
|
|
209
|
+
// we cannot automatically establish mappings from existing tree nodes.
|
|
210
|
+
//
|
|
211
|
+
// Instead, mappings will be established through:
|
|
212
|
+
// 1. TreeIntegrator processing tree diffs during initialization
|
|
213
|
+
// 2. Normal collaboration flow as nodes are created/updated
|
|
214
|
+
//
|
|
215
|
+
// This method is kept for compatibility but is now a no-op.
|
|
216
|
+
console.log('📍 syncExistingNodes: Skipping sync - mappings established through TreeIntegrator');
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// Global instance to be shared across the application
|
|
220
|
+
let globalNodeMapper = null;
|
|
221
|
+
/**
|
|
222
|
+
* Initialize the global node mapper
|
|
223
|
+
*/
|
|
224
|
+
export function initializeNodeMapper(binding) {
|
|
225
|
+
globalNodeMapper = new NodeMapper(binding);
|
|
226
|
+
return globalNodeMapper;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Get the global node mapper instance
|
|
230
|
+
*/
|
|
231
|
+
export function getNodeMapper() {
|
|
232
|
+
if (!globalNodeMapper) {
|
|
233
|
+
throw new Error('NodeMapper not initialized. Call initializeNodeMapper() first.');
|
|
234
|
+
}
|
|
235
|
+
return globalNodeMapper;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Utility functions for common operations
|
|
239
|
+
*/
|
|
240
|
+
/**
|
|
241
|
+
* Get Loro TreeNode by Lexical NodeKey (using global mapper)
|
|
242
|
+
*/
|
|
243
|
+
export function getLoroNodeByLexicalKey(nodeKey, lexicalNode, parentTreeID, index) {
|
|
244
|
+
return getNodeMapper().getLoroNodeByLexicalKey(nodeKey, lexicalNode, parentTreeID, index);
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Get Lexical NodeKey by Loro TreeID (using global mapper)
|
|
248
|
+
*/
|
|
249
|
+
export function getLexicalKeyByLoroId(treeId) {
|
|
250
|
+
return getNodeMapper().getLexicalKeyByLoroId(treeId);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Get Lexical Node by Loro TreeID (using global mapper)
|
|
254
|
+
*/
|
|
255
|
+
export function getLexicalNodeByLoroId(treeId, editorState) {
|
|
256
|
+
return getNodeMapper().getLexicalNodeByLoroId(treeId, editorState);
|
|
257
|
+
}
|
|
258
|
+
// createLexicalNodeFromLoro function is now imported from NodeFactory
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { TreeID, LoroTree } from 'loro-crdt';
|
|
2
|
+
import { DecoratorNode, UpdateListenerPayload, NodeKey, ElementNode } from 'lexical';
|
|
3
|
+
import { Binding } from '../Bindings';
|
|
4
|
+
/**
|
|
5
|
+
* DecoratorNode Propagator for Loro Tree Collaboration
|
|
6
|
+
*
|
|
7
|
+
* DecoratorNode characteristics:
|
|
8
|
+
* - Wraps arbitrary view (React components, DOM nodes, etc.)
|
|
9
|
+
* - Acts as opaque wrapper around external components
|
|
10
|
+
* - Cannot have children in the traditional sense
|
|
11
|
+
* - Renders through decorate() method which returns the view
|
|
12
|
+
* - Examples: Images, Videos, Tweets, Charts, Custom Widgets
|
|
13
|
+
*/
|
|
14
|
+
export interface DecoratorNodeMutatorOptions {
|
|
15
|
+
binding: Binding;
|
|
16
|
+
tree: LoroTree;
|
|
17
|
+
peerId: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Create DecoratorNode in Loro tree
|
|
21
|
+
*/
|
|
22
|
+
export declare function createDecoratorNodeInLoro(nodeKey: NodeKey, decoratorType: string, // 'image', 'video', 'tweet', 'chart', etc.
|
|
23
|
+
decoratorData: any, // The data needed to render the decorator
|
|
24
|
+
parentId?: TreeID, index?: number, metadata?: Record<string, any>, lexicalNodeJSON?: any, // JSON object from exportJSON()
|
|
25
|
+
options?: DecoratorNodeMutatorOptions): TreeID;
|
|
26
|
+
/**
|
|
27
|
+
* Update DecoratorNode in Loro tree
|
|
28
|
+
*/
|
|
29
|
+
export declare function updateDecoratorNodeInLoro(nodeKey: NodeKey, decoratorType?: string, decoratorData?: any, parentId?: TreeID, index?: number, metadata?: Record<string, any>, lexicalNodeJSON?: any, // JSON object from exportJSON()
|
|
30
|
+
options?: DecoratorNodeMutatorOptions): void;
|
|
31
|
+
/**
|
|
32
|
+
* Delete DecoratorNode from Loro tree
|
|
33
|
+
*/
|
|
34
|
+
export declare function deleteDecoratorNodeInLoro(nodeKey: NodeKey, options: DecoratorNodeMutatorOptions): void;
|
|
35
|
+
/**
|
|
36
|
+
* Create DecoratorNode in Lexical from Loro tree data
|
|
37
|
+
* Note: This is a generic implementation. In practice, you'd need
|
|
38
|
+
* specific decorator node classes for each type (ImageNode, VideoNode, etc.)
|
|
39
|
+
*/
|
|
40
|
+
export declare function createDecoratorNodeFromLoro(treeId: TreeID, parentNode: ElementNode, index?: number, options?: DecoratorNodeMutatorOptions): DecoratorNode<any> | null;
|
|
41
|
+
/**
|
|
42
|
+
* Update DecoratorNode in Lexical from Loro tree data
|
|
43
|
+
*/
|
|
44
|
+
export declare function updateDecoratorNodeFromLoro(treeId: TreeID, lexicalNode: DecoratorNode<any>, newParentNode?: ElementNode, newIndex?: number, options?: DecoratorNodeMutatorOptions): void;
|
|
45
|
+
/**
|
|
46
|
+
* Delete DecoratorNode from Lexical
|
|
47
|
+
*/
|
|
48
|
+
export declare function deleteDecoratorNodeFromLoro(treeId: TreeID, lexicalNode: DecoratorNode<any>, options?: DecoratorNodeMutatorOptions): void;
|
|
49
|
+
/**
|
|
50
|
+
* Utility to check if a tree node represents a DecoratorNode
|
|
51
|
+
*/
|
|
52
|
+
export declare function isDecoratorNodeInTree(treeId: TreeID, tree: LoroTree): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Get DecoratorNode data from Loro tree
|
|
55
|
+
*/
|
|
56
|
+
export declare function getDecoratorNodeDataFromTree(treeId: TreeID, tree: LoroTree): any;
|
|
57
|
+
/**
|
|
58
|
+
* Main propagate method for DecoratorNode - propagates all mutation types
|
|
59
|
+
*/
|
|
60
|
+
export declare function propagateDecoratorNode(update: UpdateListenerPayload, mutation: 'created' | 'updated' | 'destroyed', nodeKey: NodeKey, options: DecoratorNodeMutatorOptions): void;
|