@payloadcms/richtext-lexical 3.16.0 → 3.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/exports/client/Field-F5XP4HL4.js +2 -0
- package/dist/exports/client/Field-F5XP4HL4.js.map +7 -0
- package/dist/exports/client/{RelationshipComponent-N4C5MX3U.js → RelationshipComponent-AAFBGDZ5.js} +2 -2
- package/dist/exports/client/bundled.css +1 -1
- package/dist/exports/client/chunk-3LGFOM34.js +2 -0
- package/dist/exports/client/chunk-3LGFOM34.js.map +7 -0
- package/dist/exports/client/chunk-7XFF5VOE.js +12 -0
- package/dist/exports/client/chunk-7XFF5VOE.js.map +7 -0
- package/dist/exports/client/{chunk-JRIUM7SP.js → chunk-CGFQWJ56.js} +2 -2
- package/dist/exports/client/{chunk-422FRG7Z.js → chunk-XI5JV5QT.js} +2 -2
- package/dist/exports/client/{chunk-HTQL4HTC.js → chunk-XXNV22UZ.js} +2 -2
- package/dist/exports/client/{component-TYBPYPLA.js → component-NUQPQ2MC.js} +2 -2
- package/dist/exports/client/componentInline-KDFOWBR5.js +2 -0
- package/dist/exports/client/index.js +9 -11
- package/dist/exports/client/index.js.map +4 -4
- package/dist/features/blocks/client/getBlockImageComponent.d.ts +3 -0
- package/dist/features/blocks/client/getBlockImageComponent.d.ts.map +1 -0
- package/dist/features/blocks/client/getBlockImageComponent.js +18 -0
- package/dist/features/blocks/client/getBlockImageComponent.js.map +1 -0
- package/dist/features/blocks/client/index.d.ts.map +1 -1
- package/dist/features/blocks/client/index.js +4 -3
- package/dist/features/blocks/client/index.js.map +1 -1
- package/dist/features/blocks/client/markdownTransformer.d.ts.map +1 -1
- package/dist/features/blocks/client/markdownTransformer.js +1 -2
- package/dist/features/blocks/client/markdownTransformer.js.map +1 -1
- package/dist/features/blocks/server/markdownTransformer.d.ts.map +1 -1
- package/dist/features/blocks/server/markdownTransformer.js +1 -2
- package/dist/features/blocks/server/markdownTransformer.js.map +1 -1
- package/dist/features/debug/testRecorder/client/plugin/index.js +4 -4
- package/dist/features/debug/testRecorder/client/plugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.d.ts.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js +84 -41
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.d.ts.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js +37 -41
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js +29 -23
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.d.ts.map +1 -1
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.js +2 -1
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.js.map +1 -1
- package/dist/features/experimental_table/markdownTransformer.d.ts.map +1 -1
- package/dist/features/experimental_table/markdownTransformer.js +1 -2
- package/dist/features/experimental_table/markdownTransformer.js.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +9 -9
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/types.d.ts +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/types.d.ts.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/types.js.map +1 -1
- package/dist/features/link/client/plugins/link/index.d.ts.map +1 -1
- package/dist/features/link/client/plugins/link/index.js +4 -0
- package/dist/features/link/client/plugins/link/index.js.map +1 -1
- package/dist/features/link/nodes/LinkNode.d.ts +2 -2
- package/dist/features/link/nodes/LinkNode.d.ts.map +1 -1
- package/dist/features/link/nodes/LinkNode.js +66 -66
- package/dist/features/link/nodes/LinkNode.js.map +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.d.ts.map +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.js +3 -3
- package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
- package/dist/features/typesClient.d.ts +2 -2
- package/dist/features/typesClient.d.ts.map +1 -1
- package/dist/features/typesClient.js.map +1 -1
- package/dist/field/Field.d.ts.map +1 -1
- package/dist/field/Field.js +17 -2
- package/dist/field/Field.js.map +1 -1
- package/dist/field/bundled.css +1 -1
- package/dist/field/rscEntry.d.ts.map +1 -1
- package/dist/field/rscEntry.js +13 -1
- package/dist/field/rscEntry.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lexical/LexicalEditor.d.ts +1 -0
- package/dist/lexical/LexicalEditor.d.ts.map +1 -1
- package/dist/lexical/LexicalEditor.js +32 -56
- package/dist/lexical/LexicalEditor.js.map +1 -1
- package/dist/lexical/LexicalProvider.d.ts +1 -0
- package/dist/lexical/LexicalProvider.d.ts.map +1 -1
- package/dist/lexical/LexicalProvider.js +8 -1
- package/dist/lexical/LexicalProvider.js.map +1 -1
- package/dist/lexical/config/client/EditorConfigProvider.d.ts +1 -0
- package/dist/lexical/config/client/EditorConfigProvider.d.ts.map +1 -1
- package/dist/lexical/config/client/EditorConfigProvider.js +5 -2
- package/dist/lexical/config/client/EditorConfigProvider.js.map +1 -1
- package/dist/lexical/config/client/sanitize.d.ts +2 -2
- package/dist/lexical/config/client/sanitize.d.ts.map +1 -1
- package/dist/lexical/config/client/sanitize.js.map +1 -1
- package/dist/lexical/config/types.d.ts +2 -2
- package/dist/lexical/config/types.d.ts.map +1 -1
- package/dist/lexical/config/types.js.map +1 -1
- package/dist/lexical/plugins/InsertParagraphAtEnd/index.d.ts +4 -0
- package/dist/lexical/plugins/InsertParagraphAtEnd/index.d.ts.map +1 -0
- package/dist/lexical/plugins/InsertParagraphAtEnd/index.js +55 -0
- package/dist/lexical/plugins/InsertParagraphAtEnd/index.js.map +1 -0
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +2 -2
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/TextPlugin/index.js +0 -4
- package/dist/lexical/plugins/TextPlugin/index.js.map +1 -1
- package/dist/lexical/theme/EditorTheme.d.ts.map +1 -1
- package/dist/lexical/theme/EditorTheme.js +2 -4
- package/dist/lexical/theme/EditorTheme.js.map +1 -1
- package/dist/packages/@lexical/markdown/MarkdownTransformers.d.ts +1 -1
- package/dist/packages/@lexical/markdown/MarkdownTransformers.d.ts.map +1 -1
- package/dist/packages/@lexical/markdown/MarkdownTransformers.js +26 -8
- package/dist/packages/@lexical/markdown/MarkdownTransformers.js.map +1 -1
- package/dist/packages/@lexical/markdown/index.d.ts.map +1 -1
- package/dist/packages/@lexical/markdown/index.js +1 -1
- package/dist/packages/@lexical/markdown/index.js.map +1 -1
- package/dist/types.d.ts +10 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +28 -28
- package/dist/exports/client/Field-VBZQOYLK.js +0 -2
- package/dist/exports/client/Field-VBZQOYLK.js.map +0 -7
- package/dist/exports/client/chunk-BB2LUWM3.js +0 -2
- package/dist/exports/client/chunk-BB2LUWM3.js.map +0 -7
- package/dist/exports/client/chunk-PZPNMC5Y.js +0 -12
- package/dist/exports/client/chunk-PZPNMC5Y.js.map +0 -7
- package/dist/exports/client/componentInline-VR5HF5DY.js +0 -2
- package/dist/utilities/jsx/lexicalMarkdownCopy.d.ts +0 -11
- package/dist/utilities/jsx/lexicalMarkdownCopy.d.ts.map +0 -1
- package/dist/utilities/jsx/lexicalMarkdownCopy.js +0 -66
- package/dist/utilities/jsx/lexicalMarkdownCopy.js.map +0 -1
- /package/dist/exports/client/{RelationshipComponent-N4C5MX3U.js.map → RelationshipComponent-AAFBGDZ5.js.map} +0 -0
- /package/dist/exports/client/{chunk-JRIUM7SP.js.map → chunk-CGFQWJ56.js.map} +0 -0
- /package/dist/exports/client/{chunk-422FRG7Z.js.map → chunk-XI5JV5QT.js.map} +0 -0
- /package/dist/exports/client/{chunk-HTQL4HTC.js.map → chunk-XXNV22UZ.js.map} +0 -0
- /package/dist/exports/client/{component-TYBPYPLA.js.map → component-NUQPQ2MC.js.map} +0 -0
- /package/dist/exports/client/{componentInline-VR5HF5DY.js.map → componentInline-KDFOWBR5.js.map} +0 -0
|
@@ -4,9 +4,10 @@ import { c as _c } from "react/compiler-runtime";
|
|
|
4
4
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
6
6
|
import { useLexicalEditable } from '@lexical/react/useLexicalEditable';
|
|
7
|
-
import { $deleteTableColumn__EXPERIMENTAL, $deleteTableRow__EXPERIMENTAL, $getNodeTriplet, $getTableCellNodeFromLexicalNode, $getTableColumnIndexFromTableCellNode, $getTableNodeFromLexicalNodeOrThrow, $getTableRowIndexFromTableCellNode, $insertTableColumn__EXPERIMENTAL, $insertTableRow__EXPERIMENTAL, $isTableCellNode, $isTableRowNode, $isTableSelection, $unmergeCell, getTableObserverFromTableElement, TableCellHeaderStates, TableCellNode } from '@lexical/table';
|
|
7
|
+
import { $deleteTableColumn__EXPERIMENTAL, $deleteTableRow__EXPERIMENTAL, $getNodeTriplet, $getTableCellNodeFromLexicalNode, $getTableColumnIndexFromTableCellNode, $getTableNodeFromLexicalNodeOrThrow, $getTableRowIndexFromTableCellNode, $insertTableColumn__EXPERIMENTAL, $insertTableRow__EXPERIMENTAL, $isTableCellNode, $isTableRowNode, $isTableSelection, $unmergeCell, getTableElement, getTableObserverFromTableElement, TableCellHeaderStates, TableCellNode } from '@lexical/table';
|
|
8
|
+
import { mergeRegister } from '@lexical/utils';
|
|
8
9
|
import { useScrollInfo } from '@payloadcms/ui';
|
|
9
|
-
import { $createParagraphNode, $getRoot, $getSelection, $isElementNode, $isParagraphNode, $isRangeSelection, $isTextNode } from 'lexical';
|
|
10
|
+
import { $createParagraphNode, $getRoot, $getSelection, $isElementNode, $isParagraphNode, $isRangeSelection, $isTextNode, COMMAND_PRIORITY_CRITICAL, getDOMSelection, SELECTION_CHANGE_COMMAND } from 'lexical';
|
|
10
11
|
import * as React from 'react';
|
|
11
12
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
12
13
|
import { createPortal } from 'react-dom';
|
|
@@ -127,13 +128,13 @@ function TableActionMenu({
|
|
|
127
128
|
editor.update(() => {
|
|
128
129
|
if (tableCellNode.isAttached()) {
|
|
129
130
|
const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);
|
|
130
|
-
const tableElement = editor.getElementByKey(tableNode.getKey());
|
|
131
|
-
if (
|
|
131
|
+
const tableElement = getTableElement(tableNode, editor.getElementByKey(tableNode.getKey()));
|
|
132
|
+
if (tableElement === null) {
|
|
132
133
|
throw new Error('Expected to find tableElement in DOM');
|
|
133
134
|
}
|
|
134
135
|
const tableObserver = getTableObserverFromTableElement(tableElement);
|
|
135
136
|
if (tableObserver !== null) {
|
|
136
|
-
tableObserver
|
|
137
|
+
tableObserver.$clearHighlight();
|
|
137
138
|
}
|
|
138
139
|
tableNode.markDirty();
|
|
139
140
|
updateTableCellNode(tableCellNode.getLatest());
|
|
@@ -293,7 +294,10 @@ function TableActionMenu({
|
|
|
293
294
|
"data-test-id": "table-merge-cells",
|
|
294
295
|
onClick: () => mergeTableCellsAtSelection(),
|
|
295
296
|
type: "button",
|
|
296
|
-
children: "
|
|
297
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
298
|
+
className: "text",
|
|
299
|
+
children: "Merge cells"
|
|
300
|
+
})
|
|
297
301
|
});
|
|
298
302
|
} else if (canUnmergeCell) {
|
|
299
303
|
mergeCellButton = /*#__PURE__*/_jsx("button", {
|
|
@@ -301,7 +305,10 @@ function TableActionMenu({
|
|
|
301
305
|
"data-test-id": "table-unmerge-cells",
|
|
302
306
|
onClick: () => unmergeTableCellsAtSelection(),
|
|
303
307
|
type: "button",
|
|
304
|
-
children: "
|
|
308
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
309
|
+
className: "text",
|
|
310
|
+
children: "Unmerge cells"
|
|
311
|
+
})
|
|
305
312
|
});
|
|
306
313
|
}
|
|
307
314
|
}
|
|
@@ -420,54 +427,90 @@ function TableCellActionMenuContainer({
|
|
|
420
427
|
const $moveMenu = useCallback(() => {
|
|
421
428
|
const menu = menuButtonRef.current;
|
|
422
429
|
const selection = $getSelection();
|
|
423
|
-
const nativeSelection =
|
|
430
|
+
const nativeSelection = getDOMSelection(editor._window);
|
|
424
431
|
const activeElement = document.activeElement;
|
|
425
|
-
|
|
432
|
+
function disable() {
|
|
433
|
+
if (menu) {
|
|
434
|
+
menu.classList.remove('table-cell-action-button-container--active');
|
|
435
|
+
menu.classList.add('table-cell-action-button-container--inactive');
|
|
436
|
+
}
|
|
426
437
|
setTableMenuCellNode(null);
|
|
427
|
-
|
|
438
|
+
}
|
|
439
|
+
if (selection == null || menu == null) {
|
|
440
|
+
return disable();
|
|
428
441
|
}
|
|
429
442
|
const rootElement = editor.getRootElement();
|
|
443
|
+
let tableObserver = null;
|
|
444
|
+
let tableCellParentNodeDOM = null;
|
|
430
445
|
if ($isRangeSelection(selection) && rootElement !== null && nativeSelection !== null && rootElement.contains(nativeSelection.anchorNode)) {
|
|
431
446
|
const tableCellNodeFromSelection = $getTableCellNodeFromLexicalNode(selection.anchor.getNode());
|
|
432
447
|
if (tableCellNodeFromSelection == null) {
|
|
433
|
-
|
|
434
|
-
|
|
448
|
+
return disable();
|
|
449
|
+
}
|
|
450
|
+
tableCellParentNodeDOM = editor.getElementByKey(tableCellNodeFromSelection.getKey());
|
|
451
|
+
if (tableCellParentNodeDOM == null || !tableCellNodeFromSelection.isAttached()) {
|
|
452
|
+
return disable();
|
|
435
453
|
}
|
|
436
|
-
const
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
454
|
+
const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNodeFromSelection);
|
|
455
|
+
const tableElement = getTableElement(tableNode, editor.getElementByKey(tableNode.getKey()));
|
|
456
|
+
if (tableElement === null) {
|
|
457
|
+
throw new Error('TableActionMenu: Expected to find tableElement in DOM');
|
|
440
458
|
}
|
|
459
|
+
tableObserver = getTableObserverFromTableElement(tableElement);
|
|
441
460
|
setTableMenuCellNode(tableCellNodeFromSelection);
|
|
461
|
+
} else if ($isTableSelection(selection)) {
|
|
462
|
+
const anchorNode = $getTableCellNodeFromLexicalNode(selection.anchor.getNode());
|
|
463
|
+
if (!$isTableCellNode(anchorNode)) {
|
|
464
|
+
throw new Error('TableSelection anchorNode must be a TableCellNode');
|
|
465
|
+
}
|
|
466
|
+
const tableNode_0 = $getTableNodeFromLexicalNodeOrThrow(anchorNode);
|
|
467
|
+
const tableElement_0 = getTableElement(tableNode_0, editor.getElementByKey(tableNode_0.getKey()));
|
|
468
|
+
if (tableElement_0 === null) {
|
|
469
|
+
throw new Error('TableActionMenu: Expected to find tableElement in DOM');
|
|
470
|
+
}
|
|
471
|
+
tableObserver = getTableObserverFromTableElement(tableElement_0);
|
|
472
|
+
tableCellParentNodeDOM = editor.getElementByKey(anchorNode.getKey());
|
|
442
473
|
} else if (!activeElement) {
|
|
443
|
-
|
|
474
|
+
return disable();
|
|
444
475
|
}
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
476
|
+
if (tableObserver === null || tableCellParentNodeDOM === null) {
|
|
477
|
+
return disable();
|
|
478
|
+
}
|
|
479
|
+
const enabled = !tableObserver || !tableObserver.isSelecting;
|
|
480
|
+
menu.classList.toggle('table-cell-action-button-container--active', enabled);
|
|
481
|
+
menu.classList.toggle('table-cell-action-button-container--inactive', !enabled);
|
|
482
|
+
if (enabled) {
|
|
483
|
+
const tableCellRect = tableCellParentNodeDOM.getBoundingClientRect();
|
|
484
|
+
const anchorRect = anchorElem.getBoundingClientRect();
|
|
485
|
+
const top = tableCellRect.top - anchorRect.top;
|
|
486
|
+
const left = tableCellRect.right - anchorRect.left;
|
|
487
|
+
menu.style.transform = `translate(${left}px, ${top}px)`;
|
|
488
|
+
}
|
|
489
|
+
}, [editor, anchorElem]);
|
|
453
490
|
useEffect(() => {
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
menuButtonDOM.style.transform = `translate(${left}px, ${top}px)`;
|
|
465
|
-
} else {
|
|
466
|
-
menuButtonDOM.style.opacity = '0';
|
|
467
|
-
menuButtonDOM.style.transform = 'translate(-10000px, -10000px)';
|
|
491
|
+
// We call the $moveMenu callback every time the selection changes,
|
|
492
|
+
// once up front, and once after each mouseUp
|
|
493
|
+
let timeoutId = undefined;
|
|
494
|
+
const callback = () => {
|
|
495
|
+
timeoutId = undefined;
|
|
496
|
+
editor.getEditorState().read($moveMenu);
|
|
497
|
+
};
|
|
498
|
+
const delayedCallback = () => {
|
|
499
|
+
if (timeoutId === undefined) {
|
|
500
|
+
timeoutId = setTimeout(callback, 0);
|
|
468
501
|
}
|
|
469
|
-
|
|
470
|
-
|
|
502
|
+
return false;
|
|
503
|
+
};
|
|
504
|
+
return mergeRegister(editor.registerUpdateListener(delayedCallback), editor.registerCommand(SELECTION_CHANGE_COMMAND, delayedCallback, COMMAND_PRIORITY_CRITICAL), editor.registerRootListener((rootElement_0, prevRootElement) => {
|
|
505
|
+
if (prevRootElement) {
|
|
506
|
+
prevRootElement.removeEventListener('mouseup', delayedCallback);
|
|
507
|
+
}
|
|
508
|
+
if (rootElement_0) {
|
|
509
|
+
rootElement_0.addEventListener('mouseup', delayedCallback);
|
|
510
|
+
delayedCallback();
|
|
511
|
+
}
|
|
512
|
+
}), () => clearTimeout(timeoutId));
|
|
513
|
+
});
|
|
471
514
|
const prevTableCellDOM = useRef(tableCellNode);
|
|
472
515
|
useEffect(() => {
|
|
473
516
|
if (prevTableCellDOM.current !== tableCellNode) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useLexicalEditable","$deleteTableColumn__EXPERIMENTAL","$deleteTableRow__EXPERIMENTAL","$getNodeTriplet","$getTableCellNodeFromLexicalNode","$getTableColumnIndexFromTableCellNode","$getTableNodeFromLexicalNodeOrThrow","$getTableRowIndexFromTableCellNode","$insertTableColumn__EXPERIMENTAL","$insertTableRow__EXPERIMENTAL","$isTableCellNode","$isTableRowNode","$isTableSelection","$unmergeCell","getTableObserverFromTableElement","TableCellHeaderStates","TableCellNode","useScrollInfo","$createParagraphNode","$getRoot","$getSelection","$isElementNode","$isParagraphNode","$isRangeSelection","$isTextNode","React","useCallback","useEffect","useRef","useState","createPortal","MeatballsIcon","computeSelectionCount","selection","selectionShape","getShape","columns","toX","fromX","rows","toY","fromY","$canUnmerge","isCollapsed","anchor","is","focus","cell","__colSpan","__rowSpan","$cellContainsEmptyParagraph","getChildrenSize","firstChild","getFirstChildOrThrow","isEmpty","$selectLastDescendant","node","lastDescendant","getLastDescendant","select","selectEnd","selectNext","TableActionMenu","cellMerge","contextRef","onClose","setIsMenuOpen","tableCellNode","_tableCellNode","editor","dropDownRef","updateTableCellNode","selectionCounts","updateSelectionCounts","canMergeCells","setCanMergeCells","canUnmergeCell","setCanUnmergeCell","y","registerMutationListener","nodeMutations","nodeUpdated","get","getKey","getEditorState","read","getLatest","skipInitialization","currentSelectionCounts","menuButtonElement","current","dropDownElement","rootElement","getRootElement","rootEleRect","getBoundingClientRect","menuButtonRect","style","opacity","dropDownElementRect","margin","leftPosition","right","width","window","innerWidth","position","left","pageXOffset","topPosition","top","height","innerHeight","bottom","pageYOffset","handleClickOutside","event","contains","target","addEventListener","removeEventListener","clearTableSelection","update","isAttached","tableNode","tableElement","getElementByKey","Error","tableObserver","clearHighlight","markDirty","rootNode","selectStart","mergeTableCellsAtSelection","nodes","getNodes","firstCell","i","length","setColSpan","setRowSpan","getFirstChild","remove","append","getChildren","unmergeTableCellsAtSelection","insertTableRowAtSelection","shouldInsertAfter","insertTableColumnAtSelection","deleteTableRowAtSelection","deleteTableAtSelection","deleteTableColumnAtSelection","toggleTableRowIsHeader","tableRowIndex","tableRows","tableRow","newStyle","getHeaderStyles","ROW","forEach","tableCell","setHeaderStyles","toggleTableColumnIsHeader","tableColumnIndex","maxRowsLength","Math","max","map","row","COLUMN","r","tableCells","toggleRowStriping","setRowStriping","getRowStriping","mergeCellButton","_jsx","className","onClick","type","_jsxs","e","stopPropagation","ref","Fragment","__headerState","document","body","TableCellActionMenuContainer","anchorElem","menuButtonRef","menuRootRef","isMenuOpen","setTableMenuCellNode","$moveMenu","menu","nativeSelection","getSelection","activeElement","anchorNode","tableCellNodeFromSelection","getNode","tableCellParentNodeDOM","registerUpdateListener","menuButtonDOM","tableCellNodeDOM","tableCellRect","menuRect","anchorRect","transform","prevTableCellDOM","TableActionMenuPlugin","t0","$","isEditable","t1"],"sources":["../../../../../../src/features/experimental_table/client/plugins/TableActionMenuPlugin/index.tsx"],"sourcesContent":["'use client'\n\nimport type {\n HTMLTableElementWithWithTableSelectionState,\n TableRowNode,\n TableSelection,\n} from '@lexical/table'\nimport type { ElementNode } from 'lexical'\nimport type { JSX } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n $deleteTableColumn__EXPERIMENTAL,\n $deleteTableRow__EXPERIMENTAL,\n $getNodeTriplet,\n $getTableCellNodeFromLexicalNode,\n $getTableColumnIndexFromTableCellNode,\n $getTableNodeFromLexicalNodeOrThrow,\n $getTableRowIndexFromTableCellNode,\n $insertTableColumn__EXPERIMENTAL,\n $insertTableRow__EXPERIMENTAL,\n $isTableCellNode,\n $isTableRowNode,\n $isTableSelection,\n $unmergeCell,\n getTableObserverFromTableElement,\n TableCellHeaderStates,\n TableCellNode,\n} from '@lexical/table'\nimport { useScrollInfo } from '@payloadcms/ui'\nimport {\n $createParagraphNode,\n $getRoot,\n $getSelection,\n $isElementNode,\n $isParagraphNode,\n $isRangeSelection,\n $isTextNode,\n} from 'lexical'\nimport * as React from 'react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\n\nimport { MeatballsIcon } from '../../../../../lexical/ui/icons/Meatballs/index.js'\nimport './index.scss'\n\nfunction computeSelectionCount(selection: TableSelection): {\n columns: number\n rows: number\n} {\n const selectionShape = selection.getShape()\n return {\n columns: selectionShape.toX - selectionShape.fromX + 1,\n rows: selectionShape.toY - selectionShape.fromY + 1,\n }\n}\n\nfunction $canUnmerge(): boolean {\n const selection = $getSelection()\n if (\n ($isRangeSelection(selection) && !selection.isCollapsed()) ||\n ($isTableSelection(selection) && !selection.anchor.is(selection.focus)) ||\n (!$isRangeSelection(selection) && !$isTableSelection(selection))\n ) {\n return false\n }\n const [cell] = $getNodeTriplet(selection.anchor)\n return cell.__colSpan > 1 || cell.__rowSpan > 1\n}\n\nfunction $cellContainsEmptyParagraph(cell: TableCellNode): boolean {\n if (cell.getChildrenSize() !== 1) {\n return false\n }\n const firstChild = cell.getFirstChildOrThrow()\n if (!$isParagraphNode(firstChild) || !firstChild.isEmpty()) {\n return false\n }\n return true\n}\n\nfunction $selectLastDescendant(node: ElementNode): void {\n const lastDescendant = node.getLastDescendant()\n if ($isTextNode(lastDescendant)) {\n lastDescendant.select()\n } else if ($isElementNode(lastDescendant)) {\n lastDescendant.selectEnd()\n } else if (lastDescendant !== null) {\n lastDescendant.selectNext()\n }\n}\n\ntype TableCellActionMenuProps = Readonly<{\n cellMerge: boolean\n contextRef: { current: HTMLElement | null }\n onClose: () => void\n setIsMenuOpen: (isOpen: boolean) => void\n tableCellNode: TableCellNode\n}>\n\nfunction TableActionMenu({\n cellMerge,\n contextRef,\n onClose,\n setIsMenuOpen,\n tableCellNode: _tableCellNode,\n}: TableCellActionMenuProps) {\n const [editor] = useLexicalComposerContext()\n const dropDownRef = useRef<HTMLDivElement | null>(null)\n const [tableCellNode, updateTableCellNode] = useState(_tableCellNode)\n const [selectionCounts, updateSelectionCounts] = useState({\n columns: 1,\n rows: 1,\n })\n const [canMergeCells, setCanMergeCells] = useState(false)\n const [canUnmergeCell, setCanUnmergeCell] = useState(false)\n const { y } = useScrollInfo()\n\n useEffect(() => {\n return editor.registerMutationListener(\n TableCellNode,\n (nodeMutations) => {\n const nodeUpdated = nodeMutations.get(tableCellNode.getKey()) === 'updated'\n\n if (nodeUpdated) {\n editor.getEditorState().read(() => {\n updateTableCellNode(tableCellNode.getLatest())\n })\n }\n },\n { skipInitialization: true },\n )\n }, [editor, tableCellNode])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n // Merge cells\n if ($isTableSelection(selection)) {\n const currentSelectionCounts = computeSelectionCount(selection)\n updateSelectionCounts(computeSelectionCount(selection))\n\n setCanMergeCells(currentSelectionCounts.columns > 1 || currentSelectionCounts.rows > 1)\n }\n // Unmerge cell\n setCanUnmergeCell($canUnmerge())\n })\n }, [editor])\n\n useEffect(() => {\n const menuButtonElement = contextRef.current\n const dropDownElement = dropDownRef.current\n const rootElement = editor.getRootElement()\n\n if (menuButtonElement != null && dropDownElement != null && rootElement != null) {\n const rootEleRect = rootElement.getBoundingClientRect()\n const menuButtonRect = menuButtonElement.getBoundingClientRect()\n dropDownElement.style.opacity = '1'\n const dropDownElementRect = dropDownElement.getBoundingClientRect()\n const margin = 5\n let leftPosition = menuButtonRect.right + margin\n if (\n leftPosition + dropDownElementRect.width > window.innerWidth ||\n leftPosition + dropDownElementRect.width > rootEleRect.right\n ) {\n const position = menuButtonRect.left - dropDownElementRect.width - margin\n leftPosition = (position < 0 ? margin : position) + window.pageXOffset\n }\n dropDownElement.style.left = `${leftPosition + window.pageXOffset}px`\n\n let topPosition = menuButtonRect.top\n if (topPosition + dropDownElementRect.height > window.innerHeight) {\n const position = menuButtonRect.bottom - dropDownElementRect.height\n topPosition = (position < 0 ? margin : position) + window.pageYOffset\n }\n dropDownElement.style.top = `${topPosition}px`\n }\n }, [contextRef, dropDownRef, editor, y])\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (\n dropDownRef.current != null &&\n contextRef.current != null &&\n !dropDownRef.current.contains(event.target as Node) &&\n !contextRef.current.contains(event.target as Node)\n ) {\n setIsMenuOpen(false)\n }\n }\n\n window.addEventListener('click', handleClickOutside)\n\n return () => window.removeEventListener('click', handleClickOutside)\n }, [setIsMenuOpen, contextRef])\n\n const clearTableSelection = useCallback(() => {\n editor.update(() => {\n if (tableCellNode.isAttached()) {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const tableElement = editor.getElementByKey(\n tableNode.getKey(),\n ) as HTMLTableElementWithWithTableSelectionState\n\n if (!tableElement) {\n throw new Error('Expected to find tableElement in DOM')\n }\n\n const tableObserver = getTableObserverFromTableElement(tableElement)\n if (tableObserver !== null) {\n tableObserver.clearHighlight()\n }\n\n tableNode.markDirty()\n updateTableCellNode(tableCellNode.getLatest())\n }\n\n const rootNode = $getRoot()\n rootNode.selectStart()\n })\n }, [editor, tableCellNode])\n\n const mergeTableCellsAtSelection = () => {\n editor.update(() => {\n const selection = $getSelection()\n if ($isTableSelection(selection)) {\n const { columns, rows } = computeSelectionCount(selection)\n const nodes = selection.getNodes()\n let firstCell: null | TableCellNode = null\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]\n if ($isTableCellNode(node)) {\n if (firstCell === null) {\n node.setColSpan(columns).setRowSpan(rows)\n firstCell = node\n const isEmpty = $cellContainsEmptyParagraph(node)\n let firstChild\n if (isEmpty && $isParagraphNode((firstChild = node.getFirstChild()))) {\n firstChild.remove()\n }\n } else if ($isTableCellNode(firstCell)) {\n const isEmpty = $cellContainsEmptyParagraph(node)\n if (!isEmpty) {\n firstCell.append(...node.getChildren())\n }\n node.remove()\n }\n }\n }\n if (firstCell !== null) {\n if (firstCell.getChildrenSize() === 0) {\n firstCell.append($createParagraphNode())\n }\n $selectLastDescendant(firstCell)\n }\n onClose()\n }\n })\n }\n\n const unmergeTableCellsAtSelection = () => {\n editor.update(() => {\n $unmergeCell()\n })\n }\n\n const insertTableRowAtSelection = useCallback(\n (shouldInsertAfter: boolean) => {\n editor.update(() => {\n $insertTableRow__EXPERIMENTAL(shouldInsertAfter)\n onClose()\n })\n },\n [editor, onClose],\n )\n\n const insertTableColumnAtSelection = useCallback(\n (shouldInsertAfter: boolean) => {\n editor.update(() => {\n for (let i = 0; i < selectionCounts.columns; i++) {\n $insertTableColumn__EXPERIMENTAL(shouldInsertAfter)\n }\n onClose()\n })\n },\n [editor, onClose, selectionCounts.columns],\n )\n\n const deleteTableRowAtSelection = useCallback(() => {\n editor.update(() => {\n $deleteTableRow__EXPERIMENTAL()\n onClose()\n })\n }, [editor, onClose])\n\n const deleteTableAtSelection = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n tableNode.remove()\n\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n const deleteTableColumnAtSelection = useCallback(() => {\n editor.update(() => {\n $deleteTableColumn__EXPERIMENTAL()\n onClose()\n })\n }, [editor, onClose])\n\n const toggleTableRowIsHeader = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n\n const tableRowIndex = $getTableRowIndexFromTableCellNode(tableCellNode)\n\n const tableRows = tableNode.getChildren()\n\n if (tableRowIndex >= tableRows.length || tableRowIndex < 0) {\n throw new Error('Expected table cell to be inside of table row.')\n }\n\n const tableRow = tableRows[tableRowIndex]\n\n if (!$isTableRowNode(tableRow)) {\n throw new Error('Expected table row')\n }\n\n const newStyle = tableCellNode.getHeaderStyles() ^ TableCellHeaderStates.ROW\n tableRow.getChildren().forEach((tableCell) => {\n if (!$isTableCellNode(tableCell)) {\n throw new Error('Expected table cell')\n }\n\n tableCell.setHeaderStyles(newStyle, TableCellHeaderStates.ROW)\n })\n\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n const toggleTableColumnIsHeader = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n\n const tableColumnIndex = $getTableColumnIndexFromTableCellNode(tableCellNode)\n\n const tableRows = tableNode.getChildren<TableRowNode>()\n const maxRowsLength = Math.max(...tableRows.map((row) => row.getChildren().length))\n\n if (tableColumnIndex >= maxRowsLength || tableColumnIndex < 0) {\n throw new Error('Expected table cell to be inside of table row.')\n }\n\n const newStyle = tableCellNode.getHeaderStyles() ^ TableCellHeaderStates.COLUMN\n for (let r = 0; r < tableRows.length; r++) {\n const tableRow = tableRows[r]\n\n if (!$isTableRowNode(tableRow)) {\n throw new Error('Expected table row')\n }\n\n const tableCells = tableRow.getChildren()\n if (tableColumnIndex >= tableCells.length) {\n // if cell is outside of bounds for the current row (for example various merge cell cases) we shouldn't highlight it\n continue\n }\n\n const tableCell = tableCells[tableColumnIndex]\n\n if (!$isTableCellNode(tableCell)) {\n throw new Error('Expected table cell')\n }\n\n tableCell.setHeaderStyles(newStyle, TableCellHeaderStates.COLUMN)\n }\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n const toggleRowStriping = useCallback(() => {\n editor.update(() => {\n if (tableCellNode.isAttached()) {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n if (tableNode) {\n tableNode.setRowStriping(!tableNode.getRowStriping())\n }\n }\n\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n let mergeCellButton: JSX.Element | null = null\n if (cellMerge) {\n if (canMergeCells) {\n mergeCellButton = (\n <button\n className=\"item\"\n data-test-id=\"table-merge-cells\"\n onClick={() => mergeTableCellsAtSelection()}\n type=\"button\"\n >\n Merge cells\n </button>\n )\n } else if (canUnmergeCell) {\n mergeCellButton = (\n <button\n className=\"item\"\n data-test-id=\"table-unmerge-cells\"\n onClick={() => unmergeTableCellsAtSelection()}\n type=\"button\"\n >\n Unmerge cells\n </button>\n )\n }\n }\n\n return createPortal(\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions,jsx-a11y/click-events-have-key-events\n <div\n className=\"table-action-menu-dropdown\"\n onClick={(e) => {\n e.stopPropagation()\n }}\n ref={dropDownRef}\n >\n {mergeCellButton ? (\n <React.Fragment>\n {mergeCellButton}\n <hr />\n </React.Fragment>\n ) : null}\n\n <button\n className=\"item\"\n data-test-id=\"table-row-striping\"\n onClick={() => toggleRowStriping()}\n type=\"button\"\n >\n <span className=\"text\">Toggle Row Striping</span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-insert-row-above\"\n onClick={() => insertTableRowAtSelection(false)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.rows === 1 ? 'row' : `${selectionCounts.rows} rows`} above\n </span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-insert-row-below\"\n onClick={() => insertTableRowAtSelection(true)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.rows === 1 ? 'row' : `${selectionCounts.rows} rows`} below\n </span>\n </button>\n <hr />\n <button\n className=\"item\"\n data-test-id=\"table-insert-column-before\"\n onClick={() => insertTableColumnAtSelection(false)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.columns === 1 ? 'column' : `${selectionCounts.columns} columns`}{' '}\n left\n </span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-insert-column-after\"\n onClick={() => insertTableColumnAtSelection(true)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.columns === 1 ? 'column' : `${selectionCounts.columns} columns`}{' '}\n right\n </span>\n </button>\n <hr />\n <button\n className=\"item\"\n data-test-id=\"table-delete-columns\"\n onClick={() => deleteTableColumnAtSelection()}\n type=\"button\"\n >\n <span className=\"text\">Delete column</span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-delete-rows\"\n onClick={() => deleteTableRowAtSelection()}\n type=\"button\"\n >\n <span className=\"text\">Delete row</span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-delete\"\n onClick={() => deleteTableAtSelection()}\n type=\"button\"\n >\n <span className=\"text\">Delete table</span>\n </button>\n <hr />\n <button className=\"item\" onClick={() => toggleTableRowIsHeader()} type=\"button\">\n <span className=\"text\">\n {(tableCellNode.__headerState & TableCellHeaderStates.ROW) === TableCellHeaderStates.ROW\n ? 'Remove'\n : 'Add'}{' '}\n row header\n </span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-column-header\"\n onClick={() => toggleTableColumnIsHeader()}\n type=\"button\"\n >\n <span className=\"text\">\n {(tableCellNode.__headerState & TableCellHeaderStates.COLUMN) ===\n TableCellHeaderStates.COLUMN\n ? 'Remove'\n : 'Add'}{' '}\n column header\n </span>\n </button>\n </div>,\n document.body,\n )\n}\n\nfunction TableCellActionMenuContainer({\n anchorElem,\n cellMerge,\n}: {\n anchorElem: HTMLElement\n cellMerge: boolean\n}): JSX.Element {\n const [editor] = useLexicalComposerContext()\n\n const menuButtonRef = useRef(null)\n const menuRootRef = useRef(null)\n const [isMenuOpen, setIsMenuOpen] = useState(false)\n\n const [tableCellNode, setTableMenuCellNode] = useState<null | TableCellNode>(null)\n\n const $moveMenu = useCallback(() => {\n const menu = menuButtonRef.current\n const selection = $getSelection()\n const nativeSelection = window.getSelection()\n const activeElement = document.activeElement\n\n if (selection == null || menu == null) {\n setTableMenuCellNode(null)\n return\n }\n\n const rootElement = editor.getRootElement()\n\n if (\n $isRangeSelection(selection) &&\n rootElement !== null &&\n nativeSelection !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n const tableCellNodeFromSelection = $getTableCellNodeFromLexicalNode(\n selection.anchor.getNode(),\n )\n\n if (tableCellNodeFromSelection == null) {\n setTableMenuCellNode(null)\n return\n }\n\n const tableCellParentNodeDOM = editor.getElementByKey(tableCellNodeFromSelection.getKey())\n\n if (tableCellParentNodeDOM == null) {\n setTableMenuCellNode(null)\n return\n }\n\n setTableMenuCellNode(tableCellNodeFromSelection)\n } else if (!activeElement) {\n setTableMenuCellNode(null)\n }\n }, [editor])\n\n useEffect(() => {\n return editor.registerUpdateListener(() => {\n editor.getEditorState().read(() => {\n $moveMenu()\n })\n })\n })\n\n useEffect(() => {\n const menuButtonDOM = menuButtonRef.current as HTMLButtonElement | null\n\n if (menuButtonDOM != null && tableCellNode != null) {\n const tableCellNodeDOM = editor.getElementByKey(tableCellNode.getKey())\n\n if (tableCellNodeDOM != null) {\n const tableCellRect = tableCellNodeDOM.getBoundingClientRect()\n const menuRect = menuButtonDOM.getBoundingClientRect()\n const anchorRect = anchorElem.getBoundingClientRect()\n\n const top = tableCellRect.top - anchorRect.top + 4\n const left = tableCellRect.right - menuRect.width - 10 - anchorRect.left\n\n menuButtonDOM.style.opacity = '1'\n menuButtonDOM.style.transform = `translate(${left}px, ${top}px)`\n } else {\n menuButtonDOM.style.opacity = '0'\n menuButtonDOM.style.transform = 'translate(-10000px, -10000px)'\n }\n }\n }, [menuButtonRef, tableCellNode, editor, anchorElem])\n\n const prevTableCellDOM = useRef(tableCellNode)\n\n useEffect(() => {\n if (prevTableCellDOM.current !== tableCellNode) {\n setIsMenuOpen(false)\n }\n\n prevTableCellDOM.current = tableCellNode\n }, [prevTableCellDOM, tableCellNode])\n\n return (\n <div className=\"table-cell-action-button-container\" ref={menuButtonRef}>\n {tableCellNode != null && (\n <React.Fragment>\n <button\n className=\"table-cell-action-button\"\n onClick={(e) => {\n e.stopPropagation()\n setIsMenuOpen(!isMenuOpen)\n }}\n ref={menuRootRef}\n type=\"button\"\n >\n <MeatballsIcon />\n </button>\n {isMenuOpen && (\n <TableActionMenu\n cellMerge={cellMerge}\n contextRef={menuRootRef}\n onClose={() => setIsMenuOpen(false)}\n setIsMenuOpen={setIsMenuOpen}\n tableCellNode={tableCellNode}\n />\n )}\n </React.Fragment>\n )}\n </div>\n )\n}\n\nexport const TableActionMenuPlugin: PluginComponentWithAnchor = ({ anchorElem }) => {\n const isEditable = useLexicalEditable()\n return createPortal(\n isEditable ? (\n <TableCellActionMenuContainer anchorElem={anchorElem ?? document.body} cellMerge />\n ) : null,\n anchorElem ?? document.body,\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useLexicalEditable","$deleteTableColumn__EXPERIMENTAL","$deleteTableRow__EXPERIMENTAL","$getNodeTriplet","$getTableCellNodeFromLexicalNode","$getTableColumnIndexFromTableCellNode","$getTableNodeFromLexicalNodeOrThrow","$getTableRowIndexFromTableCellNode","$insertTableColumn__EXPERIMENTAL","$insertTableRow__EXPERIMENTAL","$isTableCellNode","$isTableRowNode","$isTableSelection","$unmergeCell","getTableElement","getTableObserverFromTableElement","TableCellHeaderStates","TableCellNode","mergeRegister","useScrollInfo","$createParagraphNode","$getRoot","$getSelection","$isElementNode","$isParagraphNode","$isRangeSelection","$isTextNode","COMMAND_PRIORITY_CRITICAL","getDOMSelection","SELECTION_CHANGE_COMMAND","React","useCallback","useEffect","useRef","useState","createPortal","MeatballsIcon","computeSelectionCount","selection","selectionShape","getShape","columns","toX","fromX","rows","toY","fromY","$canUnmerge","isCollapsed","anchor","is","focus","cell","__colSpan","__rowSpan","$cellContainsEmptyParagraph","getChildrenSize","firstChild","getFirstChildOrThrow","isEmpty","$selectLastDescendant","node","lastDescendant","getLastDescendant","select","selectEnd","selectNext","TableActionMenu","cellMerge","contextRef","onClose","setIsMenuOpen","tableCellNode","_tableCellNode","editor","dropDownRef","updateTableCellNode","selectionCounts","updateSelectionCounts","canMergeCells","setCanMergeCells","canUnmergeCell","setCanUnmergeCell","y","registerMutationListener","nodeMutations","nodeUpdated","get","getKey","getEditorState","read","getLatest","skipInitialization","currentSelectionCounts","menuButtonElement","current","dropDownElement","rootElement","getRootElement","rootEleRect","getBoundingClientRect","menuButtonRect","style","opacity","dropDownElementRect","margin","leftPosition","right","width","window","innerWidth","position","left","pageXOffset","topPosition","top","height","innerHeight","bottom","pageYOffset","handleClickOutside","event","contains","target","addEventListener","removeEventListener","clearTableSelection","update","isAttached","tableNode","tableElement","getElementByKey","Error","tableObserver","$clearHighlight","markDirty","rootNode","selectStart","mergeTableCellsAtSelection","nodes","getNodes","firstCell","i","length","setColSpan","setRowSpan","getFirstChild","remove","append","getChildren","unmergeTableCellsAtSelection","insertTableRowAtSelection","shouldInsertAfter","insertTableColumnAtSelection","deleteTableRowAtSelection","deleteTableAtSelection","deleteTableColumnAtSelection","toggleTableRowIsHeader","tableRowIndex","tableRows","tableRow","newStyle","getHeaderStyles","ROW","forEach","tableCell","setHeaderStyles","toggleTableColumnIsHeader","tableColumnIndex","maxRowsLength","Math","max","map","row","COLUMN","r","tableCells","toggleRowStriping","setRowStriping","getRowStriping","mergeCellButton","_jsx","className","onClick","type","_jsxs","e","stopPropagation","ref","Fragment","__headerState","document","body","TableCellActionMenuContainer","anchorElem","menuButtonRef","menuRootRef","isMenuOpen","setTableMenuCellNode","$moveMenu","menu","nativeSelection","_window","activeElement","disable","classList","add","tableCellParentNodeDOM","anchorNode","tableCellNodeFromSelection","getNode","enabled","isSelecting","toggle","tableCellRect","anchorRect","transform","timeoutId","undefined","callback","delayedCallback","setTimeout","registerUpdateListener","registerCommand","registerRootListener","prevRootElement","clearTimeout","prevTableCellDOM","TableActionMenuPlugin","t0","$","isEditable","t1"],"sources":["../../../../../../src/features/experimental_table/client/plugins/TableActionMenuPlugin/index.tsx"],"sourcesContent":["'use client'\n\nimport type { TableObserver, TableRowNode, TableSelection } from '@lexical/table'\nimport type { ElementNode } from 'lexical'\nimport type { JSX } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n $deleteTableColumn__EXPERIMENTAL,\n $deleteTableRow__EXPERIMENTAL,\n $getNodeTriplet,\n $getTableCellNodeFromLexicalNode,\n $getTableColumnIndexFromTableCellNode,\n $getTableNodeFromLexicalNodeOrThrow,\n $getTableRowIndexFromTableCellNode,\n $insertTableColumn__EXPERIMENTAL,\n $insertTableRow__EXPERIMENTAL,\n $isTableCellNode,\n $isTableRowNode,\n $isTableSelection,\n $unmergeCell,\n getTableElement,\n getTableObserverFromTableElement,\n TableCellHeaderStates,\n TableCellNode,\n} from '@lexical/table'\nimport { mergeRegister } from '@lexical/utils'\nimport { useScrollInfo } from '@payloadcms/ui'\nimport {\n $createParagraphNode,\n $getRoot,\n $getSelection,\n $isElementNode,\n $isParagraphNode,\n $isRangeSelection,\n $isTextNode,\n COMMAND_PRIORITY_CRITICAL,\n getDOMSelection,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical'\nimport * as React from 'react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\n\nimport './index.scss'\nimport { MeatballsIcon } from '../../../../../lexical/ui/icons/Meatballs/index.js'\n\nfunction computeSelectionCount(selection: TableSelection): {\n columns: number\n rows: number\n} {\n const selectionShape = selection.getShape()\n return {\n columns: selectionShape.toX - selectionShape.fromX + 1,\n rows: selectionShape.toY - selectionShape.fromY + 1,\n }\n}\n\nfunction $canUnmerge(): boolean {\n const selection = $getSelection()\n if (\n ($isRangeSelection(selection) && !selection.isCollapsed()) ||\n ($isTableSelection(selection) && !selection.anchor.is(selection.focus)) ||\n (!$isRangeSelection(selection) && !$isTableSelection(selection))\n ) {\n return false\n }\n const [cell] = $getNodeTriplet(selection.anchor)\n return cell.__colSpan > 1 || cell.__rowSpan > 1\n}\n\nfunction $cellContainsEmptyParagraph(cell: TableCellNode): boolean {\n if (cell.getChildrenSize() !== 1) {\n return false\n }\n const firstChild = cell.getFirstChildOrThrow()\n if (!$isParagraphNode(firstChild) || !firstChild.isEmpty()) {\n return false\n }\n return true\n}\n\nfunction $selectLastDescendant(node: ElementNode): void {\n const lastDescendant = node.getLastDescendant()\n if ($isTextNode(lastDescendant)) {\n lastDescendant.select()\n } else if ($isElementNode(lastDescendant)) {\n lastDescendant.selectEnd()\n } else if (lastDescendant !== null) {\n lastDescendant.selectNext()\n }\n}\n\ntype TableCellActionMenuProps = Readonly<{\n cellMerge: boolean\n contextRef: { current: HTMLElement | null }\n onClose: () => void\n setIsMenuOpen: (isOpen: boolean) => void\n tableCellNode: TableCellNode\n}>\n\nfunction TableActionMenu({\n cellMerge,\n contextRef,\n onClose,\n setIsMenuOpen,\n tableCellNode: _tableCellNode,\n}: TableCellActionMenuProps) {\n const [editor] = useLexicalComposerContext()\n const dropDownRef = useRef<HTMLDivElement | null>(null)\n const [tableCellNode, updateTableCellNode] = useState(_tableCellNode)\n const [selectionCounts, updateSelectionCounts] = useState({\n columns: 1,\n rows: 1,\n })\n const [canMergeCells, setCanMergeCells] = useState(false)\n const [canUnmergeCell, setCanUnmergeCell] = useState(false)\n const { y } = useScrollInfo()\n\n useEffect(() => {\n return editor.registerMutationListener(\n TableCellNode,\n (nodeMutations) => {\n const nodeUpdated = nodeMutations.get(tableCellNode.getKey()) === 'updated'\n\n if (nodeUpdated) {\n editor.getEditorState().read(() => {\n updateTableCellNode(tableCellNode.getLatest())\n })\n }\n },\n { skipInitialization: true },\n )\n }, [editor, tableCellNode])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n // Merge cells\n if ($isTableSelection(selection)) {\n const currentSelectionCounts = computeSelectionCount(selection)\n updateSelectionCounts(computeSelectionCount(selection))\n\n setCanMergeCells(currentSelectionCounts.columns > 1 || currentSelectionCounts.rows > 1)\n }\n // Unmerge cell\n setCanUnmergeCell($canUnmerge())\n })\n }, [editor])\n\n useEffect(() => {\n const menuButtonElement = contextRef.current\n const dropDownElement = dropDownRef.current\n const rootElement = editor.getRootElement()\n\n if (menuButtonElement != null && dropDownElement != null && rootElement != null) {\n const rootEleRect = rootElement.getBoundingClientRect()\n const menuButtonRect = menuButtonElement.getBoundingClientRect()\n dropDownElement.style.opacity = '1'\n const dropDownElementRect = dropDownElement.getBoundingClientRect()\n const margin = 5\n let leftPosition = menuButtonRect.right + margin\n if (\n leftPosition + dropDownElementRect.width > window.innerWidth ||\n leftPosition + dropDownElementRect.width > rootEleRect.right\n ) {\n const position = menuButtonRect.left - dropDownElementRect.width - margin\n leftPosition = (position < 0 ? margin : position) + window.pageXOffset\n }\n dropDownElement.style.left = `${leftPosition + window.pageXOffset}px`\n\n let topPosition = menuButtonRect.top\n if (topPosition + dropDownElementRect.height > window.innerHeight) {\n const position = menuButtonRect.bottom - dropDownElementRect.height\n topPosition = (position < 0 ? margin : position) + window.pageYOffset\n }\n dropDownElement.style.top = `${topPosition}px`\n }\n }, [contextRef, dropDownRef, editor, y])\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (\n dropDownRef.current != null &&\n contextRef.current != null &&\n !dropDownRef.current.contains(event.target as Node) &&\n !contextRef.current.contains(event.target as Node)\n ) {\n setIsMenuOpen(false)\n }\n }\n\n window.addEventListener('click', handleClickOutside)\n\n return () => window.removeEventListener('click', handleClickOutside)\n }, [setIsMenuOpen, contextRef])\n\n const clearTableSelection = useCallback(() => {\n editor.update(() => {\n if (tableCellNode.isAttached()) {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const tableElement = getTableElement(tableNode, editor.getElementByKey(tableNode.getKey()))\n\n if (tableElement === null) {\n throw new Error('Expected to find tableElement in DOM')\n }\n\n const tableObserver = getTableObserverFromTableElement(tableElement)\n if (tableObserver !== null) {\n tableObserver.$clearHighlight()\n }\n\n tableNode.markDirty()\n updateTableCellNode(tableCellNode.getLatest())\n }\n\n const rootNode = $getRoot()\n rootNode.selectStart()\n })\n }, [editor, tableCellNode])\n\n const mergeTableCellsAtSelection = () => {\n editor.update(() => {\n const selection = $getSelection()\n if ($isTableSelection(selection)) {\n const { columns, rows } = computeSelectionCount(selection)\n const nodes = selection.getNodes()\n let firstCell: null | TableCellNode = null\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]\n if ($isTableCellNode(node)) {\n if (firstCell === null) {\n node.setColSpan(columns).setRowSpan(rows)\n firstCell = node\n const isEmpty = $cellContainsEmptyParagraph(node)\n let firstChild\n if (isEmpty && $isParagraphNode((firstChild = node.getFirstChild()))) {\n firstChild.remove()\n }\n } else if ($isTableCellNode(firstCell)) {\n const isEmpty = $cellContainsEmptyParagraph(node)\n if (!isEmpty) {\n firstCell.append(...node.getChildren())\n }\n node.remove()\n }\n }\n }\n if (firstCell !== null) {\n if (firstCell.getChildrenSize() === 0) {\n firstCell.append($createParagraphNode())\n }\n $selectLastDescendant(firstCell)\n }\n onClose()\n }\n })\n }\n\n const unmergeTableCellsAtSelection = () => {\n editor.update(() => {\n $unmergeCell()\n })\n }\n\n const insertTableRowAtSelection = useCallback(\n (shouldInsertAfter: boolean) => {\n editor.update(() => {\n $insertTableRow__EXPERIMENTAL(shouldInsertAfter)\n onClose()\n })\n },\n [editor, onClose],\n )\n\n const insertTableColumnAtSelection = useCallback(\n (shouldInsertAfter: boolean) => {\n editor.update(() => {\n for (let i = 0; i < selectionCounts.columns; i++) {\n $insertTableColumn__EXPERIMENTAL(shouldInsertAfter)\n }\n onClose()\n })\n },\n [editor, onClose, selectionCounts.columns],\n )\n\n const deleteTableRowAtSelection = useCallback(() => {\n editor.update(() => {\n $deleteTableRow__EXPERIMENTAL()\n onClose()\n })\n }, [editor, onClose])\n\n const deleteTableAtSelection = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n tableNode.remove()\n\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n const deleteTableColumnAtSelection = useCallback(() => {\n editor.update(() => {\n $deleteTableColumn__EXPERIMENTAL()\n onClose()\n })\n }, [editor, onClose])\n\n const toggleTableRowIsHeader = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n\n const tableRowIndex = $getTableRowIndexFromTableCellNode(tableCellNode)\n\n const tableRows = tableNode.getChildren()\n\n if (tableRowIndex >= tableRows.length || tableRowIndex < 0) {\n throw new Error('Expected table cell to be inside of table row.')\n }\n\n const tableRow = tableRows[tableRowIndex]\n\n if (!$isTableRowNode(tableRow)) {\n throw new Error('Expected table row')\n }\n\n const newStyle = tableCellNode.getHeaderStyles() ^ TableCellHeaderStates.ROW\n tableRow.getChildren().forEach((tableCell) => {\n if (!$isTableCellNode(tableCell)) {\n throw new Error('Expected table cell')\n }\n\n tableCell.setHeaderStyles(newStyle, TableCellHeaderStates.ROW)\n })\n\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n const toggleTableColumnIsHeader = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n\n const tableColumnIndex = $getTableColumnIndexFromTableCellNode(tableCellNode)\n\n const tableRows = tableNode.getChildren<TableRowNode>()\n const maxRowsLength = Math.max(...tableRows.map((row) => row.getChildren().length))\n\n if (tableColumnIndex >= maxRowsLength || tableColumnIndex < 0) {\n throw new Error('Expected table cell to be inside of table row.')\n }\n\n const newStyle = tableCellNode.getHeaderStyles() ^ TableCellHeaderStates.COLUMN\n for (let r = 0; r < tableRows.length; r++) {\n const tableRow = tableRows[r]\n\n if (!$isTableRowNode(tableRow)) {\n throw new Error('Expected table row')\n }\n\n const tableCells = tableRow.getChildren()\n if (tableColumnIndex >= tableCells.length) {\n // if cell is outside of bounds for the current row (for example various merge cell cases) we shouldn't highlight it\n continue\n }\n\n const tableCell = tableCells[tableColumnIndex]\n\n if (!$isTableCellNode(tableCell)) {\n throw new Error('Expected table cell')\n }\n\n tableCell.setHeaderStyles(newStyle, TableCellHeaderStates.COLUMN)\n }\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n const toggleRowStriping = useCallback(() => {\n editor.update(() => {\n if (tableCellNode.isAttached()) {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n if (tableNode) {\n tableNode.setRowStriping(!tableNode.getRowStriping())\n }\n }\n\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n let mergeCellButton: JSX.Element | null = null\n if (cellMerge) {\n if (canMergeCells) {\n mergeCellButton = (\n <button\n className=\"item\"\n data-test-id=\"table-merge-cells\"\n onClick={() => mergeTableCellsAtSelection()}\n type=\"button\"\n >\n <span className=\"text\">Merge cells</span>\n </button>\n )\n } else if (canUnmergeCell) {\n mergeCellButton = (\n <button\n className=\"item\"\n data-test-id=\"table-unmerge-cells\"\n onClick={() => unmergeTableCellsAtSelection()}\n type=\"button\"\n >\n <span className=\"text\">Unmerge cells</span>\n </button>\n )\n }\n }\n\n return createPortal(\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions,jsx-a11y/click-events-have-key-events\n <div\n className=\"table-action-menu-dropdown\"\n onClick={(e) => {\n e.stopPropagation()\n }}\n ref={dropDownRef}\n >\n {mergeCellButton ? (\n <React.Fragment>\n {mergeCellButton}\n <hr />\n </React.Fragment>\n ) : null}\n\n <button\n className=\"item\"\n data-test-id=\"table-row-striping\"\n onClick={() => toggleRowStriping()}\n type=\"button\"\n >\n <span className=\"text\">Toggle Row Striping</span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-insert-row-above\"\n onClick={() => insertTableRowAtSelection(false)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.rows === 1 ? 'row' : `${selectionCounts.rows} rows`} above\n </span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-insert-row-below\"\n onClick={() => insertTableRowAtSelection(true)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.rows === 1 ? 'row' : `${selectionCounts.rows} rows`} below\n </span>\n </button>\n <hr />\n <button\n className=\"item\"\n data-test-id=\"table-insert-column-before\"\n onClick={() => insertTableColumnAtSelection(false)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.columns === 1 ? 'column' : `${selectionCounts.columns} columns`}{' '}\n left\n </span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-insert-column-after\"\n onClick={() => insertTableColumnAtSelection(true)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.columns === 1 ? 'column' : `${selectionCounts.columns} columns`}{' '}\n right\n </span>\n </button>\n <hr />\n <button\n className=\"item\"\n data-test-id=\"table-delete-columns\"\n onClick={() => deleteTableColumnAtSelection()}\n type=\"button\"\n >\n <span className=\"text\">Delete column</span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-delete-rows\"\n onClick={() => deleteTableRowAtSelection()}\n type=\"button\"\n >\n <span className=\"text\">Delete row</span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-delete\"\n onClick={() => deleteTableAtSelection()}\n type=\"button\"\n >\n <span className=\"text\">Delete table</span>\n </button>\n <hr />\n <button className=\"item\" onClick={() => toggleTableRowIsHeader()} type=\"button\">\n <span className=\"text\">\n {(tableCellNode.__headerState & TableCellHeaderStates.ROW) === TableCellHeaderStates.ROW\n ? 'Remove'\n : 'Add'}{' '}\n row header\n </span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-column-header\"\n onClick={() => toggleTableColumnIsHeader()}\n type=\"button\"\n >\n <span className=\"text\">\n {(tableCellNode.__headerState & TableCellHeaderStates.COLUMN) ===\n TableCellHeaderStates.COLUMN\n ? 'Remove'\n : 'Add'}{' '}\n column header\n </span>\n </button>\n </div>,\n document.body,\n )\n}\n\nfunction TableCellActionMenuContainer({\n anchorElem,\n cellMerge,\n}: {\n anchorElem: HTMLElement\n cellMerge: boolean\n}): JSX.Element {\n const [editor] = useLexicalComposerContext()\n\n const menuButtonRef = useRef<HTMLDivElement | null>(null)\n const menuRootRef = useRef<HTMLButtonElement | null>(null)\n const [isMenuOpen, setIsMenuOpen] = useState(false)\n\n const [tableCellNode, setTableMenuCellNode] = useState<null | TableCellNode>(null)\n\n const $moveMenu = useCallback(() => {\n const menu = menuButtonRef.current\n const selection = $getSelection()\n const nativeSelection = getDOMSelection(editor._window)\n const activeElement = document.activeElement\n function disable() {\n if (menu) {\n menu.classList.remove('table-cell-action-button-container--active')\n menu.classList.add('table-cell-action-button-container--inactive')\n }\n setTableMenuCellNode(null)\n }\n\n if (selection == null || menu == null) {\n return disable()\n }\n\n const rootElement = editor.getRootElement()\n let tableObserver: null | TableObserver = null\n let tableCellParentNodeDOM: HTMLElement | null = null\n\n if (\n $isRangeSelection(selection) &&\n rootElement !== null &&\n nativeSelection !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n const tableCellNodeFromSelection = $getTableCellNodeFromLexicalNode(\n selection.anchor.getNode(),\n )\n\n if (tableCellNodeFromSelection == null) {\n return disable()\n }\n\n tableCellParentNodeDOM = editor.getElementByKey(tableCellNodeFromSelection.getKey())\n\n if (tableCellParentNodeDOM == null || !tableCellNodeFromSelection.isAttached()) {\n return disable()\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNodeFromSelection)\n const tableElement = getTableElement(tableNode, editor.getElementByKey(tableNode.getKey()))\n\n if (tableElement === null) {\n throw new Error('TableActionMenu: Expected to find tableElement in DOM')\n }\n\n tableObserver = getTableObserverFromTableElement(tableElement)\n setTableMenuCellNode(tableCellNodeFromSelection)\n } else if ($isTableSelection(selection)) {\n const anchorNode = $getTableCellNodeFromLexicalNode(selection.anchor.getNode())\n if (!$isTableCellNode(anchorNode)) {\n throw new Error('TableSelection anchorNode must be a TableCellNode')\n }\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(anchorNode)\n const tableElement = getTableElement(tableNode, editor.getElementByKey(tableNode.getKey()))\n\n if (tableElement === null) {\n throw new Error('TableActionMenu: Expected to find tableElement in DOM')\n }\n\n tableObserver = getTableObserverFromTableElement(tableElement)\n tableCellParentNodeDOM = editor.getElementByKey(anchorNode.getKey())\n } else if (!activeElement) {\n return disable()\n }\n if (tableObserver === null || tableCellParentNodeDOM === null) {\n return disable()\n }\n const enabled = !tableObserver || !tableObserver.isSelecting\n menu.classList.toggle('table-cell-action-button-container--active', enabled)\n menu.classList.toggle('table-cell-action-button-container--inactive', !enabled)\n if (enabled) {\n const tableCellRect = tableCellParentNodeDOM.getBoundingClientRect()\n const anchorRect = anchorElem.getBoundingClientRect()\n const top = tableCellRect.top - anchorRect.top\n const left = tableCellRect.right - anchorRect.left\n menu.style.transform = `translate(${left}px, ${top}px)`\n }\n }, [editor, anchorElem])\n\n useEffect(() => {\n // We call the $moveMenu callback every time the selection changes,\n // once up front, and once after each mouseUp\n let timeoutId: ReturnType<typeof setTimeout> | undefined = undefined\n const callback = () => {\n timeoutId = undefined\n editor.getEditorState().read($moveMenu)\n }\n const delayedCallback = () => {\n if (timeoutId === undefined) {\n timeoutId = setTimeout(callback, 0)\n }\n return false\n }\n return mergeRegister(\n editor.registerUpdateListener(delayedCallback),\n editor.registerCommand(SELECTION_CHANGE_COMMAND, delayedCallback, COMMAND_PRIORITY_CRITICAL),\n editor.registerRootListener((rootElement, prevRootElement) => {\n if (prevRootElement) {\n prevRootElement.removeEventListener('mouseup', delayedCallback)\n }\n if (rootElement) {\n rootElement.addEventListener('mouseup', delayedCallback)\n delayedCallback()\n }\n }),\n () => clearTimeout(timeoutId),\n )\n })\n\n const prevTableCellDOM = useRef(tableCellNode)\n\n useEffect(() => {\n if (prevTableCellDOM.current !== tableCellNode) {\n setIsMenuOpen(false)\n }\n\n prevTableCellDOM.current = tableCellNode\n }, [prevTableCellDOM, tableCellNode])\n\n return (\n <div className=\"table-cell-action-button-container\" ref={menuButtonRef}>\n {tableCellNode != null && (\n <React.Fragment>\n <button\n className=\"table-cell-action-button\"\n onClick={(e) => {\n e.stopPropagation()\n setIsMenuOpen(!isMenuOpen)\n }}\n ref={menuRootRef}\n type=\"button\"\n >\n <MeatballsIcon />\n </button>\n {isMenuOpen && (\n <TableActionMenu\n cellMerge={cellMerge}\n contextRef={menuRootRef}\n onClose={() => setIsMenuOpen(false)}\n setIsMenuOpen={setIsMenuOpen}\n tableCellNode={tableCellNode}\n />\n )}\n </React.Fragment>\n )}\n </div>\n )\n}\n\nexport const TableActionMenuPlugin: PluginComponentWithAnchor = ({ anchorElem }) => {\n const isEditable = useLexicalEditable()\n return createPortal(\n isEditable ? (\n <TableCellActionMenuContainer anchorElem={anchorElem ?? document.body} cellMerge />\n ) : null,\n anchorElem ?? document.body,\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/experimental_table/client/plugins/TableCellResizerPlugin/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/experimental_table/client/plugins/TableCellResizerPlugin/index.tsx"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAyXjE,eAAO,MAAM,sBAAsB,EAAE,eAQpC,CAAA"}
|
|
@@ -4,7 +4,7 @@ import { c as _c } from "react/compiler-runtime";
|
|
|
4
4
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
6
6
|
import { useLexicalEditable } from '@lexical/react/useLexicalEditable';
|
|
7
|
-
import { $computeTableMapSkipCellCheck, $getTableNodeFromLexicalNodeOrThrow, $getTableRowIndexFromTableCellNode, $isTableCellNode, $isTableRowNode, getDOMCellFromTarget, TableNode } from '@lexical/table';
|
|
7
|
+
import { $computeTableMapSkipCellCheck, $getTableNodeFromLexicalNodeOrThrow, $getTableRowIndexFromTableCellNode, $isTableCellNode, $isTableRowNode, getDOMCellFromTarget, getTableElement, TableNode } from '@lexical/table';
|
|
8
8
|
import { calculateZoomLevel } from '@lexical/utils';
|
|
9
9
|
import { $getNearestNodeFromDOMNode } from 'lexical';
|
|
10
10
|
import * as React from 'react';
|
|
@@ -48,52 +48,48 @@ function TableCellResizer({
|
|
|
48
48
|
}, [editor]);
|
|
49
49
|
useEffect(() => {
|
|
50
50
|
const onMouseMove = event_0 => {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
51
|
+
const target = event_0.target;
|
|
52
|
+
if (draggingDirection) {
|
|
53
|
+
updateMouseCurrentPos({
|
|
54
|
+
x: event_0.clientX,
|
|
55
|
+
y: event_0.clientY
|
|
56
|
+
});
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
updateIsMouseDown(isMouseDownOnEvent(event_0));
|
|
60
|
+
if (resizerRef.current && resizerRef.current.contains(target)) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (targetRef.current !== target) {
|
|
64
|
+
targetRef.current = target;
|
|
65
|
+
const cell = getDOMCellFromTarget(target);
|
|
66
|
+
if (cell && activeCell !== cell) {
|
|
67
|
+
editor.getEditorState().read(() => {
|
|
68
|
+
const tableCellNode = $getNearestNodeFromDOMNode(cell.elem);
|
|
69
|
+
if (!tableCellNode) {
|
|
70
|
+
throw new Error('TableCellResizer: Table cell node not found.');
|
|
71
|
+
}
|
|
72
|
+
const tableNode_0 = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);
|
|
73
|
+
const tableElement = getTableElement(tableNode_0, editor.getElementByKey(tableNode_0.getKey()));
|
|
74
|
+
if (!tableElement) {
|
|
75
|
+
throw new Error('TableCellResizer: Table element not found.');
|
|
76
|
+
}
|
|
77
|
+
targetRef.current = target;
|
|
78
|
+
tableRectRef.current = tableElement.getBoundingClientRect();
|
|
79
|
+
updateActiveCell(cell);
|
|
80
|
+
}, {
|
|
81
|
+
editor
|
|
57
82
|
});
|
|
58
|
-
|
|
83
|
+
} else if (cell == null) {
|
|
84
|
+
resetState();
|
|
59
85
|
}
|
|
60
|
-
|
|
61
|
-
if (resizerRef.current && resizerRef.current.contains(target)) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
if (targetRef.current !== target) {
|
|
65
|
-
targetRef.current = target;
|
|
66
|
-
const cell = getDOMCellFromTarget(target);
|
|
67
|
-
if (cell && activeCell !== cell) {
|
|
68
|
-
editor.update(() => {
|
|
69
|
-
const tableCellNode = $getNearestNodeFromDOMNode(cell.elem);
|
|
70
|
-
if (!tableCellNode) {
|
|
71
|
-
throw new Error('TableCellResizer: Table cell node not found.');
|
|
72
|
-
}
|
|
73
|
-
const tableNode_0 = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);
|
|
74
|
-
const tableElement = editor.getElementByKey(tableNode_0.getKey());
|
|
75
|
-
if (!tableElement) {
|
|
76
|
-
throw new Error('TableCellResizer: Table element not found.');
|
|
77
|
-
}
|
|
78
|
-
targetRef.current = target;
|
|
79
|
-
tableRectRef.current = tableElement.getBoundingClientRect();
|
|
80
|
-
updateActiveCell(cell);
|
|
81
|
-
});
|
|
82
|
-
} else if (cell == null) {
|
|
83
|
-
resetState();
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}, 0);
|
|
86
|
+
}
|
|
87
87
|
};
|
|
88
88
|
const onMouseDown = event_1 => {
|
|
89
|
-
|
|
90
|
-
updateIsMouseDown(true);
|
|
91
|
-
}, 0);
|
|
89
|
+
updateIsMouseDown(true);
|
|
92
90
|
};
|
|
93
91
|
const onMouseUp = event_2 => {
|
|
94
|
-
|
|
95
|
-
updateIsMouseDown(false);
|
|
96
|
-
}, 0);
|
|
92
|
+
updateIsMouseDown(false);
|
|
97
93
|
};
|
|
98
94
|
const removeRootListener = editor.registerRootListener((rootElement, prevRootElement) => {
|
|
99
95
|
prevRootElement?.removeEventListener('mousemove', onMouseMove);
|