@payloadcms/richtext-lexical 3.0.0-alpha.41 → 3.0.0-alpha.43
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/components.js +1 -1
- package/dist/cell/index.js +1 -1
- package/dist/cell/index.js.map +1 -0
- package/dist/exports/components.js +1 -1
- package/dist/exports/components.js.map +1 -0
- package/dist/field/Field.js +1 -1
- package/dist/field/Field.js.map +1 -0
- package/dist/field/features/align/feature.client.js +1 -1
- package/dist/field/features/align/feature.client.js.map +1 -0
- package/dist/field/features/align/feature.server.js +1 -1
- package/dist/field/features/align/feature.server.js.map +1 -0
- package/dist/field/features/align/floatingSelectToolbarAlignDropdownSection.js +1 -1
- package/dist/field/features/align/floatingSelectToolbarAlignDropdownSection.js.map +1 -0
- package/dist/field/features/blockquote/feature.client.js +1 -1
- package/dist/field/features/blockquote/feature.client.js.map +1 -0
- package/dist/field/features/blockquote/feature.server.js +1 -1
- package/dist/field/features/blockquote/feature.server.js.map +1 -0
- package/dist/field/features/blockquote/markdownTransformer.js +1 -1
- package/dist/field/features/blockquote/markdownTransformer.js.map +1 -0
- package/dist/field/features/blocks/component/BlockContent.js +1 -1
- package/dist/field/features/blocks/component/BlockContent.js.map +1 -0
- package/dist/field/features/blocks/component/FormSavePlugin.js +1 -1
- package/dist/field/features/blocks/component/FormSavePlugin.js.map +1 -0
- package/dist/field/features/blocks/component/index.js +1 -1
- package/dist/field/features/blocks/component/index.js.map +1 -0
- package/dist/field/features/blocks/drawer/index.js +1 -1
- package/dist/field/features/blocks/drawer/index.js.map +1 -0
- package/dist/field/features/blocks/feature.client.js +1 -1
- package/dist/field/features/blocks/feature.client.js.map +1 -0
- package/dist/field/features/blocks/feature.server.js +1 -1
- package/dist/field/features/blocks/feature.server.js.map +1 -0
- package/dist/field/features/blocks/nodes/BlocksNode.js +1 -1
- package/dist/field/features/blocks/nodes/BlocksNode.js.map +1 -0
- package/dist/field/features/blocks/plugin/commands.js +1 -1
- package/dist/field/features/blocks/plugin/commands.js.map +1 -0
- package/dist/field/features/blocks/plugin/index.js +1 -1
- package/dist/field/features/blocks/plugin/index.js.map +1 -0
- package/dist/field/features/blocks/populationPromise.js +1 -1
- package/dist/field/features/blocks/populationPromise.js.map +1 -0
- package/dist/field/features/blocks/validate.js +1 -1
- package/dist/field/features/blocks/validate.js.map +1 -0
- package/dist/field/features/common/floatingSelectToolbarFeaturesButtonsSection/index.js +1 -1
- package/dist/field/features/common/floatingSelectToolbarFeaturesButtonsSection/index.js.map +1 -0
- package/dist/field/features/common/floatingSelectToolbarTextDropdownSection/index.js +1 -1
- package/dist/field/features/common/floatingSelectToolbarTextDropdownSection/index.js.map +1 -0
- package/dist/field/features/converters/html/converter/converters/linebreak.js +1 -1
- package/dist/field/features/converters/html/converter/converters/linebreak.js.map +1 -0
- package/dist/field/features/converters/html/converter/converters/paragraph.js +1 -1
- package/dist/field/features/converters/html/converter/converters/paragraph.js.map +1 -0
- package/dist/field/features/converters/html/converter/converters/text.js +1 -1
- package/dist/field/features/converters/html/converter/converters/text.js.map +1 -0
- package/dist/field/features/converters/html/converter/defaultConverters.js +1 -1
- package/dist/field/features/converters/html/converter/defaultConverters.js.map +1 -0
- package/dist/field/features/converters/html/converter/index.js +1 -1
- package/dist/field/features/converters/html/converter/index.js.map +1 -0
- package/dist/field/features/converters/html/converter/types.js +1 -1
- package/dist/field/features/converters/html/converter/types.js.map +1 -0
- package/dist/field/features/converters/html/feature.server.js +1 -1
- package/dist/field/features/converters/html/feature.server.js.map +1 -0
- package/dist/field/features/converters/html/field/index.js +1 -1
- package/dist/field/features/converters/html/field/index.js.map +1 -0
- package/dist/field/features/createClientComponent.js +1 -1
- package/dist/field/features/createClientComponent.js.map +1 -0
- package/dist/field/features/createFeaturePropComponent.js +1 -1
- package/dist/field/features/createFeaturePropComponent.js.map +1 -0
- package/dist/field/features/debug/testrecorder/feature.client.js +1 -1
- package/dist/field/features/debug/testrecorder/feature.client.js.map +1 -0
- package/dist/field/features/debug/testrecorder/feature.server.js +1 -1
- package/dist/field/features/debug/testrecorder/feature.server.js.map +1 -0
- package/dist/field/features/debug/testrecorder/plugin/index.js +1 -1
- package/dist/field/features/debug/testrecorder/plugin/index.js.map +1 -0
- package/dist/field/features/debug/treeview/feature.client.js +1 -1
- package/dist/field/features/debug/treeview/feature.client.js.map +1 -0
- package/dist/field/features/debug/treeview/feature.server.js +1 -1
- package/dist/field/features/debug/treeview/feature.server.js.map +1 -0
- package/dist/field/features/debug/treeview/plugin/index.js +1 -1
- package/dist/field/features/debug/treeview/plugin/index.js.map +1 -0
- package/dist/field/features/format/bold/feature.client.js +1 -1
- package/dist/field/features/format/bold/feature.client.js.map +1 -0
- package/dist/field/features/format/bold/feature.server.js +1 -1
- package/dist/field/features/format/bold/feature.server.js.map +1 -0
- package/dist/field/features/format/bold/markdownTransformers.js +1 -1
- package/dist/field/features/format/bold/markdownTransformers.js.map +1 -0
- package/dist/field/features/format/common/floatingSelectToolbarSection.js +1 -1
- package/dist/field/features/format/common/floatingSelectToolbarSection.js.map +1 -0
- package/dist/field/features/format/inlinecode/feature.client.js +1 -1
- package/dist/field/features/format/inlinecode/feature.client.js.map +1 -0
- package/dist/field/features/format/inlinecode/feature.server.js +1 -1
- package/dist/field/features/format/inlinecode/feature.server.js.map +1 -0
- package/dist/field/features/format/inlinecode/markdownTransformers.js +1 -1
- package/dist/field/features/format/inlinecode/markdownTransformers.js.map +1 -0
- package/dist/field/features/format/italic/feature.client.js +1 -1
- package/dist/field/features/format/italic/feature.client.js.map +1 -0
- package/dist/field/features/format/italic/feature.server.js +1 -1
- package/dist/field/features/format/italic/feature.server.js.map +1 -0
- package/dist/field/features/format/italic/markdownTransformers.js +1 -1
- package/dist/field/features/format/italic/markdownTransformers.js.map +1 -0
- package/dist/field/features/format/strikethrough/feature.client.js +1 -1
- package/dist/field/features/format/strikethrough/feature.client.js.map +1 -0
- package/dist/field/features/format/strikethrough/feature.server.js +1 -1
- package/dist/field/features/format/strikethrough/feature.server.js.map +1 -0
- package/dist/field/features/format/strikethrough/markdownTransformers.js +1 -1
- package/dist/field/features/format/strikethrough/markdownTransformers.js.map +1 -0
- package/dist/field/features/format/subscript/feature.client.js +1 -1
- package/dist/field/features/format/subscript/feature.client.js.map +1 -0
- package/dist/field/features/format/subscript/feature.server.js +1 -1
- package/dist/field/features/format/subscript/feature.server.js.map +1 -0
- package/dist/field/features/format/superscript/feature.client.js +1 -1
- package/dist/field/features/format/superscript/feature.client.js.map +1 -0
- package/dist/field/features/format/superscript/feature.server.js +1 -1
- package/dist/field/features/format/superscript/feature.server.js.map +1 -0
- package/dist/field/features/format/underline/feature.client.js +1 -1
- package/dist/field/features/format/underline/feature.client.js.map +1 -0
- package/dist/field/features/format/underline/feature.server.js +1 -1
- package/dist/field/features/format/underline/feature.server.js.map +1 -0
- package/dist/field/features/heading/feature.client.js +1 -1
- package/dist/field/features/heading/feature.client.js.map +1 -0
- package/dist/field/features/heading/feature.server.js +1 -1
- package/dist/field/features/heading/feature.server.js.map +1 -0
- package/dist/field/features/heading/markdownTransformer.js +1 -1
- package/dist/field/features/heading/markdownTransformer.js.map +1 -0
- package/dist/field/features/indent/feature.client.js +1 -1
- package/dist/field/features/indent/feature.client.js.map +1 -0
- package/dist/field/features/indent/feature.server.js +1 -1
- package/dist/field/features/indent/feature.server.js.map +1 -0
- package/dist/field/features/indent/floatingSelectToolbarIndentSection.js +1 -1
- package/dist/field/features/indent/floatingSelectToolbarIndentSection.js.map +1 -0
- package/dist/field/features/link/drawer/baseFields.js +1 -1
- package/dist/field/features/link/drawer/baseFields.js.map +1 -0
- package/dist/field/features/link/drawer/index.js +1 -1
- package/dist/field/features/link/drawer/index.js.map +1 -0
- package/dist/field/features/link/drawer/types.js +1 -1
- package/dist/field/features/link/drawer/types.js.map +1 -0
- package/dist/field/features/link/feature.client.js +1 -1
- package/dist/field/features/link/feature.client.js.map +1 -0
- package/dist/field/features/link/feature.server.js +1 -1
- package/dist/field/features/link/feature.server.js.map +1 -0
- package/dist/field/features/link/nodes/AutoLinkNode.js +1 -1
- package/dist/field/features/link/nodes/AutoLinkNode.js.map +1 -0
- package/dist/field/features/link/nodes/LinkNode.js +1 -1
- package/dist/field/features/link/nodes/LinkNode.js.map +1 -0
- package/dist/field/features/link/nodes/types.js +1 -1
- package/dist/field/features/link/nodes/types.js.map +1 -0
- package/dist/field/features/link/plugins/autoLink/index.js +1 -1
- package/dist/field/features/link/plugins/autoLink/index.js.map +1 -0
- package/dist/field/features/link/plugins/clickableLink/index.js +1 -1
- package/dist/field/features/link/plugins/clickableLink/index.js.map +1 -0
- package/dist/field/features/link/plugins/floatingLinkEditor/LinkEditor/commands.js +1 -1
- package/dist/field/features/link/plugins/floatingLinkEditor/LinkEditor/commands.js.map +1 -0
- package/dist/field/features/link/plugins/floatingLinkEditor/LinkEditor/index.js +1 -1
- package/dist/field/features/link/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -0
- package/dist/field/features/link/plugins/floatingLinkEditor/index.js +1 -1
- package/dist/field/features/link/plugins/floatingLinkEditor/index.js.map +1 -0
- package/dist/field/features/link/plugins/floatingLinkEditor/types.js +1 -1
- package/dist/field/features/link/plugins/floatingLinkEditor/types.js.map +1 -0
- package/dist/field/features/link/plugins/floatingLinkEditor/utilities.js +1 -1
- package/dist/field/features/link/plugins/floatingLinkEditor/utilities.js.map +1 -0
- package/dist/field/features/link/plugins/link/index.js +1 -1
- package/dist/field/features/link/plugins/link/index.js.map +1 -0
- package/dist/field/features/link/populationPromise.js +1 -1
- package/dist/field/features/link/populationPromise.js.map +1 -0
- package/dist/field/features/lists/checklist/feature.client.js +1 -1
- package/dist/field/features/lists/checklist/feature.client.js.map +1 -0
- package/dist/field/features/lists/checklist/feature.server.js +1 -1
- package/dist/field/features/lists/checklist/feature.server.js.map +1 -0
- package/dist/field/features/lists/checklist/markdownTransformers.js +1 -1
- package/dist/field/features/lists/checklist/markdownTransformers.js.map +1 -0
- package/dist/field/features/lists/checklist/plugin/index.js +1 -1
- package/dist/field/features/lists/checklist/plugin/index.js.map +1 -0
- package/dist/field/features/lists/common/markdown.js +1 -1
- package/dist/field/features/lists/common/markdown.js.map +1 -0
- package/dist/field/features/lists/htmlConverter.js +1 -1
- package/dist/field/features/lists/htmlConverter.js.map +1 -0
- package/dist/field/features/lists/orderedlist/feature.client.js +1 -1
- package/dist/field/features/lists/orderedlist/feature.client.js.map +1 -0
- package/dist/field/features/lists/orderedlist/feature.server.js +1 -1
- package/dist/field/features/lists/orderedlist/feature.server.js.map +1 -0
- package/dist/field/features/lists/orderedlist/markdownTransformer.js +1 -1
- package/dist/field/features/lists/orderedlist/markdownTransformer.js.map +1 -0
- package/dist/field/features/lists/plugin/index.js +1 -1
- package/dist/field/features/lists/plugin/index.js.map +1 -0
- package/dist/field/features/lists/unorderedlist/feature.client.js +1 -1
- package/dist/field/features/lists/unorderedlist/feature.client.js.map +1 -0
- package/dist/field/features/lists/unorderedlist/feature.server.js +1 -1
- package/dist/field/features/lists/unorderedlist/feature.server.js.map +1 -0
- package/dist/field/features/lists/unorderedlist/markdownTransformer.js +1 -1
- package/dist/field/features/lists/unorderedlist/markdownTransformer.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/heading/client.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/heading/client.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/heading/converter.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/heading/converter.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/heading/index.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/heading/index.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/link/client.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/link/client.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/link/converter.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/link/converter.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/link/index.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/link/index.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/list/client.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/list/client.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/list/converter.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/list/converter.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/list/index.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/list/index.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/listItem/client.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/listItem/client.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/listItem/converter.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/listItem/converter.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/listItem/index.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/listItem/index.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/quote/client.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/quote/client.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/quote/converter.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/quote/converter.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/quote/index.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/quote/index.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/unknown/client.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/unknown/client.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/unknown/converter.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/unknown/converter.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/unknown/index.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/unknown/index.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/upload/client.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/upload/client.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/upload/converter.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/upload/converter.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/upload/index.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/converters/upload/index.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/defaultConverters.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/defaultConverters.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/index.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/index.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/types.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/converter/types.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/feature.client.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/feature.client.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/feature.server.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/feature.server.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/Component.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/Component.js.map +1 -0
- package/dist/field/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.js +1 -1
- package/dist/field/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/blockquote/client.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/blockquote/client.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/blockquote/converter.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/blockquote/converter.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/blockquote/index.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/blockquote/index.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/heading/client.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/heading/client.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/heading/converter.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/heading/converter.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/heading/index.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/heading/index.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/indent/client.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/indent/client.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/indent/converter.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/indent/converter.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/indent/index.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/indent/index.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/link/client.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/link/client.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/link/converter.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/link/converter.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/link/index.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/link/index.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/listItem/client.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/listItem/client.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/listItem/converter.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/listItem/converter.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/listItem/index.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/listItem/index.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/orderedList/client.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/orderedList/client.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/orderedList/converter.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/orderedList/converter.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/orderedList/index.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/orderedList/index.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/relationship/client.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/relationship/client.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/relationship/converter.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/relationship/converter.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/relationship/index.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/relationship/index.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/unknown/client.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/unknown/client.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/unknown/converter.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/unknown/converter.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/unknown/index.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/unknown/index.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/unorderedList/client.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/unorderedList/client.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/unorderedList/converter.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/unorderedList/converter.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/unorderedList/index.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/unorderedList/index.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/upload/client.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/upload/client.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/upload/converter.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/upload/converter.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/converters/upload/index.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/converters/upload/index.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/defaultConverters.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/defaultConverters.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/index.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/index.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/converter/types.js +1 -1
- package/dist/field/features/migrations/slateToLexical/converter/types.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/feature.client.js +1 -1
- package/dist/field/features/migrations/slateToLexical/feature.client.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/feature.server.js +1 -1
- package/dist/field/features/migrations/slateToLexical/feature.server.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/nodes/unknownConvertedNode/Component.js +1 -1
- package/dist/field/features/migrations/slateToLexical/nodes/unknownConvertedNode/Component.js.map +1 -0
- package/dist/field/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.js +1 -1
- package/dist/field/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.js.map +1 -0
- package/dist/field/features/paragraph/feature.client.js +1 -1
- package/dist/field/features/paragraph/feature.client.js.map +1 -0
- package/dist/field/features/paragraph/feature.server.js +1 -1
- package/dist/field/features/paragraph/feature.server.js.map +1 -0
- package/dist/field/features/relationship/drawer/commands.js +1 -1
- package/dist/field/features/relationship/drawer/commands.js.map +1 -0
- package/dist/field/features/relationship/drawer/index.js +1 -1
- package/dist/field/features/relationship/drawer/index.js.map +1 -0
- package/dist/field/features/relationship/feature.client.js +1 -1
- package/dist/field/features/relationship/feature.client.js.map +1 -0
- package/dist/field/features/relationship/feature.server.js +1 -1
- package/dist/field/features/relationship/feature.server.js.map +1 -0
- package/dist/field/features/relationship/nodes/RelationshipNode.js +1 -1
- package/dist/field/features/relationship/nodes/RelationshipNode.js.map +1 -0
- package/dist/field/features/relationship/nodes/components/RelationshipComponent.js +1 -1
- package/dist/field/features/relationship/nodes/components/RelationshipComponent.js.map +1 -0
- package/dist/field/features/relationship/plugins/index.js +1 -1
- package/dist/field/features/relationship/plugins/index.js.map +1 -0
- package/dist/field/features/relationship/populationPromise.js +1 -1
- package/dist/field/features/relationship/populationPromise.js.map +1 -0
- package/dist/field/features/relationship/utils/EnabledRelationshipsCondition.js +1 -1
- package/dist/field/features/relationship/utils/EnabledRelationshipsCondition.js.map +1 -0
- package/dist/field/features/types.js +1 -1
- package/dist/field/features/types.js.map +1 -0
- package/dist/field/features/upload/component/ExtraFieldsDrawer/index.js +1 -1
- package/dist/field/features/upload/component/ExtraFieldsDrawer/index.js.map +1 -0
- package/dist/field/features/upload/component/index.js +1 -1
- package/dist/field/features/upload/component/index.js.map +1 -0
- package/dist/field/features/upload/drawer/commands.js +1 -1
- package/dist/field/features/upload/drawer/commands.js.map +1 -0
- package/dist/field/features/upload/drawer/index.js +1 -1
- package/dist/field/features/upload/drawer/index.js.map +1 -0
- package/dist/field/features/upload/feature.client.js +1 -1
- package/dist/field/features/upload/feature.client.js.map +1 -0
- package/dist/field/features/upload/feature.server.js +1 -1
- package/dist/field/features/upload/feature.server.js.map +1 -0
- package/dist/field/features/upload/nodes/UploadNode.js +1 -1
- package/dist/field/features/upload/nodes/UploadNode.js.map +1 -0
- package/dist/field/features/upload/plugin/index.js +1 -1
- package/dist/field/features/upload/plugin/index.js.map +1 -0
- package/dist/field/features/upload/populationPromise.js +1 -1
- package/dist/field/features/upload/populationPromise.js.map +1 -0
- package/dist/field/features/upload/validate.js +1 -1
- package/dist/field/features/upload/validate.js.map +1 -0
- package/dist/field/index.js +1 -1
- package/dist/field/index.js.map +1 -0
- package/dist/field/lexical/EditorPlugin.js +1 -1
- package/dist/field/lexical/EditorPlugin.js.map +1 -0
- package/dist/field/lexical/LexicalEditor.js +1 -1
- package/dist/field/lexical/LexicalEditor.js.map +1 -0
- package/dist/field/lexical/LexicalProvider.js +1 -1
- package/dist/field/lexical/LexicalProvider.js.map +1 -0
- package/dist/field/lexical/config/client/EditorConfigProvider.js +1 -1
- package/dist/field/lexical/config/client/EditorConfigProvider.js.map +1 -0
- package/dist/field/lexical/config/client/default.js +1 -1
- package/dist/field/lexical/config/client/default.js.map +1 -0
- package/dist/field/lexical/config/client/loader.js +1 -1
- package/dist/field/lexical/config/client/loader.js.map +1 -0
- package/dist/field/lexical/config/client/sanitize.js +1 -1
- package/dist/field/lexical/config/client/sanitize.js.map +1 -0
- package/dist/field/lexical/config/server/default.js +1 -1
- package/dist/field/lexical/config/server/default.js.map +1 -0
- package/dist/field/lexical/config/server/loader.js +1 -1
- package/dist/field/lexical/config/server/loader.js.map +1 -0
- package/dist/field/lexical/config/server/sanitize.js +1 -1
- package/dist/field/lexical/config/server/sanitize.js.map +1 -0
- package/dist/field/lexical/config/types.js +1 -1
- package/dist/field/lexical/config/types.js.map +1 -0
- package/dist/field/lexical/nodes/index.js +1 -1
- package/dist/field/lexical/nodes/index.js.map +1 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarButton/index.js +1 -1
- package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarButton/index.js.map +1 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/DropDown.js +1 -1
- package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/DropDown.js.map +1 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/index.js +1 -1
- package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/index.js.map +1 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/index.js +1 -1
- package/dist/field/lexical/plugins/FloatingSelectToolbar/index.js.map +1 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/types.js +1 -1
- package/dist/field/lexical/plugins/FloatingSelectToolbar/types.js.map +1 -0
- package/dist/field/lexical/plugins/MarkdownShortcut/index.js +1 -1
- package/dist/field/lexical/plugins/MarkdownShortcut/index.js.map +1 -0
- package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +1 -1
- package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -0
- package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +1 -1
- package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -0
- package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js +1 -1
- package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js.map +1 -0
- package/dist/field/lexical/plugins/SlashMenu/index.js +1 -1
- package/dist/field/lexical/plugins/SlashMenu/index.js.map +1 -0
- package/dist/field/lexical/plugins/SlashMenu/useMenuTriggerMatch.js +1 -1
- package/dist/field/lexical/plugins/SlashMenu/useMenuTriggerMatch.js.map +1 -0
- package/dist/field/lexical/plugins/handles/AddBlockHandlePlugin/index.js +1 -1
- package/dist/field/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/debounce.js +1 -1
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/debounce.js.map +1 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.js +1 -1
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.js.map +1 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/getNodeCloseToPoint.js +1 -1
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/getNodeCloseToPoint.js.map +1 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/highlightElemOriginalPosition.js +1 -1
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/highlightElemOriginalPosition.js.map +1 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/index.js +1 -1
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.js +1 -1
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.js.map +1 -0
- package/dist/field/lexical/plugins/handles/utils/getCollapsedMargins.js +1 -1
- package/dist/field/lexical/plugins/handles/utils/getCollapsedMargins.js.map +1 -0
- package/dist/field/lexical/plugins/handles/utils/getTopLevelNodeKeys.js +1 -1
- package/dist/field/lexical/plugins/handles/utils/getTopLevelNodeKeys.js.map +1 -0
- package/dist/field/lexical/plugins/handles/utils/isOnHandleElement.js +1 -1
- package/dist/field/lexical/plugins/handles/utils/isOnHandleElement.js.map +1 -0
- package/dist/field/lexical/plugins/handles/utils/setHandlePosition.js +1 -1
- package/dist/field/lexical/plugins/handles/utils/setHandlePosition.js.map +1 -0
- package/dist/field/lexical/theme/EditorTheme.js +1 -1
- package/dist/field/lexical/theme/EditorTheme.js.map +1 -0
- package/dist/field/lexical/ui/ContentEditable.js +1 -1
- package/dist/field/lexical/ui/ContentEditable.js.map +1 -0
- package/dist/field/lexical/ui/icons/AI/index.js +1 -1
- package/dist/field/lexical/ui/icons/AI/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/AlignCenter/index.js +1 -1
- package/dist/field/lexical/ui/icons/AlignCenter/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/AlignJustify/index.js +1 -1
- package/dist/field/lexical/ui/icons/AlignJustify/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/AlignLeft/index.js +1 -1
- package/dist/field/lexical/ui/icons/AlignLeft/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/AlignRight/index.js +1 -1
- package/dist/field/lexical/ui/icons/AlignRight/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/Block/index.js +1 -1
- package/dist/field/lexical/ui/icons/Block/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/Blockquote/index.js +1 -1
- package/dist/field/lexical/ui/icons/Blockquote/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/Bold/index.js +1 -1
- package/dist/field/lexical/ui/icons/Bold/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/Checklist/index.js +1 -1
- package/dist/field/lexical/ui/icons/Checklist/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/Code/index.js +1 -1
- package/dist/field/lexical/ui/icons/Code/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/CodeBlock/index.js +1 -1
- package/dist/field/lexical/ui/icons/CodeBlock/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/H1/index.js +1 -1
- package/dist/field/lexical/ui/icons/H1/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/H2/index.js +1 -1
- package/dist/field/lexical/ui/icons/H2/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/H3/index.js +1 -1
- package/dist/field/lexical/ui/icons/H3/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/H4/index.js +1 -1
- package/dist/field/lexical/ui/icons/H4/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/H5/index.js +1 -1
- package/dist/field/lexical/ui/icons/H5/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/H6/index.js +1 -1
- package/dist/field/lexical/ui/icons/H6/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/IndentDecrease/index.js +1 -1
- package/dist/field/lexical/ui/icons/IndentDecrease/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/IndentIncrease/index.js +1 -1
- package/dist/field/lexical/ui/icons/IndentIncrease/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/Italic/index.js +1 -1
- package/dist/field/lexical/ui/icons/Italic/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/Link/index.js +1 -1
- package/dist/field/lexical/ui/icons/Link/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/OrderedList/index.js +1 -1
- package/dist/field/lexical/ui/icons/OrderedList/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/Relationship/index.js +1 -1
- package/dist/field/lexical/ui/icons/Relationship/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/Strikethrough/index.js +1 -1
- package/dist/field/lexical/ui/icons/Strikethrough/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/Subscript/index.js +1 -1
- package/dist/field/lexical/ui/icons/Subscript/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/Superscript/index.js +1 -1
- package/dist/field/lexical/ui/icons/Superscript/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/Text/index.js +1 -1
- package/dist/field/lexical/ui/icons/Text/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/Underline/index.js +1 -1
- package/dist/field/lexical/ui/icons/Underline/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/UnorderedList/index.js +1 -1
- package/dist/field/lexical/ui/icons/UnorderedList/index.js.map +1 -0
- package/dist/field/lexical/ui/icons/Upload/index.js +1 -1
- package/dist/field/lexical/ui/icons/Upload/index.js.map +1 -0
- package/dist/field/lexical/utils/canUseDOM.js +1 -1
- package/dist/field/lexical/utils/canUseDOM.js.map +1 -0
- package/dist/field/lexical/utils/cloneDeep.js +1 -1
- package/dist/field/lexical/utils/cloneDeep.js.map +1 -0
- package/dist/field/lexical/utils/environment.js +1 -1
- package/dist/field/lexical/utils/environment.js.map +1 -0
- package/dist/field/lexical/utils/getDOMRangeRect.js +1 -1
- package/dist/field/lexical/utils/getDOMRangeRect.js.map +1 -0
- package/dist/field/lexical/utils/getSelectedNode.js +1 -1
- package/dist/field/lexical/utils/getSelectedNode.js.map +1 -0
- package/dist/field/lexical/utils/guard.js +1 -1
- package/dist/field/lexical/utils/guard.js.map +1 -0
- package/dist/field/lexical/utils/invariant.js +1 -1
- package/dist/field/lexical/utils/invariant.js.map +1 -0
- package/dist/field/lexical/utils/joinClasses.js +1 -1
- package/dist/field/lexical/utils/joinClasses.js.map +1 -0
- package/dist/field/lexical/utils/markdown/createBlockNode.js +1 -1
- package/dist/field/lexical/utils/markdown/createBlockNode.js.map +1 -0
- package/dist/field/lexical/utils/nodeFormat.js +1 -1
- package/dist/field/lexical/utils/nodeFormat.js.map +1 -0
- package/dist/field/lexical/utils/point.js +1 -1
- package/dist/field/lexical/utils/point.js.map +1 -0
- package/dist/field/lexical/utils/rect.js +1 -1
- package/dist/field/lexical/utils/rect.js.map +1 -0
- package/dist/field/lexical/utils/setFloatingElemPosition.js +1 -1
- package/dist/field/lexical/utils/setFloatingElemPosition.js.map +1 -0
- package/dist/field/lexical/utils/setFloatingElemPositionForLinkEditor.js +1 -1
- package/dist/field/lexical/utils/setFloatingElemPositionForLinkEditor.js.map +1 -0
- package/dist/field/lexical/utils/swipe.js +1 -1
- package/dist/field/lexical/utils/swipe.js.map +1 -0
- package/dist/field/lexical/utils/url.js +1 -1
- package/dist/field/lexical/utils/url.js.map +1 -0
- package/dist/generateComponentMap.js +1 -1
- package/dist/generateComponentMap.js.map +1 -0
- package/dist/generateSchemaMap.js +1 -1
- package/dist/generateSchemaMap.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -0
- package/dist/populate/defaultValue.js +1 -1
- package/dist/populate/defaultValue.js.map +1 -0
- package/dist/populate/populate.js +1 -1
- package/dist/populate/populate.js.map +1 -0
- package/dist/populate/recurseNestedFields.js +1 -1
- package/dist/populate/recurseNestedFields.js.map +1 -0
- package/dist/populate/richTextRelationshipPromise.js +1 -1
- package/dist/populate/richTextRelationshipPromise.js.map +1 -0
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -0
- package/dist/useLexicalFeature.js +1 -1
- package/dist/useLexicalFeature.js.map +1 -0
- package/dist/validate/index.js +1 -1
- package/dist/validate/index.js.map +1 -0
- package/dist/validate/validateNodes.js +1 -1
- package/dist/validate/validateNodes.js.map +1 -0
- package/package.json +7 -7
|
@@ -89,4 +89,4 @@ export function $isBlockNode(node) {
|
|
|
89
89
|
return node instanceof BlockNode;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
//# sourceMappingURL=
|
|
92
|
+
//# sourceMappingURL=BlocksNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/field/features/blocks/nodes/BlocksNode.tsx"],"sourcesContent":["import type { SerializedDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport type {\n DOMConversionMap,\n DOMExportOutput,\n EditorConfig,\n ElementFormatType,\n LexicalEditor,\n LexicalNode,\n NodeKey,\n Spread,\n} from 'lexical'\n\nimport lexicalDecoratorBlockNodeImport from '@lexical/react/LexicalDecoratorBlockNode.js'\nconst { DecoratorBlockNode } = lexicalDecoratorBlockNodeImport\nimport ObjectID from 'bson-objectid'\nimport React from 'react'\n\nexport type BlockFields = {\n /** Block form data */\n [key: string]: any\n blockName: string\n blockType: string\n id: string\n}\n\nconst BlockComponent = React.lazy(() =>\n import('../component/index.js').then((module) => ({\n default: module.BlockComponent,\n })),\n)\n\nexport type SerializedBlockNode = Spread<\n {\n fields: BlockFields\n },\n SerializedDecoratorBlockNode\n>\n\nexport class BlockNode extends DecoratorBlockNode {\n __fields: BlockFields\n\n constructor({\n fields,\n format,\n key,\n }: {\n fields: BlockFields\n format?: ElementFormatType\n key?: NodeKey\n }) {\n super(format, key)\n this.__fields = fields\n }\n\n static clone(node: BlockNode): BlockNode {\n return new BlockNode({\n fields: node.__fields,\n format: node.__format,\n key: node.__key,\n })\n }\n\n static getType(): string {\n return 'block'\n }\n\n static importDOM(): DOMConversionMap<HTMLDivElement> | null {\n return {}\n }\n\n static importJSON(serializedNode: SerializedBlockNode): BlockNode {\n if (serializedNode.version === 1) {\n // Convert (version 1 had the fields wrapped in another, unnecessary data property)\n serializedNode = {\n ...serializedNode,\n fields: {\n ...(serializedNode as any).fields.data,\n },\n version: 2,\n }\n }\n const node = $createBlockNode(serializedNode.fields)\n node.setFormat(serializedNode.format)\n return node\n }\n\n static isInline(): false {\n return false\n }\n decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element {\n // @ts-expect-error\n return <BlockComponent formData={this.getFields()} nodeKey={this.getKey()} />\n }\n\n exportDOM(): DOMExportOutput {\n const element = document.createElement('div')\n\n const text = document.createTextNode(this.getTextContent())\n element.append(text)\n return { element }\n }\n\n exportJSON(): SerializedBlockNode {\n return {\n ...super.exportJSON(),\n type: this.getType(),\n fields: this.getFields(),\n version: 2,\n }\n }\n\n getFields(): BlockFields {\n return this.getLatest().__fields\n }\n\n getTextContent(): string {\n return `Block Field`\n }\n\n setFields(fields: BlockFields): void {\n const fieldsCopy = JSON.parse(JSON.stringify(fields)) as BlockFields\n\n const writable = this.getWritable()\n writable.__fields = fieldsCopy\n }\n}\n\nexport function $createBlockNode(fields: Exclude<BlockFields, 'id'>): BlockNode {\n return new BlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n })\n}\n\nexport function $isBlockNode(node: BlockNode | LexicalNode | null | undefined): node is BlockNode {\n return node instanceof BlockNode\n}\n"],"names":["lexicalDecoratorBlockNodeImport","DecoratorBlockNode","ObjectID","React","BlockComponent","lazy","then","module","default","BlockNode","__fields","constructor","fields","format","key","clone","node","__format","__key","getType","importDOM","importJSON","serializedNode","version","data","$createBlockNode","setFormat","isInline","decorate","editor","config","formData","getFields","nodeKey","getKey","exportDOM","element","document","createElement","text","createTextNode","getTextContent","append","exportJSON","type","getLatest","setFields","fieldsCopy","JSON","parse","stringify","writable","getWritable","id","toHexString","$isBlockNode"],"mappings":"AAYA,OAAOA,qCAAqC,8CAA6C;AACzF,MAAM,EAAEC,kBAAkB,EAAE,GAAGD;AAC/B,OAAOE,cAAc,gBAAe;AACpC,OAAOC,WAAW,QAAO;AAUzB,MAAMC,+BAAiBD,MAAME,IAAI,CAAC,IAChC,MAAM,CAAC,yBAAyBC,IAAI,CAAC,CAACC,SAAY,CAAA;YAChDC,SAASD,OAAOH,cAAc;QAChC,CAAA;AAUF,OAAO,MAAMK,kBAAkBR;IAC7BS,SAAqB;IAErBC,YAAY,EACVC,MAAM,EACNC,MAAM,EACNC,GAAG,EAKJ,CAAE;QACD,KAAK,CAACD,QAAQC;QACd,IAAI,CAACJ,QAAQ,GAAGE;IAClB;IAEA,OAAOG,MAAMC,IAAe,EAAa;QACvC,OAAO,IAAIP,UAAU;YACnBG,QAAQI,KAAKN,QAAQ;YACrBG,QAAQG,KAAKC,QAAQ;YACrBH,KAAKE,KAAKE,KAAK;QACjB;IACF;IAEA,OAAOC,UAAkB;QACvB,OAAO;IACT;IAEA,OAAOC,YAAqD;QAC1D,OAAO,CAAC;IACV;IAEA,OAAOC,WAAWC,cAAmC,EAAa;QAChE,IAAIA,eAAeC,OAAO,KAAK,GAAG;YAChC,mFAAmF;YACnFD,iBAAiB;gBACf,GAAGA,cAAc;gBACjBV,QAAQ;oBACN,GAAG,AAACU,eAAuBV,MAAM,CAACY,IAAI;gBACxC;gBACAD,SAAS;YACX;QACF;QACA,MAAMP,OAAOS,iBAAiBH,eAAeV,MAAM;QACnDI,KAAKU,SAAS,CAACJ,eAAeT,MAAM;QACpC,OAAOG;IACT;IAEA,OAAOW,WAAkB;QACvB,OAAO;IACT;IACAC,SAASC,MAAqB,EAAEC,MAAoB,EAAe;QACjE,mBAAmB;QACnB,qBAAO,oBAAC1B;YAAe2B,UAAU,IAAI,CAACC,SAAS;YAAIC,SAAS,IAAI,CAACC,MAAM;;IACzE;IAEAC,YAA6B;QAC3B,MAAMC,UAAUC,SAASC,aAAa,CAAC;QAEvC,MAAMC,OAAOF,SAASG,cAAc,CAAC,IAAI,CAACC,cAAc;QACxDL,QAAQM,MAAM,CAACH;QACf,OAAO;YAAEH;QAAQ;IACnB;IAEAO,aAAkC;QAChC,OAAO;YACL,GAAG,KAAK,CAACA,YAAY;YACrBC,MAAM,IAAI,CAACzB,OAAO;YAClBP,QAAQ,IAAI,CAACoB,SAAS;YACtBT,SAAS;QACX;IACF;IAEAS,YAAyB;QACvB,OAAO,IAAI,CAACa,SAAS,GAAGnC,QAAQ;IAClC;IAEA+B,iBAAyB;QACvB,OAAO,CAAC,WAAW,CAAC;IACtB;IAEAK,UAAUlC,MAAmB,EAAQ;QACnC,MAAMmC,aAAaC,KAAKC,KAAK,CAACD,KAAKE,SAAS,CAACtC;QAE7C,MAAMuC,WAAW,IAAI,CAACC,WAAW;QACjCD,SAASzC,QAAQ,GAAGqC;IACtB;AACF;AAEA,OAAO,SAAStB,iBAAiBb,MAAkC;IACjE,OAAO,IAAIH,UAAU;QACnBG,QAAQ;YACN,GAAGA,MAAM;YACTyC,IAAIzC,QAAQyC,MAAM,IAAInD,SAASM,OAAO,GAAG8C,WAAW;QACtD;IACF;AACF;AAEA,OAAO,SAASC,aAAavC,IAAgD;IAC3E,OAAOA,gBAAgBP;AACzB"}
|
|
@@ -2,4 +2,4 @@ import lexicalImport from 'lexical';
|
|
|
2
2
|
const { createCommand } = lexicalImport;
|
|
3
3
|
export const INSERT_BLOCK_COMMAND = createCommand('INSERT_BLOCK_COMMAND');
|
|
4
4
|
|
|
5
|
-
//# sourceMappingURL=
|
|
5
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/field/features/blocks/plugin/commands.ts"],"sourcesContent":["import type { LexicalCommand } from 'lexical'\n\nimport lexicalImport from 'lexical'\nconst { createCommand } = lexicalImport\n\nimport type { InsertBlockPayload } from './index.js'\n\nexport const INSERT_BLOCK_COMMAND: LexicalCommand<InsertBlockPayload> =\n createCommand('INSERT_BLOCK_COMMAND')\n"],"names":["lexicalImport","createCommand","INSERT_BLOCK_COMMAND"],"mappings":"AAEA,OAAOA,mBAAmB,UAAS;AACnC,MAAM,EAAEC,aAAa,EAAE,GAAGD;AAI1B,OAAO,MAAME,uBACXD,cAAc,wBAAuB"}
|
|
@@ -40,4 +40,4 @@ export function BlocksPlugin() {
|
|
|
40
40
|
return /*#__PURE__*/ React.createElement(BlocksDrawerComponent, null);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
//# sourceMappingURL=
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/field/features/blocks/plugin/index.tsx"],"sourcesContent":["'use client'\nimport lexicalComposerContextImport from '@lexical/react/LexicalComposerContext.js'\nconst { useLexicalComposerContext } = lexicalComposerContextImport\nimport lexicalUtilsImport from '@lexical/utils'\nconst { $insertNodeToNearestRoot, mergeRegister } = lexicalUtilsImport\nimport lexicalImport from 'lexical'\nconst {\n $getPreviousSelection,\n $getSelection,\n $isParagraphNode,\n $isRangeSelection,\n COMMAND_PRIORITY_EDITOR,\n} = lexicalImport\n\nimport React, { useEffect } from 'react'\n\nimport type { BlockFields } from '../nodes/BlocksNode.js'\n\nimport { BlocksDrawerComponent } from '../drawer/index.js'\nimport { $createBlockNode, BlockNode } from '../nodes/BlocksNode.js'\nimport { INSERT_BLOCK_COMMAND } from './commands.js'\n\nexport type InsertBlockPayload = Exclude<BlockFields, 'id'>\n\nexport function BlocksPlugin(): React.ReactNode {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n if (!editor.hasNodes([BlockNode])) {\n throw new Error('BlocksPlugin: BlocksNode not registered on editor')\n }\n\n return mergeRegister(\n editor.registerCommand<InsertBlockPayload>(\n INSERT_BLOCK_COMMAND,\n (payload: InsertBlockPayload) => {\n editor.update(() => {\n const blockNode = $createBlockNode(payload)\n\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n const { focus } = selection\n const focusNode = focus.getNode()\n\n // First, delete currently selected node if it's an empty paragraph and if there are sufficient\n // paragraph nodes (more than 1) left in the parent node, so that we don't \"trap\" the user\n if (\n $isParagraphNode(focusNode) &&\n focusNode.getTextContentSize() === 0 &&\n focusNode\n .getParent()\n .getChildren()\n .filter((node) => $isParagraphNode(node)).length > 1\n ) {\n focusNode.remove()\n }\n\n $insertNodeToNearestRoot(blockNode)\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n )\n }, [editor])\n\n return <BlocksDrawerComponent />\n}\n"],"names":["lexicalComposerContextImport","useLexicalComposerContext","lexicalUtilsImport","$insertNodeToNearestRoot","mergeRegister","lexicalImport","$getPreviousSelection","$getSelection","$isParagraphNode","$isRangeSelection","COMMAND_PRIORITY_EDITOR","React","useEffect","BlocksDrawerComponent","$createBlockNode","BlockNode","INSERT_BLOCK_COMMAND","BlocksPlugin","editor","hasNodes","Error","registerCommand","payload","update","blockNode","selection","focus","focusNode","getNode","getTextContentSize","getParent","getChildren","filter","node","length","remove"],"mappings":"AAAA;AACA,OAAOA,kCAAkC,2CAA0C;AACnF,MAAM,EAAEC,yBAAyB,EAAE,GAAGD;AACtC,OAAOE,wBAAwB,iBAAgB;AAC/C,MAAM,EAAEC,wBAAwB,EAAEC,aAAa,EAAE,GAAGF;AACpD,OAAOG,mBAAmB,UAAS;AACnC,MAAM,EACJC,qBAAqB,EACrBC,aAAa,EACbC,gBAAgB,EAChBC,iBAAiB,EACjBC,uBAAuB,EACxB,GAAGL;AAEJ,OAAOM,SAASC,SAAS,QAAQ,QAAO;AAIxC,SAASC,qBAAqB,QAAQ,qBAAoB;AAC1D,SAASC,gBAAgB,EAAEC,SAAS,QAAQ,yBAAwB;AACpE,SAASC,oBAAoB,QAAQ,gBAAe;AAIpD,OAAO,SAASC;IACd,MAAM,CAACC,OAAO,GAAGjB;IAEjBW,UAAU;QACR,IAAI,CAACM,OAAOC,QAAQ,CAAC;YAACJ;SAAU,GAAG;YACjC,MAAM,IAAIK,MAAM;QAClB;QAEA,OAAOhB,cACLc,OAAOG,eAAe,CACpBL,sBACA,CAACM;YACCJ,OAAOK,MAAM,CAAC;gBACZ,MAAMC,YAAYV,iBAAiBQ;gBAEnC,MAAMG,YAAYlB,mBAAmBD;gBAErC,IAAIG,kBAAkBgB,YAAY;oBAChC,MAAM,EAAEC,KAAK,EAAE,GAAGD;oBAClB,MAAME,YAAYD,MAAME,OAAO;oBAE/B,+FAA+F;oBAC/F,0FAA0F;oBAC1F,IACEpB,iBAAiBmB,cACjBA,UAAUE,kBAAkB,OAAO,KACnCF,UACGG,SAAS,GACTC,WAAW,GACXC,MAAM,CAAC,CAACC,OAASzB,iBAAiByB,OAAOC,MAAM,GAAG,GACrD;wBACAP,UAAUQ,MAAM;oBAClB;oBAEAhC,yBAAyBqB;gBAC3B;YACF;YAEA,OAAO;QACT,GACAd;IAGN,GAAG;QAACQ;KAAO;IAEX,qBAAO,oBAACL;AACV"}
|
|
@@ -42,4 +42,4 @@ export const blockPopulationPromiseHOC = (props)=>{
|
|
|
42
42
|
return blockPopulationPromise;
|
|
43
43
|
};
|
|
44
44
|
|
|
45
|
-
//# sourceMappingURL=
|
|
45
|
+
//# sourceMappingURL=populationPromise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/field/features/blocks/populationPromise.ts"],"sourcesContent":["import type { Block } from 'payload/types'\n\nimport { sanitizeFields } from 'payload/config'\n\nimport type { PopulationPromise } from '../types.js'\nimport type { BlocksFeatureProps } from './feature.server.js'\nimport type { SerializedBlockNode } from './nodes/BlocksNode.js'\n\nimport { recurseNestedFields } from '../../../populate/recurseNestedFields.js'\n\nexport const blockPopulationPromiseHOC = (\n props: BlocksFeatureProps,\n): PopulationPromise<SerializedBlockNode> => {\n const blockPopulationPromise: PopulationPromise<SerializedBlockNode> = ({\n context,\n currentDepth,\n depth,\n editorPopulationPromises,\n findMany,\n flattenLocales,\n node,\n overrideAccess,\n populationPromises,\n req,\n showHiddenFields,\n siblingDoc,\n }) => {\n const blocks: Block[] = props.blocks\n const blockFieldData = node.fields\n\n const promises: Promise<void>[] = []\n\n // Sanitize block's fields here. This is done here and not in the feature, because the payload config is available here\n const payloadConfig = req.payload.config\n const validRelationships = payloadConfig.collections.map((c) => c.slug) || []\n blocks.forEach((block) => {\n block.fields = sanitizeFields({\n config: payloadConfig,\n fields: block.fields,\n validRelationships,\n })\n })\n\n // find block used in this node\n const block = props.blocks.find((block) => block.slug === blockFieldData.blockType)\n if (!block || !block?.fields?.length || !blockFieldData) {\n return promises\n }\n\n recurseNestedFields({\n context,\n currentDepth,\n data: blockFieldData,\n depth,\n editorPopulationPromises,\n fields: block.fields,\n findMany,\n flattenLocales,\n overrideAccess,\n populationPromises,\n promises,\n req,\n showHiddenFields,\n // The afterReadPromise gets its data from looking for field.name inside the siblingDoc. Thus, here we cannot pass the whole document's siblingDoc, but only the siblingDoc (sibling fields) of the current field.\n siblingDoc: blockFieldData,\n })\n\n return promises\n }\n\n return blockPopulationPromise\n}\n"],"names":["sanitizeFields","recurseNestedFields","blockPopulationPromiseHOC","props","blockPopulationPromise","context","currentDepth","depth","editorPopulationPromises","findMany","flattenLocales","node","overrideAccess","populationPromises","req","showHiddenFields","siblingDoc","blocks","blockFieldData","fields","promises","payloadConfig","payload","config","validRelationships","collections","map","c","slug","forEach","block","find","blockType","length","data"],"mappings":"AAEA,SAASA,cAAc,QAAQ,iBAAgB;AAM/C,SAASC,mBAAmB,QAAQ,2CAA0C;AAE9E,OAAO,MAAMC,4BAA4B,CACvCC;IAEA,MAAMC,yBAAiE,CAAC,EACtEC,OAAO,EACPC,YAAY,EACZC,KAAK,EACLC,wBAAwB,EACxBC,QAAQ,EACRC,cAAc,EACdC,IAAI,EACJC,cAAc,EACdC,kBAAkB,EAClBC,GAAG,EACHC,gBAAgB,EAChBC,UAAU,EACX;QACC,MAAMC,SAAkBd,MAAMc,MAAM;QACpC,MAAMC,iBAAiBP,KAAKQ,MAAM;QAElC,MAAMC,WAA4B,EAAE;QAEpC,uHAAuH;QACvH,MAAMC,gBAAgBP,IAAIQ,OAAO,CAACC,MAAM;QACxC,MAAMC,qBAAqBH,cAAcI,WAAW,CAACC,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAK,EAAE;QAC7EX,OAAOY,OAAO,CAAC,CAACC;YACdA,MAAMX,MAAM,GAAGnB,eAAe;gBAC5BuB,QAAQF;gBACRF,QAAQW,MAAMX,MAAM;gBACpBK;YACF;QACF;QAEA,+BAA+B;QAC/B,MAAMM,QAAQ3B,MAAMc,MAAM,CAACc,IAAI,CAAC,CAACD,QAAUA,MAAMF,IAAI,KAAKV,eAAec,SAAS;QAClF,IAAI,CAACF,SAAS,CAACA,OAAOX,QAAQc,UAAU,CAACf,gBAAgB;YACvD,OAAOE;QACT;QAEAnB,oBAAoB;YAClBI;YACAC;YACA4B,MAAMhB;YACNX;YACAC;YACAW,QAAQW,MAAMX,MAAM;YACpBV;YACAC;YACAE;YACAC;YACAO;YACAN;YACAC;YACA,kNAAkN;YAClNC,YAAYE;QACd;QAEA,OAAOE;IACT;IAEA,OAAOhB;AACT,EAAC"}
|
|
@@ -46,4 +46,4 @@ export const blockValidationHOC = (props)=>{
|
|
|
46
46
|
return blockValidation;
|
|
47
47
|
};
|
|
48
48
|
|
|
49
|
-
//# sourceMappingURL=
|
|
49
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/field/features/blocks/validate.ts"],"sourcesContent":["import type { Block } from 'payload/types'\n\nimport { sanitizeFields } from 'payload/config'\n\nimport type { NodeValidation } from '../types.js'\nimport type { BlocksFeatureProps } from './feature.server.js'\nimport type { SerializedBlockNode } from './nodes/BlocksNode.js'\n\nexport const blockValidationHOC = (\n props: BlocksFeatureProps,\n): NodeValidation<SerializedBlockNode> => {\n const blockValidation: NodeValidation<SerializedBlockNode> = async ({ node, validation }) => {\n const blockFieldData = node.fields\n const blocks: Block[] = props.blocks\n\n const {\n options: {\n req,\n req: {\n payload: { config },\n },\n },\n } = validation\n\n // Sanitize block's fields here. This is done here and not in the feature, because the payload config is available here\n const validRelationships = config.collections.map((c) => c.slug) || []\n blocks.forEach((block) => {\n block.fields = sanitizeFields({\n config,\n fields: block.fields,\n validRelationships,\n })\n })\n\n // find block\n const block = props.blocks.find((block) => block.slug === blockFieldData.blockType)\n\n // validate block\n if (!block) {\n return 'Block not found'\n }\n\n for (const field of block.fields) {\n if ('validate' in field && typeof field.validate === 'function' && field.validate) {\n const fieldValue = 'name' in field ? node.fields[field.name] : null\n\n const passesCondition = field.admin?.condition\n ? Boolean(\n field.admin.condition(fieldValue, node.fields, {\n user: req?.user,\n }),\n )\n : true\n if (!passesCondition) {\n continue // Fixes https://github.com/payloadcms/payload/issues/4000\n }\n\n const validationResult = await field.validate(fieldValue, {\n ...field,\n id: validation.options.id,\n data: fieldValue,\n operation: validation.options.operation,\n req,\n siblingData: validation.options.siblingData,\n })\n\n if (validationResult !== true) {\n return validationResult\n }\n }\n }\n\n return true\n }\n\n return blockValidation\n}\n"],"names":["sanitizeFields","blockValidationHOC","props","blockValidation","node","validation","blockFieldData","fields","blocks","options","req","payload","config","validRelationships","collections","map","c","slug","forEach","block","find","blockType","field","validate","fieldValue","name","passesCondition","admin","condition","Boolean","user","validationResult","id","data","operation","siblingData"],"mappings":"AAEA,SAASA,cAAc,QAAQ,iBAAgB;AAM/C,OAAO,MAAMC,qBAAqB,CAChCC;IAEA,MAAMC,kBAAuD,OAAO,EAAEC,IAAI,EAAEC,UAAU,EAAE;QACtF,MAAMC,iBAAiBF,KAAKG,MAAM;QAClC,MAAMC,SAAkBN,MAAMM,MAAM;QAEpC,MAAM,EACJC,SAAS,EACPC,GAAG,EACHA,KAAK,EACHC,SAAS,EAAEC,MAAM,EAAE,EACpB,EACF,EACF,GAAGP;QAEJ,uHAAuH;QACvH,MAAMQ,qBAAqBD,OAAOE,WAAW,CAACC,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAK,EAAE;QACtET,OAAOU,OAAO,CAAC,CAACC;YACdA,MAAMZ,MAAM,GAAGP,eAAe;gBAC5BY;gBACAL,QAAQY,MAAMZ,MAAM;gBACpBM;YACF;QACF;QAEA,aAAa;QACb,MAAMM,QAAQjB,MAAMM,MAAM,CAACY,IAAI,CAAC,CAACD,QAAUA,MAAMF,IAAI,KAAKX,eAAee,SAAS;QAElF,iBAAiB;QACjB,IAAI,CAACF,OAAO;YACV,OAAO;QACT;QAEA,KAAK,MAAMG,SAASH,MAAMZ,MAAM,CAAE;YAChC,IAAI,cAAce,SAAS,OAAOA,MAAMC,QAAQ,KAAK,cAAcD,MAAMC,QAAQ,EAAE;gBACjF,MAAMC,aAAa,UAAUF,QAAQlB,KAAKG,MAAM,CAACe,MAAMG,IAAI,CAAC,GAAG;gBAE/D,MAAMC,kBAAkBJ,MAAMK,KAAK,EAAEC,YACjCC,QACEP,MAAMK,KAAK,CAACC,SAAS,CAACJ,YAAYpB,KAAKG,MAAM,EAAE;oBAC7CuB,MAAMpB,KAAKoB;gBACb,MAEF;gBACJ,IAAI,CAACJ,iBAAiB;oBACpB,UAAS,0DAA0D;gBACrE;gBAEA,MAAMK,mBAAmB,MAAMT,MAAMC,QAAQ,CAACC,YAAY;oBACxD,GAAGF,KAAK;oBACRU,IAAI3B,WAAWI,OAAO,CAACuB,EAAE;oBACzBC,MAAMT;oBACNU,WAAW7B,WAAWI,OAAO,CAACyB,SAAS;oBACvCxB;oBACAyB,aAAa9B,WAAWI,OAAO,CAAC0B,WAAW;gBAC7C;gBAEA,IAAIJ,qBAAqB,MAAM;oBAC7B,OAAOA;gBACT;YACF;QACF;QAEA,OAAO;IACT;IAEA,OAAO5B;AACT,EAAC"}
|
|
@@ -7,4 +7,4 @@ export const FeaturesSectionWithEntries = (entries)=>{
|
|
|
7
7
|
};
|
|
8
8
|
};
|
|
9
9
|
|
|
10
|
-
//# sourceMappingURL=
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/field/features/common/floatingSelectToolbarFeaturesButtonsSection/index.ts"],"sourcesContent":["import type {\n FloatingToolbarSection,\n FloatingToolbarSectionEntry,\n} from '../../../lexical/plugins/FloatingSelectToolbar/types.js'\n\nexport const FeaturesSectionWithEntries = (\n entries: FloatingToolbarSectionEntry[],\n): FloatingToolbarSection => {\n return {\n type: 'buttons',\n entries,\n key: 'features',\n order: 5,\n }\n}\n"],"names":["FeaturesSectionWithEntries","entries","type","key","order"],"mappings":"AAKA,OAAO,MAAMA,6BAA6B,CACxCC;IAEA,OAAO;QACLC,MAAM;QACND;QACAE,KAAK;QACLC,OAAO;IACT;AACF,EAAC"}
|
|
@@ -9,4 +9,4 @@ export const TextDropdownSectionWithEntries = (entries)=>{
|
|
|
9
9
|
};
|
|
10
10
|
};
|
|
11
11
|
|
|
12
|
-
//# sourceMappingURL=
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/field/features/common/floatingSelectToolbarTextDropdownSection/index.ts"],"sourcesContent":["import type {\n FloatingToolbarSection,\n FloatingToolbarSectionEntry,\n} from '../../../lexical/plugins/FloatingSelectToolbar/types.js'\n\nimport { TextIcon } from '../../../lexical/ui/icons/Text/index.js'\n\nexport const TextDropdownSectionWithEntries = (\n entries: FloatingToolbarSectionEntry[],\n): FloatingToolbarSection => {\n return {\n type: 'dropdown',\n ChildComponent: TextIcon,\n entries,\n key: 'dropdown-text',\n order: 1,\n }\n}\n"],"names":["TextIcon","TextDropdownSectionWithEntries","entries","type","ChildComponent","key","order"],"mappings":"AAKA,SAASA,QAAQ,QAAQ,0CAAyC;AAElE,OAAO,MAAMC,iCAAiC,CAC5CC;IAEA,OAAO;QACLC,MAAM;QACNC,gBAAgBJ;QAChBE;QACAG,KAAK;QACLC,OAAO;IACT;AACF,EAAC"}
|
|
@@ -7,4 +7,4 @@ export const LinebreakHTMLConverter = {
|
|
|
7
7
|
]
|
|
8
8
|
};
|
|
9
9
|
|
|
10
|
-
//# sourceMappingURL=
|
|
10
|
+
//# sourceMappingURL=linebreak.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/field/features/converters/html/converter/converters/linebreak.ts"],"sourcesContent":["import type { SerializedParagraphNode } from 'lexical'\n\nimport type { HTMLConverter } from '../types.js'\n\nexport const LinebreakHTMLConverter: HTMLConverter<SerializedParagraphNode> = {\n converter() {\n return `<br>`\n },\n nodeTypes: ['linebreak'],\n}\n"],"names":["LinebreakHTMLConverter","converter","nodeTypes"],"mappings":"AAIA,OAAO,MAAMA,yBAAiE;IAC5EC;QACE,OAAO,CAAC,IAAI,CAAC;IACf;IACAC,WAAW;QAAC;KAAY;AAC1B,EAAC"}
|
|
@@ -17,4 +17,4 @@ export const ParagraphHTMLConverter = {
|
|
|
17
17
|
]
|
|
18
18
|
};
|
|
19
19
|
|
|
20
|
-
//# sourceMappingURL=
|
|
20
|
+
//# sourceMappingURL=paragraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/field/features/converters/html/converter/converters/paragraph.ts"],"sourcesContent":["import type { SerializedParagraphNode } from 'lexical'\n\nimport type { HTMLConverter } from '../types.js'\n\nimport { convertLexicalNodesToHTML } from '../index.js'\n\nexport const ParagraphHTMLConverter: HTMLConverter<SerializedParagraphNode> = {\n async converter({ converters, node, parent, payload }) {\n const childrenText = await convertLexicalNodesToHTML({\n converters,\n lexicalNodes: node.children,\n parent: {\n ...node,\n parent,\n },\n payload,\n })\n return `<p>${childrenText}</p>`\n },\n nodeTypes: ['paragraph'],\n}\n"],"names":["convertLexicalNodesToHTML","ParagraphHTMLConverter","converter","converters","node","parent","payload","childrenText","lexicalNodes","children","nodeTypes"],"mappings":"AAIA,SAASA,yBAAyB,QAAQ,cAAa;AAEvD,OAAO,MAAMC,yBAAiE;IAC5E,MAAMC,WAAU,EAAEC,UAAU,EAAEC,IAAI,EAAEC,MAAM,EAAEC,OAAO,EAAE;QACnD,MAAMC,eAAe,MAAMP,0BAA0B;YACnDG;YACAK,cAAcJ,KAAKK,QAAQ;YAC3BJ,QAAQ;gBACN,GAAGD,IAAI;gBACPC;YACF;YACAC;QACF;QACA,OAAO,CAAC,GAAG,EAAEC,aAAa,IAAI,CAAC;IACjC;IACAG,WAAW;QAAC;KAAY;AAC1B,EAAC"}
|
|
@@ -30,4 +30,4 @@ export const TextHTMLConverter = {
|
|
|
30
30
|
]
|
|
31
31
|
};
|
|
32
32
|
|
|
33
|
-
//# sourceMappingURL=
|
|
33
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/field/features/converters/html/converter/converters/text.ts"],"sourcesContent":["import type { SerializedTextNode } from 'lexical'\n\nimport type { HTMLConverter } from '../types.js'\n\nimport { NodeFormat } from '../../../../../lexical/utils/nodeFormat.js'\n\nexport const TextHTMLConverter: HTMLConverter<SerializedTextNode> = {\n converter({ node }) {\n let text = node.text\n\n if (node.format & NodeFormat.IS_BOLD) {\n text = `<strong>${text}</strong>`\n }\n if (node.format & NodeFormat.IS_ITALIC) {\n text = `<em>${text}</em>`\n }\n if (node.format & NodeFormat.IS_STRIKETHROUGH) {\n text = `<span style=\"text-decoration: line-through\">${text}</span>`\n }\n if (node.format & NodeFormat.IS_UNDERLINE) {\n text = `<span style=\"text-decoration: underline\">${text}</span>`\n }\n if (node.format & NodeFormat.IS_CODE) {\n text = `<code>${text}</code>`\n }\n if (node.format & NodeFormat.IS_SUBSCRIPT) {\n text = `<sub>${text}</sub>`\n }\n if (node.format & NodeFormat.IS_SUPERSCRIPT) {\n text = `<sup>${text}</sup>`\n }\n\n return text\n },\n nodeTypes: ['text'],\n}\n"],"names":["NodeFormat","TextHTMLConverter","converter","node","text","format","IS_BOLD","IS_ITALIC","IS_STRIKETHROUGH","IS_UNDERLINE","IS_CODE","IS_SUBSCRIPT","IS_SUPERSCRIPT","nodeTypes"],"mappings":"AAIA,SAASA,UAAU,QAAQ,6CAA4C;AAEvE,OAAO,MAAMC,oBAAuD;IAClEC,WAAU,EAAEC,IAAI,EAAE;QAChB,IAAIC,OAAOD,KAAKC,IAAI;QAEpB,IAAID,KAAKE,MAAM,GAAGL,WAAWM,OAAO,EAAE;YACpCF,OAAO,CAAC,QAAQ,EAAEA,KAAK,SAAS,CAAC;QACnC;QACA,IAAID,KAAKE,MAAM,GAAGL,WAAWO,SAAS,EAAE;YACtCH,OAAO,CAAC,IAAI,EAAEA,KAAK,KAAK,CAAC;QAC3B;QACA,IAAID,KAAKE,MAAM,GAAGL,WAAWQ,gBAAgB,EAAE;YAC7CJ,OAAO,CAAC,4CAA4C,EAAEA,KAAK,OAAO,CAAC;QACrE;QACA,IAAID,KAAKE,MAAM,GAAGL,WAAWS,YAAY,EAAE;YACzCL,OAAO,CAAC,yCAAyC,EAAEA,KAAK,OAAO,CAAC;QAClE;QACA,IAAID,KAAKE,MAAM,GAAGL,WAAWU,OAAO,EAAE;YACpCN,OAAO,CAAC,MAAM,EAAEA,KAAK,OAAO,CAAC;QAC/B;QACA,IAAID,KAAKE,MAAM,GAAGL,WAAWW,YAAY,EAAE;YACzCP,OAAO,CAAC,KAAK,EAAEA,KAAK,MAAM,CAAC;QAC7B;QACA,IAAID,KAAKE,MAAM,GAAGL,WAAWY,cAAc,EAAE;YAC3CR,OAAO,CAAC,KAAK,EAAEA,KAAK,MAAM,CAAC;QAC7B;QAEA,OAAOA;IACT;IACAS,WAAW;QAAC;KAAO;AACrB,EAAC"}
|
|
@@ -7,4 +7,4 @@ export const defaultHTMLConverters = [
|
|
|
7
7
|
LinebreakHTMLConverter
|
|
8
8
|
];
|
|
9
9
|
|
|
10
|
-
//# sourceMappingURL=
|
|
10
|
+
//# sourceMappingURL=defaultConverters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/field/features/converters/html/converter/defaultConverters.ts"],"sourcesContent":["import type { HTMLConverter } from './types.js'\n\nimport { LinebreakHTMLConverter } from './converters/linebreak.js'\nimport { ParagraphHTMLConverter } from './converters/paragraph.js'\nimport { TextHTMLConverter } from './converters/text.js'\n\nexport const defaultHTMLConverters: HTMLConverter[] = [\n ParagraphHTMLConverter,\n TextHTMLConverter,\n LinebreakHTMLConverter,\n]\n"],"names":["LinebreakHTMLConverter","ParagraphHTMLConverter","TextHTMLConverter","defaultHTMLConverters"],"mappings":"AAEA,SAASA,sBAAsB,QAAQ,4BAA2B;AAClE,SAASC,sBAAsB,QAAQ,4BAA2B;AAClE,SAASC,iBAAiB,QAAQ,uBAAsB;AAExD,OAAO,MAAMC,wBAAyC;IACpDF;IACAC;IACAF;CACD,CAAA"}
|
|
@@ -36,4 +36,4 @@ export async function convertLexicalNodesToHTML({ converters, lexicalNodes, pare
|
|
|
36
36
|
return htmlArray.join('') || '';
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
//# sourceMappingURL=
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/field/features/converters/html/converter/index.ts"],"sourcesContent":["import type { SerializedEditorState, SerializedLexicalNode } from 'lexical'\nimport type { Payload } from 'payload'\n\nimport type { HTMLConverter, SerializedLexicalNodeWithParent } from './types.js'\n\nexport async function convertLexicalToHTML({\n converters,\n data,\n payload,\n}: {\n converters: HTMLConverter[]\n data: SerializedEditorState\n /**\n * When the converter is called, payload CAN be passed in depending on where it's run.\n */\n payload: Payload | null\n}): Promise<string> {\n if (data?.root?.children?.length) {\n return await convertLexicalNodesToHTML({\n converters,\n lexicalNodes: data?.root?.children,\n parent: data?.root,\n payload,\n })\n }\n return ''\n}\n\nexport async function convertLexicalNodesToHTML({\n converters,\n lexicalNodes,\n parent,\n payload,\n}: {\n converters: HTMLConverter[]\n lexicalNodes: SerializedLexicalNode[]\n parent: SerializedLexicalNodeWithParent\n /**\n * When the converter is called, payload CAN be passed in depending on where it's run.\n */\n payload: Payload | null\n}): Promise<string> {\n const unknownConverter = converters.find((converter) => converter.nodeTypes.includes('unknown'))\n\n const htmlArray = await Promise.all(\n lexicalNodes.map(async (node, i) => {\n const converterForNode = converters.find((converter) =>\n converter.nodeTypes.includes(node.type),\n )\n if (!converterForNode) {\n if (unknownConverter) {\n return unknownConverter.converter({ childIndex: i, converters, node, parent, payload })\n }\n return '<span>unknown node</span>'\n }\n return converterForNode.converter({\n childIndex: i,\n converters,\n node,\n parent,\n payload,\n })\n }),\n )\n\n return htmlArray.join('') || ''\n}\n"],"names":["convertLexicalToHTML","converters","data","payload","root","children","length","convertLexicalNodesToHTML","lexicalNodes","parent","unknownConverter","find","converter","nodeTypes","includes","htmlArray","Promise","all","map","node","i","converterForNode","type","childIndex","join"],"mappings":"AAKA,OAAO,eAAeA,qBAAqB,EACzCC,UAAU,EACVC,IAAI,EACJC,OAAO,EAQR;IACC,IAAID,MAAME,MAAMC,UAAUC,QAAQ;QAChC,OAAO,MAAMC,0BAA0B;YACrCN;YACAO,cAAcN,MAAME,MAAMC;YAC1BI,QAAQP,MAAME;YACdD;QACF;IACF;IACA,OAAO;AACT;AAEA,OAAO,eAAeI,0BAA0B,EAC9CN,UAAU,EACVO,YAAY,EACZC,MAAM,EACNN,OAAO,EASR;IACC,MAAMO,mBAAmBT,WAAWU,IAAI,CAAC,CAACC,YAAcA,UAAUC,SAAS,CAACC,QAAQ,CAAC;IAErF,MAAMC,YAAY,MAAMC,QAAQC,GAAG,CACjCT,aAAaU,GAAG,CAAC,OAAOC,MAAMC;QAC5B,MAAMC,mBAAmBpB,WAAWU,IAAI,CAAC,CAACC,YACxCA,UAAUC,SAAS,CAACC,QAAQ,CAACK,KAAKG,IAAI;QAExC,IAAI,CAACD,kBAAkB;YACrB,IAAIX,kBAAkB;gBACpB,OAAOA,iBAAiBE,SAAS,CAAC;oBAAEW,YAAYH;oBAAGnB;oBAAYkB;oBAAMV;oBAAQN;gBAAQ;YACvF;YACA,OAAO;QACT;QACA,OAAOkB,iBAAiBT,SAAS,CAAC;YAChCW,YAAYH;YACZnB;YACAkB;YACAV;YACAN;QACF;IACF;IAGF,OAAOY,UAAUS,IAAI,CAAC,OAAO;AAC/B"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { };
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/field/features/converters/html/converter/types.ts"],"sourcesContent":["import type { SerializedLexicalNode } from 'lexical'\nimport type { Payload } from 'payload'\n\nexport type HTMLConverter<T extends SerializedLexicalNode = SerializedLexicalNode> = {\n converter: ({\n childIndex,\n converters,\n node,\n parent,\n payload,\n }: {\n childIndex: number\n converters: HTMLConverter[]\n node: T\n parent: SerializedLexicalNodeWithParent\n /**\n * When the converter is called, payload CAN be passed in depending on where it's run.\n */\n payload: Payload | null\n }) => Promise<string> | string\n nodeTypes: string[]\n}\n\nexport type SerializedLexicalNodeWithParent = SerializedLexicalNode & {\n parent?: SerializedLexicalNode\n}\n"],"names":[],"mappings":"AAuBA,WAEC"}
|
|
@@ -11,4 +11,4 @@ export const HTMLConverterFeature = (props)=>{
|
|
|
11
11
|
};
|
|
12
12
|
};
|
|
13
13
|
|
|
14
|
-
//# sourceMappingURL=
|
|
14
|
+
//# sourceMappingURL=feature.server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/field/features/converters/html/feature.server.ts"],"sourcesContent":["import type { FeatureProviderProviderServer } from '../../types.js'\nimport type { HTMLConverter } from './converter/types.js'\n\nexport type HTMLConverterFeatureProps = {\n converters?:\n | (({ defaultConverters }: { defaultConverters: HTMLConverter[] }) => HTMLConverter[])\n | HTMLConverter[]\n}\n\nexport const HTMLConverterFeature: FeatureProviderProviderServer<\n HTMLConverterFeatureProps,\n undefined\n> = (props) => {\n return {\n feature: () => {\n return {\n clientFeatureProps: null,\n serverFeatureProps: props,\n }\n },\n key: 'htmlConverter',\n serverFeatureProps: props,\n }\n}\n"],"names":["HTMLConverterFeature","props","feature","clientFeatureProps","serverFeatureProps","key"],"mappings":"AASA,OAAO,MAAMA,uBAGT,CAACC;IACH,OAAO;QACLC,SAAS;YACP,OAAO;gBACLC,oBAAoB;gBACpBC,oBAAoBH;YACtB;QACF;QACAI,KAAK;QACLD,oBAAoBH;IACtB;AACF,EAAC"}
|
|
@@ -111,4 +111,4 @@ export const lexicalHTML = (lexicalFieldName, props)=>{
|
|
|
111
111
|
};
|
|
112
112
|
};
|
|
113
113
|
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9mZWF0dXJlcy9jb252ZXJ0ZXJzL2h0bWwvZmllbGQvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTZXJpYWxpemVkRWRpdG9yU3RhdGUgfSBmcm9tICdsZXhpY2FsJ1xuaW1wb3J0IHR5cGUgeyBGaWVsZCwgUmljaFRleHRGaWVsZCwgVGV4dEZpZWxkIH0gZnJvbSAncGF5bG9hZC90eXBlcydcblxuaW1wb3J0IHR5cGUgeyBMZXhpY2FsUmljaFRleHRBZGFwdGVyLCBTYW5pdGl6ZWRTZXJ2ZXJFZGl0b3JDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbmRleC5qcydcbmltcG9ydCB0eXBlIHsgQWRhcHRlclByb3BzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdHlwZXMuanMnXG5pbXBvcnQgdHlwZSB7IEhUTUxDb252ZXJ0ZXIgfSBmcm9tICcuLi9jb252ZXJ0ZXIvdHlwZXMuanMnXG5pbXBvcnQgdHlwZSB7IEhUTUxDb252ZXJ0ZXJGZWF0dXJlUHJvcHMgfSBmcm9tICcuLi9mZWF0dXJlLnNlcnZlci5qcydcblxuaW1wb3J0IHsgZGVmYXVsdEhUTUxDb252ZXJ0ZXJzIH0gZnJvbSAnLi4vY29udmVydGVyL2RlZmF1bHRDb252ZXJ0ZXJzLmpzJ1xuaW1wb3J0IHsgY29udmVydExleGljYWxUb0hUTUwgfSBmcm9tICcuLi9jb252ZXJ0ZXIvaW5kZXguanMnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIG5hbWU6IHN0cmluZ1xufVxuXG4vKipcbiAqIENvbWJpbmVzIHRoZSBkZWZhdWx0IEhUTUwgY29udmVydGVycyB3aXRoIEhUTUwgY29udmVydGVycyBmb3VuZCBpbiB0aGUgZmVhdHVyZXMsIGFuZCB3aXRoIEhUTUwgY29udmVydGVycyBjb25maWd1cmVkIGluIHRoZSBodG1sQ29udmVydGVyIGZlYXR1cmUuXG4gKlxuICogQHBhcmFtIGVkaXRvckNvbmZpZ1xuICovXG5leHBvcnQgY29uc3QgY29uc29saWRhdGVIVE1MQ29udmVydGVycyA9ICh7XG4gIGVkaXRvckNvbmZpZyxcbn06IHtcbiAgZWRpdG9yQ29uZmlnOiBTYW5pdGl6ZWRTZXJ2ZXJFZGl0b3JDb25maWdcbn0pID0+IHtcbiAgY29uc3QgaHRtbENvbnZlcnRlckZlYXR1cmUgPSBlZGl0b3JDb25maWcucmVzb2x2ZWRGZWF0dXJlTWFwLmdldCgnaHRtbENvbnZlcnRlcicpXG4gIGNvbnN0IGh0bWxDb252ZXJ0ZXJGZWF0dXJlUHJvcHM6IEhUTUxDb252ZXJ0ZXJGZWF0dXJlUHJvcHMgPVxuICAgIGh0bWxDb252ZXJ0ZXJGZWF0dXJlPy5zZXJ2ZXJGZWF0dXJlUHJvcHNcblxuICBjb25zdCBkZWZhdWx0Q29udmVydGVyc1dpdGhDb252ZXJ0ZXJzRnJvbUZlYXR1cmVzID0gZGVmYXVsdEhUTUxDb252ZXJ0ZXJzXG5cbiAgZm9yIChjb25zdCBjb252ZXJ0ZXIgb2YgZWRpdG9yQ29uZmlnLmZlYXR1cmVzLmNvbnZlcnRlcnMuaHRtbCkge1xuICAgIGRlZmF1bHRDb252ZXJ0ZXJzV2l0aENvbnZlcnRlcnNGcm9tRmVhdHVyZXMucHVzaChjb252ZXJ0ZXIpXG4gIH1cblxuICBjb25zdCBmaW5hbENvbnZlcnRlcnMgPVxuICAgIGh0bWxDb252ZXJ0ZXJGZWF0dXJlUHJvcHM/LmNvbnZlcnRlcnMgJiZcbiAgICB0eXBlb2YgaHRtbENvbnZlcnRlckZlYXR1cmVQcm9wcz8uY29udmVydGVycyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBodG1sQ29udmVydGVyRmVhdHVyZVByb3BzLmNvbnZlcnRlcnMoe1xuICAgICAgICAgIGRlZmF1bHRDb252ZXJ0ZXJzOiBkZWZhdWx0Q29udmVydGVyc1dpdGhDb252ZXJ0ZXJzRnJvbUZlYXR1cmVzLFxuICAgICAgICB9KVxuICAgICAgOiAoaHRtbENvbnZlcnRlckZlYXR1cmVQcm9wcz8uY29udmVydGVycyBhcyBIVE1MQ29udmVydGVyW10pIHx8XG4gICAgICAgIGRlZmF1bHRDb252ZXJ0ZXJzV2l0aENvbnZlcnRlcnNGcm9tRmVhdHVyZXNcblxuICByZXR1cm4gZmluYWxDb252ZXJ0ZXJzXG59XG5cbmV4cG9ydCBjb25zdCBsZXhpY2FsSFRNTDogKFxuICAvKipcbiAgICogQSBzdHJpbmcgd2hpY2ggbWF0Y2hlcyB0aGUgbGV4aWNhbCBmaWVsZCBuYW1lIHlvdSB3YW50IHRvIGNvbnZlcnQgdG8gSFRNTC5cbiAgICpcbiAgICogVGhpcyBoYXMgdG8gYmUgYSBTSUJMSU5HIGZpZWxkIG9mIHRoaXMgbGV4aWNhbEhUTUwgZmllbGQgLSBvdGhlcndpc2UsIGl0IHdvbid0IGJlIGFibGUgdG8gZmluZCB0aGUgbGV4aWNhbCBmaWVsZC5cbiAgICoqL1xuICBsZXhpY2FsRmllbGROYW1lOiBzdHJpbmcsXG4gIHByb3BzOiBQcm9wcyxcbikgPT4gVGV4dEZpZWxkID0gKGxleGljYWxGaWVsZE5hbWUsIHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgbmFtZSA9ICdsZXhpY2FsSFRNTCcgfSA9IHByb3BzXG4gIHJldHVybiB7XG4gICAgbmFtZSxcbiAgICB0eXBlOiAndGV4dCcsXG4gICAgYWRtaW46IHtcbiAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICB9LFxuICAgIGhvb2tzOiB7XG4gICAgICBhZnRlclJlYWQ6IFtcbiAgICAgICAgYXN5bmMgKHsgY29sbGVjdGlvbiwgZmllbGQsIGdsb2JhbCwgcmVxLCBzaWJsaW5nRGF0YSB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgZmllbGRzID0gY29sbGVjdGlvbiA/IGNvbGxlY3Rpb24uZmllbGRzIDogZ2xvYmFsLmZpZWxkc1xuXG4gICAgICAgICAgLy8gZmluZCB0aGUgcGF0aCBvZiB0aGlzIGZpZWxkLCBhcyB3ZWxsIGFzIGl0cyBzaWJsaW5nIGZpZWxkcywgYnkgbG9va2luZyBmb3IgdGhpcyBgZmllbGRgIGluIGZpZWxkcyBhbmQgdHJhdmVyc2luZyBpdCByZWN1cnNpdmVseVxuICAgICAgICAgIGZ1bmN0aW9uIGZpbmRGaWVsZFBhdGhBbmRTaWJsaW5nRmllbGRzKFxuICAgICAgICAgICAgZmllbGRzOiBGaWVsZFtdLFxuICAgICAgICAgICAgcGF0aDogc3RyaW5nW10sXG4gICAgICAgICAgKToge1xuICAgICAgICAgICAgcGF0aDogc3RyaW5nW11cbiAgICAgICAgICAgIHNpYmxpbmdGaWVsZHM6IEZpZWxkW11cbiAgICAgICAgICB9IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY3VyRmllbGQgb2YgZmllbGRzKSB7XG4gICAgICAgICAgICAgIGlmIChjdXJGaWVsZCA9PT0gZmllbGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgcGF0aDogWy4uLnBhdGgsIGN1ckZpZWxkLm5hbWVdLFxuICAgICAgICAgICAgICAgICAgc2libGluZ0ZpZWxkczogZmllbGRzLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICgnZmllbGRzJyBpbiBjdXJGaWVsZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRGaWVsZFBhdGhBbmRTaWJsaW5nRmllbGRzKFxuICAgICAgICAgICAgICAgICAgY3VyRmllbGQuZmllbGRzLFxuICAgICAgICAgICAgICAgICAgJ25hbWUnIGluIGN1ckZpZWxkID8gWy4uLnBhdGgsIGN1ckZpZWxkLm5hbWVdIDogWy4uLnBhdGhdLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCd0YWJzJyBpbiBjdXJGaWVsZCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdGFiIG9mIGN1ckZpZWxkLnRhYnMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRGaWVsZFBhdGhBbmRTaWJsaW5nRmllbGRzKFxuICAgICAgICAgICAgICAgICAgICB0YWIuZmllbGRzLFxuICAgICAgICAgICAgICAgICAgICAnbmFtZScgaW4gdGFiID8gWy4uLnBhdGgsIHRhYi5uYW1lXSA6IFsuLi5wYXRoXSxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmICgnYmxvY2tzJyBpbiBjdXJGaWVsZCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYmxvY2sgb2YgY3VyRmllbGQuYmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoYmxvY2s/LmZpZWxkcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRGaWVsZFBhdGhBbmRTaWJsaW5nRmllbGRzKGJsb2NrLmZpZWxkcywgW1xuICAgICAgICAgICAgICAgICAgICAgIC4uLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgY3VyRmllbGQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBibG9jay5zbHVnLFxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZm91bmRTaWJsaW5nRmllbGRzID0gZmluZEZpZWxkUGF0aEFuZFNpYmxpbmdGaWVsZHMoZmllbGRzLCBbXSlcblxuICAgICAgICAgIGlmICghZm91bmRTaWJsaW5nRmllbGRzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgQ291bGQgbm90IGZpbmQgc2libGluZyBmaWVsZHMgb2YgY3VycmVudCBsZXhpY2FsSFRNTCBmaWVsZCB3aXRoIG5hbWUgJHtmaWVsZD8ubmFtZX1gLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgY29uc3QgeyBzaWJsaW5nRmllbGRzIH0gPSBmb3VuZFNpYmxpbmdGaWVsZHNcbiAgICAgICAgICBjb25zdCBsZXhpY2FsRmllbGQ6IFJpY2hUZXh0RmllbGQ8U2VyaWFsaXplZEVkaXRvclN0YXRlLCBBZGFwdGVyUHJvcHM+ID1cbiAgICAgICAgICAgIHNpYmxpbmdGaWVsZHMuZmluZChcbiAgICAgICAgICAgICAgKGZpZWxkKSA9PiAnbmFtZScgaW4gZmllbGQgJiYgZmllbGQubmFtZSA9PT0gbGV4aWNhbEZpZWxkTmFtZSxcbiAgICAgICAgICAgICkgYXMgUmljaFRleHRGaWVsZDxTZXJpYWxpemVkRWRpdG9yU3RhdGUsIEFkYXB0ZXJQcm9wcz5cblxuICAgICAgICAgIGNvbnN0IGxleGljYWxGaWVsZERhdGE6IFNlcmlhbGl6ZWRFZGl0b3JTdGF0ZSA9IHNpYmxpbmdEYXRhW2xleGljYWxGaWVsZE5hbWVdXG5cbiAgICAgICAgICBpZiAoIWxleGljYWxGaWVsZERhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiAnJ1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghbGV4aWNhbEZpZWxkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICdZb3UgY2Fubm90IHVzZSB0aGUgbGV4aWNhbEhUTUwgZmllbGQgYmVjYXVzZSB0aGUgcmVmZXJlbmNlZCBsZXhpY2FsIGZpZWxkIHdhcyBub3QgZm91bmQnLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IChsZXhpY2FsRmllbGQ/LmVkaXRvciBhcyBMZXhpY2FsUmljaFRleHRBZGFwdGVyKT8uZWRpdG9yQ29uZmlnXG5cbiAgICAgICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnVGhlIGxpbmtlZCBsZXhpY2FsIGZpZWxkIGRvZXMgbm90IGhhdmUgYW4gZWRpdG9yQ29uZmlnLiBUaGlzIGlzIG5lZWRlZCBmb3IgdGhlIGxleGljYWxIVE1MIGZpZWxkLicsXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFjb25maWc/LnJlc29sdmVkRmVhdHVyZU1hcD8uaGFzKCdodG1sQ29udmVydGVyJykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ1lvdSBjYW5ub3QgdXNlIHRoZSBsZXhpY2FsSFRNTCBmaWVsZCBiZWNhdXNlIHRoZSBsaW5rZWQgbGV4aWNhbCBmaWVsZCBkb2VzIG5vdCBoYXZlIGEgSFRNTENvbnZlcnRlckZlYXR1cmUnLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpbmFsQ29udmVydGVycyA9IGNvbnNvbGlkYXRlSFRNTENvbnZlcnRlcnMoe1xuICAgICAgICAgICAgZWRpdG9yQ29uZmlnOiBjb25maWcsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiBhd2FpdCBjb252ZXJ0TGV4aWNhbFRvSFRNTCh7XG4gICAgICAgICAgICBjb252ZXJ0ZXJzOiBmaW5hbENvbnZlcnRlcnMsXG4gICAgICAgICAgICBkYXRhOiBsZXhpY2FsRmllbGREYXRhLFxuICAgICAgICAgICAgcGF5bG9hZDogcmVxLnBheWxvYWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfVxufVxuIl0sIm5hbWVzIjpbImRlZmF1bHRIVE1MQ29udmVydGVycyIsImNvbnZlcnRMZXhpY2FsVG9IVE1MIiwiY29uc29saWRhdGVIVE1MQ29udmVydGVycyIsImVkaXRvckNvbmZpZyIsImh0bWxDb252ZXJ0ZXJGZWF0dXJlIiwicmVzb2x2ZWRGZWF0dXJlTWFwIiwiZ2V0IiwiaHRtbENvbnZlcnRlckZlYXR1cmVQcm9wcyIsInNlcnZlckZlYXR1cmVQcm9wcyIsImRlZmF1bHRDb252ZXJ0ZXJzV2l0aENvbnZlcnRlcnNGcm9tRmVhdHVyZXMiLCJjb252ZXJ0ZXIiLCJmZWF0dXJlcyIsImNvbnZlcnRlcnMiLCJodG1sIiwicHVzaCIsImZpbmFsQ29udmVydGVycyIsImRlZmF1bHRDb252ZXJ0ZXJzIiwibGV4aWNhbEhUTUwiLCJsZXhpY2FsRmllbGROYW1lIiwicHJvcHMiLCJuYW1lIiwidHlwZSIsImFkbWluIiwiaGlkZGVuIiwiaG9va3MiLCJhZnRlclJlYWQiLCJjb2xsZWN0aW9uIiwiZmllbGQiLCJnbG9iYWwiLCJyZXEiLCJzaWJsaW5nRGF0YSIsImZpZWxkcyIsImZpbmRGaWVsZFBhdGhBbmRTaWJsaW5nRmllbGRzIiwicGF0aCIsImN1ckZpZWxkIiwic2libGluZ0ZpZWxkcyIsInJlc3VsdCIsInRhYiIsInRhYnMiLCJibG9jayIsImJsb2NrcyIsImxlbmd0aCIsInNsdWciLCJmb3VuZFNpYmxpbmdGaWVsZHMiLCJFcnJvciIsImxleGljYWxGaWVsZCIsImZpbmQiLCJsZXhpY2FsRmllbGREYXRhIiwiY29uZmlnIiwiZWRpdG9yIiwiaGFzIiwiZGF0YSIsInBheWxvYWQiXSwibWFwcGluZ3MiOiJBQVFBLFNBQVNBLHFCQUFxQixRQUFRLG9DQUFtQztBQUN6RSxTQUFTQyxvQkFBb0IsUUFBUSx3QkFBdUI7QUFNNUQ7Ozs7Q0FJQyxHQUNELE9BQU8sTUFBTUMsNEJBQTRCLENBQUMsRUFDeENDLFlBQVksRUFHYjtJQUNDLE1BQU1DLHVCQUF1QkQsYUFBYUUsa0JBQWtCLENBQUNDLEdBQUcsQ0FBQztJQUNqRSxNQUFNQyw0QkFDSkgsc0JBQXNCSTtJQUV4QixNQUFNQyw4Q0FBOENUO0lBRXBELEtBQUssTUFBTVUsYUFBYVAsYUFB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
|
|
114
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/field/features/converters/html/field/index.ts"],"sourcesContent":["import type { SerializedEditorState } from 'lexical'\nimport type { Field, RichTextField, TextField } from 'payload/types'\n\nimport type { LexicalRichTextAdapter, SanitizedServerEditorConfig } from '../../../../../index.js'\nimport type { AdapterProps } from '../../../../../types.js'\nimport type { HTMLConverter } from '../converter/types.js'\nimport type { HTMLConverterFeatureProps } from '../feature.server.js'\n\nimport { defaultHTMLConverters } from '../converter/defaultConverters.js'\nimport { convertLexicalToHTML } from '../converter/index.js'\n\ntype Props = {\n name: string\n}\n\n/**\n * Combines the default HTML converters with HTML converters found in the features, and with HTML converters configured in the htmlConverter feature.\n *\n * @param editorConfig\n */\nexport const consolidateHTMLConverters = ({\n editorConfig,\n}: {\n editorConfig: SanitizedServerEditorConfig\n}) => {\n const htmlConverterFeature = editorConfig.resolvedFeatureMap.get('htmlConverter')\n const htmlConverterFeatureProps: HTMLConverterFeatureProps =\n htmlConverterFeature?.serverFeatureProps\n\n const defaultConvertersWithConvertersFromFeatures = defaultHTMLConverters\n\n for (const converter of editorConfig.features.converters.html) {\n defaultConvertersWithConvertersFromFeatures.push(converter)\n }\n\n const finalConverters =\n htmlConverterFeatureProps?.converters &&\n typeof htmlConverterFeatureProps?.converters === 'function'\n ? htmlConverterFeatureProps.converters({\n defaultConverters: defaultConvertersWithConvertersFromFeatures,\n })\n : (htmlConverterFeatureProps?.converters as HTMLConverter[]) ||\n defaultConvertersWithConvertersFromFeatures\n\n return finalConverters\n}\n\nexport const lexicalHTML: (\n /**\n * A string which matches the lexical field name you want to convert to HTML.\n *\n * This has to be a SIBLING field of this lexicalHTML field - otherwise, it won't be able to find the lexical field.\n **/\n lexicalFieldName: string,\n props: Props,\n) => TextField = (lexicalFieldName, props) => {\n const { name = 'lexicalHTML' } = props\n return {\n name,\n type: 'text',\n admin: {\n hidden: true,\n },\n hooks: {\n afterRead: [\n async ({ collection, field, global, req, siblingData }) => {\n const fields = collection ? collection.fields : global.fields\n\n // find the path of this field, as well as its sibling fields, by looking for this `field` in fields and traversing it recursively\n function findFieldPathAndSiblingFields(\n fields: Field[],\n path: string[],\n ): {\n path: string[]\n siblingFields: Field[]\n } {\n for (const curField of fields) {\n if (curField === field) {\n return {\n path: [...path, curField.name],\n siblingFields: fields,\n }\n }\n\n if ('fields' in curField) {\n const result = findFieldPathAndSiblingFields(\n curField.fields,\n 'name' in curField ? [...path, curField.name] : [...path],\n )\n if (result) {\n return result\n }\n } else if ('tabs' in curField) {\n for (const tab of curField.tabs) {\n const result = findFieldPathAndSiblingFields(\n tab.fields,\n 'name' in tab ? [...path, tab.name] : [...path],\n )\n if (result) {\n return result\n }\n }\n } else if ('blocks' in curField) {\n for (const block of curField.blocks) {\n if (block?.fields?.length) {\n const result = findFieldPathAndSiblingFields(block.fields, [\n ...path,\n curField.name,\n block.slug,\n ])\n if (result) {\n return result\n }\n }\n }\n }\n }\n\n return null\n }\n\n const foundSiblingFields = findFieldPathAndSiblingFields(fields, [])\n\n if (!foundSiblingFields)\n throw new Error(\n `Could not find sibling fields of current lexicalHTML field with name ${field?.name}`,\n )\n\n const { siblingFields } = foundSiblingFields\n const lexicalField: RichTextField<SerializedEditorState, AdapterProps> =\n siblingFields.find(\n (field) => 'name' in field && field.name === lexicalFieldName,\n ) as RichTextField<SerializedEditorState, AdapterProps>\n\n const lexicalFieldData: SerializedEditorState = siblingData[lexicalFieldName]\n\n if (!lexicalFieldData) {\n return ''\n }\n\n if (!lexicalField) {\n throw new Error(\n 'You cannot use the lexicalHTML field because the referenced lexical field was not found',\n )\n }\n\n const config = (lexicalField?.editor as LexicalRichTextAdapter)?.editorConfig\n\n if (!config) {\n throw new Error(\n 'The linked lexical field does not have an editorConfig. This is needed for the lexicalHTML field.',\n )\n }\n\n if (!config?.resolvedFeatureMap?.has('htmlConverter')) {\n throw new Error(\n 'You cannot use the lexicalHTML field because the linked lexical field does not have a HTMLConverterFeature',\n )\n }\n\n const finalConverters = consolidateHTMLConverters({\n editorConfig: config,\n })\n\n return await convertLexicalToHTML({\n converters: finalConverters,\n data: lexicalFieldData,\n payload: req.payload,\n })\n },\n ],\n },\n }\n}\n"],"names":["defaultHTMLConverters","convertLexicalToHTML","consolidateHTMLConverters","editorConfig","htmlConverterFeature","resolvedFeatureMap","get","htmlConverterFeatureProps","serverFeatureProps","defaultConvertersWithConvertersFromFeatures","converter","features","converters","html","push","finalConverters","defaultConverters","lexicalHTML","lexicalFieldName","props","name","type","admin","hidden","hooks","afterRead","collection","field","global","req","siblingData","fields","findFieldPathAndSiblingFields","path","curField","siblingFields","result","tab","tabs","block","blocks","length","slug","foundSiblingFields","Error","lexicalField","find","lexicalFieldData","config","editor","has","data","payload"],"mappings":"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"}
|
|
@@ -9,4 +9,4 @@ import { useLexicalFeature } from '../../useLexicalFeature.js';
|
|
|
9
9
|
};
|
|
10
10
|
};
|
|
11
11
|
|
|
12
|
-
//# sourceMappingURL=
|
|
12
|
+
//# sourceMappingURL=createClientComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/field/features/createClientComponent.tsx"],"sourcesContent":["'use client'\n\nimport type { FeatureProviderProviderClient, ServerFeature } from './types.js'\n\nimport { useLexicalFeature } from '../../useLexicalFeature.js'\n\n/**\n * Utility function to create a client component for the client feature\n */\nexport const createClientComponent = <ClientFeatureProps,>(\n clientFeature: FeatureProviderProviderClient<ClientFeatureProps>,\n): ServerFeature<unknown, ClientFeatureProps>['ClientComponent'] => {\n return (props) => {\n useLexicalFeature(props.featureKey, clientFeature(props))\n return null\n }\n}\n"],"names":["useLexicalFeature","createClientComponent","clientFeature","props","featureKey"],"mappings":"AAAA;AAIA,SAASA,iBAAiB,QAAQ,6BAA4B;AAE9D;;CAEC,GACD,OAAO,MAAMC,wBAAwB,CACnCC;IAEA,OAAO,CAACC;QACNH,kBAAkBG,MAAMC,UAAU,EAAEF,cAAcC;QAClD,OAAO;IACT;AACF,EAAC"}
|
|
@@ -11,4 +11,4 @@ export const createFeaturePropComponent = (prop)=>{
|
|
|
11
11
|
};
|
|
12
12
|
};
|
|
13
13
|
|
|
14
|
-
//# sourceMappingURL=
|
|
14
|
+
//# sourceMappingURL=createFeaturePropComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/field/features/createFeaturePropComponent.tsx"],"sourcesContent":["'use client'\n\nimport type React from 'react'\n\nimport { useAddClientFunction, useFieldPath } from '@payloadcms/ui'\n\nconst useLexicalFeatureProp = <T,>(featureKey: string, componentKey: string, prop: T) => {\n const { schemaPath } = useFieldPath()\n\n useAddClientFunction(\n `lexicalFeature.${schemaPath}.${featureKey}.components.${componentKey}`,\n prop,\n )\n}\n\nexport const createFeaturePropComponent = <T = unknown,>(\n prop: T,\n): React.FC<{ componentKey: string; featureKey: string }> => {\n return (props) => {\n useLexicalFeatureProp(props.featureKey, props.componentKey, prop)\n return null\n }\n}\n"],"names":["useAddClientFunction","useFieldPath","useLexicalFeatureProp","featureKey","componentKey","prop","schemaPath","createFeaturePropComponent","props"],"mappings":"AAAA;AAIA,SAASA,oBAAoB,EAAEC,YAAY,QAAQ,iBAAgB;AAEnE,MAAMC,wBAAwB,CAAKC,YAAoBC,cAAsBC;IAC3E,MAAM,EAAEC,UAAU,EAAE,GAAGL;IAEvBD,qBACE,CAAC,eAAe,EAAEM,WAAW,CAAC,EAAEH,WAAW,YAAY,EAAEC,aAAa,CAAC,EACvEC;AAEJ;AAEA,OAAO,MAAME,6BAA6B,CACxCF;IAEA,OAAO,CAACG;QACNN,sBAAsBM,MAAML,UAAU,EAAEK,MAAMJ,YAAY,EAAEC;QAC5D,OAAO;IACT;AACF,EAAC"}
|
|
@@ -17,4 +17,4 @@ const TestRecorderFeatureClient = (props)=>{
|
|
|
17
17
|
};
|
|
18
18
|
export const TestRecorderFeatureClientComponent = createClientComponent(TestRecorderFeatureClient);
|
|
19
19
|
|
|
20
|
-
//# sourceMappingURL=
|
|
20
|
+
//# sourceMappingURL=feature.client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/field/features/debug/testrecorder/feature.client.tsx"],"sourcesContent":["'use client'\nimport type { FeatureProviderProviderClient } from '../../types.js'\n\nimport { createClientComponent } from '../../createClientComponent.js'\nimport { TestRecorderPlugin } from './plugin/index.js'\n\nconst TestRecorderFeatureClient: FeatureProviderProviderClient<undefined> = (props) => {\n return {\n clientFeatureProps: props,\n feature: () => ({\n clientFeatureProps: props,\n plugins: [\n {\n Component: TestRecorderPlugin,\n position: 'bottom',\n },\n ],\n }),\n }\n}\n\nexport const TestRecorderFeatureClientComponent = createClientComponent(TestRecorderFeatureClient)\n"],"names":["createClientComponent","TestRecorderPlugin","TestRecorderFeatureClient","props","clientFeatureProps","feature","plugins","Component","position","TestRecorderFeatureClientComponent"],"mappings":"AAAA;AAGA,SAASA,qBAAqB,QAAQ,iCAAgC;AACtE,SAASC,kBAAkB,QAAQ,oBAAmB;AAEtD,MAAMC,4BAAsE,CAACC;IAC3E,OAAO;QACLC,oBAAoBD;QACpBE,SAAS,IAAO,CAAA;gBACdD,oBAAoBD;gBACpBG,SAAS;oBACP;wBACEC,WAAWN;wBACXO,UAAU;oBACZ;iBACD;YACH,CAAA;IACF;AACF;AAEA,OAAO,MAAMC,qCAAqCT,sBAAsBE,2BAA0B"}
|
|
@@ -12,4 +12,4 @@ export const TestRecorderFeature = (props)=>{
|
|
|
12
12
|
};
|
|
13
13
|
};
|
|
14
14
|
|
|
15
|
-
//# sourceMappingURL=
|
|
15
|
+
//# sourceMappingURL=feature.server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/field/features/debug/testrecorder/feature.server.ts"],"sourcesContent":["import type { FeatureProviderProviderServer } from '../../types.js'\n\nimport { TestRecorderFeatureClientComponent } from './feature.client.js'\n\nexport const TestRecorderFeature: FeatureProviderProviderServer<undefined, undefined> = (props) => {\n return {\n feature: () => {\n return {\n ClientComponent: TestRecorderFeatureClientComponent,\n serverFeatureProps: props,\n }\n },\n key: 'testrecorder',\n serverFeatureProps: props,\n }\n}\n"],"names":["TestRecorderFeatureClientComponent","TestRecorderFeature","props","feature","ClientComponent","serverFeatureProps","key"],"mappings":"AAEA,SAASA,kCAAkC,QAAQ,sBAAqB;AAExE,OAAO,MAAMC,sBAA2E,CAACC;IACvF,OAAO;QACLC,SAAS;YACP,OAAO;gBACLC,iBAAiBJ;gBACjBK,oBAAoBH;YACtB;QACF;QACAI,KAAK;QACLD,oBAAoBH;IACtB;AACF,EAAC"}
|
|
@@ -445,4 +445,4 @@ export const TestRecorderPlugin = ()=>{
|
|
|
445
445
|
return /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("p", null, "HI"), testRecorderButton, testRecorderOutput, /*#__PURE__*/ React.createElement("p", null, "DONE"));
|
|
446
446
|
};
|
|
447
447
|
|
|
448
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9mZWF0dXJlcy9kZWJ1Zy90ZXN0cmVjb3JkZXIvcGx1Z2luL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgQmFzZVNlbGVjdGlvbiwgTGV4aWNhbEVkaXRvciB9IGZyb20gJ2xleGljYWwnXG5cbmltcG9ydCBsZXhpY2FsQ29tcG9zZXJDb250ZXh0SW1wb3J0IGZyb20gJ0BsZXhpY2FsL3JlYWN0L0xleGljYWxDb21wb3NlckNvbnRleHQuanMnXG5jb25zdCB7IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQgfSA9IGxleGljYWxDb21wb3NlckNvbnRleHRJbXBvcnRcbmltcG9ydCBsZXhpY2FsSW1wb3J0IGZyb20gJ2xleGljYWwnXG5jb25zdCB7ICRjcmVhdGVQYXJhZ3JhcGhOb2RlLCAkY3JlYXRlVGV4dE5vZGUsICRnZXRSb290IH0gPSBsZXhpY2FsSW1wb3J0XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBJU19BUFBMRSB9IGZyb20gJy4uLy4uLy4uLy4uL2xleGljYWwvdXRpbHMvZW52aXJvbm1lbnQuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgY29weSA9ICh0ZXh0OiBudWxsIHwgc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHRleHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKVxuICB0ZXh0QXJlYS52YWx1ZSA9IHRleHQgfHwgJydcbiAgdGV4dEFyZWEuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXG4gIHRleHRBcmVhLnN0eWxlLm9wYWNpdHkgPSAnMCdcbiAgZG9jdW1lbnQuYm9keT8uYXBwZW5kQ2hpbGQodGV4dEFyZWEpXG4gIHRleHRBcmVhLmZvY3VzKClcbiAgdGV4dEFyZWEuc2VsZWN0KClcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZyhyZXN1bHQpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgfVxuICBkb2N1bWVudC5ib2R5Py5yZW1vdmVDaGlsZCh0ZXh0QXJlYSlcbn1cblxuY29uc3QgZG93bmxvYWQgPSAoZmlsZW5hbWU6IHN0cmluZywgdGV4dDogbnVsbCB8IHN0cmluZykgPT4ge1xuICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gIGEuc2V0QXR0cmlidXRlKCdocmVmJywgJ2RhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04LCcgKyBlbmNvZGVVUklDb21wb25lbnQodGV4dCB8fCAnJykpXG4gIGEuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVuYW1lKVxuICBhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgZG9jdW1lbnQuYm9keT8uYXBwZW5kQ2hpbGQoYSlcbiAgYS5jbGljaygpXG4gIGRvY3VtZW50LmJvZHk/LnJlbW92ZUNoaWxkKGEpXG59XG5cbmNvbnN0IGZvcm1hdFN0ZXAgPSAoc3RlcDogU3RlcCkgPT4ge1xuICBjb25zdCBmb3JtYXRPbmVTdGVwID0gKG5hbWU6IHN0cmluZywgdmFsdWU6IFN0ZXBbJ3ZhbHVlJ10pID0+IHtcbiAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgIGNhc2UgJ2NsaWNrJzoge1xuICAgICAgICByZXR1cm4gYCAgICAgIGF3YWl0IHBhZ2UubW91c2UuY2xpY2soJHt2YWx1ZS54fSwgJHt2YWx1ZS55fSk7YFxuICAgICAgfVxuICAgICAgY2FzZSAncHJlc3MnOiB7XG4gICAgICAgIHJldHVybiBgICAgICAgYXdhaXQgcGFnZS5rZXlib2FyZC5wcmVzcygnJHt2YWx1ZX0nKTtgXG4gICAgICB9XG4gICAgICBjYXNlICdrZXlkb3duJzoge1xuICAgICAgICByZXR1cm4gYCAgICAgIGF3YWl0IHBhZ2Uua2V5Ym9hcmQua2V5ZG93bignJHt2YWx1ZX0nKTtgXG4gICAgICB9XG4gICAgICBjYXNlICdrZXl1cCc6IHtcbiAgICAgICAgcmV0dXJuIGAgICAgICBhd2FpdCBwYWdlLmtleWJvYXJkLmtleXVwKCcke3ZhbHVlfScpO2BcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3R5cGUnOiB7XG4gICAgICAgIHJldHVybiBgICAgICAgYXdhaXQgcGFnZS5rZXlib2FyZC50eXBlKCcke3ZhbHVlfScpO2BcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3NlbGVjdEFsbCc6IHtcbiAgICAgICAgcmV0dXJuIGAgICAgICBhd2FpdCBzZWxlY3RBbGwocGFnZSk7YFxuICAgICAgfVxuICAgICAgY2FzZSAnc25hcHNob3QnOiB7XG4gICAgICAgIHJldHVybiBgICAgICAgYXdhaXQgYXNzZXJ0SFRNTFNuYXBzaG90KHBhZ2UpO1xuICAgICAgYXdhaXQgYXNzZXJ0U2VsZWN0aW9uKHBhZ2UsIHtcbiAgICAgICAgYW5jaG9yUGF0aDogWyR7dmFsdWUuYW5jaG9yUGF0aC50b1N0cmluZygpfV0sXG4gICAgICAgIGFuY2hvck9mZnNldDogJHt2YWx1ZS5hbmNob3JPZmZzZXR9LFxuICAgICAgICBmb2N1c1BhdGg6IFske3ZhbHVlLmZvY3VzUGF0aC50b1N0cmluZygpfV0sXG4gICAgICAgIGZvY3VzT2Zmc2V0OiAke3ZhbHVlLmZvY3VzT2Zmc2V0fSxcbiAgICAgIH0pO1xuYFxuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGBgXG4gICAgfVxuICB9XG4gIGNvbnN0IGZvcm1hdHRlZFN0ZXAgPSBmb3JtYXRPbmVTdGVwKHN0ZXAubmFtZSwgc3RlcC52YWx1ZSlcbiAgc3dpdGNoIChzdGVwLmNvdW50KSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGZvcm1hdHRlZFN0ZXBcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gW2Zvcm1hdHRlZFN0ZXAsIGZvcm1hdHRlZFN0ZXBdLmpvaW4oYFxcbmApXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBgICAgICAgYXdhaXQgcmVwZWF0KCR7c3RlcC5jb3VudH0sIGFzeW5jICgpID0+IHtcbiAgJHtmb3JtYXR0ZWRTdGVwfVxuICAgICAgKTtgXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2VsZWN0QWxsKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiBldmVudC5rZXlDb2RlID09PSA2NSAmJiAoSVNfQVBQTEUgPyBldmVudC5tZXRhS2V5IDogZXZlbnQuY3RybEtleSlcbn1cblxuLy8gc3RvbGVuIGZyb20gTGV4aWNhbFNlbGVjdGlvbi10ZXN0XG5mdW5jdGlvbiBzYW5pdGl6ZVNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbikge1xuICBjb25zdCB7IGFuY2hvck5vZGUsIGZvY3VzTm9kZSB9ID0gc2VsZWN0aW9uXG4gIGxldCB7IGFuY2hvck9mZnNldCwgZm9jdXNPZmZzZXQgfSA9IHNlbGVjdGlvblxuICBpZiAoYW5jaG9yT2Zmc2V0ICE9PSAwKSB7XG4gICAgYW5jaG9yT2Zmc2V0LS1cbiAgfVxuICBpZiAoZm9jdXNPZmZzZXQgIT09IDApIHtcbiAgICBmb2N1c09mZnNldC0tXG4gIH1cbiAgcmV0dXJuIHsgYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0IH1cbn1cblxuZnVuY3Rpb24gZ2V0UGF0aEZyb21Ob2RlVG9FZGl0b3Iobm9kZTogTm9kZSwgcm9vdEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCkge1xuICBsZXQgY3VycmVudE5vZGU6IE5vZGUgfCBudWxsIHwgdW5kZWZpbmVkID0gbm9kZVxuICBjb25zdCBwYXRoID0gW11cbiAgd2hpbGUgKGN1cnJlbnROb2RlICE9PSByb290RWxlbWVudCkge1xuICAgIGlmIChjdXJyZW50Tm9kZSAhPT0gbnVsbCAmJiBjdXJyZW50Tm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXRoLnVuc2hpZnQoXG4gICAgICAgIEFycmF5LmZyb20oY3VycmVudE5vZGU/LnBhcmVudE5vZGU/LmNoaWxkTm9kZXMgPz8gW10pLmluZGV4T2YoY3VycmVudE5vZGUgYXMgQ2hpbGROb2RlKSxcbiAgICAgIClcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZT8ucGFyZW50Tm9kZVxuICB9XG4gIHJldHVybiBwYXRoXG59XG5cbmNvbnN0IGtleVByZXNzZXMgPSBuZXcgU2V0KFtcbiAgJ0VudGVyJyxcbiAgJ0JhY2tzcGFjZScsXG4gICdEZWxldGUnLFxuICAnRXNjYXBlJyxcbiAgJ0Fycm93TGVmdCcsXG4gICdBcnJvd1JpZ2h0JyxcbiAgJ0Fycm93VXAnLFxuICAnQXJyb3dEb3duJyxcbl0pXG5cbnR5cGUgU3RlcCA9IHtcbiAgY291bnQ6IG51bWJlclxuICBuYW1lOiBzdHJpbmdcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgdmFsdWU6IGFueVxufVxuXG50eXBlIFN0ZXBzID0gU3RlcFtdXG5cbmZ1bmN0aW9uIHVzZVRlc3RSZWNvcmRlcihlZGl0b3I6IExleGljYWxFZGl0b3IpOiBbSlNYLkVsZW1lbnQsIEpTWC5FbGVtZW50IHwgbnVsbF0ge1xuICBjb25zdCBbc3RlcHMsIHNldFN0ZXBzXSA9IHVzZVN0YXRlPFN0ZXBzPihbXSlcbiAgY29uc3QgW2lzUmVjb3JkaW5nLCBzZXRJc1JlY29yZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgWywgc2V0Q3VycmVudElubmVySFRNTF0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgW3RlbXBsYXRlZFRlc3QsIHNldFRlbXBsYXRlZFRlc3RdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IHByZXZpb3VzU2VsZWN0aW9uUmVmID0gdXNlUmVmPEJhc2VTZWxlY3Rpb24gfCBudWxsPihudWxsKVxuICBjb25zdCBza2lwTmV4dFNlbGVjdGlvbkNoYW5nZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgcHJlUmVmID0gdXNlUmVmPEhUTUxQcmVFbGVtZW50PihudWxsKVxuXG4gIGNvbnN0IGdldEN1cnJlbnRFZGl0b3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgcmV0dXJuIGVkaXRvclxuICB9LCBbZWRpdG9yXSlcblxuICBjb25zdCBnZW5lcmF0ZVRlc3RDb250ZW50ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHJvb3RFbGVtZW50ID0gZWRpdG9yLmdldFJvb3RFbGVtZW50KClcbiAgICBjb25zdCBicm93c2VyU2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG5cbiAgICBpZiAoXG4gICAgICByb290RWxlbWVudCA9PSBudWxsIHx8XG4gICAgICBicm93c2VyU2VsZWN0aW9uID09IG51bGwgfHxcbiAgICAgIGJyb3dzZXJTZWxlY3Rpb24uYW5jaG9yTm9kZSA9PSBudWxsIHx8XG4gICAgICBicm93c2VyU2VsZWN0aW9uLmZvY3VzTm9kZSA9PSBudWxsIHx8XG4gICAgICAhcm9vdEVsZW1lbnQuY29udGFpbnMoYnJvd3NlclNlbGVjdGlvbi5hbmNob3JOb2RlKSB8fFxuICAgICAgIXJvb3RFbGVtZW50LmNvbnRhaW5zKGJyb3dzZXJTZWxlY3Rpb24uZm9jdXNOb2RlKVxuICAgICkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gYFxuaW1wb3J0IHtcbiAgaW5pdGlhbGl6ZUUyRSxcbiAgYXNzZXJ0SFRNTFNuYXBzaG90LFxuICBhc3NlcnRTZWxlY3Rpb24sXG4gIHJlcGVhdCxcbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtzZWxlY3RBbGx9IGZyb20gJy4uL2tleWJvYXJkU2hvcnRjdXRzJztcbmltcG9ydCB7IFJhbmdlU2VsZWN0aW9uIH0gZnJvbSAnbGV4aWNhbCc7XG5pbXBvcnQgeyBOb2RlU2VsZWN0aW9uIH0gZnJvbSAnbGV4aWNhbCc7XG5cbmRlc2NyaWJlKCdUZXN0IGNhc2UnLCAoKSA9PiB7XG4gIGluaXRpYWxpemVFMkUoKGUyZSkgPT4ge1xuICAgIGl0KCdTaG91bGQgcGFzcyB0aGlzIHRlc3QnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7cGFnZX0gPSBlMmU7XG5cbiAgICAgIGF3YWl0IHBhZ2UuZm9jdXMoJ2Rpdltjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJdJyk7XG4ke3N0ZXBzLm1hcChmb3JtYXRTdGVwKS5qb2luKGBcXG5gKX1cbiAgICB9KTtcbn0pO1xuICAgIGBcbiAgfSwgW2VkaXRvciwgc3RlcHNdKVxuXG4gIC8vIGp1c3QgYSB3cmFwcGVyIGFyb3VuZCBpbnNlcnRpbmcgbmV3IGFjdGlvbnMgc28gdGhhdCB3ZSBjYW5cbiAgLy8gY29hbGVzY2Ugc29tZSBhY3Rpb25zIGxpa2UgaW5zZXJ0VGV4dC9tb3ZlTmF0aXZlU2VsZWN0aW9uXG4gIGNvbnN0IHB1c2hTdGVwID0gdXNlQ2FsbGJhY2soXG4gICAgKG5hbWU6IHN0cmluZywgdmFsdWU6IFN0ZXBbJ3ZhbHVlJ10pID0+IHtcbiAgICAgIHNldFN0ZXBzKChjdXJyZW50U3RlcHMpID0+IHtcbiAgICAgICAgLy8gdHJ5aW5nIHRvIGdyb3VwIHN0ZXBzXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHN0ZXBzLmxlbmd0aCAtIDFcbiAgICAgICAgY29uc3QgbGFzdFN0ZXAgPSBzdGVwc1tjdXJyZW50SW5kZXhdXG4gICAgICAgIGlmIChsYXN0U3RlcCkge1xuICAgICAgICAgIGlmIChsYXN0U3RlcC5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3R5cGUnKSB7XG4gICAgICAgICAgICAgIC8vIGZvciB0eXBpbmcgZXZlbnRzIHdlIGp1c3QgYXBwZW5kIHRoZSB0ZXh0XG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgLi4uc3RlcHMuc2xpY2UoMCwgY3VycmVudEluZGV4KSxcbiAgICAgICAgICAgICAgICB7IC4uLmxhc3RTdGVwLCB2YWx1ZTogbGFzdFN0ZXAudmFsdWUgKyB2YWx1ZSB9LFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBmb3Igb3RoZXIgZXZlbnRzIHdlIGJ1bXAgdGhlIGNvdW50ZXIgaWYgdGhlaXIgdmFsdWVzIGFyZSB0aGUgc2FtZVxuICAgICAgICAgICAgICBpZiAobGFzdFN0ZXAudmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5zdGVwcy5zbGljZSgwLCBjdXJyZW50SW5kZXgpLCB7IC4uLmxhc3RTdGVwLCBjb3VudDogbGFzdFN0ZXAuY291bnQgKyAxIH1dXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY291bGQgbm90IGdyb3VwLCBqdXN0IGFwcGVuZCBhIG5ldyBvbmVcbiAgICAgICAgcmV0dXJuIFsuLi5jdXJyZW50U3RlcHMsIHsgbmFtZSwgY291bnQ6IDEsIHZhbHVlIH1dXG4gICAgICB9KVxuICAgIH0sXG4gICAgW3N0ZXBzLCBzZXRTdGVwc10sXG4gIClcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uS2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgaWYgKCFpc1JlY29yZGluZykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleVxuICAgICAgaWYgKGlzU2VsZWN0QWxsKGV2ZW50KSkge1xuICAgICAgICBwdXNoU3RlcCgnc2VsZWN0QWxsJywgJycpXG4gICAgICB9IGVsc2UgaWYgKGtleVByZXNzZXMuaGFzKGtleSkpIHtcbiAgICAgICAgcHVzaFN0ZXAoJ3ByZXNzJywgZXZlbnQua2V5KVxuICAgICAgfSBlbHNlIGlmIChbLi4ua2V5XS5sZW5ndGggPiAxKSB7XG4gICAgICAgIHB1c2hTdGVwKCdrZXlkb3duJywgZXZlbnQua2V5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHVzaFN0ZXAoJ3R5cGUnLCBldmVudC5rZXkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25LZXlVcCA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgaWYgKCFpc1JlY29yZGluZykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleVxuICAgICAgaWYgKCFrZXlQcmVzc2VzLmhhcyhrZXkpICYmIFsuLi5rZXldLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcHVzaFN0ZXAoJ2tleXVwJywgZXZlbnQua2V5KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlZGl0b3IucmVnaXN0ZXJSb290TGlzdGVuZXIoXG4gICAgICAocm9vdEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCwgcHJldlJvb3RFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwpID0+IHtcbiAgICAgICAgaWYgKHByZXZSb290RWxlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIHByZXZSb290RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKVxuICAgICAgICAgIHByZXZSb290RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIG9uS2V5VXApXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvb3RFbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgcm9vdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5RG93bilcbiAgICAgICAgICByb290RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIG9uS2V5VXApXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKVxuICB9LCBbZWRpdG9yLCBpc1JlY29yZGluZywgcHVzaFN0ZXBdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHByZVJlZi5jdXJyZW50KSB7XG4gICAgICBwcmVSZWYuY3VycmVudC5zY3JvbGxUbygwLCBwcmVSZWYuY3VycmVudC5zY3JvbGxIZWlnaHQpXG4gICAgfVxuICB9LCBbZ2VuZXJhdGVUZXN0Q29udGVudF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc3RlcHMpIHtcbiAgICAgIGNvbnN0IHRlc3RDb250ZW50ID0gZ2VuZXJhdGVUZXN0Q29udGVudCgpXG4gICAgICBpZiAodGVzdENvbnRlbnQgIT09IG51bGwpIHtcbiAgICAgICAgc2V0VGVtcGxhdGVkVGVzdCh0ZXN0Q29udGVudClcbiAgICAgIH1cbiAgICAgIGlmIChwcmVSZWYuY3VycmVudCkge1xuICAgICAgICBwcmVSZWYuY3VycmVudC5zY3JvbGxUbygwLCBwcmVSZWYuY3VycmVudC5zY3JvbGxIZWlnaHQpXG4gICAgICB9XG4gICAgfVxuICB9LCBbZ2VuZXJhdGVUZXN0Q29udGVudCwgc3RlcHNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcmVtb3ZlVXBkYXRlTGlzdGVuZXIgPSBlZGl0b3IucmVnaXN0ZXJVcGRhdGVMaXN0ZW5lcihcbiAgICAgICh7IGRpcnR5RWxlbWVudHMsIGRpcnR5TGVhdmVzLCBlZGl0b3JTdGF0ZSB9KSA9PiB7XG4gICAgICAgIGlmICghaXNSZWNvcmRpbmcpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID0gZWRpdG9yU3RhdGUuX3NlbGVjdGlvblxuICAgICAgICBjb25zdCBwcmV2aW91c1NlbGVjdGlvbiA9IHByZXZpb3VzU2VsZWN0aW9uUmVmLmN1cnJlbnRcbiAgICAgICAgY29uc3Qgc2tpcE5leHRTZWxlY3Rpb25DaGFuZ2UgPSBza2lwTmV4dFNlbGVjdGlvbkNoYW5nZVJlZi5jdXJyZW50XG4gICAgICAgIGlmIChwcmV2aW91c1NlbGVjdGlvbiAhPT0gY3VycmVudFNlbGVjdGlvbikge1xuICAgICAgICAgIGlmIChkaXJ0eUxlYXZlcy5zaXplID09PSAwICYmIGRpcnR5RWxlbWVudHMuc2l6ZSA9PT0gMCAmJiAhc2tpcE5leHRTZWxlY3Rpb25DaGFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGJyb3dzZXJTZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgYnJvd3NlclNlbGVjdGlvbiAmJlxuICAgICAgICAgICAgICAoYnJvd3NlclNlbGVjdGlvbi5hbmNob3JOb2RlID09IG51bGwgfHwgYnJvd3NlclNlbGVjdGlvbi5mb2N1c05vZGUgPT0gbnVsbClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcHJldmlvdXNTZWxlY3Rpb25SZWYuY3VycmVudCA9IGN1cnJlbnRTZWxlY3Rpb25cbiAgICAgICAgfVxuICAgICAgICBza2lwTmV4dFNlbGVjdGlvbkNoYW5nZVJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgY29uc3QgdGVzdENvbnRlbnQgPSBnZW5lcmF0ZVRlc3RDb250ZW50KClcbiAgICAgICAgaWYgKHRlc3RDb250ZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgc2V0VGVtcGxhdGVkVGVzdCh0ZXN0Q29udGVudClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApXG4gICAgcmV0dXJuIHJlbW92ZVVwZGF0ZUxpc3RlbmVyXG4gIH0sIFtlZGl0b3IsIGdlbmVyYXRlVGVzdENvbnRlbnQsIGlzUmVjb3JkaW5nLCBwdXNoU3RlcF0pXG5cbiAgLy8gc2F2ZSBpbm5lckhUTUxcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzUmVjb3JkaW5nKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgcmVtb3ZlVXBkYXRlTGlzdGVuZXIgPSBlZGl0b3IucmVnaXN0ZXJVcGRhdGVMaXN0ZW5lcigoKSA9PiB7XG4gICAgICBjb25zdCByb290RWxlbWVudCA9IGVkaXRvci5nZXRSb290RWxlbWVudCgpXG4gICAgICBpZiAocm9vdEVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgc2V0Q3VycmVudElubmVySFRNTChyb290RWxlbWVudD8uaW5uZXJIVE1MKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHJlbW92ZVVwZGF0ZUxpc3RlbmVyXG4gIH0sIFtlZGl0b3IsIGlzUmVjb3JkaW5nXSlcblxuICAvLyBjbGVhciBlZGl0b3IgYW5kIHN0YXJ0IHJlY29yZGluZ1xuICBjb25zdCB0b2dnbGVFZGl0b3JTZWxlY3Rpb24gPSB1c2VDYWxsYmFjayhcbiAgICAoY3VycmVudEVkaXRvcjogTGV4aWNhbEVkaXRvcikgPT4ge1xuICAgICAgaWYgKCFpc1JlY29yZGluZykge1xuICAgICAgICBjdXJyZW50RWRpdG9yLnVwZGF0ZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgcm9vdCA9ICRnZXRSb290KClcbiAgICAgICAgICByb290LmNsZWFyKClcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gJGNyZWF0ZVRleHROb2RlKClcbiAgICAgICAgICByb290LmFwcGVuZCgkY3JlYXRlUGFyYWdyYXBoTm9kZSgpLmFwcGVuZCh0ZXh0KSlcbiAgICAgICAgICB0ZXh0LnNlbGVjdCgpXG4gICAgICAgIH0pXG4gICAgICAgIHNldFN0ZXBzKFtdKVxuICAgICAgfVxuICAgICAgc2V0SXNSZWNvcmRpbmcoKGN1cnJlbnRJc1JlY29yZGluZykgPT4gIWN1cnJlbnRJc1JlY29yZGluZylcbiAgICB9LFxuICAgIFtpc1JlY29yZGluZ10sXG4gIClcblxuICBjb25zdCBvblNuYXBzaG90Q2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFpc1JlY29yZGluZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IGJyb3dzZXJTZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICBpZiAoXG4gICAgICBicm93c2VyU2VsZWN0aW9uID09PSBudWxsIHx8XG4gICAgICBicm93c2VyU2VsZWN0aW9uLmFuY2hvck5vZGUgPT0gbnVsbCB8fFxuICAgICAgYnJvd3NlclNlbGVjdGlvbi5mb2N1c05vZGUgPT0gbnVsbFxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHsgYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0IH0gPSBzYW5pdGl6ZVNlbGVjdGlvbihicm93c2VyU2VsZWN0aW9uKVxuICAgIGNvbnN0IHJvb3RFbGVtZW50ID0gZ2V0Q3VycmVudEVkaXRvcigpLmdldFJvb3RFbGVtZW50KClcbiAgICBsZXQgYW5jaG9yUGF0aFxuICAgIGlmIChhbmNob3JOb2RlICE9PSBudWxsKSB7XG4gICAgICBhbmNob3JQYXRoID0gZ2V0UGF0aEZyb21Ob2RlVG9FZGl0b3IoYW5jaG9yTm9kZSwgcm9vdEVsZW1lbnQpXG4gICAgfVxuICAgIGxldCBmb2N1c1BhdGhcbiAgICBpZiAoZm9jdXNOb2RlICE9PSBudWxsKSB7XG4gICAgICBmb2N1c1BhdGggPSBnZXRQYXRoRnJvbU5vZGVUb0VkaXRvcihmb2N1c05vZGUsIHJvb3RFbGVtZW50KVxuICAgIH1cbiAgICBwdXNoU3RlcCgnc25hcHNob3QnLCB7XG4gICAgICBhbmNob3JOb2RlLFxuICAgICAgYW5jaG9yT2Zmc2V0LFxuICAgICAgYW5jaG9yUGF0aCxcbiAgICAgIGZvY3VzTm9kZSxcbiAgICAgIGZvY3VzT2Zmc2V0LFxuICAgICAgZm9jdXNQYXRoLFxuICAgIH0pXG4gIH0sIFtwdXNoU3RlcCwgaXNSZWNvcmRpbmcsIGdldEN1cnJlbnRFZGl0b3JdKVxuXG4gIGNvbnN0IG9uQ29weUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvcHkoZ2VuZXJhdGVUZXN0Q29udGVudCgpKVxuICB9LCBbZ2VuZXJhdGVUZXN0Q29udGVudF0pXG5cbiAgY29uc3Qgb25Eb3dubG9hZENsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRvd25sb2FkKCd0ZXN0LmpzJywgZ2VuZXJhdGVUZXN0Q29udGVudCgpKVxuICB9LCBbZ2VuZXJhdGVUZXN0Q29udGVudF0pXG5cbiAgY29uc3QgYnV0dG9uID0gKFxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzTmFtZT17YGVkaXRvci1kZXYtYnV0dG9uICR7aXNSZWNvcmRpbmcgPyAnYWN0aXZlJyA6ICcnfWB9XG4gICAgICBpZD1cInRlc3QtcmVjb3JkZXItYnV0dG9uXCJcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIHRvZ2dsZUVkaXRvclNlbGVjdGlvbihnZXRDdXJyZW50RWRpdG9yKCkpXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgfX1cbiAgICAgIHRpdGxlPXtpc1JlY29yZGluZyA/ICdEaXNhYmxlIHRlc3QgcmVjb3JkZXInIDogJ0VuYWJsZSB0ZXN0IHJlY29yZGVyJ31cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgID5cbiAgICAgIHtpc1JlY29yZGluZyA/ICdEaXNhYmxlIHRlc3QgcmVjb3JkZXInIDogJ0VuYWJsZSB0ZXN0IHJlY29yZGVyJ31cbiAgICA8L2J1dHRvbj5cbiAgKVxuICBjb25zdCBvdXRwdXQgPSBpc1JlY29yZGluZyA/IChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInRlc3QtcmVjb3JkZXItb3V0cHV0XCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInRlc3QtcmVjb3JkZXItdG9vbGJhclwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3NOYW1lPVwidGVzdC1yZWNvcmRlci1idXR0b25cIlxuICAgICAgICAgIGlkPVwidGVzdC1yZWNvcmRlci1idXR0b24tc25hcHNob3RcIlxuICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICBvblNuYXBzaG90Q2xpY2soKVxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgfX1cbiAgICAgICAgICB0aXRsZT1cIkluc2VydCBzbmFwc2hvdFwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICBJbnNlcnQgU25hcHNob3RcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXN0LXJlY29yZGVyLWJ1dHRvblwiXG4gICAgICAgICAgaWQ9XCJ0ZXN0LXJlY29yZGVyLWJ1dHRvbi1jb3B5XCJcbiAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgb25Db3B5Q2xpY2soKVxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgfX1cbiAgICAgICAgICB0aXRsZT1cIkNvcHkgdG8gY2xpcGJvYXJkXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIENvcHlcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXN0LXJlY29yZGVyLWJ1dHRvblwiXG4gICAgICAgICAgaWQ9XCJ0ZXN0LXJlY29yZGVyLWJ1dHRvbi1kb3dubG9hZFwiXG4gICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgIG9uRG93bmxvYWRDbGljaygpXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICB9fVxuICAgICAgICAgIHRpdGxlPVwiRG93bmxvYWQgYXMgYSBmaWxlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIERvd25sb2FkXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8cHJlIGlkPVwidGVzdC1yZWNvcmRlclwiIHJlZj17cHJlUmVmfT5cbiAgICAgICAge3RlbXBsYXRlZFRlc3R9XG4gICAgICA8L3ByZT5cbiAgICA8L2Rpdj5cbiAgKSA6IG51bGxcblxuICByZXR1cm4gW2J1dHRvbiwgb3V0cHV0XVxufVxuZXhwb3J0IGNvbnN0IFRlc3RSZWNvcmRlclBsdWdpbjogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IFtlZGl0b3JdID0gdXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpXG4gIGNvbnN0IFt0ZXN0UmVjb3JkZXJCdXR0b24sIHRlc3RSZWNvcmRlck91dHB1dF0gPSB1c2VUZXN0UmVjb3JkZXIoZWRpdG9yKVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPHA+SEk8L3A+XG4gICAgICB7dGVzdFJlY29yZGVyQnV0dG9ufVxuICAgICAge3Rlc3RSZWNvcmRlck91dHB1dH1cbiAgICAgIDxwPkRPTkU8L3A+XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKVxufVxuIl0sIm5hbWVzIjpbImxleGljYWxDb21wb3NlckNvbnRleHRJbXBvcnQiLCJ1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IiwibGV4aWNhbEltcG9ydCIsIiRjcmVhdGVQYXJhZ3JhcGhOb2RlIiwiJGNyZWF0ZVRleHROb2RlIiwiJGdldFJvb3QiLCJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwidXNlUmVmIiwidXNlU3RhdGUiLCJJU19BUFBMRSIsImNvcHkiLCJ0ZXh0IiwidGV4dEFyZWEiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJ2YWx1ZSIsInN0eWxlIiwicG9zaXRpb24iLCJvcGFjaXR5IiwiYm9keSIsImFwcGVuZENoaWxkIiwiZm9jdXMiLCJzZWxlY3QiLCJyZXN1bHQiLCJleGVjQ29tbWFuZCIsImNvbnNvbGUiLCJsb2ciLCJlcnJvciIsInJlbW92ZUNoaWxkIiwiZG93bmxvYWQiLCJmaWxlbmFtZSIsImEiLCJzZXRBdHRyaWJ1dGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJkaXNwbGF5IiwiY2xpY2siLCJmb3JtYXRTdGVwIiwic3RlcCIsImZvcm1hdE9uZVN0ZXAiLCJuYW1lIiwieCIsInkiLCJhbmNob3JQYXRoIiwidG9TdHJpbmciLCJhbmNob3JPZmZzZXQiLCJmb2N1c1BhdGgiLCJmb2N1c09mZnNldCIsImZvcm1hdHRlZFN0ZXAiLCJjb3VudCIsImpvaW4iLCJpc1NlbGVjdEFsbCIsImV2ZW50Iiwia2V5Q29kZSIsIm1ldGFLZXkiLCJjdHJsS2V5Iiwic2FuaXRpemVTZWxlY3Rpb24iLCJzZWxlY3Rpb24iLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwiZ2V0UGF0aEZyb21Ob2RlVG9FZGl0b3IiLCJub2RlIiwicm9vdEVsZW1lbnQiLCJjdXJyZW50Tm9kZSIsInBhdGgiLCJ1bmRlZmluZWQiLCJ1bnNoaWZ0IiwiQXJyYXkiLCJmcm9tIiwicGFyZW50Tm9kZSIsImNoaWxkTm9kZXMiLCJpbmRleE9mIiwia2V5UHJlc3NlcyIsIlNldCIsInVzZVRlc3RSZWNvcmRlciIsImVkaXRvciIsInN0ZXBzIiwic2V0U3RlcHMiLCJpc1JlY29yZGluZyIsInNldElzUmVjb3JkaW5nIiwic2V0Q3VycmVudElubmVySFRNTCIsInRlbXBsYXRlZFRlc3QiLCJzZXRUZW1wbGF0ZWRUZXN0IiwicHJldmlvdXNTZWxlY3Rpb25SZWYiLCJza2lwTmV4dFNlbGVjdGlvbkNoYW5nZVJlZiIsInByZVJlZiIsImdldEN1cnJlbnRFZGl0b3IiLCJnZW5lcmF0ZVRlc3RDb250ZW50IiwiZ2V0Um9vdEVsZW1lbnQiLCJicm93c2VyU2VsZWN0aW9uIiwid2luZG93IiwiZ2V0U2VsZWN0aW9uIiwiY29udGFpbnMiLCJtYXAiLCJwdXNoU3RlcCIsImN1cnJlbnRTdGVwcyIsImN1cnJlbnRJbmRleCIsImxlbmd0aCIsImxhc3RTdGVwIiwic2xpY2UiLCJvbktleURvd24iLCJrZXkiLCJoYXMiLCJvbktleVVwIiwicmVnaXN0ZXJSb290TGlzdGVuZXIiLCJwcmV2Um9vdEVsZW1lbnQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsImN1cnJlbnQiLCJzY3JvbGxUbyIsInNjcm9sbEhlaWdodCIsInRlc3RDb250ZW50IiwicmVtb3ZlVXBkYXRlTGlzdGVuZXIiLCJyZWdpc3RlclVwZGF0ZUxpc3RlbmVyIiwiZGlydHlFbGVtZW50cyIsImRpcnR5TGVhdmVzIiwiZWRpdG9yU3RhdGUiLCJjdXJyZW50U2VsZWN0aW9uIiwiX3NlbGVjdGlvbiIsInByZXZpb3VzU2VsZWN0aW9uIiwic2tpcE5leHRTZWxlY3Rpb25DaGFuZ2UiLCJzaXplIiwiaW5uZXJIVE1MIiwidG9nZ2xlRWRpdG9yU2VsZWN0aW9uIiwiY3VycmVudEVkaXRvciIsInVwZGF0ZSIsInJvb3QiLCJjbGVhciIsImFwcGVuZCIsImN1cnJlbnRJc1JlY29yZGluZyIsIm9uU25hcHNob3RDbGljayIsIm9uQ29weUNsaWNrIiwib25Eb3dubG9hZENsaWNrIiwiYnV0dG9uIiwiY2xhc3NOYW1lIiwiaWQiLCJvbkNsaWNrIiwiZSIsInByZXZlbnREZWZhdWx0IiwidGl0bGUiLCJ0eXBlIiwib3V0cHV0IiwiZGl2IiwicHJlIiwicmVmIiwiVGVzdFJlY29yZGVyUGx1Z2luIiwidGVzdFJlY29yZGVyQnV0dG9uIiwidGVzdFJlY29yZGVyT3V0cHV0IiwiRnJhZ21lbnQiLCJwIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUdBLE9BQU9BLGtDQUFrQywyQ0FBMEM7QUFDbkYsTUFBTSxFQUFFQyx5QkFBeUIsRUFBRSxHQUFHRDtBQUN0QyxPQUFPRSxtQkFBbUIsVUFBUztBQUNuQyxNQUFNLEVBQUVDLG9CQUFvQixFQUFFQyxlQUFlLEVBQUVDLFFBQVEsRUFBRSxHQUFHSDtBQUM1RCxZQUFZSSxXQUFXLFFBQU87QUFDOUIsU0FBU0MsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLGVBQWUsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsUUFBTztBQUVqRixTQUFTQyxRQUFRLFFBQVEsMkNBQTBDO0FBQ25FLE9BQU8s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
|
|
448
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/field/features/debug/testrecorder/plugin/index.tsx"],"sourcesContent":["'use client'\nimport type { BaseSelection, LexicalEditor } from 'lexical'\n\nimport lexicalComposerContextImport from '@lexical/react/LexicalComposerContext.js'\nconst { useLexicalComposerContext } = lexicalComposerContextImport\nimport lexicalImport from 'lexical'\nconst { $createParagraphNode, $createTextNode, $getRoot } = lexicalImport\nimport * as React from 'react'\nimport { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nimport { IS_APPLE } from '../../../../lexical/utils/environment.js'\nimport './index.scss'\n\nconst copy = (text: null | string) => {\n const textArea = document.createElement('textarea')\n textArea.value = text || ''\n textArea.style.position = 'absolute'\n textArea.style.opacity = '0'\n document.body?.appendChild(textArea)\n textArea.focus()\n textArea.select()\n try {\n const result = document.execCommand('copy')\n // eslint-disable-next-line no-console\n console.log(result)\n } catch (error) {\n console.error(error)\n }\n document.body?.removeChild(textArea)\n}\n\nconst download = (filename: string, text: null | string) => {\n const a = document.createElement('a')\n a.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text || ''))\n a.setAttribute('download', filename)\n a.style.display = 'none'\n document.body?.appendChild(a)\n a.click()\n document.body?.removeChild(a)\n}\n\nconst formatStep = (step: Step) => {\n const formatOneStep = (name: string, value: Step['value']) => {\n switch (name) {\n case 'click': {\n return ` await page.mouse.click(${value.x}, ${value.y});`\n }\n case 'press': {\n return ` await page.keyboard.press('${value}');`\n }\n case 'keydown': {\n return ` await page.keyboard.keydown('${value}');`\n }\n case 'keyup': {\n return ` await page.keyboard.keyup('${value}');`\n }\n case 'type': {\n return ` await page.keyboard.type('${value}');`\n }\n case 'selectAll': {\n return ` await selectAll(page);`\n }\n case 'snapshot': {\n return ` await assertHTMLSnapshot(page);\n await assertSelection(page, {\n anchorPath: [${value.anchorPath.toString()}],\n anchorOffset: ${value.anchorOffset},\n focusPath: [${value.focusPath.toString()}],\n focusOffset: ${value.focusOffset},\n });\n`\n }\n default:\n return ``\n }\n }\n const formattedStep = formatOneStep(step.name, step.value)\n switch (step.count) {\n case 1:\n return formattedStep\n case 2:\n return [formattedStep, formattedStep].join(`\\n`)\n default:\n return ` await repeat(${step.count}, async () => {\n ${formattedStep}\n );`\n }\n}\n\nexport function isSelectAll(event: KeyboardEvent): boolean {\n return event.keyCode === 65 && (IS_APPLE ? event.metaKey : event.ctrlKey)\n}\n\n// stolen from LexicalSelection-test\nfunction sanitizeSelection(selection: Selection) {\n const { anchorNode, focusNode } = selection\n let { anchorOffset, focusOffset } = selection\n if (anchorOffset !== 0) {\n anchorOffset--\n }\n if (focusOffset !== 0) {\n focusOffset--\n }\n return { anchorNode, anchorOffset, focusNode, focusOffset }\n}\n\nfunction getPathFromNodeToEditor(node: Node, rootElement: HTMLElement | null) {\n let currentNode: Node | null | undefined = node\n const path = []\n while (currentNode !== rootElement) {\n if (currentNode !== null && currentNode !== undefined) {\n path.unshift(\n Array.from(currentNode?.parentNode?.childNodes ?? []).indexOf(currentNode as ChildNode),\n )\n }\n currentNode = currentNode?.parentNode\n }\n return path\n}\n\nconst keyPresses = new Set([\n 'Enter',\n 'Backspace',\n 'Delete',\n 'Escape',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n])\n\ntype Step = {\n count: number\n name: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any\n}\n\ntype Steps = Step[]\n\nfunction useTestRecorder(editor: LexicalEditor): [JSX.Element, JSX.Element | null] {\n const [steps, setSteps] = useState<Steps>([])\n const [isRecording, setIsRecording] = useState(false)\n const [, setCurrentInnerHTML] = useState('')\n const [templatedTest, setTemplatedTest] = useState('')\n const previousSelectionRef = useRef<BaseSelection | null>(null)\n const skipNextSelectionChangeRef = useRef(false)\n const preRef = useRef<HTMLPreElement>(null)\n\n const getCurrentEditor = useCallback(() => {\n return editor\n }, [editor])\n\n const generateTestContent = useCallback(() => {\n const rootElement = editor.getRootElement()\n const browserSelection = window.getSelection()\n\n if (\n rootElement == null ||\n browserSelection == null ||\n browserSelection.anchorNode == null ||\n browserSelection.focusNode == null ||\n !rootElement.contains(browserSelection.anchorNode) ||\n !rootElement.contains(browserSelection.focusNode)\n ) {\n return null\n }\n\n return `\nimport {\n initializeE2E,\n assertHTMLSnapshot,\n assertSelection,\n repeat,\n} from '../utils';\nimport {selectAll} from '../keyboardShortcuts';\nimport { RangeSelection } from 'lexical';\nimport { NodeSelection } from 'lexical';\n\ndescribe('Test case', () => {\n initializeE2E((e2e) => {\n it('Should pass this test', async () => {\n const {page} = e2e;\n\n await page.focus('div[contenteditable=\"true\"]');\n${steps.map(formatStep).join(`\\n`)}\n });\n});\n `\n }, [editor, steps])\n\n // just a wrapper around inserting new actions so that we can\n // coalesce some actions like insertText/moveNativeSelection\n const pushStep = useCallback(\n (name: string, value: Step['value']) => {\n setSteps((currentSteps) => {\n // trying to group steps\n const currentIndex = steps.length - 1\n const lastStep = steps[currentIndex]\n if (lastStep) {\n if (lastStep.name === name) {\n if (name === 'type') {\n // for typing events we just append the text\n return [\n ...steps.slice(0, currentIndex),\n { ...lastStep, value: lastStep.value + value },\n ]\n } else {\n // for other events we bump the counter if their values are the same\n if (lastStep.value === value) {\n return [...steps.slice(0, currentIndex), { ...lastStep, count: lastStep.count + 1 }]\n }\n }\n }\n }\n // could not group, just append a new one\n return [...currentSteps, { name, count: 1, value }]\n })\n },\n [steps, setSteps],\n )\n\n useLayoutEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (!isRecording) {\n return\n }\n const key = event.key\n if (isSelectAll(event)) {\n pushStep('selectAll', '')\n } else if (keyPresses.has(key)) {\n pushStep('press', event.key)\n } else if ([...key].length > 1) {\n pushStep('keydown', event.key)\n } else {\n pushStep('type', event.key)\n }\n }\n\n const onKeyUp = (event: KeyboardEvent) => {\n if (!isRecording) {\n return\n }\n const key = event.key\n if (!keyPresses.has(key) && [...key].length > 1) {\n pushStep('keyup', event.key)\n }\n }\n\n return editor.registerRootListener(\n (rootElement: HTMLElement | null, prevRootElement: HTMLElement | null) => {\n if (prevRootElement !== null) {\n prevRootElement.removeEventListener('keydown', onKeyDown)\n prevRootElement.removeEventListener('keyup', onKeyUp)\n }\n if (rootElement !== null) {\n rootElement.addEventListener('keydown', onKeyDown)\n rootElement.addEventListener('keyup', onKeyUp)\n }\n },\n )\n }, [editor, isRecording, pushStep])\n\n useLayoutEffect(() => {\n if (preRef.current) {\n preRef.current.scrollTo(0, preRef.current.scrollHeight)\n }\n }, [generateTestContent])\n\n useEffect(() => {\n if (steps) {\n const testContent = generateTestContent()\n if (testContent !== null) {\n setTemplatedTest(testContent)\n }\n if (preRef.current) {\n preRef.current.scrollTo(0, preRef.current.scrollHeight)\n }\n }\n }, [generateTestContent, steps])\n\n useEffect(() => {\n const removeUpdateListener = editor.registerUpdateListener(\n ({ dirtyElements, dirtyLeaves, editorState }) => {\n if (!isRecording) {\n return\n }\n const currentSelection = editorState._selection\n const previousSelection = previousSelectionRef.current\n const skipNextSelectionChange = skipNextSelectionChangeRef.current\n if (previousSelection !== currentSelection) {\n if (dirtyLeaves.size === 0 && dirtyElements.size === 0 && !skipNextSelectionChange) {\n const browserSelection = window.getSelection()\n if (\n browserSelection &&\n (browserSelection.anchorNode == null || browserSelection.focusNode == null)\n ) {\n return\n }\n }\n previousSelectionRef.current = currentSelection\n }\n skipNextSelectionChangeRef.current = false\n const testContent = generateTestContent()\n if (testContent !== null) {\n setTemplatedTest(testContent)\n }\n },\n )\n return removeUpdateListener\n }, [editor, generateTestContent, isRecording, pushStep])\n\n // save innerHTML\n useEffect(() => {\n if (!isRecording) {\n return\n }\n const removeUpdateListener = editor.registerUpdateListener(() => {\n const rootElement = editor.getRootElement()\n if (rootElement !== null) {\n setCurrentInnerHTML(rootElement?.innerHTML)\n }\n })\n return removeUpdateListener\n }, [editor, isRecording])\n\n // clear editor and start recording\n const toggleEditorSelection = useCallback(\n (currentEditor: LexicalEditor) => {\n if (!isRecording) {\n currentEditor.update(() => {\n const root = $getRoot()\n root.clear()\n const text = $createTextNode()\n root.append($createParagraphNode().append(text))\n text.select()\n })\n setSteps([])\n }\n setIsRecording((currentIsRecording) => !currentIsRecording)\n },\n [isRecording],\n )\n\n const onSnapshotClick = useCallback(() => {\n if (!isRecording) {\n return\n }\n const browserSelection = window.getSelection()\n if (\n browserSelection === null ||\n browserSelection.anchorNode == null ||\n browserSelection.focusNode == null\n ) {\n return\n }\n const { anchorNode, anchorOffset, focusNode, focusOffset } = sanitizeSelection(browserSelection)\n const rootElement = getCurrentEditor().getRootElement()\n let anchorPath\n if (anchorNode !== null) {\n anchorPath = getPathFromNodeToEditor(anchorNode, rootElement)\n }\n let focusPath\n if (focusNode !== null) {\n focusPath = getPathFromNodeToEditor(focusNode, rootElement)\n }\n pushStep('snapshot', {\n anchorNode,\n anchorOffset,\n anchorPath,\n focusNode,\n focusOffset,\n focusPath,\n })\n }, [pushStep, isRecording, getCurrentEditor])\n\n const onCopyClick = useCallback(() => {\n copy(generateTestContent())\n }, [generateTestContent])\n\n const onDownloadClick = useCallback(() => {\n download('test.js', generateTestContent())\n }, [generateTestContent])\n\n const button = (\n <button\n className={`editor-dev-button ${isRecording ? 'active' : ''}`}\n id=\"test-recorder-button\"\n onClick={(e) => {\n toggleEditorSelection(getCurrentEditor())\n e.preventDefault()\n }}\n title={isRecording ? 'Disable test recorder' : 'Enable test recorder'}\n type=\"button\"\n >\n {isRecording ? 'Disable test recorder' : 'Enable test recorder'}\n </button>\n )\n const output = isRecording ? (\n <div className=\"test-recorder-output\">\n <div className=\"test-recorder-toolbar\">\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-snapshot\"\n onClick={(e) => {\n onSnapshotClick()\n e.preventDefault()\n }}\n title=\"Insert snapshot\"\n type=\"button\"\n >\n Insert Snapshot\n </button>\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-copy\"\n onClick={(e) => {\n onCopyClick()\n e.preventDefault()\n }}\n title=\"Copy to clipboard\"\n type=\"button\"\n >\n Copy\n </button>\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-download\"\n onClick={(e) => {\n onDownloadClick()\n e.preventDefault()\n }}\n title=\"Download as a file\"\n type=\"button\"\n >\n Download\n </button>\n </div>\n <pre id=\"test-recorder\" ref={preRef}>\n {templatedTest}\n </pre>\n </div>\n ) : null\n\n return [button, output]\n}\nexport const TestRecorderPlugin: React.FC = () => {\n const [editor] = useLexicalComposerContext()\n const [testRecorderButton, testRecorderOutput] = useTestRecorder(editor)\n\n return (\n <React.Fragment>\n <p>HI</p>\n {testRecorderButton}\n {testRecorderOutput}\n <p>DONE</p>\n </React.Fragment>\n )\n}\n"],"names":["lexicalComposerContextImport","useLexicalComposerContext","lexicalImport","$createParagraphNode","$createTextNode","$getRoot","React","useCallback","useEffect","useLayoutEffect","useRef","useState","IS_APPLE","copy","text","textArea","document","createElement","value","style","position","opacity","body","appendChild","focus","select","result","execCommand","console","log","error","removeChild","download","filename","a","setAttribute","encodeURIComponent","display","click","formatStep","step","formatOneStep","name","x","y","anchorPath","toString","anchorOffset","focusPath","focusOffset","formattedStep","count","join","isSelectAll","event","keyCode","metaKey","ctrlKey","sanitizeSelection","selection","anchorNode","focusNode","getPathFromNodeToEditor","node","rootElement","currentNode","path","undefined","unshift","Array","from","parentNode","childNodes","indexOf","keyPresses","Set","useTestRecorder","editor","steps","setSteps","isRecording","setIsRecording","setCurrentInnerHTML","templatedTest","setTemplatedTest","previousSelectionRef","skipNextSelectionChangeRef","preRef","getCurrentEditor","generateTestContent","getRootElement","browserSelection","window","getSelection","contains","map","pushStep","currentSteps","currentIndex","length","lastStep","slice","onKeyDown","key","has","onKeyUp","registerRootListener","prevRootElement","removeEventListener","addEventListener","current","scrollTo","scrollHeight","testContent","removeUpdateListener","registerUpdateListener","dirtyElements","dirtyLeaves","editorState","currentSelection","_selection","previousSelection","skipNextSelectionChange","size","innerHTML","toggleEditorSelection","currentEditor","update","root","clear","append","currentIsRecording","onSnapshotClick","onCopyClick","onDownloadClick","button","className","id","onClick","e","preventDefault","title","type","output","div","pre","ref","TestRecorderPlugin","testRecorderButton","testRecorderOutput","Fragment","p"],"mappings":"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"}
|