@payloadcms/richtext-lexical 3.0.0-beta.90 → 3.0.0-beta.91

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.
Files changed (80) hide show
  1. package/dist/exports/client/Field-SUWHJ4HF.js +2 -0
  2. package/dist/exports/client/Field-SUWHJ4HF.js.map +7 -0
  3. package/dist/exports/client/RelationshipComponent-EZORSGUZ.js +2 -0
  4. package/dist/exports/client/RelationshipComponent-EZORSGUZ.js.map +7 -0
  5. package/dist/exports/client/bundled.css +1 -1
  6. package/dist/exports/client/{chunk-NI6Z4GBD.js → chunk-OLSILJA6.js} +1 -1
  7. package/dist/exports/client/{chunk-NI6Z4GBD.js.map → chunk-OLSILJA6.js.map} +1 -1
  8. package/dist/exports/client/{chunk-G5DTIOPI.js → chunk-TD7O23AB.js} +2 -2
  9. package/dist/exports/client/{chunk-G5DTIOPI.js.map → chunk-TD7O23AB.js.map} +2 -2
  10. package/dist/exports/client/{chunk-LGUXX2QH.js → chunk-UJDWBQ2K.js} +2 -2
  11. package/dist/exports/client/{chunk-LGUXX2QH.js.map → chunk-UJDWBQ2K.js.map} +2 -2
  12. package/dist/exports/client/{chunk-OKMIHD2R.js → chunk-YL453UOS.js} +2 -2
  13. package/dist/exports/client/chunk-YSI2QILQ.js +2 -0
  14. package/dist/exports/client/{chunk-TO2W7Q2G.js.map → chunk-YSI2QILQ.js.map} +2 -2
  15. package/dist/exports/client/component-2YLEVOFH.js +2 -0
  16. package/dist/exports/client/component-2YLEVOFH.js.map +7 -0
  17. package/dist/exports/client/{component-LCAAX56T.js → component-7RAP75FW.js} +2 -2
  18. package/dist/exports/client/{componentInline-72VZAAHP.js → componentInline-YSHGRL2J.js} +2 -2
  19. package/dist/exports/client/index.js +12 -12
  20. package/dist/exports/client/index.js.map +3 -3
  21. package/dist/features/debug/testRecorder/client/plugin/index.js +187 -363
  22. package/dist/features/debug/testRecorder/client/plugin/index.js.map +1 -1
  23. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js +234 -470
  24. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
  25. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js +3 -16
  26. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
  27. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js +59 -123
  28. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
  29. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
  30. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +5 -3
  31. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  32. package/dist/features/migrations/slateToLexical/converter/converters/link/converter.js +1 -1
  33. package/dist/features/migrations/slateToLexical/converter/converters/link/converter.js.map +1 -1
  34. package/dist/features/relationship/client/components/RelationshipComponent.d.ts.map +1 -1
  35. package/dist/features/relationship/client/components/RelationshipComponent.js +8 -5
  36. package/dist/features/relationship/client/components/RelationshipComponent.js.map +1 -1
  37. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts +6 -4
  38. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts.map +1 -1
  39. package/dist/features/relationship/server/nodes/RelationshipNode.js.map +1 -1
  40. package/dist/features/toolbars/inline/client/Toolbar/index.js +53 -94
  41. package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
  42. package/dist/features/upload/client/component/index.d.ts.map +1 -1
  43. package/dist/features/upload/client/component/index.js +3 -0
  44. package/dist/features/upload/client/component/index.js.map +1 -1
  45. package/dist/features/upload/server/nodes/UploadNode.d.ts +9 -7
  46. package/dist/features/upload/server/nodes/UploadNode.d.ts.map +1 -1
  47. package/dist/features/upload/server/nodes/UploadNode.js.map +1 -1
  48. package/dist/field/bundled.css +1 -1
  49. package/dist/lexical/config/client/EditorConfigProvider.js +1 -1
  50. package/dist/lexical/config/client/EditorConfigProvider.js.map +1 -1
  51. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +71 -109
  52. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
  53. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js +96 -135
  54. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
  55. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -1
  56. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +114 -139
  57. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  58. package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.d.ts.map +1 -1
  59. package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.js +7 -25
  60. package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.js.map +1 -1
  61. package/dist/lexical/plugins/handles/utils/setHandlePosition.d.ts.map +1 -1
  62. package/dist/lexical/plugins/handles/utils/setHandlePosition.js +4 -6
  63. package/dist/lexical/plugins/handles/utils/setHandlePosition.js.map +1 -1
  64. package/dist/lexical/ui/icons/Caret/index.svg +2 -2
  65. package/dist/lexical/utils/setFloatingElemPosition.js +1 -1
  66. package/dist/lexical/utils/setFloatingElemPosition.js.map +1 -1
  67. package/dist/utilities/migrateSlateToLexical/index.d.ts.map +1 -1
  68. package/dist/utilities/migrateSlateToLexical/index.js +16 -1
  69. package/dist/utilities/migrateSlateToLexical/index.js.map +1 -1
  70. package/package.json +13 -13
  71. package/dist/exports/client/Field-63NGLPJB.js +0 -2
  72. package/dist/exports/client/Field-63NGLPJB.js.map +0 -7
  73. package/dist/exports/client/RelationshipComponent-3QWBV4GT.js +0 -2
  74. package/dist/exports/client/RelationshipComponent-3QWBV4GT.js.map +0 -7
  75. package/dist/exports/client/chunk-TO2W7Q2G.js +0 -2
  76. package/dist/exports/client/component-3OFD6Q4Z.js +0 -2
  77. package/dist/exports/client/component-3OFD6Q4Z.js.map +0 -7
  78. /package/dist/exports/client/{chunk-OKMIHD2R.js.map → chunk-YL453UOS.js.map} +0 -0
  79. /package/dist/exports/client/{component-LCAAX56T.js.map → component-7RAP75FW.js.map} +0 -0
  80. /package/dist/exports/client/{componentInline-72VZAAHP.js.map → componentInline-YSHGRL2J.js.map} +0 -0
