@payloadcms/richtext-lexical 3.18.0 → 3.19.0-canary.9b65c78

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 (70) hide show
  1. package/dist/exports/client/Field-RG3FN6WF.js +2 -0
  2. package/dist/exports/client/Field-RG3FN6WF.js.map +7 -0
  3. package/dist/exports/client/RelationshipComponent-JPESGV4Q.js +2 -0
  4. package/dist/exports/client/RelationshipComponent-JPESGV4Q.js.map +7 -0
  5. package/dist/exports/client/bundled.css +1 -1
  6. package/dist/exports/client/chunk-DBWINSQN.js +2 -0
  7. package/dist/exports/client/chunk-DBWINSQN.js.map +7 -0
  8. package/dist/exports/client/chunk-KDV47ZNZ.js +2 -0
  9. package/dist/exports/client/chunk-KDV47ZNZ.js.map +7 -0
  10. package/dist/exports/client/chunk-QP2NYEWJ.js +2 -0
  11. package/dist/exports/client/{chunk-HMZK3GHC.js.map → chunk-QP2NYEWJ.js.map} +4 -4
  12. package/dist/exports/client/component-VJVZFYZJ.js +2 -0
  13. package/dist/exports/client/component-VJVZFYZJ.js.map +7 -0
  14. package/dist/exports/client/componentInline-DTNGYZCL.js +2 -0
  15. package/dist/exports/client/index.js +10 -9
  16. package/dist/exports/client/index.js.map +4 -4
  17. package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
  18. package/dist/features/blocks/client/componentInline/index.js +6 -42
  19. package/dist/features/blocks/client/componentInline/index.js.map +1 -1
  20. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js +1 -1
  21. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
  22. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.d.ts +1 -2
  23. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.d.ts.map +1 -1
  24. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.js +1 -7
  25. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.js.map +1 -1
  26. package/dist/features/relationship/client/components/RelationshipComponent.d.ts.map +1 -1
  27. package/dist/features/relationship/client/components/RelationshipComponent.js +4 -42
  28. package/dist/features/relationship/client/components/RelationshipComponent.js.map +1 -1
  29. package/dist/features/upload/client/component/index.d.ts.map +1 -1
  30. package/dist/features/upload/client/component/index.js +3 -38
  31. package/dist/features/upload/client/component/index.js.map +1 -1
  32. package/dist/field/bundled.css +1 -1
  33. package/dist/lexical/LexicalEditor.d.ts.map +1 -1
  34. package/dist/lexical/LexicalEditor.js +2 -1
  35. package/dist/lexical/LexicalEditor.js.map +1 -1
  36. package/dist/lexical/plugins/DecoratorPlugin/index.d.ts +3 -0
  37. package/dist/lexical/plugins/DecoratorPlugin/index.d.ts.map +1 -0
  38. package/dist/lexical/plugins/DecoratorPlugin/index.js +79 -0
  39. package/dist/lexical/plugins/DecoratorPlugin/index.js.map +1 -0
  40. package/dist/lexical/plugins/InsertParagraphAtEnd/index.d.ts.map +1 -1
  41. package/dist/lexical/plugins/InsertParagraphAtEnd/index.js +3 -1
  42. package/dist/lexical/plugins/InsertParagraphAtEnd/index.js.map +1 -1
  43. package/dist/lexical/utils/url.d.ts +20 -0
  44. package/dist/lexical/utils/url.d.ts.map +1 -1
  45. package/dist/lexical/utils/url.js +14 -3
  46. package/dist/lexical/utils/url.js.map +1 -1
  47. package/dist/lexical/utils/url.spec.js +32 -0
  48. package/dist/lexical/utils/url.spec.js.map +1 -0
  49. package/package.json +6 -6
  50. package/dist/exports/client/Field-F5XP4HL4.js +0 -2
  51. package/dist/exports/client/Field-F5XP4HL4.js.map +0 -7
  52. package/dist/exports/client/RelationshipComponent-BWAHSMVN.js +0 -2
  53. package/dist/exports/client/RelationshipComponent-BWAHSMVN.js.map +0 -7
  54. package/dist/exports/client/chunk-DIR6RNSY.js +0 -2
  55. package/dist/exports/client/chunk-DIR6RNSY.js.map +0 -7
  56. package/dist/exports/client/chunk-HMZK3GHC.js +0 -2
  57. package/dist/exports/client/chunk-RJTGMBHA.js +0 -3
  58. package/dist/exports/client/chunk-RJTGMBHA.js.map +0 -7
  59. package/dist/exports/client/chunk-TP3JCLAP.js +0 -2
  60. package/dist/exports/client/chunk-TP3JCLAP.js.map +0 -7
  61. package/dist/exports/client/component-53MM7FV7.js +0 -2
  62. package/dist/exports/client/component-53MM7FV7.js.map +0 -7
  63. package/dist/exports/client/component-FU65NQBY.js +0 -2
  64. package/dist/exports/client/component-FU65NQBY.js.map +0 -7
  65. package/dist/exports/client/componentInline-MX6DTKSG.js +0 -2
  66. package/dist/features/horizontalRule/client/component/index.d.ts +0 -10
  67. package/dist/features/horizontalRule/client/component/index.d.ts.map +0 -1
  68. package/dist/features/horizontalRule/client/component/index.js +0 -101
  69. package/dist/features/horizontalRule/client/component/index.js.map +0 -1
  70. /package/dist/exports/client/{componentInline-MX6DTKSG.js.map → componentInline-DTNGYZCL.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAiE,MAAM,OAAO,CAAA;AAGrF,OAAO,KAAK,EAA2B,SAAS,EAAE,MAAM,SAAS,CAAA;AA+BjE,OAAO,cAAc,CAAA;AAIrB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAM/E,KAAK,KAAK,GAAG;IACX;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,KAAK,+BAA+B,GAAG;IACrC,UAAU,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IACrB,YAAY,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,CAAA;IAC3C,oBAAoB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,CAAC,CAAA;IAC9D,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;CACxB,CAAA;AAMD,eAAO,MAAM,8BAA8B,uCAAsD,CAAA;AAEjG,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA+YhD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAiE,MAAM,OAAO,CAAA;AAGrF,OAAO,KAAK,EAA2B,SAAS,EAAE,MAAM,SAAS,CAAA;AAqBjE,OAAO,cAAc,CAAA;AAIrB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAM/E,KAAK,KAAK,GAAG;IACX;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,KAAK,+BAA+B,GAAG;IACrC,UAAU,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IACrB,YAAY,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,CAAA;IAC3C,oBAAoB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,CAAC,CAAA;IAC9D,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;CACxB,CAAA;AAMD,eAAO,MAAM,8BAA8B,uCAAsD,CAAA;AAEjG,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAuVhD,CAAA"}
@@ -4,12 +4,10 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
4
4
  import React, { createContext, useCallback, useEffect, useMemo, useRef } from 'react';
5
5
  const baseClass = 'inline-block';
6
6
  import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
7
- import { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection';
8
- import { mergeRegister } from '@lexical/utils';
9
7
  import { getTranslation } from '@payloadcms/translations';
10
8
  import { Button, Drawer, EditDepthProvider, Form, formatDrawerSlug, FormSubmit, RenderFields, ShimmerEffect, useDocumentInfo, useEditDepth, useServerFunctions, useTranslation } from '@payloadcms/ui';
11
9
  import { abortAndIgnore } from '@payloadcms/ui/shared';
12
- import { $getNodeByKey, $getSelection, $isNodeSelection, CLICK_COMMAND, COMMAND_PRIORITY_LOW, KEY_BACKSPACE_COMMAND, KEY_DELETE_COMMAND } from 'lexical';
10
+ import { $getNodeByKey } from 'lexical';
13
11
  import { v4 as uuid } from 'uuid';
14
12
  import { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js';
15
13
  import { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js';
@@ -66,7 +64,6 @@ export const InlineBlockComponent = props => {
66
64
  toggleDrawer
67
65
  } = useLexicalDrawer(drawerSlug, true);
68
66
  const inlineBlockElemElemRef = useRef(null);
69
- const [isSelected, setSelected, clearSelection] = useLexicalNodeSelection(nodeKey);
70
67
  const {
71
68
  id,
72
69
  collectionSlug,
@@ -93,39 +90,6 @@ export const InlineBlockComponent = props => {
93
90
  $getNodeByKey(nodeKey)?.remove();
94
91
  });
95
92
  }, [editor, nodeKey]);
96
- const $onDelete = useCallback(event => {
97
- const deleteSelection = $getSelection();
98
- if (isSelected && $isNodeSelection(deleteSelection)) {
99
- event.preventDefault();
100
- editor.update(() => {
101
- deleteSelection.getNodes().forEach(node => {
102
- if ($isInlineBlockNode(node)) {
103
- node.remove();
104
- }
105
- });
106
- });
107
- }
108
- return false;
109
- }, [editor, isSelected]);
110
- const onClick = useCallback(payload => {
111
- const event_0 = payload;
112
- // Check if inlineBlockElemElemRef.target or anything WITHIN inlineBlockElemElemRef.target was clicked
113
- if (event_0.target === inlineBlockElemElemRef.current || inlineBlockElemElemRef.current?.contains(event_0.target)) {
114
- if (event_0.shiftKey) {
115
- setSelected(!isSelected);
116
- } else {
117
- if (!isSelected) {
118
- clearSelection();
119
- setSelected(true);
120
- }
121
- }
122
- return true;
123
- }
124
- return false;
125
- }, [isSelected, setSelected, clearSelection]);
126
- useEffect(() => {
127
- return mergeRegister(editor.registerCommand(CLICK_COMMAND, onClick, COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_DELETE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_BACKSPACE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW));
128
- }, [clearSelection, editor, isSelected, nodeKey, $onDelete, setSelected, onClick]);
129
93
  const blockDisplayName = clientBlock?.labels?.singular ? getTranslation(clientBlock?.labels.singular, i18n) : clientBlock?.slug;
130
94
  const onChangeAbortControllerRef = useRef(new AbortController());
131
95
  const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${clientBlock?.slug}.fields`;
@@ -214,9 +178,9 @@ export const InlineBlockComponent = props => {
214
178
  const onFormSubmit = useCallback((formState, newData) => {
215
179
  newData.blockType = formData.blockType;
216
180
  editor.update(() => {
217
- const node_0 = $getNodeByKey(nodeKey);
218
- if (node_0 && $isInlineBlockNode(node_0)) {
219
- node_0.setFields(newData, true);
181
+ const node = $getNodeByKey(nodeKey);
182
+ if (node && $isInlineBlockNode(node)) {
183
+ node.setFields(newData, true);
220
184
  }
221
185
  });
222
186
  }, [editor, nodeKey, formData]);
@@ -254,10 +218,10 @@ export const InlineBlockComponent = props => {
254
218
  children,
255
219
  className
256
220
  }) => /*#__PURE__*/_jsx("div", {
257
- className: [baseClass, baseClass + '-' + formData.blockType, isSelected && `${baseClass}--selected`, className].filter(Boolean).join(' '),
221
+ className: [baseClass, baseClass + '-' + formData.blockType, className].filter(Boolean).join(' '),
258
222
  ref: inlineBlockElemElemRef,
259
223
  children: children
260
- }), [formData.blockType, isSelected]);
224
+ }), [formData.blockType]);
261
225
  const Label = useMemo(() => {
262
226
  if (CustomLabel) {
263
227
  return () => CustomLabel;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","createContext","useCallback","useEffect","useMemo","useRef","baseClass","useLexicalComposerContext","useLexicalNodeSelection","mergeRegister","getTranslation","Button","Drawer","EditDepthProvider","Form","formatDrawerSlug","FormSubmit","RenderFields","ShimmerEffect","useDocumentInfo","useEditDepth","useServerFunctions","useTranslation","abortAndIgnore","$getNodeByKey","$getSelection","$isNodeSelection","CLICK_COMMAND","COMMAND_PRIORITY_LOW","KEY_BACKSPACE_COMMAND","KEY_DELETE_COMMAND","v4","uuid","useEditorConfigContext","useLexicalDrawer","$isInlineBlockNode","InlineBlockComponentContext","initialState","useInlineBlockComponentContext","useContext","InlineBlockComponent","props","cacheBuster","formData","nodeKey","editor","i18n","t","createdInlineBlock","fieldProps","featureClientSchemaMap","initialLexicalFormState","permissions","readOnly","schemaPath","setCreatedInlineBlock","uuidFromContext","getFormState","editDepth","firstTimeDrawer","setInitialState","useState","id","formState","CustomLabel","setCustomLabel","customComponents","BlockLabel","CustomBlock","setCustomBlock","Block","drawerSlug","slug","depth","toggleDrawer","inlineBlockElemElemRef","isSelected","setSelected","clearSelection","collectionSlug","getDocPreferences","globalSlug","componentMapRenderedBlockPath","blockType","clientSchemaMap","blocksField","clientBlock","blocks","current","getKey","fields","length","undefined","removeInlineBlock","update","remove","$onDelete","event","deleteSelection","preventDefault","getNodes","forEach","node","onClick","payload","target","contains","shiftKey","registerCommand","blockDisplayName","labels","singular","onChangeAbortControllerRef","AbortController","schemaFieldsPath","abortController","awaitInitialState","state","data","docPermissions","docPreferences","operation","renderAllFields","signal","onChange","prevFormState","submit","controller","onFormSubmit","newData","setFields","RemoveButton","_jsx","buttonStyle","className","disabled","icon","e","round","size","tooltip","label","EditButton","el","InlineBlockContainer","children","filter","Boolean","join","ref","Label","_jsxs","isEditable","beforeSubmit","disableValidationOnSubmit","onSubmit","title","_Fragment","forceRender","parentIndexPath","parentPath","parentSchemaPath","programmaticSubmit","Provider","value","height","width"],"sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"sourcesContent":["'use client'\n\nimport React, { createContext, useCallback, useEffect, useMemo, useRef } from 'react'\nconst baseClass = 'inline-block'\n\nimport type { BlocksFieldClient, Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection'\nimport { mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n Drawer,\n EditDepthProvider,\n Form,\n formatDrawerSlug,\n FormSubmit,\n RenderFields,\n ShimmerEffect,\n useDocumentInfo,\n useEditDepth,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport {\n $getNodeByKey,\n $getSelection,\n $isNodeSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_LOW,\n KEY_BACKSPACE_COMMAND,\n KEY_DELETE_COMMAND,\n} from 'lexical'\n\nimport './index.scss'\n\nimport { v4 as uuid } from 'uuid'\n\nimport type { InlineBlockFields } from '../../server/nodes/InlineBlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isInlineBlockNode } from '../nodes/InlineBlocksNode.js'\n\ntype Props = {\n /**\n * Can be modified by the node in order to trigger the re-fetch of the initial state based on the\n * formData. This is useful when node.setFields() is explicitly called from outside of the form - in\n * this case, the new field state is likely not reflected in the form state, so we need to re-fetch\n */\n readonly cacheBuster: number\n readonly formData: InlineBlockFields\n readonly nodeKey: string\n}\n\ntype InlineBlockComponentContextType = {\n EditButton?: React.FC\n initialState: false | FormState | undefined\n InlineBlockContainer?: React.FC<{ children: React.ReactNode }>\n Label?: React.FC\n nodeKey?: string\n RemoveButton?: React.FC\n}\n\nconst InlineBlockComponentContext = createContext<InlineBlockComponentContextType>({\n initialState: false,\n})\n\nexport const useInlineBlockComponentContext = () => React.useContext(InlineBlockComponentContext)\n\nexport const InlineBlockComponent: React.FC<Props> = (props) => {\n const { cacheBuster, formData, nodeKey } = props\n\n const [editor] = useLexicalComposerContext()\n const { i18n, t } = useTranslation<object, string>()\n const {\n createdInlineBlock,\n fieldProps: {\n featureClientSchemaMap,\n initialLexicalFormState,\n permissions,\n readOnly,\n schemaPath,\n },\n setCreatedInlineBlock,\n uuid: uuidFromContext,\n } = useEditorConfigContext()\n const { getFormState } = useServerFunctions()\n const editDepth = useEditDepth()\n const firstTimeDrawer = useRef(false)\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(\n initialLexicalFormState?.[formData.id]?.formState,\n )\n\n useEffect(() => {\n setInitialState(false)\n }, [cacheBuster])\n\n const [CustomLabel, setCustomLabel] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.BlockLabel,\n )\n\n const [CustomBlock, setCustomBlock] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.Block,\n )\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-inlineBlocks-create-${uuidFromContext}-${formData.id}`,\n depth: editDepth,\n })\n const { toggleDrawer } = useLexicalDrawer(drawerSlug, true)\n\n const inlineBlockElemElemRef = useRef<HTMLDivElement | null>(null)\n const [isSelected, setSelected, clearSelection] = useLexicalNodeSelection(nodeKey)\n const { id, collectionSlug, getDocPreferences, globalSlug } = useDocumentInfo()\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient = clientSchemaMap[\n componentMapRenderedBlockPath\n ]?.[0] as BlocksFieldClient\n\n const clientBlock = blocksField?.blocks?.[0]\n\n // Open drawer on \"mount\"\n useEffect(() => {\n if (!firstTimeDrawer.current && createdInlineBlock?.getKey() === nodeKey) {\n // > 2 because they always have \"id\" and \"blockName\" fields\n if (clientBlock?.fields?.length > 2) {\n toggleDrawer()\n }\n setCreatedInlineBlock?.(undefined)\n firstTimeDrawer.current = true\n }\n }, [\n clientBlock?.fields?.length,\n createdInlineBlock,\n nodeKey,\n setCreatedInlineBlock,\n toggleDrawer,\n ])\n\n const removeInlineBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const $onDelete = useCallback(\n (event: KeyboardEvent) => {\n const deleteSelection = $getSelection()\n if (isSelected && $isNodeSelection(deleteSelection)) {\n event.preventDefault()\n editor.update(() => {\n deleteSelection.getNodes().forEach((node) => {\n if ($isInlineBlockNode(node)) {\n node.remove()\n }\n })\n })\n }\n return false\n },\n [editor, isSelected],\n )\n const onClick = useCallback(\n (payload: MouseEvent) => {\n const event = payload\n // Check if inlineBlockElemElemRef.target or anything WITHIN inlineBlockElemElemRef.target was clicked\n if (\n event.target === inlineBlockElemElemRef.current ||\n inlineBlockElemElemRef.current?.contains(event.target as Node)\n ) {\n if (event.shiftKey) {\n setSelected(!isSelected)\n } else {\n if (!isSelected) {\n clearSelection()\n setSelected(true)\n }\n }\n return true\n }\n\n return false\n },\n [isSelected, setSelected, clearSelection],\n )\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<MouseEvent>(CLICK_COMMAND, onClick, COMMAND_PRIORITY_LOW),\n\n editor.registerCommand(KEY_DELETE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n editor.registerCommand(KEY_BACKSPACE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n )\n }, [clearSelection, editor, isSelected, nodeKey, $onDelete, setSelected, onClick])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock?.labels.singular, i18n)\n : clientBlock?.slug\n\n const onChangeAbortControllerRef = useRef(new AbortController())\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${clientBlock?.slug}.fields`\n\n // Initial state for newly created blocks\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n /*\n * This will only run if a new block is created. For all existing blocks that are loaded when the document is loaded, or when the form is saved,\n * this is not run, as the lexical field RSC will fetch the state server-side and pass it to the client. That way, we avoid unnecessary client-side\n * requests. Though for newly created blocks, we need to fetch the state client-side, as the server doesn't know about the block yet.\n */\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions: { fields: true },\n docPreferences: await getDocPreferences(),\n globalSlug,\n operation: 'update',\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: abortController.signal,\n })\n\n if (state) {\n setInitialState(state)\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n }\n\n if (formData && !initialState) {\n void awaitInitialState()\n }\n\n return () => {\n abortAndIgnore(abortController)\n }\n }, [\n getFormState,\n schemaFieldsPath,\n id,\n formData,\n initialState,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n ])\n\n /**\n * HANDLE ONCHANGE\n */\n const onChange = useCallback(\n async ({ formState: prevFormState, submit }: { formState: FormState; submit?: boolean }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n formState: prevFormState,\n globalSlug,\n operation: 'update',\n renderAllFields: submit ? true : false,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!state) {\n return prevFormState\n }\n\n if (submit) {\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n\n return state\n },\n [getFormState, id, collectionSlug, getDocPreferences, globalSlug, schemaFieldsPath],\n )\n // cleanup effect\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [])\n\n /**\n * HANDLE FORM SUBMIT\n */\n const onFormSubmit = useCallback(\n (formState: FormState, newData: Data) => {\n newData.blockType = formData.blockType\n\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n node.setFields(newData as InlineBlockFields, true)\n }\n })\n },\n [editor, nodeKey, formData],\n )\n\n const RemoveButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeInlineBlock()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:remove', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, removeInlineBlock, t],\n )\n\n const EditButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__editButton`}\n disabled={readOnly}\n el=\"button\"\n icon=\"edit\"\n onClick={() => {\n toggleDrawer()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, t, toggleDrawer],\n )\n\n const InlineBlockContainer = useMemo(\n () =>\n ({ children, className }: { children: React.ReactNode; className?: string }) => (\n <div\n className={[\n baseClass,\n baseClass + '-' + formData.blockType,\n isSelected && `${baseClass}--selected`,\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n ref={inlineBlockElemElemRef}\n >\n {children}\n </div>\n ),\n [formData.blockType, isSelected],\n )\n\n const Label = useMemo(() => {\n if (CustomLabel) {\n return () => CustomLabel\n } else {\n return () => (\n <div>{clientBlock?.labels ? getTranslation(clientBlock?.labels.singular, i18n) : ''}</div>\n )\n }\n }, [CustomLabel, clientBlock?.labels, i18n])\n\n if (!clientBlock) {\n return (\n <InlineBlockContainer className={`${baseClass}-not-found`}>\n <span>Error: Block '{formData.blockType}' not found</span>\n {editor.isEditable() ? (\n <div className={`${baseClass}__actions`}>\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )\n }\n\n return (\n <Form\n beforeSubmit={[\n async ({ formState }) => {\n // This is only called when form is submitted from drawer\n return await onChange({ formState, submit: true })\n },\n ]}\n disableValidationOnSubmit\n fields={clientBlock?.fields}\n initialState={initialState || {}}\n onChange={[onChange]}\n onSubmit={(formState, data) => {\n onFormSubmit(formState, data)\n toggleDrawer()\n }}\n uuid={uuid()}\n >\n <EditDepthProvider>\n <Drawer\n className={''}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n >\n {initialState ? (\n <>\n <RenderFields\n fields={clientBlock?.fields}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={permissions}\n readOnly={false}\n />\n <FormSubmit programmaticSubmit={true}>{t('fields:saveChanges')}</FormSubmit>\n </>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n {CustomBlock ? (\n <InlineBlockComponentContext.Provider\n value={{\n EditButton,\n initialState,\n InlineBlockContainer,\n Label,\n nodeKey,\n RemoveButton,\n }}\n >\n {CustomBlock}\n </InlineBlockComponentContext.Provider>\n ) : (\n <InlineBlockContainer>\n {initialState ? <Label /> : <ShimmerEffect height=\"15px\" width=\"40px\" />}\n {editor.isEditable() ? (\n <div className={`${baseClass}__actions`}>\n <EditButton />\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )}\n </Form>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","createContext","useCallback","useEffect","useMemo","useRef","baseClass","useLexicalComposerContext","getTranslation","Button","Drawer","EditDepthProvider","Form","formatDrawerSlug","FormSubmit","RenderFields","ShimmerEffect","useDocumentInfo","useEditDepth","useServerFunctions","useTranslation","abortAndIgnore","$getNodeByKey","v4","uuid","useEditorConfigContext","useLexicalDrawer","$isInlineBlockNode","InlineBlockComponentContext","initialState","useInlineBlockComponentContext","useContext","InlineBlockComponent","props","cacheBuster","formData","nodeKey","editor","i18n","t","createdInlineBlock","fieldProps","featureClientSchemaMap","initialLexicalFormState","permissions","readOnly","schemaPath","setCreatedInlineBlock","uuidFromContext","getFormState","editDepth","firstTimeDrawer","setInitialState","useState","id","formState","CustomLabel","setCustomLabel","customComponents","BlockLabel","CustomBlock","setCustomBlock","Block","drawerSlug","slug","depth","toggleDrawer","inlineBlockElemElemRef","collectionSlug","getDocPreferences","globalSlug","componentMapRenderedBlockPath","blockType","clientSchemaMap","blocksField","clientBlock","blocks","current","getKey","fields","length","undefined","removeInlineBlock","update","remove","blockDisplayName","labels","singular","onChangeAbortControllerRef","AbortController","schemaFieldsPath","abortController","awaitInitialState","state","data","docPermissions","docPreferences","operation","renderAllFields","signal","onChange","prevFormState","submit","controller","onFormSubmit","newData","node","setFields","RemoveButton","_jsx","buttonStyle","className","disabled","icon","onClick","e","preventDefault","round","size","tooltip","label","EditButton","el","InlineBlockContainer","children","filter","Boolean","join","ref","Label","_jsxs","isEditable","beforeSubmit","disableValidationOnSubmit","onSubmit","title","_Fragment","forceRender","parentIndexPath","parentPath","parentSchemaPath","programmaticSubmit","Provider","value","height","width"],"sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"sourcesContent":["'use client'\n\nimport React, { createContext, useCallback, useEffect, useMemo, useRef } from 'react'\nconst baseClass = 'inline-block'\n\nimport type { BlocksFieldClient, Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n Drawer,\n EditDepthProvider,\n Form,\n formatDrawerSlug,\n FormSubmit,\n RenderFields,\n ShimmerEffect,\n useDocumentInfo,\n useEditDepth,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport { $getNodeByKey } from 'lexical'\n\nimport './index.scss'\n\nimport { v4 as uuid } from 'uuid'\n\nimport type { InlineBlockFields } from '../../server/nodes/InlineBlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isInlineBlockNode } from '../nodes/InlineBlocksNode.js'\n\ntype Props = {\n /**\n * Can be modified by the node in order to trigger the re-fetch of the initial state based on the\n * formData. This is useful when node.setFields() is explicitly called from outside of the form - in\n * this case, the new field state is likely not reflected in the form state, so we need to re-fetch\n */\n readonly cacheBuster: number\n readonly formData: InlineBlockFields\n readonly nodeKey: string\n}\n\ntype InlineBlockComponentContextType = {\n EditButton?: React.FC\n initialState: false | FormState | undefined\n InlineBlockContainer?: React.FC<{ children: React.ReactNode }>\n Label?: React.FC\n nodeKey?: string\n RemoveButton?: React.FC\n}\n\nconst InlineBlockComponentContext = createContext<InlineBlockComponentContextType>({\n initialState: false,\n})\n\nexport const useInlineBlockComponentContext = () => React.useContext(InlineBlockComponentContext)\n\nexport const InlineBlockComponent: React.FC<Props> = (props) => {\n const { cacheBuster, formData, nodeKey } = props\n\n const [editor] = useLexicalComposerContext()\n const { i18n, t } = useTranslation<object, string>()\n const {\n createdInlineBlock,\n fieldProps: {\n featureClientSchemaMap,\n initialLexicalFormState,\n permissions,\n readOnly,\n schemaPath,\n },\n setCreatedInlineBlock,\n uuid: uuidFromContext,\n } = useEditorConfigContext()\n const { getFormState } = useServerFunctions()\n const editDepth = useEditDepth()\n const firstTimeDrawer = useRef(false)\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(\n initialLexicalFormState?.[formData.id]?.formState,\n )\n\n useEffect(() => {\n setInitialState(false)\n }, [cacheBuster])\n\n const [CustomLabel, setCustomLabel] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.BlockLabel,\n )\n\n const [CustomBlock, setCustomBlock] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.Block,\n )\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-inlineBlocks-create-${uuidFromContext}-${formData.id}`,\n depth: editDepth,\n })\n const { toggleDrawer } = useLexicalDrawer(drawerSlug, true)\n\n const inlineBlockElemElemRef = useRef<HTMLDivElement | null>(null)\n const { id, collectionSlug, getDocPreferences, globalSlug } = useDocumentInfo()\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient = clientSchemaMap[\n componentMapRenderedBlockPath\n ]?.[0] as BlocksFieldClient\n\n const clientBlock = blocksField?.blocks?.[0]\n\n // Open drawer on \"mount\"\n useEffect(() => {\n if (!firstTimeDrawer.current && createdInlineBlock?.getKey() === nodeKey) {\n // > 2 because they always have \"id\" and \"blockName\" fields\n if (clientBlock?.fields?.length > 2) {\n toggleDrawer()\n }\n setCreatedInlineBlock?.(undefined)\n firstTimeDrawer.current = true\n }\n }, [\n clientBlock?.fields?.length,\n createdInlineBlock,\n nodeKey,\n setCreatedInlineBlock,\n toggleDrawer,\n ])\n\n const removeInlineBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock?.labels.singular, i18n)\n : clientBlock?.slug\n\n const onChangeAbortControllerRef = useRef(new AbortController())\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${clientBlock?.slug}.fields`\n\n // Initial state for newly created blocks\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n /*\n * This will only run if a new block is created. For all existing blocks that are loaded when the document is loaded, or when the form is saved,\n * this is not run, as the lexical field RSC will fetch the state server-side and pass it to the client. That way, we avoid unnecessary client-side\n * requests. Though for newly created blocks, we need to fetch the state client-side, as the server doesn't know about the block yet.\n */\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions: { fields: true },\n docPreferences: await getDocPreferences(),\n globalSlug,\n operation: 'update',\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: abortController.signal,\n })\n\n if (state) {\n setInitialState(state)\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n }\n\n if (formData && !initialState) {\n void awaitInitialState()\n }\n\n return () => {\n abortAndIgnore(abortController)\n }\n }, [\n getFormState,\n schemaFieldsPath,\n id,\n formData,\n initialState,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n ])\n\n /**\n * HANDLE ONCHANGE\n */\n const onChange = useCallback(\n async ({ formState: prevFormState, submit }: { formState: FormState; submit?: boolean }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n formState: prevFormState,\n globalSlug,\n operation: 'update',\n renderAllFields: submit ? true : false,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!state) {\n return prevFormState\n }\n\n if (submit) {\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n\n return state\n },\n [getFormState, id, collectionSlug, getDocPreferences, globalSlug, schemaFieldsPath],\n )\n // cleanup effect\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [])\n\n /**\n * HANDLE FORM SUBMIT\n */\n const onFormSubmit = useCallback(\n (formState: FormState, newData: Data) => {\n newData.blockType = formData.blockType\n\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n node.setFields(newData as InlineBlockFields, true)\n }\n })\n },\n [editor, nodeKey, formData],\n )\n\n const RemoveButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeInlineBlock()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:remove', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, removeInlineBlock, t],\n )\n\n const EditButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__editButton`}\n disabled={readOnly}\n el=\"button\"\n icon=\"edit\"\n onClick={() => {\n toggleDrawer()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, t, toggleDrawer],\n )\n\n const InlineBlockContainer = useMemo(\n () =>\n ({ children, className }: { children: React.ReactNode; className?: string }) => (\n <div\n className={[baseClass, baseClass + '-' + formData.blockType, className]\n .filter(Boolean)\n .join(' ')}\n ref={inlineBlockElemElemRef}\n >\n {children}\n </div>\n ),\n [formData.blockType],\n )\n\n const Label = useMemo(() => {\n if (CustomLabel) {\n return () => CustomLabel\n } else {\n return () => (\n <div>{clientBlock?.labels ? getTranslation(clientBlock?.labels.singular, i18n) : ''}</div>\n )\n }\n }, [CustomLabel, clientBlock?.labels, i18n])\n\n if (!clientBlock) {\n return (\n <InlineBlockContainer className={`${baseClass}-not-found`}>\n <span>Error: Block '{formData.blockType}' not found</span>\n {editor.isEditable() ? (\n <div className={`${baseClass}__actions`}>\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )\n }\n\n return (\n <Form\n beforeSubmit={[\n async ({ formState }) => {\n // This is only called when form is submitted from drawer\n return await onChange({ formState, submit: true })\n },\n ]}\n disableValidationOnSubmit\n fields={clientBlock?.fields}\n initialState={initialState || {}}\n onChange={[onChange]}\n onSubmit={(formState, data) => {\n onFormSubmit(formState, data)\n toggleDrawer()\n }}\n uuid={uuid()}\n >\n <EditDepthProvider>\n <Drawer\n className={''}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n >\n {initialState ? (\n <>\n <RenderFields\n fields={clientBlock?.fields}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={permissions}\n readOnly={false}\n />\n <FormSubmit programmaticSubmit={true}>{t('fields:saveChanges')}</FormSubmit>\n </>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n {CustomBlock ? (\n <InlineBlockComponentContext.Provider\n value={{\n EditButton,\n initialState,\n InlineBlockContainer,\n Label,\n nodeKey,\n RemoveButton,\n }}\n >\n {CustomBlock}\n </InlineBlockComponentContext.Provider>\n ) : (\n <InlineBlockContainer>\n {initialState ? <Label /> : <ShimmerEffect height=\"15px\" width=\"40px\" />}\n {editor.isEditable() ? (\n <div className={`${baseClass}__actions`}>\n <EditButton />\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )}\n </Form>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -110,7 +110,7 @@ function TableActionMenu({
