@datalayer/lexical-loro 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/App.d.ts +2 -0
- package/lib/App.js +141 -0
- package/lib/Editor.d.ts +2 -0
- package/lib/Editor.js +115 -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 +48 -0
- package/lib/collab/loro/Bindings.d.ts +41 -0
- package/lib/collab/loro/Bindings.js +99 -0
- package/lib/collab/loro/Debug.d.ts +33 -0
- package/lib/collab/loro/Debug.js +452 -0
- package/lib/collab/loro/LexicalCollaborationContext.d.ts +19 -0
- package/lib/collab/loro/LexicalCollaborationContext.js +52 -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 +94 -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 +102 -0
- package/lib/collab/loro/components/index.d.ts +2 -0
- package/lib/collab/loro/components/index.js +6 -0
- package/lib/collab/loro/index.d.ts +6 -0
- package/lib/collab/loro/index.js +10 -0
- package/lib/collab/loro/integrators/BaseIntegrator.d.ts +14 -0
- package/lib/collab/loro/integrators/BaseIntegrator.js +5 -0
- package/lib/collab/loro/integrators/CounterIntegrator.d.ts +23 -0
- package/lib/collab/loro/integrators/CounterIntegrator.js +44 -0
- package/lib/collab/loro/integrators/ListIntegrator.d.ts +23 -0
- package/lib/collab/loro/integrators/ListIntegrator.js +53 -0
- package/lib/collab/loro/integrators/MapIntegrator.d.ts +24 -0
- package/lib/collab/loro/integrators/MapIntegrator.js +235 -0
- package/lib/collab/loro/integrators/TextIntegrator.d.ts +25 -0
- package/lib/collab/loro/integrators/TextIntegrator.js +55 -0
- package/lib/collab/loro/integrators/TreeIntegrator.d.ts +36 -0
- package/lib/collab/loro/integrators/TreeIntegrator.js +251 -0
- package/lib/collab/loro/nodes/NodeFactory.d.ts +15 -0
- package/lib/collab/loro/nodes/NodeFactory.js +101 -0
- package/lib/collab/loro/nodes/NodesMapper.d.ts +120 -0
- package/lib/collab/loro/nodes/NodesMapper.js +277 -0
- package/lib/collab/loro/propagators/DecoratorNodePropagator.d.ts +60 -0
- package/lib/collab/loro/propagators/DecoratorNodePropagator.js +306 -0
- package/lib/collab/loro/propagators/ElementNodePropagator.d.ts +62 -0
- package/lib/collab/loro/propagators/ElementNodePropagator.js +326 -0
- package/lib/collab/loro/propagators/LineBreakNodePropagator.d.ts +57 -0
- package/lib/collab/loro/propagators/LineBreakNodePropagator.js +200 -0
- package/lib/collab/loro/propagators/RootNodePropagator.d.ts +55 -0
- package/lib/collab/loro/propagators/RootNodePropagator.js +174 -0
- package/lib/collab/loro/propagators/TextNodePropagator.d.ts +60 -0
- package/lib/collab/loro/propagators/TextNodePropagator.js +440 -0
- package/lib/collab/loro/propagators/index.d.ts +49 -0
- package/lib/collab/loro/propagators/index.js +30 -0
- package/lib/collab/loro/provider/websocket.d.ts +116 -0
- package/lib/collab/loro/provider/websocket.js +911 -0
- package/lib/collab/loro/servers/index.d.ts +0 -0
- package/lib/collab/loro/servers/index.js +4 -0
- package/lib/collab/loro/servers/ws/callback.d.ts +5 -0
- package/lib/collab/loro/servers/ws/callback.js +89 -0
- package/lib/collab/loro/servers/ws/server.d.ts +2 -0
- package/lib/collab/loro/servers/ws/server.js +29 -0
- package/lib/collab/loro/servers/ws/utils.d.ts +40 -0
- package/lib/collab/loro/servers/ws/utils.js +517 -0
- package/lib/collab/loro/sync/SyncCursors.d.ts +32 -0
- package/lib/collab/loro/sync/SyncCursors.js +475 -0
- package/lib/collab/loro/sync/SyncLexicalToLoro.d.ts +4 -0
- package/lib/collab/loro/sync/SyncLexicalToLoro.js +113 -0
- package/lib/collab/loro/sync/SyncLoroToLexical.d.ts +5 -0
- package/lib/collab/loro/sync/SyncLoroToLexical.js +100 -0
- package/lib/collab/loro/types/LexicalNodeData.d.ts +32 -0
- package/lib/collab/loro/types/LexicalNodeData.js +75 -0
- package/lib/collab/loro/useCollaboration.d.ts +12 -0
- package/lib/collab/loro/useCollaboration.js +260 -0
- package/lib/collab/loro/utils/InitialContent.d.ts +64 -0
- package/lib/collab/loro/utils/InitialContent.js +113 -0
- package/lib/collab/loro/utils/LexicalToLoro.d.ts +18 -0
- package/lib/collab/loro/utils/LexicalToLoro.js +100 -0
- package/lib/collab/loro/utils/Utils.d.ts +44 -0
- package/lib/collab/loro/utils/Utils.js +157 -0
- package/lib/collab/loro/wsProvider.d.ts +8 -0
- package/lib/collab/loro/wsProvider.js +35 -0
- package/lib/collab/utils/invariant.d.ts +1 -0
- package/lib/collab/utils/invariant.js +15 -0
- package/lib/collab/utils/simpleDiffWithCursor.d.ts +5 -0
- package/lib/collab/utils/simpleDiffWithCursor.js +35 -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 +328 -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 +45 -0
- package/lib/hooks/useFlashMessage.d.ts +2 -0
- package/lib/hooks/useFlashMessage.js +8 -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 +50 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +5 -0
- package/lib/nodes/AutocompleteNode.d.ts +27 -0
- package/lib/nodes/AutocompleteNode.js +60 -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 +54 -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 +37 -0
- package/lib/nodes/LayoutContainerNode.d.ts +24 -0
- package/lib/nodes/LayoutContainerNode.js +95 -0
- package/lib/nodes/LayoutItemNode.d.ts +16 -0
- package/lib/nodes/LayoutItemNode.js +69 -0
- package/lib/nodes/MentionNode.d.ts +20 -0
- package/lib/nodes/MentionNode.js +85 -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 +75 -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 +54 -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 +2477 -0
- package/lib/plugins/CodeActionMenuPlugin/components/CopyButton/index.d.ts +7 -0
- package/lib/plugins/CodeActionMenuPlugin/components/CopyButton/index.js +46 -0
- package/lib/plugins/CodeActionMenuPlugin/components/PrettierButton/index.d.ts +17 -0
- package/lib/plugins/CodeActionMenuPlugin/components/PrettierButton/index.js +115 -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 +22 -0
- package/lib/plugins/CodeHighlightPrismPlugin/index.d.ts +2 -0
- package/lib/plugins/CodeHighlightPrismPlugin/index.js +14 -0
- package/lib/plugins/CodeHighlightShikiPlugin/index.d.ts +2 -0
- package/lib/plugins/CodeHighlightShikiPlugin/index.js +14 -0
- package/lib/plugins/CollapsiblePlugin/CollapsibleContainerNode.d.ts +25 -0
- package/lib/plugins/CollapsiblePlugin/CollapsibleContainerNode.js +135 -0
- package/lib/plugins/CollapsiblePlugin/CollapsibleContentNode.d.ts +16 -0
- package/lib/plugins/CollapsiblePlugin/CollapsibleContentNode.js +83 -0
- package/lib/plugins/CollapsiblePlugin/CollapsibleTitleNode.d.ts +16 -0
- package/lib/plugins/CollapsiblePlugin/CollapsibleTitleNode.js +85 -0
- package/lib/plugins/CollapsiblePlugin/CollapsibleUtils.d.ts +2 -0
- package/lib/plugins/CollapsiblePlugin/CollapsibleUtils.js +12 -0
- package/lib/plugins/CollapsiblePlugin/index.d.ts +3 -0
- package/lib/plugins/CollapsiblePlugin/index.js +132 -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 +24 -0
- package/lib/plugins/DateTimePlugin/index.d.ts +8 -0
- package/lib/plugins/DateTimePlugin/index.js +28 -0
- package/lib/plugins/DebugPlugin/index.d.ts +3 -0
- package/lib/plugins/DebugPlugin/index.js +219 -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 +37 -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 +84 -0
- package/lib/plugins/EmojisPlugin/index.d.ts +2 -0
- package/lib/plugins/EmojisPlugin/index.js +56 -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 +24 -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 +35 -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 +135 -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 +238 -0
- package/lib/plugins/MaxLengthPlugin/index.d.ts +3 -0
- package/lib/plugins/MaxLengthPlugin/index.js +41 -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 +31 -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 +116 -0
- package/lib/plugins/ShortcutsPlugin/shortcuts.d.ts +59 -0
- package/lib/plugins/ShortcutsPlugin/shortcuts.js +173 -0
- package/lib/plugins/SpecialTextPlugin/index.d.ts +2 -0
- package/lib/plugins/SpecialTextPlugin/index.js +50 -0
- package/lib/plugins/SpeechToTextPlugin/index.d.ts +5 -0
- package/lib/plugins/SpeechToTextPlugin/index.js +86 -0
- package/lib/plugins/StickyPlugin/index.d.ts +2 -0
- package/lib/plugins/StickyPlugin/index.js +16 -0
- package/lib/plugins/TabFocusPlugin/index.d.ts +1 -0
- package/lib/plugins/TabFocusPlugin/index.js +38 -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 +84 -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 +247 -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 +24 -0
- package/lib/plugins/TypingPerfPlugin/index.d.ts +2 -0
- package/lib/plugins/TypingPerfPlugin/index.js +97 -0
- package/lib/plugins/YouTubePlugin/index.d.ts +4 -0
- package/lib/plugins/YouTubePlugin/index.js +24 -0
- package/lib/server/validation.d.ts +1 -0
- package/lib/server/validation.js +115 -0
- package/lib/setupEnv.d.ts +2 -0
- package/lib/setupEnv.js +29 -0
- package/lib/themes/CommentEditorTheme.d.ts +4 -0
- package/lib/themes/CommentEditorTheme.js +11 -0
- package/lib/themes/PlaygroundEditorTheme.d.ts +4 -0
- package/lib/themes/PlaygroundEditorTheme.js +124 -0
- package/lib/themes/StickyEditorTheme.d.ts +4 -0
- package/lib/themes/StickyEditorTheme.js +11 -0
- package/lib/tyes.dt.d.ts +12 -0
- package/lib/tyes.dt.js +4 -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 +60 -0
- package/lib/utils/emoji-list.d.ts +20 -0
- package/lib/utils/emoji-list.js +16609 -0
- package/lib/utils/getDOMRangeRect.d.ts +8 -0
- package/lib/utils/getDOMRangeRect.js +26 -0
- package/lib/utils/getSelectedNode.d.ts +2 -0
- package/lib/utils/getSelectedNode.js +28 -0
- package/lib/utils/getThemeSelector.d.ts +2 -0
- package/lib/utils/getThemeSelector.js +14 -0
- package/lib/utils/isMobileWidth.d.ts +7 -0
- package/lib/utils/isMobileWidth.js +11 -0
- package/lib/utils/joinClasses.d.ts +1 -0
- package/lib/utils/joinClasses.js +7 -0
- package/lib/utils/setFloatingElemPosition.d.ts +1 -0
- package/lib/utils/setFloatingElemPosition.js +59 -0
- package/lib/utils/setFloatingElemPositionForLinkEditor.d.ts +1 -0
- package/lib/utils/setFloatingElemPositionForLinkEditor.js +36 -0
- package/lib/utils/swipe.d.ts +4 -0
- package/lib/utils/swipe.js +94 -0
- package/lib/utils/url.d.ts +2 -0
- package/lib/utils/url.js +31 -0
- package/package.json +1 -1
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { LexicalCommand } from 'lexical';
|
|
2
|
+
import type { LoroDoc, Cursor } from 'loro-crdt';
|
|
3
|
+
import { UndoManager } from 'loro-crdt';
|
|
4
|
+
import type { Binding } from './Bindings';
|
|
5
|
+
export type UserState = {
|
|
6
|
+
anchorPos: Cursor | null;
|
|
7
|
+
color: string;
|
|
8
|
+
focusing: boolean;
|
|
9
|
+
focusPos: Cursor | null;
|
|
10
|
+
name: string;
|
|
11
|
+
awarenessData: object;
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
};
|
|
14
|
+
export declare const CONNECTED_COMMAND: LexicalCommand<boolean>;
|
|
15
|
+
export declare const TOGGLE_CONNECT_COMMAND: LexicalCommand<boolean>;
|
|
16
|
+
export type AwarenessProvider = {
|
|
17
|
+
getLocalState: () => UserState | null;
|
|
18
|
+
getStates: () => Map<number, UserState>;
|
|
19
|
+
off: (type: 'update', cb: () => void) => void;
|
|
20
|
+
on: (type: 'update', cb: () => void) => void;
|
|
21
|
+
setLocalState: (userState: UserState) => void;
|
|
22
|
+
setLocalStateField: (field: string, value: unknown) => void;
|
|
23
|
+
};
|
|
24
|
+
export type Provider = {
|
|
25
|
+
awareness: AwarenessProvider;
|
|
26
|
+
connect(): void | Promise<void>;
|
|
27
|
+
disconnect(): void;
|
|
28
|
+
off(type: 'sync', cb: (isSynced: boolean) => void): void;
|
|
29
|
+
off(type: 'update', cb: (update: unknown) => void): void;
|
|
30
|
+
off(type: 'status', cb: (status: {
|
|
31
|
+
status: string;
|
|
32
|
+
}) => void): void;
|
|
33
|
+
off(type: 'reload', cb: (doc: LoroDoc) => void): void;
|
|
34
|
+
on(type: 'sync', cb: (isSynced: boolean) => void): void;
|
|
35
|
+
on(type: 'status', cb: (status: {
|
|
36
|
+
status: string;
|
|
37
|
+
}) => void): void;
|
|
38
|
+
on(type: 'update', cb: (update: unknown) => void): void;
|
|
39
|
+
on(type: 'reload', cb: (doc: LoroDoc) => void): void;
|
|
40
|
+
};
|
|
41
|
+
export type Operation = {
|
|
42
|
+
attributes: {
|
|
43
|
+
__type: string;
|
|
44
|
+
};
|
|
45
|
+
insert: string | Record<string, unknown>;
|
|
46
|
+
};
|
|
47
|
+
export type Delta = Array<Operation>;
|
|
48
|
+
export type LoroNode = Record<string, unknown>;
|
|
49
|
+
export type LoroEvent = Record<string, unknown>;
|
|
50
|
+
export declare function createUndoManager(binding: Binding): UndoManager;
|
|
51
|
+
export declare function initLocalState(provider: Provider, name: string, color: string, focusing: boolean, awarenessData: object): void;
|
|
52
|
+
export declare function setLocalStateFocus(provider: Provider, name: string, color: string, focusing: boolean, awarenessData: object): void;
|
|
53
|
+
export declare function updateLocalStateName(provider: Provider, name: string, color: string): void;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023-2025 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
import { createCommand } from 'lexical';
|
|
6
|
+
import { UndoManager } from 'loro-crdt';
|
|
7
|
+
export const CONNECTED_COMMAND = createCommand('CONNECTED_COMMAND');
|
|
8
|
+
export const TOGGLE_CONNECT_COMMAND = createCommand('TOGGLE_CONNECT_COMMAND');
|
|
9
|
+
export function createUndoManager(binding) {
|
|
10
|
+
// Create Loro UndoManager with configuration
|
|
11
|
+
const undoManager = new UndoManager(binding.doc, {
|
|
12
|
+
mergeInterval: 1000, // Merge operations within 1 second
|
|
13
|
+
maxUndoSteps: 100, // Keep up to 100 undo steps
|
|
14
|
+
excludeOriginPrefixes: ['collab-', 'sync-'], // Exclude collaboration operations
|
|
15
|
+
/*
|
|
16
|
+
onPush: (isUndo, counterRange, event) => {
|
|
17
|
+
// Save cursor positions when adding to undo stack
|
|
18
|
+
const selection = binding.editor.getEditorState().read(() => {
|
|
19
|
+
return binding.editor.getEditorState()._selection;
|
|
20
|
+
});
|
|
21
|
+
// Get cursors for the current state
|
|
22
|
+
const cursors: Cursor[] = [];
|
|
23
|
+
if (selection) {
|
|
24
|
+
// TODO: Convert Lexical selection to Loro cursors
|
|
25
|
+
// This would need to be implemented based on the specific selection format
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
value: binding.doc.toJSON(), // Save document state
|
|
29
|
+
cursors: cursors
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
onPop: (isUndo, metadata, counterRange) => {
|
|
33
|
+
// Restore cursor positions when undoing/redoing
|
|
34
|
+
if (metadata?.cursors && metadata.cursors.length > 0) {
|
|
35
|
+
binding.editor.update(() => {
|
|
36
|
+
// TODO: Restore selection state from cursors
|
|
37
|
+
// This would need to convert Loro cursors back to Lexical selection
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
*/
|
|
42
|
+
});
|
|
43
|
+
return undoManager;
|
|
44
|
+
}
|
|
45
|
+
export function initLocalState(provider, name, color, focusing, awarenessData) {
|
|
46
|
+
provider.awareness.setLocalState({
|
|
47
|
+
anchorPos: null,
|
|
48
|
+
awarenessData,
|
|
49
|
+
color,
|
|
50
|
+
focusPos: null,
|
|
51
|
+
focusing,
|
|
52
|
+
name,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
export function setLocalStateFocus(provider, name, color, focusing, awarenessData) {
|
|
56
|
+
const { awareness } = provider;
|
|
57
|
+
let localState = awareness.getLocalState();
|
|
58
|
+
if (localState === null) {
|
|
59
|
+
localState = {
|
|
60
|
+
anchorPos: null,
|
|
61
|
+
awarenessData,
|
|
62
|
+
color,
|
|
63
|
+
focusPos: null,
|
|
64
|
+
focusing: focusing,
|
|
65
|
+
name,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
// Always update name and color in case they changed
|
|
69
|
+
localState.name = name;
|
|
70
|
+
localState.color = color;
|
|
71
|
+
localState.focusing = focusing;
|
|
72
|
+
awareness.setLocalState(localState);
|
|
73
|
+
}
|
|
74
|
+
export function updateLocalStateName(provider, name, color) {
|
|
75
|
+
const { awareness } = provider;
|
|
76
|
+
let localState = awareness.getLocalState();
|
|
77
|
+
if (localState === null) {
|
|
78
|
+
// Initialize with the new name if no state exists
|
|
79
|
+
localState = {
|
|
80
|
+
anchorPos: null,
|
|
81
|
+
awarenessData: {},
|
|
82
|
+
color,
|
|
83
|
+
focusPos: null,
|
|
84
|
+
focusing: false,
|
|
85
|
+
name,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
// Update existing state with new name and color
|
|
90
|
+
localState.name = name;
|
|
91
|
+
localState.color = color;
|
|
92
|
+
}
|
|
93
|
+
awareness.setLocalState(localState);
|
|
94
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Binding } from '../Bindings';
|
|
2
|
+
export interface LoroCollaborationUIProps {
|
|
3
|
+
binding: Binding;
|
|
4
|
+
cursorsContainer: JSX.Element | null;
|
|
5
|
+
currentUserName?: string;
|
|
6
|
+
currentUserColor?: string;
|
|
7
|
+
showCollaborators?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Combines the cursors container with the collaborators list
|
|
11
|
+
*/
|
|
12
|
+
export declare function LoroCollaborationUI({ binding, cursorsContainer, currentUserName, currentUserColor, showCollaborators }: LoroCollaborationUIProps): JSX.Element;
|
|
13
|
+
export default LoroCollaborationUI;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { LoroCollaborators } from './LoroCollaborators';
|
|
3
|
+
/**
|
|
4
|
+
* Combines the cursors container with the collaborators list
|
|
5
|
+
*/
|
|
6
|
+
export function LoroCollaborationUI({ binding, cursorsContainer, currentUserName = 'You', currentUserColor = '#007acc', showCollaborators = true }) {
|
|
7
|
+
return (_jsxs(_Fragment, { children: [showCollaborators && (_jsx(LoroCollaborators, { binding: binding, currentUserName: currentUserName, currentUserColor: currentUserColor })), cursorsContainer] }));
|
|
8
|
+
}
|
|
9
|
+
export default LoroCollaborationUI;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Binding } from '../Bindings';
|
|
2
|
+
export interface LoroCollaboratorsProps {
|
|
3
|
+
binding: Binding;
|
|
4
|
+
currentUserName?: string;
|
|
5
|
+
currentUserColor?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function LoroCollaborators({ binding, currentUserName, currentUserColor }: LoroCollaboratorsProps): JSX.Element;
|
|
8
|
+
export default LoroCollaborators;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2023-2025 Datalayer, Inc.
|
|
4
|
+
* Distributed under the terms of the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
import { useState, useEffect } from 'react';
|
|
7
|
+
export function LoroCollaborators({ binding, currentUserName = 'Me', currentUserColor = '#007acc' }) {
|
|
8
|
+
// Force re-render when cursors change
|
|
9
|
+
const [updateTrigger, setUpdateTrigger] = useState(0);
|
|
10
|
+
// Monitor cursors map changes
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
const interval = setInterval(() => {
|
|
13
|
+
setUpdateTrigger(prev => prev + 1);
|
|
14
|
+
}, 1000); // Check for updates every second
|
|
15
|
+
return () => clearInterval(interval);
|
|
16
|
+
}, []);
|
|
17
|
+
// Get current user's client ID
|
|
18
|
+
const currentClientID = binding.clientID;
|
|
19
|
+
// Debug: Log cursor information
|
|
20
|
+
const allCursorsDebug = Array.from(binding.cursors.entries()).map(([id, cursor]) => ({
|
|
21
|
+
clientId: id,
|
|
22
|
+
name: cursor.name,
|
|
23
|
+
color: cursor.color,
|
|
24
|
+
isCurrentUser: id === currentClientID
|
|
25
|
+
}));
|
|
26
|
+
// Get all collaborators including current user
|
|
27
|
+
const allCollaborators = Array.from(binding.cursors.entries())
|
|
28
|
+
.map(([clientId, cursor]) => ({ clientId, cursor, isCurrentUser: clientId === currentClientID }));
|
|
29
|
+
// Get current user's cursor if it exists
|
|
30
|
+
const currentUserCursor = binding.cursors.get(currentClientID);
|
|
31
|
+
const currentDisplayColor = currentUserCursor?.color || currentUserColor;
|
|
32
|
+
const currentDisplayName = currentUserCursor?.name || currentUserName;
|
|
33
|
+
// Separate current user and others for display order (current user first)
|
|
34
|
+
const currentUserData = allCollaborators.find(({ isCurrentUser }) => isCurrentUser);
|
|
35
|
+
const otherCollaborators = allCollaborators.filter(({ isCurrentUser }) => !isCurrentUser);
|
|
36
|
+
return (_jsxs("div", { style: {
|
|
37
|
+
display: 'flex',
|
|
38
|
+
alignItems: 'center',
|
|
39
|
+
padding: '8px 12px',
|
|
40
|
+
backgroundColor: 'var(--bgColor-muted, #f8f9fa)',
|
|
41
|
+
borderBottom: '1px solid var(--borderColor-default, #e1e5e9)',
|
|
42
|
+
fontSize: '14px',
|
|
43
|
+
fontFamily: 'system-ui, -apple-system, sans-serif',
|
|
44
|
+
gap: '8px',
|
|
45
|
+
flexWrap: 'wrap',
|
|
46
|
+
color: 'var(--fgColor-default, inherit)',
|
|
47
|
+
}, children: [currentUserData && (_jsx(CollaboratorBadge, { name: `${currentUserData.cursor.name}`, color: currentDisplayColor, isCurrentUser: true, clientId: currentClientID })), !currentUserData && (_jsx(CollaboratorBadge, { name: `${currentDisplayName} (Me)`, color: currentDisplayColor, isCurrentUser: true, clientId: currentClientID })), otherCollaborators.length > 0 && (_jsx("div", { style: {
|
|
48
|
+
width: '1px',
|
|
49
|
+
height: '20px',
|
|
50
|
+
backgroundColor: 'var(--borderColor-muted, #d1d5db)',
|
|
51
|
+
margin: '0 4px'
|
|
52
|
+
} })), otherCollaborators.map(({ clientId, cursor }) => (_jsx(CollaboratorBadge, { name: cursor.name, color: cursor.color, isCurrentUser: false, clientId: clientId }, clientId))), otherCollaborators.length === 0 && (_jsx("span", { style: {
|
|
53
|
+
color: 'var(--fgColor-muted, #6b7280)',
|
|
54
|
+
fontStyle: 'italic',
|
|
55
|
+
marginLeft: '8px'
|
|
56
|
+
}, children: "No other collaborators" }))] }));
|
|
57
|
+
}
|
|
58
|
+
function CollaboratorBadge({ name, color, isCurrentUser, clientId }) {
|
|
59
|
+
// Convert color to rgba for transparency when current user
|
|
60
|
+
const getColorWithOpacity = (color, opacity = 1) => {
|
|
61
|
+
// If it's a hex color, convert to rgba
|
|
62
|
+
if (color.startsWith('#')) {
|
|
63
|
+
const hex = color.slice(1);
|
|
64
|
+
const r = parseInt(hex.slice(0, 2), 16);
|
|
65
|
+
const g = parseInt(hex.slice(2, 4), 16);
|
|
66
|
+
const b = parseInt(hex.slice(4, 6), 16);
|
|
67
|
+
return `rgba(${r}, ${g}, ${b}, ${opacity})`;
|
|
68
|
+
}
|
|
69
|
+
// If it's already rgba or rgb, just return as is (basic support)
|
|
70
|
+
return color;
|
|
71
|
+
};
|
|
72
|
+
const circleColor = isCurrentUser ? getColorWithOpacity(color, 0.1) : color;
|
|
73
|
+
const badgeColor = isCurrentUser ? getColorWithOpacity(color, 0.1) : color;
|
|
74
|
+
return (_jsxs("div", { style: {
|
|
75
|
+
display: 'flex',
|
|
76
|
+
alignItems: 'center',
|
|
77
|
+
gap: '6px'
|
|
78
|
+
}, title: `${name} (Client ID: ${clientId})`, children: [_jsx("div", { style: {
|
|
79
|
+
width: '12px',
|
|
80
|
+
height: '12px',
|
|
81
|
+
borderRadius: '50%',
|
|
82
|
+
backgroundColor: circleColor,
|
|
83
|
+
border: isCurrentUser ? '2px solid #ffffff' : 'none',
|
|
84
|
+
boxShadow: isCurrentUser ? '0 0 0 1px #d1d5db' : 'none',
|
|
85
|
+
flexShrink: 0
|
|
86
|
+
} }), _jsx("span", { style: {
|
|
87
|
+
backgroundColor: badgeColor,
|
|
88
|
+
color: '#ffffff',
|
|
89
|
+
padding: '3px 8px',
|
|
90
|
+
borderRadius: '12px',
|
|
91
|
+
fontSize: '12px',
|
|
92
|
+
fontWeight: '500',
|
|
93
|
+
lineHeight: '1.2',
|
|
94
|
+
whiteSpace: 'nowrap',
|
|
95
|
+
textShadow: '0 1px 2px rgba(0,0,0,0.1)',
|
|
96
|
+
boxShadow: isCurrentUser
|
|
97
|
+
? '0 1px 3px rgba(0,0,0,0.2), inset 0 1px 0 rgba(255,255,255,0.2)'
|
|
98
|
+
: '0 1px 2px rgba(0,0,0,0.1)',
|
|
99
|
+
opacity: isCurrentUser ? 0.9 : 1
|
|
100
|
+
}, children: name })] }));
|
|
101
|
+
}
|
|
102
|
+
export default LoroCollaborators;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023-2025 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
export * from './Bindings';
|
|
6
|
+
export * from './LexicalCollaborationContext';
|
|
7
|
+
export * from './LexicalCollaborationPlugin';
|
|
8
|
+
export * from './State';
|
|
9
|
+
export * from './useCollaboration';
|
|
10
|
+
export * from './wsProvider';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Binding } from '../Bindings';
|
|
2
|
+
import { Provider } from '../State';
|
|
3
|
+
/**
|
|
4
|
+
* Base interface for all diff integrators
|
|
5
|
+
*/
|
|
6
|
+
export interface BaseIntegrator<T = any> {
|
|
7
|
+
/**
|
|
8
|
+
* Handle the diff event
|
|
9
|
+
* @param diff The diff event to integrate
|
|
10
|
+
* @param binding The binding instance
|
|
11
|
+
* @param provider The provider instance
|
|
12
|
+
*/
|
|
13
|
+
integrate(diff: T, binding: Binding, provider: Provider): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BaseIntegrator } from './BaseIntegrator';
|
|
2
|
+
import { Binding } from '../Bindings';
|
|
3
|
+
import { Provider } from '../State';
|
|
4
|
+
interface CounterDiff {
|
|
5
|
+
type: 'counter';
|
|
6
|
+
increment?: number;
|
|
7
|
+
value?: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Handles counter changes (increment/decrement operations)
|
|
11
|
+
*/
|
|
12
|
+
export declare class CounterIntegrator implements BaseIntegrator<CounterDiff> {
|
|
13
|
+
integrate(diff: CounterDiff, binding: Binding, provider: Provider): void;
|
|
14
|
+
integrateInternal(diff: CounterDiff, binding: Binding, provider: Provider): void;
|
|
15
|
+
private integrateIncrement;
|
|
16
|
+
private integrateSetValue;
|
|
17
|
+
/**
|
|
18
|
+
* Helper method to update a counter property in a specific node
|
|
19
|
+
* This would be used when counters are associated with particular nodes
|
|
20
|
+
*/
|
|
21
|
+
private updateNodeCounter;
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023-2025 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Handles counter changes (increment/decrement operations)
|
|
7
|
+
*/
|
|
8
|
+
export class CounterIntegrator {
|
|
9
|
+
integrate(diff, binding, provider) {
|
|
10
|
+
this.integrateInternal(diff, binding, provider);
|
|
11
|
+
}
|
|
12
|
+
// Internal method for use when already inside editor.update()
|
|
13
|
+
integrateInternal(diff, binding, provider) {
|
|
14
|
+
if (diff.increment !== undefined) {
|
|
15
|
+
this.integrateIncrement(diff.increment, binding, provider);
|
|
16
|
+
}
|
|
17
|
+
if (diff.value !== undefined) {
|
|
18
|
+
this.integrateSetValue(diff.value, binding, provider);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
integrateIncrement(increment, binding, provider) {
|
|
22
|
+
// Counter operations in Lexical context might be used for:
|
|
23
|
+
// - Version numbers
|
|
24
|
+
// - Reference counts
|
|
25
|
+
// - Numeric properties in nodes
|
|
26
|
+
// - Analytics or tracking data
|
|
27
|
+
// For now, this is a placeholder since counters are not commonly
|
|
28
|
+
// used in basic text editing scenarios
|
|
29
|
+
}
|
|
30
|
+
integrateSetValue(value, binding, provider) {
|
|
31
|
+
// Similar to increment, the specific implementation would depend
|
|
32
|
+
// on what the counter represents in the document structure
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Helper method to update a counter property in a specific node
|
|
36
|
+
* This would be used when counters are associated with particular nodes
|
|
37
|
+
*/
|
|
38
|
+
updateNodeCounter(nodeKey, counterName, operation, value, binding) {
|
|
39
|
+
// This is a hypothetical implementation
|
|
40
|
+
// Real usage would depend on how counters are integrated into the document model
|
|
41
|
+
// In practice, this might update metadata or special numeric properties
|
|
42
|
+
// associated with Lexical nodes
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BaseIntegrator } from './BaseIntegrator';
|
|
2
|
+
import { Binding } from '../Bindings';
|
|
3
|
+
import { Provider } from '../State';
|
|
4
|
+
interface ListDiff {
|
|
5
|
+
type: 'list';
|
|
6
|
+
diff?: Array<{
|
|
7
|
+
type: 'insert' | 'delete' | 'retain';
|
|
8
|
+
index?: number;
|
|
9
|
+
length?: number;
|
|
10
|
+
value?: any;
|
|
11
|
+
}>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Handles list changes (insertions, deletions, moves in ordered structures)
|
|
15
|
+
*/
|
|
16
|
+
export declare class ListIntegrator implements BaseIntegrator<ListDiff> {
|
|
17
|
+
integrate(diff: ListDiff, binding: Binding, provider: Provider): void;
|
|
18
|
+
integrateInternal(diff: ListDiff, binding: Binding, provider: Provider): void;
|
|
19
|
+
private integrateInsert;
|
|
20
|
+
private integrateDelete;
|
|
21
|
+
private integrateRetain;
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023-2025 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Handles list changes (insertions, deletions, moves in ordered structures)
|
|
7
|
+
*/
|
|
8
|
+
export class ListIntegrator {
|
|
9
|
+
integrate(diff, binding, provider) {
|
|
10
|
+
console.log('📋 Handling ListDiff:', diff);
|
|
11
|
+
this.integrateInternal(diff, binding, provider);
|
|
12
|
+
}
|
|
13
|
+
// Internal method for use when already inside editor.update()
|
|
14
|
+
integrateInternal(diff, binding, provider) {
|
|
15
|
+
if (diff.diff) {
|
|
16
|
+
diff.diff.forEach((change) => {
|
|
17
|
+
switch (change.type) {
|
|
18
|
+
case 'insert':
|
|
19
|
+
this.integrateInsert(change, binding, provider);
|
|
20
|
+
break;
|
|
21
|
+
case 'delete':
|
|
22
|
+
this.integrateDelete(change, binding, provider);
|
|
23
|
+
break;
|
|
24
|
+
case 'retain':
|
|
25
|
+
this.integrateRetain(change, binding, provider);
|
|
26
|
+
break;
|
|
27
|
+
default:
|
|
28
|
+
console.warn(`📋 Unknown list change type: ${change.type}`);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
integrateInsert(change, binding, provider) {
|
|
34
|
+
// This typically represents insertion of child nodes in an ElementNode
|
|
35
|
+
// The actual node creation should be integrated by TreeIntegrator
|
|
36
|
+
// This integrater focuses on the ordering and position updates
|
|
37
|
+
// For now, log the operation - specific implementation would depend on
|
|
38
|
+
// the context of which list/container this change applies to
|
|
39
|
+
}
|
|
40
|
+
integrateDelete(change, binding, provider) {
|
|
41
|
+
// This typically represents removal of child nodes from an ElementNode
|
|
42
|
+
// The actual node deletion should be integrated by TreeIntegrator
|
|
43
|
+
// This integrater focuses on the ordering and position updates
|
|
44
|
+
}
|
|
45
|
+
integrateRetain(change, binding, provider) {
|
|
46
|
+
// Retain operations typically don't require action in Lexical
|
|
47
|
+
// They represent portions of the list that remain unchanged
|
|
48
|
+
if (change.attributes) {
|
|
49
|
+
console.log(`📋 List retain with attributes at ${change.index}, length: ${change.length}`, change.attributes);
|
|
50
|
+
// Handle any attribute changes if needed
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { BaseIntegrator } from './BaseIntegrator';
|
|
2
|
+
import { Binding } from '../Bindings';
|
|
3
|
+
import { Provider } from '../State';
|
|
4
|
+
interface MapDiff {
|
|
5
|
+
type: 'map';
|
|
6
|
+
updated?: Record<string, any>;
|
|
7
|
+
deleted?: string[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Handles map data changes (node properties, metadata updates)
|
|
11
|
+
*/
|
|
12
|
+
export declare class MapIntegrator implements BaseIntegrator<MapDiff> {
|
|
13
|
+
integrate(diff: MapDiff, binding: Binding, provider: Provider): void;
|
|
14
|
+
integrateWithContext(diff: MapDiff, treeId: any, binding: Binding, provider: Provider): void;
|
|
15
|
+
integrateInternal(diff: MapDiff, binding: Binding, provider: Provider): void;
|
|
16
|
+
integrateWithContextInternal(diff: MapDiff, treeId: any, binding: Binding, provider: Provider): void;
|
|
17
|
+
private integratePropertyUpdateWithContext;
|
|
18
|
+
private integratePropertyUpdateWithContextInternal;
|
|
19
|
+
private integratePropertyUpdate;
|
|
20
|
+
private integratePropertyDelete;
|
|
21
|
+
private integrateLexicalDataUpdateWithContext;
|
|
22
|
+
private integrateLexicalDataUpdateInternal;
|
|
23
|
+
}
|
|
24
|
+
export {};
|