@scottjgilbert/lexical-blog-editor 0.1.4 → 1.0.0-beta.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 +73 -67
- package/build/Editor.d.ts +8 -3
- package/build/Editor.d.ts.map +1 -1
- package/build/Editor.js +13 -8
- package/build/EditorExport.d.ts +4 -0
- package/build/EditorExport.d.ts.map +1 -0
- package/build/EditorExport.js +13 -0
- package/build/appSettings.d.ts +1 -1
- package/build/appSettings.js +1 -1
- package/build/buildHTMLConfig.d.ts +1 -1
- package/build/buildHTMLConfig.d.ts.map +1 -1
- package/build/buildHTMLConfig.js +35 -11
- package/build/context/FlashMessageContext.d.ts +2 -2
- package/build/context/FlashMessageContext.d.ts.map +1 -1
- package/build/context/FlashMessageContext.js +4 -3
- package/build/context/SharedHistoryContext.d.ts +3 -3
- package/build/context/SharedHistoryContext.d.ts.map +1 -1
- package/build/context/SharedHistoryContext.js +3 -2
- package/build/context/ToolbarContext.d.ts +1 -0
- package/build/context/ToolbarContext.d.ts.map +1 -1
- package/build/context/ToolbarContext.js +2 -0
- package/build/hooks/useModal.d.ts.map +1 -1
- package/build/hooks/useModal.js +1 -0
- package/build/hooks/useReport.d.ts +0 -7
- package/build/hooks/useReport.d.ts.map +1 -1
- package/build/hooks/useReport.js +1 -0
- package/build/index.css +283 -246
- package/build/index.d.ts +3 -3
- package/build/index.d.ts.map +1 -1
- package/build/index.js +2 -2
- package/build/nodes/CodeNode/CodeHighlightNode.d.ts +35 -0
- package/build/nodes/CodeNode/CodeHighlightNode.d.ts.map +1 -0
- package/build/nodes/CodeNode/CodeHighlightNode.js +88 -0
- package/build/nodes/CodeNode/CodeHighlighterShiki.d.ts +22 -0
- package/build/nodes/CodeNode/CodeHighlighterShiki.d.ts.map +1 -0
- package/build/nodes/CodeNode/CodeHighlighterShiki.js +644 -0
- package/build/nodes/CodeNode/CodeNode.d.ts +48 -0
- package/build/nodes/CodeNode/CodeNode.d.ts.map +1 -0
- package/build/nodes/CodeNode/CodeNode.js +367 -0
- package/build/nodes/CodeNode/FacadeShiki.d.ts +18 -0
- package/build/nodes/CodeNode/FacadeShiki.d.ts.map +1 -0
- package/build/nodes/CodeNode/FacadeShiki.js +159 -0
- package/build/nodes/CodeNode/FlatStructureUtils.d.ts +21 -0
- package/build/nodes/CodeNode/FlatStructureUtils.d.ts.map +1 -0
- package/build/nodes/CodeNode/FlatStructureUtils.js +85 -0
- package/build/nodes/CodeNode/invariant.d.ts +2 -0
- package/build/nodes/CodeNode/invariant.d.ts.map +1 -0
- package/build/nodes/CodeNode/invariant.js +6 -0
- package/build/nodes/DateTimeNode/DateTimeComponent.d.ts.map +1 -1
- package/build/nodes/DateTimeNode/DateTimeComponent.js +1 -0
- package/build/nodes/DateTimeNode/DateTimeNode.css +21 -0
- package/build/nodes/FigmaNode/FigmaNode.d.ts.map +1 -0
- package/build/nodes/FigmaNode/ServerFigmaNode.d.ts +21 -0
- package/build/nodes/FigmaNode/ServerFigmaNode.d.ts.map +1 -0
- package/build/nodes/FigmaNode/ServerFigmaNode.js +48 -0
- package/build/nodes/ImageComponent.d.ts.map +1 -1
- package/build/nodes/ImageComponent.js +1 -2
- package/build/nodes/ImageNode.d.ts +7 -7
- package/build/nodes/ImageNode.d.ts.map +1 -1
- package/build/nodes/ImageNode.js +30 -30
- package/build/nodes/LayoutContainerNode.d.ts +2 -2
- package/build/nodes/LayoutContainerNode.d.ts.map +1 -1
- package/build/nodes/LayoutContainerNode.js +10 -10
- package/build/nodes/PlaygroundNodes/PlaygroundNodes.d.ts.map +1 -0
- package/build/nodes/{PlaygroundNodes.js → PlaygroundNodes/PlaygroundNodes.js} +19 -21
- package/build/nodes/PlaygroundNodes/ServerPlaygroundNodes.d.ts +11 -0
- package/build/nodes/PlaygroundNodes/ServerPlaygroundNodes.d.ts.map +1 -0
- package/build/nodes/PlaygroundNodes/ServerPlaygroundNodes.js +65 -0
- package/build/nodes/TweetNode/ServerTweetNode.d.ts +20 -0
- package/build/nodes/TweetNode/ServerTweetNode.d.ts.map +1 -0
- package/build/nodes/TweetNode/ServerTweetNode.js +59 -0
- package/build/nodes/TweetNode/TweetNode.d.ts.map +1 -0
- package/build/nodes/YouTubeNode/ServerYouTubeNode.d.ts +21 -0
- package/build/nodes/YouTubeNode/ServerYouTubeNode.d.ts.map +1 -0
- package/build/nodes/YouTubeNode/ServerYouTubeNode.js +67 -0
- package/build/nodes/YouTubeNode/YouTubeNode.d.ts.map +1 -0
- package/build/plugins/ActionsPlugin/index.d.ts +0 -7
- package/build/plugins/ActionsPlugin/index.d.ts.map +1 -1
- package/build/plugins/ActionsPlugin/index.js +2 -1
- package/build/plugins/AutoEmbedPlugin/index.d.ts +2 -9
- package/build/plugins/AutoEmbedPlugin/index.d.ts.map +1 -1
- package/build/plugins/AutoEmbedPlugin/index.js +30 -29
- package/build/plugins/AutoLinkPlugin/index.d.ts +1 -1
- package/build/plugins/AutoLinkPlugin/index.d.ts.map +1 -1
- package/build/plugins/AutoLinkPlugin/index.js +3 -2
- package/build/plugins/CodeActionMenuPlugin/components/CopyButton/index.d.ts +1 -1
- package/build/plugins/CodeActionMenuPlugin/components/CopyButton/index.d.ts.map +1 -1
- package/build/plugins/CodeActionMenuPlugin/components/CopyButton/index.js +7 -6
- package/build/plugins/CodeActionMenuPlugin/components/PrettierButton/index.d.ts +2 -2
- package/build/plugins/CodeActionMenuPlugin/components/PrettierButton/index.d.ts.map +1 -1
- package/build/plugins/CodeActionMenuPlugin/components/PrettierButton/index.js +25 -24
- package/build/plugins/CodeActionMenuPlugin/index.d.ts +2 -9
- package/build/plugins/CodeActionMenuPlugin/index.d.ts.map +1 -1
- package/build/plugins/CodeActionMenuPlugin/index.js +22 -20
- package/build/plugins/CodeActionMenuPlugin/utils.d.ts.map +1 -1
- package/build/plugins/CodeActionMenuPlugin/utils.js +3 -2
- package/build/plugins/CodeHighlightPrismPlugin/index.d.ts +1 -1
- package/build/plugins/CodeHighlightPrismPlugin/index.d.ts.map +1 -1
- package/build/plugins/CodeHighlightPrismPlugin/index.js +4 -10
- package/build/plugins/CodeHighlightShikiPlugin/index.d.ts +1 -1
- package/build/plugins/CodeHighlightShikiPlugin/index.d.ts.map +1 -1
- package/build/plugins/CodeHighlightShikiPlugin/index.js +3 -3
- package/build/plugins/CollapsiblePlugin/Collapsible.css +17 -1
- package/build/plugins/CollapsiblePlugin/index.d.ts +1 -1
- package/build/plugins/CollapsiblePlugin/index.d.ts.map +1 -1
- package/build/plugins/CollapsiblePlugin/index.js +11 -10
- package/build/plugins/ComponentPickerPlugin/index.d.ts.map +1 -1
- package/build/plugins/ComponentPickerPlugin/index.js +3 -8
- package/build/plugins/ContextMenuPlugin/index.d.ts +1 -1
- package/build/plugins/ContextMenuPlugin/index.d.ts.map +1 -1
- package/build/plugins/ContextMenuPlugin/index.js +15 -14
- package/build/plugins/DateTimePlugin/index.d.ts +2 -2
- package/build/plugins/DateTimePlugin/index.d.ts.map +1 -1
- package/build/plugins/DateTimePlugin/index.js +8 -14
- package/build/plugins/DragDropPastePlugin/index.d.ts +0 -7
- package/build/plugins/DragDropPastePlugin/index.d.ts.map +1 -1
- package/build/plugins/DragDropPastePlugin/index.js +12 -11
- package/build/plugins/DraggableBlockPlugin/index.css +6 -0
- package/build/plugins/DraggableBlockPlugin/index.d.ts +2 -2
- package/build/plugins/DraggableBlockPlugin/index.d.ts.map +1 -1
- package/build/plugins/DraggableBlockPlugin/index.js +23 -22
- package/build/plugins/EmojiPickerPlugin/index.d.ts +0 -7
- package/build/plugins/EmojiPickerPlugin/index.d.ts.map +1 -1
- package/build/plugins/EmojiPickerPlugin/index.js +1 -0
- package/build/plugins/EmojisPlugin/index.d.ts +1 -8
- package/build/plugins/EmojisPlugin/index.d.ts.map +1 -1
- package/build/plugins/EmojisPlugin/index.js +10 -16
- package/build/plugins/EquationsPlugin/index.d.ts +3 -3
- package/build/plugins/EquationsPlugin/index.d.ts.map +1 -1
- package/build/plugins/EquationsPlugin/index.js +14 -10
- package/build/plugins/FigmaPlugin/index.d.ts +2 -2
- package/build/plugins/FigmaPlugin/index.d.ts.map +1 -1
- package/build/plugins/FigmaPlugin/index.js +8 -14
- package/build/plugins/FloatingLinkEditorPlugin/index.css +11 -0
- package/build/plugins/FloatingLinkEditorPlugin/index.d.ts +3 -3
- package/build/plugins/FloatingLinkEditorPlugin/index.d.ts.map +1 -1
- package/build/plugins/FloatingLinkEditorPlugin/index.js +28 -27
- package/build/plugins/FloatingTextFormatToolbarPlugin/index.css +15 -0
- package/build/plugins/FloatingTextFormatToolbarPlugin/index.d.ts.map +1 -1
- package/build/plugins/FloatingTextFormatToolbarPlugin/index.js +2 -1
- package/build/plugins/ImagesPlugin/index.d.ts +3 -3
- package/build/plugins/ImagesPlugin/index.d.ts.map +1 -1
- package/build/plugins/ImagesPlugin/index.js +38 -37
- package/build/plugins/KeywordsPlugin/index.d.ts +1 -8
- package/build/plugins/KeywordsPlugin/index.d.ts.map +1 -1
- package/build/plugins/KeywordsPlugin/index.js +6 -12
- package/build/plugins/LayoutPlugin/InsertLayoutDialog.d.ts +2 -2
- package/build/plugins/LayoutPlugin/InsertLayoutDialog.d.ts.map +1 -1
- package/build/plugins/LayoutPlugin/InsertLayoutDialog.js +10 -9
- package/build/plugins/LayoutPlugin/LayoutPlugin.d.ts +1 -1
- package/build/plugins/LayoutPlugin/LayoutPlugin.d.ts.map +1 -1
- package/build/plugins/LayoutPlugin/LayoutPlugin.js +8 -14
- package/build/plugins/LinkPlugin/index.d.ts.map +1 -1
- package/build/plugins/LinkPlugin/index.js +1 -0
- package/build/plugins/MarkdownShortcutPlugin/index.d.ts.map +1 -1
- package/build/plugins/MarkdownShortcutPlugin/index.js +1 -0
- package/build/plugins/MarkdownTransformers/index.d.ts +1 -1
- package/build/plugins/MarkdownTransformers/index.d.ts.map +1 -1
- package/build/plugins/MarkdownTransformers/index.js +25 -25
- package/build/plugins/PasteLogPlugin/index.d.ts.map +1 -1
- package/build/plugins/PasteLogPlugin/index.js +1 -0
- package/build/plugins/ShortcutsPlugin/index.d.ts +0 -7
- package/build/plugins/ShortcutsPlugin/index.d.ts.map +1 -1
- package/build/plugins/ShortcutsPlugin/index.js +1 -0
- package/build/plugins/SpeechToTextPlugin/index.d.ts +2 -2
- package/build/plugins/SpeechToTextPlugin/index.d.ts.map +1 -1
- package/build/plugins/SpeechToTextPlugin/index.js +7 -11
- package/build/plugins/TabFocusPlugin/index.d.ts +0 -7
- package/build/plugins/TabFocusPlugin/index.d.ts.map +1 -1
- package/build/plugins/TabFocusPlugin/index.js +6 -5
- package/build/plugins/TableActionMenuPlugin/index.d.ts +1 -8
- package/build/plugins/TableActionMenuPlugin/index.d.ts.map +1 -1
- package/build/plugins/TableActionMenuPlugin/index.js +41 -40
- package/build/plugins/TableCellResizer/index.d.ts +2 -2
- package/build/plugins/TableCellResizer/index.d.ts.map +1 -1
- package/build/plugins/TableCellResizer/index.js +43 -42
- package/build/plugins/TableHoverActionsPlugin/index.d.ts +1 -8
- package/build/plugins/TableHoverActionsPlugin/index.d.ts.map +1 -1
- package/build/plugins/TableHoverActionsPlugin/index.js +19 -18
- package/build/plugins/TableHoverActionsV2Plugin/index.d.ts.map +1 -1
- package/build/plugins/TableHoverActionsV2Plugin/index.js +1 -0
- package/build/plugins/TablePlugin.d.ts +2 -2
- package/build/plugins/TablePlugin.d.ts.map +1 -1
- package/build/plugins/TablePlugin.js +11 -10
- package/build/plugins/TableScrollShadowPlugin/index.d.ts +0 -7
- package/build/plugins/TableScrollShadowPlugin/index.d.ts.map +1 -1
- package/build/plugins/TableScrollShadowPlugin/index.js +9 -8
- package/build/plugins/TestRecorderPlugin/index.d.ts +1 -8
- package/build/plugins/TestRecorderPlugin/index.d.ts.map +1 -1
- package/build/plugins/TestRecorderPlugin/index.js +45 -44
- package/build/plugins/ToolbarPlugin/fontSize.d.ts +2 -2
- package/build/plugins/ToolbarPlugin/fontSize.d.ts.map +1 -1
- package/build/plugins/ToolbarPlugin/fontSize.js +19 -18
- package/build/plugins/ToolbarPlugin/index.d.ts.map +1 -1
- package/build/plugins/ToolbarPlugin/index.js +68 -60
- package/build/plugins/ToolbarPlugin/languages.d.ts +14 -0
- package/build/plugins/ToolbarPlugin/languages.d.ts.map +1 -0
- package/build/plugins/ToolbarPlugin/languages.js +185 -0
- package/build/plugins/ToolbarPlugin/utils.d.ts +2 -2
- package/build/plugins/ToolbarPlugin/utils.js +21 -21
- package/build/plugins/TwitterPlugin/index.d.ts +2 -2
- package/build/plugins/TwitterPlugin/index.d.ts.map +1 -1
- package/build/plugins/TwitterPlugin/index.js +8 -14
- package/build/plugins/YouTubePlugin/index.d.ts +2 -2
- package/build/plugins/YouTubePlugin/index.d.ts.map +1 -1
- package/build/plugins/YouTubePlugin/index.js +8 -14
- package/build/themes/PlaygroundEditorTheme.css +301 -33
- package/build/themes/ViewerTheme.css +899 -0
- package/build/{plugins/MentionsPlugin/index.d.ts → themes/ViewerTheme.d.ts} +5 -3
- package/build/themes/ViewerTheme.d.ts.map +1 -0
- package/build/themes/ViewerTheme.js +124 -0
- package/build/themes/ViewerThemeComplete.css +1043 -0
- package/build/ui/ColorPicker.d.ts +2 -2
- package/build/ui/ColorPicker.d.ts.map +1 -1
- package/build/ui/ColorPicker.js +47 -46
- package/build/ui/DropDown.d.ts.map +1 -1
- package/build/ui/DropDown.js +1 -0
- package/build/ui/FlashMessage.d.ts +3 -3
- package/build/ui/FlashMessage.d.ts.map +1 -1
- package/build/ui/FlashMessage.js +3 -2
- package/build/ui/ImageResizer.d.ts +3 -3
- package/build/ui/ImageResizer.d.ts.map +1 -1
- package/build/ui/ImageResizer.js +20 -19
- package/build/ui/KatexEquationAlterer.css +3 -1
- package/build/ui/KatexEquationAlterer.d.ts.map +1 -1
- package/build/ui/KatexEquationAlterer.js +1 -0
- package/build/ui/KatexRenderer.d.ts.map +1 -1
- package/build/ui/KatexRenderer.js +1 -0
- package/build/ui/Modal.d.ts.map +1 -1
- package/build/ui/Modal.js +1 -0
- package/build/ui/Switch.d.ts +2 -2
- package/build/ui/Switch.d.ts.map +1 -1
- package/build/ui/Switch.js +3 -2
- package/build/ui/TextInput.d.ts.map +1 -1
- package/build/ui/TextInput.js +1 -0
- package/build/utils/ServerBlockWithAlignableContents.d.ts +22 -0
- package/build/utils/ServerBlockWithAlignableContents.d.ts.map +1 -0
- package/build/utils/ServerBlockWithAlignableContents.js +6 -0
- package/build/utils/focusUtils.d.ts.map +1 -1
- package/build/utils/focusUtils.js +4 -3
- package/build/utils/getDOMRangeRect.d.ts.map +1 -1
- package/build/utils/getDOMRangeRect.js +1 -0
- package/build/utils/setFloatingElemPosition.d.ts.map +1 -1
- package/build/utils/setFloatingElemPosition.js +5 -4
- package/build/utils/swipe.d.ts +0 -7
- package/build/utils/swipe.d.ts.map +1 -1
- package/build/utils/swipe.js +5 -11
- package/build/viewer/Viewer.d.ts +18 -0
- package/build/viewer/Viewer.d.ts.map +1 -0
- package/build/viewer/Viewer.js +105 -0
- package/build/viewer/client.d.ts +18 -0
- package/build/viewer/client.d.ts.map +1 -0
- package/build/viewer/client.js +97 -0
- package/build/viewer/index.d.ts +4 -0
- package/build/viewer/index.d.ts.map +1 -0
- package/build/viewer/index.js +2 -0
- package/package.json +58 -36
- package/build/collaboration.d.ts +0 -12
- package/build/collaboration.d.ts.map +0 -1
- package/build/collaboration.js +0 -32
- package/build/nodes/FigmaNode.d.ts.map +0 -1
- package/build/nodes/PageBreakNode/index.css +0 -64
- package/build/nodes/PageBreakNode/index.d.ts +0 -25
- package/build/nodes/PageBreakNode/index.d.ts.map +0 -1
- package/build/nodes/PageBreakNode/index.js +0 -83
- package/build/nodes/PlaygroundNodes.d.ts.map +0 -1
- package/build/nodes/PollComponent.d.ts +0 -17
- package/build/nodes/PollComponent.d.ts.map +0 -1
- package/build/nodes/PollComponent.js +0 -85
- package/build/nodes/PollNode.css +0 -165
- package/build/nodes/PollNode.d.ts +0 -51
- package/build/nodes/PollNode.d.ts.map +0 -1
- package/build/nodes/PollNode.js +0 -153
- package/build/nodes/StickyComponent.d.ts +0 -18
- package/build/nodes/StickyComponent.d.ts.map +0 -1
- package/build/nodes/StickyComponent.js +0 -155
- package/build/nodes/StickyNode.css +0 -37
- package/build/nodes/StickyNode.d.ts +0 -39
- package/build/nodes/StickyNode.d.ts.map +0 -1
- package/build/nodes/StickyNode.js +0 -66
- package/build/nodes/TweetNode.d.ts.map +0 -1
- package/build/nodes/YouTubeNode.d.ts.map +0 -1
- package/build/plugins/DocsPlugin/index.d.ts +0 -10
- package/build/plugins/DocsPlugin/index.d.ts.map +0 -1
- package/build/plugins/DocsPlugin/index.js +0 -4
- package/build/plugins/MaxLengthPlugin/index.d.ts +0 -11
- package/build/plugins/MaxLengthPlugin/index.d.ts.map +0 -1
- package/build/plugins/MaxLengthPlugin/index.js +0 -44
- package/build/plugins/MentionsPlugin/index.d.ts.map +0 -1
- package/build/plugins/MentionsPlugin/index.js +0 -562
- package/build/plugins/PageBreakPlugin/index.d.ts +0 -12
- package/build/plugins/PageBreakPlugin/index.d.ts.map +0 -1
- package/build/plugins/PageBreakPlugin/index.js +0 -34
- package/build/plugins/StickyPlugin/index.d.ts +0 -10
- package/build/plugins/StickyPlugin/index.d.ts.map +0 -1
- package/build/plugins/StickyPlugin/index.js +0 -19
- package/build/plugins/TreeViewPlugin/index.d.ts +0 -10
- package/build/plugins/TreeViewPlugin/index.d.ts.map +0 -1
- package/build/plugins/TreeViewPlugin/index.js +0 -7
- package/build/plugins/TypingPerfPlugin/index.d.ts +0 -10
- package/build/plugins/TypingPerfPlugin/index.d.ts.map +0 -1
- package/build/plugins/TypingPerfPlugin/index.js +0 -100
- package/build/plugins/VersionsPlugin/index.css +0 -57
- package/build/plugins/VersionsPlugin/index.d.ts +0 -14
- package/build/plugins/VersionsPlugin/index.d.ts.map +0 -1
- package/build/plugins/VersionsPlugin/index.js +0 -147
- /package/build/nodes/{FigmaNode.d.ts → FigmaNode/FigmaNode.d.ts} +0 -0
- /package/build/nodes/{FigmaNode.js → FigmaNode/FigmaNode.js} +0 -0
- /package/build/nodes/{PlaygroundNodes.d.ts → PlaygroundNodes/PlaygroundNodes.d.ts} +0 -0
- /package/build/nodes/{TweetNode.d.ts → TweetNode/TweetNode.d.ts} +0 -0
- /package/build/nodes/{TweetNode.js → TweetNode/TweetNode.js} +0 -0
- /package/build/nodes/{YouTubeNode.d.ts → YouTubeNode/YouTubeNode.d.ts} +0 -0
- /package/build/nodes/{YouTubeNode.js → YouTubeNode/YouTubeNode.js} +0 -0
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { useLexicalComposerContext } from
|
|
3
|
-
import { useLexicalEditable } from
|
|
4
|
-
import { $computeTableMapSkipCellCheck, $deleteTableColumnAtSelection, $deleteTableRowAtSelection, $getNodeTriplet, $getTableCellNodeFromLexicalNode, $getTableColumnIndexFromTableCellNode, $getTableNodeFromLexicalNodeOrThrow, $getTableRowIndexFromTableCellNode, $insertTableColumnAtSelection, $insertTableRowAtSelection, $isTableCellNode, $isTableSelection, $mergeCells, $unmergeCell, getTableElement, getTableObserverFromTableElement, TableCellHeaderStates, TableCellNode, } from
|
|
5
|
-
import { mergeRegister } from
|
|
6
|
-
import { $getSelection, $isElementNode, $isRangeSelection, $isTextNode, $setSelection, COMMAND_PRIORITY_CRITICAL, getDOMSelection, isDOMNode, SELECTION_CHANGE_COMMAND, } from
|
|
7
|
-
import { useCallback, useEffect, useRef, useState } from
|
|
8
|
-
import { createPortal } from
|
|
9
|
-
import useModal from
|
|
10
|
-
import ColorPicker from
|
|
11
|
-
import DropDown, { DropDownItem } from
|
|
3
|
+
import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
|
|
4
|
+
import { useLexicalEditable } from "@lexical/react/useLexicalEditable";
|
|
5
|
+
import { $computeTableMapSkipCellCheck, $deleteTableColumnAtSelection, $deleteTableRowAtSelection, $getNodeTriplet, $getTableCellNodeFromLexicalNode, $getTableColumnIndexFromTableCellNode, $getTableNodeFromLexicalNodeOrThrow, $getTableRowIndexFromTableCellNode, $insertTableColumnAtSelection, $insertTableRowAtSelection, $isTableCellNode, $isTableSelection, $mergeCells, $unmergeCell, getTableElement, getTableObserverFromTableElement, TableCellHeaderStates, TableCellNode, } from "@lexical/table";
|
|
6
|
+
import { mergeRegister } from "@lexical/utils";
|
|
7
|
+
import { $getSelection, $isElementNode, $isRangeSelection, $isTextNode, $setSelection, COMMAND_PRIORITY_CRITICAL, getDOMSelection, isDOMNode, SELECTION_CHANGE_COMMAND, } from "lexical";
|
|
8
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
9
|
+
import { createPortal } from "react-dom";
|
|
10
|
+
import useModal from "../../hooks/useModal";
|
|
11
|
+
import ColorPicker from "../../ui/ColorPicker";
|
|
12
|
+
import DropDown, { DropDownItem } from "../../ui/DropDown";
|
|
12
13
|
function computeSelectionCount(selection) {
|
|
13
14
|
const selectionShape = selection.getShape();
|
|
14
15
|
return {
|
|
@@ -60,15 +61,15 @@ function TableActionMenu({ onClose, tableCellNode: _tableCellNode, setIsMenuOpen
|
|
|
60
61
|
});
|
|
61
62
|
const [canMergeCells, setCanMergeCells] = useState(false);
|
|
62
63
|
const [canUnmergeCell, setCanUnmergeCell] = useState(false);
|
|
63
|
-
const [backgroundColor, setBackgroundColor] = useState(() => currentCellBackgroundColor(editor) ||
|
|
64
|
+
const [backgroundColor, setBackgroundColor] = useState(() => currentCellBackgroundColor(editor) || "");
|
|
64
65
|
useEffect(() => {
|
|
65
66
|
return editor.registerMutationListener(TableCellNode, (nodeMutations) => {
|
|
66
|
-
const nodeUpdated = nodeMutations.get(tableCellNode.getKey()) ===
|
|
67
|
+
const nodeUpdated = nodeMutations.get(tableCellNode.getKey()) === "updated";
|
|
67
68
|
if (nodeUpdated) {
|
|
68
69
|
editor.getEditorState().read(() => {
|
|
69
70
|
updateTableCellNode(tableCellNode.getLatest());
|
|
70
71
|
});
|
|
71
|
-
setBackgroundColor(currentCellBackgroundColor(editor) ||
|
|
72
|
+
setBackgroundColor(currentCellBackgroundColor(editor) || "");
|
|
72
73
|
}
|
|
73
74
|
}, { skipInitialization: true });
|
|
74
75
|
}, [editor, tableCellNode]);
|
|
@@ -94,7 +95,7 @@ function TableActionMenu({ onClose, tableCellNode: _tableCellNode, setIsMenuOpen
|
|
|
94
95
|
rootElement != null) {
|
|
95
96
|
const rootEleRect = rootElement.getBoundingClientRect();
|
|
96
97
|
const menuButtonRect = menuButtonElement.getBoundingClientRect();
|
|
97
|
-
dropDownElement.style.opacity =
|
|
98
|
+
dropDownElement.style.opacity = "1";
|
|
98
99
|
const dropDownElementRect = dropDownElement.getBoundingClientRect();
|
|
99
100
|
const margin = 5;
|
|
100
101
|
let leftPosition = menuButtonRect.right + margin;
|
|
@@ -122,8 +123,8 @@ function TableActionMenu({ onClose, tableCellNode: _tableCellNode, setIsMenuOpen
|
|
|
122
123
|
setIsMenuOpen(false);
|
|
123
124
|
}
|
|
124
125
|
}
|
|
125
|
-
window.addEventListener(
|
|
126
|
-
return () => window.removeEventListener(
|
|
126
|
+
window.addEventListener("click", handleClickOutside);
|
|
127
|
+
return () => window.removeEventListener("click", handleClickOutside);
|
|
127
128
|
}, [setIsMenuOpen, contextRef]);
|
|
128
129
|
const clearTableSelection = useCallback(() => {
|
|
129
130
|
editor.update(() => {
|
|
@@ -131,7 +132,7 @@ function TableActionMenu({ onClose, tableCellNode: _tableCellNode, setIsMenuOpen
|
|
|
131
132
|
const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);
|
|
132
133
|
const tableElement = getTableElement(tableNode, editor.getElementByKey(tableNode.getKey()));
|
|
133
134
|
if (tableElement === null) {
|
|
134
|
-
throw new Error(
|
|
135
|
+
throw new Error("TableActionMenu: Expected to find tableElement in DOM");
|
|
135
136
|
}
|
|
136
137
|
const tableObserver = getTableObserverFromTableElement(tableElement);
|
|
137
138
|
if (tableObserver !== null) {
|
|
@@ -330,23 +331,23 @@ function TableActionMenu({ onClose, tableCellNode: _tableCellNode, setIsMenuOpen
|
|
|
330
331
|
// eslint-disable-next-line jsx-a11y/no-static-element-interactions
|
|
331
332
|
_jsxs("div", { className: "dropdown", ref: dropDownRef, onClick: (e) => {
|
|
332
333
|
e.stopPropagation();
|
|
333
|
-
}, children: [mergeCellButton, _jsx("button", { type: "button", className: "item", onClick: () => showColorPickerModal(
|
|
334
|
-
formatVerticalAlign(
|
|
334
|
+
}, children: [mergeCellButton, _jsx("button", { type: "button", className: "item", onClick: () => showColorPickerModal("Cell background color", () => (_jsx(ColorPicker, { color: backgroundColor, onChange: handleCellBackgroundColor }))), "data-test-id": "table-background-color", children: _jsx("span", { className: "text", children: "Background color" }) }), _jsx("button", { type: "button", className: "item", onClick: () => toggleRowStriping(), "data-test-id": "table-row-striping", children: _jsx("span", { className: "text", children: "Toggle Row Striping" }) }), _jsxs(DropDown, { buttonLabel: "Vertical Align", buttonClassName: "item", buttonAriaLabel: "Formatting options for vertical alignment", children: [_jsx(DropDownItem, { onClick: () => {
|
|
335
|
+
formatVerticalAlign("top");
|
|
335
336
|
}, className: "item wide", children: _jsxs("div", { className: "icon-text-container", children: [_jsx("i", { className: "icon vertical-top" }), _jsx("span", { className: "text", children: "Top Align" })] }) }), _jsx(DropDownItem, { onClick: () => {
|
|
336
|
-
formatVerticalAlign(
|
|
337
|
+
formatVerticalAlign("middle");
|
|
337
338
|
}, className: "item wide", children: _jsxs("div", { className: "icon-text-container", children: [_jsx("i", { className: "icon vertical-middle" }), _jsx("span", { className: "text", children: "Middle Align" })] }) }), _jsx(DropDownItem, { onClick: () => {
|
|
338
|
-
formatVerticalAlign(
|
|
339
|
-
}, className: "item wide", children: _jsxs("div", { className: "icon-text-container", children: [_jsx("i", { className: "icon vertical-bottom" }), _jsx("span", { className: "text", children: "Bottom Align" })] }) })] }), _jsx("button", { type: "button", className: "item", onClick: () => toggleFirstRowFreeze(), "data-test-id": "table-freeze-first-row", children: _jsx("span", { className: "text", children: "Toggle First Row Freeze" }) }), _jsx("button", { type: "button", className: "item", onClick: () => toggleFirstColumnFreeze(), "data-test-id": "table-freeze-first-column", children: _jsx("span", { className: "text", children: "Toggle First Column Freeze" }) }), _jsx("hr", {}), _jsx("button", { type: "button", className: "item", onClick: () => insertTableRowAtSelection(false), "data-test-id": "table-insert-row-above", children: _jsxs("span", { className: "text", children: ["Insert",
|
|
340
|
-
?
|
|
341
|
-
: `${selectionCounts.columns} columns`,
|
|
342
|
-
?
|
|
343
|
-
: `${selectionCounts.columns} columns`,
|
|
339
|
+
formatVerticalAlign("bottom");
|
|
340
|
+
}, className: "item wide", children: _jsxs("div", { className: "icon-text-container", children: [_jsx("i", { className: "icon vertical-bottom" }), _jsx("span", { className: "text", children: "Bottom Align" })] }) })] }), _jsx("button", { type: "button", className: "item", onClick: () => toggleFirstRowFreeze(), "data-test-id": "table-freeze-first-row", children: _jsx("span", { className: "text", children: "Toggle First Row Freeze" }) }), _jsx("button", { type: "button", className: "item", onClick: () => toggleFirstColumnFreeze(), "data-test-id": "table-freeze-first-column", children: _jsx("span", { className: "text", children: "Toggle First Column Freeze" }) }), _jsx("hr", {}), _jsx("button", { type: "button", className: "item", onClick: () => insertTableRowAtSelection(false), "data-test-id": "table-insert-row-above", children: _jsxs("span", { className: "text", children: ["Insert", " ", selectionCounts.rows === 1 ? "row" : `${selectionCounts.rows} rows`, " ", "above"] }) }), _jsx("button", { type: "button", className: "item", onClick: () => insertTableRowAtSelection(true), "data-test-id": "table-insert-row-below", children: _jsxs("span", { className: "text", children: ["Insert", " ", selectionCounts.rows === 1 ? "row" : `${selectionCounts.rows} rows`, " ", "below"] }) }), _jsx("hr", {}), _jsx("button", { type: "button", className: "item", onClick: () => insertTableColumnAtSelection(false), "data-test-id": "table-insert-column-before", children: _jsxs("span", { className: "text", children: ["Insert", " ", selectionCounts.columns === 1
|
|
341
|
+
? "column"
|
|
342
|
+
: `${selectionCounts.columns} columns`, " ", "left"] }) }), _jsx("button", { type: "button", className: "item", onClick: () => insertTableColumnAtSelection(true), "data-test-id": "table-insert-column-after", children: _jsxs("span", { className: "text", children: ["Insert", " ", selectionCounts.columns === 1
|
|
343
|
+
? "column"
|
|
344
|
+
: `${selectionCounts.columns} columns`, " ", "right"] }) }), _jsx("hr", {}), _jsx("button", { type: "button", className: "item", onClick: () => deleteTableColumnAtSelection(), "data-test-id": "table-delete-columns", children: _jsx("span", { className: "text", children: "Delete column" }) }), _jsx("button", { type: "button", className: "item", onClick: () => deleteTableRowAtSelection(), "data-test-id": "table-delete-rows", children: _jsx("span", { className: "text", children: "Delete row" }) }), _jsx("button", { type: "button", className: "item", onClick: () => deleteTableAtSelection(), "data-test-id": "table-delete", children: _jsx("span", { className: "text", children: "Delete table" }) }), _jsx("hr", {}), _jsx("button", { type: "button", className: "item", onClick: () => toggleTableRowIsHeader(), "data-test-id": "table-row-header", children: _jsxs("span", { className: "text", children: [(tableCellNode.__headerState & TableCellHeaderStates.ROW) ===
|
|
344
345
|
TableCellHeaderStates.ROW
|
|
345
|
-
?
|
|
346
|
-
:
|
|
346
|
+
? "Remove"
|
|
347
|
+
: "Add", " ", "row header"] }) }), _jsx("button", { type: "button", className: "item", onClick: () => toggleTableColumnIsHeader(), "data-test-id": "table-column-header", children: _jsxs("span", { className: "text", children: [(tableCellNode.__headerState & TableCellHeaderStates.COLUMN) ===
|
|
347
348
|
TableCellHeaderStates.COLUMN
|
|
348
|
-
?
|
|
349
|
-
:
|
|
349
|
+
? "Remove"
|
|
350
|
+
: "Add", " ", "column header"] }) })] }), document.body);
|
|
350
351
|
}
|
|
351
352
|
function TableCellActionMenuContainer({ anchorElem, cellMerge, }) {
|
|
352
353
|
const [editor] = useLexicalComposerContext();
|
|
@@ -356,7 +357,7 @@ function TableCellActionMenuContainer({ anchorElem, cellMerge, }) {
|
|
|
356
357
|
const [tableCellNode, setTableMenuCellNode] = useState(null);
|
|
357
358
|
const [colorPickerModal, showColorPickerModal] = useModal();
|
|
358
359
|
const checkTableCellOverflow = useCallback((tableCellParentNodeDOM) => {
|
|
359
|
-
const scrollableContainer = tableCellParentNodeDOM.closest(
|
|
360
|
+
const scrollableContainer = tableCellParentNodeDOM.closest(".PlaygroundEditorTheme__tableScrollableWrapper");
|
|
360
361
|
if (scrollableContainer) {
|
|
361
362
|
const containerRect = scrollableContainer.getBoundingClientRect();
|
|
362
363
|
const cellRect = tableCellParentNodeDOM.getBoundingClientRect();
|
|
@@ -379,8 +380,8 @@ function TableCellActionMenuContainer({ anchorElem, cellMerge, }) {
|
|
|
379
380
|
const activeElement = document.activeElement;
|
|
380
381
|
function disable() {
|
|
381
382
|
if (menu) {
|
|
382
|
-
menu.classList.remove(
|
|
383
|
-
menu.classList.add(
|
|
383
|
+
menu.classList.remove("table-cell-action-button-container--active");
|
|
384
|
+
menu.classList.add("table-cell-action-button-container--inactive");
|
|
384
385
|
}
|
|
385
386
|
setTableMenuCellNode(null);
|
|
386
387
|
}
|
|
@@ -409,7 +410,7 @@ function TableCellActionMenuContainer({ anchorElem, cellMerge, }) {
|
|
|
409
410
|
const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNodeFromSelection);
|
|
410
411
|
const tableElement = getTableElement(tableNode, editor.getElementByKey(tableNode.getKey()));
|
|
411
412
|
if (tableElement === null) {
|
|
412
|
-
throw new Error(
|
|
413
|
+
throw new Error("TableActionMenu: Expected to find tableElement in DOM");
|
|
413
414
|
}
|
|
414
415
|
tableObserver = getTableObserverFromTableElement(tableElement);
|
|
415
416
|
setTableMenuCellNode(tableCellNodeFromSelection);
|
|
@@ -417,12 +418,12 @@ function TableCellActionMenuContainer({ anchorElem, cellMerge, }) {
|
|
|
417
418
|
else if ($isTableSelection(selection)) {
|
|
418
419
|
const anchorNode = $getTableCellNodeFromLexicalNode(selection.anchor.getNode());
|
|
419
420
|
if (!$isTableCellNode(anchorNode)) {
|
|
420
|
-
throw new Error(
|
|
421
|
+
throw new Error("TableSelection anchorNode must be a TableCellNode");
|
|
421
422
|
}
|
|
422
423
|
const tableNode = $getTableNodeFromLexicalNodeOrThrow(anchorNode);
|
|
423
424
|
const tableElement = getTableElement(tableNode, editor.getElementByKey(tableNode.getKey()));
|
|
424
425
|
if (tableElement === null) {
|
|
425
|
-
throw new Error(
|
|
426
|
+
throw new Error("TableActionMenu: Expected to find tableElement in DOM");
|
|
426
427
|
}
|
|
427
428
|
tableObserver = getTableObserverFromTableElement(tableElement);
|
|
428
429
|
tableCellParentNodeDOM = editor.getElementByKey(anchorNode.getKey());
|
|
@@ -440,8 +441,8 @@ function TableCellActionMenuContainer({ anchorElem, cellMerge, }) {
|
|
|
440
441
|
return disable();
|
|
441
442
|
}
|
|
442
443
|
const enabled = !tableObserver || !tableObserver.isSelecting;
|
|
443
|
-
menu.classList.toggle(
|
|
444
|
-
menu.classList.toggle(
|
|
444
|
+
menu.classList.toggle("table-cell-action-button-container--active", enabled);
|
|
445
|
+
menu.classList.toggle("table-cell-action-button-container--inactive", !enabled);
|
|
445
446
|
if (enabled) {
|
|
446
447
|
const tableCellRect = tableCellParentNodeDOM.getBoundingClientRect();
|
|
447
448
|
const anchorRect = anchorElem.getBoundingClientRect();
|
|
@@ -466,10 +467,10 @@ function TableCellActionMenuContainer({ anchorElem, cellMerge, }) {
|
|
|
466
467
|
};
|
|
467
468
|
return mergeRegister(editor.registerUpdateListener(delayedCallback), editor.registerCommand(SELECTION_CHANGE_COMMAND, delayedCallback, COMMAND_PRIORITY_CRITICAL), editor.registerRootListener((rootElement, prevRootElement) => {
|
|
468
469
|
if (prevRootElement) {
|
|
469
|
-
prevRootElement.removeEventListener(
|
|
470
|
+
prevRootElement.removeEventListener("pointerup", delayedCallback);
|
|
470
471
|
}
|
|
471
472
|
if (rootElement) {
|
|
472
|
-
rootElement.addEventListener(
|
|
473
|
+
rootElement.addEventListener("pointerup", delayedCallback);
|
|
473
474
|
delayedCallback();
|
|
474
475
|
}
|
|
475
476
|
}), () => clearTimeout(timeoutId));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/TableCellResizer/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/TableCellResizer/index.tsx"],"names":[],"mappings":"AAaA,OAAO,aAAa,CAAC;AAoBrB,OAAO,EAGL,WAAW,EAMZ,MAAM,OAAO,CAAC;AAocf,MAAM,CAAC,OAAO,UAAU,sBAAsB,IAAI,IAAI,GAAG,WAAW,CAWnE"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import
|
|
3
|
-
import { useLexicalComposerContext } from
|
|
4
|
-
import { useLexicalEditable } from
|
|
5
|
-
import { $computeTableMapSkipCellCheck, $getTableNodeFromLexicalNodeOrThrow, $getTableRowIndexFromTableCellNode, $isTableCellNode, $isTableRowNode, getDOMCellFromTarget, getTableElement, TableNode, } from
|
|
6
|
-
import { calculateZoomLevel, mergeRegister } from
|
|
7
|
-
import { $getNearestNodeFromDOMNode, isHTMLElement, SKIP_SCROLL_INTO_VIEW_TAG, } from
|
|
8
|
-
import { useCallback, useEffect, useMemo, useRef, useState, } from
|
|
9
|
-
import { createPortal } from
|
|
3
|
+
import "./index.css";
|
|
4
|
+
import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
|
|
5
|
+
import { useLexicalEditable } from "@lexical/react/useLexicalEditable";
|
|
6
|
+
import { $computeTableMapSkipCellCheck, $getTableNodeFromLexicalNodeOrThrow, $getTableRowIndexFromTableCellNode, $isTableCellNode, $isTableRowNode, getDOMCellFromTarget, getTableElement, TableNode, } from "@lexical/table";
|
|
7
|
+
import { calculateZoomLevel, mergeRegister } from "@lexical/utils";
|
|
8
|
+
import { $getNearestNodeFromDOMNode, isHTMLElement, SKIP_SCROLL_INTO_VIEW_TAG, } from "lexical";
|
|
9
|
+
import { useCallback, useEffect, useMemo, useRef, useState, } from "react";
|
|
10
|
+
import { createPortal } from "react-dom";
|
|
10
11
|
const MIN_ROW_HEIGHT = 33;
|
|
11
12
|
const MIN_COLUMN_WIDTH = 92;
|
|
12
|
-
const ACTIVE_RESIZER_COLOR =
|
|
13
|
+
const ACTIVE_RESIZER_COLOR = "#76b6ff";
|
|
13
14
|
function TableCellResizer({ editor }) {
|
|
14
15
|
const targetRef = useRef(null);
|
|
15
16
|
const resizerRef = useRef(null);
|
|
@@ -32,7 +33,7 @@ function TableCellResizer({ editor }) {
|
|
|
32
33
|
const tableKeys = new Set();
|
|
33
34
|
return mergeRegister(editor.registerMutationListener(TableNode, (nodeMutations) => {
|
|
34
35
|
for (const [nodeKey, mutation] of nodeMutations) {
|
|
35
|
-
if (mutation ===
|
|
36
|
+
if (mutation === "destroyed") {
|
|
36
37
|
tableKeys.delete(nodeKey);
|
|
37
38
|
}
|
|
38
39
|
else {
|
|
@@ -78,12 +79,12 @@ function TableCellResizer({ editor }) {
|
|
|
78
79
|
editor.getEditorState().read(() => {
|
|
79
80
|
const tableCellNode = $getNearestNodeFromDOMNode(cell.elem);
|
|
80
81
|
if (!tableCellNode) {
|
|
81
|
-
throw new Error(
|
|
82
|
+
throw new Error("TableCellResizer: Table cell node not found.");
|
|
82
83
|
}
|
|
83
84
|
const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);
|
|
84
85
|
const tableElement = getTableElement(tableNode, editor.getElementByKey(tableNode.getKey()));
|
|
85
86
|
if (!tableElement) {
|
|
86
|
-
throw new Error(
|
|
87
|
+
throw new Error("TableCellResizer: Table element not found.");
|
|
87
88
|
}
|
|
88
89
|
targetRef.current = target;
|
|
89
90
|
tableRectRef.current = tableElement.getBoundingClientRect();
|
|
@@ -96,40 +97,40 @@ function TableCellResizer({ editor }) {
|
|
|
96
97
|
}
|
|
97
98
|
};
|
|
98
99
|
const onPointerDown = (event) => {
|
|
99
|
-
const isTouchEvent = event.pointerType ===
|
|
100
|
+
const isTouchEvent = event.pointerType === "touch";
|
|
100
101
|
if (isTouchEvent) {
|
|
101
102
|
onPointerMove(event);
|
|
102
103
|
}
|
|
103
104
|
};
|
|
104
105
|
const resizerContainer = resizerRef.current;
|
|
105
|
-
resizerContainer === null || resizerContainer === void 0 ? void 0 : resizerContainer.addEventListener(
|
|
106
|
+
resizerContainer === null || resizerContainer === void 0 ? void 0 : resizerContainer.addEventListener("pointermove", onPointerMove, {
|
|
106
107
|
capture: true,
|
|
107
108
|
});
|
|
108
109
|
const removeRootListener = editor.registerRootListener((rootElement, prevRootElement) => {
|
|
109
|
-
prevRootElement === null || prevRootElement === void 0 ? void 0 : prevRootElement.removeEventListener(
|
|
110
|
-
prevRootElement === null || prevRootElement === void 0 ? void 0 : prevRootElement.removeEventListener(
|
|
111
|
-
rootElement === null || rootElement === void 0 ? void 0 : rootElement.addEventListener(
|
|
112
|
-
rootElement === null || rootElement === void 0 ? void 0 : rootElement.addEventListener(
|
|
110
|
+
prevRootElement === null || prevRootElement === void 0 ? void 0 : prevRootElement.removeEventListener("pointermove", onPointerMove);
|
|
111
|
+
prevRootElement === null || prevRootElement === void 0 ? void 0 : prevRootElement.removeEventListener("pointerdown", onPointerDown);
|
|
112
|
+
rootElement === null || rootElement === void 0 ? void 0 : rootElement.addEventListener("pointermove", onPointerMove);
|
|
113
|
+
rootElement === null || rootElement === void 0 ? void 0 : rootElement.addEventListener("pointerdown", onPointerDown);
|
|
113
114
|
});
|
|
114
115
|
return () => {
|
|
115
116
|
removeRootListener();
|
|
116
|
-
resizerContainer === null || resizerContainer === void 0 ? void 0 : resizerContainer.removeEventListener(
|
|
117
|
+
resizerContainer === null || resizerContainer === void 0 ? void 0 : resizerContainer.removeEventListener("pointermove", onPointerMove);
|
|
117
118
|
};
|
|
118
119
|
}, [activeCell, draggingDirection, editor, resetState, hasTable]);
|
|
119
120
|
const isHeightChanging = (direction) => {
|
|
120
|
-
if (direction ===
|
|
121
|
+
if (direction === "bottom") {
|
|
121
122
|
return true;
|
|
122
123
|
}
|
|
123
124
|
return false;
|
|
124
125
|
};
|
|
125
126
|
const updateRowHeight = useCallback((heightChange) => {
|
|
126
127
|
if (!activeCell) {
|
|
127
|
-
throw new Error(
|
|
128
|
+
throw new Error("TableCellResizer: Expected active cell.");
|
|
128
129
|
}
|
|
129
130
|
editor.update(() => {
|
|
130
131
|
const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem);
|
|
131
132
|
if (!$isTableCellNode(tableCellNode)) {
|
|
132
|
-
throw new Error(
|
|
133
|
+
throw new Error("TableCellResizer: Table cell node not found.");
|
|
133
134
|
}
|
|
134
135
|
const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);
|
|
135
136
|
const baseRowIndex = $getTableRowIndexFromTableCellNode(tableCellNode);
|
|
@@ -141,11 +142,11 @@ function TableCellResizer({ editor }) {
|
|
|
141
142
|
? baseRowIndex
|
|
142
143
|
: baseRowIndex + tableCellNode.getRowSpan() - 1;
|
|
143
144
|
if (tableRowIndex >= tableRows.length || tableRowIndex < 0) {
|
|
144
|
-
throw new Error(
|
|
145
|
+
throw new Error("Expected table cell to be inside of table row.");
|
|
145
146
|
}
|
|
146
147
|
const tableRow = tableRows[tableRowIndex];
|
|
147
148
|
if (!$isTableRowNode(tableRow)) {
|
|
148
|
-
throw new Error(
|
|
149
|
+
throw new Error("Expected table row");
|
|
149
150
|
}
|
|
150
151
|
let height = tableRow.getHeight();
|
|
151
152
|
if (height === undefined) {
|
|
@@ -171,18 +172,18 @@ function TableCellResizer({ editor }) {
|
|
|
171
172
|
};
|
|
172
173
|
const updateColumnWidth = useCallback((widthChange) => {
|
|
173
174
|
if (!activeCell) {
|
|
174
|
-
throw new Error(
|
|
175
|
+
throw new Error("TableCellResizer: Expected active cell.");
|
|
175
176
|
}
|
|
176
177
|
editor.update(() => {
|
|
177
178
|
const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem);
|
|
178
179
|
if (!$isTableCellNode(tableCellNode)) {
|
|
179
|
-
throw new Error(
|
|
180
|
+
throw new Error("TableCellResizer: Table cell node not found.");
|
|
180
181
|
}
|
|
181
182
|
const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);
|
|
182
183
|
const [tableMap] = $computeTableMapSkipCellCheck(tableNode, null, null);
|
|
183
184
|
const columnIndex = getCellColumnIndex(tableCellNode, tableMap);
|
|
184
185
|
if (columnIndex === undefined) {
|
|
185
|
-
throw new Error(
|
|
186
|
+
throw new Error("TableCellResizer: Table column not found.");
|
|
186
187
|
}
|
|
187
188
|
const colWidths = tableNode.getColWidths();
|
|
188
189
|
if (!colWidths) {
|
|
@@ -203,7 +204,7 @@ function TableCellResizer({ editor }) {
|
|
|
203
204
|
event.preventDefault();
|
|
204
205
|
event.stopPropagation();
|
|
205
206
|
if (!activeCell) {
|
|
206
|
-
throw new Error(
|
|
207
|
+
throw new Error("TableCellResizer: Expected active cell.");
|
|
207
208
|
}
|
|
208
209
|
if (pointerStartPosRef.current) {
|
|
209
210
|
const { x, y } = pointerStartPosRef.current;
|
|
@@ -220,7 +221,7 @@ function TableCellResizer({ editor }) {
|
|
|
220
221
|
updateColumnWidth(widthChange);
|
|
221
222
|
}
|
|
222
223
|
resetState();
|
|
223
|
-
document.removeEventListener(
|
|
224
|
+
document.removeEventListener("pointerup", handler);
|
|
224
225
|
}
|
|
225
226
|
};
|
|
226
227
|
return handler;
|
|
@@ -229,7 +230,7 @@ function TableCellResizer({ editor }) {
|
|
|
229
230
|
event.preventDefault();
|
|
230
231
|
event.stopPropagation();
|
|
231
232
|
if (!activeCell) {
|
|
232
|
-
throw new Error(
|
|
233
|
+
throw new Error("TableCellResizer: Expected active cell.");
|
|
233
234
|
}
|
|
234
235
|
pointerStartPosRef.current = {
|
|
235
236
|
x: event.clientX,
|
|
@@ -237,7 +238,7 @@ function TableCellResizer({ editor }) {
|
|
|
237
238
|
};
|
|
238
239
|
updatePointerCurrentPos(pointerStartPosRef.current);
|
|
239
240
|
updateDraggingDirection(direction);
|
|
240
|
-
document.addEventListener(
|
|
241
|
+
document.addEventListener("pointerup", pointerUpHandler(direction));
|
|
241
242
|
}, [activeCell, pointerUpHandler]);
|
|
242
243
|
const getResizers = useCallback(() => {
|
|
243
244
|
if (activeCell) {
|
|
@@ -246,16 +247,16 @@ function TableCellResizer({ editor }) {
|
|
|
246
247
|
const zoneWidth = 16; // Pixel width of the zone where you can drag the edge
|
|
247
248
|
const styles = {
|
|
248
249
|
bottom: {
|
|
249
|
-
backgroundColor:
|
|
250
|
-
cursor:
|
|
250
|
+
backgroundColor: "none",
|
|
251
|
+
cursor: "row-resize",
|
|
251
252
|
height: `${zoneWidth}px`,
|
|
252
253
|
left: `${window.scrollX + left}px`,
|
|
253
254
|
top: `${window.scrollY + top + height - zoneWidth / 2}px`,
|
|
254
255
|
width: `${width}px`,
|
|
255
256
|
},
|
|
256
257
|
right: {
|
|
257
|
-
backgroundColor:
|
|
258
|
-
cursor:
|
|
258
|
+
backgroundColor: "none",
|
|
259
|
+
cursor: "col-resize",
|
|
259
260
|
height: `${height}px`,
|
|
260
261
|
left: `${window.scrollX + left + width - zoneWidth / 2}px`,
|
|
261
262
|
top: `${window.scrollY + top}px`,
|
|
@@ -267,24 +268,24 @@ function TableCellResizer({ editor }) {
|
|
|
267
268
|
if (isHeightChanging(draggingDirection)) {
|
|
268
269
|
styles[draggingDirection].left = `${window.scrollX + tableRect.left}px`;
|
|
269
270
|
styles[draggingDirection].top = `${window.scrollY + pointerCurrentPos.y / zoom}px`;
|
|
270
|
-
styles[draggingDirection].height =
|
|
271
|
+
styles[draggingDirection].height = "3px";
|
|
271
272
|
styles[draggingDirection].width = `${tableRect.width}px`;
|
|
272
273
|
}
|
|
273
274
|
else {
|
|
274
275
|
styles[draggingDirection].top = `${window.scrollY + tableRect.top}px`;
|
|
275
276
|
styles[draggingDirection].left = `${window.scrollX + pointerCurrentPos.x / zoom}px`;
|
|
276
|
-
styles[draggingDirection].width =
|
|
277
|
+
styles[draggingDirection].width = "3px";
|
|
277
278
|
styles[draggingDirection].height = `${tableRect.height}px`;
|
|
278
279
|
}
|
|
279
|
-
styles[draggingDirection].backgroundColor =
|
|
280
|
-
styles[draggingDirection].mixBlendMode =
|
|
280
|
+
styles[draggingDirection].backgroundColor = "#adf";
|
|
281
|
+
styles[draggingDirection].mixBlendMode = "unset";
|
|
281
282
|
}
|
|
282
|
-
else if (!draggingDirection && hoveredDirection ===
|
|
283
|
+
else if (!draggingDirection && hoveredDirection === "right") {
|
|
283
284
|
const halfZoneWidth = zoneWidth / 2;
|
|
284
285
|
const highlightWidth = 2;
|
|
285
286
|
const highlightStart = halfZoneWidth - highlightWidth / 2;
|
|
286
287
|
styles.right.backgroundColor = `linear-gradient(90deg, transparent ${highlightStart}px, ${ACTIVE_RESIZER_COLOR} ${highlightStart}px, ${ACTIVE_RESIZER_COLOR} ${highlightStart + highlightWidth}px, transparent ${highlightStart + highlightWidth}px)`;
|
|
287
|
-
styles.right.mixBlendMode =
|
|
288
|
+
styles.right.mixBlendMode = "unset";
|
|
288
289
|
if (tableRect) {
|
|
289
290
|
styles.right.top = `${window.scrollY + tableRect.top}px`;
|
|
290
291
|
styles.right.height = `${tableRect.height}px`;
|
|
@@ -310,7 +311,7 @@ function TableCellResizer({ editor }) {
|
|
|
310
311
|
}
|
|
311
312
|
}, [draggingDirection]);
|
|
312
313
|
const resizerStyles = getResizers();
|
|
313
|
-
return (_jsx("div", { ref: resizerRef, children: activeCell != null && (_jsxs(_Fragment, { children: [_jsx("div", { className: "TableCellResizer__resizer TableCellResizer__ui", style: resizerStyles.right || undefined, onPointerEnter: handlePointerEnter(
|
|
314
|
+
return (_jsx("div", { ref: resizerRef, children: activeCell != null && (_jsxs(_Fragment, { children: [_jsx("div", { className: "TableCellResizer__resizer TableCellResizer__ui", style: resizerStyles.right || undefined, onPointerEnter: handlePointerEnter("right"), onPointerLeave: handlePointerLeave, onPointerDown: toggleResize("right") }), _jsx("div", { className: "TableCellResizer__resizer TableCellResizer__ui", style: resizerStyles.bottom || undefined, onPointerDown: toggleResize("bottom") })] })) }));
|
|
314
315
|
}
|
|
315
316
|
export default function TableCellResizerPlugin() {
|
|
316
317
|
const [editor] = useLexicalComposerContext();
|
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the MIT license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
import * as React from 'react';
|
|
1
|
+
import * as React from "react";
|
|
9
2
|
export default function TableHoverActionsPlugin({ anchorElem, }: {
|
|
10
3
|
anchorElem?: HTMLElement;
|
|
11
4
|
}): React.ReactPortal | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/TableHoverActionsPlugin/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/TableHoverActionsPlugin/index.tsx"],"names":[],"mappings":"AAmCA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA4R/B,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,EAC9C,UAA0B,GAC3B,EAAE;IACD,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B,GAAG,KAAK,CAAC,WAAW,GAAG,IAAI,CAS3B"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useLexicalComposerContext } from
|
|
3
|
-
import { useLexicalEditable } from
|
|
4
|
-
import { $getTableAndElementByKey, $getTableColumnIndexFromTableCellNode, $getTableRowIndexFromTableCellNode, $insertTableColumnAtSelection, $insertTableRowAtSelection, $isTableCellNode, $isTableNode, getTableElement, TableNode, } from
|
|
5
|
-
import { $findMatchingParent, mergeRegister } from
|
|
6
|
-
import { $getNearestNodeFromDOMNode, isHTMLElement, } from
|
|
7
|
-
import { useEffect, useMemo, useRef, useState } from
|
|
8
|
-
import { createPortal } from
|
|
9
|
-
import { getThemeSelector } from
|
|
10
|
-
import { useDebounce } from
|
|
3
|
+
import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
|
|
4
|
+
import { useLexicalEditable } from "@lexical/react/useLexicalEditable";
|
|
5
|
+
import { $getTableAndElementByKey, $getTableColumnIndexFromTableCellNode, $getTableRowIndexFromTableCellNode, $insertTableColumnAtSelection, $insertTableRowAtSelection, $isTableCellNode, $isTableNode, getTableElement, TableNode, } from "@lexical/table";
|
|
6
|
+
import { $findMatchingParent, mergeRegister } from "@lexical/utils";
|
|
7
|
+
import { $getNearestNodeFromDOMNode, isHTMLElement, } from "lexical";
|
|
8
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
9
|
+
import { createPortal } from "react-dom";
|
|
10
|
+
import { getThemeSelector } from "../../utils/getThemeSelector";
|
|
11
|
+
import { useDebounce } from "../CodeActionMenuPlugin/utils";
|
|
11
12
|
const BUTTON_WIDTH_PX = 20;
|
|
12
13
|
function TableHoverActionsContainer({ anchorElem, }) {
|
|
13
14
|
var _a, _b;
|
|
@@ -63,7 +64,7 @@ function TableHoverActionsContainer({ anchorElem, }) {
|
|
|
63
64
|
.parentElement;
|
|
64
65
|
let tableHasScroll = false;
|
|
65
66
|
if (parentElement &&
|
|
66
|
-
parentElement.classList.contains(
|
|
67
|
+
parentElement.classList.contains("PlaygroundEditorTheme__tableScrollableWrapper")) {
|
|
67
68
|
tableHasScroll =
|
|
68
69
|
parentElement.scrollWidth > parentElement.clientWidth;
|
|
69
70
|
}
|
|
@@ -109,12 +110,12 @@ function TableHoverActionsContainer({ anchorElem, }) {
|
|
|
109
110
|
if (!shouldListenMouseMove) {
|
|
110
111
|
return;
|
|
111
112
|
}
|
|
112
|
-
document.addEventListener(
|
|
113
|
+
document.addEventListener("mousemove", debouncedOnMouseMove);
|
|
113
114
|
return () => {
|
|
114
115
|
setShownRow(false);
|
|
115
116
|
setShownColumn(false);
|
|
116
117
|
debouncedOnMouseMove.cancel();
|
|
117
|
-
document.removeEventListener(
|
|
118
|
+
document.removeEventListener("mousemove", debouncedOnMouseMove);
|
|
118
119
|
};
|
|
119
120
|
}, [shouldListenMouseMove, debouncedOnMouseMove]);
|
|
120
121
|
useEffect(() => {
|
|
@@ -123,12 +124,12 @@ function TableHoverActionsContainer({ anchorElem, }) {
|
|
|
123
124
|
let resetObserver = false;
|
|
124
125
|
for (const [key, type] of mutations) {
|
|
125
126
|
switch (type) {
|
|
126
|
-
case
|
|
127
|
+
case "created": {
|
|
127
128
|
tableSetRef.current.add(key);
|
|
128
129
|
resetObserver = true;
|
|
129
130
|
break;
|
|
130
131
|
}
|
|
131
|
-
case
|
|
132
|
+
case "destroyed": {
|
|
132
133
|
tableSetRef.current.delete(key);
|
|
133
134
|
resetObserver = true;
|
|
134
135
|
break;
|
|
@@ -172,13 +173,13 @@ function TableHoverActionsContainer({ anchorElem, }) {
|
|
|
172
173
|
}
|
|
173
174
|
function getMouseInfo(event, getTheme) {
|
|
174
175
|
const target = event.target;
|
|
175
|
-
const tableCellClass = getThemeSelector(getTheme,
|
|
176
|
+
const tableCellClass = getThemeSelector(getTheme, "tableCell");
|
|
176
177
|
if (isHTMLElement(target)) {
|
|
177
178
|
const tableDOMNode = target.closest(`td${tableCellClass}, th${tableCellClass}`);
|
|
178
179
|
const isOutside = !(tableDOMNode ||
|
|
179
|
-
target.closest(`button${getThemeSelector(getTheme,
|
|
180
|
-
target.closest(`button${getThemeSelector(getTheme,
|
|
181
|
-
target.closest(
|
|
180
|
+
target.closest(`button${getThemeSelector(getTheme, "tableAddRows")}`) ||
|
|
181
|
+
target.closest(`button${getThemeSelector(getTheme, "tableAddColumns")}`) ||
|
|
182
|
+
target.closest("div.TableCellResizer__resizer"));
|
|
182
183
|
return { isOutside, tableDOMNode };
|
|
183
184
|
}
|
|
184
185
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/TableHoverActionsV2Plugin/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/TableHoverActionsV2Plugin/index.tsx"],"names":[],"mappings":"AAWA,OAAO,aAAa,CAAC;AAwcrB,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAAC,EAChD,UAA0B,GAC3B,EAAE;IACD,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B,GAAG,KAAK,CAAC,WAAW,GAAG,IAAI,CAM3B"}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
7
|
*/
|
|
8
|
-
import type { JSX } from
|
|
9
|
-
import { EditorThemeClasses, Klass, LexicalEditor, LexicalNode } from
|
|
8
|
+
import type { JSX } from "react";
|
|
9
|
+
import { EditorThemeClasses, Klass, LexicalEditor, LexicalNode } from "lexical";
|
|
10
10
|
export type InsertTableCommandPayload = Readonly<{
|
|
11
11
|
columns: string;
|
|
12
12
|
rows: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TablePlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/TablePlugin.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TablePlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/TablePlugin.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AASjC,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAOhF,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,gBAAgB,EAAE,IAAI,GAAG,gBAAgB,CAAC;IAC1C,iBAAiB,EAAE,IAAI,GAAG,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3D,GAAG,EAAE,CACH,gBAAgB,EAAE,IAAI,GAAG,gBAAgB,EACzC,iBAAiB,EAAE,IAAI,GAAG,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KACvD,IAAI,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1C,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B,CAAC,CAAC;AAEH,eAAO,MAAM,WAAW,2CAMtB,CAAC;AAEH,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAA;CAAE,2CAwBnE;AAED,wBAAgB,iBAAiB,CAAC,EAChC,YAAY,EACZ,OAAO,GACR,EAAE;IACD,YAAY,EAAE,aAAa,CAAC;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,GAAG,GAAG,CAAC,OAAO,CAiDd;AAED,wBAAgB,WAAW,CAAC,EAC1B,gBAAgB,EAChB,QAAQ,GACT,EAAE;IACD,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,EAAE,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;CAC5C,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAcrB"}
|