@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,44 +0,0 @@
|
|
|
1
|
-
import { LoroDoc, TreeID } from 'loro-crdt';
|
|
2
|
-
import { EditorState, LexicalNode, NodeKey, RangeSelection, TextNode } from 'lexical';
|
|
3
|
-
export declare const DEFAULT_TREE_NAME = "lexical-tree";
|
|
4
|
-
/**
|
|
5
|
-
* Generates a consistent client ID from a Loro document.
|
|
6
|
-
* Uses the numeric peer ID directly to ensure consistency across all components.
|
|
7
|
-
*
|
|
8
|
-
* @param doc - The Loro document
|
|
9
|
-
* @returns A number representing the client ID
|
|
10
|
-
*/
|
|
11
|
-
export declare function generateClientID(doc: LoroDoc): number;
|
|
12
|
-
/**
|
|
13
|
-
* Generates a client ID for cases where no document is available.
|
|
14
|
-
* Creates a random ID within the safe integer range.
|
|
15
|
-
*
|
|
16
|
-
* @returns A randomly generated client ID
|
|
17
|
-
*/
|
|
18
|
-
export declare function generateRandomClientID(): number;
|
|
19
|
-
/**
|
|
20
|
-
* Ensure doc has a LoroTree instance
|
|
21
|
-
*/
|
|
22
|
-
export declare function getLoroTree(doc: LoroDoc, treeName?: string): import("loro-crdt").LoroTree<Record<string, unknown>>;
|
|
23
|
-
/**
|
|
24
|
-
* Helper function to parse TreeID back to nodeKey and peerId
|
|
25
|
-
*/
|
|
26
|
-
export declare function parseTreeID(treeId: TreeID): {
|
|
27
|
-
nodeKey: NodeKey;
|
|
28
|
-
peerId: number;
|
|
29
|
-
};
|
|
30
|
-
/**
|
|
31
|
-
* Helper function to get Lexical node information for Loro sync
|
|
32
|
-
*/
|
|
33
|
-
export declare function getLexicalNodeInfo(node: LexicalNode): {
|
|
34
|
-
parentKey?: string;
|
|
35
|
-
index?: number;
|
|
36
|
-
};
|
|
37
|
-
/**
|
|
38
|
-
* Check if a class extends another class (proper inheritance checking)
|
|
39
|
-
*/
|
|
40
|
-
export declare function isClassExtending(Klass: any, BaseClass: any): boolean;
|
|
41
|
-
export declare function toKeyNodeNumber(nodeKey: NodeKey): number;
|
|
42
|
-
export declare function $diffTextContentAndApplyDelta(textNode: TextNode, key: NodeKey, prevText: string, nextText: string): void;
|
|
43
|
-
export declare function doesSelectionNeedRecovering(selection: RangeSelection): boolean;
|
|
44
|
-
export declare function $moveSelectionToPreviousNode(anchorNodeKey: string, currentEditorState: EditorState): void;
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import { $getNodeByKey, $getRoot, $getSelection, $isRangeSelection, $isTextNode } from 'lexical';
|
|
2
|
-
import simpleDiffWithCursor from '../../utils/simpleDiffWithCursor';
|
|
3
|
-
export const DEFAULT_TREE_NAME = 'lexical-tree';
|
|
4
|
-
/**
|
|
5
|
-
* Generates a consistent client ID from a Loro document.
|
|
6
|
-
* Uses the numeric peer ID directly to ensure consistency across all components.
|
|
7
|
-
*
|
|
8
|
-
* @param doc - The Loro document
|
|
9
|
-
* @returns A number representing the client ID
|
|
10
|
-
*/
|
|
11
|
-
export function generateClientID(doc) {
|
|
12
|
-
return Number(doc.peerId);
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Generates a client ID for cases where no document is available.
|
|
16
|
-
* Creates a random ID within the safe integer range.
|
|
17
|
-
*
|
|
18
|
-
* @returns A randomly generated client ID
|
|
19
|
-
*/
|
|
20
|
-
export function generateRandomClientID() {
|
|
21
|
-
return Math.floor(Math.random() * 2147483647);
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Ensure doc has a LoroTree instance
|
|
25
|
-
*/
|
|
26
|
-
export function getLoroTree(doc, treeName = DEFAULT_TREE_NAME) {
|
|
27
|
-
const tree = doc.getTree(treeName);
|
|
28
|
-
// Enable fractional index for ordered siblings (useful for maintaining order)
|
|
29
|
-
// tree.enableFractionalIndex(0.001);
|
|
30
|
-
return tree;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Helper function to parse TreeID back to nodeKey and peerId
|
|
34
|
-
*/
|
|
35
|
-
export function parseTreeID(treeId) {
|
|
36
|
-
const [nodeKey, peerId] = treeId.split('@');
|
|
37
|
-
return {
|
|
38
|
-
nodeKey: nodeKey,
|
|
39
|
-
peerId: Number(peerId)
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Helper function to get Lexical node information for Loro sync
|
|
44
|
-
*/
|
|
45
|
-
export function getLexicalNodeInfo(node) {
|
|
46
|
-
// TODO: Implement logic to get parent and index from Lexical node
|
|
47
|
-
// This is a placeholder that should be replaced with actual Lexical API calls
|
|
48
|
-
return {
|
|
49
|
-
parentKey: node.getParent()?.getKey(),
|
|
50
|
-
index: node.getIndexWithinParent()
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Check if a class extends another class (proper inheritance checking)
|
|
55
|
-
*/
|
|
56
|
-
export function isClassExtending(Klass, BaseClass) {
|
|
57
|
-
// Direct class equality
|
|
58
|
-
if (Klass === BaseClass) {
|
|
59
|
-
return true;
|
|
60
|
-
}
|
|
61
|
-
// Check by name (for cases where classes might be different instances)
|
|
62
|
-
if (Klass.name === BaseClass.name) {
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
// Check prototype chain for inheritance
|
|
66
|
-
if (Klass.prototype && Object.prototype.isPrototypeOf.call(BaseClass, Klass)) {
|
|
67
|
-
return true;
|
|
68
|
-
}
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
export function toKeyNodeNumber(nodeKey) {
|
|
72
|
-
// Special case for root node
|
|
73
|
-
if (nodeKey === "root") {
|
|
74
|
-
return 0;
|
|
75
|
-
}
|
|
76
|
-
// Attempt to convert NodeKey (string) to a number
|
|
77
|
-
const keyAsNumber = Number(nodeKey);
|
|
78
|
-
if (!isNaN(keyAsNumber)) {
|
|
79
|
-
return keyAsNumber;
|
|
80
|
-
}
|
|
81
|
-
// If conversion fails, throw an error
|
|
82
|
-
throw new Error(`NodeKey "${nodeKey}" cannot be converted to a number. Expected numeric string or "root".`);
|
|
83
|
-
}
|
|
84
|
-
export function $diffTextContentAndApplyDelta(textNode, key, prevText, nextText) {
|
|
85
|
-
const selection = $getSelection();
|
|
86
|
-
let cursorOffset = nextText.length;
|
|
87
|
-
if ($isRangeSelection(selection) && selection.isCollapsed()) {
|
|
88
|
-
const anchor = selection.anchor;
|
|
89
|
-
if (anchor.key === key) {
|
|
90
|
-
// Ensure cursor offset doesn't exceed the new text length
|
|
91
|
-
// This prevents errors when text is split or content changes significantly
|
|
92
|
-
cursorOffset = Math.min(anchor.offset, nextText.length);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
const diff = simpleDiffWithCursor(prevText, nextText, cursorOffset);
|
|
96
|
-
const beforeSplice = textNode.getTextContent();
|
|
97
|
-
textNode.spliceText(diff.index, diff.remove, diff.insert);
|
|
98
|
-
const afterSplice = textNode.getTextContent();
|
|
99
|
-
}
|
|
100
|
-
export function doesSelectionNeedRecovering(selection) {
|
|
101
|
-
const anchor = selection.anchor;
|
|
102
|
-
const focus = selection.focus;
|
|
103
|
-
let recoveryNeeded = false;
|
|
104
|
-
try {
|
|
105
|
-
const anchorNode = anchor.getNode();
|
|
106
|
-
const focusNode = focus.getNode();
|
|
107
|
-
if (
|
|
108
|
-
// We might have removed a node that no longer exists
|
|
109
|
-
!anchorNode.isAttached() ||
|
|
110
|
-
!focusNode.isAttached() ||
|
|
111
|
-
// If we've split a node, then the offset might not be right
|
|
112
|
-
($isTextNode(anchorNode) &&
|
|
113
|
-
anchor.offset > anchorNode.getTextContentSize()) ||
|
|
114
|
-
($isTextNode(focusNode) && focus.offset > focusNode.getTextContentSize())) {
|
|
115
|
-
recoveryNeeded = true;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
catch (e) {
|
|
119
|
-
// Sometimes checking nor a node via getNode might trigger
|
|
120
|
-
// an error, so we need recovery then too.
|
|
121
|
-
recoveryNeeded = true;
|
|
122
|
-
}
|
|
123
|
-
return recoveryNeeded;
|
|
124
|
-
}
|
|
125
|
-
export function $moveSelectionToPreviousNode(anchorNodeKey, currentEditorState) {
|
|
126
|
-
const anchorNode = currentEditorState._nodeMap.get(anchorNodeKey);
|
|
127
|
-
if (!anchorNode) {
|
|
128
|
-
$getRoot().selectStart();
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
// Get previous node
|
|
132
|
-
const prevNodeKey = anchorNode.__prev;
|
|
133
|
-
let prevNode = null;
|
|
134
|
-
if (prevNodeKey) {
|
|
135
|
-
prevNode = $getNodeByKey(prevNodeKey);
|
|
136
|
-
}
|
|
137
|
-
// If previous node not found, get parent node
|
|
138
|
-
if (prevNode === null && anchorNode.__parent !== null) {
|
|
139
|
-
prevNode = $getNodeByKey(anchorNode.__parent);
|
|
140
|
-
}
|
|
141
|
-
if (prevNode === null) {
|
|
142
|
-
$getRoot().selectStart();
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
if (prevNode !== null && prevNode.isAttached()) {
|
|
146
|
-
prevNode.selectEnd();
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
else {
|
|
150
|
-
// If the found node is also deleted, select the next one
|
|
151
|
-
$moveSelectionToPreviousNode(prevNode.__key, currentEditorState);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { LoroDoc } from 'loro-crdt';
|
|
2
|
-
import { Provider } from './State';
|
|
3
|
-
/**
|
|
4
|
-
* Create a WebSocket provider for Loro collaboration with periodic ephemeral state synchronization.
|
|
5
|
-
* The resyncInterval enables client-side periodic querying to complement server-side cleanup,
|
|
6
|
-
* preventing stale user states from accumulating after browser refreshes.
|
|
7
|
-
*/
|
|
8
|
-
export declare function createWebsocketProvider(id: string, docMap: Map<string, LoroDoc>, websocketUrl?: string): Provider;
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { LoroDoc } from 'loro-crdt';
|
|
2
|
-
import { WebsocketProvider } from './provider/websocket';
|
|
3
|
-
const url = new URL(window.location.href);
|
|
4
|
-
const params = new URLSearchParams(url.search);
|
|
5
|
-
const RESYNC_INTERVAL = parseInt(params.get('resyncInterval') || '30000', 10); // Default 30s, configurable via URL
|
|
6
|
-
/**
|
|
7
|
-
* Create a WebSocket provider for Loro collaboration with periodic ephemeral state synchronization.
|
|
8
|
-
* The resyncInterval enables client-side periodic querying to complement server-side cleanup,
|
|
9
|
-
* preventing stale user states from accumulating after browser refreshes.
|
|
10
|
-
*/
|
|
11
|
-
export function createWebsocketProvider(id, docMap, websocketUrl) {
|
|
12
|
-
let doc = docMap.get(id);
|
|
13
|
-
if (doc === undefined) {
|
|
14
|
-
doc = new LoroDoc();
|
|
15
|
-
docMap.set(id, doc);
|
|
16
|
-
}
|
|
17
|
-
const providerInstanceId = Math.random().toString(36).substr(2, 9);
|
|
18
|
-
console.log(`🏭 Creating WebsocketProvider instance (ID: ${providerInstanceId}) for docId: ${id}`);
|
|
19
|
-
// Use provided websocketUrl or fallback to URL parameters/defaults
|
|
20
|
-
const finalWebsocketUrl = websocketUrl || (() => {
|
|
21
|
-
const url = new URL(window.location.href);
|
|
22
|
-
const params = new URLSearchParams(url.search);
|
|
23
|
-
return params.get('collabEndpoint') || 'ws://localhost:3002';
|
|
24
|
-
})();
|
|
25
|
-
const websocketProvider = new WebsocketProvider(finalWebsocketUrl, id, doc, {
|
|
26
|
-
connect: false,
|
|
27
|
-
resyncInterval: RESYNC_INTERVAL, // Poll ephemeral state periodically to prevent stale user accumulation
|
|
28
|
-
});
|
|
29
|
-
console.log(`🏭 WebsocketProvider created for: ${finalWebsocketUrl}/${id} with resyncInterval: ${RESYNC_INTERVAL}ms`);
|
|
30
|
-
return websocketProvider;
|
|
31
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default function invariant(cond?: boolean, message?: string, ...args: string[]): asserts cond;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
// invariant(condition, message) will refine types based on "condition", and
|
|
2
|
-
// if "condition" is false will throw an error. This function is special-cased
|
|
3
|
-
// in flow itself, so we can't name it anything else.
|
|
4
|
-
export default function invariant(cond, message, ...args) {
|
|
5
|
-
if (cond) {
|
|
6
|
-
return;
|
|
7
|
-
}
|
|
8
|
-
throw new Error('Internal Lexical error: invariant() is meant to be replaced at compile ' +
|
|
9
|
-
'time. There is no runtime version. Error: ' +
|
|
10
|
-
message);
|
|
11
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
export default function simpleDiffWithCursor(a, b, cursor) {
|
|
2
|
-
const aLength = a.length;
|
|
3
|
-
const bLength = b.length;
|
|
4
|
-
let left = 0; // number of same characters counting from left
|
|
5
|
-
let right = 0; // number of same characters counting from right
|
|
6
|
-
// Iterate left to the right until we find a changed character
|
|
7
|
-
// First iteration considers the current cursor position
|
|
8
|
-
while (left < aLength &&
|
|
9
|
-
left < bLength &&
|
|
10
|
-
a[left] === b[left] &&
|
|
11
|
-
left < cursor) {
|
|
12
|
-
left++;
|
|
13
|
-
}
|
|
14
|
-
// Iterate right to the left until we find a changed character
|
|
15
|
-
while (right + left < aLength &&
|
|
16
|
-
right + left < bLength &&
|
|
17
|
-
a[aLength - right - 1] === b[bLength - right - 1]) {
|
|
18
|
-
right++;
|
|
19
|
-
}
|
|
20
|
-
// Try to iterate left further to the right without caring about the current cursor position
|
|
21
|
-
while (right + left < aLength &&
|
|
22
|
-
right + left < bLength &&
|
|
23
|
-
a[left] === b[left]) {
|
|
24
|
-
left++;
|
|
25
|
-
}
|
|
26
|
-
return {
|
|
27
|
-
index: left,
|
|
28
|
-
insert: b.slice(left, bLength - right),
|
|
29
|
-
remove: aLength - left - right,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { LexicalEditor, NodeKey } from 'lexical';
|
|
2
|
-
import { Klass, LexicalNode } from 'lexical';
|
|
3
|
-
import type { Doc } from 'yjs';
|
|
4
|
-
import type { CollabElementNode } from './nodes/CollabElementNode';
|
|
5
|
-
import { AnyCollabNode } from './nodes/AnyCollabNode';
|
|
6
|
-
import type { Cursor } from './sync/SyncCursors';
|
|
7
|
-
import { Provider } from './State';
|
|
8
|
-
export type ClientID = number;
|
|
9
|
-
export type Binding = {
|
|
10
|
-
clientID: ClientID;
|
|
11
|
-
collabNodeMap: Map<NodeKey, AnyCollabNode>;
|
|
12
|
-
cursors: Map<ClientID, Cursor>;
|
|
13
|
-
cursorsContainer: null | HTMLElement;
|
|
14
|
-
doc: Doc;
|
|
15
|
-
docMap: Map<string, Doc>;
|
|
16
|
-
editor: LexicalEditor;
|
|
17
|
-
id: string;
|
|
18
|
-
nodeProperties: Map<string, Array<string>>;
|
|
19
|
-
root: CollabElementNode;
|
|
20
|
-
excludedProperties: ExcludedProperties;
|
|
21
|
-
};
|
|
22
|
-
export type ExcludedProperties = Map<Klass<LexicalNode>, Set<string>>;
|
|
23
|
-
export declare function createBinding(editor: LexicalEditor, provider: Provider, id: string, doc: Doc | null | undefined, docMap: Map<string, Doc>, excludedProperties?: ExcludedProperties): Binding;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { XmlText } from 'yjs';
|
|
2
|
-
import invariant from '../utils/invariant';
|
|
3
|
-
import { $createCollabElementNode } from './nodes/CollabElementNode';
|
|
4
|
-
import { setupYjsDebugging } from './Debug';
|
|
5
|
-
export function createBinding(editor, provider, id, doc, docMap, excludedProperties) {
|
|
6
|
-
invariant(doc !== undefined && doc !== null, 'createBinding: doc is null or undefined');
|
|
7
|
-
const rootXmlText = doc.get('root', XmlText);
|
|
8
|
-
const collabRoot = $createCollabElementNode(rootXmlText, null, 'root');
|
|
9
|
-
collabRoot._key = 'root';
|
|
10
|
-
const binding = {
|
|
11
|
-
clientID: doc.clientID,
|
|
12
|
-
collabNodeMap: new Map(),
|
|
13
|
-
cursors: new Map(),
|
|
14
|
-
cursorsContainer: null,
|
|
15
|
-
doc,
|
|
16
|
-
docMap,
|
|
17
|
-
editor,
|
|
18
|
-
excludedProperties: excludedProperties || new Map(),
|
|
19
|
-
id,
|
|
20
|
-
nodeProperties: new Map(),
|
|
21
|
-
root: collabRoot,
|
|
22
|
-
};
|
|
23
|
-
// Setup Y.js debugging utilities
|
|
24
|
-
setupYjsDebugging(binding);
|
|
25
|
-
return binding;
|
|
26
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { Binding } from './Bindings';
|
|
2
|
-
/**
|
|
3
|
-
* YJS Debugging Interface - Provides comprehensive debugging utilities for Y.js collaboration
|
|
4
|
-
*/
|
|
5
|
-
export interface YjsDebugger {
|
|
6
|
-
binding: Binding | null;
|
|
7
|
-
logStructure: () => void;
|
|
8
|
-
verifyStructure: () => void;
|
|
9
|
-
inspectNode: (nodeKey: string) => void;
|
|
10
|
-
generateTreeHTML: (node: any, prefix?: string, isLast?: boolean) => string;
|
|
11
|
-
addDebugToPage: () => void;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Setup global debugging utilities for Y.js collaboration
|
|
15
|
-
* This function creates comprehensive debugging tools including:
|
|
16
|
-
* - Tree structure visualization
|
|
17
|
-
* - Node inspection utilities
|
|
18
|
-
* - Interactive debug panel
|
|
19
|
-
* - Console logging functions
|
|
20
|
-
*
|
|
21
|
-
* @param binding - The Y.js binding instance to debug
|
|
22
|
-
*/
|
|
23
|
-
export declare function setupYjsDebugging(binding: Binding): void;
|
package/lib/collab/yjs/Debug.js
DELETED
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Setup global debugging utilities for Y.js collaboration
|
|
3
|
-
* This function creates comprehensive debugging tools including:
|
|
4
|
-
* - Tree structure visualization
|
|
5
|
-
* - Node inspection utilities
|
|
6
|
-
* - Interactive debug panel
|
|
7
|
-
* - Console logging functions
|
|
8
|
-
*
|
|
9
|
-
* @param binding - The Y.js binding instance to debug
|
|
10
|
-
*/
|
|
11
|
-
export function setupYjsDebugging(binding) {
|
|
12
|
-
// Setup global debugging for Y.js
|
|
13
|
-
window.debugYjs = {
|
|
14
|
-
binding: null, // Will be set after binding is created
|
|
15
|
-
logStructure: () => {
|
|
16
|
-
const binding = window.debugYjs.binding;
|
|
17
|
-
if (binding) {
|
|
18
|
-
console.log('=== YJS STRUCTURE DEBUG ===');
|
|
19
|
-
console.log('Root children:', binding.root._children.length);
|
|
20
|
-
binding.root._children.forEach((child, index) => {
|
|
21
|
-
console.log(` ${index}: ${child.constructor.name}(${child._key})`);
|
|
22
|
-
});
|
|
23
|
-
console.log('=== END DEBUG ===');
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
console.log('Y.js binding not available yet');
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
verifyStructure: () => {
|
|
30
|
-
const binding = window.debugYjs.binding;
|
|
31
|
-
if (!binding)
|
|
32
|
-
return console.log('❌ Binding not available');
|
|
33
|
-
console.log('🔍 YJS STRUCTURE VERIFICATION:');
|
|
34
|
-
console.log('Root children count:', binding.root._children.length);
|
|
35
|
-
binding.root._children.forEach((child, index) => {
|
|
36
|
-
console.log(`\n📍 Root child ${index}:`);
|
|
37
|
-
console.log(' Type:', child.constructor.name);
|
|
38
|
-
console.log(' Key:', child._key);
|
|
39
|
-
console.log(' Element Type:', child.getType ? child.getType() : 'N/A');
|
|
40
|
-
console.log(' Children Count:', child._children ? child._children.length : 0);
|
|
41
|
-
if (child._children && child._children.length > 0) {
|
|
42
|
-
console.log(' Children:');
|
|
43
|
-
child._children.forEach((grandChild, gIndex) => {
|
|
44
|
-
console.log(` ${gIndex}: ${grandChild.constructor.name}(${grandChild._key})`);
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
// Check for any orphaned text nodes at root level
|
|
49
|
-
const textNodesAtRoot = binding.root._children.filter(child => child.constructor.name === 'CollabTextNode');
|
|
50
|
-
if (textNodesAtRoot.length > 0) {
|
|
51
|
-
console.log('⚠️ WARNING: Found text nodes directly under root:');
|
|
52
|
-
textNodesAtRoot.forEach(node => console.log(' -', node._key));
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
inspectNode: (nodeKey) => {
|
|
56
|
-
const binding = window.debugYjs.binding;
|
|
57
|
-
if (!binding)
|
|
58
|
-
return console.log('Binding not available');
|
|
59
|
-
// Search for node in tree
|
|
60
|
-
const findNode = (node, key) => {
|
|
61
|
-
if (node._key === key)
|
|
62
|
-
return node;
|
|
63
|
-
if (node._children) {
|
|
64
|
-
for (const child of node._children) {
|
|
65
|
-
const found = findNode(child, key);
|
|
66
|
-
if (found)
|
|
67
|
-
return found;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return null;
|
|
71
|
-
};
|
|
72
|
-
const node = findNode(binding.root, nodeKey);
|
|
73
|
-
if (node) {
|
|
74
|
-
console.log('🔍 Node Details:', {
|
|
75
|
-
key: node._key,
|
|
76
|
-
type: node.constructor.name,
|
|
77
|
-
elementType: node.getType ? node.getType() : 'N/A',
|
|
78
|
-
children: node._children ? node._children.length : 0,
|
|
79
|
-
properties: node._xmlText ? 'Has XmlText' : 'No XmlText',
|
|
80
|
-
parent: node._parent ? node._parent._key : 'No parent'
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
console.warn(`Node with key "${nodeKey}" not found`);
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
generateTreeHTML: (node, prefix = '', isLast = true) => {
|
|
88
|
-
const nodeKey = node._key || 'no-key';
|
|
89
|
-
const nodeType = node.getType ? node.getType() : 'no-type';
|
|
90
|
-
const nodeInfo = `${node.constructor.name}(${nodeKey}) [${nodeType}]`;
|
|
91
|
-
const connector = isLast ? '└── ' : '├── ';
|
|
92
|
-
const childPrefix = prefix + (isLast ? ' ' : '│ ');
|
|
93
|
-
const clickIntegrator = nodeKey !== 'no-key' ? `onclick="window.debugYjs.inspectNode('${nodeKey}')"` : '';
|
|
94
|
-
const nodeColor = nodeKey !== 'no-key' ? '#00ff88' : '#888';
|
|
95
|
-
const cursor = nodeKey !== 'no-key' ? 'cursor: pointer; text-decoration: underline;' : '';
|
|
96
|
-
// Convert spaces to non-breaking spaces for proper HTML rendering
|
|
97
|
-
const htmlPrefix = prefix.replace(/ /g, ' ');
|
|
98
|
-
const htmlConnector = connector.replace(/ /g, ' ');
|
|
99
|
-
let result = `<div style="color: ${nodeColor}; ${cursor}" ${clickIntegrator}>${htmlPrefix}${htmlConnector}${nodeInfo}</div>`;
|
|
100
|
-
if (node._children && node._children.length > 0) {
|
|
101
|
-
node._children.forEach((child, index) => {
|
|
102
|
-
const isLastChild = index === node._children.length - 1;
|
|
103
|
-
if (child) {
|
|
104
|
-
result += window.debugYjs.generateTreeHTML(child, childPrefix, isLastChild);
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
const childConnector = isLastChild ? '└── ' : '├── ';
|
|
108
|
-
const htmlChildPrefix = childPrefix.replace(/ /g, ' ');
|
|
109
|
-
const htmlChildConnector = childConnector.replace(/ /g, ' ');
|
|
110
|
-
result += `<div style="color: #ffaa00;">${htmlChildPrefix}${htmlChildConnector}null</div>`;
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
return result;
|
|
115
|
-
},
|
|
116
|
-
addDebugToPage: () => {
|
|
117
|
-
const binding = window.debugYjs.binding;
|
|
118
|
-
if (!binding)
|
|
119
|
-
return;
|
|
120
|
-
// Debug: log the actual structure to console
|
|
121
|
-
console.log('🟢 YJS Root structure:', {
|
|
122
|
-
rootChildren: binding.root._children.length,
|
|
123
|
-
children: binding.root._children.map((child, index) => ({
|
|
124
|
-
index,
|
|
125
|
-
type: child.constructor.name,
|
|
126
|
-
key: child._key,
|
|
127
|
-
childrenCount: child._children ? child._children.length : 0,
|
|
128
|
-
children: child._children ? child._children.map((grandChild) => ({
|
|
129
|
-
type: grandChild.constructor.name,
|
|
130
|
-
key: grandChild._key
|
|
131
|
-
})) : []
|
|
132
|
-
}))
|
|
133
|
-
});
|
|
134
|
-
const treeHTML = window.debugYjs.generateTreeHTML(binding.root);
|
|
135
|
-
const debugDiv = document.getElementById('debug-yjs') || document.createElement('div');
|
|
136
|
-
const existingDiv = document.getElementById('debug-yjs');
|
|
137
|
-
// Preserve current position if panel already exists
|
|
138
|
-
let currentLeft = '10px';
|
|
139
|
-
let currentTop = '700px';
|
|
140
|
-
if (existingDiv) {
|
|
141
|
-
currentLeft = existingDiv.style.left || '10px';
|
|
142
|
-
currentTop = existingDiv.style.top || '700px';
|
|
143
|
-
}
|
|
144
|
-
debugDiv.id = 'debug-yjs';
|
|
145
|
-
debugDiv.style.cssText = `position: fixed; top: ${currentTop}; left: ${currentLeft}; background: rgba(0,100,0,0.9); color: white; padding: 0; border-radius: 8px; font-family: "Courier New", monospace; font-size: 11px; z-index: 9999; max-width: 500px; max-height: 80vh; box-shadow: 0 4px 8px rgba(0,0,0,0.3); border: 1px solid #51cf66; user-select: none;`;
|
|
146
|
-
// Add drag functionality if not already added
|
|
147
|
-
if (!debugDiv.classList.contains('draggable-initialized')) {
|
|
148
|
-
debugDiv.classList.add('draggable-initialized');
|
|
149
|
-
let isDragging = false;
|
|
150
|
-
let startX = 0;
|
|
151
|
-
let startY = 0;
|
|
152
|
-
let startLeft = 0;
|
|
153
|
-
let startTop = 0;
|
|
154
|
-
debugDiv.addEventListener('mousedown', (e) => {
|
|
155
|
-
// Only start drag if clicking on the header area
|
|
156
|
-
const target = e.target;
|
|
157
|
-
const dragHandle = debugDiv.querySelector('.debug-drag-handle');
|
|
158
|
-
if (!dragHandle || !dragHandle.contains(target))
|
|
159
|
-
return;
|
|
160
|
-
isDragging = true;
|
|
161
|
-
startX = e.clientX;
|
|
162
|
-
startY = e.clientY;
|
|
163
|
-
const rect = debugDiv.getBoundingClientRect();
|
|
164
|
-
startLeft = rect.left;
|
|
165
|
-
startTop = rect.top;
|
|
166
|
-
document.addEventListener('mousemove', onMouseMove);
|
|
167
|
-
document.addEventListener('mouseup', onMouseUp);
|
|
168
|
-
e.preventDefault();
|
|
169
|
-
});
|
|
170
|
-
function onMouseMove(e) {
|
|
171
|
-
if (!isDragging)
|
|
172
|
-
return;
|
|
173
|
-
const deltaX = e.clientX - startX;
|
|
174
|
-
const deltaY = e.clientY - startY;
|
|
175
|
-
const newLeft = Math.max(0, Math.min(window.innerWidth - debugDiv.offsetWidth, startLeft + deltaX));
|
|
176
|
-
const newTop = Math.max(0, Math.min(window.innerHeight - debugDiv.offsetHeight, startTop + deltaY));
|
|
177
|
-
debugDiv.style.left = newLeft + 'px';
|
|
178
|
-
debugDiv.style.top = newTop + 'px';
|
|
179
|
-
}
|
|
180
|
-
function onMouseUp() {
|
|
181
|
-
isDragging = false;
|
|
182
|
-
document.removeEventListener('mousemove', onMouseMove);
|
|
183
|
-
document.removeEventListener('mouseup', onMouseUp);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
debugDiv.innerHTML = `
|
|
187
|
-
<div class="debug-drag-handle" style="color: #51cf66; font-weight: bold; margin-bottom: 10px; border-bottom: 1px solid #444; padding: 15px 15px 5px 15px; cursor: move; background: linear-gradient(90deg, rgba(81,207,102,0.1), transparent);">
|
|
188
|
-
🟢 YJS STRUCTURE <span style="float: right; font-size: 9px; color: #666;">⋮⋮ drag</span>
|
|
189
|
-
</div>
|
|
190
|
-
<div style="padding: 0 15px 15px 15px; overflow-y: auto; max-height: calc(80vh - 50px);">
|
|
191
|
-
<div style="color: #74c0fc; margin-bottom: 8px;">Root children: ${binding.root._children.length}</div>
|
|
192
|
-
<div style="color: #ffd43b; margin-bottom: 10px;">Time: ${new Date().toLocaleTimeString()}</div>
|
|
193
|
-
<div style="border-top: 1px solid #444; padding-top: 8px;">
|
|
194
|
-
${treeHTML}
|
|
195
|
-
</div>
|
|
196
|
-
<div style="margin-top: 10px; font-size: 10px; color: #888;">
|
|
197
|
-
<span onclick="window.debugYjs.addDebugToPage()" style="color: #74c0fc; cursor: pointer; text-decoration: underline;">🔄 Refresh</span> |
|
|
198
|
-
<span onclick="window.debugYjs.verifyStructure()" style="color: #00ff88; cursor: pointer; text-decoration: underline;">✅ Verify</span> |
|
|
199
|
-
<span onclick="window.debugYjs.logStructure()" style="color: #ffd43b; cursor: pointer; text-decoration: underline;">📝 Console Log</span> |
|
|
200
|
-
<span onclick="document.getElementById('debug-yjs').remove()" style="color: #51cf66; cursor: pointer; text-decoration: underline;">❌ Close</span>
|
|
201
|
-
</div>
|
|
202
|
-
</div>
|
|
203
|
-
`;
|
|
204
|
-
document.body.appendChild(debugDiv);
|
|
205
|
-
}
|
|
206
|
-
};
|
|
207
|
-
// Expose binding for debugging
|
|
208
|
-
window.debugYjs.binding = binding;
|
|
209
|
-
// Auto-initialize debug window after a short delay
|
|
210
|
-
setTimeout(() => {
|
|
211
|
-
window.debugYjs.addDebugToPage();
|
|
212
|
-
}, 1500); // Slightly later than Y.js to avoid overlap
|
|
213
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { Doc } from 'yjs';
|
|
2
|
-
export type CollaborationContextType = {
|
|
3
|
-
clientID: number;
|
|
4
|
-
color: string;
|
|
5
|
-
isCollabActive: boolean;
|
|
6
|
-
name: string;
|
|
7
|
-
docMap: Map<string, Doc>;
|
|
8
|
-
};
|
|
9
|
-
export declare const CollaborationContext: import("react").Context<CollaborationContextType>;
|
|
10
|
-
export declare function useCollaborationContext(username?: string, color?: string): CollaborationContextType;
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { createContext, useContext } from 'react';
|
|
2
|
-
const ENTRIES = [
|
|
3
|
-
['Cat', 'rgb(125, 50, 0)'],
|
|
4
|
-
['Dog', 'rgb(100, 0, 0)'],
|
|
5
|
-
['Rabbit', 'rgb(150, 0, 0)'],
|
|
6
|
-
['Frog', 'rgb(200, 0, 0)'],
|
|
7
|
-
['Fox', 'rgb(200, 75, 0)'],
|
|
8
|
-
['Hedgehog', 'rgb(0, 75, 0)'],
|
|
9
|
-
['Pigeon', 'rgb(0, 125, 0)'],
|
|
10
|
-
['Squirrel', 'rgb(75, 100, 0)'],
|
|
11
|
-
['Bear', 'rgb(125, 100, 0)'],
|
|
12
|
-
['Tiger', 'rgb(0, 0, 150)'],
|
|
13
|
-
['Leopard', 'rgb(0, 0, 200)'],
|
|
14
|
-
['Zebra', 'rgb(0, 0, 250)'],
|
|
15
|
-
['Wolf', 'rgb(0, 100, 150)'],
|
|
16
|
-
['Owl', 'rgb(0, 100, 100)'],
|
|
17
|
-
['Gull', 'rgb(100, 0, 100)'],
|
|
18
|
-
['Squid', 'rgb(150, 0, 150)'],
|
|
19
|
-
];
|
|
20
|
-
const randomEntry = ENTRIES[Math.floor(Math.random() * ENTRIES.length)];
|
|
21
|
-
export const CollaborationContext = createContext({
|
|
22
|
-
clientID: 0,
|
|
23
|
-
color: randomEntry[1],
|
|
24
|
-
isCollabActive: false,
|
|
25
|
-
name: randomEntry[0],
|
|
26
|
-
docMap: new Map(),
|
|
27
|
-
});
|
|
28
|
-
export function useCollaborationContext(username, color) {
|
|
29
|
-
const collabContext = useContext(CollaborationContext);
|
|
30
|
-
if (username != null) {
|
|
31
|
-
collabContext.name = username;
|
|
32
|
-
}
|
|
33
|
-
if (color != null) {
|
|
34
|
-
collabContext.color = color;
|
|
35
|
-
}
|
|
36
|
-
return collabContext;
|
|
37
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { JSX } from 'react';
|
|
2
|
-
import type { Doc } from 'yjs';
|
|
3
|
-
import { InitialEditorStateType } from '@lexical/react/LexicalComposer';
|
|
4
|
-
import { Provider } from './State';
|
|
5
|
-
import { CursorsContainerRef } from './useCollaboration';
|
|
6
|
-
import { SyncCursorPositionsFn } from './sync/SyncCursors';
|
|
7
|
-
import { ExcludedProperties } from './Bindings';
|
|
8
|
-
type Props = {
|
|
9
|
-
id: string;
|
|
10
|
-
providerFactory: (id: string, docMap: Map<string, Doc>) => Provider;
|
|
11
|
-
shouldBootstrap: boolean;
|
|
12
|
-
username?: string;
|
|
13
|
-
cursorColor?: string;
|
|
14
|
-
cursorsContainerRef?: CursorsContainerRef;
|
|
15
|
-
initialEditorState?: InitialEditorStateType;
|
|
16
|
-
excludedProperties?: ExcludedProperties;
|
|
17
|
-
awarenessData?: object;
|
|
18
|
-
syncCursorPositionsFn?: SyncCursorPositionsFn;
|
|
19
|
-
};
|
|
20
|
-
export declare function CollaborationPlugin({ id, providerFactory, shouldBootstrap, username, cursorColor, cursorsContainerRef, initialEditorState, excludedProperties, awarenessData, syncCursorPositionsFn, }: Props): JSX.Element;
|
|
21
|
-
export {};
|