@payloadcms/richtext-lexical 3.0.0-canary.9de3ffd → 3.0.0-canary.9f64534
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/cell/rscEntry.d.ts +12 -0
- package/dist/cell/rscEntry.d.ts.map +1 -0
- package/dist/cell/rscEntry.js +82 -0
- package/dist/cell/rscEntry.js.map +1 -0
- package/dist/exports/client/Field-S5G27AVI.js +2 -0
- package/dist/exports/client/Field-S5G27AVI.js.map +7 -0
- package/dist/exports/client/RelationshipComponent-2RT3YXUT.js +2 -0
- package/dist/exports/client/RelationshipComponent-2RT3YXUT.js.map +7 -0
- package/dist/exports/client/bundled.css +1 -1
- package/dist/exports/client/chunk-2CYU43GM.js +2 -0
- package/dist/exports/client/chunk-2CYU43GM.js.map +7 -0
- package/dist/exports/client/chunk-5PBXL4HT.js +2 -0
- package/dist/exports/client/chunk-5PBXL4HT.js.map +7 -0
- package/dist/exports/client/chunk-C7S3V4EB.js +2 -0
- package/dist/exports/client/chunk-C7S3V4EB.js.map +7 -0
- package/dist/exports/client/chunk-CUIBIFW2.js +2 -0
- package/dist/exports/client/chunk-CUIBIFW2.js.map +7 -0
- package/dist/exports/client/{chunk-LGUXX2QH.js → chunk-MI5HS4QX.js} +2 -2
- package/dist/exports/client/{chunk-LGUXX2QH.js.map → chunk-MI5HS4QX.js.map} +2 -2
- package/dist/exports/client/chunk-OOBB5GCO.js +2 -0
- package/dist/exports/client/chunk-OOBB5GCO.js.map +7 -0
- package/dist/exports/client/chunk-U7O7EYCP.js +2 -0
- package/dist/exports/client/chunk-U7O7EYCP.js.map +7 -0
- package/dist/exports/client/{chunk-V2LKLT2F.js → chunk-XCEM47RI.js} +3 -3
- package/dist/exports/client/{chunk-V2LKLT2F.js.map → chunk-XCEM47RI.js.map} +3 -3
- package/dist/exports/client/component-ANB7VZLA.js +2 -0
- package/dist/exports/client/component-ANB7VZLA.js.map +7 -0
- package/dist/exports/client/component-H3EYQ5KG.js +2 -0
- package/dist/exports/client/component-H3EYQ5KG.js.map +7 -0
- package/dist/exports/client/componentInline-ZGO3K4TA.js +2 -0
- package/dist/exports/client/componentInline-ZGO3K4TA.js.map +7 -0
- package/dist/exports/client/index.d.ts +10 -4
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +8 -8
- package/dist/exports/client/index.js.map +4 -4
- package/dist/exports/server/rsc.d.ts +3 -0
- package/dist/exports/server/rsc.d.ts.map +1 -0
- package/dist/exports/server/rsc.js +3 -0
- package/dist/exports/server/rsc.js.map +1 -0
- package/dist/features/align/client/index.d.ts +1 -4
- package/dist/features/align/client/index.d.ts.map +1 -1
- package/dist/features/blockquote/client/index.d.ts +1 -4
- package/dist/features/blockquote/client/index.d.ts.map +1 -1
- package/dist/features/blockquote/markdownTransformer.js.map +1 -1
- package/dist/features/blockquote/server/index.d.ts +1 -1
- package/dist/features/blockquote/server/index.d.ts.map +1 -1
- package/dist/features/blockquote/server/index.js +5 -1
- package/dist/features/blockquote/server/index.js.map +1 -1
- package/dist/features/blocks/client/component/BlockContent.d.ts +34 -8
- package/dist/features/blocks/client/component/BlockContent.d.ts.map +1 -1
- package/dist/features/blocks/client/component/BlockContent.js +66 -170
- package/dist/features/blocks/client/component/BlockContent.js.map +1 -1
- package/dist/features/blocks/client/component/components/BlockCollapsible.d.ts +11 -0
- package/dist/features/blocks/client/component/components/BlockCollapsible.d.ts.map +1 -0
- package/dist/features/blocks/client/component/components/BlockCollapsible.js +37 -0
- package/dist/features/blocks/client/component/components/BlockCollapsible.js.map +1 -0
- package/dist/features/blocks/client/component/components/BlockEditButton.d.ts +3 -0
- package/dist/features/blocks/client/component/components/BlockEditButton.d.ts.map +1 -0
- package/dist/features/blocks/client/component/components/BlockEditButton.js +22 -0
- package/dist/features/blocks/client/component/components/BlockEditButton.js.map +1 -0
- package/dist/features/blocks/client/component/components/BlockRemoveButton.d.ts +3 -0
- package/dist/features/blocks/client/component/components/BlockRemoveButton.d.ts.map +1 -0
- package/dist/features/blocks/client/component/components/BlockRemoveButton.js +22 -0
- package/dist/features/blocks/client/component/components/BlockRemoveButton.js.map +1 -0
- package/dist/features/blocks/client/component/index.d.ts +1 -1
- package/dist/features/blocks/client/component/index.d.ts.map +1 -1
- package/dist/features/blocks/client/component/index.js +294 -93
- package/dist/features/blocks/client/component/index.js.map +1 -1
- package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.d.ts +5 -0
- package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.d.ts.map +1 -0
- package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.js +28 -0
- package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.js.map +1 -0
- package/dist/features/blocks/client/componentInline/components/InlineBlockEditButton.d.ts +3 -0
- package/dist/features/blocks/client/componentInline/components/InlineBlockEditButton.d.ts.map +1 -0
- package/dist/features/blocks/client/componentInline/components/InlineBlockEditButton.js +22 -0
- package/dist/features/blocks/client/componentInline/components/InlineBlockEditButton.js.map +1 -0
- package/dist/features/blocks/client/componentInline/components/InlineBlockLabel.d.ts +3 -0
- package/dist/features/blocks/client/componentInline/components/InlineBlockLabel.d.ts.map +1 -0
- package/dist/features/blocks/client/componentInline/components/InlineBlockLabel.js +22 -0
- package/dist/features/blocks/client/componentInline/components/InlineBlockLabel.js.map +1 -0
- package/dist/features/blocks/client/componentInline/components/InlineBlockRemoveButton.d.ts +3 -0
- package/dist/features/blocks/client/componentInline/components/InlineBlockRemoveButton.d.ts.map +1 -0
- package/dist/features/blocks/client/componentInline/components/InlineBlockRemoveButton.js +22 -0
- package/dist/features/blocks/client/componentInline/components/InlineBlockRemoveButton.js.map +1 -0
- package/dist/features/blocks/client/componentInline/index.d.ts +14 -2
- package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
- package/dist/features/blocks/client/componentInline/index.js +237 -63
- package/dist/features/blocks/client/componentInline/index.js.map +1 -1
- package/dist/features/blocks/client/index.d.ts +1 -4
- package/dist/features/blocks/client/index.d.ts.map +1 -1
- package/dist/features/blocks/client/index.js +42 -33
- package/dist/features/blocks/client/index.js.map +1 -1
- package/dist/features/blocks/client/nodes/BlocksNode.d.ts +2 -2
- package/dist/features/blocks/client/nodes/BlocksNode.d.ts.map +1 -1
- package/dist/features/blocks/client/nodes/BlocksNode.js +1 -3
- package/dist/features/blocks/client/nodes/BlocksNode.js.map +1 -1
- package/dist/features/blocks/client/plugin/commands.d.ts +0 -4
- package/dist/features/blocks/client/plugin/commands.d.ts.map +1 -1
- package/dist/features/blocks/client/plugin/commands.js +0 -1
- package/dist/features/blocks/client/plugin/commands.js.map +1 -1
- package/dist/features/blocks/client/plugin/index.d.ts +2 -2
- package/dist/features/blocks/client/plugin/index.d.ts.map +1 -1
- package/dist/features/blocks/client/plugin/index.js +25 -129
- package/dist/features/blocks/client/plugin/index.js.map +1 -1
- package/dist/features/blocks/server/index.d.ts.map +1 -1
- package/dist/features/blocks/server/index.js +67 -27
- package/dist/features/blocks/server/index.js.map +1 -1
- package/dist/features/blocks/server/nodes/BlocksNode.d.ts +11 -5
- package/dist/features/blocks/server/nodes/BlocksNode.d.ts.map +1 -1
- package/dist/features/blocks/server/nodes/BlocksNode.js.map +1 -1
- package/dist/features/blocks/server/nodes/InlineBlocksNode.d.ts +3 -3
- package/dist/features/blocks/server/nodes/InlineBlocksNode.d.ts.map +1 -1
- package/dist/features/blocks/server/nodes/InlineBlocksNode.js.map +1 -1
- package/dist/features/blocks/server/validate.d.ts.map +1 -1
- package/dist/features/blocks/server/validate.js +8 -5
- package/dist/features/blocks/server/validate.js.map +1 -1
- package/dist/features/converters/html/converter/converters/paragraph.d.ts.map +1 -1
- package/dist/features/converters/html/converter/converters/paragraph.js +4 -0
- package/dist/features/converters/html/converter/converters/paragraph.js.map +1 -1
- package/dist/features/converters/html/converter/converters/text.d.ts.map +1 -1
- package/dist/features/converters/html/converter/converters/text.js +2 -1
- package/dist/features/converters/html/converter/converters/text.js.map +1 -1
- package/dist/features/converters/html/converter/index.d.ts +11 -7
- package/dist/features/converters/html/converter/index.d.ts.map +1 -1
- package/dist/features/converters/html/converter/index.js +17 -1
- package/dist/features/converters/html/converter/index.js.map +1 -1
- package/dist/features/converters/html/converter/types.d.ts +3 -1
- package/dist/features/converters/html/converter/types.d.ts.map +1 -1
- package/dist/features/converters/html/converter/types.js.map +1 -1
- package/dist/features/converters/html/field/index.d.ts.map +1 -1
- package/dist/features/converters/html/field/index.js +7 -1
- package/dist/features/converters/html/field/index.js.map +1 -1
- package/dist/features/debug/testRecorder/client/index.d.ts +1 -4
- package/dist/features/debug/testRecorder/client/index.d.ts.map +1 -1
- package/dist/features/debug/testRecorder/client/plugin/index.js +187 -352
- package/dist/features/debug/testRecorder/client/plugin/index.js.map +1 -1
- package/dist/features/debug/treeView/client/index.d.ts +1 -4
- package/dist/features/debug/treeView/client/index.d.ts.map +1 -1
- package/dist/features/experimental_table/client/index.d.ts +1 -1
- package/dist/features/experimental_table/client/index.d.ts.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.d.ts.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js +250 -488
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.d.ts.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js +39 -39
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts +1 -1
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js +109 -134
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.d.ts.map +1 -1
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.js +52 -50
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/utils/debounce.js +4 -4
- package/dist/features/experimental_table/client/utils/debounce.js.map +1 -1
- package/dist/features/experimental_table/client/utils/useDebounce.js.map +1 -1
- package/dist/features/experimental_table/server/index.d.ts.map +1 -1
- package/dist/features/experimental_table/server/index.js +20 -4
- package/dist/features/experimental_table/server/index.js.map +1 -1
- package/dist/features/format/bold/feature.client.d.ts +1 -4
- package/dist/features/format/bold/feature.client.d.ts.map +1 -1
- package/dist/features/format/bold/feature.client.js +2 -1
- package/dist/features/format/bold/feature.client.js.map +1 -1
- package/dist/features/format/inlineCode/feature.client.d.ts +1 -4
- package/dist/features/format/inlineCode/feature.client.d.ts.map +1 -1
- package/dist/features/format/inlineCode/feature.client.js +2 -1
- package/dist/features/format/inlineCode/feature.client.js.map +1 -1
- package/dist/features/format/italic/feature.client.d.ts +1 -4
- package/dist/features/format/italic/feature.client.d.ts.map +1 -1
- package/dist/features/format/italic/feature.client.js +2 -1
- package/dist/features/format/italic/feature.client.js.map +1 -1
- package/dist/features/format/strikethrough/feature.client.d.ts +1 -4
- package/dist/features/format/strikethrough/feature.client.d.ts.map +1 -1
- package/dist/features/format/strikethrough/feature.client.js +2 -1
- package/dist/features/format/strikethrough/feature.client.js.map +1 -1
- package/dist/features/format/subscript/feature.client.d.ts +1 -4
- package/dist/features/format/subscript/feature.client.d.ts.map +1 -1
- package/dist/features/format/subscript/feature.client.js +2 -1
- package/dist/features/format/subscript/feature.client.js.map +1 -1
- package/dist/features/format/superscript/feature.client.d.ts +1 -4
- package/dist/features/format/superscript/feature.client.d.ts.map +1 -1
- package/dist/features/format/superscript/feature.client.js +2 -1
- package/dist/features/format/superscript/feature.client.js.map +1 -1
- package/dist/features/format/underline/feature.client.d.ts +1 -4
- package/dist/features/format/underline/feature.client.d.ts.map +1 -1
- package/dist/features/format/underline/feature.client.js +2 -1
- package/dist/features/format/underline/feature.client.js.map +1 -1
- package/dist/features/heading/client/index.d.ts +1 -4
- package/dist/features/heading/client/index.d.ts.map +1 -1
- package/dist/features/heading/server/index.d.ts.map +1 -1
- package/dist/features/heading/server/index.js +4 -0
- package/dist/features/heading/server/index.js.map +1 -1
- package/dist/features/horizontalRule/client/component/index.d.ts +1 -1
- package/dist/features/horizontalRule/client/component/index.d.ts.map +1 -1
- package/dist/features/horizontalRule/client/component/index.js +12 -9
- package/dist/features/horizontalRule/client/component/index.js.map +1 -1
- package/dist/features/horizontalRule/client/index.d.ts +1 -4
- package/dist/features/horizontalRule/client/index.d.ts.map +1 -1
- package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts +2 -2
- package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts.map +1 -1
- package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.js +1 -1
- package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.js.map +1 -1
- package/dist/features/indent/client/index.d.ts +1 -4
- package/dist/features/indent/client/index.d.ts.map +1 -1
- package/dist/features/indent/client/index.js +2 -1
- package/dist/features/indent/client/index.js.map +1 -1
- package/dist/features/link/client/index.d.ts +1 -13
- package/dist/features/link/client/index.d.ts.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/autoLink/index.d.ts +1 -1
- package/dist/features/link/client/plugins/autoLink/index.d.ts.map +1 -1
- package/dist/features/link/client/plugins/autoLink/index.js +3 -1
- package/dist/features/link/client/plugins/autoLink/index.js.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +82 -42
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/index.d.ts.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/index.js +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/index.js.map +1 -1
- package/dist/features/link/nodes/AutoLinkNode.js +2 -2
- package/dist/features/link/nodes/AutoLinkNode.js.map +1 -1
- package/dist/features/link/nodes/LinkNode.d.ts.map +1 -1
- package/dist/features/link/nodes/LinkNode.js +12 -7
- package/dist/features/link/nodes/LinkNode.js.map +1 -1
- package/dist/features/link/nodes/types.d.ts +3 -3
- package/dist/features/link/nodes/types.d.ts.map +1 -1
- package/dist/features/link/nodes/types.js.map +1 -1
- package/dist/features/link/server/baseFields.d.ts +1 -1
- package/dist/features/link/server/baseFields.d.ts.map +1 -1
- package/dist/features/link/server/baseFields.js +15 -3
- package/dist/features/link/server/baseFields.js.map +1 -1
- package/dist/features/link/server/i18n.d.ts.map +1 -1
- package/dist/features/link/server/i18n.js +64 -32
- package/dist/features/link/server/i18n.js.map +1 -1
- package/dist/features/link/server/index.d.ts.map +1 -1
- package/dist/features/link/server/index.js +17 -4
- package/dist/features/link/server/index.js.map +1 -1
- package/dist/features/link/server/transformExtraFields.d.ts +1 -1
- package/dist/features/link/server/transformExtraFields.d.ts.map +1 -1
- package/dist/features/link/server/transformExtraFields.js.map +1 -1
- package/dist/features/link/server/validate.d.ts.map +1 -1
- package/dist/features/link/server/validate.js +8 -5
- package/dist/features/link/server/validate.js.map +1 -1
- package/dist/features/lists/checklist/client/index.d.ts +1 -4
- package/dist/features/lists/checklist/client/index.d.ts.map +1 -1
- package/dist/features/lists/htmlConverter.d.ts.map +1 -1
- package/dist/features/lists/htmlConverter.js +8 -0
- package/dist/features/lists/htmlConverter.js.map +1 -1
- package/dist/features/lists/orderedList/client/index.d.ts +1 -4
- package/dist/features/lists/orderedList/client/index.d.ts.map +1 -1
- package/dist/features/lists/shared/markdown.js.map +1 -1
- package/dist/features/lists/unorderedList/client/index.d.ts +1 -4
- package/dist/features/lists/unorderedList/client/index.d.ts.map +1 -1
- package/dist/features/migrations/lexicalPluginToLexical/converter/index.d.ts.map +1 -1
- package/dist/features/migrations/lexicalPluginToLexical/converter/index.js +1 -0
- package/dist/features/migrations/lexicalPluginToLexical/converter/index.js.map +1 -1
- package/dist/features/migrations/lexicalPluginToLexical/feature.client.d.ts +1 -4
- package/dist/features/migrations/lexicalPluginToLexical/feature.client.d.ts.map +1 -1
- package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.d.ts +1 -1
- package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.d.ts.map +1 -1
- package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/converters/blockquote/converter.js.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/converters/heading/converter.js.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/converters/link/converter.js.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/converters/listItem/converter.js.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/converters/orderedList/converter.js.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/converters/unknown/converter.js.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/converter.js.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/index.d.ts.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/index.js +1 -0
- package/dist/features/migrations/slateToLexical/converter/index.js.map +1 -1
- package/dist/features/migrations/slateToLexical/feature.client.d.ts +1 -4
- package/dist/features/migrations/slateToLexical/feature.client.d.ts.map +1 -1
- package/dist/features/migrations/slateToLexical/feature.client.js +1 -3
- package/dist/features/migrations/slateToLexical/feature.client.js.map +1 -1
- package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.d.ts +1 -1
- package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.d.ts.map +1 -1
- package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
- package/dist/features/paragraph/client/index.d.ts +1 -4
- package/dist/features/paragraph/client/index.d.ts.map +1 -1
- package/dist/features/paragraph/server/index.d.ts +1 -1
- package/dist/features/paragraph/server/index.d.ts.map +1 -1
- package/dist/features/relationship/client/components/RelationshipComponent.d.ts.map +1 -1
- package/dist/features/relationship/client/components/RelationshipComponent.js +42 -29
- package/dist/features/relationship/client/components/RelationshipComponent.js.map +1 -1
- package/dist/features/relationship/client/drawer/index.d.ts.map +1 -1
- package/dist/features/relationship/client/drawer/index.js +27 -26
- package/dist/features/relationship/client/drawer/index.js.map +1 -1
- package/dist/features/relationship/client/index.d.ts +2 -17
- package/dist/features/relationship/client/index.d.ts.map +1 -1
- package/dist/features/relationship/client/nodes/RelationshipNode.d.ts +1 -1
- package/dist/features/relationship/client/nodes/RelationshipNode.d.ts.map +1 -1
- package/dist/features/relationship/client/nodes/RelationshipNode.js.map +1 -1
- package/dist/features/relationship/client/plugins/index.js +1 -1
- package/dist/features/relationship/client/plugins/index.js.map +1 -1
- package/dist/features/relationship/client/utils/EnabledRelationshipsCondition.js +1 -1
- package/dist/features/relationship/client/utils/EnabledRelationshipsCondition.js.map +1 -1
- package/dist/features/relationship/server/index.d.ts +1 -1
- package/dist/features/relationship/server/index.d.ts.map +1 -1
- package/dist/features/relationship/server/index.js +50 -40
- package/dist/features/relationship/server/index.js.map +1 -1
- package/dist/features/relationship/server/nodes/RelationshipNode.d.ts +8 -6
- package/dist/features/relationship/server/nodes/RelationshipNode.d.ts.map +1 -1
- package/dist/features/relationship/server/nodes/RelationshipNode.js.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.js +93 -66
- package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/fixed/client/index.d.ts +1 -4
- package/dist/features/toolbars/fixed/client/index.d.ts.map +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.js +43 -46
- package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/inline/client/index.d.ts +1 -4
- package/dist/features/toolbars/inline/client/index.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.js +5 -2
- package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts +5 -4
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +24 -10
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts +4 -5
- package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/index.js +127 -127
- package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
- package/dist/features/toolbars/types.d.ts +23 -11
- package/dist/features/toolbars/types.d.ts.map +1 -1
- package/dist/features/toolbars/types.js.map +1 -1
- package/dist/features/typesClient.d.ts +11 -28
- package/dist/features/typesClient.d.ts.map +1 -1
- package/dist/features/typesClient.js.map +1 -1
- package/dist/features/typesServer.d.ts +17 -26
- package/dist/features/typesServer.d.ts.map +1 -1
- package/dist/features/typesServer.js.map +1 -1
- package/dist/features/upload/client/component/index.d.ts.map +1 -1
- package/dist/features/upload/client/component/index.js +69 -58
- package/dist/features/upload/client/component/index.js.map +1 -1
- package/dist/features/upload/client/drawer/index.d.ts.map +1 -1
- package/dist/features/upload/client/drawer/index.js +34 -32
- package/dist/features/upload/client/drawer/index.js.map +1 -1
- package/dist/features/upload/client/feature.client.d.ts +1 -4
- package/dist/features/upload/client/feature.client.d.ts.map +1 -1
- package/dist/features/upload/client/nodes/UploadNode.d.ts.map +1 -1
- package/dist/features/upload/client/nodes/UploadNode.js +1 -1
- package/dist/features/upload/client/nodes/UploadNode.js.map +1 -1
- package/dist/features/upload/client/plugin/index.js +1 -1
- package/dist/features/upload/client/plugin/index.js.map +1 -1
- package/dist/features/upload/server/feature.server.d.ts.map +1 -1
- package/dist/features/upload/server/feature.server.js +17 -8
- package/dist/features/upload/server/feature.server.js.map +1 -1
- package/dist/features/upload/server/nodes/UploadNode.d.ts +9 -7
- package/dist/features/upload/server/nodes/UploadNode.d.ts.map +1 -1
- package/dist/features/upload/server/nodes/UploadNode.js.map +1 -1
- package/dist/features/upload/server/validate.d.ts.map +1 -1
- package/dist/features/upload/server/validate.js +7 -4
- package/dist/features/upload/server/validate.js.map +1 -1
- package/dist/field/Field.d.ts.map +1 -1
- package/dist/field/Field.js +168 -98
- package/dist/field/Field.js.map +1 -1
- package/dist/field/bundled.css +1 -1
- package/dist/field/index.d.ts.map +1 -1
- package/dist/field/index.js +63 -73
- package/dist/field/index.js.map +1 -1
- package/dist/field/rscEntry.d.ts +9 -0
- package/dist/field/rscEntry.d.ts.map +1 -0
- package/dist/field/rscEntry.js +56 -0
- package/dist/field/rscEntry.js.map +1 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +94 -103
- package/dist/index.js.map +1 -1
- package/dist/lexical/EditorPlugin.d.ts.map +1 -1
- package/dist/lexical/EditorPlugin.js +2 -1
- package/dist/lexical/EditorPlugin.js.map +1 -1
- package/dist/lexical/LexicalEditor.d.ts +1 -1
- package/dist/lexical/LexicalEditor.d.ts.map +1 -1
- package/dist/lexical/LexicalEditor.js +10 -10
- package/dist/lexical/LexicalEditor.js.map +1 -1
- package/dist/lexical/LexicalProvider.d.ts +2 -2
- package/dist/lexical/LexicalProvider.d.ts.map +1 -1
- package/dist/lexical/LexicalProvider.js +18 -25
- package/dist/lexical/LexicalProvider.js.map +1 -1
- package/dist/lexical/config/client/EditorConfigProvider.d.ts +6 -5
- package/dist/lexical/config/client/EditorConfigProvider.d.ts.map +1 -1
- package/dist/lexical/config/client/EditorConfigProvider.js +13 -12
- package/dist/lexical/config/client/EditorConfigProvider.js.map +1 -1
- package/dist/lexical/config/client/loader.d.ts +1 -3
- package/dist/lexical/config/client/loader.d.ts.map +1 -1
- package/dist/lexical/config/client/loader.js +7 -19
- package/dist/lexical/config/client/loader.js.map +1 -1
- package/dist/lexical/config/client/sanitize.d.ts +1 -1
- package/dist/lexical/config/client/sanitize.d.ts.map +1 -1
- package/dist/lexical/config/client/sanitize.js +4 -16
- package/dist/lexical/config/client/sanitize.js.map +1 -1
- package/dist/lexical/config/server/loader.d.ts +2 -1
- package/dist/lexical/config/server/loader.d.ts.map +1 -1
- package/dist/lexical/config/server/loader.js +2 -0
- package/dist/lexical/config/server/loader.js.map +1 -1
- package/dist/lexical/config/server/sanitize.d.ts +1 -1
- package/dist/lexical/config/server/sanitize.d.ts.map +1 -1
- package/dist/lexical/config/server/sanitize.js +12 -11
- package/dist/lexical/config/server/sanitize.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts +6 -6
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +89 -116
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts +2 -2
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +7 -7
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts +3 -2
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/index.d.ts.map +1 -1
- package/dist/lexical/plugins/SlashMenu/index.js +24 -30
- package/dist/lexical/plugins/SlashMenu/index.js.map +1 -1
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js +93 -130
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.js +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.js.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +119 -137
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.js +16 -32
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.js.map +1 -1
- package/dist/lexical/plugins/handles/utils/doesLineHeightAffectElement.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/utils/doesLineHeightAffectElement.js +3 -1
- package/dist/lexical/plugins/handles/utils/doesLineHeightAffectElement.js.map +1 -1
- package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.js +3 -4
- package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.js.map +1 -1
- package/dist/lexical/plugins/handles/utils/setHandlePosition.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/utils/setHandlePosition.js +4 -6
- package/dist/lexical/plugins/handles/utils/setHandlePosition.js.map +1 -1
- package/dist/lexical/theme/EditorTheme.d.ts.map +1 -1
- package/dist/lexical/theme/EditorTheme.js +1 -2
- package/dist/lexical/theme/EditorTheme.js.map +1 -1
- package/dist/lexical/ui/icons/Caret/index.svg +2 -2
- package/dist/lexical/utils/nodeFormat.d.ts +2 -2
- package/dist/lexical/utils/nodeFormat.d.ts.map +1 -1
- package/dist/lexical/utils/nodeFormat.js.map +1 -1
- package/dist/lexical/utils/rect.d.ts +4 -4
- package/dist/lexical/utils/rect.d.ts.map +1 -1
- package/dist/lexical/utils/rect.js.map +1 -1
- package/dist/lexical/utils/setFloatingElemPosition.d.ts +1 -1
- package/dist/lexical/utils/setFloatingElemPosition.d.ts.map +1 -1
- package/dist/lexical/utils/setFloatingElemPosition.js +1 -1
- package/dist/lexical/utils/setFloatingElemPosition.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 +25 -5
- package/dist/lexical/utils/url.js.map +1 -1
- package/dist/populateGraphQL/populate.d.ts +3 -2
- package/dist/populateGraphQL/populate.d.ts.map +1 -1
- package/dist/populateGraphQL/populate.js +3 -1
- package/dist/populateGraphQL/populate.js.map +1 -1
- package/dist/populateGraphQL/populateLexicalPopulationPromises.d.ts +1 -1
- package/dist/populateGraphQL/populateLexicalPopulationPromises.d.ts.map +1 -1
- package/dist/populateGraphQL/populateLexicalPopulationPromises.js +5 -4
- package/dist/populateGraphQL/populateLexicalPopulationPromises.js.map +1 -1
- package/dist/populateGraphQL/recursivelyPopulateFieldsForGraphQL.js.map +1 -1
- package/dist/types.d.ts +22 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utilities/buildInitialState.d.ts +27 -0
- package/dist/utilities/buildInitialState.d.ts.map +1 -0
- package/dist/utilities/buildInitialState.js +53 -0
- package/dist/utilities/buildInitialState.js.map +1 -0
- package/dist/utilities/createClientFeature.d.ts +3 -5
- package/dist/utilities/createClientFeature.d.ts.map +1 -1
- package/dist/utilities/createClientFeature.js +1 -4
- package/dist/utilities/createClientFeature.js.map +1 -1
- package/dist/utilities/createServerFeature.d.ts +1 -0
- package/dist/utilities/createServerFeature.d.ts.map +1 -1
- package/dist/utilities/createServerFeature.js +2 -0
- package/dist/utilities/createServerFeature.js.map +1 -1
- package/dist/utilities/fieldsDrawer/Drawer.d.ts +1 -0
- package/dist/utilities/fieldsDrawer/Drawer.d.ts.map +1 -1
- package/dist/utilities/fieldsDrawer/Drawer.js +68 -27
- package/dist/utilities/fieldsDrawer/Drawer.js.map +1 -1
- package/dist/utilities/fieldsDrawer/DrawerContent.d.ts.map +1 -1
- package/dist/utilities/fieldsDrawer/DrawerContent.js +102 -138
- package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
- package/dist/utilities/fieldsDrawer/useLexicalDocumentDrawer.d.ts +13 -0
- package/dist/utilities/fieldsDrawer/useLexicalDocumentDrawer.d.ts.map +1 -0
- package/dist/utilities/fieldsDrawer/useLexicalDocumentDrawer.js +129 -0
- package/dist/utilities/fieldsDrawer/useLexicalDocumentDrawer.js.map +1 -0
- package/dist/utilities/fieldsDrawer/useLexicalDrawer.d.ts +10 -0
- package/dist/utilities/fieldsDrawer/useLexicalDrawer.d.ts.map +1 -0
- package/dist/utilities/fieldsDrawer/useLexicalDrawer.js +136 -0
- package/dist/utilities/fieldsDrawer/useLexicalDrawer.js.map +1 -0
- package/dist/utilities/fieldsDrawer/useLexicalListDrawer.d.ts +16 -0
- package/dist/utilities/fieldsDrawer/useLexicalListDrawer.d.ts.map +1 -0
- package/dist/utilities/fieldsDrawer/useLexicalListDrawer.js +144 -0
- package/dist/utilities/fieldsDrawer/useLexicalListDrawer.js.map +1 -0
- package/dist/utilities/generateImportMap.d.ts.map +1 -1
- package/dist/utilities/generateImportMap.js +2 -3
- package/dist/utilities/generateImportMap.js.map +1 -1
- package/dist/utilities/generateSchemaMap.d.ts.map +1 -1
- package/dist/utilities/generateSchemaMap.js +13 -10
- package/dist/utilities/generateSchemaMap.js.map +1 -1
- package/dist/utilities/initLexicalFeatures.d.ts +18 -0
- package/dist/utilities/initLexicalFeatures.d.ts.map +1 -0
- package/dist/utilities/initLexicalFeatures.js +95 -0
- package/dist/utilities/initLexicalFeatures.js.map +1 -0
- package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.d.ts +1 -1
- package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.d.ts.map +1 -1
- package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.js +1 -1
- package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.js.map +1 -1
- package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.d.ts +1 -1
- package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.d.ts.map +1 -1
- package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.js +5 -1
- package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.js.map +1 -1
- package/dist/utilities/useLexicalFeature.d.ts.map +1 -1
- package/dist/utilities/useLexicalFeature.js +12 -4
- package/dist/utilities/useLexicalFeature.js.map +1 -1
- package/dist/validate/index.d.ts.map +1 -1
- package/dist/validate/index.js +2 -2
- package/dist/validate/index.js.map +1 -1
- package/dist/validate/validateNodes.d.ts +2 -2
- package/dist/validate/validateNodes.d.ts.map +1 -1
- package/dist/validate/validateNodes.js +4 -4
- package/dist/validate/validateNodes.js.map +1 -1
- package/package.json +58 -49
- package/dist/cell/index.d.ts +0 -9
- package/dist/cell/index.d.ts.map +0 -1
- package/dist/cell/index.js +0 -135
- package/dist/cell/index.js.map +0 -1
- package/dist/exports/client/Field-63NGLPJB.js +0 -2
- package/dist/exports/client/Field-63NGLPJB.js.map +0 -7
- package/dist/exports/client/RelationshipComponent-3QWBV4GT.js +0 -2
- package/dist/exports/client/RelationshipComponent-3QWBV4GT.js.map +0 -7
- package/dist/exports/client/chunk-G5DTIOPI.js +0 -2
- package/dist/exports/client/chunk-G5DTIOPI.js.map +0 -7
- package/dist/exports/client/chunk-NI6Z4GBD.js +0 -2
- package/dist/exports/client/chunk-NI6Z4GBD.js.map +0 -7
- package/dist/exports/client/chunk-OKMIHD2R.js +0 -2
- package/dist/exports/client/chunk-OKMIHD2R.js.map +0 -7
- package/dist/exports/client/chunk-TO2W7Q2G.js +0 -2
- package/dist/exports/client/chunk-TO2W7Q2G.js.map +0 -7
- package/dist/exports/client/component-3OFD6Q4Z.js +0 -2
- package/dist/exports/client/component-3OFD6Q4Z.js.map +0 -7
- package/dist/exports/client/component-LCAAX56T.js +0 -2
- package/dist/exports/client/component-LCAAX56T.js.map +0 -7
- package/dist/exports/client/component-LLWMZU6K.js +0 -2
- package/dist/exports/client/component-LLWMZU6K.js.map +0 -7
- package/dist/exports/client/componentInline-72VZAAHP.js +0 -2
- package/dist/exports/client/componentInline-72VZAAHP.js.map +0 -7
- package/dist/features/blocks/client/component/FormSavePlugin.d.ts +0 -11
- package/dist/features/blocks/client/component/FormSavePlugin.d.ts.map +0 -1
- package/dist/features/blocks/client/component/FormSavePlugin.js +0 -53
- package/dist/features/blocks/client/component/FormSavePlugin.js.map +0 -1
- package/dist/features/createClientComponent.d.ts +0 -7
- package/dist/features/createClientComponent.d.ts.map +0 -1
- package/dist/features/createClientComponent.js +0 -13
- package/dist/features/createClientComponent.js.map +0 -1
- package/dist/features/createFeaturePropComponent.d.ts +0 -6
- package/dist/features/createFeaturePropComponent.d.ts.map +0 -1
- package/dist/features/createFeaturePropComponent.js +0 -19
- package/dist/features/createFeaturePropComponent.js.map +0 -1
- package/dist/utilities/generateComponentMap.d.ts +0 -6
- package/dist/utilities/generateComponentMap.d.ts.map +0 -1
- package/dist/utilities/generateComponentMap.js +0 -99
- package/dist/utilities/generateComponentMap.js.map +0 -1
package/LICENSE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2018-
|
|
3
|
+
Copyright (c) 2018-2024 Payload CMS, Inc. <info@payloadcms.com>
|
|
4
4
|
Portions Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
5
5
|
|
|
6
6
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Payload } from 'payload';
|
|
2
|
+
import { type I18nClient } from '@payloadcms/translations';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import type { SanitizedServerEditorConfig } from '../lexical/config/types.js';
|
|
5
|
+
import type { LexicalFieldAdminProps, LexicalRichTextCellProps } from '../types.js';
|
|
6
|
+
export declare const RscEntryLexicalCell: React.FC<{
|
|
7
|
+
admin: LexicalFieldAdminProps;
|
|
8
|
+
i18n: I18nClient;
|
|
9
|
+
payload: Payload;
|
|
10
|
+
sanitizedEditorConfig: SanitizedServerEditorConfig;
|
|
11
|
+
} & LexicalRichTextCellProps>;
|
|
12
|
+
//# sourceMappingURL=rscEntry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rscEntry.d.ts","sourceRoot":"","sources":["../../src/cell/rscEntry.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAG1E,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAyBnF,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CACxC;IACE,KAAK,EAAE,sBAAsB,CAAA;IAC7B,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,qBAAqB,EAAE,2BAA2B,CAAA;CACnD,GAAG,wBAAwB,CA4E7B,CAAA"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { getTranslation } from '@payloadcms/translations';
|
|
3
|
+
import { formatAdminURL } from '@payloadcms/ui/shared';
|
|
4
|
+
import LinkImport from 'next/link.js';
|
|
5
|
+
import React from 'react';
|
|
6
|
+
const Link = LinkImport.default || LinkImport;
|
|
7
|
+
function recurseEditorState(editorState, textContent, i = 0) {
|
|
8
|
+
for (const node of editorState) {
|
|
9
|
+
i++;
|
|
10
|
+
if ('text' in node && node.text) {
|
|
11
|
+
textContent.push(node.text);
|
|
12
|
+
} else {
|
|
13
|
+
if (!('children' in node)) {
|
|
14
|
+
textContent.push(/*#__PURE__*/_jsxs("code", {
|
|
15
|
+
children: [" [", node.type, "]"]
|
|
16
|
+
}, i));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
if ('children' in node && node.children) {
|
|
20
|
+
textContent = recurseEditorState(node.children, textContent, i);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return textContent;
|
|
24
|
+
}
|
|
25
|
+
export const RscEntryLexicalCell = props => {
|
|
26
|
+
const {
|
|
27
|
+
cellData,
|
|
28
|
+
className: classNameFromProps,
|
|
29
|
+
collectionConfig,
|
|
30
|
+
field: {
|
|
31
|
+
admin
|
|
32
|
+
},
|
|
33
|
+
field,
|
|
34
|
+
i18n,
|
|
35
|
+
link,
|
|
36
|
+
onClick: onClickFromProps,
|
|
37
|
+
payload,
|
|
38
|
+
rowData,
|
|
39
|
+
sanitizedEditorConfig
|
|
40
|
+
} = props;
|
|
41
|
+
const classNameFromConfigContext = admin && 'className' in admin ? admin.className : undefined;
|
|
42
|
+
const className = classNameFromProps || (field.admin && 'className' in field.admin ? field.admin.className : null) || classNameFromConfigContext;
|
|
43
|
+
const adminRoute = payload.config.routes.admin;
|
|
44
|
+
const onClick = onClickFromProps;
|
|
45
|
+
let WrapElement = 'span';
|
|
46
|
+
const wrapElementProps = {
|
|
47
|
+
className
|
|
48
|
+
};
|
|
49
|
+
if (link) {
|
|
50
|
+
wrapElementProps.prefetch = false;
|
|
51
|
+
WrapElement = Link;
|
|
52
|
+
wrapElementProps.href = collectionConfig?.slug ? formatAdminURL({
|
|
53
|
+
adminRoute,
|
|
54
|
+
path: `/collections/${collectionConfig?.slug}/${rowData.id}`
|
|
55
|
+
}) : '';
|
|
56
|
+
}
|
|
57
|
+
if (typeof onClick === 'function') {
|
|
58
|
+
WrapElement = 'button';
|
|
59
|
+
wrapElementProps.type = 'button';
|
|
60
|
+
wrapElementProps.onClick = () => {
|
|
61
|
+
onClick({
|
|
62
|
+
cellData,
|
|
63
|
+
collectionSlug: collectionConfig?.slug,
|
|
64
|
+
rowData
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
let textContent = [];
|
|
69
|
+
if (cellData?.root?.children) {
|
|
70
|
+
textContent = recurseEditorState(cellData?.root?.children, textContent);
|
|
71
|
+
}
|
|
72
|
+
if (!textContent?.length) {
|
|
73
|
+
textContent = [i18n.t('general:noLabel', {
|
|
74
|
+
label: getTranslation(('label' in field ? field.label : null) || 'data', i18n)
|
|
75
|
+
})];
|
|
76
|
+
}
|
|
77
|
+
return /*#__PURE__*/_jsx(WrapElement, {
|
|
78
|
+
...wrapElementProps,
|
|
79
|
+
children: textContent
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=rscEntry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rscEntry.js","names":["getTranslation","formatAdminURL","LinkImport","React","Link","default","recurseEditorState","editorState","textContent","i","node","text","push","_jsxs","type","children","RscEntryLexicalCell","props","cellData","className","classNameFromProps","collectionConfig","field","admin","i18n","link","onClick","onClickFromProps","payload","rowData","sanitizedEditorConfig","classNameFromConfigContext","undefined","adminRoute","config","routes","WrapElement","wrapElementProps","prefetch","href","slug","path","id","collectionSlug","root","length","t","label","_jsx"],"sources":["../../src/cell/rscEntry.tsx"],"sourcesContent":["import type { SerializedLexicalNode } from 'lexical'\nimport type { Payload } from 'payload'\n\nimport { getTranslation, type I18nClient } from '@payloadcms/translations'\nimport { formatAdminURL } from '@payloadcms/ui/shared'\nimport LinkImport from 'next/link.js'\nimport React from 'react'\n\nimport type { SanitizedServerEditorConfig } from '../lexical/config/types.js'\nimport type { LexicalFieldAdminProps, LexicalRichTextCellProps } from '../types.js'\n\nconst Link = (LinkImport.default || LinkImport) as unknown as typeof LinkImport.default\n\nfunction recurseEditorState(\n editorState: SerializedLexicalNode[],\n textContent: React.ReactNode[],\n i: number = 0,\n): React.ReactNode[] {\n for (const node of editorState) {\n i++\n if ('text' in node && node.text) {\n textContent.push(node.text as string)\n } else {\n if (!('children' in node)) {\n textContent.push(<code key={i}> [{node.type}]</code>)\n }\n }\n if ('children' in node && node.children) {\n textContent = recurseEditorState(node.children as SerializedLexicalNode[], textContent, i)\n }\n }\n return textContent\n}\n\nexport const RscEntryLexicalCell: React.FC<\n {\n admin: LexicalFieldAdminProps\n i18n: I18nClient\n payload: Payload\n sanitizedEditorConfig: SanitizedServerEditorConfig\n } & LexicalRichTextCellProps\n> = (props) => {\n const {\n cellData,\n className: classNameFromProps,\n collectionConfig,\n field: { admin },\n field,\n i18n,\n link,\n onClick: onClickFromProps,\n payload,\n rowData,\n sanitizedEditorConfig,\n } = props\n\n const classNameFromConfigContext = admin && 'className' in admin ? admin.className : undefined\n\n const className =\n classNameFromProps ||\n (field.admin && 'className' in field.admin ? field.admin.className : null) ||\n classNameFromConfigContext\n const adminRoute = payload.config.routes.admin\n\n const onClick = onClickFromProps\n\n let WrapElement: React.ComponentType<any> | string = 'span'\n\n const wrapElementProps: {\n className?: string\n href?: string\n onClick?: () => void\n prefetch?: false\n type?: 'button'\n } = {\n className,\n }\n\n if (link) {\n wrapElementProps.prefetch = false\n WrapElement = Link\n wrapElementProps.href = collectionConfig?.slug\n ? formatAdminURL({\n adminRoute,\n path: `/collections/${collectionConfig?.slug}/${rowData.id}`,\n })\n : ''\n }\n\n if (typeof onClick === 'function') {\n WrapElement = 'button'\n wrapElementProps.type = 'button'\n wrapElementProps.onClick = () => {\n onClick({\n cellData,\n collectionSlug: collectionConfig?.slug,\n rowData,\n })\n }\n }\n\n let textContent: React.ReactNode[] = []\n\n if (cellData?.root?.children) {\n textContent = recurseEditorState(cellData?.root?.children, textContent)\n }\n\n if (!textContent?.length) {\n textContent = [\n i18n.t('general:noLabel', {\n label: getTranslation(('label' in field ? field.label : null) || 'data', i18n),\n }),\n ]\n }\n\n return <WrapElement {...wrapElementProps}>{textContent}</WrapElement>\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";import{b as z,c as D,e as Pe,f as we,g as Re,h as ke,i as Te}from"./chunk-OOBB5GCO.js";import{a as Ne,b as T}from"./chunk-CUIBIFW2.js";import{c as oo}from"react/compiler-runtime";import{jsx as pe,jsxs as fe}from"react/jsx-runtime";import{FieldLabel as no,useEditDepth as ro,useField as io,withCondition as so}from"@payloadcms/ui";import"react";import{ErrorBoundary as lo}from"react-error-boundary";import{jsx as F}from"react/jsx-runtime";import{LexicalComposer as eo}from"@lexical/react/LexicalComposer.js";import*as nt from"react";import{useMemo as to}from"react";import{c as Ht}from"react/compiler-runtime";import{jsx as R,jsxs as X}from"react/jsx-runtime";import{useLexicalComposerContext as jt}from"@lexical/react/LexicalComposerContext.js";import{LexicalErrorBoundary as zt}from"@lexical/react/LexicalErrorBoundary.js";import{HistoryPlugin as Kt}from"@lexical/react/LexicalHistoryPlugin.js";import{OnChangePlugin as Gt}from"@lexical/react/LexicalOnChangePlugin.js";import{RichTextPlugin as Wt}from"@lexical/react/LexicalRichTextPlugin.js";import{TabIndentationPlugin as Yt}from"@lexical/react/LexicalTabIndentationPlugin.js";import{BLUR_COMMAND as Ut,COMMAND_PRIORITY_LOW as Ze,FOCUS_COMMAND as Vt}from"lexical";import*as U from"react";import{useEffect as et,useState as tt}from"react";import{jsx as Se}from"react/jsx-runtime";import"react";var _=({anchorElem:t,clientProps:e,plugin:o})=>o.position==="floatingAnchorElem"&&t?o.Component&&Se(o.Component,{anchorElem:t,clientProps:e}):o.Component&&Se(o.Component,{clientProps:e});import{jsx as be}from"react/jsx-runtime";import{useLexicalComposerContext as ut}from"@lexical/react/LexicalComposerContext.js";import{$createParagraphNode as ft}from"lexical";import*as Be from"react";import{useCallback as pt,useEffect as Me,useRef as gt,useState as ht}from"react";import{createPortal as yt}from"react-dom";var K=(t,e,o,s,i=50,f=25)=>{let l=0;if(t&&!t.contains(s)){let{bottom:m,left:d,right:h,top:p}=t.getBoundingClientRect(),a=p+window.scrollY,n=m+window.scrollY;if(o<a-f||o>n+f||e<d-i||e>h+i)return-1;(e<d||e>h)&&(l=e<d?e-d:e-h)}return l};import{$getNodeByKey as se}from"lexical";function G(t){let e=t.getBoundingClientRect(),o=getComputedStyle(t).getPropertyValue("transform");if(!o||o==="none")return e;let s=o.split(",").pop();return e.y=e.y-Number(s?.replace(")","")),e}function ie(t){let e=(d,h)=>d?parseFloat(window.getComputedStyle(d)[h]):0,{marginBottom:o,marginTop:s}=window.getComputedStyle(t),i=e(t.previousElementSibling,"marginBottom"),f=e(t.nextElementSibling,"marginTop"),l=Math.max(parseFloat(s),i);return{marginBottom:Math.max(parseFloat(o),f),marginTop:l}}import{$getRoot as lt}from"lexical";function $(t){return t.getEditorState().read(()=>lt().getChildrenKeys())}var at=1,ct=-1,ve=0,B={props:null,result:null};function mt(t,e,o=20){let s=t.x-e.x,i=t.y-e.y;return s*s+i*i<=o*o}function W(t){let{anchorElem:e,cache_threshold:o=20,editor:s,fuzzy:i=!1,horizontalOffset:f=0,point:{x:l,y:m},startIndex:d=0,useEdgeAsDefault:h=!1}=t;if(o>0&&B.props&&B.result&&B.props.fuzzy===t.fuzzy&&B.props.horizontalOffset===t.horizontalOffset&&B.props.useEdgeAsDefault===t.useEdgeAsDefault&&mt(B.props.point,t.point,o))return B.result;let p=e.getBoundingClientRect(),a=$(s),n={blockElem:null,blockNode:null,distance:1/0,foundAtIndex:-1,isFoundNodeEmptyParagraph:!1};return s.getEditorState().read(()=>{if(h){let[y,c]=[s.getElementByKey(a[0]),s.getElementByKey(a[a.length-1])];if(y&&c){let[g,r]=[G(y),G(c)];if(m<g.top?(n.blockElem=y,n.distance=g.top-m,n.blockNode=se(a[0]),n.foundAtIndex=0):m>r.bottom&&(n.distance=m-r.bottom,n.blockNode=se(a[a.length-1]),n.blockElem=c,n.foundAtIndex=a.length-1),n?.blockElem)return{blockElem:null,isFoundNodeEmptyParagraph:!1}}}let u=d,x=ve;for(;u>=0&&u<a.length;){let y=a[u],c=s.getElementByKey(y);if(c===null)break;let g=new D(l+f,m),r=ke.fromDOMRect(G(c)),{marginBottom:E,marginTop:b}=ie(c),P=r.generateNewRect({bottom:r.bottom+E,left:p.left,right:p.right,top:r.top-b}),{distance:C,isOnBottomSide:k,isOnTopSide:w}=P.distanceFromPoint(g);if(C===0){n.blockElem=c,n.blockNode=se(y),n.foundAtIndex=u,n.distance=C,n.blockNode&&n.blockNode.getType()==="paragraph"&&n.blockNode.getTextContent()===""&&(!i&&!t.returnEmptyParagraphs&&(n.blockElem=null,n.blockNode=null),n.isFoundNodeEmptyParagraph=!0);break}else i&&C<n.distance&&(n.blockElem=c,n.blockNode=se(y),n.distance=C,n.foundAtIndex=u);x===ve&&(w?x=ct:k?x=at:x=1/0),u+=x}}),B.props=t,B.result={blockElem:n.blockElem,blockNode:n.blockNode,foundAtIndex:n.foundAtIndex,isFoundNodeEmptyParagraph:n.isFoundNodeEmptyParagraph},{blockElem:n.blockElem,blockNode:n.blockNode,foundAtIndex:n.foundAtIndex,isFoundNodeEmptyParagraph:n.isFoundNodeEmptyParagraph}}function le(t,e){return!!t.closest(`.${e}`)}var dt=["IMG","INPUT","TEXTAREA","SELECT","BUTTON","VIDEO","OBJECT","EMBED","IFRAME","HR"];function Ie(t){if(!t||dt.includes(t.tagName)||t.offsetHeight===0||t.offsetWidth===0)return!1;let e=window.getComputedStyle(t);return!(e.display==="table-cell"||e.position==="absolute"||e.visibility==="hidden"||e.opacity==="0")}function ae(t,e,o,s=0){if(!t){e.style.opacity="0",e.style.transform="translate(-10000px, -10000px)";return}let i=t.getBoundingClientRect(),f=window.getComputedStyle(t),l=e.getBoundingClientRect(),m=o.getBoundingClientRect(),d;if(["lexical-block","lexical-upload","lexical-relationship"].some(a=>t.firstElementChild?.classList.contains(a)))d=i.top+8-m.top;else{let a=Ie(t)?parseInt(f.lineHeight,10):0;d=i.top+(a-l.height)/2-m.top}let p=s;e.style.opacity="1",e.style.transform=`translate(${p}px, ${d}px)`}var xt="add-block-menu",ce=1/0;function Et(t){return t===0?1/0:ce>=0&&ce<t?ce:Math.floor(t/2)}function bt(t,e,o){let s=e.parentElement,{editorConfig:i}=T(),f=i?.admin?.hideGutter?-24:12,l=gt(null),[m,d]=ht(null);Me(()=>{function p(a){let n=a.target;if(!z(n))return;let u=K(s,a.pageX,a.pageY,n);if(u===-1){d(null);return}if(le(n,xt))return;let x=$(t),{blockElem:y,blockNode:c,foundAtIndex:g}=W({anchorElem:e,cache_threshold:0,editor:t,horizontalOffset:-u,point:new D(a.x,a.y),returnEmptyParagraphs:!0,startIndex:Et(x.length),useEdgeAsDefault:!1});ce=g,y&&c&&(m?.node!==c||m?.elem!==y)&&d({elem:y,node:c})}return document?.addEventListener("mousemove",p),()=>{document?.removeEventListener("mousemove",p)}},[s,e,t,m]),Me(()=>{l.current&&m?.node&&ae(m?.elem,l.current,e,f)},[e,m,f]);let h=pt(p=>{let a=m;a?.node&&(t.update(()=>{let n=!0;if((a?.node.getType()!=="paragraph"||a.node.getTextContent()!=="")&&(n=!1),!n){let u=ft();a?.node.insertAfter(u),setTimeout(()=>{a={elem:t.getElementByKey(u.getKey()),node:u},d(a)},0)}}),setTimeout(()=>{t.update(()=>{t.focus(),a?.node&&"select"in a.node&&typeof a.node.select=="function"&&a.node.select()})},1),setTimeout(()=>{t.dispatchCommand(we,{node:a?.node})},2),p.stopPropagation(),p.preventDefault())},[t,m]);return yt(be(Be.Fragment,{children:be("button",{className:"icon add-block-menu",onClick:p=>{h(p)},ref:l,type:"button",children:be("div",{className:o?"icon":""})})}),e)}function Le(t){let{anchorElem:e}=t,o=e===void 0?document.body:e,[s]=ut();return bt(s,o,s._editable)}import{jsx as me,jsxs as Nt}from"react/jsx-runtime";import{useLexicalComposerContext as Pt}from"@lexical/react/LexicalComposerContext.js";import{eventFiles as Fe}from"@lexical/rich-text";import{$getNearestNodeFromDOMNode as Oe,$getNodeByKey as wt}from"lexical";import*as ze from"react";import{useEffect as Ce,useRef as de,useState as _e}from"react";import{createPortal as Rt}from"react-dom";var Ae=0,Ct=-24;var H=0;function De(t,e,o,s,i,f,l,m,d,h=!1){let{height:p,top:a}=s.getBoundingClientRect(),{top:n,width:u}=l.getBoundingClientRect(),{marginBottom:x,marginTop:y}=ie(s),c=a,g=f>=a+p/2+window.scrollY,r=!1;if(i?.elem)if(s!==i?.elem)(g&&i?.elem&&i?.elem===s.nextElementSibling||!g&&i?.elem&&i?.elem===s.previousElementSibling)&&(H++,H<200&&(r=!0));else{H++;let C=i?.boundingBox?.y,k=s.getBoundingClientRect().y;(g===i?.isBelow&&C===k||H<200)&&(r=!1)}if(r)return{isBelow:g,willStayInSamePosition:r};h?c+=p/2:g?c+=p+x/2:c-=y/2;let E=0;h||(g?E=-Ae:E=Ae);let b=c-n+E,P=Ct-e;return o.style.width=`calc(${u}px - ${t})`,o.style.opacity=".8",o.style.transform=`translate(${P}px, calc(${b}px - 2px))`,i?.elem&&(i.elem.style.opacity="",i?.elem===s?g?i.elem.style.marginTop="":i.elem.style.marginBottom="":(i.elem.style.marginBottom="",i.elem.style.marginTop="")),H=0,{isBelow:g,willStayInSamePosition:r}}var kt="draggable-block-menu",$e="application/x-lexical-drag-block",Q=1/0;function He(t){return t===0?1/0:Q>=0&&Q<t?Q:Math.floor(t/2)}function Tt(t,e){let{transform:o}=e.style;t.setDragImage(e,0,0),setTimeout(()=>{e.style.transform=o})}function je(t,e){t&&(t.style.opacity="0"),e&&(e.style.opacity="",e.style.marginBottom="",e.style.marginTop="")}function St(t,e,o){let s=e.parentElement,i=de(null),f=de(null),l=de(null),m=de(!1),[d,h]=_e(null),[p,a]=_e(null),{editorConfig:n}=T(),u=n?.admin?.hideGutter?-44:-8;Ce(()=>{function c(g){let r=g.target;if(!z(r))return;let E=K(s,g.pageX,g.pageY,r);if(E===-1){h(null);return}if(le(r,kt))return;let b=$(t),{blockElem:P,foundAtIndex:C,isFoundNodeEmptyParagraph:k}=W({anchorElem:e,cache_threshold:0,editor:t,horizontalOffset:-E,point:new D(g.x,g.y),startIndex:He(b.length),useEdgeAsDefault:!1,verbose:!1});Q=C,!(!P&&!k)&&d!==P&&h(P)}return document?.addEventListener("mousemove",c),()=>{document?.removeEventListener("mousemove",c)}},[s,e,t,d]),Ce(()=>{i.current&&ae(d,i.current,e,u)},[e,d,u]),Ce(()=>{function c(r){if(!m.current)return!1;let[E]=Fe(r);if(E)return!1;let{pageY:b,target:P}=r;if(!z(P))return!1;let C=K(s,r.pageX,r.pageY,P,100,50),k=$(t),{blockElem:w,foundAtIndex:V,isFoundNodeEmptyParagraph:I}=W({anchorElem:e,editor:t,fuzzy:!0,horizontalOffset:-C,point:new D(r.x,r.y),startIndex:He(k.length),useEdgeAsDefault:!0,verbose:!0});Q=V;let M=f.current;if(w===null||M===null)return!1;if(d!==w){let{isBelow:v,willStayInSamePosition:O}=De(n?.admin?.hideGutter?"0px":"3rem",u+(n?.admin?.hideGutter?i?.current?.getBoundingClientRect()?.width??0:-(i?.current?.getBoundingClientRect()?.width??0)),M,w,p,b,e,r,l,I);r.preventDefault(),O||a({boundingBox:w.getBoundingClientRect(),elem:w,isBelow:v})}else p?.elem&&(je(M,p.elem),a({boundingBox:w.getBoundingClientRect(),elem:w,isBelow:!1}));return!0}function g(r){if(!m.current)return!1;let[E]=Fe(r);if(E)return!1;let{dataTransfer:b,pageY:P,target:C}=r,k=b?.getData($e)||"";return t.update(()=>{let w=wt(k);if(!w||!z(C))return!1;let V=K(s,r.pageX,r.pageY,C,100,50),{blockElem:I,isFoundNodeEmptyParagraph:M}=W({anchorElem:e,editor:t,fuzzy:!0,horizontalOffset:-V,point:new D(r.x,r.y),useEdgeAsDefault:!0});if(!I)return!1;let v=Oe(I);if(!v)return!1;if(v===w)return!0;let{height:O,top:j}=G(I),q=P>=j+O/2+window.scrollY;M?(v.insertBefore(w),v.remove()):q?v.insertAfter(w):v.insertBefore(w),d!==null&&h(null),document.querySelectorAll(".lexical-block-highlighter").forEach(S=>{S.remove()});let J=t.getElementByKey(w.getKey());setTimeout(()=>{let S=J?.getBoundingClientRect();if(!S)return;let N=document.createElement("div");N.className="lexical-block-highlighter",N.style.backgroundColor="var(--theme-elevation-1000",N.style.transition="opacity 0.5s ease-in-out",N.style.zIndex="1",N.style.pointerEvents="none",N.style.boxSizing="border-box",N.style.borderRadius="4px",N.style.position="absolute",document.body.appendChild(N),N.style.opacity="0.1",N.style.height=`${S.height+8}px`,N.style.width=`${S.width+8}px`,N.style.top=`${S.top+window.scrollY-4}px`,N.style.left=`${S.left-4}px`,setTimeout(()=>{N.style.opacity="0",setTimeout(()=>{N.remove()},500)},1e3)},120)}),!0}return document.addEventListener("dragover",c),document.addEventListener("drop",g),()=>{document.removeEventListener("dragover",c),document.removeEventListener("drop",g)}},[s,u,e,t,p,d,n?.admin?.hideGutter]);function x(c){let g=c.dataTransfer;if(!g||!d)return;Tt(g,d);let r="";t.update(()=>{let E=Oe(d);E&&(r=E.getKey())}),m.current=!0,g.setData($e,r)}function y(){m.current=!1,p?.elem&&je(f.current,p?.elem)}return Rt(Nt(ze.Fragment,{children:[me("div",{className:"icon draggable-block-menu",draggable:!0,onDragEnd:y,onDragStart:x,ref:i,children:me("div",{className:o?"icon":""})}),me("div",{className:"draggable-block-target-line",ref:f}),me("div",{className:"debug-highlight",ref:l})]}),e)}function Ke(t){let{anchorElem:e}=t,o=e===void 0?document.body:e,[s]=Pt();return St(s,o,s._editable)}import{c as vt}from"react/compiler-runtime";import{jsx as It}from"react/jsx-runtime";import{MarkdownShortcutPlugin as Mt}from"@lexical/react/LexicalMarkdownShortcutPlugin.js";import"react";var Ge=()=>{let t=vt(2),{editorConfig:e}=T(),o;return t[0]!==e.features.markdownTransformers?(o=It(Mt,{transformers:e.features.markdownTransformers}),t[0]=e.features.markdownTransformers,t[1]=o):o=t[1],o};import{jsx as Y,jsxs as Ue}from"react/jsx-runtime";import{useLexicalComposerContext as Lt}from"@lexical/react/LexicalComposerContext.js";import{useTranslation as Ve}from"@payloadcms/ui";import{useCallback as Ye,useMemo as At,useState as Dt}from"react";import"react";import*as qe from"react-dom";import{c as Bt}from"react/compiler-runtime";import"react";function We(t,e){let o=Bt(4),{maxLength:s,minLength:i}=e,f=s===void 0?75:s,l=i===void 0?1:i,m;return o[0]!==t||o[1]!==f||o[2]!==l?(m=d=>{let{query:h}=d,p="[^"+t+Pe+"\\s]",n=new RegExp("(^|\\s|\\()(["+t+"]((?:"+p+"){0,"+f+"}))$").exec(h);if(n!==null){let u=n[1],x=n[3];if(x.length>=l)return{leadOffset:n.index+u.length,matchingString:x,replaceableString:n[2]}}return null},o[0]=t,o[1]=f,o[2]=l,o[3]=m):m=o[3],m}var L="slash-menu-popup";function Ft({isSelected:t,item:e,onClick:o,onMouseEnter:s}){let{fieldProps:{featureClientSchemaMap:i,schemaPath:f}}=T(),{i18n:l}=Ve(),m=`${L}__item ${L}__item-${e.key}`;t&&(m+=` ${L}__item--selected`);let d=e.key;return e.label&&(d=typeof e.label=="function"?e.label({featureClientSchemaMap:i,i18n:l,schemaPath:f}):e.label),d.length>25&&(d=d.substring(0,25)+"..."),Ue("button",{"aria-selected":t,className:m,id:L+"__item-"+e.key,onClick:o,onMouseEnter:s,ref:h=>{e.ref={current:h}},role:"option",tabIndex:-1,type:"button",children:[e?.Icon&&Y(e.Icon,{}),Y("span",{className:`${L}__item-text`,children:d})]},e.key)}function Je({anchorElem:t=document.body}){let[e]=Lt(),[o,s]=Dt(null),{editorConfig:i}=T(),{i18n:f}=Ve(),{fieldProps:{featureClientSchemaMap:l,schemaPath:m}}=T(),d=We("/",{minLength:0}),h=Ye(()=>{let n=[];for(let u of i.features.slashMenu.dynamicGroups)if(o){let x=u({editor:e,queryString:o});n=n.concat(x)}return n},[e,o,i?.features]),p=At(()=>{let n=[];for(let u of i?.features.slashMenu.groups??[])n.push(u);if(o){n=n.map(x=>{let y=x.items.filter(c=>{let g=c.key;return c.label&&(g=typeof c.label=="function"?c.label({featureClientSchemaMap:l,i18n:f,schemaPath:m}):c.label),new RegExp(o,"gi").exec(g)?!0:c.keywords!=null?c.keywords.some(r=>new RegExp(o,"gi").exec(r)):!1});return y.length?{...x,items:y}:null}),n=n.filter(x=>x!=null);let u=h();for(let x of u){let y=n.find(c=>c.key===x.key);y?n=n.filter(c=>c.key!==x.key):y={...x,items:[]},y?.items?.length&&(y.items=y.items.concat(y.items)),n.push(y)}}return n},[o,i?.features.slashMenu.groups,h,l,f,m]),a=Ye((n,u,x)=>{u(),n.onSelect({editor:e,queryString:x})},[e]);return Y(Re,{anchorElem:t,groups:p,menuRenderFn:(n,{selectedItemKey:u,selectItemAndCleanUp:x,setSelectedItemKey:y})=>n.current&&p.length?qe.createPortal(Y("div",{className:L,children:p.map(c=>{let g=c.key;return c.label&&l&&(g=typeof c.label=="function"?c.label({featureClientSchemaMap:l,i18n:f,schemaPath:m}):c.label),Ue("div",{className:`${L}__group ${L}__group-${c.key}`,children:[Y("div",{className:`${L}__group-title`,children:g}),c.items.map((r,E)=>Y(Ft,{index:E,isSelected:u===r.key,item:r,onClick:()=>{y(r.key),x(r)},onMouseEnter:()=>{y(r.key)}},r.key))]},c.key)})}),n.current):null,onQueryChange:s,onSelectItem:a,triggerFn:d})}import{c as Ot}from"react/compiler-runtime";import{jsx as Qe}from"react/jsx-runtime";import{ContentEditable as _t}from"@lexical/react/LexicalContentEditable.js";import{useTranslation as $t}from"@payloadcms/ui";import"react";function Xe(t){let e=Ot(3),{className:o}=t,{t:s}=$t(),i;return e[0]!==s||e[1]!==o?(i=Qe(_t,{"aria-placeholder":s("lexical:general:placeholder"),className:o??"ContentEditable__root",placeholder:Qe("p",{className:"editor-placeholder",children:s("lexical:general:placeholder")})}),e[0]=s,e[1]=o,e[2]=i):i=e[2],i}var ot=t=>{let e=Ht(22),{editorConfig:o,editorContainerRef:s,onChange:i}=t,f=T(),[l]=jt(),[m,d]=tt(null),h;e[0]===Symbol.for("react.memo_cache_sentinel")?(h=r=>{r!==null&&d(r)},e[0]=h):h=e[0];let p=h,a,n;e[1]!==f||e[2]!==l?(a=()=>{if(!f?.uuid){console.error("Lexical Editor must be used within an EditorConfigProvider");return}f?.parentEditor?.uuid&&f.parentEditor?.registerChild(f.uuid,f);let r=()=>{f.focusEditor(f)},E=()=>{f.blurEditor(f)},b=l.registerCommand(Vt,()=>(r(),!0),Ze),P=l.registerCommand(Ut,()=>(E(),!0),Ze);return()=>{b(),P(),f.parentEditor?.unregisterChild?.(f.uuid)}},n=[l,f],e[1]=f,e[2]=l,e[3]=a,e[4]=n):(a=e[3],n=e[4]),et(a,n);let[u,x]=tt(!1),y,c;e[5]!==u?(y=()=>{let r=()=>{let E=window.matchMedia("(max-width: 768px)").matches;E!==u&&x(E)};return r(),window.addEventListener("resize",r),()=>{window.removeEventListener("resize",r)}},c=[u],e[5]=u,e[6]=y,e[7]=c):(y=e[6],c=e[7]),et(y,c);let g;if(e[8]!==o.features||e[9]!==i||e[10]!==m||e[11]!==u||e[12]!==l||e[13]!==s){let r;e[15]!==i?(r=(b,P,C)=>{(!C.has("focus")||C.size>1)&&i?.(b,P,C)},e[15]=i,e[16]=r):r=e[16];let E;e[17]!==m||e[18]!==u||e[19]!==l||e[20]!==o?(E=m&&X(U.Fragment,{children:[!u&&l.isEditable()&&X(U.Fragment,{children:[R(Ke,{anchorElem:m}),R(Le,{anchorElem:m})]}),o.features.plugins?.map(b=>{if(b.position==="floatingAnchorElem"&&!(b.desktopOnly===!0&&u))return R(_,{anchorElem:m,clientProps:b.clientProps,plugin:b},b.key)}),l.isEditable()&&R(U.Fragment,{children:R(Je,{anchorElem:m})})]}),e[17]=m,e[18]=u,e[19]=l,e[20]=o,e[21]=E):E=e[21],g=X(U.Fragment,{children:[o.features.plugins?.map(qt),X("div",{className:"editor-container",ref:s,children:[o.features.plugins?.map(Jt),R(Wt,{contentEditable:R("div",{className:"editor-scroller",children:R("div",{className:"editor",ref:p,children:R(Xe,{})})}),ErrorBoundary:zt}),R(Gt,{ignoreSelectionChange:!0,onChange:r}),E,l.isEditable()&&X(U.Fragment,{children:[R(Kt,{}),o?.features?.markdownTransformers?.length>0&&R(Ge,{})]}),R(Yt,{}),o.features.plugins?.map(Qt),o.features.plugins?.map(Xt)]}),o.features.plugins?.map(Zt)]}),e[8]=o.features,e[9]=i,e[10]=m,e[11]=u,e[12]=l,e[13]=s,e[14]=g}else g=e[14];return g};function qt(t){if(t.position==="aboveContainer")return R(_,{clientProps:t.clientProps,plugin:t},t.key)}function Jt(t){if(t.position==="top")return R(_,{clientProps:t.clientProps,plugin:t},t.key)}function Qt(t){if(t.position==="normal")return R(_,{clientProps:t.clientProps,plugin:t},t.key)}function Xt(t){if(t.position==="bottom")return R(_,{clientProps:t.clientProps,plugin:t},t.key)}function Zt(t){if(t.position==="belowContainer")return R(_,{clientProps:t.clientProps,plugin:t},t.key)}var rt=({children:t,providers:e})=>{if(!e?.length)return t;let o=e[0];return e.length>1?F(o,{children:F(rt,{providers:e.slice(1),children:t})}):F(o,{children:t})},it=t=>{let{composerKey:e,editorConfig:o,fieldProps:s,onChange:i,readOnly:f,value:l}=t,m=T(),d=nt.useRef(null),h=to(()=>{if(l&&typeof l!="object")throw new Error("The value passed to the Lexical editor is not an object. This is not supported. Please remove the data from the field and start again. This is the value that was passed in: "+JSON.stringify(l));if(l&&Array.isArray(l)&&!("root"in l))throw new Error("You have tried to pass in data from the old Slate editor to the new Lexical editor. The data structure is different, thus you will have to migrate your data. We offer a one-line migration script which migrates all your rich text fields: https://payloadcms.com/docs/beta/lexical/migration#migration-via-migration-script-recommended");if(l&&"jsonContent"in l)throw new Error("You have tried to pass in data from payload-plugin-lexical. The data structure is different, thus you will have to migrate your data. Migration guide: https://payloadcms.com/docs/beta/lexical/migration#migrating-from-payload-plugin-lexical");return{editable:f!==!0,editorState:l!=null?JSON.stringify(l):void 0,namespace:o.lexical.namespace,nodes:Te({editorConfig:o}),onError:p=>{throw p},theme:o.lexical.theme}},[o]);return h?F(eo,{initialConfig:h,children:F(Ne,{editorConfig:o,editorContainerRef:d,fieldProps:s,parentContext:m,children:F(rt,{providers:o.features.providers,children:F(ot,{editorConfig:o,editorContainerRef:d,onChange:i})})})},e+h.editable):F("p",{children:"Loading..."})};import"./bundled.css";var ue="rich-text-lexical",ao=t=>{let e=oo(42),{editorConfig:o,field:s,path:i,readOnly:f,validate:l}=t,{name:m,admin:d,label:h,localized:p,required:a}=s,n;e[0]!==d?(n=d===void 0?{}:d,e[0]=d,e[1]=n):n=e[1];let{className:u,readOnly:x,style:y,width:c}=n,g=f||x,r=i??m,E=ro(),b;e[2]!==l||e[3]!==a?(b=(A,st)=>{if(typeof l=="function")return l(A,{...st,required:a})},e[2]=l,e[3]=a,e[4]=b):b=e[4];let P=b,C;e[5]!==r||e[6]!==P?(C={path:r,validate:P},e[5]=r,e[6]=P,e[7]=C):C=e[7];let{customComponents:k,formInitializing:w,formProcessing:V,initialValue:I,setValue:M,showError:v,value:O}=io(C),j;e[8]!==k?(j=k===void 0?{}:k,e[8]=k,e[9]=j):j=e[9];let{AfterInput:Z,BeforeInput:q,Description:ee,Error:J,Label:S}=j,N=g||V||w,ge=v&&"error",he=N&&`${ue}--read-only`,ye=o?.admin?.hideGutter!==!0?`${ue}--show-gutter`:null,te;e[10]!==u||e[11]!==ge||e[12]!==he||e[13]!==ye?(te=[ue,"field-type",u,ge,he,ye].filter(Boolean),e[10]=u,e[11]=ge,e[12]=he,e[13]=ye,e[14]=te):te=e[14];let xe=te.join(" "),oe=`${r}.${E}`,ne;e[15]!==M?(ne=A=>{M(A.toJSON())},e[15]=M,e[16]=ne):ne=e[16];let Ee=ne,re;if(e[17]!==y||e[18]!==c||e[19]!==S||e[20]!==h||e[21]!==p||e[22]!==a||e[23]!==oe||e[24]!==o||e[25]!==t||e[26]!==Ee||e[27]!==N||e[28]!==O||e[29]!==I||e[30]!==r||e[31]!==q||e[32]!==Z||e[33]!==ee||e[34]!==J||e[35]!==xe){let A;e[37]!==S||e[38]!==h||e[39]!==p||e[40]!==a?(A=S||pe(no,{label:h,localized:p,required:a}),e[37]=S,e[38]=h,e[39]=p,e[40]=a,e[41]=A):A=e[41],re=fe("div",{className:xe,style:{...y,width:c},children:[J,A,fe("div",{className:`${ue}__wrap`,children:[fe(lo,{fallbackRender:co,onReset:mo,children:[q,pe(it,{composerKey:oe,editorConfig:o,fieldProps:t,onChange:Ee,readOnly:N,value:O},JSON.stringify({initialValue:I,path:r})),Z]}),ee]})]},oe),e[17]=y,e[18]=c,e[19]=S,e[20]=h,e[21]=p,e[22]=a,e[23]=oe,e[24]=o,e[25]=t,e[26]=Ee,e[27]=N,e[28]=O,e[29]=I,e[30]=r,e[31]=q,e[32]=Z,e[33]=ee,e[34]=J,e[35]=xe,e[36]=re}else re=e[36];return re};function co({error:t}){return fe("div",{className:"errorBoundary",role:"alert",children:[pe("p",{children:"Something went wrong:"}),pe("pre",{style:{color:"red"},children:t.message})]})}var Er=so(ao);function mo(){}export{Er as RichText};
|
|
2
|
+
//# sourceMappingURL=Field-S5G27AVI.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/field/Field.tsx", "../../../src/lexical/LexicalProvider.tsx", "../../../src/lexical/LexicalEditor.tsx", "../../../src/lexical/EditorPlugin.tsx", "../../../src/lexical/plugins/handles/AddBlockHandlePlugin/index.tsx", "../../../src/lexical/plugins/handles/utils/calculateDistanceFromScrollerElem.ts", "../../../src/lexical/plugins/handles/utils/getNodeCloseToPoint.ts", "../../../src/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.ts", "../../../src/lexical/plugins/handles/utils/getCollapsedMargins.ts", "../../../src/lexical/plugins/handles/utils/getTopLevelNodeKeys.ts", "../../../src/lexical/plugins/handles/utils/isOnHandleElement.ts", "../../../src/lexical/plugins/handles/utils/doesLineHeightAffectElement.ts", "../../../src/lexical/plugins/handles/utils/setHandlePosition.ts", "../../../src/lexical/plugins/handles/DraggableBlockPlugin/index.tsx", "../../../src/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.ts", "../../../src/lexical/plugins/MarkdownShortcut/index.tsx", "../../../src/lexical/plugins/SlashMenu/index.tsx", "../../../src/lexical/plugins/SlashMenu/useMenuTriggerMatch.ts", "../../../src/lexical/ui/ContentEditable.tsx"],
|
|
4
|
+
"sourcesContent": ["'use client'\nimport type { EditorState, SerializedEditorState } from 'lexical'\n\nimport { FieldLabel, useEditDepth, useField, withCondition } from '@payloadcms/ui'\nimport React, { useCallback } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport type { SanitizedClientEditorConfig } from '../lexical/config/types.js'\nimport type { LexicalRichTextFieldProps } from '../types.js'\n\nimport { LexicalProvider } from '../lexical/LexicalProvider.js'\nimport './bundled.css'\nimport './index.scss'\nimport '../lexical/theme/EditorTheme.scss'\n\nconst baseClass = 'rich-text-lexical'\n\nconst RichTextComponent: React.FC<\n {\n readonly editorConfig: SanitizedClientEditorConfig // With rendered features n stuff\n } & LexicalRichTextFieldProps\n> = (props) => {\n const {\n editorConfig,\n field: {\n name,\n admin: { className, readOnly: readOnlyFromAdmin, style, width } = {},\n label,\n localized,\n required,\n },\n path: pathFromProps,\n readOnly: readOnlyFromTopLevelProps,\n validate, // Users can pass in client side validation if they WANT to, but it's not required anymore\n } = props\n\n const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin\n const path = pathFromProps ?? name\n\n const editDepth = useEditDepth()\n\n const memoizedValidate = useCallback(\n (value, validationOptions) => {\n if (typeof validate === 'function') {\n return validate(value, { ...validationOptions, required })\n }\n },\n // Important: do not add props to the dependencies array.\n // This would cause an infinite loop and endless re-rendering.\n // Removing props from the dependencies array fixed this issue: https://github.com/payloadcms/payload/issues/3709\n [validate, required],\n )\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n formInitializing,\n formProcessing,\n initialValue,\n setValue,\n showError,\n value,\n } = useField<SerializedEditorState>({\n path,\n // @ts-expect-error: TODO: Fix this\n validate: memoizedValidate,\n })\n\n const disabled = readOnlyFromProps || formProcessing || formInitializing\n\n const classes = [\n baseClass,\n 'field-type',\n className,\n showError && 'error',\n disabled && `${baseClass}--read-only`,\n editorConfig?.admin?.hideGutter !== true ? `${baseClass}--show-gutter` : null,\n ]\n .filter(Boolean)\n .join(' ')\n\n const pathWithEditDepth = `${path}.${editDepth}`\n\n const handleChange = useCallback(\n (editorState: EditorState) => {\n setValue(editorState.toJSON())\n },\n [setValue],\n )\n\n return (\n <div\n className={classes}\n key={pathWithEditDepth}\n style={{\n ...style,\n width,\n }}\n >\n {Error}\n {Label || <FieldLabel label={label} localized={localized} required={required} />}\n <div className={`${baseClass}__wrap`}>\n <ErrorBoundary fallbackRender={fallbackRender} onReset={() => {}}>\n {BeforeInput}\n <LexicalProvider\n composerKey={pathWithEditDepth}\n editorConfig={editorConfig}\n fieldProps={props}\n key={JSON.stringify({ initialValue, path })} // makes sure lexical is completely re-rendered when initialValue changes, bypassing the lexical-internal value memoization. That way, external changes to the form will update the editor. More infos in PR description (https://github.com/payloadcms/payload/pull/5010)\n onChange={handleChange}\n readOnly={disabled}\n value={value}\n />\n {AfterInput}\n </ErrorBoundary>\n {Description}\n </div>\n </div>\n )\n}\n\nfunction fallbackRender({ error }): React.ReactElement {\n // Call resetErrorBoundary() to reset the error boundary and retry the render.\n\n return (\n <div className=\"errorBoundary\" role=\"alert\">\n <p>Something went wrong:</p>\n <pre style={{ color: 'red' }}>{error.message}</pre>\n </div>\n )\n}\n\nexport const RichText: typeof RichTextComponent = withCondition(RichTextComponent)\n", "'use client'\nimport type { InitialConfigType } from '@lexical/react/LexicalComposer.js'\nimport type { EditorState, LexicalEditor, SerializedEditorState } from 'lexical'\nimport type { ClientField } from 'payload'\n\nimport { LexicalComposer } from '@lexical/react/LexicalComposer.js'\nimport * as React from 'react'\nimport { useMemo } from 'react'\n\nimport type { LexicalRichTextFieldProps } from '../types.js'\nimport type { SanitizedClientEditorConfig } from './config/types.js'\n\nimport {\n EditorConfigProvider,\n useEditorConfigContext,\n} from './config/client/EditorConfigProvider.js'\nimport { LexicalEditor as LexicalEditorComponent } from './LexicalEditor.js'\nimport { getEnabledNodes } from './nodes/index.js'\n\nexport type LexicalProviderProps = {\n composerKey: string\n editorConfig: SanitizedClientEditorConfig\n fieldProps: LexicalRichTextFieldProps\n onChange: (editorState: EditorState, editor: LexicalEditor, tags: Set<string>) => void\n readOnly: boolean\n value: SerializedEditorState\n}\n\nconst NestProviders = ({ children, providers }) => {\n if (!providers?.length) {\n return children\n }\n const Component = providers[0]\n if (providers.length > 1) {\n return (\n <Component>\n <NestProviders providers={providers.slice(1)}>{children}</NestProviders>\n </Component>\n )\n }\n return <Component>{children}</Component>\n}\n\nexport const LexicalProvider: React.FC<LexicalProviderProps> = (props) => {\n const { composerKey, editorConfig, fieldProps, onChange, readOnly, value } = props\n\n const parentContext = useEditorConfigContext()\n\n const editorContainerRef = React.useRef<HTMLDivElement>(null)\n\n // useMemo for the initialConfig that depends on readOnly and value\n const initialConfig = useMemo<InitialConfigType>(() => {\n if (value && typeof value !== 'object') {\n throw new Error(\n 'The value passed to the Lexical editor is not an object. This is not supported. Please remove the data from the field and start again. This is the value that was passed in: ' +\n JSON.stringify(value),\n )\n }\n\n if (value && Array.isArray(value) && !('root' in value)) {\n throw new Error(\n 'You have tried to pass in data from the old Slate editor to the new Lexical editor. The data structure is different, thus you will have to migrate your data. We offer a one-line migration script which migrates all your rich text fields: https://payloadcms.com/docs/beta/lexical/migration#migration-via-migration-script-recommended',\n )\n }\n\n if (value && 'jsonContent' in value) {\n throw new Error(\n 'You have tried to pass in data from payload-plugin-lexical. The data structure is different, thus you will have to migrate your data. Migration guide: https://payloadcms.com/docs/beta/lexical/migration#migrating-from-payload-plugin-lexical',\n )\n }\n\n return {\n editable: readOnly !== true,\n editorState: value != null ? JSON.stringify(value) : undefined,\n namespace: editorConfig.lexical.namespace,\n nodes: getEnabledNodes({ editorConfig }),\n onError: (error: Error) => {\n throw error\n },\n theme: editorConfig.lexical.theme,\n }\n // Important: do not add readOnly and value to the dependencies array. This will cause the entire lexical editor to re-render if the document is saved, which will\n // cause the editor to lose focus.\n }, [editorConfig])\n\n if (!initialConfig) {\n return <p>Loading...</p>\n }\n\n // We need to add initialConfig.editable to the key to force a re-render when the readOnly prop changes.\n // Without it, there were cases where lexical editors inside drawers turn readOnly initially - a few miliseconds later they turn editable, but the editor does not re-render and stays readOnly.\n return (\n <LexicalComposer initialConfig={initialConfig} key={composerKey + initialConfig.editable}>\n <EditorConfigProvider\n editorConfig={editorConfig}\n editorContainerRef={editorContainerRef}\n fieldProps={fieldProps}\n parentContext={parentContext}\n >\n <NestProviders providers={editorConfig.features.providers}>\n <LexicalEditorComponent\n editorConfig={editorConfig}\n editorContainerRef={editorContainerRef}\n onChange={onChange}\n />\n </NestProviders>\n </EditorConfigProvider>\n </LexicalComposer>\n )\n}\n", "'use client'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { LexicalErrorBoundary } from '@lexical/react/LexicalErrorBoundary.js'\nimport { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin.js'\nimport { OnChangePlugin } from '@lexical/react/LexicalOnChangePlugin.js'\nimport { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin.js'\nimport { TabIndentationPlugin } from '@lexical/react/LexicalTabIndentationPlugin.js'\nimport { BLUR_COMMAND, COMMAND_PRIORITY_LOW, FOCUS_COMMAND } from 'lexical'\nimport * as React from 'react'\nimport { useEffect, useState } from 'react'\n\nimport type { LexicalProviderProps } from './LexicalProvider.js'\n\nimport { useEditorConfigContext } from './config/client/EditorConfigProvider.js'\nimport { EditorPlugin } from './EditorPlugin.js'\nimport './LexicalEditor.scss'\nimport { AddBlockHandlePlugin } from './plugins/handles/AddBlockHandlePlugin/index.js'\nimport { DraggableBlockPlugin } from './plugins/handles/DraggableBlockPlugin/index.js'\nimport { MarkdownShortcutPlugin } from './plugins/MarkdownShortcut/index.js'\nimport { SlashMenuPlugin } from './plugins/SlashMenu/index.js'\nimport { LexicalContentEditable } from './ui/ContentEditable.js'\n\nexport const LexicalEditor: React.FC<\n {\n editorContainerRef: React.RefObject<HTMLDivElement | null>\n } & Pick<LexicalProviderProps, 'editorConfig' | 'onChange'>\n> = (props) => {\n const { editorConfig, editorContainerRef, onChange } = props\n const editorConfigContext = useEditorConfigContext()\n const [editor] = useLexicalComposerContext()\n\n const [floatingAnchorElem, setFloatingAnchorElem] = useState<HTMLDivElement | null>(null)\n const onRef = (_floatingAnchorElem: HTMLDivElement) => {\n if (_floatingAnchorElem !== null) {\n setFloatingAnchorElem(_floatingAnchorElem)\n }\n }\n\n useEffect(() => {\n if (!editorConfigContext?.uuid) {\n console.error('Lexical Editor must be used within an EditorConfigProvider')\n return\n }\n if (editorConfigContext?.parentEditor?.uuid) {\n editorConfigContext.parentEditor?.registerChild(editorConfigContext.uuid, editorConfigContext)\n }\n\n const handleFocus = () => {\n editorConfigContext.focusEditor(editorConfigContext)\n }\n\n const handleBlur = () => {\n editorConfigContext.blurEditor(editorConfigContext)\n }\n\n const unregisterFocus = editor.registerCommand<MouseEvent>(\n FOCUS_COMMAND,\n () => {\n handleFocus()\n return true\n },\n COMMAND_PRIORITY_LOW,\n )\n\n const unregisterBlur = editor.registerCommand<MouseEvent>(\n BLUR_COMMAND,\n () => {\n handleBlur()\n return true\n },\n COMMAND_PRIORITY_LOW,\n )\n\n return () => {\n unregisterFocus()\n unregisterBlur()\n editorConfigContext.parentEditor?.unregisterChild?.(editorConfigContext.uuid)\n }\n }, [editor, editorConfigContext])\n\n const [isSmallWidthViewport, setIsSmallWidthViewport] = useState<boolean>(false)\n\n useEffect(() => {\n const updateViewPortWidth = () => {\n const isNextSmallWidthViewport = window.matchMedia('(max-width: 768px)').matches\n\n if (isNextSmallWidthViewport !== isSmallWidthViewport) {\n setIsSmallWidthViewport(isNextSmallWidthViewport)\n }\n }\n updateViewPortWidth()\n window.addEventListener('resize', updateViewPortWidth)\n\n return () => {\n window.removeEventListener('resize', updateViewPortWidth)\n }\n }, [isSmallWidthViewport])\n\n return (\n <React.Fragment>\n {editorConfig.features.plugins?.map((plugin) => {\n if (plugin.position === 'aboveContainer') {\n return <EditorPlugin clientProps={plugin.clientProps} key={plugin.key} plugin={plugin} />\n }\n })}\n <div className=\"editor-container\" ref={editorContainerRef}>\n {editorConfig.features.plugins?.map((plugin) => {\n if (plugin.position === 'top') {\n return (\n <EditorPlugin clientProps={plugin.clientProps} key={plugin.key} plugin={plugin} />\n )\n }\n })}\n <RichTextPlugin\n contentEditable={\n <div className=\"editor-scroller\">\n <div className=\"editor\" ref={onRef}>\n <LexicalContentEditable />\n </div>\n </div>\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n <OnChangePlugin\n // Selection changes can be ignored here, reducing the\n // frequency that the FieldComponent and Payload receive updates.\n // Selection changes are only needed if you are saving selection state\n ignoreSelectionChange\n onChange={(editorState, editor, tags) => {\n // Ignore any onChange event triggered by focus only\n if (!tags.has('focus') || tags.size > 1) {\n if (onChange != null) {\n onChange(editorState, editor, tags)\n }\n }\n }}\n />\n {floatingAnchorElem && (\n <React.Fragment>\n {!isSmallWidthViewport && editor.isEditable() && (\n <React.Fragment>\n <DraggableBlockPlugin anchorElem={floatingAnchorElem} />\n <AddBlockHandlePlugin anchorElem={floatingAnchorElem} />\n </React.Fragment>\n )}\n {editorConfig.features.plugins?.map((plugin) => {\n if (\n plugin.position === 'floatingAnchorElem' &&\n !(plugin.desktopOnly === true && isSmallWidthViewport)\n ) {\n return (\n <EditorPlugin\n anchorElem={floatingAnchorElem}\n clientProps={plugin.clientProps}\n key={plugin.key}\n plugin={plugin}\n />\n )\n }\n })}\n {editor.isEditable() && (\n <React.Fragment>\n <SlashMenuPlugin anchorElem={floatingAnchorElem} />\n </React.Fragment>\n )}\n </React.Fragment>\n )}\n {editor.isEditable() && (\n <React.Fragment>\n <HistoryPlugin />\n {editorConfig?.features?.markdownTransformers?.length > 0 && <MarkdownShortcutPlugin />}\n </React.Fragment>\n )}\n\n <TabIndentationPlugin />\n {editorConfig.features.plugins?.map((plugin) => {\n if (plugin.position === 'normal') {\n return (\n <EditorPlugin clientProps={plugin.clientProps} key={plugin.key} plugin={plugin} />\n )\n }\n })}\n {editorConfig.features.plugins?.map((plugin) => {\n if (plugin.position === 'bottom') {\n return (\n <EditorPlugin clientProps={plugin.clientProps} key={plugin.key} plugin={plugin} />\n )\n }\n })}\n </div>\n {editorConfig.features.plugins?.map((plugin) => {\n if (plugin.position === 'belowContainer') {\n return <EditorPlugin clientProps={plugin.clientProps} key={plugin.key} plugin={plugin} />\n }\n })}\n </React.Fragment>\n )\n}\n", "'use client'\nimport React from 'react'\n\nimport type { SanitizedPlugin } from '../features/typesClient.js'\n\nexport const EditorPlugin: React.FC<{\n anchorElem?: HTMLDivElement\n clientProps: unknown\n plugin: SanitizedPlugin\n}> = ({ anchorElem, clientProps, plugin }) => {\n if (plugin.position === 'floatingAnchorElem' && anchorElem) {\n return (\n plugin.Component && <plugin.Component anchorElem={anchorElem} clientProps={clientProps} />\n )\n }\n\n // @ts-expect-error - ts is not able to infer that plugin.Component is of type PluginComponent\n return plugin.Component && <plugin.Component clientProps={clientProps} />\n}\n", "'use client'\nimport type { LexicalEditor, LexicalNode, ParagraphNode } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $createParagraphNode } from 'lexical'\nimport * as React from 'react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useEditorConfigContext } from '../../../config/client/EditorConfigProvider.js'\nimport { isHTMLElement } from '../../../utils/guard.js'\nimport { Point } from '../../../utils/point.js'\nimport { ENABLE_SLASH_MENU_COMMAND } from '../../SlashMenu/LexicalTypeaheadMenuPlugin/index.js'\nimport { calculateDistanceFromScrollerElem } from '../utils/calculateDistanceFromScrollerElem.js'\nimport { getNodeCloseToPoint } from '../utils/getNodeCloseToPoint.js'\nimport { getTopLevelNodeKeys } from '../utils/getTopLevelNodeKeys.js'\nimport { isOnHandleElement } from '../utils/isOnHandleElement.js'\nimport { setHandlePosition } from '../utils/setHandlePosition.js'\nimport './index.scss'\n\nconst ADD_BLOCK_MENU_CLASSNAME = 'add-block-menu'\n\nlet prevIndex = Infinity\n\nfunction getCurrentIndex(keysLength: number): number {\n if (keysLength === 0) {\n return Infinity\n }\n if (prevIndex >= 0 && prevIndex < keysLength) {\n return prevIndex\n }\n\n return Math.floor(keysLength / 2)\n}\n\nfunction useAddBlockHandle(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n isEditable: boolean,\n): React.ReactElement {\n const scrollerElem = anchorElem.parentElement\n\n const { editorConfig } = useEditorConfigContext()\n const blockHandleHorizontalOffset = editorConfig?.admin?.hideGutter ? -24 : 12\n\n const menuRef = useRef<HTMLButtonElement>(null)\n const [hoveredElement, setHoveredElement] = useState<{\n elem: HTMLElement\n node: LexicalNode\n } | null>(null)\n\n useEffect(() => {\n function onDocumentMouseMove(event: MouseEvent) {\n const target = event.target\n if (!isHTMLElement(target)) {\n return\n }\n\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n )\n\n if (distanceFromScrollerElem === -1) {\n setHoveredElement(null)\n return\n }\n\n if (isOnHandleElement(target, ADD_BLOCK_MENU_CLASSNAME)) {\n return\n }\n const topLevelNodeKeys = getTopLevelNodeKeys(editor)\n\n const {\n blockElem: _emptyBlockElem,\n blockNode,\n foundAtIndex,\n } = getNodeCloseToPoint({\n anchorElem,\n cache_threshold: 0,\n editor,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n returnEmptyParagraphs: true,\n startIndex: getCurrentIndex(topLevelNodeKeys.length),\n useEdgeAsDefault: false,\n })\n\n prevIndex = foundAtIndex\n\n if (!_emptyBlockElem) {\n return\n }\n if (\n blockNode &&\n (hoveredElement?.node !== blockNode || hoveredElement?.elem !== _emptyBlockElem)\n ) {\n setHoveredElement({\n elem: _emptyBlockElem,\n node: blockNode,\n })\n }\n }\n\n // Since the draggableBlockElem is outside the actual editor, we need to listen to the document\n // to be able to detect when the mouse is outside the editor and respect a buffer around\n // the scrollerElem to avoid the draggableBlockElem disappearing too early.\n document?.addEventListener('mousemove', onDocumentMouseMove)\n\n return () => {\n document?.removeEventListener('mousemove', onDocumentMouseMove)\n }\n }, [scrollerElem, anchorElem, editor, hoveredElement])\n\n useEffect(() => {\n if (menuRef.current && hoveredElement?.node) {\n setHandlePosition(\n hoveredElement?.elem,\n menuRef.current,\n anchorElem,\n blockHandleHorizontalOffset,\n )\n }\n }, [anchorElem, hoveredElement, blockHandleHorizontalOffset])\n\n const handleAddClick = useCallback(\n (event) => {\n let hoveredElementToUse = hoveredElement\n if (!hoveredElementToUse?.node) {\n return\n }\n\n // 1. Update hoveredElement.node to a new paragraph node if the hoveredElement.node is not a paragraph node\n editor.update(() => {\n // Check if blockNode is an empty text node\n let isEmptyParagraph = true\n if (\n hoveredElementToUse?.node.getType() !== 'paragraph' ||\n hoveredElementToUse.node.getTextContent() !== ''\n ) {\n isEmptyParagraph = false\n }\n\n if (!isEmptyParagraph) {\n const newParagraph = $createParagraphNode()\n hoveredElementToUse?.node.insertAfter(newParagraph)\n\n setTimeout(() => {\n hoveredElementToUse = {\n elem: editor.getElementByKey(newParagraph.getKey())!,\n node: newParagraph,\n }\n setHoveredElement(hoveredElementToUse)\n }, 0)\n }\n })\n\n // 2. Focus on the new paragraph node\n setTimeout(() => {\n editor.update(() => {\n editor.focus()\n\n if (\n hoveredElementToUse?.node &&\n 'select' in hoveredElementToUse.node &&\n typeof hoveredElementToUse.node.select === 'function'\n ) {\n hoveredElementToUse.node.select()\n }\n })\n }, 1)\n\n // Make sure this is called AFTER the focusing has been processed by the browser\n // Otherwise, this won't work\n setTimeout(() => {\n editor.dispatchCommand(ENABLE_SLASH_MENU_COMMAND, {\n node: hoveredElementToUse?.node as ParagraphNode,\n })\n }, 2)\n\n event.stopPropagation()\n event.preventDefault()\n },\n [editor, hoveredElement],\n )\n\n return createPortal(\n <React.Fragment>\n <button\n className=\"icon add-block-menu\"\n onClick={(event) => {\n handleAddClick(event)\n }}\n ref={menuRef}\n type=\"button\"\n >\n <div className={isEditable ? 'icon' : ''} />\n </button>\n </React.Fragment>,\n anchorElem,\n )\n}\n\nexport function AddBlockHandlePlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement\n}): React.ReactElement {\n const [editor] = useLexicalComposerContext()\n return useAddBlockHandle(editor, anchorElem, editor._editable)\n}\n", "'use client'\n/**\n * Calculate distance between scrollerElem and target if target is not in scrollerElem\n */\nexport const calculateDistanceFromScrollerElem = (\n scrollerElem: HTMLElement | null,\n pageX: number,\n pageY: number,\n target: HTMLElement,\n horizontalBuffer: number = 50,\n verticalBuffer: number = 25,\n): number => {\n let distanceFromScrollerElem = 0\n if (scrollerElem && !scrollerElem.contains(target)) {\n const { bottom, left, right, top } = scrollerElem.getBoundingClientRect()\n\n const adjustedTop = top + window.scrollY\n const adjustedBottom = bottom + window.scrollY\n\n if (\n pageY < adjustedTop - verticalBuffer ||\n pageY > adjustedBottom + verticalBuffer ||\n pageX < left - horizontalBuffer ||\n pageX > right + horizontalBuffer\n ) {\n return -1\n }\n\n // This is used to allow the _draggableBlockElem to be found when the mouse is in the\n // buffer zone around the scrollerElem.\n if (pageX < left || pageX > right) {\n distanceFromScrollerElem = pageX < left ? pageX - left : pageX - right\n }\n }\n return distanceFromScrollerElem\n}\n", "'use client'\nimport type { LexicalEditor, LexicalNode } from 'lexical'\n\nimport { $getNodeByKey } from 'lexical'\n\nimport { Point } from '../../../utils/point.js'\nimport { Rect } from '../../../utils/rect.js'\nimport { getBoundingClientRectWithoutTransform } from '../DraggableBlockPlugin/getBoundingRectWithoutTransform.js'\nimport { getCollapsedMargins } from '../utils/getCollapsedMargins.js'\nimport { getTopLevelNodeKeys } from '../utils/getTopLevelNodeKeys.js'\n\n// Directions\nconst Downward = 1\nconst Upward = -1\nconst Indeterminate = 0\n\ntype Props = {\n anchorElem: HTMLElement\n cache_threshold?: number\n editor: LexicalEditor\n /** fuzzy makes the search not exact. If no exact match found, find the closes node instead of returning null */\n fuzzy?: boolean\n horizontalOffset?: number\n point: Point\n /**\n * By default, empty paragraphs are not returned. Set this to true to return empty paragraphs. @default false\n */\n returnEmptyParagraphs?: boolean\n /**\n * The index to start searching from. It can be a considerable performance optimization to start searching from the index of the\n * previously found node, as the node is likely to be close to the next node.\n */\n startIndex?: number\n useEdgeAsDefault?: boolean\n verbose?: boolean\n}\n\ntype Output = {\n blockElem: HTMLElement | null\n blockNode: LexicalNode | null\n foundAtIndex: number\n isFoundNodeEmptyParagraph: boolean\n}\n\nconst cache = {\n props: null as null | Props,\n result: null as null | Output,\n}\n\nfunction isPointClose(previous: Point, current: Point, threshold: number = 20): boolean {\n const dx = previous.x - current.x\n const dy = previous.y - current.y\n return dx * dx + dy * dy <= threshold * threshold\n}\n\nexport function getNodeCloseToPoint(props: Props): Output {\n const {\n anchorElem,\n cache_threshold = 20,\n editor,\n fuzzy = false,\n horizontalOffset = 0,\n point: { x, y },\n startIndex = 0,\n useEdgeAsDefault = false,\n } = props\n\n // Use cache\n if (\n cache_threshold > 0 &&\n cache.props &&\n cache.result &&\n cache.props.fuzzy === props.fuzzy &&\n cache.props.horizontalOffset === props.horizontalOffset &&\n cache.props.useEdgeAsDefault === props.useEdgeAsDefault &&\n isPointClose(cache.props.point, props.point, cache_threshold)\n ) {\n return cache.result\n }\n\n const anchorElementRect = anchorElem.getBoundingClientRect()\n const topLevelNodeKeys = getTopLevelNodeKeys(editor)\n\n const closestBlockElem: {\n blockElem: HTMLElement | null\n blockNode: LexicalNode | null\n distance: number\n foundAtIndex: number\n isFoundNodeEmptyParagraph: boolean\n } = {\n blockElem: null,\n blockNode: null,\n distance: Infinity,\n foundAtIndex: -1,\n isFoundNodeEmptyParagraph: false,\n }\n\n // Return null if matching block element is the first or last node\n editor.getEditorState().read(() => {\n if (useEdgeAsDefault) {\n const [firstNode, lastNode] = [\n editor.getElementByKey(topLevelNodeKeys[0]),\n editor.getElementByKey(topLevelNodeKeys[topLevelNodeKeys.length - 1]),\n ]\n\n if (firstNode && lastNode) {\n const [firstNodeRect, lastNodeRect] = [\n getBoundingClientRectWithoutTransform(firstNode),\n getBoundingClientRectWithoutTransform(lastNode),\n ]\n\n if (y < firstNodeRect.top) {\n closestBlockElem.blockElem = firstNode\n closestBlockElem.distance = firstNodeRect.top - y\n closestBlockElem.blockNode = $getNodeByKey(topLevelNodeKeys[0])\n closestBlockElem.foundAtIndex = 0\n } else if (y > lastNodeRect.bottom) {\n closestBlockElem.distance = y - lastNodeRect.bottom\n closestBlockElem.blockNode = $getNodeByKey(topLevelNodeKeys[topLevelNodeKeys.length - 1])\n closestBlockElem.blockElem = lastNode\n closestBlockElem.foundAtIndex = topLevelNodeKeys.length - 1\n }\n\n if (closestBlockElem?.blockElem) {\n return {\n blockElem: null,\n isFoundNodeEmptyParagraph: false,\n } as Output\n }\n }\n }\n\n // Find matching block element\n let index = startIndex\n let direction = Indeterminate\n\n while (index >= 0 && index < topLevelNodeKeys.length) {\n const key = topLevelNodeKeys[index]\n const elem = editor.getElementByKey(key)\n if (elem === null) {\n break\n }\n const point = new Point(x + horizontalOffset, y)\n //const domRect = Rect.fromDOM(elem)\n // Do not consider transform of blocks when calculating distance\n const domRect = Rect.fromDOMRect(getBoundingClientRectWithoutTransform(elem))\n\n const { marginBottom, marginTop } = getCollapsedMargins(elem)\n\n const rect = domRect.generateNewRect({\n bottom: domRect.bottom + marginBottom,\n left: anchorElementRect.left,\n right: anchorElementRect.right,\n top: domRect.top - marginTop,\n })\n\n const { distance, isOnBottomSide, isOnTopSide } = rect.distanceFromPoint(point)\n\n if (distance === 0) {\n closestBlockElem.blockElem = elem\n closestBlockElem.blockNode = $getNodeByKey(key)\n closestBlockElem.foundAtIndex = index\n closestBlockElem.distance = distance\n\n // Check if blockNode is an empty text node\n if (\n closestBlockElem.blockNode &&\n closestBlockElem.blockNode.getType() === 'paragraph' &&\n closestBlockElem.blockNode.getTextContent() === ''\n ) {\n if (!fuzzy && !props.returnEmptyParagraphs) {\n closestBlockElem.blockElem = null\n closestBlockElem.blockNode = null\n }\n\n closestBlockElem.isFoundNodeEmptyParagraph = true\n }\n break\n } else if (fuzzy) {\n if (distance < closestBlockElem.distance) {\n closestBlockElem.blockElem = elem\n closestBlockElem.blockNode = $getNodeByKey(key)\n closestBlockElem.distance = distance\n closestBlockElem.foundAtIndex = index\n }\n }\n\n if (direction === Indeterminate) {\n if (isOnTopSide) {\n direction = Upward\n } else if (isOnBottomSide) {\n direction = Downward\n } else {\n // stop search block element\n direction = Infinity\n }\n }\n\n index += direction\n }\n })\n\n // Store in cache before returning\n cache.props = props\n cache.result = {\n blockElem: closestBlockElem.blockElem,\n blockNode: closestBlockElem.blockNode,\n foundAtIndex: closestBlockElem.foundAtIndex,\n isFoundNodeEmptyParagraph: closestBlockElem.isFoundNodeEmptyParagraph,\n }\n\n return {\n blockElem: closestBlockElem.blockElem,\n blockNode: closestBlockElem.blockNode,\n foundAtIndex: closestBlockElem.foundAtIndex,\n isFoundNodeEmptyParagraph: closestBlockElem.isFoundNodeEmptyParagraph,\n }\n}\n", "'use client'\nexport function getBoundingClientRectWithoutTransform(elem: HTMLElement): DOMRect {\n const rect = elem.getBoundingClientRect()\n\n // Extract the translation value from the transform style\n const transformValue = getComputedStyle(elem).getPropertyValue('transform')\n if (!transformValue || transformValue === 'none') {\n return rect\n }\n\n const lastNumberOfTransformValue = transformValue.split(',').pop()\n rect.y = rect.y - Number(lastNumberOfTransformValue?.replace(')', ''))\n\n // Return the original bounding rect if no translation is applied\n return rect\n}\n", "'use client'\nexport function getCollapsedMargins(elem: HTMLElement): {\n marginBottom: number\n marginTop: number\n} {\n const getMargin = (element: Element | null, margin: 'marginBottom' | 'marginTop'): number =>\n element ? parseFloat(window.getComputedStyle(element)[margin]) : 0\n\n const { marginBottom, marginTop } = window.getComputedStyle(elem)\n const prevElemSiblingMarginBottom = getMargin(elem.previousElementSibling, 'marginBottom')\n const nextElemSiblingMarginTop = getMargin(elem.nextElementSibling, 'marginTop')\n const collapsedTopMargin = Math.max(parseFloat(marginTop), prevElemSiblingMarginBottom)\n const collapsedBottomMargin = Math.max(parseFloat(marginBottom), nextElemSiblingMarginTop)\n\n return { marginBottom: collapsedBottomMargin, marginTop: collapsedTopMargin }\n}\n", "'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { $getRoot } from 'lexical'\n\nexport function getTopLevelNodeKeys(editor: LexicalEditor): string[] {\n return editor.getEditorState().read(() => $getRoot().getChildrenKeys())\n}\n", "'use client'\nexport function isOnHandleElement(element: HTMLElement, handleElementClassName: string): boolean {\n return !!element.closest(`.${handleElementClassName}`)\n}\n", "'use client'\nconst replacedElements = [\n 'IMG',\n 'INPUT',\n 'TEXTAREA',\n 'SELECT',\n 'BUTTON',\n 'VIDEO',\n 'OBJECT',\n 'EMBED',\n 'IFRAME',\n 'HR',\n]\n\n/**\n * From ChatGPT, only that verified it works for HR elements.\n *\n * HTML Elements can have CSS lineHeight applied to them, but it doesn't always affect the visual layout.\n * This function checks if the line-height property has an effect on the element's layout.\n * @param htmlElem\n */\nexport function doesLineHeightAffectElement(htmlElem: HTMLElement) {\n if (!htmlElem) {\n return false\n }\n\n // Check for replaced elements, elements that typically don't support line-height adjustments,\n // and elements without visible content\n\n if (\n replacedElements.includes(htmlElem.tagName) ||\n htmlElem.offsetHeight === 0 ||\n htmlElem.offsetWidth === 0\n ) {\n return false\n }\n\n // Check for specific CSS properties that negate line-height's visual effects\n const style = window.getComputedStyle(htmlElem)\n if (\n style.display === 'table-cell' ||\n style.position === 'absolute' ||\n style.visibility === 'hidden' ||\n style.opacity === '0'\n ) {\n return false\n }\n\n // This is a basic check, and there can be more complex scenarios where line-height doesn't have an effect.\n return true\n}\n", "'use client'\nimport { doesLineHeightAffectElement } from './doesLineHeightAffectElement.js'\n\nexport function setHandlePosition(\n targetElem: HTMLElement | null,\n handleElem: HTMLElement,\n anchorElem: HTMLElement,\n leftOffset: number = 0, // SPACE\n) {\n if (!targetElem) {\n handleElem.style.opacity = '0'\n handleElem.style.transform = 'translate(-10000px, -10000px)'\n return\n }\n\n const targetRect = targetElem.getBoundingClientRect()\n const targetStyle = window.getComputedStyle(targetElem)\n const floatingElemRect = handleElem.getBoundingClientRect()\n const anchorElementRect = anchorElem.getBoundingClientRect()\n\n let top: number\n\n const isBlockStyle = ['lexical-block', 'lexical-upload', 'lexical-relationship'].some((classes) =>\n targetElem.firstElementChild?.classList.contains(classes),\n )\n\n if (!isBlockStyle) {\n // No need to let line height affect the re-positioning of the floating element if line height has no\n // visual effect on the element. Otherwise, the floating element will be positioned incorrectly.\n const actualLineHeight = doesLineHeightAffectElement(targetElem)\n ? parseInt(targetStyle.lineHeight, 10)\n : 0\n\n top = targetRect.top + (actualLineHeight - floatingElemRect.height) / 2 - anchorElementRect.top\n } else {\n top = targetRect.top + 8 - anchorElementRect.top\n }\n\n const left = leftOffset\n\n handleElem.style.opacity = '1'\n handleElem.style.transform = `translate(${left}px, ${top}px)`\n}\n", "'use client'\nimport type { LexicalEditor } from 'lexical'\nimport type { DragEvent as ReactDragEvent } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { eventFiles } from '@lexical/rich-text'\nimport { $getNearestNodeFromDOMNode, $getNodeByKey } from 'lexical'\nimport * as React from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useEditorConfigContext } from '../../../config/client/EditorConfigProvider.js'\nimport { isHTMLElement } from '../../../utils/guard.js'\nimport { Point } from '../../../utils/point.js'\nimport { calculateDistanceFromScrollerElem } from '../utils/calculateDistanceFromScrollerElem.js'\nimport { getNodeCloseToPoint } from '../utils/getNodeCloseToPoint.js'\nimport { getTopLevelNodeKeys } from '../utils/getTopLevelNodeKeys.js'\nimport { isOnHandleElement } from '../utils/isOnHandleElement.js'\nimport { setHandlePosition } from '../utils/setHandlePosition.js'\nimport { getBoundingClientRectWithoutTransform } from './getBoundingRectWithoutTransform.js'\nimport './index.scss'\nimport { setTargetLine } from './setTargetLine.js'\n\nconst DRAGGABLE_BLOCK_MENU_CLASSNAME = 'draggable-block-menu'\nconst DRAG_DATA_FORMAT = 'application/x-lexical-drag-block'\n\nlet prevIndex = Infinity\n\nfunction getCurrentIndex(keysLength: number): number {\n if (keysLength === 0) {\n return Infinity\n }\n if (prevIndex >= 0 && prevIndex < keysLength) {\n return prevIndex\n }\n\n return Math.floor(keysLength / 2)\n}\n\nfunction setDragImage(dataTransfer: DataTransfer, draggableBlockElem: HTMLElement) {\n const { transform } = draggableBlockElem.style\n\n // Remove dragImage borders\n dataTransfer.setDragImage(draggableBlockElem, 0, 0)\n\n setTimeout(() => {\n draggableBlockElem.style.transform = transform\n })\n}\n\nfunction hideTargetLine(\n targetLineElem: HTMLElement | null,\n lastTargetBlockElem: HTMLElement | null,\n) {\n if (targetLineElem) {\n targetLineElem.style.opacity = '0'\n }\n if (lastTargetBlockElem) {\n lastTargetBlockElem.style.opacity = ''\n // Delete marginBottom and marginTop values we set\n lastTargetBlockElem.style.marginBottom = ''\n lastTargetBlockElem.style.marginTop = ''\n //lastTargetBlock.style.border = 'none'\n }\n}\n\nfunction useDraggableBlockMenu(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n isEditable: boolean,\n): React.ReactElement {\n const scrollerElem = anchorElem.parentElement\n\n const menuRef = useRef<HTMLDivElement>(null)\n const targetLineRef = useRef<HTMLDivElement>(null)\n const debugHighlightRef = useRef<HTMLDivElement>(null)\n const isDraggingBlockRef = useRef<boolean>(false)\n const [draggableBlockElem, setDraggableBlockElem] = useState<HTMLElement | null>(null)\n const [lastTargetBlock, setLastTargetBlock] = useState<{\n boundingBox?: DOMRect\n elem: HTMLElement | null\n isBelow: boolean\n } | null>(null)\n\n const { editorConfig } = useEditorConfigContext()\n\n const blockHandleHorizontalOffset = editorConfig?.admin?.hideGutter ? -44 : -8\n\n useEffect(() => {\n /**\n * Handles positioning of the drag handle\n */\n function onDocumentMouseMove(event: MouseEvent) {\n const target = event.target\n if (!isHTMLElement(target)) {\n return\n }\n\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n )\n if (distanceFromScrollerElem === -1) {\n setDraggableBlockElem(null)\n return\n }\n\n if (isOnHandleElement(target, DRAGGABLE_BLOCK_MENU_CLASSNAME)) {\n return\n }\n\n const topLevelNodeKeys = getTopLevelNodeKeys(editor)\n\n const {\n blockElem: _draggableBlockElem,\n foundAtIndex,\n isFoundNodeEmptyParagraph,\n } = getNodeCloseToPoint({\n anchorElem,\n cache_threshold: 0,\n editor,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n startIndex: getCurrentIndex(topLevelNodeKeys.length),\n useEdgeAsDefault: false,\n verbose: false,\n })\n\n prevIndex = foundAtIndex\n\n //if (DEBUG && _draggableBlockElem) {\n //targetBlockElem.style.border = '3px solid red'\n // highlightElemOriginalPosition(debugHighlightRef, _draggableBlockElem, anchorElem)\n //}\n\n if (!_draggableBlockElem && !isFoundNodeEmptyParagraph) {\n return\n }\n\n if (draggableBlockElem !== _draggableBlockElem) {\n setDraggableBlockElem(_draggableBlockElem)\n }\n }\n\n // Since the draggableBlockElem is outside the actual editor, we need to listen to the document\n // to be able to detect when the mouse is outside the editor and respect a buffer around\n // the scrollerElem to avoid the draggableBlockElem disappearing too early.\n document?.addEventListener('mousemove', onDocumentMouseMove)\n\n return () => {\n document?.removeEventListener('mousemove', onDocumentMouseMove)\n }\n }, [scrollerElem, anchorElem, editor, draggableBlockElem])\n\n useEffect(() => {\n if (menuRef.current) {\n setHandlePosition(\n draggableBlockElem,\n menuRef.current,\n anchorElem,\n blockHandleHorizontalOffset,\n )\n }\n }, [anchorElem, draggableBlockElem, blockHandleHorizontalOffset])\n\n useEffect(() => {\n function onDragover(event: DragEvent): boolean {\n if (!isDraggingBlockRef.current) {\n return false\n }\n const [isFileTransfer] = eventFiles(event)\n if (isFileTransfer) {\n return false\n }\n\n const { pageY, target } = event\n if (!isHTMLElement(target)) {\n return false\n }\n\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n 100,\n 50,\n )\n\n const topLevelNodeKeys = getTopLevelNodeKeys(editor)\n\n const {\n blockElem: targetBlockElem,\n foundAtIndex,\n isFoundNodeEmptyParagraph,\n } = getNodeCloseToPoint({\n anchorElem,\n editor,\n fuzzy: true,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n startIndex: getCurrentIndex(topLevelNodeKeys.length),\n useEdgeAsDefault: true,\n verbose: true,\n })\n\n prevIndex = foundAtIndex\n\n const targetLineElem = targetLineRef.current\n // targetBlockElem === null shouldn't happen\n if (targetBlockElem === null || targetLineElem === null) {\n return false\n }\n\n if (draggableBlockElem !== targetBlockElem) {\n const { isBelow, willStayInSamePosition } = setTargetLine(\n editorConfig?.admin?.hideGutter ? '0px' : '3rem',\n blockHandleHorizontalOffset +\n (editorConfig?.admin?.hideGutter\n ? (menuRef?.current?.getBoundingClientRect()?.width ?? 0)\n : -(menuRef?.current?.getBoundingClientRect()?.width ?? 0)),\n targetLineElem,\n targetBlockElem,\n lastTargetBlock!,\n pageY,\n anchorElem,\n event,\n debugHighlightRef,\n isFoundNodeEmptyParagraph,\n )\n\n // Prevent default event to be able to trigger onDrop events\n // Calling preventDefault() adds the green plus icon to the cursor,\n // indicating that the drop is allowed.\n event.preventDefault()\n\n if (!willStayInSamePosition) {\n setLastTargetBlock({\n boundingBox: targetBlockElem.getBoundingClientRect(),\n elem: targetBlockElem,\n isBelow,\n })\n }\n } else if (lastTargetBlock?.elem) {\n hideTargetLine(targetLineElem, lastTargetBlock.elem)\n setLastTargetBlock({\n boundingBox: targetBlockElem.getBoundingClientRect(),\n elem: targetBlockElem,\n isBelow: false,\n })\n }\n\n return true\n }\n\n function onDrop(event: DragEvent): boolean {\n if (!isDraggingBlockRef.current) {\n return false\n }\n const [isFileTransfer] = eventFiles(event)\n if (isFileTransfer) {\n return false\n }\n const { dataTransfer, pageY, target } = event\n const dragData = dataTransfer?.getData(DRAG_DATA_FORMAT) || ''\n\n editor.update(() => {\n const draggedNode = $getNodeByKey(dragData)\n if (!draggedNode) {\n return false\n }\n if (!isHTMLElement(target)) {\n return false\n }\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n 100,\n 50,\n )\n\n const { blockElem: targetBlockElem, isFoundNodeEmptyParagraph } = getNodeCloseToPoint({\n anchorElem,\n editor,\n fuzzy: true,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n useEdgeAsDefault: true,\n })\n\n if (!targetBlockElem) {\n return false\n }\n const targetNode = $getNearestNodeFromDOMNode(targetBlockElem)\n if (!targetNode) {\n return false\n }\n if (targetNode === draggedNode) {\n return true\n }\n\n const { height: targetBlockElemHeight, top: targetBlockElemTop } =\n getBoundingClientRectWithoutTransform(targetBlockElem)\n\n const mouseY = pageY\n const isBelow = mouseY >= targetBlockElemTop + targetBlockElemHeight / 2 + window.scrollY\n\n if (!isFoundNodeEmptyParagraph) {\n if (isBelow) {\n // below targetBlockElem\n targetNode.insertAfter(draggedNode)\n } else {\n // above targetBlockElem\n targetNode.insertBefore(draggedNode)\n }\n } else {\n //\n targetNode.insertBefore(draggedNode)\n targetNode.remove()\n }\n\n /*\n if (pageY >= targetBlockElemTop + targetBlockElemHeight / 2) {\n targetNode.insertAfter(draggedNode)\n } else {\n targetNode.insertBefore(draggedNode)\n }*/\n if (draggableBlockElem !== null) {\n setDraggableBlockElem(null)\n }\n\n // find all previous elements with lexical-block-highlighter class and remove them\n const allPrevHighlighters = document.querySelectorAll('.lexical-block-highlighter')\n allPrevHighlighters.forEach((highlighter) => {\n highlighter.remove()\n })\n\n const newInsertedElem = editor.getElementByKey(draggedNode.getKey())\n setTimeout(() => {\n // add new temp html element to newInsertedElem with the same height and width and the class block-selected\n // to highlight the new inserted element\n const newInsertedElemRect = newInsertedElem?.getBoundingClientRect()\n if (!newInsertedElemRect) {\n return\n }\n const highlightElem = document.createElement('div')\n highlightElem.className = 'lexical-block-highlighter'\n\n highlightElem.style.backgroundColor = 'var(--theme-elevation-1000'\n highlightElem.style.transition = 'opacity 0.5s ease-in-out'\n highlightElem.style.zIndex = '1'\n highlightElem.style.pointerEvents = 'none'\n highlightElem.style.boxSizing = 'border-box'\n highlightElem.style.borderRadius = '4px'\n highlightElem.style.position = 'absolute'\n document.body.appendChild(highlightElem)\n\n highlightElem.style.opacity = '0.1'\n\n highlightElem.style.height = `${newInsertedElemRect.height + 8}px`\n highlightElem.style.width = `${newInsertedElemRect.width + 8}px`\n highlightElem.style.top = `${newInsertedElemRect.top + window.scrollY - 4}px`\n highlightElem.style.left = `${newInsertedElemRect.left - 4}px`\n\n setTimeout(() => {\n highlightElem.style.opacity = '0'\n setTimeout(() => {\n highlightElem.remove()\n }, 500)\n }, 1000)\n }, 120)\n })\n\n return true\n }\n\n // register onDragover event listeners:\n document.addEventListener('dragover', onDragover)\n // register onDrop event listeners:\n document.addEventListener('drop', onDrop)\n\n return () => {\n document.removeEventListener('dragover', onDragover)\n document.removeEventListener('drop', onDrop)\n }\n }, [\n scrollerElem,\n blockHandleHorizontalOffset,\n anchorElem,\n editor,\n lastTargetBlock,\n draggableBlockElem,\n editorConfig?.admin?.hideGutter,\n ])\n\n function onDragStart(event: ReactDragEvent<HTMLDivElement>): void {\n const dataTransfer = event.dataTransfer\n if (!dataTransfer || !draggableBlockElem) {\n return\n }\n setDragImage(dataTransfer, draggableBlockElem)\n let nodeKey = ''\n editor.update(() => {\n const node = $getNearestNodeFromDOMNode(draggableBlockElem)\n if (node) {\n nodeKey = node.getKey()\n }\n })\n isDraggingBlockRef.current = true\n dataTransfer.setData(DRAG_DATA_FORMAT, nodeKey)\n }\n\n function onDragEnd(): void {\n isDraggingBlockRef.current = false\n if (lastTargetBlock?.elem) {\n hideTargetLine(targetLineRef.current, lastTargetBlock?.elem)\n }\n }\n\n return createPortal(\n <React.Fragment>\n <div\n className=\"icon draggable-block-menu\"\n draggable\n onDragEnd={onDragEnd}\n onDragStart={onDragStart}\n ref={menuRef}\n >\n <div className={isEditable ? 'icon' : ''} />\n </div>\n <div className=\"draggable-block-target-line\" ref={targetLineRef} />\n <div className=\"debug-highlight\" ref={debugHighlightRef} />\n </React.Fragment>,\n anchorElem,\n )\n}\n\nexport function DraggableBlockPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement\n}): React.ReactElement {\n const [editor] = useLexicalComposerContext()\n return useDraggableBlockMenu(editor, anchorElem, editor._editable)\n}\n", "'use client'\nimport { getCollapsedMargins } from '../utils/getCollapsedMargins.js'\nconst TARGET_LINE_HALF_HEIGHT = 0\nconst TEXT_BOX_HORIZONTAL_PADDING = -24\nconst DEBUG = false\n\nlet animationTimer = 0\n\nexport function setTargetLine(\n offsetWidth: string,\n offsetLeft: number,\n targetLineElem: HTMLElement,\n targetBlockElem: HTMLElement,\n lastTargetBlock: {\n boundingBox?: DOMRect\n elem: HTMLElement | null\n isBelow: boolean\n },\n mouseY: number,\n anchorElem: HTMLElement,\n event: DragEvent,\n debugHighlightRef: React.RefObject<HTMLDivElement | null>,\n isFoundNodeEmptyParagraph: boolean = false,\n) {\n const { height: targetBlockElemHeight, top: targetBlockElemTop } =\n targetBlockElem.getBoundingClientRect() // used to be getBoundingClientRectWithoutTransform. Not sure what's better, but the normal getBoundingClientRect seems to work fine\n const { top: anchorTop, width: anchorWidth } = anchorElem.getBoundingClientRect()\n\n const { marginBottom, marginTop } = getCollapsedMargins(targetBlockElem)\n let lineTop = targetBlockElemTop\n\n const isBelow = mouseY >= targetBlockElemTop + targetBlockElemHeight / 2 + window.scrollY\n\n let willStayInSamePosition = false\n\n /**\n * Do not run any transform or changes if the actual new line position would be the same (even if it's now inserted BEFORE rather than AFTER - position would still be the same)\n * This prevents unnecessary flickering.\n *\n * We still need to let it run even if the position (IGNORING the transform) would not change, as the transform animation is not finished yet. This is what animationTimer does. Otherwise, the positioning will be inaccurate\n */\n if (lastTargetBlock?.elem) {\n if (targetBlockElem !== lastTargetBlock?.elem) {\n if (\n isBelow &&\n lastTargetBlock?.elem &&\n lastTargetBlock?.elem === targetBlockElem.nextElementSibling\n ) {\n animationTimer++\n\n if (animationTimer < 200) {\n willStayInSamePosition = true\n }\n } else if (\n !isBelow &&\n lastTargetBlock?.elem &&\n lastTargetBlock?.elem === targetBlockElem.previousElementSibling\n ) {\n animationTimer++\n if (animationTimer < 200) {\n willStayInSamePosition = true\n }\n }\n } else {\n animationTimer++\n\n const lastBoundingBoxPosition = lastTargetBlock?.boundingBox?.y\n const currentBoundingBoxPosition = targetBlockElem.getBoundingClientRect().y\n\n if (\n (isBelow === lastTargetBlock?.isBelow &&\n lastBoundingBoxPosition === currentBoundingBoxPosition) ||\n animationTimer < 200\n ) {\n willStayInSamePosition = false\n }\n }\n }\n if (willStayInSamePosition) {\n return {\n isBelow,\n willStayInSamePosition,\n }\n }\n\n /**\n * Paragraphs need no isBelow/above handling,\n */\n if (!isFoundNodeEmptyParagraph) {\n //if (!isFoundNodeEmptyParagraph) {\n if (isBelow) {\n // below targetBlockElem\n lineTop += targetBlockElemHeight + marginBottom / 2\n } else {\n // above targetBlockElem\n lineTop -= marginTop / 2\n }\n } else {\n lineTop += targetBlockElemHeight / 2\n }\n\n let targetElemTranslate2 = 0\n\n if (!isFoundNodeEmptyParagraph) {\n if (isBelow) {\n targetElemTranslate2 = -TARGET_LINE_HALF_HEIGHT\n } else {\n targetElemTranslate2 = TARGET_LINE_HALF_HEIGHT\n }\n }\n\n const top = lineTop - anchorTop + targetElemTranslate2\n\n const left = TEXT_BOX_HORIZONTAL_PADDING - offsetLeft\n\n targetLineElem.style.width = `calc(${anchorWidth}px - ${offsetWidth})`\n targetLineElem.style.opacity = '.8'\n\n // if (DEBUG) {\n // //targetBlockElem.style.border = '3px solid red'\n // highlightElemOriginalPosition(debugHighlightRef, targetBlockElem, anchorElem)\n // }\n\n targetLineElem.style.transform = `translate(${left}px, calc(${top}px - ${'2px'}))`\n\n /**\n * Properly reset previous targetBlockElem styles\n */\n if (lastTargetBlock?.elem) {\n lastTargetBlock.elem.style.opacity = ''\n\n if (lastTargetBlock?.elem === targetBlockElem) {\n if (isBelow) {\n lastTargetBlock.elem.style.marginTop = ''\n } else {\n lastTargetBlock.elem.style.marginBottom = ''\n }\n } else {\n lastTargetBlock.elem.style.marginBottom = ''\n lastTargetBlock.elem.style.marginTop = ''\n }\n }\n\n animationTimer = 0\n return {\n isBelow,\n willStayInSamePosition,\n }\n}\n", "'use client'\n\nimport { MarkdownShortcutPlugin as LexicalMarkdownShortcutPlugin } from '@lexical/react/LexicalMarkdownShortcutPlugin.js'\nimport * as React from 'react'\n\nimport { useEditorConfigContext } from '../../config/client/EditorConfigProvider.js'\n\nexport const MarkdownShortcutPlugin: React.FC = () => {\n const { editorConfig } = useEditorConfigContext()\n\n return <LexicalMarkdownShortcutPlugin transformers={editorConfig.features.markdownTransformers} />\n}\n", "'use client'\nimport type { TextNode } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useTranslation } from '@payloadcms/ui'\nimport { useCallback, useMemo, useState } from 'react'\nimport * as React from 'react'\nimport * as ReactDOM from 'react-dom'\n\nimport type {\n SlashMenuGroup,\n SlashMenuGroupInternal,\n SlashMenuItemInternal,\n SlashMenuItem as SlashMenuItemType,\n} from './LexicalTypeaheadMenuPlugin/types.js'\n\nimport { useEditorConfigContext } from '../../config/client/EditorConfigProvider.js'\nimport './index.scss'\nimport { LexicalTypeaheadMenuPlugin } from './LexicalTypeaheadMenuPlugin/index.js'\nimport { useMenuTriggerMatch } from './useMenuTriggerMatch.js'\n\nconst baseClass = 'slash-menu-popup'\n\nfunction SlashMenuItem({\n isSelected,\n item,\n onClick,\n onMouseEnter,\n}: {\n index: number\n isSelected: boolean\n item: SlashMenuItemInternal\n onClick: () => void\n onMouseEnter: () => void\n}) {\n const {\n fieldProps: { featureClientSchemaMap, schemaPath },\n } = useEditorConfigContext()\n\n const { i18n } = useTranslation()\n\n let className = `${baseClass}__item ${baseClass}__item-${item.key}`\n if (isSelected) {\n className += ` ${baseClass}__item--selected`\n }\n\n let title = item.key\n if (item.label) {\n title =\n typeof item.label === 'function'\n ? item.label({ featureClientSchemaMap, i18n, schemaPath })\n : 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 <button\n aria-selected={isSelected}\n className={className}\n id={baseClass + '__item-' + item.key}\n key={item.key}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n ref={(element) => {\n item.ref = { current: element }\n }}\n role=\"option\"\n tabIndex={-1}\n type=\"button\"\n >\n {item?.Icon && <item.Icon />}\n\n <span className={`${baseClass}__item-text`}>{title}</span>\n </button>\n )\n}\n\nexport function SlashMenuPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement\n}): React.ReactElement {\n const [editor] = useLexicalComposerContext()\n const [queryString, setQueryString] = useState<null | string>(null)\n const { editorConfig } = useEditorConfigContext()\n const { i18n } = useTranslation()\n const {\n fieldProps: { featureClientSchemaMap, schemaPath },\n } = useEditorConfigContext()\n\n const checkForTriggerMatch = useMenuTriggerMatch('/', {\n minLength: 0,\n })\n\n const getDynamicItems = useCallback(() => {\n let groupWithItems: Array<SlashMenuGroup> = []\n\n for (const dynamicItem of editorConfig.features.slashMenu.dynamicGroups) {\n if (queryString) {\n const dynamicGroupWithItems = dynamicItem({\n editor,\n queryString,\n })\n groupWithItems = groupWithItems.concat(dynamicGroupWithItems)\n }\n }\n\n return groupWithItems\n }, [editor, queryString, editorConfig?.features])\n\n const groups: SlashMenuGroup[] = useMemo(() => {\n let groupsWithItems: SlashMenuGroup[] = []\n for (const groupWithItem of editorConfig?.features.slashMenu.groups ?? []) {\n groupsWithItems.push(groupWithItem)\n }\n\n if (queryString) {\n // Filter current groups first\n // @ts-expect-error - TODO: fix this\n groupsWithItems = groupsWithItems.map((group) => {\n const filteredItems = group.items.filter((item) => {\n let itemTitle = item.key\n if (item.label) {\n itemTitle =\n typeof item.label === 'function'\n ? item.label({ featureClientSchemaMap, i18n, schemaPath })\n : item.label\n }\n\n if (new RegExp(queryString, 'gi').exec(itemTitle)) {\n return true\n }\n if (item.keywords != null) {\n return item.keywords.some((keyword) => new RegExp(queryString, 'gi').exec(keyword))\n }\n return false\n })\n if (filteredItems.length) {\n return {\n ...group,\n items: filteredItems,\n }\n }\n return null\n })\n\n groupsWithItems = groupsWithItems.filter((group) => group != null)\n\n // Now add dynamic groups\n const dynamicItemGroups = getDynamicItems()\n\n // merge dynamic items into groups\n for (const dynamicGroup of dynamicItemGroups) {\n // 1. find the group with the same name or create new one\n let group = groupsWithItems.find((group) => group.key === dynamicGroup.key)\n if (!group) {\n group = {\n ...dynamicGroup,\n items: [],\n }\n } else {\n groupsWithItems = groupsWithItems.filter((group) => group.key !== dynamicGroup.key)\n }\n\n // 2. Add items to group items array and add to sanitized.slashMenu.groupsWithItems\n if (group?.items?.length) {\n group.items = group.items.concat(group.items)\n }\n groupsWithItems.push(group)\n }\n }\n\n return groupsWithItems\n }, [\n queryString,\n editorConfig?.features.slashMenu.groups,\n getDynamicItems,\n featureClientSchemaMap,\n i18n,\n schemaPath,\n ])\n\n const onSelectItem = useCallback(\n (selectedItem: SlashMenuItemType, closeMenu: () => void, matchingString: string) => {\n closeMenu()\n\n selectedItem.onSelect({ editor, queryString: matchingString })\n },\n [editor],\n )\n\n return (\n <LexicalTypeaheadMenuPlugin\n anchorElem={anchorElem}\n groups={groups as SlashMenuGroupInternal[]}\n menuRenderFn={(\n anchorElementRef,\n { selectedItemKey, selectItemAndCleanUp, setSelectedItemKey },\n ) =>\n anchorElementRef.current && groups.length\n ? ReactDOM.createPortal(\n <div className={baseClass}>\n {groups.map((group) => {\n let groupTitle = group.key\n if (group.label && featureClientSchemaMap) {\n groupTitle =\n typeof group.label === 'function'\n ? group.label({ featureClientSchemaMap, i18n, schemaPath })\n : group.label\n }\n\n return (\n <div\n className={`${baseClass}__group ${baseClass}__group-${group.key}`}\n key={group.key}\n >\n <div className={`${baseClass}__group-title`}>{groupTitle}</div>\n {group.items.map((item, oi: number) => (\n <SlashMenuItem\n index={oi}\n isSelected={selectedItemKey === item.key}\n item={item as SlashMenuItemInternal}\n key={item.key}\n onClick={() => {\n setSelectedItemKey(item.key)\n selectItemAndCleanUp(item)\n }}\n onMouseEnter={() => {\n setSelectedItemKey(item.key)\n }}\n />\n ))}\n </div>\n )\n })}\n </div>,\n anchorElementRef.current,\n )\n : null\n }\n onQueryChange={setQueryString}\n onSelectItem={onSelectItem}\n triggerFn={checkForTriggerMatch}\n />\n )\n}\n", "'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useCallback } from 'react'\n\nimport { PUNCTUATION } from './LexicalTypeaheadMenuPlugin/index.js'\n\nexport type TriggerFn = ({\n editor,\n query,\n}: {\n editor: LexicalEditor\n /** The query string is the POTENTIAL trigger AND the text after the trigger text. */\n query: string\n}) => MenuTextMatch | null\n\nexport type MenuTextMatch = {\n leadOffset: number\n matchingString: string\n replaceableString: string\n}\n\n/**\n * Returns a function which checks if the trigger (e.g. '/') is present in the query and, if so, returns the matching string (text after the trigger)\n */\nexport function useMenuTriggerMatch(\n /**\n * Text which triggers the menu. Everything after this text will be used as the query.\n */\n trigger: string,\n { maxLength = 75, minLength = 1 }: { maxLength?: number; minLength?: number },\n): TriggerFn {\n return useCallback(\n ({ query }) => {\n const validChars = '[^' + trigger + PUNCTUATION + '\\\\s]'\n const TypeaheadTriggerRegex = new RegExp(\n '(^|\\\\s|\\\\()(' +\n '[' +\n trigger +\n ']' +\n '((?:' +\n validChars +\n '){0,' +\n maxLength +\n '})' +\n ')$',\n )\n const match = TypeaheadTriggerRegex.exec(query)\n if (match !== null) {\n const maybeLeadingWhitespace = match[1]\n\n /**\n * matchingString is only the text AFTER the trigger text. (So everything after the /)\n */\n const matchingString = match[3]\n\n if (matchingString.length >= minLength) {\n return {\n leadOffset: match.index + maybeLeadingWhitespace.length,\n matchingString,\n replaceableString: match[2], // replaceableString is the trigger text + the matching string\n }\n }\n }\n return null\n },\n [maxLength, minLength, trigger],\n )\n}\n", "'use client'\nimport type { JSX } from 'react'\n\nimport { ContentEditable } from '@lexical/react/LexicalContentEditable.js'\nimport { useTranslation } from '@payloadcms/ui'\nimport * as React from 'react'\n\nimport './ContentEditable.scss'\n\nexport function LexicalContentEditable({ className }: { className?: string }): JSX.Element {\n const { t } = useTranslation<{}, string>()\n\n return (\n <ContentEditable\n aria-placeholder={t('lexical:general:placeholder')}\n className={className ?? 'ContentEditable__root'}\n placeholder={<p className=\"editor-placeholder\">{t('lexical:general:placeholder')}</p>}\n />\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["c", "_c", "FieldLabel", "useEditDepth", "useField", "withCondition", "ErrorBoundary", "LexicalComposer", "React", "useMemo", "c", "_c", "useLexicalComposerContext", "LexicalErrorBoundary", "HistoryPlugin", "OnChangePlugin", "RichTextPlugin", "TabIndentationPlugin", "BLUR_COMMAND", "COMMAND_PRIORITY_LOW", "FOCUS_COMMAND", "React", "useEffect", "useState", "EditorPlugin", "anchorElem", "clientProps", "plugin", "position", "Component", "_jsx", "useLexicalComposerContext", "$createParagraphNode", "React", "useCallback", "useEffect", "useRef", "useState", "createPortal", "calculateDistanceFromScrollerElem", "scrollerElem", "pageX", "pageY", "target", "horizontalBuffer", "verticalBuffer", "distanceFromScrollerElem", "contains", "bottom", "left", "right", "top", "getBoundingClientRect", "adjustedTop", "window", "scrollY", "adjustedBottom", "$getNodeByKey", "getBoundingClientRectWithoutTransform", "elem", "rect", "getBoundingClientRect", "transformValue", "getComputedStyle", "getPropertyValue", "lastNumberOfTransformValue", "split", "pop", "y", "Number", "replace", "getCollapsedMargins", "elem", "getMargin", "element", "margin", "parseFloat", "window", "getComputedStyle", "marginBottom", "marginTop", "prevElemSiblingMarginBottom", "previousElementSibling", "nextElemSiblingMarginTop", "nextElementSibling", "collapsedTopMargin", "Math", "max", "$getRoot", "getTopLevelNodeKeys", "editor", "getEditorState", "read", "getChildrenKeys", "Downward", "Upward", "Indeterminate", "cache", "props", "result", "isPointClose", "previous", "current", "threshold", "dx", "x", "dy", "y", "getNodeCloseToPoint", "anchorElem", "cache_threshold", "editor", "fuzzy", "horizontalOffset", "point", "startIndex", "useEdgeAsDefault", "anchorElementRect", "getBoundingClientRect", "topLevelNodeKeys", "getTopLevelNodeKeys", "closestBlockElem", "blockElem", "blockNode", "distance", "Infinity", "foundAtIndex", "isFoundNodeEmptyParagraph", "getEditorState", "read", "firstNode", "lastNode", "getElementByKey", "length", "firstNodeRect", "lastNodeRect", "getBoundingClientRectWithoutTransform", "top", "$getNodeByKey", "bottom", "index", "direction", "key", "elem", "Point", "domRect", "Rect", "fromDOMRect", "marginBottom", "marginTop", "getCollapsedMargins", "rect", "generateNewRect", "left", "right", "isOnBottomSide", "isOnTopSide", "distanceFromPoint", "getType", "getTextContent", "returnEmptyParagraphs", "isOnHandleElement", "element", "handleElementClassName", "closest", "replacedElements", "doesLineHeightAffectElement", "htmlElem", "includes", "tagName", "offsetHeight", "offsetWidth", "style", "window", "getComputedStyle", "display", "position", "visibility", "opacity", "setHandlePosition", "targetElem", "handleElem", "anchorElem", "leftOffset", "style", "opacity", "transform", "targetRect", "getBoundingClientRect", "targetStyle", "window", "getComputedStyle", "floatingElemRect", "anchorElementRect", "top", "some", "classes", "firstElementChild", "classList", "contains", "actualLineHeight", "doesLineHeightAffectElement", "parseInt", "lineHeight", "height", "left", "ADD_BLOCK_MENU_CLASSNAME", "prevIndex", "Infinity", "getCurrentIndex", "keysLength", "Math", "floor", "useAddBlockHandle", "editor", "anchorElem", "isEditable", "scrollerElem", "parentElement", "editorConfig", "useEditorConfigContext", "blockHandleHorizontalOffset", "admin", "hideGutter", "menuRef", "useRef", "hoveredElement", "setHoveredElement", "useState", "useEffect", "onDocumentMouseMove", "event", "target", "isHTMLElement", "distanceFromScrollerElem", "calculateDistanceFromScrollerElem", "pageX", "pageY", "isOnHandleElement", "topLevelNodeKeys", "getTopLevelNodeKeys", "blockElem", "_emptyBlockElem", "blockNode", "foundAtIndex", "getNodeCloseToPoint", "cache_threshold", "horizontalOffset", "point", "Point", "x", "y", "returnEmptyParagraphs", "startIndex", "length", "useEdgeAsDefault", "node", "elem", "document", "addEventListener", "removeEventListener", "current", "setHandlePosition", "handleAddClick", "useCallback", "hoveredElementToUse", "update", "isEmptyParagraph", "getType", "getTextContent", "newParagraph", "$createParagraphNode", "insertAfter", "setTimeout", "getElementByKey", "getKey", "focus", "select", "dispatchCommand", "ENABLE_SLASH_MENU_COMMAND", "stopPropagation", "preventDefault", "createPortal", "_jsx", "Fragment", "className", "onClick", "ref", "type", "AddBlockHandlePlugin", "t0", "t1", "undefined", "body", "useLexicalComposerContext", "_editable", "useLexicalComposerContext", "eventFiles", "$getNearestNodeFromDOMNode", "$getNodeByKey", "React", "useEffect", "useRef", "useState", "createPortal", "TARGET_LINE_HALF_HEIGHT", "TEXT_BOX_HORIZONTAL_PADDING", "animationTimer", "setTargetLine", "offsetWidth", "offsetLeft", "targetLineElem", "targetBlockElem", "lastTargetBlock", "mouseY", "anchorElem", "event", "debugHighlightRef", "isFoundNodeEmptyParagraph", "height", "targetBlockElemHeight", "top", "targetBlockElemTop", "getBoundingClientRect", "anchorTop", "width", "anchorWidth", "marginBottom", "marginTop", "getCollapsedMargins", "lineTop", "isBelow", "window", "scrollY", "willStayInSamePosition", "elem", "nextElementSibling", "previousElementSibling", "lastBoundingBoxPosition", "boundingBox", "y", "currentBoundingBoxPosition", "targetElemTranslate2", "TARGET_LINE_HALF_HEIGHT", "left", "TEXT_BOX_HORIZONTAL_PADDING", "style", "opacity", "transform", "DRAGGABLE_BLOCK_MENU_CLASSNAME", "DRAG_DATA_FORMAT", "prevIndex", "Infinity", "getCurrentIndex", "keysLength", "Math", "floor", "setDragImage", "dataTransfer", "draggableBlockElem", "transform", "style", "setTimeout", "hideTargetLine", "targetLineElem", "lastTargetBlockElem", "opacity", "marginBottom", "marginTop", "useDraggableBlockMenu", "editor", "anchorElem", "isEditable", "scrollerElem", "parentElement", "menuRef", "useRef", "targetLineRef", "debugHighlightRef", "isDraggingBlockRef", "setDraggableBlockElem", "useState", "lastTargetBlock", "setLastTargetBlock", "editorConfig", "useEditorConfigContext", "blockHandleHorizontalOffset", "admin", "hideGutter", "useEffect", "onDocumentMouseMove", "event", "target", "isHTMLElement", "distanceFromScrollerElem", "calculateDistanceFromScrollerElem", "pageX", "pageY", "isOnHandleElement", "topLevelNodeKeys", "getTopLevelNodeKeys", "blockElem", "_draggableBlockElem", "foundAtIndex", "isFoundNodeEmptyParagraph", "getNodeCloseToPoint", "cache_threshold", "horizontalOffset", "point", "Point", "x", "y", "startIndex", "length", "useEdgeAsDefault", "verbose", "document", "addEventListener", "removeEventListener", "current", "setHandlePosition", "onDragover", "isFileTransfer", "eventFiles", "targetBlockElem", "fuzzy", "isBelow", "willStayInSamePosition", "setTargetLine", "getBoundingClientRect", "width", "preventDefault", "boundingBox", "elem", "onDrop", "dragData", "getData", "update", "draggedNode", "$getNodeByKey", "targetNode", "$getNearestNodeFromDOMNode", "height", "targetBlockElemHeight", "top", "targetBlockElemTop", "getBoundingClientRectWithoutTransform", "window", "scrollY", "insertBefore", "remove", "insertAfter", "querySelectorAll", "forEach", "highlighter", "newInsertedElem", "getElementByKey", "getKey", "newInsertedElemRect", "highlightElem", "createElement", "className", "backgroundColor", "transition", "zIndex", "pointerEvents", "boxSizing", "borderRadius", "position", "body", "appendChild", "left", "onDragStart", "nodeKey", "node", "setData", "onDragEnd", "createPortal", "_jsxs", "Fragment", "_jsx", "draggable", "ref", "DraggableBlockPlugin", "t0", "t1", "undefined", "useLexicalComposerContext", "_editable", "c", "_c", "MarkdownShortcutPlugin", "LexicalMarkdownShortcutPlugin", "MarkdownShortcutPlugin", "$", "_c", "editorConfig", "useEditorConfigContext", "t0", "features", "markdownTransformers", "_jsx", "LexicalMarkdownShortcutPlugin", "transformers", "useLexicalComposerContext", "useTranslation", "useCallback", "useMemo", "useState", "ReactDOM", "c", "_c", "useMenuTriggerMatch", "trigger", "t0", "$", "_c", "maxLength", "t1", "minLength", "t2", "undefined", "t3", "t4", "query", "validChars", "PUNCTUATION", "match", "RegExp", "exec", "maybeLeadingWhitespace", "matchingString", "length", "leadOffset", "index", "replaceableString", "baseClass", "SlashMenuItem", "isSelected", "item", "onClick", "onMouseEnter", "fieldProps", "featureClientSchemaMap", "schemaPath", "useEditorConfigContext", "i18n", "useTranslation", "className", "key", "title", "label", "length", "substring", "_jsxs", "id", "ref", "element", "current", "role", "tabIndex", "type", "Icon", "_jsx", "SlashMenuPlugin", "anchorElem", "document", "body", "editor", "useLexicalComposerContext", "queryString", "setQueryString", "useState", "editorConfig", "checkForTriggerMatch", "useMenuTriggerMatch", "minLength", "getDynamicItems", "useCallback", "groupWithItems", "dynamicItem", "features", "slashMenu", "dynamicGroups", "dynamicGroupWithItems", "concat", "groups", "useMemo", "groupsWithItems", "groupWithItem", "push", "map", "group", "filteredItems", "items", "filter", "itemTitle", "RegExp", "exec", "keywords", "some", "keyword", "dynamicItemGroups", "dynamicGroup", "find", "onSelectItem", "selectedItem", "closeMenu", "matchingString", "onSelect", "LexicalTypeaheadMenuPlugin", "menuRenderFn", "anchorElementRef", "selectedItemKey", "selectItemAndCleanUp", "setSelectedItemKey", "createPortal", "groupTitle", "oi", "index", "onQueryChange", "triggerFn", "c", "_c", "ContentEditable", "useTranslation", "LexicalContentEditable", "t0", "$", "className", "t", "t1", "_jsx", "placeholder", "children", "LexicalEditor", "props", "$", "_c", "editorConfig", "editorContainerRef", "onChange", "editorConfigContext", "useEditorConfigContext", "editor", "useLexicalComposerContext", "floatingAnchorElem", "setFloatingAnchorElem", "useState", "t0", "Symbol", "for", "_floatingAnchorElem", "onRef", "t1", "t2", "uuid", "console", "error", "parentEditor", "registerChild", "handleFocus", "focusEditor", "handleBlur", "blurEditor", "unregisterFocus", "registerCommand", "FOCUS_COMMAND", "COMMAND_PRIORITY_LOW", "unregisterBlur", "BLUR_COMMAND", "unregisterChild", "useEffect", "isSmallWidthViewport", "setIsSmallWidthViewport", "t3", "t4", "updateViewPortWidth", "isNextSmallWidthViewport", "window", "matchMedia", "matches", "addEventListener", "removeEventListener", "t5", "features", "t6", "editorState", "editor_0", "tags", "has", "size", "t7", "_jsxs", "Fragment", "children", "isEditable", "_jsx", "DraggableBlockPlugin", "anchorElem", "AddBlockHandlePlugin", "plugins", "map", "plugin_1", "plugin", "position", "desktopOnly", "EditorPlugin", "clientProps", "key", "SlashMenuPlugin", "_temp", "className", "ref", "_temp2", "RichTextPlugin", "contentEditable", "LexicalContentEditable", "OnChangePlugin", "ignoreSelectionChange", "HistoryPlugin", "markdownTransformers", "length", "MarkdownShortcutPlugin", "TabIndentationPlugin", "_temp3", "_temp4", "_temp5", "plugin_0", "plugin_2", "plugin_3", "plugin_4", "NestProviders", "children", "providers", "length", "Component", "_jsx", "slice", "LexicalProvider", "props", "composerKey", "editorConfig", "fieldProps", "onChange", "readOnly", "value", "parentContext", "useEditorConfigContext", "editorContainerRef", "useRef", "initialConfig", "useMemo", "Error", "JSON", "stringify", "Array", "isArray", "editable", "editorState", "undefined", "namespace", "lexical", "nodes", "getEnabledNodes", "onError", "error", "theme", "LexicalComposer", "EditorConfigProvider", "features", "LexicalEditorComponent", "baseClass", "RichTextComponent", "props", "$", "_c", "editorConfig", "field", "t0", "path", "pathFromProps", "readOnly", "readOnlyFromTopLevelProps", "validate", "name", "admin", "t1", "label", "localized", "required", "t2", "undefined", "className", "readOnlyFromAdmin", "style", "width", "readOnlyFromProps", "editDepth", "useEditDepth", "t3", "value", "validationOptions", "memoizedValidate", "t4", "customComponents", "t5", "formInitializing", "formProcessing", "initialValue", "setValue", "showError", "value_0", "useField", "t6", "AfterInput", "BeforeInput", "Description", "Error", "Label", "disabled", "t7", "t8", "t9", "hideGutter", "t10", "filter", "Boolean", "classes", "join", "pathWithEditDepth", "t11", "editorState", "toJSON", "handleChange", "t12", "t13", "_jsx", "FieldLabel", "_jsxs", "children", "ErrorBoundary", "fallbackRender", "onReset", "_temp", "LexicalProvider", "composerKey", "fieldProps", "onChange", "JSON", "stringify", "error", "role", "color", "message", "RichText", "withCondition"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";import{a as S,d as w}from"./chunk-MI5HS4QX.js";import{a as x}from"./chunk-5PBXL4HT.js";import{b as E}from"./chunk-CUIBIFW2.js";import{jsx as l,jsxs as h}from"react/jsx-runtime";import{useLexicalComposerContext as W}from"@lexical/react/LexicalComposerContext.js";import{useLexicalNodeSelection as Y}from"@lexical/react/useLexicalNodeSelection.js";import{mergeRegister as H}from"@lexical/utils";import{getTranslation as U}from"@payloadcms/translations";import{Button as A,useConfig as q,usePayloadAPI as z,useTranslation as F}from"@payloadcms/ui";import{$getNodeByKey as G,$getSelection as J,$isNodeSelection as Q,CLICK_COMMAND as V,COMMAND_PRIORITY_LOW as C,KEY_BACKSPACE_COMMAND as X,KEY_DELETE_COMMAND as Z}from"lexical";import ee,{useCallback as _,useEffect as te,useReducer as oe,useRef as se,useState as le}from"react";var o="lexical-relationship",T={depth:0},ne=u=>{let{data:{relationTo:M,value:r},nodeKey:n}=u;if(typeof r=="object")throw new Error("Relationship value should be a string or number. The Lexical Relationship component should not receive the populated value object.");let d=se(null),[e]=W(),[s,c,m]=Y(n),{fieldProps:{readOnly:g}}=E(),{config:{collections:y,routes:{api:L},serverURL:O}}=q(),[i,ie]=le(()=>y.find(t=>t.slug===M)),{i18n:B,t:p}=F(),[R,I]=oe(t=>t+1,0),[{data:b},{setParams:N}]=z(`${O}${L}/${i.slug}/${r}`,{initialParams:T}),{closeDocumentDrawer:v,DocumentDrawer:P,DocumentDrawerToggler:j}=x({id:r,collectionSlug:i.slug}),K=_(()=>{e.update(()=>{G(n)?.remove()})},[e,n]),k=ee.useCallback(({doc:t})=>{N({...T,cacheBust:R}),v(),I()},[R,N,v]),f=_(t=>{let a=J();return s&&Q(a)&&(t.preventDefault(),e.update(()=>{a.getNodes().forEach($=>{w($)&&$.remove()})})),!1},[e,s]),D=_(t=>{let a=t;return a.target===d.current||d.current?.contains(a.target)?(a.shiftKey?c(!s):s||(m(),c(!0)),!0):!1},[s,c,m]);return te(()=>H(e.registerCommand(V,D,C),e.registerCommand(Z,f,C),e.registerCommand(X,f,C)),[m,e,s,n,f,c,D]),h("div",{className:[o,s&&`${o}--selected`].filter(Boolean).join(" "),contentEditable:!1,ref:d,children:[h("div",{className:`${o}__wrap`,children:[l("p",{className:`${o}__label`,children:p("fields:labelRelationship",{label:i.labels?.singular?U(i.labels?.singular,B):i.slug})}),l(j,{className:`${o}__doc-drawer-toggler`,children:l("p",{className:`${o}__title`,children:b?b[i?.admin?.useAsTitle||"id"]:r})})]}),e.isEditable()&&h("div",{className:`${o}__actions`,children:[l(A,{buttonStyle:"icon-label",className:`${o}__swapButton`,disabled:g,el:"button",icon:"swap",onClick:()=>{n&&e.dispatchCommand(S,{replace:{nodeKey:n}})},round:!0,tooltip:p("fields:swapRelationship")}),l(A,{buttonStyle:"icon-label",className:`${o}__removeButton`,disabled:g,icon:"x",onClick:t=>{t.preventDefault(),K()},round:!0,tooltip:p("fields:removeRelationship")})]}),!!r&&l(P,{onSave:k})]})},be=u=>l(ne,{...u});export{be as RelationshipComponent};
|
|
2
|
+
//# sourceMappingURL=RelationshipComponent-2RT3YXUT.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/features/relationship/client/components/RelationshipComponent.tsx"],
|
|
4
|
+
"sourcesContent": ["'use client'\nimport type { ElementFormatType } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection.js'\nimport { mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport { Button, useConfig, usePayloadAPI, useTranslation } from '@payloadcms/ui'\nimport {\n $getNodeByKey,\n $getSelection,\n $isNodeSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_LOW,\n KEY_BACKSPACE_COMMAND,\n KEY_DELETE_COMMAND,\n} from 'lexical'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\n\nimport type { RelationshipData } from '../../server/nodes/RelationshipNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDocumentDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDocumentDrawer.js'\nimport { INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND } from '../drawer/commands.js'\nimport { $isRelationshipNode } from '../nodes/RelationshipNode.js'\nimport './index.scss'\n\nconst baseClass = 'lexical-relationship'\n\nconst initialParams = {\n depth: 0,\n}\n\ntype Props = {\n className?: string\n data: RelationshipData\n format?: ElementFormatType\n nodeKey?: string\n}\n\nconst Component: React.FC<Props> = (props) => {\n const {\n data: { relationTo, value },\n nodeKey,\n } = props\n\n if (typeof value === 'object') {\n throw new Error(\n 'Relationship value should be a string or number. The Lexical Relationship component should not receive the populated value object.',\n )\n }\n\n const relationshipElemRef = useRef<HTMLDivElement | null>(null)\n\n const [editor] = useLexicalComposerContext()\n const [isSelected, setSelected, clearSelection] = useLexicalNodeSelection(nodeKey!)\n const {\n fieldProps: { readOnly },\n } = useEditorConfigContext()\n const {\n config: {\n collections,\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const [relatedCollection, setRelatedCollection] = useState(\n () => collections.find((coll) => coll.slug === relationTo)!,\n )\n\n const { i18n, t } = useTranslation()\n const [cacheBust, dispatchCacheBust] = useReducer((state) => state + 1, 0)\n const [{ data }, { setParams }] = usePayloadAPI(\n `${serverURL}${api}/${relatedCollection.slug}/${value}`,\n { initialParams },\n )\n\n const { closeDocumentDrawer, DocumentDrawer, DocumentDrawerToggler } = useLexicalDocumentDrawer({\n id: value,\n collectionSlug: relatedCollection.slug,\n })\n\n const removeRelationship = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey!)?.remove()\n })\n }, [editor, nodeKey])\n\n const updateRelationship = React.useCallback(\n ({ doc }) => {\n setParams({\n ...initialParams,\n cacheBust, // do this to get the usePayloadAPI to re-fetch the data even though the URL string hasn't changed\n })\n\n closeDocumentDrawer()\n dispatchCacheBust()\n },\n [cacheBust, setParams, closeDocumentDrawer],\n )\n\n const $onDelete = useCallback(\n (payload: KeyboardEvent) => {\n const deleteSelection = $getSelection()\n if (isSelected && $isNodeSelection(deleteSelection)) {\n const event: KeyboardEvent = payload\n event.preventDefault()\n editor.update(() => {\n deleteSelection.getNodes().forEach((node) => {\n if ($isRelationshipNode(node)) {\n node.remove()\n }\n })\n })\n }\n return false\n },\n [editor, isSelected],\n )\n const onClick = useCallback(\n (payload: MouseEvent) => {\n const event = payload\n // Check if relationshipElemRef.target or anything WITHIN relationshipElemRef.target was clicked\n if (\n event.target === relationshipElemRef.current ||\n relationshipElemRef.current?.contains(event.target as Node)\n ) {\n if (event.shiftKey) {\n setSelected(!isSelected)\n } else {\n if (!isSelected) {\n clearSelection()\n setSelected(true)\n }\n }\n return true\n }\n\n return false\n },\n [isSelected, setSelected, clearSelection],\n )\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<MouseEvent>(CLICK_COMMAND, onClick, COMMAND_PRIORITY_LOW),\n\n editor.registerCommand(KEY_DELETE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n editor.registerCommand(KEY_BACKSPACE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n )\n }, [clearSelection, editor, isSelected, nodeKey, $onDelete, setSelected, onClick])\n\n return (\n <div\n className={[baseClass, isSelected && `${baseClass}--selected`].filter(Boolean).join(' ')}\n contentEditable={false}\n ref={relationshipElemRef}\n >\n <div className={`${baseClass}__wrap`}>\n <p className={`${baseClass}__label`}>\n {t('fields:labelRelationship', {\n label: relatedCollection.labels?.singular\n ? getTranslation(relatedCollection.labels?.singular, i18n)\n : relatedCollection.slug,\n })}\n </p>\n <DocumentDrawerToggler className={`${baseClass}__doc-drawer-toggler`}>\n <p className={`${baseClass}__title`}>\n {data ? data[relatedCollection?.admin?.useAsTitle || 'id'] : value}\n </p>\n </DocumentDrawerToggler>\n </div>\n {editor.isEditable() && (\n <div className={`${baseClass}__actions`}>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__swapButton`}\n disabled={readOnly}\n el=\"button\"\n icon=\"swap\"\n onClick={() => {\n if (nodeKey) {\n editor.dispatchCommand(INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND, {\n replace: { nodeKey },\n })\n }\n }}\n round\n tooltip={t('fields:swapRelationship')}\n />\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeRelationship()\n }}\n round\n tooltip={t('fields:removeRelationship')}\n />\n </div>\n )}\n\n {!!value && <DocumentDrawer onSave={updateRelationship} />}\n </div>\n )\n}\n\nexport const RelationshipComponent = (props: Props): React.ReactNode => {\n return <Component {...props} />\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["useLexicalComposerContext", "useLexicalNodeSelection", "mergeRegister", "getTranslation", "Button", "useConfig", "usePayloadAPI", "useTranslation", "$getNodeByKey", "$getSelection", "$isNodeSelection", "CLICK_COMMAND", "COMMAND_PRIORITY_LOW", "KEY_BACKSPACE_COMMAND", "KEY_DELETE_COMMAND", "React", "useCallback", "useEffect", "useReducer", "useRef", "useState", "baseClass", "initialParams", "depth", "Component", "props", "data", "relationTo", "value", "nodeKey", "Error", "relationshipElemRef", "useRef", "editor", "useLexicalComposerContext", "isSelected", "setSelected", "clearSelection", "useLexicalNodeSelection", "fieldProps", "readOnly", "useEditorConfigContext", "config", "collections", "routes", "api", "serverURL", "useConfig", "relatedCollection", "setRelatedCollection", "useState", "find", "coll", "slug", "i18n", "t", "useTranslation", "cacheBust", "dispatchCacheBust", "useReducer", "state", "setParams", "usePayloadAPI", "closeDocumentDrawer", "DocumentDrawer", "DocumentDrawerToggler", "useLexicalDocumentDrawer", "id", "collectionSlug", "removeRelationship", "useCallback", "update", "$getNodeByKey", "remove", "updateRelationship", "React", "doc", "$onDelete", "payload", "deleteSelection", "$getSelection", "$isNodeSelection", "preventDefault", "getNodes", "forEach", "node", "$isRelationshipNode", "onClick", "event", "target", "current", "contains", "shiftKey", "useEffect", "mergeRegister", "registerCommand", "CLICK_COMMAND", "COMMAND_PRIORITY_LOW", "KEY_DELETE_COMMAND", "KEY_BACKSPACE_COMMAND", "_jsxs", "className", "filter", "Boolean", "join", "contentEditable", "ref", "_jsx", "label", "labels", "singular", "getTranslation", "admin", "useAsTitle", "isEditable", "Button", "buttonStyle", "disabled", "el", "icon", "dispatchCommand", "INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND", "replace", "round", "tooltip", "e", "onSave", "RelationshipComponent"]
|
|
7
|
+
}
|