@@ -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","TableCellHeaderStates","TableCellNode","getTableObserverFromTableElement","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","isTableSelectionRectangular","nodes","getNodes","currentRows","currentRow","expectedColumns","currentColumns","i","length","node","row","getParentOrThrow","Error","colSpan","__colSpan","j","undefined","__rowSpan","every","v","$canUnmerge","isCollapsed","anchor","is","focus","cell","$cellContainsEmptyParagraph","getChildrenSize","firstChild","getFirstChildOrThrow","isEmpty","$selectLastDescendant","lastDescendant","getLastDescendant","select","selectEnd","selectNext","TableActionMenu","t0","$","cellMerge","contextRef","onClose","setIsMenuOpen","tableCellNode","_tableCellNode","editor","dropDownRef","updateTableCellNode","t1","Symbol","for","selectionCounts","updateSelectionCounts","canMergeCells","setCanMergeCells","canUnmergeCell","setCanUnmergeCell","y","t2","t3","registerMutationListener","nodeMutations","nodeUpdated","get","getKey","getEditorState","read","getLatest","skipInitialization","t4","t5","currentSelectionCounts","menuButtonElement","current","dropDownElement","rootElement","getRootElement","rootEleRect","getBoundingClientRect","menuButtonRect","style","opacity","dropDownElementRect","leftPosition","right","width","window","innerWidth","position","left","pageXOffset","topPosition","top","height","innerHeight","position_0","bottom","pageYOffset","t6","handleClickOutside","event","contains","target","addEventListener","removeEventListener","t7","update","isAttached","tableNode","tableElement","getElementByKey","tableSelection","clearHighlight","markDirty","rootNode","selectStart","clearTableSelection","t8","selection_0","firstCell","setColSpan","setRowSpan","getFirstChild","remove","isEmpty_0","append","getChildren","mergeTableCellsAtSelection","t9","unmergeTableCellsAtSelection","t10","shouldInsertAfter","insertTableRowAtSelection","t11","shouldInsertAfter_0","i_0","insertTableColumnAtSelection","t12","deleteTableRowAtSelection","t13","tableNode_0","deleteTableAtSelection","t14","deleteTableColumnAtSelection","t15","tableNode_1","tableRowIndex","tableRows","tableRow","forEach","tableCell","toggleHeaderStyle","ROW","toggleTableRowIsHeader","t16","tableNode_2","tableColumnIndex","tableRows_0","maxRowsLength","Math","max","map","r","tableRow_0","tableCells","tableCell_0","COLUMN","toggleTableColumnIsHeader","mergeCellButton","t17","t18","t19","t20","t21","t22","t23","t24","t25","_jsxs","className","onClick","_temp","ref","children","Fragment","_jsx","type","__headerState","e","stopPropagation","TableCellActionMenuContainer","anchorElem","menuButtonRef","menuRootRef","isMenuOpen","setTableMenuCellNode","$moveMenu","menu","nativeSelection","getSelection","activeElement","document","anchorNode","tableCellNodeFromSelection","getNode","tableCellParentNodeDOM","registerUpdateListener","menuButtonDOM","tableCellNodeDOM","tableCellRect","menuRect","anchorRect","transform","prevTableCellDOM","TableActionMenuPlugin","isEditable","body"],"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 TableCellHeaderStates,\n TableCellNode,\n getTableObserverFromTableElement,\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\n// This is important when merging cells as there is no good way to re-merge weird shapes (a result\n// of selecting merged cells and non-merged)\nfunction isTableSelectionRectangular(selection: TableSelection): boolean {\n const nodes = selection.getNodes()\n const currentRows: Array<number> = []\n let currentRow = null\n let expectedColumns = null\n let currentColumns = 0\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]\n if ($isTableCellNode(node)) {\n const row = node.getParentOrThrow()\n if ($isTableRowNode(row)) {\n throw new Error('Expected CellNode to have a RowNode parent')\n }\n if (currentRow !== row) {\n if (expectedColumns !== null && currentColumns !== expectedColumns) {\n return false\n }\n if (currentRow !== null) {\n expectedColumns = currentColumns\n }\n currentRow = row\n currentColumns = 0\n }\n const colSpan = node.__colSpan\n for (let j = 0; j < colSpan; j++) {\n if (currentRows[currentColumns + j] === undefined) {\n currentRows[currentColumns + j] = 0\n }\n currentRows[currentColumns + j] += node.__rowSpan\n }\n currentColumns += colSpan\n }\n }\n return (\n (expectedColumns === null || currentColumns === expectedColumns) &&\n currentRows.every((v) => v === currentRows[0])\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 setCanMergeCells(\n isTableSelectionRectangular(selection) &&\n (currentSelectionCounts.columns > 1 || currentSelectionCounts.rows > 1),\n )\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 tableSelection = getTableObserverFromTableElement(tableElement)\n if (tableSelection !== null) {\n tableSelection.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: TableCellNode | null = 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 tableRow.getChildren().forEach((tableCell) => {\n if (!$isTableCellNode(tableCell)) {\n throw new Error('Expected table cell')\n }\n\n tableCell.toggleHeaderStyle(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 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.toggleHeaderStyle(TableCellHeaderStates.COLUMN)\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-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<TableCellNode | null>(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":["useLexicalComposerContext","useLexicalEditable","$deleteTableColumn__EXPERIMENTAL","$deleteTableRow__EXPERIMENTAL","$getNodeTriplet","$getTableCellNodeFromLexicalNode","$getTableColumnIndexFromTableCellNode","$getTableNodeFromLexicalNodeOrThrow","$getTableRowIndexFromTableCellNode","$insertTableColumn__EXPERIMENTAL","$insertTableRow__EXPERIMENTAL","$isTableCellNode","$isTableRowNode","$isTableSelection","$unmergeCell","TableCellHeaderStates","TableCellNode","getTableObserverFromTableElement","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","isTableSelectionRectangular","nodes","getNodes","currentRows","currentRow","expectedColumns","currentColumns","i","length","node","row","getParentOrThrow","Error","colSpan","__colSpan","j","undefined","__rowSpan","every","v","$canUnmerge","isCollapsed","anchor","is","focus","cell","$cellContainsEmptyParagraph","getChildrenSize","firstChild","getFirstChildOrThrow","isEmpty","$selectLastDescendant","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","tableSelection","clearHighlight","markDirty","rootNode","selectStart","mergeTableCellsAtSelection","firstCell","setColSpan","setRowSpan","getFirstChild","remove","append","getChildren","unmergeTableCellsAtSelection","insertTableRowAtSelection","shouldInsertAfter","insertTableColumnAtSelection","deleteTableRowAtSelection","deleteTableAtSelection","deleteTableColumnAtSelection","toggleTableRowIsHeader","tableRowIndex","tableRows","tableRow","forEach","tableCell","toggleHeaderStyle","ROW","toggleTableColumnIsHeader","tableColumnIndex","maxRowsLength","Math","max","map","r","tableCells","COLUMN","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","isEditable"],"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 TableCellHeaderStates,\n TableCellNode,\n getTableObserverFromTableElement,\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\n// This is important when merging cells as there is no good way to re-merge weird shapes (a result\n// of selecting merged cells and non-merged)\nfunction isTableSelectionRectangular(selection: TableSelection): boolean {\n const nodes = selection.getNodes()\n const currentRows: Array<number> = []\n let currentRow = null\n let expectedColumns = null\n let currentColumns = 0\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]\n if ($isTableCellNode(node)) {\n const row = node.getParentOrThrow()\n if ($isTableRowNode(row)) {\n throw new Error('Expected CellNode to have a RowNode parent')\n }\n if (currentRow !== row) {\n if (expectedColumns !== null && currentColumns !== expectedColumns) {\n return false\n }\n if (currentRow !== null) {\n expectedColumns = currentColumns\n }\n currentRow = row\n currentColumns = 0\n }\n const colSpan = node.__colSpan\n for (let j = 0; j < colSpan; j++) {\n if (currentRows[currentColumns + j] === undefined) {\n currentRows[currentColumns + j] = 0\n }\n currentRows[currentColumns + j] += node.__rowSpan\n }\n currentColumns += colSpan\n }\n }\n return (\n (expectedColumns === null || currentColumns === expectedColumns) &&\n currentRows.every((v) => v === currentRows[0])\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 setCanMergeCells(\n isTableSelectionRectangular(selection) &&\n (currentSelectionCounts.columns > 1 || currentSelectionCounts.rows > 1),\n )\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 tableSelection = getTableObserverFromTableElement(tableElement)\n if (tableSelection !== null) {\n tableSelection.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: TableCellNode | null = 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 tableRow.getChildren().forEach((tableCell) => {\n if (!$isTableCellNode(tableCell)) {\n throw new Error('Expected table cell')\n }\n\n tableCell.toggleHeaderStyle(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 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.toggleHeaderStyle(TableCellHeaderStates.COLUMN)\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-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<TableCellNode | null>(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,6 +1,5 @@
1
1
  'use client';
