@payloadcms/richtext-lexical 3.0.0-beta.91 → 3.0.0-beta.92
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/exports/client/index.js.map +3 -3
- package/dist/features/link/server/baseFields.d.ts.map +1 -1
- package/dist/features/link/server/baseFields.js +12 -2
- package/dist/features/link/server/baseFields.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -19
- package/dist/index.js.map +1 -1
- package/dist/lexical/utils/url.d.ts +5 -0
- package/dist/lexical/utils/url.d.ts.map +1 -1
- package/dist/lexical/utils/url.js +7 -0
- package/dist/lexical/utils/url.js.map +1 -1
- package/package.json +9 -9
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/features/shared/slashMenu/basicGroup.ts", "../../../src/cell/index.tsx", "../../../src/lexical/theme/EditorTheme.tsx", "../../../src/lexical/config/client/default.ts", "../../../src/lexical/config/client/loader.ts", "../../../src/lexical/config/client/sanitize.ts", "../../../src/features/align/client/index.tsx", "../../../src/lexical/ui/icons/AlignCenter/index.tsx", "../../../src/lexical/ui/icons/AlignJustify/index.tsx", "../../../src/lexical/ui/icons/AlignLeft/index.tsx", "../../../src/lexical/ui/icons/AlignRight/index.tsx", "../../../src/utilities/useLexicalFeature.tsx", "../../../src/features/createClientComponent.tsx", "../../../src/utilities/createClientFeature.ts", "../../../src/features/align/client/toolbarAlignGroup.ts", "../../../src/features/blockquote/client/index.tsx", "../../../src/lexical/ui/icons/Blockquote/index.tsx", "../../../src/lexical/ui/icons/Text/index.tsx", "../../../src/features/shared/toolbar/textDropdownGroup.ts", "../../../src/features/blockquote/markdownTransformer.ts", "../../../src/features/blocks/client/index.tsx", "../../../src/lexical/ui/icons/Block/index.tsx", "../../../src/lexical/ui/icons/InlineBlocks/index.tsx", "../../../src/features/blocks/client/nodes/BlocksNode.tsx", "../../../src/features/blocks/server/nodes/BlocksNode.tsx", "../../../src/features/blocks/client/plugin/index.tsx", "../../../src/features/debug/testRecorder/client/plugin/index.tsx", "../../../src/lexical/utils/canUseDOM.ts", "../../../src/lexical/utils/environment.ts", "../../../src/features/debug/testRecorder/client/index.tsx", "../../../src/features/debug/treeView/client/plugin/index.tsx", "../../../src/features/debug/treeView/client/index.tsx", "../../../src/features/format/bold/feature.client.tsx", "../../../src/lexical/ui/icons/Bold/index.tsx", "../../../src/features/format/shared/toolbarFormatGroup.ts", "../../../src/features/format/bold/markdownTransformers.ts", "../../../src/features/format/inlineCode/feature.client.tsx", "../../../src/lexical/ui/icons/Code/index.tsx", "../../../src/features/format/inlineCode/markdownTransformers.ts", "../../../src/features/format/italic/feature.client.tsx", "../../../src/lexical/ui/icons/Italic/index.tsx", "../../../src/features/format/italic/markdownTransformers.ts", "../../../src/features/format/strikethrough/feature.client.tsx", "../../../src/lexical/ui/icons/Strikethrough/index.tsx", "../../../src/features/format/strikethrough/markdownTransformers.ts", "../../../src/features/format/subscript/feature.client.tsx", "../../../src/lexical/ui/icons/Subscript/index.tsx", "../../../src/features/format/superscript/feature.client.tsx", "../../../src/lexical/ui/icons/Superscript/index.tsx", "../../../src/features/format/underline/feature.client.tsx", "../../../src/lexical/ui/icons/Underline/index.tsx", "../../../src/features/heading/client/index.tsx", "../../../src/lexical/ui/icons/H1/index.tsx", "../../../src/lexical/ui/icons/H2/index.tsx", "../../../src/lexical/ui/icons/H3/index.tsx", "../../../src/lexical/ui/icons/H4/index.tsx", "../../../src/lexical/ui/icons/H5/index.tsx", "../../../src/lexical/ui/icons/H6/index.tsx", "../../../src/features/heading/markdownTransformer.ts", "../../../src/lexical/utils/markdown/createBlockNode.ts", "../../../src/features/horizontalRule/client/index.tsx", "../../../src/lexical/ui/icons/HorizontalRule/index.tsx", "../../../src/lexical/ui/icons/Add/index.tsx", "../../../src/features/shared/toolbar/addDropdownGroup.ts", "../../../src/features/horizontalRule/client/markdownTransformer.ts", "../../../src/features/horizontalRule/client/plugin/index.tsx", "../../../src/features/indent/client/index.tsx", "../../../src/lexical/ui/icons/IndentDecrease/index.tsx", "../../../src/lexical/ui/icons/IndentIncrease/index.tsx", "../../../src/features/indent/client/toolbarIndentGroup.ts", "../../../src/features/link/client/index.tsx", "../../../src/lexical/ui/icons/Link/index.tsx", "../../../src/lexical/utils/getSelectedNode.ts", "../../../src/features/shared/toolbar/featureButtonsGroup.ts", "../../../src/features/link/markdownTransformer.ts", "../../../src/features/link/nodes/LinkNode.ts", "../../../src/features/link/nodes/AutoLinkNode.ts", "../../../src/features/link/client/plugins/autoLink/index.tsx", "../../../src/features/link/client/plugins/clickableLink/index.tsx", "../../../src/features/link/client/plugins/floatingLinkEditor/LinkEditor/commands.ts", "../../../src/features/link/client/plugins/floatingLinkEditor/index.tsx", "../../../src/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.tsx", "../../../src/lexical/utils/setFloatingElemPositionForLinkEditor.ts", "../../../src/features/link/client/plugins/link/index.tsx", "../../../src/lexical/utils/url.ts", "../../../src/features/lists/checklist/client/index.tsx", "../../../src/lexical/ui/icons/Checklist/index.tsx", "../../../src/features/lists/plugin/index.tsx", "../../../src/features/lists/shared/slashMenuListGroup.ts", "../../../src/features/lists/checklist/markdownTransformers.ts", "../../../src/features/lists/shared/markdown.ts", "../../../src/features/lists/checklist/client/plugin/index.tsx", "../../../src/features/lists/orderedList/client/index.tsx", "../../../src/lexical/ui/icons/OrderedList/index.tsx", "../../../src/features/lists/orderedList/markdownTransformer.ts", "../../../src/features/lists/unorderedList/client/index.tsx", "../../../src/lexical/ui/icons/UnorderedList/index.tsx", "../../../src/features/lists/unorderedList/markdownTransformer.ts", "../../../src/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.tsx", "../../../src/features/migrations/lexicalPluginToLexical/feature.client.tsx", "../../../src/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.tsx", "../../../src/features/migrations/slateToLexical/feature.client.tsx", "../../../src/features/paragraph/client/index.tsx", "../../../src/features/relationship/client/index.tsx", "../../../src/lexical/ui/icons/Relationship/index.tsx", "../../../src/features/relationship/client/plugins/index.tsx", "../../../src/features/relationship/client/drawer/index.tsx", "../../../src/features/toolbars/fixed/client/Toolbar/index.tsx", "../../../src/features/toolbars/shared/ToolbarButton/index.tsx", "../../../src/features/toolbars/shared/ToolbarDropdown/index.tsx", "../../../src/features/toolbars/shared/ToolbarDropdown/DropDown.tsx", "../../../src/features/toolbars/fixed/client/index.tsx", "../../../src/features/toolbars/inline/client/Toolbar/index.tsx", "../../../src/lexical/utils/getDOMRangeRect.ts", "../../../src/lexical/utils/setFloatingElemPosition.ts", "../../../src/features/toolbars/inline/client/index.tsx", "../../../src/features/experimental_table/client/index.ts", "../../../src/lexical/ui/icons/Table/index.tsx", "../../../src/features/experimental_table/client/plugins/TableActionMenuPlugin/index.tsx", "../../../src/lexical/ui/icons/Meatballs/index.tsx", "../../../src/features/experimental_table/client/plugins/TableCellResizerPlugin/index.tsx", "../../../src/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.tsx", "../../../src/features/experimental_table/client/utils/useDebounce.ts", "../../../src/features/experimental_table/client/utils/debounce.ts", "../../../src/features/experimental_table/client/plugins/TablePlugin/index.tsx", "../../../src/features/upload/client/feature.client.tsx", "../../../src/lexical/ui/icons/Upload/index.tsx", "../../../src/features/upload/client/plugin/index.tsx", "../../../src/features/upload/client/drawer/index.tsx", "../../../src/field/index.tsx", "../../../src/lexical/utils/joinClasses.ts", "../../../src/lexical/utils/swipe.ts", "../../../src/lexical/utils/nodeFormat.ts"],
|
|
4
|
-
"sourcesContent": ["import type {\n SlashMenuGroup,\n SlashMenuItem,\n} from '../../../lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js'\n\nexport function slashMenuBasicGroupWithItems(items: SlashMenuItem[]): SlashMenuGroup {\n return {\n items,\n key: 'basic',\n label: ({ i18n }) => {\n return i18n.t('lexical:general:slashMenuBasicGroupLabel')\n },\n }\n}\n", "'use client'\nimport type { EditorConfig as LexicalEditorConfig } from 'lexical'\nimport type { CellComponentProps, RichTextFieldClient } from 'payload'\n\nimport { createHeadlessEditor } from '@lexical/headless'\nimport { useClientFunctions, useTableCell } from '@payloadcms/ui'\nimport { $getRoot } from 'lexical'\nimport React, { useEffect, useState } from 'react'\n\nimport type { FeatureProviderClient } from '../features/typesClient.js'\nimport type { SanitizedClientEditorConfig } from '../lexical/config/types.js'\nimport type { GeneratedFeatureProviderComponent, LexicalFieldAdminProps } from '../types.js'\n\nimport { defaultEditorLexicalConfig } from '../lexical/config/client/default.js'\nimport { loadClientFeatures } from '../lexical/config/client/loader.js'\nimport { sanitizeClientEditorConfig } from '../lexical/config/client/sanitize.js'\nimport { getEnabledNodes } from '../lexical/nodes/index.js'\n\nexport const RichTextCell: React.FC<\n {\n readonly admin?: LexicalFieldAdminProps\n readonly lexicalEditorConfig: LexicalEditorConfig\n } & CellComponentProps<RichTextFieldClient>\n> = (props) => {\n const {\n admin,\n field: { _schemaPath, richTextComponentMap },\n lexicalEditorConfig,\n } = props\n\n const [preview, setPreview] = React.useState('Loading...')\n\n const { cellData } = useTableCell()\n\n const clientFunctions = useClientFunctions()\n const [hasLoadedFeatures, setHasLoadedFeatures] = useState(false)\n\n const [featureProviders, setFeatureProviders] = useState<\n FeatureProviderClient<unknown, unknown>[]\n >([])\n\n const [finalSanitizedEditorConfig, setFinalSanitizedEditorConfig] =\n useState<SanitizedClientEditorConfig>(null)\n\n const featureProviderComponents: GeneratedFeatureProviderComponent[] = (\n richTextComponentMap.get('features') as GeneratedFeatureProviderComponent[]\n ).sort((a, b) => a.order - b.order) // order by order\n\n let featureProvidersAndComponentsToLoad = 0 // feature providers and components\n for (const featureProvider of featureProviderComponents) {\n const featureComponentKeys = Array.from(richTextComponentMap.keys()).filter((key) =>\n key.startsWith(`feature.${featureProvider.key}.components.`),\n )\n\n featureProvidersAndComponentsToLoad += 1\n featureProvidersAndComponentsToLoad += featureComponentKeys.length\n }\n\n useEffect(() => {\n if (!hasLoadedFeatures) {\n const featureProvidersLocal: FeatureProviderClient<unknown, unknown>[] = []\n let featureProvidersAndComponentsLoaded = 0 // feature providers and components only\n\n Object.entries(clientFunctions).forEach(([key, plugin]) => {\n if (key.startsWith(`lexicalFeature.${_schemaPath}.`)) {\n if (!key.includes('.lexical_internal_components.')) {\n featureProvidersLocal.push(plugin)\n }\n featureProvidersAndComponentsLoaded++\n }\n })\n\n if (featureProvidersAndComponentsLoaded === featureProvidersAndComponentsToLoad) {\n setFeatureProviders(featureProvidersLocal)\n setHasLoadedFeatures(true)\n\n /**\n * Loaded feature provided => create the final sanitized editor config\n */\n\n const resolvedClientFeatures = loadClientFeatures({\n clientFunctions,\n schemaPath: _schemaPath,\n unSanitizedEditorConfig: {\n features: featureProvidersLocal,\n lexical: lexicalEditorConfig,\n },\n })\n\n setFinalSanitizedEditorConfig(\n sanitizeClientEditorConfig(\n lexicalEditorConfig ? lexicalEditorConfig : defaultEditorLexicalConfig,\n resolvedClientFeatures,\n admin,\n ),\n )\n }\n }\n }, [\n admin,\n featureProviderComponents,\n hasLoadedFeatures,\n clientFunctions,\n _schemaPath,\n featureProviderComponents.length,\n featureProviders,\n finalSanitizedEditorConfig,\n lexicalEditorConfig,\n richTextComponentMap,\n featureProvidersAndComponentsToLoad,\n ])\n\n useEffect(() => {\n if (!hasLoadedFeatures) {\n return\n }\n let dataToUse = cellData\n if (dataToUse == null || !hasLoadedFeatures || !finalSanitizedEditorConfig) {\n setPreview('')\n return\n }\n\n // Transform data through load hooks\n if (finalSanitizedEditorConfig?.features?.hooks?.load?.length) {\n finalSanitizedEditorConfig.features.hooks.load.forEach((hook) => {\n dataToUse = hook({ incomingEditorState: dataToUse })\n })\n }\n\n if (!dataToUse || typeof dataToUse !== 'object') {\n setPreview('')\n return\n }\n\n // If data is from Slate and not Lexical\n if (Array.isArray(dataToUse) && !('root' in dataToUse)) {\n setPreview('')\n return\n }\n\n // If data is from payload-plugin-lexical\n if ('jsonContent' in dataToUse) {\n setPreview('')\n return\n }\n\n // initialize headless editor\n const headlessEditor = createHeadlessEditor({\n namespace: finalSanitizedEditorConfig.lexical.namespace,\n nodes: getEnabledNodes({ editorConfig: finalSanitizedEditorConfig }),\n theme: finalSanitizedEditorConfig.lexical.theme,\n })\n headlessEditor.setEditorState(headlessEditor.parseEditorState(dataToUse))\n\n const textContent =\n headlessEditor.getEditorState().read(() => {\n return $getRoot().getTextContent()\n }) || ''\n\n // Limiting the number of characters shown is done in a CSS rule\n setPreview(textContent)\n }, [cellData, lexicalEditorConfig, hasLoadedFeatures, finalSanitizedEditorConfig])\n\n if (!hasLoadedFeatures) {\n return (\n <React.Fragment>\n {Array.isArray(featureProviderComponents) &&\n featureProviderComponents.map((featureProvider) => {\n // get all components starting with key feature.${FeatureProvider.key}.components.{featureComponentKey}\n const featureComponentKeys = Array.from(richTextComponentMap.keys()).filter((key) =>\n key.startsWith(\n `lexical_internal_feature.${featureProvider.key}.lexical_internal_components.`,\n ),\n )\n\n const featureComponents: React.ReactNode[] = featureComponentKeys.map((key) => {\n return richTextComponentMap.get(key)\n }) as React.ReactNode[]\n\n return (\n <React.Fragment key={featureProvider.key}>\n {featureComponents?.length\n ? featureComponents.map((FeatureComponent) => {\n return FeatureComponent\n })\n : null}\n {featureProvider.ClientFeature}\n </React.Fragment>\n )\n })}\n </React.Fragment>\n )\n }\n\n return <span>{preview}</span>\n}\n", "'use client'\nimport type { EditorThemeClasses } from 'lexical'\n\nexport const LexicalEditorTheme: EditorThemeClasses = {\n block: 'LexicalEditorTheme__block',\n blockCursor: 'LexicalEditorTheme__blockCursor',\n characterLimit: 'LexicalEditorTheme__characterLimit',\n code: 'LexicalEditorTheme__code',\n codeHighlight: {\n atrule: 'LexicalEditorTheme__tokenAttr',\n attr: 'LexicalEditorTheme__tokenAttr',\n boolean: 'LexicalEditorTheme__tokenProperty',\n builtin: 'LexicalEditorTheme__tokenSelector',\n cdata: 'LexicalEditorTheme__tokenComment',\n char: 'LexicalEditorTheme__tokenSelector',\n class: 'LexicalEditorTheme__tokenFunction',\n 'class-name': 'LexicalEditorTheme__tokenFunction',\n comment: 'LexicalEditorTheme__tokenComment',\n constant: 'LexicalEditorTheme__tokenProperty',\n deleted: 'LexicalEditorTheme__tokenProperty',\n doctype: 'LexicalEditorTheme__tokenComment',\n entity: 'LexicalEditorTheme__tokenOperator',\n function: 'LexicalEditorTheme__tokenFunction',\n important: 'LexicalEditorTheme__tokenVariable',\n inserted: 'LexicalEditorTheme__tokenSelector',\n keyword: 'LexicalEditorTheme__tokenAttr',\n namespace: 'LexicalEditorTheme__tokenVariable',\n number: 'LexicalEditorTheme__tokenProperty',\n operator: 'LexicalEditorTheme__tokenOperator',\n prolog: 'LexicalEditorTheme__tokenComment',\n property: 'LexicalEditorTheme__tokenProperty',\n punctuation: 'LexicalEditorTheme__tokenPunctuation',\n regex: 'LexicalEditorTheme__tokenVariable',\n selector: 'LexicalEditorTheme__tokenSelector',\n string: 'LexicalEditorTheme__tokenSelector',\n symbol: 'LexicalEditorTheme__tokenProperty',\n tag: 'LexicalEditorTheme__tokenProperty',\n url: 'LexicalEditorTheme__tokenOperator',\n variable: 'LexicalEditorTheme__tokenVariable',\n },\n embedBlock: {\n base: 'LexicalEditorTheme__embedBlock',\n focus: 'LexicalEditorTheme__embedBlockFocus',\n },\n hashtag: 'LexicalEditorTheme__hashtag',\n heading: {\n h1: 'LexicalEditorTheme__h1',\n h2: 'LexicalEditorTheme__h2',\n h3: 'LexicalEditorTheme__h3',\n h4: 'LexicalEditorTheme__h4',\n h5: 'LexicalEditorTheme__h5',\n h6: 'LexicalEditorTheme__h6',\n },\n hr: 'LexicalEditorTheme__hr',\n indent: 'LexicalEditorTheme__indent',\n inlineImage: 'LexicalEditor__inline-image',\n link: 'LexicalEditorTheme__link',\n list: {\n checklist: 'LexicalEditorTheme__checklist',\n listitem: 'LexicalEditorTheme__listItem',\n listitemChecked: 'LexicalEditorTheme__listItemChecked',\n listitemUnchecked: 'LexicalEditorTheme__listItemUnchecked',\n nested: {\n listitem: 'LexicalEditorTheme__nestedListItem',\n },\n olDepth: [\n 'LexicalEditorTheme__ol1',\n 'LexicalEditorTheme__ol2',\n 'LexicalEditorTheme__ol3',\n 'LexicalEditorTheme__ol4',\n 'LexicalEditorTheme__ol5',\n ],\n ul: 'LexicalEditorTheme__ul',\n },\n ltr: 'LexicalEditorTheme__ltr',\n mark: 'LexicalEditorTheme__mark',\n markOverlap: 'LexicalEditorTheme__markOverlap',\n paragraph: 'LexicalEditorTheme__paragraph',\n quote: 'LexicalEditorTheme__quote',\n relationship: 'LexicalEditorTheme__relationship',\n rtl: 'LexicalEditorTheme__rtl',\n table: 'LexicalEditorTheme__table',\n tableAddColumns: 'LexicalEditorTheme__tableAddColumns',\n tableAddRows: 'LexicalEditorTheme__tableAddRows',\n tableCell: 'LexicalEditorTheme__tableCell',\n tableCellActionButton: 'LexicalEditorTheme__tableCellActionButton',\n tableCellActionButtonContainer: 'LexicalEditorTheme__tableCellActionButtonContainer',\n tableCellEditing: 'LexicalEditorTheme__tableCellEditing',\n tableCellHeader: 'LexicalEditorTheme__tableCellHeader',\n tableCellPrimarySelected: 'LexicalEditorTheme__tableCellPrimarySelected',\n tableCellResizer: 'LexicalEditorTheme__tableCellResizer',\n tableCellSelected: 'LexicalEditorTheme__tableCellSelected',\n tableCellSortedIndicator: 'LexicalEditorTheme__tableCellSortedIndicator',\n tableResizeRuler: 'LexicalEditorTheme__tableCellResizeRuler',\n tableSelected: 'LexicalEditorTheme__tableSelected',\n text: {\n bold: 'LexicalEditorTheme__textBold',\n code: 'LexicalEditorTheme__textCode',\n italic: 'LexicalEditorTheme__textItalic',\n strikethrough: 'LexicalEditorTheme__textStrikethrough',\n subscript: 'LexicalEditorTheme__textSubscript',\n superscript: 'LexicalEditorTheme__textSuperscript',\n underline: 'LexicalEditorTheme__textUnderline',\n underlineStrikethrough: 'LexicalEditorTheme__textUnderlineStrikethrough',\n },\n upload: 'editor-upload',\n}\n", "'use client'\nimport type { EditorConfig as LexicalEditorConfig } from 'lexical'\n\nimport { LexicalEditorTheme } from '../../theme/EditorTheme.js'\n\nexport const defaultEditorLexicalConfig: LexicalEditorConfig = {\n namespace: 'lexical',\n theme: LexicalEditorTheme,\n}\n", "'use client'\n\nimport type {\n ClientFeatureProviderMap,\n FeatureProviderClient,\n ResolvedClientFeatureMap,\n} from '../../../features/typesClient.js'\nimport type { ClientEditorConfig } from '../types.js'\n\n/**\n * This function expects client functions to ALREADY be ordered & dependencies checked on the server\n * @param unSanitizedEditorConfig\n */\nexport function loadClientFeatures({\n clientFunctions,\n schemaPath,\n unSanitizedEditorConfig,\n}: {\n clientFunctions?: Record<string, any>\n schemaPath: string\n unSanitizedEditorConfig: ClientEditorConfig\n}): ResolvedClientFeatureMap {\n for (const featureProvider of unSanitizedEditorConfig.features) {\n if (\n !featureProvider?.clientFeatureProps?.featureKey ||\n featureProvider?.clientFeatureProps?.order === undefined ||\n featureProvider?.clientFeatureProps?.order === null\n ) {\n throw new Error(\n 'A Feature you have installed does not return the client props as clientFeatureProps. Please make sure to always return those props, even if they are null, as other important props like order and featureKey are later on injected.',\n )\n }\n }\n\n // sort unSanitizedEditorConfig.features by order\n unSanitizedEditorConfig.features = unSanitizedEditorConfig.features.sort(\n (a, b) => a.clientFeatureProps.order - b.clientFeatureProps.order,\n )\n\n const featureProviderMap: ClientFeatureProviderMap = new Map(\n unSanitizedEditorConfig.features.map(\n (f) =>\n [f.clientFeatureProps.featureKey, f] as [string, FeatureProviderClient<unknown, unknown>],\n ),\n )\n\n const resolvedFeatures: ResolvedClientFeatureMap = new Map()\n\n // Make sure all dependencies declared in the respective features exist\n let loaded = 0\n for (const featureProvider of unSanitizedEditorConfig.features) {\n /**\n * Load relevant clientFunctions scoped to this feature and then pass them to the client feature\n */\n const relevantClientFunctions: Record<string, any> = {}\n Object.entries(clientFunctions).forEach(([key, plugin]) => {\n if (\n key.startsWith(\n `lexicalFeature.${schemaPath}.${featureProvider.clientFeatureProps.featureKey}.components.`,\n )\n ) {\n const featureComponentKey = key.split(\n `${schemaPath}.${featureProvider.clientFeatureProps.featureKey}.components.`,\n )[1]\n relevantClientFunctions[featureComponentKey] = plugin\n }\n })\n\n const feature =\n typeof featureProvider.feature === 'function'\n ? featureProvider.feature({\n clientFunctions: relevantClientFunctions,\n featureProviderMap,\n resolvedFeatures,\n unSanitizedEditorConfig,\n })\n : featureProvider.feature\n\n resolvedFeatures.set(featureProvider.clientFeatureProps.featureKey, {\n ...feature,\n key: featureProvider.clientFeatureProps.featureKey,\n order: loaded,\n })\n\n loaded++\n }\n\n return resolvedFeatures\n}\n", "'use client'\n\nimport type { EditorConfig as LexicalEditorConfig } from 'lexical'\n\nimport type {\n ResolvedClientFeatureMap,\n SanitizedClientFeatures,\n} from '../../../features/typesClient.js'\nimport type { LexicalFieldAdminProps } from '../../../types.js'\nimport type { SanitizedClientEditorConfig } from '../types.js'\n\nexport const sanitizeClientFeatures = (\n features: ResolvedClientFeatureMap,\n): SanitizedClientFeatures => {\n const sanitized: SanitizedClientFeatures = {\n enabledFeatures: [],\n hooks: {\n load: [],\n save: [],\n },\n markdownTransformers: [],\n nodes: [],\n plugins: [],\n providers: [],\n slashMenu: {\n dynamicGroups: [],\n groups: [],\n },\n toolbarFixed: {\n groups: [],\n },\n toolbarInline: {\n groups: [],\n },\n }\n\n if (!features?.size) {\n return sanitized\n }\n\n features.forEach((feature) => {\n if (feature.hooks) {\n if (feature.hooks?.load?.length) {\n sanitized.hooks.load = sanitized.hooks.load.concat(feature.hooks.load)\n }\n if (feature.hooks?.save?.length) {\n sanitized.hooks.save = sanitized.hooks.save.concat(feature.hooks.save)\n }\n }\n\n if (feature.providers?.length) {\n sanitized.providers = sanitized.providers.concat(feature.providers)\n }\n\n if (feature.nodes?.length) {\n sanitized.nodes = sanitized.nodes.concat(feature.nodes)\n }\n if (feature.plugins?.length) {\n feature.plugins.forEach((plugin, i) => {\n sanitized.plugins.push({\n Component: plugin.Component,\n clientProps: feature.sanitizedClientFeatureProps,\n key: feature.key + i,\n position: plugin.position,\n })\n })\n }\n\n if (feature.toolbarInline?.groups?.length) {\n for (const group of feature.toolbarInline.groups) {\n // 1. find the group with the same key or create new one\n let foundGroup = sanitized.toolbarInline.groups.find(\n (sanitizedGroup) => sanitizedGroup.key === group.key,\n )\n if (!foundGroup) {\n foundGroup = {\n ...group,\n items: [],\n }\n } else {\n sanitized.toolbarInline.groups = sanitized.toolbarInline.groups.filter(\n (sanitizedGroup) => sanitizedGroup.key !== group.key,\n )\n }\n\n // 2. Add options to group options array and add to sanitized.slashMenu.groupsWithOptions\n if (group?.items?.length) {\n foundGroup.items = foundGroup.items.concat(group.items)\n }\n sanitized.toolbarInline?.groups.push(foundGroup)\n }\n }\n\n if (feature.toolbarFixed?.groups?.length) {\n for (const group of feature.toolbarFixed.groups) {\n // 1. find the group with the same key or create new one\n let foundGroup = sanitized.toolbarFixed.groups.find(\n (sanitizedGroup) => sanitizedGroup.key === group.key,\n )\n if (!foundGroup) {\n foundGroup = {\n ...group,\n items: [],\n }\n } else {\n sanitized.toolbarFixed.groups = sanitized.toolbarFixed.groups.filter(\n (sanitizedGroup) => sanitizedGroup.key !== group.key,\n )\n }\n\n // 2. Add options to group options array and add to sanitized.slashMenu.groupsWithOptions\n if (group?.items?.length) {\n foundGroup.items = foundGroup.items.concat(group.items)\n }\n sanitized.toolbarFixed?.groups.push(foundGroup)\n }\n }\n\n if (feature.slashMenu?.groups) {\n if (feature.slashMenu.dynamicGroups?.length) {\n sanitized.slashMenu.dynamicGroups = sanitized.slashMenu.dynamicGroups.concat(\n feature.slashMenu.dynamicGroups,\n )\n }\n\n for (const optionGroup of feature.slashMenu.groups) {\n // 1. find the group with the same name or create new one\n let group = sanitized.slashMenu.groups.find((group) => group.key === optionGroup.key)\n if (!group) {\n group = {\n ...optionGroup,\n items: [],\n }\n } else {\n sanitized.slashMenu.groups = sanitized.slashMenu.groups.filter(\n (group) => group.key !== optionGroup.key,\n )\n }\n\n // 2. Add options to group options array and add to sanitized.slashMenu.groupsWithOptions\n if (optionGroup?.items?.length) {\n group.items = group.items.concat(optionGroup.items)\n }\n sanitized.slashMenu.groups.push(group)\n }\n }\n\n if (feature.markdownTransformers?.length) {\n sanitized.markdownTransformers = sanitized.markdownTransformers.concat(\n feature.markdownTransformers,\n )\n }\n sanitized.enabledFeatures.push(feature.key)\n })\n\n // Sort sanitized.toolbarInline.groups by order property\n sanitized.toolbarInline.groups.sort((a, b) => {\n if (a.order && b.order) {\n return a.order - b.order\n } else if (a.order) {\n return -1\n } else if (b.order) {\n return 1\n } else {\n return 0\n }\n })\n // Sort sanitized.toolbarFixed.groups by order property\n sanitized.toolbarFixed.groups.sort((a, b) => {\n if (a.order && b.order) {\n return a.order - b.order\n } else if (a.order) {\n return -1\n } else if (b.order) {\n return 1\n } else {\n return 0\n }\n })\n\n // Sort sanitized.toolbarInline.groups.[group].entries by order property\n for (const group of sanitized.toolbarInline.groups) {\n group.items.sort((a, b) => {\n if (a.order && b.order) {\n return a.order - b.order\n } else if (a.order) {\n return -1\n } else if (b.order) {\n return 1\n } else {\n return 0\n }\n })\n }\n\n // Sort sanitized.toolbarFixed.groups.[group].entries by order property\n for (const group of sanitized.toolbarFixed.groups) {\n group.items.sort((a, b) => {\n if (a.order && b.order) {\n return a.order - b.order\n } else if (a.order) {\n return -1\n } else if (b.order) {\n return 1\n } else {\n return 0\n }\n })\n }\n\n return sanitized\n}\n\nexport function sanitizeClientEditorConfig(\n lexical: LexicalEditorConfig,\n resolvedClientFeatureMap: ResolvedClientFeatureMap,\n admin?: LexicalFieldAdminProps,\n): SanitizedClientEditorConfig {\n return {\n admin,\n features: sanitizeClientFeatures(resolvedClientFeatureMap),\n lexical,\n resolvedFeatureMap: resolvedClientFeatureMap,\n }\n}\n", "'use client'\n\nimport { $isElementNode, $isRangeSelection, FORMAT_ELEMENT_COMMAND } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { AlignCenterIcon } from '../../../lexical/ui/icons/AlignCenter/index.js'\nimport { AlignJustifyIcon } from '../../../lexical/ui/icons/AlignJustify/index.js'\nimport { AlignLeftIcon } from '../../../lexical/ui/icons/AlignLeft/index.js'\nimport { AlignRightIcon } from '../../../lexical/ui/icons/AlignRight/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarAlignGroupWithItems } from './toolbarAlignGroup.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarAlignGroupWithItems([\n {\n ChildComponent: AlignLeftIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isElementNode(node)) {\n if (node.getFormatType() === 'left') {\n continue\n }\n }\n\n const parent = node.getParent()\n if ($isElementNode(parent)) {\n if (parent.getFormatType() === 'left') {\n continue\n }\n }\n\n return false\n }\n return true\n },\n key: 'alignLeft',\n label: ({ i18n }) => {\n return i18n.t('lexical:align:alignLeftLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'left')\n },\n order: 1,\n },\n {\n ChildComponent: AlignCenterIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isElementNode(node)) {\n if (node.getFormatType() === 'center') {\n continue\n }\n }\n\n const parent = node.getParent()\n if ($isElementNode(parent)) {\n if (parent.getFormatType() === 'center') {\n continue\n }\n }\n\n return false\n }\n return true\n },\n key: 'alignCenter',\n label: ({ i18n }) => {\n return i18n.t('lexical:align:alignCenterLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'center')\n },\n order: 2,\n },\n {\n ChildComponent: AlignRightIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isElementNode(node)) {\n if (node.getFormatType() === 'right') {\n continue\n }\n }\n\n const parent = node.getParent()\n if ($isElementNode(parent)) {\n if (parent.getFormatType() === 'right') {\n continue\n }\n }\n\n return false\n }\n return true\n },\n key: 'alignRight',\n label: ({ i18n }) => {\n return i18n.t('lexical:align:alignRightLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'right')\n },\n order: 3,\n },\n {\n ChildComponent: AlignJustifyIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isElementNode(node)) {\n if (node.getFormatType() === 'justify') {\n continue\n }\n }\n\n const parent = node.getParent()\n if ($isElementNode(parent)) {\n if (parent.getFormatType() === 'justify') {\n continue\n }\n }\n\n return false\n }\n return true\n },\n key: 'alignJustify',\n label: ({ i18n }) => {\n return i18n.t('lexical:align:alignJustifyLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'justify')\n },\n order: 4,\n },\n ]),\n]\n\nexport const AlignFeatureClient = createClientFeature({\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const AlignCenterIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M2.5 5H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2.5 10H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M5 15H15\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const AlignJustifyIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M2.5 5H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2.5 10H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2.5 15H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const AlignLeftIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M2.5 5H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2.5 10H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2.5 15H12.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const AlignRightIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M2.5 5H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2.5 10H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M7.5 15H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n)\n", "'use client'\n\nimport { useAddClientFunction, useFieldProps, useTableCell } from '@payloadcms/ui'\n\nimport type { FeatureProviderClient } from '../features/typesClient.js'\n\nexport const useLexicalFeature = <ClientFeatureProps,>(\n featureKey: string,\n feature: FeatureProviderClient<ClientFeatureProps>,\n) => {\n const { schemaPath: schemaPathFromFieldProps } = useFieldProps()\n const tableCell = useTableCell()\n\n const schemaPathFromCellProps = tableCell?.cellProps?.field?._schemaPath\n\n const schemaPath = schemaPathFromCellProps || schemaPathFromFieldProps // schemaPathFromCellProps needs to have priority, as there can be cells within fields (e.g. list drawers) and the cell schemaPath needs to be used there - not the parent field schemaPath. There cannot be fields within cells.\n\n useAddClientFunction(`lexicalFeature.${schemaPath}.${featureKey}`, feature)\n}\n", "'use client'\n\nimport type React from 'react'\n\nimport type { ClientComponentProps, FeatureProviderProviderClient } from './typesClient.js'\n\nimport { useLexicalFeature } from '../utilities/useLexicalFeature.js'\n\n/**\n * Utility function to create a client component for the client feature\n */\nexport const createClientComponent = <ClientFeatureProps,>(\n clientFeature: FeatureProviderProviderClient<ClientFeatureProps>,\n): React.FC<ClientComponentProps<ClientFeatureProps>> => {\n return (props) => {\n useLexicalFeature(props.featureKey, clientFeature(props))\n return null\n }\n}\n", "import type React from 'react'\n\nimport type {\n ClientComponentProps,\n ClientFeature,\n ClientFeatureProviderMap,\n FeatureProviderClient,\n FeatureProviderProviderClient,\n ResolvedClientFeatureMap,\n} from '../features/typesClient.js'\nimport type { ClientEditorConfig } from '../lexical/config/types.js'\n\nimport { createClientComponent } from '../features/createClientComponent.js'\n\nexport type CreateClientFeatureArgs<UnSanitizedClientProps, ClientProps> =\n | ((props: {\n clientFunctions: Record<string, any>\n /** unSanitizedEditorConfig.features, but mapped */\n featureProviderMap: ClientFeatureProviderMap\n props: ClientComponentProps<UnSanitizedClientProps>\n // other resolved features, which have been loaded before this one. All features declared in 'dependencies' should be available here\n resolvedFeatures: ResolvedClientFeatureMap\n // unSanitized EditorConfig,\n unSanitizedEditorConfig: ClientEditorConfig\n }) => ClientFeature<ClientProps>)\n | Omit<ClientFeature<ClientProps>, 'sanitizedClientFeatureProps'>\n\nexport const createClientFeature: <\n UnSanitizedClientProps = undefined,\n ClientProps = UnSanitizedClientProps,\n>(\n args: CreateClientFeatureArgs<UnSanitizedClientProps, ClientProps>,\n) => React.FC<ClientComponentProps<ClientProps>> = (feature) => {\n const featureProviderProvideClient: FeatureProviderProviderClient<any, any> = (props) => {\n const featureProviderClient: Partial<FeatureProviderClient<any, any>> = {\n clientFeatureProps: props,\n }\n\n if (typeof feature === 'function') {\n featureProviderClient.feature = ({\n clientFunctions,\n featureProviderMap,\n resolvedFeatures,\n unSanitizedEditorConfig,\n }) => {\n const toReturn = feature({\n clientFunctions,\n featureProviderMap,\n props,\n resolvedFeatures,\n unSanitizedEditorConfig,\n })\n\n if (toReturn.sanitizedClientFeatureProps === null) {\n toReturn.sanitizedClientFeatureProps = props\n }\n\n return toReturn\n }\n } else {\n // We have to spread feature here! Otherwise, if the arg of createClientFeature is not a function, and 2\n // richText editors have the same feature (even if both call it, e.g. both call UploadFeature()),\n // the second richText editor here will override sanitizedClientFeatureProps of the first feature, as both richText\n // editor features share the same reference to the feature object.\n // Example: richText editor 1 and 2 both have UploadFeature. richText editor 1 calls UploadFeature() with custom fields,\n // richText editor 2 calls UploadFeature() with NO custom fields. If we don't spread feature here, richText editor 1\n // will not have any custom fields, as richText editor 2 will override the feature object.\n const newFeature: ClientFeature<any> = { ...feature }\n newFeature.sanitizedClientFeatureProps = props\n featureProviderClient.feature = newFeature\n }\n return featureProviderClient as FeatureProviderClient<any, any>\n }\n\n return createClientComponent(featureProviderProvideClient)\n}\n", "'use client'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../toolbars/types.js'\n\nimport { AlignLeftIcon } from '../../../lexical/ui/icons/AlignLeft/index.js'\n\nexport const toolbarAlignGroupWithItems = (items: ToolbarGroupItem[]): ToolbarGroup => {\n return {\n type: 'dropdown',\n ChildComponent: AlignLeftIcon,\n items,\n key: 'align',\n order: 30,\n }\n}\n", "'use client'\n\nimport { $createQuoteNode, $isQuoteNode, QuoteNode } from '@lexical/rich-text'\nimport { $setBlocksType } from '@lexical/selection'\nimport { $getSelection, $isRangeSelection } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { BlockquoteIcon } from '../../../lexical/ui/icons/Blockquote/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { slashMenuBasicGroupWithItems } from '../../shared/slashMenu/basicGroup.js'\nimport { toolbarTextDropdownGroupWithItems } from '../../shared/toolbar/textDropdownGroup.js'\nimport { MarkdownTransformer } from '../markdownTransformer.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarTextDropdownGroupWithItems([\n {\n ChildComponent: BlockquoteIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if (!$isQuoteNode(node) && !$isQuoteNode(node.getParent())) {\n return false\n }\n }\n return true\n },\n key: 'blockquote',\n label: ({ i18n }) => {\n return i18n.t('lexical:blockquote:label')\n },\n onSelect: ({ editor }) => {\n editor.update(() => {\n const selection = $getSelection()\n $setBlocksType(selection, () => $createQuoteNode())\n })\n },\n order: 20,\n },\n ]),\n]\n\nexport const BlockquoteFeatureClient = createClientFeature({\n markdownTransformers: [MarkdownTransformer],\n nodes: [QuoteNode],\n\n slashMenu: {\n groups: [\n slashMenuBasicGroupWithItems([\n {\n Icon: BlockquoteIcon,\n key: 'blockquote',\n keywords: ['quote', 'blockquote'],\n label: ({ i18n }) => {\n return i18n.t('lexical:blockquote:label')\n },\n onSelect: ({ editor }) => {\n editor.update(() => {\n const selection = $getSelection()\n $setBlocksType(selection, () => $createQuoteNode())\n })\n },\n },\n ]),\n ],\n },\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const BlockquoteIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.5353 10.5725C13.5353 9.47709 11.0456 9.99991 11.0456 7.85883C11.0456 6.46464 12.1162 5.61816 13.361 5.61816C14.805 5.61816 16 6.86298 16 8.92937C16 11.2945 14.4564 13.7841 11.1203 14.3816L10.8216 13.1368C12.888 12.4895 13.5353 11.4937 13.5353 10.5725ZM6.71369 10.5725C6.71369 9.47709 4.22407 9.99991 4.22407 7.85883C4.22407 6.46464 5.29461 5.61816 6.53942 5.61816C7.9834 5.61816 9.17842 6.86298 9.17842 8.92937C9.17842 11.2945 7.63485 13.7841 4.29876 14.3816L4 13.1368C6.06639 12.4895 6.71369 11.4937 6.71369 10.5725Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const TextIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"currentColor\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11.708 14.5H7.79785V13.9414H8.01367C9.00391 13.9414 9.15625 13.9033 9.15625 13.6113V6.70508H8.07715C6.82031 6.70508 6.73145 7.08594 6.28711 8.67285H5.80469L5.91895 6.12109H13.5869L13.7012 8.67285H13.2188C12.7744 7.08594 12.6855 6.70508 11.4287 6.70508H10.3496V13.6113C10.3496 13.9033 10.502 13.9414 11.4922 13.9414H11.708V14.5Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "import type { ToolbarGroup, ToolbarGroupItem } from '../../toolbars/types.js'\n\nimport { TextIcon } from '../../../lexical/ui/icons/Text/index.js'\n\nexport const toolbarTextDropdownGroupWithItems = (items: ToolbarGroupItem[]): ToolbarGroup => {\n return {\n type: 'dropdown',\n ChildComponent: TextIcon,\n items,\n key: 'text',\n order: 25,\n }\n}\n", "import type { ElementTransformer } from '@lexical/markdown'\n\nimport { $createQuoteNode, $isQuoteNode, QuoteNode } from '@lexical/rich-text'\nimport { $createLineBreakNode } from 'lexical'\n\nexport const MarkdownTransformer: ElementTransformer = {\n type: 'element',\n dependencies: [QuoteNode],\n export: (node, exportChildren) => {\n if (!$isQuoteNode(node)) {\n return null\n }\n\n const lines = exportChildren(node).split('\\n')\n const output = []\n for (const line of lines) {\n output.push('> ' + line)\n }\n return output.join('\\n')\n },\n regExp: /^>\\s/,\n replace: (parentNode, children, _match, isImport) => {\n if (isImport) {\n const previousNode = parentNode.getPreviousSibling()\n if ($isQuoteNode(previousNode)) {\n previousNode.splice(previousNode.getChildrenSize(), 0, [\n $createLineBreakNode(),\n ...children,\n ])\n previousNode.select(0, 0)\n parentNode.remove()\n return\n }\n }\n\n const node = $createQuoteNode()\n node.append(...children)\n parentNode.replace(node)\n node.select(0, 0)\n },\n}\n", "'use client'\n\nimport type { BlockFieldClient } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\n\nimport type { SlashMenuItem } from '../../../lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../toolbars/types.js'\n\nimport { BlockIcon } from '../../../lexical/ui/icons/Block/index.js'\nimport { InlineBlocksIcon } from '../../../lexical/ui/icons/InlineBlocks/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { BlockNode } from './nodes/BlocksNode.js'\nimport { InlineBlockNode } from './nodes/InlineBlocksNode.js'\nimport { INSERT_BLOCK_COMMAND, OPEN_INLINE_BLOCK_DRAWER_COMMAND } from './plugin/commands.js'\nimport { BlocksPlugin } from './plugin/index.js'\n\nexport type BlocksFeatureClientProps = {\n clientBlockSlugs: string[]\n clientInlineBlockSlugs: string[]\n}\n\nexport const BlocksFeatureClient = createClientFeature<BlocksFeatureClientProps>(({ props }) => ({\n nodes: [BlockNode, InlineBlockNode],\n plugins: [\n {\n Component: BlocksPlugin,\n position: 'normal',\n },\n ],\n sanitizedClientFeatureProps: props,\n slashMenu: {\n groups: [\n props.clientBlockSlugs?.length\n ? {\n items: props.clientBlockSlugs.map((blockSlug) => {\n return {\n Icon: BlockIcon,\n key: 'block-' + blockSlug,\n keywords: ['block', 'blocks', blockSlug],\n label: ({ i18n, richTextComponentMap }) => {\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_blocks`\n const blocksField: BlockFieldClient = richTextComponentMap.get(\n componentMapRenderedBlockPath,\n )[0]\n\n const clientBlock = blocksField.blocks.find((_block) => _block.slug === blockSlug)\n\n const blockDisplayName = clientBlock.labels.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_BLOCK_COMMAND, {\n id: null,\n blockName: '',\n blockType: blockSlug,\n })\n },\n } as SlashMenuItem\n }),\n key: 'blocks',\n label: ({ i18n }) => {\n return i18n.t('lexical:blocks:label')\n },\n }\n : null,\n props.clientInlineBlockSlugs?.length\n ? {\n items: props.clientInlineBlockSlugs.map((inlineBlockSlug) => {\n return {\n Icon: InlineBlocksIcon,\n key: 'inlineBlocks-' + inlineBlockSlug,\n keywords: ['inlineBlock', 'inline block', inlineBlockSlug],\n label: ({ i18n, richTextComponentMap }) => {\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_inline_blocks`\n\n const blocksField: BlockFieldClient = richTextComponentMap.get(\n componentMapRenderedBlockPath,\n )[0]\n\n const clientBlock = blocksField.blocks.find(\n (_block) => _block.slug === inlineBlockSlug,\n )\n\n const blockDisplayName = clientBlock.labels.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(OPEN_INLINE_BLOCK_DRAWER_COMMAND, {\n fields: {\n id: null,\n blockName: '',\n blockType: inlineBlockSlug,\n },\n })\n },\n } as SlashMenuItem\n }),\n key: 'inlineBlocks',\n label: ({ i18n }) => {\n return i18n.t('lexical:blocks:inlineBlocks:label')\n },\n }\n : null,\n ].filter(Boolean),\n },\n toolbarFixed: {\n groups: [\n props.clientBlockSlugs?.length\n ? {\n type: 'dropdown',\n ChildComponent: BlockIcon,\n items: props.clientBlockSlugs.map((blockSlug, index) => {\n return {\n ChildComponent: BlockIcon,\n isActive: undefined, // At this point, we would be inside a sub-richtext-editor. And at this point this will be run against the focused sub-editor, not the parent editor which has the actual block. Thus, no point in running this\n key: 'block-' + blockSlug,\n label: ({ i18n, richTextComponentMap }) => {\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_blocks`\n const blocksField: BlockFieldClient = richTextComponentMap.get(\n componentMapRenderedBlockPath,\n )[0]\n\n const clientBlock = blocksField.blocks.find((_block) => _block.slug === blockSlug)\n\n const blockDisplayName = clientBlock.labels.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_BLOCK_COMMAND, {\n id: null,\n blockName: '',\n blockType: blockSlug,\n })\n },\n order: index,\n } as ToolbarGroupItem\n }),\n key: 'blocks',\n order: 20,\n }\n : null,\n props.clientInlineBlockSlugs?.length\n ? {\n type: 'dropdown',\n ChildComponent: InlineBlocksIcon,\n items: props.clientInlineBlockSlugs.map((inlineBlockSlug, index) => {\n return {\n ChildComponent: InlineBlocksIcon,\n isActive: undefined,\n key: 'inlineBlock-' + inlineBlockSlug,\n label: ({ i18n, richTextComponentMap }) => {\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_inline_blocks`\n const blocksField: BlockFieldClient = richTextComponentMap.get(\n componentMapRenderedBlockPath,\n )[0]\n\n const clientBlock = blocksField.blocks.find(\n (_block) => _block.slug === inlineBlockSlug,\n )\n\n const blockDisplayName = clientBlock.labels.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(OPEN_INLINE_BLOCK_DRAWER_COMMAND, {\n fields: {\n blockType: inlineBlockSlug,\n },\n })\n },\n order: index,\n } as ToolbarGroupItem\n }),\n key: 'inlineBlocks',\n order: 25,\n }\n : null,\n ].filter(Boolean) as ToolbarGroup[],\n },\n}))\n", "'use client'\nimport React from 'react'\n\nexport const BlockIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect height=\"4\" rx=\"0.5\" stroke=\"currentColor\" width=\"4\" x=\"8\" y=\"5\" />\n <rect height=\"4\" rx=\"0.5\" stroke=\"currentColor\" width=\"4\" x=\"5\" y=\"11\" />\n <rect height=\"4\" rx=\"0.5\" stroke=\"currentColor\" width=\"4\" x=\"11\" y=\"11\" />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const InlineBlocksIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n clipRule=\"evenodd\"\n d=\"M5.33333 6.5C5.11232 6.5 4.90036 6.5878 4.74408 6.74408C4.5878 6.90036 4.5 7.11232 4.5 7.33333V12.1667C4.5 12.3877 4.5878 12.5996 4.74408 12.7559C4.90036 12.9122 5.11232 13 5.33333 13H14.6667C14.8877 13 15.0996 12.9122 15.2559 12.7559C15.4122 12.5996 15.5 12.3877 15.5 12.1667V11.6667C15.5 11.3905 15.7239 11.1667 16 11.1667C16.2761 11.1667 16.5 11.3905 16.5 11.6667V12.1667C16.5 12.6529 16.3068 13.1192 15.963 13.463C15.6192 13.8068 15.1529 14 14.6667 14H5.33333C4.8471 14 4.38079 13.8068 4.03697 13.463C3.69315 13.1192 3.5 12.6529 3.5 12.1667V7.33333C3.5 6.8471 3.69315 6.38079 4.03697 6.03697C4.38079 5.69315 4.8471 5.5 5.33333 5.5H10.3333C10.6095 5.5 10.8333 5.72386 10.8333 6C10.8333 6.27614 10.6095 6.5 10.3333 6.5H5.33333ZM13 6.5C12.7239 6.5 12.5 6.27614 12.5 6C12.5 5.72386 12.7239 5.5 13 5.5H16C16.2761 5.5 16.5 5.72386 16.5 6V9C16.5 9.27614 16.2761 9.5 16 9.5C15.7239 9.5 15.5 9.27614 15.5 9V7.20711L13.3536 9.35355C13.1583 9.54882 12.8417 9.54882 12.6464 9.35355C12.4512 9.15829 12.4512 8.84171 12.6464 8.64645L14.7929 6.5H13ZM6.16699 8.33325C6.16699 8.05711 6.39085 7.83325 6.66699 7.83325H11.0003C11.2765 7.83325 11.5003 8.05711 11.5003 8.33325C11.5003 8.60939 11.2765 8.83325 11.0003 8.83325H6.66699C6.39085 8.83325 6.16699 8.60939 6.16699 8.33325ZM6.16699 10.9999C6.16699 10.7238 6.39085 10.4999 6.66699 10.4999H13.3337C13.6098 10.4999 13.8337 10.7238 13.8337 10.9999C13.8337 11.2761 13.6098 11.4999 13.3337 11.4999H6.66699C6.39085 11.4999 6.16699 11.2761 6.16699 10.9999Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n />\n </svg>\n)\n", "'use client'\nimport type { EditorConfig, LexicalEditor, LexicalNode } from 'lexical'\n\nimport ObjectID from 'bson-objectid'\nimport React, { type JSX } from 'react'\n\nimport type { BlockFields, SerializedBlockNode } from '../../server/nodes/BlocksNode.js'\n\nimport { ServerBlockNode } from '../../server/nodes/BlocksNode.js'\n\nconst BlockComponent = React.lazy(() =>\n import('../component/index.js').then((module) => ({\n default: module.BlockComponent,\n })),\n)\n\nexport class BlockNode extends ServerBlockNode {\n static clone(node: ServerBlockNode): ServerBlockNode {\n return super.clone(node)\n }\n\n static getType(): string {\n return super.getType()\n }\n\n static importJSON(serializedNode: SerializedBlockNode): BlockNode {\n if (serializedNode.version === 1) {\n // Convert (version 1 had the fields wrapped in another, unnecessary data property)\n serializedNode = {\n ...serializedNode,\n fields: {\n ...(serializedNode as any).fields.data,\n },\n version: 2,\n }\n }\n const node = $createBlockNode(serializedNode.fields)\n node.setFormat(serializedNode.format)\n return node\n }\n\n decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element {\n return <BlockComponent formData={this.getFields()} nodeKey={this.getKey()} />\n }\n\n exportJSON(): SerializedBlockNode {\n return super.exportJSON()\n }\n}\n\nexport function $createBlockNode(fields: Exclude<BlockFields, 'id'>): BlockNode {\n return new BlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n })\n}\n\nexport function $isBlockNode(node: BlockNode | LexicalNode | null | undefined): node is BlockNode {\n return node instanceof BlockNode\n}\n", "import type { SerializedDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport type {\n DOMConversionMap,\n DOMExportOutput,\n EditorConfig,\n ElementFormatType,\n LexicalEditor,\n LexicalNode,\n NodeKey,\n Spread,\n} from 'lexical'\nimport type { JsonObject } from 'payload'\nimport type { JSX } from 'react'\n\nimport { DecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport ObjectID from 'bson-objectid'\nimport { deepCopyObjectSimple } from 'payload/shared'\n\nexport type BlockFields<TBlockFields extends JsonObject = JsonObject> = {\n /** Block form data */\n blockName: string\n blockType: string\n id: string\n} & TBlockFields\n\nexport type SerializedBlockNode<TBlockFields extends JsonObject = JsonObject> = Spread<\n {\n children?: never // required so that our typed editor state doesn't automatically add children\n fields: BlockFields<TBlockFields>\n type: 'block'\n },\n SerializedDecoratorBlockNode\n>\n\nexport class ServerBlockNode extends DecoratorBlockNode {\n __fields: BlockFields\n\n constructor({\n fields,\n format,\n key,\n }: {\n fields: BlockFields\n format?: ElementFormatType\n key?: NodeKey\n }) {\n super(format, key)\n this.__fields = fields\n }\n\n static clone(node: ServerBlockNode): ServerBlockNode {\n return new this({\n fields: node.__fields,\n format: node.__format,\n key: node.__key,\n })\n }\n\n static getType(): string {\n return 'block'\n }\n\n static importDOM(): DOMConversionMap<HTMLDivElement> | null {\n return {}\n }\n\n static importJSON(serializedNode: SerializedBlockNode): ServerBlockNode {\n if (serializedNode.version === 1) {\n // Convert (version 1 had the fields wrapped in another, unnecessary data property)\n serializedNode = {\n ...serializedNode,\n fields: {\n ...(serializedNode as any).fields.data,\n },\n version: 2,\n }\n }\n const node = $createServerBlockNode(serializedNode.fields)\n node.setFormat(serializedNode.format)\n return node\n }\n\n static isInline(): false {\n return false\n }\n\n decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element {\n return null\n }\n\n exportDOM(): DOMExportOutput {\n const element = document.createElement('div')\n\n const text = document.createTextNode(this.getTextContent())\n element.append(text)\n return { element }\n }\n\n exportJSON(): SerializedBlockNode {\n return {\n ...super.exportJSON(),\n type: 'block',\n fields: this.getFields(),\n version: 2,\n }\n }\n\n getFields(): BlockFields {\n return this.getLatest().__fields\n }\n\n getTextContent(): string {\n return `Block Field`\n }\n\n setFields(fields: BlockFields): void {\n const fieldsCopy = deepCopyObjectSimple(fields)\n\n const writable = this.getWritable()\n writable.__fields = fieldsCopy\n }\n}\n\nexport function $createServerBlockNode(fields: Exclude<BlockFields, 'id'>): ServerBlockNode {\n return new ServerBlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n })\n}\n\nexport function $isServerBlockNode(\n node: LexicalNode | ServerBlockNode | null | undefined,\n): node is ServerBlockNode {\n return node instanceof ServerBlockNode\n}\n", "'use client'\n\nimport type { BlockFieldClient } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $insertNodeToNearestRoot, $wrapNodeInElement, mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n formatDrawerSlug,\n useEditDepth,\n useFieldProps,\n useModal,\n useTranslation,\n} from '@payloadcms/ui'\nimport {\n $createParagraphNode,\n $getNodeByKey,\n $getPreviousSelection,\n $getSelection,\n $insertNodes,\n $isParagraphNode,\n $isRangeSelection,\n $isRootOrShadowRoot,\n COMMAND_PRIORITY_EDITOR,\n type RangeSelection,\n} from 'lexical'\nimport React, { useEffect, useState } from 'react'\n\nimport type { PluginComponent } from '../../../typesClient.js'\nimport type { BlockFields } from '../../server/nodes/BlocksNode.js'\nimport type { BlocksFeatureClientProps } from '../index.js'\nimport type { InlineBlockNode } from '../nodes/InlineBlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { FieldsDrawer } from '../../../../utilities/fieldsDrawer/Drawer.js'\nimport { $createBlockNode, BlockNode } from '../nodes/BlocksNode.js'\nimport { $createInlineBlockNode } from '../nodes/InlineBlocksNode.js'\nimport {\n INSERT_BLOCK_COMMAND,\n INSERT_INLINE_BLOCK_COMMAND,\n OPEN_INLINE_BLOCK_DRAWER_COMMAND,\n} from './commands.js'\n\nexport type InsertBlockPayload = Exclude<BlockFields, 'id'>\n\nexport const BlocksPlugin: PluginComponent<BlocksFeatureClientProps> = () => {\n const [editor] = useLexicalComposerContext()\n const { closeModal, toggleModal } = useModal()\n const [blockFields, setBlockFields] = useState<BlockFields>(null)\n const [blockType, setBlockType] = useState<string>('' as any)\n const [targetNodeKey, setTargetNodeKey] = useState<null | string>(null)\n const { i18n, t } = useTranslation<string, any>()\n const { schemaPath } = useFieldProps()\n const { uuid } = useEditorConfigContext()\n const editDepth = useEditDepth()\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-inlineBlocks-create-` + uuid,\n depth: editDepth,\n })\n\n const {\n field: { richTextComponentMap },\n } = useEditorConfigContext()\n\n useEffect(() => {\n if (!editor.hasNodes([BlockNode])) {\n throw new Error('BlocksPlugin: BlocksNode not registered on editor')\n }\n\n return mergeRegister(\n editor.registerCommand<InsertBlockPayload>(\n INSERT_BLOCK_COMMAND,\n (payload: InsertBlockPayload) => {\n editor.update(() => {\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n const blockNode = $createBlockNode(payload)\n // Insert blocks node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(blockNode)\n\n const { focus } = selection\n const focusNode = focus.getNode()\n\n // First, delete currently selected node if it's an empty paragraph and if there are sufficient\n // paragraph nodes (more than 1) left in the parent node, so that we don't \"trap\" the user\n if (\n $isParagraphNode(focusNode) &&\n focusNode.getTextContentSize() === 0 &&\n focusNode\n .getParent()\n .getChildren()\n .filter((node) => $isParagraphNode(node)).length > 1\n ) {\n focusNode.remove()\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n editor.registerCommand(\n INSERT_INLINE_BLOCK_COMMAND,\n (fields) => {\n if (targetNodeKey) {\n const node: InlineBlockNode = $getNodeByKey(targetNodeKey)\n\n if (!node) {\n return false\n }\n\n node.setFields(fields as BlockFields)\n\n setTargetNodeKey(null)\n return true\n }\n\n const inlineBlockNode = $createInlineBlockNode(fields as BlockFields)\n $insertNodes([inlineBlockNode])\n if ($isRootOrShadowRoot(inlineBlockNode.getParentOrThrow())) {\n $wrapNodeInElement(inlineBlockNode, $createParagraphNode).selectEnd()\n }\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n editor.registerCommand(\n OPEN_INLINE_BLOCK_DRAWER_COMMAND,\n ({ fields, nodeKey }) => {\n setBlockFields((fields as BlockFields) ?? null)\n setTargetNodeKey(nodeKey ?? null)\n setBlockType(fields?.blockType ?? ('' as any))\n\n if (nodeKey) {\n toggleModal(drawerSlug)\n return true\n }\n\n let rangeSelection: RangeSelection | null = null\n\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n rangeSelection = selection\n }\n })\n\n if (rangeSelection) {\n //setLastSelection(rangeSelection)\n toggleModal(drawerSlug)\n }\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n )\n }, [editor, targetNodeKey, toggleModal, drawerSlug])\n\n if (!blockFields) {\n return null\n }\n\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.lexical_inline_blocks.${blockFields?.blockType}`\n\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_inline_blocks`\n const blocksField: BlockFieldClient = richTextComponentMap.has(componentMapRenderedBlockPath)\n ? richTextComponentMap.get(componentMapRenderedBlockPath)[0]\n : null\n\n const clientBlock = blocksField\n ? blocksField.blocks.find((block) => block.slug === blockFields?.blockType)\n : null\n\n if (!blocksField) {\n return null\n }\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock?.labels?.singular, i18n)\n : clientBlock?.slug\n\n return (\n <FieldsDrawer\n data={blockFields}\n drawerSlug={drawerSlug}\n drawerTitle={t(`lexical:blocks:inlineBlocks:${blockFields?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n featureKey=\"blocks\"\n fieldMapOverride={clientBlock?.fields}\n handleDrawerSubmit={(_fields, data) => {\n closeModal(drawerSlug)\n if (!data) {\n return\n }\n\n data.blockType = blockType\n\n editor.dispatchCommand(INSERT_INLINE_BLOCK_COMMAND, data)\n }}\n schemaFieldsPathOverride={schemaFieldsPath}\n schemaPathSuffix={blockFields?.blockType}\n />\n )\n}\n", "'use client'\nimport type { BaseSelection, LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $createParagraphNode, $createTextNode, $getRoot } from 'lexical'\nimport * as React from 'react'\nimport { type JSX, useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nimport { IS_APPLE } from '../../../../../lexical/utils/environment.js'\nimport './index.scss'\n\nconst copy = (text: null | string) => {\n const textArea = document.createElement('textarea')\n textArea.value = text || ''\n textArea.style.position = 'absolute'\n textArea.style.opacity = '0'\n document.body?.appendChild(textArea)\n textArea.focus()\n textArea.select()\n try {\n const result = document.execCommand('copy')\n // eslint-disable-next-line no-console\n console.log(result)\n } catch (error) {\n console.error(error)\n }\n document.body?.removeChild(textArea)\n}\n\nconst download = (filename: string, text: null | string) => {\n const a = document.createElement('a')\n a.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text || ''))\n a.setAttribute('download', filename)\n a.style.display = 'none'\n document.body?.appendChild(a)\n a.click()\n document.body?.removeChild(a)\n}\n\nconst formatStep = (step: Step) => {\n const formatOneStep = (name: string, value: Step['value']) => {\n switch (name) {\n case 'click': {\n return ` await page.mouse.click(${value.x}, ${value.y});`\n }\n case 'press': {\n return ` await page.keyboard.press('${value}');`\n }\n case 'keydown': {\n return ` await page.keyboard.keydown('${value}');`\n }\n case 'keyup': {\n return ` await page.keyboard.keyup('${value}');`\n }\n case 'type': {\n return ` await page.keyboard.type('${value}');`\n }\n case 'selectAll': {\n return ` await selectAll(page);`\n }\n case 'snapshot': {\n return ` await assertHTMLSnapshot(page);\n await assertSelection(page, {\n anchorPath: [${value.anchorPath.toString()}],\n anchorOffset: ${value.anchorOffset},\n focusPath: [${value.focusPath.toString()}],\n focusOffset: ${value.focusOffset},\n });\n`\n }\n default:\n return ``\n }\n }\n const formattedStep = formatOneStep(step.name, step.value)\n switch (step.count) {\n case 1:\n return formattedStep\n case 2:\n return [formattedStep, formattedStep].join(`\\n`)\n default:\n return ` await repeat(${step.count}, async () => {\n ${formattedStep}\n );`\n }\n}\n\nexport function isSelectAll(event: KeyboardEvent): boolean {\n return event.key.toLowerCase() === 'a' && (IS_APPLE ? event.metaKey : event.ctrlKey)\n}\n\n// stolen from LexicalSelection-test\nfunction sanitizeSelection(selection: Selection) {\n const { anchorNode, focusNode } = selection\n let { anchorOffset, focusOffset } = selection\n if (anchorOffset !== 0) {\n anchorOffset--\n }\n if (focusOffset !== 0) {\n focusOffset--\n }\n return { anchorNode, anchorOffset, focusNode, focusOffset }\n}\n\nfunction getPathFromNodeToEditor(node: Node, rootElement: HTMLElement | null) {\n let currentNode: Node | null | undefined = node\n const path = []\n while (currentNode !== rootElement) {\n if (currentNode !== null && currentNode !== undefined) {\n path.unshift(\n Array.from(currentNode?.parentNode?.childNodes ?? []).indexOf(currentNode as ChildNode),\n )\n }\n currentNode = currentNode?.parentNode\n }\n return path\n}\n\nconst keyPresses = new Set([\n 'Enter',\n 'Backspace',\n 'Delete',\n 'Escape',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n])\n\ntype Step = {\n count: number\n name: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any\n}\n\ntype Steps = Step[]\n\nfunction useTestRecorder(editor: LexicalEditor): [JSX.Element, JSX.Element | null] {\n const [steps, setSteps] = useState<Steps>([])\n const [isRecording, setIsRecording] = useState(false)\n const [, setCurrentInnerHTML] = useState('')\n const [templatedTest, setTemplatedTest] = useState('')\n const previousSelectionRef = useRef<BaseSelection | null>(null)\n const skipNextSelectionChangeRef = useRef(false)\n const preRef = useRef<HTMLPreElement>(null)\n\n const getCurrentEditor = useCallback(() => {\n return editor\n }, [editor])\n\n const generateTestContent = useCallback(() => {\n const rootElement = editor.getRootElement()\n const browserSelection = window.getSelection()\n\n if (\n rootElement == null ||\n browserSelection == null ||\n browserSelection.anchorNode == null ||\n browserSelection.focusNode == null ||\n !rootElement.contains(browserSelection.anchorNode) ||\n !rootElement.contains(browserSelection.focusNode)\n ) {\n return null\n }\n\n return `\nimport {\n initializeE2E,\n assertHTMLSnapshot,\n assertSelection,\n repeat,\n} from '../utils';\nimport {selectAll} from '../keyboardShortcuts';\nimport { RangeSelection } from 'lexical';\nimport { NodeSelection } from 'lexical';\n\ndescribe('Test case', () => {\n initializeE2E((e2e) => {\n it('Should pass this test', async () => {\n const {page} = e2e;\n\n await page.focus('div[contenteditable=\"true\"]');\n${steps.map(formatStep).join(`\\n`)}\n });\n});\n `\n }, [editor, steps])\n\n // just a wrapper around inserting new actions so that we can\n // coalesce some actions like insertText/moveNativeSelection\n const pushStep = useCallback(\n (name: string, value: Step['value']) => {\n setSteps((currentSteps) => {\n // trying to group steps\n const currentIndex = steps.length - 1\n const lastStep = steps[currentIndex]\n if (lastStep) {\n if (lastStep.name === name) {\n if (name === 'type') {\n // for typing events we just append the text\n return [\n ...steps.slice(0, currentIndex),\n { ...lastStep, value: lastStep.value + value },\n ]\n } else {\n // for other events we bump the counter if their values are the same\n if (lastStep.value === value) {\n return [...steps.slice(0, currentIndex), { ...lastStep, count: lastStep.count + 1 }]\n }\n }\n }\n }\n // could not group, just append a new one\n return [...currentSteps, { name, count: 1, value }]\n })\n },\n [steps, setSteps],\n )\n\n useLayoutEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (!isRecording) {\n return\n }\n const key = event.key\n if (isSelectAll(event)) {\n pushStep('selectAll', '')\n } else if (keyPresses.has(key)) {\n pushStep('press', event.key)\n } else if ([...key].length > 1) {\n pushStep('keydown', event.key)\n } else {\n pushStep('type', event.key)\n }\n }\n\n const onKeyUp = (event: KeyboardEvent) => {\n if (!isRecording) {\n return\n }\n const key = event.key\n if (!keyPresses.has(key) && [...key].length > 1) {\n pushStep('keyup', event.key)\n }\n }\n\n return editor.registerRootListener(\n (rootElement: HTMLElement | null, prevRootElement: HTMLElement | null) => {\n if (prevRootElement !== null) {\n prevRootElement.removeEventListener('keydown', onKeyDown)\n prevRootElement.removeEventListener('keyup', onKeyUp)\n }\n if (rootElement !== null) {\n rootElement.addEventListener('keydown', onKeyDown)\n rootElement.addEventListener('keyup', onKeyUp)\n }\n },\n )\n }, [editor, isRecording, pushStep])\n\n useLayoutEffect(() => {\n if (preRef.current) {\n preRef.current.scrollTo(0, preRef.current.scrollHeight)\n }\n }, [generateTestContent])\n\n useEffect(() => {\n if (steps) {\n const testContent = generateTestContent()\n if (testContent !== null) {\n setTemplatedTest(testContent)\n }\n if (preRef.current) {\n preRef.current.scrollTo(0, preRef.current.scrollHeight)\n }\n }\n }, [generateTestContent, steps])\n\n useEffect(() => {\n const removeUpdateListener = editor.registerUpdateListener(\n ({ dirtyElements, dirtyLeaves, editorState }) => {\n if (!isRecording) {\n return\n }\n const currentSelection = editorState._selection\n const previousSelection = previousSelectionRef.current\n const skipNextSelectionChange = skipNextSelectionChangeRef.current\n if (previousSelection !== currentSelection) {\n if (dirtyLeaves.size === 0 && dirtyElements.size === 0 && !skipNextSelectionChange) {\n const browserSelection = window.getSelection()\n if (\n browserSelection &&\n (browserSelection.anchorNode == null || browserSelection.focusNode == null)\n ) {\n return\n }\n }\n previousSelectionRef.current = currentSelection\n }\n skipNextSelectionChangeRef.current = false\n const testContent = generateTestContent()\n if (testContent !== null) {\n setTemplatedTest(testContent)\n }\n },\n )\n return removeUpdateListener\n }, [editor, generateTestContent, isRecording, pushStep])\n\n // save innerHTML\n useEffect(() => {\n if (!isRecording) {\n return\n }\n const removeUpdateListener = editor.registerUpdateListener(() => {\n const rootElement = editor.getRootElement()\n if (rootElement !== null) {\n setCurrentInnerHTML(rootElement?.innerHTML)\n }\n })\n return removeUpdateListener\n }, [editor, isRecording])\n\n // clear editor and start recording\n const toggleEditorSelection = useCallback(\n (currentEditor: LexicalEditor) => {\n if (!isRecording) {\n currentEditor.update(() => {\n const root = $getRoot()\n root.clear()\n const text = $createTextNode()\n root.append($createParagraphNode().append(text))\n text.select()\n })\n setSteps([])\n }\n setIsRecording((currentIsRecording) => !currentIsRecording)\n },\n [isRecording],\n )\n\n const onSnapshotClick = useCallback(() => {\n if (!isRecording) {\n return\n }\n const browserSelection = window.getSelection()\n if (\n browserSelection === null ||\n browserSelection.anchorNode == null ||\n browserSelection.focusNode == null\n ) {\n return\n }\n const { anchorNode, anchorOffset, focusNode, focusOffset } = sanitizeSelection(browserSelection)\n const rootElement = getCurrentEditor().getRootElement()\n let anchorPath\n if (anchorNode !== null) {\n anchorPath = getPathFromNodeToEditor(anchorNode, rootElement)\n }\n let focusPath\n if (focusNode !== null) {\n focusPath = getPathFromNodeToEditor(focusNode, rootElement)\n }\n pushStep('snapshot', {\n anchorNode,\n anchorOffset,\n anchorPath,\n focusNode,\n focusOffset,\n focusPath,\n })\n }, [pushStep, isRecording, getCurrentEditor])\n\n const onCopyClick = useCallback(() => {\n copy(generateTestContent())\n }, [generateTestContent])\n\n const onDownloadClick = useCallback(() => {\n download('test.js', generateTestContent())\n }, [generateTestContent])\n\n const button = (\n <button\n className={`editor-dev-button ${isRecording ? 'active' : ''}`}\n id=\"test-recorder-button\"\n onClick={(e) => {\n toggleEditorSelection(getCurrentEditor())\n e.preventDefault()\n }}\n title={isRecording ? 'Disable test recorder' : 'Enable test recorder'}\n type=\"button\"\n >\n {isRecording ? 'Disable test recorder' : 'Enable test recorder'}\n </button>\n )\n const output = isRecording ? (\n <div className=\"test-recorder-output\">\n <div className=\"test-recorder-toolbar\">\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-snapshot\"\n onClick={(e) => {\n onSnapshotClick()\n e.preventDefault()\n }}\n title=\"Insert snapshot\"\n type=\"button\"\n >\n Insert Snapshot\n </button>\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-copy\"\n onClick={(e) => {\n onCopyClick()\n e.preventDefault()\n }}\n title=\"Copy to clipboard\"\n type=\"button\"\n >\n Copy\n </button>\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-download\"\n onClick={(e) => {\n onDownloadClick()\n e.preventDefault()\n }}\n title=\"Download as a file\"\n type=\"button\"\n >\n Download\n </button>\n </div>\n <pre id=\"test-recorder\" ref={preRef}>\n {templatedTest}\n </pre>\n </div>\n ) : null\n\n return [button, output]\n}\nexport const TestRecorderPlugin: PluginComponent<undefined> = () => {\n const [editor] = useLexicalComposerContext()\n const [testRecorderButton, testRecorderOutput] = useTestRecorder(editor)\n\n return (\n <React.Fragment>\n <p>HI</p>\n {testRecorderButton}\n {testRecorderOutput}\n <p>DONE</p>\n </React.Fragment>\n )\n}\n", "'use client'\nexport const CAN_USE_DOM: boolean =\n typeof window !== 'undefined' &&\n typeof window.document !== 'undefined' &&\n typeof window.document.createElement !== 'undefined'\n", "'use client'\nimport { CAN_USE_DOM } from './canUseDOM.js'\n\ndeclare global {\n interface Document {\n documentMode?: unknown\n }\n\n interface Window {\n MSStream?: unknown\n }\n}\n\nconst documentMode = CAN_USE_DOM && 'documentMode' in document ? document.documentMode : null\n\nexport const IS_APPLE: boolean = CAN_USE_DOM && /Mac|iPod|iPhone|iPad/.test(navigator.platform)\n\nexport const IS_FIREFOX: boolean =\n CAN_USE_DOM && /^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent)\n\nexport const CAN_USE_BEFORE_INPUT: boolean =\n CAN_USE_DOM && 'InputEvent' in window && !documentMode\n ? 'getTargetRanges' in new window.InputEvent('input')\n : false\n\nexport const IS_SAFARI: boolean = CAN_USE_DOM && /Version\\/[\\d.].*Safari/.test(navigator.userAgent)\n\nexport const IS_IOS: boolean =\n CAN_USE_DOM && /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream\n\nexport const IS_ANDROID: boolean = CAN_USE_DOM && /Android/.test(navigator.userAgent)\n\nexport const IS_WINDOWS: boolean = CAN_USE_DOM && /Win/.test(navigator.platform)\nexport const IS_CHROME: boolean = CAN_USE_DOM && /^(?=.*Chrome).*/i.test(navigator.userAgent)\n// export const canUseTextInputEvent: boolean = CAN_USE_DOM && 'TextEvent' in window && !documentMode;\n\nexport const IS_APPLE_WEBKIT =\n CAN_USE_DOM && /AppleWebKit\\/[\\d.]+/.test(navigator.userAgent) && !IS_CHROME\n", "'use client'\n\nimport { createClientFeature } from '../../../../utilities/createClientFeature.js'\nimport { TestRecorderPlugin } from './plugin/index.js'\n\nexport const TestRecorderFeatureClient = createClientFeature({\n plugins: [\n {\n Component: TestRecorderPlugin,\n position: 'bottom',\n },\n ],\n})\n", "'use client'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { TreeView } from '@lexical/react/LexicalTreeView.js'\nimport * as React from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nimport './index.scss'\n\nexport const TreeViewPlugin: PluginComponent<undefined> = () => {\n const [editor] = useLexicalComposerContext()\n return (\n <TreeView\n editor={editor}\n timeTravelButtonClassName=\"debug-timetravel-button\"\n timeTravelPanelButtonClassName=\"debug-timetravel-panel-button\"\n timeTravelPanelClassName=\"debug-timetravel-panel\"\n timeTravelPanelSliderClassName=\"debug-timetravel-panel-slider\"\n treeTypeButtonClassName=\"debug-treetype-button\"\n viewClassName=\"tree-view-output\"\n />\n )\n}\n", "'use client'\n\nimport { createClientFeature } from '../../../../utilities/createClientFeature.js'\nimport { TreeViewPlugin } from './plugin/index.js'\n\nexport const TreeViewFeatureClient = createClientFeature({\n plugins: [\n {\n Component: TreeViewPlugin,\n position: 'bottom',\n },\n ],\n})\n", "'use client'\nimport { $isRangeSelection, FORMAT_TEXT_COMMAND } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { BoldIcon } from '../../../lexical/ui/icons/Bold/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarFormatGroupWithItems } from '../shared/toolbarFormatGroup.js'\nimport {\n BOLD_ITALIC_STAR,\n BOLD_ITALIC_UNDERSCORE,\n BOLD_STAR,\n BOLD_UNDERSCORE,\n} from './markdownTransformers.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarFormatGroupWithItems([\n {\n ChildComponent: BoldIcon,\n isActive: ({ selection }) => {\n if ($isRangeSelection(selection)) {\n return selection.hasFormat('bold')\n }\n return false\n },\n key: 'bold',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'bold')\n },\n order: 1,\n },\n ]),\n]\n\nexport const BoldFeatureClient = createClientFeature(({ featureProviderMap }) => {\n const markdownTransformers = [BOLD_STAR, BOLD_UNDERSCORE]\n if (featureProviderMap.get('italic')) {\n markdownTransformers.push(BOLD_ITALIC_UNDERSCORE, BOLD_ITALIC_STAR)\n }\n\n return {\n markdownTransformers,\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n }\n})\n", "'use client'\nimport React from 'react'\n\nexport const BoldIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"currentColor\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.6772 15H6.27017V5.718H10.4172C12.6792 5.718 13.8492 6.602 13.8492 8.292C13.8492 9.098 13.1992 9.982 12.4712 10.216C13.3812 10.476 14.1742 11.256 14.1742 12.322C14.1742 14.09 12.9002 15 10.6772 15ZM8.46717 9.501H10.3262C11.3012 9.501 11.7042 9.046 11.7042 8.409C11.7042 7.72 11.2362 7.317 10.3392 7.317H8.46717V9.501ZM8.46717 11.061V13.401H10.4822C11.4702 13.401 11.9642 12.959 11.9642 12.218C11.9642 11.49 11.4702 11.061 10.4822 11.061H8.46717Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../toolbars/types.js'\n\nexport const toolbarFormatGroupWithItems = (items: ToolbarGroupItem[]): ToolbarGroup => {\n return {\n type: 'buttons',\n items,\n key: 'format',\n order: 40,\n }\n}\n", "import type { TextFormatTransformer } from '@lexical/markdown'\n\nexport const BOLD_ITALIC_STAR: TextFormatTransformer = {\n type: 'text-format',\n format: ['bold', 'italic'],\n tag: '***',\n}\n\nexport const BOLD_ITALIC_UNDERSCORE: TextFormatTransformer = {\n type: 'text-format',\n format: ['bold', 'italic'],\n intraword: false,\n tag: '___',\n}\n\nexport const BOLD_STAR: TextFormatTransformer = {\n type: 'text-format',\n format: ['bold'],\n tag: '**',\n}\n\nexport const BOLD_UNDERSCORE: TextFormatTransformer = {\n type: 'text-format',\n format: ['bold'],\n intraword: false,\n tag: '__',\n}\n", "'use client'\n\nimport { $isRangeSelection, FORMAT_TEXT_COMMAND } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { CodeIcon } from '../../../lexical/ui/icons/Code/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarFormatGroupWithItems } from '../shared/toolbarFormatGroup.js'\nimport { INLINE_CODE } from './markdownTransformers.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarFormatGroupWithItems([\n {\n ChildComponent: CodeIcon,\n isActive: ({ selection }) => {\n if ($isRangeSelection(selection)) {\n return selection.hasFormat('code')\n }\n return false\n },\n key: 'inlineCode',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'code')\n },\n order: 7,\n },\n ]),\n]\n\nexport const InlineCodeFeatureClient = createClientFeature({\n markdownTransformers: [INLINE_CODE],\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const CodeIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M7.76465 6L3.76465 10L7.76465 14\" stroke=\"currentColor\" />\n <path d=\"M12.2354 6L16.2354 10L12.2354 14\" stroke=\"currentColor\" />\n </svg>\n)\n", "import type { TextFormatTransformer } from '@lexical/markdown'\n\nexport const INLINE_CODE: TextFormatTransformer = {\n type: 'text-format',\n format: ['code'],\n tag: '`',\n}\n", "'use client'\n\nimport { $isRangeSelection, FORMAT_TEXT_COMMAND } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { ItalicIcon } from '../../../lexical/ui/icons/Italic/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarFormatGroupWithItems } from '../shared/toolbarFormatGroup.js'\nimport { ITALIC_STAR, ITALIC_UNDERSCORE } from './markdownTransformers.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarFormatGroupWithItems([\n {\n ChildComponent: ItalicIcon,\n isActive: ({ selection }) => {\n if ($isRangeSelection(selection)) {\n return selection.hasFormat('italic')\n }\n return false\n },\n key: 'italic',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'italic')\n },\n order: 2,\n },\n ]),\n]\n\nexport const ItalicFeatureClient = createClientFeature({\n markdownTransformers: [ITALIC_STAR, ITALIC_UNDERSCORE],\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const ItalicIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"currentColor\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11.311 14.2969L11.0327 15H6.18408L6.4624 14.2969C7.54639 14.2969 7.70752 14.209 7.83936 13.8721L10.8423 6.45996C10.8716 6.38672 10.8862 6.32812 10.8862 6.26953C10.8862 6.09375 10.6519 6.03516 9.80225 6.03516L10.0952 5.33203H14.9438L14.6509 6.03516C13.5669 6.03516 13.4204 6.12305 13.2886 6.45996L10.2856 13.8721C10.2563 13.9453 10.2271 14.0039 10.2271 14.0625C10.2271 14.2383 10.4614 14.2969 11.311 14.2969Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "import type { TextFormatTransformer } from '@lexical/markdown'\n\nexport const ITALIC_STAR: TextFormatTransformer = {\n type: 'text-format',\n format: ['italic'],\n tag: '*',\n}\n\nexport const ITALIC_UNDERSCORE: TextFormatTransformer = {\n type: 'text-format',\n format: ['italic'],\n intraword: false,\n tag: '_',\n}\n", "'use client'\n\nimport { $isRangeSelection, FORMAT_TEXT_COMMAND } from 'lexical'\n\nimport { StrikethroughIcon } from '../../../lexical/ui/icons/Strikethrough/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarFormatGroupWithItems } from '../shared/toolbarFormatGroup.js'\nimport { STRIKETHROUGH } from './markdownTransformers.js'\n\nconst toolbarGroups = [\n toolbarFormatGroupWithItems([\n {\n ChildComponent: StrikethroughIcon,\n isActive: ({ selection }) => {\n if ($isRangeSelection(selection)) {\n return selection.hasFormat('strikethrough')\n }\n return false\n },\n key: 'strikethrough',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'strikethrough')\n },\n order: 4,\n },\n ]),\n]\n\nexport const StrikethroughFeatureClient = createClientFeature({\n markdownTransformers: [STRIKETHROUGH],\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const StrikethroughIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"currentColor\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.50756 12.76H7.42756C7.56256 14.215 8.82256 14.71 10.1576 14.71C11.4326 14.71 12.4226 14.14 12.4226 13.06C12.4226 12.28 11.9576 11.845 10.6676 11.605L8.70256 11.245C7.12756 10.96 5.85256 10.21 5.85256 8.335C5.85256 6.43 7.53256 5.11 9.87256 5.11C12.4226 5.11 13.9526 6.22 14.1626 8.23H12.2876C12.1526 7.18 11.2226 6.595 9.88756 6.595C8.59756 6.595 7.78756 7.27 7.78756 8.215C7.78756 9.1 8.34256 9.385 9.49756 9.61L11.5676 10.015C13.3226 10.345 14.3726 11.215 14.3726 12.94C14.3726 14.89 12.5876 16.18 10.2176 16.18C7.66756 16.18 5.70256 15.115 5.50756 12.76Z\"\n fill=\"currentColor\"\n />\n <path d=\"M4.99756 11.44H15.0026V12.19H4.99756V11.44Z\" fill=\"currentColor\" />\n </svg>\n)\n", "import type { TextFormatTransformer } from '@lexical/markdown'\n\nexport const STRIKETHROUGH: TextFormatTransformer = {\n type: 'text-format',\n format: ['strikethrough'],\n tag: '~~',\n}\n", "'use client'\n\nimport { $isRangeSelection, FORMAT_TEXT_COMMAND } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { SubscriptIcon } from '../../../lexical/ui/icons/Subscript/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarFormatGroupWithItems } from '../shared/toolbarFormatGroup.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarFormatGroupWithItems([\n {\n ChildComponent: SubscriptIcon,\n isActive: ({ selection }) => {\n if ($isRangeSelection(selection)) {\n return selection.hasFormat('subscript')\n }\n return false\n },\n key: 'subscript',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'subscript')\n },\n order: 5,\n },\n ]),\n]\n\nexport const SubscriptFeatureClient = createClientFeature({\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const SubscriptIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"currentColor\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.167 15L7.45002 11.36L4.73302 15H2.91302L6.55302 10.177L3.23802 5.718H5.20102L7.54102 8.89L9.89402 5.718H11.714L8.43802 10.06L12.13 15H10.167ZM16.7768 13.258C16.7768 14.155 16.1398 14.532 15.2038 15C14.5538 15.325 14.2808 15.546 14.2418 15.78H16.7898V16.82H12.7208V16.339C12.7208 15.286 13.5918 14.675 14.3588 14.233C15.0868 13.83 15.4378 13.635 15.4378 13.232C15.4378 12.894 15.2038 12.686 14.8268 12.686C14.3848 12.686 14.1248 13.024 14.1118 13.427H12.7468C12.8248 12.426 13.5528 11.633 14.8398 11.633C15.9448 11.633 16.7768 12.257 16.7768 13.258Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\n\nimport { $isRangeSelection, FORMAT_TEXT_COMMAND } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { SuperscriptIcon } from '../../../lexical/ui/icons/Superscript/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarFormatGroupWithItems } from '../shared/toolbarFormatGroup.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarFormatGroupWithItems([\n {\n ChildComponent: SuperscriptIcon,\n isActive: ({ selection }) => {\n if ($isRangeSelection(selection)) {\n return selection.hasFormat('superscript')\n }\n return false\n },\n key: 'superscript',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'superscript')\n },\n order: 6,\n },\n ]),\n]\n\nexport const SuperscriptFeatureClient = createClientFeature({\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const SuperscriptIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"currentColor\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.167 15L7.45002 11.36L4.73302 15H2.91302L6.55302 10.177L3.23802 5.718H5.20102L7.54102 8.89L9.89402 5.718H11.714L8.43802 10.06L12.13 15H10.167ZM16.7768 7.252C16.7768 8.149 16.1398 8.526 15.2038 8.994C14.5538 9.319 14.2808 9.54 14.2418 9.774H16.7898V10.814H12.7208V10.333C12.7208 9.28 13.5918 8.669 14.3588 8.227C15.0868 7.824 15.4378 7.629 15.4378 7.226C15.4378 6.888 15.2038 6.68 14.8268 6.68C14.3848 6.68 14.1248 7.018 14.1118 7.421H12.7468C12.8248 6.42 13.5528 5.627 14.8398 5.627C15.9448 5.627 16.7768 6.251 16.7768 7.252Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\n\nimport { $isRangeSelection, FORMAT_TEXT_COMMAND } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { UnderlineIcon } from '../../../lexical/ui/icons/Underline/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarFormatGroupWithItems } from '../shared/toolbarFormatGroup.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarFormatGroupWithItems([\n {\n ChildComponent: UnderlineIcon,\n isActive: ({ selection }) => {\n if ($isRangeSelection(selection)) {\n return selection.hasFormat('underline')\n }\n return false\n },\n key: 'underline',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'underline')\n },\n order: 3,\n },\n ]),\n]\n\nexport const UnderlineFeatureClient = createClientFeature({\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const UnderlineIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"currentColor\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.9656 11.256C13.9656 13.791 12.5096 15.156 10.0006 15.156C7.50461 15.156 6.03561 13.791 6.03561 11.23V5.718H7.76461V11.243C7.76461 12.868 8.50561 13.778 10.0006 13.778C11.4956 13.778 12.2496 12.868 12.2496 11.243V5.718H13.9656V11.256Z\"\n fill=\"currentColor\"\n />\n <path d=\"M5.09961 16.3H14.9016V16.95H5.09961V16.3Z\" fill=\"currentColor\" />\n </svg>\n)\n", "'use client'\n\nimport type { HeadingTagType } from '@lexical/rich-text'\n\nimport { $createHeadingNode, $isHeadingNode, HeadingNode } from '@lexical/rich-text'\nimport { $setBlocksType } from '@lexical/selection'\nimport { $getSelection, $isRangeSelection } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\nimport type { HeadingFeatureProps } from '../server/index.js'\n\nimport { H1Icon } from '../../../lexical/ui/icons/H1/index.js'\nimport { H2Icon } from '../../../lexical/ui/icons/H2/index.js'\nimport { H3Icon } from '../../../lexical/ui/icons/H3/index.js'\nimport { H4Icon } from '../../../lexical/ui/icons/H4/index.js'\nimport { H5Icon } from '../../../lexical/ui/icons/H5/index.js'\nimport { H6Icon } from '../../../lexical/ui/icons/H6/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { slashMenuBasicGroupWithItems } from '../../shared/slashMenu/basicGroup.js'\nimport { toolbarTextDropdownGroupWithItems } from '../../shared/toolbar/textDropdownGroup.js'\nimport { MarkdownTransformer } from '../markdownTransformer.js'\n\nconst $setHeading = (headingSize: HeadingTagType) => {\n const selection = $getSelection()\n $setBlocksType(selection, () => $createHeadingNode(headingSize))\n}\n\nconst iconImports = {\n h1: H1Icon,\n h2: H2Icon,\n h3: H3Icon,\n h4: H4Icon,\n h5: H5Icon,\n h6: H6Icon,\n}\n\nexport const HeadingFeatureClient = createClientFeature<HeadingFeatureProps>(({ props }) => {\n const { enabledHeadingSizes = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] } = props\n\n const toolbarGroups: ToolbarGroup[] = [\n toolbarTextDropdownGroupWithItems(\n enabledHeadingSizes.map((headingSize, i) => {\n return {\n ChildComponent: iconImports[headingSize],\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isHeadingNode(node) && node.getTag() === headingSize) {\n continue\n }\n\n const parent = node.getParent()\n if ($isHeadingNode(parent) && parent.getTag() === headingSize) {\n continue\n }\n\n return false\n }\n return true\n },\n key: headingSize,\n label: ({ i18n }) => {\n return i18n.t('lexical:heading:label', { headingLevel: headingSize.charAt(1) })\n },\n onSelect: ({ editor }) => {\n editor.update(() => {\n $setHeading(headingSize)\n })\n },\n order: i + 2,\n }\n }),\n ),\n ]\n\n return {\n markdownTransformers: [MarkdownTransformer(enabledHeadingSizes)],\n nodes: [HeadingNode],\n sanitizedClientFeatureProps: props,\n slashMenu: {\n groups: enabledHeadingSizes?.length\n ? [\n slashMenuBasicGroupWithItems(\n enabledHeadingSizes.map((headingSize) => {\n return {\n Icon: iconImports[headingSize],\n key: `heading-${headingSize.charAt(1)}`,\n keywords: ['heading', headingSize],\n label: ({ i18n }) => {\n return i18n.t('lexical:heading:label', {\n headingLevel: headingSize.charAt(1),\n })\n },\n onSelect: ({ editor }) => {\n editor.update(() => {\n $setHeading(headingSize)\n })\n },\n }\n }),\n ),\n ]\n : [],\n },\n toolbarFixed: {\n groups: enabledHeadingSizes?.length ? toolbarGroups : [],\n },\n toolbarInline: {\n groups: enabledHeadingSizes?.length ? toolbarGroups : [],\n },\n }\n})\n", "'use client'\nimport React from 'react'\n\nexport const H1Icon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4.639 13.5V7.074H6.196V9.648H9.076V7.074H10.642V13.5H9.076V10.836H6.196V13.5H4.639ZM11.5656 9.045V8.019C12.6636 8.019 13.1316 7.731 13.2846 7.065H14.4006V13.5H12.8436V9.045H11.5656Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const H2Icon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4.139 13.5V7.074H5.696V9.648H8.576V7.074H10.142V13.5H8.576V10.836H5.696V13.5H4.139ZM15.9796 8.973C15.9796 10.116 15.1696 10.656 14.0356 11.232C13.2256 11.646 12.8206 11.943 12.7846 12.294H15.9886V13.5H11.0566V12.951C11.0566 11.601 12.1636 10.845 13.1176 10.287C14.0356 9.756 14.5126 9.486 14.5126 8.946C14.5126 8.46 14.2156 8.145 13.6306 8.145C13.0186 8.145 12.6586 8.613 12.6226 9.198H11.1196C11.2186 7.947 12.1006 6.966 13.6396 6.966C15.0346 6.966 15.9796 7.785 15.9796 8.973Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const H3Icon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4.139 13.5V7.074H5.696V9.648H8.576V7.074H10.142V13.5H8.576V10.836H5.696V13.5H4.139ZM16.1146 11.745C16.1146 12.744 15.2236 13.608 13.6126 13.608C12.0736 13.608 11.0926 12.762 10.9846 11.547H12.4696C12.5146 12.114 13.0006 12.456 13.6126 12.456C14.2876 12.456 14.6746 12.132 14.6746 11.619C14.6746 11.061 14.2426 10.836 13.6216 10.836H12.9826V9.738H13.6036C14.1526 9.738 14.5486 9.486 14.5486 8.937C14.5486 8.46 14.2156 8.127 13.6486 8.127C13.0366 8.127 12.6586 8.514 12.6226 9.045H11.1916C11.2726 7.929 12.1276 6.966 13.6666 6.966C15.1876 6.966 15.9706 7.848 15.9706 8.865C15.9706 9.603 15.5026 10.143 14.8186 10.269C15.6196 10.404 16.1146 10.971 16.1146 11.745Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const H4Icon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.639 13.5V7.074H5.196V9.648H8.076V7.074H9.642V13.5H8.076V10.836H5.196V13.5H3.639ZM15.1736 7.074V10.854H16.3706V12.033H15.1736V13.5H13.6796V12.033H10.5116V10.845L13.4996 7.074H15.1736ZM13.6796 8.46L11.8256 10.854H13.6796V8.46Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const H5Icon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.639 13.5V7.074H5.196V9.648H8.076V7.074H9.642V13.5H8.076V10.836H5.196V13.5H3.639ZM13.1576 10.269C12.6896 10.269 12.3746 10.494 12.2216 10.737H10.8176L11.1956 7.074H15.2546V8.28H12.3206L12.1856 9.549C12.4016 9.351 12.8516 9.126 13.4636 9.126C14.7866 9.126 15.6596 10.053 15.6596 11.358C15.6596 12.609 14.7326 13.608 13.1756 13.608C11.5826 13.608 10.6556 12.753 10.5566 11.511H12.1136C12.1586 12.06 12.5456 12.465 13.1576 12.465C13.8236 12.465 14.1746 11.97 14.1746 11.376C14.1746 10.764 13.8416 10.269 13.1576 10.269Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const H6Icon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.639 13.5V7.074H5.196V9.648H8.076V7.074H9.642V13.5H8.076V10.836H5.196V13.5H3.639ZM13.3646 8.127C12.5456 8.127 12.0416 8.937 12.0416 9.999C12.3296 9.54 12.8246 9.207 13.5536 9.207C14.8586 9.207 15.8036 10.134 15.8036 11.376C15.8036 12.645 14.8226 13.608 13.3196 13.608C11.7266 13.608 10.6196 12.393 10.6196 10.395C10.6196 8.316 11.7716 6.966 13.4186 6.966C14.7056 6.966 15.5786 7.749 15.7316 8.829H14.3186C14.2016 8.415 13.9226 8.127 13.3646 8.127ZM13.3106 12.51C13.9586 12.51 14.3816 12.042 14.3816 11.385C14.3816 10.737 13.9586 10.278 13.3106 10.278C12.6536 10.278 12.2126 10.737 12.2126 11.385C12.2126 12.042 12.6536 12.51 13.3106 12.51Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "import type { ElementTransformer } from '@lexical/markdown'\nimport type { HeadingTagType } from '@lexical/rich-text'\n\nimport { $createHeadingNode, $isHeadingNode, HeadingNode } from '@lexical/rich-text'\n\nimport { createBlockNode } from '../../lexical/utils/markdown/createBlockNode.js'\n\nexport const MarkdownTransformer: (enabledHeadingSizes: HeadingTagType[]) => ElementTransformer = (\n enabledHeadingSizes,\n) => {\n // Convert enabledHeadingSizes to a list of numbers (1 for h1, 2 for h2, etc.)\n const enabledSizes = enabledHeadingSizes.map((tag) => Number(tag.slice(1)))\n\n // Create a regex pattern that matches any of the enabled sizes\n const pattern = `^(${enabledSizes.map((size) => `#{${size}}`).join('|')})\\\\s`\n const regExp = new RegExp(pattern)\n\n return {\n type: 'element',\n dependencies: [HeadingNode],\n export: (node, exportChildren) => {\n if (!$isHeadingNode(node)) {\n return null\n }\n const level = Number(node.getTag().slice(1))\n return '#'.repeat(level) + ' ' + exportChildren(node)\n },\n regExp,\n replace: createBlockNode((match) => {\n const tag = ('h' + match[1].length) as HeadingTagType\n return $createHeadingNode(tag)\n }),\n }\n}\n", "import type { ElementTransformer } from '@lexical/markdown'\nimport type { ElementNode } from 'lexical'\n\nexport const createBlockNode = (\n createNode: (match: Array<string>) => ElementNode,\n): ElementTransformer['replace'] => {\n return (parentNode, children, match) => {\n const node = createNode(match)\n if (node) {\n node.append(...children)\n parentNode.replace(node)\n node.select(0, 0)\n }\n }\n}\n", "'use client'\n\nimport { $isNodeSelection } from 'lexical'\n\nimport { HorizontalRuleIcon } from '../../../lexical/ui/icons/HorizontalRule/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { slashMenuBasicGroupWithItems } from '../../shared/slashMenu/basicGroup.js'\nimport { toolbarAddDropdownGroupWithItems } from '../../shared/toolbar/addDropdownGroup.js'\nimport { INSERT_HORIZONTAL_RULE_COMMAND } from '../server/nodes/HorizontalRuleNode.js'\nimport { MarkdownTransformer } from './markdownTransformer.js'\nimport { $isHorizontalRuleNode, HorizontalRuleNode } from './nodes/HorizontalRuleNode.js'\nimport { HorizontalRulePlugin } from './plugin/index.js'\n\nexport const HorizontalRuleFeatureClient = createClientFeature({\n markdownTransformers: [MarkdownTransformer],\n nodes: [HorizontalRuleNode],\n plugins: [\n {\n Component: HorizontalRulePlugin,\n position: 'normal',\n },\n ],\n slashMenu: {\n groups: [\n slashMenuBasicGroupWithItems([\n {\n Icon: HorizontalRuleIcon,\n key: 'horizontalRule',\n keywords: ['hr', 'horizontal rule', 'line', 'separator'],\n label: ({ i18n }) => {\n return i18n.t('lexical:horizontalRule:label')\n },\n\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_HORIZONTAL_RULE_COMMAND, undefined)\n },\n },\n ]),\n ],\n },\n toolbarFixed: {\n groups: [\n toolbarAddDropdownGroupWithItems([\n {\n ChildComponent: HorizontalRuleIcon,\n isActive: ({ selection }) => {\n if (!$isNodeSelection(selection) || !selection.getNodes().length) {\n return false\n }\n\n const firstNode = selection.getNodes()[0]\n return $isHorizontalRuleNode(firstNode)\n },\n key: 'horizontalRule',\n label: ({ i18n }) => {\n return i18n.t('lexical:horizontalRule:label')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_HORIZONTAL_RULE_COMMAND, undefined)\n },\n },\n ]),\n ],\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const HorizontalRuleIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect fill=\"currentColor\" height=\"1\" width=\"12\" x=\"4\" y=\"9.5\" />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const AddIcon: React.FC = () => (\n <svg fill=\"none\" height=\"20\" viewBox=\"0 0 20 20\" width=\"20\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5 10h10\" stroke=\"currentColor\" />\n <path d=\"M10 15V5\" stroke=\"currentColor\" />\n </svg>\n)\n", "import type { ToolbarGroup, ToolbarGroupItem } from '../../toolbars/types.js'\n\nimport { AddIcon } from '../../../lexical/ui/icons/Add/index.js'\n\nexport const toolbarAddDropdownGroupWithItems = (items: ToolbarGroupItem[]): ToolbarGroup => {\n return {\n type: 'dropdown',\n ChildComponent: AddIcon,\n items,\n key: 'add',\n order: 10,\n }\n}\n", "import type { ElementTransformer } from '@lexical/markdown'\n\nimport {\n $createHorizontalRuleNode,\n $isHorizontalRuleNode,\n HorizontalRuleNode,\n} from './nodes/HorizontalRuleNode.js'\n\nexport const MarkdownTransformer: ElementTransformer = {\n type: 'element',\n dependencies: [HorizontalRuleNode],\n export: (node, exportChildren) => {\n if (!$isHorizontalRuleNode(node)) {\n return null\n }\n return '---'\n },\n // match ---\n regExp: /^---\\s*$/,\n replace: (parentNode) => {\n const node = $createHorizontalRuleNode()\n if (node) {\n parentNode.replace(node)\n }\n },\n}\n", "'use client'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $insertNodeToNearestRoot } from '@lexical/utils'\nimport { $getSelection, $isRangeSelection, COMMAND_PRIORITY_EDITOR } from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../../typesClient.js'\n\nimport { INSERT_HORIZONTAL_RULE_COMMAND } from '../../server/nodes/HorizontalRuleNode.js'\nimport { $createHorizontalRuleNode } from '../nodes/HorizontalRuleNode.js'\nimport './index.scss'\n\n/**\n * Registers the INSERT_HORIZONTAL_RULE_COMMAND lexical command and defines the behavior for when it is called.\n */\nexport const HorizontalRulePlugin: PluginComponent<undefined> = () => {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n return editor.registerCommand(\n INSERT_HORIZONTAL_RULE_COMMAND,\n (type) => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n const focusNode = selection.focus.getNode()\n\n if (focusNode !== null) {\n const horizontalRuleNode = $createHorizontalRuleNode()\n $insertNodeToNearestRoot(horizontalRuleNode)\n }\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n )\n }, [editor])\n\n return null\n}\n", "'use client'\n\nimport { INDENT_CONTENT_COMMAND, OUTDENT_CONTENT_COMMAND } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { IndentDecreaseIcon } from '../../../lexical/ui/icons/IndentDecrease/index.js'\nimport { IndentIncreaseIcon } from '../../../lexical/ui/icons/IndentIncrease/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarIndentGroupWithItems } from './toolbarIndentGroup.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarIndentGroupWithItems([\n {\n ChildComponent: IndentDecreaseIcon,\n isActive: () => false,\n isEnabled: ({ selection }) => {\n if (!selection || !selection?.getNodes()?.length) {\n return false\n }\n for (const node of selection.getNodes()) {\n // If at least one node is indented, this should be active\n if (\n ('__indent' in node && (node.__indent as number) > 0) ||\n (node.getParent() && '__indent' in node.getParent() && node.getParent().__indent > 0)\n ) {\n return true\n }\n }\n return false\n },\n key: 'indentDecrease',\n label: ({ i18n }) => {\n return i18n.t('lexical:indent:decreaseLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(OUTDENT_CONTENT_COMMAND, undefined)\n },\n order: 1,\n },\n {\n ChildComponent: IndentIncreaseIcon,\n isActive: () => false,\n key: 'indentIncrease',\n label: ({ i18n }) => {\n return i18n.t('lexical:indent:increaseLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INDENT_CONTENT_COMMAND, undefined)\n },\n order: 2,\n },\n ]),\n]\n\nexport const IndentFeatureClient = createClientFeature({\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const IndentDecreaseIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M2.5 5H10.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2.5 10H10.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2.5 15H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M12.25 7.25L17.25 3.75V10.75L12.25 7.25Z\" fill=\"currentColor\" />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const IndentIncreaseIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M17.5 5H9.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M17.5 10H9.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M17.5 15H2.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M7.75 7.25L2.75 3.75V10.75L7.75 7.25Z\" fill=\"currentColor\" />\n </svg>\n)\n", "'use client'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../toolbars/types.js'\n\nexport const toolbarIndentGroupWithItems = (items: ToolbarGroupItem[]): ToolbarGroup => {\n return {\n type: 'buttons',\n items,\n key: 'indent',\n order: 35,\n }\n}\n", "'use client'\n\nimport type { LexicalNode } from 'lexical'\n\nimport { $findMatchingParent } from '@lexical/utils'\nimport { $getSelection, $isRangeSelection } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\nimport type { LinkFields } from '../nodes/types.js'\nimport type { ExclusiveLinkCollectionsProps } from '../server/index.js'\n\nimport { LinkIcon } from '../../../lexical/ui/icons/Link/index.js'\nimport { getSelectedNode } from '../../../lexical/utils/getSelectedNode.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarFeatureButtonsGroupWithItems } from '../../shared/toolbar/featureButtonsGroup.js'\nimport { LinkMarkdownTransformer } from '../markdownTransformer.js'\nimport { AutoLinkNode } from '../nodes/AutoLinkNode.js'\nimport { $isLinkNode, LinkNode, TOGGLE_LINK_COMMAND } from '../nodes/LinkNode.js'\nimport { AutoLinkPlugin } from './plugins/autoLink/index.js'\nimport { ClickableLinkPlugin } from './plugins/clickableLink/index.js'\nimport { TOGGLE_LINK_WITH_MODAL_COMMAND } from './plugins/floatingLinkEditor/LinkEditor/commands.js'\nimport { FloatingLinkEditorPlugin } from './plugins/floatingLinkEditor/index.js'\nimport { LinkPlugin } from './plugins/link/index.js'\n\nexport type ClientProps = ExclusiveLinkCollectionsProps\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarFeatureButtonsGroupWithItems([\n {\n ChildComponent: LinkIcon,\n isActive: ({ selection }) => {\n if ($isRangeSelection(selection)) {\n const selectedNode = getSelectedNode(selection)\n const linkParent = $findMatchingParent(selectedNode, $isLinkNode)\n return linkParent != null\n }\n return false\n },\n isEnabled: ({ selection }) => {\n return !!($isRangeSelection(selection) && $getSelection()?.getTextContent()?.length)\n },\n key: 'link',\n label: ({ i18n }) => {\n return i18n.t('lexical:link:label')\n },\n onSelect: ({ editor, isActive }) => {\n if (!isActive) {\n let selectedText: string = null\n let selectedNodes: LexicalNode[] = []\n editor.getEditorState().read(() => {\n selectedText = $getSelection()?.getTextContent()\n // We need to selected nodes here before the drawer opens, as clicking around in the drawer may change the original selection\n selectedNodes = $getSelection()?.getNodes() ?? []\n })\n\n if (!selectedText?.length) {\n return\n }\n\n const linkFields: LinkFields = {\n doc: null,\n linkType: 'custom',\n newTab: false,\n url: 'https://',\n }\n\n editor.dispatchCommand(TOGGLE_LINK_WITH_MODAL_COMMAND, {\n fields: linkFields,\n selectedNodes,\n text: selectedText,\n })\n } else {\n // remove link\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null)\n }\n },\n order: 1,\n },\n ]),\n]\n\nexport const LinkFeatureClient = createClientFeature({\n markdownTransformers: [LinkMarkdownTransformer],\n nodes: [LinkNode, AutoLinkNode],\n plugins: [\n {\n Component: LinkPlugin,\n position: 'normal',\n },\n {\n Component: AutoLinkPlugin,\n position: 'normal',\n },\n {\n Component: ClickableLinkPlugin,\n position: 'normal',\n },\n {\n Component: FloatingLinkEditorPlugin,\n position: 'floatingAnchorElem',\n },\n ],\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const LinkIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.5 11.5L11.5 8.5M8.5 7L9.625 5.875C10.868 4.633 12.882 4.633 14.125 5.875C15.368 7.118 15.368 9.133 14.125 10.375L13 11.5M7 8.5L5.746 9.754C4.56 10.94 4.519 12.85 5.652 14.087C6.814 15.354 8.78 15.449 10.058 14.298L11.5 13\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n", "'use client'\nimport type { ElementNode, RangeSelection, TextNode } from 'lexical'\n\nimport { $isAtNodeEnd } from '@lexical/selection'\n\nexport function getSelectedNode(selection: RangeSelection): ElementNode | TextNode {\n const { anchor } = selection\n const { focus } = selection\n const anchorNode = selection.anchor.getNode()\n const focusNode = selection.focus.getNode()\n if (anchorNode === focusNode) {\n return anchorNode\n }\n const isBackward = selection.isBackward()\n if (isBackward) {\n return $isAtNodeEnd(focus) ? anchorNode : focusNode\n }\n return $isAtNodeEnd(anchor) ? anchorNode : focusNode\n}\n", "import type { ToolbarGroup, ToolbarGroupItem } from '../../toolbars/types.js'\n\nexport const toolbarFeatureButtonsGroupWithItems = (items: ToolbarGroupItem[]): ToolbarGroup => {\n return {\n type: 'buttons',\n items,\n key: 'features',\n order: 50,\n }\n}\n", "/**\n * Code taken from https://github.com/facebook/lexical/blob/main/packages/lexical-markdown/src/MarkdownTransformers.ts#L357\n */\n\n// Order of text transformers matters:\n//\n// - code should go first as it prevents any transformations inside\n\nimport type { TextMatchTransformer } from '@lexical/markdown'\n\nimport { $createTextNode, $isTextNode } from 'lexical'\n\nimport { $createLinkNode, $isLinkNode, LinkNode } from './nodes/LinkNode.js'\n\n// - then longer tags match (e.g. ** or __ should go before * or _)\nexport const LinkMarkdownTransformer: TextMatchTransformer = {\n type: 'text-match',\n dependencies: [LinkNode],\n export: (_node, exportChildren, exportFormat) => {\n if (!$isLinkNode(_node)) {\n return null\n }\n const node: LinkNode = _node\n const { url } = node.getFields()\n const linkContent = `[${node.getTextContent()}](${url})`\n const firstChild = node.getFirstChild()\n // Add text styles only if link has single text node inside. If it's more\n // then one we ignore it as markdown does not support nested styles for links\n if (node.getChildrenSize() === 1 && $isTextNode(firstChild)) {\n return exportFormat(firstChild, linkContent)\n } else {\n return linkContent\n }\n },\n importRegExp: /\\[([^[]+)\\]\\(([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?\\)/,\n regExp: /\\[([^[]+)\\]\\(([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?\\)$/,\n replace: (textNode, match) => {\n const [, linkText, linkUrl] = match\n const linkNode = $createLinkNode({\n fields: {\n doc: null,\n linkType: 'custom',\n newTab: false,\n url: linkUrl,\n },\n })\n const linkTextNode = $createTextNode(linkText)\n linkTextNode.setFormat(textNode.getFormat())\n linkNode.append(linkTextNode)\n textNode.replace(linkNode)\n },\n trigger: ')',\n}\n", "import type {\n BaseSelection,\n DOMConversionMap,\n DOMConversionOutput,\n EditorConfig,\n ElementNode as ElementNodeType,\n LexicalCommand,\n LexicalNode,\n NodeKey,\n RangeSelection,\n} from 'lexical'\n\nimport { addClassNamesToElement, isHTMLAnchorElement } from '@lexical/utils'\nimport ObjectID from 'bson-objectid'\nimport {\n $applyNodeReplacement,\n $createTextNode,\n $getSelection,\n $isElementNode,\n $isRangeSelection,\n ElementNode,\n createCommand,\n} from 'lexical'\n\nimport type { LinkPayload } from '../client/plugins/floatingLinkEditor/types.js'\nimport type { LinkFields, SerializedLinkNode } from './types.js'\n\nconst SUPPORTED_URL_PROTOCOLS = new Set(['http:', 'https:', 'mailto:', 'sms:', 'tel:'])\n\n/** @noInheritDoc */\nexport class LinkNode extends ElementNode {\n __fields: LinkFields\n __id: string\n\n constructor({\n id,\n fields = {\n doc: null,\n linkType: 'custom',\n newTab: false,\n url: undefined,\n },\n key,\n }: {\n fields: LinkFields\n id: string\n key?: NodeKey\n }) {\n super(key)\n this.__fields = fields\n this.__id = id\n }\n\n static clone(node: LinkNode): LinkNode {\n return new LinkNode({\n id: node.__id,\n fields: node.__fields,\n key: node.__key,\n })\n }\n\n static getType(): string {\n return 'link'\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n a: (node: Node) => ({\n conversion: $convertAnchorElement,\n priority: 1,\n }),\n }\n }\n\n static importJSON(serializedNode: SerializedLinkNode): LinkNode {\n if (\n serializedNode.version === 1 &&\n typeof serializedNode.fields?.doc?.value === 'object' &&\n serializedNode.fields?.doc?.value?.id\n ) {\n serializedNode.fields.doc.value = serializedNode.fields.doc.value.id\n serializedNode.version = 2\n }\n\n if (serializedNode.version === 2 && !serializedNode.id) {\n serializedNode.id = new ObjectID.default().toHexString()\n serializedNode.version = 3\n }\n\n const node = $createLinkNode({\n id: serializedNode.id,\n fields: serializedNode.fields,\n })\n node.setFormat(serializedNode.format)\n node.setIndent(serializedNode.indent)\n node.setDirection(serializedNode.direction)\n return node\n }\n\n canBeEmpty(): false {\n return false\n }\n\n canInsertTextAfter(): false {\n return false\n }\n\n canInsertTextBefore(): false {\n return false\n }\n\n createDOM(config: EditorConfig): HTMLAnchorElement {\n const element = document.createElement('a')\n if (this.__fields?.linkType === 'custom') {\n element.href = this.sanitizeUrl(this.__fields.url ?? '')\n }\n if (this.__fields?.newTab ?? false) {\n element.target = '_blank'\n }\n\n if (this.__fields?.newTab === true && this.__fields?.linkType === 'custom') {\n element.rel = manageRel(element.rel, 'add', 'noopener')\n }\n\n addClassNamesToElement(element, config.theme.link)\n return element\n }\n\n exportJSON(): SerializedLinkNode {\n const returnObject: SerializedLinkNode = {\n ...super.exportJSON(),\n type: 'link',\n fields: this.getFields(),\n version: 3,\n }\n const id = this.getID()\n if (id) {\n returnObject.id = id\n }\n return returnObject\n }\n\n extractWithChild(\n child: LexicalNode,\n selection: BaseSelection,\n destination: 'clone' | 'html',\n ): boolean {\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n const anchorNode = selection.anchor.getNode()\n const focusNode = selection.focus.getNode()\n\n return (\n this.isParentOf(anchorNode) &&\n this.isParentOf(focusNode) &&\n selection.getTextContent().length > 0\n )\n }\n\n getFields(): LinkFields {\n return this.getLatest().__fields\n }\n\n getID(): string {\n return this.getLatest().__id\n }\n\n insertNewAfter(selection: RangeSelection, restoreSelection = true): ElementNodeType | null {\n const element = this.getParentOrThrow().insertNewAfter(selection, restoreSelection)\n if ($isElementNode(element)) {\n const linkNode = $createLinkNode({ fields: this.__fields })\n element.append(linkNode)\n return linkNode\n }\n return null\n }\n\n isInline(): true {\n return true\n }\n\n sanitizeUrl(url: string): string {\n try {\n const parsedUrl = new URL(url)\n\n if (!SUPPORTED_URL_PROTOCOLS.has(parsedUrl.protocol)) {\n return 'about:blank'\n }\n } catch (e) {\n return 'https://'\n }\n return url\n }\n\n setFields(fields: LinkFields): void {\n const writable = this.getWritable()\n writable.__fields = fields\n }\n\n updateDOM(prevNode: LinkNode, anchor: HTMLAnchorElement, config: EditorConfig): boolean {\n const url = this.__fields?.url\n const newTab = this.__fields?.newTab\n if (url != null && url !== prevNode.__fields?.url && this.__fields?.linkType === 'custom') {\n anchor.href = url\n }\n if (this.__fields?.linkType === 'internal' && prevNode.__fields?.linkType === 'custom') {\n anchor.removeAttribute('href')\n }\n\n // TODO: not 100% sure why we're settign rel to '' - revisit\n // Start rel config here, then check newTab below\n if (anchor.rel == null) {\n anchor.rel = ''\n }\n\n if (newTab !== prevNode.__fields?.newTab) {\n if (newTab ?? false) {\n anchor.target = '_blank'\n if (this.__fields?.linkType === 'custom') {\n anchor.rel = manageRel(anchor.rel, 'add', 'noopener')\n }\n } else {\n anchor.removeAttribute('target')\n anchor.rel = manageRel(anchor.rel, 'remove', 'noopener')\n }\n }\n\n return false\n }\n}\n\nfunction $convertAnchorElement(domNode: Node): DOMConversionOutput {\n let node: LinkNode | null = null\n if (isHTMLAnchorElement(domNode)) {\n const content = domNode.textContent\n if (content !== null && content !== '') {\n node = $createLinkNode({\n id: new ObjectID.default().toHexString(),\n fields: {\n doc: null,\n linkType: 'custom',\n newTab: domNode.getAttribute('target') === '_blank',\n url: domNode.getAttribute('href') ?? '',\n },\n })\n }\n }\n return { node }\n}\n\nexport function $createLinkNode({ id, fields }: { fields: LinkFields; id?: string }): LinkNode {\n return $applyNodeReplacement(\n new LinkNode({\n id: id ?? new ObjectID.default().toHexString(),\n fields,\n }),\n )\n}\n\nexport function $isLinkNode(node: LexicalNode | null | undefined): node is LinkNode {\n return node instanceof LinkNode\n}\n\nexport const TOGGLE_LINK_COMMAND: LexicalCommand<LinkPayload | null> =\n createCommand('TOGGLE_LINK_COMMAND')\n\nexport function $toggleLink(payload: LinkPayload): void {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection) && !payload.selectedNodes.length) {\n return\n }\n const nodes = $isRangeSelection(selection) ? selection.extract() : payload.selectedNodes\n\n if (payload === null) {\n // Remove LinkNodes\n nodes.forEach((node) => {\n const parent = node.getParent()\n\n if ($isLinkNode(parent)) {\n const children = parent.getChildren()\n\n for (let i = 0; i < children.length; i += 1) {\n parent.insertBefore(children[i])\n }\n\n parent.remove()\n }\n })\n } else {\n // Add or merge LinkNodes\n if (nodes.length === 1) {\n const firstNode = nodes[0]\n // if the first node is a LinkNode or if its\n // parent is a LinkNode, we update the URL, target and rel.\n const linkNode: LinkNode | null = $isLinkNode(firstNode)\n ? firstNode\n : $getLinkAncestor(firstNode)\n if (linkNode !== null) {\n linkNode.setFields(payload.fields)\n\n if (payload.text != null && payload.text !== linkNode.getTextContent()) {\n // remove all children and add child with new textcontent:\n linkNode.append($createTextNode(payload.text))\n linkNode.getChildren().forEach((child) => {\n if (child !== linkNode.getLastChild()) {\n child.remove()\n }\n })\n }\n return\n }\n }\n\n let prevParent: ElementNodeType | LinkNode | null = null\n let linkNode: LinkNode | null = null\n\n nodes.forEach((node) => {\n const parent = node.getParent()\n\n if (parent === linkNode || parent === null || ($isElementNode(node) && !node.isInline())) {\n return\n }\n\n if ($isLinkNode(parent)) {\n linkNode = parent\n parent.setFields(payload.fields)\n if (payload.text != null && payload.text !== parent.getTextContent()) {\n // remove all children and add child with new textcontent:\n parent.append($createTextNode(payload.text))\n parent.getChildren().forEach((child) => {\n if (child !== parent.getLastChild()) {\n child.remove()\n }\n })\n }\n return\n }\n\n if (!parent.is(prevParent)) {\n prevParent = parent\n linkNode = $createLinkNode({ fields: payload.fields })\n\n if ($isLinkNode(parent)) {\n if (node.getPreviousSibling() === null) {\n parent.insertBefore(linkNode)\n } else {\n parent.insertAfter(linkNode)\n }\n } else {\n node.insertBefore(linkNode)\n }\n }\n\n if ($isLinkNode(node)) {\n if (node.is(linkNode)) {\n return\n }\n if (linkNode !== null) {\n const children = node.getChildren()\n\n for (let i = 0; i < children.length; i += 1) {\n linkNode.append(children[i])\n }\n }\n\n node.remove()\n return\n }\n\n if (linkNode !== null) {\n linkNode.append(node)\n }\n })\n }\n}\n\nfunction $getLinkAncestor(node: LexicalNode): LinkNode | null {\n return $getAncestor(node, (ancestor) => $isLinkNode(ancestor)) as LinkNode\n}\n\nfunction $getAncestor(\n node: LexicalNode,\n predicate: (ancestor: LexicalNode) => boolean,\n): LexicalNode | null {\n let parent: LexicalNode | null = node\n while (parent !== null && (parent = parent.getParent()) !== null && !predicate(parent));\n return parent\n}\n\nfunction manageRel(input: string, action: 'add' | 'remove', value: string): string {\n let result: string\n let mutableInput = `${input}`\n if (action === 'add') {\n // if we somehow got out of sync - clean up\n if (mutableInput.includes(value)) {\n const re = new RegExp(value, 'g')\n mutableInput = mutableInput.replace(re, '').trim()\n }\n mutableInput = mutableInput.trim()\n result = mutableInput.length === 0 ? `${value}` : `${mutableInput} ${value}`\n } else {\n const re = new RegExp(value, 'g')\n result = mutableInput.replace(re, '').trim()\n }\n return result\n}\n", "import type { ElementNode, LexicalNode, RangeSelection } from 'lexical'\n\nimport { $applyNodeReplacement, $isElementNode } from 'lexical'\n\nimport type { LinkFields, SerializedAutoLinkNode } from './types.js'\n\nimport { LinkNode } from './LinkNode.js'\n\n// Custom node type to override `canInsertTextAfter` that will\n// allow typing within the link\n\nexport class AutoLinkNode extends LinkNode {\n static clone(node: AutoLinkNode): AutoLinkNode {\n return new AutoLinkNode({ id: undefined, fields: node.__fields, key: node.__key })\n }\n\n static getType(): string {\n return 'autolink'\n }\n\n static importDOM(): null {\n // TODO: Should link node should handle the import over autolink?\n return null\n }\n\n static importJSON(serializedNode: SerializedAutoLinkNode): AutoLinkNode {\n if (\n serializedNode.version === 1 &&\n typeof serializedNode.fields?.doc?.value === 'object' &&\n serializedNode.fields?.doc?.value?.id\n ) {\n serializedNode.fields.doc.value = serializedNode.fields.doc.value.id\n serializedNode.version = 2\n }\n\n const node = $createAutoLinkNode({ fields: serializedNode.fields })\n\n node.setFormat(serializedNode.format)\n node.setIndent(serializedNode.indent)\n node.setDirection(serializedNode.direction)\n return node\n }\n\n // @ts-expect-error\n exportJSON(): SerializedAutoLinkNode {\n const serialized = super.exportJSON()\n return {\n type: 'autolink',\n children: serialized.children,\n direction: serialized.direction,\n fields: serialized.fields,\n format: serialized.format,\n indent: serialized.indent,\n version: 2,\n }\n }\n\n insertNewAfter(selection: RangeSelection, restoreSelection = true): ElementNode | null {\n const element = this.getParentOrThrow().insertNewAfter(selection, restoreSelection)\n if ($isElementNode(element)) {\n const linkNode = $createAutoLinkNode({ fields: this.__fields })\n element.append(linkNode)\n return linkNode\n }\n return null\n }\n}\n\nexport function $createAutoLinkNode({ fields }: { fields: LinkFields }): AutoLinkNode {\n return $applyNodeReplacement(new AutoLinkNode({ id: undefined, fields }))\n}\nexport function $isAutoLinkNode(node: LexicalNode | null | undefined): node is AutoLinkNode {\n return node instanceof AutoLinkNode\n}\n", "'use client'\nimport type { ElementNode, LexicalEditor, LexicalNode, TextNode } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $createTextNode,\n $getSelection,\n $isElementNode,\n $isLineBreakNode,\n $isNodeSelection,\n $isRangeSelection,\n $isTextNode,\n TextNode as TextNodeValue,\n} from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\nimport type { LinkFields } from '../../../nodes/types.js'\nimport type { ClientProps } from '../../index.js'\n\nimport { $createAutoLinkNode, $isAutoLinkNode, AutoLinkNode } from '../../../nodes/AutoLinkNode.js'\nimport { $isLinkNode } from '../../../nodes/LinkNode.js'\n\ntype ChangeHandler = (url: null | string, prevUrl: null | string) => void\n\ninterface LinkMatcherResult {\n fields?: LinkFields\n index: number\n length: number\n text: string\n url: string\n}\n\nexport type LinkMatcher = (text: string) => LinkMatcherResult | null\n\nexport function createLinkMatcherWithRegExp(\n regExp: RegExp,\n urlTransformer: (text: string) => string = (text) => text,\n) {\n return (text: string) => {\n const match = regExp.exec(text)\n if (match === null) return null\n return {\n index: match.index,\n length: match[0].length,\n text: match[0],\n url: urlTransformer(match[0]),\n }\n }\n}\n\nfunction findFirstMatch(text: string, matchers: LinkMatcher[]): LinkMatcherResult | null {\n for (let i = 0; i < matchers.length; i++) {\n const match = matchers[i](text)\n\n if (match != null) {\n return match\n }\n }\n\n return null\n}\n\nconst PUNCTUATION_OR_SPACE = /[.,;\\s]/\n\nfunction isSeparator(char: string): boolean {\n return PUNCTUATION_OR_SPACE.test(char)\n}\n\nfunction endsWithSeparator(textContent: string): boolean {\n return isSeparator(textContent[textContent.length - 1])\n}\n\nfunction startsWithSeparator(textContent: string): boolean {\n return isSeparator(textContent[0])\n}\n\n/**\n * Check if the text content starts with a fullstop followed by a top-level domain.\n * Meaning if the text content can be a beginning of a top level domain.\n * @param textContent\n * @param isEmail\n * @returns boolean\n */\nfunction startsWithTLD(textContent: string, isEmail: boolean): boolean {\n if (isEmail) {\n return /^\\.[a-z]{2,}/i.test(textContent)\n } else {\n return /^\\.[a-z0-9]+/i.test(textContent)\n }\n}\n\nfunction isPreviousNodeValid(node: LexicalNode): boolean {\n let previousNode = node.getPreviousSibling()\n if ($isElementNode(previousNode)) {\n previousNode = previousNode.getLastDescendant()\n }\n return (\n previousNode === null ||\n $isLineBreakNode(previousNode) ||\n ($isTextNode(previousNode) && endsWithSeparator(previousNode.getTextContent()))\n )\n}\n\nfunction isNextNodeValid(node: LexicalNode): boolean {\n let nextNode = node.getNextSibling()\n if ($isElementNode(nextNode)) {\n nextNode = nextNode.getFirstDescendant()\n }\n return (\n nextNode === null ||\n $isLineBreakNode(nextNode) ||\n ($isTextNode(nextNode) && startsWithSeparator(nextNode.getTextContent()))\n )\n}\n\nfunction isContentAroundIsValid(\n matchStart: number,\n matchEnd: number,\n text: string,\n nodes: TextNode[],\n): boolean {\n const contentBeforeIsValid =\n matchStart > 0 ? isSeparator(text[matchStart - 1]) : isPreviousNodeValid(nodes[0])\n if (!contentBeforeIsValid) {\n return false\n }\n\n const contentAfterIsValid =\n matchEnd < text.length ? isSeparator(text[matchEnd]) : isNextNodeValid(nodes[nodes.length - 1])\n return contentAfterIsValid\n}\n\nfunction extractMatchingNodes(\n nodes: TextNode[],\n startIndex: number,\n endIndex: number,\n): [\n matchingOffset: number,\n unmodifiedBeforeNodes: TextNode[],\n matchingNodes: TextNode[],\n unmodifiedAfterNodes: TextNode[],\n] {\n const unmodifiedBeforeNodes: TextNode[] = []\n const matchingNodes: TextNode[] = []\n const unmodifiedAfterNodes: TextNode[] = []\n let matchingOffset = 0\n\n let currentOffset = 0\n const currentNodes = [...nodes]\n\n while (currentNodes.length > 0) {\n const currentNode = currentNodes[0]\n const currentNodeText = currentNode.getTextContent()\n const currentNodeLength = currentNodeText.length\n const currentNodeStart = currentOffset\n const currentNodeEnd = currentOffset + currentNodeLength\n\n if (currentNodeEnd <= startIndex) {\n unmodifiedBeforeNodes.push(currentNode)\n matchingOffset += currentNodeLength\n } else if (currentNodeStart >= endIndex) {\n unmodifiedAfterNodes.push(currentNode)\n } else {\n matchingNodes.push(currentNode)\n }\n currentOffset += currentNodeLength\n currentNodes.shift()\n }\n return [matchingOffset, unmodifiedBeforeNodes, matchingNodes, unmodifiedAfterNodes]\n}\n\nfunction $createAutoLinkNode_(\n nodes: TextNode[],\n startIndex: number,\n endIndex: number,\n match: LinkMatcherResult,\n): TextNode | undefined {\n const fields: LinkFields = {\n linkType: 'custom',\n url: match.url,\n ...match.fields,\n }\n\n const linkNode = $createAutoLinkNode({ fields })\n if (nodes.length === 1) {\n let remainingTextNode = nodes[0]\n let linkTextNode\n if (startIndex === 0) {\n ;[linkTextNode, remainingTextNode] = remainingTextNode.splitText(endIndex)\n } else {\n ;[, linkTextNode, remainingTextNode] = remainingTextNode.splitText(startIndex, endIndex)\n }\n const textNode = $createTextNode(match.text)\n textNode.setFormat(linkTextNode.getFormat())\n textNode.setDetail(linkTextNode.getDetail())\n textNode.setStyle(linkTextNode.getStyle())\n linkNode.append(textNode)\n linkTextNode.replace(linkNode)\n return remainingTextNode\n } else if (nodes.length > 1) {\n const firstTextNode = nodes[0]\n let offset = firstTextNode.getTextContent().length\n let firstLinkTextNode\n if (startIndex === 0) {\n firstLinkTextNode = firstTextNode\n } else {\n ;[, firstLinkTextNode] = firstTextNode.splitText(startIndex)\n }\n const linkNodes = []\n let remainingTextNode\n for (let i = 1; i < nodes.length; i++) {\n const currentNode = nodes[i]\n const currentNodeText = currentNode.getTextContent()\n const currentNodeLength = currentNodeText.length\n const currentNodeStart = offset\n const currentNodeEnd = offset + currentNodeLength\n if (currentNodeStart < endIndex) {\n if (currentNodeEnd <= endIndex) {\n linkNodes.push(currentNode)\n } else {\n const [linkTextNode, endNode] = currentNode.splitText(endIndex - currentNodeStart)\n linkNodes.push(linkTextNode)\n remainingTextNode = endNode\n }\n }\n offset += currentNodeLength\n }\n const selection = $getSelection()\n const selectedTextNode = selection ? selection.getNodes().find($isTextNode) : undefined\n const textNode = $createTextNode(firstLinkTextNode.getTextContent())\n textNode.setFormat(firstLinkTextNode.getFormat())\n textNode.setDetail(firstLinkTextNode.getDetail())\n textNode.setStyle(firstLinkTextNode.getStyle())\n linkNode.append(textNode, ...linkNodes)\n // it does not preserve caret position if caret was at the first text node\n // so we need to restore caret position\n if (selectedTextNode && selectedTextNode === firstLinkTextNode) {\n if ($isRangeSelection(selection)) {\n textNode.select(selection.anchor.offset, selection.focus.offset)\n } else if ($isNodeSelection(selection)) {\n textNode.select(0, textNode.getTextContent().length)\n }\n }\n firstLinkTextNode.replace(linkNode)\n return remainingTextNode\n }\n return undefined\n}\n\nfunction $handleLinkCreation(\n nodes: TextNode[],\n matchers: LinkMatcher[],\n onChange: ChangeHandler,\n): void {\n let currentNodes = [...nodes]\n const initialText = currentNodes.map((node) => node.getTextContent()).join('')\n let text = initialText\n\n let match\n let invalidMatchEnd = 0\n\n while ((match = findFirstMatch(text, matchers)) != null && match !== null) {\n const matchStart: number = match.index\n const matchLength: number = match.length\n const matchEnd = matchStart + matchLength\n const isValid = isContentAroundIsValid(\n invalidMatchEnd + matchStart,\n invalidMatchEnd + matchEnd,\n initialText,\n currentNodes,\n )\n\n if (isValid) {\n const [matchingOffset, , matchingNodes, unmodifiedAfterNodes] = extractMatchingNodes(\n currentNodes,\n invalidMatchEnd + matchStart,\n invalidMatchEnd + matchEnd,\n )\n\n const actualMatchStart = invalidMatchEnd + matchStart - matchingOffset\n const actualMatchEnd = invalidMatchEnd + matchEnd - matchingOffset\n const remainingTextNode = $createAutoLinkNode_(\n matchingNodes,\n actualMatchStart,\n actualMatchEnd,\n match,\n )\n currentNodes = remainingTextNode\n ? [remainingTextNode, ...unmodifiedAfterNodes]\n : unmodifiedAfterNodes\n onChange(match.url, null)\n invalidMatchEnd = 0\n } else {\n invalidMatchEnd += matchEnd\n }\n\n text = text.substring(matchEnd)\n }\n}\n\nfunction handleLinkEdit(\n linkNode: AutoLinkNode,\n matchers: LinkMatcher[],\n onChange: ChangeHandler,\n): void {\n // Check children are simple text\n const children = linkNode.getChildren()\n const childrenLength = children.length\n for (let i = 0; i < childrenLength; i++) {\n const child = children[i]\n if (!$isTextNode(child) || !child.isSimpleText()) {\n replaceWithChildren(linkNode)\n onChange(null, linkNode.getFields()?.url ?? null)\n return\n }\n }\n\n // Check text content fully matches\n const text = linkNode.getTextContent()\n const match = findFirstMatch(text, matchers)\n if (match === null || match.text !== text) {\n replaceWithChildren(linkNode)\n onChange(null, linkNode.getFields()?.url ?? null)\n return\n }\n\n // Check neighbors\n if (!isPreviousNodeValid(linkNode) || !isNextNodeValid(linkNode)) {\n replaceWithChildren(linkNode)\n onChange(null, linkNode.getFields()?.url ?? null)\n return\n }\n\n const url = linkNode.getFields()?.url\n if (url !== match?.url) {\n const flds = linkNode.getFields()\n flds.url = match?.url\n linkNode.setFields(flds)\n onChange(match.url, url ?? null)\n }\n}\n\n// Bad neighbors are edits in neighbor nodes that make AutoLinks incompatible.\n// Given the creation preconditions, these can only be simple text nodes.\nfunction handleBadNeighbors(\n textNode: TextNode,\n matchers: LinkMatcher[],\n onChange: ChangeHandler,\n): void {\n const previousSibling = textNode.getPreviousSibling()\n const nextSibling = textNode.getNextSibling()\n const text = textNode.getTextContent()\n\n if ($isAutoLinkNode(previousSibling)) {\n const isEmailURI = previousSibling.getFields()?.url\n ? previousSibling.getFields()?.url?.startsWith('mailto:')\n : false\n if (!startsWithSeparator(text) || startsWithTLD(text, isEmailURI)) {\n previousSibling.append(textNode)\n handleLinkEdit(previousSibling, matchers, onChange)\n onChange(null, previousSibling.getFields()?.url ?? null)\n }\n }\n\n if ($isAutoLinkNode(nextSibling) && !endsWithSeparator(text)) {\n replaceWithChildren(nextSibling)\n handleLinkEdit(nextSibling, matchers, onChange)\n onChange(null, nextSibling.getFields()?.url ?? null)\n }\n}\n\nfunction replaceWithChildren(node: ElementNode): LexicalNode[] {\n const children = node.getChildren()\n const childrenLength = children.length\n\n for (let j = childrenLength - 1; j >= 0; j--) {\n node.insertAfter(children[j])\n }\n\n node.remove()\n return children.map((child) => child.getLatest())\n}\n\nfunction getTextNodesToMatch(textNode: TextNode): TextNode[] {\n // check if next siblings are simple text nodes till a node contains a space separator\n const textNodesToMatch = [textNode]\n let nextSibling = textNode.getNextSibling()\n while (nextSibling !== null && $isTextNode(nextSibling) && nextSibling.isSimpleText()) {\n textNodesToMatch.push(nextSibling)\n if (/\\s/.test(nextSibling.getTextContent())) {\n break\n }\n nextSibling = nextSibling.getNextSibling()\n }\n return textNodesToMatch\n}\n\nfunction useAutoLink(\n editor: LexicalEditor,\n matchers: LinkMatcher[],\n onChange?: ChangeHandler,\n): void {\n useEffect(() => {\n if (!editor.hasNodes([AutoLinkNode])) {\n throw new Error('LexicalAutoLinkPlugin: AutoLinkNode not registered on editor')\n }\n\n const onChangeWrapped = (url: null | string, prevUrl: null | string): void => {\n if (onChange != null) {\n onChange(url, prevUrl)\n }\n }\n\n return mergeRegister(\n editor.registerNodeTransform(TextNodeValue, (textNode: TextNode) => {\n const parent = textNode.getParentOrThrow()\n const previous = textNode.getPreviousSibling()\n if ($isAutoLinkNode(parent)) {\n handleLinkEdit(parent, matchers, onChangeWrapped)\n } else if (!$isLinkNode(parent)) {\n if (\n textNode.isSimpleText() &&\n (startsWithSeparator(textNode.getTextContent()) || !$isAutoLinkNode(previous))\n ) {\n const textNodesToMatch = getTextNodesToMatch(textNode)\n $handleLinkCreation(textNodesToMatch, matchers, onChangeWrapped)\n }\n\n handleBadNeighbors(textNode, matchers, onChangeWrapped)\n }\n }),\n )\n }, [editor, matchers, onChange])\n}\n\nconst URL_REGEX =\n /((https?:\\/\\/(www\\.)?)|(www\\.))[-\\w@:%.+~#=]{1,256}\\.[a-zA-Z\\d()]{1,6}\\b([-\\w()@:%+.~#?&/=]*)(?<![-.+():%])/\n\nconst EMAIL_REGEX =\n /(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\])|(([a-z\\-\\d]+\\.)+[a-z]{2,}))/i\n\nconst MATCHERS = [\n createLinkMatcherWithRegExp(URL_REGEX, (text) => {\n return text.startsWith('http') ? text : `https://${text}`\n }),\n createLinkMatcherWithRegExp(EMAIL_REGEX, (text) => {\n return `mailto:${text}`\n }),\n]\n\nexport const AutoLinkPlugin: PluginComponent<ClientProps> = () => {\n const [editor] = useLexicalComposerContext()\n\n useAutoLink(editor, MATCHERS)\n\n return null\n}\n", "'use client'\nimport { ClickableLinkPlugin as LexicalClickableLinkPlugin } from '@lexical/react/LexicalClickableLinkPlugin.js'\nimport React from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\nimport type { ClientProps } from '../../index.js'\n\nexport const ClickableLinkPlugin: PluginComponent<ClientProps> = () => {\n return <LexicalClickableLinkPlugin />\n}\n", "'use client'\nimport type { LexicalCommand } from 'lexical'\n\nimport { createCommand } from 'lexical'\n\nimport type { LinkPayload } from '../types.js'\n\nexport const TOGGLE_LINK_WITH_MODAL_COMMAND: LexicalCommand<LinkPayload | null> = createCommand(\n 'TOGGLE_LINK_WITH_MODAL_COMMAND',\n)\n", "'use client'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\nimport type { ClientProps } from '../../index.js'\n\nimport { LinkEditor } from './LinkEditor/index.js'\nimport './index.scss'\n\nexport const FloatingLinkEditorPlugin: PluginComponentWithAnchor<ClientProps> = (props) => {\n const { anchorElem = document.body } = props\n\n return createPortal(<LinkEditor anchorElem={anchorElem} />, anchorElem)\n}\n", "'use client'\nimport type { LexicalNode } from 'lexical'\nimport type { Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n CloseMenuIcon,\n EditIcon,\n formatDrawerSlug,\n useConfig,\n useEditDepth,\n useModal,\n useTranslation,\n} from '@payloadcms/ui'\nimport {\n $getSelection,\n $isLineBreakNode,\n $isRangeSelection,\n COMMAND_PRIORITY_HIGH,\n COMMAND_PRIORITY_LOW,\n KEY_ESCAPE_COMMAND,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport type { LinkNode } from '../../../../nodes/LinkNode.js'\nimport type { LinkFields } from '../../../../nodes/types.js'\nimport type { LinkPayload } from '../types.js'\n\nimport { useEditorConfigContext } from '../../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { getSelectedNode } from '../../../../../../lexical/utils/getSelectedNode.js'\nimport { setFloatingElemPositionForLinkEditor } from '../../../../../../lexical/utils/setFloatingElemPositionForLinkEditor.js'\nimport { FieldsDrawer } from '../../../../../../utilities/fieldsDrawer/Drawer.js'\nimport { $isAutoLinkNode } from '../../../../nodes/AutoLinkNode.js'\nimport { $createLinkNode, $isLinkNode, TOGGLE_LINK_COMMAND } from '../../../../nodes/LinkNode.js'\nimport { TOGGLE_LINK_WITH_MODAL_COMMAND } from './commands.js'\n\nexport function LinkEditor({ anchorElem }: { anchorElem: HTMLElement }): React.ReactNode {\n const [editor] = useLexicalComposerContext()\n\n const editorRef = useRef<HTMLDivElement | null>(null)\n const [linkUrl, setLinkUrl] = useState(null)\n const [linkLabel, setLinkLabel] = useState(null)\n\n const { uuid } = useEditorConfigContext()\n\n const { config } = useConfig()\n\n const { i18n, t } = useTranslation()\n\n const [stateData, setStateData] = useState<{ id?: string; text: string } & LinkFields>(null)\n\n const { closeModal, toggleModal } = useModal()\n const editDepth = useEditDepth()\n const [isLink, setIsLink] = useState(false)\n const [selectedNodes, setSelectedNodes] = useState<LexicalNode[]>([])\n\n const [isAutoLink, setIsAutoLink] = useState(false)\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-rich-text-link-` + uuid,\n depth: editDepth,\n })\n\n const setNotLink = useCallback(() => {\n setIsLink(false)\n if (editorRef && editorRef.current) {\n editorRef.current.style.opacity = '0'\n editorRef.current.style.transform = 'translate(-10000px, -10000px)'\n }\n setIsAutoLink(false)\n setLinkUrl(null)\n setLinkLabel(null)\n setSelectedNodes([])\n setStateData(null)\n }, [setIsLink, setLinkUrl, setLinkLabel, setSelectedNodes])\n\n const $updateLinkEditor = useCallback(() => {\n const selection = $getSelection()\n let selectedNodeDomRect: DOMRect | undefined = null\n\n if (!$isRangeSelection(selection) || !selection) {\n setNotLink()\n return\n }\n\n // Handle the data displayed in the floating link editor & drawer when you click on a link node\n\n const focusNode = getSelectedNode(selection)\n selectedNodeDomRect = editor.getElementByKey(focusNode.getKey())?.getBoundingClientRect()\n const focusLinkParent: LinkNode = $findMatchingParent(focusNode, $isLinkNode)\n\n // Prevent link modal from showing if selection spans further than the link: https://github.com/facebook/lexical/issues/4064\n const badNode = selection\n .getNodes()\n .filter((node) => !$isLineBreakNode(node))\n .find((node) => {\n const linkNode = $findMatchingParent(node, $isLinkNode)\n return (\n (focusLinkParent && !focusLinkParent.is(linkNode)) ||\n (linkNode && !linkNode.is(focusLinkParent))\n )\n })\n\n if (focusLinkParent == null || badNode) {\n setNotLink()\n return\n }\n\n // Initial state:\n const data: { text: string } & LinkFields = {\n doc: undefined,\n linkType: undefined,\n newTab: undefined,\n url: '',\n ...focusLinkParent.getFields(),\n id: focusLinkParent.getID(),\n text: focusLinkParent.getTextContent(),\n }\n\n if (focusLinkParent.getFields()?.linkType === 'custom') {\n setLinkUrl(focusLinkParent.getFields()?.url ?? null)\n setLinkLabel(null)\n } else {\n // internal link\n setLinkUrl(\n `/admin/collections/${focusLinkParent.getFields()?.doc?.relationTo}/${\n focusLinkParent.getFields()?.doc?.value\n }`,\n )\n\n const relatedField = config.collections.find(\n (coll) => coll.slug === focusLinkParent.getFields()?.doc?.relationTo,\n )\n if (!relatedField) {\n // Usually happens if the user removed all default fields. In this case, we let them specify the label or do not display the label at all.\n // label could be a virtual field the user added. This is useful if they want to use the link feature for things other than links.\n setLinkLabel(\n focusLinkParent.getFields()?.label ? String(focusLinkParent.getFields()?.label) : null,\n )\n setLinkUrl(\n focusLinkParent.getFields()?.url ? String(focusLinkParent.getFields()?.url) : null,\n )\n } else {\n const label = t('fields:linkedTo', {\n label: getTranslation(relatedField.labels.singular, i18n),\n }).replace(/<[^>]*>?/g, '')\n setLinkLabel(label)\n }\n }\n\n setStateData(data)\n setIsLink(true)\n setSelectedNodes(selection ? selection?.getNodes() : [])\n\n if ($isAutoLinkNode(focusLinkParent)) {\n setIsAutoLink(true)\n } else {\n setIsAutoLink(false)\n }\n\n const editorElem = editorRef.current\n const nativeSelection = window.getSelection()\n const { activeElement } = document\n\n if (editorElem === null) {\n return\n }\n\n const rootElement = editor.getRootElement()\n\n if (\n nativeSelection !== null &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n if (!selectedNodeDomRect) {\n // Get the DOM rect of the selected node using the native selection. This sometimes produces the wrong\n // result, which is why we use lexical's selection preferably.\n selectedNodeDomRect = nativeSelection.getRangeAt(0).getBoundingClientRect()\n }\n\n if (selectedNodeDomRect != null) {\n selectedNodeDomRect.y += 40\n setFloatingElemPositionForLinkEditor(selectedNodeDomRect, editorElem, anchorElem)\n }\n } else if (activeElement == null || activeElement.className !== 'link-input') {\n if (rootElement !== null) {\n setFloatingElemPositionForLinkEditor(null, editorElem, anchorElem)\n }\n setLinkUrl(null)\n setLinkLabel(null)\n }\n\n return true\n }, [editor, setNotLink, config.collections, t, i18n, anchorElem])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n TOGGLE_LINK_WITH_MODAL_COMMAND,\n (payload: LinkPayload) => {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, payload)\n\n // Now, open the modal\n $updateLinkEditor()\n toggleModal(drawerSlug)\n\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, $updateLinkEditor, toggleModal, drawerSlug])\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement\n\n const update = (): void => {\n editor.getEditorState().read(() => {\n void $updateLinkEditor()\n })\n }\n\n window.addEventListener('resize', update)\n\n if (scrollerElem != null) {\n scrollerElem.addEventListener('scroll', update)\n }\n\n return () => {\n window.removeEventListener('resize', update)\n\n if (scrollerElem != null) {\n scrollerElem.removeEventListener('scroll', update)\n }\n }\n }, [anchorElem.parentElement, editor, $updateLinkEditor])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n void $updateLinkEditor()\n })\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n void $updateLinkEditor()\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ESCAPE_COMMAND,\n () => {\n if (isLink) {\n setNotLink()\n\n return true\n }\n return false\n },\n COMMAND_PRIORITY_HIGH,\n ),\n )\n }, [editor, $updateLinkEditor, isLink, setNotLink])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n void $updateLinkEditor()\n })\n }, [editor, $updateLinkEditor])\n\n return (\n <React.Fragment>\n <div className=\"link-editor\" ref={editorRef}>\n <div className=\"link-input\">\n {linkUrl && linkUrl.length > 0 ? (\n <a href={linkUrl} rel=\"noopener noreferrer\" target=\"_blank\">\n {linkLabel != null && linkLabel.length > 0 ? linkLabel : linkUrl}\n </a>\n ) : linkLabel != null && linkLabel.length > 0 ? (\n <span className=\"link-input__label-pure\">{linkLabel}</span>\n ) : null}\n\n {editor.isEditable() && (\n <React.Fragment>\n <button\n aria-label=\"Edit link\"\n className=\"link-edit\"\n onClick={() => {\n toggleModal(drawerSlug)\n }}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n tabIndex={0}\n type=\"button\"\n >\n <EditIcon />\n </button>\n {!isAutoLink && (\n <button\n aria-label=\"Remove link\"\n className=\"link-trash\"\n onClick={() => {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null)\n }}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n tabIndex={0}\n type=\"button\"\n >\n <CloseMenuIcon />\n </button>\n )}\n </React.Fragment>\n )}\n </div>\n </div>\n <FieldsDrawer\n className=\"lexical-link-edit-drawer\"\n data={stateData}\n drawerSlug={drawerSlug}\n drawerTitle={t('fields:editLink')}\n featureKey=\"link\"\n handleDrawerSubmit={(fields: FormState, data: Data) => {\n closeModal(drawerSlug)\n\n const newLinkPayload = data as { text: string } & LinkFields\n\n const bareLinkFields: LinkFields = {\n ...newLinkPayload,\n }\n delete bareLinkFields.text\n\n // See: https://github.com/facebook/lexical/pull/5536. This updates autolink nodes to link nodes whenever a change was made (which is good!).\n editor.update(() => {\n const selection = $getSelection()\n let linkParent = null\n if ($isRangeSelection(selection)) {\n linkParent = getSelectedNode(selection).getParent()\n } else {\n if (selectedNodes.length) {\n linkParent = selectedNodes[0].getParent()\n }\n }\n\n if (linkParent && $isAutoLinkNode(linkParent)) {\n const linkNode = $createLinkNode({\n fields: bareLinkFields,\n })\n linkParent.replace(linkNode, true)\n }\n })\n\n // Needs to happen AFTER a potential auto link => link node conversion, as otherwise, the updated text to display may be lost due to\n // it being applied to the auto link node instead of the link node.\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, {\n fields: bareLinkFields,\n selectedNodes,\n text: newLinkPayload.text,\n })\n }}\n schemaPathSuffix=\"fields\"\n />\n </React.Fragment>\n )\n}\n", "'use client'\nconst VERTICAL_GAP = 10\nconst HORIZONTAL_OFFSET = 5\n\nexport function setFloatingElemPositionForLinkEditor(\n targetRect: DOMRect | null,\n floatingElem: HTMLElement,\n anchorElem: HTMLElement,\n verticalGap: number = VERTICAL_GAP,\n horizontalOffset: number = HORIZONTAL_OFFSET,\n): void {\n const scrollerElem = anchorElem.parentElement\n\n if (targetRect === null || scrollerElem == null) {\n floatingElem.style.opacity = '0'\n floatingElem.style.transform = 'translate(-10000px, -10000px)'\n return\n }\n\n const floatingElemRect = floatingElem.getBoundingClientRect()\n const anchorElementRect = anchorElem.getBoundingClientRect()\n const editorScrollerRect = scrollerElem.getBoundingClientRect()\n\n let top = targetRect.top - verticalGap\n let left = targetRect.left - horizontalOffset\n\n if (top < editorScrollerRect.top) {\n top += floatingElemRect.height + targetRect.height + verticalGap * 2\n }\n\n if (left + floatingElemRect.width > editorScrollerRect.right) {\n left = editorScrollerRect.right - floatingElemRect.width - horizontalOffset\n }\n\n top -= anchorElementRect.top\n left -= anchorElementRect.left\n\n floatingElem.style.opacity = '1'\n floatingElem.style.transform = `translate(${left}px, ${top}px)`\n}\n", "'use client'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isElementNode,\n $isRangeSelection,\n COMMAND_PRIORITY_LOW,\n PASTE_COMMAND,\n} from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\nimport type { LinkFields } from '../../../nodes/types.js'\nimport type { ClientProps } from '../../index.js'\nimport type { LinkPayload } from '../floatingLinkEditor/types.js'\n\nimport { validateUrl } from '../../../../../lexical/utils/url.js'\nimport { $toggleLink, LinkNode, TOGGLE_LINK_COMMAND } from '../../../nodes/LinkNode.js'\n\nexport const LinkPlugin: PluginComponent<ClientProps> = () => {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n if (!editor.hasNodes([LinkNode])) {\n throw new Error('LinkPlugin: LinkNode not registered on editor')\n }\n return mergeRegister(\n editor.registerCommand(\n TOGGLE_LINK_COMMAND,\n (payload: LinkPayload) => {\n $toggleLink(payload)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n PASTE_COMMAND,\n (event) => {\n const selection = $getSelection()\n if (\n !$isRangeSelection(selection) ||\n selection.isCollapsed() ||\n !(event instanceof ClipboardEvent) ||\n event.clipboardData == null\n ) {\n return false\n }\n const clipboardText = event.clipboardData.getData('text')\n if (!validateUrl(clipboardText)) {\n return false\n }\n // If we select nodes that are elements then avoid applying the link.\n if (!selection.getNodes().some((node) => $isElementNode(node))) {\n const linkFields: LinkFields = {\n doc: null,\n linkType: 'custom',\n newTab: false,\n url: clipboardText,\n }\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, {\n fields: linkFields,\n text: null,\n })\n event.preventDefault()\n return true\n }\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor])\n\n return null\n}\n", "export function sanitizeUrl(url: string): string {\n /** A pattern that matches safe URLs. */\n const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^&:/?#]*(?:[/?#]|$))/gi\n\n /** A pattern that matches safe data URLs. */\n const DATA_URL_PATTERN =\n /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z\\d+/]+=*$/i\n\n url = String(url).trim()\n\n if (url.match(SAFE_URL_PATTERN) != null || url.match(DATA_URL_PATTERN) != null) return url\n\n return 'https://'\n}\n\n// Source: https://stackoverflow.com/a/8234912/2013580\nconst absoluteRegExp =\n /(?:[A-Za-z]{3,9}:(?:\\/\\/)?(?:[-;:&=+$,\\w]+@)?[A-Za-z\\d.-]+|(?:www.|[-;:&=+$,\\w]+@)[A-Za-z\\d.-]+)(?:\\/[+~%/.\\w-]*)?\\??[-+=&;%@.\\w]*#?\\w*/\n\n/**\n * This regex checks for relative URLs starting with / or anchor links starting with # in a string. Tested for the following use cases:\n * - /privacy-policy\n * - /privacy-policy#primary-terms\n * - #primary-terms\n * */\nconst relativeOrAnchorRegExp = /^[\\w\\-./]*(?:#\\w[\\w-]*)?$/\n\n// Do not keep validateUrl function too loose. This is run when pasting in text, to determine if links are in that text and if it should create AutoLinkNodes.\n// This is why we do not allow stuff like anchors here, as we don't want copied anchors to be turned into AutoLinkNodes.\nexport function validateUrl(url: string): boolean {\n // TODO Fix UI for link insertion; it should never default to an invalid URL such as https://.\n // Maybe show a dialog where they user can type the URL before inserting it.\n\n if (!url) return false\n\n if (url === 'https://') return true\n\n // This makes sure URLs starting with www. instead of https are valid too\n if (absoluteRegExp.test(url)) return true\n\n // Check relative or anchor links\n if (relativeOrAnchorRegExp.test(url)) return true\n\n // While this doesn't allow URLs starting with www (which is why we use the regex above), it does properly handle tel: URLs\n try {\n new URL(url)\n return true\n } catch {\n /* empty */\n }\n\n return false\n}\n", "'use client'\nimport { $isListNode, INSERT_CHECK_LIST_COMMAND, ListItemNode, ListNode } from '@lexical/list'\nimport { $isRangeSelection } from 'lexical'\n\nimport type { ToolbarGroup } from '../../../toolbars/types.js'\nimport type { ClientFeature } from '../../../typesClient.js'\n\nimport { ChecklistIcon } from '../../../../lexical/ui/icons/Checklist/index.js'\nimport { createClientFeature } from '../../../../utilities/createClientFeature.js'\nimport { toolbarTextDropdownGroupWithItems } from '../../../shared/toolbar/textDropdownGroup.js'\nimport { LexicalListPlugin } from '../../plugin/index.js'\nimport { slashMenuListGroupWithItems } from '../../shared/slashMenuListGroup.js'\nimport { CHECK_LIST } from '../markdownTransformers.js'\nimport { LexicalCheckListPlugin } from './plugin/index.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarTextDropdownGroupWithItems([\n {\n ChildComponent: ChecklistIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isListNode(node) && node.getListType() === 'check') {\n continue\n }\n\n const parent = node.getParent()\n\n if ($isListNode(parent) && parent.getListType() === 'check') {\n continue\n }\n\n const parentParent = parent?.getParent()\n // Example scenario: Node = textNode, parent = listItemNode, parentParent = listNode\n if ($isListNode(parentParent) && parentParent.getListType() === 'check') {\n continue\n }\n\n return false\n }\n return true\n },\n key: 'checklist',\n label: ({ i18n }) => {\n return i18n.t('lexical:checklist:label')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_CHECK_LIST_COMMAND, undefined)\n },\n order: 12,\n },\n ]),\n]\n\nexport const ChecklistFeatureClient = createClientFeature(({ featureProviderMap }) => {\n const plugins: ClientFeature<undefined>['plugins'] = [\n {\n Component: LexicalCheckListPlugin,\n position: 'normal',\n },\n ]\n\n if (!featureProviderMap.has('unorderedList') && !featureProviderMap.has('orderedList')) {\n plugins.push({\n Component: LexicalListPlugin,\n position: 'normal',\n })\n }\n\n return {\n markdownTransformers: [CHECK_LIST],\n nodes:\n featureProviderMap.has('unorderedList') || featureProviderMap.has('orderedList')\n ? []\n : [ListNode, ListItemNode],\n plugins,\n slashMenu: {\n groups: [\n slashMenuListGroupWithItems([\n {\n Icon: ChecklistIcon,\n key: 'checklist',\n keywords: ['check list', 'check', 'checklist', 'cl'],\n label: ({ i18n }) => {\n return i18n.t('lexical:checklist:label')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_CHECK_LIST_COMMAND, undefined)\n },\n },\n ]),\n ],\n },\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n }\n})\n", "'use client'\nimport React from 'react'\n\nexport const ChecklistIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect height=\"13\" rx=\"1.5\" stroke=\"currentColor\" width=\"13\" x=\"3.5\" y=\"3.5\" />\n <path d=\"M7 10L9 12.5L13 7.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n)\n", "'use client'\nimport type {\n SerializedListItemNode as _SerializedListItemNode,\n SerializedListNode as _SerializedListNode,\n} from '@lexical/list'\nimport type { Spread } from 'lexical'\n\nimport { ListPlugin } from '@lexical/react/LexicalListPlugin.js'\nimport React from 'react'\n\nimport type { PluginComponent } from '../../typesClient.js'\n\nexport type SerializedListItemNode = Spread<\n {\n checked?: boolean\n type: 'listitem'\n },\n _SerializedListItemNode\n>\n\nexport type SerializedListNode = Spread<\n {\n checked?: boolean\n type: 'list'\n },\n _SerializedListNode\n>\n\nexport const LexicalListPlugin: PluginComponent<undefined> = () => {\n return <ListPlugin />\n}\n", "import type {\n SlashMenuGroup,\n SlashMenuItem,\n} from '../../../lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js'\n\nexport function slashMenuListGroupWithItems(items: SlashMenuItem[]): SlashMenuGroup {\n return {\n items,\n key: 'lists',\n label: ({ i18n }) => {\n return i18n.t('lexical:general:slashMenuListGroupLabel')\n },\n }\n}\n", "import type { ElementTransformer } from '@lexical/markdown'\n\nimport { $isListNode, ListItemNode, ListNode } from '@lexical/list'\n\nimport { listExport, listReplace } from '../shared/markdown.js'\n\nexport const CHECK_LIST: ElementTransformer = {\n type: 'element',\n dependencies: [ListNode, ListItemNode],\n export: (node, exportChildren) => {\n return $isListNode(node) ? listExport(node, exportChildren, 0) : null\n },\n regExp: /^(\\s*)(?:-\\s)?\\s?(\\[(\\s|x)?\\])\\s/i,\n replace: listReplace('check'),\n}\n", "// Copied from https://github.com/facebook/lexical/blob/176b8cf16ecb332ee5efe2c75219e223b7b019f2/packages/lexical-markdown/src/MarkdownTransformers.ts#L97C1-L172C1\n\nimport type { ListNode, ListType } from '@lexical/list'\nimport type { ElementTransformer } from '@lexical/markdown'\nimport type { ElementNode } from 'lexical'\n\nimport { $createListItemNode, $createListNode, $isListItemNode, $isListNode } from '@lexical/list'\n\n// Amount of spaces that define indentation level\nconst LIST_INDENT_SIZE = 4\n\nexport const listReplace = (listType: ListType): ElementTransformer['replace'] => {\n return (parentNode, children, match) => {\n const previousNode = parentNode.getPreviousSibling()\n const nextNode = parentNode.getNextSibling()\n const listItem = $createListItemNode(listType === 'check' ? match[3] === 'x' : undefined)\n if ($isListNode(nextNode) && nextNode.getListType() === listType) {\n const firstChild = nextNode.getFirstChild()\n if (firstChild !== null) {\n firstChild.insertBefore(listItem)\n } else {\n // should never happen, but let's handle gracefully, just in case.\n nextNode.append(listItem)\n }\n parentNode.remove()\n } else if ($isListNode(previousNode) && previousNode.getListType() === listType) {\n previousNode.append(listItem)\n parentNode.remove()\n } else {\n const list = $createListNode(listType, listType === 'number' ? Number(match[2]) : undefined)\n list.append(listItem)\n parentNode.replace(list)\n }\n listItem.append(...children)\n listItem.select(0, 0)\n const indent = Math.floor(match[1].length / LIST_INDENT_SIZE)\n if (indent) {\n listItem.setIndent(indent)\n }\n }\n}\n\nexport const listExport = (\n listNode: ListNode,\n exportChildren: (node: ElementNode) => string,\n depth: number,\n): string => {\n const output = []\n const children = listNode.getChildren()\n let index = 0\n for (const listItemNode of children) {\n if ($isListItemNode(listItemNode)) {\n if (listItemNode.getChildrenSize() === 1) {\n const firstChild = listItemNode.getFirstChild()\n if ($isListNode(firstChild)) {\n output.push(listExport(firstChild, exportChildren, depth + 1))\n continue\n }\n }\n const indent = ' '.repeat(depth * LIST_INDENT_SIZE)\n const listType = listNode.getListType()\n const prefix =\n listType === 'number'\n ? `${listNode.getStart() + index}. `\n : listType === 'check'\n ? `- [${listItemNode.getChecked() ? 'x' : ' '}] `\n : '- '\n output.push(indent + prefix + exportChildren(listItemNode))\n index++\n }\n }\n\n return output.join('\\n')\n}\n", "'use client'\nimport { CheckListPlugin } from '@lexical/react/LexicalCheckListPlugin.js'\nimport React from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nexport const LexicalCheckListPlugin: PluginComponent<undefined> = () => {\n return <CheckListPlugin />\n}\n", "'use client'\nimport { $isListNode, INSERT_ORDERED_LIST_COMMAND, ListItemNode, ListNode } from '@lexical/list'\nimport { $isRangeSelection } from 'lexical'\n\nimport type { ToolbarGroup } from '../../../toolbars/types.js'\n\nimport { OrderedListIcon } from '../../../../lexical/ui/icons/OrderedList/index.js'\nimport { createClientFeature } from '../../../../utilities/createClientFeature.js'\nimport { toolbarTextDropdownGroupWithItems } from '../../../shared/toolbar/textDropdownGroup.js'\nimport { LexicalListPlugin } from '../../plugin/index.js'\nimport { slashMenuListGroupWithItems } from '../../shared/slashMenuListGroup.js'\nimport { ORDERED_LIST } from '../markdownTransformer.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarTextDropdownGroupWithItems([\n {\n ChildComponent: OrderedListIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isListNode(node) && node.getListType() === 'number') {\n continue\n }\n\n const parent = node.getParent()\n\n if ($isListNode(parent) && parent.getListType() === 'number') {\n continue\n }\n\n const parentParent = parent?.getParent()\n // Example scenario: Node = textNode, parent = listItemNode, parentParent = listNode\n if ($isListNode(parentParent) && parentParent.getListType() === 'number') {\n continue\n }\n\n return false\n }\n return true\n },\n key: 'orderedList',\n label: ({ i18n }) => {\n return i18n.t('lexical:orderedList:label')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined)\n },\n order: 10,\n },\n ]),\n]\n\nexport const OrderedListFeatureClient = createClientFeature(({ featureProviderMap }) => {\n return {\n markdownTransformers: [ORDERED_LIST],\n nodes: featureProviderMap.has('orderedList') ? [] : [ListNode, ListItemNode],\n plugins: featureProviderMap.has('orderedList')\n ? []\n : [\n {\n Component: LexicalListPlugin,\n position: 'normal',\n },\n ],\n slashMenu: {\n groups: [\n slashMenuListGroupWithItems([\n {\n Icon: OrderedListIcon,\n key: 'orderedList',\n keywords: ['ordered list', 'ol'],\n label: ({ i18n }) => {\n return i18n.t('lexical:orderedList:label')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined)\n },\n },\n ]),\n ],\n },\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n }\n})\n", "'use client'\nimport React from 'react'\n\nexport const OrderedListIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.89284 12.479C5.89284 13.368 5.26284 13.788 4.38084 14.236C3.75084 14.558 3.43584 14.789 3.40784 15.062H5.89984V16H2.06384V15.573C2.06384 14.523 2.92484 13.935 3.66684 13.501C4.38084 13.088 4.75184 12.878 4.75184 12.458C4.75184 12.08 4.52084 11.835 4.06584 11.835C3.58984 11.835 3.30984 12.199 3.28184 12.654H2.11284C2.18984 11.681 2.87584 10.918 4.07284 10.918C5.15784 10.918 5.89284 11.555 5.89284 12.479Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M2.68608 4.535V3.737C3.54008 3.737 3.90408 3.513 4.02308 2.995H4.89108V8H3.68008L3.68008 4.535H2.68608Z\"\n fill=\"currentColor\"\n />\n <path d=\"M8 15L17 15\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M8 10L17 10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M8 5L17 5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n)\n", "import type { ElementTransformer } from '@lexical/markdown'\n\nimport { $isListNode, ListItemNode, ListNode } from '@lexical/list'\n\nimport { listExport, listReplace } from '../shared/markdown.js'\n\nexport const ORDERED_LIST: ElementTransformer = {\n type: 'element',\n dependencies: [ListNode, ListItemNode],\n export: (node, exportChildren) => {\n return $isListNode(node) ? listExport(node, exportChildren, 0) : null\n },\n regExp: /^(\\s*)(\\d+)\\.\\s/,\n replace: listReplace('number'),\n}\n", "'use client'\n\nimport { $isListNode, INSERT_UNORDERED_LIST_COMMAND, ListItemNode, ListNode } from '@lexical/list'\nimport { $isRangeSelection } from 'lexical'\n\nimport type { ToolbarGroup } from '../../../toolbars/types.js'\n\nimport { UnorderedListIcon } from '../../../../lexical/ui/icons/UnorderedList/index.js'\nimport { createClientFeature } from '../../../../utilities/createClientFeature.js'\nimport { toolbarTextDropdownGroupWithItems } from '../../../shared/toolbar/textDropdownGroup.js'\nimport { LexicalListPlugin } from '../../plugin/index.js'\nimport { slashMenuListGroupWithItems } from '../../shared/slashMenuListGroup.js'\nimport { UNORDERED_LIST } from '../markdownTransformer.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarTextDropdownGroupWithItems([\n {\n ChildComponent: UnorderedListIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isListNode(node) && node.getListType() === 'bullet') {\n continue\n }\n\n const parent = node.getParent()\n\n if ($isListNode(parent) && parent.getListType() === 'bullet') {\n continue\n }\n\n const parentParent = parent?.getParent()\n // Example scenario: Node = textNode, parent = listItemNode, parentParent = listNode\n if ($isListNode(parentParent) && parentParent.getListType() === 'bullet') {\n continue\n }\n\n return false\n }\n return true\n },\n key: 'unorderedList',\n label: ({ i18n }) => {\n return i18n.t('lexical:unorderedList:label')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined)\n },\n order: 11,\n },\n ]),\n]\n\nexport const UnorderedListFeatureClient = createClientFeature({\n markdownTransformers: [UNORDERED_LIST],\n nodes: [ListNode, ListItemNode],\n plugins: [\n {\n Component: LexicalListPlugin,\n position: 'normal',\n },\n ],\n slashMenu: {\n groups: [\n slashMenuListGroupWithItems([\n {\n Icon: UnorderedListIcon,\n key: 'unorderedList',\n keywords: ['unordered list', 'ul'],\n label: ({ i18n }) => {\n return i18n.t('lexical:unorderedList:label')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined)\n },\n },\n ]),\n ],\n },\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const UnorderedListIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"4\" cy=\"5\" fill=\"currentColor\" r=\"1.15\" stroke=\"currentColor\" strokeWidth=\"0.3\" />\n <circle cx=\"4\" cy=\"10\" fill=\"currentColor\" r=\"1.15\" stroke=\"currentColor\" strokeWidth=\"0.3\" />\n <circle cx=\"4\" cy=\"15\" fill=\"currentColor\" r=\"1.15\" stroke=\"currentColor\" strokeWidth=\"0.3\" />\n <path d=\"M17 5H7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M17 10H7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M17 15H7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n)\n", "import type { ElementTransformer } from '@lexical/markdown'\n\nimport { $isListNode, ListItemNode, ListNode } from '@lexical/list'\n\nimport { listExport, listReplace } from '../shared/markdown.js'\n\nexport const UNORDERED_LIST: ElementTransformer = {\n type: 'element',\n dependencies: [ListNode, ListItemNode],\n export: (node, exportChildren) => {\n return $isListNode(node) ? listExport(node, exportChildren, 0) : null\n },\n regExp: /^(\\s*)[-*+]\\s/,\n replace: listReplace('bullet'),\n}\n", "import type { EditorConfig, LexicalNode, NodeKey, SerializedLexicalNode, Spread } from 'lexical'\nimport type { JSX } from 'react'\n\nimport { addClassNamesToElement } from '@lexical/utils'\nimport { DecoratorNode } from 'lexical'\nimport * as React from 'react'\n\nexport type UnknownConvertedNodeData = {\n nodeData: unknown\n nodeType: string\n}\n\nexport type SerializedUnknownConvertedNode = Spread<\n {\n data: UnknownConvertedNodeData\n },\n SerializedLexicalNode\n>\n\nconst Component = React.lazy(() =>\n import('./Component.js').then((module) => ({\n default: module.UnknownConvertedNodeComponent,\n })),\n)\n\n/** @noInheritDoc */\nexport class UnknownConvertedNode extends DecoratorNode<JSX.Element> {\n __data: UnknownConvertedNodeData\n\n constructor({ data, key }: { data: UnknownConvertedNodeData; key?: NodeKey }) {\n super(key)\n this.__data = data\n }\n\n static clone(node: UnknownConvertedNode): UnknownConvertedNode {\n return new UnknownConvertedNode({\n data: node.__data,\n key: node.__key,\n })\n }\n\n static getType(): string {\n return 'unknownConverted'\n }\n\n static importJSON(serializedNode: SerializedUnknownConvertedNode): UnknownConvertedNode {\n const node = $createUnknownConvertedNode({ data: serializedNode.data })\n return node\n }\n\n canInsertTextAfter(): true {\n return true\n }\n\n canInsertTextBefore(): true {\n return true\n }\n\n createDOM(config: EditorConfig): HTMLElement {\n const element = document.createElement('span')\n addClassNamesToElement(element, 'unknownConverted')\n return element\n }\n\n decorate(): JSX.Element | null {\n return <Component data={this.__data} />\n }\n\n exportJSON(): SerializedUnknownConvertedNode {\n return {\n type: this.getType(),\n data: this.__data,\n version: 1,\n }\n }\n\n // Mutation\n\n isInline(): boolean {\n return true\n }\n\n updateDOM(prevNode: UnknownConvertedNode, dom: HTMLElement): boolean {\n return false\n }\n}\n\nexport function $createUnknownConvertedNode({\n data,\n}: {\n data: UnknownConvertedNodeData\n}): UnknownConvertedNode {\n return new UnknownConvertedNode({\n data,\n })\n}\n\nexport function $isUnknownConvertedNode(\n node: LexicalNode | null | undefined,\n): node is UnknownConvertedNode {\n return node instanceof UnknownConvertedNode\n}\n", "'use client'\n\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { UnknownConvertedNode } from './nodes/unknownConvertedNode/index.js'\n\nexport const LexicalPluginToLexicalFeatureClient = createClientFeature(() => {\n return {\n nodes: [UnknownConvertedNode],\n }\n})\n", "import type { EditorConfig, LexicalNode, NodeKey, SerializedLexicalNode, Spread } from 'lexical'\nimport type { JSX } from 'react'\n\nimport { addClassNamesToElement } from '@lexical/utils'\nimport { DecoratorNode } from 'lexical'\nimport * as React from 'react'\n\nexport type UnknownConvertedNodeData = {\n nodeData: unknown\n nodeType: string\n}\n\nexport type SerializedUnknownConvertedNode = Spread<\n {\n data: UnknownConvertedNodeData\n },\n SerializedLexicalNode\n>\n\nconst Component = React.lazy(() =>\n import('./Component.js').then((module) => ({\n default: module.UnknownConvertedNodeComponent,\n })),\n)\n\n/** @noInheritDoc */\nexport class UnknownConvertedNode extends DecoratorNode<JSX.Element> {\n __data: UnknownConvertedNodeData\n\n constructor({ data, key }: { data: UnknownConvertedNodeData; key?: NodeKey }) {\n super(key)\n this.__data = data\n }\n\n static clone(node: UnknownConvertedNode): UnknownConvertedNode {\n return new UnknownConvertedNode({\n data: node.__data,\n key: node.__key,\n })\n }\n\n static getType(): string {\n return 'unknownConverted'\n }\n\n static importJSON(serializedNode: SerializedUnknownConvertedNode): UnknownConvertedNode {\n const node = $createUnknownConvertedNode({ data: serializedNode.data })\n return node\n }\n\n canInsertTextAfter(): true {\n return true\n }\n\n canInsertTextBefore(): true {\n return true\n }\n\n createDOM(config: EditorConfig): HTMLElement {\n const element = document.createElement('span')\n addClassNamesToElement(element, 'unknownConverted')\n return element\n }\n\n decorate(): JSX.Element | null {\n return <Component data={this.__data} />\n }\n\n exportJSON(): SerializedUnknownConvertedNode {\n return {\n type: this.getType(),\n data: this.__data,\n version: 1,\n }\n }\n\n // Mutation\n\n isInline(): boolean {\n return true\n }\n\n updateDOM(prevNode: UnknownConvertedNode, dom: HTMLElement): boolean {\n return false\n }\n}\n\nexport function $createUnknownConvertedNode({\n data,\n}: {\n data: UnknownConvertedNodeData\n}): UnknownConvertedNode {\n return new UnknownConvertedNode({\n data,\n })\n}\n\nexport function $isUnknownConvertedNode(\n node: LexicalNode | null | undefined,\n): node is UnknownConvertedNode {\n return node instanceof UnknownConvertedNode\n}\n", "'use client'\n\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { UnknownConvertedNode } from './nodes/unknownConvertedNode/index.js'\n\nexport const SlateToLexicalFeatureClient = createClientFeature(({ clientFunctions }) => {\n return {\n nodes: [UnknownConvertedNode],\n }\n})\n", "'use client'\n\nimport { $setBlocksType } from '@lexical/selection'\nimport { $createParagraphNode, $getSelection, $isParagraphNode, $isRangeSelection } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { TextIcon } from '../../../lexical/ui/icons/Text/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { slashMenuBasicGroupWithItems } from '../../shared/slashMenu/basicGroup.js'\nimport { toolbarTextDropdownGroupWithItems } from '../../shared/toolbar/textDropdownGroup.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarTextDropdownGroupWithItems([\n {\n ChildComponent: TextIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if (!$isParagraphNode(node) && !$isParagraphNode(node.getParent())) {\n return false\n }\n }\n return true\n },\n key: 'paragraph',\n label: ({ i18n }) => {\n return i18n.t('lexical:paragraph:label2')\n },\n onSelect: ({ editor }) => {\n editor.update(() => {\n const selection = $getSelection()\n $setBlocksType(selection, () => $createParagraphNode())\n })\n },\n order: 1,\n },\n ]),\n]\n\nexport const ParagraphFeatureClient = createClientFeature({\n slashMenu: {\n groups: [\n slashMenuBasicGroupWithItems([\n {\n Icon: TextIcon,\n key: 'paragraph',\n keywords: ['normal', 'paragraph', 'p', 'text'],\n label: ({ i18n }) => {\n return i18n.t('lexical:paragraph:label')\n },\n onSelect: ({ editor }) => {\n editor.update(() => {\n const selection = $getSelection()\n $setBlocksType(selection, () => $createParagraphNode())\n })\n },\n },\n ]),\n ],\n },\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\n\nimport { $isNodeSelection } from 'lexical'\n\nimport type { RelationshipFeatureProps } from '../server/index.js'\n\nimport { RelationshipIcon } from '../../../lexical/ui/icons/Relationship/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { slashMenuBasicGroupWithItems } from '../../shared/slashMenu/basicGroup.js'\nimport { toolbarAddDropdownGroupWithItems } from '../../shared/toolbar/addDropdownGroup.js'\nimport { INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND } from './drawer/commands.js'\nimport { $isRelationshipNode, RelationshipNode } from './nodes/RelationshipNode.js'\nimport { RelationshipPlugin } from './plugins/index.js'\n\nexport const RelationshipFeatureClient = createClientFeature<RelationshipFeatureProps>({\n nodes: [RelationshipNode],\n plugins: [\n {\n Component: RelationshipPlugin,\n position: 'normal',\n },\n ],\n slashMenu: {\n groups: [\n slashMenuBasicGroupWithItems([\n {\n Icon: RelationshipIcon,\n key: 'relationship',\n keywords: ['relationship', 'relation', 'rel'],\n label: ({ i18n }) => {\n return i18n.t('lexical:relationship:label')\n },\n onSelect: ({ editor }) => {\n // dispatch INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND\n editor.dispatchCommand(INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND, {\n replace: false,\n })\n },\n },\n ]),\n ],\n },\n toolbarFixed: {\n groups: [\n toolbarAddDropdownGroupWithItems([\n {\n ChildComponent: RelationshipIcon,\n isActive: ({ selection }) => {\n if (!$isNodeSelection(selection) || !selection.getNodes().length) {\n return false\n }\n\n const firstNode = selection.getNodes()[0]\n return $isRelationshipNode(firstNode)\n },\n key: 'relationship',\n label: ({ i18n }) => {\n return i18n.t('lexical:relationship:label')\n },\n onSelect: ({ editor }) => {\n // dispatch INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND\n editor.dispatchCommand(INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND, {\n replace: false,\n })\n },\n },\n ]),\n ],\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const RelationshipIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_4397_10817)\">\n <path\n d=\"M7.75 12.25L15.25 4.75M15.25 4.75H11.5M15.25 4.75V8.5M13 11.5V13.75C13 14.5784 12.3284 15.25 11.5 15.25H6.25C5.42157 15.25 4.75 14.5784 4.75 13.75V8.5C4.75 7.67157 5.42157 7 6.25 7H8.5\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_4397_10817\">\n <rect fill=\"currentColor\" height=\"12\" transform=\"translate(4 4)\" width=\"12\" />\n </clipPath>\n </defs>\n </svg>\n)\n", "'use client'\nimport type { LexicalCommand } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $insertNodeToNearestRoot } from '@lexical/utils'\nimport { useConfig } from '@payloadcms/ui'\nimport {\n $getPreviousSelection,\n $getSelection,\n $isParagraphNode,\n $isRangeSelection,\n COMMAND_PRIORITY_EDITOR,\n createCommand,\n} from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../../typesClient.js'\nimport type { RelationshipFeatureProps } from '../../server/index.js'\nimport type { RelationshipData } from '../../server/nodes/RelationshipNode.js'\n\nimport { RelationshipDrawer } from '../drawer/index.js'\nimport { $createRelationshipNode, RelationshipNode } from '../nodes/RelationshipNode.js'\n\nexport const INSERT_RELATIONSHIP_COMMAND: LexicalCommand<RelationshipData> = createCommand(\n 'INSERT_RELATIONSHIP_COMMAND',\n)\n\nexport const RelationshipPlugin: PluginComponent<RelationshipFeatureProps> = ({ clientProps }) => {\n const [editor] = useLexicalComposerContext()\n const {\n config: { collections },\n } = useConfig()\n\n let enabledRelations: string[] = null\n\n if (clientProps?.enabledCollections) {\n enabledRelations = clientProps?.enabledCollections\n } else if (clientProps?.disabledCollections) {\n enabledRelations = collections\n .filter(({ slug }) => !clientProps?.disabledCollections?.includes(slug))\n .map(({ slug }) => slug)\n }\n\n useEffect(() => {\n if (!editor.hasNodes([RelationshipNode])) {\n throw new Error('RelationshipPlugin: RelationshipNode not registered on editor')\n }\n\n return editor.registerCommand<RelationshipData>(\n INSERT_RELATIONSHIP_COMMAND,\n (payload) => {\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n const relationshipNode = $createRelationshipNode(payload)\n // Insert relationship node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(relationshipNode)\n\n const { focus } = selection\n const focusNode = focus.getNode()\n\n // First, delete currently selected node if it's an empty paragraph and if there are sufficient\n // paragraph nodes (more than 1) left in the parent node, so that we don't \"trap\" the user\n if (\n $isParagraphNode(focusNode) &&\n focusNode.getTextContentSize() === 0 &&\n focusNode\n .getParent()\n .getChildren()\n .filter((node) => $isParagraphNode(node)).length > 1\n ) {\n focusNode.remove()\n }\n }\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n )\n }, [editor])\n\n return <RelationshipDrawer enabledCollectionSlugs={enabledRelations} />\n}\n", "'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useListDrawer } from '@payloadcms/ui'\nimport { $getNodeByKey, COMMAND_PRIORITY_EDITOR } from 'lexical'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { $createRelationshipNode } from '../nodes/RelationshipNode.js'\nimport { INSERT_RELATIONSHIP_COMMAND } from '../plugins/index.js'\nimport { EnabledRelationshipsCondition } from '../utils/EnabledRelationshipsCondition.js'\nimport { INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND } from './commands.js'\n\nconst insertRelationship = ({\n editor,\n relationTo,\n replaceNodeKey,\n value,\n}: {\n editor: LexicalEditor\n relationTo: string\n replaceNodeKey: null | string\n value: number | string\n}) => {\n if (!replaceNodeKey) {\n editor.dispatchCommand(INSERT_RELATIONSHIP_COMMAND, {\n relationTo,\n value,\n })\n } else {\n editor.update(() => {\n const node = $getNodeByKey(replaceNodeKey)\n if (node) {\n node.replace($createRelationshipNode({ relationTo, value }))\n }\n })\n }\n}\n\ntype Props = {\n enabledCollectionSlugs: null | string[]\n}\n\nconst RelationshipDrawerComponent: React.FC<Props> = ({ enabledCollectionSlugs }) => {\n const [editor] = useLexicalComposerContext()\n const [selectedCollectionSlug, setSelectedCollectionSlug] = useState(\n () => enabledCollectionSlugs[0],\n )\n const [replaceNodeKey, setReplaceNodeKey] = useState<null | string>(null)\n\n const [ListDrawer, ListDrawerToggler, { closeDrawer, isDrawerOpen, openDrawer }] = useListDrawer({\n collectionSlugs: enabledCollectionSlugs,\n selectedCollection: selectedCollectionSlug,\n })\n\n useEffect(() => {\n return editor.registerCommand<{\n replace: { nodeKey: string } | false\n }>(\n INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND,\n (payload) => {\n setReplaceNodeKey(payload?.replace ? payload?.replace.nodeKey : null)\n openDrawer()\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n )\n }, [editor, openDrawer])\n\n const onSelect = useCallback(\n ({ collectionSlug, docID }) => {\n insertRelationship({\n editor,\n relationTo: collectionSlug,\n replaceNodeKey,\n value: docID,\n })\n closeDrawer()\n },\n [editor, closeDrawer, replaceNodeKey],\n )\n\n useEffect(() => {\n // always reset back to first option\n // TODO: this is not working, see the ListDrawer component\n setSelectedCollectionSlug(enabledCollectionSlugs[0])\n }, [isDrawerOpen, enabledCollectionSlugs])\n\n return <ListDrawer onSelect={onSelect} />\n}\n\nexport const RelationshipDrawer = (props: Props): React.ReactNode => {\n return props?.enabledCollectionSlugs?.length > 0 ? ( // If enabledCollectionSlugs it overrides what EnabledRelationshipsCondition is doing\n <RelationshipDrawerComponent {...props} />\n ) : (\n <EnabledRelationshipsCondition {...props}>\n <RelationshipDrawerComponent {...props} />\n </EnabledRelationshipsCondition>\n )\n}\n", "'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useScrollInfo, useThrottledEffect, useTranslation } from '@payloadcms/ui'\nimport * as React from 'react'\nimport { useMemo } from 'react'\n\nimport type { EditorConfigContextType } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport type { SanitizedClientEditorConfig } from '../../../../../lexical/config/types.js'\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../../types.js'\nimport type { FixedToolbarFeatureProps } from '../../server/index.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { ToolbarButton } from '../../../shared/ToolbarButton/index.js'\nimport { ToolbarDropdown } from '../../../shared/ToolbarDropdown/index.js'\nimport './index.scss'\n\nfunction ButtonGroupItem({\n anchorElem,\n editor,\n item,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n item: ToolbarGroupItem\n}): React.ReactNode {\n if (item.Component) {\n return (\n item?.Component && (\n <item.Component anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n )\n }\n\n return (\n <ToolbarButton editor={editor} item={item} key={item.key}>\n {item?.ChildComponent && <item.ChildComponent />}\n </ToolbarButton>\n )\n}\n\nfunction ToolbarGroupComponent({\n anchorElem,\n editor,\n editorConfig,\n group,\n index,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n editorConfig: SanitizedClientEditorConfig\n group: ToolbarGroup\n index: number\n}): React.ReactNode {\n const { i18n } = useTranslation()\n const {\n field: { richTextComponentMap },\n } = useEditorConfigContext()\n const [dropdownLabel, setDropdownLabel] = React.useState<null | string>(null)\n const [DropdownIcon, setDropdownIcon] = React.useState<React.FC | null>(null)\n\n React.useEffect(() => {\n if (group?.type === 'dropdown' && group.items.length && group.ChildComponent) {\n setDropdownIcon(() => group.ChildComponent)\n } else {\n setDropdownIcon(null)\n }\n }, [group])\n\n const onActiveChange = ({ activeItems }: { activeItems: ToolbarGroupItem[] }) => {\n if (!activeItems.length) {\n if (group?.type === 'dropdown' && group.items.length && group.ChildComponent) {\n setDropdownIcon(() => group.ChildComponent)\n setDropdownLabel(null)\n } else {\n setDropdownIcon(null)\n setDropdownLabel(null)\n }\n return\n }\n const item = activeItems[0]\n\n let label = item.key\n if (item.label) {\n label =\n typeof item.label === 'function' ? item.label({ i18n, richTextComponentMap }) : item.label\n }\n // Crop title to max. 25 characters\n if (label.length > 25) {\n label = label.substring(0, 25) + '...'\n }\n setDropdownLabel(label)\n setDropdownIcon(() => item.ChildComponent)\n }\n\n return (\n <div className={`fixed-toolbar__group fixed-toolbar__group-${group.key}`} key={group.key}>\n {group.type === 'dropdown' &&\n group.items.length &&\n (DropdownIcon ? (\n <ToolbarDropdown\n Icon={DropdownIcon}\n anchorElem={anchorElem}\n editor={editor}\n groupKey={group.key}\n items={group.items}\n itemsContainerClassNames={['fixed-toolbar__dropdown-items']}\n label={dropdownLabel}\n maxActiveItems={1}\n onActiveChange={onActiveChange}\n />\n ) : (\n <ToolbarDropdown\n anchorElem={anchorElem}\n editor={editor}\n groupKey={group.key}\n items={group.items}\n itemsContainerClassNames={['fixed-toolbar__dropdown-items']}\n label={dropdownLabel}\n maxActiveItems={1}\n onActiveChange={onActiveChange}\n />\n ))}\n {group.type === 'buttons' &&\n group.items.length &&\n group.items.map((item) => {\n return (\n <ButtonGroupItem anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n })}\n {index < editorConfig.features.toolbarFixed?.groups.length - 1 && <div className=\"divider\" />}\n </div>\n )\n}\n\nfunction FixedToolbar({\n anchorElem,\n clientProps,\n editor,\n editorConfig,\n parentWithFixedToolbar,\n}: {\n anchorElem: HTMLElement\n clientProps?: FixedToolbarFeatureProps\n editor: LexicalEditor\n editorConfig: SanitizedClientEditorConfig\n parentWithFixedToolbar: EditorConfigContextType | false\n}): React.ReactNode {\n const currentToolbarRef = React.useRef<HTMLDivElement>(null)\n\n const { y } = useScrollInfo()\n\n // Memoize the parent toolbar element\n const parentToolbarElem = useMemo(() => {\n if (!parentWithFixedToolbar || clientProps?.disableIfParentHasFixedToolbar) {\n return null\n }\n\n const parentEditorElem = parentWithFixedToolbar.editorContainerRef.current\n let sibling = parentEditorElem.previousElementSibling\n while (sibling) {\n if (sibling.classList.contains('fixed-toolbar')) {\n return sibling\n }\n sibling = sibling.previousElementSibling\n }\n return null\n }, [clientProps?.disableIfParentHasFixedToolbar, parentWithFixedToolbar])\n\n useThrottledEffect(\n () => {\n if (!parentToolbarElem) {\n // this also checks for clientProps?.disableIfParentHasFixedToolbar indirectly, see the parentToolbarElem useMemo\n return\n }\n const currentToolbarElem = currentToolbarRef.current\n if (!currentToolbarElem) {\n return\n }\n\n const currentRect = currentToolbarElem.getBoundingClientRect()\n const parentRect = parentToolbarElem.getBoundingClientRect()\n\n // we only need to check for vertical overlap\n const overlapping = !(\n currentRect.bottom < parentRect.top || currentRect.top > parentRect.bottom\n )\n\n if (overlapping) {\n currentToolbarRef.current.className = 'fixed-toolbar fixed-toolbar--overlapping'\n parentToolbarElem.className = 'fixed-toolbar fixed-toolbar--hide'\n } else {\n if (!currentToolbarRef.current.classList.contains('fixed-toolbar--overlapping')) {\n return\n }\n currentToolbarRef.current.className = 'fixed-toolbar'\n parentToolbarElem.className = 'fixed-toolbar'\n }\n },\n 50,\n [currentToolbarRef, parentToolbarElem, y],\n )\n\n return (\n <div\n className=\"fixed-toolbar\"\n onFocus={(event) => {\n // Prevent other focus events being triggered. Otherwise, if this was to be clicked while in a child editor,\n // the parent editor will be focused, and the child editor will lose focus.\n event.stopPropagation()\n }}\n ref={currentToolbarRef}\n >\n {editor.isEditable() && (\n <React.Fragment>\n {editorConfig?.features &&\n editorConfig.features?.toolbarFixed?.groups.map((group, i) => {\n return (\n <ToolbarGroupComponent\n anchorElem={anchorElem}\n editor={editor}\n editorConfig={editorConfig}\n group={group}\n index={i}\n key={group.key}\n />\n )\n })}\n </React.Fragment>\n )}\n </div>\n )\n}\n\nconst getParentEditorWithFixedToolbar = (\n editorConfigContext: EditorConfigContextType,\n): EditorConfigContextType | false => {\n if (editorConfigContext.parentEditor?.editorConfig) {\n if (editorConfigContext.parentEditor?.editorConfig.resolvedFeatureMap.has('toolbarFixed')) {\n return editorConfigContext.parentEditor\n } else {\n if (editorConfigContext.parentEditor) {\n return getParentEditorWithFixedToolbar(editorConfigContext.parentEditor)\n }\n }\n }\n return false\n}\n\nexport const FixedToolbarPlugin: PluginComponentWithAnchor<FixedToolbarFeatureProps> = ({\n anchorElem,\n clientProps,\n}) => {\n const [currentEditor] = useLexicalComposerContext()\n const editorConfigContext = useEditorConfigContext()\n\n const { editorConfig: currentEditorConfig } = editorConfigContext\n\n const editor = clientProps.applyToFocusedEditor\n ? editorConfigContext.focusedEditor?.editor || currentEditor\n : currentEditor\n\n const editorConfig = clientProps.applyToFocusedEditor\n ? editorConfigContext.focusedEditor?.editorConfig || currentEditorConfig\n : currentEditorConfig\n\n const parentWithFixedToolbar = getParentEditorWithFixedToolbar(editorConfigContext)\n\n if (clientProps?.disableIfParentHasFixedToolbar) {\n if (parentWithFixedToolbar) {\n return null\n }\n }\n\n if (!editorConfig?.features?.toolbarFixed?.groups?.length) {\n return null\n }\n\n return (\n <FixedToolbar\n anchorElem={anchorElem}\n editor={editor}\n editorConfig={editorConfig}\n parentWithFixedToolbar={parentWithFixedToolbar}\n />\n )\n}\n", "'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { mergeRegister } from '@lexical/utils'\nimport { $getSelection } from 'lexical'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type { ToolbarGroupItem } from '../../types.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport './index.scss'\n\nconst baseClass = 'toolbar-popup__button'\n\nexport const ToolbarButton = ({\n children,\n editor,\n item,\n}: {\n children: React.JSX.Element\n editor: LexicalEditor\n item: ToolbarGroupItem\n}) => {\n const [enabled, setEnabled] = useState<boolean>(true)\n const [active, setActive] = useState<boolean>(false)\n const [className, setClassName] = useState<string>(baseClass)\n const editorConfigContext = useEditorConfigContext()\n\n const updateStates = useCallback(() => {\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n if (item.isActive) {\n const isActive = item.isActive({ editor, editorConfigContext, selection })\n if (active !== isActive) {\n setActive(isActive)\n }\n }\n if (item.isEnabled) {\n const isEnabled = item.isEnabled({ editor, editorConfigContext, selection })\n if (enabled !== isEnabled) {\n setEnabled(isEnabled)\n }\n }\n })\n }, [active, editor, editorConfigContext, enabled, item])\n\n useEffect(() => {\n updateStates()\n }, [updateStates])\n\n useEffect(() => {\n document.addEventListener('mouseup', updateStates)\n return () => {\n document.removeEventListener('mouseup', updateStates)\n }\n }, [updateStates])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n updateStates()\n }),\n )\n }, [editor, updateStates])\n\n useEffect(() => {\n setClassName(\n [\n baseClass,\n enabled === false ? 'disabled' : '',\n active ? 'active' : '',\n item?.key ? `${baseClass}-` + item.key : '',\n ]\n .filter(Boolean)\n .join(' '),\n )\n }, [enabled, active, className, item.key])\n\n return (\n <button\n className={className}\n onClick={() => {\n if (enabled !== false) {\n editor._updateTags = new Set([...editor._updateTags, 'toolbar']) // without setting the tags, our onSelect will not be able to trigger our onChange as focus onChanges are ignored.\n\n editor.focus(() => {\n // We need to wrap the onSelect in the callback, so the editor is properly focused before the onSelect is called.\n item.onSelect({\n editor,\n isActive: active,\n })\n })\n\n return true\n }\n }}\n onMouseDown={(e) => {\n // This fixes a bug where you are unable to click the button if you are in a NESTED editor (editor in blocks field in editor).\n // Thus only happens if you click on the SVG of the button. Clicking on the outside works. Related issue: https://github.com/payloadcms/payload/issues/4025\n // TODO: Find out why exactly it happens and why e.preventDefault() on the mouseDown fixes it. Write that down here, or potentially fix a root cause, if there is any.\n e.preventDefault()\n }}\n type=\"button\"\n >\n {children}\n </button>\n )\n}\n", "'use client'\nimport React, { useCallback, useEffect } from 'react'\n\nconst baseClass = 'toolbar-popup__dropdown'\n\nimport type { LexicalEditor } from 'lexical'\n\nimport { mergeRegister } from '@lexical/utils'\nimport { useTranslation } from '@payloadcms/ui'\nimport { $getSelection } from 'lexical'\n\nimport type { ToolbarGroupItem } from '../../types.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { DropDown, DropDownItem } from './DropDown.js'\nimport './index.scss'\n\nconst ToolbarItem = ({\n active,\n anchorElem,\n editor,\n enabled,\n item,\n}: {\n active?: boolean\n anchorElem: HTMLElement\n editor: LexicalEditor\n enabled?: boolean\n item: ToolbarGroupItem\n}) => {\n const { i18n } = useTranslation()\n const {\n field: { richTextComponentMap },\n } = useEditorConfigContext()\n\n if (item.Component) {\n return (\n item?.Component && (\n <item.Component\n active={active}\n anchorElem={anchorElem}\n editor={editor}\n enabled={enabled}\n item={item}\n key={item.key}\n />\n )\n )\n }\n\n let title = item.key\n if (item.label) {\n title =\n typeof item.label === 'function' ? item.label({ i18n, richTextComponentMap }) : item.label\n }\n // Crop title to max. 25 characters\n if (title.length > 25) {\n title = title.substring(0, 25) + '...'\n }\n\n return (\n <DropDownItem active={active} editor={editor} enabled={enabled} item={item} key={item.key}>\n {item?.ChildComponent && <item.ChildComponent />}\n <span className=\"text\">{title}</span>\n </DropDownItem>\n )\n}\n\nexport const ToolbarDropdown = ({\n Icon,\n anchorElem,\n classNames,\n editor,\n groupKey,\n items,\n itemsContainerClassNames,\n label,\n maxActiveItems,\n onActiveChange,\n}: {\n Icon?: React.FC\n anchorElem: HTMLElement\n classNames?: string[]\n editor: LexicalEditor\n groupKey: string\n items: ToolbarGroupItem[]\n itemsContainerClassNames?: string[]\n label?: string\n /**\n * Maximum number of active items allowed. This is a performance optimization to prevent\n * unnecessary item active checks when the maximum number of active items is reached.\n */\n maxActiveItems?: number\n onActiveChange?: ({ activeItems }: { activeItems: ToolbarGroupItem[] }) => void\n}) => {\n const [activeItemKeys, setActiveItemKeys] = React.useState<string[]>([])\n const [enabledItemKeys, setEnabledItemKeys] = React.useState<string[]>([])\n const editorConfigContext = useEditorConfigContext()\n\n const updateStates = useCallback(() => {\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n\n const _activeItemKeys: string[] = []\n const _activeItems: ToolbarGroupItem[] = []\n const _enabledItemKeys: string[] = []\n\n for (const item of items) {\n if (item.isActive && (!maxActiveItems || _activeItemKeys.length < maxActiveItems)) {\n const isActive = item.isActive({ editor, editorConfigContext, selection })\n if (isActive) {\n _activeItemKeys.push(item.key)\n _activeItems.push(item)\n }\n }\n if (item.isEnabled) {\n const isEnabled = item.isEnabled({ editor, editorConfigContext, selection })\n if (isEnabled) {\n _enabledItemKeys.push(item.key)\n }\n } else {\n _enabledItemKeys.push(item.key)\n }\n }\n setActiveItemKeys(_activeItemKeys)\n setEnabledItemKeys(_enabledItemKeys)\n\n if (onActiveChange) {\n onActiveChange({ activeItems: _activeItems })\n }\n })\n }, [editor, editorConfigContext, items, maxActiveItems, onActiveChange])\n\n useEffect(() => {\n updateStates()\n }, [updateStates])\n\n useEffect(() => {\n document.addEventListener('mouseup', updateStates)\n return () => {\n document.removeEventListener('mouseup', updateStates)\n }\n }, [updateStates])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n updateStates()\n }),\n )\n }, [editor, updateStates])\n\n return (\n <DropDown\n Icon={Icon}\n buttonAriaLabel={`${groupKey} dropdown`}\n buttonClassName={[baseClass, `${baseClass}-${groupKey}`, ...(classNames || [])]\n .filter(Boolean)\n .join(' ')}\n itemsContainerClassNames={[`${baseClass}-items`, ...(itemsContainerClassNames || [])]}\n key={groupKey}\n label={label}\n >\n {items.length &&\n items.map((item) => {\n return (\n <ToolbarItem\n active={activeItemKeys.includes(item.key)}\n anchorElem={anchorElem}\n editor={editor}\n enabled={enabledItemKeys.includes(item.key)}\n item={item}\n key={item.key}\n />\n )\n })}\n </DropDown>\n )\n}\n", "'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport React, { type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { ToolbarGroupItem } from '../../types.js'\n\nconst baseClass = 'toolbar-popup__dropdown-item'\n\ninterface DropDownContextType {\n registerItem: (ref: React.RefObject<HTMLButtonElement | null>) => void\n}\n\nconst DropDownContext = React.createContext<DropDownContextType | null>(null)\n\nexport function DropDownItem({\n active,\n children,\n editor,\n enabled,\n item,\n title,\n}: {\n active?: boolean\n children: React.ReactNode\n editor: LexicalEditor\n enabled?: boolean\n item: ToolbarGroupItem\n title?: string\n}): React.ReactNode {\n const [className, setClassName] = useState<string>(baseClass)\n\n useEffect(() => {\n setClassName(\n [\n baseClass,\n enabled === false ? 'disabled' : '',\n active ? 'active' : '',\n item?.key ? `${baseClass}-${item.key}` : '',\n ]\n .filter(Boolean)\n .join(' '),\n )\n }, [enabled, active, className, item.key])\n\n const ref = useRef<HTMLButtonElement>(null)\n\n const dropDownContext = React.useContext(DropDownContext)\n\n if (dropDownContext === null) {\n throw new Error('DropDownItem must be used within a DropDown')\n }\n\n const { registerItem } = dropDownContext\n\n useEffect(() => {\n if (ref?.current != null) {\n registerItem(ref)\n }\n }, [ref, registerItem])\n\n return (\n <button\n className={className}\n onClick={() => {\n if (enabled !== false) {\n editor._updateTags = new Set([...editor._updateTags, 'toolbar']) // without setting the tags, our onSelect will not be able to trigger our onChange as focus onChanges are ignored.\n\n editor.focus(() => {\n // We need to wrap the onSelect in the callback, so the editor is properly focused before the onSelect is called.\n item.onSelect({\n editor,\n isActive: active,\n })\n })\n }\n }}\n onMouseDown={(e) => {\n // This is required for Firefox compatibility. Without it, the dropdown will disappear without the onClick being called.\n // This only happens in Firefox. Must be something about how Firefox handles focus events differently.\n e.preventDefault()\n }}\n ref={ref}\n title={title}\n type=\"button\"\n >\n {children}\n </button>\n )\n}\n\nfunction DropDownItems({\n children,\n dropDownRef,\n itemsContainerClassNames,\n onClose,\n}: {\n children: React.ReactNode\n dropDownRef: React.Ref<HTMLDivElement>\n itemsContainerClassNames?: string[]\n onClose: () => void\n}): React.ReactElement {\n const [items, setItems] = useState<Array<React.RefObject<HTMLButtonElement | null>>>()\n const [highlightedItem, setHighlightedItem] =\n useState<React.RefObject<HTMLButtonElement | null>>()\n\n const registerItem = useCallback(\n (itemRef: React.RefObject<HTMLButtonElement | null>) => {\n setItems((prev) => (prev != null ? [...prev, itemRef] : [itemRef]))\n },\n [setItems],\n )\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>): void => {\n if (items == null) return\n\n const { key } = event\n\n if (['ArrowDown', 'ArrowUp', 'Escape', 'Tab'].includes(key)) {\n event.preventDefault()\n }\n\n if (key === 'Escape' || key === 'Tab') {\n onClose()\n } else if (key === 'ArrowUp') {\n setHighlightedItem((prev) => {\n if (prev == null) return items[0]\n const index = items.indexOf(prev) - 1\n return items[index === -1 ? items.length - 1 : index]\n })\n } else if (key === 'ArrowDown') {\n setHighlightedItem((prev) => {\n if (prev == null) return items[0]\n return items[items.indexOf(prev) + 1]\n })\n }\n }\n\n const contextValue = useMemo(\n () => ({\n registerItem,\n }),\n [registerItem],\n )\n\n useEffect(() => {\n if (items != null && highlightedItem == null) {\n setHighlightedItem(items[0])\n }\n\n if (highlightedItem != null && highlightedItem?.current != null) {\n highlightedItem.current.focus()\n }\n }, [items, highlightedItem])\n\n return (\n <DropDownContext.Provider value={contextValue}>\n <div\n className={(itemsContainerClassNames ?? ['toolbar-popup__dropdown-items']).join(' ')}\n onKeyDown={handleKeyDown}\n ref={dropDownRef}\n >\n {children}\n </div>\n </DropDownContext.Provider>\n )\n}\n\nexport function DropDown({\n Icon,\n buttonAriaLabel,\n buttonClassName,\n children,\n disabled = false,\n itemsContainerClassNames,\n label,\n stopCloseOnClickSelf,\n}: {\n Icon?: React.FC\n buttonAriaLabel?: string\n buttonClassName: string\n children: ReactNode\n disabled?: boolean\n itemsContainerClassNames?: string[]\n label?: string\n stopCloseOnClickSelf?: boolean\n}): React.ReactNode {\n const dropDownRef = useRef<HTMLDivElement>(null)\n const buttonRef = useRef<HTMLButtonElement>(null)\n const [showDropDown, setShowDropDown] = useState(false)\n\n const handleClose = (): void => {\n setShowDropDown(false)\n if (buttonRef?.current != null) {\n buttonRef.current.focus()\n }\n }\n\n useEffect(() => {\n const button = buttonRef.current\n const dropDown = dropDownRef.current\n\n if (showDropDown && button !== null && dropDown !== null) {\n const { left, top } = button.getBoundingClientRect()\n const scrollTopOffset = window.scrollY || document.documentElement.scrollTop\n dropDown.style.top = `${top + scrollTopOffset + button.offsetHeight + 5}px`\n dropDown.style.left = `${Math.min(left - 5, window.innerWidth - dropDown.offsetWidth - 20)}px`\n }\n }, [dropDownRef, buttonRef, showDropDown])\n\n useEffect(() => {\n const button = buttonRef.current\n\n if (button !== null && showDropDown) {\n const handle = (event: MouseEvent): void => {\n const { target } = event\n if (stopCloseOnClickSelf != null) {\n if (dropDownRef.current != null && dropDownRef.current.contains(target as Node)) {\n return\n }\n }\n if (!button.contains(target as Node)) {\n setShowDropDown(false)\n }\n }\n document.addEventListener('click', handle)\n\n return () => {\n document.removeEventListener('click', handle)\n }\n }\n }, [dropDownRef, buttonRef, showDropDown, stopCloseOnClickSelf])\n\n const portal = createPortal(\n <DropDownItems\n dropDownRef={dropDownRef}\n itemsContainerClassNames={itemsContainerClassNames}\n onClose={handleClose}\n >\n {children}\n </DropDownItems>,\n document.body,\n )\n\n return (\n <React.Fragment>\n <button\n aria-label={buttonAriaLabel}\n className={buttonClassName + (showDropDown ? ' active' : '')}\n disabled={disabled}\n onClick={(event) => {\n event.preventDefault()\n setShowDropDown(!showDropDown)\n }}\n onMouseDown={(e) => {\n // This fixes a bug where you are unable to click the button if you are in a NESTED editor (editor in blocks field in editor).\n // Thus only happens if you click on the SVG of the button. Clicking on the outside works. Related issue: https://github.com/payloadcms/payload/issues/4025\n // TODO: Find out why exactly it happens and why e.preventDefault() on the mouseDown fixes it. Write that down here, or potentially fix a root cause, if there is any.\n e.preventDefault()\n }}\n ref={buttonRef}\n type=\"button\"\n >\n {Icon && <Icon />}\n {label && <span className=\"toolbar-popup__dropdown-label\">{label}</span>}\n <i className=\"toolbar-popup__dropdown-caret\" />\n </button>\n\n {showDropDown && <React.Fragment>{portal}</React.Fragment>}\n </React.Fragment>\n )\n}\n", "'use client'\n\nimport type { FixedToolbarFeatureProps } from '../server/index.js'\n\nimport { createClientFeature } from '../../../../utilities/createClientFeature.js'\nimport { FixedToolbarPlugin } from './Toolbar/index.js'\n\nexport const FixedToolbarFeatureClient = createClientFeature<FixedToolbarFeatureProps>({\n plugins: [\n {\n Component: FixedToolbarPlugin,\n position: 'aboveContainer',\n },\n ],\n})\n", "'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n $isTextNode,\n COMMAND_PRIORITY_LOW,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../../types.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { getDOMRangeRect } from '../../../../../lexical/utils/getDOMRangeRect.js'\nimport { setFloatingElemPosition } from '../../../../../lexical/utils/setFloatingElemPosition.js'\nimport { ToolbarButton } from '../../../shared/ToolbarButton/index.js'\nimport { ToolbarDropdown } from '../../../shared/ToolbarDropdown/index.js'\nimport './index.scss'\n\nfunction ButtonGroupItem({\n anchorElem,\n editor,\n item,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n item: ToolbarGroupItem\n}): React.ReactNode {\n if (item.Component) {\n return (\n item?.Component && (\n <item.Component anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n )\n }\n\n return (\n <ToolbarButton editor={editor} item={item} key={item.key}>\n {item?.ChildComponent && <item.ChildComponent />}\n </ToolbarButton>\n )\n}\n\nfunction ToolbarGroupComponent({\n anchorElem,\n editor,\n group,\n index,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n group: ToolbarGroup\n index: number\n}): React.ReactNode {\n const { editorConfig } = useEditorConfigContext()\n\n const [DropdownIcon, setDropdownIcon] = React.useState<React.FC | null>(null)\n\n React.useEffect(() => {\n if (group?.type === 'dropdown' && group.items.length && group.ChildComponent) {\n setDropdownIcon(() => group.ChildComponent)\n } else {\n setDropdownIcon(null)\n }\n }, [group])\n\n const onActiveChange = ({ activeItems }: { activeItems: ToolbarGroupItem[] }) => {\n if (!activeItems.length) {\n if (group?.type === 'dropdown' && group.items.length && group.ChildComponent) {\n setDropdownIcon(() => group.ChildComponent)\n } else {\n setDropdownIcon(null)\n }\n return\n }\n const item = activeItems[0]\n setDropdownIcon(() => item.ChildComponent)\n }\n\n return (\n <div\n className={`inline-toolbar-popup__group inline-toolbar-popup__group-${group.key}`}\n key={group.key}\n >\n {group.type === 'dropdown' &&\n group.items.length &&\n (DropdownIcon ? (\n <ToolbarDropdown\n Icon={DropdownIcon}\n anchorElem={anchorElem}\n editor={editor}\n groupKey={group.key}\n items={group.items}\n maxActiveItems={1}\n onActiveChange={onActiveChange}\n />\n ) : (\n <ToolbarDropdown\n anchorElem={anchorElem}\n editor={editor}\n groupKey={group.key}\n items={group.items}\n maxActiveItems={1}\n onActiveChange={onActiveChange}\n />\n ))}\n {group.type === 'buttons' &&\n group.items.length &&\n group.items.map((item) => {\n return (\n <ButtonGroupItem anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n })}\n {index < editorConfig.features.toolbarInline?.groups.length - 1 && (\n <div className=\"divider\" />\n )}\n </div>\n )\n}\n\nfunction InlineToolbar({\n anchorElem,\n editor,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n}): React.ReactNode {\n const floatingToolbarRef = useRef<HTMLDivElement | null>(null)\n const caretRef = useRef<HTMLDivElement | null>(null)\n\n const { editorConfig } = useEditorConfigContext()\n\n const closeFloatingToolbar = useCallback(() => {\n if (floatingToolbarRef?.current) {\n const isOpacityZero = floatingToolbarRef.current.style.opacity === '0'\n const isPointerEventsNone = floatingToolbarRef.current.style.pointerEvents === 'none'\n\n if (!isOpacityZero) {\n floatingToolbarRef.current.style.opacity = '0'\n }\n if (!isPointerEventsNone) {\n floatingToolbarRef.current.style.pointerEvents = 'none'\n }\n }\n }, [floatingToolbarRef])\n\n const mouseMoveListener = useCallback(\n (e: MouseEvent) => {\n if (floatingToolbarRef?.current && (e.buttons === 1 || e.buttons === 3)) {\n const isOpacityZero = floatingToolbarRef.current.style.opacity === '0'\n const isPointerEventsNone = floatingToolbarRef.current.style.pointerEvents === 'none'\n if (!isOpacityZero || !isPointerEventsNone) {\n // Check if the mouse is not over the popup\n const x = e.clientX\n const y = e.clientY\n const elementUnderMouse = document.elementFromPoint(x, y)\n if (!floatingToolbarRef.current.contains(elementUnderMouse)) {\n // Mouse is not over the target element => not a normal click, but probably a drag\n closeFloatingToolbar()\n }\n }\n }\n },\n [closeFloatingToolbar],\n )\n\n const mouseUpListener = useCallback(() => {\n if (floatingToolbarRef?.current) {\n if (floatingToolbarRef.current.style.opacity !== '1') {\n floatingToolbarRef.current.style.opacity = '1'\n }\n if (floatingToolbarRef.current.style.pointerEvents !== 'auto') {\n floatingToolbarRef.current.style.pointerEvents = 'auto'\n }\n }\n }, [])\n\n useEffect(() => {\n document.addEventListener('mousemove', mouseMoveListener)\n document.addEventListener('mouseup', mouseUpListener)\n\n return () => {\n document.removeEventListener('mousemove', mouseMoveListener)\n document.removeEventListener('mouseup', mouseUpListener)\n }\n }, [floatingToolbarRef, mouseMoveListener, mouseUpListener])\n\n const $updateTextFormatFloatingToolbar = useCallback(() => {\n const selection = $getSelection()\n\n const nativeSelection = window.getSelection()\n\n if (floatingToolbarRef.current === null) {\n return\n }\n\n const possibleLinkEditor = anchorElem.querySelector(':scope > .link-editor')\n const isLinkEditorVisible =\n possibleLinkEditor !== null &&\n 'style' in possibleLinkEditor &&\n possibleLinkEditor?.style?.['opacity'] === '1'\n\n const rootElement = editor.getRootElement()\n if (\n selection !== null &&\n nativeSelection !== null &&\n !nativeSelection.isCollapsed &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n const rangeRect = getDOMRangeRect(nativeSelection, rootElement)\n\n // Position floating toolbar\n const offsetIfFlipped = setFloatingElemPosition({\n alwaysDisplayOnTop: isLinkEditorVisible,\n anchorElem,\n floatingElem: floatingToolbarRef.current,\n horizontalPosition: 'center',\n targetRect: rangeRect,\n })\n\n // Position caret\n if (caretRef.current) {\n setFloatingElemPosition({\n anchorElem: floatingToolbarRef.current,\n anchorFlippedOffset: offsetIfFlipped,\n floatingElem: caretRef.current,\n horizontalOffset: 5,\n horizontalPosition: 'center',\n specialHandlingForCaret: true,\n targetRect: rangeRect,\n verticalGap: 8,\n })\n }\n } else {\n closeFloatingToolbar()\n }\n }, [editor, closeFloatingToolbar, anchorElem])\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement\n\n const update = () => {\n editor.getEditorState().read(() => {\n $updateTextFormatFloatingToolbar()\n })\n }\n\n window.addEventListener('resize', update)\n if (scrollerElem) {\n scrollerElem.addEventListener('scroll', update)\n }\n\n return () => {\n window.removeEventListener('resize', update)\n if (scrollerElem) {\n scrollerElem.removeEventListener('scroll', update)\n }\n }\n }, [editor, $updateTextFormatFloatingToolbar, anchorElem])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n $updateTextFormatFloatingToolbar()\n })\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateTextFormatFloatingToolbar()\n })\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n $updateTextFormatFloatingToolbar()\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, $updateTextFormatFloatingToolbar])\n\n return (\n <div className=\"inline-toolbar-popup\" ref={floatingToolbarRef}>\n <div className=\"caret\" ref={caretRef} />\n {editor.isEditable() && (\n <React.Fragment>\n {editorConfig?.features &&\n editorConfig.features?.toolbarInline?.groups.map((group, i) => {\n return (\n <ToolbarGroupComponent\n anchorElem={anchorElem}\n editor={editor}\n group={group}\n index={i}\n key={group.key}\n />\n )\n })}\n </React.Fragment>\n )}\n </div>\n )\n}\n\nfunction useInlineToolbar(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n): React.ReactElement | null {\n const [isText, setIsText] = useState(false)\n\n const updatePopup = useCallback(() => {\n editor.getEditorState().read(() => {\n // Should not to pop up the floating toolbar when using IME input\n if (editor.isComposing()) {\n return\n }\n const selection = $getSelection()\n const nativeSelection = window.getSelection()\n const rootElement = editor.getRootElement()\n\n if (\n nativeSelection !== null &&\n (!$isRangeSelection(selection) ||\n rootElement === null ||\n !rootElement.contains(nativeSelection.anchorNode))\n ) {\n setIsText(false)\n return\n }\n\n if (!$isRangeSelection(selection)) {\n return\n }\n\n if (selection.getTextContent() !== '') {\n const nodes = selection.getNodes()\n let foundNodeWithText = false\n for (const node of nodes) {\n if ($isTextNode(node)) {\n setIsText(true)\n foundNodeWithText = true\n break\n }\n }\n if (!foundNodeWithText) {\n setIsText(false)\n }\n } else {\n setIsText(false)\n }\n\n const rawTextContent = selection.getTextContent().replace(/\\n/g, '')\n if (!selection.isCollapsed() && rawTextContent === '') {\n setIsText(false)\n return\n }\n })\n }, [editor])\n\n useEffect(() => {\n document.addEventListener('selectionchange', updatePopup)\n document.addEventListener('mouseup', updatePopup)\n return () => {\n document.removeEventListener('selectionchange', updatePopup)\n document.removeEventListener('mouseup', updatePopup)\n }\n }, [updatePopup])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n updatePopup()\n }),\n editor.registerRootListener(() => {\n if (editor.getRootElement() === null) {\n setIsText(false)\n }\n }),\n )\n }, [editor, updatePopup])\n\n if (!isText) {\n return null\n }\n\n return createPortal(<InlineToolbar anchorElem={anchorElem} editor={editor} />, anchorElem)\n}\n\nexport const InlineToolbarPlugin: PluginComponentWithAnchor<undefined> = ({ anchorElem }) => {\n const [editor] = useLexicalComposerContext()\n\n return useInlineToolbar(editor, anchorElem)\n}\n", "'use client'\nexport function getDOMRangeRect(nativeSelection: Selection, rootElement: HTMLElement): DOMRect {\n const domRange = nativeSelection.getRangeAt(0)\n\n let rect\n\n if (nativeSelection.anchorNode === rootElement) {\n let inner = rootElement\n while (inner.firstElementChild != null) {\n inner = inner.firstElementChild as HTMLElement\n }\n rect = inner.getBoundingClientRect()\n } else {\n rect = domRange.getBoundingClientRect()\n }\n\n return rect\n}\n", "'use client'\nconst VERTICAL_GAP = 10\nconst HORIZONTAL_OFFSET = 32\n\n// TODO: needs refactoring\n// This is supposed to position the floatingElem based on the parent (anchorElem) and the target (targetRect) which is usually the selected text.\n// So basically, it positions the floatingElem either below or above the target (targetRect) and aligns it to the left or center of the target (targetRect).\n// This is used for positioning the floating toolbar (anchor: richtext editor) and its caret (anchor: floating toolbar)\nexport function setFloatingElemPosition(args: {\n alwaysDisplayOnTop?: boolean\n anchorElem: HTMLElement\n anchorFlippedOffset?: number // Offset which was added to the anchor (for caret, floating toolbar) if it was flipped\n floatingElem: HTMLElement\n horizontalOffset?: number\n horizontalPosition?: 'center' | 'left'\n specialHandlingForCaret?: boolean\n targetRect: ClientRect | null\n verticalGap?: number\n}): number {\n const {\n alwaysDisplayOnTop = false,\n anchorElem,\n anchorFlippedOffset = 0, // Offset which was added to the anchor (for caret, floating toolbar) if it was flipped\n floatingElem,\n horizontalOffset = HORIZONTAL_OFFSET,\n horizontalPosition = 'left',\n specialHandlingForCaret = false,\n targetRect,\n verticalGap = VERTICAL_GAP,\n } = args\n // Returns the top offset if the target was flipped\n const scrollerElem = anchorElem.parentElement\n\n if (targetRect === null || scrollerElem == null) {\n floatingElem.style.opacity = '0'\n floatingElem.style.transform = 'translate(-10000px, -10000px)'\n return\n }\n\n const floatingElemRect = floatingElem.getBoundingClientRect()\n const anchorElementRect = anchorElem.getBoundingClientRect()\n const editorScrollerRect = scrollerElem.getBoundingClientRect()\n\n let top = targetRect.top - floatingElemRect.height - verticalGap\n let left = targetRect.left - horizontalOffset\n\n if (horizontalPosition === 'center') {\n // Calculate left to position floatingElem to the horizontal middle of targetRect\n left = targetRect.left + targetRect.width / 2 - floatingElemRect.width / 2\n }\n\n let addedToTop = 0\n if (!alwaysDisplayOnTop && top < editorScrollerRect.top && !specialHandlingForCaret) {\n addedToTop = floatingElemRect.height + targetRect.height + verticalGap * 2\n\n top += addedToTop\n }\n\n if (horizontalPosition === 'center') {\n if (left + floatingElemRect.width > editorScrollerRect.right) {\n left = editorScrollerRect.right - floatingElemRect.width - horizontalOffset\n } else if (left < editorScrollerRect.left) {\n left = editorScrollerRect.left + horizontalOffset\n }\n } else {\n if (left + floatingElemRect.width > editorScrollerRect.right) {\n left = editorScrollerRect.right - floatingElemRect.width - horizontalOffset\n }\n }\n\n left -= anchorElementRect.left\n\n floatingElem.style.opacity = '1'\n\n if (specialHandlingForCaret && anchorFlippedOffset !== 0) {\n // Floating select toolbar was flipped (positioned below text rather than above). Thus, the caret now needs to be positioned\n // on the other side and rotated.\n top -= anchorElementRect.bottom - anchorFlippedOffset + floatingElemRect.height - 3\n // top += anchorFlippedOffset - anchorElementRect.height - floatingElemRect.height + 2\n floatingElem.style.transform = `translate(${left}px, ${top}px) rotate(180deg)`\n } else {\n top -= anchorElementRect.top\n\n floatingElem.style.transform = `translate(${left}px, ${top}px)`\n }\n\n return addedToTop\n}\n", "'use client'\n\nimport { createClientFeature } from '../../../../utilities/createClientFeature.js'\nimport { InlineToolbarPlugin } from './Toolbar/index.js'\n\nexport const InlineToolbarFeatureClient = createClientFeature({\n plugins: [\n {\n Component: InlineToolbarPlugin,\n position: 'floatingAnchorElem',\n },\n ],\n})\n", "'use client'\n\nimport { TableCellNode, TableNode, TableRowNode } from '@lexical/table'\n\nimport { TableIcon } from '../../../lexical/ui/icons/Table/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { slashMenuBasicGroupWithItems } from '../../shared/slashMenu/basicGroup.js'\nimport { toolbarAddDropdownGroupWithItems } from '../../shared/toolbar/addDropdownGroup.js'\nimport { TableActionMenuPlugin } from './plugins/TableActionMenuPlugin/index.js'\nimport { TableCellResizerPlugin } from './plugins/TableCellResizerPlugin/index.js'\nimport { TableHoverActionsPlugin } from './plugins/TableHoverActionsPlugin/index.js'\nimport {\n OPEN_TABLE_DRAWER_COMMAND,\n TableContext,\n TablePlugin,\n} from './plugins/TablePlugin/index.js'\n\nexport const TableFeatureClient = createClientFeature({\n nodes: [TableNode, TableCellNode, TableRowNode],\n plugins: [\n {\n Component: TablePlugin,\n position: 'normal',\n },\n {\n Component: TableCellResizerPlugin,\n position: 'normal',\n },\n {\n Component: TableActionMenuPlugin,\n position: 'floatingAnchorElem',\n },\n {\n Component: TableHoverActionsPlugin,\n position: 'floatingAnchorElem',\n },\n ],\n providers: [TableContext],\n slashMenu: {\n groups: [\n slashMenuBasicGroupWithItems([\n {\n Icon: TableIcon,\n key: 'table',\n keywords: ['table'],\n label: 'Table',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(OPEN_TABLE_DRAWER_COMMAND, {})\n },\n },\n ]),\n ],\n },\n toolbarFixed: {\n groups: [\n toolbarAddDropdownGroupWithItems([\n {\n ChildComponent: TableIcon,\n key: 'table',\n label: 'Table',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(OPEN_TABLE_DRAWER_COMMAND, {})\n },\n },\n ]),\n ],\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const TableIcon: React.FC = () => {\n return (\n <svg\n className=\"icon\"\n fill=\"none\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n clipRule=\"evenodd\"\n d=\"M5.33333 4.5C4.8731 4.5 4.5 4.8731 4.5 5.33333V7.5H9.5V4.5H5.33333ZM5.33333 3.5C4.32081 3.5 3.5 4.32081 3.5 5.33333V14.6667C3.5 15.6792 4.32081 16.5 5.33333 16.5H14.6667C15.6792 16.5 16.5 15.6792 16.5 14.6667V5.33333C16.5 4.32081 15.6792 3.5 14.6667 3.5H5.33333ZM10.5 4.5V7.5H15.5V5.33333C15.5 4.8731 15.1269 4.5 14.6667 4.5H10.5ZM15.5 8.5H10.5V11.5H15.5V8.5ZM15.5 12.5H10.5V15.5H14.6667C15.1269 15.5 15.5 15.1269 15.5 14.6667V12.5ZM9.5 15.5V12.5H4.5V14.6667C4.5 15.1269 4.8731 15.5 5.33333 15.5H9.5ZM4.5 11.5H9.5V8.5H4.5V11.5Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n />\n </svg>\n )\n}\n", "'use client'\n\nimport type {\n HTMLTableElementWithWithTableSelectionState,\n TableRowNode,\n TableSelection,\n} from '@lexical/table'\nimport type { ElementNode } from 'lexical'\nimport type { JSX } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n $deleteTableColumn__EXPERIMENTAL,\n $deleteTableRow__EXPERIMENTAL,\n $getNodeTriplet,\n $getTableCellNodeFromLexicalNode,\n $getTableColumnIndexFromTableCellNode,\n $getTableNodeFromLexicalNodeOrThrow,\n $getTableRowIndexFromTableCellNode,\n $insertTableColumn__EXPERIMENTAL,\n $insertTableRow__EXPERIMENTAL,\n $isTableCellNode,\n $isTableRowNode,\n $isTableSelection,\n $unmergeCell,\n TableCellHeaderStates,\n TableCellNode,\n getTableObserverFromTableElement,\n} from '@lexical/table'\nimport { useScrollInfo } from '@payloadcms/ui'\nimport {\n $createParagraphNode,\n $getRoot,\n $getSelection,\n $isElementNode,\n $isParagraphNode,\n $isRangeSelection,\n $isTextNode,\n} from 'lexical'\nimport * as React from 'react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\n\nimport { MeatballsIcon } from '../../../../../lexical/ui/icons/Meatballs/index.js'\nimport './index.scss'\n\nfunction computeSelectionCount(selection: TableSelection): {\n columns: number\n rows: number\n} {\n const selectionShape = selection.getShape()\n return {\n columns: selectionShape.toX - selectionShape.fromX + 1,\n rows: selectionShape.toY - selectionShape.fromY + 1,\n }\n}\n\n// This is important when merging cells as there is no good way to re-merge weird shapes (a result\n// of selecting merged cells and non-merged)\nfunction isTableSelectionRectangular(selection: TableSelection): boolean {\n const nodes = selection.getNodes()\n const currentRows: Array<number> = []\n let currentRow = null\n let expectedColumns = null\n let currentColumns = 0\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]\n if ($isTableCellNode(node)) {\n const row = node.getParentOrThrow()\n if ($isTableRowNode(row)) {\n throw new Error('Expected CellNode to have a RowNode parent')\n }\n if (currentRow !== row) {\n if (expectedColumns !== null && currentColumns !== expectedColumns) {\n return false\n }\n if (currentRow !== null) {\n expectedColumns = currentColumns\n }\n currentRow = row\n currentColumns = 0\n }\n const colSpan = node.__colSpan\n for (let j = 0; j < colSpan; j++) {\n if (currentRows[currentColumns + j] === undefined) {\n currentRows[currentColumns + j] = 0\n }\n currentRows[currentColumns + j] += node.__rowSpan\n }\n currentColumns += colSpan\n }\n }\n return (\n (expectedColumns === null || currentColumns === expectedColumns) &&\n currentRows.every((v) => v === currentRows[0])\n )\n}\n\nfunction $canUnmerge(): boolean {\n const selection = $getSelection()\n if (\n ($isRangeSelection(selection) && !selection.isCollapsed()) ||\n ($isTableSelection(selection) && !selection.anchor.is(selection.focus)) ||\n (!$isRangeSelection(selection) && !$isTableSelection(selection))\n ) {\n return false\n }\n const [cell] = $getNodeTriplet(selection.anchor)\n return cell.__colSpan > 1 || cell.__rowSpan > 1\n}\n\nfunction $cellContainsEmptyParagraph(cell: TableCellNode): boolean {\n if (cell.getChildrenSize() !== 1) {\n return false\n }\n const firstChild = cell.getFirstChildOrThrow()\n if (!$isParagraphNode(firstChild) || !firstChild.isEmpty()) {\n return false\n }\n return true\n}\n\nfunction $selectLastDescendant(node: ElementNode): void {\n const lastDescendant = node.getLastDescendant()\n if ($isTextNode(lastDescendant)) {\n lastDescendant.select()\n } else if ($isElementNode(lastDescendant)) {\n lastDescendant.selectEnd()\n } else if (lastDescendant !== null) {\n lastDescendant.selectNext()\n }\n}\n\ntype TableCellActionMenuProps = Readonly<{\n cellMerge: boolean\n contextRef: { current: HTMLElement | null }\n onClose: () => void\n setIsMenuOpen: (isOpen: boolean) => void\n tableCellNode: TableCellNode\n}>\n\nfunction TableActionMenu({\n cellMerge,\n contextRef,\n onClose,\n setIsMenuOpen,\n tableCellNode: _tableCellNode,\n}: TableCellActionMenuProps) {\n const [editor] = useLexicalComposerContext()\n const dropDownRef = useRef<HTMLDivElement | null>(null)\n const [tableCellNode, updateTableCellNode] = useState(_tableCellNode)\n const [selectionCounts, updateSelectionCounts] = useState({\n columns: 1,\n rows: 1,\n })\n const [canMergeCells, setCanMergeCells] = useState(false)\n const [canUnmergeCell, setCanUnmergeCell] = useState(false)\n const { y } = useScrollInfo()\n\n useEffect(() => {\n return editor.registerMutationListener(\n TableCellNode,\n (nodeMutations) => {\n const nodeUpdated = nodeMutations.get(tableCellNode.getKey()) === 'updated'\n\n if (nodeUpdated) {\n editor.getEditorState().read(() => {\n updateTableCellNode(tableCellNode.getLatest())\n })\n }\n },\n { skipInitialization: true },\n )\n }, [editor, tableCellNode])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n // Merge cells\n if ($isTableSelection(selection)) {\n const currentSelectionCounts = computeSelectionCount(selection)\n updateSelectionCounts(computeSelectionCount(selection))\n setCanMergeCells(\n isTableSelectionRectangular(selection) &&\n (currentSelectionCounts.columns > 1 || currentSelectionCounts.rows > 1),\n )\n }\n // Unmerge cell\n setCanUnmergeCell($canUnmerge())\n })\n }, [editor])\n\n useEffect(() => {\n const menuButtonElement = contextRef.current\n const dropDownElement = dropDownRef.current\n const rootElement = editor.getRootElement()\n\n if (menuButtonElement != null && dropDownElement != null && rootElement != null) {\n const rootEleRect = rootElement.getBoundingClientRect()\n const menuButtonRect = menuButtonElement.getBoundingClientRect()\n dropDownElement.style.opacity = '1'\n const dropDownElementRect = dropDownElement.getBoundingClientRect()\n const margin = 5\n let leftPosition = menuButtonRect.right + margin\n if (\n leftPosition + dropDownElementRect.width > window.innerWidth ||\n leftPosition + dropDownElementRect.width > rootEleRect.right\n ) {\n const position = menuButtonRect.left - dropDownElementRect.width - margin\n leftPosition = (position < 0 ? margin : position) + window.pageXOffset\n }\n dropDownElement.style.left = `${leftPosition + window.pageXOffset}px`\n\n let topPosition = menuButtonRect.top\n if (topPosition + dropDownElementRect.height > window.innerHeight) {\n const position = menuButtonRect.bottom - dropDownElementRect.height\n topPosition = (position < 0 ? margin : position) + window.pageYOffset\n }\n dropDownElement.style.top = `${topPosition}px`\n }\n }, [contextRef, dropDownRef, editor, y])\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (\n dropDownRef.current != null &&\n contextRef.current != null &&\n !dropDownRef.current.contains(event.target as Node) &&\n !contextRef.current.contains(event.target as Node)\n ) {\n setIsMenuOpen(false)\n }\n }\n\n window.addEventListener('click', handleClickOutside)\n\n return () => window.removeEventListener('click', handleClickOutside)\n }, [setIsMenuOpen, contextRef])\n\n const clearTableSelection = useCallback(() => {\n editor.update(() => {\n if (tableCellNode.isAttached()) {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const tableElement = editor.getElementByKey(\n tableNode.getKey(),\n ) as HTMLTableElementWithWithTableSelectionState\n\n if (!tableElement) {\n throw new Error('Expected to find tableElement in DOM')\n }\n\n const tableSelection = getTableObserverFromTableElement(tableElement)\n if (tableSelection !== null) {\n tableSelection.clearHighlight()\n }\n\n tableNode.markDirty()\n updateTableCellNode(tableCellNode.getLatest())\n }\n\n const rootNode = $getRoot()\n rootNode.selectStart()\n })\n }, [editor, tableCellNode])\n\n const mergeTableCellsAtSelection = () => {\n editor.update(() => {\n const selection = $getSelection()\n if ($isTableSelection(selection)) {\n const { columns, rows } = computeSelectionCount(selection)\n const nodes = selection.getNodes()\n let firstCell: TableCellNode | null = null\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]\n if ($isTableCellNode(node)) {\n if (firstCell === null) {\n node.setColSpan(columns).setRowSpan(rows)\n firstCell = node\n const isEmpty = $cellContainsEmptyParagraph(node)\n let firstChild\n if (isEmpty && $isParagraphNode((firstChild = node.getFirstChild()))) {\n firstChild.remove()\n }\n } else if ($isTableCellNode(firstCell)) {\n const isEmpty = $cellContainsEmptyParagraph(node)\n if (!isEmpty) {\n firstCell.append(...node.getChildren())\n }\n node.remove()\n }\n }\n }\n if (firstCell !== null) {\n if (firstCell.getChildrenSize() === 0) {\n firstCell.append($createParagraphNode())\n }\n $selectLastDescendant(firstCell)\n }\n onClose()\n }\n })\n }\n\n const unmergeTableCellsAtSelection = () => {\n editor.update(() => {\n $unmergeCell()\n })\n }\n\n const insertTableRowAtSelection = useCallback(\n (shouldInsertAfter: boolean) => {\n editor.update(() => {\n $insertTableRow__EXPERIMENTAL(shouldInsertAfter)\n onClose()\n })\n },\n [editor, onClose],\n )\n\n const insertTableColumnAtSelection = useCallback(\n (shouldInsertAfter: boolean) => {\n editor.update(() => {\n for (let i = 0; i < selectionCounts.columns; i++) {\n $insertTableColumn__EXPERIMENTAL(shouldInsertAfter)\n }\n onClose()\n })\n },\n [editor, onClose, selectionCounts.columns],\n )\n\n const deleteTableRowAtSelection = useCallback(() => {\n editor.update(() => {\n $deleteTableRow__EXPERIMENTAL()\n onClose()\n })\n }, [editor, onClose])\n\n const deleteTableAtSelection = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n tableNode.remove()\n\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n const deleteTableColumnAtSelection = useCallback(() => {\n editor.update(() => {\n $deleteTableColumn__EXPERIMENTAL()\n onClose()\n })\n }, [editor, onClose])\n\n const toggleTableRowIsHeader = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n\n const tableRowIndex = $getTableRowIndexFromTableCellNode(tableCellNode)\n\n const tableRows = tableNode.getChildren()\n\n if (tableRowIndex >= tableRows.length || tableRowIndex < 0) {\n throw new Error('Expected table cell to be inside of table row.')\n }\n\n const tableRow = tableRows[tableRowIndex]\n\n if (!$isTableRowNode(tableRow)) {\n throw new Error('Expected table row')\n }\n\n tableRow.getChildren().forEach((tableCell) => {\n if (!$isTableCellNode(tableCell)) {\n throw new Error('Expected table cell')\n }\n\n tableCell.toggleHeaderStyle(TableCellHeaderStates.ROW)\n })\n\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n const toggleTableColumnIsHeader = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n\n const tableColumnIndex = $getTableColumnIndexFromTableCellNode(tableCellNode)\n\n const tableRows = tableNode.getChildren<TableRowNode>()\n const maxRowsLength = Math.max(...tableRows.map((row) => row.getChildren().length))\n\n if (tableColumnIndex >= maxRowsLength || tableColumnIndex < 0) {\n throw new Error('Expected table cell to be inside of table row.')\n }\n\n for (let r = 0; r < tableRows.length; r++) {\n const tableRow = tableRows[r]\n\n if (!$isTableRowNode(tableRow)) {\n throw new Error('Expected table row')\n }\n\n const tableCells = tableRow.getChildren()\n if (tableColumnIndex >= tableCells.length) {\n // if cell is outside of bounds for the current row (for example various merge cell cases) we shouldn't highlight it\n continue\n }\n\n const tableCell = tableCells[tableColumnIndex]\n\n if (!$isTableCellNode(tableCell)) {\n throw new Error('Expected table cell')\n }\n\n tableCell.toggleHeaderStyle(TableCellHeaderStates.COLUMN)\n }\n\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n let mergeCellButton: JSX.Element | null = null\n if (cellMerge) {\n if (canMergeCells) {\n mergeCellButton = (\n <button\n className=\"item\"\n data-test-id=\"table-merge-cells\"\n onClick={() => mergeTableCellsAtSelection()}\n type=\"button\"\n >\n Merge cells\n </button>\n )\n } else if (canUnmergeCell) {\n mergeCellButton = (\n <button\n className=\"item\"\n data-test-id=\"table-unmerge-cells\"\n onClick={() => unmergeTableCellsAtSelection()}\n type=\"button\"\n >\n Unmerge cells\n </button>\n )\n }\n }\n\n return createPortal(\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions,jsx-a11y/click-events-have-key-events\n <div\n className=\"table-action-menu-dropdown\"\n onClick={(e) => {\n e.stopPropagation()\n }}\n ref={dropDownRef}\n >\n {mergeCellButton ? (\n <React.Fragment>\n {mergeCellButton}\n <hr />\n </React.Fragment>\n ) : null}\n\n <button\n className=\"item\"\n data-test-id=\"table-insert-row-above\"\n onClick={() => insertTableRowAtSelection(false)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.rows === 1 ? 'row' : `${selectionCounts.rows} rows`} above\n </span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-insert-row-below\"\n onClick={() => insertTableRowAtSelection(true)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.rows === 1 ? 'row' : `${selectionCounts.rows} rows`} below\n </span>\n </button>\n <hr />\n <button\n className=\"item\"\n data-test-id=\"table-insert-column-before\"\n onClick={() => insertTableColumnAtSelection(false)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.columns === 1 ? 'column' : `${selectionCounts.columns} columns`}{' '}\n left\n </span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-insert-column-after\"\n onClick={() => insertTableColumnAtSelection(true)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.columns === 1 ? 'column' : `${selectionCounts.columns} columns`}{' '}\n right\n </span>\n </button>\n <hr />\n <button\n className=\"item\"\n data-test-id=\"table-delete-columns\"\n onClick={() => deleteTableColumnAtSelection()}\n type=\"button\"\n >\n <span className=\"text\">Delete column</span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-delete-rows\"\n onClick={() => deleteTableRowAtSelection()}\n type=\"button\"\n >\n <span className=\"text\">Delete row</span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-delete\"\n onClick={() => deleteTableAtSelection()}\n type=\"button\"\n >\n <span className=\"text\">Delete table</span>\n </button>\n <hr />\n <button className=\"item\" onClick={() => toggleTableRowIsHeader()} type=\"button\">\n <span className=\"text\">\n {(tableCellNode.__headerState & TableCellHeaderStates.ROW) === TableCellHeaderStates.ROW\n ? 'Remove'\n : 'Add'}{' '}\n row header\n </span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-column-header\"\n onClick={() => toggleTableColumnIsHeader()}\n type=\"button\"\n >\n <span className=\"text\">\n {(tableCellNode.__headerState & TableCellHeaderStates.COLUMN) ===\n TableCellHeaderStates.COLUMN\n ? 'Remove'\n : 'Add'}{' '}\n column header\n </span>\n </button>\n </div>,\n document.body,\n )\n}\n\nfunction TableCellActionMenuContainer({\n anchorElem,\n cellMerge,\n}: {\n anchorElem: HTMLElement\n cellMerge: boolean\n}): JSX.Element {\n const [editor] = useLexicalComposerContext()\n\n const menuButtonRef = useRef(null)\n const menuRootRef = useRef(null)\n const [isMenuOpen, setIsMenuOpen] = useState(false)\n\n const [tableCellNode, setTableMenuCellNode] = useState<TableCellNode | null>(null)\n\n const $moveMenu = useCallback(() => {\n const menu = menuButtonRef.current\n const selection = $getSelection()\n const nativeSelection = window.getSelection()\n const activeElement = document.activeElement\n\n if (selection == null || menu == null) {\n setTableMenuCellNode(null)\n return\n }\n\n const rootElement = editor.getRootElement()\n\n if (\n $isRangeSelection(selection) &&\n rootElement !== null &&\n nativeSelection !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n const tableCellNodeFromSelection = $getTableCellNodeFromLexicalNode(\n selection.anchor.getNode(),\n )\n\n if (tableCellNodeFromSelection == null) {\n setTableMenuCellNode(null)\n return\n }\n\n const tableCellParentNodeDOM = editor.getElementByKey(tableCellNodeFromSelection.getKey())\n\n if (tableCellParentNodeDOM == null) {\n setTableMenuCellNode(null)\n return\n }\n\n setTableMenuCellNode(tableCellNodeFromSelection)\n } else if (!activeElement) {\n setTableMenuCellNode(null)\n }\n }, [editor])\n\n useEffect(() => {\n return editor.registerUpdateListener(() => {\n editor.getEditorState().read(() => {\n $moveMenu()\n })\n })\n })\n\n useEffect(() => {\n const menuButtonDOM = menuButtonRef.current as HTMLButtonElement | null\n\n if (menuButtonDOM != null && tableCellNode != null) {\n const tableCellNodeDOM = editor.getElementByKey(tableCellNode.getKey())\n\n if (tableCellNodeDOM != null) {\n const tableCellRect = tableCellNodeDOM.getBoundingClientRect()\n const menuRect = menuButtonDOM.getBoundingClientRect()\n const anchorRect = anchorElem.getBoundingClientRect()\n\n const top = tableCellRect.top - anchorRect.top + 4\n const left = tableCellRect.right - menuRect.width - 10 - anchorRect.left\n\n menuButtonDOM.style.opacity = '1'\n menuButtonDOM.style.transform = `translate(${left}px, ${top}px)`\n } else {\n menuButtonDOM.style.opacity = '0'\n menuButtonDOM.style.transform = 'translate(-10000px, -10000px)'\n }\n }\n }, [menuButtonRef, tableCellNode, editor, anchorElem])\n\n const prevTableCellDOM = useRef(tableCellNode)\n\n useEffect(() => {\n if (prevTableCellDOM.current !== tableCellNode) {\n setIsMenuOpen(false)\n }\n\n prevTableCellDOM.current = tableCellNode\n }, [prevTableCellDOM, tableCellNode])\n\n return (\n <div className=\"table-cell-action-button-container\" ref={menuButtonRef}>\n {tableCellNode != null && (\n <React.Fragment>\n <button\n className=\"table-cell-action-button\"\n onClick={(e) => {\n e.stopPropagation()\n setIsMenuOpen(!isMenuOpen)\n }}\n ref={menuRootRef}\n type=\"button\"\n >\n <MeatballsIcon />\n </button>\n {isMenuOpen && (\n <TableActionMenu\n cellMerge={cellMerge}\n contextRef={menuRootRef}\n onClose={() => setIsMenuOpen(false)}\n setIsMenuOpen={setIsMenuOpen}\n tableCellNode={tableCellNode}\n />\n )}\n </React.Fragment>\n )}\n </div>\n )\n}\n\nexport const TableActionMenuPlugin: PluginComponentWithAnchor = ({ anchorElem }) => {\n const isEditable = useLexicalEditable()\n return createPortal(\n isEditable ? (\n <TableCellActionMenuContainer anchorElem={anchorElem ?? document.body} cellMerge />\n ) : null,\n anchorElem ?? document.body,\n )\n}\n", "'use client'\nimport React from 'react'\n\nexport const MeatballsIcon: React.FC = () => (\n <svg fill=\"none\" height=\"18\" viewBox=\"0 0 20 20\" width=\"18\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5 11C5.55228 11 6 10.5523 6 10C6 9.44772 5.55228 9 5 9C4.44772 9 4 9.44772 4 10C4 10.5523 4.44772 11 5 11Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M10 11C10.5523 11 11 10.5523 11 10C11 9.44772 10.5523 9 10 9C9.44772 9 9 9.44772 9 10C9 10.5523 9.44772 11 10 11Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M15 11C15.5523 11 16 10.5523 16 10C16 9.44772 15.5523 9 15 9C14.4477 9 14 9.44772 14 10C14 10.5523 14.4477 11 15 11Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\n\nimport type { TableCellNode, TableDOMCell, TableMapType, TableMapValueType } from '@lexical/table'\nimport type { LexicalEditor } from 'lexical'\nimport type { JSX, MouseEventHandler } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n $computeTableMapSkipCellCheck,\n $getTableNodeFromLexicalNodeOrThrow,\n $getTableRowIndexFromTableCellNode,\n $isTableCellNode,\n $isTableRowNode,\n getDOMCellFromTarget,\n} from '@lexical/table'\nimport { calculateZoomLevel } from '@lexical/utils'\nimport { $getNearestNodeFromDOMNode } from 'lexical'\nimport * as React from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\n\ntype MousePosition = {\n x: number\n y: number\n}\n\ntype MouseDraggingDirection = 'bottom' | 'right'\n\nconst MIN_ROW_HEIGHT = 33\nconst MIN_COLUMN_WIDTH = 50\n\nfunction TableCellResizer({ editor }: { editor: LexicalEditor }): JSX.Element {\n const targetRef = useRef<HTMLElement | null>(null)\n const resizerRef = useRef<HTMLDivElement | null>(null)\n const tableRectRef = useRef<ClientRect | null>(null)\n const editorConfig = useEditorConfigContext()\n\n const mouseStartPosRef = useRef<MousePosition | null>(null)\n const [mouseCurrentPos, updateMouseCurrentPos] = useState<MousePosition | null>(null)\n\n const [activeCell, updateActiveCell] = useState<TableDOMCell | null>(null)\n const [isMouseDown, updateIsMouseDown] = useState<boolean>(false)\n const [draggingDirection, updateDraggingDirection] = useState<MouseDraggingDirection | null>(null)\n\n const resetState = useCallback(() => {\n updateActiveCell(null)\n targetRef.current = null\n updateDraggingDirection(null)\n mouseStartPosRef.current = null\n tableRectRef.current = null\n }, [])\n\n const isMouseDownOnEvent = (event: MouseEvent) => {\n return (event.buttons & 1) === 1\n }\n\n useEffect(() => {\n const onMouseMove = (event: MouseEvent) => {\n setTimeout(() => {\n const target = event.target\n\n if (draggingDirection) {\n updateMouseCurrentPos({\n x: event.clientX,\n y: event.clientY,\n })\n return\n }\n updateIsMouseDown(isMouseDownOnEvent(event))\n if (resizerRef.current && resizerRef.current.contains(target as Node)) {\n return\n }\n\n if (targetRef.current !== target) {\n targetRef.current = target as HTMLElement\n const cell = getDOMCellFromTarget(target as HTMLElement)\n\n if (cell && activeCell !== cell) {\n editor.update(() => {\n const tableCellNode = $getNearestNodeFromDOMNode(cell.elem)\n\n if (!tableCellNode) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const tableElement = editor.getElementByKey(tableNode.getKey())\n\n if (!tableElement) {\n throw new Error('TableCellResizer: Table element not found.')\n }\n\n targetRef.current = target as HTMLElement\n tableRectRef.current = tableElement.getBoundingClientRect()\n updateActiveCell(cell)\n })\n } else if (cell == null) {\n resetState()\n }\n }\n }, 0)\n }\n\n const onMouseDown = (event: MouseEvent) => {\n setTimeout(() => {\n updateIsMouseDown(true)\n }, 0)\n }\n\n const onMouseUp = (event: MouseEvent) => {\n setTimeout(() => {\n updateIsMouseDown(false)\n }, 0)\n }\n\n const removeRootListener = editor.registerRootListener((rootElement, prevRootElement) => {\n rootElement?.addEventListener('mousemove', onMouseMove)\n rootElement?.addEventListener('mousedown', onMouseDown)\n rootElement?.addEventListener('mouseup', onMouseUp)\n\n prevRootElement?.removeEventListener('mousemove', onMouseMove)\n prevRootElement?.removeEventListener('mousedown', onMouseDown)\n prevRootElement?.removeEventListener('mouseup', onMouseUp)\n })\n\n return () => {\n removeRootListener()\n }\n }, [activeCell, draggingDirection, editor, resetState])\n\n const isHeightChanging = (direction: MouseDraggingDirection) => {\n if (direction === 'bottom') {\n return true\n }\n return false\n }\n\n const updateRowHeight = useCallback(\n (heightChange: number) => {\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n editor.update(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem)\n if (!$isTableCellNode(tableCellNode)) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n\n const tableRowIndex = $getTableRowIndexFromTableCellNode(tableCellNode)\n\n const tableRows = tableNode.getChildren()\n\n if (tableRowIndex >= tableRows.length || tableRowIndex < 0) {\n throw new Error('Expected table cell to be inside of table row.')\n }\n\n const tableRow = tableRows[tableRowIndex]\n\n if (!$isTableRowNode(tableRow)) {\n throw new Error('Expected table row')\n }\n\n let height = tableRow.getHeight()\n if (height === undefined) {\n const rowCells = tableRow.getChildren<TableCellNode>()\n height = Math.min(\n ...rowCells.map((cell) => getCellNodeHeight(cell, editor) ?? Infinity),\n )\n }\n\n const newHeight = Math.max(height + heightChange, MIN_ROW_HEIGHT)\n tableRow.setHeight(newHeight)\n },\n { tag: 'skip-scroll-into-view' },\n )\n },\n [activeCell, editor],\n )\n\n const getCellNodeWidth = (\n cell: TableCellNode,\n activeEditor: LexicalEditor,\n ): number | undefined => {\n const width = cell.getWidth()\n if (width !== undefined) {\n return width\n }\n\n const domCellNode = activeEditor.getElementByKey(cell.getKey())\n if (domCellNode == null) {\n return undefined\n }\n const computedStyle = getComputedStyle(domCellNode)\n return (\n domCellNode.clientWidth -\n parseFloat(computedStyle.paddingLeft) -\n parseFloat(computedStyle.paddingRight)\n )\n }\n\n const getCellNodeHeight = (\n cell: TableCellNode,\n activeEditor: LexicalEditor,\n ): number | undefined => {\n const domCellNode = activeEditor.getElementByKey(cell.getKey())\n return domCellNode?.clientHeight\n }\n\n const getCellColumnIndex = (tableCellNode: TableCellNode, tableMap: TableMapType) => {\n for (let row = 0; row < tableMap.length; row++) {\n for (let column = 0; column < tableMap[row].length; column++) {\n if (tableMap[row][column].cell === tableCellNode) {\n return column\n }\n }\n }\n }\n\n const updateColumnWidth = useCallback(\n (widthChange: number) => {\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n editor.update(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem)\n if (!$isTableCellNode(tableCellNode)) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const [tableMap] = $computeTableMapSkipCellCheck(tableNode, null, null)\n const columnIndex = getCellColumnIndex(tableCellNode, tableMap)\n if (columnIndex === undefined) {\n throw new Error('TableCellResizer: Table column not found.')\n }\n\n for (let row = 0; row < tableMap.length; row++) {\n const cell: TableMapValueType = tableMap[row][columnIndex]\n if (\n cell.startRow === row &&\n (columnIndex === tableMap[row].length - 1 ||\n tableMap[row][columnIndex].cell !== tableMap[row][columnIndex + 1].cell)\n ) {\n const width = getCellNodeWidth(cell.cell, editor)\n if (width === undefined) {\n continue\n }\n const newWidth = Math.max(width + widthChange, MIN_COLUMN_WIDTH)\n cell.cell.setWidth(newWidth)\n }\n }\n },\n { tag: 'skip-scroll-into-view' },\n )\n },\n [activeCell, editor],\n )\n\n const mouseUpHandler = useCallback(\n (direction: MouseDraggingDirection) => {\n const handler = (event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n if (mouseStartPosRef.current) {\n const { x, y } = mouseStartPosRef.current\n\n if (activeCell === null) {\n return\n }\n const zoom = calculateZoomLevel(event.target as Element)\n\n if (isHeightChanging(direction)) {\n const heightChange = (event.clientY - y) / zoom\n updateRowHeight(heightChange)\n } else {\n const widthChange = (event.clientX - x) / zoom\n updateColumnWidth(widthChange)\n }\n\n resetState()\n document.removeEventListener('mouseup', handler)\n }\n }\n return handler\n },\n [activeCell, resetState, updateColumnWidth, updateRowHeight],\n )\n\n const toggleResize = useCallback(\n (direction: MouseDraggingDirection): MouseEventHandler<HTMLDivElement> =>\n (event) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n mouseStartPosRef.current = {\n x: event.clientX,\n y: event.clientY,\n }\n updateMouseCurrentPos(mouseStartPosRef.current)\n updateDraggingDirection(direction)\n\n document.addEventListener('mouseup', mouseUpHandler(direction))\n },\n [activeCell, mouseUpHandler],\n )\n\n const getResizers = useCallback(() => {\n if (activeCell) {\n const { height, left, top, width } = activeCell.elem.getBoundingClientRect()\n const zoom = calculateZoomLevel(activeCell.elem)\n const zoneWidth = 10 // Pixel width of the zone where you can drag the edge\n const styles = {\n bottom: {\n backgroundColor: 'none',\n cursor: 'row-resize',\n height: `${zoneWidth}px`,\n left: `${window.pageXOffset + left}px`,\n top: `${window.pageYOffset + top + height - zoneWidth / 2}px`,\n width: `${width}px`,\n },\n right: {\n backgroundColor: 'none',\n cursor: 'col-resize',\n height: `${height}px`,\n left: `${window.pageXOffset + left + width - zoneWidth / 2}px`,\n top: `${window.pageYOffset + top}px`,\n width: `${zoneWidth}px`,\n },\n }\n\n const tableRect = tableRectRef.current\n\n if (draggingDirection && mouseCurrentPos && tableRect) {\n if (isHeightChanging(draggingDirection)) {\n styles[draggingDirection].left = `${window.pageXOffset + tableRect.left}px`\n styles[draggingDirection].top = `${window.pageYOffset + mouseCurrentPos.y / zoom}px`\n styles[draggingDirection].height = '3px'\n styles[draggingDirection].width = `${tableRect.width}px`\n } else {\n styles[draggingDirection].top = `${window.pageYOffset + tableRect.top}px`\n styles[draggingDirection].left = `${window.pageXOffset + mouseCurrentPos.x / zoom}px`\n styles[draggingDirection].width = '3px'\n styles[draggingDirection].height = `${tableRect.height}px`\n }\n\n styles[draggingDirection].backgroundColor = '#adf'\n }\n\n return styles\n }\n\n return {\n bottom: null,\n left: null,\n right: null,\n top: null,\n }\n }, [activeCell, draggingDirection, mouseCurrentPos])\n\n const resizerStyles = getResizers()\n\n return (\n <div ref={resizerRef}>\n {activeCell != null && !isMouseDown && (\n <React.Fragment>\n <div\n className={`${editorConfig.editorConfig.lexical.theme.tableCellResizer} TableCellResizer__ui`}\n onMouseDown={toggleResize('right')}\n style={resizerStyles.right || undefined}\n />\n <div\n className={`${editorConfig.editorConfig.lexical.theme.tableCellResizer} TableCellResizer__ui`}\n onMouseDown={toggleResize('bottom')}\n style={resizerStyles.bottom || undefined}\n />\n </React.Fragment>\n )}\n </div>\n )\n}\n\nexport const TableCellResizerPlugin: PluginComponent = () => {\n const [editor] = useLexicalComposerContext()\n const isEditable = useLexicalEditable()\n\n return useMemo(\n () => (isEditable ? createPortal(<TableCellResizer editor={editor} />, document.body) : null),\n [editor, isEditable],\n )\n}\n", "'use client'\n\nimport type { TableCellNode, TableRowNode } from '@lexical/table'\nimport type { EditorConfig, NodeKey } from 'lexical'\nimport type { JSX } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport {\n $getTableColumnIndexFromTableCellNode,\n $getTableRowIndexFromTableCellNode,\n $insertTableColumn__EXPERIMENTAL,\n $insertTableRow__EXPERIMENTAL,\n $isTableCellNode,\n $isTableNode,\n TableNode,\n} from '@lexical/table'\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\nimport { $getNearestNodeFromDOMNode } from 'lexical'\nimport { useEffect, useRef, useState } from 'react'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useDebounce } from '../../utils/useDebounce.js'\n\nconst BUTTON_WIDTH_PX = 20\n\nfunction TableHoverActionsContainer({ anchorElem }: { anchorElem: HTMLElement }): JSX.Element {\n const [editor] = useLexicalComposerContext()\n const editorConfig = useEditorConfigContext()\n const [isShownRow, setShownRow] = useState<boolean>(false)\n const [isShownColumn, setShownColumn] = useState<boolean>(false)\n const [shouldListenMouseMove, setShouldListenMouseMove] = useState<boolean>(false)\n const [position, setPosition] = useState({})\n const codeSetRef = useRef<Set<NodeKey>>(new Set())\n const tableDOMNodeRef = useRef<HTMLElement | null>(null)\n\n const debouncedOnMouseMove = useDebounce(\n (event: MouseEvent) => {\n const { isOutside, tableDOMNode } = getMouseInfo(event, editorConfig.editorConfig?.lexical)\n\n if (isOutside) {\n setShownRow(false)\n setShownColumn(false)\n return\n }\n\n if (!tableDOMNode) {\n return\n }\n\n tableDOMNodeRef.current = tableDOMNode\n\n let hoveredRowNode: TableCellNode | null = null\n let hoveredColumnNode: TableCellNode | null = null\n let tableDOMElement: HTMLElement | null = null\n\n editor.update(() => {\n const maybeTableCell = $getNearestNodeFromDOMNode(tableDOMNode)\n\n if ($isTableCellNode(maybeTableCell)) {\n const table = $findMatchingParent(maybeTableCell, (node) => $isTableNode(node))\n if (!$isTableNode(table)) {\n return\n }\n\n tableDOMElement = editor.getElementByKey(table?.getKey())\n\n if (tableDOMElement) {\n const rowCount = table.getChildrenSize()\n const colCount =\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n ((table as TableNode).getChildAtIndex(0) as TableRowNode)?.getChildrenSize()\n\n const rowIndex = $getTableRowIndexFromTableCellNode(maybeTableCell)\n const colIndex = $getTableColumnIndexFromTableCellNode(maybeTableCell)\n\n if (rowIndex === rowCount - 1) {\n hoveredRowNode = maybeTableCell\n } else if (colIndex === colCount - 1) {\n hoveredColumnNode = maybeTableCell\n }\n }\n }\n })\n\n if (tableDOMElement) {\n const {\n bottom: tableElemBottom,\n height: tableElemHeight,\n right: tableElemRight,\n width: tableElemWidth,\n x: tableElemX,\n y: tableElemY,\n } = (tableDOMElement as HTMLTableElement).getBoundingClientRect()\n\n const { left: editorElemLeft, y: editorElemY } = anchorElem.getBoundingClientRect()\n\n if (hoveredRowNode) {\n setShownColumn(false)\n setShownRow(true)\n setPosition({\n height: BUTTON_WIDTH_PX,\n left: tableElemX - editorElemLeft,\n top: tableElemBottom - editorElemY + 5,\n width: tableElemWidth,\n })\n } else if (hoveredColumnNode) {\n setShownColumn(true)\n setShownRow(false)\n setPosition({\n height: tableElemHeight,\n left: tableElemRight - editorElemLeft + 5,\n top: tableElemY - editorElemY,\n width: BUTTON_WIDTH_PX,\n })\n }\n }\n },\n 50,\n 250,\n )\n\n useEffect(() => {\n if (!shouldListenMouseMove) {\n return\n }\n\n document.addEventListener('mousemove', debouncedOnMouseMove)\n\n return () => {\n setShownRow(false)\n setShownColumn(false)\n\n document.removeEventListener('mousemove', debouncedOnMouseMove)\n }\n }, [shouldListenMouseMove, debouncedOnMouseMove])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerMutationListener(\n TableNode,\n (mutations) => {\n editor.getEditorState().read(() => {\n for (const [key, type] of mutations) {\n switch (type) {\n case 'created':\n codeSetRef.current.add(key)\n setShouldListenMouseMove(codeSetRef.current.size > 0)\n break\n\n case 'destroyed':\n codeSetRef.current.delete(key)\n setShouldListenMouseMove(codeSetRef.current.size > 0)\n break\n\n default:\n break\n }\n }\n })\n },\n { skipInitialization: false },\n ),\n )\n }, [editor])\n\n const insertAction = (insertRow: boolean) => {\n editor.update(() => {\n if (tableDOMNodeRef.current) {\n const maybeTableNode = $getNearestNodeFromDOMNode(tableDOMNodeRef.current)\n maybeTableNode?.selectEnd()\n if (insertRow) {\n $insertTableRow__EXPERIMENTAL()\n setShownRow(false)\n } else {\n $insertTableColumn__EXPERIMENTAL()\n setShownColumn(false)\n }\n }\n })\n }\n\n return (\n <>\n {isShownRow && (\n <button\n className={editorConfig.editorConfig.lexical.theme.tableAddRows}\n onClick={() => insertAction(true)}\n style={{ ...position }}\n />\n )}\n {isShownColumn && (\n <button\n className={editorConfig.editorConfig.lexical.theme.tableAddColumns}\n onClick={() => insertAction(false)}\n style={{ ...position }}\n />\n )}\n </>\n )\n}\n\nfunction getMouseInfo(\n event: MouseEvent,\n editorConfig: EditorConfig,\n): {\n isOutside: boolean\n tableDOMNode: HTMLElement | null\n} {\n const target = event.target\n\n if (target && target instanceof HTMLElement) {\n const tableDOMNode = target.closest<HTMLElement>(\n `td.${editorConfig.theme.tableCell}, th.${editorConfig.theme.tableCell}`,\n )\n\n const isOutside = !(\n tableDOMNode ||\n target.closest<HTMLElement>(`button.${editorConfig.theme.tableAddRows}`) ||\n target.closest<HTMLElement>(`button.${editorConfig.theme.tableAddColumns}`) ||\n target.closest<HTMLElement>(`div.${editorConfig.theme.tableCellResizer}`)\n )\n\n return { isOutside, tableDOMNode }\n } else {\n return { isOutside: true, tableDOMNode: null }\n }\n}\n\nexport function TableHoverActionsPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement\n}): React.ReactPortal | null {\n return createPortal(<TableHoverActionsContainer anchorElem={anchorElem} />, anchorElem)\n}\n", "'use client'\nimport { useMemo, useRef } from 'react'\n\nimport debounce from './debounce.js'\n\nexport function useDebounce<T extends (...args: never[]) => void>(\n fn: T,\n ms: number,\n maxWait?: number,\n) {\n const funcRef = useRef<T | null>(null)\n funcRef.current = fn\n\n return useMemo(\n () =>\n debounce(\n (...args: Parameters<T>) => {\n if (funcRef.current) {\n funcRef.current(...args)\n }\n },\n ms,\n { maxWait },\n ),\n [ms, maxWait],\n )\n}\n", "'use client'\n// Copied & modified from https://github.com/lodash/lodash/blob/main/src/debounce.ts\n/*\nThe MIT License\n\nCopyright JS Foundation and other contributors <https://js.foundation/>\n\nBased on Underscore.js, copyright Jeremy Ashkenas,\nDocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>\n\nThis software consists of voluntary contributions made by many\nindividuals. For exact contribution history, see the revision history\navailable at https://github.com/lodash/lodash\n\nThe following license applies to all parts of this software except as\ndocumented below:\n\n====\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n====\n\nCopyright and related rights for sample code are waived via CC0. Sample\ncode is defined as all source code displayed within the prose of the\ndocumentation.\n\nCC0: http://creativecommons.org/publicdomain/zero/1.0/\n\n====\n\nFiles located in the node_modules and vendor directories are externally\nmaintained libraries used by this software which have their own\nlicenses; we recommend you read them, as their terms may differ from the\nterms above.\n */\n\n/** Error message constants. */\nconst FUNC_ERROR_TEXT = 'Expected a function'\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nconst nativeMax = Math.max,\n nativeMin = Math.min\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n let lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT)\n }\n wait = wait || 0\n if (typeof options === 'object') {\n leading = !!options.leading\n maxing = 'maxWait' in options\n maxWait = maxing ? nativeMax(options.maxWait || 0, wait) : maxWait\n trailing = 'trailing' in options ? !!options.trailing : trailing\n }\n\n function invokeFunc(time) {\n const args = lastArgs,\n thisArg = lastThis\n\n lastArgs = lastThis = undefined\n lastInvokeTime = time\n result = func.apply(thisArg, args)\n return result\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait)\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result\n }\n\n function remainingWait(time) {\n const timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall\n\n return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting\n }\n\n function shouldInvoke(time) {\n const timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (\n lastCallTime === undefined ||\n timeSinceLastCall >= wait ||\n timeSinceLastCall < 0 ||\n (maxing && timeSinceLastInvoke >= maxWait)\n )\n }\n\n function timerExpired() {\n const time = Date.now()\n if (shouldInvoke(time)) {\n return trailingEdge(time)\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time))\n }\n\n function trailingEdge(time) {\n timerId = undefined\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time)\n }\n lastArgs = lastThis = undefined\n return result\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId)\n }\n lastInvokeTime = 0\n lastArgs = lastCallTime = lastThis = timerId = undefined\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(Date.now())\n }\n\n function debounced() {\n const time = Date.now(),\n isInvoking = shouldInvoke(time)\n\n // eslint-disable-next-line prefer-rest-params\n lastArgs = arguments\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n lastThis = this\n lastCallTime = time\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime)\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId)\n timerId = setTimeout(timerExpired, wait)\n return invokeFunc(lastCallTime)\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait)\n }\n return result\n }\n debounced.cancel = cancel\n debounced.flush = flush\n return debounced\n}\n\nexport default debounce\n", "'use client'\n\nimport type {\n EditorThemeClasses,\n Klass,\n LexicalCommand,\n LexicalEditor,\n LexicalNode,\n RangeSelection,\n} from 'lexical'\nimport type { JSX } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { TablePlugin as LexicalReactTablePlugin } from '@lexical/react/LexicalTablePlugin'\nimport { INSERT_TABLE_COMMAND, TableNode } from '@lexical/table'\nimport { mergeRegister } from '@lexical/utils'\nimport { formatDrawerSlug, useEditDepth, useModal } from '@payloadcms/ui'\nimport { $getSelection, $isRangeSelection, COMMAND_PRIORITY_EDITOR, createCommand } from 'lexical'\nimport { createContext, useContext, useEffect, useMemo, useState } from 'react'\nimport * as React from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { FieldsDrawer } from '../../../../../utilities/fieldsDrawer/Drawer.js'\nimport './index.scss'\n\nexport type CellContextShape = {\n cellEditorConfig: CellEditorConfig | null\n cellEditorPlugins: Array<JSX.Element> | JSX.Element | null\n set: (\n cellEditorConfig: CellEditorConfig | null,\n cellEditorPlugins: Array<JSX.Element> | JSX.Element | null,\n ) => void\n}\n\nexport type CellEditorConfig = Readonly<{\n namespace: string\n nodes?: ReadonlyArray<Klass<LexicalNode>>\n onError: (error: Error, editor: LexicalEditor) => void\n readOnly?: boolean\n theme?: EditorThemeClasses\n}>\n\nexport const OPEN_TABLE_DRAWER_COMMAND: LexicalCommand<{}> = createCommand(\n 'OPEN_EMBED_DRAWER_COMMAND',\n)\n\nexport const CellContext = createContext<CellContextShape>({\n cellEditorConfig: null,\n cellEditorPlugins: null,\n set: () => {\n // Empty\n },\n})\n\nexport function TableContext({ children }: { children: JSX.Element }) {\n const [contextValue, setContextValue] = useState<{\n cellEditorConfig: CellEditorConfig | null\n cellEditorPlugins: Array<JSX.Element> | JSX.Element | null\n }>({\n cellEditorConfig: null,\n cellEditorPlugins: null,\n })\n return (\n <CellContext.Provider\n value={useMemo(\n () => ({\n cellEditorConfig: contextValue.cellEditorConfig,\n cellEditorPlugins: contextValue.cellEditorPlugins,\n set: (cellEditorConfig, cellEditorPlugins) => {\n setContextValue({ cellEditorConfig, cellEditorPlugins })\n },\n }),\n [contextValue.cellEditorConfig, contextValue.cellEditorPlugins],\n )}\n >\n {children}\n </CellContext.Provider>\n )\n}\n\nexport const TablePlugin: PluginComponent = () => {\n const [editor] = useLexicalComposerContext()\n const cellContext = useContext(CellContext)\n const { closeModal, toggleModal } = useModal()\n const editDepth = useEditDepth()\n const { uuid } = useEditorConfigContext()\n\n const drawerSlug = formatDrawerSlug({\n slug: 'lexical-table-create-' + uuid,\n depth: editDepth,\n })\n\n useEffect(() => {\n if (!editor.hasNodes([TableNode])) {\n throw new Error('TablePlugin: TableNode is not registered on editor')\n }\n\n return mergeRegister(\n editor.registerCommand(\n OPEN_TABLE_DRAWER_COMMAND,\n () => {\n let rangeSelection: RangeSelection | null = null\n\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n rangeSelection = selection\n }\n })\n\n if (rangeSelection) {\n toggleModal(drawerSlug)\n }\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n )\n }, [cellContext, editor, toggleModal])\n\n return (\n <React.Fragment>\n <FieldsDrawer\n drawerSlug={drawerSlug}\n drawerTitle=\"Create Table\"\n featureKey=\"experimental_table\"\n handleDrawerSubmit={(_fields, data) => {\n closeModal(drawerSlug)\n\n if (!data.columns || !data.rows) {\n return\n }\n\n editor.dispatchCommand(INSERT_TABLE_COMMAND, {\n columns: String(data.columns),\n rows: String(data.rows),\n })\n }}\n schemaPathSuffix=\"fields\"\n />\n <LexicalReactTablePlugin hasCellBackgroundColor={false} hasCellMerge />\n </React.Fragment>\n )\n}\n", "'use client'\n\nimport { $isNodeSelection } from 'lexical'\n\nimport { UploadIcon } from '../../../lexical/ui/icons/Upload/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { slashMenuBasicGroupWithItems } from '../../shared/slashMenu/basicGroup.js'\nimport { toolbarAddDropdownGroupWithItems } from '../../shared/toolbar/addDropdownGroup.js'\nimport { INSERT_UPLOAD_WITH_DRAWER_COMMAND } from './drawer/commands.js'\nimport { $isUploadNode, UploadNode } from './nodes/UploadNode.js'\nimport { UploadPlugin } from './plugin/index.js'\n\nexport type UploadFeaturePropsClient = {\n collections: {\n [collection: string]: {\n hasExtraFields: boolean\n }\n }\n}\n\nexport const UploadFeatureClient = createClientFeature<UploadFeaturePropsClient>({\n nodes: [UploadNode],\n plugins: [\n {\n Component: UploadPlugin,\n position: 'normal',\n },\n ],\n slashMenu: {\n groups: [\n slashMenuBasicGroupWithItems([\n {\n Icon: UploadIcon,\n key: 'upload',\n keywords: ['upload', 'image', 'file', 'img', 'picture', 'photo', 'media'],\n label: ({ i18n }) => {\n return i18n.t('lexical:upload:label')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_UPLOAD_WITH_DRAWER_COMMAND, {\n replace: false,\n })\n },\n },\n ]),\n ],\n },\n toolbarFixed: {\n groups: [\n toolbarAddDropdownGroupWithItems([\n {\n ChildComponent: UploadIcon,\n isActive: ({ selection }) => {\n if (!$isNodeSelection(selection) || !selection.getNodes().length) {\n return false\n }\n\n const firstNode = selection.getNodes()[0]\n return $isUploadNode(firstNode)\n },\n key: 'upload',\n label: ({ i18n }) => {\n return i18n.t('lexical:upload:label')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_UPLOAD_WITH_DRAWER_COMMAND, {\n replace: false,\n })\n },\n },\n ]),\n ],\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const UploadIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M14.6667 4H5.33333C4.59695 4 4 4.59695 4 5.33333V14.6667C4 15.403 4.59695 16 5.33333 16H14.6667C15.403 16 16 15.403 16 14.6667V5.33333C16 4.59695 15.403 4 14.6667 4Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.99984 9.33366C8.73622 9.33366 9.33317 8.73671 9.33317 8.00033C9.33317 7.26395 8.73622 6.66699 7.99984 6.66699C7.26346 6.66699 6.6665 7.26395 6.6665 8.00033C6.6665 8.73671 7.26346 9.33366 7.99984 9.33366Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M16 11.9995L13.9427 9.94214C13.6926 9.69218 13.3536 9.55176 13 9.55176C12.6464 9.55176 12.3074 9.69218 12.0573 9.94214L6 15.9995\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n", "'use client'\nimport type { LexicalCommand } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $insertNodeToNearestRoot, mergeRegister } from '@lexical/utils'\nimport { useConfig } from '@payloadcms/ui'\nimport {\n $getPreviousSelection,\n $getSelection,\n $isParagraphNode,\n $isRangeSelection,\n COMMAND_PRIORITY_EDITOR,\n createCommand,\n} from 'lexical'\nimport React, { useEffect } from 'react'\n\nimport type { PluginComponentWithAnchor } from '../../../typesClient.js'\nimport type { UploadData } from '../../server/nodes/UploadNode.js'\nimport type { UploadFeaturePropsClient } from '../feature.client.js'\n\nimport { UploadDrawer } from '../drawer/index.js'\nimport { $createUploadNode, UploadNode } from '../nodes/UploadNode.js'\n\nexport type InsertUploadPayload = Readonly<Omit<UploadData, 'id'> & Partial<Pick<UploadData, 'id'>>>\n\nexport const INSERT_UPLOAD_COMMAND: LexicalCommand<InsertUploadPayload> =\n createCommand('INSERT_UPLOAD_COMMAND')\n\nexport const UploadPlugin: PluginComponentWithAnchor<UploadFeaturePropsClient> = ({\n clientProps,\n}) => {\n const [editor] = useLexicalComposerContext()\n const {\n config: { collections },\n } = useConfig()\n\n useEffect(() => {\n if (!editor.hasNodes([UploadNode])) {\n throw new Error('UploadPlugin: UploadNode not registered on editor')\n }\n\n return mergeRegister(\n editor.registerCommand<InsertUploadPayload>(\n INSERT_UPLOAD_COMMAND,\n (payload: InsertUploadPayload) => {\n editor.update(() => {\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n const uploadNode = $createUploadNode({\n data: {\n id: payload.id,\n fields: payload.fields,\n relationTo: payload.relationTo,\n value: payload.value,\n },\n })\n // Insert upload node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(uploadNode)\n\n const { focus } = selection\n const focusNode = focus.getNode()\n\n // First, delete currently selected node if it's an empty paragraph and if there are sufficient\n // paragraph nodes (more than 1) left in the parent node, so that we don't \"trap\" the user\n if (\n $isParagraphNode(focusNode) &&\n focusNode.getTextContentSize() === 0 &&\n focusNode\n .getParent()\n .getChildren()\n .filter((node) => $isParagraphNode(node)).length > 1\n ) {\n focusNode.remove()\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n )\n }, [editor])\n\n return <UploadDrawer enabledCollectionSlugs={collections.map(({ slug }) => slug)} />\n}\n", "'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useListDrawer } from '@payloadcms/ui'\nimport { $getNodeByKey, COMMAND_PRIORITY_EDITOR } from 'lexical'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { EnabledRelationshipsCondition } from '../../../relationship/client/utils/EnabledRelationshipsCondition.js'\nimport { $createUploadNode } from '../nodes/UploadNode.js'\nimport { INSERT_UPLOAD_COMMAND } from '../plugin/index.js'\nimport { INSERT_UPLOAD_WITH_DRAWER_COMMAND } from './commands.js'\n\nconst insertUpload = ({\n editor,\n relationTo,\n replaceNodeKey,\n value,\n}: {\n editor: LexicalEditor\n relationTo: string\n replaceNodeKey: null | string\n value: number | string\n}) => {\n if (!replaceNodeKey) {\n editor.dispatchCommand(INSERT_UPLOAD_COMMAND, {\n fields: null,\n relationTo,\n value,\n })\n } else {\n editor.update(() => {\n const node = $getNodeByKey(replaceNodeKey)\n if (node) {\n node.replace(\n $createUploadNode({\n data: {\n fields: null,\n relationTo,\n value,\n },\n }),\n )\n }\n })\n }\n}\n\ntype Props = {\n enabledCollectionSlugs: string[]\n}\n\nconst UploadDrawerComponent: React.FC<Props> = ({ enabledCollectionSlugs }) => {\n const [editor] = useLexicalComposerContext()\n\n const [replaceNodeKey, setReplaceNodeKey] = useState<null | string>(null)\n\n const [ListDrawer, ListDrawerToggler, { closeDrawer, openDrawer }] = useListDrawer({\n collectionSlugs: enabledCollectionSlugs,\n uploads: true,\n })\n\n useEffect(() => {\n return editor.registerCommand<{\n replace: { nodeKey: string } | false\n }>(\n INSERT_UPLOAD_WITH_DRAWER_COMMAND,\n (payload) => {\n setReplaceNodeKey(payload?.replace ? payload?.replace.nodeKey : null)\n openDrawer()\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n )\n }, [editor, openDrawer])\n\n const onSelect = useCallback(\n ({ collectionSlug, docID }) => {\n insertUpload({\n editor,\n relationTo: collectionSlug,\n replaceNodeKey,\n value: docID,\n })\n closeDrawer()\n },\n [editor, closeDrawer, replaceNodeKey],\n )\n\n return <ListDrawer onSelect={onSelect} />\n}\n\nexport const UploadDrawer = (props: Props): React.ReactNode => {\n return (\n <EnabledRelationshipsCondition {...props} uploads>\n <UploadDrawerComponent {...props} />\n </EnabledRelationshipsCondition>\n )\n}\n", "'use client'\n\nimport { ShimmerEffect, useClientFunctions, useFieldProps } from '@payloadcms/ui'\nimport React, { Suspense, lazy, useEffect, useState } from 'react'\n\nimport type { FeatureProviderClient } from '../features/typesClient.js'\nimport type { SanitizedClientEditorConfig } from '../lexical/config/types.js'\nimport type { GeneratedFeatureProviderComponent, LexicalRichTextFieldProps } from '../types.js'\n\nimport { defaultEditorLexicalConfig } from '../lexical/config/client/default.js'\nimport { loadClientFeatures } from '../lexical/config/client/loader.js'\nimport { sanitizeClientEditorConfig } from '../lexical/config/client/sanitize.js'\n\nconst RichTextEditor = lazy(() =>\n import('./Field.js').then((module) => ({ default: module.RichText })),\n)\n\nexport const RichTextField: React.FC<LexicalRichTextFieldProps> = (props) => {\n const {\n admin = {},\n field: { richTextComponentMap },\n lexicalEditorConfig,\n } = props\n const { schemaPath } = useFieldProps()\n const clientFunctions = useClientFunctions()\n const [hasLoadedFeatures, setHasLoadedFeatures] = useState(false)\n\n const [featureProviders, setFeatureProviders] = useState<\n FeatureProviderClient<unknown, unknown>[]\n >([])\n\n const [finalSanitizedEditorConfig, setFinalSanitizedEditorConfig] =\n useState<SanitizedClientEditorConfig>(null)\n\n let featureProviderComponents: GeneratedFeatureProviderComponent[] = richTextComponentMap.get(\n 'features',\n ) as GeneratedFeatureProviderComponent[]\n // order by order\n featureProviderComponents = featureProviderComponents.sort((a, b) => a.order - b.order)\n\n let featureProvidersAndComponentsToLoad = 0 // feature providers and components\n for (const featureProvider of featureProviderComponents) {\n const featureComponentKeys = Array.from(richTextComponentMap.keys()).filter((key) =>\n key.startsWith(\n `lexical_internal_feature.${featureProvider.key}.lexical_internal_components.`,\n ),\n )\n\n featureProvidersAndComponentsToLoad += 1\n featureProvidersAndComponentsToLoad += featureComponentKeys.length\n }\n\n useEffect(() => {\n if (!hasLoadedFeatures) {\n const featureProvidersLocal: FeatureProviderClient<unknown, unknown>[] = []\n let featureProvidersAndComponentsLoaded = 0\n\n Object.entries(clientFunctions).forEach(([key, plugin]) => {\n if (key.startsWith(`lexicalFeature.${schemaPath}.`)) {\n if (!key.includes('.lexical_internal_components.')) {\n featureProvidersLocal.push(plugin)\n }\n\n featureProvidersAndComponentsLoaded++\n }\n })\n\n if (featureProvidersAndComponentsLoaded === featureProvidersAndComponentsToLoad) {\n setFeatureProviders(featureProvidersLocal)\n setHasLoadedFeatures(true)\n\n /**\n * Loaded feature provided => create the final sanitized editor config\n */\n\n const resolvedClientFeatures = loadClientFeatures({\n clientFunctions,\n schemaPath,\n unSanitizedEditorConfig: {\n features: featureProvidersLocal,\n lexical: lexicalEditorConfig,\n },\n })\n\n setFinalSanitizedEditorConfig(\n sanitizeClientEditorConfig(\n lexicalEditorConfig ? lexicalEditorConfig : defaultEditorLexicalConfig,\n resolvedClientFeatures,\n admin,\n ),\n )\n }\n }\n }, [\n admin,\n hasLoadedFeatures,\n clientFunctions,\n schemaPath,\n featureProviderComponents.length,\n featureProviders,\n finalSanitizedEditorConfig,\n lexicalEditorConfig,\n featureProvidersAndComponentsToLoad,\n ])\n\n if (!hasLoadedFeatures) {\n return (\n <React.Fragment>\n {Array.isArray(featureProviderComponents) &&\n featureProviderComponents.map((featureProvider) => {\n // get all components starting with key feature.${FeatureProvider.key}.components.{featureComponentKey}\n const featureComponentKeys = Array.from(richTextComponentMap.keys()).filter((key) =>\n key.startsWith(\n `lexical_internal_feature.${featureProvider.key}.lexical_internal_components.`,\n ),\n )\n const featureComponents: React.ReactNode[] = featureComponentKeys.map((key) => {\n return richTextComponentMap.get(key)\n }) as React.ReactNode[] // TODO: Type better\n\n return (\n <React.Fragment key={featureProvider.key}>\n {featureComponents?.length\n ? featureComponents.map((FeatureComponent) => {\n return FeatureComponent\n })\n : null}\n {featureProvider.ClientFeature}\n </React.Fragment>\n )\n })}\n </React.Fragment>\n )\n }\n\n return (\n <Suspense fallback={<ShimmerEffect height=\"35vh\" />}>\n {finalSanitizedEditorConfig && (\n <RichTextEditor {...props} editorConfig={finalSanitizedEditorConfig} />\n )}\n </Suspense>\n )\n}\n", "'use client'\nexport function joinClasses(...args: Array<boolean | null | string | undefined>): string {\n return args.filter(Boolean).join(' ')\n}\n", "'use client'\ntype Force = [number, number]\ntype Listener = (force: Force, e: TouchEvent) => void\ninterface ElementValues {\n handleTouchend: (e: TouchEvent) => void\n handleTouchstart: (e: TouchEvent) => void\n listeners: Set<Listener>\n start: Force | null\n}\n\nconst elements = new WeakMap<HTMLElement, ElementValues>()\n\nfunction readTouch(e: TouchEvent): [number, number] | null {\n const touch = e.changedTouches[0]\n if (touch === undefined) {\n return null\n }\n return [touch.clientX, touch.clientY]\n}\n\nfunction addListener(element: HTMLElement, cb: Listener): () => void {\n let elementValues = elements.get(element)\n if (elementValues === undefined) {\n const listeners = new Set<Listener>()\n const handleTouchstart = (e: TouchEvent): void => {\n if (elementValues !== undefined) {\n elementValues.start = readTouch(e)\n }\n }\n const handleTouchend = (e: TouchEvent): void => {\n if (elementValues === undefined) {\n return\n }\n const { start } = elementValues\n if (start === null) {\n return\n }\n const end = readTouch(e)\n for (const listener of listeners) {\n if (end !== null) {\n listener([end[0] - start[0], end[1] - start[1]], e)\n }\n }\n }\n element.addEventListener('touchstart', handleTouchstart)\n element.addEventListener('touchend', handleTouchend)\n\n elementValues = {\n handleTouchend,\n handleTouchstart,\n listeners,\n start: null,\n }\n elements.set(element, elementValues)\n }\n elementValues.listeners.add(cb)\n return () => {\n deleteListener(element, cb)\n }\n}\n\nfunction deleteListener(element: HTMLElement, cb: Listener): void {\n const elementValues = elements.get(element)\n if (elementValues === undefined) {\n return\n }\n const { listeners } = elementValues\n listeners.delete(cb)\n if (listeners.size === 0) {\n elements.delete(element)\n element.removeEventListener('touchstart', elementValues.handleTouchstart)\n element.removeEventListener('touchend', elementValues.handleTouchend)\n }\n}\n\nexport function addSwipeLeftListener(\n element: HTMLElement,\n cb: (_force: number, e: TouchEvent) => void,\n): () => void {\n return addListener(element, (force, e) => {\n const [x, y] = force\n if (x < 0 && -x > Math.abs(y)) {\n cb(x, e)\n }\n })\n}\n\nexport function addSwipeRightListener(\n element: HTMLElement,\n cb: (_force: number, e: TouchEvent) => void,\n): () => void {\n return addListener(element, (force, e) => {\n const [x, y] = force\n if (x > 0 && x > Math.abs(y)) {\n cb(x, e)\n }\n })\n}\n\nexport function addSwipeUpListener(\n element: HTMLElement,\n cb: (_force: number, e: TouchEvent) => void,\n): () => void {\n return addListener(element, (force, e) => {\n const [x, y] = force\n if (y < 0 && -y > Math.abs(x)) {\n cb(x, e)\n }\n })\n}\n\nexport function addSwipeDownListener(\n element: HTMLElement,\n cb: (_force: number, e: TouchEvent) => void,\n): () => void {\n return addListener(element, (force, e) => {\n const [x, y] = force\n if (y > 0 && y > Math.abs(x)) {\n cb(x, e)\n }\n })\n}\n", "/* eslint-disable perfectionist/sort-objects */\n/* eslint-disable regexp/no-obscure-range */\n/* eslint-disable @typescript-eslint/no-redundant-type-constituents */\n/* eslint-disable regexp/no-misleading-unicode-character */\n//This copy-and-pasted from lexical here: https://github.com/facebook/lexical/blob/c2ceee223f46543d12c574e62155e619f9a18a5d/packages/lexical/src/LexicalConstants.ts\n\nimport type { ElementFormatType, TextFormatType, TextModeType } from 'lexical'\nexport type TextDetailType = 'directionless' | 'unmergable'\n\n// DOM\nexport const NodeFormat = {\n DOM_ELEMENT_TYPE: 1,\n DOM_TEXT_TYPE: 3,\n // Reconciling\n NO_DIRTY_NODES: 0,\n HAS_DIRTY_NODES: 1,\n FULL_RECONCILE: 2,\n // Text node modes\n IS_NORMAL: 0,\n IS_TOKEN: 1,\n IS_SEGMENTED: 2,\n IS_INERT: 3,\n // Text node formatting\n IS_BOLD: 1,\n IS_ITALIC: 1 << 1,\n IS_STRIKETHROUGH: 1 << 2,\n IS_UNDERLINE: 1 << 3,\n IS_CODE: 1 << 4,\n IS_SUBSCRIPT: 1 << 5,\n IS_SUPERSCRIPT: 1 << 6,\n IS_HIGHLIGHT: 1 << 7,\n // Text node details\n IS_DIRECTIONLESS: 1,\n IS_UNMERGEABLE: 1 << 1,\n // Element node formatting\n IS_ALIGN_LEFT: 1,\n IS_ALIGN_CENTER: 2,\n IS_ALIGN_RIGHT: 3,\n IS_ALIGN_JUSTIFY: 4,\n IS_ALIGN_START: 5,\n IS_ALIGN_END: 6,\n} as const\n\nexport const IS_ALL_FORMATTING =\n NodeFormat.IS_BOLD |\n NodeFormat.IS_ITALIC |\n NodeFormat.IS_STRIKETHROUGH |\n NodeFormat.IS_UNDERLINE |\n NodeFormat.IS_CODE |\n NodeFormat.IS_SUBSCRIPT |\n NodeFormat.IS_SUPERSCRIPT |\n NodeFormat.IS_HIGHLIGHT\n\n// Reconciliation\nexport const NON_BREAKING_SPACE = '\\u00A0'\n\nexport const DOUBLE_LINE_BREAK = '\\n\\n'\n\n// For FF, we need to use a non-breaking space, or it gets composition\n// in a stuck state.\n\nconst RTL = '\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC'\nconst LTR =\n 'A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6' +\n '\\u00F8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF\\u200E\\u2C00-\\uFB1C' +\n '\\uFE00-\\uFE6F\\uFEFD-\\uFFFF'\n\n// eslint-disable-next-line no-misleading-character-class\nexport const RTL_REGEX = new RegExp('^[^' + LTR + ']*[' + RTL + ']')\n// eslint-disable-next-line no-misleading-character-class\nexport const LTR_REGEX = new RegExp('^[^' + RTL + ']*[' + LTR + ']')\n\nexport const TEXT_TYPE_TO_FORMAT: Record<TextFormatType | string, number> = {\n bold: NodeFormat.IS_BOLD,\n code: NodeFormat.IS_CODE,\n highlight: NodeFormat.IS_HIGHLIGHT,\n italic: NodeFormat.IS_ITALIC,\n strikethrough: NodeFormat.IS_STRIKETHROUGH,\n subscript: NodeFormat.IS_SUBSCRIPT,\n superscript: NodeFormat.IS_SUPERSCRIPT,\n underline: NodeFormat.IS_UNDERLINE,\n}\n\nexport const DETAIL_TYPE_TO_DETAIL: Record<TextDetailType | string, number> = {\n directionless: NodeFormat.IS_DIRECTIONLESS,\n unmergeable: NodeFormat.IS_UNMERGEABLE,\n}\n\nexport const ELEMENT_TYPE_TO_FORMAT: Record<Exclude<ElementFormatType, ''>, number> = {\n center: NodeFormat.IS_ALIGN_CENTER,\n end: NodeFormat.IS_ALIGN_END,\n justify: NodeFormat.IS_ALIGN_JUSTIFY,\n left: NodeFormat.IS_ALIGN_LEFT,\n right: NodeFormat.IS_ALIGN_RIGHT,\n start: NodeFormat.IS_ALIGN_START,\n}\n\nexport const ELEMENT_FORMAT_TO_TYPE: Record<number, ElementFormatType> = {\n [NodeFormat.IS_ALIGN_CENTER]: 'center',\n [NodeFormat.IS_ALIGN_END]: 'end',\n [NodeFormat.IS_ALIGN_JUSTIFY]: 'justify',\n [NodeFormat.IS_ALIGN_LEFT]: 'left',\n [NodeFormat.IS_ALIGN_RIGHT]: 'right',\n [NodeFormat.IS_ALIGN_START]: 'start',\n}\n\nexport const TEXT_MODE_TO_TYPE: Record<TextModeType, 0 | 1 | 2> = {\n normal: NodeFormat.IS_NORMAL,\n segmented: NodeFormat.IS_SEGMENTED,\n token: NodeFormat.IS_TOKEN,\n}\n\nexport const TEXT_TYPE_TO_MODE: Record<number, TextModeType> = {\n [NodeFormat.IS_NORMAL]: 'normal',\n [NodeFormat.IS_SEGMENTED]: 'segmented',\n [NodeFormat.IS_TOKEN]: 'token',\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["slashMenuBasicGroupWithItems", "items", "key", "label", "i18n", "t", "createHeadlessEditor", "useClientFunctions", "useTableCell", "$getRoot", "React", "useEffect", "useState", "LexicalEditorTheme", "block", "blockCursor", "characterLimit", "code", "codeHighlight", "atrule", "attr", "boolean", "builtin", "cdata", "char", "class", "comment", "constant", "deleted", "doctype", "entity", "function", "important", "inserted", "keyword", "namespace", "number", "operator", "prolog", "property", "punctuation", "regex", "selector", "string", "symbol", "tag", "url", "variable", "embedBlock", "base", "focus", "hashtag", "heading", "h1", "h2", "h3", "h4", "h5", "h6", "hr", "indent", "inlineImage", "link", "list", "checklist", "listitem", "listitemChecked", "listitemUnchecked", "nested", "olDepth", "ul", "ltr", "mark", "markOverlap", "paragraph", "quote", "relationship", "rtl", "table", "tableAddColumns", "tableAddRows", "tableCell", "tableCellActionButton", "tableCellActionButtonContainer", "tableCellEditing", "tableCellHeader", "tableCellPrimarySelected", "tableCellResizer", "tableCellSelected", "tableCellSortedIndicator", "tableResizeRuler", "tableSelected", "text", "bold", "italic", "strikethrough", "subscript", "superscript", "underline", "underlineStrikethrough", "upload", "defaultEditorLexicalConfig", "namespace", "theme", "LexicalEditorTheme", "loadClientFeatures", "clientFunctions", "schemaPath", "unSanitizedEditorConfig", "featureProvider", "features", "clientFeatureProps", "featureKey", "order", "undefined", "Error", "sort", "a", "b", "featureProviderMap", "Map", "map", "f", "resolvedFeatures", "loaded", "relevantClientFunctions", "Object", "entries", "forEach", "key", "plugin", "startsWith", "featureComponentKey", "split", "feature", "set", "sanitizeClientFeatures", "features", "sanitized", "enabledFeatures", "hooks", "load", "save", "markdownTransformers", "nodes", "plugins", "providers", "slashMenu", "dynamicGroups", "groups", "toolbarFixed", "toolbarInline", "size", "forEach", "feature", "length", "concat", "plugin", "i", "push", "Component", "clientProps", "sanitizedClientFeatureProps", "key", "position", "group", "foundGroup", "find", "sanitizedGroup", "filter", "items", "optionGroup", "sort", "a", "b", "order", "sanitizeClientEditorConfig", "lexical", "resolvedClientFeatureMap", "admin", "resolvedFeatureMap", "RichTextCell", "props", "admin", "field", "_schemaPath", "richTextComponentMap", "lexicalEditorConfig", "preview", "setPreview", "React", "useState", "cellData", "useTableCell", "clientFunctions", "useClientFunctions", "hasLoadedFeatures", "setHasLoadedFeatures", "featureProviders", "setFeatureProviders", "finalSanitizedEditorConfig", "setFinalSanitizedEditorConfig", "featureProviderComponents", "get", "sort", "a", "b", "order", "featureProvidersAndComponentsToLoad", "featureProvider", "featureComponentKeys", "Array", "from", "keys", "filter", "key", "startsWith", "length", "useEffect", "featureProvidersLocal", "featureProvidersAndComponentsLoaded", "Object", "entries", "forEach", "plugin", "includes", "push", "resolvedClientFeatures", "loadClientFeatures", "schemaPath", "unSanitizedEditorConfig", "features", "lexical", "sanitizeClientEditorConfig", "defaultEditorLexicalConfig", "dataToUse", "hooks", "load", "hook", "incomingEditorState", "isArray", "headlessEditor", "createHeadlessEditor", "namespace", "nodes", "getEnabledNodes", "editorConfig", "theme", "setEditorState", "parseEditorState", "textContent", "getEditorState", "read", "$getRoot", "getTextContent", "_jsx", "Fragment", "map", "featureComponents", "_jsxs", "FeatureComponent", "ClientFeature", "$isElementNode", "$isRangeSelection", "FORMAT_ELEMENT_COMMAND", "AlignCenterIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "strokeWidth", "AlignJustifyIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "strokeWidth", "AlignLeftIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "strokeWidth", "AlignRightIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "strokeWidth", "useAddClientFunction", "useFieldProps", "useTableCell", "useLexicalFeature", "featureKey", "feature", "schemaPath", "schemaPathFromFieldProps", "cellProps", "field", "_schemaPath", "createClientComponent", "clientFeature", "props", "useLexicalFeature", "featureKey", "createClientFeature", "feature", "createClientComponent", "props", "featureProviderClient", "clientFeatureProps", "clientFunctions", "featureProviderMap", "resolvedFeatures", "unSanitizedEditorConfig", "toReturn", "sanitizedClientFeatureProps", "newFeature", "toolbarAlignGroupWithItems", "items", "type", "ChildComponent", "AlignLeftIcon", "key", "order", "toolbarGroups", "toolbarAlignGroupWithItems", "ChildComponent", "AlignLeftIcon", "isActive", "selection", "$isRangeSelection", "node", "getNodes", "$isElementNode", "getFormatType", "parent", "getParent", "key", "label", "i18n", "t", "onSelect", "editor", "dispatchCommand", "FORMAT_ELEMENT_COMMAND", "order", "AlignCenterIcon", "AlignRightIcon", "AlignJustifyIcon", "AlignFeatureClient", "createClientFeature", "toolbarFixed", "groups", "toolbarInline", "$createQuoteNode", "$isQuoteNode", "QuoteNode", "$setBlocksType", "$getSelection", "$isRangeSelection", "BlockquoteIcon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "TextIcon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "toolbarTextDropdownGroupWithItems", "items", "type", "ChildComponent", "TextIcon", "key", "order", "$createQuoteNode", "$isQuoteNode", "QuoteNode", "$createLineBreakNode", "MarkdownTransformer", "type", "dependencies", "export", "node", "exportChildren", "lines", "split", "output", "line", "push", "join", "regExp", "replace", "parentNode", "children", "_match", "isImport", "previousNode", "getPreviousSibling", "splice", "getChildrenSize", "select", "remove", "append", "toolbarGroups", "toolbarTextDropdownGroupWithItems", "ChildComponent", "BlockquoteIcon", "isActive", "selection", "$isRangeSelection", "node", "getNodes", "$isQuoteNode", "getParent", "key", "label", "i18n", "t", "onSelect", "editor", "update", "$getSelection", "$setBlocksType", "$createQuoteNode", "order", "BlockquoteFeatureClient", "createClientFeature", "markdownTransformers", "MarkdownTransformer", "nodes", "QuoteNode", "slashMenu", "groups", "slashMenuBasicGroupWithItems", "Icon", "keywords", "toolbarFixed", "toolbarInline", "getTranslation", "BlockIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "rx", "stroke", "x", "y", "InlineBlocksIcon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "clipRule", "d", "fillRule", "ObjectID", "React", "DecoratorBlockNode", "ObjectID", "deepCopyObjectSimple", "ServerBlockNode", "__fields", "constructor", "fields", "format", "key", "clone", "node", "__format", "__key", "getType", "importDOM", "importJSON", "serializedNode", "version", "data", "$createServerBlockNode", "setFormat", "isInline", "decorate", "editor", "config", "exportDOM", "element", "document", "createElement", "text", "createTextNode", "getTextContent", "append", "exportJSON", "type", "getFields", "getLatest", "setFields", "fieldsCopy", "writable", "getWritable", "id", "default", "toHexString", "BlockComponent", "React", "lazy", "then", "module", "default", "BlockNode", "ServerBlockNode", "clone", "node", "getType", "importJSON", "serializedNode", "version", "fields", "data", "$createBlockNode", "setFormat", "format", "decorate", "editor", "config", "_jsx", "formData", "getFields", "nodeKey", "getKey", "exportJSON", "id", "ObjectID", "toHexString", "$isBlockNode", "c", "_c", "useLexicalComposerContext", "$insertNodeToNearestRoot", "$wrapNodeInElement", "mergeRegister", "getTranslation", "formatDrawerSlug", "useEditDepth", "useFieldProps", "useModal", "useTranslation", "$createParagraphNode", "$getNodeByKey", "$getPreviousSelection", "$getSelection", "$insertNodes", "$isParagraphNode", "$isRangeSelection", "$isRootOrShadowRoot", "COMMAND_PRIORITY_EDITOR", "useEffect", "useState", "BlocksPlugin", "$", "_c", "editor", "useLexicalComposerContext", "closeModal", "toggleModal", "useModal", "blockFields", "setBlockFields", "useState", "blockType", "setBlockType", "targetNodeKey", "setTargetNodeKey", "i18n", "t", "useTranslation", "schemaPath", "useFieldProps", "uuid", "useEditorConfigContext", "editDepth", "useEditDepth", "t0", "t1", "formatDrawerSlug", "slug", "depth", "drawerSlug", "field", "t2", "richTextComponentMap", "t3", "t4", "hasNodes", "BlockNode", "Error", "mergeRegister", "registerCommand", "INSERT_BLOCK_COMMAND", "payload", "update", "selection", "$getSelection", "$getPreviousSelection", "$isRangeSelection", "blockNode", "$createBlockNode", "$insertNodeToNearestRoot", "focus", "focusNode", "getNode", "$isParagraphNode", "getTextContentSize", "getParent", "getChildren", "filter", "node", "length", "remove", "COMMAND_PRIORITY_EDITOR", "INSERT_INLINE_BLOCK_COMMAND", "fields", "node_0", "$getNodeByKey", "setFields", "inlineBlockNode", "$createInlineBlockNode", "$insertNodes", "$isRootOrShadowRoot", "getParentOrThrow", "$wrapNodeInElement", "$createParagraphNode", "selectEnd", "OPEN_INLINE_BLOCK_DRAWER_COMMAND", "t5", "fields_0", "nodeKey", "rangeSelection", "getEditorState", "read", "selection_0", "useEffect", "schemaFieldsPath", "componentMapRenderedBlockPath", "t6", "Symbol", "for", "bb0", "blocksField", "has", "get", "clientBlock", "blocks", "find", "block", "blockDisplayName", "labels", "singular", "getTranslation", "t7", "_fields", "data", "dispatchCommand", "_jsx", "FieldsDrawer", "drawerTitle", "id", "label", "featureKey", "fieldMapOverride", "handleDrawerSubmit", "schemaFieldsPathOverride", "schemaPathSuffix", "BlocksFeatureClient", "createClientFeature", "props", "nodes", "BlockNode", "InlineBlockNode", "plugins", "Component", "BlocksPlugin", "position", "sanitizedClientFeatureProps", "slashMenu", "groups", "clientBlockSlugs", "length", "items", "map", "blockSlug", "Icon", "BlockIcon", "key", "keywords", "label", "i18n", "richTextComponentMap", "clientBlock", "get", "blocks", "find", "_block", "slug", "labels", "singular", "getTranslation", "onSelect", "editor", "dispatchCommand", "INSERT_BLOCK_COMMAND", "id", "blockName", "blockType", "t", "clientInlineBlockSlugs", "inlineBlockSlug", "InlineBlocksIcon", "OPEN_INLINE_BLOCK_DRAWER_COMMAND", "fields", "filter", "Boolean", "toolbarFixed", "type", "ChildComponent", "index", "isActive", "undefined", "order", "useLexicalComposerContext", "$createParagraphNode", "$createTextNode", "$getRoot", "React", "useCallback", "useEffect", "useLayoutEffect", "useRef", "useState", "CAN_USE_DOM", "window", "document", "createElement", "documentMode", "CAN_USE_DOM", "document", "IS_APPLE", "test", "navigator", "platform", "IS_FIREFOX", "userAgent", "CAN_USE_BEFORE_INPUT", "window", "InputEvent", "IS_SAFARI", "IS_IOS", "MSStream", "IS_ANDROID", "IS_WINDOWS", "IS_CHROME", "IS_APPLE_WEBKIT", "copy", "text", "textArea", "document", "createElement", "value", "style", "position", "opacity", "body", "appendChild", "focus", "select", "result", "execCommand", "console", "log", "error", "removeChild", "download", "filename", "a", "setAttribute", "encodeURIComponent", "display", "click", "formatStep", "step", "formattedStep", "formatOneStep", "name", "x", "y", "anchorPath", "toString", "anchorOffset", "focusPath", "focusOffset", "count", "join", "isSelectAll", "event", "key", "toLowerCase", "IS_APPLE", "metaKey", "ctrlKey", "sanitizeSelection", "selection", "anchorNode", "focusNode", "getPathFromNodeToEditor", "node", "rootElement", "currentNode", "path", "unshift", "Array", "from", "parentNode", "childNodes", "indexOf", "keyPresses", "Set", "useTestRecorder", "editor", "steps", "setSteps", "useState", "isRecording", "setIsRecording", "setCurrentInnerHTML", "templatedTest", "setTemplatedTest", "previousSelectionRef", "useRef", "skipNextSelectionChangeRef", "preRef", "getCurrentEditor", "useCallback", "generateTestContent", "getRootElement", "browserSelection", "window", "getSelection", "contains", "map", "pushStep", "currentSteps", "currentIndex", "length", "lastStep", "slice", "useLayoutEffect", "onKeyDown", "has", "onKeyUp", "registerRootListener", "prevRootElement", "removeEventListener", "addEventListener", "current", "scrollTo", "scrollHeight", "useEffect", "testContent", "registerUpdateListener", "dirtyElements", "dirtyLeaves", "editorState", "currentSelection", "_selection", "previousSelection", "skipNextSelectionChange", "size", "innerHTML", "toggleEditorSelection", "currentEditor", "update", "root", "$getRoot", "clear", "$createTextNode", "append", "$createParagraphNode", "currentIsRecording", "onSnapshotClick", "onCopyClick", "onDownloadClick", "_jsx", "className", "id", "onClick", "e", "preventDefault", "title", "type", "_jsxs", "ref", "TestRecorderPlugin", "useLexicalComposerContext", "testRecorderButton", "testRecorderOutput", "Fragment", "TestRecorderFeatureClient", "createClientFeature", "plugins", "Component", "TestRecorderPlugin", "position", "c", "_c", "useLexicalComposerContext", "TreeView", "TreeViewPlugin", "$", "editor", "t0", "_jsx", "timeTravelButtonClassName", "timeTravelPanelButtonClassName", "timeTravelPanelClassName", "timeTravelPanelSliderClassName", "treeTypeButtonClassName", "viewClassName", "TreeViewFeatureClient", "createClientFeature", "plugins", "Component", "TreeViewPlugin", "position", "$isRangeSelection", "FORMAT_TEXT_COMMAND", "BoldIcon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "toolbarFormatGroupWithItems", "items", "type", "key", "order", "BOLD_ITALIC_STAR", "type", "format", "tag", "BOLD_ITALIC_UNDERSCORE", "intraword", "BOLD_STAR", "BOLD_UNDERSCORE", "toolbarGroups", "toolbarFormatGroupWithItems", "ChildComponent", "BoldIcon", "isActive", "selection", "$isRangeSelection", "hasFormat", "key", "onSelect", "editor", "dispatchCommand", "FORMAT_TEXT_COMMAND", "order", "BoldFeatureClient", "createClientFeature", "featureProviderMap", "markdownTransformers", "BOLD_STAR", "BOLD_UNDERSCORE", "get", "push", "BOLD_ITALIC_UNDERSCORE", "BOLD_ITALIC_STAR", "toolbarFixed", "groups", "toolbarInline", "$isRangeSelection", "FORMAT_TEXT_COMMAND", "CodeIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "INLINE_CODE", "type", "format", "tag", "toolbarGroups", "toolbarFormatGroupWithItems", "ChildComponent", "CodeIcon", "isActive", "selection", "$isRangeSelection", "hasFormat", "key", "onSelect", "editor", "dispatchCommand", "FORMAT_TEXT_COMMAND", "order", "InlineCodeFeatureClient", "createClientFeature", "markdownTransformers", "INLINE_CODE", "toolbarFixed", "groups", "toolbarInline", "$isRangeSelection", "FORMAT_TEXT_COMMAND", "ItalicIcon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "ITALIC_STAR", "type", "format", "tag", "ITALIC_UNDERSCORE", "intraword", "toolbarGroups", "toolbarFormatGroupWithItems", "ChildComponent", "ItalicIcon", "isActive", "selection", "$isRangeSelection", "hasFormat", "key", "onSelect", "editor", "dispatchCommand", "FORMAT_TEXT_COMMAND", "order", "ItalicFeatureClient", "createClientFeature", "markdownTransformers", "ITALIC_STAR", "ITALIC_UNDERSCORE", "toolbarFixed", "groups", "toolbarInline", "$isRangeSelection", "FORMAT_TEXT_COMMAND", "StrikethroughIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "STRIKETHROUGH", "type", "format", "tag", "toolbarGroups", "toolbarFormatGroupWithItems", "ChildComponent", "StrikethroughIcon", "isActive", "selection", "$isRangeSelection", "hasFormat", "key", "onSelect", "editor", "dispatchCommand", "FORMAT_TEXT_COMMAND", "order", "StrikethroughFeatureClient", "createClientFeature", "markdownTransformers", "STRIKETHROUGH", "toolbarFixed", "groups", "toolbarInline", "$isRangeSelection", "FORMAT_TEXT_COMMAND", "SubscriptIcon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "toolbarGroups", "toolbarFormatGroupWithItems", "ChildComponent", "SubscriptIcon", "isActive", "selection", "$isRangeSelection", "hasFormat", "key", "onSelect", "editor", "dispatchCommand", "FORMAT_TEXT_COMMAND", "order", "SubscriptFeatureClient", "createClientFeature", "toolbarFixed", "groups", "toolbarInline", "$isRangeSelection", "FORMAT_TEXT_COMMAND", "SuperscriptIcon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "toolbarGroups", "toolbarFormatGroupWithItems", "ChildComponent", "SuperscriptIcon", "isActive", "selection", "$isRangeSelection", "hasFormat", "key", "onSelect", "editor", "dispatchCommand", "FORMAT_TEXT_COMMAND", "order", "SuperscriptFeatureClient", "createClientFeature", "toolbarFixed", "groups", "toolbarInline", "$isRangeSelection", "FORMAT_TEXT_COMMAND", "UnderlineIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "toolbarGroups", "toolbarFormatGroupWithItems", "ChildComponent", "UnderlineIcon", "isActive", "selection", "$isRangeSelection", "hasFormat", "key", "onSelect", "editor", "dispatchCommand", "FORMAT_TEXT_COMMAND", "order", "UnderlineFeatureClient", "createClientFeature", "toolbarFixed", "groups", "toolbarInline", "$createHeadingNode", "$isHeadingNode", "HeadingNode", "$setBlocksType", "$getSelection", "$isRangeSelection", "H1Icon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "H2Icon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "H3Icon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "H4Icon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "H5Icon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "H6Icon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "$createHeadingNode", "$isHeadingNode", "HeadingNode", "createBlockNode", "createNode", "parentNode", "children", "match", "node", "append", "replace", "select", "MarkdownTransformer", "enabledHeadingSizes", "pattern", "map", "tag", "Number", "slice", "size", "join", "regExp", "RegExp", "type", "dependencies", "HeadingNode", "export", "node", "exportChildren", "$isHeadingNode", "level", "getTag", "repeat", "replace", "createBlockNode", "match", "length", "$createHeadingNode", "$setHeading", "headingSize", "selection", "$getSelection", "$setBlocksType", "$createHeadingNode", "iconImports", "h1", "H1Icon", "h2", "H2Icon", "h3", "H3Icon", "h4", "H4Icon", "h5", "H5Icon", "h6", "H6Icon", "HeadingFeatureClient", "createClientFeature", "props", "enabledHeadingSizes", "toolbarGroups", "toolbarTextDropdownGroupWithItems", "map", "i", "ChildComponent", "isActive", "$isRangeSelection", "node", "getNodes", "$isHeadingNode", "getTag", "parent", "getParent", "key", "label", "i18n", "t", "headingLevel", "charAt", "onSelect", "editor", "update", "order", "markdownTransformers", "MarkdownTransformer", "nodes", "HeadingNode", "sanitizedClientFeatureProps", "slashMenu", "groups", "length", "slashMenuBasicGroupWithItems", "Icon", "keywords", "toolbarFixed", "toolbarInline", "$isNodeSelection", "HorizontalRuleIcon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "x", "y", "AddIcon", "_jsxs", "fill", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "toolbarAddDropdownGroupWithItems", "items", "type", "ChildComponent", "AddIcon", "key", "order", "MarkdownTransformer", "type", "dependencies", "HorizontalRuleNode", "export", "node", "exportChildren", "$isHorizontalRuleNode", "regExp", "replace", "parentNode", "$createHorizontalRuleNode", "c", "_c", "useLexicalComposerContext", "$insertNodeToNearestRoot", "$getSelection", "$isRangeSelection", "COMMAND_PRIORITY_EDITOR", "useEffect", "HorizontalRulePlugin", "$", "_c", "editor", "useLexicalComposerContext", "t0", "t1", "registerCommand", "INSERT_HORIZONTAL_RULE_COMMAND", "type", "selection", "$getSelection", "$isRangeSelection", "focus", "getNode", "horizontalRuleNode", "$createHorizontalRuleNode", "$insertNodeToNearestRoot", "COMMAND_PRIORITY_EDITOR", "useEffect", "HorizontalRuleFeatureClient", "createClientFeature", "markdownTransformers", "MarkdownTransformer", "nodes", "HorizontalRuleNode", "plugins", "Component", "HorizontalRulePlugin", "position", "slashMenu", "groups", "slashMenuBasicGroupWithItems", "Icon", "HorizontalRuleIcon", "key", "keywords", "label", "i18n", "t", "onSelect", "editor", "dispatchCommand", "INSERT_HORIZONTAL_RULE_COMMAND", "undefined", "toolbarFixed", "toolbarAddDropdownGroupWithItems", "ChildComponent", "isActive", "selection", "$isNodeSelection", "getNodes", "length", "firstNode", "$isHorizontalRuleNode", "INDENT_CONTENT_COMMAND", "OUTDENT_CONTENT_COMMAND", "IndentDecreaseIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "strokeWidth", "IndentIncreaseIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "strokeWidth", "toolbarIndentGroupWithItems", "items", "type", "key", "order", "toolbarGroups", "toolbarIndentGroupWithItems", "ChildComponent", "IndentDecreaseIcon", "isActive", "isEnabled", "selection", "getNodes", "length", "node", "__indent", "getParent", "key", "label", "i18n", "t", "onSelect", "editor", "dispatchCommand", "OUTDENT_CONTENT_COMMAND", "undefined", "order", "IndentIncreaseIcon", "INDENT_CONTENT_COMMAND", "IndentFeatureClient", "createClientFeature", "toolbarFixed", "groups", "toolbarInline", "$findMatchingParent", "$getSelection", "$isRangeSelection", "LinkIcon", "_jsx", "className", "fill", "height", "viewBox", "width", "xmlns", "d", "stroke", "strokeLinecap", "strokeLinejoin", "$isAtNodeEnd", "getSelectedNode", "selection", "anchor", "focus", "anchorNode", "getNode", "focusNode", "isBackward", "toolbarFeatureButtonsGroupWithItems", "items", "type", "key", "order", "$createTextNode", "$isTextNode", "addClassNamesToElement", "isHTMLAnchorElement", "ObjectID", "$applyNodeReplacement", "$createTextNode", "$getSelection", "$isElementNode", "$isRangeSelection", "ElementNode", "createCommand", "SUPPORTED_URL_PROTOCOLS", "Set", "LinkNode", "__fields", "__id", "constructor", "id", "fields", "doc", "linkType", "newTab", "url", "undefined", "key", "clone", "node", "__key", "getType", "importDOM", "a", "conversion", "$convertAnchorElement", "priority", "importJSON", "serializedNode", "version", "value", "default", "toHexString", "$createLinkNode", "setFormat", "format", "setIndent", "indent", "setDirection", "direction", "canBeEmpty", "canInsertTextAfter", "canInsertTextBefore", "createDOM", "config", "element", "document", "createElement", "href", "sanitizeUrl", "target", "rel", "manageRel", "theme", "link", "exportJSON", "returnObject", "type", "getFields", "getID", "extractWithChild", "child", "selection", "destination", "anchorNode", "anchor", "getNode", "focusNode", "focus", "isParentOf", "getTextContent", "length", "getLatest", "insertNewAfter", "restoreSelection", "getParentOrThrow", "linkNode", "append", "isInline", "parsedUrl", "URL", "has", "protocol", "setFields", "writable", "getWritable", "updateDOM", "prevNode", "removeAttribute", "domNode", "content", "textContent", "getAttribute", "$isLinkNode", "TOGGLE_LINK_COMMAND", "$toggleLink", "payload", "selectedNodes", "nodes", "extract", "forEach", "parent", "getParent", "children", "getChildren", "i", "insertBefore", "remove", "firstNode", "$getLinkAncestor", "text", "getLastChild", "prevParent", "is", "getPreviousSibling", "insertAfter", "$getAncestor", "ancestor", "predicate", "input", "action", "result", "mutableInput", "includes", "re", "RegExp", "replace", "trim", "LinkMarkdownTransformer", "type", "dependencies", "LinkNode", "export", "_node", "exportChildren", "exportFormat", "$isLinkNode", "node", "url", "getFields", "linkContent", "getTextContent", "firstChild", "getFirstChild", "getChildrenSize", "$isTextNode", "importRegExp", "regExp", "replace", "textNode", "match", "linkText", "linkUrl", "linkNode", "$createLinkNode", "fields", "doc", "linkType", "newTab", "linkTextNode", "$createTextNode", "setFormat", "getFormat", "append", "trigger", "$applyNodeReplacement", "$isElementNode", "AutoLinkNode", "LinkNode", "clone", "node", "id", "undefined", "fields", "__fields", "key", "__key", "getType", "importDOM", "importJSON", "serializedNode", "version", "doc", "value", "$createAutoLinkNode", "setFormat", "format", "setIndent", "indent", "setDirection", "direction", "exportJSON", "serialized", "type", "children", "insertNewAfter", "selection", "restoreSelection", "element", "getParentOrThrow", "$isElementNode", "linkNode", "append", "$applyNodeReplacement", "$isAutoLinkNode", "c", "_c", "useLexicalComposerContext", "mergeRegister", "$createTextNode", "$getSelection", "$isElementNode", "$isLineBreakNode", "$isNodeSelection", "$isRangeSelection", "$isTextNode", "TextNode", "TextNodeValue", "useEffect", "createLinkMatcherWithRegExp", "regExp", "urlTransformer", "text", "match", "exec", "index", "length", "url", "findFirstMatch", "matchers", "i", "PUNCTUATION_OR_SPACE", "isSeparator", "char", "test", "endsWithSeparator", "textContent", "startsWithSeparator", "startsWithTLD", "isEmail", "isPreviousNodeValid", "node", "previousNode", "getPreviousSibling", "$isElementNode", "getLastDescendant", "$isLineBreakNode", "$isTextNode", "getTextContent", "isNextNodeValid", "nextNode", "getNextSibling", "getFirstDescendant", "isContentAroundIsValid", "matchStart", "matchEnd", "nodes", "extractMatchingNodes", "startIndex", "endIndex", "unmodifiedBeforeNodes", "matchingNodes", "unmodifiedAfterNodes", "matchingOffset", "currentOffset", "currentNodes", "currentNode", "currentNodeLength", "currentNodeStart", "push", "shift", "$createAutoLinkNode_", "fields", "linkType", "linkNode", "$createAutoLinkNode", "remainingTextNode", "linkTextNode", "splitText", "textNode", "$createTextNode", "setFormat", "getFormat", "setDetail", "getDetail", "setStyle", "getStyle", "append", "replace", "firstTextNode", "offset", "firstLinkTextNode", "linkNodes", "currentNodeEnd", "endNode", "selection", "$getSelection", "selectedTextNode", "getNodes", "find", "undefined", "$isRangeSelection", "select", "anchor", "focus", "$isNodeSelection", "$handleLinkCreation", "onChange", "initialText", "map", "join", "invalidMatchEnd", "matchLength", "actualMatchStart", "actualMatchEnd", "substring", "handleLinkEdit", "children", "getChildren", "childrenLength", "child", "isSimpleText", "replaceWithChildren", "getFields", "flds", "setFields", "handleBadNeighbors", "previousSibling", "nextSibling", "$isAutoLinkNode", "isEmailURI", "startsWith", "j", "insertAfter", "remove", "getLatest", "getTextNodesToMatch", "textNodesToMatch", "useAutoLink", "editor", "$", "_c", "t0", "t1", "hasNodes", "AutoLinkNode", "Error", "onChangeWrapped", "prevUrl", "mergeRegister", "registerNodeTransform", "TextNodeValue", "parent", "getParentOrThrow", "previous", "$isLinkNode", "useEffect", "URL_REGEX", "EMAIL_REGEX", "MATCHERS", "AutoLinkPlugin", "useLexicalComposerContext", "ClickableLinkPlugin", "LexicalClickableLinkPlugin", "_jsx", "createCommand", "TOGGLE_LINK_WITH_MODAL_COMMAND", "createPortal", "useLexicalComposerContext", "$findMatchingParent", "mergeRegister", "getTranslation", "CloseMenuIcon", "EditIcon", "formatDrawerSlug", "useConfig", "useEditDepth", "useModal", "useTranslation", "$getSelection", "$isLineBreakNode", "$isRangeSelection", "COMMAND_PRIORITY_HIGH", "COMMAND_PRIORITY_LOW", "KEY_ESCAPE_COMMAND", "SELECTION_CHANGE_COMMAND", "React", "useCallback", "useEffect", "useRef", "useState", "setFloatingElemPositionForLinkEditor", "targetRect", "floatingElem", "anchorElem", "verticalGap", "VERTICAL_GAP", "horizontalOffset", "HORIZONTAL_OFFSET", "scrollerElem", "parentElement", "style", "opacity", "transform", "floatingElemRect", "getBoundingClientRect", "anchorElementRect", "editorScrollerRect", "top", "left", "height", "width", "right", "LinkEditor", "anchorElem", "editor", "useLexicalComposerContext", "editorRef", "useRef", "linkUrl", "setLinkUrl", "useState", "linkLabel", "setLinkLabel", "uuid", "useEditorConfigContext", "config", "useConfig", "i18n", "t", "useTranslation", "stateData", "setStateData", "closeModal", "toggleModal", "useModal", "editDepth", "useEditDepth", "isLink", "setIsLink", "selectedNodes", "setSelectedNodes", "isAutoLink", "setIsAutoLink", "drawerSlug", "formatDrawerSlug", "slug", "depth", "setNotLink", "useCallback", "current", "style", "opacity", "transform", "$updateLinkEditor", "selection", "$getSelection", "selectedNodeDomRect", "$isRangeSelection", "focusNode", "getSelectedNode", "getElementByKey", "getKey", "getBoundingClientRect", "focusLinkParent", "$findMatchingParent", "$isLinkNode", "badNode", "getNodes", "filter", "node", "$isLineBreakNode", "find", "linkNode", "is", "data", "doc", "undefined", "linkType", "newTab", "url", "getFields", "id", "getID", "text", "getTextContent", "relationTo", "value", "relatedField", "collections", "coll", "label", "String", "getTranslation", "labels", "singular", "replace", "$isAutoLinkNode", "editorElem", "nativeSelection", "window", "getSelection", "activeElement", "document", "rootElement", "getRootElement", "contains", "anchorNode", "getRangeAt", "y", "setFloatingElemPositionForLinkEditor", "className", "useEffect", "mergeRegister", "registerCommand", "TOGGLE_LINK_WITH_MODAL_COMMAND", "payload", "dispatchCommand", "TOGGLE_LINK_COMMAND", "COMMAND_PRIORITY_LOW", "scrollerElem", "parentElement", "update", "getEditorState", "read", "addEventListener", "removeEventListener", "registerUpdateListener", "editorState", "SELECTION_CHANGE_COMMAND", "KEY_ESCAPE_COMMAND", "COMMAND_PRIORITY_HIGH", "_jsxs", "React", "Fragment", "_jsx", "ref", "length", "href", "rel", "target", "isEditable", "onClick", "onMouseDown", "event", "preventDefault", "tabIndex", "type", "EditIcon", "CloseMenuIcon", "FieldsDrawer", "drawerTitle", "featureKey", "handleDrawerSubmit", "fields", "newLinkPayload", "bareLinkFields", "linkParent", "getParent", "$createLinkNode", "schemaPathSuffix", "FloatingLinkEditorPlugin", "props", "anchorElem", "document", "body", "createPortal", "_jsx", "LinkEditor", "c", "_c", "useLexicalComposerContext", "mergeRegister", "$getSelection", "$isElementNode", "$isRangeSelection", "COMMAND_PRIORITY_LOW", "PASTE_COMMAND", "useEffect", "absoluteRegExp", "relativeOrAnchorRegExp", "validateUrl", "url", "test", "URL", "LinkPlugin", "$", "_c", "editor", "useLexicalComposerContext", "t0", "t1", "hasNodes", "LinkNode", "Error", "mergeRegister", "registerCommand", "TOGGLE_LINK_COMMAND", "payload", "$toggleLink", "COMMAND_PRIORITY_LOW", "PASTE_COMMAND", "event", "selection", "$getSelection", "$isRangeSelection", "isCollapsed", "ClipboardEvent", "clipboardData", "clipboardText", "getData", "validateUrl", "getNodes", "some", "node", "$isElementNode", "linkFields", "doc", "linkType", "newTab", "url", "dispatchCommand", "fields", "text", "preventDefault", "useEffect", "toolbarGroups", "toolbarFeatureButtonsGroupWithItems", "ChildComponent", "LinkIcon", "isActive", "selection", "$isRangeSelection", "selectedNode", "getSelectedNode", "$findMatchingParent", "$isLinkNode", "isEnabled", "$getSelection", "getTextContent", "length", "key", "label", "i18n", "t", "onSelect", "editor", "dispatchCommand", "TOGGLE_LINK_COMMAND", "selectedText", "selectedNodes", "getEditorState", "read", "getNodes", "linkFields", "doc", "linkType", "newTab", "url", "TOGGLE_LINK_WITH_MODAL_COMMAND", "fields", "text", "order", "LinkFeatureClient", "createClientFeature", "markdownTransformers", "LinkMarkdownTransformer", "nodes", "LinkNode", "AutoLinkNode", "plugins", "Component", "LinkPlugin", "position", "AutoLinkPlugin", "ClickableLinkPlugin", "FloatingLinkEditorPlugin", "toolbarFixed", "groups", "toolbarInline", "$isListNode", "INSERT_CHECK_LIST_COMMAND", "ListItemNode", "ListNode", "$isRangeSelection", "ChecklistIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "rx", "stroke", "x", "y", "d", "strokeWidth", "ListPlugin", "LexicalListPlugin", "_jsx", "slashMenuListGroupWithItems", "items", "key", "label", "i18n", "t", "$isListNode", "ListItemNode", "ListNode", "$createListItemNode", "$createListNode", "$isListItemNode", "$isListNode", "LIST_INDENT_SIZE", "listReplace", "listType", "parentNode", "children", "match", "previousNode", "getPreviousSibling", "nextNode", "getNextSibling", "listItem", "undefined", "getListType", "firstChild", "getFirstChild", "insertBefore", "append", "remove", "list", "Number", "replace", "select", "indent", "Math", "floor", "length", "setIndent", "listExport", "listNode", "exportChildren", "depth", "output", "getChildren", "index", "listItemNode", "getChildrenSize", "push", "repeat", "prefix", "getStart", "getChecked", "join", "CHECK_LIST", "type", "dependencies", "ListNode", "ListItemNode", "export", "node", "exportChildren", "$isListNode", "listExport", "regExp", "replace", "listReplace", "CheckListPlugin", "LexicalCheckListPlugin", "_jsx", "toolbarGroups", "toolbarTextDropdownGroupWithItems", "ChildComponent", "ChecklistIcon", "isActive", "selection", "$isRangeSelection", "node", "getNodes", "$isListNode", "getListType", "parent", "getParent", "parentParent", "key", "label", "i18n", "t", "onSelect", "editor", "dispatchCommand", "INSERT_CHECK_LIST_COMMAND", "undefined", "order", "ChecklistFeatureClient", "createClientFeature", "featureProviderMap", "plugins", "Component", "LexicalCheckListPlugin", "position", "has", "push", "LexicalListPlugin", "markdownTransformers", "CHECK_LIST", "nodes", "ListNode", "ListItemNode", "slashMenu", "groups", "slashMenuListGroupWithItems", "Icon", "keywords", "toolbarFixed", "toolbarInline", "$isListNode", "INSERT_ORDERED_LIST_COMMAND", "ListItemNode", "ListNode", "$isRangeSelection", "OrderedListIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "strokeWidth", "$isListNode", "ListItemNode", "ListNode", "ORDERED_LIST", "type", "dependencies", "ListNode", "ListItemNode", "export", "node", "exportChildren", "$isListNode", "listExport", "regExp", "replace", "listReplace", "toolbarGroups", "toolbarTextDropdownGroupWithItems", "ChildComponent", "OrderedListIcon", "isActive", "selection", "$isRangeSelection", "node", "getNodes", "$isListNode", "getListType", "parent", "getParent", "parentParent", "key", "label", "i18n", "t", "onSelect", "editor", "dispatchCommand", "INSERT_ORDERED_LIST_COMMAND", "undefined", "order", "OrderedListFeatureClient", "createClientFeature", "featureProviderMap", "markdownTransformers", "ORDERED_LIST", "nodes", "has", "ListNode", "ListItemNode", "plugins", "Component", "LexicalListPlugin", "position", "slashMenu", "groups", "slashMenuListGroupWithItems", "Icon", "keywords", "toolbarFixed", "toolbarInline", "$isListNode", "INSERT_UNORDERED_LIST_COMMAND", "ListItemNode", "ListNode", "$isRangeSelection", "UnorderedListIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "cx", "cy", "r", "stroke", "strokeWidth", "d", "$isListNode", "ListItemNode", "ListNode", "UNORDERED_LIST", "type", "dependencies", "ListNode", "ListItemNode", "export", "node", "exportChildren", "$isListNode", "listExport", "regExp", "replace", "listReplace", "toolbarGroups", "toolbarTextDropdownGroupWithItems", "ChildComponent", "UnorderedListIcon", "isActive", "selection", "$isRangeSelection", "node", "getNodes", "$isListNode", "getListType", "parent", "getParent", "parentParent", "key", "label", "i18n", "t", "onSelect", "editor", "dispatchCommand", "INSERT_UNORDERED_LIST_COMMAND", "undefined", "order", "UnorderedListFeatureClient", "createClientFeature", "markdownTransformers", "UNORDERED_LIST", "nodes", "ListNode", "ListItemNode", "plugins", "Component", "LexicalListPlugin", "position", "slashMenu", "groups", "slashMenuListGroupWithItems", "Icon", "keywords", "toolbarFixed", "toolbarInline", "addClassNamesToElement", "DecoratorNode", "React", "Component", "lazy", "then", "module", "default", "UnknownConvertedNodeComponent", "UnknownConvertedNode", "__data", "constructor", "data", "key", "clone", "node", "__key", "getType", "importJSON", "serializedNode", "$createUnknownConvertedNode", "canInsertTextAfter", "canInsertTextBefore", "createDOM", "config", "element", "document", "createElement", "decorate", "_jsx", "exportJSON", "type", "version", "isInline", "updateDOM", "prevNode", "dom", "LexicalPluginToLexicalFeatureClient", "createClientFeature", "nodes", "UnknownConvertedNode", "addClassNamesToElement", "DecoratorNode", "React", "Component", "lazy", "then", "module", "default", "UnknownConvertedNodeComponent", "UnknownConvertedNode", "__data", "constructor", "data", "key", "clone", "node", "__key", "getType", "importJSON", "serializedNode", "$createUnknownConvertedNode", "canInsertTextAfter", "canInsertTextBefore", "createDOM", "config", "element", "document", "createElement", "decorate", "_jsx", "exportJSON", "type", "version", "isInline", "updateDOM", "prevNode", "dom", "SlateToLexicalFeatureClient", "createClientFeature", "clientFunctions", "nodes", "UnknownConvertedNode", "$setBlocksType", "$createParagraphNode", "$getSelection", "$isParagraphNode", "$isRangeSelection", "toolbarGroups", "toolbarTextDropdownGroupWithItems", "ChildComponent", "TextIcon", "isActive", "selection", "$isRangeSelection", "node", "getNodes", "$isParagraphNode", "getParent", "key", "label", "i18n", "t", "onSelect", "editor", "update", "$getSelection", "$setBlocksType", "$createParagraphNode", "order", "ParagraphFeatureClient", "createClientFeature", "slashMenu", "groups", "slashMenuBasicGroupWithItems", "Icon", "keywords", "toolbarFixed", "toolbarInline", "$isNodeSelection", "RelationshipIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "clipPath", "d", "stroke", "strokeLinecap", "strokeLinejoin", "id", "transform", "c", "_c", "useLexicalComposerContext", "$insertNodeToNearestRoot", "useConfig", "$getPreviousSelection", "$getSelection", "$isParagraphNode", "$isRangeSelection", "COMMAND_PRIORITY_EDITOR", "createCommand", "useEffect", "c", "_c", "useLexicalComposerContext", "useListDrawer", "$getNodeByKey", "COMMAND_PRIORITY_EDITOR", "useEffect", "useState", "insertRelationship", "editor", "relationTo", "replaceNodeKey", "value", "update", "node", "$getNodeByKey", "replace", "$createRelationshipNode", "dispatchCommand", "INSERT_RELATIONSHIP_COMMAND", "RelationshipDrawerComponent", "t0", "$", "_c", "enabledCollectionSlugs", "useLexicalComposerContext", "t1", "selectedCollectionSlug", "setSelectedCollectionSlug", "useState", "setReplaceNodeKey", "t2", "collectionSlugs", "selectedCollection", "ListDrawer", "ListDrawerToggler", "t3", "useListDrawer", "closeDrawer", "isDrawerOpen", "openDrawer", "t4", "t5", "registerCommand", "INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND", "payload", "nodeKey", "COMMAND_PRIORITY_EDITOR", "useEffect", "t6", "t7", "collectionSlug", "docID", "onSelect", "t8", "t9", "_jsx", "RelationshipDrawer", "props", "length", "EnabledRelationshipsCondition", "INSERT_RELATIONSHIP_COMMAND", "createCommand", "RelationshipPlugin", "t0", "$", "_c", "clientProps", "editor", "useLexicalComposerContext", "config", "t1", "useConfig", "collections", "enabledRelations", "enabledCollections", "disabledCollections", "t2", "t3", "t4", "slug", "includes", "filter", "map", "_temp", "hasNodes", "RelationshipNode", "Error", "registerCommand", "payload", "selection", "$getSelection", "$getPreviousSelection", "$isRangeSelection", "relationshipNode", "$createRelationshipNode", "$insertNodeToNearestRoot", "focus", "focusNode", "getNode", "$isParagraphNode", "getTextContentSize", "getParent", "getChildren", "node", "length", "remove", "COMMAND_PRIORITY_EDITOR", "useEffect", "_jsx", "RelationshipDrawer", "enabledCollectionSlugs", "slug_0", "RelationshipFeatureClient", "createClientFeature", "nodes", "RelationshipNode", "plugins", "Component", "RelationshipPlugin", "position", "slashMenu", "groups", "slashMenuBasicGroupWithItems", "Icon", "RelationshipIcon", "key", "keywords", "label", "i18n", "t", "onSelect", "editor", "dispatchCommand", "INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND", "replace", "toolbarFixed", "toolbarAddDropdownGroupWithItems", "ChildComponent", "isActive", "selection", "$isNodeSelection", "getNodes", "length", "firstNode", "$isRelationshipNode", "c", "_c", "useLexicalComposerContext", "useScrollInfo", "useThrottledEffect", "useTranslation", "React", "useMemo", "mergeRegister", "$getSelection", "useCallback", "useEffect", "useState", "baseClass", "ToolbarButton", "children", "editor", "item", "enabled", "setEnabled", "useState", "active", "setActive", "className", "setClassName", "editorConfigContext", "useEditorConfigContext", "updateStates", "useCallback", "getEditorState", "read", "selection", "$getSelection", "isActive", "isEnabled", "useEffect", "document", "addEventListener", "removeEventListener", "mergeRegister", "registerUpdateListener", "key", "filter", "Boolean", "join", "_jsx", "onClick", "_updateTags", "Set", "focus", "onSelect", "onMouseDown", "e", "preventDefault", "type", "c", "_c", "React", "useEffect", "mergeRegister", "useTranslation", "$getSelection", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "createPortal", "baseClass", "DropDownContext", "createContext", "DropDownItem", "active", "children", "editor", "enabled", "item", "title", "className", "setClassName", "key", "filter", "Boolean", "join", "ref", "dropDownContext", "useContext", "Error", "registerItem", "current", "_jsx", "onClick", "_updateTags", "Set", "focus", "onSelect", "isActive", "onMouseDown", "e", "preventDefault", "type", "DropDownItems", "dropDownRef", "itemsContainerClassNames", "onClose", "items", "setItems", "highlightedItem", "setHighlightedItem", "itemRef", "prev", "handleKeyDown", "event", "includes", "index", "indexOf", "length", "contextValue", "Provider", "value", "onKeyDown", "DropDown", "Icon", "buttonAriaLabel", "buttonClassName", "disabled", "label", "stopCloseOnClickSelf", "buttonRef", "showDropDown", "setShowDropDown", "handleClose", "button", "dropDown", "left", "top", "getBoundingClientRect", "scrollTopOffset", "window", "scrollY", "document", "documentElement", "scrollTop", "style", "offsetHeight", "Math", "min", "innerWidth", "offsetWidth", "handle", "target", "contains", "addEventListener", "removeEventListener", "portal", "body", "_jsxs", "Fragment", "baseClass", "ToolbarItem", "t0", "$", "_c", "active", "anchorElem", "editor", "enabled", "item", "i18n", "useTranslation", "field", "t1", "useEditorConfigContext", "richTextComponentMap", "Component", "t2", "_jsx", "key", "title", "label", "length", "substring", "ChildComponent", "t3", "_jsxs", "DropDownItem", "children", "className", "ToolbarDropdown", "Icon", "classNames", "groupKey", "items", "itemsContainerClassNames", "maxActiveItems", "onActiveChange", "Symbol", "for", "activeItemKeys", "setActiveItemKeys", "React", "useState", "enabledItemKeys", "setEnabledItemKeys", "editorConfigContext", "getEditorState", "read", "selection", "$getSelection", "_activeItemKeys", "_activeItems", "_enabledItemKeys", "isActive", "push", "isEnabled", "activeItems", "updateStates", "t4", "t5", "useEffect", "t6", "t7", "document", "addEventListener", "removeEventListener", "t8", "t9", "mergeRegister", "registerUpdateListener", "t10", "t11", "t12", "t13", "filter", "Boolean", "t14", "join", "t15", "t16", "t17", "map", "item_0", "includes", "DropDown", "buttonAriaLabel", "buttonClassName", "ButtonGroupItem", "anchorElem", "editor", "item", "Component", "_jsx", "key", "ToolbarButton", "ChildComponent", "ToolbarGroupComponent", "t0", "$", "_c", "editorConfig", "group", "index", "i18n", "useTranslation", "field", "t1", "useEditorConfigContext", "richTextComponentMap", "dropdownLabel", "setDropdownLabel", "useState", "DropdownIcon", "setDropdownIcon", "t2", "t3", "type", "items", "length", "useEffect", "t4", "t5", "activeItems", "label", "substring", "onActiveChange", "t6", "ToolbarDropdown", "Icon", "groupKey", "itemsContainerClassNames", "maxActiveItems", "t7", "map", "item_0", "t8", "features", "toolbarFixed", "_jsxs", "className", "children", "groups", "FixedToolbar", "clientProps", "parentWithFixedToolbar", "currentToolbarRef", "useRef", "y", "useScrollInfo", "parentToolbarElem", "useMemo", "disableIfParentHasFixedToolbar", "sibling", "editorContainerRef", "current", "previousElementSibling", "classList", "contains", "useThrottledEffect", "currentToolbarElem", "currentRect", "getBoundingClientRect", "parentRect", "bottom", "top", "onFocus", "event", "stopPropagation", "ref", "isEditable", "Fragment", "i", "getParentEditorWithFixedToolbar", "editorConfigContext", "parentEditor", "resolvedFeatureMap", "has", "FixedToolbarPlugin", "currentEditor", "useLexicalComposerContext", "currentEditorConfig", "applyToFocusedEditor", "focusedEditor", "FixedToolbarFeatureClient", "createClientFeature", "plugins", "Component", "FixedToolbarPlugin", "position", "c", "_c", "useLexicalComposerContext", "mergeRegister", "$getSelection", "$isRangeSelection", "$isTextNode", "COMMAND_PRIORITY_LOW", "SELECTION_CHANGE_COMMAND", "useCallback", "useEffect", "useRef", "useState", "React", "createPortal", "getDOMRangeRect", "nativeSelection", "rootElement", "domRange", "getRangeAt", "rect", "anchorNode", "inner", "firstElementChild", "getBoundingClientRect", "setFloatingElemPosition", "args", "alwaysDisplayOnTop", "anchorElem", "anchorFlippedOffset", "floatingElem", "horizontalOffset", "HORIZONTAL_OFFSET", "horizontalPosition", "specialHandlingForCaret", "targetRect", "verticalGap", "VERTICAL_GAP", "scrollerElem", "parentElement", "style", "opacity", "transform", "floatingElemRect", "getBoundingClientRect", "anchorElementRect", "editorScrollerRect", "top", "height", "left", "width", "addedToTop", "right", "bottom", "ButtonGroupItem", "anchorElem", "editor", "item", "Component", "_jsx", "key", "ToolbarButton", "ChildComponent", "ToolbarGroupComponent", "t0", "$", "_c", "group", "index", "editorConfig", "useEditorConfigContext", "DropdownIcon", "setDropdownIcon", "useState", "t1", "t2", "type", "items", "length", "useEffect", "t3", "t4", "activeItems", "onActiveChange", "t5", "ToolbarDropdown", "Icon", "groupKey", "maxActiveItems", "t6", "map", "item_0", "t7", "features", "toolbarInline", "_jsxs", "className", "children", "groups", "InlineToolbar", "floatingToolbarRef", "useRef", "caretRef", "closeFloatingToolbar", "useCallback", "current", "isOpacityZero", "style", "opacity", "isPointerEventsNone", "pointerEvents", "mouseMoveListener", "e", "buttons", "x", "clientX", "y", "clientY", "elementUnderMouse", "document", "elementFromPoint", "contains", "mouseUpListener", "addEventListener", "removeEventListener", "$updateTextFormatFloatingToolbar", "selection", "$getSelection", "nativeSelection", "window", "getSelection", "possibleLinkEditor", "querySelector", "isLinkEditorVisible", "rootElement", "getRootElement", "isCollapsed", "anchorNode", "rangeRect", "getDOMRangeRect", "offsetIfFlipped", "setFloatingElemPosition", "alwaysDisplayOnTop", "floatingElem", "horizontalPosition", "targetRect", "anchorFlippedOffset", "horizontalOffset", "specialHandlingForCaret", "verticalGap", "scrollerElem", "parentElement", "update", "getEditorState", "read", "mergeRegister", "registerUpdateListener", "editorState", "registerCommand", "SELECTION_CHANGE_COMMAND", "COMMAND_PRIORITY_LOW", "ref", "isEditable", "Fragment", "i", "useInlineToolbar", "isText", "setIsText", "updatePopup", "isComposing", "$isRangeSelection", "getTextContent", "nodes", "getNodes", "foundNodeWithText", "node", "$isTextNode", "rawTextContent", "replace", "registerRootListener", "createPortal", "InlineToolbarPlugin", "useLexicalComposerContext", "InlineToolbarFeatureClient", "createClientFeature", "plugins", "Component", "InlineToolbarPlugin", "position", "TableCellNode", "TableNode", "TableRowNode", "TableIcon", "_jsx", "className", "fill", "height", "viewBox", "width", "xmlns", "clipRule", "d", "fillRule", "useLexicalComposerContext", "useLexicalEditable", "$deleteTableColumn__EXPERIMENTAL", "$deleteTableRow__EXPERIMENTAL", "$getNodeTriplet", "$getTableCellNodeFromLexicalNode", "$getTableColumnIndexFromTableCellNode", "$getTableNodeFromLexicalNodeOrThrow", "$getTableRowIndexFromTableCellNode", "$insertTableColumn__EXPERIMENTAL", "$insertTableRow__EXPERIMENTAL", "$isTableCellNode", "$isTableRowNode", "$isTableSelection", "$unmergeCell", "TableCellHeaderStates", "TableCellNode", "getTableObserverFromTableElement", "useScrollInfo", "$createParagraphNode", "$getRoot", "$getSelection", "$isElementNode", "$isParagraphNode", "$isRangeSelection", "$isTextNode", "React", "useCallback", "useEffect", "useRef", "useState", "createPortal", "MeatballsIcon", "_jsxs", "fill", "height", "viewBox", "width", "xmlns", "_jsx", "d", "computeSelectionCount", "selection", "selectionShape", "getShape", "columns", "toX", "fromX", "rows", "toY", "fromY", "isTableSelectionRectangular", "nodes", "getNodes", "currentRows", "currentRow", "expectedColumns", "currentColumns", "i", "length", "node", "$isTableCellNode", "row", "getParentOrThrow", "$isTableRowNode", "Error", "colSpan", "__colSpan", "j", "undefined", "__rowSpan", "every", "v", "$canUnmerge", "$getSelection", "$isRangeSelection", "isCollapsed", "$isTableSelection", "anchor", "is", "focus", "cell", "$getNodeTriplet", "$cellContainsEmptyParagraph", "getChildrenSize", "firstChild", "getFirstChildOrThrow", "$isParagraphNode", "isEmpty", "$selectLastDescendant", "lastDescendant", "getLastDescendant", "$isTextNode", "select", "$isElementNode", "selectEnd", "selectNext", "TableActionMenu", "cellMerge", "contextRef", "onClose", "setIsMenuOpen", "tableCellNode", "_tableCellNode", "editor", "useLexicalComposerContext", "dropDownRef", "useRef", "updateTableCellNode", "useState", "selectionCounts", "updateSelectionCounts", "canMergeCells", "setCanMergeCells", "canUnmergeCell", "setCanUnmergeCell", "y", "useScrollInfo", "useEffect", "registerMutationListener", "TableCellNode", "nodeMutations", "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", "useCallback", "update", "isAttached", "tableNode", "$getTableNodeFromLexicalNodeOrThrow", "tableElement", "getElementByKey", "tableSelection", "getTableObserverFromTableElement", "clearHighlight", "markDirty", "$getRoot", "selectStart", "mergeTableCellsAtSelection", "firstCell", "setColSpan", "setRowSpan", "getFirstChild", "remove", "append", "getChildren", "$createParagraphNode", "unmergeTableCellsAtSelection", "$unmergeCell", "insertTableRowAtSelection", "shouldInsertAfter", "$insertTableRow__EXPERIMENTAL", "insertTableColumnAtSelection", "$insertTableColumn__EXPERIMENTAL", "deleteTableRowAtSelection", "$deleteTableRow__EXPERIMENTAL", "deleteTableAtSelection", "deleteTableColumnAtSelection", "$deleteTableColumn__EXPERIMENTAL", "toggleTableRowIsHeader", "tableRowIndex", "$getTableRowIndexFromTableCellNode", "tableRows", "tableRow", "forEach", "tableCell", "toggleHeaderStyle", "TableCellHeaderStates", "ROW", "toggleTableColumnIsHeader", "tableColumnIndex", "$getTableColumnIndexFromTableCellNode", "maxRowsLength", "Math", "max", "map", "r", "tableCells", "COLUMN", "mergeCellButton", "_jsx", "className", "onClick", "type", "createPortal", "_jsxs", "e", "stopPropagation", "ref", "Fragment", "__headerState", "document", "body", "TableCellActionMenuContainer", "anchorElem", "menuButtonRef", "menuRootRef", "isMenuOpen", "setTableMenuCellNode", "$moveMenu", "menu", "nativeSelection", "getSelection", "activeElement", "anchorNode", "tableCellNodeFromSelection", "$getTableCellNodeFromLexicalNode", "getNode", "registerUpdateListener", "menuButtonDOM", "tableCellNodeDOM", "tableCellRect", "menuRect", "anchorRect", "transform", "prevTableCellDOM", "MeatballsIcon", "TableActionMenuPlugin", "isEditable", "useLexicalEditable", "useLexicalComposerContext", "useLexicalEditable", "$computeTableMapSkipCellCheck", "$getTableNodeFromLexicalNodeOrThrow", "$getTableRowIndexFromTableCellNode", "$isTableCellNode", "$isTableRowNode", "getDOMCellFromTarget", "calculateZoomLevel", "$getNearestNodeFromDOMNode", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "createPortal", "MIN_ROW_HEIGHT", "MIN_COLUMN_WIDTH", "TableCellResizer", "editor", "targetRef", "useRef", "resizerRef", "tableRectRef", "editorConfig", "useEditorConfigContext", "mouseStartPosRef", "mouseCurrentPos", "updateMouseCurrentPos", "useState", "activeCell", "updateActiveCell", "isMouseDown", "updateIsMouseDown", "draggingDirection", "updateDraggingDirection", "resetState", "useCallback", "current", "isMouseDownOnEvent", "event", "buttons", "useEffect", "onMouseMove", "setTimeout", "target", "x", "clientX", "y", "clientY", "contains", "cell", "getDOMCellFromTarget", "update", "tableCellNode", "$getNearestNodeFromDOMNode", "elem", "Error", "tableNode", "$getTableNodeFromLexicalNodeOrThrow", "tableElement", "getElementByKey", "getKey", "getBoundingClientRect", "onMouseDown", "onMouseUp", "removeRootListener", "registerRootListener", "rootElement", "prevRootElement", "addEventListener", "removeEventListener", "isHeightChanging", "direction", "updateRowHeight", "heightChange", "$isTableCellNode", "tableRowIndex", "$getTableRowIndexFromTableCellNode", "tableRows", "getChildren", "length", "tableRow", "$isTableRowNode", "height", "getHeight", "undefined", "rowCells", "Math", "min", "map", "getCellNodeHeight", "Infinity", "newHeight", "max", "setHeight", "tag", "getCellNodeWidth", "activeEditor", "width", "getWidth", "domCellNode", "computedStyle", "getComputedStyle", "clientWidth", "parseFloat", "paddingLeft", "paddingRight", "clientHeight", "getCellColumnIndex", "tableMap", "row", "column", "updateColumnWidth", "widthChange", "$computeTableMapSkipCellCheck", "columnIndex", "startRow", "newWidth", "setWidth", "mouseUpHandler", "handler", "preventDefault", "stopPropagation", "zoom", "calculateZoomLevel", "document", "toggleResize", "resizerStyles", "left", "top", "zoneWidth", "styles", "bottom", "backgroundColor", "cursor", "window", "pageXOffset", "pageYOffset", "right", "tableRect", "_jsx", "ref", "_jsxs", "Fragment", "className", "lexical", "theme", "tableCellResizer", "style", "TableCellResizerPlugin", "useLexicalComposerContext", "isEditable", "useLexicalEditable", "useMemo", "createPortal", "body", "useLexicalComposerContext", "$getTableColumnIndexFromTableCellNode", "$getTableRowIndexFromTableCellNode", "$insertTableColumn__EXPERIMENTAL", "$insertTableRow__EXPERIMENTAL", "$isTableCellNode", "$isTableNode", "TableNode", "$findMatchingParent", "mergeRegister", "$getNearestNodeFromDOMNode", "useEffect", "useRef", "useState", "createPortal", "useMemo", "useRef", "FUNC_ERROR_TEXT", "nativeMax", "Math", "max", "nativeMin", "min", "debounce", "func", "wait", "options", "lastArgs", "lastThis", "maxWait", "result", "timerId", "lastCallTime", "lastInvokeTime", "leading", "maxing", "trailing", "TypeError", "invokeFunc", "time", "args", "thisArg", "undefined", "apply", "leadingEdge", "setTimeout", "timerExpired", "remainingWait", "timeSinceLastCall", "timeSinceLastInvoke", "timeWaiting", "shouldInvoke", "Date", "now", "trailingEdge", "cancel", "clearTimeout", "flush", "debounced", "isInvoking", "arguments", "debounce_default", "useDebounce", "fn", "ms", "maxWait", "funcRef", "useRef", "current", "useMemo", "debounce", "args", "BUTTON_WIDTH_PX", "TableHoverActionsContainer", "anchorElem", "editor", "useLexicalComposerContext", "editorConfig", "useEditorConfigContext", "isShownRow", "setShownRow", "useState", "isShownColumn", "setShownColumn", "shouldListenMouseMove", "setShouldListenMouseMove", "position", "setPosition", "codeSetRef", "useRef", "Set", "tableDOMNodeRef", "debouncedOnMouseMove", "useDebounce", "event", "isOutside", "tableDOMNode", "getMouseInfo", "lexical", "current", "hoveredRowNode", "hoveredColumnNode", "tableDOMElement", "update", "maybeTableCell", "$getNearestNodeFromDOMNode", "$isTableCellNode", "table", "$findMatchingParent", "node", "$isTableNode", "getElementByKey", "getKey", "rowCount", "getChildrenSize", "colCount", "getChildAtIndex", "rowIndex", "$getTableRowIndexFromTableCellNode", "colIndex", "$getTableColumnIndexFromTableCellNode", "bottom", "tableElemBottom", "height", "tableElemHeight", "right", "tableElemRight", "width", "tableElemWidth", "x", "tableElemX", "y", "tableElemY", "getBoundingClientRect", "left", "editorElemLeft", "editorElemY", "top", "useEffect", "document", "addEventListener", "removeEventListener", "mergeRegister", "registerMutationListener", "TableNode", "mutations", "getEditorState", "read", "key", "type", "add", "size", "delete", "skipInitialization", "insertAction", "insertRow", "selectEnd", "$insertTableRow__EXPERIMENTAL", "$insertTableColumn__EXPERIMENTAL", "_jsxs", "_Fragment", "_jsx", "className", "theme", "tableAddRows", "onClick", "style", "tableAddColumns", "target", "HTMLElement", "closest", "tableCell", "tableCellResizer", "TableHoverActionsPlugin", "body", "createPortal", "c", "_c", "useLexicalComposerContext", "TablePlugin", "LexicalReactTablePlugin", "INSERT_TABLE_COMMAND", "TableNode", "mergeRegister", "formatDrawerSlug", "useEditDepth", "useModal", "$getSelection", "$isRangeSelection", "COMMAND_PRIORITY_EDITOR", "createCommand", "createContext", "useContext", "useEffect", "useMemo", "useState", "React", "OPEN_TABLE_DRAWER_COMMAND", "createCommand", "CellContext", "createContext", "cellEditorConfig", "cellEditorPlugins", "set", "TableContext", "children", "contextValue", "setContextValue", "useState", "_jsx", "Provider", "value", "useMemo", "TablePlugin", "$", "_c", "editor", "useLexicalComposerContext", "cellContext", "useContext", "closeModal", "toggleModal", "useModal", "editDepth", "useEditDepth", "uuid", "useEditorConfigContext", "t0", "t1", "formatDrawerSlug", "slug", "depth", "drawerSlug", "t2", "hasNodes", "TableNode", "Error", "mergeRegister", "registerCommand", "rangeSelection", "getEditorState", "read", "selection", "$getSelection", "$isRangeSelection", "COMMAND_PRIORITY_EDITOR", "t3", "useEffect", "t4", "_fields", "data", "columns", "rows", "dispatchCommand", "INSERT_TABLE_COMMAND", "String", "t5", "_jsxs", "Fragment", "FieldsDrawer", "drawerTitle", "featureKey", "handleDrawerSubmit", "schemaPathSuffix", "LexicalReactTablePlugin", "hasCellBackgroundColor", "hasCellMerge", "TableFeatureClient", "createClientFeature", "nodes", "TableNode", "TableCellNode", "TableRowNode", "plugins", "Component", "TablePlugin", "position", "TableCellResizerPlugin", "TableActionMenuPlugin", "TableHoverActionsPlugin", "providers", "TableContext", "slashMenu", "groups", "slashMenuBasicGroupWithItems", "Icon", "TableIcon", "key", "keywords", "label", "onSelect", "editor", "dispatchCommand", "OPEN_TABLE_DRAWER_COMMAND", "toolbarFixed", "toolbarAddDropdownGroupWithItems", "ChildComponent", "$isNodeSelection", "UploadIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "strokeLinecap", "strokeLinejoin", "c", "_c", "useLexicalComposerContext", "$insertNodeToNearestRoot", "mergeRegister", "useConfig", "$getPreviousSelection", "$getSelection", "$isParagraphNode", "$isRangeSelection", "COMMAND_PRIORITY_EDITOR", "createCommand", "useEffect", "c", "_c", "useLexicalComposerContext", "useListDrawer", "$getNodeByKey", "COMMAND_PRIORITY_EDITOR", "useEffect", "useState", "insertUpload", "editor", "relationTo", "replaceNodeKey", "value", "update", "node", "$getNodeByKey", "replace", "$createUploadNode", "data", "fields", "dispatchCommand", "INSERT_UPLOAD_COMMAND", "UploadDrawerComponent", "t0", "$", "_c", "enabledCollectionSlugs", "useLexicalComposerContext", "setReplaceNodeKey", "useState", "t1", "collectionSlugs", "uploads", "ListDrawer", "ListDrawerToggler", "t2", "useListDrawer", "closeDrawer", "openDrawer", "t3", "t4", "registerCommand", "INSERT_UPLOAD_WITH_DRAWER_COMMAND", "payload", "nodeKey", "COMMAND_PRIORITY_EDITOR", "useEffect", "t5", "t6", "collectionSlug", "docID", "onSelect", "_jsx", "UploadDrawer", "props", "EnabledRelationshipsCondition", "INSERT_UPLOAD_COMMAND", "createCommand", "UploadPlugin", "t0", "$", "_c", "editor", "useLexicalComposerContext", "config", "t1", "useConfig", "collections", "t2", "t3", "hasNodes", "UploadNode", "Error", "mergeRegister", "registerCommand", "payload", "update", "selection", "$getSelection", "$getPreviousSelection", "$isRangeSelection", "uploadNode", "$createUploadNode", "data", "id", "fields", "relationTo", "value", "$insertNodeToNearestRoot", "focus", "focusNode", "getNode", "$isParagraphNode", "getTextContentSize", "getParent", "getChildren", "filter", "node", "length", "remove", "COMMAND_PRIORITY_EDITOR", "useEffect", "t4", "_jsx", "UploadDrawer", "enabledCollectionSlugs", "map", "_temp", "slug", "UploadFeatureClient", "createClientFeature", "nodes", "UploadNode", "plugins", "Component", "UploadPlugin", "position", "slashMenu", "groups", "slashMenuBasicGroupWithItems", "Icon", "UploadIcon", "key", "keywords", "label", "i18n", "t", "onSelect", "editor", "dispatchCommand", "INSERT_UPLOAD_WITH_DRAWER_COMMAND", "replace", "toolbarFixed", "toolbarAddDropdownGroupWithItems", "ChildComponent", "isActive", "selection", "$isNodeSelection", "getNodes", "length", "firstNode", "$isUploadNode", "ShimmerEffect", "useClientFunctions", "useFieldProps", "React", "Suspense", "lazy", "useEffect", "useState", "RichTextEditor", "lazy", "then", "module", "default", "RichText", "RichTextField", "props", "admin", "field", "richTextComponentMap", "lexicalEditorConfig", "schemaPath", "useFieldProps", "clientFunctions", "useClientFunctions", "hasLoadedFeatures", "setHasLoadedFeatures", "useState", "featureProviders", "setFeatureProviders", "finalSanitizedEditorConfig", "setFinalSanitizedEditorConfig", "featureProviderComponents", "get", "sort", "a", "b", "order", "featureProvidersAndComponentsToLoad", "featureProvider", "featureComponentKeys", "Array", "from", "keys", "filter", "key", "startsWith", "length", "useEffect", "featureProvidersLocal", "featureProvidersAndComponentsLoaded", "Object", "entries", "forEach", "plugin", "includes", "push", "resolvedClientFeatures", "loadClientFeatures", "unSanitizedEditorConfig", "features", "lexical", "sanitizeClientEditorConfig", "defaultEditorLexicalConfig", "_jsx", "Suspense", "fallback", "ShimmerEffect", "height", "editorConfig", "React", "Fragment", "isArray", "map", "featureComponents", "_jsxs", "FeatureComponent", "ClientFeature", "joinClasses", "args", "filter", "Boolean", "join", "elements", "WeakMap", "readTouch", "e", "touch", "changedTouches", "undefined", "clientX", "clientY", "addListener", "element", "cb", "elementValues", "get", "listeners", "Set", "handleTouchstart", "start", "handleTouchend", "end", "listener", "addEventListener", "set", "add", "deleteListener", "delete", "size", "removeEventListener", "addSwipeLeftListener", "force", "x", "y", "Math", "abs", "addSwipeRightListener", "addSwipeUpListener", "addSwipeDownListener", "NodeFormat", "DOM_ELEMENT_TYPE", "DOM_TEXT_TYPE", "NO_DIRTY_NODES", "HAS_DIRTY_NODES", "FULL_RECONCILE", "IS_NORMAL", "IS_TOKEN", "IS_SEGMENTED", "IS_INERT", "IS_BOLD", "IS_ITALIC", "IS_STRIKETHROUGH", "IS_UNDERLINE", "IS_CODE", "IS_SUBSCRIPT", "IS_SUPERSCRIPT", "IS_HIGHLIGHT", "IS_DIRECTIONLESS", "IS_UNMERGEABLE", "IS_ALIGN_LEFT", "IS_ALIGN_CENTER", "IS_ALIGN_RIGHT", "IS_ALIGN_JUSTIFY", "IS_ALIGN_START", "IS_ALIGN_END", "IS_ALL_FORMATTING", "NON_BREAKING_SPACE", "DOUBLE_LINE_BREAK", "RTL", "LTR", "RTL_REGEX", "RegExp", "LTR_REGEX", "TEXT_TYPE_TO_FORMAT", "bold", "code", "highlight", "italic", "strikethrough", "subscript", "superscript", "underline", "DETAIL_TYPE_TO_DETAIL", "directionless", "unmergeable", "ELEMENT_TYPE_TO_FORMAT", "center", "end", "justify", "left", "right", "start", "ELEMENT_FORMAT_TO_TYPE", "TEXT_MODE_TO_TYPE", "normal", "segmented", "token", "TEXT_TYPE_TO_MODE"]
|
|
4
|
+
"sourcesContent": ["import type {\n SlashMenuGroup,\n SlashMenuItem,\n} from '../../../lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js'\n\nexport function slashMenuBasicGroupWithItems(items: SlashMenuItem[]): SlashMenuGroup {\n return {\n items,\n key: 'basic',\n label: ({ i18n }) => {\n return i18n.t('lexical:general:slashMenuBasicGroupLabel')\n },\n }\n}\n", "'use client'\nimport type { EditorConfig as LexicalEditorConfig } from 'lexical'\nimport type { CellComponentProps, RichTextFieldClient } from 'payload'\n\nimport { createHeadlessEditor } from '@lexical/headless'\nimport { useClientFunctions, useTableCell } from '@payloadcms/ui'\nimport { $getRoot } from 'lexical'\nimport React, { useEffect, useState } from 'react'\n\nimport type { FeatureProviderClient } from '../features/typesClient.js'\nimport type { SanitizedClientEditorConfig } from '../lexical/config/types.js'\nimport type { GeneratedFeatureProviderComponent, LexicalFieldAdminProps } from '../types.js'\n\nimport { defaultEditorLexicalConfig } from '../lexical/config/client/default.js'\nimport { loadClientFeatures } from '../lexical/config/client/loader.js'\nimport { sanitizeClientEditorConfig } from '../lexical/config/client/sanitize.js'\nimport { getEnabledNodes } from '../lexical/nodes/index.js'\n\nexport const RichTextCell: React.FC<\n {\n readonly admin?: LexicalFieldAdminProps\n readonly lexicalEditorConfig: LexicalEditorConfig\n } & CellComponentProps<RichTextFieldClient>\n> = (props) => {\n const {\n admin,\n field: { _schemaPath, richTextComponentMap },\n lexicalEditorConfig,\n } = props\n\n const [preview, setPreview] = React.useState('Loading...')\n\n const { cellData } = useTableCell()\n\n const clientFunctions = useClientFunctions()\n const [hasLoadedFeatures, setHasLoadedFeatures] = useState(false)\n\n const [featureProviders, setFeatureProviders] = useState<\n FeatureProviderClient<unknown, unknown>[]\n >([])\n\n const [finalSanitizedEditorConfig, setFinalSanitizedEditorConfig] =\n useState<SanitizedClientEditorConfig>(null)\n\n const featureProviderComponents: GeneratedFeatureProviderComponent[] = (\n richTextComponentMap.get('features') as GeneratedFeatureProviderComponent[]\n ).sort((a, b) => a.order - b.order) // order by order\n\n let featureProvidersAndComponentsToLoad = 0 // feature providers and components\n for (const featureProvider of featureProviderComponents) {\n const featureComponentKeys = Array.from(richTextComponentMap.keys()).filter((key) =>\n key.startsWith(`feature.${featureProvider.key}.components.`),\n )\n\n featureProvidersAndComponentsToLoad += 1\n featureProvidersAndComponentsToLoad += featureComponentKeys.length\n }\n\n useEffect(() => {\n if (!hasLoadedFeatures) {\n const featureProvidersLocal: FeatureProviderClient<unknown, unknown>[] = []\n let featureProvidersAndComponentsLoaded = 0 // feature providers and components only\n\n Object.entries(clientFunctions).forEach(([key, plugin]) => {\n if (key.startsWith(`lexicalFeature.${_schemaPath}.`)) {\n if (!key.includes('.lexical_internal_components.')) {\n featureProvidersLocal.push(plugin)\n }\n featureProvidersAndComponentsLoaded++\n }\n })\n\n if (featureProvidersAndComponentsLoaded === featureProvidersAndComponentsToLoad) {\n setFeatureProviders(featureProvidersLocal)\n setHasLoadedFeatures(true)\n\n /**\n * Loaded feature provided => create the final sanitized editor config\n */\n\n const resolvedClientFeatures = loadClientFeatures({\n clientFunctions,\n schemaPath: _schemaPath,\n unSanitizedEditorConfig: {\n features: featureProvidersLocal,\n lexical: lexicalEditorConfig,\n },\n })\n\n setFinalSanitizedEditorConfig(\n sanitizeClientEditorConfig(\n lexicalEditorConfig ? lexicalEditorConfig : defaultEditorLexicalConfig,\n resolvedClientFeatures,\n admin,\n ),\n )\n }\n }\n }, [\n admin,\n featureProviderComponents,\n hasLoadedFeatures,\n clientFunctions,\n _schemaPath,\n featureProviderComponents.length,\n featureProviders,\n finalSanitizedEditorConfig,\n lexicalEditorConfig,\n richTextComponentMap,\n featureProvidersAndComponentsToLoad,\n ])\n\n useEffect(() => {\n if (!hasLoadedFeatures) {\n return\n }\n let dataToUse = cellData\n if (dataToUse == null || !hasLoadedFeatures || !finalSanitizedEditorConfig) {\n setPreview('')\n return\n }\n\n // Transform data through load hooks\n if (finalSanitizedEditorConfig?.features?.hooks?.load?.length) {\n finalSanitizedEditorConfig.features.hooks.load.forEach((hook) => {\n dataToUse = hook({ incomingEditorState: dataToUse })\n })\n }\n\n if (!dataToUse || typeof dataToUse !== 'object') {\n setPreview('')\n return\n }\n\n // If data is from Slate and not Lexical\n if (Array.isArray(dataToUse) && !('root' in dataToUse)) {\n setPreview('')\n return\n }\n\n // If data is from payload-plugin-lexical\n if ('jsonContent' in dataToUse) {\n setPreview('')\n return\n }\n\n // initialize headless editor\n const headlessEditor = createHeadlessEditor({\n namespace: finalSanitizedEditorConfig.lexical.namespace,\n nodes: getEnabledNodes({ editorConfig: finalSanitizedEditorConfig }),\n theme: finalSanitizedEditorConfig.lexical.theme,\n })\n headlessEditor.setEditorState(headlessEditor.parseEditorState(dataToUse))\n\n const textContent =\n headlessEditor.getEditorState().read(() => {\n return $getRoot().getTextContent()\n }) || ''\n\n // Limiting the number of characters shown is done in a CSS rule\n setPreview(textContent)\n }, [cellData, lexicalEditorConfig, hasLoadedFeatures, finalSanitizedEditorConfig])\n\n if (!hasLoadedFeatures) {\n return (\n <React.Fragment>\n {Array.isArray(featureProviderComponents) &&\n featureProviderComponents.map((featureProvider) => {\n // get all components starting with key feature.${FeatureProvider.key}.components.{featureComponentKey}\n const featureComponentKeys = Array.from(richTextComponentMap.keys()).filter((key) =>\n key.startsWith(\n `lexical_internal_feature.${featureProvider.key}.lexical_internal_components.`,\n ),\n )\n\n const featureComponents: React.ReactNode[] = featureComponentKeys.map((key) => {\n return richTextComponentMap.get(key)\n }) as React.ReactNode[]\n\n return (\n <React.Fragment key={featureProvider.key}>\n {featureComponents?.length\n ? featureComponents.map((FeatureComponent) => {\n return FeatureComponent\n })\n : null}\n {featureProvider.ClientFeature}\n </React.Fragment>\n )\n })}\n </React.Fragment>\n )\n }\n\n return <span>{preview}</span>\n}\n", "'use client'\nimport type { EditorThemeClasses } from 'lexical'\n\nexport const LexicalEditorTheme: EditorThemeClasses = {\n block: 'LexicalEditorTheme__block',\n blockCursor: 'LexicalEditorTheme__blockCursor',\n characterLimit: 'LexicalEditorTheme__characterLimit',\n code: 'LexicalEditorTheme__code',\n codeHighlight: {\n atrule: 'LexicalEditorTheme__tokenAttr',\n attr: 'LexicalEditorTheme__tokenAttr',\n boolean: 'LexicalEditorTheme__tokenProperty',\n builtin: 'LexicalEditorTheme__tokenSelector',\n cdata: 'LexicalEditorTheme__tokenComment',\n char: 'LexicalEditorTheme__tokenSelector',\n class: 'LexicalEditorTheme__tokenFunction',\n 'class-name': 'LexicalEditorTheme__tokenFunction',\n comment: 'LexicalEditorTheme__tokenComment',\n constant: 'LexicalEditorTheme__tokenProperty',\n deleted: 'LexicalEditorTheme__tokenProperty',\n doctype: 'LexicalEditorTheme__tokenComment',\n entity: 'LexicalEditorTheme__tokenOperator',\n function: 'LexicalEditorTheme__tokenFunction',\n important: 'LexicalEditorTheme__tokenVariable',\n inserted: 'LexicalEditorTheme__tokenSelector',\n keyword: 'LexicalEditorTheme__tokenAttr',\n namespace: 'LexicalEditorTheme__tokenVariable',\n number: 'LexicalEditorTheme__tokenProperty',\n operator: 'LexicalEditorTheme__tokenOperator',\n prolog: 'LexicalEditorTheme__tokenComment',\n property: 'LexicalEditorTheme__tokenProperty',\n punctuation: 'LexicalEditorTheme__tokenPunctuation',\n regex: 'LexicalEditorTheme__tokenVariable',\n selector: 'LexicalEditorTheme__tokenSelector',\n string: 'LexicalEditorTheme__tokenSelector',\n symbol: 'LexicalEditorTheme__tokenProperty',\n tag: 'LexicalEditorTheme__tokenProperty',\n url: 'LexicalEditorTheme__tokenOperator',\n variable: 'LexicalEditorTheme__tokenVariable',\n },\n embedBlock: {\n base: 'LexicalEditorTheme__embedBlock',\n focus: 'LexicalEditorTheme__embedBlockFocus',\n },\n hashtag: 'LexicalEditorTheme__hashtag',\n heading: {\n h1: 'LexicalEditorTheme__h1',\n h2: 'LexicalEditorTheme__h2',\n h3: 'LexicalEditorTheme__h3',\n h4: 'LexicalEditorTheme__h4',\n h5: 'LexicalEditorTheme__h5',\n h6: 'LexicalEditorTheme__h6',\n },\n hr: 'LexicalEditorTheme__hr',\n indent: 'LexicalEditorTheme__indent',\n inlineImage: 'LexicalEditor__inline-image',\n link: 'LexicalEditorTheme__link',\n list: {\n checklist: 'LexicalEditorTheme__checklist',\n listitem: 'LexicalEditorTheme__listItem',\n listitemChecked: 'LexicalEditorTheme__listItemChecked',\n listitemUnchecked: 'LexicalEditorTheme__listItemUnchecked',\n nested: {\n listitem: 'LexicalEditorTheme__nestedListItem',\n },\n olDepth: [\n 'LexicalEditorTheme__ol1',\n 'LexicalEditorTheme__ol2',\n 'LexicalEditorTheme__ol3',\n 'LexicalEditorTheme__ol4',\n 'LexicalEditorTheme__ol5',\n ],\n ul: 'LexicalEditorTheme__ul',\n },\n ltr: 'LexicalEditorTheme__ltr',\n mark: 'LexicalEditorTheme__mark',\n markOverlap: 'LexicalEditorTheme__markOverlap',\n paragraph: 'LexicalEditorTheme__paragraph',\n quote: 'LexicalEditorTheme__quote',\n relationship: 'LexicalEditorTheme__relationship',\n rtl: 'LexicalEditorTheme__rtl',\n table: 'LexicalEditorTheme__table',\n tableAddColumns: 'LexicalEditorTheme__tableAddColumns',\n tableAddRows: 'LexicalEditorTheme__tableAddRows',\n tableCell: 'LexicalEditorTheme__tableCell',\n tableCellActionButton: 'LexicalEditorTheme__tableCellActionButton',\n tableCellActionButtonContainer: 'LexicalEditorTheme__tableCellActionButtonContainer',\n tableCellEditing: 'LexicalEditorTheme__tableCellEditing',\n tableCellHeader: 'LexicalEditorTheme__tableCellHeader',\n tableCellPrimarySelected: 'LexicalEditorTheme__tableCellPrimarySelected',\n tableCellResizer: 'LexicalEditorTheme__tableCellResizer',\n tableCellSelected: 'LexicalEditorTheme__tableCellSelected',\n tableCellSortedIndicator: 'LexicalEditorTheme__tableCellSortedIndicator',\n tableResizeRuler: 'LexicalEditorTheme__tableCellResizeRuler',\n tableSelected: 'LexicalEditorTheme__tableSelected',\n text: {\n bold: 'LexicalEditorTheme__textBold',\n code: 'LexicalEditorTheme__textCode',\n italic: 'LexicalEditorTheme__textItalic',\n strikethrough: 'LexicalEditorTheme__textStrikethrough',\n subscript: 'LexicalEditorTheme__textSubscript',\n superscript: 'LexicalEditorTheme__textSuperscript',\n underline: 'LexicalEditorTheme__textUnderline',\n underlineStrikethrough: 'LexicalEditorTheme__textUnderlineStrikethrough',\n },\n upload: 'editor-upload',\n}\n", "'use client'\nimport type { EditorConfig as LexicalEditorConfig } from 'lexical'\n\nimport { LexicalEditorTheme } from '../../theme/EditorTheme.js'\n\nexport const defaultEditorLexicalConfig: LexicalEditorConfig = {\n namespace: 'lexical',\n theme: LexicalEditorTheme,\n}\n", "'use client'\n\nimport type {\n ClientFeatureProviderMap,\n FeatureProviderClient,\n ResolvedClientFeatureMap,\n} from '../../../features/typesClient.js'\nimport type { ClientEditorConfig } from '../types.js'\n\n/**\n * This function expects client functions to ALREADY be ordered & dependencies checked on the server\n * @param unSanitizedEditorConfig\n */\nexport function loadClientFeatures({\n clientFunctions,\n schemaPath,\n unSanitizedEditorConfig,\n}: {\n clientFunctions?: Record<string, any>\n schemaPath: string\n unSanitizedEditorConfig: ClientEditorConfig\n}): ResolvedClientFeatureMap {\n for (const featureProvider of unSanitizedEditorConfig.features) {\n if (\n !featureProvider?.clientFeatureProps?.featureKey ||\n featureProvider?.clientFeatureProps?.order === undefined ||\n featureProvider?.clientFeatureProps?.order === null\n ) {\n throw new Error(\n 'A Feature you have installed does not return the client props as clientFeatureProps. Please make sure to always return those props, even if they are null, as other important props like order and featureKey are later on injected.',\n )\n }\n }\n\n // sort unSanitizedEditorConfig.features by order\n unSanitizedEditorConfig.features = unSanitizedEditorConfig.features.sort(\n (a, b) => a.clientFeatureProps.order - b.clientFeatureProps.order,\n )\n\n const featureProviderMap: ClientFeatureProviderMap = new Map(\n unSanitizedEditorConfig.features.map(\n (f) =>\n [f.clientFeatureProps.featureKey, f] as [string, FeatureProviderClient<unknown, unknown>],\n ),\n )\n\n const resolvedFeatures: ResolvedClientFeatureMap = new Map()\n\n // Make sure all dependencies declared in the respective features exist\n let loaded = 0\n for (const featureProvider of unSanitizedEditorConfig.features) {\n /**\n * Load relevant clientFunctions scoped to this feature and then pass them to the client feature\n */\n const relevantClientFunctions: Record<string, any> = {}\n Object.entries(clientFunctions).forEach(([key, plugin]) => {\n if (\n key.startsWith(\n `lexicalFeature.${schemaPath}.${featureProvider.clientFeatureProps.featureKey}.components.`,\n )\n ) {\n const featureComponentKey = key.split(\n `${schemaPath}.${featureProvider.clientFeatureProps.featureKey}.components.`,\n )[1]\n relevantClientFunctions[featureComponentKey] = plugin\n }\n })\n\n const feature =\n typeof featureProvider.feature === 'function'\n ? featureProvider.feature({\n clientFunctions: relevantClientFunctions,\n featureProviderMap,\n resolvedFeatures,\n unSanitizedEditorConfig,\n })\n : featureProvider.feature\n\n resolvedFeatures.set(featureProvider.clientFeatureProps.featureKey, {\n ...feature,\n key: featureProvider.clientFeatureProps.featureKey,\n order: loaded,\n })\n\n loaded++\n }\n\n return resolvedFeatures\n}\n", "'use client'\n\nimport type { EditorConfig as LexicalEditorConfig } from 'lexical'\n\nimport type {\n ResolvedClientFeatureMap,\n SanitizedClientFeatures,\n} from '../../../features/typesClient.js'\nimport type { LexicalFieldAdminProps } from '../../../types.js'\nimport type { SanitizedClientEditorConfig } from '../types.js'\n\nexport const sanitizeClientFeatures = (\n features: ResolvedClientFeatureMap,\n): SanitizedClientFeatures => {\n const sanitized: SanitizedClientFeatures = {\n enabledFeatures: [],\n hooks: {\n load: [],\n save: [],\n },\n markdownTransformers: [],\n nodes: [],\n plugins: [],\n providers: [],\n slashMenu: {\n dynamicGroups: [],\n groups: [],\n },\n toolbarFixed: {\n groups: [],\n },\n toolbarInline: {\n groups: [],\n },\n }\n\n if (!features?.size) {\n return sanitized\n }\n\n features.forEach((feature) => {\n if (feature.hooks) {\n if (feature.hooks?.load?.length) {\n sanitized.hooks.load = sanitized.hooks.load.concat(feature.hooks.load)\n }\n if (feature.hooks?.save?.length) {\n sanitized.hooks.save = sanitized.hooks.save.concat(feature.hooks.save)\n }\n }\n\n if (feature.providers?.length) {\n sanitized.providers = sanitized.providers.concat(feature.providers)\n }\n\n if (feature.nodes?.length) {\n sanitized.nodes = sanitized.nodes.concat(feature.nodes)\n }\n if (feature.plugins?.length) {\n feature.plugins.forEach((plugin, i) => {\n sanitized.plugins.push({\n Component: plugin.Component,\n clientProps: feature.sanitizedClientFeatureProps,\n key: feature.key + i,\n position: plugin.position,\n })\n })\n }\n\n if (feature.toolbarInline?.groups?.length) {\n for (const group of feature.toolbarInline.groups) {\n // 1. find the group with the same key or create new one\n let foundGroup = sanitized.toolbarInline.groups.find(\n (sanitizedGroup) => sanitizedGroup.key === group.key,\n )\n if (!foundGroup) {\n foundGroup = {\n ...group,\n items: [],\n }\n } else {\n sanitized.toolbarInline.groups = sanitized.toolbarInline.groups.filter(\n (sanitizedGroup) => sanitizedGroup.key !== group.key,\n )\n }\n\n // 2. Add options to group options array and add to sanitized.slashMenu.groupsWithOptions\n if (group?.items?.length) {\n foundGroup.items = foundGroup.items.concat(group.items)\n }\n sanitized.toolbarInline?.groups.push(foundGroup)\n }\n }\n\n if (feature.toolbarFixed?.groups?.length) {\n for (const group of feature.toolbarFixed.groups) {\n // 1. find the group with the same key or create new one\n let foundGroup = sanitized.toolbarFixed.groups.find(\n (sanitizedGroup) => sanitizedGroup.key === group.key,\n )\n if (!foundGroup) {\n foundGroup = {\n ...group,\n items: [],\n }\n } else {\n sanitized.toolbarFixed.groups = sanitized.toolbarFixed.groups.filter(\n (sanitizedGroup) => sanitizedGroup.key !== group.key,\n )\n }\n\n // 2. Add options to group options array and add to sanitized.slashMenu.groupsWithOptions\n if (group?.items?.length) {\n foundGroup.items = foundGroup.items.concat(group.items)\n }\n sanitized.toolbarFixed?.groups.push(foundGroup)\n }\n }\n\n if (feature.slashMenu?.groups) {\n if (feature.slashMenu.dynamicGroups?.length) {\n sanitized.slashMenu.dynamicGroups = sanitized.slashMenu.dynamicGroups.concat(\n feature.slashMenu.dynamicGroups,\n )\n }\n\n for (const optionGroup of feature.slashMenu.groups) {\n // 1. find the group with the same name or create new one\n let group = sanitized.slashMenu.groups.find((group) => group.key === optionGroup.key)\n if (!group) {\n group = {\n ...optionGroup,\n items: [],\n }\n } else {\n sanitized.slashMenu.groups = sanitized.slashMenu.groups.filter(\n (group) => group.key !== optionGroup.key,\n )\n }\n\n // 2. Add options to group options array and add to sanitized.slashMenu.groupsWithOptions\n if (optionGroup?.items?.length) {\n group.items = group.items.concat(optionGroup.items)\n }\n sanitized.slashMenu.groups.push(group)\n }\n }\n\n if (feature.markdownTransformers?.length) {\n sanitized.markdownTransformers = sanitized.markdownTransformers.concat(\n feature.markdownTransformers,\n )\n }\n sanitized.enabledFeatures.push(feature.key)\n })\n\n // Sort sanitized.toolbarInline.groups by order property\n sanitized.toolbarInline.groups.sort((a, b) => {\n if (a.order && b.order) {\n return a.order - b.order\n } else if (a.order) {\n return -1\n } else if (b.order) {\n return 1\n } else {\n return 0\n }\n })\n // Sort sanitized.toolbarFixed.groups by order property\n sanitized.toolbarFixed.groups.sort((a, b) => {\n if (a.order && b.order) {\n return a.order - b.order\n } else if (a.order) {\n return -1\n } else if (b.order) {\n return 1\n } else {\n return 0\n }\n })\n\n // Sort sanitized.toolbarInline.groups.[group].entries by order property\n for (const group of sanitized.toolbarInline.groups) {\n group.items.sort((a, b) => {\n if (a.order && b.order) {\n return a.order - b.order\n } else if (a.order) {\n return -1\n } else if (b.order) {\n return 1\n } else {\n return 0\n }\n })\n }\n\n // Sort sanitized.toolbarFixed.groups.[group].entries by order property\n for (const group of sanitized.toolbarFixed.groups) {\n group.items.sort((a, b) => {\n if (a.order && b.order) {\n return a.order - b.order\n } else if (a.order) {\n return -1\n } else if (b.order) {\n return 1\n } else {\n return 0\n }\n })\n }\n\n return sanitized\n}\n\nexport function sanitizeClientEditorConfig(\n lexical: LexicalEditorConfig,\n resolvedClientFeatureMap: ResolvedClientFeatureMap,\n admin?: LexicalFieldAdminProps,\n): SanitizedClientEditorConfig {\n return {\n admin,\n features: sanitizeClientFeatures(resolvedClientFeatureMap),\n lexical,\n resolvedFeatureMap: resolvedClientFeatureMap,\n }\n}\n", "'use client'\n\nimport { $isElementNode, $isRangeSelection, FORMAT_ELEMENT_COMMAND } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { AlignCenterIcon } from '../../../lexical/ui/icons/AlignCenter/index.js'\nimport { AlignJustifyIcon } from '../../../lexical/ui/icons/AlignJustify/index.js'\nimport { AlignLeftIcon } from '../../../lexical/ui/icons/AlignLeft/index.js'\nimport { AlignRightIcon } from '../../../lexical/ui/icons/AlignRight/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarAlignGroupWithItems } from './toolbarAlignGroup.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarAlignGroupWithItems([\n {\n ChildComponent: AlignLeftIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isElementNode(node)) {\n if (node.getFormatType() === 'left') {\n continue\n }\n }\n\n const parent = node.getParent()\n if ($isElementNode(parent)) {\n if (parent.getFormatType() === 'left') {\n continue\n }\n }\n\n return false\n }\n return true\n },\n key: 'alignLeft',\n label: ({ i18n }) => {\n return i18n.t('lexical:align:alignLeftLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'left')\n },\n order: 1,\n },\n {\n ChildComponent: AlignCenterIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isElementNode(node)) {\n if (node.getFormatType() === 'center') {\n continue\n }\n }\n\n const parent = node.getParent()\n if ($isElementNode(parent)) {\n if (parent.getFormatType() === 'center') {\n continue\n }\n }\n\n return false\n }\n return true\n },\n key: 'alignCenter',\n label: ({ i18n }) => {\n return i18n.t('lexical:align:alignCenterLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'center')\n },\n order: 2,\n },\n {\n ChildComponent: AlignRightIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isElementNode(node)) {\n if (node.getFormatType() === 'right') {\n continue\n }\n }\n\n const parent = node.getParent()\n if ($isElementNode(parent)) {\n if (parent.getFormatType() === 'right') {\n continue\n }\n }\n\n return false\n }\n return true\n },\n key: 'alignRight',\n label: ({ i18n }) => {\n return i18n.t('lexical:align:alignRightLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'right')\n },\n order: 3,\n },\n {\n ChildComponent: AlignJustifyIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isElementNode(node)) {\n if (node.getFormatType() === 'justify') {\n continue\n }\n }\n\n const parent = node.getParent()\n if ($isElementNode(parent)) {\n if (parent.getFormatType() === 'justify') {\n continue\n }\n }\n\n return false\n }\n return true\n },\n key: 'alignJustify',\n label: ({ i18n }) => {\n return i18n.t('lexical:align:alignJustifyLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'justify')\n },\n order: 4,\n },\n ]),\n]\n\nexport const AlignFeatureClient = createClientFeature({\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const AlignCenterIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M2.5 5H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2.5 10H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M5 15H15\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const AlignJustifyIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M2.5 5H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2.5 10H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2.5 15H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const AlignLeftIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M2.5 5H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2.5 10H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2.5 15H12.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const AlignRightIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M2.5 5H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2.5 10H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M7.5 15H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n)\n", "'use client'\n\nimport { useAddClientFunction, useFieldProps, useTableCell } from '@payloadcms/ui'\n\nimport type { FeatureProviderClient } from '../features/typesClient.js'\n\nexport const useLexicalFeature = <ClientFeatureProps,>(\n featureKey: string,\n feature: FeatureProviderClient<ClientFeatureProps>,\n) => {\n const { schemaPath: schemaPathFromFieldProps } = useFieldProps()\n const tableCell = useTableCell()\n\n const schemaPathFromCellProps = tableCell?.cellProps?.field?._schemaPath\n\n const schemaPath = schemaPathFromCellProps || schemaPathFromFieldProps // schemaPathFromCellProps needs to have priority, as there can be cells within fields (e.g. list drawers) and the cell schemaPath needs to be used there - not the parent field schemaPath. There cannot be fields within cells.\n\n useAddClientFunction(`lexicalFeature.${schemaPath}.${featureKey}`, feature)\n}\n", "'use client'\n\nimport type React from 'react'\n\nimport type { ClientComponentProps, FeatureProviderProviderClient } from './typesClient.js'\n\nimport { useLexicalFeature } from '../utilities/useLexicalFeature.js'\n\n/**\n * Utility function to create a client component for the client feature\n */\nexport const createClientComponent = <ClientFeatureProps,>(\n clientFeature: FeatureProviderProviderClient<ClientFeatureProps>,\n): React.FC<ClientComponentProps<ClientFeatureProps>> => {\n return (props) => {\n useLexicalFeature(props.featureKey, clientFeature(props))\n return null\n }\n}\n", "import type React from 'react'\n\nimport type {\n ClientComponentProps,\n ClientFeature,\n ClientFeatureProviderMap,\n FeatureProviderClient,\n FeatureProviderProviderClient,\n ResolvedClientFeatureMap,\n} from '../features/typesClient.js'\nimport type { ClientEditorConfig } from '../lexical/config/types.js'\n\nimport { createClientComponent } from '../features/createClientComponent.js'\n\nexport type CreateClientFeatureArgs<UnSanitizedClientProps, ClientProps> =\n | ((props: {\n clientFunctions: Record<string, any>\n /** unSanitizedEditorConfig.features, but mapped */\n featureProviderMap: ClientFeatureProviderMap\n props: ClientComponentProps<UnSanitizedClientProps>\n // other resolved features, which have been loaded before this one. All features declared in 'dependencies' should be available here\n resolvedFeatures: ResolvedClientFeatureMap\n // unSanitized EditorConfig,\n unSanitizedEditorConfig: ClientEditorConfig\n }) => ClientFeature<ClientProps>)\n | Omit<ClientFeature<ClientProps>, 'sanitizedClientFeatureProps'>\n\nexport const createClientFeature: <\n UnSanitizedClientProps = undefined,\n ClientProps = UnSanitizedClientProps,\n>(\n args: CreateClientFeatureArgs<UnSanitizedClientProps, ClientProps>,\n) => React.FC<ClientComponentProps<ClientProps>> = (feature) => {\n const featureProviderProvideClient: FeatureProviderProviderClient<any, any> = (props) => {\n const featureProviderClient: Partial<FeatureProviderClient<any, any>> = {\n clientFeatureProps: props,\n }\n\n if (typeof feature === 'function') {\n featureProviderClient.feature = ({\n clientFunctions,\n featureProviderMap,\n resolvedFeatures,\n unSanitizedEditorConfig,\n }) => {\n const toReturn = feature({\n clientFunctions,\n featureProviderMap,\n props,\n resolvedFeatures,\n unSanitizedEditorConfig,\n })\n\n if (toReturn.sanitizedClientFeatureProps === null) {\n toReturn.sanitizedClientFeatureProps = props\n }\n\n return toReturn\n }\n } else {\n // We have to spread feature here! Otherwise, if the arg of createClientFeature is not a function, and 2\n // richText editors have the same feature (even if both call it, e.g. both call UploadFeature()),\n // the second richText editor here will override sanitizedClientFeatureProps of the first feature, as both richText\n // editor features share the same reference to the feature object.\n // Example: richText editor 1 and 2 both have UploadFeature. richText editor 1 calls UploadFeature() with custom fields,\n // richText editor 2 calls UploadFeature() with NO custom fields. If we don't spread feature here, richText editor 1\n // will not have any custom fields, as richText editor 2 will override the feature object.\n const newFeature: ClientFeature<any> = { ...feature }\n newFeature.sanitizedClientFeatureProps = props\n featureProviderClient.feature = newFeature\n }\n return featureProviderClient as FeatureProviderClient<any, any>\n }\n\n return createClientComponent(featureProviderProvideClient)\n}\n", "'use client'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../toolbars/types.js'\n\nimport { AlignLeftIcon } from '../../../lexical/ui/icons/AlignLeft/index.js'\n\nexport const toolbarAlignGroupWithItems = (items: ToolbarGroupItem[]): ToolbarGroup => {\n return {\n type: 'dropdown',\n ChildComponent: AlignLeftIcon,\n items,\n key: 'align',\n order: 30,\n }\n}\n", "'use client'\n\nimport { $createQuoteNode, $isQuoteNode, QuoteNode } from '@lexical/rich-text'\nimport { $setBlocksType } from '@lexical/selection'\nimport { $getSelection, $isRangeSelection } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { BlockquoteIcon } from '../../../lexical/ui/icons/Blockquote/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { slashMenuBasicGroupWithItems } from '../../shared/slashMenu/basicGroup.js'\nimport { toolbarTextDropdownGroupWithItems } from '../../shared/toolbar/textDropdownGroup.js'\nimport { MarkdownTransformer } from '../markdownTransformer.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarTextDropdownGroupWithItems([\n {\n ChildComponent: BlockquoteIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if (!$isQuoteNode(node) && !$isQuoteNode(node.getParent())) {\n return false\n }\n }\n return true\n },\n key: 'blockquote',\n label: ({ i18n }) => {\n return i18n.t('lexical:blockquote:label')\n },\n onSelect: ({ editor }) => {\n editor.update(() => {\n const selection = $getSelection()\n $setBlocksType(selection, () => $createQuoteNode())\n })\n },\n order: 20,\n },\n ]),\n]\n\nexport const BlockquoteFeatureClient = createClientFeature({\n markdownTransformers: [MarkdownTransformer],\n nodes: [QuoteNode],\n\n slashMenu: {\n groups: [\n slashMenuBasicGroupWithItems([\n {\n Icon: BlockquoteIcon,\n key: 'blockquote',\n keywords: ['quote', 'blockquote'],\n label: ({ i18n }) => {\n return i18n.t('lexical:blockquote:label')\n },\n onSelect: ({ editor }) => {\n editor.update(() => {\n const selection = $getSelection()\n $setBlocksType(selection, () => $createQuoteNode())\n })\n },\n },\n ]),\n ],\n },\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const BlockquoteIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.5353 10.5725C13.5353 9.47709 11.0456 9.99991 11.0456 7.85883C11.0456 6.46464 12.1162 5.61816 13.361 5.61816C14.805 5.61816 16 6.86298 16 8.92937C16 11.2945 14.4564 13.7841 11.1203 14.3816L10.8216 13.1368C12.888 12.4895 13.5353 11.4937 13.5353 10.5725ZM6.71369 10.5725C6.71369 9.47709 4.22407 9.99991 4.22407 7.85883C4.22407 6.46464 5.29461 5.61816 6.53942 5.61816C7.9834 5.61816 9.17842 6.86298 9.17842 8.92937C9.17842 11.2945 7.63485 13.7841 4.29876 14.3816L4 13.1368C6.06639 12.4895 6.71369 11.4937 6.71369 10.5725Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const TextIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"currentColor\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11.708 14.5H7.79785V13.9414H8.01367C9.00391 13.9414 9.15625 13.9033 9.15625 13.6113V6.70508H8.07715C6.82031 6.70508 6.73145 7.08594 6.28711 8.67285H5.80469L5.91895 6.12109H13.5869L13.7012 8.67285H13.2188C12.7744 7.08594 12.6855 6.70508 11.4287 6.70508H10.3496V13.6113C10.3496 13.9033 10.502 13.9414 11.4922 13.9414H11.708V14.5Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "import type { ToolbarGroup, ToolbarGroupItem } from '../../toolbars/types.js'\n\nimport { TextIcon } from '../../../lexical/ui/icons/Text/index.js'\n\nexport const toolbarTextDropdownGroupWithItems = (items: ToolbarGroupItem[]): ToolbarGroup => {\n return {\n type: 'dropdown',\n ChildComponent: TextIcon,\n items,\n key: 'text',\n order: 25,\n }\n}\n", "import type { ElementTransformer } from '@lexical/markdown'\n\nimport { $createQuoteNode, $isQuoteNode, QuoteNode } from '@lexical/rich-text'\nimport { $createLineBreakNode } from 'lexical'\n\nexport const MarkdownTransformer: ElementTransformer = {\n type: 'element',\n dependencies: [QuoteNode],\n export: (node, exportChildren) => {\n if (!$isQuoteNode(node)) {\n return null\n }\n\n const lines = exportChildren(node).split('\\n')\n const output = []\n for (const line of lines) {\n output.push('> ' + line)\n }\n return output.join('\\n')\n },\n regExp: /^>\\s/,\n replace: (parentNode, children, _match, isImport) => {\n if (isImport) {\n const previousNode = parentNode.getPreviousSibling()\n if ($isQuoteNode(previousNode)) {\n previousNode.splice(previousNode.getChildrenSize(), 0, [\n $createLineBreakNode(),\n ...children,\n ])\n previousNode.select(0, 0)\n parentNode.remove()\n return\n }\n }\n\n const node = $createQuoteNode()\n node.append(...children)\n parentNode.replace(node)\n node.select(0, 0)\n },\n}\n", "'use client'\n\nimport type { BlockFieldClient } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\n\nimport type { SlashMenuItem } from '../../../lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../toolbars/types.js'\n\nimport { BlockIcon } from '../../../lexical/ui/icons/Block/index.js'\nimport { InlineBlocksIcon } from '../../../lexical/ui/icons/InlineBlocks/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { BlockNode } from './nodes/BlocksNode.js'\nimport { InlineBlockNode } from './nodes/InlineBlocksNode.js'\nimport { INSERT_BLOCK_COMMAND, OPEN_INLINE_BLOCK_DRAWER_COMMAND } from './plugin/commands.js'\nimport { BlocksPlugin } from './plugin/index.js'\n\nexport type BlocksFeatureClientProps = {\n clientBlockSlugs: string[]\n clientInlineBlockSlugs: string[]\n}\n\nexport const BlocksFeatureClient = createClientFeature<BlocksFeatureClientProps>(({ props }) => ({\n nodes: [BlockNode, InlineBlockNode],\n plugins: [\n {\n Component: BlocksPlugin,\n position: 'normal',\n },\n ],\n sanitizedClientFeatureProps: props,\n slashMenu: {\n groups: [\n props.clientBlockSlugs?.length\n ? {\n items: props.clientBlockSlugs.map((blockSlug) => {\n return {\n Icon: BlockIcon,\n key: 'block-' + blockSlug,\n keywords: ['block', 'blocks', blockSlug],\n label: ({ i18n, richTextComponentMap }) => {\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_blocks`\n const blocksField: BlockFieldClient = richTextComponentMap.get(\n componentMapRenderedBlockPath,\n )[0]\n\n const clientBlock = blocksField.blocks.find((_block) => _block.slug === blockSlug)\n\n const blockDisplayName = clientBlock.labels.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_BLOCK_COMMAND, {\n id: null,\n blockName: '',\n blockType: blockSlug,\n })\n },\n } as SlashMenuItem\n }),\n key: 'blocks',\n label: ({ i18n }) => {\n return i18n.t('lexical:blocks:label')\n },\n }\n : null,\n props.clientInlineBlockSlugs?.length\n ? {\n items: props.clientInlineBlockSlugs.map((inlineBlockSlug) => {\n return {\n Icon: InlineBlocksIcon,\n key: 'inlineBlocks-' + inlineBlockSlug,\n keywords: ['inlineBlock', 'inline block', inlineBlockSlug],\n label: ({ i18n, richTextComponentMap }) => {\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_inline_blocks`\n\n const blocksField: BlockFieldClient = richTextComponentMap.get(\n componentMapRenderedBlockPath,\n )[0]\n\n const clientBlock = blocksField.blocks.find(\n (_block) => _block.slug === inlineBlockSlug,\n )\n\n const blockDisplayName = clientBlock.labels.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(OPEN_INLINE_BLOCK_DRAWER_COMMAND, {\n fields: {\n id: null,\n blockName: '',\n blockType: inlineBlockSlug,\n },\n })\n },\n } as SlashMenuItem\n }),\n key: 'inlineBlocks',\n label: ({ i18n }) => {\n return i18n.t('lexical:blocks:inlineBlocks:label')\n },\n }\n : null,\n ].filter(Boolean),\n },\n toolbarFixed: {\n groups: [\n props.clientBlockSlugs?.length\n ? {\n type: 'dropdown',\n ChildComponent: BlockIcon,\n items: props.clientBlockSlugs.map((blockSlug, index) => {\n return {\n ChildComponent: BlockIcon,\n isActive: undefined, // At this point, we would be inside a sub-richtext-editor. And at this point this will be run against the focused sub-editor, not the parent editor which has the actual block. Thus, no point in running this\n key: 'block-' + blockSlug,\n label: ({ i18n, richTextComponentMap }) => {\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_blocks`\n const blocksField: BlockFieldClient = richTextComponentMap.get(\n componentMapRenderedBlockPath,\n )[0]\n\n const clientBlock = blocksField.blocks.find((_block) => _block.slug === blockSlug)\n\n const blockDisplayName = clientBlock.labels.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_BLOCK_COMMAND, {\n id: null,\n blockName: '',\n blockType: blockSlug,\n })\n },\n order: index,\n } as ToolbarGroupItem\n }),\n key: 'blocks',\n order: 20,\n }\n : null,\n props.clientInlineBlockSlugs?.length\n ? {\n type: 'dropdown',\n ChildComponent: InlineBlocksIcon,\n items: props.clientInlineBlockSlugs.map((inlineBlockSlug, index) => {\n return {\n ChildComponent: InlineBlocksIcon,\n isActive: undefined,\n key: 'inlineBlock-' + inlineBlockSlug,\n label: ({ i18n, richTextComponentMap }) => {\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_inline_blocks`\n const blocksField: BlockFieldClient = richTextComponentMap.get(\n componentMapRenderedBlockPath,\n )[0]\n\n const clientBlock = blocksField.blocks.find(\n (_block) => _block.slug === inlineBlockSlug,\n )\n\n const blockDisplayName = clientBlock.labels.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(OPEN_INLINE_BLOCK_DRAWER_COMMAND, {\n fields: {\n blockType: inlineBlockSlug,\n },\n })\n },\n order: index,\n } as ToolbarGroupItem\n }),\n key: 'inlineBlocks',\n order: 25,\n }\n : null,\n ].filter(Boolean) as ToolbarGroup[],\n },\n}))\n", "'use client'\nimport React from 'react'\n\nexport const BlockIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect height=\"4\" rx=\"0.5\" stroke=\"currentColor\" width=\"4\" x=\"8\" y=\"5\" />\n <rect height=\"4\" rx=\"0.5\" stroke=\"currentColor\" width=\"4\" x=\"5\" y=\"11\" />\n <rect height=\"4\" rx=\"0.5\" stroke=\"currentColor\" width=\"4\" x=\"11\" y=\"11\" />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const InlineBlocksIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n clipRule=\"evenodd\"\n d=\"M5.33333 6.5C5.11232 6.5 4.90036 6.5878 4.74408 6.74408C4.5878 6.90036 4.5 7.11232 4.5 7.33333V12.1667C4.5 12.3877 4.5878 12.5996 4.74408 12.7559C4.90036 12.9122 5.11232 13 5.33333 13H14.6667C14.8877 13 15.0996 12.9122 15.2559 12.7559C15.4122 12.5996 15.5 12.3877 15.5 12.1667V11.6667C15.5 11.3905 15.7239 11.1667 16 11.1667C16.2761 11.1667 16.5 11.3905 16.5 11.6667V12.1667C16.5 12.6529 16.3068 13.1192 15.963 13.463C15.6192 13.8068 15.1529 14 14.6667 14H5.33333C4.8471 14 4.38079 13.8068 4.03697 13.463C3.69315 13.1192 3.5 12.6529 3.5 12.1667V7.33333C3.5 6.8471 3.69315 6.38079 4.03697 6.03697C4.38079 5.69315 4.8471 5.5 5.33333 5.5H10.3333C10.6095 5.5 10.8333 5.72386 10.8333 6C10.8333 6.27614 10.6095 6.5 10.3333 6.5H5.33333ZM13 6.5C12.7239 6.5 12.5 6.27614 12.5 6C12.5 5.72386 12.7239 5.5 13 5.5H16C16.2761 5.5 16.5 5.72386 16.5 6V9C16.5 9.27614 16.2761 9.5 16 9.5C15.7239 9.5 15.5 9.27614 15.5 9V7.20711L13.3536 9.35355C13.1583 9.54882 12.8417 9.54882 12.6464 9.35355C12.4512 9.15829 12.4512 8.84171 12.6464 8.64645L14.7929 6.5H13ZM6.16699 8.33325C6.16699 8.05711 6.39085 7.83325 6.66699 7.83325H11.0003C11.2765 7.83325 11.5003 8.05711 11.5003 8.33325C11.5003 8.60939 11.2765 8.83325 11.0003 8.83325H6.66699C6.39085 8.83325 6.16699 8.60939 6.16699 8.33325ZM6.16699 10.9999C6.16699 10.7238 6.39085 10.4999 6.66699 10.4999H13.3337C13.6098 10.4999 13.8337 10.7238 13.8337 10.9999C13.8337 11.2761 13.6098 11.4999 13.3337 11.4999H6.66699C6.39085 11.4999 6.16699 11.2761 6.16699 10.9999Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n />\n </svg>\n)\n", "'use client'\nimport type { EditorConfig, LexicalEditor, LexicalNode } from 'lexical'\n\nimport ObjectID from 'bson-objectid'\nimport React, { type JSX } from 'react'\n\nimport type { BlockFields, SerializedBlockNode } from '../../server/nodes/BlocksNode.js'\n\nimport { ServerBlockNode } from '../../server/nodes/BlocksNode.js'\n\nconst BlockComponent = React.lazy(() =>\n import('../component/index.js').then((module) => ({\n default: module.BlockComponent,\n })),\n)\n\nexport class BlockNode extends ServerBlockNode {\n static clone(node: ServerBlockNode): ServerBlockNode {\n return super.clone(node)\n }\n\n static getType(): string {\n return super.getType()\n }\n\n static importJSON(serializedNode: SerializedBlockNode): BlockNode {\n if (serializedNode.version === 1) {\n // Convert (version 1 had the fields wrapped in another, unnecessary data property)\n serializedNode = {\n ...serializedNode,\n fields: {\n ...(serializedNode as any).fields.data,\n },\n version: 2,\n }\n }\n const node = $createBlockNode(serializedNode.fields)\n node.setFormat(serializedNode.format)\n return node\n }\n\n decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element {\n return <BlockComponent formData={this.getFields()} nodeKey={this.getKey()} />\n }\n\n exportJSON(): SerializedBlockNode {\n return super.exportJSON()\n }\n}\n\nexport function $createBlockNode(fields: Exclude<BlockFields, 'id'>): BlockNode {\n return new BlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n })\n}\n\nexport function $isBlockNode(node: BlockNode | LexicalNode | null | undefined): node is BlockNode {\n return node instanceof BlockNode\n}\n", "import type { SerializedDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport type {\n DOMConversionMap,\n DOMExportOutput,\n EditorConfig,\n ElementFormatType,\n LexicalEditor,\n LexicalNode,\n NodeKey,\n Spread,\n} from 'lexical'\nimport type { JsonObject } from 'payload'\nimport type { JSX } from 'react'\n\nimport { DecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport ObjectID from 'bson-objectid'\nimport { deepCopyObjectSimple } from 'payload/shared'\n\nexport type BlockFields<TBlockFields extends JsonObject = JsonObject> = {\n /** Block form data */\n blockName: string\n blockType: string\n id: string\n} & TBlockFields\n\nexport type SerializedBlockNode<TBlockFields extends JsonObject = JsonObject> = Spread<\n {\n children?: never // required so that our typed editor state doesn't automatically add children\n fields: BlockFields<TBlockFields>\n type: 'block'\n },\n SerializedDecoratorBlockNode\n>\n\nexport class ServerBlockNode extends DecoratorBlockNode {\n __fields: BlockFields\n\n constructor({\n fields,\n format,\n key,\n }: {\n fields: BlockFields\n format?: ElementFormatType\n key?: NodeKey\n }) {\n super(format, key)\n this.__fields = fields\n }\n\n static clone(node: ServerBlockNode): ServerBlockNode {\n return new this({\n fields: node.__fields,\n format: node.__format,\n key: node.__key,\n })\n }\n\n static getType(): string {\n return 'block'\n }\n\n static importDOM(): DOMConversionMap<HTMLDivElement> | null {\n return {}\n }\n\n static importJSON(serializedNode: SerializedBlockNode): ServerBlockNode {\n if (serializedNode.version === 1) {\n // Convert (version 1 had the fields wrapped in another, unnecessary data property)\n serializedNode = {\n ...serializedNode,\n fields: {\n ...(serializedNode as any).fields.data,\n },\n version: 2,\n }\n }\n const node = $createServerBlockNode(serializedNode.fields)\n node.setFormat(serializedNode.format)\n return node\n }\n\n static isInline(): false {\n return false\n }\n\n decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element {\n return null\n }\n\n exportDOM(): DOMExportOutput {\n const element = document.createElement('div')\n\n const text = document.createTextNode(this.getTextContent())\n element.append(text)\n return { element }\n }\n\n exportJSON(): SerializedBlockNode {\n return {\n ...super.exportJSON(),\n type: 'block',\n fields: this.getFields(),\n version: 2,\n }\n }\n\n getFields(): BlockFields {\n return this.getLatest().__fields\n }\n\n getTextContent(): string {\n return `Block Field`\n }\n\n setFields(fields: BlockFields): void {\n const fieldsCopy = deepCopyObjectSimple(fields)\n\n const writable = this.getWritable()\n writable.__fields = fieldsCopy\n }\n}\n\nexport function $createServerBlockNode(fields: Exclude<BlockFields, 'id'>): ServerBlockNode {\n return new ServerBlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n })\n}\n\nexport function $isServerBlockNode(\n node: LexicalNode | ServerBlockNode | null | undefined,\n): node is ServerBlockNode {\n return node instanceof ServerBlockNode\n}\n", "'use client'\n\nimport type { BlockFieldClient } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $insertNodeToNearestRoot, $wrapNodeInElement, mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n formatDrawerSlug,\n useEditDepth,\n useFieldProps,\n useModal,\n useTranslation,\n} from '@payloadcms/ui'\nimport {\n $createParagraphNode,\n $getNodeByKey,\n $getPreviousSelection,\n $getSelection,\n $insertNodes,\n $isParagraphNode,\n $isRangeSelection,\n $isRootOrShadowRoot,\n COMMAND_PRIORITY_EDITOR,\n type RangeSelection,\n} from 'lexical'\nimport React, { useEffect, useState } from 'react'\n\nimport type { PluginComponent } from '../../../typesClient.js'\nimport type { BlockFields } from '../../server/nodes/BlocksNode.js'\nimport type { BlocksFeatureClientProps } from '../index.js'\nimport type { InlineBlockNode } from '../nodes/InlineBlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { FieldsDrawer } from '../../../../utilities/fieldsDrawer/Drawer.js'\nimport { $createBlockNode, BlockNode } from '../nodes/BlocksNode.js'\nimport { $createInlineBlockNode } from '../nodes/InlineBlocksNode.js'\nimport {\n INSERT_BLOCK_COMMAND,\n INSERT_INLINE_BLOCK_COMMAND,\n OPEN_INLINE_BLOCK_DRAWER_COMMAND,\n} from './commands.js'\n\nexport type InsertBlockPayload = Exclude<BlockFields, 'id'>\n\nexport const BlocksPlugin: PluginComponent<BlocksFeatureClientProps> = () => {\n const [editor] = useLexicalComposerContext()\n const { closeModal, toggleModal } = useModal()\n const [blockFields, setBlockFields] = useState<BlockFields>(null)\n const [blockType, setBlockType] = useState<string>('' as any)\n const [targetNodeKey, setTargetNodeKey] = useState<null | string>(null)\n const { i18n, t } = useTranslation<string, any>()\n const { schemaPath } = useFieldProps()\n const { uuid } = useEditorConfigContext()\n const editDepth = useEditDepth()\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-inlineBlocks-create-` + uuid,\n depth: editDepth,\n })\n\n const {\n field: { richTextComponentMap },\n } = useEditorConfigContext()\n\n useEffect(() => {\n if (!editor.hasNodes([BlockNode])) {\n throw new Error('BlocksPlugin: BlocksNode not registered on editor')\n }\n\n return mergeRegister(\n editor.registerCommand<InsertBlockPayload>(\n INSERT_BLOCK_COMMAND,\n (payload: InsertBlockPayload) => {\n editor.update(() => {\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n const blockNode = $createBlockNode(payload)\n // Insert blocks node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(blockNode)\n\n const { focus } = selection\n const focusNode = focus.getNode()\n\n // First, delete currently selected node if it's an empty paragraph and if there are sufficient\n // paragraph nodes (more than 1) left in the parent node, so that we don't \"trap\" the user\n if (\n $isParagraphNode(focusNode) &&\n focusNode.getTextContentSize() === 0 &&\n focusNode\n .getParent()\n .getChildren()\n .filter((node) => $isParagraphNode(node)).length > 1\n ) {\n focusNode.remove()\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n editor.registerCommand(\n INSERT_INLINE_BLOCK_COMMAND,\n (fields) => {\n if (targetNodeKey) {\n const node: InlineBlockNode = $getNodeByKey(targetNodeKey)\n\n if (!node) {\n return false\n }\n\n node.setFields(fields as BlockFields)\n\n setTargetNodeKey(null)\n return true\n }\n\n const inlineBlockNode = $createInlineBlockNode(fields as BlockFields)\n $insertNodes([inlineBlockNode])\n if ($isRootOrShadowRoot(inlineBlockNode.getParentOrThrow())) {\n $wrapNodeInElement(inlineBlockNode, $createParagraphNode).selectEnd()\n }\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n editor.registerCommand(\n OPEN_INLINE_BLOCK_DRAWER_COMMAND,\n ({ fields, nodeKey }) => {\n setBlockFields((fields as BlockFields) ?? null)\n setTargetNodeKey(nodeKey ?? null)\n setBlockType(fields?.blockType ?? ('' as any))\n\n if (nodeKey) {\n toggleModal(drawerSlug)\n return true\n }\n\n let rangeSelection: RangeSelection | null = null\n\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n rangeSelection = selection\n }\n })\n\n if (rangeSelection) {\n //setLastSelection(rangeSelection)\n toggleModal(drawerSlug)\n }\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n )\n }, [editor, targetNodeKey, toggleModal, drawerSlug])\n\n if (!blockFields) {\n return null\n }\n\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.lexical_inline_blocks.${blockFields?.blockType}`\n\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_inline_blocks`\n const blocksField: BlockFieldClient = richTextComponentMap.has(componentMapRenderedBlockPath)\n ? richTextComponentMap.get(componentMapRenderedBlockPath)[0]\n : null\n\n const clientBlock = blocksField\n ? blocksField.blocks.find((block) => block.slug === blockFields?.blockType)\n : null\n\n if (!blocksField) {\n return null\n }\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock?.labels?.singular, i18n)\n : clientBlock?.slug\n\n return (\n <FieldsDrawer\n data={blockFields}\n drawerSlug={drawerSlug}\n drawerTitle={t(`lexical:blocks:inlineBlocks:${blockFields?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n featureKey=\"blocks\"\n fieldMapOverride={clientBlock?.fields}\n handleDrawerSubmit={(_fields, data) => {\n closeModal(drawerSlug)\n if (!data) {\n return\n }\n\n data.blockType = blockType\n\n editor.dispatchCommand(INSERT_INLINE_BLOCK_COMMAND, data)\n }}\n schemaFieldsPathOverride={schemaFieldsPath}\n schemaPathSuffix={blockFields?.blockType}\n />\n )\n}\n", "'use client'\nimport type { BaseSelection, LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $createParagraphNode, $createTextNode, $getRoot } from 'lexical'\nimport * as React from 'react'\nimport { type JSX, useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nimport { IS_APPLE } from '../../../../../lexical/utils/environment.js'\nimport './index.scss'\n\nconst copy = (text: null | string) => {\n const textArea = document.createElement('textarea')\n textArea.value = text || ''\n textArea.style.position = 'absolute'\n textArea.style.opacity = '0'\n document.body?.appendChild(textArea)\n textArea.focus()\n textArea.select()\n try {\n const result = document.execCommand('copy')\n // eslint-disable-next-line no-console\n console.log(result)\n } catch (error) {\n console.error(error)\n }\n document.body?.removeChild(textArea)\n}\n\nconst download = (filename: string, text: null | string) => {\n const a = document.createElement('a')\n a.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text || ''))\n a.setAttribute('download', filename)\n a.style.display = 'none'\n document.body?.appendChild(a)\n a.click()\n document.body?.removeChild(a)\n}\n\nconst formatStep = (step: Step) => {\n const formatOneStep = (name: string, value: Step['value']) => {\n switch (name) {\n case 'click': {\n return ` await page.mouse.click(${value.x}, ${value.y});`\n }\n case 'press': {\n return ` await page.keyboard.press('${value}');`\n }\n case 'keydown': {\n return ` await page.keyboard.keydown('${value}');`\n }\n case 'keyup': {\n return ` await page.keyboard.keyup('${value}');`\n }\n case 'type': {\n return ` await page.keyboard.type('${value}');`\n }\n case 'selectAll': {\n return ` await selectAll(page);`\n }\n case 'snapshot': {\n return ` await assertHTMLSnapshot(page);\n await assertSelection(page, {\n anchorPath: [${value.anchorPath.toString()}],\n anchorOffset: ${value.anchorOffset},\n focusPath: [${value.focusPath.toString()}],\n focusOffset: ${value.focusOffset},\n });\n`\n }\n default:\n return ``\n }\n }\n const formattedStep = formatOneStep(step.name, step.value)\n switch (step.count) {\n case 1:\n return formattedStep\n case 2:\n return [formattedStep, formattedStep].join(`\\n`)\n default:\n return ` await repeat(${step.count}, async () => {\n ${formattedStep}\n );`\n }\n}\n\nexport function isSelectAll(event: KeyboardEvent): boolean {\n return event.key.toLowerCase() === 'a' && (IS_APPLE ? event.metaKey : event.ctrlKey)\n}\n\n// stolen from LexicalSelection-test\nfunction sanitizeSelection(selection: Selection) {\n const { anchorNode, focusNode } = selection\n let { anchorOffset, focusOffset } = selection\n if (anchorOffset !== 0) {\n anchorOffset--\n }\n if (focusOffset !== 0) {\n focusOffset--\n }\n return { anchorNode, anchorOffset, focusNode, focusOffset }\n}\n\nfunction getPathFromNodeToEditor(node: Node, rootElement: HTMLElement | null) {\n let currentNode: Node | null | undefined = node\n const path = []\n while (currentNode !== rootElement) {\n if (currentNode !== null && currentNode !== undefined) {\n path.unshift(\n Array.from(currentNode?.parentNode?.childNodes ?? []).indexOf(currentNode as ChildNode),\n )\n }\n currentNode = currentNode?.parentNode\n }\n return path\n}\n\nconst keyPresses = new Set([\n 'Enter',\n 'Backspace',\n 'Delete',\n 'Escape',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n])\n\ntype Step = {\n count: number\n name: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any\n}\n\ntype Steps = Step[]\n\nfunction useTestRecorder(editor: LexicalEditor): [JSX.Element, JSX.Element | null] {\n const [steps, setSteps] = useState<Steps>([])\n const [isRecording, setIsRecording] = useState(false)\n const [, setCurrentInnerHTML] = useState('')\n const [templatedTest, setTemplatedTest] = useState('')\n const previousSelectionRef = useRef<BaseSelection | null>(null)\n const skipNextSelectionChangeRef = useRef(false)\n const preRef = useRef<HTMLPreElement>(null)\n\n const getCurrentEditor = useCallback(() => {\n return editor\n }, [editor])\n\n const generateTestContent = useCallback(() => {\n const rootElement = editor.getRootElement()\n const browserSelection = window.getSelection()\n\n if (\n rootElement == null ||\n browserSelection == null ||\n browserSelection.anchorNode == null ||\n browserSelection.focusNode == null ||\n !rootElement.contains(browserSelection.anchorNode) ||\n !rootElement.contains(browserSelection.focusNode)\n ) {\n return null\n }\n\n return `\nimport {\n initializeE2E,\n assertHTMLSnapshot,\n assertSelection,\n repeat,\n} from '../utils';\nimport {selectAll} from '../keyboardShortcuts';\nimport { RangeSelection } from 'lexical';\nimport { NodeSelection } from 'lexical';\n\ndescribe('Test case', () => {\n initializeE2E((e2e) => {\n it('Should pass this test', async () => {\n const {page} = e2e;\n\n await page.focus('div[contenteditable=\"true\"]');\n${steps.map(formatStep).join(`\\n`)}\n });\n});\n `\n }, [editor, steps])\n\n // just a wrapper around inserting new actions so that we can\n // coalesce some actions like insertText/moveNativeSelection\n const pushStep = useCallback(\n (name: string, value: Step['value']) => {\n setSteps((currentSteps) => {\n // trying to group steps\n const currentIndex = steps.length - 1\n const lastStep = steps[currentIndex]\n if (lastStep) {\n if (lastStep.name === name) {\n if (name === 'type') {\n // for typing events we just append the text\n return [\n ...steps.slice(0, currentIndex),\n { ...lastStep, value: lastStep.value + value },\n ]\n } else {\n // for other events we bump the counter if their values are the same\n if (lastStep.value === value) {\n return [...steps.slice(0, currentIndex), { ...lastStep, count: lastStep.count + 1 }]\n }\n }\n }\n }\n // could not group, just append a new one\n return [...currentSteps, { name, count: 1, value }]\n })\n },\n [steps, setSteps],\n )\n\n useLayoutEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (!isRecording) {\n return\n }\n const key = event.key\n if (isSelectAll(event)) {\n pushStep('selectAll', '')\n } else if (keyPresses.has(key)) {\n pushStep('press', event.key)\n } else if ([...key].length > 1) {\n pushStep('keydown', event.key)\n } else {\n pushStep('type', event.key)\n }\n }\n\n const onKeyUp = (event: KeyboardEvent) => {\n if (!isRecording) {\n return\n }\n const key = event.key\n if (!keyPresses.has(key) && [...key].length > 1) {\n pushStep('keyup', event.key)\n }\n }\n\n return editor.registerRootListener(\n (rootElement: HTMLElement | null, prevRootElement: HTMLElement | null) => {\n if (prevRootElement !== null) {\n prevRootElement.removeEventListener('keydown', onKeyDown)\n prevRootElement.removeEventListener('keyup', onKeyUp)\n }\n if (rootElement !== null) {\n rootElement.addEventListener('keydown', onKeyDown)\n rootElement.addEventListener('keyup', onKeyUp)\n }\n },\n )\n }, [editor, isRecording, pushStep])\n\n useLayoutEffect(() => {\n if (preRef.current) {\n preRef.current.scrollTo(0, preRef.current.scrollHeight)\n }\n }, [generateTestContent])\n\n useEffect(() => {\n if (steps) {\n const testContent = generateTestContent()\n if (testContent !== null) {\n setTemplatedTest(testContent)\n }\n if (preRef.current) {\n preRef.current.scrollTo(0, preRef.current.scrollHeight)\n }\n }\n }, [generateTestContent, steps])\n\n useEffect(() => {\n const removeUpdateListener = editor.registerUpdateListener(\n ({ dirtyElements, dirtyLeaves, editorState }) => {\n if (!isRecording) {\n return\n }\n const currentSelection = editorState._selection\n const previousSelection = previousSelectionRef.current\n const skipNextSelectionChange = skipNextSelectionChangeRef.current\n if (previousSelection !== currentSelection) {\n if (dirtyLeaves.size === 0 && dirtyElements.size === 0 && !skipNextSelectionChange) {\n const browserSelection = window.getSelection()\n if (\n browserSelection &&\n (browserSelection.anchorNode == null || browserSelection.focusNode == null)\n ) {\n return\n }\n }\n previousSelectionRef.current = currentSelection\n }\n skipNextSelectionChangeRef.current = false\n const testContent = generateTestContent()\n if (testContent !== null) {\n setTemplatedTest(testContent)\n }\n },\n )\n return removeUpdateListener\n }, [editor, generateTestContent, isRecording, pushStep])\n\n // save innerHTML\n useEffect(() => {\n if (!isRecording) {\n return\n }\n const removeUpdateListener = editor.registerUpdateListener(() => {\n const rootElement = editor.getRootElement()\n if (rootElement !== null) {\n setCurrentInnerHTML(rootElement?.innerHTML)\n }\n })\n return removeUpdateListener\n }, [editor, isRecording])\n\n // clear editor and start recording\n const toggleEditorSelection = useCallback(\n (currentEditor: LexicalEditor) => {\n if (!isRecording) {\n currentEditor.update(() => {\n const root = $getRoot()\n root.clear()\n const text = $createTextNode()\n root.append($createParagraphNode().append(text))\n text.select()\n })\n setSteps([])\n }\n setIsRecording((currentIsRecording) => !currentIsRecording)\n },\n [isRecording],\n )\n\n const onSnapshotClick = useCallback(() => {\n if (!isRecording) {\n return\n }\n const browserSelection = window.getSelection()\n if (\n browserSelection === null ||\n browserSelection.anchorNode == null ||\n browserSelection.focusNode == null\n ) {\n return\n }\n const { anchorNode, anchorOffset, focusNode, focusOffset } = sanitizeSelection(browserSelection)\n const rootElement = getCurrentEditor().getRootElement()\n let anchorPath\n if (anchorNode !== null) {\n anchorPath = getPathFromNodeToEditor(anchorNode, rootElement)\n }\n let focusPath\n if (focusNode !== null) {\n focusPath = getPathFromNodeToEditor(focusNode, rootElement)\n }\n pushStep('snapshot', {\n anchorNode,\n anchorOffset,\n anchorPath,\n focusNode,\n focusOffset,\n focusPath,\n })\n }, [pushStep, isRecording, getCurrentEditor])\n\n const onCopyClick = useCallback(() => {\n copy(generateTestContent())\n }, [generateTestContent])\n\n const onDownloadClick = useCallback(() => {\n download('test.js', generateTestContent())\n }, [generateTestContent])\n\n const button = (\n <button\n className={`editor-dev-button ${isRecording ? 'active' : ''}`}\n id=\"test-recorder-button\"\n onClick={(e) => {\n toggleEditorSelection(getCurrentEditor())\n e.preventDefault()\n }}\n title={isRecording ? 'Disable test recorder' : 'Enable test recorder'}\n type=\"button\"\n >\n {isRecording ? 'Disable test recorder' : 'Enable test recorder'}\n </button>\n )\n const output = isRecording ? (\n <div className=\"test-recorder-output\">\n <div className=\"test-recorder-toolbar\">\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-snapshot\"\n onClick={(e) => {\n onSnapshotClick()\n e.preventDefault()\n }}\n title=\"Insert snapshot\"\n type=\"button\"\n >\n Insert Snapshot\n </button>\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-copy\"\n onClick={(e) => {\n onCopyClick()\n e.preventDefault()\n }}\n title=\"Copy to clipboard\"\n type=\"button\"\n >\n Copy\n </button>\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-download\"\n onClick={(e) => {\n onDownloadClick()\n e.preventDefault()\n }}\n title=\"Download as a file\"\n type=\"button\"\n >\n Download\n </button>\n </div>\n <pre id=\"test-recorder\" ref={preRef}>\n {templatedTest}\n </pre>\n </div>\n ) : null\n\n return [button, output]\n}\nexport const TestRecorderPlugin: PluginComponent<undefined> = () => {\n const [editor] = useLexicalComposerContext()\n const [testRecorderButton, testRecorderOutput] = useTestRecorder(editor)\n\n return (\n <React.Fragment>\n <p>HI</p>\n {testRecorderButton}\n {testRecorderOutput}\n <p>DONE</p>\n </React.Fragment>\n )\n}\n", "'use client'\nexport const CAN_USE_DOM: boolean =\n typeof window !== 'undefined' &&\n typeof window.document !== 'undefined' &&\n typeof window.document.createElement !== 'undefined'\n", "'use client'\nimport { CAN_USE_DOM } from './canUseDOM.js'\n\ndeclare global {\n interface Document {\n documentMode?: unknown\n }\n\n interface Window {\n MSStream?: unknown\n }\n}\n\nconst documentMode = CAN_USE_DOM && 'documentMode' in document ? document.documentMode : null\n\nexport const IS_APPLE: boolean = CAN_USE_DOM && /Mac|iPod|iPhone|iPad/.test(navigator.platform)\n\nexport const IS_FIREFOX: boolean =\n CAN_USE_DOM && /^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent)\n\nexport const CAN_USE_BEFORE_INPUT: boolean =\n CAN_USE_DOM && 'InputEvent' in window && !documentMode\n ? 'getTargetRanges' in new window.InputEvent('input')\n : false\n\nexport const IS_SAFARI: boolean = CAN_USE_DOM && /Version\\/[\\d.].*Safari/.test(navigator.userAgent)\n\nexport const IS_IOS: boolean =\n CAN_USE_DOM && /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream\n\nexport const IS_ANDROID: boolean = CAN_USE_DOM && /Android/.test(navigator.userAgent)\n\nexport const IS_WINDOWS: boolean = CAN_USE_DOM && /Win/.test(navigator.platform)\nexport const IS_CHROME: boolean = CAN_USE_DOM && /^(?=.*Chrome).*/i.test(navigator.userAgent)\n// export const canUseTextInputEvent: boolean = CAN_USE_DOM && 'TextEvent' in window && !documentMode;\n\nexport const IS_APPLE_WEBKIT =\n CAN_USE_DOM && /AppleWebKit\\/[\\d.]+/.test(navigator.userAgent) && !IS_CHROME\n", "'use client'\n\nimport { createClientFeature } from '../../../../utilities/createClientFeature.js'\nimport { TestRecorderPlugin } from './plugin/index.js'\n\nexport const TestRecorderFeatureClient = createClientFeature({\n plugins: [\n {\n Component: TestRecorderPlugin,\n position: 'bottom',\n },\n ],\n})\n", "'use client'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { TreeView } from '@lexical/react/LexicalTreeView.js'\nimport * as React from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nimport './index.scss'\n\nexport const TreeViewPlugin: PluginComponent<undefined> = () => {\n const [editor] = useLexicalComposerContext()\n return (\n <TreeView\n editor={editor}\n timeTravelButtonClassName=\"debug-timetravel-button\"\n timeTravelPanelButtonClassName=\"debug-timetravel-panel-button\"\n timeTravelPanelClassName=\"debug-timetravel-panel\"\n timeTravelPanelSliderClassName=\"debug-timetravel-panel-slider\"\n treeTypeButtonClassName=\"debug-treetype-button\"\n viewClassName=\"tree-view-output\"\n />\n )\n}\n", "'use client'\n\nimport { createClientFeature } from '../../../../utilities/createClientFeature.js'\nimport { TreeViewPlugin } from './plugin/index.js'\n\nexport const TreeViewFeatureClient = createClientFeature({\n plugins: [\n {\n Component: TreeViewPlugin,\n position: 'bottom',\n },\n ],\n})\n", "'use client'\nimport { $isRangeSelection, FORMAT_TEXT_COMMAND } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { BoldIcon } from '../../../lexical/ui/icons/Bold/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarFormatGroupWithItems } from '../shared/toolbarFormatGroup.js'\nimport {\n BOLD_ITALIC_STAR,\n BOLD_ITALIC_UNDERSCORE,\n BOLD_STAR,\n BOLD_UNDERSCORE,\n} from './markdownTransformers.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarFormatGroupWithItems([\n {\n ChildComponent: BoldIcon,\n isActive: ({ selection }) => {\n if ($isRangeSelection(selection)) {\n return selection.hasFormat('bold')\n }\n return false\n },\n key: 'bold',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'bold')\n },\n order: 1,\n },\n ]),\n]\n\nexport const BoldFeatureClient = createClientFeature(({ featureProviderMap }) => {\n const markdownTransformers = [BOLD_STAR, BOLD_UNDERSCORE]\n if (featureProviderMap.get('italic')) {\n markdownTransformers.push(BOLD_ITALIC_UNDERSCORE, BOLD_ITALIC_STAR)\n }\n\n return {\n markdownTransformers,\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n }\n})\n", "'use client'\nimport React from 'react'\n\nexport const BoldIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"currentColor\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.6772 15H6.27017V5.718H10.4172C12.6792 5.718 13.8492 6.602 13.8492 8.292C13.8492 9.098 13.1992 9.982 12.4712 10.216C13.3812 10.476 14.1742 11.256 14.1742 12.322C14.1742 14.09 12.9002 15 10.6772 15ZM8.46717 9.501H10.3262C11.3012 9.501 11.7042 9.046 11.7042 8.409C11.7042 7.72 11.2362 7.317 10.3392 7.317H8.46717V9.501ZM8.46717 11.061V13.401H10.4822C11.4702 13.401 11.9642 12.959 11.9642 12.218C11.9642 11.49 11.4702 11.061 10.4822 11.061H8.46717Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../toolbars/types.js'\n\nexport const toolbarFormatGroupWithItems = (items: ToolbarGroupItem[]): ToolbarGroup => {\n return {\n type: 'buttons',\n items,\n key: 'format',\n order: 40,\n }\n}\n", "import type { TextFormatTransformer } from '@lexical/markdown'\n\nexport const BOLD_ITALIC_STAR: TextFormatTransformer = {\n type: 'text-format',\n format: ['bold', 'italic'],\n tag: '***',\n}\n\nexport const BOLD_ITALIC_UNDERSCORE: TextFormatTransformer = {\n type: 'text-format',\n format: ['bold', 'italic'],\n intraword: false,\n tag: '___',\n}\n\nexport const BOLD_STAR: TextFormatTransformer = {\n type: 'text-format',\n format: ['bold'],\n tag: '**',\n}\n\nexport const BOLD_UNDERSCORE: TextFormatTransformer = {\n type: 'text-format',\n format: ['bold'],\n intraword: false,\n tag: '__',\n}\n", "'use client'\n\nimport { $isRangeSelection, FORMAT_TEXT_COMMAND } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { CodeIcon } from '../../../lexical/ui/icons/Code/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarFormatGroupWithItems } from '../shared/toolbarFormatGroup.js'\nimport { INLINE_CODE } from './markdownTransformers.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarFormatGroupWithItems([\n {\n ChildComponent: CodeIcon,\n isActive: ({ selection }) => {\n if ($isRangeSelection(selection)) {\n return selection.hasFormat('code')\n }\n return false\n },\n key: 'inlineCode',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'code')\n },\n order: 7,\n },\n ]),\n]\n\nexport const InlineCodeFeatureClient = createClientFeature({\n markdownTransformers: [INLINE_CODE],\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const CodeIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M7.76465 6L3.76465 10L7.76465 14\" stroke=\"currentColor\" />\n <path d=\"M12.2354 6L16.2354 10L12.2354 14\" stroke=\"currentColor\" />\n </svg>\n)\n", "import type { TextFormatTransformer } from '@lexical/markdown'\n\nexport const INLINE_CODE: TextFormatTransformer = {\n type: 'text-format',\n format: ['code'],\n tag: '`',\n}\n", "'use client'\n\nimport { $isRangeSelection, FORMAT_TEXT_COMMAND } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { ItalicIcon } from '../../../lexical/ui/icons/Italic/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarFormatGroupWithItems } from '../shared/toolbarFormatGroup.js'\nimport { ITALIC_STAR, ITALIC_UNDERSCORE } from './markdownTransformers.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarFormatGroupWithItems([\n {\n ChildComponent: ItalicIcon,\n isActive: ({ selection }) => {\n if ($isRangeSelection(selection)) {\n return selection.hasFormat('italic')\n }\n return false\n },\n key: 'italic',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'italic')\n },\n order: 2,\n },\n ]),\n]\n\nexport const ItalicFeatureClient = createClientFeature({\n markdownTransformers: [ITALIC_STAR, ITALIC_UNDERSCORE],\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const ItalicIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"currentColor\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11.311 14.2969L11.0327 15H6.18408L6.4624 14.2969C7.54639 14.2969 7.70752 14.209 7.83936 13.8721L10.8423 6.45996C10.8716 6.38672 10.8862 6.32812 10.8862 6.26953C10.8862 6.09375 10.6519 6.03516 9.80225 6.03516L10.0952 5.33203H14.9438L14.6509 6.03516C13.5669 6.03516 13.4204 6.12305 13.2886 6.45996L10.2856 13.8721C10.2563 13.9453 10.2271 14.0039 10.2271 14.0625C10.2271 14.2383 10.4614 14.2969 11.311 14.2969Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "import type { TextFormatTransformer } from '@lexical/markdown'\n\nexport const ITALIC_STAR: TextFormatTransformer = {\n type: 'text-format',\n format: ['italic'],\n tag: '*',\n}\n\nexport const ITALIC_UNDERSCORE: TextFormatTransformer = {\n type: 'text-format',\n format: ['italic'],\n intraword: false,\n tag: '_',\n}\n", "'use client'\n\nimport { $isRangeSelection, FORMAT_TEXT_COMMAND } from 'lexical'\n\nimport { StrikethroughIcon } from '../../../lexical/ui/icons/Strikethrough/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarFormatGroupWithItems } from '../shared/toolbarFormatGroup.js'\nimport { STRIKETHROUGH } from './markdownTransformers.js'\n\nconst toolbarGroups = [\n toolbarFormatGroupWithItems([\n {\n ChildComponent: StrikethroughIcon,\n isActive: ({ selection }) => {\n if ($isRangeSelection(selection)) {\n return selection.hasFormat('strikethrough')\n }\n return false\n },\n key: 'strikethrough',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'strikethrough')\n },\n order: 4,\n },\n ]),\n]\n\nexport const StrikethroughFeatureClient = createClientFeature({\n markdownTransformers: [STRIKETHROUGH],\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const StrikethroughIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"currentColor\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.50756 12.76H7.42756C7.56256 14.215 8.82256 14.71 10.1576 14.71C11.4326 14.71 12.4226 14.14 12.4226 13.06C12.4226 12.28 11.9576 11.845 10.6676 11.605L8.70256 11.245C7.12756 10.96 5.85256 10.21 5.85256 8.335C5.85256 6.43 7.53256 5.11 9.87256 5.11C12.4226 5.11 13.9526 6.22 14.1626 8.23H12.2876C12.1526 7.18 11.2226 6.595 9.88756 6.595C8.59756 6.595 7.78756 7.27 7.78756 8.215C7.78756 9.1 8.34256 9.385 9.49756 9.61L11.5676 10.015C13.3226 10.345 14.3726 11.215 14.3726 12.94C14.3726 14.89 12.5876 16.18 10.2176 16.18C7.66756 16.18 5.70256 15.115 5.50756 12.76Z\"\n fill=\"currentColor\"\n />\n <path d=\"M4.99756 11.44H15.0026V12.19H4.99756V11.44Z\" fill=\"currentColor\" />\n </svg>\n)\n", "import type { TextFormatTransformer } from '@lexical/markdown'\n\nexport const STRIKETHROUGH: TextFormatTransformer = {\n type: 'text-format',\n format: ['strikethrough'],\n tag: '~~',\n}\n", "'use client'\n\nimport { $isRangeSelection, FORMAT_TEXT_COMMAND } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { SubscriptIcon } from '../../../lexical/ui/icons/Subscript/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarFormatGroupWithItems } from '../shared/toolbarFormatGroup.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarFormatGroupWithItems([\n {\n ChildComponent: SubscriptIcon,\n isActive: ({ selection }) => {\n if ($isRangeSelection(selection)) {\n return selection.hasFormat('subscript')\n }\n return false\n },\n key: 'subscript',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'subscript')\n },\n order: 5,\n },\n ]),\n]\n\nexport const SubscriptFeatureClient = createClientFeature({\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const SubscriptIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"currentColor\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.167 15L7.45002 11.36L4.73302 15H2.91302L6.55302 10.177L3.23802 5.718H5.20102L7.54102 8.89L9.89402 5.718H11.714L8.43802 10.06L12.13 15H10.167ZM16.7768 13.258C16.7768 14.155 16.1398 14.532 15.2038 15C14.5538 15.325 14.2808 15.546 14.2418 15.78H16.7898V16.82H12.7208V16.339C12.7208 15.286 13.5918 14.675 14.3588 14.233C15.0868 13.83 15.4378 13.635 15.4378 13.232C15.4378 12.894 15.2038 12.686 14.8268 12.686C14.3848 12.686 14.1248 13.024 14.1118 13.427H12.7468C12.8248 12.426 13.5528 11.633 14.8398 11.633C15.9448 11.633 16.7768 12.257 16.7768 13.258Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\n\nimport { $isRangeSelection, FORMAT_TEXT_COMMAND } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { SuperscriptIcon } from '../../../lexical/ui/icons/Superscript/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarFormatGroupWithItems } from '../shared/toolbarFormatGroup.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarFormatGroupWithItems([\n {\n ChildComponent: SuperscriptIcon,\n isActive: ({ selection }) => {\n if ($isRangeSelection(selection)) {\n return selection.hasFormat('superscript')\n }\n return false\n },\n key: 'superscript',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'superscript')\n },\n order: 6,\n },\n ]),\n]\n\nexport const SuperscriptFeatureClient = createClientFeature({\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const SuperscriptIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"currentColor\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.167 15L7.45002 11.36L4.73302 15H2.91302L6.55302 10.177L3.23802 5.718H5.20102L7.54102 8.89L9.89402 5.718H11.714L8.43802 10.06L12.13 15H10.167ZM16.7768 7.252C16.7768 8.149 16.1398 8.526 15.2038 8.994C14.5538 9.319 14.2808 9.54 14.2418 9.774H16.7898V10.814H12.7208V10.333C12.7208 9.28 13.5918 8.669 14.3588 8.227C15.0868 7.824 15.4378 7.629 15.4378 7.226C15.4378 6.888 15.2038 6.68 14.8268 6.68C14.3848 6.68 14.1248 7.018 14.1118 7.421H12.7468C12.8248 6.42 13.5528 5.627 14.8398 5.627C15.9448 5.627 16.7768 6.251 16.7768 7.252Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\n\nimport { $isRangeSelection, FORMAT_TEXT_COMMAND } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { UnderlineIcon } from '../../../lexical/ui/icons/Underline/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarFormatGroupWithItems } from '../shared/toolbarFormatGroup.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarFormatGroupWithItems([\n {\n ChildComponent: UnderlineIcon,\n isActive: ({ selection }) => {\n if ($isRangeSelection(selection)) {\n return selection.hasFormat('underline')\n }\n return false\n },\n key: 'underline',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'underline')\n },\n order: 3,\n },\n ]),\n]\n\nexport const UnderlineFeatureClient = createClientFeature({\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const UnderlineIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"currentColor\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.9656 11.256C13.9656 13.791 12.5096 15.156 10.0006 15.156C7.50461 15.156 6.03561 13.791 6.03561 11.23V5.718H7.76461V11.243C7.76461 12.868 8.50561 13.778 10.0006 13.778C11.4956 13.778 12.2496 12.868 12.2496 11.243V5.718H13.9656V11.256Z\"\n fill=\"currentColor\"\n />\n <path d=\"M5.09961 16.3H14.9016V16.95H5.09961V16.3Z\" fill=\"currentColor\" />\n </svg>\n)\n", "'use client'\n\nimport type { HeadingTagType } from '@lexical/rich-text'\n\nimport { $createHeadingNode, $isHeadingNode, HeadingNode } from '@lexical/rich-text'\nimport { $setBlocksType } from '@lexical/selection'\nimport { $getSelection, $isRangeSelection } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\nimport type { HeadingFeatureProps } from '../server/index.js'\n\nimport { H1Icon } from '../../../lexical/ui/icons/H1/index.js'\nimport { H2Icon } from '../../../lexical/ui/icons/H2/index.js'\nimport { H3Icon } from '../../../lexical/ui/icons/H3/index.js'\nimport { H4Icon } from '../../../lexical/ui/icons/H4/index.js'\nimport { H5Icon } from '../../../lexical/ui/icons/H5/index.js'\nimport { H6Icon } from '../../../lexical/ui/icons/H6/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { slashMenuBasicGroupWithItems } from '../../shared/slashMenu/basicGroup.js'\nimport { toolbarTextDropdownGroupWithItems } from '../../shared/toolbar/textDropdownGroup.js'\nimport { MarkdownTransformer } from '../markdownTransformer.js'\n\nconst $setHeading = (headingSize: HeadingTagType) => {\n const selection = $getSelection()\n $setBlocksType(selection, () => $createHeadingNode(headingSize))\n}\n\nconst iconImports = {\n h1: H1Icon,\n h2: H2Icon,\n h3: H3Icon,\n h4: H4Icon,\n h5: H5Icon,\n h6: H6Icon,\n}\n\nexport const HeadingFeatureClient = createClientFeature<HeadingFeatureProps>(({ props }) => {\n const { enabledHeadingSizes = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] } = props\n\n const toolbarGroups: ToolbarGroup[] = [\n toolbarTextDropdownGroupWithItems(\n enabledHeadingSizes.map((headingSize, i) => {\n return {\n ChildComponent: iconImports[headingSize],\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isHeadingNode(node) && node.getTag() === headingSize) {\n continue\n }\n\n const parent = node.getParent()\n if ($isHeadingNode(parent) && parent.getTag() === headingSize) {\n continue\n }\n\n return false\n }\n return true\n },\n key: headingSize,\n label: ({ i18n }) => {\n return i18n.t('lexical:heading:label', { headingLevel: headingSize.charAt(1) })\n },\n onSelect: ({ editor }) => {\n editor.update(() => {\n $setHeading(headingSize)\n })\n },\n order: i + 2,\n }\n }),\n ),\n ]\n\n return {\n markdownTransformers: [MarkdownTransformer(enabledHeadingSizes)],\n nodes: [HeadingNode],\n sanitizedClientFeatureProps: props,\n slashMenu: {\n groups: enabledHeadingSizes?.length\n ? [\n slashMenuBasicGroupWithItems(\n enabledHeadingSizes.map((headingSize) => {\n return {\n Icon: iconImports[headingSize],\n key: `heading-${headingSize.charAt(1)}`,\n keywords: ['heading', headingSize],\n label: ({ i18n }) => {\n return i18n.t('lexical:heading:label', {\n headingLevel: headingSize.charAt(1),\n })\n },\n onSelect: ({ editor }) => {\n editor.update(() => {\n $setHeading(headingSize)\n })\n },\n }\n }),\n ),\n ]\n : [],\n },\n toolbarFixed: {\n groups: enabledHeadingSizes?.length ? toolbarGroups : [],\n },\n toolbarInline: {\n groups: enabledHeadingSizes?.length ? toolbarGroups : [],\n },\n }\n})\n", "'use client'\nimport React from 'react'\n\nexport const H1Icon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4.639 13.5V7.074H6.196V9.648H9.076V7.074H10.642V13.5H9.076V10.836H6.196V13.5H4.639ZM11.5656 9.045V8.019C12.6636 8.019 13.1316 7.731 13.2846 7.065H14.4006V13.5H12.8436V9.045H11.5656Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const H2Icon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4.139 13.5V7.074H5.696V9.648H8.576V7.074H10.142V13.5H8.576V10.836H5.696V13.5H4.139ZM15.9796 8.973C15.9796 10.116 15.1696 10.656 14.0356 11.232C13.2256 11.646 12.8206 11.943 12.7846 12.294H15.9886V13.5H11.0566V12.951C11.0566 11.601 12.1636 10.845 13.1176 10.287C14.0356 9.756 14.5126 9.486 14.5126 8.946C14.5126 8.46 14.2156 8.145 13.6306 8.145C13.0186 8.145 12.6586 8.613 12.6226 9.198H11.1196C11.2186 7.947 12.1006 6.966 13.6396 6.966C15.0346 6.966 15.9796 7.785 15.9796 8.973Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const H3Icon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4.139 13.5V7.074H5.696V9.648H8.576V7.074H10.142V13.5H8.576V10.836H5.696V13.5H4.139ZM16.1146 11.745C16.1146 12.744 15.2236 13.608 13.6126 13.608C12.0736 13.608 11.0926 12.762 10.9846 11.547H12.4696C12.5146 12.114 13.0006 12.456 13.6126 12.456C14.2876 12.456 14.6746 12.132 14.6746 11.619C14.6746 11.061 14.2426 10.836 13.6216 10.836H12.9826V9.738H13.6036C14.1526 9.738 14.5486 9.486 14.5486 8.937C14.5486 8.46 14.2156 8.127 13.6486 8.127C13.0366 8.127 12.6586 8.514 12.6226 9.045H11.1916C11.2726 7.929 12.1276 6.966 13.6666 6.966C15.1876 6.966 15.9706 7.848 15.9706 8.865C15.9706 9.603 15.5026 10.143 14.8186 10.269C15.6196 10.404 16.1146 10.971 16.1146 11.745Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const H4Icon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.639 13.5V7.074H5.196V9.648H8.076V7.074H9.642V13.5H8.076V10.836H5.196V13.5H3.639ZM15.1736 7.074V10.854H16.3706V12.033H15.1736V13.5H13.6796V12.033H10.5116V10.845L13.4996 7.074H15.1736ZM13.6796 8.46L11.8256 10.854H13.6796V8.46Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const H5Icon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.639 13.5V7.074H5.196V9.648H8.076V7.074H9.642V13.5H8.076V10.836H5.196V13.5H3.639ZM13.1576 10.269C12.6896 10.269 12.3746 10.494 12.2216 10.737H10.8176L11.1956 7.074H15.2546V8.28H12.3206L12.1856 9.549C12.4016 9.351 12.8516 9.126 13.4636 9.126C14.7866 9.126 15.6596 10.053 15.6596 11.358C15.6596 12.609 14.7326 13.608 13.1756 13.608C11.5826 13.608 10.6556 12.753 10.5566 11.511H12.1136C12.1586 12.06 12.5456 12.465 13.1576 12.465C13.8236 12.465 14.1746 11.97 14.1746 11.376C14.1746 10.764 13.8416 10.269 13.1576 10.269Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const H6Icon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.639 13.5V7.074H5.196V9.648H8.076V7.074H9.642V13.5H8.076V10.836H5.196V13.5H3.639ZM13.3646 8.127C12.5456 8.127 12.0416 8.937 12.0416 9.999C12.3296 9.54 12.8246 9.207 13.5536 9.207C14.8586 9.207 15.8036 10.134 15.8036 11.376C15.8036 12.645 14.8226 13.608 13.3196 13.608C11.7266 13.608 10.6196 12.393 10.6196 10.395C10.6196 8.316 11.7716 6.966 13.4186 6.966C14.7056 6.966 15.5786 7.749 15.7316 8.829H14.3186C14.2016 8.415 13.9226 8.127 13.3646 8.127ZM13.3106 12.51C13.9586 12.51 14.3816 12.042 14.3816 11.385C14.3816 10.737 13.9586 10.278 13.3106 10.278C12.6536 10.278 12.2126 10.737 12.2126 11.385C12.2126 12.042 12.6536 12.51 13.3106 12.51Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "import type { ElementTransformer } from '@lexical/markdown'\nimport type { HeadingTagType } from '@lexical/rich-text'\n\nimport { $createHeadingNode, $isHeadingNode, HeadingNode } from '@lexical/rich-text'\n\nimport { createBlockNode } from '../../lexical/utils/markdown/createBlockNode.js'\n\nexport const MarkdownTransformer: (enabledHeadingSizes: HeadingTagType[]) => ElementTransformer = (\n enabledHeadingSizes,\n) => {\n // Convert enabledHeadingSizes to a list of numbers (1 for h1, 2 for h2, etc.)\n const enabledSizes = enabledHeadingSizes.map((tag) => Number(tag.slice(1)))\n\n // Create a regex pattern that matches any of the enabled sizes\n const pattern = `^(${enabledSizes.map((size) => `#{${size}}`).join('|')})\\\\s`\n const regExp = new RegExp(pattern)\n\n return {\n type: 'element',\n dependencies: [HeadingNode],\n export: (node, exportChildren) => {\n if (!$isHeadingNode(node)) {\n return null\n }\n const level = Number(node.getTag().slice(1))\n return '#'.repeat(level) + ' ' + exportChildren(node)\n },\n regExp,\n replace: createBlockNode((match) => {\n const tag = ('h' + match[1].length) as HeadingTagType\n return $createHeadingNode(tag)\n }),\n }\n}\n", "import type { ElementTransformer } from '@lexical/markdown'\nimport type { ElementNode } from 'lexical'\n\nexport const createBlockNode = (\n createNode: (match: Array<string>) => ElementNode,\n): ElementTransformer['replace'] => {\n return (parentNode, children, match) => {\n const node = createNode(match)\n if (node) {\n node.append(...children)\n parentNode.replace(node)\n node.select(0, 0)\n }\n }\n}\n", "'use client'\n\nimport { $isNodeSelection } from 'lexical'\n\nimport { HorizontalRuleIcon } from '../../../lexical/ui/icons/HorizontalRule/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { slashMenuBasicGroupWithItems } from '../../shared/slashMenu/basicGroup.js'\nimport { toolbarAddDropdownGroupWithItems } from '../../shared/toolbar/addDropdownGroup.js'\nimport { INSERT_HORIZONTAL_RULE_COMMAND } from '../server/nodes/HorizontalRuleNode.js'\nimport { MarkdownTransformer } from './markdownTransformer.js'\nimport { $isHorizontalRuleNode, HorizontalRuleNode } from './nodes/HorizontalRuleNode.js'\nimport { HorizontalRulePlugin } from './plugin/index.js'\n\nexport const HorizontalRuleFeatureClient = createClientFeature({\n markdownTransformers: [MarkdownTransformer],\n nodes: [HorizontalRuleNode],\n plugins: [\n {\n Component: HorizontalRulePlugin,\n position: 'normal',\n },\n ],\n slashMenu: {\n groups: [\n slashMenuBasicGroupWithItems([\n {\n Icon: HorizontalRuleIcon,\n key: 'horizontalRule',\n keywords: ['hr', 'horizontal rule', 'line', 'separator'],\n label: ({ i18n }) => {\n return i18n.t('lexical:horizontalRule:label')\n },\n\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_HORIZONTAL_RULE_COMMAND, undefined)\n },\n },\n ]),\n ],\n },\n toolbarFixed: {\n groups: [\n toolbarAddDropdownGroupWithItems([\n {\n ChildComponent: HorizontalRuleIcon,\n isActive: ({ selection }) => {\n if (!$isNodeSelection(selection) || !selection.getNodes().length) {\n return false\n }\n\n const firstNode = selection.getNodes()[0]\n return $isHorizontalRuleNode(firstNode)\n },\n key: 'horizontalRule',\n label: ({ i18n }) => {\n return i18n.t('lexical:horizontalRule:label')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_HORIZONTAL_RULE_COMMAND, undefined)\n },\n },\n ]),\n ],\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const HorizontalRuleIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect fill=\"currentColor\" height=\"1\" width=\"12\" x=\"4\" y=\"9.5\" />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const AddIcon: React.FC = () => (\n <svg fill=\"none\" height=\"20\" viewBox=\"0 0 20 20\" width=\"20\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5 10h10\" stroke=\"currentColor\" />\n <path d=\"M10 15V5\" stroke=\"currentColor\" />\n </svg>\n)\n", "import type { ToolbarGroup, ToolbarGroupItem } from '../../toolbars/types.js'\n\nimport { AddIcon } from '../../../lexical/ui/icons/Add/index.js'\n\nexport const toolbarAddDropdownGroupWithItems = (items: ToolbarGroupItem[]): ToolbarGroup => {\n return {\n type: 'dropdown',\n ChildComponent: AddIcon,\n items,\n key: 'add',\n order: 10,\n }\n}\n", "import type { ElementTransformer } from '@lexical/markdown'\n\nimport {\n $createHorizontalRuleNode,\n $isHorizontalRuleNode,\n HorizontalRuleNode,\n} from './nodes/HorizontalRuleNode.js'\n\nexport const MarkdownTransformer: ElementTransformer = {\n type: 'element',\n dependencies: [HorizontalRuleNode],\n export: (node, exportChildren) => {\n if (!$isHorizontalRuleNode(node)) {\n return null\n }\n return '---'\n },\n // match ---\n regExp: /^---\\s*$/,\n replace: (parentNode) => {\n const node = $createHorizontalRuleNode()\n if (node) {\n parentNode.replace(node)\n }\n },\n}\n", "'use client'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $insertNodeToNearestRoot } from '@lexical/utils'\nimport { $getSelection, $isRangeSelection, COMMAND_PRIORITY_EDITOR } from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../../typesClient.js'\n\nimport { INSERT_HORIZONTAL_RULE_COMMAND } from '../../server/nodes/HorizontalRuleNode.js'\nimport { $createHorizontalRuleNode } from '../nodes/HorizontalRuleNode.js'\nimport './index.scss'\n\n/**\n * Registers the INSERT_HORIZONTAL_RULE_COMMAND lexical command and defines the behavior for when it is called.\n */\nexport const HorizontalRulePlugin: PluginComponent<undefined> = () => {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n return editor.registerCommand(\n INSERT_HORIZONTAL_RULE_COMMAND,\n (type) => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n const focusNode = selection.focus.getNode()\n\n if (focusNode !== null) {\n const horizontalRuleNode = $createHorizontalRuleNode()\n $insertNodeToNearestRoot(horizontalRuleNode)\n }\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n )\n }, [editor])\n\n return null\n}\n", "'use client'\n\nimport { INDENT_CONTENT_COMMAND, OUTDENT_CONTENT_COMMAND } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { IndentDecreaseIcon } from '../../../lexical/ui/icons/IndentDecrease/index.js'\nimport { IndentIncreaseIcon } from '../../../lexical/ui/icons/IndentIncrease/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarIndentGroupWithItems } from './toolbarIndentGroup.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarIndentGroupWithItems([\n {\n ChildComponent: IndentDecreaseIcon,\n isActive: () => false,\n isEnabled: ({ selection }) => {\n if (!selection || !selection?.getNodes()?.length) {\n return false\n }\n for (const node of selection.getNodes()) {\n // If at least one node is indented, this should be active\n if (\n ('__indent' in node && (node.__indent as number) > 0) ||\n (node.getParent() && '__indent' in node.getParent() && node.getParent().__indent > 0)\n ) {\n return true\n }\n }\n return false\n },\n key: 'indentDecrease',\n label: ({ i18n }) => {\n return i18n.t('lexical:indent:decreaseLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(OUTDENT_CONTENT_COMMAND, undefined)\n },\n order: 1,\n },\n {\n ChildComponent: IndentIncreaseIcon,\n isActive: () => false,\n key: 'indentIncrease',\n label: ({ i18n }) => {\n return i18n.t('lexical:indent:increaseLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INDENT_CONTENT_COMMAND, undefined)\n },\n order: 2,\n },\n ]),\n]\n\nexport const IndentFeatureClient = createClientFeature({\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const IndentDecreaseIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M2.5 5H10.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2.5 10H10.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2.5 15H17.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M12.25 7.25L17.25 3.75V10.75L12.25 7.25Z\" fill=\"currentColor\" />\n </svg>\n)\n", "'use client'\nimport React from 'react'\n\nexport const IndentIncreaseIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M17.5 5H9.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M17.5 10H9.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M17.5 15H2.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M7.75 7.25L2.75 3.75V10.75L7.75 7.25Z\" fill=\"currentColor\" />\n </svg>\n)\n", "'use client'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../toolbars/types.js'\n\nexport const toolbarIndentGroupWithItems = (items: ToolbarGroupItem[]): ToolbarGroup => {\n return {\n type: 'buttons',\n items,\n key: 'indent',\n order: 35,\n }\n}\n", "'use client'\n\nimport type { LexicalNode } from 'lexical'\n\nimport { $findMatchingParent } from '@lexical/utils'\nimport { $getSelection, $isRangeSelection } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\nimport type { LinkFields } from '../nodes/types.js'\nimport type { ExclusiveLinkCollectionsProps } from '../server/index.js'\n\nimport { LinkIcon } from '../../../lexical/ui/icons/Link/index.js'\nimport { getSelectedNode } from '../../../lexical/utils/getSelectedNode.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarFeatureButtonsGroupWithItems } from '../../shared/toolbar/featureButtonsGroup.js'\nimport { LinkMarkdownTransformer } from '../markdownTransformer.js'\nimport { AutoLinkNode } from '../nodes/AutoLinkNode.js'\nimport { $isLinkNode, LinkNode, TOGGLE_LINK_COMMAND } from '../nodes/LinkNode.js'\nimport { AutoLinkPlugin } from './plugins/autoLink/index.js'\nimport { ClickableLinkPlugin } from './plugins/clickableLink/index.js'\nimport { TOGGLE_LINK_WITH_MODAL_COMMAND } from './plugins/floatingLinkEditor/LinkEditor/commands.js'\nimport { FloatingLinkEditorPlugin } from './plugins/floatingLinkEditor/index.js'\nimport { LinkPlugin } from './plugins/link/index.js'\n\nexport type ClientProps = ExclusiveLinkCollectionsProps\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarFeatureButtonsGroupWithItems([\n {\n ChildComponent: LinkIcon,\n isActive: ({ selection }) => {\n if ($isRangeSelection(selection)) {\n const selectedNode = getSelectedNode(selection)\n const linkParent = $findMatchingParent(selectedNode, $isLinkNode)\n return linkParent != null\n }\n return false\n },\n isEnabled: ({ selection }) => {\n return !!($isRangeSelection(selection) && $getSelection()?.getTextContent()?.length)\n },\n key: 'link',\n label: ({ i18n }) => {\n return i18n.t('lexical:link:label')\n },\n onSelect: ({ editor, isActive }) => {\n if (!isActive) {\n let selectedText: string = null\n let selectedNodes: LexicalNode[] = []\n editor.getEditorState().read(() => {\n selectedText = $getSelection()?.getTextContent()\n // We need to selected nodes here before the drawer opens, as clicking around in the drawer may change the original selection\n selectedNodes = $getSelection()?.getNodes() ?? []\n })\n\n if (!selectedText?.length) {\n return\n }\n\n const linkFields: LinkFields = {\n doc: null,\n linkType: 'custom',\n newTab: false,\n url: 'https://',\n }\n\n editor.dispatchCommand(TOGGLE_LINK_WITH_MODAL_COMMAND, {\n fields: linkFields,\n selectedNodes,\n text: selectedText,\n })\n } else {\n // remove link\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null)\n }\n },\n order: 1,\n },\n ]),\n]\n\nexport const LinkFeatureClient = createClientFeature({\n markdownTransformers: [LinkMarkdownTransformer],\n nodes: [LinkNode, AutoLinkNode],\n plugins: [\n {\n Component: LinkPlugin,\n position: 'normal',\n },\n {\n Component: AutoLinkPlugin,\n position: 'normal',\n },\n {\n Component: ClickableLinkPlugin,\n position: 'normal',\n },\n {\n Component: FloatingLinkEditorPlugin,\n position: 'floatingAnchorElem',\n },\n ],\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const LinkIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.5 11.5L11.5 8.5M8.5 7L9.625 5.875C10.868 4.633 12.882 4.633 14.125 5.875C15.368 7.118 15.368 9.133 14.125 10.375L13 11.5M7 8.5L5.746 9.754C4.56 10.94 4.519 12.85 5.652 14.087C6.814 15.354 8.78 15.449 10.058 14.298L11.5 13\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n", "'use client'\nimport type { ElementNode, RangeSelection, TextNode } from 'lexical'\n\nimport { $isAtNodeEnd } from '@lexical/selection'\n\nexport function getSelectedNode(selection: RangeSelection): ElementNode | TextNode {\n const { anchor } = selection\n const { focus } = selection\n const anchorNode = selection.anchor.getNode()\n const focusNode = selection.focus.getNode()\n if (anchorNode === focusNode) {\n return anchorNode\n }\n const isBackward = selection.isBackward()\n if (isBackward) {\n return $isAtNodeEnd(focus) ? anchorNode : focusNode\n }\n return $isAtNodeEnd(anchor) ? anchorNode : focusNode\n}\n", "import type { ToolbarGroup, ToolbarGroupItem } from '../../toolbars/types.js'\n\nexport const toolbarFeatureButtonsGroupWithItems = (items: ToolbarGroupItem[]): ToolbarGroup => {\n return {\n type: 'buttons',\n items,\n key: 'features',\n order: 50,\n }\n}\n", "/**\n * Code taken from https://github.com/facebook/lexical/blob/main/packages/lexical-markdown/src/MarkdownTransformers.ts#L357\n */\n\n// Order of text transformers matters:\n//\n// - code should go first as it prevents any transformations inside\n\nimport type { TextMatchTransformer } from '@lexical/markdown'\n\nimport { $createTextNode, $isTextNode } from 'lexical'\n\nimport { $createLinkNode, $isLinkNode, LinkNode } from './nodes/LinkNode.js'\n\n// - then longer tags match (e.g. ** or __ should go before * or _)\nexport const LinkMarkdownTransformer: TextMatchTransformer = {\n type: 'text-match',\n dependencies: [LinkNode],\n export: (_node, exportChildren, exportFormat) => {\n if (!$isLinkNode(_node)) {\n return null\n }\n const node: LinkNode = _node\n const { url } = node.getFields()\n const linkContent = `[${node.getTextContent()}](${url})`\n const firstChild = node.getFirstChild()\n // Add text styles only if link has single text node inside. If it's more\n // then one we ignore it as markdown does not support nested styles for links\n if (node.getChildrenSize() === 1 && $isTextNode(firstChild)) {\n return exportFormat(firstChild, linkContent)\n } else {\n return linkContent\n }\n },\n importRegExp: /\\[([^[]+)\\]\\(([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?\\)/,\n regExp: /\\[([^[]+)\\]\\(([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?\\)$/,\n replace: (textNode, match) => {\n const [, linkText, linkUrl] = match\n const linkNode = $createLinkNode({\n fields: {\n doc: null,\n linkType: 'custom',\n newTab: false,\n url: linkUrl,\n },\n })\n const linkTextNode = $createTextNode(linkText)\n linkTextNode.setFormat(textNode.getFormat())\n linkNode.append(linkTextNode)\n textNode.replace(linkNode)\n },\n trigger: ')',\n}\n", "import type {\n BaseSelection,\n DOMConversionMap,\n DOMConversionOutput,\n EditorConfig,\n ElementNode as ElementNodeType,\n LexicalCommand,\n LexicalNode,\n NodeKey,\n RangeSelection,\n} from 'lexical'\n\nimport { addClassNamesToElement, isHTMLAnchorElement } from '@lexical/utils'\nimport ObjectID from 'bson-objectid'\nimport {\n $applyNodeReplacement,\n $createTextNode,\n $getSelection,\n $isElementNode,\n $isRangeSelection,\n ElementNode,\n createCommand,\n} from 'lexical'\n\nimport type { LinkPayload } from '../client/plugins/floatingLinkEditor/types.js'\nimport type { LinkFields, SerializedLinkNode } from './types.js'\n\nconst SUPPORTED_URL_PROTOCOLS = new Set(['http:', 'https:', 'mailto:', 'sms:', 'tel:'])\n\n/** @noInheritDoc */\nexport class LinkNode extends ElementNode {\n __fields: LinkFields\n __id: string\n\n constructor({\n id,\n fields = {\n doc: null,\n linkType: 'custom',\n newTab: false,\n url: undefined,\n },\n key,\n }: {\n fields: LinkFields\n id: string\n key?: NodeKey\n }) {\n super(key)\n this.__fields = fields\n this.__id = id\n }\n\n static clone(node: LinkNode): LinkNode {\n return new LinkNode({\n id: node.__id,\n fields: node.__fields,\n key: node.__key,\n })\n }\n\n static getType(): string {\n return 'link'\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n a: (node: Node) => ({\n conversion: $convertAnchorElement,\n priority: 1,\n }),\n }\n }\n\n static importJSON(serializedNode: SerializedLinkNode): LinkNode {\n if (\n serializedNode.version === 1 &&\n typeof serializedNode.fields?.doc?.value === 'object' &&\n serializedNode.fields?.doc?.value?.id\n ) {\n serializedNode.fields.doc.value = serializedNode.fields.doc.value.id\n serializedNode.version = 2\n }\n\n if (serializedNode.version === 2 && !serializedNode.id) {\n serializedNode.id = new ObjectID.default().toHexString()\n serializedNode.version = 3\n }\n\n const node = $createLinkNode({\n id: serializedNode.id,\n fields: serializedNode.fields,\n })\n node.setFormat(serializedNode.format)\n node.setIndent(serializedNode.indent)\n node.setDirection(serializedNode.direction)\n return node\n }\n\n canBeEmpty(): false {\n return false\n }\n\n canInsertTextAfter(): false {\n return false\n }\n\n canInsertTextBefore(): false {\n return false\n }\n\n createDOM(config: EditorConfig): HTMLAnchorElement {\n const element = document.createElement('a')\n if (this.__fields?.linkType === 'custom') {\n element.href = this.sanitizeUrl(this.__fields.url ?? '')\n }\n if (this.__fields?.newTab ?? false) {\n element.target = '_blank'\n }\n\n if (this.__fields?.newTab === true && this.__fields?.linkType === 'custom') {\n element.rel = manageRel(element.rel, 'add', 'noopener')\n }\n\n addClassNamesToElement(element, config.theme.link)\n return element\n }\n\n exportJSON(): SerializedLinkNode {\n const returnObject: SerializedLinkNode = {\n ...super.exportJSON(),\n type: 'link',\n fields: this.getFields(),\n version: 3,\n }\n const id = this.getID()\n if (id) {\n returnObject.id = id\n }\n return returnObject\n }\n\n extractWithChild(\n child: LexicalNode,\n selection: BaseSelection,\n destination: 'clone' | 'html',\n ): boolean {\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n const anchorNode = selection.anchor.getNode()\n const focusNode = selection.focus.getNode()\n\n return (\n this.isParentOf(anchorNode) &&\n this.isParentOf(focusNode) &&\n selection.getTextContent().length > 0\n )\n }\n\n getFields(): LinkFields {\n return this.getLatest().__fields\n }\n\n getID(): string {\n return this.getLatest().__id\n }\n\n insertNewAfter(selection: RangeSelection, restoreSelection = true): ElementNodeType | null {\n const element = this.getParentOrThrow().insertNewAfter(selection, restoreSelection)\n if ($isElementNode(element)) {\n const linkNode = $createLinkNode({ fields: this.__fields })\n element.append(linkNode)\n return linkNode\n }\n return null\n }\n\n isInline(): true {\n return true\n }\n\n sanitizeUrl(url: string): string {\n try {\n const parsedUrl = new URL(url)\n\n if (!SUPPORTED_URL_PROTOCOLS.has(parsedUrl.protocol)) {\n return 'about:blank'\n }\n } catch (e) {\n return 'https://'\n }\n return url\n }\n\n setFields(fields: LinkFields): void {\n const writable = this.getWritable()\n writable.__fields = fields\n }\n\n updateDOM(prevNode: LinkNode, anchor: HTMLAnchorElement, config: EditorConfig): boolean {\n const url = this.__fields?.url\n const newTab = this.__fields?.newTab\n if (url != null && url !== prevNode.__fields?.url && this.__fields?.linkType === 'custom') {\n anchor.href = url\n }\n if (this.__fields?.linkType === 'internal' && prevNode.__fields?.linkType === 'custom') {\n anchor.removeAttribute('href')\n }\n\n // TODO: not 100% sure why we're settign rel to '' - revisit\n // Start rel config here, then check newTab below\n if (anchor.rel == null) {\n anchor.rel = ''\n }\n\n if (newTab !== prevNode.__fields?.newTab) {\n if (newTab ?? false) {\n anchor.target = '_blank'\n if (this.__fields?.linkType === 'custom') {\n anchor.rel = manageRel(anchor.rel, 'add', 'noopener')\n }\n } else {\n anchor.removeAttribute('target')\n anchor.rel = manageRel(anchor.rel, 'remove', 'noopener')\n }\n }\n\n return false\n }\n}\n\nfunction $convertAnchorElement(domNode: Node): DOMConversionOutput {\n let node: LinkNode | null = null\n if (isHTMLAnchorElement(domNode)) {\n const content = domNode.textContent\n if (content !== null && content !== '') {\n node = $createLinkNode({\n id: new ObjectID.default().toHexString(),\n fields: {\n doc: null,\n linkType: 'custom',\n newTab: domNode.getAttribute('target') === '_blank',\n url: domNode.getAttribute('href') ?? '',\n },\n })\n }\n }\n return { node }\n}\n\nexport function $createLinkNode({ id, fields }: { fields: LinkFields; id?: string }): LinkNode {\n return $applyNodeReplacement(\n new LinkNode({\n id: id ?? new ObjectID.default().toHexString(),\n fields,\n }),\n )\n}\n\nexport function $isLinkNode(node: LexicalNode | null | undefined): node is LinkNode {\n return node instanceof LinkNode\n}\n\nexport const TOGGLE_LINK_COMMAND: LexicalCommand<LinkPayload | null> =\n createCommand('TOGGLE_LINK_COMMAND')\n\nexport function $toggleLink(payload: LinkPayload): void {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection) && !payload.selectedNodes.length) {\n return\n }\n const nodes = $isRangeSelection(selection) ? selection.extract() : payload.selectedNodes\n\n if (payload === null) {\n // Remove LinkNodes\n nodes.forEach((node) => {\n const parent = node.getParent()\n\n if ($isLinkNode(parent)) {\n const children = parent.getChildren()\n\n for (let i = 0; i < children.length; i += 1) {\n parent.insertBefore(children[i])\n }\n\n parent.remove()\n }\n })\n } else {\n // Add or merge LinkNodes\n if (nodes.length === 1) {\n const firstNode = nodes[0]\n // if the first node is a LinkNode or if its\n // parent is a LinkNode, we update the URL, target and rel.\n const linkNode: LinkNode | null = $isLinkNode(firstNode)\n ? firstNode\n : $getLinkAncestor(firstNode)\n if (linkNode !== null) {\n linkNode.setFields(payload.fields)\n\n if (payload.text != null && payload.text !== linkNode.getTextContent()) {\n // remove all children and add child with new textcontent:\n linkNode.append($createTextNode(payload.text))\n linkNode.getChildren().forEach((child) => {\n if (child !== linkNode.getLastChild()) {\n child.remove()\n }\n })\n }\n return\n }\n }\n\n let prevParent: ElementNodeType | LinkNode | null = null\n let linkNode: LinkNode | null = null\n\n nodes.forEach((node) => {\n const parent = node.getParent()\n\n if (parent === linkNode || parent === null || ($isElementNode(node) && !node.isInline())) {\n return\n }\n\n if ($isLinkNode(parent)) {\n linkNode = parent\n parent.setFields(payload.fields)\n if (payload.text != null && payload.text !== parent.getTextContent()) {\n // remove all children and add child with new textcontent:\n parent.append($createTextNode(payload.text))\n parent.getChildren().forEach((child) => {\n if (child !== parent.getLastChild()) {\n child.remove()\n }\n })\n }\n return\n }\n\n if (!parent.is(prevParent)) {\n prevParent = parent\n linkNode = $createLinkNode({ fields: payload.fields })\n\n if ($isLinkNode(parent)) {\n if (node.getPreviousSibling() === null) {\n parent.insertBefore(linkNode)\n } else {\n parent.insertAfter(linkNode)\n }\n } else {\n node.insertBefore(linkNode)\n }\n }\n\n if ($isLinkNode(node)) {\n if (node.is(linkNode)) {\n return\n }\n if (linkNode !== null) {\n const children = node.getChildren()\n\n for (let i = 0; i < children.length; i += 1) {\n linkNode.append(children[i])\n }\n }\n\n node.remove()\n return\n }\n\n if (linkNode !== null) {\n linkNode.append(node)\n }\n })\n }\n}\n\nfunction $getLinkAncestor(node: LexicalNode): LinkNode | null {\n return $getAncestor(node, (ancestor) => $isLinkNode(ancestor)) as LinkNode\n}\n\nfunction $getAncestor(\n node: LexicalNode,\n predicate: (ancestor: LexicalNode) => boolean,\n): LexicalNode | null {\n let parent: LexicalNode | null = node\n while (parent !== null && (parent = parent.getParent()) !== null && !predicate(parent));\n return parent\n}\n\nfunction manageRel(input: string, action: 'add' | 'remove', value: string): string {\n let result: string\n let mutableInput = `${input}`\n if (action === 'add') {\n // if we somehow got out of sync - clean up\n if (mutableInput.includes(value)) {\n const re = new RegExp(value, 'g')\n mutableInput = mutableInput.replace(re, '').trim()\n }\n mutableInput = mutableInput.trim()\n result = mutableInput.length === 0 ? `${value}` : `${mutableInput} ${value}`\n } else {\n const re = new RegExp(value, 'g')\n result = mutableInput.replace(re, '').trim()\n }\n return result\n}\n", "import type { ElementNode, LexicalNode, RangeSelection } from 'lexical'\n\nimport { $applyNodeReplacement, $isElementNode } from 'lexical'\n\nimport type { LinkFields, SerializedAutoLinkNode } from './types.js'\n\nimport { LinkNode } from './LinkNode.js'\n\n// Custom node type to override `canInsertTextAfter` that will\n// allow typing within the link\n\nexport class AutoLinkNode extends LinkNode {\n static clone(node: AutoLinkNode): AutoLinkNode {\n return new AutoLinkNode({ id: undefined, fields: node.__fields, key: node.__key })\n }\n\n static getType(): string {\n return 'autolink'\n }\n\n static importDOM(): null {\n // TODO: Should link node should handle the import over autolink?\n return null\n }\n\n static importJSON(serializedNode: SerializedAutoLinkNode): AutoLinkNode {\n if (\n serializedNode.version === 1 &&\n typeof serializedNode.fields?.doc?.value === 'object' &&\n serializedNode.fields?.doc?.value?.id\n ) {\n serializedNode.fields.doc.value = serializedNode.fields.doc.value.id\n serializedNode.version = 2\n }\n\n const node = $createAutoLinkNode({ fields: serializedNode.fields })\n\n node.setFormat(serializedNode.format)\n node.setIndent(serializedNode.indent)\n node.setDirection(serializedNode.direction)\n return node\n }\n\n // @ts-expect-error\n exportJSON(): SerializedAutoLinkNode {\n const serialized = super.exportJSON()\n return {\n type: 'autolink',\n children: serialized.children,\n direction: serialized.direction,\n fields: serialized.fields,\n format: serialized.format,\n indent: serialized.indent,\n version: 2,\n }\n }\n\n insertNewAfter(selection: RangeSelection, restoreSelection = true): ElementNode | null {\n const element = this.getParentOrThrow().insertNewAfter(selection, restoreSelection)\n if ($isElementNode(element)) {\n const linkNode = $createAutoLinkNode({ fields: this.__fields })\n element.append(linkNode)\n return linkNode\n }\n return null\n }\n}\n\nexport function $createAutoLinkNode({ fields }: { fields: LinkFields }): AutoLinkNode {\n return $applyNodeReplacement(new AutoLinkNode({ id: undefined, fields }))\n}\nexport function $isAutoLinkNode(node: LexicalNode | null | undefined): node is AutoLinkNode {\n return node instanceof AutoLinkNode\n}\n", "'use client'\nimport type { ElementNode, LexicalEditor, LexicalNode, TextNode } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $createTextNode,\n $getSelection,\n $isElementNode,\n $isLineBreakNode,\n $isNodeSelection,\n $isRangeSelection,\n $isTextNode,\n TextNode as TextNodeValue,\n} from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\nimport type { LinkFields } from '../../../nodes/types.js'\nimport type { ClientProps } from '../../index.js'\n\nimport { $createAutoLinkNode, $isAutoLinkNode, AutoLinkNode } from '../../../nodes/AutoLinkNode.js'\nimport { $isLinkNode } from '../../../nodes/LinkNode.js'\n\ntype ChangeHandler = (url: null | string, prevUrl: null | string) => void\n\ninterface LinkMatcherResult {\n fields?: LinkFields\n index: number\n length: number\n text: string\n url: string\n}\n\nexport type LinkMatcher = (text: string) => LinkMatcherResult | null\n\nexport function createLinkMatcherWithRegExp(\n regExp: RegExp,\n urlTransformer: (text: string) => string = (text) => text,\n) {\n return (text: string) => {\n const match = regExp.exec(text)\n if (match === null) return null\n return {\n index: match.index,\n length: match[0].length,\n text: match[0],\n url: urlTransformer(match[0]),\n }\n }\n}\n\nfunction findFirstMatch(text: string, matchers: LinkMatcher[]): LinkMatcherResult | null {\n for (let i = 0; i < matchers.length; i++) {\n const match = matchers[i](text)\n\n if (match != null) {\n return match\n }\n }\n\n return null\n}\n\nconst PUNCTUATION_OR_SPACE = /[.,;\\s]/\n\nfunction isSeparator(char: string): boolean {\n return PUNCTUATION_OR_SPACE.test(char)\n}\n\nfunction endsWithSeparator(textContent: string): boolean {\n return isSeparator(textContent[textContent.length - 1])\n}\n\nfunction startsWithSeparator(textContent: string): boolean {\n return isSeparator(textContent[0])\n}\n\n/**\n * Check if the text content starts with a fullstop followed by a top-level domain.\n * Meaning if the text content can be a beginning of a top level domain.\n * @param textContent\n * @param isEmail\n * @returns boolean\n */\nfunction startsWithTLD(textContent: string, isEmail: boolean): boolean {\n if (isEmail) {\n return /^\\.[a-z]{2,}/i.test(textContent)\n } else {\n return /^\\.[a-z0-9]+/i.test(textContent)\n }\n}\n\nfunction isPreviousNodeValid(node: LexicalNode): boolean {\n let previousNode = node.getPreviousSibling()\n if ($isElementNode(previousNode)) {\n previousNode = previousNode.getLastDescendant()\n }\n return (\n previousNode === null ||\n $isLineBreakNode(previousNode) ||\n ($isTextNode(previousNode) && endsWithSeparator(previousNode.getTextContent()))\n )\n}\n\nfunction isNextNodeValid(node: LexicalNode): boolean {\n let nextNode = node.getNextSibling()\n if ($isElementNode(nextNode)) {\n nextNode = nextNode.getFirstDescendant()\n }\n return (\n nextNode === null ||\n $isLineBreakNode(nextNode) ||\n ($isTextNode(nextNode) && startsWithSeparator(nextNode.getTextContent()))\n )\n}\n\nfunction isContentAroundIsValid(\n matchStart: number,\n matchEnd: number,\n text: string,\n nodes: TextNode[],\n): boolean {\n const contentBeforeIsValid =\n matchStart > 0 ? isSeparator(text[matchStart - 1]) : isPreviousNodeValid(nodes[0])\n if (!contentBeforeIsValid) {\n return false\n }\n\n const contentAfterIsValid =\n matchEnd < text.length ? isSeparator(text[matchEnd]) : isNextNodeValid(nodes[nodes.length - 1])\n return contentAfterIsValid\n}\n\nfunction extractMatchingNodes(\n nodes: TextNode[],\n startIndex: number,\n endIndex: number,\n): [\n matchingOffset: number,\n unmodifiedBeforeNodes: TextNode[],\n matchingNodes: TextNode[],\n unmodifiedAfterNodes: TextNode[],\n] {\n const unmodifiedBeforeNodes: TextNode[] = []\n const matchingNodes: TextNode[] = []\n const unmodifiedAfterNodes: TextNode[] = []\n let matchingOffset = 0\n\n let currentOffset = 0\n const currentNodes = [...nodes]\n\n while (currentNodes.length > 0) {\n const currentNode = currentNodes[0]\n const currentNodeText = currentNode.getTextContent()\n const currentNodeLength = currentNodeText.length\n const currentNodeStart = currentOffset\n const currentNodeEnd = currentOffset + currentNodeLength\n\n if (currentNodeEnd <= startIndex) {\n unmodifiedBeforeNodes.push(currentNode)\n matchingOffset += currentNodeLength\n } else if (currentNodeStart >= endIndex) {\n unmodifiedAfterNodes.push(currentNode)\n } else {\n matchingNodes.push(currentNode)\n }\n currentOffset += currentNodeLength\n currentNodes.shift()\n }\n return [matchingOffset, unmodifiedBeforeNodes, matchingNodes, unmodifiedAfterNodes]\n}\n\nfunction $createAutoLinkNode_(\n nodes: TextNode[],\n startIndex: number,\n endIndex: number,\n match: LinkMatcherResult,\n): TextNode | undefined {\n const fields: LinkFields = {\n linkType: 'custom',\n url: match.url,\n ...match.fields,\n }\n\n const linkNode = $createAutoLinkNode({ fields })\n if (nodes.length === 1) {\n let remainingTextNode = nodes[0]\n let linkTextNode\n if (startIndex === 0) {\n ;[linkTextNode, remainingTextNode] = remainingTextNode.splitText(endIndex)\n } else {\n ;[, linkTextNode, remainingTextNode] = remainingTextNode.splitText(startIndex, endIndex)\n }\n const textNode = $createTextNode(match.text)\n textNode.setFormat(linkTextNode.getFormat())\n textNode.setDetail(linkTextNode.getDetail())\n textNode.setStyle(linkTextNode.getStyle())\n linkNode.append(textNode)\n linkTextNode.replace(linkNode)\n return remainingTextNode\n } else if (nodes.length > 1) {\n const firstTextNode = nodes[0]\n let offset = firstTextNode.getTextContent().length\n let firstLinkTextNode\n if (startIndex === 0) {\n firstLinkTextNode = firstTextNode\n } else {\n ;[, firstLinkTextNode] = firstTextNode.splitText(startIndex)\n }\n const linkNodes = []\n let remainingTextNode\n for (let i = 1; i < nodes.length; i++) {\n const currentNode = nodes[i]\n const currentNodeText = currentNode.getTextContent()\n const currentNodeLength = currentNodeText.length\n const currentNodeStart = offset\n const currentNodeEnd = offset + currentNodeLength\n if (currentNodeStart < endIndex) {\n if (currentNodeEnd <= endIndex) {\n linkNodes.push(currentNode)\n } else {\n const [linkTextNode, endNode] = currentNode.splitText(endIndex - currentNodeStart)\n linkNodes.push(linkTextNode)\n remainingTextNode = endNode\n }\n }\n offset += currentNodeLength\n }\n const selection = $getSelection()\n const selectedTextNode = selection ? selection.getNodes().find($isTextNode) : undefined\n const textNode = $createTextNode(firstLinkTextNode.getTextContent())\n textNode.setFormat(firstLinkTextNode.getFormat())\n textNode.setDetail(firstLinkTextNode.getDetail())\n textNode.setStyle(firstLinkTextNode.getStyle())\n linkNode.append(textNode, ...linkNodes)\n // it does not preserve caret position if caret was at the first text node\n // so we need to restore caret position\n if (selectedTextNode && selectedTextNode === firstLinkTextNode) {\n if ($isRangeSelection(selection)) {\n textNode.select(selection.anchor.offset, selection.focus.offset)\n } else if ($isNodeSelection(selection)) {\n textNode.select(0, textNode.getTextContent().length)\n }\n }\n firstLinkTextNode.replace(linkNode)\n return remainingTextNode\n }\n return undefined\n}\n\nfunction $handleLinkCreation(\n nodes: TextNode[],\n matchers: LinkMatcher[],\n onChange: ChangeHandler,\n): void {\n let currentNodes = [...nodes]\n const initialText = currentNodes.map((node) => node.getTextContent()).join('')\n let text = initialText\n\n let match\n let invalidMatchEnd = 0\n\n while ((match = findFirstMatch(text, matchers)) != null && match !== null) {\n const matchStart: number = match.index\n const matchLength: number = match.length\n const matchEnd = matchStart + matchLength\n const isValid = isContentAroundIsValid(\n invalidMatchEnd + matchStart,\n invalidMatchEnd + matchEnd,\n initialText,\n currentNodes,\n )\n\n if (isValid) {\n const [matchingOffset, , matchingNodes, unmodifiedAfterNodes] = extractMatchingNodes(\n currentNodes,\n invalidMatchEnd + matchStart,\n invalidMatchEnd + matchEnd,\n )\n\n const actualMatchStart = invalidMatchEnd + matchStart - matchingOffset\n const actualMatchEnd = invalidMatchEnd + matchEnd - matchingOffset\n const remainingTextNode = $createAutoLinkNode_(\n matchingNodes,\n actualMatchStart,\n actualMatchEnd,\n match,\n )\n currentNodes = remainingTextNode\n ? [remainingTextNode, ...unmodifiedAfterNodes]\n : unmodifiedAfterNodes\n onChange(match.url, null)\n invalidMatchEnd = 0\n } else {\n invalidMatchEnd += matchEnd\n }\n\n text = text.substring(matchEnd)\n }\n}\n\nfunction handleLinkEdit(\n linkNode: AutoLinkNode,\n matchers: LinkMatcher[],\n onChange: ChangeHandler,\n): void {\n // Check children are simple text\n const children = linkNode.getChildren()\n const childrenLength = children.length\n for (let i = 0; i < childrenLength; i++) {\n const child = children[i]\n if (!$isTextNode(child) || !child.isSimpleText()) {\n replaceWithChildren(linkNode)\n onChange(null, linkNode.getFields()?.url ?? null)\n return\n }\n }\n\n // Check text content fully matches\n const text = linkNode.getTextContent()\n const match = findFirstMatch(text, matchers)\n if (match === null || match.text !== text) {\n replaceWithChildren(linkNode)\n onChange(null, linkNode.getFields()?.url ?? null)\n return\n }\n\n // Check neighbors\n if (!isPreviousNodeValid(linkNode) || !isNextNodeValid(linkNode)) {\n replaceWithChildren(linkNode)\n onChange(null, linkNode.getFields()?.url ?? null)\n return\n }\n\n const url = linkNode.getFields()?.url\n if (url !== match?.url) {\n const flds = linkNode.getFields()\n flds.url = match?.url\n linkNode.setFields(flds)\n onChange(match.url, url ?? null)\n }\n}\n\n// Bad neighbors are edits in neighbor nodes that make AutoLinks incompatible.\n// Given the creation preconditions, these can only be simple text nodes.\nfunction handleBadNeighbors(\n textNode: TextNode,\n matchers: LinkMatcher[],\n onChange: ChangeHandler,\n): void {\n const previousSibling = textNode.getPreviousSibling()\n const nextSibling = textNode.getNextSibling()\n const text = textNode.getTextContent()\n\n if ($isAutoLinkNode(previousSibling)) {\n const isEmailURI = previousSibling.getFields()?.url\n ? previousSibling.getFields()?.url?.startsWith('mailto:')\n : false\n if (!startsWithSeparator(text) || startsWithTLD(text, isEmailURI)) {\n previousSibling.append(textNode)\n handleLinkEdit(previousSibling, matchers, onChange)\n onChange(null, previousSibling.getFields()?.url ?? null)\n }\n }\n\n if ($isAutoLinkNode(nextSibling) && !endsWithSeparator(text)) {\n replaceWithChildren(nextSibling)\n handleLinkEdit(nextSibling, matchers, onChange)\n onChange(null, nextSibling.getFields()?.url ?? null)\n }\n}\n\nfunction replaceWithChildren(node: ElementNode): LexicalNode[] {\n const children = node.getChildren()\n const childrenLength = children.length\n\n for (let j = childrenLength - 1; j >= 0; j--) {\n node.insertAfter(children[j])\n }\n\n node.remove()\n return children.map((child) => child.getLatest())\n}\n\nfunction getTextNodesToMatch(textNode: TextNode): TextNode[] {\n // check if next siblings are simple text nodes till a node contains a space separator\n const textNodesToMatch = [textNode]\n let nextSibling = textNode.getNextSibling()\n while (nextSibling !== null && $isTextNode(nextSibling) && nextSibling.isSimpleText()) {\n textNodesToMatch.push(nextSibling)\n if (/\\s/.test(nextSibling.getTextContent())) {\n break\n }\n nextSibling = nextSibling.getNextSibling()\n }\n return textNodesToMatch\n}\n\nfunction useAutoLink(\n editor: LexicalEditor,\n matchers: LinkMatcher[],\n onChange?: ChangeHandler,\n): void {\n useEffect(() => {\n if (!editor.hasNodes([AutoLinkNode])) {\n throw new Error('LexicalAutoLinkPlugin: AutoLinkNode not registered on editor')\n }\n\n const onChangeWrapped = (url: null | string, prevUrl: null | string): void => {\n if (onChange != null) {\n onChange(url, prevUrl)\n }\n }\n\n return mergeRegister(\n editor.registerNodeTransform(TextNodeValue, (textNode: TextNode) => {\n const parent = textNode.getParentOrThrow()\n const previous = textNode.getPreviousSibling()\n if ($isAutoLinkNode(parent)) {\n handleLinkEdit(parent, matchers, onChangeWrapped)\n } else if (!$isLinkNode(parent)) {\n if (\n textNode.isSimpleText() &&\n (startsWithSeparator(textNode.getTextContent()) || !$isAutoLinkNode(previous))\n ) {\n const textNodesToMatch = getTextNodesToMatch(textNode)\n $handleLinkCreation(textNodesToMatch, matchers, onChangeWrapped)\n }\n\n handleBadNeighbors(textNode, matchers, onChangeWrapped)\n }\n }),\n )\n }, [editor, matchers, onChange])\n}\n\nconst URL_REGEX =\n /((https?:\\/\\/(www\\.)?)|(www\\.))[-\\w@:%.+~#=]{1,256}\\.[a-zA-Z\\d()]{1,6}\\b([-\\w()@:%+.~#?&/=]*)(?<![-.+():%])/\n\nconst EMAIL_REGEX =\n /(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\])|(([a-z\\-\\d]+\\.)+[a-z]{2,}))/i\n\nconst MATCHERS = [\n createLinkMatcherWithRegExp(URL_REGEX, (text) => {\n return text.startsWith('http') ? text : `https://${text}`\n }),\n createLinkMatcherWithRegExp(EMAIL_REGEX, (text) => {\n return `mailto:${text}`\n }),\n]\n\nexport const AutoLinkPlugin: PluginComponent<ClientProps> = () => {\n const [editor] = useLexicalComposerContext()\n\n useAutoLink(editor, MATCHERS)\n\n return null\n}\n", "'use client'\nimport { ClickableLinkPlugin as LexicalClickableLinkPlugin } from '@lexical/react/LexicalClickableLinkPlugin.js'\nimport React from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\nimport type { ClientProps } from '../../index.js'\n\nexport const ClickableLinkPlugin: PluginComponent<ClientProps> = () => {\n return <LexicalClickableLinkPlugin />\n}\n", "'use client'\nimport type { LexicalCommand } from 'lexical'\n\nimport { createCommand } from 'lexical'\n\nimport type { LinkPayload } from '../types.js'\n\nexport const TOGGLE_LINK_WITH_MODAL_COMMAND: LexicalCommand<LinkPayload | null> = createCommand(\n 'TOGGLE_LINK_WITH_MODAL_COMMAND',\n)\n", "'use client'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\nimport type { ClientProps } from '../../index.js'\n\nimport { LinkEditor } from './LinkEditor/index.js'\nimport './index.scss'\n\nexport const FloatingLinkEditorPlugin: PluginComponentWithAnchor<ClientProps> = (props) => {\n const { anchorElem = document.body } = props\n\n return createPortal(<LinkEditor anchorElem={anchorElem} />, anchorElem)\n}\n", "'use client'\nimport type { LexicalNode } from 'lexical'\nimport type { Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n CloseMenuIcon,\n EditIcon,\n formatDrawerSlug,\n useConfig,\n useEditDepth,\n useModal,\n useTranslation,\n} from '@payloadcms/ui'\nimport {\n $getSelection,\n $isLineBreakNode,\n $isRangeSelection,\n COMMAND_PRIORITY_HIGH,\n COMMAND_PRIORITY_LOW,\n KEY_ESCAPE_COMMAND,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport type { LinkNode } from '../../../../nodes/LinkNode.js'\nimport type { LinkFields } from '../../../../nodes/types.js'\nimport type { LinkPayload } from '../types.js'\n\nimport { useEditorConfigContext } from '../../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { getSelectedNode } from '../../../../../../lexical/utils/getSelectedNode.js'\nimport { setFloatingElemPositionForLinkEditor } from '../../../../../../lexical/utils/setFloatingElemPositionForLinkEditor.js'\nimport { FieldsDrawer } from '../../../../../../utilities/fieldsDrawer/Drawer.js'\nimport { $isAutoLinkNode } from '../../../../nodes/AutoLinkNode.js'\nimport { $createLinkNode, $isLinkNode, TOGGLE_LINK_COMMAND } from '../../../../nodes/LinkNode.js'\nimport { TOGGLE_LINK_WITH_MODAL_COMMAND } from './commands.js'\n\nexport function LinkEditor({ anchorElem }: { anchorElem: HTMLElement }): React.ReactNode {\n const [editor] = useLexicalComposerContext()\n\n const editorRef = useRef<HTMLDivElement | null>(null)\n const [linkUrl, setLinkUrl] = useState(null)\n const [linkLabel, setLinkLabel] = useState(null)\n\n const { uuid } = useEditorConfigContext()\n\n const { config } = useConfig()\n\n const { i18n, t } = useTranslation()\n\n const [stateData, setStateData] = useState<{ id?: string; text: string } & LinkFields>(null)\n\n const { closeModal, toggleModal } = useModal()\n const editDepth = useEditDepth()\n const [isLink, setIsLink] = useState(false)\n const [selectedNodes, setSelectedNodes] = useState<LexicalNode[]>([])\n\n const [isAutoLink, setIsAutoLink] = useState(false)\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-rich-text-link-` + uuid,\n depth: editDepth,\n })\n\n const setNotLink = useCallback(() => {\n setIsLink(false)\n if (editorRef && editorRef.current) {\n editorRef.current.style.opacity = '0'\n editorRef.current.style.transform = 'translate(-10000px, -10000px)'\n }\n setIsAutoLink(false)\n setLinkUrl(null)\n setLinkLabel(null)\n setSelectedNodes([])\n setStateData(null)\n }, [setIsLink, setLinkUrl, setLinkLabel, setSelectedNodes])\n\n const $updateLinkEditor = useCallback(() => {\n const selection = $getSelection()\n let selectedNodeDomRect: DOMRect | undefined = null\n\n if (!$isRangeSelection(selection) || !selection) {\n setNotLink()\n return\n }\n\n // Handle the data displayed in the floating link editor & drawer when you click on a link node\n\n const focusNode = getSelectedNode(selection)\n selectedNodeDomRect = editor.getElementByKey(focusNode.getKey())?.getBoundingClientRect()\n const focusLinkParent: LinkNode = $findMatchingParent(focusNode, $isLinkNode)\n\n // Prevent link modal from showing if selection spans further than the link: https://github.com/facebook/lexical/issues/4064\n const badNode = selection\n .getNodes()\n .filter((node) => !$isLineBreakNode(node))\n .find((node) => {\n const linkNode = $findMatchingParent(node, $isLinkNode)\n return (\n (focusLinkParent && !focusLinkParent.is(linkNode)) ||\n (linkNode && !linkNode.is(focusLinkParent))\n )\n })\n\n if (focusLinkParent == null || badNode) {\n setNotLink()\n return\n }\n\n // Initial state:\n const data: { text: string } & LinkFields = {\n doc: undefined,\n linkType: undefined,\n newTab: undefined,\n url: '',\n ...focusLinkParent.getFields(),\n id: focusLinkParent.getID(),\n text: focusLinkParent.getTextContent(),\n }\n\n if (focusLinkParent.getFields()?.linkType === 'custom') {\n setLinkUrl(focusLinkParent.getFields()?.url ?? null)\n setLinkLabel(null)\n } else {\n // internal link\n setLinkUrl(\n `/admin/collections/${focusLinkParent.getFields()?.doc?.relationTo}/${\n focusLinkParent.getFields()?.doc?.value\n }`,\n )\n\n const relatedField = config.collections.find(\n (coll) => coll.slug === focusLinkParent.getFields()?.doc?.relationTo,\n )\n if (!relatedField) {\n // Usually happens if the user removed all default fields. In this case, we let them specify the label or do not display the label at all.\n // label could be a virtual field the user added. This is useful if they want to use the link feature for things other than links.\n setLinkLabel(\n focusLinkParent.getFields()?.label ? String(focusLinkParent.getFields()?.label) : null,\n )\n setLinkUrl(\n focusLinkParent.getFields()?.url ? String(focusLinkParent.getFields()?.url) : null,\n )\n } else {\n const label = t('fields:linkedTo', {\n label: getTranslation(relatedField.labels.singular, i18n),\n }).replace(/<[^>]*>?/g, '')\n setLinkLabel(label)\n }\n }\n\n setStateData(data)\n setIsLink(true)\n setSelectedNodes(selection ? selection?.getNodes() : [])\n\n if ($isAutoLinkNode(focusLinkParent)) {\n setIsAutoLink(true)\n } else {\n setIsAutoLink(false)\n }\n\n const editorElem = editorRef.current\n const nativeSelection = window.getSelection()\n const { activeElement } = document\n\n if (editorElem === null) {\n return\n }\n\n const rootElement = editor.getRootElement()\n\n if (\n nativeSelection !== null &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n if (!selectedNodeDomRect) {\n // Get the DOM rect of the selected node using the native selection. This sometimes produces the wrong\n // result, which is why we use lexical's selection preferably.\n selectedNodeDomRect = nativeSelection.getRangeAt(0).getBoundingClientRect()\n }\n\n if (selectedNodeDomRect != null) {\n selectedNodeDomRect.y += 40\n setFloatingElemPositionForLinkEditor(selectedNodeDomRect, editorElem, anchorElem)\n }\n } else if (activeElement == null || activeElement.className !== 'link-input') {\n if (rootElement !== null) {\n setFloatingElemPositionForLinkEditor(null, editorElem, anchorElem)\n }\n setLinkUrl(null)\n setLinkLabel(null)\n }\n\n return true\n }, [editor, setNotLink, config.collections, t, i18n, anchorElem])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n TOGGLE_LINK_WITH_MODAL_COMMAND,\n (payload: LinkPayload) => {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, payload)\n\n // Now, open the modal\n $updateLinkEditor()\n toggleModal(drawerSlug)\n\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, $updateLinkEditor, toggleModal, drawerSlug])\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement\n\n const update = (): void => {\n editor.getEditorState().read(() => {\n void $updateLinkEditor()\n })\n }\n\n window.addEventListener('resize', update)\n\n if (scrollerElem != null) {\n scrollerElem.addEventListener('scroll', update)\n }\n\n return () => {\n window.removeEventListener('resize', update)\n\n if (scrollerElem != null) {\n scrollerElem.removeEventListener('scroll', update)\n }\n }\n }, [anchorElem.parentElement, editor, $updateLinkEditor])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n void $updateLinkEditor()\n })\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n void $updateLinkEditor()\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ESCAPE_COMMAND,\n () => {\n if (isLink) {\n setNotLink()\n\n return true\n }\n return false\n },\n COMMAND_PRIORITY_HIGH,\n ),\n )\n }, [editor, $updateLinkEditor, isLink, setNotLink])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n void $updateLinkEditor()\n })\n }, [editor, $updateLinkEditor])\n\n return (\n <React.Fragment>\n <div className=\"link-editor\" ref={editorRef}>\n <div className=\"link-input\">\n {linkUrl && linkUrl.length > 0 ? (\n <a href={linkUrl} rel=\"noopener noreferrer\" target=\"_blank\">\n {linkLabel != null && linkLabel.length > 0 ? linkLabel : linkUrl}\n </a>\n ) : linkLabel != null && linkLabel.length > 0 ? (\n <span className=\"link-input__label-pure\">{linkLabel}</span>\n ) : null}\n\n {editor.isEditable() && (\n <React.Fragment>\n <button\n aria-label=\"Edit link\"\n className=\"link-edit\"\n onClick={() => {\n toggleModal(drawerSlug)\n }}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n tabIndex={0}\n type=\"button\"\n >\n <EditIcon />\n </button>\n {!isAutoLink && (\n <button\n aria-label=\"Remove link\"\n className=\"link-trash\"\n onClick={() => {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null)\n }}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n tabIndex={0}\n type=\"button\"\n >\n <CloseMenuIcon />\n </button>\n )}\n </React.Fragment>\n )}\n </div>\n </div>\n <FieldsDrawer\n className=\"lexical-link-edit-drawer\"\n data={stateData}\n drawerSlug={drawerSlug}\n drawerTitle={t('fields:editLink')}\n featureKey=\"link\"\n handleDrawerSubmit={(fields: FormState, data: Data) => {\n closeModal(drawerSlug)\n\n const newLinkPayload = data as { text: string } & LinkFields\n\n const bareLinkFields: LinkFields = {\n ...newLinkPayload,\n }\n delete bareLinkFields.text\n\n // See: https://github.com/facebook/lexical/pull/5536. This updates autolink nodes to link nodes whenever a change was made (which is good!).\n editor.update(() => {\n const selection = $getSelection()\n let linkParent = null\n if ($isRangeSelection(selection)) {\n linkParent = getSelectedNode(selection).getParent()\n } else {\n if (selectedNodes.length) {\n linkParent = selectedNodes[0].getParent()\n }\n }\n\n if (linkParent && $isAutoLinkNode(linkParent)) {\n const linkNode = $createLinkNode({\n fields: bareLinkFields,\n })\n linkParent.replace(linkNode, true)\n }\n })\n\n // Needs to happen AFTER a potential auto link => link node conversion, as otherwise, the updated text to display may be lost due to\n // it being applied to the auto link node instead of the link node.\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, {\n fields: bareLinkFields,\n selectedNodes,\n text: newLinkPayload.text,\n })\n }}\n schemaPathSuffix=\"fields\"\n />\n </React.Fragment>\n )\n}\n", "'use client'\nconst VERTICAL_GAP = 10\nconst HORIZONTAL_OFFSET = 5\n\nexport function setFloatingElemPositionForLinkEditor(\n targetRect: DOMRect | null,\n floatingElem: HTMLElement,\n anchorElem: HTMLElement,\n verticalGap: number = VERTICAL_GAP,\n horizontalOffset: number = HORIZONTAL_OFFSET,\n): void {\n const scrollerElem = anchorElem.parentElement\n\n if (targetRect === null || scrollerElem == null) {\n floatingElem.style.opacity = '0'\n floatingElem.style.transform = 'translate(-10000px, -10000px)'\n return\n }\n\n const floatingElemRect = floatingElem.getBoundingClientRect()\n const anchorElementRect = anchorElem.getBoundingClientRect()\n const editorScrollerRect = scrollerElem.getBoundingClientRect()\n\n let top = targetRect.top - verticalGap\n let left = targetRect.left - horizontalOffset\n\n if (top < editorScrollerRect.top) {\n top += floatingElemRect.height + targetRect.height + verticalGap * 2\n }\n\n if (left + floatingElemRect.width > editorScrollerRect.right) {\n left = editorScrollerRect.right - floatingElemRect.width - horizontalOffset\n }\n\n top -= anchorElementRect.top\n left -= anchorElementRect.left\n\n floatingElem.style.opacity = '1'\n floatingElem.style.transform = `translate(${left}px, ${top}px)`\n}\n", "'use client'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isElementNode,\n $isRangeSelection,\n COMMAND_PRIORITY_LOW,\n PASTE_COMMAND,\n} from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\nimport type { LinkFields } from '../../../nodes/types.js'\nimport type { ClientProps } from '../../index.js'\nimport type { LinkPayload } from '../floatingLinkEditor/types.js'\n\nimport { validateUrl } from '../../../../../lexical/utils/url.js'\nimport { $toggleLink, LinkNode, TOGGLE_LINK_COMMAND } from '../../../nodes/LinkNode.js'\n\nexport const LinkPlugin: PluginComponent<ClientProps> = () => {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n if (!editor.hasNodes([LinkNode])) {\n throw new Error('LinkPlugin: LinkNode not registered on editor')\n }\n return mergeRegister(\n editor.registerCommand(\n TOGGLE_LINK_COMMAND,\n (payload: LinkPayload) => {\n $toggleLink(payload)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n PASTE_COMMAND,\n (event) => {\n const selection = $getSelection()\n if (\n !$isRangeSelection(selection) ||\n selection.isCollapsed() ||\n !(event instanceof ClipboardEvent) ||\n event.clipboardData == null\n ) {\n return false\n }\n const clipboardText = event.clipboardData.getData('text')\n if (!validateUrl(clipboardText)) {\n return false\n }\n // If we select nodes that are elements then avoid applying the link.\n if (!selection.getNodes().some((node) => $isElementNode(node))) {\n const linkFields: LinkFields = {\n doc: null,\n linkType: 'custom',\n newTab: false,\n url: clipboardText,\n }\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, {\n fields: linkFields,\n text: null,\n })\n event.preventDefault()\n return true\n }\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor])\n\n return null\n}\n", "export function sanitizeUrl(url: string): string {\n /** A pattern that matches safe URLs. */\n const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^&:/?#]*(?:[/?#]|$))/gi\n\n /** A pattern that matches safe data URLs. */\n const DATA_URL_PATTERN =\n /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z\\d+/]+=*$/i\n\n url = String(url).trim()\n\n if (url.match(SAFE_URL_PATTERN) != null || url.match(DATA_URL_PATTERN) != null) return url\n\n return 'https://'\n}\n\n// Source: https://stackoverflow.com/a/8234912/2013580\nconst absoluteRegExp =\n /(?:[A-Za-z]{3,9}:(?:\\/\\/)?(?:[-;:&=+$,\\w]+@)?[A-Za-z\\d.-]+|(?:www.|[-;:&=+$,\\w]+@)[A-Za-z\\d.-]+)(?:\\/[+~%/.\\w-]*)?\\??[-+=&;%@.\\w]*#?\\w*/\n\n/**\n * This regex checks for relative URLs starting with / or anchor links starting with # in a string. Tested for the following use cases:\n * - /privacy-policy\n * - /privacy-policy#primary-terms\n * - #primary-terms\n * */\nconst relativeOrAnchorRegExp = /^[\\w\\-./]*(?:#\\w[\\w-]*)?$/\n\n/**\n * Prevents unreasonable URLs from being inserted into the editor.\n * @param url\n */\nexport function validateUrlMinimal(url: string): boolean {\n return !url.includes(' ')\n}\n\n// Do not keep validateUrl function too loose. This is run when pasting in text, to determine if links are in that text and if it should create AutoLinkNodes.\n// This is why we do not allow stuff like anchors here, as we don't want copied anchors to be turned into AutoLinkNodes.\nexport function validateUrl(url: string): boolean {\n // TODO Fix UI for link insertion; it should never default to an invalid URL such as https://.\n // Maybe show a dialog where they user can type the URL before inserting it.\n\n if (!url) return false\n\n if (url === 'https://') return true\n\n // This makes sure URLs starting with www. instead of https are valid too\n if (absoluteRegExp.test(url)) return true\n\n // Check relative or anchor links\n if (relativeOrAnchorRegExp.test(url)) return true\n\n // While this doesn't allow URLs starting with www (which is why we use the regex above), it does properly handle tel: URLs\n try {\n new URL(url)\n return true\n } catch {\n /* empty */\n }\n\n return false\n}\n", "'use client'\nimport { $isListNode, INSERT_CHECK_LIST_COMMAND, ListItemNode, ListNode } from '@lexical/list'\nimport { $isRangeSelection } from 'lexical'\n\nimport type { ToolbarGroup } from '../../../toolbars/types.js'\nimport type { ClientFeature } from '../../../typesClient.js'\n\nimport { ChecklistIcon } from '../../../../lexical/ui/icons/Checklist/index.js'\nimport { createClientFeature } from '../../../../utilities/createClientFeature.js'\nimport { toolbarTextDropdownGroupWithItems } from '../../../shared/toolbar/textDropdownGroup.js'\nimport { LexicalListPlugin } from '../../plugin/index.js'\nimport { slashMenuListGroupWithItems } from '../../shared/slashMenuListGroup.js'\nimport { CHECK_LIST } from '../markdownTransformers.js'\nimport { LexicalCheckListPlugin } from './plugin/index.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarTextDropdownGroupWithItems([\n {\n ChildComponent: ChecklistIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isListNode(node) && node.getListType() === 'check') {\n continue\n }\n\n const parent = node.getParent()\n\n if ($isListNode(parent) && parent.getListType() === 'check') {\n continue\n }\n\n const parentParent = parent?.getParent()\n // Example scenario: Node = textNode, parent = listItemNode, parentParent = listNode\n if ($isListNode(parentParent) && parentParent.getListType() === 'check') {\n continue\n }\n\n return false\n }\n return true\n },\n key: 'checklist',\n label: ({ i18n }) => {\n return i18n.t('lexical:checklist:label')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_CHECK_LIST_COMMAND, undefined)\n },\n order: 12,\n },\n ]),\n]\n\nexport const ChecklistFeatureClient = createClientFeature(({ featureProviderMap }) => {\n const plugins: ClientFeature<undefined>['plugins'] = [\n {\n Component: LexicalCheckListPlugin,\n position: 'normal',\n },\n ]\n\n if (!featureProviderMap.has('unorderedList') && !featureProviderMap.has('orderedList')) {\n plugins.push({\n Component: LexicalListPlugin,\n position: 'normal',\n })\n }\n\n return {\n markdownTransformers: [CHECK_LIST],\n nodes:\n featureProviderMap.has('unorderedList') || featureProviderMap.has('orderedList')\n ? []\n : [ListNode, ListItemNode],\n plugins,\n slashMenu: {\n groups: [\n slashMenuListGroupWithItems([\n {\n Icon: ChecklistIcon,\n key: 'checklist',\n keywords: ['check list', 'check', 'checklist', 'cl'],\n label: ({ i18n }) => {\n return i18n.t('lexical:checklist:label')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_CHECK_LIST_COMMAND, undefined)\n },\n },\n ]),\n ],\n },\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n }\n})\n", "'use client'\nimport React from 'react'\n\nexport const ChecklistIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect height=\"13\" rx=\"1.5\" stroke=\"currentColor\" width=\"13\" x=\"3.5\" y=\"3.5\" />\n <path d=\"M7 10L9 12.5L13 7.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n)\n", "'use client'\nimport type {\n SerializedListItemNode as _SerializedListItemNode,\n SerializedListNode as _SerializedListNode,\n} from '@lexical/list'\nimport type { Spread } from 'lexical'\n\nimport { ListPlugin } from '@lexical/react/LexicalListPlugin.js'\nimport React from 'react'\n\nimport type { PluginComponent } from '../../typesClient.js'\n\nexport type SerializedListItemNode = Spread<\n {\n checked?: boolean\n type: 'listitem'\n },\n _SerializedListItemNode\n>\n\nexport type SerializedListNode = Spread<\n {\n checked?: boolean\n type: 'list'\n },\n _SerializedListNode\n>\n\nexport const LexicalListPlugin: PluginComponent<undefined> = () => {\n return <ListPlugin />\n}\n", "import type {\n SlashMenuGroup,\n SlashMenuItem,\n} from '../../../lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js'\n\nexport function slashMenuListGroupWithItems(items: SlashMenuItem[]): SlashMenuGroup {\n return {\n items,\n key: 'lists',\n label: ({ i18n }) => {\n return i18n.t('lexical:general:slashMenuListGroupLabel')\n },\n }\n}\n", "import type { ElementTransformer } from '@lexical/markdown'\n\nimport { $isListNode, ListItemNode, ListNode } from '@lexical/list'\n\nimport { listExport, listReplace } from '../shared/markdown.js'\n\nexport const CHECK_LIST: ElementTransformer = {\n type: 'element',\n dependencies: [ListNode, ListItemNode],\n export: (node, exportChildren) => {\n return $isListNode(node) ? listExport(node, exportChildren, 0) : null\n },\n regExp: /^(\\s*)(?:-\\s)?\\s?(\\[(\\s|x)?\\])\\s/i,\n replace: listReplace('check'),\n}\n", "// Copied from https://github.com/facebook/lexical/blob/176b8cf16ecb332ee5efe2c75219e223b7b019f2/packages/lexical-markdown/src/MarkdownTransformers.ts#L97C1-L172C1\n\nimport type { ListNode, ListType } from '@lexical/list'\nimport type { ElementTransformer } from '@lexical/markdown'\nimport type { ElementNode } from 'lexical'\n\nimport { $createListItemNode, $createListNode, $isListItemNode, $isListNode } from '@lexical/list'\n\n// Amount of spaces that define indentation level\nconst LIST_INDENT_SIZE = 4\n\nexport const listReplace = (listType: ListType): ElementTransformer['replace'] => {\n return (parentNode, children, match) => {\n const previousNode = parentNode.getPreviousSibling()\n const nextNode = parentNode.getNextSibling()\n const listItem = $createListItemNode(listType === 'check' ? match[3] === 'x' : undefined)\n if ($isListNode(nextNode) && nextNode.getListType() === listType) {\n const firstChild = nextNode.getFirstChild()\n if (firstChild !== null) {\n firstChild.insertBefore(listItem)\n } else {\n // should never happen, but let's handle gracefully, just in case.\n nextNode.append(listItem)\n }\n parentNode.remove()\n } else if ($isListNode(previousNode) && previousNode.getListType() === listType) {\n previousNode.append(listItem)\n parentNode.remove()\n } else {\n const list = $createListNode(listType, listType === 'number' ? Number(match[2]) : undefined)\n list.append(listItem)\n parentNode.replace(list)\n }\n listItem.append(...children)\n listItem.select(0, 0)\n const indent = Math.floor(match[1].length / LIST_INDENT_SIZE)\n if (indent) {\n listItem.setIndent(indent)\n }\n }\n}\n\nexport const listExport = (\n listNode: ListNode,\n exportChildren: (node: ElementNode) => string,\n depth: number,\n): string => {\n const output = []\n const children = listNode.getChildren()\n let index = 0\n for (const listItemNode of children) {\n if ($isListItemNode(listItemNode)) {\n if (listItemNode.getChildrenSize() === 1) {\n const firstChild = listItemNode.getFirstChild()\n if ($isListNode(firstChild)) {\n output.push(listExport(firstChild, exportChildren, depth + 1))\n continue\n }\n }\n const indent = ' '.repeat(depth * LIST_INDENT_SIZE)\n const listType = listNode.getListType()\n const prefix =\n listType === 'number'\n ? `${listNode.getStart() + index}. `\n : listType === 'check'\n ? `- [${listItemNode.getChecked() ? 'x' : ' '}] `\n : '- '\n output.push(indent + prefix + exportChildren(listItemNode))\n index++\n }\n }\n\n return output.join('\\n')\n}\n", "'use client'\nimport { CheckListPlugin } from '@lexical/react/LexicalCheckListPlugin.js'\nimport React from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nexport const LexicalCheckListPlugin: PluginComponent<undefined> = () => {\n return <CheckListPlugin />\n}\n", "'use client'\nimport { $isListNode, INSERT_ORDERED_LIST_COMMAND, ListItemNode, ListNode } from '@lexical/list'\nimport { $isRangeSelection } from 'lexical'\n\nimport type { ToolbarGroup } from '../../../toolbars/types.js'\n\nimport { OrderedListIcon } from '../../../../lexical/ui/icons/OrderedList/index.js'\nimport { createClientFeature } from '../../../../utilities/createClientFeature.js'\nimport { toolbarTextDropdownGroupWithItems } from '../../../shared/toolbar/textDropdownGroup.js'\nimport { LexicalListPlugin } from '../../plugin/index.js'\nimport { slashMenuListGroupWithItems } from '../../shared/slashMenuListGroup.js'\nimport { ORDERED_LIST } from '../markdownTransformer.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarTextDropdownGroupWithItems([\n {\n ChildComponent: OrderedListIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isListNode(node) && node.getListType() === 'number') {\n continue\n }\n\n const parent = node.getParent()\n\n if ($isListNode(parent) && parent.getListType() === 'number') {\n continue\n }\n\n const parentParent = parent?.getParent()\n // Example scenario: Node = textNode, parent = listItemNode, parentParent = listNode\n if ($isListNode(parentParent) && parentParent.getListType() === 'number') {\n continue\n }\n\n return false\n }\n return true\n },\n key: 'orderedList',\n label: ({ i18n }) => {\n return i18n.t('lexical:orderedList:label')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined)\n },\n order: 10,\n },\n ]),\n]\n\nexport const OrderedListFeatureClient = createClientFeature(({ featureProviderMap }) => {\n return {\n markdownTransformers: [ORDERED_LIST],\n nodes: featureProviderMap.has('orderedList') ? [] : [ListNode, ListItemNode],\n plugins: featureProviderMap.has('orderedList')\n ? []\n : [\n {\n Component: LexicalListPlugin,\n position: 'normal',\n },\n ],\n slashMenu: {\n groups: [\n slashMenuListGroupWithItems([\n {\n Icon: OrderedListIcon,\n key: 'orderedList',\n keywords: ['ordered list', 'ol'],\n label: ({ i18n }) => {\n return i18n.t('lexical:orderedList:label')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined)\n },\n },\n ]),\n ],\n },\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n }\n})\n", "'use client'\nimport React from 'react'\n\nexport const OrderedListIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.89284 12.479C5.89284 13.368 5.26284 13.788 4.38084 14.236C3.75084 14.558 3.43584 14.789 3.40784 15.062H5.89984V16H2.06384V15.573C2.06384 14.523 2.92484 13.935 3.66684 13.501C4.38084 13.088 4.75184 12.878 4.75184 12.458C4.75184 12.08 4.52084 11.835 4.06584 11.835C3.58984 11.835 3.30984 12.199 3.28184 12.654H2.11284C2.18984 11.681 2.87584 10.918 4.07284 10.918C5.15784 10.918 5.89284 11.555 5.89284 12.479Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M2.68608 4.535V3.737C3.54008 3.737 3.90408 3.513 4.02308 2.995H4.89108V8H3.68008L3.68008 4.535H2.68608Z\"\n fill=\"currentColor\"\n />\n <path d=\"M8 15L17 15\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M8 10L17 10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M8 5L17 5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n)\n", "import type { ElementTransformer } from '@lexical/markdown'\n\nimport { $isListNode, ListItemNode, ListNode } from '@lexical/list'\n\nimport { listExport, listReplace } from '../shared/markdown.js'\n\nexport const ORDERED_LIST: ElementTransformer = {\n type: 'element',\n dependencies: [ListNode, ListItemNode],\n export: (node, exportChildren) => {\n return $isListNode(node) ? listExport(node, exportChildren, 0) : null\n },\n regExp: /^(\\s*)(\\d+)\\.\\s/,\n replace: listReplace('number'),\n}\n", "'use client'\n\nimport { $isListNode, INSERT_UNORDERED_LIST_COMMAND, ListItemNode, ListNode } from '@lexical/list'\nimport { $isRangeSelection } from 'lexical'\n\nimport type { ToolbarGroup } from '../../../toolbars/types.js'\n\nimport { UnorderedListIcon } from '../../../../lexical/ui/icons/UnorderedList/index.js'\nimport { createClientFeature } from '../../../../utilities/createClientFeature.js'\nimport { toolbarTextDropdownGroupWithItems } from '../../../shared/toolbar/textDropdownGroup.js'\nimport { LexicalListPlugin } from '../../plugin/index.js'\nimport { slashMenuListGroupWithItems } from '../../shared/slashMenuListGroup.js'\nimport { UNORDERED_LIST } from '../markdownTransformer.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarTextDropdownGroupWithItems([\n {\n ChildComponent: UnorderedListIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isListNode(node) && node.getListType() === 'bullet') {\n continue\n }\n\n const parent = node.getParent()\n\n if ($isListNode(parent) && parent.getListType() === 'bullet') {\n continue\n }\n\n const parentParent = parent?.getParent()\n // Example scenario: Node = textNode, parent = listItemNode, parentParent = listNode\n if ($isListNode(parentParent) && parentParent.getListType() === 'bullet') {\n continue\n }\n\n return false\n }\n return true\n },\n key: 'unorderedList',\n label: ({ i18n }) => {\n return i18n.t('lexical:unorderedList:label')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined)\n },\n order: 11,\n },\n ]),\n]\n\nexport const UnorderedListFeatureClient = createClientFeature({\n markdownTransformers: [UNORDERED_LIST],\n nodes: [ListNode, ListItemNode],\n plugins: [\n {\n Component: LexicalListPlugin,\n position: 'normal',\n },\n ],\n slashMenu: {\n groups: [\n slashMenuListGroupWithItems([\n {\n Icon: UnorderedListIcon,\n key: 'unorderedList',\n keywords: ['unordered list', 'ul'],\n label: ({ i18n }) => {\n return i18n.t('lexical:unorderedList:label')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined)\n },\n },\n ]),\n ],\n },\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const UnorderedListIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"4\" cy=\"5\" fill=\"currentColor\" r=\"1.15\" stroke=\"currentColor\" strokeWidth=\"0.3\" />\n <circle cx=\"4\" cy=\"10\" fill=\"currentColor\" r=\"1.15\" stroke=\"currentColor\" strokeWidth=\"0.3\" />\n <circle cx=\"4\" cy=\"15\" fill=\"currentColor\" r=\"1.15\" stroke=\"currentColor\" strokeWidth=\"0.3\" />\n <path d=\"M17 5H7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M17 10H7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M17 15H7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n)\n", "import type { ElementTransformer } from '@lexical/markdown'\n\nimport { $isListNode, ListItemNode, ListNode } from '@lexical/list'\n\nimport { listExport, listReplace } from '../shared/markdown.js'\n\nexport const UNORDERED_LIST: ElementTransformer = {\n type: 'element',\n dependencies: [ListNode, ListItemNode],\n export: (node, exportChildren) => {\n return $isListNode(node) ? listExport(node, exportChildren, 0) : null\n },\n regExp: /^(\\s*)[-*+]\\s/,\n replace: listReplace('bullet'),\n}\n", "import type { EditorConfig, LexicalNode, NodeKey, SerializedLexicalNode, Spread } from 'lexical'\nimport type { JSX } from 'react'\n\nimport { addClassNamesToElement } from '@lexical/utils'\nimport { DecoratorNode } from 'lexical'\nimport * as React from 'react'\n\nexport type UnknownConvertedNodeData = {\n nodeData: unknown\n nodeType: string\n}\n\nexport type SerializedUnknownConvertedNode = Spread<\n {\n data: UnknownConvertedNodeData\n },\n SerializedLexicalNode\n>\n\nconst Component = React.lazy(() =>\n import('./Component.js').then((module) => ({\n default: module.UnknownConvertedNodeComponent,\n })),\n)\n\n/** @noInheritDoc */\nexport class UnknownConvertedNode extends DecoratorNode<JSX.Element> {\n __data: UnknownConvertedNodeData\n\n constructor({ data, key }: { data: UnknownConvertedNodeData; key?: NodeKey }) {\n super(key)\n this.__data = data\n }\n\n static clone(node: UnknownConvertedNode): UnknownConvertedNode {\n return new UnknownConvertedNode({\n data: node.__data,\n key: node.__key,\n })\n }\n\n static getType(): string {\n return 'unknownConverted'\n }\n\n static importJSON(serializedNode: SerializedUnknownConvertedNode): UnknownConvertedNode {\n const node = $createUnknownConvertedNode({ data: serializedNode.data })\n return node\n }\n\n canInsertTextAfter(): true {\n return true\n }\n\n canInsertTextBefore(): true {\n return true\n }\n\n createDOM(config: EditorConfig): HTMLElement {\n const element = document.createElement('span')\n addClassNamesToElement(element, 'unknownConverted')\n return element\n }\n\n decorate(): JSX.Element | null {\n return <Component data={this.__data} />\n }\n\n exportJSON(): SerializedUnknownConvertedNode {\n return {\n type: this.getType(),\n data: this.__data,\n version: 1,\n }\n }\n\n // Mutation\n\n isInline(): boolean {\n return true\n }\n\n updateDOM(prevNode: UnknownConvertedNode, dom: HTMLElement): boolean {\n return false\n }\n}\n\nexport function $createUnknownConvertedNode({\n data,\n}: {\n data: UnknownConvertedNodeData\n}): UnknownConvertedNode {\n return new UnknownConvertedNode({\n data,\n })\n}\n\nexport function $isUnknownConvertedNode(\n node: LexicalNode | null | undefined,\n): node is UnknownConvertedNode {\n return node instanceof UnknownConvertedNode\n}\n", "'use client'\n\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { UnknownConvertedNode } from './nodes/unknownConvertedNode/index.js'\n\nexport const LexicalPluginToLexicalFeatureClient = createClientFeature(() => {\n return {\n nodes: [UnknownConvertedNode],\n }\n})\n", "import type { EditorConfig, LexicalNode, NodeKey, SerializedLexicalNode, Spread } from 'lexical'\nimport type { JSX } from 'react'\n\nimport { addClassNamesToElement } from '@lexical/utils'\nimport { DecoratorNode } from 'lexical'\nimport * as React from 'react'\n\nexport type UnknownConvertedNodeData = {\n nodeData: unknown\n nodeType: string\n}\n\nexport type SerializedUnknownConvertedNode = Spread<\n {\n data: UnknownConvertedNodeData\n },\n SerializedLexicalNode\n>\n\nconst Component = React.lazy(() =>\n import('./Component.js').then((module) => ({\n default: module.UnknownConvertedNodeComponent,\n })),\n)\n\n/** @noInheritDoc */\nexport class UnknownConvertedNode extends DecoratorNode<JSX.Element> {\n __data: UnknownConvertedNodeData\n\n constructor({ data, key }: { data: UnknownConvertedNodeData; key?: NodeKey }) {\n super(key)\n this.__data = data\n }\n\n static clone(node: UnknownConvertedNode): UnknownConvertedNode {\n return new UnknownConvertedNode({\n data: node.__data,\n key: node.__key,\n })\n }\n\n static getType(): string {\n return 'unknownConverted'\n }\n\n static importJSON(serializedNode: SerializedUnknownConvertedNode): UnknownConvertedNode {\n const node = $createUnknownConvertedNode({ data: serializedNode.data })\n return node\n }\n\n canInsertTextAfter(): true {\n return true\n }\n\n canInsertTextBefore(): true {\n return true\n }\n\n createDOM(config: EditorConfig): HTMLElement {\n const element = document.createElement('span')\n addClassNamesToElement(element, 'unknownConverted')\n return element\n }\n\n decorate(): JSX.Element | null {\n return <Component data={this.__data} />\n }\n\n exportJSON(): SerializedUnknownConvertedNode {\n return {\n type: this.getType(),\n data: this.__data,\n version: 1,\n }\n }\n\n // Mutation\n\n isInline(): boolean {\n return true\n }\n\n updateDOM(prevNode: UnknownConvertedNode, dom: HTMLElement): boolean {\n return false\n }\n}\n\nexport function $createUnknownConvertedNode({\n data,\n}: {\n data: UnknownConvertedNodeData\n}): UnknownConvertedNode {\n return new UnknownConvertedNode({\n data,\n })\n}\n\nexport function $isUnknownConvertedNode(\n node: LexicalNode | null | undefined,\n): node is UnknownConvertedNode {\n return node instanceof UnknownConvertedNode\n}\n", "'use client'\n\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { UnknownConvertedNode } from './nodes/unknownConvertedNode/index.js'\n\nexport const SlateToLexicalFeatureClient = createClientFeature(({ clientFunctions }) => {\n return {\n nodes: [UnknownConvertedNode],\n }\n})\n", "'use client'\n\nimport { $setBlocksType } from '@lexical/selection'\nimport { $createParagraphNode, $getSelection, $isParagraphNode, $isRangeSelection } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { TextIcon } from '../../../lexical/ui/icons/Text/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { slashMenuBasicGroupWithItems } from '../../shared/slashMenu/basicGroup.js'\nimport { toolbarTextDropdownGroupWithItems } from '../../shared/toolbar/textDropdownGroup.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarTextDropdownGroupWithItems([\n {\n ChildComponent: TextIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if (!$isParagraphNode(node) && !$isParagraphNode(node.getParent())) {\n return false\n }\n }\n return true\n },\n key: 'paragraph',\n label: ({ i18n }) => {\n return i18n.t('lexical:paragraph:label2')\n },\n onSelect: ({ editor }) => {\n editor.update(() => {\n const selection = $getSelection()\n $setBlocksType(selection, () => $createParagraphNode())\n })\n },\n order: 1,\n },\n ]),\n]\n\nexport const ParagraphFeatureClient = createClientFeature({\n slashMenu: {\n groups: [\n slashMenuBasicGroupWithItems([\n {\n Icon: TextIcon,\n key: 'paragraph',\n keywords: ['normal', 'paragraph', 'p', 'text'],\n label: ({ i18n }) => {\n return i18n.t('lexical:paragraph:label')\n },\n onSelect: ({ editor }) => {\n editor.update(() => {\n const selection = $getSelection()\n $setBlocksType(selection, () => $createParagraphNode())\n })\n },\n },\n ]),\n ],\n },\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n", "'use client'\n\nimport { $isNodeSelection } from 'lexical'\n\nimport type { RelationshipFeatureProps } from '../server/index.js'\n\nimport { RelationshipIcon } from '../../../lexical/ui/icons/Relationship/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { slashMenuBasicGroupWithItems } from '../../shared/slashMenu/basicGroup.js'\nimport { toolbarAddDropdownGroupWithItems } from '../../shared/toolbar/addDropdownGroup.js'\nimport { INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND } from './drawer/commands.js'\nimport { $isRelationshipNode, RelationshipNode } from './nodes/RelationshipNode.js'\nimport { RelationshipPlugin } from './plugins/index.js'\n\nexport const RelationshipFeatureClient = createClientFeature<RelationshipFeatureProps>({\n nodes: [RelationshipNode],\n plugins: [\n {\n Component: RelationshipPlugin,\n position: 'normal',\n },\n ],\n slashMenu: {\n groups: [\n slashMenuBasicGroupWithItems([\n {\n Icon: RelationshipIcon,\n key: 'relationship',\n keywords: ['relationship', 'relation', 'rel'],\n label: ({ i18n }) => {\n return i18n.t('lexical:relationship:label')\n },\n onSelect: ({ editor }) => {\n // dispatch INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND\n editor.dispatchCommand(INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND, {\n replace: false,\n })\n },\n },\n ]),\n ],\n },\n toolbarFixed: {\n groups: [\n toolbarAddDropdownGroupWithItems([\n {\n ChildComponent: RelationshipIcon,\n isActive: ({ selection }) => {\n if (!$isNodeSelection(selection) || !selection.getNodes().length) {\n return false\n }\n\n const firstNode = selection.getNodes()[0]\n return $isRelationshipNode(firstNode)\n },\n key: 'relationship',\n label: ({ i18n }) => {\n return i18n.t('lexical:relationship:label')\n },\n onSelect: ({ editor }) => {\n // dispatch INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND\n editor.dispatchCommand(INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND, {\n replace: false,\n })\n },\n },\n ]),\n ],\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const RelationshipIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_4397_10817)\">\n <path\n d=\"M7.75 12.25L15.25 4.75M15.25 4.75H11.5M15.25 4.75V8.5M13 11.5V13.75C13 14.5784 12.3284 15.25 11.5 15.25H6.25C5.42157 15.25 4.75 14.5784 4.75 13.75V8.5C4.75 7.67157 5.42157 7 6.25 7H8.5\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_4397_10817\">\n <rect fill=\"currentColor\" height=\"12\" transform=\"translate(4 4)\" width=\"12\" />\n </clipPath>\n </defs>\n </svg>\n)\n", "'use client'\nimport type { LexicalCommand } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $insertNodeToNearestRoot } from '@lexical/utils'\nimport { useConfig } from '@payloadcms/ui'\nimport {\n $getPreviousSelection,\n $getSelection,\n $isParagraphNode,\n $isRangeSelection,\n COMMAND_PRIORITY_EDITOR,\n createCommand,\n} from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../../typesClient.js'\nimport type { RelationshipFeatureProps } from '../../server/index.js'\nimport type { RelationshipData } from '../../server/nodes/RelationshipNode.js'\n\nimport { RelationshipDrawer } from '../drawer/index.js'\nimport { $createRelationshipNode, RelationshipNode } from '../nodes/RelationshipNode.js'\n\nexport const INSERT_RELATIONSHIP_COMMAND: LexicalCommand<RelationshipData> = createCommand(\n 'INSERT_RELATIONSHIP_COMMAND',\n)\n\nexport const RelationshipPlugin: PluginComponent<RelationshipFeatureProps> = ({ clientProps }) => {\n const [editor] = useLexicalComposerContext()\n const {\n config: { collections },\n } = useConfig()\n\n let enabledRelations: string[] = null\n\n if (clientProps?.enabledCollections) {\n enabledRelations = clientProps?.enabledCollections\n } else if (clientProps?.disabledCollections) {\n enabledRelations = collections\n .filter(({ slug }) => !clientProps?.disabledCollections?.includes(slug))\n .map(({ slug }) => slug)\n }\n\n useEffect(() => {\n if (!editor.hasNodes([RelationshipNode])) {\n throw new Error('RelationshipPlugin: RelationshipNode not registered on editor')\n }\n\n return editor.registerCommand<RelationshipData>(\n INSERT_RELATIONSHIP_COMMAND,\n (payload) => {\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n const relationshipNode = $createRelationshipNode(payload)\n // Insert relationship node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(relationshipNode)\n\n const { focus } = selection\n const focusNode = focus.getNode()\n\n // First, delete currently selected node if it's an empty paragraph and if there are sufficient\n // paragraph nodes (more than 1) left in the parent node, so that we don't \"trap\" the user\n if (\n $isParagraphNode(focusNode) &&\n focusNode.getTextContentSize() === 0 &&\n focusNode\n .getParent()\n .getChildren()\n .filter((node) => $isParagraphNode(node)).length > 1\n ) {\n focusNode.remove()\n }\n }\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n )\n }, [editor])\n\n return <RelationshipDrawer enabledCollectionSlugs={enabledRelations} />\n}\n", "'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useListDrawer } from '@payloadcms/ui'\nimport { $getNodeByKey, COMMAND_PRIORITY_EDITOR } from 'lexical'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { $createRelationshipNode } from '../nodes/RelationshipNode.js'\nimport { INSERT_RELATIONSHIP_COMMAND } from '../plugins/index.js'\nimport { EnabledRelationshipsCondition } from '../utils/EnabledRelationshipsCondition.js'\nimport { INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND } from './commands.js'\n\nconst insertRelationship = ({\n editor,\n relationTo,\n replaceNodeKey,\n value,\n}: {\n editor: LexicalEditor\n relationTo: string\n replaceNodeKey: null | string\n value: number | string\n}) => {\n if (!replaceNodeKey) {\n editor.dispatchCommand(INSERT_RELATIONSHIP_COMMAND, {\n relationTo,\n value,\n })\n } else {\n editor.update(() => {\n const node = $getNodeByKey(replaceNodeKey)\n if (node) {\n node.replace($createRelationshipNode({ relationTo, value }))\n }\n })\n }\n}\n\ntype Props = {\n enabledCollectionSlugs: null | string[]\n}\n\nconst RelationshipDrawerComponent: React.FC<Props> = ({ enabledCollectionSlugs }) => {\n const [editor] = useLexicalComposerContext()\n const [selectedCollectionSlug, setSelectedCollectionSlug] = useState(\n () => enabledCollectionSlugs[0],\n )\n const [replaceNodeKey, setReplaceNodeKey] = useState<null | string>(null)\n\n const [ListDrawer, ListDrawerToggler, { closeDrawer, isDrawerOpen, openDrawer }] = useListDrawer({\n collectionSlugs: enabledCollectionSlugs,\n selectedCollection: selectedCollectionSlug,\n })\n\n useEffect(() => {\n return editor.registerCommand<{\n replace: { nodeKey: string } | false\n }>(\n INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND,\n (payload) => {\n setReplaceNodeKey(payload?.replace ? payload?.replace.nodeKey : null)\n openDrawer()\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n )\n }, [editor, openDrawer])\n\n const onSelect = useCallback(\n ({ collectionSlug, docID }) => {\n insertRelationship({\n editor,\n relationTo: collectionSlug,\n replaceNodeKey,\n value: docID,\n })\n closeDrawer()\n },\n [editor, closeDrawer, replaceNodeKey],\n )\n\n useEffect(() => {\n // always reset back to first option\n // TODO: this is not working, see the ListDrawer component\n setSelectedCollectionSlug(enabledCollectionSlugs[0])\n }, [isDrawerOpen, enabledCollectionSlugs])\n\n return <ListDrawer onSelect={onSelect} />\n}\n\nexport const RelationshipDrawer = (props: Props): React.ReactNode => {\n return props?.enabledCollectionSlugs?.length > 0 ? ( // If enabledCollectionSlugs it overrides what EnabledRelationshipsCondition is doing\n <RelationshipDrawerComponent {...props} />\n ) : (\n <EnabledRelationshipsCondition {...props}>\n <RelationshipDrawerComponent {...props} />\n </EnabledRelationshipsCondition>\n )\n}\n", "'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useScrollInfo, useThrottledEffect, useTranslation } from '@payloadcms/ui'\nimport * as React from 'react'\nimport { useMemo } from 'react'\n\nimport type { EditorConfigContextType } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport type { SanitizedClientEditorConfig } from '../../../../../lexical/config/types.js'\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../../types.js'\nimport type { FixedToolbarFeatureProps } from '../../server/index.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { ToolbarButton } from '../../../shared/ToolbarButton/index.js'\nimport { ToolbarDropdown } from '../../../shared/ToolbarDropdown/index.js'\nimport './index.scss'\n\nfunction ButtonGroupItem({\n anchorElem,\n editor,\n item,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n item: ToolbarGroupItem\n}): React.ReactNode {\n if (item.Component) {\n return (\n item?.Component && (\n <item.Component anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n )\n }\n\n return (\n <ToolbarButton editor={editor} item={item} key={item.key}>\n {item?.ChildComponent && <item.ChildComponent />}\n </ToolbarButton>\n )\n}\n\nfunction ToolbarGroupComponent({\n anchorElem,\n editor,\n editorConfig,\n group,\n index,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n editorConfig: SanitizedClientEditorConfig\n group: ToolbarGroup\n index: number\n}): React.ReactNode {\n const { i18n } = useTranslation()\n const {\n field: { richTextComponentMap },\n } = useEditorConfigContext()\n const [dropdownLabel, setDropdownLabel] = React.useState<null | string>(null)\n const [DropdownIcon, setDropdownIcon] = React.useState<React.FC | null>(null)\n\n React.useEffect(() => {\n if (group?.type === 'dropdown' && group.items.length && group.ChildComponent) {\n setDropdownIcon(() => group.ChildComponent)\n } else {\n setDropdownIcon(null)\n }\n }, [group])\n\n const onActiveChange = ({ activeItems }: { activeItems: ToolbarGroupItem[] }) => {\n if (!activeItems.length) {\n if (group?.type === 'dropdown' && group.items.length && group.ChildComponent) {\n setDropdownIcon(() => group.ChildComponent)\n setDropdownLabel(null)\n } else {\n setDropdownIcon(null)\n setDropdownLabel(null)\n }\n return\n }\n const item = activeItems[0]\n\n let label = item.key\n if (item.label) {\n label =\n typeof item.label === 'function' ? item.label({ i18n, richTextComponentMap }) : item.label\n }\n // Crop title to max. 25 characters\n if (label.length > 25) {\n label = label.substring(0, 25) + '...'\n }\n setDropdownLabel(label)\n setDropdownIcon(() => item.ChildComponent)\n }\n\n return (\n <div className={`fixed-toolbar__group fixed-toolbar__group-${group.key}`} key={group.key}>\n {group.type === 'dropdown' &&\n group.items.length &&\n (DropdownIcon ? (\n <ToolbarDropdown\n Icon={DropdownIcon}\n anchorElem={anchorElem}\n editor={editor}\n groupKey={group.key}\n items={group.items}\n itemsContainerClassNames={['fixed-toolbar__dropdown-items']}\n label={dropdownLabel}\n maxActiveItems={1}\n onActiveChange={onActiveChange}\n />\n ) : (\n <ToolbarDropdown\n anchorElem={anchorElem}\n editor={editor}\n groupKey={group.key}\n items={group.items}\n itemsContainerClassNames={['fixed-toolbar__dropdown-items']}\n label={dropdownLabel}\n maxActiveItems={1}\n onActiveChange={onActiveChange}\n />\n ))}\n {group.type === 'buttons' &&\n group.items.length &&\n group.items.map((item) => {\n return (\n <ButtonGroupItem anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n })}\n {index < editorConfig.features.toolbarFixed?.groups.length - 1 && <div className=\"divider\" />}\n </div>\n )\n}\n\nfunction FixedToolbar({\n anchorElem,\n clientProps,\n editor,\n editorConfig,\n parentWithFixedToolbar,\n}: {\n anchorElem: HTMLElement\n clientProps?: FixedToolbarFeatureProps\n editor: LexicalEditor\n editorConfig: SanitizedClientEditorConfig\n parentWithFixedToolbar: EditorConfigContextType | false\n}): React.ReactNode {\n const currentToolbarRef = React.useRef<HTMLDivElement>(null)\n\n const { y } = useScrollInfo()\n\n // Memoize the parent toolbar element\n const parentToolbarElem = useMemo(() => {\n if (!parentWithFixedToolbar || clientProps?.disableIfParentHasFixedToolbar) {\n return null\n }\n\n const parentEditorElem = parentWithFixedToolbar.editorContainerRef.current\n let sibling = parentEditorElem.previousElementSibling\n while (sibling) {\n if (sibling.classList.contains('fixed-toolbar')) {\n return sibling\n }\n sibling = sibling.previousElementSibling\n }\n return null\n }, [clientProps?.disableIfParentHasFixedToolbar, parentWithFixedToolbar])\n\n useThrottledEffect(\n () => {\n if (!parentToolbarElem) {\n // this also checks for clientProps?.disableIfParentHasFixedToolbar indirectly, see the parentToolbarElem useMemo\n return\n }\n const currentToolbarElem = currentToolbarRef.current\n if (!currentToolbarElem) {\n return\n }\n\n const currentRect = currentToolbarElem.getBoundingClientRect()\n const parentRect = parentToolbarElem.getBoundingClientRect()\n\n // we only need to check for vertical overlap\n const overlapping = !(\n currentRect.bottom < parentRect.top || currentRect.top > parentRect.bottom\n )\n\n if (overlapping) {\n currentToolbarRef.current.className = 'fixed-toolbar fixed-toolbar--overlapping'\n parentToolbarElem.className = 'fixed-toolbar fixed-toolbar--hide'\n } else {\n if (!currentToolbarRef.current.classList.contains('fixed-toolbar--overlapping')) {\n return\n }\n currentToolbarRef.current.className = 'fixed-toolbar'\n parentToolbarElem.className = 'fixed-toolbar'\n }\n },\n 50,\n [currentToolbarRef, parentToolbarElem, y],\n )\n\n return (\n <div\n className=\"fixed-toolbar\"\n onFocus={(event) => {\n // Prevent other focus events being triggered. Otherwise, if this was to be clicked while in a child editor,\n // the parent editor will be focused, and the child editor will lose focus.\n event.stopPropagation()\n }}\n ref={currentToolbarRef}\n >\n {editor.isEditable() && (\n <React.Fragment>\n {editorConfig?.features &&\n editorConfig.features?.toolbarFixed?.groups.map((group, i) => {\n return (\n <ToolbarGroupComponent\n anchorElem={anchorElem}\n editor={editor}\n editorConfig={editorConfig}\n group={group}\n index={i}\n key={group.key}\n />\n )\n })}\n </React.Fragment>\n )}\n </div>\n )\n}\n\nconst getParentEditorWithFixedToolbar = (\n editorConfigContext: EditorConfigContextType,\n): EditorConfigContextType | false => {\n if (editorConfigContext.parentEditor?.editorConfig) {\n if (editorConfigContext.parentEditor?.editorConfig.resolvedFeatureMap.has('toolbarFixed')) {\n return editorConfigContext.parentEditor\n } else {\n if (editorConfigContext.parentEditor) {\n return getParentEditorWithFixedToolbar(editorConfigContext.parentEditor)\n }\n }\n }\n return false\n}\n\nexport const FixedToolbarPlugin: PluginComponentWithAnchor<FixedToolbarFeatureProps> = ({\n anchorElem,\n clientProps,\n}) => {\n const [currentEditor] = useLexicalComposerContext()\n const editorConfigContext = useEditorConfigContext()\n\n const { editorConfig: currentEditorConfig } = editorConfigContext\n\n const editor = clientProps.applyToFocusedEditor\n ? editorConfigContext.focusedEditor?.editor || currentEditor\n : currentEditor\n\n const editorConfig = clientProps.applyToFocusedEditor\n ? editorConfigContext.focusedEditor?.editorConfig || currentEditorConfig\n : currentEditorConfig\n\n const parentWithFixedToolbar = getParentEditorWithFixedToolbar(editorConfigContext)\n\n if (clientProps?.disableIfParentHasFixedToolbar) {\n if (parentWithFixedToolbar) {\n return null\n }\n }\n\n if (!editorConfig?.features?.toolbarFixed?.groups?.length) {\n return null\n }\n\n return (\n <FixedToolbar\n anchorElem={anchorElem}\n editor={editor}\n editorConfig={editorConfig}\n parentWithFixedToolbar={parentWithFixedToolbar}\n />\n )\n}\n", "'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { mergeRegister } from '@lexical/utils'\nimport { $getSelection } from 'lexical'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type { ToolbarGroupItem } from '../../types.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport './index.scss'\n\nconst baseClass = 'toolbar-popup__button'\n\nexport const ToolbarButton = ({\n children,\n editor,\n item,\n}: {\n children: React.JSX.Element\n editor: LexicalEditor\n item: ToolbarGroupItem\n}) => {\n const [enabled, setEnabled] = useState<boolean>(true)\n const [active, setActive] = useState<boolean>(false)\n const [className, setClassName] = useState<string>(baseClass)\n const editorConfigContext = useEditorConfigContext()\n\n const updateStates = useCallback(() => {\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n if (item.isActive) {\n const isActive = item.isActive({ editor, editorConfigContext, selection })\n if (active !== isActive) {\n setActive(isActive)\n }\n }\n if (item.isEnabled) {\n const isEnabled = item.isEnabled({ editor, editorConfigContext, selection })\n if (enabled !== isEnabled) {\n setEnabled(isEnabled)\n }\n }\n })\n }, [active, editor, editorConfigContext, enabled, item])\n\n useEffect(() => {\n updateStates()\n }, [updateStates])\n\n useEffect(() => {\n document.addEventListener('mouseup', updateStates)\n return () => {\n document.removeEventListener('mouseup', updateStates)\n }\n }, [updateStates])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n updateStates()\n }),\n )\n }, [editor, updateStates])\n\n useEffect(() => {\n setClassName(\n [\n baseClass,\n enabled === false ? 'disabled' : '',\n active ? 'active' : '',\n item?.key ? `${baseClass}-` + item.key : '',\n ]\n .filter(Boolean)\n .join(' '),\n )\n }, [enabled, active, className, item.key])\n\n return (\n <button\n className={className}\n onClick={() => {\n if (enabled !== false) {\n editor._updateTags = new Set([...editor._updateTags, 'toolbar']) // without setting the tags, our onSelect will not be able to trigger our onChange as focus onChanges are ignored.\n\n editor.focus(() => {\n // We need to wrap the onSelect in the callback, so the editor is properly focused before the onSelect is called.\n item.onSelect({\n editor,\n isActive: active,\n })\n })\n\n return true\n }\n }}\n onMouseDown={(e) => {\n // This fixes a bug where you are unable to click the button if you are in a NESTED editor (editor in blocks field in editor).\n // Thus only happens if you click on the SVG of the button. Clicking on the outside works. Related issue: https://github.com/payloadcms/payload/issues/4025\n // TODO: Find out why exactly it happens and why e.preventDefault() on the mouseDown fixes it. Write that down here, or potentially fix a root cause, if there is any.\n e.preventDefault()\n }}\n type=\"button\"\n >\n {children}\n </button>\n )\n}\n", "'use client'\nimport React, { useCallback, useEffect } from 'react'\n\nconst baseClass = 'toolbar-popup__dropdown'\n\nimport type { LexicalEditor } from 'lexical'\n\nimport { mergeRegister } from '@lexical/utils'\nimport { useTranslation } from '@payloadcms/ui'\nimport { $getSelection } from 'lexical'\n\nimport type { ToolbarGroupItem } from '../../types.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { DropDown, DropDownItem } from './DropDown.js'\nimport './index.scss'\n\nconst ToolbarItem = ({\n active,\n anchorElem,\n editor,\n enabled,\n item,\n}: {\n active?: boolean\n anchorElem: HTMLElement\n editor: LexicalEditor\n enabled?: boolean\n item: ToolbarGroupItem\n}) => {\n const { i18n } = useTranslation()\n const {\n field: { richTextComponentMap },\n } = useEditorConfigContext()\n\n if (item.Component) {\n return (\n item?.Component && (\n <item.Component\n active={active}\n anchorElem={anchorElem}\n editor={editor}\n enabled={enabled}\n item={item}\n key={item.key}\n />\n )\n )\n }\n\n let title = item.key\n if (item.label) {\n title =\n typeof item.label === 'function' ? item.label({ i18n, richTextComponentMap }) : item.label\n }\n // Crop title to max. 25 characters\n if (title.length > 25) {\n title = title.substring(0, 25) + '...'\n }\n\n return (\n <DropDownItem active={active} editor={editor} enabled={enabled} item={item} key={item.key}>\n {item?.ChildComponent && <item.ChildComponent />}\n <span className=\"text\">{title}</span>\n </DropDownItem>\n )\n}\n\nexport const ToolbarDropdown = ({\n Icon,\n anchorElem,\n classNames,\n editor,\n groupKey,\n items,\n itemsContainerClassNames,\n label,\n maxActiveItems,\n onActiveChange,\n}: {\n Icon?: React.FC\n anchorElem: HTMLElement\n classNames?: string[]\n editor: LexicalEditor\n groupKey: string\n items: ToolbarGroupItem[]\n itemsContainerClassNames?: string[]\n label?: string\n /**\n * Maximum number of active items allowed. This is a performance optimization to prevent\n * unnecessary item active checks when the maximum number of active items is reached.\n */\n maxActiveItems?: number\n onActiveChange?: ({ activeItems }: { activeItems: ToolbarGroupItem[] }) => void\n}) => {\n const [activeItemKeys, setActiveItemKeys] = React.useState<string[]>([])\n const [enabledItemKeys, setEnabledItemKeys] = React.useState<string[]>([])\n const editorConfigContext = useEditorConfigContext()\n\n const updateStates = useCallback(() => {\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n\n const _activeItemKeys: string[] = []\n const _activeItems: ToolbarGroupItem[] = []\n const _enabledItemKeys: string[] = []\n\n for (const item of items) {\n if (item.isActive && (!maxActiveItems || _activeItemKeys.length < maxActiveItems)) {\n const isActive = item.isActive({ editor, editorConfigContext, selection })\n if (isActive) {\n _activeItemKeys.push(item.key)\n _activeItems.push(item)\n }\n }\n if (item.isEnabled) {\n const isEnabled = item.isEnabled({ editor, editorConfigContext, selection })\n if (isEnabled) {\n _enabledItemKeys.push(item.key)\n }\n } else {\n _enabledItemKeys.push(item.key)\n }\n }\n setActiveItemKeys(_activeItemKeys)\n setEnabledItemKeys(_enabledItemKeys)\n\n if (onActiveChange) {\n onActiveChange({ activeItems: _activeItems })\n }\n })\n }, [editor, editorConfigContext, items, maxActiveItems, onActiveChange])\n\n useEffect(() => {\n updateStates()\n }, [updateStates])\n\n useEffect(() => {\n document.addEventListener('mouseup', updateStates)\n return () => {\n document.removeEventListener('mouseup', updateStates)\n }\n }, [updateStates])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n updateStates()\n }),\n )\n }, [editor, updateStates])\n\n return (\n <DropDown\n Icon={Icon}\n buttonAriaLabel={`${groupKey} dropdown`}\n buttonClassName={[baseClass, `${baseClass}-${groupKey}`, ...(classNames || [])]\n .filter(Boolean)\n .join(' ')}\n itemsContainerClassNames={[`${baseClass}-items`, ...(itemsContainerClassNames || [])]}\n key={groupKey}\n label={label}\n >\n {items.length &&\n items.map((item) => {\n return (\n <ToolbarItem\n active={activeItemKeys.includes(item.key)}\n anchorElem={anchorElem}\n editor={editor}\n enabled={enabledItemKeys.includes(item.key)}\n item={item}\n key={item.key}\n />\n )\n })}\n </DropDown>\n )\n}\n", "'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport React, { type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { ToolbarGroupItem } from '../../types.js'\n\nconst baseClass = 'toolbar-popup__dropdown-item'\n\ninterface DropDownContextType {\n registerItem: (ref: React.RefObject<HTMLButtonElement | null>) => void\n}\n\nconst DropDownContext = React.createContext<DropDownContextType | null>(null)\n\nexport function DropDownItem({\n active,\n children,\n editor,\n enabled,\n item,\n title,\n}: {\n active?: boolean\n children: React.ReactNode\n editor: LexicalEditor\n enabled?: boolean\n item: ToolbarGroupItem\n title?: string\n}): React.ReactNode {\n const [className, setClassName] = useState<string>(baseClass)\n\n useEffect(() => {\n setClassName(\n [\n baseClass,\n enabled === false ? 'disabled' : '',\n active ? 'active' : '',\n item?.key ? `${baseClass}-${item.key}` : '',\n ]\n .filter(Boolean)\n .join(' '),\n )\n }, [enabled, active, className, item.key])\n\n const ref = useRef<HTMLButtonElement>(null)\n\n const dropDownContext = React.useContext(DropDownContext)\n\n if (dropDownContext === null) {\n throw new Error('DropDownItem must be used within a DropDown')\n }\n\n const { registerItem } = dropDownContext\n\n useEffect(() => {\n if (ref?.current != null) {\n registerItem(ref)\n }\n }, [ref, registerItem])\n\n return (\n <button\n className={className}\n onClick={() => {\n if (enabled !== false) {\n editor._updateTags = new Set([...editor._updateTags, 'toolbar']) // without setting the tags, our onSelect will not be able to trigger our onChange as focus onChanges are ignored.\n\n editor.focus(() => {\n // We need to wrap the onSelect in the callback, so the editor is properly focused before the onSelect is called.\n item.onSelect({\n editor,\n isActive: active,\n })\n })\n }\n }}\n onMouseDown={(e) => {\n // This is required for Firefox compatibility. Without it, the dropdown will disappear without the onClick being called.\n // This only happens in Firefox. Must be something about how Firefox handles focus events differently.\n e.preventDefault()\n }}\n ref={ref}\n title={title}\n type=\"button\"\n >\n {children}\n </button>\n )\n}\n\nfunction DropDownItems({\n children,\n dropDownRef,\n itemsContainerClassNames,\n onClose,\n}: {\n children: React.ReactNode\n dropDownRef: React.Ref<HTMLDivElement>\n itemsContainerClassNames?: string[]\n onClose: () => void\n}): React.ReactElement {\n const [items, setItems] = useState<Array<React.RefObject<HTMLButtonElement | null>>>()\n const [highlightedItem, setHighlightedItem] =\n useState<React.RefObject<HTMLButtonElement | null>>()\n\n const registerItem = useCallback(\n (itemRef: React.RefObject<HTMLButtonElement | null>) => {\n setItems((prev) => (prev != null ? [...prev, itemRef] : [itemRef]))\n },\n [setItems],\n )\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>): void => {\n if (items == null) return\n\n const { key } = event\n\n if (['ArrowDown', 'ArrowUp', 'Escape', 'Tab'].includes(key)) {\n event.preventDefault()\n }\n\n if (key === 'Escape' || key === 'Tab') {\n onClose()\n } else if (key === 'ArrowUp') {\n setHighlightedItem((prev) => {\n if (prev == null) return items[0]\n const index = items.indexOf(prev) - 1\n return items[index === -1 ? items.length - 1 : index]\n })\n } else if (key === 'ArrowDown') {\n setHighlightedItem((prev) => {\n if (prev == null) return items[0]\n return items[items.indexOf(prev) + 1]\n })\n }\n }\n\n const contextValue = useMemo(\n () => ({\n registerItem,\n }),\n [registerItem],\n )\n\n useEffect(() => {\n if (items != null && highlightedItem == null) {\n setHighlightedItem(items[0])\n }\n\n if (highlightedItem != null && highlightedItem?.current != null) {\n highlightedItem.current.focus()\n }\n }, [items, highlightedItem])\n\n return (\n <DropDownContext.Provider value={contextValue}>\n <div\n className={(itemsContainerClassNames ?? ['toolbar-popup__dropdown-items']).join(' ')}\n onKeyDown={handleKeyDown}\n ref={dropDownRef}\n >\n {children}\n </div>\n </DropDownContext.Provider>\n )\n}\n\nexport function DropDown({\n Icon,\n buttonAriaLabel,\n buttonClassName,\n children,\n disabled = false,\n itemsContainerClassNames,\n label,\n stopCloseOnClickSelf,\n}: {\n Icon?: React.FC\n buttonAriaLabel?: string\n buttonClassName: string\n children: ReactNode\n disabled?: boolean\n itemsContainerClassNames?: string[]\n label?: string\n stopCloseOnClickSelf?: boolean\n}): React.ReactNode {\n const dropDownRef = useRef<HTMLDivElement>(null)\n const buttonRef = useRef<HTMLButtonElement>(null)\n const [showDropDown, setShowDropDown] = useState(false)\n\n const handleClose = (): void => {\n setShowDropDown(false)\n if (buttonRef?.current != null) {\n buttonRef.current.focus()\n }\n }\n\n useEffect(() => {\n const button = buttonRef.current\n const dropDown = dropDownRef.current\n\n if (showDropDown && button !== null && dropDown !== null) {\n const { left, top } = button.getBoundingClientRect()\n const scrollTopOffset = window.scrollY || document.documentElement.scrollTop\n dropDown.style.top = `${top + scrollTopOffset + button.offsetHeight + 5}px`\n dropDown.style.left = `${Math.min(left - 5, window.innerWidth - dropDown.offsetWidth - 20)}px`\n }\n }, [dropDownRef, buttonRef, showDropDown])\n\n useEffect(() => {\n const button = buttonRef.current\n\n if (button !== null && showDropDown) {\n const handle = (event: MouseEvent): void => {\n const { target } = event\n if (stopCloseOnClickSelf != null) {\n if (dropDownRef.current != null && dropDownRef.current.contains(target as Node)) {\n return\n }\n }\n if (!button.contains(target as Node)) {\n setShowDropDown(false)\n }\n }\n document.addEventListener('click', handle)\n\n return () => {\n document.removeEventListener('click', handle)\n }\n }\n }, [dropDownRef, buttonRef, showDropDown, stopCloseOnClickSelf])\n\n const portal = createPortal(\n <DropDownItems\n dropDownRef={dropDownRef}\n itemsContainerClassNames={itemsContainerClassNames}\n onClose={handleClose}\n >\n {children}\n </DropDownItems>,\n document.body,\n )\n\n return (\n <React.Fragment>\n <button\n aria-label={buttonAriaLabel}\n className={buttonClassName + (showDropDown ? ' active' : '')}\n disabled={disabled}\n onClick={(event) => {\n event.preventDefault()\n setShowDropDown(!showDropDown)\n }}\n onMouseDown={(e) => {\n // This fixes a bug where you are unable to click the button if you are in a NESTED editor (editor in blocks field in editor).\n // Thus only happens if you click on the SVG of the button. Clicking on the outside works. Related issue: https://github.com/payloadcms/payload/issues/4025\n // TODO: Find out why exactly it happens and why e.preventDefault() on the mouseDown fixes it. Write that down here, or potentially fix a root cause, if there is any.\n e.preventDefault()\n }}\n ref={buttonRef}\n type=\"button\"\n >\n {Icon && <Icon />}\n {label && <span className=\"toolbar-popup__dropdown-label\">{label}</span>}\n <i className=\"toolbar-popup__dropdown-caret\" />\n </button>\n\n {showDropDown && <React.Fragment>{portal}</React.Fragment>}\n </React.Fragment>\n )\n}\n", "'use client'\n\nimport type { FixedToolbarFeatureProps } from '../server/index.js'\n\nimport { createClientFeature } from '../../../../utilities/createClientFeature.js'\nimport { FixedToolbarPlugin } from './Toolbar/index.js'\n\nexport const FixedToolbarFeatureClient = createClientFeature<FixedToolbarFeatureProps>({\n plugins: [\n {\n Component: FixedToolbarPlugin,\n position: 'aboveContainer',\n },\n ],\n})\n", "'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n $isTextNode,\n COMMAND_PRIORITY_LOW,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../../types.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { getDOMRangeRect } from '../../../../../lexical/utils/getDOMRangeRect.js'\nimport { setFloatingElemPosition } from '../../../../../lexical/utils/setFloatingElemPosition.js'\nimport { ToolbarButton } from '../../../shared/ToolbarButton/index.js'\nimport { ToolbarDropdown } from '../../../shared/ToolbarDropdown/index.js'\nimport './index.scss'\n\nfunction ButtonGroupItem({\n anchorElem,\n editor,\n item,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n item: ToolbarGroupItem\n}): React.ReactNode {\n if (item.Component) {\n return (\n item?.Component && (\n <item.Component anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n )\n }\n\n return (\n <ToolbarButton editor={editor} item={item} key={item.key}>\n {item?.ChildComponent && <item.ChildComponent />}\n </ToolbarButton>\n )\n}\n\nfunction ToolbarGroupComponent({\n anchorElem,\n editor,\n group,\n index,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n group: ToolbarGroup\n index: number\n}): React.ReactNode {\n const { editorConfig } = useEditorConfigContext()\n\n const [DropdownIcon, setDropdownIcon] = React.useState<React.FC | null>(null)\n\n React.useEffect(() => {\n if (group?.type === 'dropdown' && group.items.length && group.ChildComponent) {\n setDropdownIcon(() => group.ChildComponent)\n } else {\n setDropdownIcon(null)\n }\n }, [group])\n\n const onActiveChange = ({ activeItems }: { activeItems: ToolbarGroupItem[] }) => {\n if (!activeItems.length) {\n if (group?.type === 'dropdown' && group.items.length && group.ChildComponent) {\n setDropdownIcon(() => group.ChildComponent)\n } else {\n setDropdownIcon(null)\n }\n return\n }\n const item = activeItems[0]\n setDropdownIcon(() => item.ChildComponent)\n }\n\n return (\n <div\n className={`inline-toolbar-popup__group inline-toolbar-popup__group-${group.key}`}\n key={group.key}\n >\n {group.type === 'dropdown' &&\n group.items.length &&\n (DropdownIcon ? (\n <ToolbarDropdown\n Icon={DropdownIcon}\n anchorElem={anchorElem}\n editor={editor}\n groupKey={group.key}\n items={group.items}\n maxActiveItems={1}\n onActiveChange={onActiveChange}\n />\n ) : (\n <ToolbarDropdown\n anchorElem={anchorElem}\n editor={editor}\n groupKey={group.key}\n items={group.items}\n maxActiveItems={1}\n onActiveChange={onActiveChange}\n />\n ))}\n {group.type === 'buttons' &&\n group.items.length &&\n group.items.map((item) => {\n return (\n <ButtonGroupItem anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n })}\n {index < editorConfig.features.toolbarInline?.groups.length - 1 && (\n <div className=\"divider\" />\n )}\n </div>\n )\n}\n\nfunction InlineToolbar({\n anchorElem,\n editor,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n}): React.ReactNode {\n const floatingToolbarRef = useRef<HTMLDivElement | null>(null)\n const caretRef = useRef<HTMLDivElement | null>(null)\n\n const { editorConfig } = useEditorConfigContext()\n\n const closeFloatingToolbar = useCallback(() => {\n if (floatingToolbarRef?.current) {\n const isOpacityZero = floatingToolbarRef.current.style.opacity === '0'\n const isPointerEventsNone = floatingToolbarRef.current.style.pointerEvents === 'none'\n\n if (!isOpacityZero) {\n floatingToolbarRef.current.style.opacity = '0'\n }\n if (!isPointerEventsNone) {\n floatingToolbarRef.current.style.pointerEvents = 'none'\n }\n }\n }, [floatingToolbarRef])\n\n const mouseMoveListener = useCallback(\n (e: MouseEvent) => {\n if (floatingToolbarRef?.current && (e.buttons === 1 || e.buttons === 3)) {\n const isOpacityZero = floatingToolbarRef.current.style.opacity === '0'\n const isPointerEventsNone = floatingToolbarRef.current.style.pointerEvents === 'none'\n if (!isOpacityZero || !isPointerEventsNone) {\n // Check if the mouse is not over the popup\n const x = e.clientX\n const y = e.clientY\n const elementUnderMouse = document.elementFromPoint(x, y)\n if (!floatingToolbarRef.current.contains(elementUnderMouse)) {\n // Mouse is not over the target element => not a normal click, but probably a drag\n closeFloatingToolbar()\n }\n }\n }\n },\n [closeFloatingToolbar],\n )\n\n const mouseUpListener = useCallback(() => {\n if (floatingToolbarRef?.current) {\n if (floatingToolbarRef.current.style.opacity !== '1') {\n floatingToolbarRef.current.style.opacity = '1'\n }\n if (floatingToolbarRef.current.style.pointerEvents !== 'auto') {\n floatingToolbarRef.current.style.pointerEvents = 'auto'\n }\n }\n }, [])\n\n useEffect(() => {\n document.addEventListener('mousemove', mouseMoveListener)\n document.addEventListener('mouseup', mouseUpListener)\n\n return () => {\n document.removeEventListener('mousemove', mouseMoveListener)\n document.removeEventListener('mouseup', mouseUpListener)\n }\n }, [floatingToolbarRef, mouseMoveListener, mouseUpListener])\n\n const $updateTextFormatFloatingToolbar = useCallback(() => {\n const selection = $getSelection()\n\n const nativeSelection = window.getSelection()\n\n if (floatingToolbarRef.current === null) {\n return\n }\n\n const possibleLinkEditor = anchorElem.querySelector(':scope > .link-editor')\n const isLinkEditorVisible =\n possibleLinkEditor !== null &&\n 'style' in possibleLinkEditor &&\n possibleLinkEditor?.style?.['opacity'] === '1'\n\n const rootElement = editor.getRootElement()\n if (\n selection !== null &&\n nativeSelection !== null &&\n !nativeSelection.isCollapsed &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n const rangeRect = getDOMRangeRect(nativeSelection, rootElement)\n\n // Position floating toolbar\n const offsetIfFlipped = setFloatingElemPosition({\n alwaysDisplayOnTop: isLinkEditorVisible,\n anchorElem,\n floatingElem: floatingToolbarRef.current,\n horizontalPosition: 'center',\n targetRect: rangeRect,\n })\n\n // Position caret\n if (caretRef.current) {\n setFloatingElemPosition({\n anchorElem: floatingToolbarRef.current,\n anchorFlippedOffset: offsetIfFlipped,\n floatingElem: caretRef.current,\n horizontalOffset: 5,\n horizontalPosition: 'center',\n specialHandlingForCaret: true,\n targetRect: rangeRect,\n verticalGap: 8,\n })\n }\n } else {\n closeFloatingToolbar()\n }\n }, [editor, closeFloatingToolbar, anchorElem])\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement\n\n const update = () => {\n editor.getEditorState().read(() => {\n $updateTextFormatFloatingToolbar()\n })\n }\n\n window.addEventListener('resize', update)\n if (scrollerElem) {\n scrollerElem.addEventListener('scroll', update)\n }\n\n return () => {\n window.removeEventListener('resize', update)\n if (scrollerElem) {\n scrollerElem.removeEventListener('scroll', update)\n }\n }\n }, [editor, $updateTextFormatFloatingToolbar, anchorElem])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n $updateTextFormatFloatingToolbar()\n })\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateTextFormatFloatingToolbar()\n })\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n $updateTextFormatFloatingToolbar()\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, $updateTextFormatFloatingToolbar])\n\n return (\n <div className=\"inline-toolbar-popup\" ref={floatingToolbarRef}>\n <div className=\"caret\" ref={caretRef} />\n {editor.isEditable() && (\n <React.Fragment>\n {editorConfig?.features &&\n editorConfig.features?.toolbarInline?.groups.map((group, i) => {\n return (\n <ToolbarGroupComponent\n anchorElem={anchorElem}\n editor={editor}\n group={group}\n index={i}\n key={group.key}\n />\n )\n })}\n </React.Fragment>\n )}\n </div>\n )\n}\n\nfunction useInlineToolbar(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n): React.ReactElement | null {\n const [isText, setIsText] = useState(false)\n\n const updatePopup = useCallback(() => {\n editor.getEditorState().read(() => {\n // Should not to pop up the floating toolbar when using IME input\n if (editor.isComposing()) {\n return\n }\n const selection = $getSelection()\n const nativeSelection = window.getSelection()\n const rootElement = editor.getRootElement()\n\n if (\n nativeSelection !== null &&\n (!$isRangeSelection(selection) ||\n rootElement === null ||\n !rootElement.contains(nativeSelection.anchorNode))\n ) {\n setIsText(false)\n return\n }\n\n if (!$isRangeSelection(selection)) {\n return\n }\n\n if (selection.getTextContent() !== '') {\n const nodes = selection.getNodes()\n let foundNodeWithText = false\n for (const node of nodes) {\n if ($isTextNode(node)) {\n setIsText(true)\n foundNodeWithText = true\n break\n }\n }\n if (!foundNodeWithText) {\n setIsText(false)\n }\n } else {\n setIsText(false)\n }\n\n const rawTextContent = selection.getTextContent().replace(/\\n/g, '')\n if (!selection.isCollapsed() && rawTextContent === '') {\n setIsText(false)\n return\n }\n })\n }, [editor])\n\n useEffect(() => {\n document.addEventListener('selectionchange', updatePopup)\n document.addEventListener('mouseup', updatePopup)\n return () => {\n document.removeEventListener('selectionchange', updatePopup)\n document.removeEventListener('mouseup', updatePopup)\n }\n }, [updatePopup])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n updatePopup()\n }),\n editor.registerRootListener(() => {\n if (editor.getRootElement() === null) {\n setIsText(false)\n }\n }),\n )\n }, [editor, updatePopup])\n\n if (!isText) {\n return null\n }\n\n return createPortal(<InlineToolbar anchorElem={anchorElem} editor={editor} />, anchorElem)\n}\n\nexport const InlineToolbarPlugin: PluginComponentWithAnchor<undefined> = ({ anchorElem }) => {\n const [editor] = useLexicalComposerContext()\n\n return useInlineToolbar(editor, anchorElem)\n}\n", "'use client'\nexport function getDOMRangeRect(nativeSelection: Selection, rootElement: HTMLElement): DOMRect {\n const domRange = nativeSelection.getRangeAt(0)\n\n let rect\n\n if (nativeSelection.anchorNode === rootElement) {\n let inner = rootElement\n while (inner.firstElementChild != null) {\n inner = inner.firstElementChild as HTMLElement\n }\n rect = inner.getBoundingClientRect()\n } else {\n rect = domRange.getBoundingClientRect()\n }\n\n return rect\n}\n", "'use client'\nconst VERTICAL_GAP = 10\nconst HORIZONTAL_OFFSET = 32\n\n// TODO: needs refactoring\n// This is supposed to position the floatingElem based on the parent (anchorElem) and the target (targetRect) which is usually the selected text.\n// So basically, it positions the floatingElem either below or above the target (targetRect) and aligns it to the left or center of the target (targetRect).\n// This is used for positioning the floating toolbar (anchor: richtext editor) and its caret (anchor: floating toolbar)\nexport function setFloatingElemPosition(args: {\n alwaysDisplayOnTop?: boolean\n anchorElem: HTMLElement\n anchorFlippedOffset?: number // Offset which was added to the anchor (for caret, floating toolbar) if it was flipped\n floatingElem: HTMLElement\n horizontalOffset?: number\n horizontalPosition?: 'center' | 'left'\n specialHandlingForCaret?: boolean\n targetRect: ClientRect | null\n verticalGap?: number\n}): number {\n const {\n alwaysDisplayOnTop = false,\n anchorElem,\n anchorFlippedOffset = 0, // Offset which was added to the anchor (for caret, floating toolbar) if it was flipped\n floatingElem,\n horizontalOffset = HORIZONTAL_OFFSET,\n horizontalPosition = 'left',\n specialHandlingForCaret = false,\n targetRect,\n verticalGap = VERTICAL_GAP,\n } = args\n // Returns the top offset if the target was flipped\n const scrollerElem = anchorElem.parentElement\n\n if (targetRect === null || scrollerElem == null) {\n floatingElem.style.opacity = '0'\n floatingElem.style.transform = 'translate(-10000px, -10000px)'\n return\n }\n\n const floatingElemRect = floatingElem.getBoundingClientRect()\n const anchorElementRect = anchorElem.getBoundingClientRect()\n const editorScrollerRect = scrollerElem.getBoundingClientRect()\n\n let top = targetRect.top - floatingElemRect.height - verticalGap\n let left = targetRect.left - horizontalOffset\n\n if (horizontalPosition === 'center') {\n // Calculate left to position floatingElem to the horizontal middle of targetRect\n left = targetRect.left + targetRect.width / 2 - floatingElemRect.width / 2\n }\n\n let addedToTop = 0\n if (!alwaysDisplayOnTop && top < editorScrollerRect.top && !specialHandlingForCaret) {\n addedToTop = floatingElemRect.height + targetRect.height + verticalGap * 2\n\n top += addedToTop\n }\n\n if (horizontalPosition === 'center') {\n if (left + floatingElemRect.width > editorScrollerRect.right) {\n left = editorScrollerRect.right - floatingElemRect.width - horizontalOffset\n } else if (left < editorScrollerRect.left) {\n left = editorScrollerRect.left + horizontalOffset\n }\n } else {\n if (left + floatingElemRect.width > editorScrollerRect.right) {\n left = editorScrollerRect.right - floatingElemRect.width - horizontalOffset\n }\n }\n\n left -= anchorElementRect.left\n\n floatingElem.style.opacity = '1'\n\n if (specialHandlingForCaret && anchorFlippedOffset !== 0) {\n // Floating select toolbar was flipped (positioned below text rather than above). Thus, the caret now needs to be positioned\n // on the other side and rotated.\n top -= anchorElementRect.bottom - anchorFlippedOffset + floatingElemRect.height - 3\n // top += anchorFlippedOffset - anchorElementRect.height - floatingElemRect.height + 2\n floatingElem.style.transform = `translate(${left}px, ${top}px) rotate(180deg)`\n } else {\n top -= anchorElementRect.top\n\n floatingElem.style.transform = `translate(${left}px, ${top}px)`\n }\n\n return addedToTop\n}\n", "'use client'\n\nimport { createClientFeature } from '../../../../utilities/createClientFeature.js'\nimport { InlineToolbarPlugin } from './Toolbar/index.js'\n\nexport const InlineToolbarFeatureClient = createClientFeature({\n plugins: [\n {\n Component: InlineToolbarPlugin,\n position: 'floatingAnchorElem',\n },\n ],\n})\n", "'use client'\n\nimport { TableCellNode, TableNode, TableRowNode } from '@lexical/table'\n\nimport { TableIcon } from '../../../lexical/ui/icons/Table/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { slashMenuBasicGroupWithItems } from '../../shared/slashMenu/basicGroup.js'\nimport { toolbarAddDropdownGroupWithItems } from '../../shared/toolbar/addDropdownGroup.js'\nimport { TableActionMenuPlugin } from './plugins/TableActionMenuPlugin/index.js'\nimport { TableCellResizerPlugin } from './plugins/TableCellResizerPlugin/index.js'\nimport { TableHoverActionsPlugin } from './plugins/TableHoverActionsPlugin/index.js'\nimport {\n OPEN_TABLE_DRAWER_COMMAND,\n TableContext,\n TablePlugin,\n} from './plugins/TablePlugin/index.js'\n\nexport const TableFeatureClient = createClientFeature({\n nodes: [TableNode, TableCellNode, TableRowNode],\n plugins: [\n {\n Component: TablePlugin,\n position: 'normal',\n },\n {\n Component: TableCellResizerPlugin,\n position: 'normal',\n },\n {\n Component: TableActionMenuPlugin,\n position: 'floatingAnchorElem',\n },\n {\n Component: TableHoverActionsPlugin,\n position: 'floatingAnchorElem',\n },\n ],\n providers: [TableContext],\n slashMenu: {\n groups: [\n slashMenuBasicGroupWithItems([\n {\n Icon: TableIcon,\n key: 'table',\n keywords: ['table'],\n label: 'Table',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(OPEN_TABLE_DRAWER_COMMAND, {})\n },\n },\n ]),\n ],\n },\n toolbarFixed: {\n groups: [\n toolbarAddDropdownGroupWithItems([\n {\n ChildComponent: TableIcon,\n key: 'table',\n label: 'Table',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(OPEN_TABLE_DRAWER_COMMAND, {})\n },\n },\n ]),\n ],\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const TableIcon: React.FC = () => {\n return (\n <svg\n className=\"icon\"\n fill=\"none\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n clipRule=\"evenodd\"\n d=\"M5.33333 4.5C4.8731 4.5 4.5 4.8731 4.5 5.33333V7.5H9.5V4.5H5.33333ZM5.33333 3.5C4.32081 3.5 3.5 4.32081 3.5 5.33333V14.6667C3.5 15.6792 4.32081 16.5 5.33333 16.5H14.6667C15.6792 16.5 16.5 15.6792 16.5 14.6667V5.33333C16.5 4.32081 15.6792 3.5 14.6667 3.5H5.33333ZM10.5 4.5V7.5H15.5V5.33333C15.5 4.8731 15.1269 4.5 14.6667 4.5H10.5ZM15.5 8.5H10.5V11.5H15.5V8.5ZM15.5 12.5H10.5V15.5H14.6667C15.1269 15.5 15.5 15.1269 15.5 14.6667V12.5ZM9.5 15.5V12.5H4.5V14.6667C4.5 15.1269 4.8731 15.5 5.33333 15.5H9.5ZM4.5 11.5H9.5V8.5H4.5V11.5Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n />\n </svg>\n )\n}\n", "'use client'\n\nimport type {\n HTMLTableElementWithWithTableSelectionState,\n TableRowNode,\n TableSelection,\n} from '@lexical/table'\nimport type { ElementNode } from 'lexical'\nimport type { JSX } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n $deleteTableColumn__EXPERIMENTAL,\n $deleteTableRow__EXPERIMENTAL,\n $getNodeTriplet,\n $getTableCellNodeFromLexicalNode,\n $getTableColumnIndexFromTableCellNode,\n $getTableNodeFromLexicalNodeOrThrow,\n $getTableRowIndexFromTableCellNode,\n $insertTableColumn__EXPERIMENTAL,\n $insertTableRow__EXPERIMENTAL,\n $isTableCellNode,\n $isTableRowNode,\n $isTableSelection,\n $unmergeCell,\n TableCellHeaderStates,\n TableCellNode,\n getTableObserverFromTableElement,\n} from '@lexical/table'\nimport { useScrollInfo } from '@payloadcms/ui'\nimport {\n $createParagraphNode,\n $getRoot,\n $getSelection,\n $isElementNode,\n $isParagraphNode,\n $isRangeSelection,\n $isTextNode,\n} from 'lexical'\nimport * as React from 'react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\n\nimport { MeatballsIcon } from '../../../../../lexical/ui/icons/Meatballs/index.js'\nimport './index.scss'\n\nfunction computeSelectionCount(selection: TableSelection): {\n columns: number\n rows: number\n} {\n const selectionShape = selection.getShape()\n return {\n columns: selectionShape.toX - selectionShape.fromX + 1,\n rows: selectionShape.toY - selectionShape.fromY + 1,\n }\n}\n\n// This is important when merging cells as there is no good way to re-merge weird shapes (a result\n// of selecting merged cells and non-merged)\nfunction isTableSelectionRectangular(selection: TableSelection): boolean {\n const nodes = selection.getNodes()\n const currentRows: Array<number> = []\n let currentRow = null\n let expectedColumns = null\n let currentColumns = 0\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]\n if ($isTableCellNode(node)) {\n const row = node.getParentOrThrow()\n if ($isTableRowNode(row)) {\n throw new Error('Expected CellNode to have a RowNode parent')\n }\n if (currentRow !== row) {\n if (expectedColumns !== null && currentColumns !== expectedColumns) {\n return false\n }\n if (currentRow !== null) {\n expectedColumns = currentColumns\n }\n currentRow = row\n currentColumns = 0\n }\n const colSpan = node.__colSpan\n for (let j = 0; j < colSpan; j++) {\n if (currentRows[currentColumns + j] === undefined) {\n currentRows[currentColumns + j] = 0\n }\n currentRows[currentColumns + j] += node.__rowSpan\n }\n currentColumns += colSpan\n }\n }\n return (\n (expectedColumns === null || currentColumns === expectedColumns) &&\n currentRows.every((v) => v === currentRows[0])\n )\n}\n\nfunction $canUnmerge(): boolean {\n const selection = $getSelection()\n if (\n ($isRangeSelection(selection) && !selection.isCollapsed()) ||\n ($isTableSelection(selection) && !selection.anchor.is(selection.focus)) ||\n (!$isRangeSelection(selection) && !$isTableSelection(selection))\n ) {\n return false\n }\n const [cell] = $getNodeTriplet(selection.anchor)\n return cell.__colSpan > 1 || cell.__rowSpan > 1\n}\n\nfunction $cellContainsEmptyParagraph(cell: TableCellNode): boolean {\n if (cell.getChildrenSize() !== 1) {\n return false\n }\n const firstChild = cell.getFirstChildOrThrow()\n if (!$isParagraphNode(firstChild) || !firstChild.isEmpty()) {\n return false\n }\n return true\n}\n\nfunction $selectLastDescendant(node: ElementNode): void {\n const lastDescendant = node.getLastDescendant()\n if ($isTextNode(lastDescendant)) {\n lastDescendant.select()\n } else if ($isElementNode(lastDescendant)) {\n lastDescendant.selectEnd()\n } else if (lastDescendant !== null) {\n lastDescendant.selectNext()\n }\n}\n\ntype TableCellActionMenuProps = Readonly<{\n cellMerge: boolean\n contextRef: { current: HTMLElement | null }\n onClose: () => void\n setIsMenuOpen: (isOpen: boolean) => void\n tableCellNode: TableCellNode\n}>\n\nfunction TableActionMenu({\n cellMerge,\n contextRef,\n onClose,\n setIsMenuOpen,\n tableCellNode: _tableCellNode,\n}: TableCellActionMenuProps) {\n const [editor] = useLexicalComposerContext()\n const dropDownRef = useRef<HTMLDivElement | null>(null)\n const [tableCellNode, updateTableCellNode] = useState(_tableCellNode)\n const [selectionCounts, updateSelectionCounts] = useState({\n columns: 1,\n rows: 1,\n })\n const [canMergeCells, setCanMergeCells] = useState(false)\n const [canUnmergeCell, setCanUnmergeCell] = useState(false)\n const { y } = useScrollInfo()\n\n useEffect(() => {\n return editor.registerMutationListener(\n TableCellNode,\n (nodeMutations) => {\n const nodeUpdated = nodeMutations.get(tableCellNode.getKey()) === 'updated'\n\n if (nodeUpdated) {\n editor.getEditorState().read(() => {\n updateTableCellNode(tableCellNode.getLatest())\n })\n }\n },\n { skipInitialization: true },\n )\n }, [editor, tableCellNode])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n // Merge cells\n if ($isTableSelection(selection)) {\n const currentSelectionCounts = computeSelectionCount(selection)\n updateSelectionCounts(computeSelectionCount(selection))\n setCanMergeCells(\n isTableSelectionRectangular(selection) &&\n (currentSelectionCounts.columns > 1 || currentSelectionCounts.rows > 1),\n )\n }\n // Unmerge cell\n setCanUnmergeCell($canUnmerge())\n })\n }, [editor])\n\n useEffect(() => {\n const menuButtonElement = contextRef.current\n const dropDownElement = dropDownRef.current\n const rootElement = editor.getRootElement()\n\n if (menuButtonElement != null && dropDownElement != null && rootElement != null) {\n const rootEleRect = rootElement.getBoundingClientRect()\n const menuButtonRect = menuButtonElement.getBoundingClientRect()\n dropDownElement.style.opacity = '1'\n const dropDownElementRect = dropDownElement.getBoundingClientRect()\n const margin = 5\n let leftPosition = menuButtonRect.right + margin\n if (\n leftPosition + dropDownElementRect.width > window.innerWidth ||\n leftPosition + dropDownElementRect.width > rootEleRect.right\n ) {\n const position = menuButtonRect.left - dropDownElementRect.width - margin\n leftPosition = (position < 0 ? margin : position) + window.pageXOffset\n }\n dropDownElement.style.left = `${leftPosition + window.pageXOffset}px`\n\n let topPosition = menuButtonRect.top\n if (topPosition + dropDownElementRect.height > window.innerHeight) {\n const position = menuButtonRect.bottom - dropDownElementRect.height\n topPosition = (position < 0 ? margin : position) + window.pageYOffset\n }\n dropDownElement.style.top = `${topPosition}px`\n }\n }, [contextRef, dropDownRef, editor, y])\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (\n dropDownRef.current != null &&\n contextRef.current != null &&\n !dropDownRef.current.contains(event.target as Node) &&\n !contextRef.current.contains(event.target as Node)\n ) {\n setIsMenuOpen(false)\n }\n }\n\n window.addEventListener('click', handleClickOutside)\n\n return () => window.removeEventListener('click', handleClickOutside)\n }, [setIsMenuOpen, contextRef])\n\n const clearTableSelection = useCallback(() => {\n editor.update(() => {\n if (tableCellNode.isAttached()) {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const tableElement = editor.getElementByKey(\n tableNode.getKey(),\n ) as HTMLTableElementWithWithTableSelectionState\n\n if (!tableElement) {\n throw new Error('Expected to find tableElement in DOM')\n }\n\n const tableSelection = getTableObserverFromTableElement(tableElement)\n if (tableSelection !== null) {\n tableSelection.clearHighlight()\n }\n\n tableNode.markDirty()\n updateTableCellNode(tableCellNode.getLatest())\n }\n\n const rootNode = $getRoot()\n rootNode.selectStart()\n })\n }, [editor, tableCellNode])\n\n const mergeTableCellsAtSelection = () => {\n editor.update(() => {\n const selection = $getSelection()\n if ($isTableSelection(selection)) {\n const { columns, rows } = computeSelectionCount(selection)\n const nodes = selection.getNodes()\n let firstCell: TableCellNode | null = null\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]\n if ($isTableCellNode(node)) {\n if (firstCell === null) {\n node.setColSpan(columns).setRowSpan(rows)\n firstCell = node\n const isEmpty = $cellContainsEmptyParagraph(node)\n let firstChild\n if (isEmpty && $isParagraphNode((firstChild = node.getFirstChild()))) {\n firstChild.remove()\n }\n } else if ($isTableCellNode(firstCell)) {\n const isEmpty = $cellContainsEmptyParagraph(node)\n if (!isEmpty) {\n firstCell.append(...node.getChildren())\n }\n node.remove()\n }\n }\n }\n if (firstCell !== null) {\n if (firstCell.getChildrenSize() === 0) {\n firstCell.append($createParagraphNode())\n }\n $selectLastDescendant(firstCell)\n }\n onClose()\n }\n })\n }\n\n const unmergeTableCellsAtSelection = () => {\n editor.update(() => {\n $unmergeCell()\n })\n }\n\n const insertTableRowAtSelection = useCallback(\n (shouldInsertAfter: boolean) => {\n editor.update(() => {\n $insertTableRow__EXPERIMENTAL(shouldInsertAfter)\n onClose()\n })\n },\n [editor, onClose],\n )\n\n const insertTableColumnAtSelection = useCallback(\n (shouldInsertAfter: boolean) => {\n editor.update(() => {\n for (let i = 0; i < selectionCounts.columns; i++) {\n $insertTableColumn__EXPERIMENTAL(shouldInsertAfter)\n }\n onClose()\n })\n },\n [editor, onClose, selectionCounts.columns],\n )\n\n const deleteTableRowAtSelection = useCallback(() => {\n editor.update(() => {\n $deleteTableRow__EXPERIMENTAL()\n onClose()\n })\n }, [editor, onClose])\n\n const deleteTableAtSelection = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n tableNode.remove()\n\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n const deleteTableColumnAtSelection = useCallback(() => {\n editor.update(() => {\n $deleteTableColumn__EXPERIMENTAL()\n onClose()\n })\n }, [editor, onClose])\n\n const toggleTableRowIsHeader = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n\n const tableRowIndex = $getTableRowIndexFromTableCellNode(tableCellNode)\n\n const tableRows = tableNode.getChildren()\n\n if (tableRowIndex >= tableRows.length || tableRowIndex < 0) {\n throw new Error('Expected table cell to be inside of table row.')\n }\n\n const tableRow = tableRows[tableRowIndex]\n\n if (!$isTableRowNode(tableRow)) {\n throw new Error('Expected table row')\n }\n\n tableRow.getChildren().forEach((tableCell) => {\n if (!$isTableCellNode(tableCell)) {\n throw new Error('Expected table cell')\n }\n\n tableCell.toggleHeaderStyle(TableCellHeaderStates.ROW)\n })\n\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n const toggleTableColumnIsHeader = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n\n const tableColumnIndex = $getTableColumnIndexFromTableCellNode(tableCellNode)\n\n const tableRows = tableNode.getChildren<TableRowNode>()\n const maxRowsLength = Math.max(...tableRows.map((row) => row.getChildren().length))\n\n if (tableColumnIndex >= maxRowsLength || tableColumnIndex < 0) {\n throw new Error('Expected table cell to be inside of table row.')\n }\n\n for (let r = 0; r < tableRows.length; r++) {\n const tableRow = tableRows[r]\n\n if (!$isTableRowNode(tableRow)) {\n throw new Error('Expected table row')\n }\n\n const tableCells = tableRow.getChildren()\n if (tableColumnIndex >= tableCells.length) {\n // if cell is outside of bounds for the current row (for example various merge cell cases) we shouldn't highlight it\n continue\n }\n\n const tableCell = tableCells[tableColumnIndex]\n\n if (!$isTableCellNode(tableCell)) {\n throw new Error('Expected table cell')\n }\n\n tableCell.toggleHeaderStyle(TableCellHeaderStates.COLUMN)\n }\n\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n let mergeCellButton: JSX.Element | null = null\n if (cellMerge) {\n if (canMergeCells) {\n mergeCellButton = (\n <button\n className=\"item\"\n data-test-id=\"table-merge-cells\"\n onClick={() => mergeTableCellsAtSelection()}\n type=\"button\"\n >\n Merge cells\n </button>\n )\n } else if (canUnmergeCell) {\n mergeCellButton = (\n <button\n className=\"item\"\n data-test-id=\"table-unmerge-cells\"\n onClick={() => unmergeTableCellsAtSelection()}\n type=\"button\"\n >\n Unmerge cells\n </button>\n )\n }\n }\n\n return createPortal(\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions,jsx-a11y/click-events-have-key-events\n <div\n className=\"table-action-menu-dropdown\"\n onClick={(e) => {\n e.stopPropagation()\n }}\n ref={dropDownRef}\n >\n {mergeCellButton ? (\n <React.Fragment>\n {mergeCellButton}\n <hr />\n </React.Fragment>\n ) : null}\n\n <button\n className=\"item\"\n data-test-id=\"table-insert-row-above\"\n onClick={() => insertTableRowAtSelection(false)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.rows === 1 ? 'row' : `${selectionCounts.rows} rows`} above\n </span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-insert-row-below\"\n onClick={() => insertTableRowAtSelection(true)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.rows === 1 ? 'row' : `${selectionCounts.rows} rows`} below\n </span>\n </button>\n <hr />\n <button\n className=\"item\"\n data-test-id=\"table-insert-column-before\"\n onClick={() => insertTableColumnAtSelection(false)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.columns === 1 ? 'column' : `${selectionCounts.columns} columns`}{' '}\n left\n </span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-insert-column-after\"\n onClick={() => insertTableColumnAtSelection(true)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.columns === 1 ? 'column' : `${selectionCounts.columns} columns`}{' '}\n right\n </span>\n </button>\n <hr />\n <button\n className=\"item\"\n data-test-id=\"table-delete-columns\"\n onClick={() => deleteTableColumnAtSelection()}\n type=\"button\"\n >\n <span className=\"text\">Delete column</span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-delete-rows\"\n onClick={() => deleteTableRowAtSelection()}\n type=\"button\"\n >\n <span className=\"text\">Delete row</span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-delete\"\n onClick={() => deleteTableAtSelection()}\n type=\"button\"\n >\n <span className=\"text\">Delete table</span>\n </button>\n <hr />\n <button className=\"item\" onClick={() => toggleTableRowIsHeader()} type=\"button\">\n <span className=\"text\">\n {(tableCellNode.__headerState & TableCellHeaderStates.ROW) === TableCellHeaderStates.ROW\n ? 'Remove'\n : 'Add'}{' '}\n row header\n </span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-column-header\"\n onClick={() => toggleTableColumnIsHeader()}\n type=\"button\"\n >\n <span className=\"text\">\n {(tableCellNode.__headerState & TableCellHeaderStates.COLUMN) ===\n TableCellHeaderStates.COLUMN\n ? 'Remove'\n : 'Add'}{' '}\n column header\n </span>\n </button>\n </div>,\n document.body,\n )\n}\n\nfunction TableCellActionMenuContainer({\n anchorElem,\n cellMerge,\n}: {\n anchorElem: HTMLElement\n cellMerge: boolean\n}): JSX.Element {\n const [editor] = useLexicalComposerContext()\n\n const menuButtonRef = useRef(null)\n const menuRootRef = useRef(null)\n const [isMenuOpen, setIsMenuOpen] = useState(false)\n\n const [tableCellNode, setTableMenuCellNode] = useState<TableCellNode | null>(null)\n\n const $moveMenu = useCallback(() => {\n const menu = menuButtonRef.current\n const selection = $getSelection()\n const nativeSelection = window.getSelection()\n const activeElement = document.activeElement\n\n if (selection == null || menu == null) {\n setTableMenuCellNode(null)\n return\n }\n\n const rootElement = editor.getRootElement()\n\n if (\n $isRangeSelection(selection) &&\n rootElement !== null &&\n nativeSelection !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n const tableCellNodeFromSelection = $getTableCellNodeFromLexicalNode(\n selection.anchor.getNode(),\n )\n\n if (tableCellNodeFromSelection == null) {\n setTableMenuCellNode(null)\n return\n }\n\n const tableCellParentNodeDOM = editor.getElementByKey(tableCellNodeFromSelection.getKey())\n\n if (tableCellParentNodeDOM == null) {\n setTableMenuCellNode(null)\n return\n }\n\n setTableMenuCellNode(tableCellNodeFromSelection)\n } else if (!activeElement) {\n setTableMenuCellNode(null)\n }\n }, [editor])\n\n useEffect(() => {\n return editor.registerUpdateListener(() => {\n editor.getEditorState().read(() => {\n $moveMenu()\n })\n })\n })\n\n useEffect(() => {\n const menuButtonDOM = menuButtonRef.current as HTMLButtonElement | null\n\n if (menuButtonDOM != null && tableCellNode != null) {\n const tableCellNodeDOM = editor.getElementByKey(tableCellNode.getKey())\n\n if (tableCellNodeDOM != null) {\n const tableCellRect = tableCellNodeDOM.getBoundingClientRect()\n const menuRect = menuButtonDOM.getBoundingClientRect()\n const anchorRect = anchorElem.getBoundingClientRect()\n\n const top = tableCellRect.top - anchorRect.top + 4\n const left = tableCellRect.right - menuRect.width - 10 - anchorRect.left\n\n menuButtonDOM.style.opacity = '1'\n menuButtonDOM.style.transform = `translate(${left}px, ${top}px)`\n } else {\n menuButtonDOM.style.opacity = '0'\n menuButtonDOM.style.transform = 'translate(-10000px, -10000px)'\n }\n }\n }, [menuButtonRef, tableCellNode, editor, anchorElem])\n\n const prevTableCellDOM = useRef(tableCellNode)\n\n useEffect(() => {\n if (prevTableCellDOM.current !== tableCellNode) {\n setIsMenuOpen(false)\n }\n\n prevTableCellDOM.current = tableCellNode\n }, [prevTableCellDOM, tableCellNode])\n\n return (\n <div className=\"table-cell-action-button-container\" ref={menuButtonRef}>\n {tableCellNode != null && (\n <React.Fragment>\n <button\n className=\"table-cell-action-button\"\n onClick={(e) => {\n e.stopPropagation()\n setIsMenuOpen(!isMenuOpen)\n }}\n ref={menuRootRef}\n type=\"button\"\n >\n <MeatballsIcon />\n </button>\n {isMenuOpen && (\n <TableActionMenu\n cellMerge={cellMerge}\n contextRef={menuRootRef}\n onClose={() => setIsMenuOpen(false)}\n setIsMenuOpen={setIsMenuOpen}\n tableCellNode={tableCellNode}\n />\n )}\n </React.Fragment>\n )}\n </div>\n )\n}\n\nexport const TableActionMenuPlugin: PluginComponentWithAnchor = ({ anchorElem }) => {\n const isEditable = useLexicalEditable()\n return createPortal(\n isEditable ? (\n <TableCellActionMenuContainer anchorElem={anchorElem ?? document.body} cellMerge />\n ) : null,\n anchorElem ?? document.body,\n )\n}\n", "'use client'\nimport React from 'react'\n\nexport const MeatballsIcon: React.FC = () => (\n <svg fill=\"none\" height=\"18\" viewBox=\"0 0 20 20\" width=\"18\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5 11C5.55228 11 6 10.5523 6 10C6 9.44772 5.55228 9 5 9C4.44772 9 4 9.44772 4 10C4 10.5523 4.44772 11 5 11Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M10 11C10.5523 11 11 10.5523 11 10C11 9.44772 10.5523 9 10 9C9.44772 9 9 9.44772 9 10C9 10.5523 9.44772 11 10 11Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M15 11C15.5523 11 16 10.5523 16 10C16 9.44772 15.5523 9 15 9C14.4477 9 14 9.44772 14 10C14 10.5523 14.4477 11 15 11Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n", "'use client'\n\nimport type { TableCellNode, TableDOMCell, TableMapType, TableMapValueType } from '@lexical/table'\nimport type { LexicalEditor } from 'lexical'\nimport type { JSX, MouseEventHandler } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n $computeTableMapSkipCellCheck,\n $getTableNodeFromLexicalNodeOrThrow,\n $getTableRowIndexFromTableCellNode,\n $isTableCellNode,\n $isTableRowNode,\n getDOMCellFromTarget,\n} from '@lexical/table'\nimport { calculateZoomLevel } from '@lexical/utils'\nimport { $getNearestNodeFromDOMNode } from 'lexical'\nimport * as React from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\n\ntype MousePosition = {\n x: number\n y: number\n}\n\ntype MouseDraggingDirection = 'bottom' | 'right'\n\nconst MIN_ROW_HEIGHT = 33\nconst MIN_COLUMN_WIDTH = 50\n\nfunction TableCellResizer({ editor }: { editor: LexicalEditor }): JSX.Element {\n const targetRef = useRef<HTMLElement | null>(null)\n const resizerRef = useRef<HTMLDivElement | null>(null)\n const tableRectRef = useRef<ClientRect | null>(null)\n const editorConfig = useEditorConfigContext()\n\n const mouseStartPosRef = useRef<MousePosition | null>(null)\n const [mouseCurrentPos, updateMouseCurrentPos] = useState<MousePosition | null>(null)\n\n const [activeCell, updateActiveCell] = useState<TableDOMCell | null>(null)\n const [isMouseDown, updateIsMouseDown] = useState<boolean>(false)\n const [draggingDirection, updateDraggingDirection] = useState<MouseDraggingDirection | null>(null)\n\n const resetState = useCallback(() => {\n updateActiveCell(null)\n targetRef.current = null\n updateDraggingDirection(null)\n mouseStartPosRef.current = null\n tableRectRef.current = null\n }, [])\n\n const isMouseDownOnEvent = (event: MouseEvent) => {\n return (event.buttons & 1) === 1\n }\n\n useEffect(() => {\n const onMouseMove = (event: MouseEvent) => {\n setTimeout(() => {\n const target = event.target\n\n if (draggingDirection) {\n updateMouseCurrentPos({\n x: event.clientX,\n y: event.clientY,\n })\n return\n }\n updateIsMouseDown(isMouseDownOnEvent(event))\n if (resizerRef.current && resizerRef.current.contains(target as Node)) {\n return\n }\n\n if (targetRef.current !== target) {\n targetRef.current = target as HTMLElement\n const cell = getDOMCellFromTarget(target as HTMLElement)\n\n if (cell && activeCell !== cell) {\n editor.update(() => {\n const tableCellNode = $getNearestNodeFromDOMNode(cell.elem)\n\n if (!tableCellNode) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const tableElement = editor.getElementByKey(tableNode.getKey())\n\n if (!tableElement) {\n throw new Error('TableCellResizer: Table element not found.')\n }\n\n targetRef.current = target as HTMLElement\n tableRectRef.current = tableElement.getBoundingClientRect()\n updateActiveCell(cell)\n })\n } else if (cell == null) {\n resetState()\n }\n }\n }, 0)\n }\n\n const onMouseDown = (event: MouseEvent) => {\n setTimeout(() => {\n updateIsMouseDown(true)\n }, 0)\n }\n\n const onMouseUp = (event: MouseEvent) => {\n setTimeout(() => {\n updateIsMouseDown(false)\n }, 0)\n }\n\n const removeRootListener = editor.registerRootListener((rootElement, prevRootElement) => {\n rootElement?.addEventListener('mousemove', onMouseMove)\n rootElement?.addEventListener('mousedown', onMouseDown)\n rootElement?.addEventListener('mouseup', onMouseUp)\n\n prevRootElement?.removeEventListener('mousemove', onMouseMove)\n prevRootElement?.removeEventListener('mousedown', onMouseDown)\n prevRootElement?.removeEventListener('mouseup', onMouseUp)\n })\n\n return () => {\n removeRootListener()\n }\n }, [activeCell, draggingDirection, editor, resetState])\n\n const isHeightChanging = (direction: MouseDraggingDirection) => {\n if (direction === 'bottom') {\n return true\n }\n return false\n }\n\n const updateRowHeight = useCallback(\n (heightChange: number) => {\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n editor.update(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem)\n if (!$isTableCellNode(tableCellNode)) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n\n const tableRowIndex = $getTableRowIndexFromTableCellNode(tableCellNode)\n\n const tableRows = tableNode.getChildren()\n\n if (tableRowIndex >= tableRows.length || tableRowIndex < 0) {\n throw new Error('Expected table cell to be inside of table row.')\n }\n\n const tableRow = tableRows[tableRowIndex]\n\n if (!$isTableRowNode(tableRow)) {\n throw new Error('Expected table row')\n }\n\n let height = tableRow.getHeight()\n if (height === undefined) {\n const rowCells = tableRow.getChildren<TableCellNode>()\n height = Math.min(\n ...rowCells.map((cell) => getCellNodeHeight(cell, editor) ?? Infinity),\n )\n }\n\n const newHeight = Math.max(height + heightChange, MIN_ROW_HEIGHT)\n tableRow.setHeight(newHeight)\n },\n { tag: 'skip-scroll-into-view' },\n )\n },\n [activeCell, editor],\n )\n\n const getCellNodeWidth = (\n cell: TableCellNode,\n activeEditor: LexicalEditor,\n ): number | undefined => {\n const width = cell.getWidth()\n if (width !== undefined) {\n return width\n }\n\n const domCellNode = activeEditor.getElementByKey(cell.getKey())\n if (domCellNode == null) {\n return undefined\n }\n const computedStyle = getComputedStyle(domCellNode)\n return (\n domCellNode.clientWidth -\n parseFloat(computedStyle.paddingLeft) -\n parseFloat(computedStyle.paddingRight)\n )\n }\n\n const getCellNodeHeight = (\n cell: TableCellNode,\n activeEditor: LexicalEditor,\n ): number | undefined => {\n const domCellNode = activeEditor.getElementByKey(cell.getKey())\n return domCellNode?.clientHeight\n }\n\n const getCellColumnIndex = (tableCellNode: TableCellNode, tableMap: TableMapType) => {\n for (let row = 0; row < tableMap.length; row++) {\n for (let column = 0; column < tableMap[row].length; column++) {\n if (tableMap[row][column].cell === tableCellNode) {\n return column\n }\n }\n }\n }\n\n const updateColumnWidth = useCallback(\n (widthChange: number) => {\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n editor.update(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem)\n if (!$isTableCellNode(tableCellNode)) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const [tableMap] = $computeTableMapSkipCellCheck(tableNode, null, null)\n const columnIndex = getCellColumnIndex(tableCellNode, tableMap)\n if (columnIndex === undefined) {\n throw new Error('TableCellResizer: Table column not found.')\n }\n\n for (let row = 0; row < tableMap.length; row++) {\n const cell: TableMapValueType = tableMap[row][columnIndex]\n if (\n cell.startRow === row &&\n (columnIndex === tableMap[row].length - 1 ||\n tableMap[row][columnIndex].cell !== tableMap[row][columnIndex + 1].cell)\n ) {\n const width = getCellNodeWidth(cell.cell, editor)\n if (width === undefined) {\n continue\n }\n const newWidth = Math.max(width + widthChange, MIN_COLUMN_WIDTH)\n cell.cell.setWidth(newWidth)\n }\n }\n },\n { tag: 'skip-scroll-into-view' },\n )\n },\n [activeCell, editor],\n )\n\n const mouseUpHandler = useCallback(\n (direction: MouseDraggingDirection) => {\n const handler = (event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n if (mouseStartPosRef.current) {\n const { x, y } = mouseStartPosRef.current\n\n if (activeCell === null) {\n return\n }\n const zoom = calculateZoomLevel(event.target as Element)\n\n if (isHeightChanging(direction)) {\n const heightChange = (event.clientY - y) / zoom\n updateRowHeight(heightChange)\n } else {\n const widthChange = (event.clientX - x) / zoom\n updateColumnWidth(widthChange)\n }\n\n resetState()\n document.removeEventListener('mouseup', handler)\n }\n }\n return handler\n },\n [activeCell, resetState, updateColumnWidth, updateRowHeight],\n )\n\n const toggleResize = useCallback(\n (direction: MouseDraggingDirection): MouseEventHandler<HTMLDivElement> =>\n (event) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n mouseStartPosRef.current = {\n x: event.clientX,\n y: event.clientY,\n }\n updateMouseCurrentPos(mouseStartPosRef.current)\n updateDraggingDirection(direction)\n\n document.addEventListener('mouseup', mouseUpHandler(direction))\n },\n [activeCell, mouseUpHandler],\n )\n\n const getResizers = useCallback(() => {\n if (activeCell) {\n const { height, left, top, width } = activeCell.elem.getBoundingClientRect()\n const zoom = calculateZoomLevel(activeCell.elem)\n const zoneWidth = 10 // Pixel width of the zone where you can drag the edge\n const styles = {\n bottom: {\n backgroundColor: 'none',\n cursor: 'row-resize',\n height: `${zoneWidth}px`,\n left: `${window.pageXOffset + left}px`,\n top: `${window.pageYOffset + top + height - zoneWidth / 2}px`,\n width: `${width}px`,\n },\n right: {\n backgroundColor: 'none',\n cursor: 'col-resize',\n height: `${height}px`,\n left: `${window.pageXOffset + left + width - zoneWidth / 2}px`,\n top: `${window.pageYOffset + top}px`,\n width: `${zoneWidth}px`,\n },\n }\n\n const tableRect = tableRectRef.current\n\n if (draggingDirection && mouseCurrentPos && tableRect) {\n if (isHeightChanging(draggingDirection)) {\n styles[draggingDirection].left = `${window.pageXOffset + tableRect.left}px`\n styles[draggingDirection].top = `${window.pageYOffset + mouseCurrentPos.y / zoom}px`\n styles[draggingDirection].height = '3px'\n styles[draggingDirection].width = `${tableRect.width}px`\n } else {\n styles[draggingDirection].top = `${window.pageYOffset + tableRect.top}px`\n styles[draggingDirection].left = `${window.pageXOffset + mouseCurrentPos.x / zoom}px`\n styles[draggingDirection].width = '3px'\n styles[draggingDirection].height = `${tableRect.height}px`\n }\n\n styles[draggingDirection].backgroundColor = '#adf'\n }\n\n return styles\n }\n\n return {\n bottom: null,\n left: null,\n right: null,\n top: null,\n }\n }, [activeCell, draggingDirection, mouseCurrentPos])\n\n const resizerStyles = getResizers()\n\n return (\n <div ref={resizerRef}>\n {activeCell != null && !isMouseDown && (\n <React.Fragment>\n <div\n className={`${editorConfig.editorConfig.lexical.theme.tableCellResizer} TableCellResizer__ui`}\n onMouseDown={toggleResize('right')}\n style={resizerStyles.right || undefined}\n />\n <div\n className={`${editorConfig.editorConfig.lexical.theme.tableCellResizer} TableCellResizer__ui`}\n onMouseDown={toggleResize('bottom')}\n style={resizerStyles.bottom || undefined}\n />\n </React.Fragment>\n )}\n </div>\n )\n}\n\nexport const TableCellResizerPlugin: PluginComponent = () => {\n const [editor] = useLexicalComposerContext()\n const isEditable = useLexicalEditable()\n\n return useMemo(\n () => (isEditable ? createPortal(<TableCellResizer editor={editor} />, document.body) : null),\n [editor, isEditable],\n )\n}\n", "'use client'\n\nimport type { TableCellNode, TableRowNode } from '@lexical/table'\nimport type { EditorConfig, NodeKey } from 'lexical'\nimport type { JSX } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport {\n $getTableColumnIndexFromTableCellNode,\n $getTableRowIndexFromTableCellNode,\n $insertTableColumn__EXPERIMENTAL,\n $insertTableRow__EXPERIMENTAL,\n $isTableCellNode,\n $isTableNode,\n TableNode,\n} from '@lexical/table'\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\nimport { $getNearestNodeFromDOMNode } from 'lexical'\nimport { useEffect, useRef, useState } from 'react'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useDebounce } from '../../utils/useDebounce.js'\n\nconst BUTTON_WIDTH_PX = 20\n\nfunction TableHoverActionsContainer({ anchorElem }: { anchorElem: HTMLElement }): JSX.Element {\n const [editor] = useLexicalComposerContext()\n const editorConfig = useEditorConfigContext()\n const [isShownRow, setShownRow] = useState<boolean>(false)\n const [isShownColumn, setShownColumn] = useState<boolean>(false)\n const [shouldListenMouseMove, setShouldListenMouseMove] = useState<boolean>(false)\n const [position, setPosition] = useState({})\n const codeSetRef = useRef<Set<NodeKey>>(new Set())\n const tableDOMNodeRef = useRef<HTMLElement | null>(null)\n\n const debouncedOnMouseMove = useDebounce(\n (event: MouseEvent) => {\n const { isOutside, tableDOMNode } = getMouseInfo(event, editorConfig.editorConfig?.lexical)\n\n if (isOutside) {\n setShownRow(false)\n setShownColumn(false)\n return\n }\n\n if (!tableDOMNode) {\n return\n }\n\n tableDOMNodeRef.current = tableDOMNode\n\n let hoveredRowNode: TableCellNode | null = null\n let hoveredColumnNode: TableCellNode | null = null\n let tableDOMElement: HTMLElement | null = null\n\n editor.update(() => {\n const maybeTableCell = $getNearestNodeFromDOMNode(tableDOMNode)\n\n if ($isTableCellNode(maybeTableCell)) {\n const table = $findMatchingParent(maybeTableCell, (node) => $isTableNode(node))\n if (!$isTableNode(table)) {\n return\n }\n\n tableDOMElement = editor.getElementByKey(table?.getKey())\n\n if (tableDOMElement) {\n const rowCount = table.getChildrenSize()\n const colCount =\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n ((table as TableNode).getChildAtIndex(0) as TableRowNode)?.getChildrenSize()\n\n const rowIndex = $getTableRowIndexFromTableCellNode(maybeTableCell)\n const colIndex = $getTableColumnIndexFromTableCellNode(maybeTableCell)\n\n if (rowIndex === rowCount - 1) {\n hoveredRowNode = maybeTableCell\n } else if (colIndex === colCount - 1) {\n hoveredColumnNode = maybeTableCell\n }\n }\n }\n })\n\n if (tableDOMElement) {\n const {\n bottom: tableElemBottom,\n height: tableElemHeight,\n right: tableElemRight,\n width: tableElemWidth,\n x: tableElemX,\n y: tableElemY,\n } = (tableDOMElement as HTMLTableElement).getBoundingClientRect()\n\n const { left: editorElemLeft, y: editorElemY } = anchorElem.getBoundingClientRect()\n\n if (hoveredRowNode) {\n setShownColumn(false)\n setShownRow(true)\n setPosition({\n height: BUTTON_WIDTH_PX,\n left: tableElemX - editorElemLeft,\n top: tableElemBottom - editorElemY + 5,\n width: tableElemWidth,\n })\n } else if (hoveredColumnNode) {\n setShownColumn(true)\n setShownRow(false)\n setPosition({\n height: tableElemHeight,\n left: tableElemRight - editorElemLeft + 5,\n top: tableElemY - editorElemY,\n width: BUTTON_WIDTH_PX,\n })\n }\n }\n },\n 50,\n 250,\n )\n\n useEffect(() => {\n if (!shouldListenMouseMove) {\n return\n }\n\n document.addEventListener('mousemove', debouncedOnMouseMove)\n\n return () => {\n setShownRow(false)\n setShownColumn(false)\n\n document.removeEventListener('mousemove', debouncedOnMouseMove)\n }\n }, [shouldListenMouseMove, debouncedOnMouseMove])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerMutationListener(\n TableNode,\n (mutations) => {\n editor.getEditorState().read(() => {\n for (const [key, type] of mutations) {\n switch (type) {\n case 'created':\n codeSetRef.current.add(key)\n setShouldListenMouseMove(codeSetRef.current.size > 0)\n break\n\n case 'destroyed':\n codeSetRef.current.delete(key)\n setShouldListenMouseMove(codeSetRef.current.size > 0)\n break\n\n default:\n break\n }\n }\n })\n },\n { skipInitialization: false },\n ),\n )\n }, [editor])\n\n const insertAction = (insertRow: boolean) => {\n editor.update(() => {\n if (tableDOMNodeRef.current) {\n const maybeTableNode = $getNearestNodeFromDOMNode(tableDOMNodeRef.current)\n maybeTableNode?.selectEnd()\n if (insertRow) {\n $insertTableRow__EXPERIMENTAL()\n setShownRow(false)\n } else {\n $insertTableColumn__EXPERIMENTAL()\n setShownColumn(false)\n }\n }\n })\n }\n\n return (\n <>\n {isShownRow && (\n <button\n className={editorConfig.editorConfig.lexical.theme.tableAddRows}\n onClick={() => insertAction(true)}\n style={{ ...position }}\n />\n )}\n {isShownColumn && (\n <button\n className={editorConfig.editorConfig.lexical.theme.tableAddColumns}\n onClick={() => insertAction(false)}\n style={{ ...position }}\n />\n )}\n </>\n )\n}\n\nfunction getMouseInfo(\n event: MouseEvent,\n editorConfig: EditorConfig,\n): {\n isOutside: boolean\n tableDOMNode: HTMLElement | null\n} {\n const target = event.target\n\n if (target && target instanceof HTMLElement) {\n const tableDOMNode = target.closest<HTMLElement>(\n `td.${editorConfig.theme.tableCell}, th.${editorConfig.theme.tableCell}`,\n )\n\n const isOutside = !(\n tableDOMNode ||\n target.closest<HTMLElement>(`button.${editorConfig.theme.tableAddRows}`) ||\n target.closest<HTMLElement>(`button.${editorConfig.theme.tableAddColumns}`) ||\n target.closest<HTMLElement>(`div.${editorConfig.theme.tableCellResizer}`)\n )\n\n return { isOutside, tableDOMNode }\n } else {\n return { isOutside: true, tableDOMNode: null }\n }\n}\n\nexport function TableHoverActionsPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement\n}): React.ReactPortal | null {\n return createPortal(<TableHoverActionsContainer anchorElem={anchorElem} />, anchorElem)\n}\n", "'use client'\nimport { useMemo, useRef } from 'react'\n\nimport debounce from './debounce.js'\n\nexport function useDebounce<T extends (...args: never[]) => void>(\n fn: T,\n ms: number,\n maxWait?: number,\n) {\n const funcRef = useRef<T | null>(null)\n funcRef.current = fn\n\n return useMemo(\n () =>\n debounce(\n (...args: Parameters<T>) => {\n if (funcRef.current) {\n funcRef.current(...args)\n }\n },\n ms,\n { maxWait },\n ),\n [ms, maxWait],\n )\n}\n", "'use client'\n// Copied & modified from https://github.com/lodash/lodash/blob/main/src/debounce.ts\n/*\nThe MIT License\n\nCopyright JS Foundation and other contributors <https://js.foundation/>\n\nBased on Underscore.js, copyright Jeremy Ashkenas,\nDocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>\n\nThis software consists of voluntary contributions made by many\nindividuals. For exact contribution history, see the revision history\navailable at https://github.com/lodash/lodash\n\nThe following license applies to all parts of this software except as\ndocumented below:\n\n====\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n====\n\nCopyright and related rights for sample code are waived via CC0. Sample\ncode is defined as all source code displayed within the prose of the\ndocumentation.\n\nCC0: http://creativecommons.org/publicdomain/zero/1.0/\n\n====\n\nFiles located in the node_modules and vendor directories are externally\nmaintained libraries used by this software which have their own\nlicenses; we recommend you read them, as their terms may differ from the\nterms above.\n */\n\n/** Error message constants. */\nconst FUNC_ERROR_TEXT = 'Expected a function'\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nconst nativeMax = Math.max,\n nativeMin = Math.min\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n let lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT)\n }\n wait = wait || 0\n if (typeof options === 'object') {\n leading = !!options.leading\n maxing = 'maxWait' in options\n maxWait = maxing ? nativeMax(options.maxWait || 0, wait) : maxWait\n trailing = 'trailing' in options ? !!options.trailing : trailing\n }\n\n function invokeFunc(time) {\n const args = lastArgs,\n thisArg = lastThis\n\n lastArgs = lastThis = undefined\n lastInvokeTime = time\n result = func.apply(thisArg, args)\n return result\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait)\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result\n }\n\n function remainingWait(time) {\n const timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall\n\n return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting\n }\n\n function shouldInvoke(time) {\n const timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (\n lastCallTime === undefined ||\n timeSinceLastCall >= wait ||\n timeSinceLastCall < 0 ||\n (maxing && timeSinceLastInvoke >= maxWait)\n )\n }\n\n function timerExpired() {\n const time = Date.now()\n if (shouldInvoke(time)) {\n return trailingEdge(time)\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time))\n }\n\n function trailingEdge(time) {\n timerId = undefined\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time)\n }\n lastArgs = lastThis = undefined\n return result\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId)\n }\n lastInvokeTime = 0\n lastArgs = lastCallTime = lastThis = timerId = undefined\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(Date.now())\n }\n\n function debounced() {\n const time = Date.now(),\n isInvoking = shouldInvoke(time)\n\n // eslint-disable-next-line prefer-rest-params\n lastArgs = arguments\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n lastThis = this\n lastCallTime = time\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime)\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId)\n timerId = setTimeout(timerExpired, wait)\n return invokeFunc(lastCallTime)\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait)\n }\n return result\n }\n debounced.cancel = cancel\n debounced.flush = flush\n return debounced\n}\n\nexport default debounce\n", "'use client'\n\nimport type {\n EditorThemeClasses,\n Klass,\n LexicalCommand,\n LexicalEditor,\n LexicalNode,\n RangeSelection,\n} from 'lexical'\nimport type { JSX } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { TablePlugin as LexicalReactTablePlugin } from '@lexical/react/LexicalTablePlugin'\nimport { INSERT_TABLE_COMMAND, TableNode } from '@lexical/table'\nimport { mergeRegister } from '@lexical/utils'\nimport { formatDrawerSlug, useEditDepth, useModal } from '@payloadcms/ui'\nimport { $getSelection, $isRangeSelection, COMMAND_PRIORITY_EDITOR, createCommand } from 'lexical'\nimport { createContext, useContext, useEffect, useMemo, useState } from 'react'\nimport * as React from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { FieldsDrawer } from '../../../../../utilities/fieldsDrawer/Drawer.js'\nimport './index.scss'\n\nexport type CellContextShape = {\n cellEditorConfig: CellEditorConfig | null\n cellEditorPlugins: Array<JSX.Element> | JSX.Element | null\n set: (\n cellEditorConfig: CellEditorConfig | null,\n cellEditorPlugins: Array<JSX.Element> | JSX.Element | null,\n ) => void\n}\n\nexport type CellEditorConfig = Readonly<{\n namespace: string\n nodes?: ReadonlyArray<Klass<LexicalNode>>\n onError: (error: Error, editor: LexicalEditor) => void\n readOnly?: boolean\n theme?: EditorThemeClasses\n}>\n\nexport const OPEN_TABLE_DRAWER_COMMAND: LexicalCommand<{}> = createCommand(\n 'OPEN_EMBED_DRAWER_COMMAND',\n)\n\nexport const CellContext = createContext<CellContextShape>({\n cellEditorConfig: null,\n cellEditorPlugins: null,\n set: () => {\n // Empty\n },\n})\n\nexport function TableContext({ children }: { children: JSX.Element }) {\n const [contextValue, setContextValue] = useState<{\n cellEditorConfig: CellEditorConfig | null\n cellEditorPlugins: Array<JSX.Element> | JSX.Element | null\n }>({\n cellEditorConfig: null,\n cellEditorPlugins: null,\n })\n return (\n <CellContext.Provider\n value={useMemo(\n () => ({\n cellEditorConfig: contextValue.cellEditorConfig,\n cellEditorPlugins: contextValue.cellEditorPlugins,\n set: (cellEditorConfig, cellEditorPlugins) => {\n setContextValue({ cellEditorConfig, cellEditorPlugins })\n },\n }),\n [contextValue.cellEditorConfig, contextValue.cellEditorPlugins],\n )}\n >\n {children}\n </CellContext.Provider>\n )\n}\n\nexport const TablePlugin: PluginComponent = () => {\n const [editor] = useLexicalComposerContext()\n const cellContext = useContext(CellContext)\n const { closeModal, toggleModal } = useModal()\n const editDepth = useEditDepth()\n const { uuid } = useEditorConfigContext()\n\n const drawerSlug = formatDrawerSlug({\n slug: 'lexical-table-create-' + uuid,\n depth: editDepth,\n })\n\n useEffect(() => {\n if (!editor.hasNodes([TableNode])) {\n throw new Error('TablePlugin: TableNode is not registered on editor')\n }\n\n return mergeRegister(\n editor.registerCommand(\n OPEN_TABLE_DRAWER_COMMAND,\n () => {\n let rangeSelection: RangeSelection | null = null\n\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n rangeSelection = selection\n }\n })\n\n if (rangeSelection) {\n toggleModal(drawerSlug)\n }\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n )\n }, [cellContext, editor, toggleModal])\n\n return (\n <React.Fragment>\n <FieldsDrawer\n drawerSlug={drawerSlug}\n drawerTitle=\"Create Table\"\n featureKey=\"experimental_table\"\n handleDrawerSubmit={(_fields, data) => {\n closeModal(drawerSlug)\n\n if (!data.columns || !data.rows) {\n return\n }\n\n editor.dispatchCommand(INSERT_TABLE_COMMAND, {\n columns: String(data.columns),\n rows: String(data.rows),\n })\n }}\n schemaPathSuffix=\"fields\"\n />\n <LexicalReactTablePlugin hasCellBackgroundColor={false} hasCellMerge />\n </React.Fragment>\n )\n}\n", "'use client'\n\nimport { $isNodeSelection } from 'lexical'\n\nimport { UploadIcon } from '../../../lexical/ui/icons/Upload/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { slashMenuBasicGroupWithItems } from '../../shared/slashMenu/basicGroup.js'\nimport { toolbarAddDropdownGroupWithItems } from '../../shared/toolbar/addDropdownGroup.js'\nimport { INSERT_UPLOAD_WITH_DRAWER_COMMAND } from './drawer/commands.js'\nimport { $isUploadNode, UploadNode } from './nodes/UploadNode.js'\nimport { UploadPlugin } from './plugin/index.js'\n\nexport type UploadFeaturePropsClient = {\n collections: {\n [collection: string]: {\n hasExtraFields: boolean\n }\n }\n}\n\nexport const UploadFeatureClient = createClientFeature<UploadFeaturePropsClient>({\n nodes: [UploadNode],\n plugins: [\n {\n Component: UploadPlugin,\n position: 'normal',\n },\n ],\n slashMenu: {\n groups: [\n slashMenuBasicGroupWithItems([\n {\n Icon: UploadIcon,\n key: 'upload',\n keywords: ['upload', 'image', 'file', 'img', 'picture', 'photo', 'media'],\n label: ({ i18n }) => {\n return i18n.t('lexical:upload:label')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_UPLOAD_WITH_DRAWER_COMMAND, {\n replace: false,\n })\n },\n },\n ]),\n ],\n },\n toolbarFixed: {\n groups: [\n toolbarAddDropdownGroupWithItems([\n {\n ChildComponent: UploadIcon,\n isActive: ({ selection }) => {\n if (!$isNodeSelection(selection) || !selection.getNodes().length) {\n return false\n }\n\n const firstNode = selection.getNodes()[0]\n return $isUploadNode(firstNode)\n },\n key: 'upload',\n label: ({ i18n }) => {\n return i18n.t('lexical:upload:label')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_UPLOAD_WITH_DRAWER_COMMAND, {\n replace: false,\n })\n },\n },\n ]),\n ],\n },\n})\n", "'use client'\nimport React from 'react'\n\nexport const UploadIcon: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"icon\"\n fill=\"none\"\n focusable=\"false\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M14.6667 4H5.33333C4.59695 4 4 4.59695 4 5.33333V14.6667C4 15.403 4.59695 16 5.33333 16H14.6667C15.403 16 16 15.403 16 14.6667V5.33333C16 4.59695 15.403 4 14.6667 4Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.99984 9.33366C8.73622 9.33366 9.33317 8.73671 9.33317 8.00033C9.33317 7.26395 8.73622 6.66699 7.99984 6.66699C7.26346 6.66699 6.6665 7.26395 6.6665 8.00033C6.6665 8.73671 7.26346 9.33366 7.99984 9.33366Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M16 11.9995L13.9427 9.94214C13.6926 9.69218 13.3536 9.55176 13 9.55176C12.6464 9.55176 12.3074 9.69218 12.0573 9.94214L6 15.9995\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n", "'use client'\nimport type { LexicalCommand } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $insertNodeToNearestRoot, mergeRegister } from '@lexical/utils'\nimport { useConfig } from '@payloadcms/ui'\nimport {\n $getPreviousSelection,\n $getSelection,\n $isParagraphNode,\n $isRangeSelection,\n COMMAND_PRIORITY_EDITOR,\n createCommand,\n} from 'lexical'\nimport React, { useEffect } from 'react'\n\nimport type { PluginComponentWithAnchor } from '../../../typesClient.js'\nimport type { UploadData } from '../../server/nodes/UploadNode.js'\nimport type { UploadFeaturePropsClient } from '../feature.client.js'\n\nimport { UploadDrawer } from '../drawer/index.js'\nimport { $createUploadNode, UploadNode } from '../nodes/UploadNode.js'\n\nexport type InsertUploadPayload = Readonly<Omit<UploadData, 'id'> & Partial<Pick<UploadData, 'id'>>>\n\nexport const INSERT_UPLOAD_COMMAND: LexicalCommand<InsertUploadPayload> =\n createCommand('INSERT_UPLOAD_COMMAND')\n\nexport const UploadPlugin: PluginComponentWithAnchor<UploadFeaturePropsClient> = ({\n clientProps,\n}) => {\n const [editor] = useLexicalComposerContext()\n const {\n config: { collections },\n } = useConfig()\n\n useEffect(() => {\n if (!editor.hasNodes([UploadNode])) {\n throw new Error('UploadPlugin: UploadNode not registered on editor')\n }\n\n return mergeRegister(\n editor.registerCommand<InsertUploadPayload>(\n INSERT_UPLOAD_COMMAND,\n (payload: InsertUploadPayload) => {\n editor.update(() => {\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n const uploadNode = $createUploadNode({\n data: {\n id: payload.id,\n fields: payload.fields,\n relationTo: payload.relationTo,\n value: payload.value,\n },\n })\n // Insert upload node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(uploadNode)\n\n const { focus } = selection\n const focusNode = focus.getNode()\n\n // First, delete currently selected node if it's an empty paragraph and if there are sufficient\n // paragraph nodes (more than 1) left in the parent node, so that we don't \"trap\" the user\n if (\n $isParagraphNode(focusNode) &&\n focusNode.getTextContentSize() === 0 &&\n focusNode\n .getParent()\n .getChildren()\n .filter((node) => $isParagraphNode(node)).length > 1\n ) {\n focusNode.remove()\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n )\n }, [editor])\n\n return <UploadDrawer enabledCollectionSlugs={collections.map(({ slug }) => slug)} />\n}\n", "'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useListDrawer } from '@payloadcms/ui'\nimport { $getNodeByKey, COMMAND_PRIORITY_EDITOR } from 'lexical'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { EnabledRelationshipsCondition } from '../../../relationship/client/utils/EnabledRelationshipsCondition.js'\nimport { $createUploadNode } from '../nodes/UploadNode.js'\nimport { INSERT_UPLOAD_COMMAND } from '../plugin/index.js'\nimport { INSERT_UPLOAD_WITH_DRAWER_COMMAND } from './commands.js'\n\nconst insertUpload = ({\n editor,\n relationTo,\n replaceNodeKey,\n value,\n}: {\n editor: LexicalEditor\n relationTo: string\n replaceNodeKey: null | string\n value: number | string\n}) => {\n if (!replaceNodeKey) {\n editor.dispatchCommand(INSERT_UPLOAD_COMMAND, {\n fields: null,\n relationTo,\n value,\n })\n } else {\n editor.update(() => {\n const node = $getNodeByKey(replaceNodeKey)\n if (node) {\n node.replace(\n $createUploadNode({\n data: {\n fields: null,\n relationTo,\n value,\n },\n }),\n )\n }\n })\n }\n}\n\ntype Props = {\n enabledCollectionSlugs: string[]\n}\n\nconst UploadDrawerComponent: React.FC<Props> = ({ enabledCollectionSlugs }) => {\n const [editor] = useLexicalComposerContext()\n\n const [replaceNodeKey, setReplaceNodeKey] = useState<null | string>(null)\n\n const [ListDrawer, ListDrawerToggler, { closeDrawer, openDrawer }] = useListDrawer({\n collectionSlugs: enabledCollectionSlugs,\n uploads: true,\n })\n\n useEffect(() => {\n return editor.registerCommand<{\n replace: { nodeKey: string } | false\n }>(\n INSERT_UPLOAD_WITH_DRAWER_COMMAND,\n (payload) => {\n setReplaceNodeKey(payload?.replace ? payload?.replace.nodeKey : null)\n openDrawer()\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n )\n }, [editor, openDrawer])\n\n const onSelect = useCallback(\n ({ collectionSlug, docID }) => {\n insertUpload({\n editor,\n relationTo: collectionSlug,\n replaceNodeKey,\n value: docID,\n })\n closeDrawer()\n },\n [editor, closeDrawer, replaceNodeKey],\n )\n\n return <ListDrawer onSelect={onSelect} />\n}\n\nexport const UploadDrawer = (props: Props): React.ReactNode => {\n return (\n <EnabledRelationshipsCondition {...props} uploads>\n <UploadDrawerComponent {...props} />\n </EnabledRelationshipsCondition>\n )\n}\n", "'use client'\n\nimport { ShimmerEffect, useClientFunctions, useFieldProps } from '@payloadcms/ui'\nimport React, { Suspense, lazy, useEffect, useState } from 'react'\n\nimport type { FeatureProviderClient } from '../features/typesClient.js'\nimport type { SanitizedClientEditorConfig } from '../lexical/config/types.js'\nimport type { GeneratedFeatureProviderComponent, LexicalRichTextFieldProps } from '../types.js'\n\nimport { defaultEditorLexicalConfig } from '../lexical/config/client/default.js'\nimport { loadClientFeatures } from '../lexical/config/client/loader.js'\nimport { sanitizeClientEditorConfig } from '../lexical/config/client/sanitize.js'\n\nconst RichTextEditor = lazy(() =>\n import('./Field.js').then((module) => ({ default: module.RichText })),\n)\n\nexport const RichTextField: React.FC<LexicalRichTextFieldProps> = (props) => {\n const {\n admin = {},\n field: { richTextComponentMap },\n lexicalEditorConfig,\n } = props\n const { schemaPath } = useFieldProps()\n const clientFunctions = useClientFunctions()\n const [hasLoadedFeatures, setHasLoadedFeatures] = useState(false)\n\n const [featureProviders, setFeatureProviders] = useState<\n FeatureProviderClient<unknown, unknown>[]\n >([])\n\n const [finalSanitizedEditorConfig, setFinalSanitizedEditorConfig] =\n useState<SanitizedClientEditorConfig>(null)\n\n let featureProviderComponents: GeneratedFeatureProviderComponent[] = richTextComponentMap.get(\n 'features',\n ) as GeneratedFeatureProviderComponent[]\n // order by order\n featureProviderComponents = featureProviderComponents.sort((a, b) => a.order - b.order)\n\n let featureProvidersAndComponentsToLoad = 0 // feature providers and components\n for (const featureProvider of featureProviderComponents) {\n const featureComponentKeys = Array.from(richTextComponentMap.keys()).filter((key) =>\n key.startsWith(\n `lexical_internal_feature.${featureProvider.key}.lexical_internal_components.`,\n ),\n )\n\n featureProvidersAndComponentsToLoad += 1\n featureProvidersAndComponentsToLoad += featureComponentKeys.length\n }\n\n useEffect(() => {\n if (!hasLoadedFeatures) {\n const featureProvidersLocal: FeatureProviderClient<unknown, unknown>[] = []\n let featureProvidersAndComponentsLoaded = 0\n\n Object.entries(clientFunctions).forEach(([key, plugin]) => {\n if (key.startsWith(`lexicalFeature.${schemaPath}.`)) {\n if (!key.includes('.lexical_internal_components.')) {\n featureProvidersLocal.push(plugin)\n }\n\n featureProvidersAndComponentsLoaded++\n }\n })\n\n if (featureProvidersAndComponentsLoaded === featureProvidersAndComponentsToLoad) {\n setFeatureProviders(featureProvidersLocal)\n setHasLoadedFeatures(true)\n\n /**\n * Loaded feature provided => create the final sanitized editor config\n */\n\n const resolvedClientFeatures = loadClientFeatures({\n clientFunctions,\n schemaPath,\n unSanitizedEditorConfig: {\n features: featureProvidersLocal,\n lexical: lexicalEditorConfig,\n },\n })\n\n setFinalSanitizedEditorConfig(\n sanitizeClientEditorConfig(\n lexicalEditorConfig ? lexicalEditorConfig : defaultEditorLexicalConfig,\n resolvedClientFeatures,\n admin,\n ),\n )\n }\n }\n }, [\n admin,\n hasLoadedFeatures,\n clientFunctions,\n schemaPath,\n featureProviderComponents.length,\n featureProviders,\n finalSanitizedEditorConfig,\n lexicalEditorConfig,\n featureProvidersAndComponentsToLoad,\n ])\n\n if (!hasLoadedFeatures) {\n return (\n <React.Fragment>\n {Array.isArray(featureProviderComponents) &&\n featureProviderComponents.map((featureProvider) => {\n // get all components starting with key feature.${FeatureProvider.key}.components.{featureComponentKey}\n const featureComponentKeys = Array.from(richTextComponentMap.keys()).filter((key) =>\n key.startsWith(\n `lexical_internal_feature.${featureProvider.key}.lexical_internal_components.`,\n ),\n )\n const featureComponents: React.ReactNode[] = featureComponentKeys.map((key) => {\n return richTextComponentMap.get(key)\n }) as React.ReactNode[] // TODO: Type better\n\n return (\n <React.Fragment key={featureProvider.key}>\n {featureComponents?.length\n ? featureComponents.map((FeatureComponent) => {\n return FeatureComponent\n })\n : null}\n {featureProvider.ClientFeature}\n </React.Fragment>\n )\n })}\n </React.Fragment>\n )\n }\n\n return (\n <Suspense fallback={<ShimmerEffect height=\"35vh\" />}>\n {finalSanitizedEditorConfig && (\n <RichTextEditor {...props} editorConfig={finalSanitizedEditorConfig} />\n )}\n </Suspense>\n )\n}\n", "'use client'\nexport function joinClasses(...args: Array<boolean | null | string | undefined>): string {\n return args.filter(Boolean).join(' ')\n}\n", "'use client'\ntype Force = [number, number]\ntype Listener = (force: Force, e: TouchEvent) => void\ninterface ElementValues {\n handleTouchend: (e: TouchEvent) => void\n handleTouchstart: (e: TouchEvent) => void\n listeners: Set<Listener>\n start: Force | null\n}\n\nconst elements = new WeakMap<HTMLElement, ElementValues>()\n\nfunction readTouch(e: TouchEvent): [number, number] | null {\n const touch = e.changedTouches[0]\n if (touch === undefined) {\n return null\n }\n return [touch.clientX, touch.clientY]\n}\n\nfunction addListener(element: HTMLElement, cb: Listener): () => void {\n let elementValues = elements.get(element)\n if (elementValues === undefined) {\n const listeners = new Set<Listener>()\n const handleTouchstart = (e: TouchEvent): void => {\n if (elementValues !== undefined) {\n elementValues.start = readTouch(e)\n }\n }\n const handleTouchend = (e: TouchEvent): void => {\n if (elementValues === undefined) {\n return\n }\n const { start } = elementValues\n if (start === null) {\n return\n }\n const end = readTouch(e)\n for (const listener of listeners) {\n if (end !== null) {\n listener([end[0] - start[0], end[1] - start[1]], e)\n }\n }\n }\n element.addEventListener('touchstart', handleTouchstart)\n element.addEventListener('touchend', handleTouchend)\n\n elementValues = {\n handleTouchend,\n handleTouchstart,\n listeners,\n start: null,\n }\n elements.set(element, elementValues)\n }\n elementValues.listeners.add(cb)\n return () => {\n deleteListener(element, cb)\n }\n}\n\nfunction deleteListener(element: HTMLElement, cb: Listener): void {\n const elementValues = elements.get(element)\n if (elementValues === undefined) {\n return\n }\n const { listeners } = elementValues\n listeners.delete(cb)\n if (listeners.size === 0) {\n elements.delete(element)\n element.removeEventListener('touchstart', elementValues.handleTouchstart)\n element.removeEventListener('touchend', elementValues.handleTouchend)\n }\n}\n\nexport function addSwipeLeftListener(\n element: HTMLElement,\n cb: (_force: number, e: TouchEvent) => void,\n): () => void {\n return addListener(element, (force, e) => {\n const [x, y] = force\n if (x < 0 && -x > Math.abs(y)) {\n cb(x, e)\n }\n })\n}\n\nexport function addSwipeRightListener(\n element: HTMLElement,\n cb: (_force: number, e: TouchEvent) => void,\n): () => void {\n return addListener(element, (force, e) => {\n const [x, y] = force\n if (x > 0 && x > Math.abs(y)) {\n cb(x, e)\n }\n })\n}\n\nexport function addSwipeUpListener(\n element: HTMLElement,\n cb: (_force: number, e: TouchEvent) => void,\n): () => void {\n return addListener(element, (force, e) => {\n const [x, y] = force\n if (y < 0 && -y > Math.abs(x)) {\n cb(x, e)\n }\n })\n}\n\nexport function addSwipeDownListener(\n element: HTMLElement,\n cb: (_force: number, e: TouchEvent) => void,\n): () => void {\n return addListener(element, (force, e) => {\n const [x, y] = force\n if (y > 0 && y > Math.abs(x)) {\n cb(x, e)\n }\n })\n}\n", "/* eslint-disable perfectionist/sort-objects */\n/* eslint-disable regexp/no-obscure-range */\n/* eslint-disable @typescript-eslint/no-redundant-type-constituents */\n/* eslint-disable regexp/no-misleading-unicode-character */\n//This copy-and-pasted from lexical here: https://github.com/facebook/lexical/blob/c2ceee223f46543d12c574e62155e619f9a18a5d/packages/lexical/src/LexicalConstants.ts\n\nimport type { ElementFormatType, TextFormatType, TextModeType } from 'lexical'\nexport type TextDetailType = 'directionless' | 'unmergable'\n\n// DOM\nexport const NodeFormat = {\n DOM_ELEMENT_TYPE: 1,\n DOM_TEXT_TYPE: 3,\n // Reconciling\n NO_DIRTY_NODES: 0,\n HAS_DIRTY_NODES: 1,\n FULL_RECONCILE: 2,\n // Text node modes\n IS_NORMAL: 0,\n IS_TOKEN: 1,\n IS_SEGMENTED: 2,\n IS_INERT: 3,\n // Text node formatting\n IS_BOLD: 1,\n IS_ITALIC: 1 << 1,\n IS_STRIKETHROUGH: 1 << 2,\n IS_UNDERLINE: 1 << 3,\n IS_CODE: 1 << 4,\n IS_SUBSCRIPT: 1 << 5,\n IS_SUPERSCRIPT: 1 << 6,\n IS_HIGHLIGHT: 1 << 7,\n // Text node details\n IS_DIRECTIONLESS: 1,\n IS_UNMERGEABLE: 1 << 1,\n // Element node formatting\n IS_ALIGN_LEFT: 1,\n IS_ALIGN_CENTER: 2,\n IS_ALIGN_RIGHT: 3,\n IS_ALIGN_JUSTIFY: 4,\n IS_ALIGN_START: 5,\n IS_ALIGN_END: 6,\n} as const\n\nexport const IS_ALL_FORMATTING =\n NodeFormat.IS_BOLD |\n NodeFormat.IS_ITALIC |\n NodeFormat.IS_STRIKETHROUGH |\n NodeFormat.IS_UNDERLINE |\n NodeFormat.IS_CODE |\n NodeFormat.IS_SUBSCRIPT |\n NodeFormat.IS_SUPERSCRIPT |\n NodeFormat.IS_HIGHLIGHT\n\n// Reconciliation\nexport const NON_BREAKING_SPACE = '\\u00A0'\n\nexport const DOUBLE_LINE_BREAK = '\\n\\n'\n\n// For FF, we need to use a non-breaking space, or it gets composition\n// in a stuck state.\n\nconst RTL = '\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC'\nconst LTR =\n 'A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6' +\n '\\u00F8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF\\u200E\\u2C00-\\uFB1C' +\n '\\uFE00-\\uFE6F\\uFEFD-\\uFFFF'\n\n// eslint-disable-next-line no-misleading-character-class\nexport const RTL_REGEX = new RegExp('^[^' + LTR + ']*[' + RTL + ']')\n// eslint-disable-next-line no-misleading-character-class\nexport const LTR_REGEX = new RegExp('^[^' + RTL + ']*[' + LTR + ']')\n\nexport const TEXT_TYPE_TO_FORMAT: Record<TextFormatType | string, number> = {\n bold: NodeFormat.IS_BOLD,\n code: NodeFormat.IS_CODE,\n highlight: NodeFormat.IS_HIGHLIGHT,\n italic: NodeFormat.IS_ITALIC,\n strikethrough: NodeFormat.IS_STRIKETHROUGH,\n subscript: NodeFormat.IS_SUBSCRIPT,\n superscript: NodeFormat.IS_SUPERSCRIPT,\n underline: NodeFormat.IS_UNDERLINE,\n}\n\nexport const DETAIL_TYPE_TO_DETAIL: Record<TextDetailType | string, number> = {\n directionless: NodeFormat.IS_DIRECTIONLESS,\n unmergeable: NodeFormat.IS_UNMERGEABLE,\n}\n\nexport const ELEMENT_TYPE_TO_FORMAT: Record<Exclude<ElementFormatType, ''>, number> = {\n center: NodeFormat.IS_ALIGN_CENTER,\n end: NodeFormat.IS_ALIGN_END,\n justify: NodeFormat.IS_ALIGN_JUSTIFY,\n left: NodeFormat.IS_ALIGN_LEFT,\n right: NodeFormat.IS_ALIGN_RIGHT,\n start: NodeFormat.IS_ALIGN_START,\n}\n\nexport const ELEMENT_FORMAT_TO_TYPE: Record<number, ElementFormatType> = {\n [NodeFormat.IS_ALIGN_CENTER]: 'center',\n [NodeFormat.IS_ALIGN_END]: 'end',\n [NodeFormat.IS_ALIGN_JUSTIFY]: 'justify',\n [NodeFormat.IS_ALIGN_LEFT]: 'left',\n [NodeFormat.IS_ALIGN_RIGHT]: 'right',\n [NodeFormat.IS_ALIGN_START]: 'start',\n}\n\nexport const TEXT_MODE_TO_TYPE: Record<TextModeType, 0 | 1 | 2> = {\n normal: NodeFormat.IS_NORMAL,\n segmented: NodeFormat.IS_SEGMENTED,\n token: NodeFormat.IS_TOKEN,\n}\n\nexport const TEXT_TYPE_TO_MODE: Record<number, TextModeType> = {\n [NodeFormat.IS_NORMAL]: 'normal',\n [NodeFormat.IS_SEGMENTED]: 'segmented',\n [NodeFormat.IS_TOKEN]: 'token',\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["slashMenuBasicGroupWithItems", "items", "key", "label", "i18n", "t", "createHeadlessEditor", "useClientFunctions", "useTableCell", "$getRoot", "React", "useEffect", "useState", "LexicalEditorTheme", "block", "blockCursor", "characterLimit", "code", "codeHighlight", "atrule", "attr", "boolean", "builtin", "cdata", "char", "class", "comment", "constant", "deleted", "doctype", "entity", "function", "important", "inserted", "keyword", "namespace", "number", "operator", "prolog", "property", "punctuation", "regex", "selector", "string", "symbol", "tag", "url", "variable", "embedBlock", "base", "focus", "hashtag", "heading", "h1", "h2", "h3", "h4", "h5", "h6", "hr", "indent", "inlineImage", "link", "list", "checklist", "listitem", "listitemChecked", "listitemUnchecked", "nested", "olDepth", "ul", "ltr", "mark", "markOverlap", "paragraph", "quote", "relationship", "rtl", "table", "tableAddColumns", "tableAddRows", "tableCell", "tableCellActionButton", "tableCellActionButtonContainer", "tableCellEditing", "tableCellHeader", "tableCellPrimarySelected", "tableCellResizer", "tableCellSelected", "tableCellSortedIndicator", "tableResizeRuler", "tableSelected", "text", "bold", "italic", "strikethrough", "subscript", "superscript", "underline", "underlineStrikethrough", "upload", "defaultEditorLexicalConfig", "namespace", "theme", "LexicalEditorTheme", "loadClientFeatures", "clientFunctions", "schemaPath", "unSanitizedEditorConfig", "featureProvider", "features", "clientFeatureProps", "featureKey", "order", "undefined", "Error", "sort", "a", "b", "featureProviderMap", "Map", "map", "f", "resolvedFeatures", "loaded", "relevantClientFunctions", "Object", "entries", "forEach", "key", "plugin", "startsWith", "featureComponentKey", "split", "feature", "set", "sanitizeClientFeatures", "features", "sanitized", "enabledFeatures", "hooks", "load", "save", "markdownTransformers", "nodes", "plugins", "providers", "slashMenu", "dynamicGroups", "groups", "toolbarFixed", "toolbarInline", "size", "forEach", "feature", "length", "concat", "plugin", "i", "push", "Component", "clientProps", "sanitizedClientFeatureProps", "key", "position", "group", "foundGroup", "find", "sanitizedGroup", "filter", "items", "optionGroup", "sort", "a", "b", "order", "sanitizeClientEditorConfig", "lexical", "resolvedClientFeatureMap", "admin", "resolvedFeatureMap", "RichTextCell", "props", "admin", "field", "_schemaPath", "richTextComponentMap", "lexicalEditorConfig", "preview", "setPreview", "React", "useState", "cellData", "useTableCell", "clientFunctions", "useClientFunctions", "hasLoadedFeatures", "setHasLoadedFeatures", "featureProviders", "setFeatureProviders", "finalSanitizedEditorConfig", "setFinalSanitizedEditorConfig", "featureProviderComponents", "get", "sort", "a", "b", "order", "featureProvidersAndComponentsToLoad", "featureProvider", "featureComponentKeys", "Array", "from", "keys", "filter", "key", "startsWith", "length", "useEffect", "featureProvidersLocal", "featureProvidersAndComponentsLoaded", "Object", "entries", "forEach", "plugin", "includes", "push", "resolvedClientFeatures", "loadClientFeatures", "schemaPath", "unSanitizedEditorConfig", "features", "lexical", "sanitizeClientEditorConfig", "defaultEditorLexicalConfig", "dataToUse", "hooks", "load", "hook", "incomingEditorState", "isArray", "headlessEditor", "createHeadlessEditor", "namespace", "nodes", "getEnabledNodes", "editorConfig", "theme", "setEditorState", "parseEditorState", "textContent", "getEditorState", "read", "$getRoot", "getTextContent", "_jsx", "Fragment", "map", "featureComponents", "_jsxs", "FeatureComponent", "ClientFeature", "$isElementNode", "$isRangeSelection", "FORMAT_ELEMENT_COMMAND", "AlignCenterIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "strokeWidth", "AlignJustifyIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "strokeWidth", "AlignLeftIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "strokeWidth", "AlignRightIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "strokeWidth", "useAddClientFunction", "useFieldProps", "useTableCell", "useLexicalFeature", "featureKey", "feature", "schemaPath", "schemaPathFromFieldProps", "cellProps", "field", "_schemaPath", "createClientComponent", "clientFeature", "props", "useLexicalFeature", "featureKey", "createClientFeature", "feature", "createClientComponent", "props", "featureProviderClient", "clientFeatureProps", "clientFunctions", "featureProviderMap", "resolvedFeatures", "unSanitizedEditorConfig", "toReturn", "sanitizedClientFeatureProps", "newFeature", "toolbarAlignGroupWithItems", "items", "type", "ChildComponent", "AlignLeftIcon", "key", "order", "toolbarGroups", "toolbarAlignGroupWithItems", "ChildComponent", "AlignLeftIcon", "isActive", "selection", "$isRangeSelection", "node", "getNodes", "$isElementNode", "getFormatType", "parent", "getParent", "key", "label", "i18n", "t", "onSelect", "editor", "dispatchCommand", "FORMAT_ELEMENT_COMMAND", "order", "AlignCenterIcon", "AlignRightIcon", "AlignJustifyIcon", "AlignFeatureClient", "createClientFeature", "toolbarFixed", "groups", "toolbarInline", "$createQuoteNode", "$isQuoteNode", "QuoteNode", "$setBlocksType", "$getSelection", "$isRangeSelection", "BlockquoteIcon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "TextIcon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "toolbarTextDropdownGroupWithItems", "items", "type", "ChildComponent", "TextIcon", "key", "order", "$createQuoteNode", "$isQuoteNode", "QuoteNode", "$createLineBreakNode", "MarkdownTransformer", "type", "dependencies", "export", "node", "exportChildren", "lines", "split", "output", "line", "push", "join", "regExp", "replace", "parentNode", "children", "_match", "isImport", "previousNode", "getPreviousSibling", "splice", "getChildrenSize", "select", "remove", "append", "toolbarGroups", "toolbarTextDropdownGroupWithItems", "ChildComponent", "BlockquoteIcon", "isActive", "selection", "$isRangeSelection", "node", "getNodes", "$isQuoteNode", "getParent", "key", "label", "i18n", "t", "onSelect", "editor", "update", "$getSelection", "$setBlocksType", "$createQuoteNode", "order", "BlockquoteFeatureClient", "createClientFeature", "markdownTransformers", "MarkdownTransformer", "nodes", "QuoteNode", "slashMenu", "groups", "slashMenuBasicGroupWithItems", "Icon", "keywords", "toolbarFixed", "toolbarInline", "getTranslation", "BlockIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "rx", "stroke", "x", "y", "InlineBlocksIcon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "clipRule", "d", "fillRule", "ObjectID", "React", "DecoratorBlockNode", "ObjectID", "deepCopyObjectSimple", "ServerBlockNode", "__fields", "constructor", "fields", "format", "key", "clone", "node", "__format", "__key", "getType", "importDOM", "importJSON", "serializedNode", "version", "data", "$createServerBlockNode", "setFormat", "isInline", "decorate", "editor", "config", "exportDOM", "element", "document", "createElement", "text", "createTextNode", "getTextContent", "append", "exportJSON", "type", "getFields", "getLatest", "setFields", "fieldsCopy", "writable", "getWritable", "id", "default", "toHexString", "BlockComponent", "React", "lazy", "then", "module", "default", "BlockNode", "ServerBlockNode", "clone", "node", "getType", "importJSON", "serializedNode", "version", "fields", "data", "$createBlockNode", "setFormat", "format", "decorate", "editor", "config", "_jsx", "formData", "getFields", "nodeKey", "getKey", "exportJSON", "id", "ObjectID", "toHexString", "$isBlockNode", "c", "_c", "useLexicalComposerContext", "$insertNodeToNearestRoot", "$wrapNodeInElement", "mergeRegister", "getTranslation", "formatDrawerSlug", "useEditDepth", "useFieldProps", "useModal", "useTranslation", "$createParagraphNode", "$getNodeByKey", "$getPreviousSelection", "$getSelection", "$insertNodes", "$isParagraphNode", "$isRangeSelection", "$isRootOrShadowRoot", "COMMAND_PRIORITY_EDITOR", "useEffect", "useState", "BlocksPlugin", "$", "_c", "editor", "useLexicalComposerContext", "closeModal", "toggleModal", "useModal", "blockFields", "setBlockFields", "useState", "blockType", "setBlockType", "targetNodeKey", "setTargetNodeKey", "i18n", "t", "useTranslation", "schemaPath", "useFieldProps", "uuid", "useEditorConfigContext", "editDepth", "useEditDepth", "t0", "t1", "formatDrawerSlug", "slug", "depth", "drawerSlug", "field", "t2", "richTextComponentMap", "t3", "t4", "hasNodes", "BlockNode", "Error", "mergeRegister", "registerCommand", "INSERT_BLOCK_COMMAND", "payload", "update", "selection", "$getSelection", "$getPreviousSelection", "$isRangeSelection", "blockNode", "$createBlockNode", "$insertNodeToNearestRoot", "focus", "focusNode", "getNode", "$isParagraphNode", "getTextContentSize", "getParent", "getChildren", "filter", "node", "length", "remove", "COMMAND_PRIORITY_EDITOR", "INSERT_INLINE_BLOCK_COMMAND", "fields", "node_0", "$getNodeByKey", "setFields", "inlineBlockNode", "$createInlineBlockNode", "$insertNodes", "$isRootOrShadowRoot", "getParentOrThrow", "$wrapNodeInElement", "$createParagraphNode", "selectEnd", "OPEN_INLINE_BLOCK_DRAWER_COMMAND", "t5", "fields_0", "nodeKey", "rangeSelection", "getEditorState", "read", "selection_0", "useEffect", "schemaFieldsPath", "componentMapRenderedBlockPath", "t6", "Symbol", "for", "bb0", "blocksField", "has", "get", "clientBlock", "blocks", "find", "block", "blockDisplayName", "labels", "singular", "getTranslation", "t7", "_fields", "data", "dispatchCommand", "_jsx", "FieldsDrawer", "drawerTitle", "id", "label", "featureKey", "fieldMapOverride", "handleDrawerSubmit", "schemaFieldsPathOverride", "schemaPathSuffix", "BlocksFeatureClient", "createClientFeature", "props", "nodes", "BlockNode", "InlineBlockNode", "plugins", "Component", "BlocksPlugin", "position", "sanitizedClientFeatureProps", "slashMenu", "groups", "clientBlockSlugs", "length", "items", "map", "blockSlug", "Icon", "BlockIcon", "key", "keywords", "label", "i18n", "richTextComponentMap", "clientBlock", "get", "blocks", "find", "_block", "slug", "labels", "singular", "getTranslation", "onSelect", "editor", "dispatchCommand", "INSERT_BLOCK_COMMAND", "id", "blockName", "blockType", "t", "clientInlineBlockSlugs", "inlineBlockSlug", "InlineBlocksIcon", "OPEN_INLINE_BLOCK_DRAWER_COMMAND", "fields", "filter", "Boolean", "toolbarFixed", "type", "ChildComponent", "index", "isActive", "undefined", "order", "useLexicalComposerContext", "$createParagraphNode", "$createTextNode", "$getRoot", "React", "useCallback", "useEffect", "useLayoutEffect", "useRef", "useState", "CAN_USE_DOM", "window", "document", "createElement", "documentMode", "CAN_USE_DOM", "document", "IS_APPLE", "test", "navigator", "platform", "IS_FIREFOX", "userAgent", "CAN_USE_BEFORE_INPUT", "window", "InputEvent", "IS_SAFARI", "IS_IOS", "MSStream", "IS_ANDROID", "IS_WINDOWS", "IS_CHROME", "IS_APPLE_WEBKIT", "copy", "text", "textArea", "document", "createElement", "value", "style", "position", "opacity", "body", "appendChild", "focus", "select", "result", "execCommand", "console", "log", "error", "removeChild", "download", "filename", "a", "setAttribute", "encodeURIComponent", "display", "click", "formatStep", "step", "formattedStep", "formatOneStep", "name", "x", "y", "anchorPath", "toString", "anchorOffset", "focusPath", "focusOffset", "count", "join", "isSelectAll", "event", "key", "toLowerCase", "IS_APPLE", "metaKey", "ctrlKey", "sanitizeSelection", "selection", "anchorNode", "focusNode", "getPathFromNodeToEditor", "node", "rootElement", "currentNode", "path", "unshift", "Array", "from", "parentNode", "childNodes", "indexOf", "keyPresses", "Set", "useTestRecorder", "editor", "steps", "setSteps", "useState", "isRecording", "setIsRecording", "setCurrentInnerHTML", "templatedTest", "setTemplatedTest", "previousSelectionRef", "useRef", "skipNextSelectionChangeRef", "preRef", "getCurrentEditor", "useCallback", "generateTestContent", "getRootElement", "browserSelection", "window", "getSelection", "contains", "map", "pushStep", "currentSteps", "currentIndex", "length", "lastStep", "slice", "useLayoutEffect", "onKeyDown", "has", "onKeyUp", "registerRootListener", "prevRootElement", "removeEventListener", "addEventListener", "current", "scrollTo", "scrollHeight", "useEffect", "testContent", "registerUpdateListener", "dirtyElements", "dirtyLeaves", "editorState", "currentSelection", "_selection", "previousSelection", "skipNextSelectionChange", "size", "innerHTML", "toggleEditorSelection", "currentEditor", "update", "root", "$getRoot", "clear", "$createTextNode", "append", "$createParagraphNode", "currentIsRecording", "onSnapshotClick", "onCopyClick", "onDownloadClick", "_jsx", "className", "id", "onClick", "e", "preventDefault", "title", "type", "_jsxs", "ref", "TestRecorderPlugin", "useLexicalComposerContext", "testRecorderButton", "testRecorderOutput", "Fragment", "TestRecorderFeatureClient", "createClientFeature", "plugins", "Component", "TestRecorderPlugin", "position", "c", "_c", "useLexicalComposerContext", "TreeView", "TreeViewPlugin", "$", "editor", "t0", "_jsx", "timeTravelButtonClassName", "timeTravelPanelButtonClassName", "timeTravelPanelClassName", "timeTravelPanelSliderClassName", "treeTypeButtonClassName", "viewClassName", "TreeViewFeatureClient", "createClientFeature", "plugins", "Component", "TreeViewPlugin", "position", "$isRangeSelection", "FORMAT_TEXT_COMMAND", "BoldIcon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "toolbarFormatGroupWithItems", "items", "type", "key", "order", "BOLD_ITALIC_STAR", "type", "format", "tag", "BOLD_ITALIC_UNDERSCORE", "intraword", "BOLD_STAR", "BOLD_UNDERSCORE", "toolbarGroups", "toolbarFormatGroupWithItems", "ChildComponent", "BoldIcon", "isActive", "selection", "$isRangeSelection", "hasFormat", "key", "onSelect", "editor", "dispatchCommand", "FORMAT_TEXT_COMMAND", "order", "BoldFeatureClient", "createClientFeature", "featureProviderMap", "markdownTransformers", "BOLD_STAR", "BOLD_UNDERSCORE", "get", "push", "BOLD_ITALIC_UNDERSCORE", "BOLD_ITALIC_STAR", "toolbarFixed", "groups", "toolbarInline", "$isRangeSelection", "FORMAT_TEXT_COMMAND", "CodeIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "INLINE_CODE", "type", "format", "tag", "toolbarGroups", "toolbarFormatGroupWithItems", "ChildComponent", "CodeIcon", "isActive", "selection", "$isRangeSelection", "hasFormat", "key", "onSelect", "editor", "dispatchCommand", "FORMAT_TEXT_COMMAND", "order", "InlineCodeFeatureClient", "createClientFeature", "markdownTransformers", "INLINE_CODE", "toolbarFixed", "groups", "toolbarInline", "$isRangeSelection", "FORMAT_TEXT_COMMAND", "ItalicIcon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "ITALIC_STAR", "type", "format", "tag", "ITALIC_UNDERSCORE", "intraword", "toolbarGroups", "toolbarFormatGroupWithItems", "ChildComponent", "ItalicIcon", "isActive", "selection", "$isRangeSelection", "hasFormat", "key", "onSelect", "editor", "dispatchCommand", "FORMAT_TEXT_COMMAND", "order", "ItalicFeatureClient", "createClientFeature", "markdownTransformers", "ITALIC_STAR", "ITALIC_UNDERSCORE", "toolbarFixed", "groups", "toolbarInline", "$isRangeSelection", "FORMAT_TEXT_COMMAND", "StrikethroughIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "STRIKETHROUGH", "type", "format", "tag", "toolbarGroups", "toolbarFormatGroupWithItems", "ChildComponent", "StrikethroughIcon", "isActive", "selection", "$isRangeSelection", "hasFormat", "key", "onSelect", "editor", "dispatchCommand", "FORMAT_TEXT_COMMAND", "order", "StrikethroughFeatureClient", "createClientFeature", "markdownTransformers", "STRIKETHROUGH", "toolbarFixed", "groups", "toolbarInline", "$isRangeSelection", "FORMAT_TEXT_COMMAND", "SubscriptIcon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "toolbarGroups", "toolbarFormatGroupWithItems", "ChildComponent", "SubscriptIcon", "isActive", "selection", "$isRangeSelection", "hasFormat", "key", "onSelect", "editor", "dispatchCommand", "FORMAT_TEXT_COMMAND", "order", "SubscriptFeatureClient", "createClientFeature", "toolbarFixed", "groups", "toolbarInline", "$isRangeSelection", "FORMAT_TEXT_COMMAND", "SuperscriptIcon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "toolbarGroups", "toolbarFormatGroupWithItems", "ChildComponent", "SuperscriptIcon", "isActive", "selection", "$isRangeSelection", "hasFormat", "key", "onSelect", "editor", "dispatchCommand", "FORMAT_TEXT_COMMAND", "order", "SuperscriptFeatureClient", "createClientFeature", "toolbarFixed", "groups", "toolbarInline", "$isRangeSelection", "FORMAT_TEXT_COMMAND", "UnderlineIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "toolbarGroups", "toolbarFormatGroupWithItems", "ChildComponent", "UnderlineIcon", "isActive", "selection", "$isRangeSelection", "hasFormat", "key", "onSelect", "editor", "dispatchCommand", "FORMAT_TEXT_COMMAND", "order", "UnderlineFeatureClient", "createClientFeature", "toolbarFixed", "groups", "toolbarInline", "$createHeadingNode", "$isHeadingNode", "HeadingNode", "$setBlocksType", "$getSelection", "$isRangeSelection", "H1Icon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "H2Icon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "H3Icon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "H4Icon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "H5Icon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "H6Icon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "d", "$createHeadingNode", "$isHeadingNode", "HeadingNode", "createBlockNode", "createNode", "parentNode", "children", "match", "node", "append", "replace", "select", "MarkdownTransformer", "enabledHeadingSizes", "pattern", "map", "tag", "Number", "slice", "size", "join", "regExp", "RegExp", "type", "dependencies", "HeadingNode", "export", "node", "exportChildren", "$isHeadingNode", "level", "getTag", "repeat", "replace", "createBlockNode", "match", "length", "$createHeadingNode", "$setHeading", "headingSize", "selection", "$getSelection", "$setBlocksType", "$createHeadingNode", "iconImports", "h1", "H1Icon", "h2", "H2Icon", "h3", "H3Icon", "h4", "H4Icon", "h5", "H5Icon", "h6", "H6Icon", "HeadingFeatureClient", "createClientFeature", "props", "enabledHeadingSizes", "toolbarGroups", "toolbarTextDropdownGroupWithItems", "map", "i", "ChildComponent", "isActive", "$isRangeSelection", "node", "getNodes", "$isHeadingNode", "getTag", "parent", "getParent", "key", "label", "i18n", "t", "headingLevel", "charAt", "onSelect", "editor", "update", "order", "markdownTransformers", "MarkdownTransformer", "nodes", "HeadingNode", "sanitizedClientFeatureProps", "slashMenu", "groups", "length", "slashMenuBasicGroupWithItems", "Icon", "keywords", "toolbarFixed", "toolbarInline", "$isNodeSelection", "HorizontalRuleIcon", "_jsx", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "x", "y", "AddIcon", "_jsxs", "fill", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "toolbarAddDropdownGroupWithItems", "items", "type", "ChildComponent", "AddIcon", "key", "order", "MarkdownTransformer", "type", "dependencies", "HorizontalRuleNode", "export", "node", "exportChildren", "$isHorizontalRuleNode", "regExp", "replace", "parentNode", "$createHorizontalRuleNode", "c", "_c", "useLexicalComposerContext", "$insertNodeToNearestRoot", "$getSelection", "$isRangeSelection", "COMMAND_PRIORITY_EDITOR", "useEffect", "HorizontalRulePlugin", "$", "_c", "editor", "useLexicalComposerContext", "t0", "t1", "registerCommand", "INSERT_HORIZONTAL_RULE_COMMAND", "type", "selection", "$getSelection", "$isRangeSelection", "focus", "getNode", "horizontalRuleNode", "$createHorizontalRuleNode", "$insertNodeToNearestRoot", "COMMAND_PRIORITY_EDITOR", "useEffect", "HorizontalRuleFeatureClient", "createClientFeature", "markdownTransformers", "MarkdownTransformer", "nodes", "HorizontalRuleNode", "plugins", "Component", "HorizontalRulePlugin", "position", "slashMenu", "groups", "slashMenuBasicGroupWithItems", "Icon", "HorizontalRuleIcon", "key", "keywords", "label", "i18n", "t", "onSelect", "editor", "dispatchCommand", "INSERT_HORIZONTAL_RULE_COMMAND", "undefined", "toolbarFixed", "toolbarAddDropdownGroupWithItems", "ChildComponent", "isActive", "selection", "$isNodeSelection", "getNodes", "length", "firstNode", "$isHorizontalRuleNode", "INDENT_CONTENT_COMMAND", "OUTDENT_CONTENT_COMMAND", "IndentDecreaseIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "strokeWidth", "IndentIncreaseIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "strokeWidth", "toolbarIndentGroupWithItems", "items", "type", "key", "order", "toolbarGroups", "toolbarIndentGroupWithItems", "ChildComponent", "IndentDecreaseIcon", "isActive", "isEnabled", "selection", "getNodes", "length", "node", "__indent", "getParent", "key", "label", "i18n", "t", "onSelect", "editor", "dispatchCommand", "OUTDENT_CONTENT_COMMAND", "undefined", "order", "IndentIncreaseIcon", "INDENT_CONTENT_COMMAND", "IndentFeatureClient", "createClientFeature", "toolbarFixed", "groups", "toolbarInline", "$findMatchingParent", "$getSelection", "$isRangeSelection", "LinkIcon", "_jsx", "className", "fill", "height", "viewBox", "width", "xmlns", "d", "stroke", "strokeLinecap", "strokeLinejoin", "$isAtNodeEnd", "getSelectedNode", "selection", "anchor", "focus", "anchorNode", "getNode", "focusNode", "isBackward", "toolbarFeatureButtonsGroupWithItems", "items", "type", "key", "order", "$createTextNode", "$isTextNode", "addClassNamesToElement", "isHTMLAnchorElement", "ObjectID", "$applyNodeReplacement", "$createTextNode", "$getSelection", "$isElementNode", "$isRangeSelection", "ElementNode", "createCommand", "SUPPORTED_URL_PROTOCOLS", "Set", "LinkNode", "__fields", "__id", "constructor", "id", "fields", "doc", "linkType", "newTab", "url", "undefined", "key", "clone", "node", "__key", "getType", "importDOM", "a", "conversion", "$convertAnchorElement", "priority", "importJSON", "serializedNode", "version", "value", "default", "toHexString", "$createLinkNode", "setFormat", "format", "setIndent", "indent", "setDirection", "direction", "canBeEmpty", "canInsertTextAfter", "canInsertTextBefore", "createDOM", "config", "element", "document", "createElement", "href", "sanitizeUrl", "target", "rel", "manageRel", "theme", "link", "exportJSON", "returnObject", "type", "getFields", "getID", "extractWithChild", "child", "selection", "destination", "anchorNode", "anchor", "getNode", "focusNode", "focus", "isParentOf", "getTextContent", "length", "getLatest", "insertNewAfter", "restoreSelection", "getParentOrThrow", "linkNode", "append", "isInline", "parsedUrl", "URL", "has", "protocol", "setFields", "writable", "getWritable", "updateDOM", "prevNode", "removeAttribute", "domNode", "content", "textContent", "getAttribute", "$isLinkNode", "TOGGLE_LINK_COMMAND", "$toggleLink", "payload", "selectedNodes", "nodes", "extract", "forEach", "parent", "getParent", "children", "getChildren", "i", "insertBefore", "remove", "firstNode", "$getLinkAncestor", "text", "getLastChild", "prevParent", "is", "getPreviousSibling", "insertAfter", "$getAncestor", "ancestor", "predicate", "input", "action", "result", "mutableInput", "includes", "re", "RegExp", "replace", "trim", "LinkMarkdownTransformer", "type", "dependencies", "LinkNode", "export", "_node", "exportChildren", "exportFormat", "$isLinkNode", "node", "url", "getFields", "linkContent", "getTextContent", "firstChild", "getFirstChild", "getChildrenSize", "$isTextNode", "importRegExp", "regExp", "replace", "textNode", "match", "linkText", "linkUrl", "linkNode", "$createLinkNode", "fields", "doc", "linkType", "newTab", "linkTextNode", "$createTextNode", "setFormat", "getFormat", "append", "trigger", "$applyNodeReplacement", "$isElementNode", "AutoLinkNode", "LinkNode", "clone", "node", "id", "undefined", "fields", "__fields", "key", "__key", "getType", "importDOM", "importJSON", "serializedNode", "version", "doc", "value", "$createAutoLinkNode", "setFormat", "format", "setIndent", "indent", "setDirection", "direction", "exportJSON", "serialized", "type", "children", "insertNewAfter", "selection", "restoreSelection", "element", "getParentOrThrow", "$isElementNode", "linkNode", "append", "$applyNodeReplacement", "$isAutoLinkNode", "c", "_c", "useLexicalComposerContext", "mergeRegister", "$createTextNode", "$getSelection", "$isElementNode", "$isLineBreakNode", "$isNodeSelection", "$isRangeSelection", "$isTextNode", "TextNode", "TextNodeValue", "useEffect", "createLinkMatcherWithRegExp", "regExp", "urlTransformer", "text", "match", "exec", "index", "length", "url", "findFirstMatch", "matchers", "i", "PUNCTUATION_OR_SPACE", "isSeparator", "char", "test", "endsWithSeparator", "textContent", "startsWithSeparator", "startsWithTLD", "isEmail", "isPreviousNodeValid", "node", "previousNode", "getPreviousSibling", "$isElementNode", "getLastDescendant", "$isLineBreakNode", "$isTextNode", "getTextContent", "isNextNodeValid", "nextNode", "getNextSibling", "getFirstDescendant", "isContentAroundIsValid", "matchStart", "matchEnd", "nodes", "extractMatchingNodes", "startIndex", "endIndex", "unmodifiedBeforeNodes", "matchingNodes", "unmodifiedAfterNodes", "matchingOffset", "currentOffset", "currentNodes", "currentNode", "currentNodeLength", "currentNodeStart", "push", "shift", "$createAutoLinkNode_", "fields", "linkType", "linkNode", "$createAutoLinkNode", "remainingTextNode", "linkTextNode", "splitText", "textNode", "$createTextNode", "setFormat", "getFormat", "setDetail", "getDetail", "setStyle", "getStyle", "append", "replace", "firstTextNode", "offset", "firstLinkTextNode", "linkNodes", "currentNodeEnd", "endNode", "selection", "$getSelection", "selectedTextNode", "getNodes", "find", "undefined", "$isRangeSelection", "select", "anchor", "focus", "$isNodeSelection", "$handleLinkCreation", "onChange", "initialText", "map", "join", "invalidMatchEnd", "matchLength", "actualMatchStart", "actualMatchEnd", "substring", "handleLinkEdit", "children", "getChildren", "childrenLength", "child", "isSimpleText", "replaceWithChildren", "getFields", "flds", "setFields", "handleBadNeighbors", "previousSibling", "nextSibling", "$isAutoLinkNode", "isEmailURI", "startsWith", "j", "insertAfter", "remove", "getLatest", "getTextNodesToMatch", "textNodesToMatch", "useAutoLink", "editor", "$", "_c", "t0", "t1", "hasNodes", "AutoLinkNode", "Error", "onChangeWrapped", "prevUrl", "mergeRegister", "registerNodeTransform", "TextNodeValue", "parent", "getParentOrThrow", "previous", "$isLinkNode", "useEffect", "URL_REGEX", "EMAIL_REGEX", "MATCHERS", "AutoLinkPlugin", "useLexicalComposerContext", "ClickableLinkPlugin", "LexicalClickableLinkPlugin", "_jsx", "createCommand", "TOGGLE_LINK_WITH_MODAL_COMMAND", "createPortal", "useLexicalComposerContext", "$findMatchingParent", "mergeRegister", "getTranslation", "CloseMenuIcon", "EditIcon", "formatDrawerSlug", "useConfig", "useEditDepth", "useModal", "useTranslation", "$getSelection", "$isLineBreakNode", "$isRangeSelection", "COMMAND_PRIORITY_HIGH", "COMMAND_PRIORITY_LOW", "KEY_ESCAPE_COMMAND", "SELECTION_CHANGE_COMMAND", "React", "useCallback", "useEffect", "useRef", "useState", "setFloatingElemPositionForLinkEditor", "targetRect", "floatingElem", "anchorElem", "verticalGap", "VERTICAL_GAP", "horizontalOffset", "HORIZONTAL_OFFSET", "scrollerElem", "parentElement", "style", "opacity", "transform", "floatingElemRect", "getBoundingClientRect", "anchorElementRect", "editorScrollerRect", "top", "left", "height", "width", "right", "LinkEditor", "anchorElem", "editor", "useLexicalComposerContext", "editorRef", "useRef", "linkUrl", "setLinkUrl", "useState", "linkLabel", "setLinkLabel", "uuid", "useEditorConfigContext", "config", "useConfig", "i18n", "t", "useTranslation", "stateData", "setStateData", "closeModal", "toggleModal", "useModal", "editDepth", "useEditDepth", "isLink", "setIsLink", "selectedNodes", "setSelectedNodes", "isAutoLink", "setIsAutoLink", "drawerSlug", "formatDrawerSlug", "slug", "depth", "setNotLink", "useCallback", "current", "style", "opacity", "transform", "$updateLinkEditor", "selection", "$getSelection", "selectedNodeDomRect", "$isRangeSelection", "focusNode", "getSelectedNode", "getElementByKey", "getKey", "getBoundingClientRect", "focusLinkParent", "$findMatchingParent", "$isLinkNode", "badNode", "getNodes", "filter", "node", "$isLineBreakNode", "find", "linkNode", "is", "data", "doc", "undefined", "linkType", "newTab", "url", "getFields", "id", "getID", "text", "getTextContent", "relationTo", "value", "relatedField", "collections", "coll", "label", "String", "getTranslation", "labels", "singular", "replace", "$isAutoLinkNode", "editorElem", "nativeSelection", "window", "getSelection", "activeElement", "document", "rootElement", "getRootElement", "contains", "anchorNode", "getRangeAt", "y", "setFloatingElemPositionForLinkEditor", "className", "useEffect", "mergeRegister", "registerCommand", "TOGGLE_LINK_WITH_MODAL_COMMAND", "payload", "dispatchCommand", "TOGGLE_LINK_COMMAND", "COMMAND_PRIORITY_LOW", "scrollerElem", "parentElement", "update", "getEditorState", "read", "addEventListener", "removeEventListener", "registerUpdateListener", "editorState", "SELECTION_CHANGE_COMMAND", "KEY_ESCAPE_COMMAND", "COMMAND_PRIORITY_HIGH", "_jsxs", "React", "Fragment", "_jsx", "ref", "length", "href", "rel", "target", "isEditable", "onClick", "onMouseDown", "event", "preventDefault", "tabIndex", "type", "EditIcon", "CloseMenuIcon", "FieldsDrawer", "drawerTitle", "featureKey", "handleDrawerSubmit", "fields", "newLinkPayload", "bareLinkFields", "linkParent", "getParent", "$createLinkNode", "schemaPathSuffix", "FloatingLinkEditorPlugin", "props", "anchorElem", "document", "body", "createPortal", "_jsx", "LinkEditor", "c", "_c", "useLexicalComposerContext", "mergeRegister", "$getSelection", "$isElementNode", "$isRangeSelection", "COMMAND_PRIORITY_LOW", "PASTE_COMMAND", "useEffect", "absoluteRegExp", "relativeOrAnchorRegExp", "validateUrl", "url", "absoluteRegExp", "test", "relativeOrAnchorRegExp", "URL", "LinkPlugin", "$", "_c", "editor", "useLexicalComposerContext", "t0", "t1", "hasNodes", "LinkNode", "Error", "mergeRegister", "registerCommand", "TOGGLE_LINK_COMMAND", "payload", "$toggleLink", "COMMAND_PRIORITY_LOW", "PASTE_COMMAND", "event", "selection", "$getSelection", "$isRangeSelection", "isCollapsed", "ClipboardEvent", "clipboardData", "clipboardText", "getData", "validateUrl", "getNodes", "some", "node", "$isElementNode", "linkFields", "doc", "linkType", "newTab", "url", "dispatchCommand", "fields", "text", "preventDefault", "useEffect", "toolbarGroups", "toolbarFeatureButtonsGroupWithItems", "ChildComponent", "LinkIcon", "isActive", "selection", "$isRangeSelection", "selectedNode", "getSelectedNode", "$findMatchingParent", "$isLinkNode", "isEnabled", "$getSelection", "getTextContent", "length", "key", "label", "i18n", "t", "onSelect", "editor", "dispatchCommand", "TOGGLE_LINK_COMMAND", "selectedText", "selectedNodes", "getEditorState", "read", "getNodes", "linkFields", "doc", "linkType", "newTab", "url", "TOGGLE_LINK_WITH_MODAL_COMMAND", "fields", "text", "order", "LinkFeatureClient", "createClientFeature", "markdownTransformers", "LinkMarkdownTransformer", "nodes", "LinkNode", "AutoLinkNode", "plugins", "Component", "LinkPlugin", "position", "AutoLinkPlugin", "ClickableLinkPlugin", "FloatingLinkEditorPlugin", "toolbarFixed", "groups", "toolbarInline", "$isListNode", "INSERT_CHECK_LIST_COMMAND", "ListItemNode", "ListNode", "$isRangeSelection", "ChecklistIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "rx", "stroke", "x", "y", "d", "strokeWidth", "ListPlugin", "LexicalListPlugin", "_jsx", "slashMenuListGroupWithItems", "items", "key", "label", "i18n", "t", "$isListNode", "ListItemNode", "ListNode", "$createListItemNode", "$createListNode", "$isListItemNode", "$isListNode", "LIST_INDENT_SIZE", "listReplace", "listType", "parentNode", "children", "match", "previousNode", "getPreviousSibling", "nextNode", "getNextSibling", "listItem", "undefined", "getListType", "firstChild", "getFirstChild", "insertBefore", "append", "remove", "list", "Number", "replace", "select", "indent", "Math", "floor", "length", "setIndent", "listExport", "listNode", "exportChildren", "depth", "output", "getChildren", "index", "listItemNode", "getChildrenSize", "push", "repeat", "prefix", "getStart", "getChecked", "join", "CHECK_LIST", "type", "dependencies", "ListNode", "ListItemNode", "export", "node", "exportChildren", "$isListNode", "listExport", "regExp", "replace", "listReplace", "CheckListPlugin", "LexicalCheckListPlugin", "_jsx", "toolbarGroups", "toolbarTextDropdownGroupWithItems", "ChildComponent", "ChecklistIcon", "isActive", "selection", "$isRangeSelection", "node", "getNodes", "$isListNode", "getListType", "parent", "getParent", "parentParent", "key", "label", "i18n", "t", "onSelect", "editor", "dispatchCommand", "INSERT_CHECK_LIST_COMMAND", "undefined", "order", "ChecklistFeatureClient", "createClientFeature", "featureProviderMap", "plugins", "Component", "LexicalCheckListPlugin", "position", "has", "push", "LexicalListPlugin", "markdownTransformers", "CHECK_LIST", "nodes", "ListNode", "ListItemNode", "slashMenu", "groups", "slashMenuListGroupWithItems", "Icon", "keywords", "toolbarFixed", "toolbarInline", "$isListNode", "INSERT_ORDERED_LIST_COMMAND", "ListItemNode", "ListNode", "$isRangeSelection", "OrderedListIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "strokeWidth", "$isListNode", "ListItemNode", "ListNode", "ORDERED_LIST", "type", "dependencies", "ListNode", "ListItemNode", "export", "node", "exportChildren", "$isListNode", "listExport", "regExp", "replace", "listReplace", "toolbarGroups", "toolbarTextDropdownGroupWithItems", "ChildComponent", "OrderedListIcon", "isActive", "selection", "$isRangeSelection", "node", "getNodes", "$isListNode", "getListType", "parent", "getParent", "parentParent", "key", "label", "i18n", "t", "onSelect", "editor", "dispatchCommand", "INSERT_ORDERED_LIST_COMMAND", "undefined", "order", "OrderedListFeatureClient", "createClientFeature", "featureProviderMap", "markdownTransformers", "ORDERED_LIST", "nodes", "has", "ListNode", "ListItemNode", "plugins", "Component", "LexicalListPlugin", "position", "slashMenu", "groups", "slashMenuListGroupWithItems", "Icon", "keywords", "toolbarFixed", "toolbarInline", "$isListNode", "INSERT_UNORDERED_LIST_COMMAND", "ListItemNode", "ListNode", "$isRangeSelection", "UnorderedListIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "cx", "cy", "r", "stroke", "strokeWidth", "d", "$isListNode", "ListItemNode", "ListNode", "UNORDERED_LIST", "type", "dependencies", "ListNode", "ListItemNode", "export", "node", "exportChildren", "$isListNode", "listExport", "regExp", "replace", "listReplace", "toolbarGroups", "toolbarTextDropdownGroupWithItems", "ChildComponent", "UnorderedListIcon", "isActive", "selection", "$isRangeSelection", "node", "getNodes", "$isListNode", "getListType", "parent", "getParent", "parentParent", "key", "label", "i18n", "t", "onSelect", "editor", "dispatchCommand", "INSERT_UNORDERED_LIST_COMMAND", "undefined", "order", "UnorderedListFeatureClient", "createClientFeature", "markdownTransformers", "UNORDERED_LIST", "nodes", "ListNode", "ListItemNode", "plugins", "Component", "LexicalListPlugin", "position", "slashMenu", "groups", "slashMenuListGroupWithItems", "Icon", "keywords", "toolbarFixed", "toolbarInline", "addClassNamesToElement", "DecoratorNode", "React", "Component", "lazy", "then", "module", "default", "UnknownConvertedNodeComponent", "UnknownConvertedNode", "__data", "constructor", "data", "key", "clone", "node", "__key", "getType", "importJSON", "serializedNode", "$createUnknownConvertedNode", "canInsertTextAfter", "canInsertTextBefore", "createDOM", "config", "element", "document", "createElement", "decorate", "_jsx", "exportJSON", "type", "version", "isInline", "updateDOM", "prevNode", "dom", "LexicalPluginToLexicalFeatureClient", "createClientFeature", "nodes", "UnknownConvertedNode", "addClassNamesToElement", "DecoratorNode", "React", "Component", "lazy", "then", "module", "default", "UnknownConvertedNodeComponent", "UnknownConvertedNode", "__data", "constructor", "data", "key", "clone", "node", "__key", "getType", "importJSON", "serializedNode", "$createUnknownConvertedNode", "canInsertTextAfter", "canInsertTextBefore", "createDOM", "config", "element", "document", "createElement", "decorate", "_jsx", "exportJSON", "type", "version", "isInline", "updateDOM", "prevNode", "dom", "SlateToLexicalFeatureClient", "createClientFeature", "clientFunctions", "nodes", "UnknownConvertedNode", "$setBlocksType", "$createParagraphNode", "$getSelection", "$isParagraphNode", "$isRangeSelection", "toolbarGroups", "toolbarTextDropdownGroupWithItems", "ChildComponent", "TextIcon", "isActive", "selection", "$isRangeSelection", "node", "getNodes", "$isParagraphNode", "getParent", "key", "label", "i18n", "t", "onSelect", "editor", "update", "$getSelection", "$setBlocksType", "$createParagraphNode", "order", "ParagraphFeatureClient", "createClientFeature", "slashMenu", "groups", "slashMenuBasicGroupWithItems", "Icon", "keywords", "toolbarFixed", "toolbarInline", "$isNodeSelection", "RelationshipIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "clipPath", "d", "stroke", "strokeLinecap", "strokeLinejoin", "id", "transform", "c", "_c", "useLexicalComposerContext", "$insertNodeToNearestRoot", "useConfig", "$getPreviousSelection", "$getSelection", "$isParagraphNode", "$isRangeSelection", "COMMAND_PRIORITY_EDITOR", "createCommand", "useEffect", "c", "_c", "useLexicalComposerContext", "useListDrawer", "$getNodeByKey", "COMMAND_PRIORITY_EDITOR", "useEffect", "useState", "insertRelationship", "editor", "relationTo", "replaceNodeKey", "value", "update", "node", "$getNodeByKey", "replace", "$createRelationshipNode", "dispatchCommand", "INSERT_RELATIONSHIP_COMMAND", "RelationshipDrawerComponent", "t0", "$", "_c", "enabledCollectionSlugs", "useLexicalComposerContext", "t1", "selectedCollectionSlug", "setSelectedCollectionSlug", "useState", "setReplaceNodeKey", "t2", "collectionSlugs", "selectedCollection", "ListDrawer", "ListDrawerToggler", "t3", "useListDrawer", "closeDrawer", "isDrawerOpen", "openDrawer", "t4", "t5", "registerCommand", "INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND", "payload", "nodeKey", "COMMAND_PRIORITY_EDITOR", "useEffect", "t6", "t7", "collectionSlug", "docID", "onSelect", "t8", "t9", "_jsx", "RelationshipDrawer", "props", "length", "EnabledRelationshipsCondition", "INSERT_RELATIONSHIP_COMMAND", "createCommand", "RelationshipPlugin", "t0", "$", "_c", "clientProps", "editor", "useLexicalComposerContext", "config", "t1", "useConfig", "collections", "enabledRelations", "enabledCollections", "disabledCollections", "t2", "t3", "t4", "slug", "includes", "filter", "map", "_temp", "hasNodes", "RelationshipNode", "Error", "registerCommand", "payload", "selection", "$getSelection", "$getPreviousSelection", "$isRangeSelection", "relationshipNode", "$createRelationshipNode", "$insertNodeToNearestRoot", "focus", "focusNode", "getNode", "$isParagraphNode", "getTextContentSize", "getParent", "getChildren", "node", "length", "remove", "COMMAND_PRIORITY_EDITOR", "useEffect", "_jsx", "RelationshipDrawer", "enabledCollectionSlugs", "slug_0", "RelationshipFeatureClient", "createClientFeature", "nodes", "RelationshipNode", "plugins", "Component", "RelationshipPlugin", "position", "slashMenu", "groups", "slashMenuBasicGroupWithItems", "Icon", "RelationshipIcon", "key", "keywords", "label", "i18n", "t", "onSelect", "editor", "dispatchCommand", "INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND", "replace", "toolbarFixed", "toolbarAddDropdownGroupWithItems", "ChildComponent", "isActive", "selection", "$isNodeSelection", "getNodes", "length", "firstNode", "$isRelationshipNode", "c", "_c", "useLexicalComposerContext", "useScrollInfo", "useThrottledEffect", "useTranslation", "React", "useMemo", "mergeRegister", "$getSelection", "useCallback", "useEffect", "useState", "baseClass", "ToolbarButton", "children", "editor", "item", "enabled", "setEnabled", "useState", "active", "setActive", "className", "setClassName", "editorConfigContext", "useEditorConfigContext", "updateStates", "useCallback", "getEditorState", "read", "selection", "$getSelection", "isActive", "isEnabled", "useEffect", "document", "addEventListener", "removeEventListener", "mergeRegister", "registerUpdateListener", "key", "filter", "Boolean", "join", "_jsx", "onClick", "_updateTags", "Set", "focus", "onSelect", "onMouseDown", "e", "preventDefault", "type", "c", "_c", "React", "useEffect", "mergeRegister", "useTranslation", "$getSelection", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "createPortal", "baseClass", "DropDownContext", "createContext", "DropDownItem", "active", "children", "editor", "enabled", "item", "title", "className", "setClassName", "key", "filter", "Boolean", "join", "ref", "dropDownContext", "useContext", "Error", "registerItem", "current", "_jsx", "onClick", "_updateTags", "Set", "focus", "onSelect", "isActive", "onMouseDown", "e", "preventDefault", "type", "DropDownItems", "dropDownRef", "itemsContainerClassNames", "onClose", "items", "setItems", "highlightedItem", "setHighlightedItem", "itemRef", "prev", "handleKeyDown", "event", "includes", "index", "indexOf", "length", "contextValue", "Provider", "value", "onKeyDown", "DropDown", "Icon", "buttonAriaLabel", "buttonClassName", "disabled", "label", "stopCloseOnClickSelf", "buttonRef", "showDropDown", "setShowDropDown", "handleClose", "button", "dropDown", "left", "top", "getBoundingClientRect", "scrollTopOffset", "window", "scrollY", "document", "documentElement", "scrollTop", "style", "offsetHeight", "Math", "min", "innerWidth", "offsetWidth", "handle", "target", "contains", "addEventListener", "removeEventListener", "portal", "body", "_jsxs", "Fragment", "baseClass", "ToolbarItem", "t0", "$", "_c", "active", "anchorElem", "editor", "enabled", "item", "i18n", "useTranslation", "field", "t1", "useEditorConfigContext", "richTextComponentMap", "Component", "t2", "_jsx", "key", "title", "label", "length", "substring", "ChildComponent", "t3", "_jsxs", "DropDownItem", "children", "className", "ToolbarDropdown", "Icon", "classNames", "groupKey", "items", "itemsContainerClassNames", "maxActiveItems", "onActiveChange", "Symbol", "for", "activeItemKeys", "setActiveItemKeys", "React", "useState", "enabledItemKeys", "setEnabledItemKeys", "editorConfigContext", "getEditorState", "read", "selection", "$getSelection", "_activeItemKeys", "_activeItems", "_enabledItemKeys", "isActive", "push", "isEnabled", "activeItems", "updateStates", "t4", "t5", "useEffect", "t6", "t7", "document", "addEventListener", "removeEventListener", "t8", "t9", "mergeRegister", "registerUpdateListener", "t10", "t11", "t12", "t13", "filter", "Boolean", "t14", "join", "t15", "t16", "t17", "map", "item_0", "includes", "DropDown", "buttonAriaLabel", "buttonClassName", "ButtonGroupItem", "anchorElem", "editor", "item", "Component", "_jsx", "key", "ToolbarButton", "ChildComponent", "ToolbarGroupComponent", "t0", "$", "_c", "editorConfig", "group", "index", "i18n", "useTranslation", "field", "t1", "useEditorConfigContext", "richTextComponentMap", "dropdownLabel", "setDropdownLabel", "useState", "DropdownIcon", "setDropdownIcon", "t2", "t3", "type", "items", "length", "useEffect", "t4", "t5", "activeItems", "label", "substring", "onActiveChange", "t6", "ToolbarDropdown", "Icon", "groupKey", "itemsContainerClassNames", "maxActiveItems", "t7", "map", "item_0", "t8", "features", "toolbarFixed", "_jsxs", "className", "children", "groups", "FixedToolbar", "clientProps", "parentWithFixedToolbar", "currentToolbarRef", "useRef", "y", "useScrollInfo", "parentToolbarElem", "useMemo", "disableIfParentHasFixedToolbar", "sibling", "editorContainerRef", "current", "previousElementSibling", "classList", "contains", "useThrottledEffect", "currentToolbarElem", "currentRect", "getBoundingClientRect", "parentRect", "bottom", "top", "onFocus", "event", "stopPropagation", "ref", "isEditable", "Fragment", "i", "getParentEditorWithFixedToolbar", "editorConfigContext", "parentEditor", "resolvedFeatureMap", "has", "FixedToolbarPlugin", "currentEditor", "useLexicalComposerContext", "currentEditorConfig", "applyToFocusedEditor", "focusedEditor", "FixedToolbarFeatureClient", "createClientFeature", "plugins", "Component", "FixedToolbarPlugin", "position", "c", "_c", "useLexicalComposerContext", "mergeRegister", "$getSelection", "$isRangeSelection", "$isTextNode", "COMMAND_PRIORITY_LOW", "SELECTION_CHANGE_COMMAND", "useCallback", "useEffect", "useRef", "useState", "React", "createPortal", "getDOMRangeRect", "nativeSelection", "rootElement", "domRange", "getRangeAt", "rect", "anchorNode", "inner", "firstElementChild", "getBoundingClientRect", "setFloatingElemPosition", "args", "alwaysDisplayOnTop", "anchorElem", "anchorFlippedOffset", "floatingElem", "horizontalOffset", "HORIZONTAL_OFFSET", "horizontalPosition", "specialHandlingForCaret", "targetRect", "verticalGap", "VERTICAL_GAP", "scrollerElem", "parentElement", "style", "opacity", "transform", "floatingElemRect", "getBoundingClientRect", "anchorElementRect", "editorScrollerRect", "top", "height", "left", "width", "addedToTop", "right", "bottom", "ButtonGroupItem", "anchorElem", "editor", "item", "Component", "_jsx", "key", "ToolbarButton", "ChildComponent", "ToolbarGroupComponent", "t0", "$", "_c", "group", "index", "editorConfig", "useEditorConfigContext", "DropdownIcon", "setDropdownIcon", "useState", "t1", "t2", "type", "items", "length", "useEffect", "t3", "t4", "activeItems", "onActiveChange", "t5", "ToolbarDropdown", "Icon", "groupKey", "maxActiveItems", "t6", "map", "item_0", "t7", "features", "toolbarInline", "_jsxs", "className", "children", "groups", "InlineToolbar", "floatingToolbarRef", "useRef", "caretRef", "closeFloatingToolbar", "useCallback", "current", "isOpacityZero", "style", "opacity", "isPointerEventsNone", "pointerEvents", "mouseMoveListener", "e", "buttons", "x", "clientX", "y", "clientY", "elementUnderMouse", "document", "elementFromPoint", "contains", "mouseUpListener", "addEventListener", "removeEventListener", "$updateTextFormatFloatingToolbar", "selection", "$getSelection", "nativeSelection", "window", "getSelection", "possibleLinkEditor", "querySelector", "isLinkEditorVisible", "rootElement", "getRootElement", "isCollapsed", "anchorNode", "rangeRect", "getDOMRangeRect", "offsetIfFlipped", "setFloatingElemPosition", "alwaysDisplayOnTop", "floatingElem", "horizontalPosition", "targetRect", "anchorFlippedOffset", "horizontalOffset", "specialHandlingForCaret", "verticalGap", "scrollerElem", "parentElement", "update", "getEditorState", "read", "mergeRegister", "registerUpdateListener", "editorState", "registerCommand", "SELECTION_CHANGE_COMMAND", "COMMAND_PRIORITY_LOW", "ref", "isEditable", "Fragment", "i", "useInlineToolbar", "isText", "setIsText", "updatePopup", "isComposing", "$isRangeSelection", "getTextContent", "nodes", "getNodes", "foundNodeWithText", "node", "$isTextNode", "rawTextContent", "replace", "registerRootListener", "createPortal", "InlineToolbarPlugin", "useLexicalComposerContext", "InlineToolbarFeatureClient", "createClientFeature", "plugins", "Component", "InlineToolbarPlugin", "position", "TableCellNode", "TableNode", "TableRowNode", "TableIcon", "_jsx", "className", "fill", "height", "viewBox", "width", "xmlns", "clipRule", "d", "fillRule", "useLexicalComposerContext", "useLexicalEditable", "$deleteTableColumn__EXPERIMENTAL", "$deleteTableRow__EXPERIMENTAL", "$getNodeTriplet", "$getTableCellNodeFromLexicalNode", "$getTableColumnIndexFromTableCellNode", "$getTableNodeFromLexicalNodeOrThrow", "$getTableRowIndexFromTableCellNode", "$insertTableColumn__EXPERIMENTAL", "$insertTableRow__EXPERIMENTAL", "$isTableCellNode", "$isTableRowNode", "$isTableSelection", "$unmergeCell", "TableCellHeaderStates", "TableCellNode", "getTableObserverFromTableElement", "useScrollInfo", "$createParagraphNode", "$getRoot", "$getSelection", "$isElementNode", "$isParagraphNode", "$isRangeSelection", "$isTextNode", "React", "useCallback", "useEffect", "useRef", "useState", "createPortal", "MeatballsIcon", "_jsxs", "fill", "height", "viewBox", "width", "xmlns", "_jsx", "d", "computeSelectionCount", "selection", "selectionShape", "getShape", "columns", "toX", "fromX", "rows", "toY", "fromY", "isTableSelectionRectangular", "nodes", "getNodes", "currentRows", "currentRow", "expectedColumns", "currentColumns", "i", "length", "node", "$isTableCellNode", "row", "getParentOrThrow", "$isTableRowNode", "Error", "colSpan", "__colSpan", "j", "undefined", "__rowSpan", "every", "v", "$canUnmerge", "$getSelection", "$isRangeSelection", "isCollapsed", "$isTableSelection", "anchor", "is", "focus", "cell", "$getNodeTriplet", "$cellContainsEmptyParagraph", "getChildrenSize", "firstChild", "getFirstChildOrThrow", "$isParagraphNode", "isEmpty", "$selectLastDescendant", "lastDescendant", "getLastDescendant", "$isTextNode", "select", "$isElementNode", "selectEnd", "selectNext", "TableActionMenu", "cellMerge", "contextRef", "onClose", "setIsMenuOpen", "tableCellNode", "_tableCellNode", "editor", "useLexicalComposerContext", "dropDownRef", "useRef", "updateTableCellNode", "useState", "selectionCounts", "updateSelectionCounts", "canMergeCells", "setCanMergeCells", "canUnmergeCell", "setCanUnmergeCell", "y", "useScrollInfo", "useEffect", "registerMutationListener", "TableCellNode", "nodeMutations", "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", "useCallback", "update", "isAttached", "tableNode", "$getTableNodeFromLexicalNodeOrThrow", "tableElement", "getElementByKey", "tableSelection", "getTableObserverFromTableElement", "clearHighlight", "markDirty", "$getRoot", "selectStart", "mergeTableCellsAtSelection", "firstCell", "setColSpan", "setRowSpan", "getFirstChild", "remove", "append", "getChildren", "$createParagraphNode", "unmergeTableCellsAtSelection", "$unmergeCell", "insertTableRowAtSelection", "shouldInsertAfter", "$insertTableRow__EXPERIMENTAL", "insertTableColumnAtSelection", "$insertTableColumn__EXPERIMENTAL", "deleteTableRowAtSelection", "$deleteTableRow__EXPERIMENTAL", "deleteTableAtSelection", "deleteTableColumnAtSelection", "$deleteTableColumn__EXPERIMENTAL", "toggleTableRowIsHeader", "tableRowIndex", "$getTableRowIndexFromTableCellNode", "tableRows", "tableRow", "forEach", "tableCell", "toggleHeaderStyle", "TableCellHeaderStates", "ROW", "toggleTableColumnIsHeader", "tableColumnIndex", "$getTableColumnIndexFromTableCellNode", "maxRowsLength", "Math", "max", "map", "r", "tableCells", "COLUMN", "mergeCellButton", "_jsx", "className", "onClick", "type", "createPortal", "_jsxs", "e", "stopPropagation", "ref", "Fragment", "__headerState", "document", "body", "TableCellActionMenuContainer", "anchorElem", "menuButtonRef", "menuRootRef", "isMenuOpen", "setTableMenuCellNode", "$moveMenu", "menu", "nativeSelection", "getSelection", "activeElement", "anchorNode", "tableCellNodeFromSelection", "$getTableCellNodeFromLexicalNode", "getNode", "registerUpdateListener", "menuButtonDOM", "tableCellNodeDOM", "tableCellRect", "menuRect", "anchorRect", "transform", "prevTableCellDOM", "MeatballsIcon", "TableActionMenuPlugin", "isEditable", "useLexicalEditable", "useLexicalComposerContext", "useLexicalEditable", "$computeTableMapSkipCellCheck", "$getTableNodeFromLexicalNodeOrThrow", "$getTableRowIndexFromTableCellNode", "$isTableCellNode", "$isTableRowNode", "getDOMCellFromTarget", "calculateZoomLevel", "$getNearestNodeFromDOMNode", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "createPortal", "MIN_ROW_HEIGHT", "MIN_COLUMN_WIDTH", "TableCellResizer", "editor", "targetRef", "useRef", "resizerRef", "tableRectRef", "editorConfig", "useEditorConfigContext", "mouseStartPosRef", "mouseCurrentPos", "updateMouseCurrentPos", "useState", "activeCell", "updateActiveCell", "isMouseDown", "updateIsMouseDown", "draggingDirection", "updateDraggingDirection", "resetState", "useCallback", "current", "isMouseDownOnEvent", "event", "buttons", "useEffect", "onMouseMove", "setTimeout", "target", "x", "clientX", "y", "clientY", "contains", "cell", "getDOMCellFromTarget", "update", "tableCellNode", "$getNearestNodeFromDOMNode", "elem", "Error", "tableNode", "$getTableNodeFromLexicalNodeOrThrow", "tableElement", "getElementByKey", "getKey", "getBoundingClientRect", "onMouseDown", "onMouseUp", "removeRootListener", "registerRootListener", "rootElement", "prevRootElement", "addEventListener", "removeEventListener", "isHeightChanging", "direction", "updateRowHeight", "heightChange", "$isTableCellNode", "tableRowIndex", "$getTableRowIndexFromTableCellNode", "tableRows", "getChildren", "length", "tableRow", "$isTableRowNode", "height", "getHeight", "undefined", "rowCells", "Math", "min", "map", "getCellNodeHeight", "Infinity", "newHeight", "max", "setHeight", "tag", "getCellNodeWidth", "activeEditor", "width", "getWidth", "domCellNode", "computedStyle", "getComputedStyle", "clientWidth", "parseFloat", "paddingLeft", "paddingRight", "clientHeight", "getCellColumnIndex", "tableMap", "row", "column", "updateColumnWidth", "widthChange", "$computeTableMapSkipCellCheck", "columnIndex", "startRow", "newWidth", "setWidth", "mouseUpHandler", "handler", "preventDefault", "stopPropagation", "zoom", "calculateZoomLevel", "document", "toggleResize", "resizerStyles", "left", "top", "zoneWidth", "styles", "bottom", "backgroundColor", "cursor", "window", "pageXOffset", "pageYOffset", "right", "tableRect", "_jsx", "ref", "_jsxs", "Fragment", "className", "lexical", "theme", "tableCellResizer", "style", "TableCellResizerPlugin", "useLexicalComposerContext", "isEditable", "useLexicalEditable", "useMemo", "createPortal", "body", "useLexicalComposerContext", "$getTableColumnIndexFromTableCellNode", "$getTableRowIndexFromTableCellNode", "$insertTableColumn__EXPERIMENTAL", "$insertTableRow__EXPERIMENTAL", "$isTableCellNode", "$isTableNode", "TableNode", "$findMatchingParent", "mergeRegister", "$getNearestNodeFromDOMNode", "useEffect", "useRef", "useState", "createPortal", "useMemo", "useRef", "FUNC_ERROR_TEXT", "nativeMax", "Math", "max", "nativeMin", "min", "debounce", "func", "wait", "options", "lastArgs", "lastThis", "maxWait", "result", "timerId", "lastCallTime", "lastInvokeTime", "leading", "maxing", "trailing", "TypeError", "invokeFunc", "time", "args", "thisArg", "undefined", "apply", "leadingEdge", "setTimeout", "timerExpired", "remainingWait", "timeSinceLastCall", "timeSinceLastInvoke", "timeWaiting", "shouldInvoke", "Date", "now", "trailingEdge", "cancel", "clearTimeout", "flush", "debounced", "isInvoking", "arguments", "debounce_default", "useDebounce", "fn", "ms", "maxWait", "funcRef", "useRef", "current", "useMemo", "debounce", "args", "BUTTON_WIDTH_PX", "TableHoverActionsContainer", "anchorElem", "editor", "useLexicalComposerContext", "editorConfig", "useEditorConfigContext", "isShownRow", "setShownRow", "useState", "isShownColumn", "setShownColumn", "shouldListenMouseMove", "setShouldListenMouseMove", "position", "setPosition", "codeSetRef", "useRef", "Set", "tableDOMNodeRef", "debouncedOnMouseMove", "useDebounce", "event", "isOutside", "tableDOMNode", "getMouseInfo", "lexical", "current", "hoveredRowNode", "hoveredColumnNode", "tableDOMElement", "update", "maybeTableCell", "$getNearestNodeFromDOMNode", "$isTableCellNode", "table", "$findMatchingParent", "node", "$isTableNode", "getElementByKey", "getKey", "rowCount", "getChildrenSize", "colCount", "getChildAtIndex", "rowIndex", "$getTableRowIndexFromTableCellNode", "colIndex", "$getTableColumnIndexFromTableCellNode", "bottom", "tableElemBottom", "height", "tableElemHeight", "right", "tableElemRight", "width", "tableElemWidth", "x", "tableElemX", "y", "tableElemY", "getBoundingClientRect", "left", "editorElemLeft", "editorElemY", "top", "useEffect", "document", "addEventListener", "removeEventListener", "mergeRegister", "registerMutationListener", "TableNode", "mutations", "getEditorState", "read", "key", "type", "add", "size", "delete", "skipInitialization", "insertAction", "insertRow", "selectEnd", "$insertTableRow__EXPERIMENTAL", "$insertTableColumn__EXPERIMENTAL", "_jsxs", "_Fragment", "_jsx", "className", "theme", "tableAddRows", "onClick", "style", "tableAddColumns", "target", "HTMLElement", "closest", "tableCell", "tableCellResizer", "TableHoverActionsPlugin", "body", "createPortal", "c", "_c", "useLexicalComposerContext", "TablePlugin", "LexicalReactTablePlugin", "INSERT_TABLE_COMMAND", "TableNode", "mergeRegister", "formatDrawerSlug", "useEditDepth", "useModal", "$getSelection", "$isRangeSelection", "COMMAND_PRIORITY_EDITOR", "createCommand", "createContext", "useContext", "useEffect", "useMemo", "useState", "React", "OPEN_TABLE_DRAWER_COMMAND", "createCommand", "CellContext", "createContext", "cellEditorConfig", "cellEditorPlugins", "set", "TableContext", "children", "contextValue", "setContextValue", "useState", "_jsx", "Provider", "value", "useMemo", "TablePlugin", "$", "_c", "editor", "useLexicalComposerContext", "cellContext", "useContext", "closeModal", "toggleModal", "useModal", "editDepth", "useEditDepth", "uuid", "useEditorConfigContext", "t0", "t1", "formatDrawerSlug", "slug", "depth", "drawerSlug", "t2", "hasNodes", "TableNode", "Error", "mergeRegister", "registerCommand", "rangeSelection", "getEditorState", "read", "selection", "$getSelection", "$isRangeSelection", "COMMAND_PRIORITY_EDITOR", "t3", "useEffect", "t4", "_fields", "data", "columns", "rows", "dispatchCommand", "INSERT_TABLE_COMMAND", "String", "t5", "_jsxs", "Fragment", "FieldsDrawer", "drawerTitle", "featureKey", "handleDrawerSubmit", "schemaPathSuffix", "LexicalReactTablePlugin", "hasCellBackgroundColor", "hasCellMerge", "TableFeatureClient", "createClientFeature", "nodes", "TableNode", "TableCellNode", "TableRowNode", "plugins", "Component", "TablePlugin", "position", "TableCellResizerPlugin", "TableActionMenuPlugin", "TableHoverActionsPlugin", "providers", "TableContext", "slashMenu", "groups", "slashMenuBasicGroupWithItems", "Icon", "TableIcon", "key", "keywords", "label", "onSelect", "editor", "dispatchCommand", "OPEN_TABLE_DRAWER_COMMAND", "toolbarFixed", "toolbarAddDropdownGroupWithItems", "ChildComponent", "$isNodeSelection", "UploadIcon", "_jsxs", "className", "fill", "focusable", "height", "viewBox", "width", "xmlns", "_jsx", "d", "stroke", "strokeLinecap", "strokeLinejoin", "c", "_c", "useLexicalComposerContext", "$insertNodeToNearestRoot", "mergeRegister", "useConfig", "$getPreviousSelection", "$getSelection", "$isParagraphNode", "$isRangeSelection", "COMMAND_PRIORITY_EDITOR", "createCommand", "useEffect", "c", "_c", "useLexicalComposerContext", "useListDrawer", "$getNodeByKey", "COMMAND_PRIORITY_EDITOR", "useEffect", "useState", "insertUpload", "editor", "relationTo", "replaceNodeKey", "value", "update", "node", "$getNodeByKey", "replace", "$createUploadNode", "data", "fields", "dispatchCommand", "INSERT_UPLOAD_COMMAND", "UploadDrawerComponent", "t0", "$", "_c", "enabledCollectionSlugs", "useLexicalComposerContext", "setReplaceNodeKey", "useState", "t1", "collectionSlugs", "uploads", "ListDrawer", "ListDrawerToggler", "t2", "useListDrawer", "closeDrawer", "openDrawer", "t3", "t4", "registerCommand", "INSERT_UPLOAD_WITH_DRAWER_COMMAND", "payload", "nodeKey", "COMMAND_PRIORITY_EDITOR", "useEffect", "t5", "t6", "collectionSlug", "docID", "onSelect", "_jsx", "UploadDrawer", "props", "EnabledRelationshipsCondition", "INSERT_UPLOAD_COMMAND", "createCommand", "UploadPlugin", "t0", "$", "_c", "editor", "useLexicalComposerContext", "config", "t1", "useConfig", "collections", "t2", "t3", "hasNodes", "UploadNode", "Error", "mergeRegister", "registerCommand", "payload", "update", "selection", "$getSelection", "$getPreviousSelection", "$isRangeSelection", "uploadNode", "$createUploadNode", "data", "id", "fields", "relationTo", "value", "$insertNodeToNearestRoot", "focus", "focusNode", "getNode", "$isParagraphNode", "getTextContentSize", "getParent", "getChildren", "filter", "node", "length", "remove", "COMMAND_PRIORITY_EDITOR", "useEffect", "t4", "_jsx", "UploadDrawer", "enabledCollectionSlugs", "map", "_temp", "slug", "UploadFeatureClient", "createClientFeature", "nodes", "UploadNode", "plugins", "Component", "UploadPlugin", "position", "slashMenu", "groups", "slashMenuBasicGroupWithItems", "Icon", "UploadIcon", "key", "keywords", "label", "i18n", "t", "onSelect", "editor", "dispatchCommand", "INSERT_UPLOAD_WITH_DRAWER_COMMAND", "replace", "toolbarFixed", "toolbarAddDropdownGroupWithItems", "ChildComponent", "isActive", "selection", "$isNodeSelection", "getNodes", "length", "firstNode", "$isUploadNode", "ShimmerEffect", "useClientFunctions", "useFieldProps", "React", "Suspense", "lazy", "useEffect", "useState", "RichTextEditor", "lazy", "then", "module", "default", "RichText", "RichTextField", "props", "admin", "field", "richTextComponentMap", "lexicalEditorConfig", "schemaPath", "useFieldProps", "clientFunctions", "useClientFunctions", "hasLoadedFeatures", "setHasLoadedFeatures", "useState", "featureProviders", "setFeatureProviders", "finalSanitizedEditorConfig", "setFinalSanitizedEditorConfig", "featureProviderComponents", "get", "sort", "a", "b", "order", "featureProvidersAndComponentsToLoad", "featureProvider", "featureComponentKeys", "Array", "from", "keys", "filter", "key", "startsWith", "length", "useEffect", "featureProvidersLocal", "featureProvidersAndComponentsLoaded", "Object", "entries", "forEach", "plugin", "includes", "push", "resolvedClientFeatures", "loadClientFeatures", "unSanitizedEditorConfig", "features", "lexical", "sanitizeClientEditorConfig", "defaultEditorLexicalConfig", "_jsx", "Suspense", "fallback", "ShimmerEffect", "height", "editorConfig", "React", "Fragment", "isArray", "map", "featureComponents", "_jsxs", "FeatureComponent", "ClientFeature", "joinClasses", "args", "filter", "Boolean", "join", "elements", "WeakMap", "readTouch", "e", "touch", "changedTouches", "undefined", "clientX", "clientY", "addListener", "element", "cb", "elementValues", "get", "listeners", "Set", "handleTouchstart", "start", "handleTouchend", "end", "listener", "addEventListener", "set", "add", "deleteListener", "delete", "size", "removeEventListener", "addSwipeLeftListener", "force", "x", "y", "Math", "abs", "addSwipeRightListener", "addSwipeUpListener", "addSwipeDownListener", "NodeFormat", "DOM_ELEMENT_TYPE", "DOM_TEXT_TYPE", "NO_DIRTY_NODES", "HAS_DIRTY_NODES", "FULL_RECONCILE", "IS_NORMAL", "IS_TOKEN", "IS_SEGMENTED", "IS_INERT", "IS_BOLD", "IS_ITALIC", "IS_STRIKETHROUGH", "IS_UNDERLINE", "IS_CODE", "IS_SUBSCRIPT", "IS_SUPERSCRIPT", "IS_HIGHLIGHT", "IS_DIRECTIONLESS", "IS_UNMERGEABLE", "IS_ALIGN_LEFT", "IS_ALIGN_CENTER", "IS_ALIGN_RIGHT", "IS_ALIGN_JUSTIFY", "IS_ALIGN_START", "IS_ALIGN_END", "IS_ALL_FORMATTING", "NON_BREAKING_SPACE", "DOUBLE_LINE_BREAK", "RTL", "LTR", "RTL_REGEX", "RegExp", "LTR_REGEX", "TEXT_TYPE_TO_FORMAT", "bold", "code", "highlight", "italic", "strikethrough", "subscript", "superscript", "underline", "DETAIL_TYPE_TO_DETAIL", "directionless", "unmergeable", "ELEMENT_TYPE_TO_FORMAT", "center", "end", "justify", "left", "right", "start", "ELEMENT_FORMAT_TO_TYPE", "TEXT_MODE_TO_TYPE", "normal", "segmented", "token", "TEXT_TYPE_TO_MODE"]
|
|
7
7
|
}
|