@datalayer/lexical-loro 0.1.0 → 0.2.2
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,195 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { $isAutoLinkNode, $isLinkNode, TOGGLE_LINK_COMMAND, } from '@lexical/link';
|
|
3
|
-
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
4
|
-
import { $findMatchingParent, $wrapNodeInElement, mergeRegister, } from '@lexical/utils';
|
|
5
|
-
import { $createParagraphNode, $createRangeSelection, $getSelection, $insertNodes, $isNodeSelection, $isRootOrShadowRoot, $setSelection, COMMAND_PRIORITY_EDITOR, COMMAND_PRIORITY_HIGH, COMMAND_PRIORITY_LOW, createCommand, DRAGOVER_COMMAND, DRAGSTART_COMMAND, DROP_COMMAND, getDOMSelectionFromTarget, isHTMLElement, } from 'lexical';
|
|
6
|
-
import { useEffect, useRef, useState } from 'react';
|
|
7
|
-
import landscapeImage from '../../images/landscape.jpg';
|
|
8
|
-
import yellowFlowerImage from '../../images/yellow-flower.jpg';
|
|
9
|
-
import { $createImageNode, $isImageNode, ImageNode, } from '../../nodes/ImageNode';
|
|
10
|
-
import Button from '../../ui/Button';
|
|
11
|
-
import { DialogActions, DialogButtonsList } from '../../ui/Dialog';
|
|
12
|
-
import FileInput from '../../ui/FileInput';
|
|
13
|
-
import TextInput from '../../ui/TextInput';
|
|
14
|
-
export const INSERT_IMAGE_COMMAND = createCommand('INSERT_IMAGE_COMMAND');
|
|
15
|
-
export function InsertImageUriDialogBody({ onClick, }) {
|
|
16
|
-
const [src, setSrc] = useState('');
|
|
17
|
-
const [altText, setAltText] = useState('');
|
|
18
|
-
const isDisabled = src === '';
|
|
19
|
-
return (_jsxs(_Fragment, { children: [_jsx(TextInput, { label: "Image URL", placeholder: "i.e. https://source.unsplash.com/random", onChange: setSrc, value: src, "data-test-id": "image-modal-url-input" }), _jsx(TextInput, { label: "Alt Text", placeholder: "Random unsplash image", onChange: setAltText, value: altText, "data-test-id": "image-modal-alt-text-input" }), _jsx(DialogActions, { children: _jsx(Button, { "data-test-id": "image-modal-confirm-btn", disabled: isDisabled, onClick: () => onClick({ altText, src }), children: "Confirm" }) })] }));
|
|
20
|
-
}
|
|
21
|
-
export function InsertImageUploadedDialogBody({ onClick, }) {
|
|
22
|
-
const [src, setSrc] = useState('');
|
|
23
|
-
const [altText, setAltText] = useState('');
|
|
24
|
-
const isDisabled = src === '';
|
|
25
|
-
const loadImage = (files) => {
|
|
26
|
-
const reader = new FileReader();
|
|
27
|
-
reader.onload = function () {
|
|
28
|
-
if (typeof reader.result === 'string') {
|
|
29
|
-
setSrc(reader.result);
|
|
30
|
-
}
|
|
31
|
-
return '';
|
|
32
|
-
};
|
|
33
|
-
if (files !== null) {
|
|
34
|
-
reader.readAsDataURL(files[0]);
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
return (_jsxs(_Fragment, { children: [_jsx(FileInput, { label: "Image Upload", onChange: loadImage, accept: "image/*", "data-test-id": "image-modal-file-upload" }), _jsx(TextInput, { label: "Alt Text", placeholder: "Descriptive alternative text", onChange: setAltText, value: altText, "data-test-id": "image-modal-alt-text-input" }), _jsx(DialogActions, { children: _jsx(Button, { "data-test-id": "image-modal-file-upload-btn", disabled: isDisabled, onClick: () => onClick({ altText, src }), children: "Confirm" }) })] }));
|
|
38
|
-
}
|
|
39
|
-
export function InsertImageDialog({ activeEditor, onClose, }) {
|
|
40
|
-
const [mode, setMode] = useState(null);
|
|
41
|
-
const hasModifier = useRef(false);
|
|
42
|
-
useEffect(() => {
|
|
43
|
-
hasModifier.current = false;
|
|
44
|
-
const handler = (e) => {
|
|
45
|
-
hasModifier.current = e.altKey;
|
|
46
|
-
};
|
|
47
|
-
document.addEventListener('keydown', handler);
|
|
48
|
-
return () => {
|
|
49
|
-
document.removeEventListener('keydown', handler);
|
|
50
|
-
};
|
|
51
|
-
}, [activeEditor]);
|
|
52
|
-
const onClick = (payload) => {
|
|
53
|
-
activeEditor.dispatchCommand(INSERT_IMAGE_COMMAND, payload);
|
|
54
|
-
onClose();
|
|
55
|
-
};
|
|
56
|
-
return (_jsxs(_Fragment, { children: [!mode && (_jsxs(DialogButtonsList, { children: [_jsx(Button, { "data-test-id": "image-modal-option-sample", onClick: () => onClick(hasModifier.current
|
|
57
|
-
? {
|
|
58
|
-
altText: 'Daylight fir trees forest glacier green high ice landscape',
|
|
59
|
-
src: landscapeImage,
|
|
60
|
-
}
|
|
61
|
-
: {
|
|
62
|
-
altText: 'Yellow flower in tilt shift lens',
|
|
63
|
-
src: yellowFlowerImage,
|
|
64
|
-
}), children: "Sample" }), _jsx(Button, { "data-test-id": "image-modal-option-url", onClick: () => setMode('url'), children: "URL" }), _jsx(Button, { "data-test-id": "image-modal-option-file", onClick: () => setMode('file'), children: "File" })] })), mode === 'url' && _jsx(InsertImageUriDialogBody, { onClick: onClick }), mode === 'file' && _jsx(InsertImageUploadedDialogBody, { onClick: onClick })] }));
|
|
65
|
-
}
|
|
66
|
-
export default function ImagesPlugin({ captionsEnabled, }) {
|
|
67
|
-
const [editor] = useLexicalComposerContext();
|
|
68
|
-
useEffect(() => {
|
|
69
|
-
if (!editor.hasNodes([ImageNode])) {
|
|
70
|
-
throw new Error('ImagesPlugin: ImageNode not registered on editor');
|
|
71
|
-
}
|
|
72
|
-
return mergeRegister(editor.registerCommand(INSERT_IMAGE_COMMAND, (payload) => {
|
|
73
|
-
const imageNode = $createImageNode(payload);
|
|
74
|
-
$insertNodes([imageNode]);
|
|
75
|
-
if ($isRootOrShadowRoot(imageNode.getParentOrThrow())) {
|
|
76
|
-
$wrapNodeInElement(imageNode, $createParagraphNode).selectEnd();
|
|
77
|
-
}
|
|
78
|
-
return true;
|
|
79
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(DRAGSTART_COMMAND, (event) => {
|
|
80
|
-
return $onDragStart(event);
|
|
81
|
-
}, COMMAND_PRIORITY_HIGH), editor.registerCommand(DRAGOVER_COMMAND, (event) => {
|
|
82
|
-
return $onDragover(event);
|
|
83
|
-
}, COMMAND_PRIORITY_LOW), editor.registerCommand(DROP_COMMAND, (event) => {
|
|
84
|
-
return $onDrop(event, editor);
|
|
85
|
-
}, COMMAND_PRIORITY_HIGH));
|
|
86
|
-
}, [captionsEnabled, editor]);
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
const TRANSPARENT_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
|
|
90
|
-
const img = document.createElement('img');
|
|
91
|
-
img.src = TRANSPARENT_IMAGE;
|
|
92
|
-
function $onDragStart(event) {
|
|
93
|
-
const node = $getImageNodeInSelection();
|
|
94
|
-
if (!node) {
|
|
95
|
-
return false;
|
|
96
|
-
}
|
|
97
|
-
const dataTransfer = event.dataTransfer;
|
|
98
|
-
if (!dataTransfer) {
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
dataTransfer.setData('text/plain', '_');
|
|
102
|
-
dataTransfer.setDragImage(img, 0, 0);
|
|
103
|
-
dataTransfer.setData('application/x-lexical-drag', JSON.stringify({
|
|
104
|
-
data: {
|
|
105
|
-
altText: node.__altText,
|
|
106
|
-
caption: node.__caption,
|
|
107
|
-
height: node.__height,
|
|
108
|
-
key: node.getKey(),
|
|
109
|
-
maxWidth: node.__maxWidth,
|
|
110
|
-
showCaption: node.__showCaption,
|
|
111
|
-
src: node.__src,
|
|
112
|
-
width: node.__width,
|
|
113
|
-
},
|
|
114
|
-
type: 'image',
|
|
115
|
-
}));
|
|
116
|
-
return true;
|
|
117
|
-
}
|
|
118
|
-
function $onDragover(event) {
|
|
119
|
-
const node = $getImageNodeInSelection();
|
|
120
|
-
if (!node) {
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
123
|
-
if (!canDropImage(event)) {
|
|
124
|
-
event.preventDefault();
|
|
125
|
-
}
|
|
126
|
-
return true;
|
|
127
|
-
}
|
|
128
|
-
function $onDrop(event, editor) {
|
|
129
|
-
const node = $getImageNodeInSelection();
|
|
130
|
-
if (!node) {
|
|
131
|
-
return false;
|
|
132
|
-
}
|
|
133
|
-
const data = getDragImageData(event);
|
|
134
|
-
if (!data) {
|
|
135
|
-
return false;
|
|
136
|
-
}
|
|
137
|
-
const existingLink = $findMatchingParent(node, (parent) => !$isAutoLinkNode(parent) && $isLinkNode(parent));
|
|
138
|
-
event.preventDefault();
|
|
139
|
-
if (canDropImage(event)) {
|
|
140
|
-
const range = getDragSelection(event);
|
|
141
|
-
node.remove();
|
|
142
|
-
const rangeSelection = $createRangeSelection();
|
|
143
|
-
if (range !== null && range !== undefined) {
|
|
144
|
-
rangeSelection.applyDOMRange(range);
|
|
145
|
-
}
|
|
146
|
-
$setSelection(rangeSelection);
|
|
147
|
-
editor.dispatchCommand(INSERT_IMAGE_COMMAND, data);
|
|
148
|
-
if (existingLink) {
|
|
149
|
-
editor.dispatchCommand(TOGGLE_LINK_COMMAND, existingLink.getURL());
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
return true;
|
|
153
|
-
}
|
|
154
|
-
function $getImageNodeInSelection() {
|
|
155
|
-
const selection = $getSelection();
|
|
156
|
-
if (!$isNodeSelection(selection)) {
|
|
157
|
-
return null;
|
|
158
|
-
}
|
|
159
|
-
const nodes = selection.getNodes();
|
|
160
|
-
const node = nodes[0];
|
|
161
|
-
return $isImageNode(node) ? node : null;
|
|
162
|
-
}
|
|
163
|
-
function getDragImageData(event) {
|
|
164
|
-
const dragData = event.dataTransfer?.getData('application/x-lexical-drag');
|
|
165
|
-
if (!dragData) {
|
|
166
|
-
return null;
|
|
167
|
-
}
|
|
168
|
-
const { type, data } = JSON.parse(dragData);
|
|
169
|
-
if (type !== 'image') {
|
|
170
|
-
return null;
|
|
171
|
-
}
|
|
172
|
-
return data;
|
|
173
|
-
}
|
|
174
|
-
function canDropImage(event) {
|
|
175
|
-
const target = event.target;
|
|
176
|
-
return !!(isHTMLElement(target) &&
|
|
177
|
-
!target.closest('code, span.editor-image') &&
|
|
178
|
-
isHTMLElement(target.parentElement) &&
|
|
179
|
-
target.parentElement.closest('div.ContentEditable__root'));
|
|
180
|
-
}
|
|
181
|
-
function getDragSelection(event) {
|
|
182
|
-
let range;
|
|
183
|
-
const domSelection = getDOMSelectionFromTarget(event.target);
|
|
184
|
-
if (document.caretRangeFromPoint) {
|
|
185
|
-
range = document.caretRangeFromPoint(event.clientX, event.clientY);
|
|
186
|
-
}
|
|
187
|
-
else if (event.rangeParent && domSelection !== null) {
|
|
188
|
-
domSelection.collapse(event.rangeParent, event.rangeOffset || 0);
|
|
189
|
-
range = domSelection.getRangeAt(0);
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
throw Error(`Cannot get the selection when dragging`);
|
|
193
|
-
}
|
|
194
|
-
return range;
|
|
195
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { JSX } from 'react';
|
|
2
|
-
import '../../nodes/InlineImageNode/InlineImageNode.css';
|
|
3
|
-
import { LexicalCommand, LexicalEditor } from 'lexical';
|
|
4
|
-
import { InlineImagePayload } from '../../nodes/InlineImageNode/InlineImageNode';
|
|
5
|
-
export type InsertInlineImagePayload = Readonly<InlineImagePayload>;
|
|
6
|
-
export declare const INSERT_INLINE_IMAGE_COMMAND: LexicalCommand<InlineImagePayload>;
|
|
7
|
-
export declare function InsertInlineImageDialog({ activeEditor, onClose, }: {
|
|
8
|
-
activeEditor: LexicalEditor;
|
|
9
|
-
onClose: () => void;
|
|
10
|
-
}): JSX.Element;
|
|
11
|
-
export default function InlineImagePlugin(): JSX.Element | null;
|
|
12
|
-
declare global {
|
|
13
|
-
interface DragEvent {
|
|
14
|
-
rangeOffset?: number;
|
|
15
|
-
rangeParent?: Node;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import '../../nodes/InlineImageNode/InlineImageNode.css';
|
|
3
|
-
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
4
|
-
import { $wrapNodeInElement, mergeRegister } from '@lexical/utils';
|
|
5
|
-
import { $createParagraphNode, $createRangeSelection, $getSelection, $insertNodes, $isNodeSelection, $isRootOrShadowRoot, $setSelection, COMMAND_PRIORITY_EDITOR, COMMAND_PRIORITY_HIGH, COMMAND_PRIORITY_LOW, createCommand, DRAGOVER_COMMAND, DRAGSTART_COMMAND, DROP_COMMAND, getDOMSelectionFromTarget, isHTMLElement, } from 'lexical';
|
|
6
|
-
import { useEffect, useRef, useState } from 'react';
|
|
7
|
-
import { $createInlineImageNode, $isInlineImageNode, InlineImageNode, } from '../../nodes/InlineImageNode/InlineImageNode';
|
|
8
|
-
import Button from '../../ui/Button';
|
|
9
|
-
import { DialogActions } from '../../ui/Dialog';
|
|
10
|
-
import FileInput from '../../ui/FileInput';
|
|
11
|
-
import Select from '../../ui/Select';
|
|
12
|
-
import TextInput from '../../ui/TextInput';
|
|
13
|
-
export const INSERT_INLINE_IMAGE_COMMAND = createCommand('INSERT_INLINE_IMAGE_COMMAND');
|
|
14
|
-
export function InsertInlineImageDialog({ activeEditor, onClose, }) {
|
|
15
|
-
const hasModifier = useRef(false);
|
|
16
|
-
const [src, setSrc] = useState('');
|
|
17
|
-
const [altText, setAltText] = useState('');
|
|
18
|
-
const [showCaption, setShowCaption] = useState(false);
|
|
19
|
-
const [position, setPosition] = useState('left');
|
|
20
|
-
const isDisabled = src === '';
|
|
21
|
-
const handleShowCaptionChange = (e) => {
|
|
22
|
-
setShowCaption(e.target.checked);
|
|
23
|
-
};
|
|
24
|
-
const handlePositionChange = (e) => {
|
|
25
|
-
setPosition(e.target.value);
|
|
26
|
-
};
|
|
27
|
-
const loadImage = (files) => {
|
|
28
|
-
const reader = new FileReader();
|
|
29
|
-
reader.onload = function () {
|
|
30
|
-
if (typeof reader.result === 'string') {
|
|
31
|
-
setSrc(reader.result);
|
|
32
|
-
}
|
|
33
|
-
return '';
|
|
34
|
-
};
|
|
35
|
-
if (files !== null) {
|
|
36
|
-
reader.readAsDataURL(files[0]);
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
useEffect(() => {
|
|
40
|
-
hasModifier.current = false;
|
|
41
|
-
const handler = (e) => {
|
|
42
|
-
hasModifier.current = e.altKey;
|
|
43
|
-
};
|
|
44
|
-
document.addEventListener('keydown', handler);
|
|
45
|
-
return () => {
|
|
46
|
-
document.removeEventListener('keydown', handler);
|
|
47
|
-
};
|
|
48
|
-
}, [activeEditor]);
|
|
49
|
-
const handleOnClick = () => {
|
|
50
|
-
const payload = { altText, position, showCaption, src };
|
|
51
|
-
activeEditor.dispatchCommand(INSERT_INLINE_IMAGE_COMMAND, payload);
|
|
52
|
-
onClose();
|
|
53
|
-
};
|
|
54
|
-
return (_jsxs(_Fragment, { children: [_jsx("div", { style: { marginBottom: '1em' }, children: _jsx(FileInput, { label: "Image Upload", onChange: loadImage, accept: "image/*", "data-test-id": "image-modal-file-upload" }) }), _jsx("div", { style: { marginBottom: '1em' }, children: _jsx(TextInput, { label: "Alt Text", placeholder: "Descriptive alternative text", onChange: setAltText, value: altText, "data-test-id": "image-modal-alt-text-input" }) }), _jsxs(Select, { style: { marginBottom: '1em', width: '290px' }, label: "Position", name: "position", id: "position-select", onChange: handlePositionChange, children: [_jsx("option", { value: "left", children: "Left" }), _jsx("option", { value: "right", children: "Right" }), _jsx("option", { value: "full", children: "Full Width" })] }), _jsxs("div", { className: "Input__wrapper", children: [_jsx("input", { id: "caption", className: "InlineImageNode_Checkbox", type: "checkbox", checked: showCaption, onChange: handleShowCaptionChange }), _jsx("label", { htmlFor: "caption", children: "Show Caption" })] }), _jsx(DialogActions, { children: _jsx(Button, { "data-test-id": "image-modal-file-upload-btn", disabled: isDisabled, onClick: () => handleOnClick(), children: "Confirm" }) })] }));
|
|
55
|
-
}
|
|
56
|
-
export default function InlineImagePlugin() {
|
|
57
|
-
const [editor] = useLexicalComposerContext();
|
|
58
|
-
useEffect(() => {
|
|
59
|
-
if (!editor.hasNodes([InlineImageNode])) {
|
|
60
|
-
throw new Error('ImagesPlugin: ImageNode not registered on editor');
|
|
61
|
-
}
|
|
62
|
-
return mergeRegister(editor.registerCommand(INSERT_INLINE_IMAGE_COMMAND, (payload) => {
|
|
63
|
-
const imageNode = $createInlineImageNode(payload);
|
|
64
|
-
$insertNodes([imageNode]);
|
|
65
|
-
if ($isRootOrShadowRoot(imageNode.getParentOrThrow())) {
|
|
66
|
-
$wrapNodeInElement(imageNode, $createParagraphNode).selectEnd();
|
|
67
|
-
}
|
|
68
|
-
return true;
|
|
69
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(DRAGSTART_COMMAND, (event) => {
|
|
70
|
-
return $onDragStart(event);
|
|
71
|
-
}, COMMAND_PRIORITY_HIGH), editor.registerCommand(DRAGOVER_COMMAND, (event) => {
|
|
72
|
-
return $onDragover(event);
|
|
73
|
-
}, COMMAND_PRIORITY_LOW), editor.registerCommand(DROP_COMMAND, (event) => {
|
|
74
|
-
return $onDrop(event, editor);
|
|
75
|
-
}, COMMAND_PRIORITY_HIGH));
|
|
76
|
-
}, [editor]);
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
const TRANSPARENT_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
|
|
80
|
-
const img = document.createElement('img');
|
|
81
|
-
img.src = TRANSPARENT_IMAGE;
|
|
82
|
-
function $onDragStart(event) {
|
|
83
|
-
const node = $getImageNodeInSelection();
|
|
84
|
-
if (!node) {
|
|
85
|
-
return false;
|
|
86
|
-
}
|
|
87
|
-
const dataTransfer = event.dataTransfer;
|
|
88
|
-
if (!dataTransfer) {
|
|
89
|
-
return false;
|
|
90
|
-
}
|
|
91
|
-
dataTransfer.setData('text/plain', '_');
|
|
92
|
-
dataTransfer.setDragImage(img, 0, 0);
|
|
93
|
-
dataTransfer.setData('application/x-lexical-drag', JSON.stringify({
|
|
94
|
-
data: {
|
|
95
|
-
altText: node.__altText,
|
|
96
|
-
caption: node.__caption,
|
|
97
|
-
height: node.__height,
|
|
98
|
-
key: node.getKey(),
|
|
99
|
-
showCaption: node.__showCaption,
|
|
100
|
-
src: node.__src,
|
|
101
|
-
width: node.__width,
|
|
102
|
-
},
|
|
103
|
-
type: 'image',
|
|
104
|
-
}));
|
|
105
|
-
return true;
|
|
106
|
-
}
|
|
107
|
-
function $onDragover(event) {
|
|
108
|
-
const node = $getImageNodeInSelection();
|
|
109
|
-
if (!node) {
|
|
110
|
-
return false;
|
|
111
|
-
}
|
|
112
|
-
if (!canDropImage(event)) {
|
|
113
|
-
event.preventDefault();
|
|
114
|
-
}
|
|
115
|
-
return true;
|
|
116
|
-
}
|
|
117
|
-
function $onDrop(event, editor) {
|
|
118
|
-
const node = $getImageNodeInSelection();
|
|
119
|
-
if (!node) {
|
|
120
|
-
return false;
|
|
121
|
-
}
|
|
122
|
-
const data = getDragImageData(event);
|
|
123
|
-
if (!data) {
|
|
124
|
-
return false;
|
|
125
|
-
}
|
|
126
|
-
event.preventDefault();
|
|
127
|
-
if (canDropImage(event)) {
|
|
128
|
-
const range = getDragSelection(event);
|
|
129
|
-
node.remove();
|
|
130
|
-
const rangeSelection = $createRangeSelection();
|
|
131
|
-
if (range !== null && range !== undefined) {
|
|
132
|
-
rangeSelection.applyDOMRange(range);
|
|
133
|
-
}
|
|
134
|
-
$setSelection(rangeSelection);
|
|
135
|
-
editor.dispatchCommand(INSERT_INLINE_IMAGE_COMMAND, data);
|
|
136
|
-
}
|
|
137
|
-
return true;
|
|
138
|
-
}
|
|
139
|
-
function $getImageNodeInSelection() {
|
|
140
|
-
const selection = $getSelection();
|
|
141
|
-
if (!$isNodeSelection(selection)) {
|
|
142
|
-
return null;
|
|
143
|
-
}
|
|
144
|
-
const nodes = selection.getNodes();
|
|
145
|
-
const node = nodes[0];
|
|
146
|
-
return $isInlineImageNode(node) ? node : null;
|
|
147
|
-
}
|
|
148
|
-
function getDragImageData(event) {
|
|
149
|
-
const dragData = event.dataTransfer?.getData('application/x-lexical-drag');
|
|
150
|
-
if (!dragData) {
|
|
151
|
-
return null;
|
|
152
|
-
}
|
|
153
|
-
const { type, data } = JSON.parse(dragData);
|
|
154
|
-
if (type !== 'image') {
|
|
155
|
-
return null;
|
|
156
|
-
}
|
|
157
|
-
return data;
|
|
158
|
-
}
|
|
159
|
-
function canDropImage(event) {
|
|
160
|
-
const target = event.target;
|
|
161
|
-
return !!(isHTMLElement(target) &&
|
|
162
|
-
!target.closest('code, span.editor-image') &&
|
|
163
|
-
isHTMLElement(target.parentElement) &&
|
|
164
|
-
target.parentElement.closest('div.ContentEditable__root'));
|
|
165
|
-
}
|
|
166
|
-
function getDragSelection(event) {
|
|
167
|
-
let range;
|
|
168
|
-
const domSelection = getDOMSelectionFromTarget(event.target);
|
|
169
|
-
if (document.caretRangeFromPoint) {
|
|
170
|
-
range = document.caretRangeFromPoint(event.clientX, event.clientY);
|
|
171
|
-
}
|
|
172
|
-
else if (event.rangeParent && domSelection !== null) {
|
|
173
|
-
domSelection.collapse(event.rangeParent, event.rangeOffset || 0);
|
|
174
|
-
range = domSelection.getRangeAt(0);
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
throw Error('Cannot get the selection when dragging');
|
|
178
|
-
}
|
|
179
|
-
return range;
|
|
180
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
2
|
-
import { useLexicalTextEntity } from '@lexical/react/useLexicalTextEntity';
|
|
3
|
-
import { useCallback, useEffect } from 'react';
|
|
4
|
-
import { $createKeywordNode, KeywordNode } from '../../nodes/KeywordNode';
|
|
5
|
-
const KEYWORDS_REGEX = /(^|$|[^A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԧԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠࢢ-ࢬऄ-हऽॐक़-ॡॱ-ॷॹ-ॿঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-ళవ-హఽౘౙౠౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൠൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤜᥐ-ᥭᥰ-ᥴᦀ-ᦫᧁ-ᧇᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚗꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞓꞠ-Ɦꟸ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꪀ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ])(congrats|congratulations|gratuluju|gratuluji|gratulujeme|blahopřeju|blahopřeji|blahopřejeme|Til lykke|Tillykke|Glückwunsch|Gratuliere|felicitaciones|enhorabuena|paljon onnea|onnittelut|Félicitations|gratula|gratulálok|gratulálunk|congratulazioni|complimenti|おめでとう|おめでとうございます|축하해|축하해요|gratulerer|Gefeliciteerd|gratulacje|Parabéns|parabéns|felicitações|felicitări|мои поздравления|поздравляем|поздравляю|gratulujem|blahoželám|ยินดีด้วย|ขอแสดงความยินดี|tebrikler|tebrik ederim|恭喜|祝贺你|恭喜你|恭喜|恭喜|baie geluk|veels geluk|অভিনন্দন|Čestitam|Čestitke|Čestitamo|Συγχαρητήρια|Μπράβο|અભિનંદન|badhai|बधाई|अभिनंदन|Честитам|Свака част|hongera|வாழ்த்துகள்|வாழ்த்துக்கள்|అభినందనలు|അഭിനന്ദനങ്ങൾ|Chúc mừng|מזל טוב|mazel tov|mazal tov)(^|$|[^A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԧԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠࢢ-ࢬऄ-हऽॐक़-ॡॱ-ॷॹ-ॿঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-ళవ-హఽౘౙౠౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൠൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤜᥐ-ᥭᥰ-ᥴᦀ-ᦫᧁ-ᧇᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚗꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞓꞠ-Ɦꟸ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꪀ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ])/i;
|
|
6
|
-
export default function KeywordsPlugin() {
|
|
7
|
-
const [editor] = useLexicalComposerContext();
|
|
8
|
-
useEffect(() => {
|
|
9
|
-
if (!editor.hasNodes([KeywordNode])) {
|
|
10
|
-
throw new Error('KeywordsPlugin: KeywordNode not registered on editor');
|
|
11
|
-
}
|
|
12
|
-
}, [editor]);
|
|
13
|
-
const $createKeywordNode_ = useCallback((textNode) => {
|
|
14
|
-
return $createKeywordNode(textNode.getTextContent());
|
|
15
|
-
}, []);
|
|
16
|
-
const getKeywordMatch = useCallback((text) => {
|
|
17
|
-
const matchArr = KEYWORDS_REGEX.exec(text);
|
|
18
|
-
if (matchArr === null) {
|
|
19
|
-
return null;
|
|
20
|
-
}
|
|
21
|
-
const hashtagLength = matchArr[2].length;
|
|
22
|
-
const startOffset = matchArr.index + matchArr[1].length;
|
|
23
|
-
const endOffset = startOffset + hashtagLength;
|
|
24
|
-
return {
|
|
25
|
-
end: endOffset,
|
|
26
|
-
start: startOffset,
|
|
27
|
-
};
|
|
28
|
-
}, []);
|
|
29
|
-
useLexicalTextEntity(getKeywordMatch, KeywordNode, $createKeywordNode_);
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useState } from 'react';
|
|
3
|
-
import Button from '../../ui/Button';
|
|
4
|
-
import DropDown, { DropDownItem } from '../../ui/DropDown';
|
|
5
|
-
import { INSERT_LAYOUT_COMMAND } from './LayoutPlugin';
|
|
6
|
-
const LAYOUTS = [
|
|
7
|
-
{ label: '2 columns (equal width)', value: '1fr 1fr' },
|
|
8
|
-
{ label: '2 columns (25% - 75%)', value: '1fr 3fr' },
|
|
9
|
-
{ label: '3 columns (equal width)', value: '1fr 1fr 1fr' },
|
|
10
|
-
{ label: '3 columns (25% - 50% - 25%)', value: '1fr 2fr 1fr' },
|
|
11
|
-
{ label: '4 columns (equal width)', value: '1fr 1fr 1fr 1fr' },
|
|
12
|
-
];
|
|
13
|
-
export default function InsertLayoutDialog({ activeEditor, onClose, }) {
|
|
14
|
-
const [layout, setLayout] = useState(LAYOUTS[0].value);
|
|
15
|
-
const buttonLabel = LAYOUTS.find((item) => item.value === layout)?.label;
|
|
16
|
-
const onClick = () => {
|
|
17
|
-
activeEditor.dispatchCommand(INSERT_LAYOUT_COMMAND, layout);
|
|
18
|
-
onClose();
|
|
19
|
-
};
|
|
20
|
-
return (_jsxs(_Fragment, { children: [_jsx(DropDown, { buttonClassName: "toolbar-item dialog-dropdown", buttonLabel: buttonLabel, children: LAYOUTS.map(({ label, value }) => (_jsx(DropDownItem, { className: "item", onClick: () => setLayout(value), children: _jsx("span", { className: "text", children: label }) }, value))) }), _jsx(Button, { onClick: onClick, children: "Insert" })] }));
|
|
21
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { LexicalCommand, NodeKey } from 'lexical';
|
|
2
|
-
export declare const INSERT_LAYOUT_COMMAND: LexicalCommand<string>;
|
|
3
|
-
export declare const UPDATE_LAYOUT_COMMAND: LexicalCommand<{
|
|
4
|
-
template: string;
|
|
5
|
-
nodeKey: NodeKey;
|
|
6
|
-
}>;
|
|
7
|
-
export declare function LayoutPlugin(): null;
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
2
|
-
import { $findMatchingParent, $insertNodeToNearestRoot, mergeRegister, } from '@lexical/utils';
|
|
3
|
-
import { $createParagraphNode, $getNodeByKey, $getSelection, $isRangeSelection, COMMAND_PRIORITY_EDITOR, COMMAND_PRIORITY_LOW, createCommand, KEY_ARROW_DOWN_COMMAND, KEY_ARROW_LEFT_COMMAND, KEY_ARROW_RIGHT_COMMAND, KEY_ARROW_UP_COMMAND, } from 'lexical';
|
|
4
|
-
import { useEffect } from 'react';
|
|
5
|
-
import { $createLayoutContainerNode, $isLayoutContainerNode, LayoutContainerNode, } from '../../nodes/LayoutContainerNode';
|
|
6
|
-
import { $createLayoutItemNode, $isLayoutItemNode, LayoutItemNode, } from '../../nodes/LayoutItemNode';
|
|
7
|
-
export const INSERT_LAYOUT_COMMAND = createCommand();
|
|
8
|
-
export const UPDATE_LAYOUT_COMMAND = createCommand();
|
|
9
|
-
export function LayoutPlugin() {
|
|
10
|
-
const [editor] = useLexicalComposerContext();
|
|
11
|
-
useEffect(() => {
|
|
12
|
-
if (!editor.hasNodes([LayoutContainerNode, LayoutItemNode])) {
|
|
13
|
-
throw new Error('LayoutPlugin: LayoutContainerNode, or LayoutItemNode not registered on editor');
|
|
14
|
-
}
|
|
15
|
-
const $onEscape = (before) => {
|
|
16
|
-
const selection = $getSelection();
|
|
17
|
-
if ($isRangeSelection(selection) &&
|
|
18
|
-
selection.isCollapsed() &&
|
|
19
|
-
selection.anchor.offset === 0) {
|
|
20
|
-
const container = $findMatchingParent(selection.anchor.getNode(), $isLayoutContainerNode);
|
|
21
|
-
if ($isLayoutContainerNode(container)) {
|
|
22
|
-
const parent = container.getParent();
|
|
23
|
-
const child = parent &&
|
|
24
|
-
(before
|
|
25
|
-
? parent.getFirstChild()
|
|
26
|
-
: parent?.getLastChild());
|
|
27
|
-
const descendant = before
|
|
28
|
-
? container.getFirstDescendant()?.getKey()
|
|
29
|
-
: container.getLastDescendant()?.getKey();
|
|
30
|
-
if (parent !== null &&
|
|
31
|
-
child === container &&
|
|
32
|
-
selection.anchor.key === descendant) {
|
|
33
|
-
if (before) {
|
|
34
|
-
container.insertBefore($createParagraphNode());
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
container.insertAfter($createParagraphNode());
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return false;
|
|
43
|
-
};
|
|
44
|
-
const $fillLayoutItemIfEmpty = (node) => {
|
|
45
|
-
if (node.isEmpty()) {
|
|
46
|
-
node.append($createParagraphNode());
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
const $removeIsolatedLayoutItem = (node) => {
|
|
50
|
-
const parent = node.getParent();
|
|
51
|
-
if (!$isLayoutContainerNode(parent)) {
|
|
52
|
-
const children = node.getChildren();
|
|
53
|
-
for (const child of children) {
|
|
54
|
-
node.insertBefore(child);
|
|
55
|
-
}
|
|
56
|
-
node.remove();
|
|
57
|
-
return true;
|
|
58
|
-
}
|
|
59
|
-
return false;
|
|
60
|
-
};
|
|
61
|
-
return mergeRegister(
|
|
62
|
-
// When layout is the last child pressing down/right arrow will insert paragraph
|
|
63
|
-
// below it to allow adding more content. It's similar what $insertBlockNode
|
|
64
|
-
// (mainly for decorators), except it'll always be possible to continue adding
|
|
65
|
-
// new content even if trailing paragraph is accidentally deleted
|
|
66
|
-
editor.registerCommand(KEY_ARROW_DOWN_COMMAND, () => $onEscape(false), COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_ARROW_RIGHT_COMMAND, () => $onEscape(false), COMMAND_PRIORITY_LOW),
|
|
67
|
-
// When layout is the first child pressing up/left arrow will insert paragraph
|
|
68
|
-
// above it to allow adding more content. It's similar what $insertBlockNode
|
|
69
|
-
// (mainly for decorators), except it'll always be possible to continue adding
|
|
70
|
-
// new content even if leading paragraph is accidentally deleted
|
|
71
|
-
editor.registerCommand(KEY_ARROW_UP_COMMAND, () => $onEscape(true), COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_ARROW_LEFT_COMMAND, () => $onEscape(true), COMMAND_PRIORITY_LOW), editor.registerCommand(INSERT_LAYOUT_COMMAND, (template) => {
|
|
72
|
-
editor.update(() => {
|
|
73
|
-
const container = $createLayoutContainerNode(template);
|
|
74
|
-
const itemsCount = getItemsCountFromTemplate(template);
|
|
75
|
-
for (let i = 0; i < itemsCount; i++) {
|
|
76
|
-
container.append($createLayoutItemNode().append($createParagraphNode()));
|
|
77
|
-
}
|
|
78
|
-
$insertNodeToNearestRoot(container);
|
|
79
|
-
container.selectStart();
|
|
80
|
-
});
|
|
81
|
-
return true;
|
|
82
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(UPDATE_LAYOUT_COMMAND, ({ template, nodeKey }) => {
|
|
83
|
-
editor.update(() => {
|
|
84
|
-
const container = $getNodeByKey(nodeKey);
|
|
85
|
-
if (!$isLayoutContainerNode(container)) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
const itemsCount = getItemsCountFromTemplate(template);
|
|
89
|
-
const prevItemsCount = getItemsCountFromTemplate(container.getTemplateColumns());
|
|
90
|
-
// Add or remove extra columns if new template does not match existing one
|
|
91
|
-
if (itemsCount > prevItemsCount) {
|
|
92
|
-
for (let i = prevItemsCount; i < itemsCount; i++) {
|
|
93
|
-
container.append($createLayoutItemNode().append($createParagraphNode()));
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
else if (itemsCount < prevItemsCount) {
|
|
97
|
-
for (let i = prevItemsCount - 1; i >= itemsCount; i--) {
|
|
98
|
-
const layoutItem = container.getChildAtIndex(i);
|
|
99
|
-
if ($isLayoutItemNode(layoutItem)) {
|
|
100
|
-
layoutItem.remove();
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
container.setTemplateColumns(template);
|
|
105
|
-
});
|
|
106
|
-
return true;
|
|
107
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerNodeTransform(LayoutItemNode, (node) => {
|
|
108
|
-
// Structure enforcing transformers for each node type. In case nesting structure is not
|
|
109
|
-
// "Container > Item" it'll unwrap nodes and convert it back
|
|
110
|
-
// to regular content.
|
|
111
|
-
const isRemoved = $removeIsolatedLayoutItem(node);
|
|
112
|
-
if (!isRemoved) {
|
|
113
|
-
// Layout item should always have a child. this function will listen
|
|
114
|
-
// for any empty layout item and fill it with a paragraph node
|
|
115
|
-
$fillLayoutItemIfEmpty(node);
|
|
116
|
-
}
|
|
117
|
-
}), editor.registerNodeTransform(LayoutContainerNode, (node) => {
|
|
118
|
-
const children = node.getChildren();
|
|
119
|
-
if (!children.every($isLayoutItemNode)) {
|
|
120
|
-
for (const child of children) {
|
|
121
|
-
node.insertBefore(child);
|
|
122
|
-
}
|
|
123
|
-
node.remove();
|
|
124
|
-
}
|
|
125
|
-
}));
|
|
126
|
-
}, [editor]);
|
|
127
|
-
return null;
|
|
128
|
-
}
|
|
129
|
-
function getItemsCountFromTemplate(template) {
|
|
130
|
-
return template.trim().split(/\s+/).length;
|
|
131
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { LinkPlugin as LexicalLinkPlugin } from '@lexical/react/LexicalLinkPlugin';
|
|
3
|
-
import { validateUrl } from '../../utils/url';
|
|
4
|
-
export default function LinkPlugin({ hasLinkAttributes = false, }) {
|
|
5
|
-
return (_jsx(LexicalLinkPlugin, { validateUrl: validateUrl, attributes: hasLinkAttributes
|
|
6
|
-
? {
|
|
7
|
-
rel: 'noopener noreferrer',
|
|
8
|
-
target: '_blank',
|
|
9
|
-
}
|
|
10
|
-
: undefined }));
|
|
11
|
-
}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { MarkdownShortcutPlugin } from '@lexical/react/LexicalMarkdownShortcutPlugin';
|
|
3
|
-
import { PLAYGROUND_TRANSFORMERS } from '../MarkdownTransformers';
|
|
4
|
-
export default function MarkdownPlugin() {
|
|
5
|
-
return _jsx(MarkdownShortcutPlugin, { transformers: PLAYGROUND_TRANSFORMERS });
|
|
6
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { ElementTransformer, TextMatchTransformer, Transformer } from '@lexical/markdown';
|
|
2
|
-
export declare const HR: ElementTransformer;
|
|
3
|
-
export declare const IMAGE: TextMatchTransformer;
|
|
4
|
-
export declare const EMOJI: TextMatchTransformer;
|
|
5
|
-
export declare const EQUATION: TextMatchTransformer;
|
|
6
|
-
export declare const TWEET: ElementTransformer;
|
|
7
|
-
export declare const TABLE: ElementTransformer;
|
|
8
|
-
export declare const PLAYGROUND_TRANSFORMERS: Array<Transformer>;
|