110
110
  let topPosition = menuButtonRect.top;
111
111
  if (topPosition + dropDownElementRect.height > window.innerHeight) {
112
112
  const position_0 = menuButtonRect.bottom - dropDownElementRect.height;
113
- topPosition = (position_0 < 0 ? margin : position_0) + window.pageYOffset;
113
+ topPosition = position_0 < 0 ? margin : position_0;
114
114
  }
115
115
  dropDownElement.style.top = `${topPosition}px`;
116
116
  }
@@ -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","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":[]}
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","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\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":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAMA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,kBAAkB,QAAQ;AACnC,SACEC,gCAAgC,EAChCC,6BAA6B,EAC7BC,eAAe,EACfC,gCAAgC,EAChCC,qCAAqC,EACrCC,mCAAmC,EACnCC,kCAAkC,EAClCC,gCAAgC,EAChCC,6BAA6B,EAC7BC,gBAAgB,EAChBC,eAAe,EACfC,iBAAiB,EACjBC,YAAY,EACZC,eAAe,EACfC,gCAAgC,EAChCC,qBAAqB,EACrBC,aAAa,QACR;AACP,SAASC,aAAa,QAAQ;AAC9B,SAASC,aAAa,QAAQ;AAC9B,SACEC,oBAAoB,EACpBC,QAAQ,EACRC,aAAa,EACbC,cAAc,EACdC,gBAAgB,EAChBC,iBAAiB,EACjBC,WAAW,EACXC,yBAAyB,EACzBC,eAAe,EACfC,wBAAwB,QACnB;AACP,YAAYC,KAAA,MAAW;AACvB,SAASC,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AACzD,SAASC,YAAY,QAAQ;AAK7B,SAASC,aAAa,QAAQ;AAE9B,SAASC,sBAAsBC,SAAyB;EAItD,MAAMC,cAAA,GAAiBD,SAAA,CAAUE,QAAQ;EACzC,OAAO;IACLC,OAAA,EAASF,cAAA,CAAeG,GAAG,GAAGH,cAAA,CAAeI,KAAK,GAAG;IACrDC,IAAA,EAAML,cAAA,CAAeM,GAAG,GAAGN,cAAA,CAAeO,KAAK,GAAG;EACpD;AACF;AAEA,SAASC,YAAA;EACP,MAAMT,SAAA,GAAYhB,aAAA;EAClB,IACEG,iBAAC,CAAkBa,SAAA,KAAc,CAACA,SAAA,CAAUU,WAAW,MACtDpC,iBAAA,CAAkB0B,SAAA,KAAc,CAACA,SAAA,CAAUW,MAAM,CAACC,EAAE,CAACZ,SAAA,CAAUa,KAAK,KACpE,CAAC1B,iBAAA,CAAkBa,SAAA,KAAc,CAAC1B,iBAAA,CAAkB0B,SAAA,GACrD;IACA,OAAO;EACT;EACA,MAAM,CAACc,IAAA,CAAK,GAAGjD,eAAA,CAAgBmC,SAAA,CAAUW,MAAM;EAC/C,OAAOG,IAAA,CAAKC,SAAS,GAAG,KAAKD,IAAA,CAAKE,SAAS,GAAG;AAChD;AAEA,SAASC,4BAA4BH,IAAmB;EACtD,IAAIA,IAAA,CAAKI,eAAe,OAAO,GAAG;IAChC,OAAO;EACT;EACA,MAAMC,UAAA,GAAaL,IAAA,CAAKM,oBAAoB;EAC5C,IAAI,CAAClC,gBAAA,CAAiBiC,UAAA,KAAe,CAACA,UAAA,CAAWE,OAAO,IAAI;IAC1D,OAAO;EACT;EACA,OAAO;AACT;AAEA,SAASC,sBAAsBC,IAAiB;EAC9C,MAAMC,cAAA,GAAiBD,IAAA,CAAKE,iBAAiB;EAC7C,IAAIrC,WAAA,CAAYoC,cAAA,GAAiB;IAC/BA,cAAA,CAAeE,MAAM;EACvB,OAAO,IAAIzC,cAAA,CAAeuC,cAAA,GAAiB;IACzCA,cAAA,CAAeG,SAAS;EAC1B,OAAO,IAAIH,cAAA,KAAmB,MAAM;IAClCA,cAAA,CAAeI,UAAU;EAC3B;AACF;AAUA,SAASC,gBAAgB;EACvBC,SAAS;EACTC,UAAU;EACVC,OAAO;EACPC,aAAa;EACbC,aAAA,EAAeC;AAAc,CACJ;EACzB,MAAM,CAACC,MAAA,CAAO,GAAG3E,yBAAA;EACjB,MAAM4E,WAAA,GAAc1C,MAAA,CAA8B;EAClD,MAAM,CAACuC,aAAA,EAAeI,mBAAA,CAAoB,GAAG1C,QAAA,CAASuC,cAAA;EACtD,MAAM,CAACI,eAAA,EAAiBC,qBAAA,CAAsB,GAAG5C,QAAA,CAAS;IACxDO,OAAA,EAAS;IACTG,IAAA,EAAM;EACR;EACA,MAAM,CAACmC,aAAA,EAAeC,gBAAA,CAAiB,GAAG9C,QAAA,CAAS;EACnD,MAAM,CAAC+C,cAAA,EAAgBC,iBAAA,CAAkB,GAAGhD,QAAA,CAAS;EACrD,MAAM;IAAEiD;EAAC,CAAE,GAAGhE,aAAA;EAEda,SAAA,CAAU;IACR,OAAO0C,MAAA,CAAOU,wBAAwB,CACpCnE,aAAA,EACCoE,aAAA;MACC,MAAMC,WAAA,GAAcD,aAAA,CAAcE,GAAG,CAACf,aAAA,CAAcgB,MAAM,QAAQ;MAElE,IAAIF,WAAA,EAAa;QACfZ,MAAA,CAAOe,cAAc,GAAGC,IAAI,CAAC;UAC3Bd,mBAAA,CAAoBJ,aAAA,CAAcmB,SAAS;QAC7C;MACF;IACF,GACA;MAAEC,kBAAA,EAAoB;IAAK;EAE/B,GAAG,CAAClB,MAAA,EAAQF,aAAA,CAAc;EAE1BxC,SAAA,CAAU;IACR0C,MAAA,CAAOe,cAAc,GAAGC,IAAI,CAAC;MAC3B,MAAMpD,SAAA,GAAYhB,aAAA;MAClB;MACA,IAAIV,iBAAA,CAAkB0B,SAAA,GAAY;QAChC,MAAMuD,sBAAA,GAAyBxD,qBAAA,CAAsBC,SAAA;QACrDwC,qBAAA,CAAsBzC,qBAAA,CAAsBC,SAAA;QAE5C0C,gBAAA,CAAiBa,sBAAA,CAAuBpD,OAAO,GAAG,KAAKoD,sBAAA,CAAuBjD,IAAI,GAAG;MACvF;MACA;MACAsC,iBAAA,CAAkBnC,WAAA;IACpB;EACF,GAAG,CAAC2B,MAAA,CAAO;EAEX1C,SAAA,CAAU;IACR,MAAM8D,iBAAA,GAAoBzB,UAAA,CAAW0B,OAAO;IAC5C,MAAMC,eAAA,GAAkBrB,WAAA,CAAYoB,OAAO;IAC3C,MAAME,WAAA,GAAcvB,MAAA,CAAOwB,cAAc;IAEzC,IAAIJ,iBAAA,IAAqB,QAAQE,eAAA,IAAmB,QAAQC,WAAA,IAAe,MAAM;MAC/E,MAAME,WAAA,GAAcF,WAAA,CAAYG,qBAAqB;MACrD,MAAMC,cAAA,GAAiBP,iBAAA,CAAkBM,qBAAqB;MAC9DJ,eAAA,CAAgBM,KAAK,CAACC,OAAO,GAAG;MAChC,MAAMC,mBAAA,GAAsBR,eAAA,CAAgBI,qBAAqB;MACjE,MAAMK,MAAA,GAAS;MACf,IAAIC,YAAA,GAAeL,cAAA,CAAeM,KAAK,GAAGF,MAAA;MAC1C,IACEC,YAAA,GAAeF,mBAAA,CAAoBI,KAAK,GAAGC,MAAA,CAAOC,UAAU,IAC5DJ,YAAA,GAAeF,mBAAA,CAAoBI,KAAK,GAAGT,WAAA,CAAYQ,KAAK,EAC5D;QACA,MAAMI,QAAA,GAAWV,cAAA,CAAeW,IAAI,GAAGR,mBAAA,CAAoBI,KAAK,GAAGH,MAAA;QACnEC,YAAA,GAAe,CAACK,QAAA,GAAW,IAAIN,MAAA,GAASM,QAAO,IAAKF,MAAA,CAAOI,WAAW;MACxE;MACAjB,eAAA,CAAgBM,KAAK,CAACU,IAAI,GAAG,GAAGN,YAAA,GAAeG,MAAA,CAAOI,WAAW,IAAI;MAErE,IAAIC,WAAA,GAAcb,cAAA,CAAec,GAAG;MACpC,IAAID,WAAA,GAAcV,mBAAA,CAAoBY,MAAM,GAAGP,MAAA,CAAOQ,WAAW,EAAE;QACjE,MAAMN,UAAA,GAAWV,cAAA,CAAeiB,MAAM,GAAGd,mBAAA,CAAoBY,MAAM;QACnEF,WAAA,GAAcH,UAAA,GAAW,IAAIN,MAAA,GAASM,UAAA;MACxC;MACAf,eAAA,CAAgBM,KAAK,CAACa,GAAG,GAAG,GAAGD,WAAA,IAAe;IAChD;EACF,GAAG,CAAC7C,UAAA,EAAYM,WAAA,EAAaD,MAAA,EAAQS,CAAA,CAAE;EAEvCnD,SAAA,CAAU;IACR,SAASuF,mBAAmBC,KAAiB;MAC3C,IACE7C,WAAA,CAAYoB,OAAO,IAAI,QACvB1B,UAAA,CAAW0B,OAAO,IAAI,QACtB,CAACpB,WAAA,CAAYoB,OAAO,CAAC0B,QAAQ,CAACD,KAAA,CAAME,MAAM,KAC1C,CAACrD,UAAA,CAAW0B,OAAO,CAAC0B,QAAQ,CAACD,KAAA,CAAME,MAAM,GACzC;QACAnD,aAAA,CAAc;MAChB;IACF;IAEAsC,MAAA,CAAOc,gBAAgB,CAAC,SAASJ,kBAAA;IAEjC,OAAO,MAAMV,MAAA,CAAOe,mBAAmB,CAAC,SAASL,kBAAA;EACnD,GAAG,CAAChD,aAAA,EAAeF,UAAA,CAAW;EAE9B,MAAMwD,mBAAA,GAAsB9F,WAAA,CAAY;IACtC2C,MAAA,CAAOoD,MAAM,CAAC;MACZ,IAAItD,aAAA,CAAcuD,UAAU,IAAI;QAC9B,MAAMC,SAAA,GAAY1H,mCAAA,CAAoCkE,aAAA;QACtD,MAAMyD,YAAA,GAAenH,eAAA,CAAgBkH,SAAA,EAAWtD,MAAA,CAAOwD,eAAe,CAACF,SAAA,CAAUxC,MAAM;QAEvF,IAAIyC,YAAA,KAAiB,MAAM;UACzB,MAAM,IAAIE,KAAA,CAAM;QAClB;QAEA,MAAMC,aAAA,GAAgBrH,gCAAA,CAAiCkH,YAAA;QACvD,IAAIG,aAAA,KAAkB,MAAM;UAC1BA,aAAA,CAAcC,eAAe;QAC/B;QAEAL,SAAA,CAAUM,SAAS;QACnB1D,mBAAA,CAAoBJ,aAAA,CAAcmB,SAAS;MAC7C;MAEA,MAAM4C,QAAA,GAAWlH,QAAA;MACjBkH,QAAA,CAASC,WAAW;IACtB;EACF,GAAG,CAAC9D,MAAA,EAAQF,aAAA,CAAc;EAE1B,MAAMiE,0BAAA,GAA6BA,CAAA;IACjC/D,MAAA,CAAOoD,MAAM,CAAC;MACZ,MAAMxF,WAAA,GAAYhB,aAAA;MAClB,IAAIV,iBAAA,CAAkB0B,WAAA,GAAY;QAChC,MAAM;UAAEG,OAAO;UAAEG;QAAI,CAAE,GAAGP,qBAAA,CAAsBC,WAAA;QAChD,MAAMoG,KAAA,GAAQpG,WAAA,CAAUqG,QAAQ;QAChC,IAAIC,SAAA,GAAkC;QACtC,KAAK,IAAIC,CAAA,GAAI,GAAGA,CAAA,GAAIH,KAAA,CAAMI,MAAM,EAAED,CAAA,IAAK;UACrC,MAAMhF,IAAA,GAAO6E,KAAK,CAACG,CAAA,CAAE;UACrB,IAAInI,gBAAA,CAAiBmD,IAAA,GAAO;YAC1B,IAAI+E,SAAA,KAAc,MAAM;cACtB/E,IAAA,CAAKkF,UAAU,CAACtG,OAAA,EAASuG,UAAU,CAACpG,IAAA;cACpCgG,SAAA,GAAY/E,IAAA;cACZ,MAAMF,OAAA,GAAUJ,2BAAA,CAA4BM,IAAA;cAC5C,IAAIJ,UAAA;cACJ,IAAIE,OAAA,IAAWnC,gBAAA,CAAkBiC,UAAA,GAAaI,IAAA,CAAKoF,aAAa,KAAM;gBACpExF,UAAA,CAAWyF,MAAM;cACnB;YACF,OAAO,IAAIxI,gBAAA,CAAiBkI,SAAA,GAAY;cACtC,MAAMjF,SAAA,GAAUJ,2BAAA,CAA4BM,IAAA;cAC5C,IAAI,CAACF,SAAA,EAAS;gBACZiF,SAAA,CAAUO,MAAM,IAAItF,IAAA,CAAKuF,WAAW;cACtC;cACAvF,IAAA,CAAKqF,MAAM;YACb;UACF;QACF;QACA,IAAIN,SAAA,KAAc,MAAM;UACtB,IAAIA,SAAA,CAAUpF,eAAe,OAAO,GAAG;YACrCoF,SAAA,CAAUO,MAAM,CAAC/H,oBAAA;UACnB;UACAwC,qBAAA,CAAsBgF,SAAA;QACxB;QACAtE,OAAA;MACF;IACF;EACF;EAEA,MAAM+E,4BAAA,GAA+BA,CAAA;IACnC3E,MAAA,CAAOoD,MAAM,CAAC;MACZjH,YAAA;IACF;EACF;EAEA,MAAMyI,yBAAA,GAA4BvH,WAAA,CAC/BwH,iBAAA;IACC7E,MAAA,CAAOoD,MAAM,CAAC;MACZrH,6BAAA,CAA8B8I,iBAAA;MAC9BjF,OAAA;IACF;EACF,GACA,CAACI,MAAA,EAAQJ,OAAA,CAAQ;EAGnB,MAAMkF,4BAAA,GAA+BzH,WAAA,CAClCwH,mBAAA;IACC7E,MAAA,CAAOoD,MAAM,CAAC;MACZ,KAAK,IAAIe,GAAA,GAAI,GAAGA,GAAA,GAAIhE,eAAA,CAAgBpC,OAAO,EAAEoG,GAAA,IAAK;QAChDrI,gCAAA,CAAiC+I,mBAAA;MACnC;MACAjF,OAAA;IACF;EACF,GACA,CAACI,MAAA,EAAQJ,OAAA,EAASO,eAAA,CAAgBpC,OAAO,CAAC;EAG5C,MAAMgH,yBAAA,GAA4B1H,WAAA,CAAY;IAC5C2C,MAAA,CAAOoD,MAAM,CAAC;MACZ5H,6BAAA;MACAoE,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQJ,OAAA,CAAQ;EAEpB,MAAMoF,sBAAA,GAAyB3H,WAAA,CAAY;IACzC2C,MAAA,CAAOoD,MAAM,CAAC;MACZ,MAAME,WAAA,GAAY1H,mCAAA,CAAoCkE,aAAA;MACtDwD,WAAA,CAAUkB,MAAM;MAEhBrB,mBAAA;MACAvD,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQF,aAAA,EAAeqD,mBAAA,EAAqBvD,OAAA,CAAQ;EAExD,MAAMqF,4BAAA,GAA+B5H,WAAA,CAAY;IAC/C2C,MAAA,CAAOoD,MAAM,CAAC;MACZ7H,gCAAA;MACAqE,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQJ,OAAA,CAAQ;EAEpB,MAAMsF,sBAAA,GAAyB7H,WAAA,CAAY;IACzC2C,MAAA,CAAOoD,MAAM,CAAC;MACZ,MAAME,WAAA,GAAY1H,mCAAA,CAAoCkE,aAAA;MAEtD,MAAMqF,aAAA,GAAgBtJ,kCAAA,CAAmCiE,aAAA;MAEzD,MAAMsF,SAAA,GAAY9B,WAAA,CAAUoB,WAAW;MAEvC,IAAIS,aAAA,IAAiBC,SAAA,CAAUhB,MAAM,IAAIe,aAAA,GAAgB,GAAG;QAC1D,MAAM,IAAI1B,KAAA,CAAM;MAClB;MAEA,MAAM4B,QAAA,GAAWD,SAAS,CAACD,aAAA,CAAc;MAEzC,IAAI,CAAClJ,eAAA,CAAgBoJ,QAAA,GAAW;QAC9B,MAAM,IAAI5B,KAAA,CAAM;MAClB;MAEA,MAAM6B,QAAA,GAAWxF,aAAA,CAAcyF,eAAe,KAAKjJ,qBAAA,CAAsBkJ,GAAG;MAC5EH,QAAA,CAASX,WAAW,GAAGe,OAAO,CAAEC,SAAA;QAC9B,IAAI,CAAC1J,gBAAA,CAAiB0J,SAAA,GAAY;UAChC,MAAM,IAAIjC,KAAA,CAAM;QAClB;QAEAiC,SAAA,CAAUC,eAAe,CAACL,QAAA,EAAUhJ,qBAAA,CAAsBkJ,GAAG;MAC/D;MAEArC,mBAAA;MACAvD,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQF,aAAA,EAAeqD,mBAAA,EAAqBvD,OAAA,CAAQ;EAExD,MAAMgG,yBAAA,GAA4BvI,WAAA,CAAY;IAC5C2C,MAAA,CAAOoD,MAAM,CAAC;MACZ,MAAME,WAAA,GAAY1H,mCAAA,CAAoCkE,aAAA;MAEtD,MAAM+F,gBAAA,GAAmBlK,qCAAA,CAAsCmE,aAAA;MAE/D,MAAMsF,WAAA,GAAY9B,WAAA,CAAUoB,WAAW;MACvC,MAAMoB,aAAA,GAAgBC,IAAA,CAAKC,GAAG,IAAIZ,WAAA,CAAUa,GAAG,CAAEC,GAAA,IAAQA,GAAA,CAAIxB,WAAW,GAAGN,MAAM;MAEjF,IAAIyB,gBAAA,IAAoBC,aAAA,IAAiBD,gBAAA,GAAmB,GAAG;QAC7D,MAAM,IAAIpC,KAAA,CAAM;MAClB;MAEA,MAAM6B,UAAA,GAAWxF,aAAA,CAAcyF,eAAe,KAAKjJ,qBAAA,CAAsB6J,MAAM;MAC/E,KAAK,IAAIC,CAAA,GAAI,GAAGA,CAAA,GAAIhB,WAAA,CAAUhB,MAAM,EAAEgC,CAAA,IAAK;QACzC,MAAMf,UAAA,GAAWD,WAAS,CAACgB,CAAA,CAAE;QAE7B,IAAI,CAACnK,eAAA,CAAgBoJ,UAAA,GAAW;UAC9B,MAAM,IAAI5B,KAAA,CAAM;QAClB;QAEA,MAAM4C,UAAA,GAAahB,UAAA,CAASX,WAAW;QACvC,IAAImB,gBAAA,IAAoBQ,UAAA,CAAWjC,MAAM,EAAE;UAEzC;QACF;QAEA,MAAMsB,WAAA,GAAYW,UAAU,CAACR,gBAAA,CAAiB;QAE9C,IAAI,CAAC7J,gBAAA,CAAiB0J,WAAA,GAAY;UAChC,MAAM,IAAIjC,KAAA,CAAM;QAClB;QAEAiC,WAAA,CAAUC,eAAe,CAACL,UAAA,EAAUhJ,qBAAA,CAAsB6J,MAAM;MAClE;MACAhD,mBAAA;MACAvD,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQF,aAAA,EAAeqD,mBAAA,EAAqBvD,OAAA,CAAQ;EAExD,MAAM0G,iBAAA,GAAoBjJ,WAAA,CAAY;IACpC2C,MAAA,CAAOoD,MAAM,CAAC;MACZ,IAAItD,aAAA,CAAcuD,UAAU,IAAI;QAC9B,MAAMC,WAAA,GAAY1H,mCAAA,CAAoCkE,aAAA;QACtD,IAAIwD,WAAA,EAAW;UACbA,WAAA,CAAUiD,cAAc,CAAC,CAACjD,WAAA,CAAUkD,cAAc;QACpD;MACF;MAEArD,mBAAA;MACAvD,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQF,aAAA,EAAeqD,mBAAA,EAAqBvD,OAAA,CAAQ;EAExD,IAAI6G,eAAA,GAAsC;EAC1C,IAAI/G,SAAA,EAAW;IACb,IAAIW,aAAA,EAAe;MACjBoG,eAAA,gBACEC,IAAA,CAAC;QACCC,SAAA,EAAU;QACV,gBAAa;QACbC,OAAA,EAASA,CAAA,KAAM7C,0BAAA;QACf8C,IAAA,EAAK;kBAEL,aAAAH,IAAA,CAAC;UAAKC,SAAA,EAAU;oBAAO;;;IAG7B,OAAO,IAAIpG,cAAA,EAAgB;MACzBkG,eAAA,gBACEC,IAAA,CAAC;QACCC,SAAA,EAAU;QACV,gBAAa;QACbC,OAAA,EAASA,CAAA,KAAMjC,4BAAA;QACfkC,IAAA,EAAK;kBAEL,aAAAH,IAAA,CAAC;UAAKC,SAAA,EAAU;oBAAO;;;IAG7B;EACF;EAEA,oBAAOlJ,YAAA;EACL;;EACAqJ,KAAA,CAAC;IACCH,SAAA,EAAU;IACVC,OAAA,EAAUG,CAAA;MACRA,CAAA,CAAEC,eAAe;IACnB;IACAC,GAAA,EAAKhH,WAAA;eAEJwG,eAAA,gBACCK,KAAA,CAAC1J,KAAA,CAAM8J,QAAQ;iBACZT,eAAA,E,aACDC,IAAA,CAAC;SAED,M,aAEJA,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAMN,iBAAA;MACfO,IAAA,EAAK;gBAEL,aAAAH,IAAA,CAAC;QAAKC,SAAA,EAAU;kBAAO;;qBAEzBD,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAMhC,yBAAA,CAA0B;MACzCiC,IAAA,EAAK;gBAEL,aAAAC,KAAA,CAAC;QAAKH,SAAA,EAAU;mBAAO,WACbxG,eAAA,CAAgBjC,IAAI,KAAK,IAAI,QAAQ,GAAGiC,eAAA,CAAgBjC,IAAI,OAAO,EAAC;;qBAGhFwI,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAMhC,yBAAA,CAA0B;MACzCiC,IAAA,EAAK;gBAEL,aAAAC,KAAA,CAAC;QAAKH,SAAA,EAAU;mBAAO,WACbxG,eAAA,CAAgBjC,IAAI,KAAK,IAAI,QAAQ,GAAGiC,eAAA,CAAgBjC,IAAI,OAAO,EAAC;;qBAGhFwI,IAAA,CAAC,W,aACDA,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAM9B,4BAAA,CAA6B;MAC5C+B,IAAA,EAAK;gBAEL,aAAAC,KAAA,CAAC;QAAKH,SAAA,EAAU;mBAAO,WACbxG,eAAA,CAAgBpC,OAAO,KAAK,IAAI,WAAW,GAAGoC,eAAA,CAAgBpC,OAAO,UAAU,EAAE,KAAI;;qBAIjG2I,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAM9B,4BAAA,CAA6B;MAC5C+B,IAAA,EAAK;gBAEL,aAAAC,KAAA,CAAC;QAAKH,SAAA,EAAU;mBAAO,WACbxG,eAAA,CAAgBpC,OAAO,KAAK,IAAI,WAAW,GAAGoC,eAAA,CAAgBpC,OAAO,UAAU,EAAE,KAAI;;qBAIjG2I,IAAA,CAAC,W,aACDA,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAM3B,4BAAA;MACf4B,IAAA,EAAK;gBAEL,aAAAH,IAAA,CAAC;QAAKC,SAAA,EAAU;kBAAO;;qBAEzBD,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAM7B,yBAAA;MACf8B,IAAA,EAAK;gBAEL,aAAAH,IAAA,CAAC;QAAKC,SAAA,EAAU;kBAAO;;qBAEzBD,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAM5B,sBAAA;MACf6B,IAAA,EAAK;gBAEL,aAAAH,IAAA,CAAC;QAAKC,SAAA,EAAU;kBAAO;;qBAEzBD,IAAA,CAAC,W,aACDA,IAAA,CAAC;MAAOC,SAAA,EAAU;MAAOC,OAAA,EAASA,CAAA,KAAM1B,sBAAA;MAA0B2B,IAAA,EAAK;gBACrE,aAAAC,KAAA,CAAC;QAAKH,SAAA,EAAU;mBACZ,CAAA7G,aAAA,CAAcqH,aAAa,GAAG7K,qBAAA,CAAsBkJ,GAAG,MAAMlJ,qBAAA,CAAsBkJ,GAAG,GACpF,WACA,OAAO,KAAI;;qBAInBkB,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAMhB,yBAAA;MACfiB,IAAA,EAAK;gBAEL,aAAAC,KAAA,CAAC;QAAKH,SAAA,EAAU;mBACZ,CAAA7G,aAAA,CAAcqH,aAAa,GAAG7K,qBAAA,CAAsB6J,MAAM,MAC5D7J,qBAAA,CAAsB6J,MAAM,GACxB,WACA,OAAO,KAAI;;;MAKrBiB,QAAA,CAASC,IAAI;AAEjB;AAEA,SAASC,6BAA6B;EACpCC,UAAU;EACV7H;AAAS,CAIV;EACC,MAAM,CAACM,MAAA,CAAO,GAAG3E,yBAAA;EAEjB,MAAMmM,aAAA,GAAgBjK,MAAA,CAA8B;EACpD,MAAMkK,WAAA,GAAclK,MAAA,CAAiC;EACrD,MAAM,CAACmK,UAAA,EAAY7H,aAAA,CAAc,GAAGrC,QAAA,CAAS;EAE7C,MAAM,CAACsC,aAAA,EAAe6H,oBAAA,CAAqB,GAAGnK,QAAA,CAA+B;EAE7E,MAAMoK,SAAA,GAAYvK,WAAA,CAAY;IAC5B,MAAMwK,IAAA,GAAOL,aAAA,CAAcnG,OAAO;IAClC,MAAMzD,SAAA,GAAYhB,aAAA;IAClB,MAAMkL,eAAA,GAAkB5K,eAAA,CAAgB8C,MAAA,CAAO+H,OAAO;IACtD,MAAMC,aAAA,GAAgBZ,QAAA,CAASY,aAAa;IAC5C,SAASC,QAAA;MACP,IAAIJ,IAAA,EAAM;QACRA,IAAA,CAAKK,SAAS,CAAC1D,MAAM,CAAC;QACtBqD,IAAA,CAAKK,SAAS,CAACC,GAAG,CAAC;MACrB;MACAR,oBAAA,CAAqB;IACvB;IAEA,IAAI/J,SAAA,IAAa,QAAQiK,IAAA,IAAQ,MAAM;MACrC,OAAOI,OAAA;IACT;IAEA,MAAM1G,WAAA,GAAcvB,MAAA,CAAOwB,cAAc;IACzC,IAAIkC,aAAA,GAAsC;IAC1C,IAAI0E,sBAAA,GAA6C;IAEjD,IACErL,iBAAA,CAAkBa,SAAA,KAClB2D,WAAA,KAAgB,QAChBuG,eAAA,KAAoB,QACpBvG,WAAA,CAAYwB,QAAQ,CAAC+E,eAAA,CAAgBO,UAAU,GAC/C;MACA,MAAMC,0BAAA,GAA6B5M,gCAAA,CACjCkC,SAAA,CAAUW,MAAM,CAACgK,OAAO;MAG1B,IAAID,0BAAA,IAA8B,MAAM;QACtC,OAAOL,OAAA;MACT;MAEAG,sBAAA,GAAyBpI,MAAA,CAAOwD,eAAe,CAAC8E,0BAAA,CAA2BxH,MAAM;MAEjF,IAAIsH,sBAAA,IAA0B,QAAQ,CAACE,0BAAA,CAA2BjF,UAAU,IAAI;QAC9E,OAAO4E,OAAA;MACT;MAEA,MAAM3E,SAAA,GAAY1H,mCAAA,CAAoC0M,0BAAA;MACtD,MAAM/E,YAAA,GAAenH,eAAA,CAAgBkH,SAAA,EAAWtD,MAAA,CAAOwD,eAAe,CAACF,SAAA,CAAUxC,MAAM;MAEvF,IAAIyC,YAAA,KAAiB,MAAM;QACzB,MAAM,IAAIE,KAAA,CAAM;MAClB;MAEAC,aAAA,GAAgBrH,gCAAA,CAAiCkH,YAAA;MACjDoE,oBAAA,CAAqBW,0BAAA;IACvB,OAAO,IAAIpM,iBAAA,CAAkB0B,SAAA,GAAY;MACvC,MAAMyK,UAAA,GAAa3M,gCAAA,CAAiCkC,SAAA,CAAUW,MAAM,CAACgK,OAAO;MAC5E,IAAI,CAACvM,gBAAA,CAAiBqM,UAAA,GAAa;QACjC,MAAM,IAAI5E,KAAA,CAAM;MAClB;MACA,MAAMH,WAAA,GAAY1H,mCAAA,CAAoCyM,UAAA;MACtD,MAAM9E,cAAA,GAAenH,eAAA,CAAgBkH,WAAA,EAAWtD,MAAA,CAAOwD,eAAe,CAACF,WAAA,CAAUxC,MAAM;MAEvF,IAAIyC,cAAA,KAAiB,MAAM;QACzB,MAAM,IAAIE,KAAA,CAAM;MAClB;MAEAC,aAAA,GAAgBrH,gCAAA,CAAiCkH,cAAA;MACjD6E,sBAAA,GAAyBpI,MAAA,CAAOwD,eAAe,CAAC6E,UAAA,CAAWvH,MAAM;IACnE,OAAO,IAAI,CAACkH,aAAA,EAAe;MACzB,OAAOC,OAAA;IACT;IACA,IAAIvE,aAAA,KAAkB,QAAQ0E,sBAAA,KAA2B,MAAM;MAC7D,OAAOH,OAAA;IACT;IACA,MAAMO,OAAA,GAAU,CAAC9E,aAAA,IAAiB,CAACA,aAAA,CAAc+E,WAAW;IAC5DZ,IAAA,CAAKK,SAAS,CAACQ,MAAM,CAAC,8CAA8CF,OAAA;IACpEX,IAAA,CAAKK,SAAS,CAACQ,MAAM,CAAC,gDAAgD,CAACF,OAAA;IACvE,IAAIA,OAAA,EAAS;MACX,MAAMG,aAAA,GAAgBP,sBAAA,CAAuB1G,qBAAqB;MAClE,MAAMkH,UAAA,GAAarB,UAAA,CAAW7F,qBAAqB;MACnD,MAAMe,GAAA,GAAMkG,aAAA,CAAclG,GAAG,GAAGmG,UAAA,CAAWnG,GAAG;MAC9C,MAAMH,IAAA,GAAOqG,aAAA,CAAc1G,KAAK,GAAG2G,UAAA,CAAWtG,IAAI;MAClDuF,IAAA,CAAKjG,KAAK,CAACiH,SAAS,GAAG,aAAavG,IAAA,OAAWG,GAAA,KAAQ;IACzD;EACF,GAAG,CAACzC,MAAA,EAAQuH,UAAA,CAAW;EAEvBjK,SAAA,CAAU;IACR;IACA;IACA,IAAIwL,SAAA,GAAuDC,SAAA;IAC3D,MAAMC,QAAA,GAAWA,CAAA;MACfF,SAAA,GAAYC,SAAA;MACZ/I,MAAA,CAAOe,cAAc,GAAGC,IAAI,CAAC4G,SAAA;IAC/B;IACA,MAAMqB,eAAA,GAAkBA,CAAA;MACtB,IAAIH,SAAA,KAAcC,SAAA,EAAW;QAC3BD,SAAA,GAAYI,UAAA,CAAWF,QAAA,EAAU;MACnC;MACA,OAAO;IACT;IACA,OAAOxM,aAAA,CACLwD,MAAA,CAAOmJ,sBAAsB,CAACF,eAAA,GAC9BjJ,MAAA,CAAOoJ,eAAe,CAACjM,wBAAA,EAA0B8L,eAAA,EAAiBhM,yBAAA,GAClE+C,MAAA,CAAOqJ,oBAAoB,CAAC,CAAC9H,aAAA,EAAa+H,eAAA;MACxC,IAAIA,eAAA,EAAiB;QACnBA,eAAA,CAAgBpG,mBAAmB,CAAC,WAAW+F,eAAA;MACjD;MACA,IAAI1H,aAAA,EAAa;QACfA,aAAA,CAAY0B,gBAAgB,CAAC,WAAWgG,eAAA;QACxCA,eAAA;MACF;IACF,IACA,MAAMM,YAAA,CAAaT,SAAA;EAEvB;EAEA,MAAMU,gBAAA,GAAmBjM,MAAA,CAAOuC,aAAA;EAEhCxC,SAAA,CAAU;IACR,IAAIkM,gBAAA,CAAiBnI,OAAO,KAAKvB,aAAA,EAAe;MAC9CD,aAAA,CAAc;IAChB;IAEA2J,gBAAA,CAAiBnI,OAAO,GAAGvB,aAAA;EAC7B,GAAG,CAAC0J,gBAAA,EAAkB1J,aAAA,CAAc;EAEpC,oBACE4G,IAAA,CAAC;IAAIC,SAAA,EAAU;IAAqCM,GAAA,EAAKO,aAAA;cACtD1H,aAAA,IAAiB,qBAChBgH,KAAA,CAAC1J,KAAA,CAAM8J,QAAQ;8BACbR,IAAA,CAAC;QACCC,SAAA,EAAU;QACVC,OAAA,EAAUG,CAAA;UACRA,CAAA,CAAEC,eAAe;UACjBnH,aAAA,CAAc,CAAC6H,UAAA;QACjB;QACAT,GAAA,EAAKQ,WAAA;QACLZ,IAAA,EAAK;kBAEL,aAAAH,IAAA,CAAChJ,aAAA;UAEFgK,UAAA,iBACChB,IAAA,CAACjH,eAAA;QACCC,SAAA,EAAWA,SAAA;QACXC,UAAA,EAAY8H,WAAA;QACZ7H,OAAA,EAASA,CAAA,KAAMC,aAAA,CAAc;QAC7BA,aAAA,EAAeA,aAAA;QACfC,aAAA,EAAeA;;;;AAO7B;AAEA,OAAO,MAAM2J,qBAAA,GAAmDC,EAAA;EAAA,MAAAC,CAAA,GAAAvO,EAAA;EAAC;IAAAmM;EAAA,IAAAmC,EAAc;EAC7E,MAAAE,UAAA,GAAmBtO,kBAAA;EAAA,IAAAuO,EAAA;EAAA,IAAAF,CAAA,QAAApC,UAAA,IAAAoC,CAAA,QAAAC,UAAA;IACZC,EAAA,GAAApM,YAAA,CACLmM,UAAA,GACElD,IAAA,CAAAY,4BAAA;MAAAC,UAAA,EAA0CA,UAAA,IAAAH,QAAA,CAAAC,IAA2B;MAAA3H,SAAA;IAAA,C,QACnE,EACJ6H,UAAA,IAAAH,QAAA,CAAAC,IAA2B;IAAAsC,CAAA,MAAApC,UAAA;IAAAoC,CAAA,MAAAC,UAAA;IAAAD,CAAA,MAAAE,EAAA;EAAA;IAAAA,EAAA,GAAAF,CAAA;EAAA;EAAA,OAJtBE,EAIsB;AAAA,CAE/B","ignoreList":[]}
@@ -1,5 +1,4 @@
1
1
  import type { LexicalNode, SerializedLexicalNode } from 'lexical';
