@payloadcms/richtext-lexical 4.0.0-internal.c3ac604 → 4.0.0-internal.cb69780
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/exports/client/Field-TS5CRYHE.js +2 -0
- package/dist/exports/client/Field-TS5CRYHE.js.map +7 -0
- package/dist/exports/client/bundled.css +1 -1
- package/dist/exports/client/chunk-3LRZDIIG.js +2 -0
- package/dist/exports/client/{chunk-SSMQFWCQ.js.map → chunk-3LRZDIIG.js.map} +4 -4
- package/dist/exports/client/{chunk-ESITTE3C.js → chunk-ZFGDYZDE.js} +2 -2
- package/dist/exports/client/{chunk-ESITTE3C.js.map → chunk-ZFGDYZDE.js.map} +2 -2
- package/dist/exports/client/componentInline-55HZXGUS.js +2 -0
- package/dist/exports/client/index.d.ts +1 -1
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +26 -26
- package/dist/exports/client/index.js.map +4 -4
- package/dist/features/blocks/client/component/BlockReordering/index.d.ts +11 -0
- package/dist/features/blocks/client/component/BlockReordering/index.d.ts.map +1 -0
- package/dist/features/blocks/client/component/BlockReordering/index.js +18 -0
- package/dist/features/blocks/client/component/BlockReordering/index.js.map +1 -0
- package/dist/features/blocks/client/component/index.d.ts +0 -6
- package/dist/features/blocks/client/component/index.d.ts.map +1 -1
- package/dist/features/blocks/client/component/index.js +133 -76
- package/dist/features/blocks/client/component/index.js.map +1 -1
- package/dist/features/blocks/client/component/useBlockReordering.d.ts +16 -0
- package/dist/features/blocks/client/component/useBlockReordering.d.ts.map +1 -0
- package/dist/features/blocks/client/component/useBlockReordering.js +178 -0
- package/dist/features/blocks/client/component/useBlockReordering.js.map +1 -0
- package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
- package/dist/features/blocks/client/componentInline/index.js +2 -2
- package/dist/features/blocks/client/componentInline/index.js.map +1 -1
- package/dist/features/blocks/server/index.js +2 -2
- package/dist/features/blocks/server/index.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/heading.js +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/heading.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/list.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/list.js +4 -3
- package/dist/features/converters/lexicalToHtml/async/converters/list.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/shared/findConverterForNode.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/shared/findConverterForNode.js +3 -2
- package/dist/features/converters/lexicalToHtml/shared/findConverterForNode.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/heading.js +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/heading.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/list.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/list.js +4 -3
- package/dist/features/converters/lexicalToHtml/sync/converters/list.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/heading.d.ts.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/heading.js +2 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/heading.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/list.d.ts.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/list.js +2 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/list.js.map +1 -1
- package/dist/features/converters/utilities/payloadPopulateFn.d.ts.map +1 -1
- package/dist/features/converters/utilities/payloadPopulateFn.js +4 -2
- package/dist/features/converters/utilities/payloadPopulateFn.js.map +1 -1
- package/dist/features/heading/constants.d.ts +2 -0
- package/dist/features/heading/constants.d.ts.map +1 -0
- package/dist/features/heading/constants.js +2 -0
- package/dist/features/heading/constants.js.map +1 -0
- package/dist/features/heading/server/index.d.ts.map +1 -1
- package/dist/features/heading/server/index.js +5 -1
- package/dist/features/heading/server/index.js.map +1 -1
- package/dist/features/heading/server/validate.d.ts +6 -0
- package/dist/features/heading/server/validate.d.ts.map +1 -0
- package/dist/features/heading/server/validate.js +15 -0
- package/dist/features/heading/server/validate.js.map +1 -0
- package/dist/features/indent/client/IndentPlugin.d.ts.map +1 -1
- package/dist/features/indent/client/IndentPlugin.js +122 -1
- package/dist/features/indent/client/IndentPlugin.js.map +1 -1
- package/dist/features/indent/server/i18n.d.ts.map +1 -1
- package/dist/features/indent/server/i18n.js +74 -37
- package/dist/features/indent/server/i18n.js.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +6 -3
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
- package/dist/features/link/server/index.js +2 -2
- package/dist/features/link/server/index.js.map +1 -1
- package/dist/features/lists/checklist/server/index.d.ts.map +1 -1
- package/dist/features/lists/checklist/server/index.js +5 -2
- package/dist/features/lists/checklist/server/index.js.map +1 -1
- package/dist/features/lists/orderedList/server/index.d.ts.map +1 -1
- package/dist/features/lists/orderedList/server/index.js +5 -2
- package/dist/features/lists/orderedList/server/index.js.map +1 -1
- package/dist/features/lists/shared/constants.d.ts +2 -0
- package/dist/features/lists/shared/constants.d.ts.map +1 -0
- package/dist/features/lists/shared/constants.js +2 -0
- package/dist/features/lists/shared/constants.js.map +1 -0
- package/dist/features/lists/shared/validate.d.ts +5 -0
- package/dist/features/lists/shared/validate.d.ts.map +1 -0
- package/dist/features/lists/shared/validate.js +15 -0
- package/dist/features/lists/shared/validate.js.map +1 -0
- package/dist/features/lists/unorderedList/server/index.d.ts.map +1 -1
- package/dist/features/lists/unorderedList/server/index.js +5 -2
- package/dist/features/lists/unorderedList/server/index.js.map +1 -1
- package/dist/features/relationship/client/index.d.ts +2 -2
- package/dist/features/relationship/client/index.d.ts.map +1 -1
- package/dist/features/relationship/client/index.js.map +1 -1
- package/dist/features/relationship/client/plugins/index.d.ts +2 -2
- package/dist/features/relationship/client/plugins/index.d.ts.map +1 -1
- package/dist/features/relationship/client/plugins/index.js +27 -31
- package/dist/features/relationship/client/plugins/index.js.map +1 -1
- package/dist/features/relationship/client/utils/useEnabledRelationships.d.ts +2 -4
- package/dist/features/relationship/client/utils/useEnabledRelationships.d.ts.map +1 -1
- package/dist/features/relationship/client/utils/useEnabledRelationships.js +53 -20
- package/dist/features/relationship/client/utils/useEnabledRelationships.js.map +1 -1
- package/dist/features/relationship/server/graphQLPopulationPromise.d.ts +2 -2
- package/dist/features/relationship/server/graphQLPopulationPromise.d.ts.map +1 -1
- package/dist/features/relationship/server/graphQLPopulationPromise.js +2 -2
- package/dist/features/relationship/server/graphQLPopulationPromise.js.map +1 -1
- package/dist/features/relationship/server/index.d.ts +8 -1
- package/dist/features/relationship/server/index.d.ts.map +1 -1
- package/dist/features/relationship/server/index.js +28 -11
- package/dist/features/relationship/server/index.js.map +1 -1
- package/dist/features/relationship/server/schema.d.ts +2 -2
- package/dist/features/relationship/server/schema.d.ts.map +1 -1
- package/dist/features/relationship/server/schema.js +5 -10
- package/dist/features/relationship/server/schema.js.map +1 -1
- package/dist/features/relationship/shared/filterEnabledRelationshipCollections.d.ts +1 -6
- package/dist/features/relationship/shared/filterEnabledRelationshipCollections.d.ts.map +1 -1
- package/dist/features/relationship/shared/filterEnabledRelationshipCollections.js +1 -5
- package/dist/features/relationship/shared/filterEnabledRelationshipCollections.js.map +1 -1
- package/dist/features/table/client/index.d.ts.map +1 -0
- package/dist/features/table/client/index.js.map +1 -0
- package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.d.ts +8 -0
- package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.d.ts.map +1 -0
- package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.js +19 -0
- package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.js.map +1 -0
- package/dist/features/table/client/plugins/TableActionMenuPlugin/index.d.ts.map +1 -0
- package/dist/features/{experimental_table → table}/client/plugins/TableActionMenuPlugin/index.js +17 -44
- package/dist/features/table/client/plugins/TableActionMenuPlugin/index.js.map +1 -0
- package/dist/features/table/client/plugins/TableCellResizerPlugin/index.d.ts.map +1 -0
- package/dist/features/{experimental_table → table}/client/plugins/TableCellResizerPlugin/index.js +41 -18
- package/dist/features/table/client/plugins/TableCellResizerPlugin/index.js.map +1 -0
- package/dist/features/table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +1 -0
- package/dist/features/table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -0
- package/dist/features/table/client/plugins/TablePlugin/TableGridPopup/index.d.ts.map +1 -0
- package/dist/features/table/client/plugins/TablePlugin/TableGridPopup/index.js.map +1 -0
- package/dist/features/table/client/plugins/TablePlugin/index.d.ts.map +1 -0
- package/dist/features/table/client/plugins/TablePlugin/index.js.map +1 -0
- package/dist/features/table/client/utils/debounce.d.ts.map +1 -0
- package/dist/features/table/client/utils/debounce.js.map +1 -0
- package/dist/features/table/client/utils/useDebounce.d.ts.map +1 -0
- package/dist/features/table/client/utils/useDebounce.js.map +1 -0
- package/dist/features/table/markdownTransformer.d.ts.map +1 -0
- package/dist/features/table/markdownTransformer.js.map +1 -0
- package/dist/features/table/server/index.d.ts +3 -0
- package/dist/features/table/server/index.d.ts.map +1 -0
- package/dist/features/{experimental_table → table}/server/index.js +4 -4
- package/dist/features/table/server/index.js.map +1 -0
- package/dist/features/table/server/schema.d.ts.map +1 -0
- package/dist/features/table/server/schema.js.map +1 -0
- package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.d.ts +8 -0
- package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.d.ts.map +1 -0
- package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.js +80 -0
- package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.js.map +1 -0
- package/dist/features/toolbars/fixed/client/Toolbar/index.css +77 -3
- package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.js +4 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.js +1 -0
- package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +85 -32
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/index.css +16 -11
- package/dist/features/typesServer.d.ts +1 -1
- package/dist/features/typesServer.d.ts.map +1 -1
- package/dist/features/typesServer.js.map +1 -1
- package/dist/features/upload/client/index.d.ts +3 -2
- package/dist/features/upload/client/index.d.ts.map +1 -1
- package/dist/features/upload/client/index.js.map +1 -1
- package/dist/features/upload/client/plugin/index.d.ts.map +1 -1
- package/dist/features/upload/client/plugin/index.js +47 -52
- package/dist/features/upload/client/plugin/index.js.map +1 -1
- package/dist/features/upload/server/graphQLPopulationPromise.d.ts +2 -2
- package/dist/features/upload/server/graphQLPopulationPromise.d.ts.map +1 -1
- package/dist/features/upload/server/graphQLPopulationPromise.js +1 -1
- package/dist/features/upload/server/graphQLPopulationPromise.js.map +1 -1
- package/dist/features/upload/server/index.d.ts +6 -2
- package/dist/features/upload/server/index.d.ts.map +1 -1
- package/dist/features/upload/server/index.js +20 -16
- package/dist/features/upload/server/index.js.map +1 -1
- package/dist/features/upload/server/schema.d.ts +2 -2
- package/dist/features/upload/server/schema.d.ts.map +1 -1
- package/dist/features/upload/server/schema.js +4 -8
- package/dist/features/upload/server/schema.js.map +1 -1
- package/dist/features/upload/server/validate.d.ts +2 -2
- package/dist/features/upload/server/validate.d.ts.map +1 -1
- package/dist/features/upload/server/validate.js +3 -0
- package/dist/features/upload/server/validate.js.map +1 -1
- package/dist/field/Diff/converters/listitem/index.d.ts.map +1 -1
- package/dist/field/Diff/converters/listitem/index.js +2 -1
- package/dist/field/Diff/converters/listitem/index.js.map +1 -1
- package/dist/field/Diff/index.d.ts +3 -2
- package/dist/field/Diff/index.d.ts.map +1 -1
- package/dist/field/Diff/index.js +1 -0
- package/dist/field/Diff/index.js.map +1 -1
- package/dist/field/RenderLexical/index.d.ts +3 -1
- package/dist/field/RenderLexical/index.d.ts.map +1 -1
- package/dist/field/RenderLexical/index.js +23 -23
- package/dist/field/RenderLexical/index.js.map +1 -1
- package/dist/field/ViewSelector.d.ts.map +1 -1
- package/dist/field/ViewSelector.js +1 -0
- package/dist/field/ViewSelector.js.map +1 -1
- package/dist/field/bundled.css +1 -1
- package/dist/field/index.css +10 -10
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +68 -0
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/lexical/LexicalEditor.css +20 -9
- package/dist/lexical/LexicalEditor.d.ts.map +1 -1
- package/dist/lexical/LexicalEditor.js +61 -64
- package/dist/lexical/LexicalEditor.js.map +1 -1
- package/dist/lexical/config/server/loader.d.ts +1 -1
- package/dist/lexical/config/server/loader.d.ts.map +1 -1
- package/dist/lexical/config/server/loader.js +2 -2
- package/dist/lexical/config/server/loader.js.map +1 -1
- package/dist/lexical/config/server/sanitize.d.ts +1 -1
- package/dist/lexical/config/server/sanitize.d.ts.map +1 -1
- package/dist/lexical/config/server/sanitize.js +2 -2
- package/dist/lexical/config/server/sanitize.js.map +1 -1
- package/dist/lexical/plugins/InsertParagraphAtEnd/index.css +18 -24
- package/dist/lexical/plugins/InsertParagraphAtEnd/index.d.ts.map +1 -1
- package/dist/lexical/plugins/InsertParagraphAtEnd/index.js +27 -14
- package/dist/lexical/plugins/InsertParagraphAtEnd/index.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.css +1 -0
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js +2 -2
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.css +1 -0
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +16 -2
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.d.ts +7 -0
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.d.ts.map +1 -0
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js +65 -0
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js.map +1 -0
- package/dist/lexical/plugins/handles/utils/setHandlePosition.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/utils/setHandlePosition.js +2 -0
- package/dist/lexical/plugins/handles/utils/setHandlePosition.js.map +1 -1
- package/dist/lexical/ui/ContentEditable.d.ts +2 -1
- package/dist/lexical/ui/ContentEditable.d.ts.map +1 -1
- package/dist/lexical/ui/ContentEditable.js +9 -6
- package/dist/lexical/ui/ContentEditable.js.map +1 -1
- package/dist/lexical/ui/icons/H3/index.d.ts.map +1 -1
- package/dist/lexical/ui/icons/H3/index.js +13 -6
- package/dist/lexical/ui/icons/H3/index.js.map +1 -1
- package/dist/lexical/ui/icons/H4/index.d.ts.map +1 -1
- package/dist/lexical/ui/icons/H4/index.js +13 -6
- package/dist/lexical/ui/icons/H4/index.js.map +1 -1
- package/dist/lexical/ui/icons/H5/index.d.ts.map +1 -1
- package/dist/lexical/ui/icons/H5/index.js +13 -6
- package/dist/lexical/ui/icons/H5/index.js.map +1 -1
- package/dist/lexical/ui/icons/H6/index.d.ts.map +1 -1
- package/dist/lexical/ui/icons/H6/index.js +13 -6
- package/dist/lexical/ui/icons/H6/index.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/nodeTypes.d.ts +1 -1
- package/dist/types/nodeTypes.d.ts.map +1 -1
- package/dist/types/nodeTypes.js.map +1 -1
- package/dist/utilities/createServerFeature.d.ts +1 -1
- package/dist/utilities/createServerFeature.d.ts.map +1 -1
- package/dist/utilities/createServerFeature.js +2 -2
- package/dist/utilities/createServerFeature.js.map +1 -1
- package/dist/utilities/editorConfigFactory.d.ts +6 -6
- package/dist/utilities/editorConfigFactory.d.ts.map +1 -1
- package/dist/utilities/editorConfigFactory.js +9 -9
- package/dist/utilities/editorConfigFactory.js.map +1 -1
- package/dist/utilities/getDefaultSanitizedEditorConfig.d.ts +2 -2
- package/dist/utilities/getDefaultSanitizedEditorConfig.d.ts.map +1 -1
- package/dist/utilities/getDefaultSanitizedEditorConfig.js +6 -17
- package/dist/utilities/getDefaultSanitizedEditorConfig.js.map +1 -1
- package/dist/utilities/upgradeLexicalData/index.js +6 -3
- package/dist/utilities/upgradeLexicalData/index.js.map +1 -1
- package/package.json +22 -22
- package/dist/dependencyChecker.spec.js +0 -16
- package/dist/dependencyChecker.spec.js.map +0 -1
- package/dist/exports/client/Field-IZKDIUJY.js +0 -2
- package/dist/exports/client/Field-IZKDIUJY.js.map +0 -7
- package/dist/exports/client/chunk-SSMQFWCQ.js +0 -2
- package/dist/exports/client/componentInline-H24N7GUG.js +0 -2
- package/dist/features/converters/lexicalToPlaintext/convertLexicalToPlaintext.spec.js +0 -180
- package/dist/features/converters/lexicalToPlaintext/convertLexicalToPlaintext.spec.js.map +0 -1
- package/dist/features/experimental_table/client/index.d.ts.map +0 -1
- package/dist/features/experimental_table/client/index.js.map +0 -1
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.d.ts.map +0 -1
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js.map +0 -1
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.d.ts.map +0 -1
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +0 -1
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +0 -1
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +0 -1
- package/dist/features/experimental_table/client/plugins/TablePlugin/TableGridPopup/index.d.ts.map +0 -1
- package/dist/features/experimental_table/client/plugins/TablePlugin/TableGridPopup/index.js.map +0 -1
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.d.ts.map +0 -1
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.js.map +0 -1
- package/dist/features/experimental_table/client/utils/debounce.d.ts.map +0 -1
- package/dist/features/experimental_table/client/utils/debounce.js.map +0 -1
- package/dist/features/experimental_table/client/utils/useDebounce.d.ts.map +0 -1
- package/dist/features/experimental_table/client/utils/useDebounce.js.map +0 -1
- package/dist/features/experimental_table/markdownTransformer.d.ts.map +0 -1
- package/dist/features/experimental_table/markdownTransformer.js.map +0 -1
- package/dist/features/experimental_table/server/index.d.ts +0 -3
- package/dist/features/experimental_table/server/index.d.ts.map +0 -1
- package/dist/features/experimental_table/server/index.js.map +0 -1
- package/dist/features/experimental_table/server/schema.d.ts.map +0 -1
- package/dist/features/experimental_table/server/schema.js.map +0 -1
- package/dist/features/link/markdownTransformer.spec.js +0 -195
- package/dist/features/link/markdownTransformer.spec.js.map +0 -1
- package/dist/lexical/utils/markdown/convertFromMarkdownString.spec.js +0 -88
- package/dist/lexical/utils/markdown/convertFromMarkdownString.spec.js.map +0 -1
- package/dist/lexical/utils/url.spec.js +0 -114
- package/dist/lexical/utils/url.spec.js.map +0 -1
- package/dist/utilities/jsx/jsx.spec.js +0 -178
- package/dist/utilities/jsx/jsx.spec.js.map +0 -1
- /package/dist/exports/client/{componentInline-H24N7GUG.js.map → componentInline-55HZXGUS.js.map} +0 -0
- /package/dist/features/{experimental_table → table}/client/index.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/client/index.js +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TableActionMenuPlugin/index.css +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TableActionMenuPlugin/index.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TableCellResizerPlugin/index.css +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TableCellResizerPlugin/index.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TableHoverActionsPlugin/index.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TableHoverActionsPlugin/index.js +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/TableGridPopup/index.css +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/TableGridPopup/index.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/TableGridPopup/index.js +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/index.css +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/index.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/index.js +0 -0
- /package/dist/features/{experimental_table → table}/client/utils/debounce.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/client/utils/debounce.js +0 -0
- /package/dist/features/{experimental_table → table}/client/utils/useDebounce.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/client/utils/useDebounce.js +0 -0
- /package/dist/features/{experimental_table → table}/markdownTransformer.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/markdownTransformer.js +0 -0
- /package/dist/features/{experimental_table → table}/server/schema.d.ts +0 -0
- /package/dist/features/{experimental_table → table}/server/schema.js +0 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { $getNodeByKey, COMMAND_PRIORITY_HIGH, KEY_DOWN_COMMAND, SKIP_DOM_SELECTION_TAG } from 'lexical';
|
|
2
|
+
import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
|
|
3
|
+
export function useBlockReordering({
|
|
4
|
+
editor,
|
|
5
|
+
nodeKey
|
|
6
|
+
}) {
|
|
7
|
+
const [targetIndex, setTargetIndex] = useState(null);
|
|
8
|
+
const targetRef = useRef(null);
|
|
9
|
+
const isPointerDownRef = useRef(false);
|
|
10
|
+
const cancelAfterPointerRef = useRef(false);
|
|
11
|
+
const isReordering = targetIndex !== null;
|
|
12
|
+
useEffect(() => editor.registerCommand(KEY_DOWN_COMMAND, event => {
|
|
13
|
+
const target = event?.target;
|
|
14
|
+
// Leave action-menu keys to the controls instead of editing the retained selection.
|
|
15
|
+
return target instanceof HTMLElement && Boolean(editor.getElementByKey(nodeKey)?.contains(target)) && Boolean(target.closest('.collapsible__actions button'));
|
|
16
|
+
}, COMMAND_PRIORITY_HIGH), [editor, nodeKey]);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
if (!isReordering) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
let cancelTimer;
|
|
22
|
+
const onPointerDown = () => {
|
|
23
|
+
isPointerDownRef.current = true;
|
|
24
|
+
};
|
|
25
|
+
const onPointerUp = () => {
|
|
26
|
+
isPointerDownRef.current = false;
|
|
27
|
+
if (cancelAfterPointerRef.current) {
|
|
28
|
+
// Let the click fire before restoring the preview's original positions.
|
|
29
|
+
cancelTimer = setTimeout(() => {
|
|
30
|
+
targetRef.current = null;
|
|
31
|
+
setTargetIndex(null);
|
|
32
|
+
}, 0);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
document.addEventListener('pointerdown', onPointerDown, true);
|
|
36
|
+
document.addEventListener('pointerup', onPointerUp, true);
|
|
37
|
+
document.addEventListener('pointercancel', onPointerUp, true);
|
|
38
|
+
return () => {
|
|
39
|
+
document.removeEventListener('pointerdown', onPointerDown, true);
|
|
40
|
+
document.removeEventListener('pointerup', onPointerUp, true);
|
|
41
|
+
document.removeEventListener('pointercancel', onPointerUp, true);
|
|
42
|
+
clearTimeout(cancelTimer);
|
|
43
|
+
isPointerDownRef.current = false;
|
|
44
|
+
cancelAfterPointerRef.current = false;
|
|
45
|
+
};
|
|
46
|
+
}, [isReordering]);
|
|
47
|
+
useLayoutEffect(() => {
|
|
48
|
+
if (targetIndex === null) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const restore = [];
|
|
52
|
+
editor.getEditorState().read(() => {
|
|
53
|
+
const node = $getNodeByKey(nodeKey);
|
|
54
|
+
const siblings = node?.getParent()?.getChildren();
|
|
55
|
+
const currentIndex = node?.getIndexWithinParent();
|
|
56
|
+
if (!siblings || currentIndex === undefined || currentIndex === targetIndex) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const elements = siblings.map(sibling => editor.getElementByKey(sibling.getKey()));
|
|
60
|
+
const source = elements[currentIndex];
|
|
61
|
+
const target = elements[targetIndex];
|
|
62
|
+
const adjacent = elements[currentIndex + (targetIndex > currentIndex ? 1 : -1)];
|
|
63
|
+
if (!source || !target || !adjacent) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const sourceRect = source.getBoundingClientRect();
|
|
67
|
+
const targetRect = target.getBoundingClientRect();
|
|
68
|
+
const adjacentRect = adjacent.getBoundingClientRect();
|
|
69
|
+
const isMovingDown = targetIndex > currentIndex;
|
|
70
|
+
const sourceOffset = isMovingDown ? targetRect.bottom - sourceRect.bottom : targetRect.top - sourceRect.top;
|
|
71
|
+
const siblingOffset = isMovingDown ? sourceRect.top - adjacentRect.top : sourceRect.bottom - adjacentRect.bottom;
|
|
72
|
+
// Preview the pending order without committing an editor change until drop.
|
|
73
|
+
for (let index = Math.min(currentIndex, targetIndex); index <= Math.max(currentIndex, targetIndex); index++) {
|
|
74
|
+
const element = elements[index];
|
|
75
|
+
if (element) {
|
|
76
|
+
const translate = element.style.translate;
|
|
77
|
+
restore.push(() => {
|
|
78
|
+
element.style.translate = translate;
|
|
79
|
+
});
|
|
80
|
+
element.style.translate = `0 ${index === currentIndex ? sourceOffset : siblingOffset}px`;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
source.querySelector('.collapsible__drag')?.scrollIntoView({
|
|
84
|
+
block: 'nearest'
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
return () => restore.forEach(reset => reset());
|
|
88
|
+
}, [editor, nodeKey, targetIndex]);
|
|
89
|
+
const move = useCallback(({
|
|
90
|
+
direction,
|
|
91
|
+
index
|
|
92
|
+
}) => {
|
|
93
|
+
if (!editor.isEditable()) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
editor.update(() => {
|
|
97
|
+
const node = $getNodeByKey(nodeKey);
|
|
98
|
+
const siblings = node?.getParent()?.getChildren();
|
|
99
|
+
if (!node || !siblings) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const currentIndex = node.getIndexWithinParent();
|
|
103
|
+
const destination = index ?? currentIndex + (direction ?? 0);
|
|
104
|
+
const target = siblings[destination];
|
|
105
|
+
if (target && target !== node) {
|
|
106
|
+
if (destination < currentIndex) {
|
|
107
|
+
target.insertBefore(node);
|
|
108
|
+
} else {
|
|
109
|
+
target.insertAfter(node);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}, {
|
|
113
|
+
onUpdate: () => {
|
|
114
|
+
// The block header is recreated when its row number changes.
|
|
115
|
+
requestAnimationFrame(() => {
|
|
116
|
+
const header = editor.getElementByKey(nodeKey)?.querySelector('.collapsible__toggle-wrap');
|
|
117
|
+
const focusTarget = header?.querySelector('.collapsible__drag') ?? header?.querySelector('.LexicalEditorTheme__block__actions-button');
|
|
118
|
+
focusTarget?.focus();
|
|
119
|
+
});
|
|
120
|
+
},
|
|
121
|
+
tag: SKIP_DOM_SELECTION_TAG
|
|
122
|
+
});
|
|
123
|
+
}, [editor, nodeKey]);
|
|
124
|
+
const onKeyDown = useCallback(event => {
|
|
125
|
+
if (!editor.isEditable()) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (event.key === ' ' || event.key === 'Enter') {
|
|
129
|
+
event.preventDefault();
|
|
130
|
+
event.stopPropagation();
|
|
131
|
+
if (targetRef.current === null) {
|
|
132
|
+
editor.getEditorState().read(() => {
|
|
133
|
+
targetRef.current = $getNodeByKey(nodeKey)?.getIndexWithinParent() ?? null;
|
|
134
|
+
});
|
|
135
|
+
setTargetIndex(targetRef.current);
|
|
136
|
+
} else {
|
|
137
|
+
move({
|
|
138
|
+
index: targetRef.current
|
|
139
|
+
});
|
|
140
|
+
targetRef.current = null;
|
|
141
|
+
setTargetIndex(null);
|
|
142
|
+
}
|
|
143
|
+
} else if (targetRef.current !== null) {
|
|
144
|
+
if (event.key === 'Escape' || event.key === 'Tab') {
|
|
145
|
+
targetRef.current = null;
|
|
146
|
+
setTargetIndex(null);
|
|
147
|
+
if (event.key === 'Escape') {
|
|
148
|
+
event.preventDefault();
|
|
149
|
+
event.stopPropagation();
|
|
150
|
+
}
|
|
151
|
+
} else if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
|
|
152
|
+
event.preventDefault();
|
|
153
|
+
event.stopPropagation();
|
|
154
|
+
editor.getEditorState().read(() => {
|
|
155
|
+
const count = $getNodeByKey(nodeKey)?.getParent()?.getChildrenSize() ?? 0;
|
|
156
|
+
targetRef.current = Math.max(0, Math.min(count - 1, (targetRef.current ?? 0) + (event.key === 'ArrowDown' ? 1 : -1)));
|
|
157
|
+
});
|
|
158
|
+
setTargetIndex(targetRef.current);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}, [editor, move, nodeKey]);
|
|
162
|
+
const onBlur = useCallback(() => {
|
|
163
|
+
if (isPointerDownRef.current) {
|
|
164
|
+
cancelAfterPointerRef.current = true;
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
targetRef.current = null;
|
|
168
|
+
setTargetIndex(null);
|
|
169
|
+
}, []);
|
|
170
|
+
return {
|
|
171
|
+
isReordering,
|
|
172
|
+
move,
|
|
173
|
+
onBlur,
|
|
174
|
+
onKeyDown,
|
|
175
|
+
targetIndex
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=useBlockReordering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBlockReordering.js","names":["$getNodeByKey","COMMAND_PRIORITY_HIGH","KEY_DOWN_COMMAND","SKIP_DOM_SELECTION_TAG","useCallback","useEffect","useLayoutEffect","useRef","useState","useBlockReordering","editor","nodeKey","targetIndex","setTargetIndex","targetRef","isPointerDownRef","cancelAfterPointerRef","isReordering","registerCommand","event","target","HTMLElement","Boolean","getElementByKey","contains","closest","cancelTimer","onPointerDown","current","onPointerUp","setTimeout","document","addEventListener","removeEventListener","clearTimeout","restore","getEditorState","read","node","siblings","getParent","getChildren","currentIndex","getIndexWithinParent","undefined","elements","map","sibling","getKey","source","adjacent","sourceRect","getBoundingClientRect","targetRect","adjacentRect","isMovingDown","sourceOffset","bottom","top","siblingOffset","index","Math","min","max","element","translate","style","push","querySelector","scrollIntoView","block","forEach","reset","move","direction","isEditable","update","destination","insertBefore","insertAfter","onUpdate","requestAnimationFrame","header","focusTarget","focus","tag","onKeyDown","key","preventDefault","stopPropagation","count","getChildrenSize","onBlur"],"sources":["../../../../../src/features/blocks/client/component/useBlockReordering.ts"],"sourcesContent":["import type { LexicalEditor } from 'lexical'\nimport type { KeyboardEvent } from 'react'\n\nimport {\n $getNodeByKey,\n COMMAND_PRIORITY_HIGH,\n KEY_DOWN_COMMAND,\n SKIP_DOM_SELECTION_TAG,\n} from 'lexical'\nimport { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nexport function useBlockReordering({\n editor,\n nodeKey,\n}: {\n editor: LexicalEditor\n nodeKey: string\n}) {\n const [targetIndex, setTargetIndex] = useState<null | number>(null)\n const targetRef = useRef<null | number>(null)\n const isPointerDownRef = useRef(false)\n const cancelAfterPointerRef = useRef(false)\n const isReordering = targetIndex !== null\n\n useEffect(\n () =>\n editor.registerCommand(\n KEY_DOWN_COMMAND,\n (event) => {\n const target = event?.target\n\n // Leave action-menu keys to the controls instead of editing the retained selection.\n return (\n target instanceof HTMLElement &&\n Boolean(editor.getElementByKey(nodeKey)?.contains(target)) &&\n Boolean(target.closest('.collapsible__actions button'))\n )\n },\n COMMAND_PRIORITY_HIGH,\n ),\n [editor, nodeKey],\n )\n\n useEffect(() => {\n if (!isReordering) {\n return\n }\n let cancelTimer: ReturnType<typeof setTimeout> | undefined\n const onPointerDown = () => {\n isPointerDownRef.current = true\n }\n const onPointerUp = () => {\n isPointerDownRef.current = false\n if (cancelAfterPointerRef.current) {\n // Let the click fire before restoring the preview's original positions.\n cancelTimer = setTimeout(() => {\n targetRef.current = null\n setTargetIndex(null)\n }, 0)\n }\n }\n\n document.addEventListener('pointerdown', onPointerDown, true)\n document.addEventListener('pointerup', onPointerUp, true)\n document.addEventListener('pointercancel', onPointerUp, true)\n return () => {\n document.removeEventListener('pointerdown', onPointerDown, true)\n document.removeEventListener('pointerup', onPointerUp, true)\n document.removeEventListener('pointercancel', onPointerUp, true)\n clearTimeout(cancelTimer)\n isPointerDownRef.current = false\n cancelAfterPointerRef.current = false\n }\n }, [isReordering])\n\n useLayoutEffect(() => {\n if (targetIndex === null) {\n return\n }\n const restore: (() => void)[] = []\n\n editor.getEditorState().read(() => {\n const node = $getNodeByKey(nodeKey)\n const siblings = node?.getParent()?.getChildren()\n const currentIndex = node?.getIndexWithinParent()\n\n if (!siblings || currentIndex === undefined || currentIndex === targetIndex) {\n return\n }\n const elements = siblings.map((sibling) => editor.getElementByKey(sibling.getKey()))\n const source = elements[currentIndex]\n const target = elements[targetIndex]\n const adjacent = elements[currentIndex + (targetIndex > currentIndex ? 1 : -1)]\n\n if (!source || !target || !adjacent) {\n return\n }\n const sourceRect = source.getBoundingClientRect()\n const targetRect = target.getBoundingClientRect()\n const adjacentRect = adjacent.getBoundingClientRect()\n const isMovingDown = targetIndex > currentIndex\n const sourceOffset = isMovingDown\n ? targetRect.bottom - sourceRect.bottom\n : targetRect.top - sourceRect.top\n const siblingOffset = isMovingDown\n ? sourceRect.top - adjacentRect.top\n : sourceRect.bottom - adjacentRect.bottom\n\n // Preview the pending order without committing an editor change until drop.\n for (\n let index = Math.min(currentIndex, targetIndex);\n index <= Math.max(currentIndex, targetIndex);\n index++\n ) {\n const element = elements[index]\n\n if (element) {\n const translate = element.style.translate\n\n restore.push(() => {\n element.style.translate = translate\n })\n element.style.translate = `0 ${index === currentIndex ? sourceOffset : siblingOffset}px`\n }\n }\n source.querySelector('.collapsible__drag')?.scrollIntoView({ block: 'nearest' })\n })\n\n return () => restore.forEach((reset) => reset())\n }, [editor, nodeKey, targetIndex])\n\n const move = useCallback(\n ({ direction, index }: { direction?: -1 | 1; index?: number }) => {\n if (!editor.isEditable()) {\n return\n }\n editor.update(\n () => {\n const node = $getNodeByKey(nodeKey)\n const siblings = node?.getParent()?.getChildren()\n\n if (!node || !siblings) {\n return\n }\n const currentIndex = node.getIndexWithinParent()\n const destination = index ?? currentIndex + (direction ?? 0)\n const target = siblings[destination]\n\n if (target && target !== node) {\n if (destination < currentIndex) {\n target.insertBefore(node)\n } else {\n target.insertAfter(node)\n }\n }\n },\n {\n onUpdate: () => {\n // The block header is recreated when its row number changes.\n requestAnimationFrame(() => {\n const header = editor\n .getElementByKey(nodeKey)\n ?.querySelector('.collapsible__toggle-wrap')\n const focusTarget =\n header?.querySelector<HTMLElement>('.collapsible__drag') ??\n header?.querySelector<HTMLElement>('.LexicalEditorTheme__block__actions-button')\n\n focusTarget?.focus()\n })\n },\n tag: SKIP_DOM_SELECTION_TAG,\n },\n )\n },\n [editor, nodeKey],\n )\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!editor.isEditable()) {\n return\n }\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n event.stopPropagation()\n if (targetRef.current === null) {\n editor.getEditorState().read(() => {\n targetRef.current = $getNodeByKey(nodeKey)?.getIndexWithinParent() ?? null\n })\n setTargetIndex(targetRef.current)\n } else {\n move({ index: targetRef.current })\n targetRef.current = null\n setTargetIndex(null)\n }\n } else if (targetRef.current !== null) {\n if (event.key === 'Escape' || event.key === 'Tab') {\n targetRef.current = null\n setTargetIndex(null)\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n }\n } else if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n event.preventDefault()\n event.stopPropagation()\n editor.getEditorState().read(() => {\n const count = $getNodeByKey(nodeKey)?.getParent()?.getChildrenSize() ?? 0\n targetRef.current = Math.max(\n 0,\n Math.min(count - 1, (targetRef.current ?? 0) + (event.key === 'ArrowDown' ? 1 : -1)),\n )\n })\n setTargetIndex(targetRef.current)\n }\n }\n },\n [editor, move, nodeKey],\n )\n\n const onBlur = useCallback(() => {\n if (isPointerDownRef.current) {\n cancelAfterPointerRef.current = true\n return\n }\n targetRef.current = null\n setTargetIndex(null)\n }, [])\n\n return { isReordering, move, onBlur, onKeyDown, targetIndex }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAwC,SAAS,EAAE,MAAM,SAAS,CAAA;AAuB9E,OAAO,aAAa,CAAA;AACpB,OAAO,8CAA8C,CAAA;AAGrD,OAAO,KAAiE,MAAM,OAAO,CAAA;AAGrF,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAA;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAUhE,MAAM,MAAM,yBAAyB,CACnC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,IAC3D;IACF,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,gCAAgC,CAAC,CAAA;IACjE,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,gCAAgC,CAAC,CAAA;CAClE,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC,CAAA;AAE9F,MAAM,MAAM,+BAA+B,GAAG;IAC5C,UAAU,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IACrB,YAAY,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,CAAA;IAC3C,oBAAoB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,CAAC,CAAA;IAC9D,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;CACxB,CAAA;AAMD,eAAO,MAAM,8BAA8B,uCAA+C,CAAA;AAE1F,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAwC,SAAS,EAAE,MAAM,SAAS,CAAA;AAuB9E,OAAO,aAAa,CAAA;AACpB,OAAO,8CAA8C,CAAA;AAGrD,OAAO,KAAiE,MAAM,OAAO,CAAA;AAGrF,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAA;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAUhE,MAAM,MAAM,yBAAyB,CACnC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,IAC3D;IACF,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,gCAAgC,CAAC,CAAA;IACjE,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,gCAAgC,CAAC,CAAA;CAClE,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC,CAAA;AAE9F,MAAM,MAAM,+BAA+B,GAAG;IAC5C,UAAU,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IACrB,YAAY,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,CAAA;IAC3C,oBAAoB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,CAAC,CAAA;IAC9D,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;CACxB,CAAA;AAMD,eAAO,MAAM,8BAA8B,uCAA+C,CAAA;AAE1F,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,CAggBvF,CAAA"}
|
|
@@ -224,13 +224,13 @@ export const InlineBlockComponent = props => {
|
|
|
224
224
|
}
|
|
225
225
|
}
|
|
226
226
|
};
|
|
227
|
-
if (formData && !initialState) {
|
|
227
|
+
if (clientBlock && formData && !initialState) {
|
|
228
228
|
void awaitInitialState();
|
|
229
229
|
}
|
|
230
230
|
return () => {
|
|
231
231
|
abortAndIgnore(abortController);
|
|
232
232
|
};
|
|
233
|
-
}, [getFormState, editor, nodeKey, isEditable, CustomLabelFromProps, CustomBlockFromProps, schemaFieldsPath, id, formData, initialState, collectionSlug, globalSlug, getDocPreferences, parentDocumentFields]);
|
|
233
|
+
}, [getFormState, editor, nodeKey, isEditable, CustomLabelFromProps, CustomBlockFromProps, schemaFieldsPath, id, formData, initialState, collectionSlug, globalSlug, getDocPreferences, parentDocumentFields, clientBlock]);
|
|
234
234
|
/**
|
|
235
235
|
* HANDLE ONCHANGE
|
|
236
236
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["useLexicalComposerContext","useLexicalEditable","getTranslation","Button","Drawer","EditDepthProvider","Form","formatDrawerSlug","RenderFields","ShimmerEffect","useConfig","useDocumentForm","useDocumentInfo","useEditDepth","useServerFunctions","useTranslation","abortAndIgnore","$getNodeByKey","SKIP_DOM_SELECTION_TAG","deepCopyObjectSimpleWithoutReactComponents","reduceFieldsToValues","React","createContext","useCallback","useEffect","useMemo","useRef","v4","uuid","useEditorConfigContext","RegisterFormSubmit","useDrawerSubmit","useLexicalDrawer","$isInlineBlockNode","InlineBlockComponentContext","initialState","useInlineBlockComponentContext","use","InlineBlockComponent","props","cacheBuster","className","baseClass","CustomBlock","CustomBlockFromProps","CustomLabel","CustomLabelFromProps","formData","nodeKey","editor","isEditable","i18n","t","createdInlineBlock","fieldProps","featureClientSchemaMap","initialLexicalFormState","schemaPath","setCreatedInlineBlock","uuidFromContext","fields","parentDocumentFields","getFormState","editDepth","firstTimeDrawer","setInitialState","useState","cachedFormState","id","formState","Object","fromEntries","entries","map","fieldName","fieldState","initialValue","value","hasMounted","prevCacheBuster","current","formUuid","setCustomLabel","undefined","customComponents","BlockLabel","setCustomBlock","Block","resolvedCustomBlock","_jsx","isEditor","isJSXConverter","resolvedCustomLabel","drawerSlug","slug","depth","toggleDrawer","inlineBlockElemElemRef","collectionSlug","getDocPreferences","globalSlug","config","componentMapRenderedBlockPath","blockType","clientSchemaMap","blocksField","blockOrSlug","blocks","clientBlock","blocksMap","clientBlockFields","getKey","length","removeInlineBlock","update","remove","blockDisplayName","labels","singular","onChangeAbortControllerRef","AbortController","schemaFieldsPath","abortController","awaitInitialState","state","data","docPermissions","docPreferences","documentFormState","excludeFiles","initialBlockData","initialBlockFormState","operation","readOnly","renderAllFields","signal","newFormStateData","node","newData","setFields","tag","onChange","prevFormState","submit","controller","isStateOutOfSync","keys","some","key","onFormSubmit","headerActions","submitRef","RemoveButton","buttonStyle","disabled","icon","onClick","e","preventDefault","stopPropagation","round","size","tooltip","label","EditButton","el","InlineBlockContainer","children","filter","Boolean","join","onKeyDown","role","tabIndex","ref","Label","_jsxs","beforeSubmit","disableValidationOnSubmit","onSubmit","title","forceRender","parentIndexPath","parentPath","parentSchemaPath","permissions","height","width"],"sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"sourcesContent":["'use client'\n\nimport type { BlocksFieldClient, ClientBlock, Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n Drawer,\n EditDepthProvider,\n Form,\n formatDrawerSlug,\n RenderFields,\n ShimmerEffect,\n useConfig,\n useDocumentForm,\n useDocumentInfo,\n useEditDepth,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport { $getNodeByKey, SKIP_DOM_SELECTION_TAG } from 'lexical'\n\nimport './index.css'\nimport '../../../../utilities/fieldsDrawer/index.css'\n\nimport { deepCopyObjectSimpleWithoutReactComponents, reduceFieldsToValues } from 'payload/shared'\nimport React, { createContext, useCallback, useEffect, useMemo, useRef } from 'react'\nimport { v4 as uuid } from 'uuid'\n\nimport type { ViewMapInlineBlockComponentProps } from '../../../../types/index.js'\nimport type { InlineBlockFields } from '../../server/schema.js'\nimport type { BlockComponentProps } from '../component/index.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport {\n RegisterFormSubmit,\n useDrawerSubmit,\n} from '../../../../utilities/fieldsDrawer/useDrawerSubmit.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isInlineBlockNode } from '../nodes/InlineBlocksNode.js'\n\nexport type InlineBlockComponentProps<\n TFormData extends Record<string, unknown> = InlineBlockFields,\n> = {\n readonly CustomBlock?: React.FC<ViewMapInlineBlockComponentProps>\n readonly CustomLabel?: React.FC<ViewMapInlineBlockComponentProps>\n} & Pick<BlockComponentProps<TFormData>, 'cacheBuster' | 'className' | 'formData' | 'nodeKey'>\n\nexport type InlineBlockComponentContextType = {\n EditButton?: React.FC\n initialState: false | FormState | undefined\n InlineBlockContainer?: React.FC<{ children: React.ReactNode }>\n Label?: React.FC\n nodeKey?: string\n RemoveButton?: React.FC\n}\n\nconst InlineBlockComponentContext = createContext<InlineBlockComponentContextType>({\n initialState: false,\n})\n\nexport const useInlineBlockComponentContext = () => React.use(InlineBlockComponentContext)\n\nexport const InlineBlockComponent: React.FC<InlineBlockComponentProps<InlineBlockFields>> = (\n props,\n) => {\n const {\n cacheBuster,\n className: baseClass,\n CustomBlock: CustomBlockFromProps,\n CustomLabel: CustomLabelFromProps,\n formData,\n nodeKey,\n } = props\n\n const [editor] = useLexicalComposerContext()\n const isEditable = useLexicalEditable()\n const { i18n, t } = useTranslation<object, string>()\n const {\n createdInlineBlock,\n fieldProps: { featureClientSchemaMap, initialLexicalFormState, schemaPath },\n setCreatedInlineBlock,\n uuid: uuidFromContext,\n } = useEditorConfigContext()\n const { fields: parentDocumentFields } = useDocumentForm()\n\n const { getFormState } = useServerFunctions()\n const editDepth = useEditDepth()\n const firstTimeDrawer = useRef(false)\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(() => {\n // Initial form state that was calculated server-side. May have stale values\n const cachedFormState = initialLexicalFormState?.[formData.id]?.formState\n if (!cachedFormState) {\n return false\n }\n\n // Merge current formData values into the cached form state\n // This ensures that when the component remounts (e.g., due to view changes), we don't lose user edits\n return Object.fromEntries(\n Object.entries(cachedFormState).map(([fieldName, fieldState]) => [\n fieldName,\n fieldName in formData\n ? {\n ...fieldState,\n initialValue: formData[fieldName],\n value: formData[fieldName],\n }\n : fieldState,\n ]),\n )\n })\n\n const hasMounted = useRef(false)\n const prevCacheBuster = useRef(cacheBuster)\n useEffect(() => {\n if (hasMounted.current) {\n if (prevCacheBuster.current !== cacheBuster) {\n setInitialState(false)\n }\n prevCacheBuster.current = cacheBuster\n } else {\n hasMounted.current = true\n }\n }, [cacheBuster])\n\n const [formUuid] = React.useState(() => uuid())\n\n // Server-rendered custom components (from admin.components, NOT viewMap).\n // When viewMap components exist, we render them directly with formData instead.\n const [CustomLabel, setCustomLabel] = React.useState<React.ReactNode | undefined>(() => {\n if (CustomLabelFromProps) {\n return undefined\n }\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n return initialState?.['_components']?.customComponents?.BlockLabel ?? undefined\n })\n\n const [CustomBlock, setCustomBlock] = React.useState<React.ReactNode | undefined>(() => {\n if (CustomBlockFromProps) {\n return undefined\n }\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n return initialState?.['_components']?.customComponents?.Block ?? undefined\n })\n\n const resolvedCustomBlock = useMemo(() => {\n if (CustomBlockFromProps) {\n return (\n <CustomBlockFromProps\n className={baseClass}\n formData={formData}\n isEditor={true}\n isJSXConverter={false}\n nodeKey={nodeKey}\n // eslint-disable-next-line react-compiler/react-compiler -- intentionally passed as a prop for custom block components to call\n useInlineBlockComponentContext={useInlineBlockComponentContext}\n />\n )\n }\n return CustomBlock\n }, [CustomBlockFromProps, baseClass, formData, nodeKey, CustomBlock])\n\n const resolvedCustomLabel = useMemo(() => {\n if (CustomLabelFromProps) {\n return (\n <CustomLabelFromProps\n className={baseClass}\n formData={formData}\n isEditor={true}\n isJSXConverter={false}\n nodeKey={nodeKey}\n // eslint-disable-next-line react-compiler/react-compiler -- intentionally passed as a prop for custom block components to call\n useInlineBlockComponentContext={useInlineBlockComponentContext}\n />\n )\n }\n return CustomLabel\n }, [CustomLabelFromProps, baseClass, formData, nodeKey, CustomLabel])\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-inlineBlocks-create-${uuidFromContext}-${formData.id}`,\n depth: editDepth,\n })\n const { toggleDrawer } = useLexicalDrawer(drawerSlug, true)\n\n const inlineBlockElemElemRef = useRef<HTMLDivElement | null>(null)\n const { id, collectionSlug, getDocPreferences, globalSlug } = useDocumentInfo()\n const { config } = useConfig()\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient | undefined = clientSchemaMap?.[\n componentMapRenderedBlockPath\n ]?.[0] as BlocksFieldClient | undefined\n\n const blockOrSlug = blocksField?.blocks?.[0]\n const clientBlock: ClientBlock | undefined =\n typeof blockOrSlug === 'string' ? config.blocksMap[blockOrSlug] : blockOrSlug\n\n const clientBlockFields = clientBlock?.fields ?? []\n\n // Open drawer on \"mount\"\n useEffect(() => {\n if (!firstTimeDrawer.current && createdInlineBlock?.getKey() === nodeKey) {\n // > 2 because they always have \"id\" and \"blockName\" fields\n if (clientBlockFields.length > 2) {\n toggleDrawer()\n }\n setCreatedInlineBlock?.(undefined)\n firstTimeDrawer.current = true\n }\n }, [clientBlockFields.length, createdInlineBlock, nodeKey, setCreatedInlineBlock, toggleDrawer])\n\n const removeInlineBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock?.labels.singular, i18n)\n : clientBlock?.slug\n\n const onChangeAbortControllerRef = useRef(new AbortController())\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${clientBlock?.slug}.fields`\n\n // Initial state for newly created blocks\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n /*\n * This will only run if a new block is created. For all existing blocks that are loaded when the document is loaded, or when the form is saved,\n * this is not run, as the lexical field RSC will fetch the state server-side and pass it to the client. That way, we avoid unnecessary client-side\n * requests. Though for newly created blocks, we need to fetch the state client-side, as the server doesn't know about the block yet.\n */\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions: { fields: true },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields, {\n excludeFiles: true,\n }),\n globalSlug,\n initialBlockData: formData,\n initialBlockFormState: formData,\n operation: 'update',\n readOnly: !isEditable,\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: abortController.signal,\n })\n\n if (state) {\n const newFormStateData: InlineBlockFields = reduceFieldsToValues(\n deepCopyObjectSimpleWithoutReactComponents(state, { excludeFiles: true }),\n true,\n ) as InlineBlockFields\n\n // Things like default values may come back from the server => update the node with the new data\n editor.update(\n () => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n const newData = newFormStateData\n newData.blockType = formData.blockType\n\n node.setFields(newData, true)\n }\n },\n // Without this, the outer editor's reconciler resets DOM selection\n // back into its own root, kicking focus out of any nested richText.\n { tag: SKIP_DOM_SELECTION_TAG },\n )\n\n setInitialState(state)\n if (!CustomLabelFromProps) {\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n }\n if (!CustomBlockFromProps) {\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n }\n }\n\n if (formData && !initialState) {\n void awaitInitialState()\n }\n\n return () => {\n abortAndIgnore(abortController)\n }\n }, [\n getFormState,\n editor,\n nodeKey,\n isEditable,\n CustomLabelFromProps,\n CustomBlockFromProps,\n schemaFieldsPath,\n id,\n formData,\n initialState,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n parentDocumentFields,\n ])\n\n /**\n * HANDLE ONCHANGE\n */\n const onChange = useCallback(\n async ({ formState: prevFormState, submit }: { formState: FormState; submit?: boolean }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields, {\n excludeFiles: true,\n }),\n formState: prevFormState,\n globalSlug,\n initialBlockFormState: prevFormState,\n operation: 'update',\n readOnly: !isEditable,\n renderAllFields: submit ? true : false,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!state) {\n return prevFormState\n }\n\n if (submit) {\n if (!CustomLabelFromProps) {\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n }\n if (!CustomBlockFromProps) {\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n }\n\n return state\n },\n [\n getFormState,\n id,\n collectionSlug,\n getDocPreferences,\n parentDocumentFields,\n globalSlug,\n isEditable,\n schemaFieldsPath,\n CustomBlockFromProps,\n CustomLabelFromProps,\n ],\n )\n // cleanup effect\n useEffect(() => {\n const isStateOutOfSync = (formData: InlineBlockFields, initialState: FormState) => {\n return Object.keys(initialState).some(\n (key) => initialState[key] && formData[key] !== initialState[key].value,\n )\n }\n\n return () => {\n // If the component is unmounted (either via removeInlineBlock or via lexical itself) and the form state got changed before,\n // we need to reset the initial state to force a re-fetch of the initial state when it gets mounted again (e.g. via lexical history undo).\n // Otherwise it would use an outdated initial state.\n if (initialState && isStateOutOfSync(formData, initialState)) {\n setInitialState(false)\n }\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [formData, initialState])\n\n /**\n * HANDLE FORM SUBMIT\n */\n const onFormSubmit = useCallback(\n (formState: FormState, newData: Data) => {\n newData.blockType = formData.blockType\n\n editor.update(\n () => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n node.setFields(newData as InlineBlockFields, true)\n }\n },\n // Without this, the outer editor's reconciler resets DOM selection\n // back into its own root, kicking focus out of any nested richText.\n { tag: SKIP_DOM_SELECTION_TAG },\n )\n },\n [editor, nodeKey, formData],\n )\n\n const { headerActions, submitRef } = useDrawerSubmit()\n\n const RemoveButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"ghost\"\n className={`${baseClass}__removeButton`}\n disabled={!isEditable}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n removeInlineBlock()\n }}\n round\n size=\"medium\"\n tooltip={t('lexical:blocks:inlineBlocks:remove', { label: blockDisplayName })}\n />\n ),\n [baseClass, blockDisplayName, isEditable, removeInlineBlock, t],\n )\n\n const EditButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"ghost\"\n className={`${baseClass}__editButton`}\n disabled={!isEditable}\n el=\"button\"\n icon=\"edit\"\n onClick={() => {\n toggleDrawer()\n }}\n round\n size=\"medium\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n ),\n [baseClass, blockDisplayName, isEditable, t, toggleDrawer],\n )\n\n const InlineBlockContainer = useMemo(\n () =>\n ({ children, className }: { children: React.ReactNode; className?: string }) => (\n <div\n className={[`${baseClass}__container`, baseClass + '-' + formData.blockType, className]\n .filter(Boolean)\n .join(' ')}\n {...(isEditable\n ? {\n onClick: () => toggleDrawer(),\n onKeyDown: (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n toggleDrawer()\n }\n },\n role: 'button',\n tabIndex: 0,\n }\n : {})}\n ref={inlineBlockElemElemRef}\n >\n {children}\n </div>\n ),\n [baseClass, formData.blockType, isEditable, toggleDrawer],\n )\n\n const Label = useMemo(() => {\n if (resolvedCustomLabel) {\n return () => resolvedCustomLabel\n } else {\n return () => (\n <div>{clientBlock?.labels ? getTranslation(clientBlock?.labels.singular, i18n) : ''}</div>\n )\n }\n }, [resolvedCustomLabel, clientBlock?.labels, i18n])\n\n if (!clientBlock) {\n return (\n <InlineBlockContainer className={`${baseClass}-not-found`}>\n <span>Error: Block '{formData.blockType}' not found</span>\n {isEditable ? (\n <div className={`${baseClass}__actions`}>\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )\n }\n\n return (\n <Form\n beforeSubmit={[\n async ({ formState }) => {\n // This is only called when form is submitted from drawer\n return await onChange({ formState, submit: true })\n },\n ]}\n disableValidationOnSubmit\n el=\"div\"\n fields={clientBlock?.fields}\n initialState={initialState || {}}\n onChange={[onChange]}\n onSubmit={(formState, data) => {\n onFormSubmit(formState, data)\n toggleDrawer()\n }}\n uuid={formUuid}\n >\n <EditDepthProvider>\n <Drawer\n className={''}\n headerActions={headerActions}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n >\n {initialState ? (\n <div className=\"fields-drawer\">\n <RenderFields\n fields={clientBlock?.fields}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={true}\n readOnly={!isEditable}\n />\n <RegisterFormSubmit submitRef={submitRef} />\n </div>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n {resolvedCustomBlock ? (\n <InlineBlockComponentContext\n value={{\n EditButton,\n initialState,\n InlineBlockContainer,\n Label,\n nodeKey,\n RemoveButton,\n }}\n >\n {resolvedCustomBlock}\n </InlineBlockComponentContext>\n ) : (\n <InlineBlockContainer>\n {initialState ? <Label /> : <ShimmerEffect height=\"15px\" width=\"40px\" />}\n {isEditable ? (\n <div className={`${baseClass}__actions`}>\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )}\n </Form>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["useLexicalComposerContext","useLexicalEditable","getTranslation","Button","Drawer","EditDepthProvider","Form","formatDrawerSlug","RenderFields","ShimmerEffect","useConfig","useDocumentForm","useDocumentInfo","useEditDepth","useServerFunctions","useTranslation","abortAndIgnore","$getNodeByKey","SKIP_DOM_SELECTION_TAG","deepCopyObjectSimpleWithoutReactComponents","reduceFieldsToValues","React","createContext","useCallback","useEffect","useMemo","useRef","v4","uuid","useEditorConfigContext","RegisterFormSubmit","useDrawerSubmit","useLexicalDrawer","$isInlineBlockNode","InlineBlockComponentContext","initialState","useInlineBlockComponentContext","use","InlineBlockComponent","props","cacheBuster","className","baseClass","CustomBlock","CustomBlockFromProps","CustomLabel","CustomLabelFromProps","formData","nodeKey","editor","isEditable","i18n","t","createdInlineBlock","fieldProps","featureClientSchemaMap","initialLexicalFormState","schemaPath","setCreatedInlineBlock","uuidFromContext","fields","parentDocumentFields","getFormState","editDepth","firstTimeDrawer","setInitialState","useState","cachedFormState","id","formState","Object","fromEntries","entries","map","fieldName","fieldState","initialValue","value","hasMounted","prevCacheBuster","current","formUuid","setCustomLabel","undefined","customComponents","BlockLabel","setCustomBlock","Block","resolvedCustomBlock","_jsx","isEditor","isJSXConverter","resolvedCustomLabel","drawerSlug","slug","depth","toggleDrawer","inlineBlockElemElemRef","collectionSlug","getDocPreferences","globalSlug","config","componentMapRenderedBlockPath","blockType","clientSchemaMap","blocksField","blockOrSlug","blocks","clientBlock","blocksMap","clientBlockFields","getKey","length","removeInlineBlock","update","remove","blockDisplayName","labels","singular","onChangeAbortControllerRef","AbortController","schemaFieldsPath","abortController","awaitInitialState","state","data","docPermissions","docPreferences","documentFormState","excludeFiles","initialBlockData","initialBlockFormState","operation","readOnly","renderAllFields","signal","newFormStateData","node","newData","setFields","tag","onChange","prevFormState","submit","controller","isStateOutOfSync","keys","some","key","onFormSubmit","headerActions","submitRef","RemoveButton","buttonStyle","disabled","icon","onClick","e","preventDefault","stopPropagation","round","size","tooltip","label","EditButton","el","InlineBlockContainer","children","filter","Boolean","join","onKeyDown","role","tabIndex","ref","Label","_jsxs","beforeSubmit","disableValidationOnSubmit","onSubmit","title","forceRender","parentIndexPath","parentPath","parentSchemaPath","permissions","height","width"],"sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"sourcesContent":["'use client'\n\nimport type { BlocksFieldClient, ClientBlock, Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n Drawer,\n EditDepthProvider,\n Form,\n formatDrawerSlug,\n RenderFields,\n ShimmerEffect,\n useConfig,\n useDocumentForm,\n useDocumentInfo,\n useEditDepth,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport { $getNodeByKey, SKIP_DOM_SELECTION_TAG } from 'lexical'\n\nimport './index.css'\nimport '../../../../utilities/fieldsDrawer/index.css'\n\nimport { deepCopyObjectSimpleWithoutReactComponents, reduceFieldsToValues } from 'payload/shared'\nimport React, { createContext, useCallback, useEffect, useMemo, useRef } from 'react'\nimport { v4 as uuid } from 'uuid'\n\nimport type { ViewMapInlineBlockComponentProps } from '../../../../types/index.js'\nimport type { InlineBlockFields } from '../../server/schema.js'\nimport type { BlockComponentProps } from '../component/index.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport {\n RegisterFormSubmit,\n useDrawerSubmit,\n} from '../../../../utilities/fieldsDrawer/useDrawerSubmit.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isInlineBlockNode } from '../nodes/InlineBlocksNode.js'\n\nexport type InlineBlockComponentProps<\n TFormData extends Record<string, unknown> = InlineBlockFields,\n> = {\n readonly CustomBlock?: React.FC<ViewMapInlineBlockComponentProps>\n readonly CustomLabel?: React.FC<ViewMapInlineBlockComponentProps>\n} & Pick<BlockComponentProps<TFormData>, 'cacheBuster' | 'className' | 'formData' | 'nodeKey'>\n\nexport type InlineBlockComponentContextType = {\n EditButton?: React.FC\n initialState: false | FormState | undefined\n InlineBlockContainer?: React.FC<{ children: React.ReactNode }>\n Label?: React.FC\n nodeKey?: string\n RemoveButton?: React.FC\n}\n\nconst InlineBlockComponentContext = createContext<InlineBlockComponentContextType>({\n initialState: false,\n})\n\nexport const useInlineBlockComponentContext = () => React.use(InlineBlockComponentContext)\n\nexport const InlineBlockComponent: React.FC<InlineBlockComponentProps<InlineBlockFields>> = (\n props,\n) => {\n const {\n cacheBuster,\n className: baseClass,\n CustomBlock: CustomBlockFromProps,\n CustomLabel: CustomLabelFromProps,\n formData,\n nodeKey,\n } = props\n\n const [editor] = useLexicalComposerContext()\n const isEditable = useLexicalEditable()\n const { i18n, t } = useTranslation<object, string>()\n const {\n createdInlineBlock,\n fieldProps: { featureClientSchemaMap, initialLexicalFormState, schemaPath },\n setCreatedInlineBlock,\n uuid: uuidFromContext,\n } = useEditorConfigContext()\n const { fields: parentDocumentFields } = useDocumentForm()\n\n const { getFormState } = useServerFunctions()\n const editDepth = useEditDepth()\n const firstTimeDrawer = useRef(false)\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(() => {\n // Initial form state that was calculated server-side. May have stale values\n const cachedFormState = initialLexicalFormState?.[formData.id]?.formState\n if (!cachedFormState) {\n return false\n }\n\n // Merge current formData values into the cached form state\n // This ensures that when the component remounts (e.g., due to view changes), we don't lose user edits\n return Object.fromEntries(\n Object.entries(cachedFormState).map(([fieldName, fieldState]) => [\n fieldName,\n fieldName in formData\n ? {\n ...fieldState,\n initialValue: formData[fieldName],\n value: formData[fieldName],\n }\n : fieldState,\n ]),\n )\n })\n\n const hasMounted = useRef(false)\n const prevCacheBuster = useRef(cacheBuster)\n useEffect(() => {\n if (hasMounted.current) {\n if (prevCacheBuster.current !== cacheBuster) {\n setInitialState(false)\n }\n prevCacheBuster.current = cacheBuster\n } else {\n hasMounted.current = true\n }\n }, [cacheBuster])\n\n const [formUuid] = React.useState(() => uuid())\n\n // Server-rendered custom components (from admin.components, NOT viewMap).\n // When viewMap components exist, we render them directly with formData instead.\n const [CustomLabel, setCustomLabel] = React.useState<React.ReactNode | undefined>(() => {\n if (CustomLabelFromProps) {\n return undefined\n }\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n return initialState?.['_components']?.customComponents?.BlockLabel ?? undefined\n })\n\n const [CustomBlock, setCustomBlock] = React.useState<React.ReactNode | undefined>(() => {\n if (CustomBlockFromProps) {\n return undefined\n }\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n return initialState?.['_components']?.customComponents?.Block ?? undefined\n })\n\n const resolvedCustomBlock = useMemo(() => {\n if (CustomBlockFromProps) {\n return (\n <CustomBlockFromProps\n className={baseClass}\n formData={formData}\n isEditor={true}\n isJSXConverter={false}\n nodeKey={nodeKey}\n // eslint-disable-next-line react-compiler/react-compiler -- intentionally passed as a prop for custom block components to call\n useInlineBlockComponentContext={useInlineBlockComponentContext}\n />\n )\n }\n return CustomBlock\n }, [CustomBlockFromProps, baseClass, formData, nodeKey, CustomBlock])\n\n const resolvedCustomLabel = useMemo(() => {\n if (CustomLabelFromProps) {\n return (\n <CustomLabelFromProps\n className={baseClass}\n formData={formData}\n isEditor={true}\n isJSXConverter={false}\n nodeKey={nodeKey}\n // eslint-disable-next-line react-compiler/react-compiler -- intentionally passed as a prop for custom block components to call\n useInlineBlockComponentContext={useInlineBlockComponentContext}\n />\n )\n }\n return CustomLabel\n }, [CustomLabelFromProps, baseClass, formData, nodeKey, CustomLabel])\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-inlineBlocks-create-${uuidFromContext}-${formData.id}`,\n depth: editDepth,\n })\n const { toggleDrawer } = useLexicalDrawer(drawerSlug, true)\n\n const inlineBlockElemElemRef = useRef<HTMLDivElement | null>(null)\n const { id, collectionSlug, getDocPreferences, globalSlug } = useDocumentInfo()\n const { config } = useConfig()\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient | undefined = clientSchemaMap?.[\n componentMapRenderedBlockPath\n ]?.[0] as BlocksFieldClient | undefined\n\n const blockOrSlug = blocksField?.blocks?.[0]\n const clientBlock: ClientBlock | undefined =\n typeof blockOrSlug === 'string' ? config.blocksMap[blockOrSlug] : blockOrSlug\n\n const clientBlockFields = clientBlock?.fields ?? []\n\n // Open drawer on \"mount\"\n useEffect(() => {\n if (!firstTimeDrawer.current && createdInlineBlock?.getKey() === nodeKey) {\n // > 2 because they always have \"id\" and \"blockName\" fields\n if (clientBlockFields.length > 2) {\n toggleDrawer()\n }\n setCreatedInlineBlock?.(undefined)\n firstTimeDrawer.current = true\n }\n }, [clientBlockFields.length, createdInlineBlock, nodeKey, setCreatedInlineBlock, toggleDrawer])\n\n const removeInlineBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock?.labels.singular, i18n)\n : clientBlock?.slug\n\n const onChangeAbortControllerRef = useRef(new AbortController())\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${clientBlock?.slug}.fields`\n\n // Initial state for newly created blocks\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n /*\n * This will only run if a new block is created. For all existing blocks that are loaded when the document is loaded, or when the form is saved,\n * this is not run, as the lexical field RSC will fetch the state server-side and pass it to the client. That way, we avoid unnecessary client-side\n * requests. Though for newly created blocks, we need to fetch the state client-side, as the server doesn't know about the block yet.\n */\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions: { fields: true },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields, {\n excludeFiles: true,\n }),\n globalSlug,\n initialBlockData: formData,\n initialBlockFormState: formData,\n operation: 'update',\n readOnly: !isEditable,\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: abortController.signal,\n })\n\n if (state) {\n const newFormStateData: InlineBlockFields = reduceFieldsToValues(\n deepCopyObjectSimpleWithoutReactComponents(state, { excludeFiles: true }),\n true,\n ) as InlineBlockFields\n\n // Things like default values may come back from the server => update the node with the new data\n editor.update(\n () => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n const newData = newFormStateData\n newData.blockType = formData.blockType\n\n node.setFields(newData, true)\n }\n },\n // Without this, the outer editor's reconciler resets DOM selection\n // back into its own root, kicking focus out of any nested richText.\n { tag: SKIP_DOM_SELECTION_TAG },\n )\n\n setInitialState(state)\n if (!CustomLabelFromProps) {\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n }\n if (!CustomBlockFromProps) {\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n }\n }\n\n if (clientBlock && formData && !initialState) {\n void awaitInitialState()\n }\n\n return () => {\n abortAndIgnore(abortController)\n }\n }, [\n getFormState,\n editor,\n nodeKey,\n isEditable,\n CustomLabelFromProps,\n CustomBlockFromProps,\n schemaFieldsPath,\n id,\n formData,\n initialState,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n parentDocumentFields,\n clientBlock,\n ])\n\n /**\n * HANDLE ONCHANGE\n */\n const onChange = useCallback(\n async ({ formState: prevFormState, submit }: { formState: FormState; submit?: boolean }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields, {\n excludeFiles: true,\n }),\n formState: prevFormState,\n globalSlug,\n initialBlockFormState: prevFormState,\n operation: 'update',\n readOnly: !isEditable,\n renderAllFields: submit ? true : false,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!state) {\n return prevFormState\n }\n\n if (submit) {\n if (!CustomLabelFromProps) {\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n }\n if (!CustomBlockFromProps) {\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n }\n\n return state\n },\n [\n getFormState,\n id,\n collectionSlug,\n getDocPreferences,\n parentDocumentFields,\n globalSlug,\n isEditable,\n schemaFieldsPath,\n CustomBlockFromProps,\n CustomLabelFromProps,\n ],\n )\n // cleanup effect\n useEffect(() => {\n const isStateOutOfSync = (formData: InlineBlockFields, initialState: FormState) => {\n return Object.keys(initialState).some(\n (key) => initialState[key] && formData[key] !== initialState[key].value,\n )\n }\n\n return () => {\n // If the component is unmounted (either via removeInlineBlock or via lexical itself) and the form state got changed before,\n // we need to reset the initial state to force a re-fetch of the initial state when it gets mounted again (e.g. via lexical history undo).\n // Otherwise it would use an outdated initial state.\n if (initialState && isStateOutOfSync(formData, initialState)) {\n setInitialState(false)\n }\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [formData, initialState])\n\n /**\n * HANDLE FORM SUBMIT\n */\n const onFormSubmit = useCallback(\n (formState: FormState, newData: Data) => {\n newData.blockType = formData.blockType\n\n editor.update(\n () => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n node.setFields(newData as InlineBlockFields, true)\n }\n },\n // Without this, the outer editor's reconciler resets DOM selection\n // back into its own root, kicking focus out of any nested richText.\n { tag: SKIP_DOM_SELECTION_TAG },\n )\n },\n [editor, nodeKey, formData],\n )\n\n const { headerActions, submitRef } = useDrawerSubmit()\n\n const RemoveButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"ghost\"\n className={`${baseClass}__removeButton`}\n disabled={!isEditable}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n removeInlineBlock()\n }}\n round\n size=\"medium\"\n tooltip={t('lexical:blocks:inlineBlocks:remove', { label: blockDisplayName })}\n />\n ),\n [baseClass, blockDisplayName, isEditable, removeInlineBlock, t],\n )\n\n const EditButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"ghost\"\n className={`${baseClass}__editButton`}\n disabled={!isEditable}\n el=\"button\"\n icon=\"edit\"\n onClick={() => {\n toggleDrawer()\n }}\n round\n size=\"medium\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n ),\n [baseClass, blockDisplayName, isEditable, t, toggleDrawer],\n )\n\n const InlineBlockContainer = useMemo(\n () =>\n ({ children, className }: { children: React.ReactNode; className?: string }) => (\n <div\n className={[`${baseClass}__container`, baseClass + '-' + formData.blockType, className]\n .filter(Boolean)\n .join(' ')}\n {...(isEditable\n ? {\n onClick: () => toggleDrawer(),\n onKeyDown: (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n toggleDrawer()\n }\n },\n role: 'button',\n tabIndex: 0,\n }\n : {})}\n ref={inlineBlockElemElemRef}\n >\n {children}\n </div>\n ),\n [baseClass, formData.blockType, isEditable, toggleDrawer],\n )\n\n const Label = useMemo(() => {\n if (resolvedCustomLabel) {\n return () => resolvedCustomLabel\n } else {\n return () => (\n <div>{clientBlock?.labels ? getTranslation(clientBlock?.labels.singular, i18n) : ''}</div>\n )\n }\n }, [resolvedCustomLabel, clientBlock?.labels, i18n])\n\n if (!clientBlock) {\n return (\n <InlineBlockContainer className={`${baseClass}-not-found`}>\n <span>Error: Block '{formData.blockType}' not found</span>\n {isEditable ? (\n <div className={`${baseClass}__actions`}>\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )\n }\n\n return (\n <Form\n beforeSubmit={[\n async ({ formState }) => {\n // This is only called when form is submitted from drawer\n return await onChange({ formState, submit: true })\n },\n ]}\n disableValidationOnSubmit\n el=\"div\"\n fields={clientBlock?.fields}\n initialState={initialState || {}}\n onChange={[onChange]}\n onSubmit={(formState, data) => {\n onFormSubmit(formState, data)\n toggleDrawer()\n }}\n uuid={formUuid}\n >\n <EditDepthProvider>\n <Drawer\n className={''}\n headerActions={headerActions}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n >\n {initialState ? (\n <div className=\"fields-drawer\">\n <RenderFields\n fields={clientBlock?.fields}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={true}\n readOnly={!isEditable}\n />\n <RegisterFormSubmit submitRef={submitRef} />\n </div>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n {resolvedCustomBlock ? (\n <InlineBlockComponentContext\n value={{\n EditButton,\n initialState,\n InlineBlockContainer,\n Label,\n nodeKey,\n RemoveButton,\n }}\n >\n {resolvedCustomBlock}\n </InlineBlockComponentContext>\n ) : (\n <InlineBlockContainer>\n {initialState ? <Label /> : <ShimmerEffect height=\"15px\" width=\"40px\" />}\n {isEditable ? (\n <div className={`${baseClass}__actions`}>\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )}\n </Form>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -10,14 +10,14 @@ import { ServerInlineBlockNode } from './nodes/InlineBlocksNode.js';
|
|
|
10
10
|
import { createBlockNodeJSONSchema, createInlineBlockNodeJSONSchema } from './schema.js';
|
|
11
11
|
import { blockValidationHOC } from './validate.js';
|
|
12
12
|
export const BlocksFeature = createServerFeature({
|
|
13
|
-
feature:
|
|
13
|
+
feature: ({
|
|
14
14
|
config: _config,
|
|
15
15
|
isRoot,
|
|
16
16
|
parentIsLocalized,
|
|
17
17
|
props: _props
|
|
18
18
|
}) => {
|
|
19
19
|
const validRelationships = _config.collections.map(c => c.slug) || [];
|
|
20
|
-
const sanitized =
|
|
20
|
+
const sanitized = sanitizeFields({
|
|
21
21
|
config: _config,
|
|
22
22
|
fields: [{
|
|
23
23
|
name: 'lexical_blocks',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["sanitizeFields","applyBaseFilterToFields","createServerFeature","createNode","blockPopulationPromiseHOC","i18n","getBlockMarkdownTransformers","ServerBlockNode","ServerInlineBlockNode","createBlockNodeJSONSchema","createInlineBlockNodeJSONSchema","blockValidationHOC","BlocksFeature","feature","config","_config","isRoot","parentIsLocalized","props","_props","validRelationships","collections","map","c","slug","sanitized","fields","name","type","blocks","inlineBlocks","requireFieldLevelRichTextEditor","blockConfigs","_block","block","find","b","Error","push","inlineBlockConfigs","ClientFeature","generateSchemaMap","schemaMap","Map","length","blockFields","admin","components","unshift","Block","BlockLabel","Label","set","markdownTransformers","nodes","jsonSchema","undefined","getSubFields","node","blockType","getSubFieldsData","graphQLPopulationPromises","validations","sanitizedServerFeatureProps","key"],"sources":["../../../../src/features/blocks/server/index.ts"],"sourcesContent":["import type {\n Block,\n BlocksField,\n BlockSlug,\n Config,\n FieldSchemaMap,\n UIFieldClientProps,\n UIFieldServerProps,\n} from 'payload'\n\nimport { sanitizeFields } from 'payload'\n\nimport { applyBaseFilterToFields } from '../../../utilities/applyBaseFilterToFields.js'\nimport { createServerFeature } from '../../../utilities/createServerFeature.js'\nimport { createNode } from '../../typeUtilities.js'\nimport { blockPopulationPromiseHOC } from './graphQLPopulationPromise.js'\nimport { i18n } from './i18n.js'\nimport { getBlockMarkdownTransformers } from './markdown/markdownTransformer.js'\nimport { ServerBlockNode } from './nodes/BlocksNode.js'\nimport { ServerInlineBlockNode } from './nodes/InlineBlocksNode.js'\nimport { createBlockNodeJSONSchema, createInlineBlockNodeJSONSchema } from './schema.js'\nimport { blockValidationHOC } from './validate.js'\n\nexport type {\n BlockFields,\n BlockFieldsOptionalID,\n InlineBlockFields,\n SerializedBlockNode,\n SerializedInlineBlockNode,\n} from './schema.js'\n\nexport type BlocksFeatureProps = {\n blocks?: (Block | BlockSlug)[] | Block[]\n inlineBlocks?: (Block | BlockSlug)[] | Block[]\n}\n\nexport const BlocksFeature = createServerFeature<BlocksFeatureProps, BlocksFeatureProps>({\n feature: async ({ config: _config, isRoot, parentIsLocalized, props: _props }) => {\n const validRelationships = _config.collections.map((c) => c.slug) || []\n\n const sanitized = await sanitizeFields({\n config: _config as unknown as Config,\n fields: [\n {\n name: 'lexical_blocks',\n type: 'blocks',\n blocks: _props.blocks ?? [],\n },\n {\n name: 'lexical_inline_blocks',\n type: 'blocks',\n blocks: _props.inlineBlocks ?? [],\n },\n ],\n parentIsLocalized,\n requireFieldLevelRichTextEditor: isRoot,\n validRelationships,\n })\n\n const blockConfigs: Block[] = []\n for (const _block of (sanitized[0] as BlocksField).blocks) {\n const block =\n typeof _block === 'string' ? _config?.blocks?.find((b) => b.slug === _block) : _block\n if (!block) {\n throw new Error(\n `Block not found for slug: ${typeof _block === 'string' ? _block : _block?.slug}`,\n )\n }\n // Apply baseFilter to relationship fields in the block\n blockConfigs.push({\n ...block,\n fields: applyBaseFilterToFields(block.fields, _config),\n })\n }\n\n const inlineBlockConfigs: Block[] = []\n for (const _block of (sanitized[1] as BlocksField).blocks) {\n const block =\n typeof _block === 'string' ? _config?.blocks?.find((b) => b.slug === _block) : _block\n if (!block) {\n throw new Error(\n `Block not found for slug: ${typeof _block === 'string' ? _block : _block?.slug}`,\n )\n }\n // Apply baseFilter to relationship fields in the block\n inlineBlockConfigs.push({\n ...block,\n fields: applyBaseFilterToFields(block.fields, _config),\n })\n }\n\n return {\n ClientFeature: '@payloadcms/richtext-lexical/client#BlocksFeatureClient',\n generateSchemaMap: ({ config }) => {\n /**\n * Add sub-fields to the schemaMap. E.g. if you have an array field as part of the block, and it runs addRow, it will request these\n * sub-fields from the component map. Thus, we need to put them in the component map here.\n */\n const schemaMap: FieldSchemaMap = new Map()\n\n if (blockConfigs?.length) {\n for (const block of blockConfigs) {\n const blockFields = [...block.fields]\n\n if (block?.admin?.components) {\n blockFields.unshift({\n name: `_components`,\n type: 'ui',\n admin: {\n components: {\n Block: block.admin?.components?.Block,\n BlockLabel: block.admin?.components?.Label,\n },\n },\n })\n }\n schemaMap.set(`lexical_blocks.${block.slug}.fields`, {\n fields: blockFields,\n })\n schemaMap.set(`lexical_blocks.${block.slug}`, {\n name: `lexical_blocks_${block.slug}`,\n type: 'blocks',\n blocks: [block],\n })\n }\n }\n\n if (inlineBlockConfigs?.length) {\n // To generate block schemaMap which generates things like the componentMap for admin.Label\n for (const block of inlineBlockConfigs) {\n const blockFields = [...block.fields]\n\n if (block?.admin?.components) {\n blockFields.unshift({\n name: `_components`,\n type: 'ui',\n admin: {\n components: {\n Block: block.admin?.components?.Block,\n BlockLabel: block.admin?.components?.Label,\n },\n },\n })\n }\n\n schemaMap.set(`lexical_inline_blocks.${block.slug}.fields`, {\n fields: blockFields,\n })\n\n schemaMap.set(`lexical_inline_blocks.${block.slug}`, {\n name: `lexical_inline_blocks_${block.slug}`,\n type: 'blocks',\n blocks: [block],\n })\n }\n }\n\n return schemaMap\n },\n i18n,\n markdownTransformers: getBlockMarkdownTransformers({\n blocks: blockConfigs,\n inlineBlocks: inlineBlockConfigs,\n }),\n\n nodes: [\n createNode({\n jsonSchema: blockConfigs.length ? createBlockNodeJSONSchema(blockConfigs) : undefined,\n // @ts-expect-error - TODO: fix this\n getSubFields: ({ node }) => {\n if (!node) {\n if (!blockConfigs.length) {\n return []\n }\n return [\n {\n name: 'lexical_blocks',\n type: 'blocks',\n blocks: blockConfigs,\n },\n ]\n }\n\n const blockType = node.fields.blockType\n const block = blockConfigs.find((block) => block.slug === blockType)\n return block?.fields\n },\n getSubFieldsData: ({ node }) => {\n return node?.fields\n },\n graphQLPopulationPromises: [blockPopulationPromiseHOC(blockConfigs)],\n node: ServerBlockNode,\n validations: [blockValidationHOC(blockConfigs)],\n }),\n createNode({\n jsonSchema: inlineBlockConfigs.length\n ? createInlineBlockNodeJSONSchema(inlineBlockConfigs)\n : undefined,\n // @ts-expect-error - TODO: fix this\n getSubFields: ({ node }) => {\n if (!node) {\n if (!inlineBlockConfigs.length) {\n return []\n }\n return [\n {\n name: 'lexical_inline_blocks',\n type: 'blocks',\n blocks: inlineBlockConfigs,\n },\n ]\n }\n\n const blockType = node.fields.blockType\n const block = inlineBlockConfigs.find((block) => block.slug === blockType)\n return block?.fields\n },\n getSubFieldsData: ({ node }) => {\n return node?.fields\n },\n graphQLPopulationPromises: [blockPopulationPromiseHOC(inlineBlockConfigs)],\n node: ServerInlineBlockNode,\n validations: [blockValidationHOC(inlineBlockConfigs)],\n }),\n ],\n sanitizedServerFeatureProps: _props,\n }\n },\n key: 'blocks',\n})\n\n/**\n * Props for the client components provided to `admin.components.Block` of lexical blocks.\n */\nexport type LexicalBlockClientProps = UIFieldClientProps\n/**\n * Props for the server components provided to `admin.components.Block` of lexical blocks.\n */\nexport type LexicalBlockServerProps = UIFieldServerProps\n\n/**\n * Props for the client components provided to `admin.components.Label` of lexical blocks.\n */\nexport type LexicalBlockLabelClientProps = UIFieldClientProps\n/**\n * Props for the server components provided to `admin.components.Label` of lexical blocks.\n */\nexport type LexicalBlockLabelServerProps = UIFieldServerProps\n\n/**\n * Props for the client components provided to `admin.components.Block` of lexical inline blocks.\n */\nexport type LexicalInlineBlockClientProps = UIFieldClientProps\n/**\n * Props for the server components provided to `admin.components.Block` of lexical inline blocks.\n */\nexport type LexicalInlineBlockServerProps = UIFieldServerProps\n\n/**\n * Props for the client components provided to `admin.components.Label` of lexical inline blocks.\n */\nexport type LexicalInlineBlockLabelClientProps = UIFieldClientProps\n/**\n * Props for the server components provided to `admin.components.Label` of lexical inline blocks.\n */\nexport type LexicalInlineBlockLabelServerProps = UIFieldServerProps\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["sanitizeFields","applyBaseFilterToFields","createServerFeature","createNode","blockPopulationPromiseHOC","i18n","getBlockMarkdownTransformers","ServerBlockNode","ServerInlineBlockNode","createBlockNodeJSONSchema","createInlineBlockNodeJSONSchema","blockValidationHOC","BlocksFeature","feature","config","_config","isRoot","parentIsLocalized","props","_props","validRelationships","collections","map","c","slug","sanitized","fields","name","type","blocks","inlineBlocks","requireFieldLevelRichTextEditor","blockConfigs","_block","block","find","b","Error","push","inlineBlockConfigs","ClientFeature","generateSchemaMap","schemaMap","Map","length","blockFields","admin","components","unshift","Block","BlockLabel","Label","set","markdownTransformers","nodes","jsonSchema","undefined","getSubFields","node","blockType","getSubFieldsData","graphQLPopulationPromises","validations","sanitizedServerFeatureProps","key"],"sources":["../../../../src/features/blocks/server/index.ts"],"sourcesContent":["import type {\n Block,\n BlocksField,\n BlockSlug,\n Config,\n FieldSchemaMap,\n UIFieldClientProps,\n UIFieldServerProps,\n} from 'payload'\n\nimport { sanitizeFields } from 'payload'\n\nimport { applyBaseFilterToFields } from '../../../utilities/applyBaseFilterToFields.js'\nimport { createServerFeature } from '../../../utilities/createServerFeature.js'\nimport { createNode } from '../../typeUtilities.js'\nimport { blockPopulationPromiseHOC } from './graphQLPopulationPromise.js'\nimport { i18n } from './i18n.js'\nimport { getBlockMarkdownTransformers } from './markdown/markdownTransformer.js'\nimport { ServerBlockNode } from './nodes/BlocksNode.js'\nimport { ServerInlineBlockNode } from './nodes/InlineBlocksNode.js'\nimport { createBlockNodeJSONSchema, createInlineBlockNodeJSONSchema } from './schema.js'\nimport { blockValidationHOC } from './validate.js'\n\nexport type {\n BlockFields,\n BlockFieldsOptionalID,\n InlineBlockFields,\n SerializedBlockNode,\n SerializedInlineBlockNode,\n} from './schema.js'\n\nexport type BlocksFeatureProps = {\n blocks?: (Block | BlockSlug)[] | Block[]\n inlineBlocks?: (Block | BlockSlug)[] | Block[]\n}\n\nexport const BlocksFeature = createServerFeature<BlocksFeatureProps, BlocksFeatureProps>({\n feature: ({ config: _config, isRoot, parentIsLocalized, props: _props }) => {\n const validRelationships = _config.collections.map((c) => c.slug) || []\n\n const sanitized = sanitizeFields({\n config: _config as unknown as Config,\n fields: [\n {\n name: 'lexical_blocks',\n type: 'blocks',\n blocks: _props.blocks ?? [],\n },\n {\n name: 'lexical_inline_blocks',\n type: 'blocks',\n blocks: _props.inlineBlocks ?? [],\n },\n ],\n parentIsLocalized,\n requireFieldLevelRichTextEditor: isRoot,\n validRelationships,\n })\n\n const blockConfigs: Block[] = []\n for (const _block of (sanitized[0] as BlocksField).blocks) {\n const block =\n typeof _block === 'string' ? _config?.blocks?.find((b) => b.slug === _block) : _block\n if (!block) {\n throw new Error(\n `Block not found for slug: ${typeof _block === 'string' ? _block : _block?.slug}`,\n )\n }\n // Apply baseFilter to relationship fields in the block\n blockConfigs.push({\n ...block,\n fields: applyBaseFilterToFields(block.fields, _config),\n })\n }\n\n const inlineBlockConfigs: Block[] = []\n for (const _block of (sanitized[1] as BlocksField).blocks) {\n const block =\n typeof _block === 'string' ? _config?.blocks?.find((b) => b.slug === _block) : _block\n if (!block) {\n throw new Error(\n `Block not found for slug: ${typeof _block === 'string' ? _block : _block?.slug}`,\n )\n }\n // Apply baseFilter to relationship fields in the block\n inlineBlockConfigs.push({\n ...block,\n fields: applyBaseFilterToFields(block.fields, _config),\n })\n }\n\n return {\n ClientFeature: '@payloadcms/richtext-lexical/client#BlocksFeatureClient',\n generateSchemaMap: ({ config }) => {\n /**\n * Add sub-fields to the schemaMap. E.g. if you have an array field as part of the block, and it runs addRow, it will request these\n * sub-fields from the component map. Thus, we need to put them in the component map here.\n */\n const schemaMap: FieldSchemaMap = new Map()\n\n if (blockConfigs?.length) {\n for (const block of blockConfigs) {\n const blockFields = [...block.fields]\n\n if (block?.admin?.components) {\n blockFields.unshift({\n name: `_components`,\n type: 'ui',\n admin: {\n components: {\n Block: block.admin?.components?.Block,\n BlockLabel: block.admin?.components?.Label,\n },\n },\n })\n }\n schemaMap.set(`lexical_blocks.${block.slug}.fields`, {\n fields: blockFields,\n })\n schemaMap.set(`lexical_blocks.${block.slug}`, {\n name: `lexical_blocks_${block.slug}`,\n type: 'blocks',\n blocks: [block],\n })\n }\n }\n\n if (inlineBlockConfigs?.length) {\n // To generate block schemaMap which generates things like the componentMap for admin.Label\n for (const block of inlineBlockConfigs) {\n const blockFields = [...block.fields]\n\n if (block?.admin?.components) {\n blockFields.unshift({\n name: `_components`,\n type: 'ui',\n admin: {\n components: {\n Block: block.admin?.components?.Block,\n BlockLabel: block.admin?.components?.Label,\n },\n },\n })\n }\n\n schemaMap.set(`lexical_inline_blocks.${block.slug}.fields`, {\n fields: blockFields,\n })\n\n schemaMap.set(`lexical_inline_blocks.${block.slug}`, {\n name: `lexical_inline_blocks_${block.slug}`,\n type: 'blocks',\n blocks: [block],\n })\n }\n }\n\n return schemaMap\n },\n i18n,\n markdownTransformers: getBlockMarkdownTransformers({\n blocks: blockConfigs,\n inlineBlocks: inlineBlockConfigs,\n }),\n\n nodes: [\n createNode({\n jsonSchema: blockConfigs.length ? createBlockNodeJSONSchema(blockConfigs) : undefined,\n // @ts-expect-error - TODO: fix this\n getSubFields: ({ node }) => {\n if (!node) {\n if (!blockConfigs.length) {\n return []\n }\n return [\n {\n name: 'lexical_blocks',\n type: 'blocks',\n blocks: blockConfigs,\n },\n ]\n }\n\n const blockType = node.fields.blockType\n const block = blockConfigs.find((block) => block.slug === blockType)\n return block?.fields\n },\n getSubFieldsData: ({ node }) => {\n return node?.fields\n },\n graphQLPopulationPromises: [blockPopulationPromiseHOC(blockConfigs)],\n node: ServerBlockNode,\n validations: [blockValidationHOC(blockConfigs)],\n }),\n createNode({\n jsonSchema: inlineBlockConfigs.length\n ? createInlineBlockNodeJSONSchema(inlineBlockConfigs)\n : undefined,\n // @ts-expect-error - TODO: fix this\n getSubFields: ({ node }) => {\n if (!node) {\n if (!inlineBlockConfigs.length) {\n return []\n }\n return [\n {\n name: 'lexical_inline_blocks',\n type: 'blocks',\n blocks: inlineBlockConfigs,\n },\n ]\n }\n\n const blockType = node.fields.blockType\n const block = inlineBlockConfigs.find((block) => block.slug === blockType)\n return block?.fields\n },\n getSubFieldsData: ({ node }) => {\n return node?.fields\n },\n graphQLPopulationPromises: [blockPopulationPromiseHOC(inlineBlockConfigs)],\n node: ServerInlineBlockNode,\n validations: [blockValidationHOC(inlineBlockConfigs)],\n }),\n ],\n sanitizedServerFeatureProps: _props,\n }\n },\n key: 'blocks',\n})\n\n/**\n * Props for the client components provided to `admin.components.Block` of lexical blocks.\n */\nexport type LexicalBlockClientProps = UIFieldClientProps\n/**\n * Props for the server components provided to `admin.components.Block` of lexical blocks.\n */\nexport type LexicalBlockServerProps = UIFieldServerProps\n\n/**\n * Props for the client components provided to `admin.components.Label` of lexical blocks.\n */\nexport type LexicalBlockLabelClientProps = UIFieldClientProps\n/**\n * Props for the server components provided to `admin.components.Label` of lexical blocks.\n */\nexport type LexicalBlockLabelServerProps = UIFieldServerProps\n\n/**\n * Props for the client components provided to `admin.components.Block` of lexical inline blocks.\n */\nexport type LexicalInlineBlockClientProps = UIFieldClientProps\n/**\n * Props for the server components provided to `admin.components.Block` of lexical inline blocks.\n */\nexport type LexicalInlineBlockServerProps = UIFieldServerProps\n\n/**\n * Props for the client components provided to `admin.components.Label` of lexical inline blocks.\n */\nexport type LexicalInlineBlockLabelClientProps = UIFieldClientProps\n/**\n * Props for the server components provided to `admin.components.Label` of lexical inline blocks.\n */\nexport type LexicalInlineBlockLabelServerProps = UIFieldServerProps\n"],"mappings":"AAUA,SAASA,cAAc,QAAQ;AAE/B,SAASC,uBAAuB,QAAQ;AACxC,SAASC,mBAAmB,QAAQ;AACpC,SAASC,UAAU,QAAQ;AAC3B,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,IAAI,QAAQ;AACrB,SAASC,4BAA4B,QAAQ;AAC7C,SAASC,eAAe,QAAQ;AAChC,SAASC,qBAAqB,QAAQ;AACtC,SAASC,yBAAyB,EAAEC,+BAA+B,QAAQ;AAC3E,SAASC,kBAAkB,QAAQ;AAenC,OAAO,MAAMC,aAAA,GAAgBV,mBAAA,CAA4D;EACvFW,OAAA,EAASA,CAAC;IAAEC,MAAA,EAAQC,OAAO;IAAEC,MAAM;IAAEC,iBAAiB;IAAEC,KAAA,EAAOC;EAAM,CAAE;IACrE,MAAMC,kBAAA,GAAqBL,OAAA,CAAQM,WAAW,CAACC,GAAG,CAAEC,CAAA,IAAMA,CAAA,CAAEC,IAAI,KAAK,EAAE;IAEvE,MAAMC,SAAA,GAAYzB,cAAA,CAAe;MAC/Bc,MAAA,EAAQC,OAAA;MACRW,MAAA,EAAQ,CACN;QACEC,IAAA,EAAM;QACNC,IAAA,EAAM;QACNC,MAAA,EAAQV,MAAA,CAAOU,MAAM,IAAI;MAC3B,GACA;QACEF,IAAA,EAAM;QACNC,IAAA,EAAM;QACNC,MAAA,EAAQV,MAAA,CAAOW,YAAY,IAAI;MACjC,EACD;MACDb,iBAAA;MACAc,+BAAA,EAAiCf,MAAA;MACjCI;IACF;IAEA,MAAMY,YAAA,GAAwB,EAAE;IAChC,KAAK,MAAMC,MAAA,IAAUR,SAAU,CAAC,EAAE,CAAiBI,MAAM,EAAE;MACzD,MAAMK,KAAA,GACJ,OAAOD,MAAA,KAAW,WAAWlB,OAAA,EAASc,MAAA,EAAQM,IAAA,CAAMC,CAAA,IAAMA,CAAA,CAAEZ,IAAI,KAAKS,MAAA,IAAUA,MAAA;MACjF,IAAI,CAACC,KAAA,EAAO;QACV,MAAM,IAAIG,KAAA,CACR,6BAA6B,OAAOJ,MAAA,KAAW,WAAWA,MAAA,GAASA,MAAA,EAAQT,IAAA,EAAM;MAErF;MACA;MACAQ,YAAA,CAAaM,IAAI,CAAC;QAChB,GAAGJ,KAAK;QACRR,MAAA,EAAQzB,uBAAA,CAAwBiC,KAAA,CAAMR,MAAM,EAAEX,OAAA;MAChD;IACF;IAEA,MAAMwB,kBAAA,GAA8B,EAAE;IACtC,KAAK,MAAMN,MAAA,IAAUR,SAAU,CAAC,EAAE,CAAiBI,MAAM,EAAE;MACzD,MAAMK,KAAA,GACJ,OAAOD,MAAA,KAAW,WAAWlB,OAAA,EAASc,MAAA,EAAQM,IAAA,CAAMC,CAAA,IAAMA,CAAA,CAAEZ,IAAI,KAAKS,MAAA,IAAUA,MAAA;MACjF,IAAI,CAACC,KAAA,EAAO;QACV,MAAM,IAAIG,KAAA,CACR,6BAA6B,OAAOJ,MAAA,KAAW,WAAWA,MAAA,GAASA,MAAA,EAAQT,IAAA,EAAM;MAErF;MACA;MACAe,kBAAA,CAAmBD,IAAI,CAAC;QACtB,GAAGJ,KAAK;QACRR,MAAA,EAAQzB,uBAAA,CAAwBiC,KAAA,CAAMR,MAAM,EAAEX,OAAA;MAChD;IACF;IAEA,OAAO;MACLyB,aAAA,EAAe;MACfC,iBAAA,EAAmBA,CAAC;QAAE3B;MAAM,CAAE;QAC5B;;;;QAIA,MAAM4B,SAAA,GAA4B,IAAIC,GAAA;QAEtC,IAAIX,YAAA,EAAcY,MAAA,EAAQ;UACxB,KAAK,MAAMV,KAAA,IAASF,YAAA,EAAc;YAChC,MAAMa,WAAA,GAAc,C,GAAIX,KAAA,CAAMR,MAAM,CAAC;YAErC,IAAIQ,KAAA,EAAOY,KAAA,EAAOC,UAAA,EAAY;cAC5BF,WAAA,CAAYG,OAAO,CAAC;gBAClBrB,IAAA,EAAM,aAAa;gBACnBC,IAAA,EAAM;gBACNkB,KAAA,EAAO;kBACLC,UAAA,EAAY;oBACVE,KAAA,EAAOf,KAAA,CAAMY,KAAK,EAAEC,UAAA,EAAYE,KAAA;oBAChCC,UAAA,EAAYhB,KAAA,CAAMY,KAAK,EAAEC,UAAA,EAAYI;kBACvC;gBACF;cACF;YACF;YACAT,SAAA,CAAUU,GAAG,CAAC,kBAAkBlB,KAAA,CAAMV,IAAI,SAAS,EAAE;cACnDE,MAAA,EAAQmB;YACV;YACAH,SAAA,CAAUU,GAAG,CAAC,kBAAkBlB,KAAA,CAAMV,IAAI,EAAE,EAAE;cAC5CG,IAAA,EAAM,kBAAkBO,KAAA,CAAMV,IAAI,EAAE;cACpCI,IAAA,EAAM;cACNC,MAAA,EAAQ,CAACK,KAAA;YACX;UACF;QACF;QAEA,IAAIK,kBAAA,EAAoBK,MAAA,EAAQ;UAC9B;UACA,KAAK,MAAMV,KAAA,IAASK,kBAAA,EAAoB;YACtC,MAAMM,WAAA,GAAc,C,GAAIX,KAAA,CAAMR,MAAM,CAAC;YAErC,IAAIQ,KAAA,EAAOY,KAAA,EAAOC,UAAA,EAAY;cAC5BF,WAAA,CAAYG,OAAO,CAAC;gBAClBrB,IAAA,EAAM,aAAa;gBACnBC,IAAA,EAAM;gBACNkB,KAAA,EAAO;kBACLC,UAAA,EAAY;oBACVE,KAAA,EAAOf,KAAA,CAAMY,KAAK,EAAEC,UAAA,EAAYE,KAAA;oBAChCC,UAAA,EAAYhB,KAAA,CAAMY,KAAK,EAAEC,UAAA,EAAYI;kBACvC;gBACF;cACF;YACF;YAEAT,SAAA,CAAUU,GAAG,CAAC,yBAAyBlB,KAAA,CAAMV,IAAI,SAAS,EAAE;cAC1DE,MAAA,EAAQmB;YACV;YAEAH,SAAA,CAAUU,GAAG,CAAC,yBAAyBlB,KAAA,CAAMV,IAAI,EAAE,EAAE;cACnDG,IAAA,EAAM,yBAAyBO,KAAA,CAAMV,IAAI,EAAE;cAC3CI,IAAA,EAAM;cACNC,MAAA,EAAQ,CAACK,KAAA;YACX;UACF;QACF;QAEA,OAAOQ,SAAA;MACT;MACArC,IAAA;MACAgD,oBAAA,EAAsB/C,4BAAA,CAA6B;QACjDuB,MAAA,EAAQG,YAAA;QACRF,YAAA,EAAcS;MAChB;MAEAe,KAAA,EAAO,CACLnD,UAAA,CAAW;QACToD,UAAA,EAAYvB,YAAA,CAAaY,MAAM,GAAGnC,yBAAA,CAA0BuB,YAAA,IAAgBwB,SAAA;QAC5E;QACAC,YAAA,EAAcA,CAAC;UAAEC;QAAI,CAAE;UACrB,IAAI,CAACA,IAAA,EAAM;YACT,IAAI,CAAC1B,YAAA,CAAaY,MAAM,EAAE;cACxB,OAAO,EAAE;YACX;YACA,OAAO,CACL;cACEjB,IAAA,EAAM;cACNC,IAAA,EAAM;cACNC,MAAA,EAAQG;YACV,EACD;UACH;UAEA,MAAM2B,SAAA,GAAYD,IAAA,CAAKhC,MAAM,CAACiC,SAAS;UACvC,MAAMzB,KAAA,GAAQF,YAAA,CAAaG,IAAI,CAAED,KAAA,IAAUA,KAAA,CAAMV,IAAI,KAAKmC,SAAA;UAC1D,OAAOzB,KAAA,EAAOR,MAAA;QAChB;QACAkC,gBAAA,EAAkBA,CAAC;UAAEF;QAAI,CAAE;UACzB,OAAOA,IAAA,EAAMhC,MAAA;QACf;QACAmC,yBAAA,EAA2B,CAACzD,yBAAA,CAA0B4B,YAAA,EAAc;QACpE0B,IAAA,EAAMnD,eAAA;QACNuD,WAAA,EAAa,CAACnD,kBAAA,CAAmBqB,YAAA;MACnC,IACA7B,UAAA,CAAW;QACToD,UAAA,EAAYhB,kBAAA,CAAmBK,MAAM,GACjClC,+BAAA,CAAgC6B,kBAAA,IAChCiB,SAAA;QACJ;QACAC,YAAA,EAAcA,CAAC;UAAEC;QAAI,CAAE;UACrB,IAAI,CAACA,IAAA,EAAM;YACT,IAAI,CAACnB,kBAAA,CAAmBK,MAAM,EAAE;cAC9B,OAAO,EAAE;YACX;YACA,OAAO,CACL;cACEjB,IAAA,EAAM;cACNC,IAAA,EAAM;cACNC,MAAA,EAAQU;YACV,EACD;UACH;UAEA,MAAMoB,SAAA,GAAYD,IAAA,CAAKhC,MAAM,CAACiC,SAAS;UACvC,MAAMzB,KAAA,GAAQK,kBAAA,CAAmBJ,IAAI,CAAED,KAAA,IAAUA,KAAA,CAAMV,IAAI,KAAKmC,SAAA;UAChE,OAAOzB,KAAA,EAAOR,MAAA;QAChB;QACAkC,gBAAA,EAAkBA,CAAC;UAAEF;QAAI,CAAE;UACzB,OAAOA,IAAA,EAAMhC,MAAA;QACf;QACAmC,yBAAA,EAA2B,CAACzD,yBAAA,CAA0BmC,kBAAA,EAAoB;QAC1EmB,IAAA,EAAMlD,qBAAA;QACNsD,WAAA,EAAa,CAACnD,kBAAA,CAAmB4B,kBAAA;MACnC,GACD;MACDwB,2BAAA,EAA6B5C;IAC/B;EACF;EACA6C,GAAA,EAAK;AACP","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heading.js","names":["ALLOWED_HEADING_TAGS","
|
|
1
|
+
{"version":3,"file":"heading.js","names":["ALLOWED_HEADING_TAGS","HeadingHTMLConverterAsync","heading","node","nodesToHTML","providedStyleTag","children","nodes","join","tag","has"],"sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/heading.ts"],"sourcesContent":["import type { SerializedHeadingNode } from '../../../../../types/nodeTypes.js'\nimport type { HTMLConvertersAsync } from '../types.js'\n\nimport { ALLOWED_HEADING_TAGS } from '../../../../heading/constants.js'\n\nexport const HeadingHTMLConverterAsync: HTMLConvertersAsync<SerializedHeadingNode> = {\n heading: async ({ node, nodesToHTML, providedStyleTag }) => {\n const children = (\n await nodesToHTML({\n nodes: node.children,\n })\n ).join('')\n\n const tag = ALLOWED_HEADING_TAGS.has(node.tag) ? node.tag : 'h1'\n\n return `<${tag}${providedStyleTag}>${children}</${tag}>`\n },\n}\n"],"mappings":"AAGA,SAASA,oBAAoB,QAAQ;AAErC,OAAO,MAAMC,yBAAA,GAAwE;EACnFC,OAAA,EAAS,MAAAA,CAAO;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IACrD,MAAMC,QAAA,GAAW,CACf,MAAMF,WAAA,CAAY;MAChBG,KAAA,EAAOJ,IAAA,CAAKG;IACd,EAAC,EACDE,IAAI,CAAC;IAEP,MAAMC,GAAA,GAAMT,oBAAA,CAAqBU,GAAG,CAACP,IAAA,CAAKM,GAAG,IAAIN,IAAA,CAAKM,GAAG,GAAG;IAE5D,OAAO,IAAIA,GAAA,GAAMJ,gBAAA,IAAoBC,QAAA,KAAaG,GAAA,GAAM;EAC1D;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/list.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/list.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACnG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAMtD,eAAO,MAAM,sBAAsB,EAAE,mBAAmB,CACtD,sBAAsB,GAAG,kBAAkB,CAiD5C,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import escapeHTML from 'escape-html';
|
|
1
2
|
import { v4 as uuidv4 } from 'uuid';
|
|
2
|
-
|
|
3
|
+
import { ALLOWED_LIST_TAGS } from '../../../../lists/shared/constants.js';
|
|
3
4
|
const ALLOWED_LIST_TYPES = new Set(['bullet', 'check', 'number']);
|
|
4
5
|
export const ListHTMLConverterAsync = {
|
|
5
6
|
list: async ({
|
|
@@ -32,7 +33,7 @@ export const ListHTMLConverterAsync = {
|
|
|
32
33
|
role="checkbox"
|
|
33
34
|
style="list-style-type: none;${providedCSSString}"
|
|
34
35
|
tabIndex="-1"
|
|
35
|
-
value="${node.value}"
|
|
36
|
+
value="${escapeHTML(String(node.value))}"
|
|
36
37
|
>
|
|
37
38
|
${hasSubLists ? children : `<input${node.checked ? ' checked' : ''} id="${uuid}" readOnly="true" type="checkbox" />
|
|
38
39
|
<label htmlFor="${uuid}">${children}</label>
|
|
@@ -42,7 +43,7 @@ export const ListHTMLConverterAsync = {
|
|
|
42
43
|
return `<li
|
|
43
44
|
class="${hasSubLists ? 'nestedListItem' : ''}"
|
|
44
45
|
style="${hasSubLists ? `list-style-type: none;${providedCSSString}` : providedCSSString}"
|
|
45
|
-
value="${node.value}"
|
|
46
|
+
value="${escapeHTML(String(node.value))}"
|
|
46
47
|
>${children}</li>`;
|
|
47
48
|
}
|
|
48
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","names":["v4","uuidv4","ALLOWED_LIST_TAGS","
|
|
1
|
+
{"version":3,"file":"list.js","names":["escapeHTML","v4","uuidv4","ALLOWED_LIST_TAGS","ALLOWED_LIST_TYPES","Set","ListHTMLConverterAsync","list","node","nodesToHTML","providedStyleTag","children","nodes","join","tag","has","listType","listitem","parent","providedCSSString","hasSubLists","some","child","type","uuid","checked","String","value"],"sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/list.ts"],"sourcesContent":["import escapeHTML from 'escape-html'\nimport { v4 as uuidv4 } from 'uuid'\n\nimport type { SerializedListItemNode, SerializedListNode } from '../../../../../types/nodeTypes.js'\nimport type { HTMLConvertersAsync } from '../types.js'\n\nimport { ALLOWED_LIST_TAGS } from '../../../../lists/shared/constants.js'\n\nconst ALLOWED_LIST_TYPES = new Set(['bullet', 'check', 'number'])\n\nexport const ListHTMLConverterAsync: HTMLConvertersAsync<\n SerializedListItemNode | SerializedListNode\n> = {\n list: async ({ node, nodesToHTML, providedStyleTag }) => {\n const children = (\n await nodesToHTML({\n nodes: node.children,\n })\n ).join('')\n\n const tag = ALLOWED_LIST_TAGS.has(node.tag) ? node.tag : 'ul'\n const listType = ALLOWED_LIST_TYPES.has(node.listType) ? node.listType : 'bullet'\n\n return `<${tag}${providedStyleTag} class=\"list-${listType}\">${children}</${tag}>`\n },\n listitem: async ({ node, nodesToHTML, parent, providedCSSString }) => {\n const hasSubLists = node.children.some((child) => child.type === 'list')\n\n const children = (\n await nodesToHTML({\n nodes: node.children,\n })\n ).join('')\n\n if ('listType' in parent && parent?.listType === 'check') {\n const uuid = uuidv4()\n return `<li\n aria-checked=\"${node.checked ? 'true' : 'false'}\"\n class=\"list-item-checkbox${node.checked ? ' list-item-checkbox-checked' : ' list-item-checkbox-unchecked'}${hasSubLists ? ' nestedListItem' : ''}\"\n role=\"checkbox\"\n style=\"list-style-type: none;${providedCSSString}\"\n tabIndex=\"-1\"\n value=\"${escapeHTML(String(node.value))}\"\n >\n ${\n hasSubLists\n ? children\n : `<input${node.checked ? ' checked' : ''} id=\"${uuid}\" readOnly=\"true\" type=\"checkbox\" />\n <label htmlFor=\"${uuid}\">${children}</label>\n <br />`\n }\n </li>`\n } else {\n return `<li\n class=\"${hasSubLists ? 'nestedListItem' : ''}\"\n style=\"${hasSubLists ? `list-style-type: none;${providedCSSString}` : providedCSSString}\"\n value=\"${escapeHTML(String(node.value))}\"\n >${children}</li>`\n }\n },\n}\n"],"mappings":"AAAA,OAAOA,UAAA,MAAgB;AACvB,SAASC,EAAA,IAAMC,MAAM,QAAQ;AAK7B,SAASC,iBAAiB,QAAQ;AAElC,MAAMC,kBAAA,GAAqB,IAAIC,GAAA,CAAI,CAAC,UAAU,SAAS,SAAS;AAEhE,OAAO,MAAMC,sBAAA,GAET;EACFC,IAAA,EAAM,MAAAA,CAAO;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IAClD,MAAMC,QAAA,GAAW,CACf,MAAMF,WAAA,CAAY;MAChBG,KAAA,EAAOJ,IAAA,CAAKG;IACd,EAAC,EACDE,IAAI,CAAC;IAEP,MAAMC,GAAA,GAAMX,iBAAA,CAAkBY,GAAG,CAACP,IAAA,CAAKM,GAAG,IAAIN,IAAA,CAAKM,GAAG,GAAG;IACzD,MAAME,QAAA,GAAWZ,kBAAA,CAAmBW,GAAG,CAACP,IAAA,CAAKQ,QAAQ,IAAIR,IAAA,CAAKQ,QAAQ,GAAG;IAEzE,OAAO,IAAIF,GAAA,GAAMJ,gBAAA,gBAAgCM,QAAA,KAAaL,QAAA,KAAaG,GAAA,GAAM;EACnF;EACAG,QAAA,EAAU,MAAAA,CAAO;IAAET,IAAI;IAAEC,WAAW;IAAES,MAAM;IAAEC;EAAiB,CAAE;IAC/D,MAAMC,WAAA,GAAcZ,IAAA,CAAKG,QAAQ,CAACU,IAAI,CAAEC,KAAA,IAAUA,KAAA,CAAMC,IAAI,KAAK;IAEjE,MAAMZ,QAAA,GAAW,CACf,MAAMF,WAAA,CAAY;MAChBG,KAAA,EAAOJ,IAAA,CAAKG;IACd,EAAC,EACDE,IAAI,CAAC;IAEP,IAAI,cAAcK,MAAA,IAAUA,MAAA,EAAQF,QAAA,KAAa,SAAS;MACxD,MAAMQ,IAAA,GAAOtB,MAAA;MACb,OAAO;0BACaM,IAAA,CAAKiB,OAAO,GAAG,SAAS;qCACbjB,IAAA,CAAKiB,OAAO,GAAG,gCAAgC,kCAAkCL,WAAA,GAAc,oBAAoB;;yCAE/GD,iBAAA;;mBAEtBnB,UAAA,CAAW0B,MAAA,CAAOlB,IAAA,CAAKmB,KAAK;;YAGnCP,WAAA,GACIT,QAAA,GACA,SAASH,IAAA,CAAKiB,OAAO,GAAG,aAAa,UAAUD,IAAA;8BACjCA,IAAA,KAASb,QAAA;mBACpB;cAEL;IACV,OAAO;MACL,OAAO;mBACMS,WAAA,GAAc,mBAAmB;mBACjCA,WAAA,GAAc,yBAAyBD,iBAAA,EAAmB,GAAGA,iBAAA;mBAC7DnB,UAAA,CAAW0B,MAAA,CAAOlB,IAAA,CAAKmB,KAAK;WACpChB,QAAA,OAAe;IACtB;EACF;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findConverterForNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/converters/lexicalToHtml/shared/findConverterForNode.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAGpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGrE,wBAAgB,oBAAoB,CAClC,WAAW,SAAS,cAAc,GAAG,mBAAmB,EACxD,UAAU,SAAS,aAAa,GAAG,kBAAkB,EACrD,EACA,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,IAAI,EACJ,gBAAgB,GACjB,EAAE;IACD,UAAU,EAAE,WAAW,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CAAA;IAClC,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CAAA;IACrC,IAAI,EAAE,qBAAqB,CAAA;IAC3B,gBAAgB,EAAE,UAAU,CAAA;CAC7B,GAAG;IACF,gBAAgB,EAAE,UAAU,GAAG,SAAS,CAAA;IACxC,iBAAiB,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;CACzB,
|
|
1
|
+
{"version":3,"file":"findConverterForNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/converters/lexicalToHtml/shared/findConverterForNode.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAGpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGrE,wBAAgB,oBAAoB,CAClC,WAAW,SAAS,cAAc,GAAG,mBAAmB,EACxD,UAAU,SAAS,aAAa,GAAG,kBAAkB,EACrD,EACA,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,IAAI,EACJ,gBAAgB,GACjB,EAAE;IACD,UAAU,EAAE,WAAW,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CAAA;IAClC,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CAAA;IACrC,IAAI,EAAE,qBAAqB,CAAA;IAC3B,gBAAgB,EAAE,UAAU,CAAA;CAC7B,GAAG;IACF,gBAAgB,EAAE,UAAU,GAAG,SAAS,CAAA;IACxC,iBAAiB,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;CACzB,CA6EA"}
|