@datalayer/lexical-loro 0.2.5 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/lib/App.d.ts +0 -2
- package/lib/App.js +0 -141
- package/lib/Editor.d.ts +0 -2
- package/lib/Editor.js +0 -115
- package/lib/Settings.d.ts +0 -2
- package/lib/Settings.js +0 -57
- package/lib/appSettings.d.ts +0 -36
- package/lib/appSettings.js +0 -48
- package/lib/collab/loro/Bindings.d.ts +0 -41
- package/lib/collab/loro/Bindings.js +0 -99
- package/lib/collab/loro/Debug.d.ts +0 -33
- package/lib/collab/loro/Debug.js +0 -452
- package/lib/collab/loro/LexicalCollaborationContext.d.ts +0 -19
- package/lib/collab/loro/LexicalCollaborationContext.js +0 -52
- package/lib/collab/loro/LexicalCollaborationPlugin.d.ts +0 -24
- package/lib/collab/loro/LexicalCollaborationPlugin.js +0 -83
- package/lib/collab/loro/State.d.ts +0 -53
- package/lib/collab/loro/State.js +0 -94
- package/lib/collab/loro/components/LoroCollaborationUI.d.ts +0 -13
- package/lib/collab/loro/components/LoroCollaborationUI.js +0 -9
- package/lib/collab/loro/components/LoroCollaborators.d.ts +0 -8
- package/lib/collab/loro/components/LoroCollaborators.js +0 -102
- package/lib/collab/loro/components/index.d.ts +0 -2
- package/lib/collab/loro/components/index.js +0 -6
- package/lib/collab/loro/index.d.ts +0 -6
- package/lib/collab/loro/index.js +0 -10
- package/lib/collab/loro/integrators/BaseIntegrator.d.ts +0 -14
- package/lib/collab/loro/integrators/BaseIntegrator.js +0 -5
- package/lib/collab/loro/integrators/CounterIntegrator.d.ts +0 -23
- package/lib/collab/loro/integrators/CounterIntegrator.js +0 -44
- package/lib/collab/loro/integrators/ListIntegrator.d.ts +0 -23
- package/lib/collab/loro/integrators/ListIntegrator.js +0 -53
- package/lib/collab/loro/integrators/MapIntegrator.d.ts +0 -24
- package/lib/collab/loro/integrators/MapIntegrator.js +0 -235
- package/lib/collab/loro/integrators/TextIntegrator.d.ts +0 -25
- package/lib/collab/loro/integrators/TextIntegrator.js +0 -55
- package/lib/collab/loro/integrators/TreeIntegrator.d.ts +0 -36
- package/lib/collab/loro/integrators/TreeIntegrator.js +0 -251
- package/lib/collab/loro/nodes/NodeFactory.d.ts +0 -15
- package/lib/collab/loro/nodes/NodeFactory.js +0 -101
- package/lib/collab/loro/nodes/NodesMapper.d.ts +0 -120
- package/lib/collab/loro/nodes/NodesMapper.js +0 -277
- package/lib/collab/loro/propagators/DecoratorNodePropagator.d.ts +0 -60
- package/lib/collab/loro/propagators/DecoratorNodePropagator.js +0 -306
- package/lib/collab/loro/propagators/ElementNodePropagator.d.ts +0 -62
- package/lib/collab/loro/propagators/ElementNodePropagator.js +0 -326
- package/lib/collab/loro/propagators/LineBreakNodePropagator.d.ts +0 -57
- package/lib/collab/loro/propagators/LineBreakNodePropagator.js +0 -200
- package/lib/collab/loro/propagators/RootNodePropagator.d.ts +0 -55
- package/lib/collab/loro/propagators/RootNodePropagator.js +0 -174
- package/lib/collab/loro/propagators/TextNodePropagator.d.ts +0 -60
- package/lib/collab/loro/propagators/TextNodePropagator.js +0 -440
- package/lib/collab/loro/propagators/index.d.ts +0 -49
- package/lib/collab/loro/propagators/index.js +0 -30
- package/lib/collab/loro/provider/websocket.d.ts +0 -116
- package/lib/collab/loro/provider/websocket.js +0 -911
- package/lib/collab/loro/servers/index.d.ts +0 -0
- package/lib/collab/loro/servers/index.js +0 -4
- package/lib/collab/loro/servers/ws/callback.d.ts +0 -5
- package/lib/collab/loro/servers/ws/callback.js +0 -89
- package/lib/collab/loro/servers/ws/server.d.ts +0 -2
- package/lib/collab/loro/servers/ws/server.js +0 -29
- package/lib/collab/loro/servers/ws/utils.d.ts +0 -40
- package/lib/collab/loro/servers/ws/utils.js +0 -517
- package/lib/collab/loro/sync/SyncCursors.d.ts +0 -32
- package/lib/collab/loro/sync/SyncCursors.js +0 -475
- package/lib/collab/loro/sync/SyncLexicalToLoro.d.ts +0 -4
- package/lib/collab/loro/sync/SyncLexicalToLoro.js +0 -113
- package/lib/collab/loro/sync/SyncLoroToLexical.d.ts +0 -5
- package/lib/collab/loro/sync/SyncLoroToLexical.js +0 -100
- package/lib/collab/loro/types/LexicalNodeData.d.ts +0 -32
- package/lib/collab/loro/types/LexicalNodeData.js +0 -75
- package/lib/collab/loro/useCollaboration.d.ts +0 -12
- package/lib/collab/loro/useCollaboration.js +0 -260
- package/lib/collab/loro/utils/InitialContent.d.ts +0 -64
- package/lib/collab/loro/utils/InitialContent.js +0 -113
- package/lib/collab/loro/utils/LexicalToLoro.d.ts +0 -18
- package/lib/collab/loro/utils/LexicalToLoro.js +0 -100
- package/lib/collab/loro/utils/Utils.d.ts +0 -44
- package/lib/collab/loro/utils/Utils.js +0 -157
- package/lib/collab/loro/wsProvider.d.ts +0 -8
- package/lib/collab/loro/wsProvider.js +0 -35
- package/lib/collab/utils/invariant.d.ts +0 -1
- package/lib/collab/utils/invariant.js +0 -15
- package/lib/collab/utils/simpleDiffWithCursor.d.ts +0 -5
- package/lib/collab/utils/simpleDiffWithCursor.js +0 -35
- package/lib/collab/yjs/Bindings.d.ts +0 -23
- package/lib/collab/yjs/Bindings.js +0 -26
- package/lib/collab/yjs/Debug.d.ts +0 -23
- package/lib/collab/yjs/Debug.js +0 -213
- package/lib/collab/yjs/LexicalCollaborationContext.d.ts +0 -10
- package/lib/collab/yjs/LexicalCollaborationContext.js +0 -37
- package/lib/collab/yjs/LexicalCollaborationPlugin.d.ts +0 -21
- package/lib/collab/yjs/LexicalCollaborationPlugin.js +0 -63
- package/lib/collab/yjs/State.d.ts +0 -51
- package/lib/collab/yjs/State.js +0 -35
- package/lib/collab/yjs/nodes/AnyCollabNode.d.ts +0 -5
- package/lib/collab/yjs/nodes/AnyCollabNode.js +0 -1
- package/lib/collab/yjs/nodes/CollabDecoratorNode.d.ts +0 -22
- package/lib/collab/yjs/nodes/CollabDecoratorNode.js +0 -64
- package/lib/collab/yjs/nodes/CollabElementNode.d.ts +0 -40
- package/lib/collab/yjs/nodes/CollabElementNode.js +0 -462
- package/lib/collab/yjs/nodes/CollabLineBreakNode.d.ts +0 -19
- package/lib/collab/yjs/nodes/CollabLineBreakNode.js +0 -44
- package/lib/collab/yjs/nodes/CollabTextNode.d.ts +0 -25
- package/lib/collab/yjs/nodes/CollabTextNode.js +0 -103
- package/lib/collab/yjs/provider/websocket.d.ts +0 -88
- package/lib/collab/yjs/provider/websocket.js +0 -415
- package/lib/collab/yjs/servers/index.d.ts +0 -0
- package/lib/collab/yjs/servers/index.js +0 -0
- package/lib/collab/yjs/servers/ws/callback.d.ts +0 -5
- package/lib/collab/yjs/servers/ws/callback.js +0 -72
- package/lib/collab/yjs/servers/ws/server.d.ts +0 -2
- package/lib/collab/yjs/servers/ws/server.js +0 -25
- package/lib/collab/yjs/servers/ws/utils.d.ts +0 -49
- package/lib/collab/yjs/servers/ws/utils.js +0 -284
- package/lib/collab/yjs/sync/SyncCursors.d.ts +0 -39
- package/lib/collab/yjs/sync/SyncCursors.js +0 -351
- package/lib/collab/yjs/sync/SyncEditorStates.d.ts +0 -10
- package/lib/collab/yjs/sync/SyncEditorStates.js +0 -200
- package/lib/collab/yjs/useCollaboration.d.ts +0 -12
- package/lib/collab/yjs/useCollaboration.js +0 -255
- package/lib/collab/yjs/utils/Utils.d.ts +0 -25
- package/lib/collab/yjs/utils/Utils.js +0 -402
- package/lib/collab/yjs/wsProvider.d.ts +0 -3
- package/lib/collab/yjs/wsProvider.js +0 -21
- package/lib/commenting/index.d.ts +0 -41
- package/lib/commenting/index.js +0 -328
- package/lib/context/FlashMessageContext.d.ts +0 -7
- package/lib/context/FlashMessageContext.js +0 -24
- package/lib/context/SettingsContext.d.ts +0 -12
- package/lib/context/SettingsContext.js +0 -38
- package/lib/context/SharedHistoryContext.d.ts +0 -11
- package/lib/context/SharedHistoryContext.js +0 -11
- package/lib/context/ToolbarContext.d.ts +0 -65
- package/lib/context/ToolbarContext.js +0 -84
- package/lib/demo.d.ts +0 -12
- package/lib/demo.js +0 -45
- package/lib/hooks/useFlashMessage.d.ts +0 -2
- package/lib/hooks/useFlashMessage.js +0 -8
- package/lib/hooks/useModal.d.ts +0 -5
- package/lib/hooks/useModal.js +0 -26
- package/lib/hooks/useReport.d.ts +0 -1
- package/lib/hooks/useReport.js +0 -50
- package/lib/index.d.ts +0 -1
- package/lib/index.js +0 -5
- package/lib/nodes/AutocompleteNode.d.ts +0 -27
- package/lib/nodes/AutocompleteNode.js +0 -60
- package/lib/nodes/CounterComponent.d.ts +0 -6
- package/lib/nodes/CounterComponent.js +0 -137
- package/lib/nodes/CounterNode.d.ts +0 -23
- package/lib/nodes/CounterNode.js +0 -47
- package/lib/nodes/DateTimeNode/DateTimeComponent.d.ts +0 -8
- package/lib/nodes/DateTimeNode/DateTimeComponent.js +0 -119
- package/lib/nodes/DateTimeNode/DateTimeNode.d.ts +0 -27
- package/lib/nodes/DateTimeNode/DateTimeNode.js +0 -82
- package/lib/nodes/EmojiNode.d.ts +0 -18
- package/lib/nodes/EmojiNode.js +0 -54
- package/lib/nodes/EquationComponent.d.ts +0 -9
- package/lib/nodes/EquationComponent.js +0 -75
- package/lib/nodes/EquationNode.d.ts +0 -26
- package/lib/nodes/EquationNode.js +0 -109
- package/lib/nodes/ExcalidrawNode/ExcalidrawComponent.d.ts +0 -8
- package/lib/nodes/ExcalidrawNode/ExcalidrawComponent.js +0 -110
- package/lib/nodes/ExcalidrawNode/ExcalidrawImage.d.ts +0 -50
- package/lib/nodes/ExcalidrawNode/ExcalidrawImage.js +0 -55
- package/lib/nodes/ExcalidrawNode/index.d.ts +0 -32
- package/lib/nodes/ExcalidrawNode/index.js +0 -117
- package/lib/nodes/FigmaNode.d.ts +0 -20
- package/lib/nodes/FigmaNode.js +0 -52
- package/lib/nodes/ImageComponent.d.ts +0 -16
- package/lib/nodes/ImageComponent.js +0 -272
- package/lib/nodes/ImageNode.d.ts +0 -50
- package/lib/nodes/ImageNode.js +0 -151
- package/lib/nodes/InlineImageNode/InlineImageComponent.d.ts +0 -26
- package/lib/nodes/InlineImageNode/InlineImageComponent.js +0 -161
- package/lib/nodes/InlineImageNode/InlineImageNode.d.ts +0 -59
- package/lib/nodes/InlineImageNode/InlineImageNode.js +0 -162
- package/lib/nodes/KeywordNode.d.ts +0 -14
- package/lib/nodes/KeywordNode.js +0 -37
- package/lib/nodes/LayoutContainerNode.d.ts +0 -24
- package/lib/nodes/LayoutContainerNode.js +0 -95
- package/lib/nodes/LayoutItemNode.d.ts +0 -16
- package/lib/nodes/LayoutItemNode.js +0 -69
- package/lib/nodes/MentionNode.d.ts +0 -20
- package/lib/nodes/MentionNode.js +0 -85
- package/lib/nodes/PageBreakNode/index.d.ts +0 -17
- package/lib/nodes/PageBreakNode/index.js +0 -83
- package/lib/nodes/PlaygroundNodes.d.ts +0 -3
- package/lib/nodes/PlaygroundNodes.js +0 -75
- package/lib/nodes/PollComponent.d.ts +0 -9
- package/lib/nodes/PollComponent.js +0 -85
- package/lib/nodes/PollNode.d.ts +0 -43
- package/lib/nodes/PollNode.js +0 -153
- package/lib/nodes/SpecialTextNode.d.ts +0 -24
- package/lib/nodes/SpecialTextNode.js +0 -54
- package/lib/nodes/StickyComponent.d.ts +0 -10
- package/lib/nodes/StickyComponent.js +0 -162
- package/lib/nodes/StickyNode.d.ts +0 -31
- package/lib/nodes/StickyNode.js +0 -76
- package/lib/nodes/TweetNode.d.ts +0 -21
- package/lib/nodes/TweetNode.js +0 -119
- package/lib/nodes/YouTubeNode.d.ts +0 -22
- package/lib/nodes/YouTubeNode.js +0 -84
- package/lib/plugins/ActionsPlugin/index.d.ts +0 -5
- package/lib/plugins/ActionsPlugin/index.js +0 -168
- package/lib/plugins/AutoEmbedPlugin/index.d.ts +0 -19
- package/lib/plugins/AutoEmbedPlugin/index.js +0 -158
- package/lib/plugins/AutoLinkPlugin/index.d.ts +0 -2
- package/lib/plugins/AutoLinkPlugin/index.js +0 -15
- package/lib/plugins/AutocompletePlugin/index.d.ts +0 -10
- package/lib/plugins/AutocompletePlugin/index.js +0 -2477
- package/lib/plugins/CodeActionMenuPlugin/components/CopyButton/index.d.ts +0 -7
- package/lib/plugins/CodeActionMenuPlugin/components/CopyButton/index.js +0 -46
- package/lib/plugins/CodeActionMenuPlugin/components/PrettierButton/index.d.ts +0 -17
- package/lib/plugins/CodeActionMenuPlugin/components/PrettierButton/index.js +0 -115
- package/lib/plugins/CodeActionMenuPlugin/index.d.ts +0 -5
- package/lib/plugins/CodeActionMenuPlugin/index.js +0 -104
- package/lib/plugins/CodeActionMenuPlugin/utils.d.ts +0 -1
- package/lib/plugins/CodeActionMenuPlugin/utils.js +0 -22
- package/lib/plugins/CodeHighlightPrismPlugin/index.d.ts +0 -2
- package/lib/plugins/CodeHighlightPrismPlugin/index.js +0 -14
- package/lib/plugins/CodeHighlightShikiPlugin/index.d.ts +0 -2
- package/lib/plugins/CodeHighlightShikiPlugin/index.js +0 -14
- package/lib/plugins/CollapsiblePlugin/CollapsibleContainerNode.d.ts +0 -25
- package/lib/plugins/CollapsiblePlugin/CollapsibleContainerNode.js +0 -135
- package/lib/plugins/CollapsiblePlugin/CollapsibleContentNode.d.ts +0 -16
- package/lib/plugins/CollapsiblePlugin/CollapsibleContentNode.js +0 -83
- package/lib/plugins/CollapsiblePlugin/CollapsibleTitleNode.d.ts +0 -16
- package/lib/plugins/CollapsiblePlugin/CollapsibleTitleNode.js +0 -85
- package/lib/plugins/CollapsiblePlugin/CollapsibleUtils.d.ts +0 -2
- package/lib/plugins/CollapsiblePlugin/CollapsibleUtils.js +0 -12
- package/lib/plugins/CollapsiblePlugin/index.d.ts +0 -3
- package/lib/plugins/CollapsiblePlugin/index.js +0 -132
- package/lib/plugins/CommentPlugin/index.d.ts +0 -9
- package/lib/plugins/CommentPlugin/index.js +0 -460
- package/lib/plugins/ComponentPickerPlugin/index.d.ts +0 -2
- package/lib/plugins/ComponentPickerPlugin/index.js +0 -276
- package/lib/plugins/ContextMenuPlugin/index.d.ts +0 -2
- package/lib/plugins/ContextMenuPlugin/index.js +0 -112
- package/lib/plugins/CounterPlugin/index.d.ts +0 -3
- package/lib/plugins/CounterPlugin/index.js +0 -24
- package/lib/plugins/DateTimePlugin/index.d.ts +0 -8
- package/lib/plugins/DateTimePlugin/index.js +0 -28
- package/lib/plugins/DebugPlugin/index.d.ts +0 -3
- package/lib/plugins/DebugPlugin/index.js +0 -219
- package/lib/plugins/DocsPlugin/index.d.ts +0 -2
- package/lib/plugins/DocsPlugin/index.js +0 -4
- package/lib/plugins/DragDropPastePlugin/index.d.ts +0 -1
- package/lib/plugins/DragDropPastePlugin/index.js +0 -37
- package/lib/plugins/DraggableBlockPlugin/index.d.ts +0 -12
- package/lib/plugins/DraggableBlockPlugin/index.js +0 -36
- package/lib/plugins/EmojiPickerPlugin/index.d.ts +0 -1
- package/lib/plugins/EmojiPickerPlugin/index.js +0 -84
- package/lib/plugins/EmojisPlugin/index.d.ts +0 -2
- package/lib/plugins/EmojisPlugin/index.js +0 -56
- package/lib/plugins/EquationsPlugin/index.d.ts +0 -14
- package/lib/plugins/EquationsPlugin/index.js +0 -34
- package/lib/plugins/ExcalidrawPlugin/index.d.ts +0 -5
- package/lib/plugins/ExcalidrawPlugin/index.js +0 -44
- package/lib/plugins/FigmaPlugin/index.d.ts +0 -4
- package/lib/plugins/FigmaPlugin/index.js +0 -24
- package/lib/plugins/FloatingLinkEditorPlugin/index.d.ts +0 -15
- package/lib/plugins/FloatingLinkEditorPlugin/index.js +0 -280
- package/lib/plugins/FloatingTextFormatToolbarPlugin/index.d.ts +0 -7
- package/lib/plugins/FloatingTextFormatToolbarPlugin/index.js +0 -219
- package/lib/plugins/ImagesPlugin/index.d.ts +0 -24
- package/lib/plugins/ImagesPlugin/index.js +0 -195
- package/lib/plugins/InlineImagePlugin/index.d.ts +0 -17
- package/lib/plugins/InlineImagePlugin/index.js +0 -180
- package/lib/plugins/KeywordsPlugin/index.d.ts +0 -2
- package/lib/plugins/KeywordsPlugin/index.js +0 -35
- package/lib/plugins/LayoutPlugin/InsertLayoutDialog.d.ts +0 -6
- package/lib/plugins/LayoutPlugin/InsertLayoutDialog.js +0 -21
- package/lib/plugins/LayoutPlugin/LayoutPlugin.d.ts +0 -7
- package/lib/plugins/LayoutPlugin/LayoutPlugin.js +0 -135
- package/lib/plugins/LinkPlugin/index.d.ts +0 -6
- package/lib/plugins/LinkPlugin/index.js +0 -11
- package/lib/plugins/MarkdownShortcutPlugin/index.d.ts +0 -2
- package/lib/plugins/MarkdownShortcutPlugin/index.js +0 -6
- package/lib/plugins/MarkdownTransformers/index.d.ts +0 -8
- package/lib/plugins/MarkdownTransformers/index.js +0 -238
- package/lib/plugins/MaxLengthPlugin/index.d.ts +0 -3
- package/lib/plugins/MaxLengthPlugin/index.js +0 -41
- package/lib/plugins/MentionsPlugin/index.d.ts +0 -2
- package/lib/plugins/MentionsPlugin/index.js +0 -564
- package/lib/plugins/PageBreakPlugin/index.d.ts +0 -4
- package/lib/plugins/PageBreakPlugin/index.js +0 -31
- package/lib/plugins/PasteLogPlugin/index.d.ts +0 -2
- package/lib/plugins/PasteLogPlugin/index.js +0 -27
- package/lib/plugins/PollPlugin/index.d.ts +0 -8
- package/lib/plugins/PollPlugin/index.js +0 -38
- package/lib/plugins/ShortcutsPlugin/index.d.ts +0 -6
- package/lib/plugins/ShortcutsPlugin/index.js +0 -116
- package/lib/plugins/ShortcutsPlugin/shortcuts.d.ts +0 -59
- package/lib/plugins/ShortcutsPlugin/shortcuts.js +0 -173
- package/lib/plugins/SpecialTextPlugin/index.d.ts +0 -2
- package/lib/plugins/SpecialTextPlugin/index.js +0 -50
- package/lib/plugins/SpeechToTextPlugin/index.d.ts +0 -5
- package/lib/plugins/SpeechToTextPlugin/index.js +0 -86
- package/lib/plugins/StickyPlugin/index.d.ts +0 -2
- package/lib/plugins/StickyPlugin/index.js +0 -16
- package/lib/plugins/TabFocusPlugin/index.d.ts +0 -1
- package/lib/plugins/TabFocusPlugin/index.js +0 -38
- package/lib/plugins/TableActionMenuPlugin/index.d.ts +0 -5
- package/lib/plugins/TableActionMenuPlugin/index.js +0 -492
- package/lib/plugins/TableCellResizer/index.d.ts +0 -3
- package/lib/plugins/TableCellResizer/index.js +0 -297
- package/lib/plugins/TableHoverActionsPlugin/index.d.ts +0 -4
- package/lib/plugins/TableHoverActionsPlugin/index.js +0 -188
- package/lib/plugins/TableOfContentsPlugin/index.d.ts +0 -2
- package/lib/plugins/TableOfContentsPlugin/index.js +0 -116
- package/lib/plugins/TablePlugin.d.ts +0 -31
- package/lib/plugins/TablePlugin.js +0 -63
- package/lib/plugins/TestRecorderPlugin/index.d.ts +0 -3
- package/lib/plugins/TestRecorderPlugin/index.js +0 -346
- package/lib/plugins/ToolbarPlugin/fontSize.d.ts +0 -9
- package/lib/plugins/ToolbarPlugin/fontSize.js +0 -84
- package/lib/plugins/ToolbarPlugin/index.d.ts +0 -9
- package/lib/plugins/ToolbarPlugin/index.js +0 -500
- package/lib/plugins/ToolbarPlugin/utils.d.ts +0 -26
- package/lib/plugins/ToolbarPlugin/utils.js +0 -247
- package/lib/plugins/TreeViewPlugin/index.d.ts +0 -2
- package/lib/plugins/TreeViewPlugin/index.js +0 -7
- package/lib/plugins/TwitterPlugin/index.d.ts +0 -4
- package/lib/plugins/TwitterPlugin/index.js +0 -24
- package/lib/plugins/TypingPerfPlugin/index.d.ts +0 -2
- package/lib/plugins/TypingPerfPlugin/index.js +0 -97
- package/lib/plugins/YouTubePlugin/index.d.ts +0 -4
- package/lib/plugins/YouTubePlugin/index.js +0 -24
- package/lib/server/validation.d.ts +0 -1
- package/lib/server/validation.js +0 -115
- package/lib/setupEnv.d.ts +0 -2
- package/lib/setupEnv.js +0 -29
- package/lib/themes/CommentEditorTheme.d.ts +0 -4
- package/lib/themes/CommentEditorTheme.js +0 -11
- package/lib/themes/PlaygroundEditorTheme.d.ts +0 -4
- package/lib/themes/PlaygroundEditorTheme.js +0 -124
- package/lib/themes/StickyEditorTheme.d.ts +0 -4
- package/lib/themes/StickyEditorTheme.js +0 -11
- package/lib/tyes.dt.d.ts +0 -12
- package/lib/tyes.dt.js +0 -4
- package/lib/ui/Button.d.ts +0 -12
- package/lib/ui/Button.js +0 -6
- package/lib/ui/ColorPicker.d.ts +0 -14
- package/lib/ui/ColorPicker.js +0 -219
- package/lib/ui/ContentEditable.d.ts +0 -9
- package/lib/ui/ContentEditable.js +0 -6
- package/lib/ui/Dialog.d.ts +0 -10
- package/lib/ui/Dialog.js +0 -8
- package/lib/ui/DropDown.d.ts +0 -18
- package/lib/ui/DropDown.js +0 -133
- package/lib/ui/DropdownColorPicker.d.ts +0 -13
- package/lib/ui/DropdownColorPicker.js +0 -6
- package/lib/ui/EquationEditor.d.ts +0 -8
- package/lib/ui/EquationEditor.js +0 -11
- package/lib/ui/ExcalidrawModal.d.ts +0 -42
- package/lib/ui/ExcalidrawModal.js +0 -103
- package/lib/ui/FileInput.d.ts +0 -10
- package/lib/ui/FileInput.js +0 -5
- package/lib/ui/FlashMessage.d.ts +0 -7
- package/lib/ui/FlashMessage.js +0 -6
- package/lib/ui/ImageResizer.d.ts +0 -17
- package/lib/ui/ImageResizer.js +0 -171
- package/lib/ui/KatexEquationAlterer.d.ts +0 -8
- package/lib/ui/KatexEquationAlterer.js +0 -23
- package/lib/ui/KatexRenderer.d.ts +0 -6
- package/lib/ui/KatexRenderer.js +0 -24
- package/lib/ui/Modal.d.ts +0 -9
- package/lib/ui/Modal.js +0 -48
- package/lib/ui/Select.d.ts +0 -8
- package/lib/ui/Select.js +0 -5
- package/lib/ui/Switch.d.ts +0 -8
- package/lib/ui/Switch.js +0 -6
- package/lib/ui/TextInput.d.ts +0 -13
- package/lib/ui/TextInput.js +0 -7
- package/lib/utils/docSerialization.d.ts +0 -3
- package/lib/utils/docSerialization.js +0 -60
- package/lib/utils/emoji-list.d.ts +0 -20
- package/lib/utils/emoji-list.js +0 -16609
- package/lib/utils/getDOMRangeRect.d.ts +0 -8
- package/lib/utils/getDOMRangeRect.js +0 -26
- package/lib/utils/getSelectedNode.d.ts +0 -2
- package/lib/utils/getSelectedNode.js +0 -28
- package/lib/utils/getThemeSelector.d.ts +0 -2
- package/lib/utils/getThemeSelector.js +0 -14
- package/lib/utils/isMobileWidth.d.ts +0 -7
- package/lib/utils/isMobileWidth.js +0 -11
- package/lib/utils/joinClasses.d.ts +0 -1
- package/lib/utils/joinClasses.js +0 -7
- package/lib/utils/setFloatingElemPosition.d.ts +0 -1
- package/lib/utils/setFloatingElemPosition.js +0 -59
- package/lib/utils/setFloatingElemPositionForLinkEditor.d.ts +0 -1
- package/lib/utils/setFloatingElemPositionForLinkEditor.js +0 -36
- package/lib/utils/swipe.d.ts +0 -4
- package/lib/utils/swipe.js +0 -94
- package/lib/utils/url.d.ts +0 -2
- package/lib/utils/url.js +0 -31
|
@@ -1,462 +0,0 @@
|
|
|
1
|
-
import { $createChildrenArray } from '@lexical/offset';
|
|
2
|
-
import { $getNodeByKey, $getNodeByKeyOrThrow, $isDecoratorNode, $isElementNode, $isTextNode, removeFromParent, } from 'lexical';
|
|
3
|
-
import invariant from '../../utils/invariant';
|
|
4
|
-
import { $createCollabNodeFromLexicalNode, $getOrInitCollabNodeFromSharedType, $syncPropertiesFromYjs, createLexicalNodeFromCollabNode, getPositionFromElementAndOffset, spliceString, syncPropertiesFromLexical, } from '../utils/Utils';
|
|
5
|
-
import { CollabDecoratorNode } from './CollabDecoratorNode';
|
|
6
|
-
import { CollabLineBreakNode } from './CollabLineBreakNode';
|
|
7
|
-
import { CollabTextNode } from './CollabTextNode';
|
|
8
|
-
export class CollabElementNode {
|
|
9
|
-
_key;
|
|
10
|
-
_children;
|
|
11
|
-
_xmlText;
|
|
12
|
-
_type;
|
|
13
|
-
_parent;
|
|
14
|
-
constructor(xmlText, parent, type) {
|
|
15
|
-
this._key = '';
|
|
16
|
-
this._children = [];
|
|
17
|
-
this._xmlText = xmlText;
|
|
18
|
-
this._type = type;
|
|
19
|
-
this._parent = parent;
|
|
20
|
-
}
|
|
21
|
-
getPrevNode(nodeMap) {
|
|
22
|
-
if (nodeMap === null) {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
const node = nodeMap.get(this._key);
|
|
26
|
-
return $isElementNode(node) ? node : null;
|
|
27
|
-
}
|
|
28
|
-
getNode() {
|
|
29
|
-
const node = $getNodeByKey(this._key);
|
|
30
|
-
return $isElementNode(node) ? node : null;
|
|
31
|
-
}
|
|
32
|
-
getSharedType() {
|
|
33
|
-
return this._xmlText;
|
|
34
|
-
}
|
|
35
|
-
getType() {
|
|
36
|
-
return this._type;
|
|
37
|
-
}
|
|
38
|
-
getKey() {
|
|
39
|
-
return this._key;
|
|
40
|
-
}
|
|
41
|
-
isEmpty() {
|
|
42
|
-
return this._children.length === 0;
|
|
43
|
-
}
|
|
44
|
-
getSize() {
|
|
45
|
-
return 1;
|
|
46
|
-
}
|
|
47
|
-
getOffset() {
|
|
48
|
-
const collabElementNode = this._parent;
|
|
49
|
-
invariant(collabElementNode !== null, 'getOffset: could not find collab element node');
|
|
50
|
-
return collabElementNode.getChildOffset(this);
|
|
51
|
-
}
|
|
52
|
-
syncPropertiesFromYjs(binding, keysChanged) {
|
|
53
|
-
const lexicalNode = this.getNode();
|
|
54
|
-
invariant(lexicalNode !== null, 'syncPropertiesFromYjs: could not find element node');
|
|
55
|
-
$syncPropertiesFromYjs(binding, this._xmlText, lexicalNode, keysChanged);
|
|
56
|
-
}
|
|
57
|
-
applyChildrenYjsDelta(binding, deltas) {
|
|
58
|
-
const children = this._children;
|
|
59
|
-
let currIndex = 0;
|
|
60
|
-
let pendingSplitText = null;
|
|
61
|
-
for (let i = 0; i < deltas.length; i++) {
|
|
62
|
-
const delta = deltas[i];
|
|
63
|
-
const insertDelta = delta.insert;
|
|
64
|
-
const deleteDelta = delta.delete;
|
|
65
|
-
if (delta.retain != null) {
|
|
66
|
-
currIndex += delta.retain;
|
|
67
|
-
}
|
|
68
|
-
else if (typeof deleteDelta === 'number') {
|
|
69
|
-
let deletionSize = deleteDelta;
|
|
70
|
-
while (deletionSize > 0) {
|
|
71
|
-
const { node, nodeIndex, offset, length } = getPositionFromElementAndOffset(this, currIndex, false);
|
|
72
|
-
if (node instanceof CollabElementNode ||
|
|
73
|
-
node instanceof CollabLineBreakNode ||
|
|
74
|
-
node instanceof CollabDecoratorNode) {
|
|
75
|
-
children.splice(nodeIndex, 1);
|
|
76
|
-
deletionSize -= 1;
|
|
77
|
-
}
|
|
78
|
-
else if (node instanceof CollabTextNode) {
|
|
79
|
-
const delCount = Math.min(deletionSize, length);
|
|
80
|
-
const prevCollabNode = nodeIndex !== 0 ? children[nodeIndex - 1] : null;
|
|
81
|
-
const nodeSize = node.getSize();
|
|
82
|
-
if (offset === 0 && length === nodeSize) {
|
|
83
|
-
// Text node has been deleted.
|
|
84
|
-
children.splice(nodeIndex, 1);
|
|
85
|
-
// If this was caused by an undo from YJS, there could be dangling text.
|
|
86
|
-
const danglingText = spliceString(node._text, offset, delCount - 1, '');
|
|
87
|
-
if (danglingText.length > 0) {
|
|
88
|
-
if (prevCollabNode instanceof CollabTextNode) {
|
|
89
|
-
// Merge the text node with previous.
|
|
90
|
-
prevCollabNode._text += danglingText;
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
// No previous text node to merge into, just delete the text.
|
|
94
|
-
this._xmlText.delete(offset, danglingText.length);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
node._text = spliceString(node._text, offset, delCount, '');
|
|
100
|
-
}
|
|
101
|
-
deletionSize -= delCount;
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
// Can occur due to the deletion from the dangling text heuristic below.
|
|
105
|
-
break;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
else if (insertDelta != null) {
|
|
110
|
-
if (typeof insertDelta === 'string') {
|
|
111
|
-
const { node, offset } = getPositionFromElementAndOffset(this, currIndex, true);
|
|
112
|
-
if (node instanceof CollabTextNode) {
|
|
113
|
-
node._text = spliceString(node._text, offset, 0, insertDelta);
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
// TODO: maybe we can improve this by keeping around a redundant
|
|
117
|
-
// text node map, rather than removing all the text nodes, so there
|
|
118
|
-
// never can be dangling text.
|
|
119
|
-
// We have a conflict where there was likely a CollabTextNode and
|
|
120
|
-
// an Lexical TextNode too, but they were removed in a merge. So
|
|
121
|
-
// let's just ignore the text and trigger a removal for it from our
|
|
122
|
-
// shared type.
|
|
123
|
-
this._xmlText.delete(offset, insertDelta.length);
|
|
124
|
-
}
|
|
125
|
-
currIndex += insertDelta.length;
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
const sharedType = insertDelta;
|
|
129
|
-
const { node, nodeIndex, length } = getPositionFromElementAndOffset(this, currIndex, false);
|
|
130
|
-
const collabNode = $getOrInitCollabNodeFromSharedType(binding, sharedType, this);
|
|
131
|
-
if (node instanceof CollabTextNode &&
|
|
132
|
-
length > 0 &&
|
|
133
|
-
length < node._text.length) {
|
|
134
|
-
// Trying to insert in the middle of a text node; split the text.
|
|
135
|
-
const text = node._text;
|
|
136
|
-
const splitIdx = text.length - length;
|
|
137
|
-
node._text = spliceString(text, splitIdx, length, '');
|
|
138
|
-
children.splice(nodeIndex + 1, 0, collabNode);
|
|
139
|
-
// The insert that triggers the text split might not be a text node. Need to keep a
|
|
140
|
-
// reference to the remaining text so that it can be added when we do create one.
|
|
141
|
-
pendingSplitText = spliceString(text, 0, splitIdx, '');
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
children.splice(nodeIndex, 0, collabNode);
|
|
145
|
-
}
|
|
146
|
-
if (pendingSplitText !== null &&
|
|
147
|
-
collabNode instanceof CollabTextNode) {
|
|
148
|
-
// Found a text node to insert the pending text into.
|
|
149
|
-
collabNode._text = pendingSplitText + collabNode._text;
|
|
150
|
-
pendingSplitText = null;
|
|
151
|
-
}
|
|
152
|
-
currIndex += 1;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
throw new Error('Unexpected delta format');
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
syncChildrenFromYjs(binding) {
|
|
161
|
-
// Now diff the children of the collab node with that of our existing Lexical node.
|
|
162
|
-
const lexicalNode = this.getNode();
|
|
163
|
-
invariant(lexicalNode !== null, 'syncChildrenFromYjs: could not find element node');
|
|
164
|
-
const key = lexicalNode.__key;
|
|
165
|
-
const prevLexicalChildrenKeys = $createChildrenArray(lexicalNode, null);
|
|
166
|
-
const nextLexicalChildrenKeys = [];
|
|
167
|
-
const lexicalChildrenKeysLength = prevLexicalChildrenKeys.length;
|
|
168
|
-
const collabChildren = this._children;
|
|
169
|
-
const collabChildrenLength = collabChildren.length;
|
|
170
|
-
const collabNodeMap = binding.collabNodeMap;
|
|
171
|
-
const visitedKeys = new Set();
|
|
172
|
-
let collabKeys;
|
|
173
|
-
let writableLexicalNode;
|
|
174
|
-
let prevIndex = 0;
|
|
175
|
-
let prevChildNode = null;
|
|
176
|
-
if (collabChildrenLength !== lexicalChildrenKeysLength) {
|
|
177
|
-
writableLexicalNode = lexicalNode.getWritable();
|
|
178
|
-
}
|
|
179
|
-
for (let i = 0; i < collabChildrenLength; i++) {
|
|
180
|
-
const lexicalChildKey = prevLexicalChildrenKeys[prevIndex];
|
|
181
|
-
const childCollabNode = collabChildren[i];
|
|
182
|
-
const collabLexicalChildNode = childCollabNode.getNode();
|
|
183
|
-
const collabKey = childCollabNode._key;
|
|
184
|
-
if (collabLexicalChildNode !== null && lexicalChildKey === collabKey) {
|
|
185
|
-
const childNeedsUpdating = $isTextNode(collabLexicalChildNode);
|
|
186
|
-
// Update
|
|
187
|
-
visitedKeys.add(lexicalChildKey);
|
|
188
|
-
if (childNeedsUpdating) {
|
|
189
|
-
childCollabNode._key = lexicalChildKey;
|
|
190
|
-
if (childCollabNode instanceof CollabElementNode) {
|
|
191
|
-
const xmlText = childCollabNode._xmlText;
|
|
192
|
-
childCollabNode.syncPropertiesFromYjs(binding, null);
|
|
193
|
-
childCollabNode.applyChildrenYjsDelta(binding, xmlText.toDelta());
|
|
194
|
-
childCollabNode.syncChildrenFromYjs(binding);
|
|
195
|
-
}
|
|
196
|
-
else if (childCollabNode instanceof CollabTextNode) {
|
|
197
|
-
childCollabNode.syncPropertiesAndTextFromYjs(binding, null);
|
|
198
|
-
}
|
|
199
|
-
else if (childCollabNode instanceof CollabDecoratorNode) {
|
|
200
|
-
childCollabNode.syncPropertiesFromYjs(binding, null);
|
|
201
|
-
}
|
|
202
|
-
else if (!(childCollabNode instanceof CollabLineBreakNode)) {
|
|
203
|
-
invariant(false, 'syncChildrenFromYjs: expected text, element, decorator, or linebreak collab node');
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
nextLexicalChildrenKeys[i] = lexicalChildKey;
|
|
207
|
-
prevChildNode = collabLexicalChildNode;
|
|
208
|
-
prevIndex++;
|
|
209
|
-
}
|
|
210
|
-
else {
|
|
211
|
-
if (collabKeys === undefined) {
|
|
212
|
-
collabKeys = new Set();
|
|
213
|
-
for (let s = 0; s < collabChildrenLength; s++) {
|
|
214
|
-
const child = collabChildren[s];
|
|
215
|
-
const childKey = child._key;
|
|
216
|
-
if (childKey !== '') {
|
|
217
|
-
collabKeys.add(childKey);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
if (collabLexicalChildNode !== null &&
|
|
222
|
-
lexicalChildKey !== undefined &&
|
|
223
|
-
!collabKeys.has(lexicalChildKey)) {
|
|
224
|
-
const nodeToRemove = $getNodeByKeyOrThrow(lexicalChildKey);
|
|
225
|
-
removeFromParent(nodeToRemove);
|
|
226
|
-
i--;
|
|
227
|
-
prevIndex++;
|
|
228
|
-
continue;
|
|
229
|
-
}
|
|
230
|
-
writableLexicalNode = lexicalNode.getWritable();
|
|
231
|
-
// Create/Replace
|
|
232
|
-
const lexicalChildNode = createLexicalNodeFromCollabNode(binding, childCollabNode, key);
|
|
233
|
-
const childKey = lexicalChildNode.__key;
|
|
234
|
-
collabNodeMap.set(childKey, childCollabNode);
|
|
235
|
-
nextLexicalChildrenKeys[i] = childKey;
|
|
236
|
-
if (prevChildNode === null) {
|
|
237
|
-
const nextSibling = writableLexicalNode.getFirstChild();
|
|
238
|
-
writableLexicalNode.__first = childKey;
|
|
239
|
-
if (nextSibling !== null) {
|
|
240
|
-
const writableNextSibling = nextSibling.getWritable();
|
|
241
|
-
writableNextSibling.__prev = childKey;
|
|
242
|
-
lexicalChildNode.__next = writableNextSibling.__key;
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
const writablePrevChildNode = prevChildNode.getWritable();
|
|
247
|
-
const nextSibling = prevChildNode.getNextSibling();
|
|
248
|
-
writablePrevChildNode.__next = childKey;
|
|
249
|
-
lexicalChildNode.__prev = prevChildNode.__key;
|
|
250
|
-
if (nextSibling !== null) {
|
|
251
|
-
const writableNextSibling = nextSibling.getWritable();
|
|
252
|
-
writableNextSibling.__prev = childKey;
|
|
253
|
-
lexicalChildNode.__next = writableNextSibling.__key;
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
if (i === collabChildrenLength - 1) {
|
|
257
|
-
writableLexicalNode.__last = childKey;
|
|
258
|
-
}
|
|
259
|
-
writableLexicalNode.__size++;
|
|
260
|
-
prevChildNode = lexicalChildNode;
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
for (let i = 0; i < lexicalChildrenKeysLength; i++) {
|
|
264
|
-
const lexicalChildKey = prevLexicalChildrenKeys[i];
|
|
265
|
-
if (!visitedKeys.has(lexicalChildKey)) {
|
|
266
|
-
// Remove
|
|
267
|
-
const lexicalChildNode = $getNodeByKeyOrThrow(lexicalChildKey);
|
|
268
|
-
const collabNode = binding.collabNodeMap.get(lexicalChildKey);
|
|
269
|
-
if (collabNode !== undefined) {
|
|
270
|
-
collabNode.destroy(binding);
|
|
271
|
-
}
|
|
272
|
-
removeFromParent(lexicalChildNode);
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
syncPropertiesFromLexical(binding, nextLexicalNode, prevNodeMap) {
|
|
277
|
-
syncPropertiesFromLexical(binding, this._xmlText, this.getPrevNode(prevNodeMap), nextLexicalNode);
|
|
278
|
-
}
|
|
279
|
-
_syncChildFromLexical(binding, index, key, prevNodeMap, dirtyElements, dirtyLeaves) {
|
|
280
|
-
const childCollabNode = this._children[index];
|
|
281
|
-
// Update
|
|
282
|
-
const nextChildNode = $getNodeByKeyOrThrow(key);
|
|
283
|
-
if (childCollabNode instanceof CollabElementNode &&
|
|
284
|
-
$isElementNode(nextChildNode)) {
|
|
285
|
-
childCollabNode.syncPropertiesFromLexical(binding, nextChildNode, prevNodeMap);
|
|
286
|
-
childCollabNode.syncChildrenFromLexical(binding, nextChildNode, prevNodeMap, dirtyElements, dirtyLeaves);
|
|
287
|
-
}
|
|
288
|
-
else if (childCollabNode instanceof CollabTextNode &&
|
|
289
|
-
$isTextNode(nextChildNode)) {
|
|
290
|
-
childCollabNode.syncPropertiesAndTextFromLexical(binding, nextChildNode, prevNodeMap);
|
|
291
|
-
}
|
|
292
|
-
else if (childCollabNode instanceof CollabDecoratorNode &&
|
|
293
|
-
$isDecoratorNode(nextChildNode)) {
|
|
294
|
-
childCollabNode.syncPropertiesFromLexical(binding, nextChildNode, prevNodeMap);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
syncChildrenFromLexical(binding, nextLexicalNode, prevNodeMap, dirtyElements, dirtyLeaves) {
|
|
298
|
-
const prevLexicalNode = this.getPrevNode(prevNodeMap);
|
|
299
|
-
const prevChildren = prevLexicalNode === null
|
|
300
|
-
? []
|
|
301
|
-
: $createChildrenArray(prevLexicalNode, prevNodeMap);
|
|
302
|
-
const nextChildren = $createChildrenArray(nextLexicalNode, null);
|
|
303
|
-
const prevEndIndex = prevChildren.length - 1;
|
|
304
|
-
const nextEndIndex = nextChildren.length - 1;
|
|
305
|
-
const collabNodeMap = binding.collabNodeMap;
|
|
306
|
-
let prevChildrenSet;
|
|
307
|
-
let nextChildrenSet;
|
|
308
|
-
let prevIndex = 0;
|
|
309
|
-
let nextIndex = 0;
|
|
310
|
-
while (prevIndex <= prevEndIndex && nextIndex <= nextEndIndex) {
|
|
311
|
-
const prevKey = prevChildren[prevIndex];
|
|
312
|
-
const nextKey = nextChildren[nextIndex];
|
|
313
|
-
if (prevKey === nextKey) {
|
|
314
|
-
// Nove move, create or remove
|
|
315
|
-
this._syncChildFromLexical(binding, nextIndex, nextKey, prevNodeMap, dirtyElements, dirtyLeaves);
|
|
316
|
-
prevIndex++;
|
|
317
|
-
nextIndex++;
|
|
318
|
-
}
|
|
319
|
-
else {
|
|
320
|
-
if (prevChildrenSet === undefined) {
|
|
321
|
-
prevChildrenSet = new Set(prevChildren);
|
|
322
|
-
}
|
|
323
|
-
if (nextChildrenSet === undefined) {
|
|
324
|
-
nextChildrenSet = new Set(nextChildren);
|
|
325
|
-
}
|
|
326
|
-
const nextHasPrevKey = nextChildrenSet.has(prevKey);
|
|
327
|
-
const prevHasNextKey = prevChildrenSet.has(nextKey);
|
|
328
|
-
if (!nextHasPrevKey) {
|
|
329
|
-
// Remove
|
|
330
|
-
this.splice(binding, nextIndex, 1);
|
|
331
|
-
prevIndex++;
|
|
332
|
-
}
|
|
333
|
-
else {
|
|
334
|
-
// Create or replace
|
|
335
|
-
const nextChildNode = $getNodeByKeyOrThrow(nextKey);
|
|
336
|
-
const collabNode = $createCollabNodeFromLexicalNode(binding, nextChildNode, this);
|
|
337
|
-
collabNodeMap.set(nextKey, collabNode);
|
|
338
|
-
if (prevHasNextKey) {
|
|
339
|
-
this.splice(binding, nextIndex, 1, collabNode);
|
|
340
|
-
prevIndex++;
|
|
341
|
-
nextIndex++;
|
|
342
|
-
}
|
|
343
|
-
else {
|
|
344
|
-
this.splice(binding, nextIndex, 0, collabNode);
|
|
345
|
-
nextIndex++;
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
const appendNewChildren = prevIndex > prevEndIndex;
|
|
351
|
-
const removeOldChildren = nextIndex > nextEndIndex;
|
|
352
|
-
if (appendNewChildren && !removeOldChildren) {
|
|
353
|
-
for (; nextIndex <= nextEndIndex; ++nextIndex) {
|
|
354
|
-
const key = nextChildren[nextIndex];
|
|
355
|
-
const nextChildNode = $getNodeByKeyOrThrow(key);
|
|
356
|
-
const collabNode = $createCollabNodeFromLexicalNode(binding, nextChildNode, this);
|
|
357
|
-
this.append(collabNode);
|
|
358
|
-
collabNodeMap.set(key, collabNode);
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
else if (removeOldChildren && !appendNewChildren) {
|
|
362
|
-
for (let i = this._children.length - 1; i >= nextIndex; i--) {
|
|
363
|
-
this.splice(binding, i, 1);
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
append(collabNode) {
|
|
368
|
-
const xmlText = this._xmlText;
|
|
369
|
-
const children = this._children;
|
|
370
|
-
const lastChild = children[children.length - 1];
|
|
371
|
-
const offset = lastChild !== undefined ? lastChild.getOffset() + lastChild.getSize() : 0;
|
|
372
|
-
if (collabNode instanceof CollabElementNode) {
|
|
373
|
-
xmlText.insertEmbed(offset, collabNode._xmlText);
|
|
374
|
-
}
|
|
375
|
-
else if (collabNode instanceof CollabTextNode) {
|
|
376
|
-
const map = collabNode._map;
|
|
377
|
-
if (map.parent === null) {
|
|
378
|
-
xmlText.insertEmbed(offset, map);
|
|
379
|
-
}
|
|
380
|
-
xmlText.insert(offset + 1, collabNode._text);
|
|
381
|
-
}
|
|
382
|
-
else if (collabNode instanceof CollabLineBreakNode) {
|
|
383
|
-
xmlText.insertEmbed(offset, collabNode._map);
|
|
384
|
-
}
|
|
385
|
-
else if (collabNode instanceof CollabDecoratorNode) {
|
|
386
|
-
xmlText.insertEmbed(offset, collabNode._xmlElem);
|
|
387
|
-
}
|
|
388
|
-
this._children.push(collabNode);
|
|
389
|
-
}
|
|
390
|
-
splice(binding, index, delCount, collabNode) {
|
|
391
|
-
const children = this._children;
|
|
392
|
-
const child = children[index];
|
|
393
|
-
if (child === undefined) {
|
|
394
|
-
invariant(collabNode !== undefined, 'splice: could not find collab element node');
|
|
395
|
-
this.append(collabNode);
|
|
396
|
-
return;
|
|
397
|
-
}
|
|
398
|
-
const offset = child.getOffset();
|
|
399
|
-
invariant(offset !== -1, 'splice: expected offset to be greater than zero');
|
|
400
|
-
const xmlText = this._xmlText;
|
|
401
|
-
if (delCount !== 0) {
|
|
402
|
-
// What if we delete many nodes, don't we need to get all their
|
|
403
|
-
// sizes?
|
|
404
|
-
xmlText.delete(offset, child.getSize());
|
|
405
|
-
}
|
|
406
|
-
if (collabNode instanceof CollabElementNode) {
|
|
407
|
-
xmlText.insertEmbed(offset, collabNode._xmlText);
|
|
408
|
-
}
|
|
409
|
-
else if (collabNode instanceof CollabTextNode) {
|
|
410
|
-
const map = collabNode._map;
|
|
411
|
-
if (map.parent === null) {
|
|
412
|
-
xmlText.insertEmbed(offset, map);
|
|
413
|
-
}
|
|
414
|
-
xmlText.insert(offset + 1, collabNode._text);
|
|
415
|
-
}
|
|
416
|
-
else if (collabNode instanceof CollabLineBreakNode) {
|
|
417
|
-
xmlText.insertEmbed(offset, collabNode._map);
|
|
418
|
-
}
|
|
419
|
-
else if (collabNode instanceof CollabDecoratorNode) {
|
|
420
|
-
xmlText.insertEmbed(offset, collabNode._xmlElem);
|
|
421
|
-
}
|
|
422
|
-
if (delCount !== 0) {
|
|
423
|
-
const childrenToDelete = children.slice(index, index + delCount);
|
|
424
|
-
for (let i = 0; i < childrenToDelete.length; i++) {
|
|
425
|
-
childrenToDelete[i].destroy(binding);
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
if (collabNode !== undefined) {
|
|
429
|
-
children.splice(index, delCount, collabNode);
|
|
430
|
-
}
|
|
431
|
-
else {
|
|
432
|
-
children.splice(index, delCount);
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
getChildOffset(collabNode) {
|
|
436
|
-
let offset = 0;
|
|
437
|
-
const children = this._children;
|
|
438
|
-
for (let i = 0; i < children.length; i++) {
|
|
439
|
-
const child = children[i];
|
|
440
|
-
if (child === collabNode) {
|
|
441
|
-
return offset;
|
|
442
|
-
}
|
|
443
|
-
offset += child.getSize();
|
|
444
|
-
}
|
|
445
|
-
return -1;
|
|
446
|
-
}
|
|
447
|
-
destroy(binding) {
|
|
448
|
-
const collabNodeMap = binding.collabNodeMap;
|
|
449
|
-
const children = this._children;
|
|
450
|
-
for (let i = 0; i < children.length; i++) {
|
|
451
|
-
children[i].destroy(binding);
|
|
452
|
-
}
|
|
453
|
-
if (collabNodeMap.get(this._key) === this) {
|
|
454
|
-
collabNodeMap.delete(this._key);
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
export function $createCollabElementNode(xmlText, parent, type) {
|
|
459
|
-
const collabNode = new CollabElementNode(xmlText, parent, type);
|
|
460
|
-
xmlText._collabNode = collabNode;
|
|
461
|
-
return collabNode;
|
|
462
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { LineBreakNode, NodeKey } from 'lexical';
|
|
2
|
-
import type { Map as YMap } from 'yjs';
|
|
3
|
-
import type { Binding } from '../Bindings';
|
|
4
|
-
import type { CollabElementNode } from './CollabElementNode';
|
|
5
|
-
export declare class CollabLineBreakNode {
|
|
6
|
-
_map: YMap<unknown>;
|
|
7
|
-
_key: NodeKey;
|
|
8
|
-
_parent: CollabElementNode;
|
|
9
|
-
_type: 'linebreak';
|
|
10
|
-
constructor(map: YMap<unknown>, parent: CollabElementNode);
|
|
11
|
-
getNode(): null | LineBreakNode;
|
|
12
|
-
getKey(): NodeKey;
|
|
13
|
-
getSharedType(): YMap<unknown>;
|
|
14
|
-
getType(): string;
|
|
15
|
-
getSize(): number;
|
|
16
|
-
getOffset(): number;
|
|
17
|
-
destroy(binding: Binding): void;
|
|
18
|
-
}
|
|
19
|
-
export declare function $createCollabLineBreakNode(map: YMap<unknown>, parent: CollabElementNode): CollabLineBreakNode;
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { $getNodeByKey, $isLineBreakNode } from 'lexical';
|
|
2
|
-
export class CollabLineBreakNode {
|
|
3
|
-
_map;
|
|
4
|
-
_key;
|
|
5
|
-
_parent;
|
|
6
|
-
_type;
|
|
7
|
-
constructor(map, parent) {
|
|
8
|
-
this._key = '';
|
|
9
|
-
this._map = map;
|
|
10
|
-
this._parent = parent;
|
|
11
|
-
this._type = 'linebreak';
|
|
12
|
-
}
|
|
13
|
-
getNode() {
|
|
14
|
-
const node = $getNodeByKey(this._key);
|
|
15
|
-
return $isLineBreakNode(node) ? node : null;
|
|
16
|
-
}
|
|
17
|
-
getKey() {
|
|
18
|
-
return this._key;
|
|
19
|
-
}
|
|
20
|
-
getSharedType() {
|
|
21
|
-
return this._map;
|
|
22
|
-
}
|
|
23
|
-
getType() {
|
|
24
|
-
return this._type;
|
|
25
|
-
}
|
|
26
|
-
getSize() {
|
|
27
|
-
return 1;
|
|
28
|
-
}
|
|
29
|
-
getOffset() {
|
|
30
|
-
const collabElementNode = this._parent;
|
|
31
|
-
return collabElementNode.getChildOffset(this);
|
|
32
|
-
}
|
|
33
|
-
destroy(binding) {
|
|
34
|
-
const collabNodeMap = binding.collabNodeMap;
|
|
35
|
-
if (collabNodeMap.get(this._key) === this) {
|
|
36
|
-
collabNodeMap.delete(this._key);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
export function $createCollabLineBreakNode(map, parent) {
|
|
41
|
-
const collabNode = new CollabLineBreakNode(map, parent);
|
|
42
|
-
map._collabNode = collabNode;
|
|
43
|
-
return collabNode;
|
|
44
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type { NodeKey, NodeMap, TextNode } from 'lexical';
|
|
2
|
-
import type { Map as YMap } from 'yjs';
|
|
3
|
-
import type { Binding } from '../Bindings';
|
|
4
|
-
import type { CollabElementNode } from './CollabElementNode';
|
|
5
|
-
export declare class CollabTextNode {
|
|
6
|
-
_map: YMap<unknown>;
|
|
7
|
-
_key: NodeKey;
|
|
8
|
-
_parent: CollabElementNode;
|
|
9
|
-
_text: string;
|
|
10
|
-
_type: string;
|
|
11
|
-
_normalized: boolean;
|
|
12
|
-
constructor(map: YMap<unknown>, text: string, parent: CollabElementNode, type: string);
|
|
13
|
-
getPrevNode(nodeMap: null | NodeMap): null | TextNode;
|
|
14
|
-
getNode(): null | TextNode;
|
|
15
|
-
getSharedType(): YMap<unknown>;
|
|
16
|
-
getType(): string;
|
|
17
|
-
getKey(): NodeKey;
|
|
18
|
-
getSize(): number;
|
|
19
|
-
getOffset(): number;
|
|
20
|
-
spliceText(index: number, delCount: number, newText: string): void;
|
|
21
|
-
syncPropertiesAndTextFromLexical(binding: Binding, nextLexicalNode: TextNode, prevNodeMap: null | NodeMap): void;
|
|
22
|
-
syncPropertiesAndTextFromYjs(binding: Binding, keysChanged: null | Set<string>): void;
|
|
23
|
-
destroy(binding: Binding): void;
|
|
24
|
-
}
|
|
25
|
-
export declare function $createCollabTextNode(map: YMap<unknown>, text: string, parent: CollabElementNode, type: string): CollabTextNode;
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { $getNodeByKey, $getSelection, $isRangeSelection, $isTextNode, } from 'lexical';
|
|
2
|
-
import invariant from '../../utils/invariant';
|
|
3
|
-
import simpleDiffWithCursor from '../../utils/simpleDiffWithCursor';
|
|
4
|
-
import { $syncPropertiesFromYjs, syncPropertiesFromLexical } from '../utils/Utils';
|
|
5
|
-
function $diffTextContentAndApplyDelta(collabNode, key, prevText, nextText) {
|
|
6
|
-
const selection = $getSelection();
|
|
7
|
-
let cursorOffset = nextText.length;
|
|
8
|
-
if ($isRangeSelection(selection) && selection.isCollapsed()) {
|
|
9
|
-
const anchor = selection.anchor;
|
|
10
|
-
if (anchor.key === key) {
|
|
11
|
-
cursorOffset = anchor.offset;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
const diff = simpleDiffWithCursor(prevText, nextText, cursorOffset);
|
|
15
|
-
collabNode.spliceText(diff.index, diff.remove, diff.insert);
|
|
16
|
-
}
|
|
17
|
-
export class CollabTextNode {
|
|
18
|
-
_map;
|
|
19
|
-
_key;
|
|
20
|
-
_parent;
|
|
21
|
-
_text;
|
|
22
|
-
_type;
|
|
23
|
-
_normalized;
|
|
24
|
-
constructor(map, text, parent, type) {
|
|
25
|
-
this._key = '';
|
|
26
|
-
this._map = map;
|
|
27
|
-
this._parent = parent;
|
|
28
|
-
this._text = text;
|
|
29
|
-
this._type = type;
|
|
30
|
-
this._normalized = false;
|
|
31
|
-
}
|
|
32
|
-
getPrevNode(nodeMap) {
|
|
33
|
-
if (nodeMap === null) {
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
const node = nodeMap.get(this._key);
|
|
37
|
-
return $isTextNode(node) ? node : null;
|
|
38
|
-
}
|
|
39
|
-
getNode() {
|
|
40
|
-
const node = $getNodeByKey(this._key);
|
|
41
|
-
return $isTextNode(node) ? node : null;
|
|
42
|
-
}
|
|
43
|
-
getSharedType() {
|
|
44
|
-
return this._map;
|
|
45
|
-
}
|
|
46
|
-
getType() {
|
|
47
|
-
return this._type;
|
|
48
|
-
}
|
|
49
|
-
getKey() {
|
|
50
|
-
return this._key;
|
|
51
|
-
}
|
|
52
|
-
getSize() {
|
|
53
|
-
return this._text.length + (this._normalized ? 0 : 1);
|
|
54
|
-
}
|
|
55
|
-
getOffset() {
|
|
56
|
-
const collabElementNode = this._parent;
|
|
57
|
-
return collabElementNode.getChildOffset(this);
|
|
58
|
-
}
|
|
59
|
-
spliceText(index, delCount, newText) {
|
|
60
|
-
const collabElementNode = this._parent;
|
|
61
|
-
const xmlText = collabElementNode._xmlText;
|
|
62
|
-
const offset = this.getOffset() + 1 + index;
|
|
63
|
-
if (delCount !== 0) {
|
|
64
|
-
xmlText.delete(offset, delCount);
|
|
65
|
-
}
|
|
66
|
-
if (newText !== '') {
|
|
67
|
-
xmlText.insert(offset, newText);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
syncPropertiesAndTextFromLexical(binding, nextLexicalNode, prevNodeMap) {
|
|
71
|
-
const prevLexicalNode = this.getPrevNode(prevNodeMap);
|
|
72
|
-
const nextText = nextLexicalNode.__text;
|
|
73
|
-
syncPropertiesFromLexical(binding, this._map, prevLexicalNode, nextLexicalNode);
|
|
74
|
-
if (prevLexicalNode !== null) {
|
|
75
|
-
const prevText = prevLexicalNode.__text;
|
|
76
|
-
if (prevText !== nextText) {
|
|
77
|
-
const key = nextLexicalNode.__key;
|
|
78
|
-
$diffTextContentAndApplyDelta(this, key, prevText, nextText);
|
|
79
|
-
this._text = nextText;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
syncPropertiesAndTextFromYjs(binding, keysChanged) {
|
|
84
|
-
const lexicalNode = this.getNode();
|
|
85
|
-
invariant(lexicalNode !== null, 'syncPropertiesAndTextFromYjs: could not find decorator node');
|
|
86
|
-
$syncPropertiesFromYjs(binding, this._map, lexicalNode, keysChanged);
|
|
87
|
-
const collabText = this._text;
|
|
88
|
-
if (lexicalNode.__text !== collabText) {
|
|
89
|
-
lexicalNode.setTextContent(collabText);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
destroy(binding) {
|
|
93
|
-
const collabNodeMap = binding.collabNodeMap;
|
|
94
|
-
if (collabNodeMap.get(this._key) === this) {
|
|
95
|
-
collabNodeMap.delete(this._key);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
export function $createCollabTextNode(map, text, parent, type) {
|
|
100
|
-
const collabNode = new CollabTextNode(map, text, parent, type);
|
|
101
|
-
map._collabNode = collabNode;
|
|
102
|
-
return collabNode;
|
|
103
|
-
}
|