2
- import * as React from 'react';
3
2
  import type { SerializedHorizontalRuleNode } from '../../server/nodes/HorizontalRuleNode.js';
4
3
  import { HorizontalRuleServerNode } from '../../server/nodes/HorizontalRuleNode.js';
5
4
  export declare class HorizontalRuleNode extends HorizontalRuleServerNode {
@@ -12,7 +11,7 @@ export declare class HorizontalRuleNode extends HorizontalRuleServerNode {
12
11
  /**
13
12
  * Allows you to render a React component within whatever createDOM returns.
14
13
  */
15
- decorate(): React.ReactElement;
14
+ decorate(): null;
16
15
  exportJSON(): SerializedLexicalNode;
17
16
  }
18
17
  export declare function $createHorizontalRuleNode(): HorizontalRuleNode;
@@ -1 +1 @@
1
- {"version":3,"file":"HorizontalRuleNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/horizontalRule/client/nodes/HorizontalRuleNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAuB,WAAW,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAGtF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,0CAA0C,CAAA;AAE5F,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAA;AAQnF,qBAAa,kBAAmB,SAAQ,wBAAwB;WAC9C,KAAK,CAAC,IAAI,EAAE,wBAAwB,GAAG,wBAAwB;WAI/D,OAAO,IAAI,MAAM;IAIjC;;OAEG;WACa,UAAU,CAAC,cAAc,EAAE,4BAA4B,GAAG,kBAAkB;IAI5F;;OAEG;IACM,QAAQ,IAAI,KAAK,CAAC,YAAY;IAI9B,UAAU,IAAI,qBAAqB;CAG7C;AAMD,wBAAgB,yBAAyB,IAAI,kBAAkB,CAE9D;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GACnC,IAAI,IAAI,kBAAkB,CAE5B"}
1
+ {"version":3,"file":"HorizontalRuleNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/horizontalRule/client/nodes/HorizontalRuleNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAuB,WAAW,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAKtF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,0CAA0C,CAAA;AAE5F,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAA;AAEnF,qBAAa,kBAAmB,SAAQ,wBAAwB;WAC9C,KAAK,CAAC,IAAI,EAAE,wBAAwB,GAAG,wBAAwB;WAI/D,OAAO,IAAI,MAAM;IAIjC;;OAEG;WACa,UAAU,CAAC,cAAc,EAAE,4BAA4B,GAAG,kBAAkB;IAI5F;;OAEG;IACM,QAAQ;IAIR,UAAU,IAAI,qBAAqB;CAG7C;AAMD,wBAAgB,yBAAyB,IAAI,kBAAkB,CAE9D;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GACnC,IAAI,IAAI,kBAAkB,CAE5B"}
@@ -1,12 +1,8 @@
1
1
  'use client';
2
2
 
3
- import { jsx as _jsx } from "react/jsx-runtime";
4
3
  import { $applyNodeReplacement } from 'lexical';
5
4
  import * as React from 'react';
6
5
  import { HorizontalRuleServerNode } from '../../server/nodes/HorizontalRuleNode.js';
7
- const HorizontalRuleComponent = /*#__PURE__*/React.lazy(() => import('../../client/component/index.js').then(module => ({
8
- default: module.HorizontalRuleComponent
9
- })));
10
6
  export class HorizontalRuleNode extends HorizontalRuleServerNode {
11
7
  static clone(node) {
12
8
  return super.clone(node);
@@ -24,9 +20,7 @@ export class HorizontalRuleNode extends HorizontalRuleServerNode {
24
20
  * Allows you to render a React component within whatever createDOM returns.
25
21
  */
26
22
  decorate() {
27
- return /*#__PURE__*/_jsx(HorizontalRuleComponent, {
28
- nodeKey: this.__key
29
- });
23
+ return null;
30
24
  }
31
25
  exportJSON() {
32
26
  return super.exportJSON();
@@ -1 +1 @@
1
- {"version":3,"file":"HorizontalRuleNode.js","names":["$applyNodeReplacement","React","HorizontalRuleServerNode","HorizontalRuleComponent","lazy","then","module","default","HorizontalRuleNode","clone","node","getType","importJSON","serializedNode","$createHorizontalRuleNode","decorate","_jsx","nodeKey","__key","exportJSON","$convertHorizontalRuleElement","$isHorizontalRuleNode"],"sources":["../../../../../src/features/horizontalRule/client/nodes/HorizontalRuleNode.tsx"],"sourcesContent":["'use client'\nimport type { DOMConversionOutput, LexicalNode, SerializedLexicalNode } from 'lexical'\n\nimport { $applyNodeReplacement } from 'lexical'\nimport * as React from 'react'\n\nimport type { SerializedHorizontalRuleNode } from '../../server/nodes/HorizontalRuleNode.js'\n\nimport { HorizontalRuleServerNode } from '../../server/nodes/HorizontalRuleNode.js'\n\nconst HorizontalRuleComponent = React.lazy(() =>\n import('../../client/component/index.js').then((module) => ({\n default: module.HorizontalRuleComponent,\n })),\n)\n\nexport class HorizontalRuleNode extends HorizontalRuleServerNode {\n static override clone(node: HorizontalRuleServerNode): HorizontalRuleServerNode {\n return super.clone(node)\n }\n\n static override getType(): string {\n return super.getType()\n }\n\n /**\n * The data for this node is stored serialized as JSON. This is the \"load function\" of that node: it takes the saved data and converts it into a node.\n */\n static override importJSON(serializedNode: SerializedHorizontalRuleNode): HorizontalRuleNode {\n return $createHorizontalRuleNode()\n }\n\n /**\n * Allows you to render a React component within whatever createDOM returns.\n */\n override decorate(): React.ReactElement {\n return <HorizontalRuleComponent nodeKey={this.__key} />\n }\n\n override exportJSON(): SerializedLexicalNode {\n return super.exportJSON()\n }\n}\n\nfunction $convertHorizontalRuleElement(): DOMConversionOutput {\n return { node: $createHorizontalRuleNode() }\n}\n\nexport function $createHorizontalRuleNode(): HorizontalRuleNode {\n return $applyNodeReplacement(new HorizontalRuleNode())\n}\n\nexport function $isHorizontalRuleNode(\n node: LexicalNode | null | undefined,\n): node is HorizontalRuleNode {\n return node instanceof HorizontalRuleNode\n}\n"],"mappings":"AAAA;;;AAGA,SAASA,qBAAqB,QAAQ;AACtC,YAAYC,KAAA,MAAW;AAIvB,SAASC,wBAAwB,QAAQ;AAEzC,MAAMC,uBAAA,gBAA0BF,KAAA,CAAMG,IAAI,CAAC,MACzC,MAAM,CAAC,mCAAmCC,IAAI,CAAEC,MAAA,KAAY;EAC1DC,OAAA,EAASD,MAAA,CAAOH;AAClB;AAGF,OAAO,MAAMK,kBAAA,SAA2BN,wBAAA;EACtC,OAAgBO,MAAMC,IAA8B,EAA4B;IAC9E,OAAO,KAAK,CAACD,KAAA,CAAMC,IAAA;EACrB;EAEA,OAAgBC,QAAA,EAAkB;IAChC,OAAO,KAAK,CAACA,OAAA;EACf;EAEA;;;EAGA,OAAgBC,WAAWC,cAA4C,EAAsB;IAC3F,OAAOC,yBAAA;EACT;EAEA;;;EAGAC,QAASA,CAAA,EAA+B;IACtC,oBAAOC,IAAA,CAACb,uBAAA;MAAwBc,OAAA,EAAS,IAAI,CAACC;;EAChD;EAESC,WAAA,EAAoC;IAC3C,OAAO,KAAK,CAACA,UAAA;EACf;AACF;AAEA,SAASC,8BAAA;EACP,OAAO;IAAEV,IAAA,EAAMI,yBAAA;EAA4B;AAC7C;AAEA,OAAO,SAASA,0BAAA;EACd,OAAOd,qBAAA,CAAsB,IAAIQ,kBAAA;AACnC;AAEA,OAAO,SAASa,sBACdX,IAAoC;EAEpC,OAAOA,IAAA,YAAgBF,kBAAA;AACzB","ignoreList":[]}
1
+ {"version":3,"file":"HorizontalRuleNode.js","names":["$applyNodeReplacement","React","HorizontalRuleServerNode","HorizontalRuleNode","clone","node","getType","importJSON","serializedNode","$createHorizontalRuleNode","decorate","exportJSON","$convertHorizontalRuleElement","$isHorizontalRuleNode"],"sources":["../../../../../src/features/horizontalRule/client/nodes/HorizontalRuleNode.tsx"],"sourcesContent":["'use client'\nimport type { DOMConversionOutput, LexicalNode, SerializedLexicalNode } from 'lexical'\n\nimport { $applyNodeReplacement } from 'lexical'\nimport * as React from 'react'\n\nimport type { SerializedHorizontalRuleNode } from '../../server/nodes/HorizontalRuleNode.js'\n\nimport { HorizontalRuleServerNode } from '../../server/nodes/HorizontalRuleNode.js'\n\nexport class HorizontalRuleNode extends HorizontalRuleServerNode {\n static override clone(node: HorizontalRuleServerNode): HorizontalRuleServerNode {\n return super.clone(node)\n }\n\n static override getType(): string {\n return super.getType()\n }\n\n /**\n * The data for this node is stored serialized as JSON. This is the \"load function\" of that node: it takes the saved data and converts it into a node.\n */\n static override importJSON(serializedNode: SerializedHorizontalRuleNode): HorizontalRuleNode {\n return $createHorizontalRuleNode()\n }\n\n /**\n * Allows you to render a React component within whatever createDOM returns.\n */\n override decorate() {\n return null\n }\n\n override exportJSON(): SerializedLexicalNode {\n return super.exportJSON()\n }\n}\n\nfunction $convertHorizontalRuleElement(): DOMConversionOutput {\n return { node: $createHorizontalRuleNode() }\n}\n\nexport function $createHorizontalRuleNode(): HorizontalRuleNode {\n return $applyNodeReplacement(new HorizontalRuleNode())\n}\n\nexport function $isHorizontalRuleNode(\n node: LexicalNode | null | undefined,\n): node is HorizontalRuleNode {\n return node instanceof HorizontalRuleNode\n}\n"],"mappings":"AAAA;;AAGA,SAASA,qBAAqB,QAAQ;AACtC,YAAYC,KAAA,MAAW;AAIvB,SAASC,wBAAwB,QAAQ;AAEzC,OAAO,MAAMC,kBAAA,SAA2BD,wBAAA;EACtC,OAAgBE,MAAMC,IAA8B,EAA4B;IAC9E,OAAO,KAAK,CAACD,KAAA,CAAMC,IAAA;EACrB;EAEA,OAAgBC,QAAA,EAAkB;IAChC,OAAO,KAAK,CAACA,OAAA;EACf;EAEA;;;EAGA,OAAgBC,WAAWC,cAA4C,EAAsB;IAC3F,OAAOC,yBAAA;EACT;EAEA;;;EAGAC,QAASA,CAAA,EAAW;IAClB,OAAO;EACT;EAESC,WAAA,EAAoC;IAC3C,OAAO,KAAK,CAACA,UAAA;EACf;AACF;AAEA,SAASC,8BAAA;EACP,OAAO;IAAEP,IAAA,EAAMI,yBAAA;EAA4B;AAC7C;AAEA,OAAO,SAASA,0BAAA;EACd,OAAOT,qBAAA,CAAsB,IAAIG,kBAAA;AACnC;AAEA,OAAO,SAASU,sBACdR,IAAoC;EAEpC,OAAOA,IAAA,YAAgBF,kBAAA;AACzB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"RelationshipComponent.d.ts","sourceRoot":"","sources":["../../../../../src/features/relationship/client/components/RelationshipComponent.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAgBhD,OAAO,KAA+D,MAAM,OAAO,CAAA;AAEnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AAM9E,OAAO,cAAc,CAAA;AAQrB,KAAK,KAAK,GAAG;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,gBAAgB,CAAA;IACtB,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AA0KD,eAAO,MAAM,qBAAqB,UAAW,KAAK,KAAG,KAAK,CAAC,SAE1D,CAAA"}
1
+ {"version":3,"file":"RelationshipComponent.d.ts","sourceRoot":"","sources":["../../../../../src/features/relationship/client/components/RelationshipComponent.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAMhD,OAAO,KAAoD,MAAM,OAAO,CAAA;AAExE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AAK9E,OAAO,cAAc,CAAA;AAQrB,KAAK,KAAK,GAAG;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,gBAAgB,CAAA;IACtB,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAgHD,eAAO,MAAM,qBAAqB,UAAW,KAAK,KAAG,KAAK,CAAC,SAE1D,CAAA"}
@@ -2,16 +2,13 @@
2
2
 
3
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js';
5
- import { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection.js';
6
- import { mergeRegister } from '@lexical/utils';
7
5
  import { getTranslation } from '@payloadcms/translations';
8
6
  import { Button, useConfig, usePayloadAPI, useTranslation } from '@payloadcms/ui';
9
- import { $getNodeByKey, $getSelection, $isNodeSelection, CLICK_COMMAND, COMMAND_PRIORITY_LOW, KEY_BACKSPACE_COMMAND, KEY_DELETE_COMMAND } from 'lexical';
10
- import React, { useCallback, useEffect, useReducer, useRef, useState } from 'react';
7
+ import { $getNodeByKey } from 'lexical';
8
+ import React, { useCallback, useReducer, useRef, useState } from 'react';
11
9
  import { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js';
12
10
  import { useLexicalDocumentDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDocumentDrawer.js';
13
11
  import { INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND } from '../drawer/commands.js';
14
- import { $isRelationshipNode } from '../nodes/RelationshipNode.js';
15
12
  const baseClass = 'lexical-relationship';
16
13
  const initialParams = {
17
14
  depth: 0
@@ -29,7 +26,6 @@ const Component = props => {
29
26
  }
30
27
  const relationshipElemRef = useRef(null);
31
28
  const [editor] = useLexicalComposerContext();
32
- const [isSelected, setSelected, clearSelection] = useLexicalNodeSelection(nodeKey);
33
29
  const {
34
30
  fieldProps: {
35
31
  readOnly
@@ -44,7 +40,7 @@ const Component = props => {
44
40
  },
45
41
  getEntityConfig
46
42
  } = useConfig();
47
- const [relatedCollection, setRelatedCollection] = useState(() => getEntityConfig({
43
+ const [relatedCollection] = useState(() => getEntityConfig({
48
44
  collectionSlug: relationTo
49
45
  }));
50
46
  const {
@@ -80,42 +76,8 @@ const Component = props => {
80
76
  closeDocumentDrawer();
81
77
  dispatchCacheBust();
82
78
  }, [cacheBust, setParams, closeDocumentDrawer]);
83
- const $onDelete = useCallback(payload => {
84
- const deleteSelection = $getSelection();
85
- if (isSelected && $isNodeSelection(deleteSelection)) {
86
- const event = payload;
87
- event.preventDefault();
88
- editor.update(() => {
89
- deleteSelection.getNodes().forEach(node => {
90
- if ($isRelationshipNode(node)) {
91
- node.remove();
92
- }
93
- });
94
- });
95
- }
96
- return false;
97
- }, [editor, isSelected]);
98
- const onClick = useCallback(payload_0 => {
99
- const event_0 = payload_0;
100
- // Check if relationshipElemRef.target or anything WITHIN relationshipElemRef.target was clicked
101
- if (event_0.target === relationshipElemRef.current || relationshipElemRef.current?.contains(event_0.target)) {
102
- if (event_0.shiftKey) {
103
- setSelected(!isSelected);
104
- } else {
105
- if (!isSelected) {
106
- clearSelection();
107
- setSelected(true);
108
- }
109
- }
110
- return true;
111
- }
112
- return false;
113
- }, [isSelected, setSelected, clearSelection]);
114
- useEffect(() => {
115
- return mergeRegister(editor.registerCommand(CLICK_COMMAND, onClick, COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_DELETE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_BACKSPACE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW));
116
- }, [clearSelection, editor, isSelected, nodeKey, $onDelete, setSelected, onClick]);
117
79
  return /*#__PURE__*/_jsxs("div", {
118
- className: [baseClass, isSelected && `${baseClass}--selected`].filter(Boolean).join(' '),
80
+ className: baseClass,
119
81
  contentEditable: false,
120
82
  ref: relationshipElemRef,
121
83
  children: [/*#__PURE__*/_jsxs("div", {