2
2
 
3
- import { c as _c } from "react/compiler-runtime";
4
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
4
  import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
6
5
  import { useLexicalEditable } from '@lexical/react/useLexicalEditable';
@@ -300,22 +299,10 @@ function TableCellResizer({
300
299
  });
301
300
  }
302
301
  export const TableCellResizerPlugin = () => {
303
- const $ = _c(3);
304
302
  const [editor] = useLexicalComposerContext();
305
303
  const isEditable = useLexicalEditable();
306
- let t0;
307
- let t1;
308
- if ($[0] !== isEditable || $[1] !== editor) {
309
- t1 = isEditable ? createPortal(_jsx(TableCellResizer, {
310
- editor
311
- }), document.body) : null;
312
- $[0] = isEditable;
313
- $[1] = editor;
314
- $[2] = t1;
315
- } else {
316
- t1 = $[2];
317
- }
318
- t0 = t1;
319
- return t0;
304
+ return useMemo(() => isEditable ? /*#__PURE__*/createPortal( /*#__PURE__*/_jsx(TableCellResizer, {
305
+ editor: editor
306
+ }), document.body) : null, [editor, isEditable]);
320
307
  };
321
308
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useLexicalEditable","$computeTableMapSkipCellCheck","$getTableNodeFromLexicalNodeOrThrow","$getTableRowIndexFromTableCellNode","$isTableCellNode","$isTableRowNode","getDOMCellFromTarget","calculateZoomLevel","$getNearestNodeFromDOMNode","React","useCallback","useEffect","useMemo","useRef","useState","createPortal","useEditorConfigContext","MIN_ROW_HEIGHT","MIN_COLUMN_WIDTH","TableCellResizer","editor","targetRef","resizerRef","tableRectRef","editorConfig","mouseStartPosRef","mouseCurrentPos","updateMouseCurrentPos","activeCell","updateActiveCell","isMouseDown","updateIsMouseDown","draggingDirection","updateDraggingDirection","resetState","current","isMouseDownOnEvent","event","buttons","onMouseMove","setTimeout","target","x","clientX","y","clientY","contains","cell","update","tableCellNode","elem","Error","tableNode","tableElement","getElementByKey","getKey","getBoundingClientRect","onMouseDown","onMouseUp","removeRootListener","registerRootListener","rootElement","prevRootElement","addEventListener","removeEventListener","isHeightChanging","direction","updateRowHeight","heightChange","tableRowIndex","tableRows","getChildren","length","tableRow","height","getHeight","undefined","rowCells","Math","min","map","getCellNodeHeight","Infinity","newHeight","max","setHeight","tag","getCellNodeWidth","activeEditor","width","getWidth","domCellNode","computedStyle","getComputedStyle","clientWidth","parseFloat","paddingLeft","paddingRight","clientHeight","getCellColumnIndex","tableMap","row","column","updateColumnWidth","widthChange","columnIndex","startRow","newWidth","setWidth","mouseUpHandler","handler","preventDefault","stopPropagation","zoom","document","toggleResize","getResizers","left","top","zoneWidth","styles","bottom","backgroundColor","cursor","window","pageXOffset","pageYOffset","right","tableRect","resizerStyles","_jsx","ref","_jsxs","Fragment","className","lexical","theme","tableCellResizer","style","TableCellResizerPlugin","$","isEditable","t0","t1"],"sources":["../../../../../../src/features/experimental_table/client/plugins/TableCellResizerPlugin/index.tsx"],"sourcesContent":["'use client'\n\nimport type { TableCellNode, TableDOMCell, TableMapType, TableMapValueType } from '@lexical/table'\nimport type { LexicalEditor } from 'lexical'\nimport type { JSX, MouseEventHandler } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n $computeTableMapSkipCellCheck,\n $getTableNodeFromLexicalNodeOrThrow,\n $getTableRowIndexFromTableCellNode,\n $isTableCellNode,\n $isTableRowNode,\n getDOMCellFromTarget,\n} from '@lexical/table'\nimport { calculateZoomLevel } from '@lexical/utils'\nimport { $getNearestNodeFromDOMNode } from 'lexical'\nimport * as React from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\n\ntype MousePosition = {\n x: number\n y: number\n}\n\ntype MouseDraggingDirection = 'bottom' | 'right'\n\nconst MIN_ROW_HEIGHT = 33\nconst MIN_COLUMN_WIDTH = 50\n\nfunction TableCellResizer({ editor }: { editor: LexicalEditor }): JSX.Element {\n const targetRef = useRef<HTMLElement | null>(null)\n const resizerRef = useRef<HTMLDivElement | null>(null)\n const tableRectRef = useRef<ClientRect | null>(null)\n const editorConfig = useEditorConfigContext()\n\n const mouseStartPosRef = useRef<MousePosition | null>(null)\n const [mouseCurrentPos, updateMouseCurrentPos] = useState<MousePosition | null>(null)\n\n const [activeCell, updateActiveCell] = useState<TableDOMCell | null>(null)\n const [isMouseDown, updateIsMouseDown] = useState<boolean>(false)\n const [draggingDirection, updateDraggingDirection] = useState<MouseDraggingDirection | null>(null)\n\n const resetState = useCallback(() => {\n updateActiveCell(null)\n targetRef.current = null\n updateDraggingDirection(null)\n mouseStartPosRef.current = null\n tableRectRef.current = null\n }, [])\n\n const isMouseDownOnEvent = (event: MouseEvent) => {\n return (event.buttons & 1) === 1\n }\n\n useEffect(() => {\n const onMouseMove = (event: MouseEvent) => {\n setTimeout(() => {\n const target = event.target\n\n if (draggingDirection) {\n updateMouseCurrentPos({\n x: event.clientX,\n y: event.clientY,\n })\n return\n }\n updateIsMouseDown(isMouseDownOnEvent(event))\n if (resizerRef.current && resizerRef.current.contains(target as Node)) {\n return\n }\n\n if (targetRef.current !== target) {\n targetRef.current = target as HTMLElement\n const cell = getDOMCellFromTarget(target as HTMLElement)\n\n if (cell && activeCell !== cell) {\n editor.update(() => {\n const tableCellNode = $getNearestNodeFromDOMNode(cell.elem)\n\n if (!tableCellNode) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const tableElement = editor.getElementByKey(tableNode.getKey())\n\n if (!tableElement) {\n throw new Error('TableCellResizer: Table element not found.')\n }\n\n targetRef.current = target as HTMLElement\n tableRectRef.current = tableElement.getBoundingClientRect()\n updateActiveCell(cell)\n })\n } else if (cell == null) {\n resetState()\n }\n }\n }, 0)\n }\n\n const onMouseDown = (event: MouseEvent) => {\n setTimeout(() => {\n updateIsMouseDown(true)\n }, 0)\n }\n\n const onMouseUp = (event: MouseEvent) => {\n setTimeout(() => {\n updateIsMouseDown(false)\n }, 0)\n }\n\n const removeRootListener = editor.registerRootListener((rootElement, prevRootElement) => {\n rootElement?.addEventListener('mousemove', onMouseMove)\n rootElement?.addEventListener('mousedown', onMouseDown)\n rootElement?.addEventListener('mouseup', onMouseUp)\n\n prevRootElement?.removeEventListener('mousemove', onMouseMove)\n prevRootElement?.removeEventListener('mousedown', onMouseDown)\n prevRootElement?.removeEventListener('mouseup', onMouseUp)\n })\n\n return () => {\n removeRootListener()\n }\n }, [activeCell, draggingDirection, editor, resetState])\n\n const isHeightChanging = (direction: MouseDraggingDirection) => {\n if (direction === 'bottom') {\n return true\n }\n return false\n }\n\n const updateRowHeight = useCallback(\n (heightChange: number) => {\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n editor.update(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem)\n if (!$isTableCellNode(tableCellNode)) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\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 let height = tableRow.getHeight()\n if (height === undefined) {\n const rowCells = tableRow.getChildren<TableCellNode>()\n height = Math.min(\n ...rowCells.map((cell) => getCellNodeHeight(cell, editor) ?? Infinity),\n )\n }\n\n const newHeight = Math.max(height + heightChange, MIN_ROW_HEIGHT)\n tableRow.setHeight(newHeight)\n },\n { tag: 'skip-scroll-into-view' },\n )\n },\n [activeCell, editor],\n )\n\n const getCellNodeWidth = (\n cell: TableCellNode,\n activeEditor: LexicalEditor,\n ): number | undefined => {\n const width = cell.getWidth()\n if (width !== undefined) {\n return width\n }\n\n const domCellNode = activeEditor.getElementByKey(cell.getKey())\n if (domCellNode == null) {\n return undefined\n }\n const computedStyle = getComputedStyle(domCellNode)\n return (\n domCellNode.clientWidth -\n parseFloat(computedStyle.paddingLeft) -\n parseFloat(computedStyle.paddingRight)\n )\n }\n\n const getCellNodeHeight = (\n cell: TableCellNode,\n activeEditor: LexicalEditor,\n ): number | undefined => {\n const domCellNode = activeEditor.getElementByKey(cell.getKey())\n return domCellNode?.clientHeight\n }\n\n const getCellColumnIndex = (tableCellNode: TableCellNode, tableMap: TableMapType) => {\n for (let row = 0; row < tableMap.length; row++) {\n for (let column = 0; column < tableMap[row].length; column++) {\n if (tableMap[row][column].cell === tableCellNode) {\n return column\n }\n }\n }\n }\n\n const updateColumnWidth = useCallback(\n (widthChange: number) => {\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n editor.update(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem)\n if (!$isTableCellNode(tableCellNode)) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const [tableMap] = $computeTableMapSkipCellCheck(tableNode, null, null)\n const columnIndex = getCellColumnIndex(tableCellNode, tableMap)\n if (columnIndex === undefined) {\n throw new Error('TableCellResizer: Table column not found.')\n }\n\n for (let row = 0; row < tableMap.length; row++) {\n const cell: TableMapValueType = tableMap[row][columnIndex]\n if (\n cell.startRow === row &&\n (columnIndex === tableMap[row].length - 1 ||\n tableMap[row][columnIndex].cell !== tableMap[row][columnIndex + 1].cell)\n ) {\n const width = getCellNodeWidth(cell.cell, editor)\n if (width === undefined) {\n continue\n }\n const newWidth = Math.max(width + widthChange, MIN_COLUMN_WIDTH)\n cell.cell.setWidth(newWidth)\n }\n }\n },\n { tag: 'skip-scroll-into-view' },\n )\n },\n [activeCell, editor],\n )\n\n const mouseUpHandler = useCallback(\n (direction: MouseDraggingDirection) => {\n const handler = (event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n if (mouseStartPosRef.current) {\n const { x, y } = mouseStartPosRef.current\n\n if (activeCell === null) {\n return\n }\n const zoom = calculateZoomLevel(event.target as Element)\n\n if (isHeightChanging(direction)) {\n const heightChange = (event.clientY - y) / zoom\n updateRowHeight(heightChange)\n } else {\n const widthChange = (event.clientX - x) / zoom\n updateColumnWidth(widthChange)\n }\n\n resetState()\n document.removeEventListener('mouseup', handler)\n }\n }\n return handler\n },\n [activeCell, resetState, updateColumnWidth, updateRowHeight],\n )\n\n const toggleResize = useCallback(\n (direction: MouseDraggingDirection): MouseEventHandler<HTMLDivElement> =>\n (event) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n mouseStartPosRef.current = {\n x: event.clientX,\n y: event.clientY,\n }\n updateMouseCurrentPos(mouseStartPosRef.current)\n updateDraggingDirection(direction)\n\n document.addEventListener('mouseup', mouseUpHandler(direction))\n },\n [activeCell, mouseUpHandler],\n )\n\n const getResizers = useCallback(() => {\n if (activeCell) {\n const { height, left, top, width } = activeCell.elem.getBoundingClientRect()\n const zoom = calculateZoomLevel(activeCell.elem)\n const zoneWidth = 10 // Pixel width of the zone where you can drag the edge\n const styles = {\n bottom: {\n backgroundColor: 'none',\n cursor: 'row-resize',\n height: `${zoneWidth}px`,\n left: `${window.pageXOffset + left}px`,\n top: `${window.pageYOffset + top + height - zoneWidth / 2}px`,\n width: `${width}px`,\n },\n right: {\n backgroundColor: 'none',\n cursor: 'col-resize',\n height: `${height}px`,\n left: `${window.pageXOffset + left + width - zoneWidth / 2}px`,\n top: `${window.pageYOffset + top}px`,\n width: `${zoneWidth}px`,\n },\n }\n\n const tableRect = tableRectRef.current\n\n if (draggingDirection && mouseCurrentPos && tableRect) {\n if (isHeightChanging(draggingDirection)) {\n styles[draggingDirection].left = `${window.pageXOffset + tableRect.left}px`\n styles[draggingDirection].top = `${window.pageYOffset + mouseCurrentPos.y / zoom}px`\n styles[draggingDirection].height = '3px'\n styles[draggingDirection].width = `${tableRect.width}px`\n } else {\n styles[draggingDirection].top = `${window.pageYOffset + tableRect.top}px`\n styles[draggingDirection].left = `${window.pageXOffset + mouseCurrentPos.x / zoom}px`\n styles[draggingDirection].width = '3px'\n styles[draggingDirection].height = `${tableRect.height}px`\n }\n\n styles[draggingDirection].backgroundColor = '#adf'\n }\n\n return styles\n }\n\n return {\n bottom: null,\n left: null,\n right: null,\n top: null,\n }\n }, [activeCell, draggingDirection, mouseCurrentPos])\n\n const resizerStyles = getResizers()\n\n return (\n <div ref={resizerRef}>\n {activeCell != null && !isMouseDown && (\n <React.Fragment>\n <div\n className={`${editorConfig.editorConfig.lexical.theme.tableCellResizer} TableCellResizer__ui`}\n onMouseDown={toggleResize('right')}\n style={resizerStyles.right || undefined}\n />\n <div\n className={`${editorConfig.editorConfig.lexical.theme.tableCellResizer} TableCellResizer__ui`}\n onMouseDown={toggleResize('bottom')}\n style={resizerStyles.bottom || undefined}\n />\n </React.Fragment>\n )}\n </div>\n )\n}\n\nexport const TableCellResizerPlugin: PluginComponent = () => {\n const [editor] = useLexicalComposerContext()\n const isEditable = useLexicalEditable()\n\n return useMemo(\n () => (isEditable ? createPortal(<TableCellResizer editor={editor} />, document.body) : null),\n [editor, isEditable],\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useLexicalComposerContext","useLexicalEditable","$computeTableMapSkipCellCheck","$getTableNodeFromLexicalNodeOrThrow","$getTableRowIndexFromTableCellNode","$isTableCellNode","$isTableRowNode","getDOMCellFromTarget","calculateZoomLevel","$getNearestNodeFromDOMNode","React","useCallback","useEffect","useMemo","useRef","useState","createPortal","useEditorConfigContext","MIN_ROW_HEIGHT","MIN_COLUMN_WIDTH","TableCellResizer","editor","targetRef","resizerRef","tableRectRef","editorConfig","mouseStartPosRef","mouseCurrentPos","updateMouseCurrentPos","activeCell","updateActiveCell","isMouseDown","updateIsMouseDown","draggingDirection","updateDraggingDirection","resetState","current","isMouseDownOnEvent","event","buttons","onMouseMove","setTimeout","target","x","clientX","y","clientY","contains","cell","update","tableCellNode","elem","Error","tableNode","tableElement","getElementByKey","getKey","getBoundingClientRect","onMouseDown","onMouseUp","removeRootListener","registerRootListener","rootElement","prevRootElement","addEventListener","removeEventListener","isHeightChanging","direction","updateRowHeight","heightChange","tableRowIndex","tableRows","getChildren","length","tableRow","height","getHeight","undefined","rowCells","Math","min","map","getCellNodeHeight","Infinity","newHeight","max","setHeight","tag","getCellNodeWidth","activeEditor","width","getWidth","domCellNode","computedStyle","getComputedStyle","clientWidth","parseFloat","paddingLeft","paddingRight","clientHeight","getCellColumnIndex","tableMap","row","column","updateColumnWidth","widthChange","columnIndex","startRow","newWidth","setWidth","mouseUpHandler","handler","preventDefault","stopPropagation","zoom","document","toggleResize","getResizers","left","top","zoneWidth","styles","bottom","backgroundColor","cursor","window","pageXOffset","pageYOffset","right","tableRect","resizerStyles","_jsx","ref","_jsxs","Fragment","className","lexical","theme","tableCellResizer","style","TableCellResizerPlugin","isEditable","body"],"sources":["../../../../../../src/features/experimental_table/client/plugins/TableCellResizerPlugin/index.tsx"],"sourcesContent":["'use client'\n\nimport type { TableCellNode, TableDOMCell, TableMapType, TableMapValueType } from '@lexical/table'\nimport type { LexicalEditor } from 'lexical'\nimport type { JSX, MouseEventHandler } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n $computeTableMapSkipCellCheck,\n $getTableNodeFromLexicalNodeOrThrow,\n $getTableRowIndexFromTableCellNode,\n $isTableCellNode,\n $isTableRowNode,\n getDOMCellFromTarget,\n} from '@lexical/table'\nimport { calculateZoomLevel } from '@lexical/utils'\nimport { $getNearestNodeFromDOMNode } from 'lexical'\nimport * as React from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\n\ntype MousePosition = {\n x: number\n y: number\n}\n\ntype MouseDraggingDirection = 'bottom' | 'right'\n\nconst MIN_ROW_HEIGHT = 33\nconst MIN_COLUMN_WIDTH = 50\n\nfunction TableCellResizer({ editor }: { editor: LexicalEditor }): JSX.Element {\n const targetRef = useRef<HTMLElement | null>(null)\n const resizerRef = useRef<HTMLDivElement | null>(null)\n const tableRectRef = useRef<ClientRect | null>(null)\n const editorConfig = useEditorConfigContext()\n\n const mouseStartPosRef = useRef<MousePosition | null>(null)\n const [mouseCurrentPos, updateMouseCurrentPos] = useState<MousePosition | null>(null)\n\n const [activeCell, updateActiveCell] = useState<TableDOMCell | null>(null)\n const [isMouseDown, updateIsMouseDown] = useState<boolean>(false)\n const [draggingDirection, updateDraggingDirection] = useState<MouseDraggingDirection | null>(null)\n\n const resetState = useCallback(() => {\n updateActiveCell(null)\n targetRef.current = null\n updateDraggingDirection(null)\n mouseStartPosRef.current = null\n tableRectRef.current = null\n }, [])\n\n const isMouseDownOnEvent = (event: MouseEvent) => {\n return (event.buttons & 1) === 1\n }\n\n useEffect(() => {\n const onMouseMove = (event: MouseEvent) => {\n setTimeout(() => {\n const target = event.target\n\n if (draggingDirection) {\n updateMouseCurrentPos({\n x: event.clientX,\n y: event.clientY,\n })\n return\n }\n updateIsMouseDown(isMouseDownOnEvent(event))\n if (resizerRef.current && resizerRef.current.contains(target as Node)) {\n return\n }\n\n if (targetRef.current !== target) {\n targetRef.current = target as HTMLElement\n const cell = getDOMCellFromTarget(target as HTMLElement)\n\n if (cell && activeCell !== cell) {\n editor.update(() => {\n const tableCellNode = $getNearestNodeFromDOMNode(cell.elem)\n\n if (!tableCellNode) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const tableElement = editor.getElementByKey(tableNode.getKey())\n\n if (!tableElement) {\n throw new Error('TableCellResizer: Table element not found.')\n }\n\n targetRef.current = target as HTMLElement\n tableRectRef.current = tableElement.getBoundingClientRect()\n updateActiveCell(cell)\n })\n } else if (cell == null) {\n resetState()\n }\n }\n }, 0)\n }\n\n const onMouseDown = (event: MouseEvent) => {\n setTimeout(() => {\n updateIsMouseDown(true)\n }, 0)\n }\n\n const onMouseUp = (event: MouseEvent) => {\n setTimeout(() => {\n updateIsMouseDown(false)\n }, 0)\n }\n\n const removeRootListener = editor.registerRootListener((rootElement, prevRootElement) => {\n rootElement?.addEventListener('mousemove', onMouseMove)\n rootElement?.addEventListener('mousedown', onMouseDown)\n rootElement?.addEventListener('mouseup', onMouseUp)\n\n prevRootElement?.removeEventListener('mousemove', onMouseMove)\n prevRootElement?.removeEventListener('mousedown', onMouseDown)\n prevRootElement?.removeEventListener('mouseup', onMouseUp)\n })\n\n return () => {\n removeRootListener()\n }\n }, [activeCell, draggingDirection, editor, resetState])\n\n const isHeightChanging = (direction: MouseDraggingDirection) => {\n if (direction === 'bottom') {\n return true\n }\n return false\n }\n\n const updateRowHeight = useCallback(\n (heightChange: number) => {\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n editor.update(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem)\n if (!$isTableCellNode(tableCellNode)) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\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 let height = tableRow.getHeight()\n if (height === undefined) {\n const rowCells = tableRow.getChildren<TableCellNode>()\n height = Math.min(\n ...rowCells.map((cell) => getCellNodeHeight(cell, editor) ?? Infinity),\n )\n }\n\n const newHeight = Math.max(height + heightChange, MIN_ROW_HEIGHT)\n tableRow.setHeight(newHeight)\n },\n { tag: 'skip-scroll-into-view' },\n )\n },\n [activeCell, editor],\n )\n\n const getCellNodeWidth = (\n cell: TableCellNode,\n activeEditor: LexicalEditor,\n ): number | undefined => {\n const width = cell.getWidth()\n if (width !== undefined) {\n return width\n }\n\n const domCellNode = activeEditor.getElementByKey(cell.getKey())\n if (domCellNode == null) {\n return undefined\n }\n const computedStyle = getComputedStyle(domCellNode)\n return (\n domCellNode.clientWidth -\n parseFloat(computedStyle.paddingLeft) -\n parseFloat(computedStyle.paddingRight)\n )\n }\n\n const getCellNodeHeight = (\n cell: TableCellNode,\n activeEditor: LexicalEditor,\n ): number | undefined => {\n const domCellNode = activeEditor.getElementByKey(cell.getKey())\n return domCellNode?.clientHeight\n }\n\n const getCellColumnIndex = (tableCellNode: TableCellNode, tableMap: TableMapType) => {\n for (let row = 0; row < tableMap.length; row++) {\n for (let column = 0; column < tableMap[row].length; column++) {\n if (tableMap[row][column].cell === tableCellNode) {\n return column\n }\n }\n }\n }\n\n const updateColumnWidth = useCallback(\n (widthChange: number) => {\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n editor.update(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem)\n if (!$isTableCellNode(tableCellNode)) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const [tableMap] = $computeTableMapSkipCellCheck(tableNode, null, null)\n const columnIndex = getCellColumnIndex(tableCellNode, tableMap)\n if (columnIndex === undefined) {\n throw new Error('TableCellResizer: Table column not found.')\n }\n\n for (let row = 0; row < tableMap.length; row++) {\n const cell: TableMapValueType = tableMap[row][columnIndex]\n if (\n cell.startRow === row &&\n (columnIndex === tableMap[row].length - 1 ||\n tableMap[row][columnIndex].cell !== tableMap[row][columnIndex + 1].cell)\n ) {\n const width = getCellNodeWidth(cell.cell, editor)\n if (width === undefined) {\n continue\n }\n const newWidth = Math.max(width + widthChange, MIN_COLUMN_WIDTH)\n cell.cell.setWidth(newWidth)\n }\n }\n },\n { tag: 'skip-scroll-into-view' },\n )\n },\n [activeCell, editor],\n )\n\n const mouseUpHandler = useCallback(\n (direction: MouseDraggingDirection) => {\n const handler = (event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n if (mouseStartPosRef.current) {\n const { x, y } = mouseStartPosRef.current\n\n if (activeCell === null) {\n return\n }\n const zoom = calculateZoomLevel(event.target as Element)\n\n if (isHeightChanging(direction)) {\n const heightChange = (event.clientY - y) / zoom\n updateRowHeight(heightChange)\n } else {\n const widthChange = (event.clientX - x) / zoom\n updateColumnWidth(widthChange)\n }\n\n resetState()\n document.removeEventListener('mouseup', handler)\n }\n }\n return handler\n },\n [activeCell, resetState, updateColumnWidth, updateRowHeight],\n )\n\n const toggleResize = useCallback(\n (direction: MouseDraggingDirection): MouseEventHandler<HTMLDivElement> =>\n (event) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n mouseStartPosRef.current = {\n x: event.clientX,\n y: event.clientY,\n }\n updateMouseCurrentPos(mouseStartPosRef.current)\n updateDraggingDirection(direction)\n\n document.addEventListener('mouseup', mouseUpHandler(direction))\n },\n [activeCell, mouseUpHandler],\n )\n\n const getResizers = useCallback(() => {\n if (activeCell) {\n const { height, left, top, width } = activeCell.elem.getBoundingClientRect()\n const zoom = calculateZoomLevel(activeCell.elem)\n const zoneWidth = 10 // Pixel width of the zone where you can drag the edge\n const styles = {\n bottom: {\n backgroundColor: 'none',\n cursor: 'row-resize',\n height: `${zoneWidth}px`,\n left: `${window.pageXOffset + left}px`,\n top: `${window.pageYOffset + top + height - zoneWidth / 2}px`,\n width: `${width}px`,\n },\n right: {\n backgroundColor: 'none',\n cursor: 'col-resize',\n height: `${height}px`,\n left: `${window.pageXOffset + left + width - zoneWidth / 2}px`,\n top: `${window.pageYOffset + top}px`,\n width: `${zoneWidth}px`,\n },\n }\n\n const tableRect = tableRectRef.current\n\n if (draggingDirection && mouseCurrentPos && tableRect) {\n if (isHeightChanging(draggingDirection)) {\n styles[draggingDirection].left = `${window.pageXOffset + tableRect.left}px`\n styles[draggingDirection].top = `${window.pageYOffset + mouseCurrentPos.y / zoom}px`\n styles[draggingDirection].height = '3px'\n styles[draggingDirection].width = `${tableRect.width}px`\n } else {\n styles[draggingDirection].top = `${window.pageYOffset + tableRect.top}px`\n styles[draggingDirection].left = `${window.pageXOffset + mouseCurrentPos.x / zoom}px`\n styles[draggingDirection].width = '3px'\n styles[draggingDirection].height = `${tableRect.height}px`\n }\n\n styles[draggingDirection].backgroundColor = '#adf'\n }\n\n return styles\n }\n\n return {\n bottom: null,\n left: null,\n right: null,\n top: null,\n }\n }, [activeCell, draggingDirection, mouseCurrentPos])\n\n const resizerStyles = getResizers()\n\n return (\n <div ref={resizerRef}>\n {activeCell != null && !isMouseDown && (\n <React.Fragment>\n <div\n className={`${editorConfig.editorConfig.lexical.theme.tableCellResizer} TableCellResizer__ui`}\n onMouseDown={toggleResize('right')}\n style={resizerStyles.right || undefined}\n />\n <div\n className={`${editorConfig.editorConfig.lexical.theme.tableCellResizer} TableCellResizer__ui`}\n onMouseDown={toggleResize('bottom')}\n style={resizerStyles.bottom || undefined}\n />\n </React.Fragment>\n )}\n </div>\n )\n}\n\nexport const TableCellResizerPlugin: PluginComponent = () => {\n const [editor] = useLexicalComposerContext()\n const isEditable = useLexicalEditable()\n\n return useMemo(\n () => (isEditable ? createPortal(<TableCellResizer editor={editor} />, document.body) : null),\n [editor, isEditable],\n )\n}\n"],"mappings":"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","ignoreList":[]}