@payloadcms/richtext-lexical 4.0.0-internal.40de3ec → 4.0.0-internal.43ccea7
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/LICENSE.md +1 -1
- package/dist/exports/client/Field-XH5C4HFU.js +2 -0
- package/dist/exports/client/Field-XH5C4HFU.js.map +7 -0
- package/dist/exports/client/bundled.css +1 -1
- package/dist/exports/client/chunk-X3D4LZS7.js +2 -0
- package/dist/exports/client/chunk-X3D4LZS7.js.map +7 -0
- package/dist/exports/client/index.d.ts +0 -2
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +24 -25
- package/dist/exports/client/index.js.map +4 -4
- package/dist/features/blockquote/client/index.js +2 -2
- package/dist/features/blockquote/client/index.js.map +1 -1
- package/dist/features/blockquote/server/index.js +2 -2
- package/dist/features/blockquote/server/index.js.map +1 -1
- package/dist/features/blocks/client/component/index.css +2 -2
- package/dist/features/blocks/client/componentInline/index.css +8 -8
- package/dist/features/blocks/client/markdown/getLexicalToMarkdown.d.ts +1 -1
- package/dist/features/blocks/client/markdown/getLexicalToMarkdown.d.ts.map +1 -1
- package/dist/features/blocks/client/markdown/getLexicalToMarkdown.js +1 -1
- package/dist/features/blocks/client/markdown/getLexicalToMarkdown.js.map +1 -1
- package/dist/features/blocks/client/markdown/getMarkdownToLexical.d.ts +1 -1
- package/dist/features/blocks/client/markdown/getMarkdownToLexical.d.ts.map +1 -1
- package/dist/features/blocks/client/markdown/getMarkdownToLexical.js +5 -2
- package/dist/features/blocks/client/markdown/getMarkdownToLexical.js.map +1 -1
- package/dist/features/blocks/client/markdown/markdownTransformer.d.ts +1 -2
- package/dist/features/blocks/client/markdown/markdownTransformer.d.ts.map +1 -1
- package/dist/features/blocks/client/markdown/markdownTransformer.js.map +1 -1
- package/dist/features/blocks/premade/CodeBlock/Component/Collapse/index.css +1 -1
- package/dist/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.css +2 -4
- package/dist/features/blocks/premade/CodeBlock/Component/index.css +5 -5
- package/dist/features/blocks/server/markdown/markdownTransformer.d.ts +1 -1
- package/dist/features/blocks/server/markdown/markdownTransformer.d.ts.map +1 -1
- package/dist/features/blocks/server/markdown/markdownTransformer.js.map +1 -1
- package/dist/features/blocks/server/schema.d.ts.map +1 -1
- package/dist/features/blocks/server/schema.js +3 -2
- package/dist/features/blocks/server/schema.js.map +1 -1
- package/dist/features/converters/lexicalToMarkdown/index.d.ts.map +1 -1
- package/dist/features/converters/lexicalToMarkdown/index.js +1 -1
- package/dist/features/converters/lexicalToMarkdown/index.js.map +1 -1
- package/dist/features/converters/markdownToLexical/index.d.ts.map +1 -1
- package/dist/features/converters/markdownToLexical/index.js +5 -2
- package/dist/features/converters/markdownToLexical/index.js.map +1 -1
- package/dist/features/debug/jsxConverter/client/plugin/style.css +2 -2
- package/dist/features/experimental_table/client/index.js +2 -2
- package/dist/features/experimental_table/client/index.js.map +1 -1
- package/dist/features/experimental_table/markdownTransformer.d.ts +2 -2
- package/dist/features/experimental_table/markdownTransformer.d.ts.map +1 -1
- package/dist/features/experimental_table/markdownTransformer.js +6 -3
- package/dist/features/experimental_table/markdownTransformer.js.map +1 -1
- package/dist/features/experimental_table/server/index.js +2 -2
- package/dist/features/experimental_table/server/index.js.map +1 -1
- package/dist/features/format/bold/feature.client.js +1 -1
- package/dist/features/format/bold/feature.client.js.map +1 -1
- package/dist/features/format/bold/feature.server.d.ts.map +1 -1
- package/dist/features/format/bold/feature.server.js +1 -1
- package/dist/features/format/bold/feature.server.js.map +1 -1
- package/dist/features/format/inlineCode/feature.client.js +1 -1
- package/dist/features/format/inlineCode/feature.client.js.map +1 -1
- package/dist/features/format/inlineCode/feature.server.d.ts.map +1 -1
- package/dist/features/format/inlineCode/feature.server.js +1 -1
- package/dist/features/format/inlineCode/feature.server.js.map +1 -1
- package/dist/features/format/italic/feature.client.js +1 -1
- package/dist/features/format/italic/feature.client.js.map +1 -1
- package/dist/features/format/italic/feature.server.d.ts.map +1 -1
- package/dist/features/format/italic/feature.server.js +1 -1
- package/dist/features/format/italic/feature.server.js.map +1 -1
- package/dist/features/format/strikethrough/feature.client.js +1 -1
- package/dist/features/format/strikethrough/feature.client.js.map +1 -1
- package/dist/features/format/strikethrough/feature.server.d.ts.map +1 -1
- package/dist/features/format/strikethrough/feature.server.js +1 -1
- package/dist/features/format/strikethrough/feature.server.js.map +1 -1
- package/dist/features/heading/client/index.js +2 -2
- package/dist/features/heading/client/index.js.map +1 -1
- package/dist/features/heading/markdownTransformer.d.ts +2 -2
- package/dist/features/heading/markdownTransformer.d.ts.map +1 -1
- package/dist/features/heading/markdownTransformer.js +6 -19
- package/dist/features/heading/markdownTransformer.js.map +1 -1
- package/dist/features/heading/server/index.js +2 -2
- package/dist/features/heading/server/index.js.map +1 -1
- package/dist/features/horizontalRule/client/index.js +2 -2
- package/dist/features/horizontalRule/client/index.js.map +1 -1
- package/dist/features/horizontalRule/client/markdownTransformer.d.ts +2 -2
- package/dist/features/horizontalRule/client/markdownTransformer.d.ts.map +1 -1
- package/dist/features/horizontalRule/client/markdownTransformer.js +1 -1
- package/dist/features/horizontalRule/client/markdownTransformer.js.map +1 -1
- package/dist/features/horizontalRule/client/plugin/index.css +2 -2
- package/dist/features/horizontalRule/server/index.js +2 -2
- package/dist/features/horizontalRule/server/index.js.map +1 -1
- package/dist/features/horizontalRule/server/markdownTransformer.d.ts +2 -2
- package/dist/features/horizontalRule/server/markdownTransformer.d.ts.map +1 -1
- package/dist/features/horizontalRule/server/markdownTransformer.js +1 -1
- package/dist/features/horizontalRule/server/markdownTransformer.js.map +1 -1
- package/dist/features/link/client/index.js +2 -2
- package/dist/features/link/client/index.js.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +3 -3
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/index.css +7 -11
- package/dist/features/link/markdownTransformer.d.ts +4 -4
- package/dist/features/link/markdownTransformer.d.ts.map +1 -1
- package/dist/features/link/markdownTransformer.js +2 -2
- package/dist/features/link/markdownTransformer.js.map +1 -1
- package/dist/features/link/markdownTransformer.spec.js +10 -10
- package/dist/features/link/markdownTransformer.spec.js.map +1 -1
- package/dist/features/link/server/baseFields.js.map +1 -1
- package/dist/features/link/server/index.js +2 -2
- package/dist/features/link/server/index.js.map +1 -1
- package/dist/features/link/server/schema.d.ts.map +1 -1
- package/dist/features/link/server/schema.js +4 -2
- package/dist/features/link/server/schema.js.map +1 -1
- package/dist/features/lists/checklist/client/index.js +1 -1
- package/dist/features/lists/checklist/client/index.js.map +1 -1
- package/dist/features/lists/checklist/server/index.js +1 -1
- package/dist/features/lists/checklist/server/index.js.map +1 -1
- package/dist/features/lists/orderedList/client/index.js +1 -1
- package/dist/features/lists/orderedList/client/index.js.map +1 -1
- package/dist/features/lists/orderedList/server/index.js +1 -1
- package/dist/features/lists/orderedList/server/index.js.map +1 -1
- package/dist/features/lists/unorderedList/client/index.js +1 -1
- package/dist/features/lists/unorderedList/client/index.js.map +1 -1
- package/dist/features/lists/unorderedList/server/index.js +1 -1
- package/dist/features/lists/unorderedList/server/index.js.map +1 -1
- package/dist/features/relationship/server/schema.d.ts +3 -3
- package/dist/features/relationship/server/schema.d.ts.map +1 -1
- package/dist/features/relationship/server/schema.js +22 -5
- package/dist/features/relationship/server/schema.js.map +1 -1
- package/dist/features/textState/feature.client.js +1 -1
- package/dist/features/textState/feature.client.js.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.css +2 -2
- package/dist/features/toolbars/inline/client/Toolbar/index.css +2 -13
- package/dist/features/toolbars/shared/ToolbarDropdown/index.css +8 -12
- package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
- package/dist/features/toolbars/shared/useToolbarStates.d.ts.map +1 -1
- package/dist/features/toolbars/shared/useToolbarStates.js +3 -1
- package/dist/features/toolbars/shared/useToolbarStates.js.map +1 -1
- package/dist/features/typesClient.d.ts +1 -1
- package/dist/features/typesClient.d.ts.map +1 -1
- package/dist/features/typesClient.js.map +1 -1
- package/dist/features/typesServer.d.ts +2 -2
- package/dist/features/typesServer.d.ts.map +1 -1
- package/dist/features/typesServer.js.map +1 -1
- package/dist/features/upload/client/component/index.css +9 -9
- package/dist/features/upload/client/plugin/index.js +5 -5
- package/dist/features/upload/client/plugin/index.js.map +1 -1
- package/dist/features/upload/server/index.js +2 -2
- package/dist/features/upload/server/index.js.map +1 -1
- package/dist/features/upload/server/markdownTransformer.d.ts +2 -2
- package/dist/features/upload/server/markdownTransformer.d.ts.map +1 -1
- package/dist/features/upload/server/markdownTransformer.js +1 -1
- package/dist/features/upload/server/markdownTransformer.js.map +1 -1
- package/dist/features/upload/server/schema.d.ts +4 -4
- package/dist/features/upload/server/schema.d.ts.map +1 -1
- package/dist/features/upload/server/schema.js +26 -6
- package/dist/features/upload/server/schema.js.map +1 -1
- package/dist/field/Diff/converters/unknown/index.css +1 -1
- package/dist/field/Field.js +1 -1
- package/dist/field/Field.js.map +1 -1
- package/dist/field/ViewSelector.css +1 -1
- package/dist/field/bundled.css +1 -1
- package/dist/field/index.css +14 -11
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -50
- package/dist/index.js.map +1 -1
- package/dist/lexical/LexicalEditor.css +2 -2
- package/dist/lexical/LexicalEditor.d.ts.map +1 -1
- package/dist/lexical/LexicalEditor.js +2 -36
- package/dist/lexical/LexicalEditor.js.map +1 -1
- package/dist/lexical/LexicalProvider.d.ts.map +1 -1
- package/dist/lexical/LexicalProvider.js +7 -22
- package/dist/lexical/LexicalProvider.js.map +1 -1
- package/dist/lexical/plugins/DecoratorPlugin/index.css +1 -1
- package/dist/lexical/plugins/DecoratorPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/MarkdownShortcut/index.d.ts.map +1 -1
- package/dist/lexical/plugins/MarkdownShortcut/index.js +1 -1
- package/dist/lexical/plugins/MarkdownShortcut/index.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/index.css +1 -5
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.css +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.css +3 -3
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
- package/dist/lexical/theme/EditorTheme.css +18 -19
- package/dist/lexical/ui/ContentEditable.css +5 -5
- package/dist/lexical/utils/markdown/convertFromMarkdownString.d.ts +17 -0
- package/dist/lexical/utils/markdown/convertFromMarkdownString.d.ts.map +1 -0
- package/dist/lexical/utils/markdown/convertFromMarkdownString.js +27 -0
- package/dist/lexical/utils/markdown/convertFromMarkdownString.js.map +1 -0
- package/dist/lexical/utils/markdown/convertFromMarkdownString.spec.js +88 -0
- package/dist/lexical/utils/markdown/convertFromMarkdownString.spec.js.map +1 -0
- package/dist/lexical/utils/markdown/createBlockNode.d.ts +1 -1
- package/dist/lexical/utils/markdown/createBlockNode.d.ts.map +1 -1
- package/dist/lexical/utils/markdown/createBlockNode.js.map +1 -1
- package/dist/lexical/utils/markdown/normalizeMarkdown.d.ts +25 -0
- package/dist/lexical/utils/markdown/normalizeMarkdown.d.ts.map +1 -0
- package/dist/lexical/utils/markdown/normalizeMarkdown.js +91 -0
- package/dist/lexical/utils/markdown/normalizeMarkdown.js.map +1 -0
- package/dist/lexical-proxy/@lexical-markdown.d.ts +1 -1
- package/dist/lexical-proxy/@lexical-markdown.d.ts.map +1 -1
- package/dist/lexical-proxy/@lexical-markdown.js +1 -1
- package/dist/lexical-proxy/@lexical-markdown.js.map +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/schema.d.ts.map +1 -1
- package/dist/types/schema.js +12 -5
- package/dist/types/schema.js.map +1 -1
- package/dist/utilities/applyBaseFilterToFields.d.ts.map +1 -1
- package/dist/utilities/applyBaseFilterToFields.js.map +1 -1
- package/dist/utilities/fieldsDrawer/index.css +4 -4
- package/dist/utilities/generateImportMap.d.ts.map +1 -1
- package/dist/utilities/generateImportMap.js +3 -7
- package/dist/utilities/generateImportMap.js.map +1 -1
- package/package.json +21 -26
- package/dist/@types/assets.d.js +0 -2
- package/dist/@types/assets.d.js.map +0 -1
- package/dist/exports/client/Field-VYBSMSRY.js +0 -2
- package/dist/exports/client/Field-VYBSMSRY.js.map +0 -7
- package/dist/exports/client/chunk-LH634DPU.js +0 -12
- package/dist/exports/client/chunk-LH634DPU.js.map +0 -7
- package/dist/exports/server/rsc.browser.d.ts +0 -11
- package/dist/exports/server/rsc.browser.d.ts.map +0 -1
- package/dist/exports/server/rsc.browser.js +0 -10
- package/dist/exports/server/rsc.browser.js.map +0 -1
- package/dist/features/blockquote/markdownTransformer.d.ts +0 -3
- package/dist/features/blockquote/markdownTransformer.d.ts.map +0 -1
- package/dist/features/blockquote/markdownTransformer.js +0 -33
- package/dist/features/blockquote/markdownTransformer.js.map +0 -1
- package/dist/features/format/bold/markdownTransformers.d.ts +0 -6
- package/dist/features/format/bold/markdownTransformers.d.ts.map +0 -1
- package/dist/features/format/bold/markdownTransformers.js +0 -23
- package/dist/features/format/bold/markdownTransformers.js.map +0 -1
- package/dist/features/format/inlineCode/markdownTransformers.d.ts +0 -3
- package/dist/features/format/inlineCode/markdownTransformers.d.ts.map +0 -1
- package/dist/features/format/inlineCode/markdownTransformers.js +0 -6
- package/dist/features/format/inlineCode/markdownTransformers.js.map +0 -1
- package/dist/features/format/italic/markdownTransformers.d.ts +0 -4
- package/dist/features/format/italic/markdownTransformers.d.ts.map +0 -1
- package/dist/features/format/italic/markdownTransformers.js +0 -12
- package/dist/features/format/italic/markdownTransformers.js.map +0 -1
- package/dist/features/format/strikethrough/markdownTransformers.d.ts +0 -3
- package/dist/features/format/strikethrough/markdownTransformers.d.ts.map +0 -1
- package/dist/features/format/strikethrough/markdownTransformers.js +0 -6
- package/dist/features/format/strikethrough/markdownTransformers.js.map +0 -1
- package/dist/features/lists/checklist/markdownTransformers.d.ts +0 -3
- package/dist/features/lists/checklist/markdownTransformers.d.ts.map +0 -1
- package/dist/features/lists/checklist/markdownTransformers.js +0 -12
- package/dist/features/lists/checklist/markdownTransformers.js.map +0 -1
- package/dist/features/lists/orderedList/markdownTransformer.d.ts +0 -3
- package/dist/features/lists/orderedList/markdownTransformer.d.ts.map +0 -1
- package/dist/features/lists/orderedList/markdownTransformer.js +0 -12
- package/dist/features/lists/orderedList/markdownTransformer.js.map +0 -1
- package/dist/features/lists/shared/markdown.d.ts +0 -6
- package/dist/features/lists/shared/markdown.d.ts.map +0 -1
- package/dist/features/lists/shared/markdown.js +0 -57
- package/dist/features/lists/shared/markdown.js.map +0 -1
- package/dist/features/lists/unorderedList/markdownTransformer.d.ts +0 -3
- package/dist/features/lists/unorderedList/markdownTransformer.d.ts.map +0 -1
- package/dist/features/lists/unorderedList/markdownTransformer.js +0 -12
- package/dist/features/lists/unorderedList/markdownTransformer.js.map +0 -1
- package/dist/field/clientEntry.d.ts +0 -29
- package/dist/field/clientEntry.d.ts.map +0 -1
- package/dist/field/clientEntry.js +0 -86
- package/dist/field/clientEntry.js.map +0 -1
- package/dist/lexical/utils/guard.d.ts +0 -5
- package/dist/lexical/utils/guard.d.ts.map +0 -1
- package/dist/lexical/utils/guard.js +0 -9
- package/dist/lexical/utils/guard.js.map +0 -1
- package/dist/lexical-proxy/@lexical-react/LexicalContextMenuPlugin.d.ts +0 -2
- package/dist/lexical-proxy/@lexical-react/LexicalContextMenuPlugin.d.ts.map +0 -1
- package/dist/lexical-proxy/@lexical-react/LexicalContextMenuPlugin.js +0 -2
- package/dist/lexical-proxy/@lexical-react/LexicalContextMenuPlugin.js.map +0 -1
- package/dist/packages/@lexical/markdown/MarkdownExport.d.ts +0 -14
- package/dist/packages/@lexical/markdown/MarkdownExport.d.ts.map +0 -1
- package/dist/packages/@lexical/markdown/MarkdownExport.js +0 -213
- package/dist/packages/@lexical/markdown/MarkdownExport.js.map +0 -1
- package/dist/packages/@lexical/markdown/MarkdownImport.d.ts +0 -19
- package/dist/packages/@lexical/markdown/MarkdownImport.d.ts.map +0 -1
- package/dist/packages/@lexical/markdown/MarkdownImport.js +0 -198
- package/dist/packages/@lexical/markdown/MarkdownImport.js.map +0 -1
- package/dist/packages/@lexical/markdown/MarkdownShortcuts.d.ts +0 -11
- package/dist/packages/@lexical/markdown/MarkdownShortcuts.d.ts.map +0 -1
- package/dist/packages/@lexical/markdown/MarkdownShortcuts.js +0 -304
- package/dist/packages/@lexical/markdown/MarkdownShortcuts.js.map +0 -1
- package/dist/packages/@lexical/markdown/MarkdownTransformers.d.ts +0 -147
- package/dist/packages/@lexical/markdown/MarkdownTransformers.d.ts.map +0 -1
- package/dist/packages/@lexical/markdown/MarkdownTransformers.js +0 -268
- package/dist/packages/@lexical/markdown/MarkdownTransformers.js.map +0 -1
- package/dist/packages/@lexical/markdown/importTextFormatTransformer.d.ts +0 -22
- package/dist/packages/@lexical/markdown/importTextFormatTransformer.d.ts.map +0 -1
- package/dist/packages/@lexical/markdown/importTextFormatTransformer.js +0 -91
- package/dist/packages/@lexical/markdown/importTextFormatTransformer.js.map +0 -1
- package/dist/packages/@lexical/markdown/importTextMatchTransformer.d.ts +0 -21
- package/dist/packages/@lexical/markdown/importTextMatchTransformer.d.ts.map +0 -1
- package/dist/packages/@lexical/markdown/importTextMatchTransformer.js +0 -54
- package/dist/packages/@lexical/markdown/importTextMatchTransformer.js.map +0 -1
- package/dist/packages/@lexical/markdown/importTextTransformers.d.ts +0 -18
- package/dist/packages/@lexical/markdown/importTextTransformers.d.ts.map +0 -1
- package/dist/packages/@lexical/markdown/importTextTransformers.js +0 -54
- package/dist/packages/@lexical/markdown/importTextTransformers.js.map +0 -1
- package/dist/packages/@lexical/markdown/index.d.ts +0 -29
- package/dist/packages/@lexical/markdown/index.d.ts.map +0 -1
- package/dist/packages/@lexical/markdown/index.js +0 -39
- package/dist/packages/@lexical/markdown/index.js.map +0 -1
- package/dist/packages/@lexical/markdown/utils.d.ts +0 -34
- package/dist/packages/@lexical/markdown/utils.d.ts.map +0 -1
- package/dist/packages/@lexical/markdown/utils.js +0 -267
- package/dist/packages/@lexical/markdown/utils.js.map +0 -1
|
@@ -15,7 +15,7 @@ import { H6Icon } from '../../../lexical/ui/icons/H6/index.js';
|
|
|
15
15
|
import { createClientFeature } from '../../../utilities/createClientFeature.js';
|
|
16
16
|
import { slashMenuBasicGroupWithItems } from '../../shared/slashMenu/basicGroup.js';
|
|
17
17
|
import { toolbarTextDropdownGroupWithItems } from '../../shared/toolbar/textDropdownGroup.js';
|
|
18
|
-
import {
|
|
18
|
+
import { PAYLOAD_HEADING } from '../markdownTransformer.js';
|
|
19
19
|
const $setHeading = headingSize => {
|
|
20
20
|
const selection = $getSelection();
|
|
21
21
|
$setBlocksType(selection, () => $createHeadingNode(headingSize));
|
|
@@ -74,7 +74,7 @@ export const HeadingFeatureClient = createClientFeature(({
|
|
|
74
74
|
};
|
|
75
75
|
}))];
|
|
76
76
|
return {
|
|
77
|
-
markdownTransformers: [
|
|
77
|
+
markdownTransformers: [PAYLOAD_HEADING(enabledHeadingSizes)],
|
|
78
78
|
nodes: [HeadingNode],
|
|
79
79
|
plugins: [{
|
|
80
80
|
Component: HeadingPlugin,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$createHeadingNode","$isHeadingNode","HeadingNode","$setBlocksType","$getSelection","$isRangeSelection","useEffect","H1Icon","H2Icon","H3Icon","H4Icon","H5Icon","H6Icon","createClientFeature","slashMenuBasicGroupWithItems","toolbarTextDropdownGroupWithItems","
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$createHeadingNode","$isHeadingNode","HeadingNode","$setBlocksType","$getSelection","$isRangeSelection","useEffect","H1Icon","H2Icon","H3Icon","H4Icon","H5Icon","H6Icon","createClientFeature","slashMenuBasicGroupWithItems","toolbarTextDropdownGroupWithItems","PAYLOAD_HEADING","$setHeading","headingSize","selection","iconImports","h1","h2","h3","h4","h5","h6","HeadingFeatureClient","props","enabledHeadingSizes","toolbarGroups","map","i","ChildComponent","isActive","node","getNodes","getTag","parent","getParent","key","label","i18n","t","headingLevel","charAt","onSelect","editor","update","order","markdownTransformers","nodes","plugins","Component","HeadingPlugin","position","sanitizedClientFeatureProps","slashMenu","groups","length","Icon","keywords","toolbarFixed","toolbarInline","t0","$","clientProps","t1","t2","undefined","t3","at","lowestAllowed","t4","t5","registerNodeTransform","includes","setTag"],"sources":["../../../../src/features/heading/client/index.tsx"],"sourcesContent":["'use client'\n\nimport type { HeadingTagType } from '@lexical/rich-text'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { $createHeadingNode, $isHeadingNode, HeadingNode } from '@lexical/rich-text'\nimport { $setBlocksType } from '@lexical/selection'\nimport { $getSelection, $isRangeSelection } from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\nimport type { PluginComponent } from '../../typesClient.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 { PAYLOAD_HEADING } 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: [PAYLOAD_HEADING(enabledHeadingSizes)],\n nodes: [HeadingNode],\n plugins: [\n {\n Component: HeadingPlugin,\n position: 'normal',\n },\n ],\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\nconst HeadingPlugin: PluginComponent<HeadingFeatureProps> = ({ clientProps }) => {\n const { enabledHeadingSizes = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] } = clientProps\n const lowestAllowed = enabledHeadingSizes.at(-1)\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n if (!lowestAllowed || enabledHeadingSizes.length === 6) {\n return\n }\n return editor.registerNodeTransform(HeadingNode, (node) => {\n if (!enabledHeadingSizes.includes(node.getTag())) {\n node.setTag(lowestAllowed)\n }\n })\n }, [editor, enabledHeadingSizes, lowestAllowed])\n\n return null\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
+
import type { ElementTransformer } from '@lexical/markdown';
|
|
1
2
|
import type { HeadingTagType } from '@lexical/rich-text';
|
|
2
|
-
|
|
3
|
-
export declare const MarkdownTransformer: (enabledHeadingSizes: HeadingTagType[]) => ElementTransformer;
|
|
3
|
+
export declare const PAYLOAD_HEADING: (enabledHeadingSizes: HeadingTagType[]) => ElementTransformer;
|
|
4
4
|
//# sourceMappingURL=markdownTransformer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdownTransformer.d.ts","sourceRoot":"","sources":["../../../src/features/heading/markdownTransformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"markdownTransformer.d.ts","sourceRoot":"","sources":["../../../src/features/heading/markdownTransformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAKxD,eAAO,MAAM,eAAe,EAAE,CAAC,mBAAmB,EAAE,cAAc,EAAE,KAAK,kBAaxE,CAAA"}
|
|
@@ -1,26 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
export const
|
|
1
|
+
// eslint-disable-next-line payload/no-conflicting-lexical-markdown-imports -- PAYLOAD_HEADING intentionally extends upstream HEADING, overriding only its regExp to respect the enabled heading levels
|
|
2
|
+
import { HEADING } from '@lexical/markdown';
|
|
3
|
+
export const PAYLOAD_HEADING = enabledHeadingSizes => {
|
|
4
4
|
// Convert enabledHeadingSizes to a list of numbers (1 for h1, 2 for h2, etc.)
|
|
5
5
|
const enabledSizes = enabledHeadingSizes.map(tag => Number(tag.slice(1)));
|
|
6
|
-
//
|
|
6
|
+
// Only the heading levels enabled in the config should be matched on import.
|
|
7
7
|
const pattern = `^(${enabledSizes.map(size => `#{${size}}`).join('|')})\\s`;
|
|
8
|
-
const regExp = new RegExp(pattern);
|
|
9
8
|
return {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
export: (node, exportChildren) => {
|
|
13
|
-
if (!$isHeadingNode(node)) {
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
const level = Number(node.getTag().slice(1));
|
|
17
|
-
return '#'.repeat(level) + ' ' + exportChildren(node);
|
|
18
|
-
},
|
|
19
|
-
regExp,
|
|
20
|
-
replace: createBlockNode(match => {
|
|
21
|
-
const tag = 'h' + match[1]?.length;
|
|
22
|
-
return $createHeadingNode(tag);
|
|
23
|
-
})
|
|
9
|
+
...HEADING,
|
|
10
|
+
regExp: new RegExp(pattern)
|
|
24
11
|
};
|
|
25
12
|
};
|
|
26
13
|
//# sourceMappingURL=markdownTransformer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdownTransformer.js","names":["
|
|
1
|
+
{"version":3,"file":"markdownTransformer.js","names":["HEADING","PAYLOAD_HEADING","enabledHeadingSizes","enabledSizes","map","tag","Number","slice","pattern","size","join","regExp","RegExp"],"sources":["../../../src/features/heading/markdownTransformer.ts"],"sourcesContent":["import type { ElementTransformer } from '@lexical/markdown'\nimport type { HeadingTagType } from '@lexical/rich-text'\n\n// eslint-disable-next-line payload/no-conflicting-lexical-markdown-imports -- PAYLOAD_HEADING intentionally extends upstream HEADING, overriding only its regExp to respect the enabled heading levels\nimport { HEADING } from '@lexical/markdown'\n\nexport const PAYLOAD_HEADING: (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 // Only the heading levels enabled in the config should be matched on import.\n const pattern = `^(${enabledSizes.map((size) => `#{${size}}`).join('|')})\\\\s`\n\n return {\n ...HEADING,\n regExp: new RegExp(pattern),\n }\n}\n"],"mappings":"AAGA;AACA,SAASA,OAAO,QAAQ;AAExB,OAAO,MAAMC,eAAA,GACXC,mBAAA;EAEA;EACA,MAAMC,YAAA,GAAeD,mBAAA,CAAoBE,GAAG,CAAEC,GAAA,IAAQC,MAAA,CAAOD,GAAA,CAAIE,KAAK,CAAC;EAEvE;EACA,MAAMC,OAAA,GAAU,KAAKL,YAAA,CAAaC,GAAG,CAAEK,IAAA,IAAS,KAAKA,IAAA,GAAO,EAAEC,IAAI,CAAC,UAAU;EAE7E,OAAO;IACL,GAAGV,OAAO;IACVW,MAAA,EAAQ,IAAIC,MAAA,CAAOJ,OAAA;EACrB;AACF","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { HeadingNode } from '@lexical/rich-text';
|
|
2
2
|
import { createServerFeature } from '../../../utilities/createServerFeature.js';
|
|
3
3
|
import { createNode } from '../../typeUtilities.js';
|
|
4
|
-
import {
|
|
4
|
+
import { PAYLOAD_HEADING } from '../markdownTransformer.js';
|
|
5
5
|
import { i18n } from './i18n.js';
|
|
6
6
|
import { createHeadingJSONSchema } from './schema.js';
|
|
7
7
|
export const HeadingFeature = createServerFeature({
|
|
@@ -19,7 +19,7 @@ export const HeadingFeature = createServerFeature({
|
|
|
19
19
|
ClientFeature: '@payloadcms/richtext-lexical/client#HeadingFeatureClient',
|
|
20
20
|
clientFeatureProps: props,
|
|
21
21
|
i18n,
|
|
22
|
-
markdownTransformers: enabledHeadingSizes.length > 0 ? [
|
|
22
|
+
markdownTransformers: enabledHeadingSizes.length > 0 ? [PAYLOAD_HEADING(enabledHeadingSizes)] : [],
|
|
23
23
|
nodes: [createNode({
|
|
24
24
|
jsonSchema: createHeadingJSONSchema(enabledHeadingSizes),
|
|
25
25
|
node: HeadingNode
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["HeadingNode","createServerFeature","createNode","
|
|
1
|
+
{"version":3,"file":"index.js","names":["HeadingNode","createServerFeature","createNode","PAYLOAD_HEADING","i18n","createHeadingJSONSchema","HeadingFeature","feature","props","enabledHeadingSizes","sort","ClientFeature","clientFeatureProps","markdownTransformers","length","nodes","jsonSchema","node","sanitizedServerFeatureProps","key"],"sources":["../../../../src/features/heading/server/index.ts"],"sourcesContent":["import type { HeadingTagType } from '@lexical/rich-text'\n\nimport { HeadingNode } from '@lexical/rich-text'\n\nimport { createServerFeature } from '../../../utilities/createServerFeature.js'\nimport { createNode } from '../../typeUtilities.js'\nimport { PAYLOAD_HEADING } from '../markdownTransformer.js'\nimport { i18n } from './i18n.js'\nimport { createHeadingJSONSchema } from './schema.js'\n\nexport type { SerializedHeadingNode } from './schema.js'\n\nexport type HeadingFeatureProps = {\n enabledHeadingSizes?: HeadingTagType[]\n}\n\nexport const HeadingFeature = createServerFeature<\n HeadingFeatureProps,\n HeadingFeatureProps,\n HeadingFeatureProps\n>({\n feature: ({ props }) => {\n if (!props) {\n props = {}\n }\n\n const { enabledHeadingSizes = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] } = props\n\n enabledHeadingSizes.sort()\n\n return {\n ClientFeature: '@payloadcms/richtext-lexical/client#HeadingFeatureClient',\n clientFeatureProps: props,\n i18n,\n markdownTransformers:\n enabledHeadingSizes.length > 0 ? [PAYLOAD_HEADING(enabledHeadingSizes)] : [],\n nodes: [\n createNode({\n jsonSchema: createHeadingJSONSchema(enabledHeadingSizes),\n node: HeadingNode,\n }),\n ],\n sanitizedServerFeatureProps: props,\n }\n },\n key: 'heading',\n})\n"],"mappings":"AAEA,SAASA,WAAW,QAAQ;AAE5B,SAASC,mBAAmB,QAAQ;AACpC,SAASC,UAAU,QAAQ;AAC3B,SAASC,eAAe,QAAQ;AAChC,SAASC,IAAI,QAAQ;AACrB,SAASC,uBAAuB,QAAQ;AAQxC,OAAO,MAAMC,cAAA,GAAiBL,mBAAA,CAI5B;EACAM,OAAA,EAASA,CAAC;IAAEC;EAAK,CAAE;IACjB,IAAI,CAACA,KAAA,EAAO;MACVA,KAAA,GAAQ,CAAC;IACX;IAEA,MAAM;MAAEC,mBAAA,GAAsB,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM;IAAK,CAAE,GAAGD,KAAA;IAEvEC,mBAAA,CAAoBC,IAAI;IAExB,OAAO;MACLC,aAAA,EAAe;MACfC,kBAAA,EAAoBJ,KAAA;MACpBJ,IAAA;MACAS,oBAAA,EACEJ,mBAAA,CAAoBK,MAAM,GAAG,IAAI,CAACX,eAAA,CAAgBM,mBAAA,EAAqB,GAAG,EAAE;MAC9EM,KAAA,EAAO,CACLb,UAAA,CAAW;QACTc,UAAA,EAAYX,uBAAA,CAAwBI,mBAAA;QACpCQ,IAAA,EAAMjB;MACR,GACD;MACDkB,2BAAA,EAA6BV;IAC/B;EACF;EACAW,GAAA,EAAK;AACP","ignoreList":[]}
|
|
@@ -6,11 +6,11 @@ import { createClientFeature } from '../../../utilities/createClientFeature.js';
|
|
|
6
6
|
import { slashMenuBasicGroupWithItems } from '../../shared/slashMenu/basicGroup.js';
|
|
7
7
|
import { toolbarAddDropdownGroupWithItems } from '../../shared/toolbar/addDropdownGroup.js';
|
|
8
8
|
import { INSERT_HORIZONTAL_RULE_COMMAND } from '../server/nodes/HorizontalRuleNode.js';
|
|
9
|
-
import {
|
|
9
|
+
import { PAYLOAD_HORIZONTAL_RULE } from './markdownTransformer.js';
|
|
10
10
|
import { $isHorizontalRuleNode, HorizontalRuleNode } from './nodes/HorizontalRuleNode.js';
|
|
11
11
|
import { HorizontalRulePlugin } from './plugin/index.js';
|
|
12
12
|
export const HorizontalRuleFeatureClient = createClientFeature({
|
|
13
|
-
markdownTransformers: [
|
|
13
|
+
markdownTransformers: [PAYLOAD_HORIZONTAL_RULE],
|
|
14
14
|
nodes: [HorizontalRuleNode],
|
|
15
15
|
plugins: [{
|
|
16
16
|
Component: HorizontalRulePlugin,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["$isNodeSelection","HorizontalRuleIcon","createClientFeature","slashMenuBasicGroupWithItems","toolbarAddDropdownGroupWithItems","INSERT_HORIZONTAL_RULE_COMMAND","
|
|
1
|
+
{"version":3,"file":"index.js","names":["$isNodeSelection","HorizontalRuleIcon","createClientFeature","slashMenuBasicGroupWithItems","toolbarAddDropdownGroupWithItems","INSERT_HORIZONTAL_RULE_COMMAND","PAYLOAD_HORIZONTAL_RULE","$isHorizontalRuleNode","HorizontalRuleNode","HorizontalRulePlugin","HorizontalRuleFeatureClient","markdownTransformers","nodes","plugins","Component","position","slashMenu","groups","Icon","key","keywords","label","i18n","t","onSelect","editor","dispatchCommand","undefined","toolbarFixed","ChildComponent","isActive","selection","getNodes","length","firstNode"],"sources":["../../../../src/features/horizontalRule/client/index.tsx"],"sourcesContent":["'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 { PAYLOAD_HORIZONTAL_RULE } from './markdownTransformer.js'\nimport { $isHorizontalRuleNode, HorizontalRuleNode } from './nodes/HorizontalRuleNode.js'\nimport { HorizontalRulePlugin } from './plugin/index.js'\n\nexport const HorizontalRuleFeatureClient = createClientFeature({\n markdownTransformers: [PAYLOAD_HORIZONTAL_RULE],\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"],"mappings":"AAAA;;AAEA,SAASA,gBAAgB,QAAQ;AAEjC,SAASC,kBAAkB,QAAQ;AACnC,SAASC,mBAAmB,QAAQ;AACpC,SAASC,4BAA4B,QAAQ;AAC7C,SAASC,gCAAgC,QAAQ;AACjD,SAASC,8BAA8B,QAAQ;AAC/C,SAASC,uBAAuB,QAAQ;AACxC,SAASC,qBAAqB,EAAEC,kBAAkB,QAAQ;AAC1D,SAASC,oBAAoB,QAAQ;AAErC,OAAO,MAAMC,2BAAA,GAA8BR,mBAAA,CAAoB;EAC7DS,oBAAA,EAAsB,CAACL,uBAAA,CAAwB;EAC/CM,KAAA,EAAO,CAACJ,kBAAA,CAAmB;EAC3BK,OAAA,EAAS,CACP;IACEC,SAAA,EAAWL,oBAAA;IACXM,QAAA,EAAU;EACZ,EACD;EACDC,SAAA,EAAW;IACTC,MAAA,EAAQ,CACNd,4BAAA,CAA6B,CAC3B;MACEe,IAAA,EAAMjB,kBAAA;MACNkB,GAAA,EAAK;MACLC,QAAA,EAAU,CAAC,MAAM,mBAAmB,QAAQ,YAAY;MACxDC,KAAA,EAAOA,CAAC;QAAEC;MAAI,CAAE;QACd,OAAOA,IAAA,CAAKC,CAAC,CAAC;MAChB;MAEAC,QAAA,EAAUA,CAAC;QAAEC;MAAM,CAAE;QACnBA,MAAA,CAAOC,eAAe,CAACrB,8BAAA,EAAgCsB,SAAA;MACzD;IACF,EACD;EAEL;EACAC,YAAA,EAAc;IACZX,MAAA,EAAQ,CACNb,gCAAA,CAAiC,CAC/B;MACEyB,cAAA,EAAgB5B,kBAAA;MAChB6B,QAAA,EAAUA,CAAC;QAAEC;MAAS,CAAE;QACtB,IAAI,CAAC/B,gBAAA,CAAiB+B,SAAA,KAAc,CAACA,SAAA,CAAUC,QAAQ,GAAGC,MAAM,EAAE;UAChE,OAAO;QACT;QAEA,MAAMC,SAAA,GAAYH,SAAA,CAAUC,QAAQ,EAAE,CAAC,EAAE;QACzC,OAAOzB,qBAAA,CAAsB2B,SAAA;MAC/B;MACAf,GAAA,EAAK;MACLE,KAAA,EAAOA,CAAC;QAAEC;MAAI,CAAE;QACd,OAAOA,IAAA,CAAKC,CAAC,CAAC;MAChB;MACAC,QAAA,EAAUA,CAAC;QAAEC;MAAM,CAAE;QACnBA,MAAA,CAAOC,eAAe,CAACrB,8BAAA,EAAgCsB,SAAA;MACzD;IACF,EACD;EAEL;AACF","ignoreList":[]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { ElementTransformer } from '
|
|
2
|
-
export declare const
|
|
1
|
+
import type { ElementTransformer } from '@lexical/markdown';
|
|
2
|
+
export declare const PAYLOAD_HORIZONTAL_RULE: ElementTransformer;
|
|
3
3
|
//# sourceMappingURL=markdownTransformer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdownTransformer.d.ts","sourceRoot":"","sources":["../../../../src/features/horizontalRule/client/markdownTransformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"markdownTransformer.d.ts","sourceRoot":"","sources":["../../../../src/features/horizontalRule/client/markdownTransformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAQ3D,eAAO,MAAM,uBAAuB,EAAE,kBAiBrC,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { $createHorizontalRuleNode, $isHorizontalRuleNode, HorizontalRuleNode } from './nodes/HorizontalRuleNode.js';
|
|
2
|
-
export const
|
|
2
|
+
export const PAYLOAD_HORIZONTAL_RULE = {
|
|
3
3
|
type: 'element',
|
|
4
4
|
dependencies: [HorizontalRuleNode],
|
|
5
5
|
export: (node, exportChildren) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdownTransformer.js","names":["$createHorizontalRuleNode","$isHorizontalRuleNode","HorizontalRuleNode","
|
|
1
|
+
{"version":3,"file":"markdownTransformer.js","names":["$createHorizontalRuleNode","$isHorizontalRuleNode","HorizontalRuleNode","PAYLOAD_HORIZONTAL_RULE","type","dependencies","export","node","exportChildren","regExp","replace","parentNode"],"sources":["../../../../src/features/horizontalRule/client/markdownTransformer.ts"],"sourcesContent":["import type { ElementTransformer } from '@lexical/markdown'\n\nimport {\n $createHorizontalRuleNode,\n $isHorizontalRuleNode,\n HorizontalRuleNode,\n} from './nodes/HorizontalRuleNode.js'\n\nexport const PAYLOAD_HORIZONTAL_RULE: 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"],"mappings":"AAEA,SACEA,yBAAyB,EACzBC,qBAAqB,EACrBC,kBAAkB,QACb;AAEP,OAAO,MAAMC,uBAAA,GAA8C;EACzDC,IAAA,EAAM;EACNC,YAAA,EAAc,CAACH,kBAAA,CAAmB;EAClCI,MAAA,EAAQA,CAACC,IAAA,EAAMC,cAAA;IACb,IAAI,CAACP,qBAAA,CAAsBM,IAAA,GAAO;MAChC,OAAO;IACT;IACA,OAAO;EACT;EACA;EACAE,MAAA,EAAQ;EACRC,OAAA,EAAUC,UAAA;IACR,MAAMJ,IAAA,GAAOP,yBAAA;IACb,IAAIO,IAAA,EAAM;MACRI,UAAA,CAAWD,OAAO,CAACH,IAAA;IACrB;EACF;AACF","ignoreList":[]}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
user-select: none;
|
|
20
20
|
border-radius: var(--radius-small);
|
|
21
21
|
box-shadow:
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
0 0 0 var(--stroke-width-small) var(--color-bg),
|
|
23
|
+
0 0 0 var(--stroke-width-medium) var(--color-border-selected);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { createServerFeature } from '../../../utilities/createServerFeature.js';
|
|
2
2
|
import { createNode } from '../../typeUtilities.js';
|
|
3
3
|
import { i18n } from './i18n.js';
|
|
4
|
-
import {
|
|
4
|
+
import { PAYLOAD_HORIZONTAL_RULE } from './markdownTransformer.js';
|
|
5
5
|
import { HorizontalRuleServerNode } from './nodes/HorizontalRuleNode.js';
|
|
6
6
|
import { horizontalRuleNodeJSONSchema } from './schema.js';
|
|
7
7
|
export const HorizontalRuleFeature = createServerFeature({
|
|
8
8
|
feature: {
|
|
9
9
|
ClientFeature: '@payloadcms/richtext-lexical/client#HorizontalRuleFeatureClient',
|
|
10
10
|
i18n,
|
|
11
|
-
markdownTransformers: [
|
|
11
|
+
markdownTransformers: [PAYLOAD_HORIZONTAL_RULE],
|
|
12
12
|
nodes: [createNode({
|
|
13
13
|
jsonSchema: horizontalRuleNodeJSONSchema,
|
|
14
14
|
node: HorizontalRuleServerNode
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["createServerFeature","createNode","i18n","
|
|
1
|
+
{"version":3,"file":"index.js","names":["createServerFeature","createNode","i18n","PAYLOAD_HORIZONTAL_RULE","HorizontalRuleServerNode","horizontalRuleNodeJSONSchema","HorizontalRuleFeature","feature","ClientFeature","markdownTransformers","nodes","jsonSchema","node","key"],"sources":["../../../../src/features/horizontalRule/server/index.ts"],"sourcesContent":["import { createServerFeature } from '../../../utilities/createServerFeature.js'\nimport { createNode } from '../../typeUtilities.js'\nimport { i18n } from './i18n.js'\nimport { PAYLOAD_HORIZONTAL_RULE } from './markdownTransformer.js'\nimport { HorizontalRuleServerNode } from './nodes/HorizontalRuleNode.js'\nimport { horizontalRuleNodeJSONSchema } from './schema.js'\n\nexport type { SerializedHorizontalRuleNode } from './schema.js'\n\nexport const HorizontalRuleFeature = createServerFeature({\n feature: {\n ClientFeature: '@payloadcms/richtext-lexical/client#HorizontalRuleFeatureClient',\n i18n,\n markdownTransformers: [PAYLOAD_HORIZONTAL_RULE],\n nodes: [\n createNode({\n jsonSchema: horizontalRuleNodeJSONSchema,\n node: HorizontalRuleServerNode,\n }),\n ],\n },\n key: 'horizontalRule',\n})\n"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ;AACpC,SAASC,UAAU,QAAQ;AAC3B,SAASC,IAAI,QAAQ;AACrB,SAASC,uBAAuB,QAAQ;AACxC,SAASC,wBAAwB,QAAQ;AACzC,SAASC,4BAA4B,QAAQ;AAI7C,OAAO,MAAMC,qBAAA,GAAwBN,mBAAA,CAAoB;EACvDO,OAAA,EAAS;IACPC,aAAA,EAAe;IACfN,IAAA;IACAO,oBAAA,EAAsB,CAACN,uBAAA,CAAwB;IAC/CO,KAAA,EAAO,CACLT,UAAA,CAAW;MACTU,UAAA,EAAYN,4BAAA;MACZO,IAAA,EAAMR;IACR;EAEJ;EACAS,GAAA,EAAK;AACP","ignoreList":[]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { ElementTransformer } from '
|
|
2
|
-
export declare const
|
|
1
|
+
import type { ElementTransformer } from '@lexical/markdown';
|
|
2
|
+
export declare const PAYLOAD_HORIZONTAL_RULE: ElementTransformer;
|
|
3
3
|
//# sourceMappingURL=markdownTransformer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdownTransformer.d.ts","sourceRoot":"","sources":["../../../../src/features/horizontalRule/server/markdownTransformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"markdownTransformer.d.ts","sourceRoot":"","sources":["../../../../src/features/horizontalRule/server/markdownTransformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAQ3D,eAAO,MAAM,uBAAuB,EAAE,kBAiBrC,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { $createHorizontalRuleServerNode, $isHorizontalRuleServerNode, HorizontalRuleServerNode } from './nodes/HorizontalRuleNode.js';
|
|
2
|
-
export const
|
|
2
|
+
export const PAYLOAD_HORIZONTAL_RULE = {
|
|
3
3
|
type: 'element',
|
|
4
4
|
dependencies: [HorizontalRuleServerNode],
|
|
5
5
|
export: (node, exportChildren) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdownTransformer.js","names":["$createHorizontalRuleServerNode","$isHorizontalRuleServerNode","HorizontalRuleServerNode","
|
|
1
|
+
{"version":3,"file":"markdownTransformer.js","names":["$createHorizontalRuleServerNode","$isHorizontalRuleServerNode","HorizontalRuleServerNode","PAYLOAD_HORIZONTAL_RULE","type","dependencies","export","node","exportChildren","regExp","replace","parentNode"],"sources":["../../../../src/features/horizontalRule/server/markdownTransformer.ts"],"sourcesContent":["import type { ElementTransformer } from '@lexical/markdown'\n\nimport {\n $createHorizontalRuleServerNode,\n $isHorizontalRuleServerNode,\n HorizontalRuleServerNode,\n} from './nodes/HorizontalRuleNode.js'\n\nexport const PAYLOAD_HORIZONTAL_RULE: ElementTransformer = {\n type: 'element',\n dependencies: [HorizontalRuleServerNode],\n export: (node, exportChildren) => {\n if (!$isHorizontalRuleServerNode(node)) {\n return null\n }\n return '---'\n },\n // match ---\n regExp: /^---\\s*$/,\n replace: (parentNode) => {\n const node = $createHorizontalRuleServerNode()\n if (node) {\n parentNode.replace(node)\n }\n },\n}\n"],"mappings":"AAEA,SACEA,+BAA+B,EAC/BC,2BAA2B,EAC3BC,wBAAwB,QACnB;AAEP,OAAO,MAAMC,uBAAA,GAA8C;EACzDC,IAAA,EAAM;EACNC,YAAA,EAAc,CAACH,wBAAA,CAAyB;EACxCI,MAAA,EAAQA,CAACC,IAAA,EAAMC,cAAA;IACb,IAAI,CAACP,2BAAA,CAA4BM,IAAA,GAAO;MACtC,OAAO;IACT;IACA,OAAO;EACT;EACA;EACAE,MAAA,EAAQ;EACRC,OAAA,EAAUC,UAAA;IACR,MAAMJ,IAAA,GAAOP,+BAAA;IACb,IAAIO,IAAA,EAAM;MACRI,UAAA,CAAWD,OAAO,CAACH,IAAA;IACrB;EACF;AACF","ignoreList":[]}
|
|
@@ -6,7 +6,7 @@ import { LinkIcon } from '../../../lexical/ui/icons/Link/index.js';
|
|
|
6
6
|
import { getSelectedNode } from '../../../lexical/utils/getSelectedNode.js';
|
|
7
7
|
import { createClientFeature } from '../../../utilities/createClientFeature.js';
|
|
8
8
|
import { toolbarFeatureButtonsGroupWithItems } from '../../shared/toolbar/featureButtonsGroup.js';
|
|
9
|
-
import {
|
|
9
|
+
import { PAYLOAD_LINK } from '../markdownTransformer.js';
|
|
10
10
|
import { AutoLinkNode } from '../nodes/AutoLinkNode.js';
|
|
11
11
|
import { $isLinkNode, LinkNode, TOGGLE_LINK_COMMAND } from '../nodes/LinkNode.js';
|
|
12
12
|
import { AutoLinkPlugin } from './plugins/autoLink/index.js';
|
|
@@ -70,7 +70,7 @@ const toolbarGroups = [toolbarFeatureButtonsGroupWithItems([{
|
|
|
70
70
|
export const LinkFeatureClient = createClientFeature(({
|
|
71
71
|
props
|
|
72
72
|
}) => ({
|
|
73
|
-
markdownTransformers: [
|
|
73
|
+
markdownTransformers: [PAYLOAD_LINK],
|
|
74
74
|
nodes: [LinkNode, props?.disableAutoLinks === true ? null : AutoLinkNode].filter(Boolean),
|
|
75
75
|
plugins: [{
|
|
76
76
|
Component: LinkPlugin,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["$findMatchingParent","$getSelection","$isRangeSelection","LinkIcon","getSelectedNode","createClientFeature","toolbarFeatureButtonsGroupWithItems","
|
|
1
|
+
{"version":3,"file":"index.js","names":["$findMatchingParent","$getSelection","$isRangeSelection","LinkIcon","getSelectedNode","createClientFeature","toolbarFeatureButtonsGroupWithItems","PAYLOAD_LINK","AutoLinkNode","$isLinkNode","LinkNode","TOGGLE_LINK_COMMAND","AutoLinkPlugin","ClickableLinkPlugin","FloatingLinkEditorPlugin","TOGGLE_LINK_WITH_MODAL_COMMAND","LinkPlugin","toolbarGroups","ChildComponent","isActive","selection","selectedNode","linkParent","isEnabled","getTextContent","length","key","label","i18n","t","onSelect","editor","selectedText","selectedNodes","getEditorState","read","getNodes","linkFields","doc","dispatchCommand","fields","text","order","LinkFeatureClient","props","markdownTransformers","nodes","disableAutoLinks","filter","Boolean","plugins","Component","position","sanitizedClientFeatureProps","toolbarFixed","groups","toolbarInline"],"sources":["../../../../src/features/link/client/index.tsx"],"sourcesContent":["'use client'\n\nimport type { Klass, LexicalNode } from 'lexical'\n\nimport { $findMatchingParent } from '@lexical/utils'\nimport { $getSelection, $isRangeSelection } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\nimport type { ClientFeature } from '../../typesClient.js'\nimport type { ExclusiveLinkCollectionsProps } from '../server/index.js'\nimport type { LinkFields } from '../server/schema.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 { PAYLOAD_LINK } 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 { FloatingLinkEditorPlugin } from './plugins/floatingLinkEditor/index.js'\nimport { TOGGLE_LINK_WITH_MODAL_COMMAND } from './plugins/floatingLinkEditor/LinkEditor/commands.js'\nimport { LinkPlugin } from './plugins/link/index.js'\n\nexport type ClientProps = {\n defaultLinkType?: string\n defaultLinkURL?: string\n disableAutoLinks?: 'creationOnly' | true\n} & 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 | undefined\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: Partial<LinkFields> = {\n doc: null,\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<ClientProps>(({ props }) => ({\n markdownTransformers: [PAYLOAD_LINK],\n nodes: [LinkNode, props?.disableAutoLinks === true ? null : AutoLinkNode].filter(\n Boolean,\n ) as Array<Klass<LexicalNode>>,\n plugins: [\n {\n Component: LinkPlugin,\n position: 'normal',\n },\n props?.disableAutoLinks === true || props?.disableAutoLinks === 'creationOnly'\n ? null\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 ].filter(Boolean) as ClientFeature<ClientProps>['plugins'],\n sanitizedClientFeatureProps: props,\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n}))\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -5,7 +5,7 @@ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext
|
|
|
5
5
|
import { useLexicalEditable } from '@lexical/react/useLexicalEditable';
|
|
6
6
|
import { $findMatchingParent, mergeRegister } from '@lexical/utils';
|
|
7
7
|
import { getTranslation } from '@payloadcms/translations';
|
|
8
|
-
import {
|
|
8
|
+
import { formatDrawerSlug, NewTabIcon, useConfig, useEditDepth, useLocale, useTranslation, WriteIcon } from '@payloadcms/ui';
|
|
9
9
|
import { requests } from '@payloadcms/ui/shared';
|
|
10
10
|
import { $getSelection, $isLineBreakNode, $isRangeSelection, COMMAND_PRIORITY_HIGH, COMMAND_PRIORITY_LOW, getDOMSelection, KEY_ESCAPE_COMMAND, SELECTION_CHANGE_COMMAND } from 'lexical';
|
|
11
11
|
import { formatAdminURL } from 'payload/shared';
|
|
@@ -267,7 +267,7 @@ export function LinkEditor({
|
|
|
267
267
|
rel: "noopener noreferrer",
|
|
268
268
|
target: "_blank",
|
|
269
269
|
children: [linkLabel != null && linkLabel.length > 0 ? linkLabel : linkUrl, linkNode?.__fields.newTab ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
270
|
-
children: [/*#__PURE__*/_jsx(
|
|
270
|
+
children: [/*#__PURE__*/_jsx(NewTabIcon, {
|
|
271
271
|
size: 16
|
|
272
272
|
}), " ", /*#__PURE__*/_jsx("div", {
|
|
273
273
|
className: "link-input__divider"
|
|
@@ -278,7 +278,7 @@ export function LinkEditor({
|
|
|
278
278
|
className: "link-input__label-pure",
|
|
279
279
|
children: linkLabel
|
|
280
280
|
}), linkNode?.__fields.newTab ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
281
|
-
children: [/*#__PURE__*/_jsx(
|
|
281
|
+
children: [/*#__PURE__*/_jsx(NewTabIcon, {
|
|
282
282
|
size: 16
|
|
283
283
|
}), " ", /*#__PURE__*/_jsx("div", {
|
|
284
284
|
className: "link-input__divider"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["useLexicalComposerContext","useLexicalEditable","$findMatchingParent","mergeRegister","getTranslation","ExternalLinkIcon","formatDrawerSlug","useConfig","useEditDepth","useLocale","useTranslation","WriteIcon","requests","$getSelection","$isLineBreakNode","$isRangeSelection","COMMAND_PRIORITY_HIGH","COMMAND_PRIORITY_LOW","getDOMSelection","KEY_ESCAPE_COMMAND","SELECTION_CHANGE_COMMAND","formatAdminURL","React","useCallback","useEffect","useLayoutEffect","useRef","useState","useEditorConfigContext","LinkIcon","PageIcon","TrashIcon","getSelectedNode","setFloatingElemPositionForLinkEditor","FieldsDrawer","useLexicalDrawer","$isAutoLinkNode","$createLinkNode","$isLinkNode","TOGGLE_LINK_COMMAND","TOGGLE_LINK_WITH_MODAL_COMMAND","preventDefault","event","LinkEditor","anchorElem","editor","linkNode","setLinkNode","editorRef","selectedNodeRectRef","linkUrl","setLinkUrl","linkLabel","setLinkLabel","fieldProps","schemaPath","uuid","isEditable","config","getEntityConfig","i18n","t","stateData","setStateData","editDepth","isLink","setIsLink","selectedNodes","setSelectedNodes","locale","isAutoLink","setIsAutoLink","drawerSlug","slug","depth","toggleDrawer","setNotLink","current","style","opacity","transform","undefined","$updateLinkEditor","selection","selectedNodeDomRect","focusNode","getElementByKey","getKey","getBoundingClientRect","focusLinkParent","badNode","getNodes","filter","node","find","is","fields","getFields","data","id","getID","text","getTextContent","linkType","url","routes","admin","doc","relationTo","value","relatedField","collectionSlug","label","String","collection","Error","loadingLabel","labels","singular","replace","get","apiRoute","api","path","serverURL","headers","language","params","code","then","res","ok","status","json","useAsTitle","title","catch","editorElem","nativeSelection","_window","activeElement","document","rootElement","getRootElement","contains","anchorNode","getRangeAt","y","className","registerCommand","payload","dispatchCommand","scrollerElem","parentElement","update","getEditorState","read","window","addEventListener","removeEventListener","registerUpdateListener","editorState","_jsxs","Fragment","_jsx","ref","__fields","length","href","rel","target","newTab","_Fragment","size","onClick","onMouseDown","tabIndex","type","small","drawerTitle","featureKey","handleDrawerSubmit","newLinkPayload","bareLinkFields","linkParent","getParent","schemaPathSuffix"],"sources":["../../../../../../../src/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.tsx"],"sourcesContent":["'use client'\nimport type { ElementNode, LexicalNode } from 'lexical'\nimport type { Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n ExternalLinkIcon,\n formatDrawerSlug,\n useConfig,\n useEditDepth,\n useLocale,\n useTranslation,\n WriteIcon,\n} from '@payloadcms/ui'\nimport { requests } from '@payloadcms/ui/shared'\nimport {\n $getSelection,\n $isLineBreakNode,\n $isRangeSelection,\n COMMAND_PRIORITY_HIGH,\n COMMAND_PRIORITY_LOW,\n getDOMSelection,\n KEY_ESCAPE_COMMAND,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical'\nimport { formatAdminURL } from 'payload/shared'\nimport React, { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nimport type { LinkNode } from '../../../../nodes/LinkNode.js'\nimport type { LinkFields } from '../../../../server/schema.js'\nimport type { LinkPayload } from '../types.js'\n\nimport { useEditorConfigContext } from '../../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { LinkIcon } from '../../../../../../lexical/ui/icons/Link/index.js'\nimport { PageIcon } from '../../../../../../lexical/ui/icons/Page/index.js'\nimport { TrashIcon } from '../../../../../../lexical/ui/icons/Trash/index.js'\nimport { getSelectedNode } from '../../../../../../lexical/utils/getSelectedNode.js'\nimport { setFloatingElemPositionForLinkEditor } from '../../../../../../lexical/utils/setFloatingElemPositionForLinkEditor.js'\nimport { FieldsDrawer } from '../../../../../../utilities/fieldsDrawer/Drawer.js'\nimport { useLexicalDrawer } from '../../../../../../utilities/fieldsDrawer/useLexicalDrawer.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\nfunction preventDefault(\n event: React.KeyboardEvent<HTMLInputElement> | React.MouseEvent<HTMLElement>,\n): void {\n event.preventDefault()\n}\n\nexport function LinkEditor({ anchorElem }: { anchorElem: HTMLElement }): React.ReactNode {\n const [editor] = useLexicalComposerContext()\n // TO-DO: There are several states that should not be state, because they\n // are derived from linkNode (linkUrl, linkLabel, stateData, isLink, isAutoLink...)\n const [linkNode, setLinkNode] = useState<LinkNode>()\n\n const editorRef = useRef<HTMLDivElement | null>(null)\n const selectedNodeRectRef = useRef<DOMRect | null>(null)\n const [linkUrl, setLinkUrl] = useState<null | string>(null)\n const [linkLabel, setLinkLabel] = useState<null | string>(null)\n\n const {\n fieldProps: { schemaPath },\n uuid,\n } = useEditorConfigContext()\n const isEditable = useLexicalEditable()\n\n const { config, getEntityConfig } = useConfig()\n\n const { i18n, t } = useTranslation<object, 'lexical:link:loadingWithEllipsis'>()\n\n const [stateData, setStateData] = useState<\n ({ id?: string; text: string } & LinkFields) | undefined\n >()\n\n const editDepth = useEditDepth()\n const [isLink, setIsLink] = useState(false)\n const [selectedNodes, setSelectedNodes] = useState<LexicalNode[]>([])\n const locale = useLocale()\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 { toggleDrawer } = useLexicalDrawer(drawerSlug)\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(undefined)\n }, [setIsLink, setLinkUrl, setLinkLabel, setSelectedNodes])\n\n const $updateLinkEditor = useCallback(() => {\n const selection = $getSelection()\n let selectedNodeDomRect: DOMRect | undefined\n\n if (!$isRangeSelection(selection) || !selection) {\n void 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 = $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 setLinkNode(focusLinkParent)\n\n const fields = focusLinkParent.getFields()\n\n // Initial state:\n const data: { text: string } & LinkFields = {\n ...fields,\n id: focusLinkParent.getID(),\n text: focusLinkParent.getTextContent(),\n }\n\n if (fields?.linkType === 'custom') {\n setLinkUrl(fields?.url ?? null)\n setLinkLabel(null)\n } else {\n // internal link\n setLinkUrl(\n `${config.routes.admin === '/' ? '' : config.routes.admin}/collections/${fields?.doc?.relationTo}/${\n fields?.doc?.value\n }`,\n )\n\n const relatedField = fields?.doc?.relationTo\n ? getEntityConfig({ collectionSlug: fields?.doc?.relationTo })\n : undefined\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(fields?.label ? String(fields?.label) : null)\n setLinkUrl(fields?.url ? String(fields?.url) : null)\n } else {\n const id = typeof fields.doc?.value === 'object' ? fields.doc.value.id : fields.doc?.value\n const collection = fields.doc?.relationTo\n if (!id || !collection) {\n throw new Error(`Focus link parent is missing doc.value or doc.relationTo`)\n }\n\n const loadingLabel = t('fields:linkedTo', {\n label: `${getTranslation(relatedField.labels.singular, i18n)} - ${t('lexical:link:loadingWithEllipsis', i18n)}`,\n }).replace(/<[^>]*>?/g, '')\n setLinkLabel(loadingLabel)\n\n requests\n .get(\n formatAdminURL({\n apiRoute: config.routes.api,\n path: `/${collection}/${id}`,\n serverURL: config.serverURL,\n }),\n {\n headers: {\n 'Accept-Language': i18n.language,\n },\n params: {\n depth: 0,\n locale: locale?.code,\n },\n },\n )\n .then(async (res) => {\n if (!res.ok) {\n throw new Error(`HTTP error! Status: ${res.status}`)\n }\n const data = await res.json()\n const useAsTitle = relatedField?.admin?.useAsTitle || 'id'\n const title = data[useAsTitle]\n const label = t('fields:linkedTo', {\n label: `${getTranslation(relatedField.labels.singular, i18n)} - ${title}`,\n }).replace(/<[^>]*>?/g, '')\n setLinkLabel(label)\n })\n .catch(() => {\n const label = t('fields:linkedTo', {\n label: `${getTranslation(relatedField.labels.singular, i18n)} - ${t('general:untitled', i18n)} - ID: ${id}`,\n }).replace(/<[^>]*>?/g, '')\n setLinkLabel(label)\n })\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 = getDOMSelection(editor._window)\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 // Store the rect for positioning in useLayoutEffect after content renders\n selectedNodeRectRef.current = selectedNodeDomRect\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 }, [\n editor,\n setNotLink,\n config.routes.admin,\n config.routes.api,\n config.serverURL,\n getEntityConfig,\n t,\n i18n,\n locale?.code,\n anchorElem,\n ])\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 toggleDrawer()\n\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, $updateLinkEditor, toggleDrawer, 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 // Position the tooltip after React renders the link content\n useLayoutEffect(() => {\n if (!isLink || !editorRef.current || !anchorElem || !selectedNodeRectRef.current) {\n return\n }\n\n // Now the DOM has the actual link element, we can position the tooltip\n setFloatingElemPositionForLinkEditor(selectedNodeRectRef.current, editorRef.current, anchorElem)\n // linkNode dependency ensures re-positioning when clicking between different links with the same URL\n }, [linkUrl, linkLabel, isLink, anchorElem, linkNode])\n\n return (\n <React.Fragment>\n <div className=\"link-editor\" data-theme=\"dark\" ref={editorRef}>\n <div className=\"link-input\">\n {linkNode?.__fields?.linkType === 'custom' ? <LinkIcon /> : <PageIcon />}\n {linkUrl && linkUrl.length > 0 ? (\n <a className=\"link-input__url\" href={linkUrl} rel=\"noopener noreferrer\" target=\"_blank\">\n {linkLabel != null && linkLabel.length > 0 ? linkLabel : linkUrl}\n {linkNode?.__fields.newTab ? (\n <>\n <ExternalLinkIcon size={16} /> <div className=\"link-input__divider\" />{' '}\n </>\n ) : null}\n </a>\n ) : linkLabel != null && linkLabel.length > 0 ? (\n <>\n <span className=\"link-input__label-pure\">{linkLabel}</span>\n {linkNode?.__fields.newTab ? (\n <>\n <ExternalLinkIcon size={16} /> <div className=\"link-input__divider\" />{' '}\n </>\n ) : null}\n </>\n ) : null}\n\n {isEditable && (\n <div className=\"link-input__actions\">\n <button\n aria-label=\"Edit link\"\n className=\"link-edit\"\n onClick={(event) => {\n event.preventDefault()\n toggleDrawer()\n }}\n onMouseDown={preventDefault}\n tabIndex={0}\n type=\"button\"\n >\n <WriteIcon />\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={preventDefault}\n tabIndex={0}\n type=\"button\"\n >\n <TrashIcon small />\n </button>\n )}\n </div>\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 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: ElementNode | null = null\n if ($isRangeSelection(selection)) {\n linkParent = getSelectedNode(selection).getParent()\n } else {\n if (selectedNodes.length) {\n linkParent = selectedNodes[0]?.getParent() ?? null\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 schemaPath={schemaPath}\n schemaPathSuffix=\"fields\"\n />\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["useLexicalComposerContext","useLexicalEditable","$findMatchingParent","mergeRegister","getTranslation","formatDrawerSlug","NewTabIcon","useConfig","useEditDepth","useLocale","useTranslation","WriteIcon","requests","$getSelection","$isLineBreakNode","$isRangeSelection","COMMAND_PRIORITY_HIGH","COMMAND_PRIORITY_LOW","getDOMSelection","KEY_ESCAPE_COMMAND","SELECTION_CHANGE_COMMAND","formatAdminURL","React","useCallback","useEffect","useLayoutEffect","useRef","useState","useEditorConfigContext","LinkIcon","PageIcon","TrashIcon","getSelectedNode","setFloatingElemPositionForLinkEditor","FieldsDrawer","useLexicalDrawer","$isAutoLinkNode","$createLinkNode","$isLinkNode","TOGGLE_LINK_COMMAND","TOGGLE_LINK_WITH_MODAL_COMMAND","preventDefault","event","LinkEditor","anchorElem","editor","linkNode","setLinkNode","editorRef","selectedNodeRectRef","linkUrl","setLinkUrl","linkLabel","setLinkLabel","fieldProps","schemaPath","uuid","isEditable","config","getEntityConfig","i18n","t","stateData","setStateData","editDepth","isLink","setIsLink","selectedNodes","setSelectedNodes","locale","isAutoLink","setIsAutoLink","drawerSlug","slug","depth","toggleDrawer","setNotLink","current","style","opacity","transform","undefined","$updateLinkEditor","selection","selectedNodeDomRect","focusNode","getElementByKey","getKey","getBoundingClientRect","focusLinkParent","badNode","getNodes","filter","node","find","is","fields","getFields","data","id","getID","text","getTextContent","linkType","url","routes","admin","doc","relationTo","value","relatedField","collectionSlug","label","String","collection","Error","loadingLabel","labels","singular","replace","get","apiRoute","api","path","serverURL","headers","language","params","code","then","res","ok","status","json","useAsTitle","title","catch","editorElem","nativeSelection","_window","activeElement","document","rootElement","getRootElement","contains","anchorNode","getRangeAt","y","className","registerCommand","payload","dispatchCommand","scrollerElem","parentElement","update","getEditorState","read","window","addEventListener","removeEventListener","registerUpdateListener","editorState","_jsxs","Fragment","_jsx","ref","__fields","length","href","rel","target","newTab","_Fragment","size","onClick","onMouseDown","tabIndex","type","small","drawerTitle","featureKey","handleDrawerSubmit","newLinkPayload","bareLinkFields","linkParent","getParent","schemaPathSuffix"],"sources":["../../../../../../../src/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.tsx"],"sourcesContent":["'use client'\nimport type { ElementNode, LexicalNode } from 'lexical'\nimport type { Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n formatDrawerSlug,\n NewTabIcon,\n useConfig,\n useEditDepth,\n useLocale,\n useTranslation,\n WriteIcon,\n} from '@payloadcms/ui'\nimport { requests } from '@payloadcms/ui/shared'\nimport {\n $getSelection,\n $isLineBreakNode,\n $isRangeSelection,\n COMMAND_PRIORITY_HIGH,\n COMMAND_PRIORITY_LOW,\n getDOMSelection,\n KEY_ESCAPE_COMMAND,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical'\nimport { formatAdminURL } from 'payload/shared'\nimport React, { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nimport type { LinkNode } from '../../../../nodes/LinkNode.js'\nimport type { LinkFields } from '../../../../server/schema.js'\nimport type { LinkPayload } from '../types.js'\n\nimport { useEditorConfigContext } from '../../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { LinkIcon } from '../../../../../../lexical/ui/icons/Link/index.js'\nimport { PageIcon } from '../../../../../../lexical/ui/icons/Page/index.js'\nimport { TrashIcon } from '../../../../../../lexical/ui/icons/Trash/index.js'\nimport { getSelectedNode } from '../../../../../../lexical/utils/getSelectedNode.js'\nimport { setFloatingElemPositionForLinkEditor } from '../../../../../../lexical/utils/setFloatingElemPositionForLinkEditor.js'\nimport { FieldsDrawer } from '../../../../../../utilities/fieldsDrawer/Drawer.js'\nimport { useLexicalDrawer } from '../../../../../../utilities/fieldsDrawer/useLexicalDrawer.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\nfunction preventDefault(\n event: React.KeyboardEvent<HTMLInputElement> | React.MouseEvent<HTMLElement>,\n): void {\n event.preventDefault()\n}\n\nexport function LinkEditor({ anchorElem }: { anchorElem: HTMLElement }): React.ReactNode {\n const [editor] = useLexicalComposerContext()\n // TO-DO: There are several states that should not be state, because they\n // are derived from linkNode (linkUrl, linkLabel, stateData, isLink, isAutoLink...)\n const [linkNode, setLinkNode] = useState<LinkNode>()\n\n const editorRef = useRef<HTMLDivElement | null>(null)\n const selectedNodeRectRef = useRef<DOMRect | null>(null)\n const [linkUrl, setLinkUrl] = useState<null | string>(null)\n const [linkLabel, setLinkLabel] = useState<null | string>(null)\n\n const {\n fieldProps: { schemaPath },\n uuid,\n } = useEditorConfigContext()\n const isEditable = useLexicalEditable()\n\n const { config, getEntityConfig } = useConfig()\n\n const { i18n, t } = useTranslation<object, 'lexical:link:loadingWithEllipsis'>()\n\n const [stateData, setStateData] = useState<\n ({ id?: string; text: string } & LinkFields) | undefined\n >()\n\n const editDepth = useEditDepth()\n const [isLink, setIsLink] = useState(false)\n const [selectedNodes, setSelectedNodes] = useState<LexicalNode[]>([])\n const locale = useLocale()\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 { toggleDrawer } = useLexicalDrawer(drawerSlug)\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(undefined)\n }, [setIsLink, setLinkUrl, setLinkLabel, setSelectedNodes])\n\n const $updateLinkEditor = useCallback(() => {\n const selection = $getSelection()\n let selectedNodeDomRect: DOMRect | undefined\n\n if (!$isRangeSelection(selection) || !selection) {\n void 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 = $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 setLinkNode(focusLinkParent)\n\n const fields = focusLinkParent.getFields()\n\n // Initial state:\n const data: { text: string } & LinkFields = {\n ...fields,\n id: focusLinkParent.getID(),\n text: focusLinkParent.getTextContent(),\n }\n\n if (fields?.linkType === 'custom') {\n setLinkUrl(fields?.url ?? null)\n setLinkLabel(null)\n } else {\n // internal link\n setLinkUrl(\n `${config.routes.admin === '/' ? '' : config.routes.admin}/collections/${fields?.doc?.relationTo}/${\n fields?.doc?.value\n }`,\n )\n\n const relatedField = fields?.doc?.relationTo\n ? getEntityConfig({ collectionSlug: fields?.doc?.relationTo })\n : undefined\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(fields?.label ? String(fields?.label) : null)\n setLinkUrl(fields?.url ? String(fields?.url) : null)\n } else {\n const id = typeof fields.doc?.value === 'object' ? fields.doc.value.id : fields.doc?.value\n const collection = fields.doc?.relationTo\n if (!id || !collection) {\n throw new Error(`Focus link parent is missing doc.value or doc.relationTo`)\n }\n\n const loadingLabel = t('fields:linkedTo', {\n label: `${getTranslation(relatedField.labels.singular, i18n)} - ${t('lexical:link:loadingWithEllipsis', i18n)}`,\n }).replace(/<[^>]*>?/g, '')\n setLinkLabel(loadingLabel)\n\n requests\n .get(\n formatAdminURL({\n apiRoute: config.routes.api,\n path: `/${collection}/${id}`,\n serverURL: config.serverURL,\n }),\n {\n headers: {\n 'Accept-Language': i18n.language,\n },\n params: {\n depth: 0,\n locale: locale?.code,\n },\n },\n )\n .then(async (res) => {\n if (!res.ok) {\n throw new Error(`HTTP error! Status: ${res.status}`)\n }\n const data = await res.json()\n const useAsTitle = relatedField?.admin?.useAsTitle || 'id'\n const title = data[useAsTitle]\n const label = t('fields:linkedTo', {\n label: `${getTranslation(relatedField.labels.singular, i18n)} - ${title}`,\n }).replace(/<[^>]*>?/g, '')\n setLinkLabel(label)\n })\n .catch(() => {\n const label = t('fields:linkedTo', {\n label: `${getTranslation(relatedField.labels.singular, i18n)} - ${t('general:untitled', i18n)} - ID: ${id}`,\n }).replace(/<[^>]*>?/g, '')\n setLinkLabel(label)\n })\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 = getDOMSelection(editor._window)\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 // Store the rect for positioning in useLayoutEffect after content renders\n selectedNodeRectRef.current = selectedNodeDomRect\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 }, [\n editor,\n setNotLink,\n config.routes.admin,\n config.routes.api,\n config.serverURL,\n getEntityConfig,\n t,\n i18n,\n locale?.code,\n anchorElem,\n ])\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 toggleDrawer()\n\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, $updateLinkEditor, toggleDrawer, 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 // Position the tooltip after React renders the link content\n useLayoutEffect(() => {\n if (!isLink || !editorRef.current || !anchorElem || !selectedNodeRectRef.current) {\n return\n }\n\n // Now the DOM has the actual link element, we can position the tooltip\n setFloatingElemPositionForLinkEditor(selectedNodeRectRef.current, editorRef.current, anchorElem)\n // linkNode dependency ensures re-positioning when clicking between different links with the same URL\n }, [linkUrl, linkLabel, isLink, anchorElem, linkNode])\n\n return (\n <React.Fragment>\n <div className=\"link-editor\" data-theme=\"dark\" ref={editorRef}>\n <div className=\"link-input\">\n {linkNode?.__fields?.linkType === 'custom' ? <LinkIcon /> : <PageIcon />}\n {linkUrl && linkUrl.length > 0 ? (\n <a className=\"link-input__url\" href={linkUrl} rel=\"noopener noreferrer\" target=\"_blank\">\n {linkLabel != null && linkLabel.length > 0 ? linkLabel : linkUrl}\n {linkNode?.__fields.newTab ? (\n <>\n <NewTabIcon size={16} /> <div className=\"link-input__divider\" />{' '}\n </>\n ) : null}\n </a>\n ) : linkLabel != null && linkLabel.length > 0 ? (\n <>\n <span className=\"link-input__label-pure\">{linkLabel}</span>\n {linkNode?.__fields.newTab ? (\n <>\n <NewTabIcon size={16} /> <div className=\"link-input__divider\" />{' '}\n </>\n ) : null}\n </>\n ) : null}\n\n {isEditable && (\n <div className=\"link-input__actions\">\n <button\n aria-label=\"Edit link\"\n className=\"link-edit\"\n onClick={(event) => {\n event.preventDefault()\n toggleDrawer()\n }}\n onMouseDown={preventDefault}\n tabIndex={0}\n type=\"button\"\n >\n <WriteIcon />\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={preventDefault}\n tabIndex={0}\n type=\"button\"\n >\n <TrashIcon small />\n </button>\n )}\n </div>\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 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: ElementNode | null = null\n if ($isRangeSelection(selection)) {\n linkParent = getSelectedNode(selection).getParent()\n } else {\n if (selectedNodes.length) {\n linkParent = selectedNodes[0]?.getParent() ?? null\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 schemaPath={schemaPath}\n schemaPathSuffix=\"fields\"\n />\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|