@delmaredigital/payload-puck 0.6.12 → 0.6.13
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/README.md +50 -1
- package/dist/admin/EditWithPuckButton.d.ts +1 -1
- package/dist/admin/EditWithPuckButton.d.ts.map +1 -1
- package/dist/admin/EditWithPuckButton.js +65 -25
- package/dist/admin/EditWithPuckButton.js.map +1 -1
- package/dist/admin/EditWithPuckCell.js +43 -13
- package/dist/admin/EditWithPuckCell.js.map +1 -1
- package/dist/admin/PuckEditorView.d.ts +1 -1
- package/dist/admin/PuckEditorView.d.ts.map +1 -1
- package/dist/admin/PuckEditorView.js +118 -32
- package/dist/admin/PuckEditorView.js.map +1 -1
- package/dist/admin/client.d.ts +2 -2
- package/dist/admin/client.d.ts.map +1 -1
- package/dist/admin/client.js +4 -4
- package/dist/admin/client.js.map +1 -1
- package/dist/admin/generateAdminComponents.js +7 -7
- package/dist/admin/generateAdminComponents.js.map +1 -1
- package/dist/admin/index.d.ts +5 -5
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +3 -2
- package/dist/admin/index.js.map +1 -1
- package/dist/ai/collections/AiContext.js +56 -29
- package/dist/ai/collections/AiContext.js.map +1 -1
- package/dist/ai/collections/AiPrompts.js +24 -19
- package/dist/ai/collections/AiPrompts.js.map +1 -1
- package/dist/ai/createAiApiRoutes.js +28 -19
- package/dist/ai/createAiApiRoutes.js.map +1 -1
- package/dist/ai/createAiGenerate.js +7 -8
- package/dist/ai/createAiGenerate.js.map +1 -1
- package/dist/ai/createAiPlugin.js +7 -9
- package/dist/ai/createAiPlugin.js.map +1 -1
- package/dist/ai/hooks/useAiContext.js +50 -39
- package/dist/ai/hooks/useAiContext.js.map +1 -1
- package/dist/ai/hooks/useAiPrompts.js +33 -25
- package/dist/ai/hooks/useAiPrompts.js.map +1 -1
- package/dist/ai/index.js +9 -10
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/plugins/ContextEditorPanel.d.ts +1 -1
- package/dist/ai/plugins/ContextEditorPanel.d.ts.map +1 -1
- package/dist/ai/plugins/ContextEditorPanel.js +399 -107
- package/dist/ai/plugins/ContextEditorPanel.js.map +1 -1
- package/dist/ai/plugins/PromptEditorPanel.d.ts +1 -1
- package/dist/ai/plugins/PromptEditorPanel.d.ts.map +1 -1
- package/dist/ai/plugins/PromptEditorPanel.js +237 -51
- package/dist/ai/plugins/PromptEditorPanel.js.map +1 -1
- package/dist/ai/plugins/contextEditorPlugin.js +12 -5
- package/dist/ai/plugins/contextEditorPlugin.js.map +1 -1
- package/dist/ai/plugins/promptApiRoutes.js +119 -50
- package/dist/ai/plugins/promptApiRoutes.js.map +1 -1
- package/dist/ai/plugins/promptEditorPlugin.js +12 -5
- package/dist/ai/plugins/promptEditorPlugin.js.map +1 -1
- package/dist/ai/presets/componentAiDefaults.js +108 -83
- package/dist/ai/presets/componentAiDefaults.js.map +1 -1
- package/dist/ai/presets/index.js +12 -18
- package/dist/ai/presets/index.js.map +1 -1
- package/dist/ai/presets/instructions/interactive.js +85 -75
- package/dist/ai/presets/instructions/interactive.js.map +1 -1
- package/dist/ai/presets/instructions/layout.js +122 -117
- package/dist/ai/presets/instructions/layout.js.map +1 -1
- package/dist/ai/presets/instructions/media.js +31 -29
- package/dist/ai/presets/instructions/media.js.map +1 -1
- package/dist/ai/presets/instructions/pagePatterns.js +4 -6
- package/dist/ai/presets/instructions/pagePatterns.js.map +1 -1
- package/dist/ai/presets/instructions/schemas.js +495 -137
- package/dist/ai/presets/instructions/schemas.js.map +1 -1
- package/dist/ai/presets/instructions/typography.js +38 -33
- package/dist/ai/presets/instructions/typography.js.map +1 -1
- package/dist/ai/tools/index.js +92 -55
- package/dist/ai/tools/index.js.map +1 -1
- package/dist/ai/types.js +7 -1
- package/dist/ai/types.js.map +1 -1
- package/dist/ai/utils/injectAiConfig.js +33 -40
- package/dist/ai/utils/injectAiConfig.js.map +1 -1
- package/dist/api/createPuckApiRoutes.d.ts +1 -1
- package/dist/api/createPuckApiRoutes.d.ts.map +1 -1
- package/dist/api/createPuckApiRoutes.js +123 -65
- package/dist/api/createPuckApiRoutes.js.map +1 -1
- package/dist/api/createPuckApiRoutesVersions.d.ts +1 -1
- package/dist/api/createPuckApiRoutesVersions.d.ts.map +1 -1
- package/dist/api/createPuckApiRoutesVersions.js +88 -37
- package/dist/api/createPuckApiRoutesVersions.js.map +1 -1
- package/dist/api/createPuckApiRoutesWithId.d.ts +1 -1
- package/dist/api/createPuckApiRoutesWithId.d.ts.map +1 -1
- package/dist/api/createPuckApiRoutesWithId.js +166 -72
- package/dist/api/createPuckApiRoutesWithId.js.map +1 -1
- package/dist/api/index.d.ts +5 -5
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +6 -6
- package/dist/api/index.js.map +1 -1
- package/dist/api/payload-config.d.js +15 -0
- package/dist/api/payload-config.d.js.map +1 -0
- package/dist/api/types.js +4 -1
- package/dist/api/types.js.map +1 -1
- package/dist/api/utils/mapRootProps.d.ts +1 -1
- package/dist/api/utils/mapRootProps.d.ts.map +1 -1
- package/dist/api/utils/mapRootProps.js +77 -44
- package/dist/api/utils/mapRootProps.js.map +1 -1
- package/dist/collections/Templates.js +24 -20
- package/dist/collections/Templates.js.map +1 -1
- package/dist/components/AccordionClient.d.ts +2 -2
- package/dist/components/AccordionClient.d.ts.map +1 -1
- package/dist/components/AccordionClient.js +81 -22
- package/dist/components/AccordionClient.js.map +1 -1
- package/dist/components/AnimatedWrapper.d.ts +2 -2
- package/dist/components/AnimatedWrapper.d.ts.map +1 -1
- package/dist/components/AnimatedWrapper.js +31 -16
- package/dist/components/AnimatedWrapper.js.map +1 -1
- package/dist/components/exports.js +2 -2
- package/dist/components/exports.js.map +1 -1
- package/dist/components/index.d.ts +5 -5
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +7 -7
- package/dist/components/index.js.map +1 -1
- package/dist/components/interactive/Accordion.d.ts +1 -1
- package/dist/components/interactive/Accordion.d.ts.map +1 -1
- package/dist/components/interactive/Accordion.js +149 -55
- package/dist/components/interactive/Accordion.js.map +1 -1
- package/dist/components/interactive/Accordion.server.d.ts +1 -1
- package/dist/components/interactive/Accordion.server.d.ts.map +1 -1
- package/dist/components/interactive/Accordion.server.js +25 -7
- package/dist/components/interactive/Accordion.server.js.map +1 -1
- package/dist/components/interactive/Button.d.ts +3 -3
- package/dist/components/interactive/Button.d.ts.map +1 -1
- package/dist/components/interactive/Button.js +89 -43
- package/dist/components/interactive/Button.js.map +1 -1
- package/dist/components/interactive/Button.server.d.ts +2 -2
- package/dist/components/interactive/Button.server.d.ts.map +1 -1
- package/dist/components/interactive/Button.server.js +40 -20
- package/dist/components/interactive/Button.server.js.map +1 -1
- package/dist/components/interactive/Card.d.ts +3 -3
- package/dist/components/interactive/Card.d.ts.map +1 -1
- package/dist/components/interactive/Card.js +131 -39
- package/dist/components/interactive/Card.js.map +1 -1
- package/dist/components/interactive/Card.server.d.ts +3 -3
- package/dist/components/interactive/Card.server.d.ts.map +1 -1
- package/dist/components/interactive/Card.server.js +72 -11
- package/dist/components/interactive/Card.server.js.map +1 -1
- package/dist/components/interactive/Divider.d.ts +1 -1
- package/dist/components/interactive/Divider.d.ts.map +1 -1
- package/dist/components/interactive/Divider.js +54 -26
- package/dist/components/interactive/Divider.js.map +1 -1
- package/dist/components/interactive/Divider.server.d.ts +1 -1
- package/dist/components/interactive/Divider.server.d.ts.map +1 -1
- package/dist/components/interactive/Divider.server.js +28 -12
- package/dist/components/interactive/Divider.server.js.map +1 -1
- package/dist/components/interactive/index.d.ts +4 -4
- package/dist/components/interactive/index.d.ts.map +1 -1
- package/dist/components/interactive/index.js +5 -5
- package/dist/components/interactive/index.js.map +1 -1
- package/dist/components/layout/Container.d.ts +1 -1
- package/dist/components/layout/Container.d.ts.map +1 -1
- package/dist/components/layout/Container.js +101 -47
- package/dist/components/layout/Container.js.map +1 -1
- package/dist/components/layout/Container.server.d.ts +1 -1
- package/dist/components/layout/Container.server.d.ts.map +1 -1
- package/dist/components/layout/Container.server.js +67 -19
- package/dist/components/layout/Container.server.js.map +1 -1
- package/dist/components/layout/Flex.d.ts +2 -2
- package/dist/components/layout/Flex.d.ts.map +1 -1
- package/dist/components/layout/Flex.js +124 -55
- package/dist/components/layout/Flex.js.map +1 -1
- package/dist/components/layout/Flex.server.d.ts +1 -1
- package/dist/components/layout/Flex.server.d.ts.map +1 -1
- package/dist/components/layout/Flex.server.js +50 -14
- package/dist/components/layout/Flex.server.js.map +1 -1
- package/dist/components/layout/Grid.d.ts +1 -1
- package/dist/components/layout/Grid.d.ts.map +1 -1
- package/dist/components/layout/Grid.js +93 -44
- package/dist/components/layout/Grid.js.map +1 -1
- package/dist/components/layout/Grid.server.d.ts +1 -1
- package/dist/components/layout/Grid.server.d.ts.map +1 -1
- package/dist/components/layout/Grid.server.js +56 -14
- package/dist/components/layout/Grid.server.js.map +1 -1
- package/dist/components/layout/Section.d.ts +1 -1
- package/dist/components/layout/Section.d.ts.map +1 -1
- package/dist/components/layout/Section.js +147 -64
- package/dist/components/layout/Section.js.map +1 -1
- package/dist/components/layout/Section.server.d.ts +1 -1
- package/dist/components/layout/Section.server.d.ts.map +1 -1
- package/dist/components/layout/Section.server.js +92 -28
- package/dist/components/layout/Section.server.js.map +1 -1
- package/dist/components/layout/Spacer.d.ts +1 -1
- package/dist/components/layout/Spacer.d.ts.map +1 -1
- package/dist/components/layout/Spacer.js +80 -30
- package/dist/components/layout/Spacer.js.map +1 -1
- package/dist/components/layout/Spacer.server.d.ts +1 -1
- package/dist/components/layout/Spacer.server.d.ts.map +1 -1
- package/dist/components/layout/Spacer.server.js +31 -9
- package/dist/components/layout/Spacer.server.js.map +1 -1
- package/dist/components/layout/Template.d.ts +1 -1
- package/dist/components/layout/Template.d.ts.map +1 -1
- package/dist/components/layout/Template.js +58 -30
- package/dist/components/layout/Template.js.map +1 -1
- package/dist/components/layout/Template.server.d.ts +1 -1
- package/dist/components/layout/Template.server.d.ts.map +1 -1
- package/dist/components/layout/Template.server.js +43 -11
- package/dist/components/layout/Template.server.js.map +1 -1
- package/dist/components/layout/index.d.ts +8 -8
- package/dist/components/layout/index.d.ts.map +1 -1
- package/dist/components/layout/index.js +8 -8
- package/dist/components/layout/index.js.map +1 -1
- package/dist/components/media/Image.d.ts +3 -3
- package/dist/components/media/Image.d.ts.map +1 -1
- package/dist/components/media/Image.js +122 -39
- package/dist/components/media/Image.js.map +1 -1
- package/dist/components/media/Image.server.d.ts +3 -3
- package/dist/components/media/Image.server.d.ts.map +1 -1
- package/dist/components/media/Image.server.js +76 -13
- package/dist/components/media/Image.server.js.map +1 -1
- package/dist/components/media/index.d.ts +1 -1
- package/dist/components/media/index.d.ts.map +1 -1
- package/dist/components/media/index.js +2 -2
- package/dist/components/media/index.js.map +1 -1
- package/dist/components/typography/Heading.d.ts +2 -2
- package/dist/components/typography/Heading.d.ts.map +1 -1
- package/dist/components/typography/Heading.js +45 -25
- package/dist/components/typography/Heading.js.map +1 -1
- package/dist/components/typography/Heading.server.d.ts +2 -2
- package/dist/components/typography/Heading.server.d.ts.map +1 -1
- package/dist/components/typography/Heading.server.js +16 -10
- package/dist/components/typography/Heading.server.js.map +1 -1
- package/dist/components/typography/RichText.editor.d.ts +1 -1
- package/dist/components/typography/RichText.editor.d.ts.map +1 -1
- package/dist/components/typography/RichText.editor.js +44 -19
- package/dist/components/typography/RichText.editor.js.map +1 -1
- package/dist/components/typography/RichText.server.d.ts +2 -2
- package/dist/components/typography/RichText.server.d.ts.map +1 -1
- package/dist/components/typography/RichText.server.js +33 -14
- package/dist/components/typography/RichText.server.js.map +1 -1
- package/dist/components/typography/Text.d.ts +2 -2
- package/dist/components/typography/Text.d.ts.map +1 -1
- package/dist/components/typography/Text.js +49 -23
- package/dist/components/typography/Text.js.map +1 -1
- package/dist/components/typography/Text.server.d.ts +2 -2
- package/dist/components/typography/Text.server.d.ts.map +1 -1
- package/dist/components/typography/Text.server.js +21 -8
- package/dist/components/typography/Text.server.js.map +1 -1
- package/dist/components/typography/index.d.ts +4 -4
- package/dist/components/typography/index.d.ts.map +1 -1
- package/dist/components/typography/index.js +5 -5
- package/dist/components/typography/index.js.map +1 -1
- package/dist/config/config.editor.d.ts +3 -3
- package/dist/config/config.editor.d.ts.map +1 -1
- package/dist/config/config.editor.js +119 -54
- package/dist/config/config.editor.js.map +1 -1
- package/dist/config/index.d.ts +4 -4
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +62 -35
- package/dist/config/index.js.map +1 -1
- package/dist/config/merge.d.ts +1 -1
- package/dist/config/merge.d.ts.map +1 -1
- package/dist/config/merge.js +23 -26
- package/dist/config/merge.js.map +1 -1
- package/dist/config/presets.d.ts +4 -4
- package/dist/config/presets.js +195 -75
- package/dist/config/presets.js.map +1 -1
- package/dist/config/types.js +6 -2
- package/dist/config/types.js.map +1 -1
- package/dist/editor/PuckEditor.d.ts +4 -4
- package/dist/editor/PuckEditor.d.ts.map +1 -1
- package/dist/editor/PuckEditor.js +162 -70
- package/dist/editor/PuckEditor.js.map +1 -1
- package/dist/editor/PuckEditorImpl.client.d.ts +4 -4
- package/dist/editor/PuckEditorImpl.client.d.ts.map +1 -1
- package/dist/editor/PuckEditorImpl.client.js +304 -152
- package/dist/editor/PuckEditorImpl.client.js.map +1 -1
- package/dist/editor/components/DarkModeStyles.js +11 -12
- package/dist/editor/components/DarkModeStyles.js.map +1 -1
- package/dist/editor/components/HeaderActions.js +308 -64
- package/dist/editor/components/HeaderActions.js.map +1 -1
- package/dist/editor/components/IframeWrapper.d.ts +1 -1
- package/dist/editor/components/IframeWrapper.d.ts.map +1 -1
- package/dist/editor/components/IframeWrapper.js +82 -58
- package/dist/editor/components/IframeWrapper.js.map +1 -1
- package/dist/editor/components/LoadingState.d.ts +1 -1
- package/dist/editor/components/LoadingState.d.ts.map +1 -1
- package/dist/editor/components/LoadingState.js +17 -3
- package/dist/editor/components/LoadingState.js.map +1 -1
- package/dist/editor/components/PreviewModal.js +234 -78
- package/dist/editor/components/PreviewModal.js.map +1 -1
- package/dist/editor/components/PreviewModeToggle.js +43 -15
- package/dist/editor/components/PreviewModeToggle.js.map +1 -1
- package/dist/editor/components/VersionHistory.js +219 -71
- package/dist/editor/components/VersionHistory.js.map +1 -1
- package/dist/editor/hooks/useDarkMode.js +36 -23
- package/dist/editor/hooks/useDarkMode.js.map +1 -1
- package/dist/editor/hooks/useUnsavedChanges.js +8 -8
- package/dist/editor/hooks/useUnsavedChanges.js.map +1 -1
- package/dist/editor/index.js +5 -6
- package/dist/editor/index.js.map +1 -1
- package/dist/editor/plugins/VersionHistoryPanel.js +236 -75
- package/dist/editor/plugins/VersionHistoryPanel.js.map +1 -1
- package/dist/editor/plugins/index.js +4 -4
- package/dist/editor/plugins/index.js.map +1 -1
- package/dist/editor/plugins/versionHistoryPlugin.js +10 -8
- package/dist/editor/plugins/versionHistoryPlugin.js.map +1 -1
- package/dist/editor/utils/detectPageTree.js +5 -5
- package/dist/editor/utils/detectPageTree.js.map +1 -1
- package/dist/editor/utils/index.js +1 -0
- package/dist/editor/utils/index.js.map +1 -1
- package/dist/editor/utils/injectPageTreeFields.js +13 -9
- package/dist/editor/utils/injectPageTreeFields.js.map +1 -1
- package/dist/endpoints/ai.js +58 -34
- package/dist/endpoints/ai.js.map +1 -1
- package/dist/endpoints/context.js +86 -40
- package/dist/endpoints/context.js.map +1 -1
- package/dist/endpoints/index.js +153 -76
- package/dist/endpoints/index.js.map +1 -1
- package/dist/endpoints/postcss.d.js +5 -0
- package/dist/endpoints/postcss.d.js.map +1 -0
- package/dist/endpoints/prompts.js +81 -39
- package/dist/endpoints/prompts.js.map +1 -1
- package/dist/endpoints/styles.js +34 -36
- package/dist/endpoints/styles.js.map +1 -1
- package/dist/exports/client.js +2 -2
- package/dist/exports/client.js.map +1 -1
- package/dist/exports/rsc.js +2 -2
- package/dist/exports/rsc.js.map +1 -1
- package/dist/fields/AlignmentField.d.ts +1 -1
- package/dist/fields/AlignmentField.d.ts.map +1 -1
- package/dist/fields/AlignmentField.js +93 -30
- package/dist/fields/AlignmentField.js.map +1 -1
- package/dist/fields/AnimationField.d.ts +2 -2
- package/dist/fields/AnimationField.d.ts.map +1 -1
- package/dist/fields/AnimationField.js +558 -84
- package/dist/fields/AnimationField.js.map +1 -1
- package/dist/fields/BackgroundField.d.ts +2 -2
- package/dist/fields/BackgroundField.d.ts.map +1 -1
- package/dist/fields/BackgroundField.js +754 -120
- package/dist/fields/BackgroundField.js.map +1 -1
- package/dist/fields/BorderField.d.ts +2 -2
- package/dist/fields/BorderField.d.ts.map +1 -1
- package/dist/fields/BorderField.js +275 -73
- package/dist/fields/BorderField.js.map +1 -1
- package/dist/fields/ColorPickerField.d.ts +2 -2
- package/dist/fields/ColorPickerField.d.ts.map +1 -1
- package/dist/fields/ColorPickerField.js +210 -68
- package/dist/fields/ColorPickerField.js.map +1 -1
- package/dist/fields/ContentAlignmentField.d.ts +1 -1
- package/dist/fields/ContentAlignmentField.d.ts.map +1 -1
- package/dist/fields/ContentAlignmentField.js +161 -75
- package/dist/fields/ContentAlignmentField.js.map +1 -1
- package/dist/fields/DimensionsField.d.ts +2 -2
- package/dist/fields/DimensionsField.d.ts.map +1 -1
- package/dist/fields/DimensionsField.js +575 -146
- package/dist/fields/DimensionsField.js.map +1 -1
- package/dist/fields/FlexAlignmentField.d.ts +2 -2
- package/dist/fields/FlexAlignmentField.d.ts.map +1 -1
- package/dist/fields/FlexAlignmentField.js +189 -51
- package/dist/fields/FlexAlignmentField.js.map +1 -1
- package/dist/fields/FolderPickerField.d.ts +8 -1
- package/dist/fields/FolderPickerField.d.ts.map +1 -1
- package/dist/fields/FolderPickerField.js +288 -75
- package/dist/fields/FolderPickerField.js.map +1 -1
- package/dist/fields/GradientEditor.d.ts +2 -2
- package/dist/fields/GradientEditor.d.ts.map +1 -1
- package/dist/fields/GradientEditor.js +462 -86
- package/dist/fields/GradientEditor.js.map +1 -1
- package/dist/fields/LockedField.d.ts +15 -2
- package/dist/fields/LockedField.d.ts.map +1 -1
- package/dist/fields/LockedField.js +180 -49
- package/dist/fields/LockedField.js.map +1 -1
- package/dist/fields/MarginField.d.ts +2 -2
- package/dist/fields/MarginField.d.ts.map +1 -1
- package/dist/fields/MarginField.js +144 -46
- package/dist/fields/MarginField.js.map +1 -1
- package/dist/fields/MediaField.d.ts +1 -1
- package/dist/fields/MediaField.d.ts.map +1 -1
- package/dist/fields/MediaField.js +688 -186
- package/dist/fields/MediaField.js.map +1 -1
- package/dist/fields/PaddingField.d.ts +2 -2
- package/dist/fields/PaddingField.d.ts.map +1 -1
- package/dist/fields/PaddingField.js +144 -46
- package/dist/fields/PaddingField.js.map +1 -1
- package/dist/fields/PageSegmentField.d.ts +15 -2
- package/dist/fields/PageSegmentField.d.ts.map +1 -1
- package/dist/fields/PageSegmentField.js +156 -54
- package/dist/fields/PageSegmentField.js.map +1 -1
- package/dist/fields/ResetField.d.ts +1 -1
- package/dist/fields/ResetField.d.ts.map +1 -1
- package/dist/fields/ResetField.js +59 -31
- package/dist/fields/ResetField.js.map +1 -1
- package/dist/fields/ResponsiveField.d.ts +1 -1
- package/dist/fields/ResponsiveField.d.ts.map +1 -1
- package/dist/fields/ResponsiveField.js +233 -90
- package/dist/fields/ResponsiveField.js.map +1 -1
- package/dist/fields/ResponsiveVisibilityField.d.ts +2 -2
- package/dist/fields/ResponsiveVisibilityField.d.ts.map +1 -1
- package/dist/fields/ResponsiveVisibilityField.js +119 -36
- package/dist/fields/ResponsiveVisibilityField.js.map +1 -1
- package/dist/fields/SizeField.d.ts +3 -3
- package/dist/fields/SizeField.d.ts.map +1 -1
- package/dist/fields/SizeField.js +226 -52
- package/dist/fields/SizeField.js.map +1 -1
- package/dist/fields/SlugPreviewField.d.ts +8 -1
- package/dist/fields/SlugPreviewField.d.ts.map +1 -1
- package/dist/fields/SlugPreviewField.js +65 -16
- package/dist/fields/SlugPreviewField.js.map +1 -1
- package/dist/fields/TemplateField.d.ts +1 -1
- package/dist/fields/TemplateField.d.ts.map +1 -1
- package/dist/fields/TemplateField.js +362 -120
- package/dist/fields/TemplateField.js.map +1 -1
- package/dist/fields/TransformField.d.ts +2 -2
- package/dist/fields/TransformField.d.ts.map +1 -1
- package/dist/fields/TransformField.js +517 -81
- package/dist/fields/TransformField.js.map +1 -1
- package/dist/fields/VerticalAlignmentField.d.ts +1 -1
- package/dist/fields/VerticalAlignmentField.d.ts.map +1 -1
- package/dist/fields/VerticalAlignmentField.js +93 -30
- package/dist/fields/VerticalAlignmentField.js.map +1 -1
- package/dist/fields/WidthField.d.ts +2 -2
- package/dist/fields/WidthField.d.ts.map +1 -1
- package/dist/fields/WidthField.js +278 -81
- package/dist/fields/WidthField.js.map +1 -1
- package/dist/fields/index.d.ts +41 -41
- package/dist/fields/index.d.ts.map +1 -1
- package/dist/fields/index.js +37 -43
- package/dist/fields/index.js.map +1 -1
- package/dist/fields/richtext/controls/ColorPickerControl.d.ts +13 -2
- package/dist/fields/richtext/controls/ColorPickerControl.d.ts.map +1 -1
- package/dist/fields/richtext/controls/ColorPickerControl.js +212 -47
- package/dist/fields/richtext/controls/ColorPickerControl.js.map +1 -1
- package/dist/fields/richtext/controls/DropdownPortal.d.ts +2 -2
- package/dist/fields/richtext/controls/DropdownPortal.d.ts.map +1 -1
- package/dist/fields/richtext/controls/DropdownPortal.js +36 -4
- package/dist/fields/richtext/controls/DropdownPortal.js.map +1 -1
- package/dist/fields/richtext/controls/FontSizeControl.d.ts +9 -1
- package/dist/fields/richtext/controls/FontSizeControl.d.ts.map +1 -1
- package/dist/fields/richtext/controls/FontSizeControl.js +109 -24
- package/dist/fields/richtext/controls/FontSizeControl.js.map +1 -1
- package/dist/fields/richtext/controls/HighlightControl.d.ts +12 -1
- package/dist/fields/richtext/controls/HighlightControl.d.ts.map +1 -1
- package/dist/fields/richtext/controls/HighlightControl.js +54 -17
- package/dist/fields/richtext/controls/HighlightControl.js.map +1 -1
- package/dist/fields/richtext/controls/index.d.ts +5 -5
- package/dist/fields/richtext/controls/index.d.ts.map +1 -1
- package/dist/fields/richtext/controls/index.js +8 -11
- package/dist/fields/richtext/controls/index.js.map +1 -1
- package/dist/fields/richtext/controls/shared.js +108 -63
- package/dist/fields/richtext/controls/shared.js.map +1 -1
- package/dist/fields/richtext/createRichTextField.d.ts +18 -4
- package/dist/fields/richtext/createRichTextField.d.ts.map +1 -1
- package/dist/fields/richtext/createRichTextField.js +113 -26
- package/dist/fields/richtext/createRichTextField.js.map +1 -1
- package/dist/fields/richtext/extensions/FontSize.js +26 -20
- package/dist/fields/richtext/extensions/FontSize.js.map +1 -1
- package/dist/fields/richtext/extensions/index.d.ts +1 -1
- package/dist/fields/richtext/extensions/index.d.ts.map +1 -1
- package/dist/fields/richtext/extensions/index.js +2 -2
- package/dist/fields/richtext/extensions/index.js.map +1 -1
- package/dist/fields/richtext/index.d.ts +6 -6
- package/dist/fields/richtext/index.d.ts.map +1 -1
- package/dist/fields/richtext/index.js +8 -8
- package/dist/fields/richtext/index.js.map +1 -1
- package/dist/fields/shared.d.ts +1 -1
- package/dist/fields/shared.d.ts.map +1 -1
- package/dist/fields/shared.js +915 -478
- package/dist/fields/shared.js.map +1 -1
- package/dist/hooks/index.d.ts +2 -2
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +3 -3
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useResponsiveStyles.d.ts +1 -1
- package/dist/hooks/useResponsiveStyles.d.ts.map +1 -1
- package/dist/hooks/useResponsiveStyles.js +36 -32
- package/dist/hooks/useResponsiveStyles.js.map +1 -1
- package/dist/hooks/useScrollAnimation.js +26 -24
- package/dist/hooks/useScrollAnimation.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/layouts/LayoutWrapper.d.ts +3 -3
- package/dist/layouts/LayoutWrapper.d.ts.map +1 -1
- package/dist/layouts/LayoutWrapper.js +115 -51
- package/dist/layouts/LayoutWrapper.js.map +1 -1
- package/dist/layouts/defaults.d.ts +1 -1
- package/dist/layouts/defaults.d.ts.map +1 -1
- package/dist/layouts/defaults.js +23 -31
- package/dist/layouts/defaults.js.map +1 -1
- package/dist/layouts/index.d.ts +4 -4
- package/dist/layouts/index.d.ts.map +1 -1
- package/dist/layouts/index.js +5 -4
- package/dist/layouts/index.js.map +1 -1
- package/dist/layouts/types.js +4 -2
- package/dist/layouts/types.js.map +1 -1
- package/dist/layouts/utils.d.ts +1 -1
- package/dist/layouts/utils.d.ts.map +1 -1
- package/dist/layouts/utils.js +32 -40
- package/dist/layouts/utils.js.map +1 -1
- package/dist/next/index.js +31 -34
- package/dist/next/index.js.map +1 -1
- package/dist/plugin/collections/Pages.d.ts +2 -2
- package/dist/plugin/collections/Pages.d.ts.map +1 -1
- package/dist/plugin/collections/Pages.js +46 -43
- package/dist/plugin/collections/Pages.js.map +1 -1
- package/dist/plugin/fields/index.d.ts +3 -3
- package/dist/plugin/fields/index.d.ts.map +1 -1
- package/dist/plugin/fields/index.js +100 -78
- package/dist/plugin/fields/index.js.map +1 -1
- package/dist/plugin/fields/types.d.ts +1 -1
- package/dist/plugin/fields/types.d.ts.map +1 -1
- package/dist/plugin/fields/types.js +26 -2
- package/dist/plugin/fields/types.js.map +1 -1
- package/dist/plugin/hooks/index.d.ts +1 -1
- package/dist/plugin/hooks/index.d.ts.map +1 -1
- package/dist/plugin/hooks/index.js +2 -2
- package/dist/plugin/hooks/index.js.map +1 -1
- package/dist/plugin/hooks/isHomepageUnique.js +28 -19
- package/dist/plugin/hooks/isHomepageUnique.js.map +1 -1
- package/dist/plugin/index.d.ts +8 -8
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +190 -188
- package/dist/plugin/index.js.map +1 -1
- package/dist/render/HybridPageRenderer.d.ts +2 -2
- package/dist/render/HybridPageRenderer.d.ts.map +1 -1
- package/dist/render/HybridPageRenderer.js +58 -10
- package/dist/render/HybridPageRenderer.js.map +1 -1
- package/dist/render/PageRenderer.d.ts +2 -2
- package/dist/render/PageRenderer.d.ts.map +1 -1
- package/dist/render/PageRenderer.js +31 -14
- package/dist/render/PageRenderer.js.map +1 -1
- package/dist/render/PuckEditor.client.d.ts +1 -1
- package/dist/render/PuckEditor.client.d.ts.map +1 -1
- package/dist/render/PuckEditor.client.js +33 -16
- package/dist/render/PuckEditor.client.js.map +1 -1
- package/dist/render/index.d.ts +5 -5
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +5 -6
- package/dist/render/index.js.map +1 -1
- package/dist/styles/puck-dark-mode.css +101 -0
- package/dist/theme/context.d.ts +2 -2
- package/dist/theme/context.d.ts.map +1 -1
- package/dist/theme/context.js +21 -18
- package/dist/theme/context.js.map +1 -1
- package/dist/theme/defaults.d.ts +1 -1
- package/dist/theme/defaults.d.ts.map +1 -1
- package/dist/theme/defaults.js +83 -37
- package/dist/theme/defaults.js.map +1 -1
- package/dist/theme/example.d.ts +1 -1
- package/dist/theme/example.d.ts.map +1 -1
- package/dist/theme/example.js +68 -30
- package/dist/theme/example.js.map +1 -1
- package/dist/theme/index.d.ts +5 -5
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +6 -5
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/types.js +6 -2
- package/dist/theme/types.js.map +1 -1
- package/dist/theme/utils.d.ts +1 -1
- package/dist/theme/utils.d.ts.map +1 -1
- package/dist/theme/utils.js +24 -25
- package/dist/theme/utils.js.map +1 -1
- package/dist/types/index.d.ts +6 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +13 -22
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/migration.d.ts +1 -1
- package/dist/utils/migration.d.ts.map +1 -1
- package/dist/utils/migration.js +43 -49
- package/dist/utils/migration.js.map +1 -1
- package/dist/utils/validation.d.ts +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +36 -43
- package/dist/utils/validation.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -1
- package/dist/version.js.map +1 -1
- package/dist/views/PuckConfigContext.d.ts +1 -1
- package/dist/views/PuckConfigContext.d.ts.map +1 -1
- package/dist/views/PuckConfigContext.js +25 -10
- package/dist/views/PuckConfigContext.js.map +1 -1
- package/dist/views/PuckEditorView.d.ts +1 -1
- package/dist/views/PuckEditorView.d.ts.map +1 -1
- package/dist/views/PuckEditorView.js +106 -38
- package/dist/views/PuckEditorView.js.map +1 -1
- package/dist/views/index.js +2 -2
- package/dist/views/index.js.map +1 -1
- package/package.json +62 -42
|
@@ -53,16 +53,17 @@
|
|
|
53
53
|
* @param config - The base Puck configuration to enhance
|
|
54
54
|
* @param overrides - AI configuration overrides for each component
|
|
55
55
|
* @returns A new Puck config with AI metadata injected
|
|
56
|
-
*/
|
|
57
|
-
export function injectAiConfig(config, overrides) {
|
|
56
|
+
*/ export function injectAiConfig(config, overrides) {
|
|
58
57
|
// Deep clone the config to avoid mutating the original
|
|
59
58
|
// Use type assertion to work with AI-extended types
|
|
60
59
|
const newConfig = {
|
|
61
60
|
...config,
|
|
62
|
-
components: {
|
|
61
|
+
components: {
|
|
62
|
+
...config.components
|
|
63
|
+
}
|
|
63
64
|
};
|
|
64
65
|
// First pass: Apply user-provided overrides
|
|
65
|
-
for (const [componentName, componentOverride] of Object.entries(overrides))
|
|
66
|
+
for (const [componentName, componentOverride] of Object.entries(overrides)){
|
|
66
67
|
const existingComponent = newConfig.components[componentName];
|
|
67
68
|
// Skip if component doesn't exist in config
|
|
68
69
|
if (!existingComponent) {
|
|
@@ -70,19 +71,21 @@ export function injectAiConfig(config, overrides) {
|
|
|
70
71
|
}
|
|
71
72
|
// Create a new component config with AI metadata
|
|
72
73
|
const newComponent = {
|
|
73
|
-
...existingComponent
|
|
74
|
+
...existingComponent
|
|
74
75
|
};
|
|
75
76
|
// Add component-level AI config
|
|
76
77
|
if (componentOverride.ai) {
|
|
77
78
|
newComponent.ai = {
|
|
78
79
|
...existingComponent.ai,
|
|
79
|
-
...componentOverride.ai
|
|
80
|
+
...componentOverride.ai
|
|
80
81
|
};
|
|
81
82
|
}
|
|
82
83
|
// Process field-level AI configs from overrides
|
|
83
84
|
if (componentOverride.fields && existingComponent.fields) {
|
|
84
|
-
const newFields = {
|
|
85
|
-
|
|
85
|
+
const newFields = {
|
|
86
|
+
...existingComponent.fields
|
|
87
|
+
};
|
|
88
|
+
for (const [fieldName, fieldOverride] of Object.entries(componentOverride.fields)){
|
|
86
89
|
const existingField = existingComponent.fields[fieldName];
|
|
87
90
|
// Skip if field doesn't exist
|
|
88
91
|
if (!existingField) {
|
|
@@ -93,8 +96,8 @@ export function injectAiConfig(config, overrides) {
|
|
|
93
96
|
...existingField,
|
|
94
97
|
ai: {
|
|
95
98
|
...existingField.ai,
|
|
96
|
-
...fieldOverride.ai
|
|
97
|
-
}
|
|
99
|
+
...fieldOverride.ai
|
|
100
|
+
}
|
|
98
101
|
};
|
|
99
102
|
}
|
|
100
103
|
newComponent.fields = newFields;
|
|
@@ -105,12 +108,11 @@ export function injectAiConfig(config, overrides) {
|
|
|
105
108
|
// Custom fields (type: 'custom') are typically interactive UI elements,
|
|
106
109
|
// BUT some styling fields (background, padding, etc.) ARE custom fields
|
|
107
110
|
// that we want AI to use. Only auto-exclude if NO AI instructions provided.
|
|
108
|
-
for (const [componentName, component] of Object.entries(newConfig.components))
|
|
109
|
-
if (!component.fields)
|
|
110
|
-
continue;
|
|
111
|
+
for (const [componentName, component] of Object.entries(newConfig.components)){
|
|
112
|
+
if (!component.fields) continue;
|
|
111
113
|
const updatedFields = {};
|
|
112
114
|
let hasChanges = false;
|
|
113
|
-
for (const [fieldName, field] of Object.entries(component.fields))
|
|
115
|
+
for (const [fieldName, field] of Object.entries(component.fields)){
|
|
114
116
|
const existingAi = field.ai;
|
|
115
117
|
// Check if this is a custom field type
|
|
116
118
|
if (field.type === 'custom') {
|
|
@@ -118,24 +120,19 @@ export function injectAiConfig(config, overrides) {
|
|
|
118
120
|
// The presence of instructions indicates we want AI to use this field
|
|
119
121
|
if (existingAi?.instructions) {
|
|
120
122
|
updatedFields[fieldName] = field;
|
|
121
|
-
}
|
|
122
|
-
// Otherwise, auto-exclude custom fields from AI generation
|
|
123
|
-
// (unless already excluded)
|
|
124
|
-
else if (!existingAi?.exclude) {
|
|
123
|
+
} else if (!existingAi?.exclude) {
|
|
125
124
|
updatedFields[fieldName] = {
|
|
126
125
|
...field,
|
|
127
126
|
ai: {
|
|
128
127
|
...existingAi,
|
|
129
|
-
exclude: true
|
|
130
|
-
}
|
|
128
|
+
exclude: true
|
|
129
|
+
}
|
|
131
130
|
};
|
|
132
131
|
hasChanges = true;
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
132
|
+
} else {
|
|
135
133
|
updatedFields[fieldName] = field;
|
|
136
134
|
}
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
135
|
+
} else {
|
|
139
136
|
updatedFields[fieldName] = field;
|
|
140
137
|
}
|
|
141
138
|
}
|
|
@@ -143,7 +140,7 @@ export function injectAiConfig(config, overrides) {
|
|
|
143
140
|
if (hasChanges) {
|
|
144
141
|
newConfig.components[componentName] = {
|
|
145
142
|
...component,
|
|
146
|
-
fields: updatedFields
|
|
143
|
+
fields: updatedFields
|
|
147
144
|
};
|
|
148
145
|
}
|
|
149
146
|
}
|
|
@@ -153,30 +150,26 @@ export function injectAiConfig(config, overrides) {
|
|
|
153
150
|
const rootFields = config.root.fields;
|
|
154
151
|
const updatedRootFields = {};
|
|
155
152
|
let hasRootChanges = false;
|
|
156
|
-
for (const [fieldName, field] of Object.entries(rootFields))
|
|
153
|
+
for (const [fieldName, field] of Object.entries(rootFields)){
|
|
157
154
|
const existingAi = field.ai;
|
|
158
155
|
// Check if this is a custom field type
|
|
159
156
|
if (field.type === 'custom') {
|
|
160
157
|
// If the field has AI instructions, DON'T auto-exclude it
|
|
161
158
|
if (existingAi?.instructions) {
|
|
162
159
|
updatedRootFields[fieldName] = field;
|
|
163
|
-
}
|
|
164
|
-
// Otherwise, auto-exclude custom fields from AI generation
|
|
165
|
-
else if (!existingAi?.exclude) {
|
|
160
|
+
} else if (!existingAi?.exclude) {
|
|
166
161
|
updatedRootFields[fieldName] = {
|
|
167
162
|
...field,
|
|
168
163
|
ai: {
|
|
169
164
|
...existingAi,
|
|
170
|
-
exclude: true
|
|
171
|
-
}
|
|
165
|
+
exclude: true
|
|
166
|
+
}
|
|
172
167
|
};
|
|
173
168
|
hasRootChanges = true;
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
169
|
+
} else {
|
|
176
170
|
updatedRootFields[fieldName] = field;
|
|
177
171
|
}
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
172
|
+
} else {
|
|
180
173
|
updatedRootFields[fieldName] = field;
|
|
181
174
|
}
|
|
182
175
|
}
|
|
@@ -185,7 +178,7 @@ export function injectAiConfig(config, overrides) {
|
|
|
185
178
|
;
|
|
186
179
|
newConfig.root = {
|
|
187
180
|
...newConfig.root,
|
|
188
|
-
fields: updatedRootFields
|
|
181
|
+
fields: updatedRootFields
|
|
189
182
|
};
|
|
190
183
|
}
|
|
191
184
|
}
|
|
@@ -197,14 +190,13 @@ export function injectAiConfig(config, overrides) {
|
|
|
197
190
|
*
|
|
198
191
|
* @param config - The Puck configuration to check
|
|
199
192
|
* @returns True if any component has AI configuration
|
|
200
|
-
*/
|
|
201
|
-
|
|
202
|
-
for (const component of Object.values(config.components)) {
|
|
193
|
+
*/ export function hasAiConfig(config) {
|
|
194
|
+
for (const component of Object.values(config.components)){
|
|
203
195
|
if (component.ai) {
|
|
204
196
|
return true;
|
|
205
197
|
}
|
|
206
198
|
if (component.fields) {
|
|
207
|
-
for (const field of Object.values(component.fields))
|
|
199
|
+
for (const field of Object.values(component.fields)){
|
|
208
200
|
if (field.ai) {
|
|
209
201
|
return true;
|
|
210
202
|
}
|
|
@@ -213,4 +205,5 @@ export function hasAiConfig(config) {
|
|
|
213
205
|
}
|
|
214
206
|
return false;
|
|
215
207
|
}
|
|
208
|
+
|
|
216
209
|
//# sourceMappingURL=injectAiConfig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectAiConfig.js","sourceRoot":"","sources":["../../../src/ai/utils/injectAiConfig.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/ai/utils/injectAiConfig.ts"],"sourcesContent":["import type { Config as PuckConfig } from '@puckeditor/core'\nimport type { ComponentAiOverrides } from '../types.js'\n\n// Extended types to include AI configuration\n// These match what Puck AI expects but aren't in the core types yet\ntype ComponentWithAi = {\n ai?: {\n instructions?: string\n schema?: object\n }\n fields?: Record<string, FieldWithAi>\n [key: string]: unknown\n}\n\ntype FieldWithAi = {\n ai?: {\n instructions?: string\n required?: boolean\n exclude?: boolean\n schema?: object\n }\n [key: string]: unknown\n}\n\n/**\n * Injects AI configuration into an existing Puck config\n *\n * This function:\n * 1. Applies component-level and field-level AI overrides from the provided config\n * 2. **Automatically excludes ALL `type: 'custom'` fields** from AI generation\n * (custom fields are UI-only interactive fields that AI cannot generate values for)\n *\n * @example Basic usage\n * ```typescript\n * import { editorConfig } from '@delmaredigital/payload-puck/config/editor'\n * import { injectAiConfig, defaultComponentAiConfig } from '@delmaredigital/payload-puck/ai'\n *\n * // Use default AI configs for built-in components\n * const aiEnabledConfig = injectAiConfig(editorConfig, defaultComponentAiConfig)\n * ```\n *\n * @example With custom overrides\n * ```typescript\n * const aiEnabledConfig = injectAiConfig(editorConfig, {\n * ...defaultComponentAiConfig,\n * // Override a built-in component\n * Heading: {\n * ai: {\n * instructions: 'Use our brand voice: professional but approachable',\n * },\n * fields: {\n * text: {\n * ai: {\n * instructions: 'Keep headings concise (under 10 words)',\n * required: true,\n * },\n * },\n * },\n * },\n * // Add config for a custom component\n * HeroSection: {\n * ai: {\n * instructions: 'Always place at the top of the page',\n * },\n * fields: {\n * headline: {\n * ai: {\n * instructions: 'Use power words, keep under 8 words',\n * required: true,\n * },\n * },\n * },\n * },\n * })\n * ```\n *\n * @param config - The base Puck configuration to enhance\n * @param overrides - AI configuration overrides for each component\n * @returns A new Puck config with AI metadata injected\n */\nexport function injectAiConfig(\n config: PuckConfig,\n overrides: ComponentAiOverrides\n): PuckConfig {\n // Deep clone the config to avoid mutating the original\n // Use type assertion to work with AI-extended types\n const newConfig = {\n ...config,\n components: { ...config.components } as Record<string, ComponentWithAi>,\n }\n\n // First pass: Apply user-provided overrides\n for (const [componentName, componentOverride] of Object.entries(overrides)) {\n const existingComponent = newConfig.components[componentName]\n\n // Skip if component doesn't exist in config\n if (!existingComponent) {\n continue\n }\n\n // Create a new component config with AI metadata\n const newComponent: ComponentWithAi = {\n ...existingComponent,\n }\n\n // Add component-level AI config\n if (componentOverride.ai) {\n newComponent.ai = {\n ...existingComponent.ai,\n ...componentOverride.ai,\n }\n }\n\n // Process field-level AI configs from overrides\n if (componentOverride.fields && existingComponent.fields) {\n const newFields: Record<string, FieldWithAi> = { ...existingComponent.fields }\n\n for (const [fieldName, fieldOverride] of Object.entries(componentOverride.fields)) {\n const existingField = existingComponent.fields[fieldName]\n\n // Skip if field doesn't exist\n if (!existingField) {\n continue\n }\n\n // Add AI config to field\n newFields[fieldName] = {\n ...existingField,\n ai: {\n ...existingField.ai,\n ...fieldOverride.ai,\n },\n }\n }\n\n newComponent.fields = newFields\n }\n\n newConfig.components[componentName] = newComponent\n }\n\n // Second pass: Auto-exclude custom fields that don't have AI instructions\n // Custom fields (type: 'custom') are typically interactive UI elements,\n // BUT some styling fields (background, padding, etc.) ARE custom fields\n // that we want AI to use. Only auto-exclude if NO AI instructions provided.\n for (const [componentName, component] of Object.entries(newConfig.components)) {\n if (!component.fields) continue\n\n const updatedFields: Record<string, FieldWithAi> = {}\n let hasChanges = false\n\n for (const [fieldName, field] of Object.entries(component.fields)) {\n const existingAi = (field as FieldWithAi).ai\n\n // Check if this is a custom field type\n if ((field as any).type === 'custom') {\n // If the field has AI instructions, DON'T auto-exclude it\n // The presence of instructions indicates we want AI to use this field\n if (existingAi?.instructions) {\n updatedFields[fieldName] = field as FieldWithAi\n }\n // Otherwise, auto-exclude custom fields from AI generation\n // (unless already excluded)\n else if (!existingAi?.exclude) {\n updatedFields[fieldName] = {\n ...field,\n ai: {\n ...existingAi,\n exclude: true,\n },\n }\n hasChanges = true\n } else {\n updatedFields[fieldName] = field as FieldWithAi\n }\n } else {\n updatedFields[fieldName] = field as FieldWithAi\n }\n }\n\n // Only update component if we made changes\n if (hasChanges) {\n newConfig.components[componentName] = {\n ...component,\n fields: updatedFields,\n }\n }\n }\n\n // Third pass: Auto-exclude custom fields from ROOT config (same logic as components)\n // Root can have fields just like components (e.g., isHomepage, pageLayout, etc.)\n if ((config as any).root?.fields) {\n const rootFields = (config as any).root.fields\n const updatedRootFields: Record<string, FieldWithAi> = {}\n let hasRootChanges = false\n\n for (const [fieldName, field] of Object.entries(rootFields)) {\n const existingAi = (field as FieldWithAi).ai\n\n // Check if this is a custom field type\n if ((field as any).type === 'custom') {\n // If the field has AI instructions, DON'T auto-exclude it\n if (existingAi?.instructions) {\n updatedRootFields[fieldName] = field as FieldWithAi\n }\n // Otherwise, auto-exclude custom fields from AI generation\n else if (!existingAi?.exclude) {\n updatedRootFields[fieldName] = {\n ...(field as FieldWithAi),\n ai: {\n ...existingAi,\n exclude: true,\n },\n }\n hasRootChanges = true\n } else {\n updatedRootFields[fieldName] = field as FieldWithAi\n }\n } else {\n updatedRootFields[fieldName] = field as FieldWithAi\n }\n }\n\n // Update root if we made changes\n if (hasRootChanges) {\n ;(newConfig as any).root = {\n ...(newConfig as any).root,\n fields: updatedRootFields,\n }\n }\n }\n\n // Cast back to PuckConfig for return\n return newConfig as unknown as PuckConfig\n}\n\n/**\n * Checks if a config already has AI configuration\n *\n * @param config - The Puck configuration to check\n * @returns True if any component has AI configuration\n */\nexport function hasAiConfig(config: PuckConfig): boolean {\n for (const component of Object.values(config.components)) {\n if ((component as any).ai) {\n return true\n }\n\n if (component.fields) {\n for (const field of Object.values(component.fields)) {\n if ((field as any).ai) {\n return true\n }\n }\n }\n }\n\n return false\n}\n"],"names":["injectAiConfig","config","overrides","newConfig","components","componentName","componentOverride","Object","entries","existingComponent","newComponent","ai","fields","newFields","fieldName","fieldOverride","existingField","component","updatedFields","hasChanges","field","existingAi","type","instructions","exclude","root","rootFields","updatedRootFields","hasRootChanges","hasAiConfig","values"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPuckApiRoutes.d.ts","sourceRoot":"","sources":["../../src/api/createPuckApiRoutes.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EAGrB,MAAM,
|
|
1
|
+
{"version":3,"file":"createPuckApiRoutes.d.ts","sourceRoot":"","sources":["../../src/api/createPuckApiRoutes.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EAGrB,MAAM,YAAY,CAAA;AAenB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,mBAAmB,GAC/B,oBAAoB,CAyMtB"}
|
|
@@ -2,15 +2,14 @@ import { NextResponse } from 'next/server';
|
|
|
2
2
|
import { getPayload } from 'payload';
|
|
3
3
|
/**
|
|
4
4
|
* Default Puck data for new pages
|
|
5
|
-
*/
|
|
6
|
-
const DEFAULT_PUCK_DATA = {
|
|
5
|
+
*/ const DEFAULT_PUCK_DATA = {
|
|
7
6
|
root: {
|
|
8
7
|
props: {
|
|
9
|
-
title: ''
|
|
10
|
-
}
|
|
8
|
+
title: ''
|
|
9
|
+
}
|
|
11
10
|
},
|
|
12
11
|
content: [],
|
|
13
|
-
zones: {}
|
|
12
|
+
zones: {}
|
|
14
13
|
};
|
|
15
14
|
/**
|
|
16
15
|
* Create API route handlers for /api/puck/pages
|
|
@@ -39,33 +38,39 @@ const DEFAULT_PUCK_DATA = {
|
|
|
39
38
|
* },
|
|
40
39
|
* })
|
|
41
40
|
* ```
|
|
42
|
-
*/
|
|
43
|
-
|
|
44
|
-
const { collection = 'pages', payloadConfig, auth, defaultPuckData = DEFAULT_PUCK_DATA, enableDrafts = true, onError, } = routeConfig;
|
|
41
|
+
*/ export function createPuckApiRoutes(routeConfig) {
|
|
42
|
+
const { collection = 'pages', payloadConfig, auth, defaultPuckData = DEFAULT_PUCK_DATA, enableDrafts = true, onError } = routeConfig;
|
|
45
43
|
/**
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
async function GET(request, _context) {
|
|
44
|
+
* GET /api/puck/pages
|
|
45
|
+
* List all pages with optional filtering
|
|
46
|
+
*
|
|
47
|
+
* Query Parameters:
|
|
48
|
+
* - page: Page number (default: 1)
|
|
49
|
+
* - limit: Items per page (default: 10)
|
|
50
|
+
* - search: Search in title field
|
|
51
|
+
* - status: Filter by _status ('draft', 'published', 'all')
|
|
52
|
+
* - editorVersion: Filter by editorVersion field
|
|
53
|
+
* - sort: Sort field (default: '-updatedAt')
|
|
54
|
+
*/ async function GET(request, _context) {
|
|
58
55
|
try {
|
|
59
56
|
// Authenticate
|
|
60
57
|
const authResult = await auth.authenticate(request);
|
|
61
58
|
if (!authResult.authenticated || !authResult.user) {
|
|
62
|
-
return NextResponse.json({
|
|
59
|
+
return NextResponse.json({
|
|
60
|
+
error: authResult.error || 'Unauthorized'
|
|
61
|
+
}, {
|
|
62
|
+
status: 401
|
|
63
|
+
});
|
|
63
64
|
}
|
|
64
65
|
// Check list permission
|
|
65
66
|
if (auth.canList) {
|
|
66
67
|
const permission = await auth.canList(authResult.user);
|
|
67
68
|
if (!permission.allowed) {
|
|
68
|
-
return NextResponse.json({
|
|
69
|
+
return NextResponse.json({
|
|
70
|
+
error: permission.error || 'Forbidden'
|
|
71
|
+
}, {
|
|
72
|
+
status: 403
|
|
73
|
+
});
|
|
69
74
|
}
|
|
70
75
|
}
|
|
71
76
|
// Parse query parameters
|
|
@@ -78,82 +83,121 @@ export function createPuckApiRoutes(routeConfig) {
|
|
|
78
83
|
const sort = searchParams.get('sort') || '-updatedAt';
|
|
79
84
|
// Get Payload instance with provided config
|
|
80
85
|
const config = await payloadConfig;
|
|
81
|
-
const payload = await getPayload({
|
|
86
|
+
const payload = await getPayload({
|
|
87
|
+
config
|
|
88
|
+
});
|
|
82
89
|
// Build where clause
|
|
83
90
|
const conditions = [];
|
|
84
91
|
if (search) {
|
|
85
|
-
conditions.push({
|
|
92
|
+
conditions.push({
|
|
93
|
+
title: {
|
|
94
|
+
contains: search
|
|
95
|
+
}
|
|
96
|
+
});
|
|
86
97
|
}
|
|
87
98
|
if (status && status !== 'all') {
|
|
88
|
-
conditions.push({
|
|
99
|
+
conditions.push({
|
|
100
|
+
_status: {
|
|
101
|
+
equals: status
|
|
102
|
+
}
|
|
103
|
+
});
|
|
89
104
|
}
|
|
90
105
|
if (editorVersion && editorVersion !== 'all') {
|
|
91
|
-
conditions.push({
|
|
106
|
+
conditions.push({
|
|
107
|
+
editorVersion: {
|
|
108
|
+
equals: editorVersion
|
|
109
|
+
}
|
|
110
|
+
});
|
|
92
111
|
}
|
|
93
|
-
const where = conditions.length > 0
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
: { and: conditions }
|
|
97
|
-
: undefined;
|
|
112
|
+
const where = conditions.length > 0 ? conditions.length === 1 ? conditions[0] : {
|
|
113
|
+
and: conditions
|
|
114
|
+
} : undefined;
|
|
98
115
|
const result = await payload.find({
|
|
99
116
|
collection,
|
|
100
117
|
page,
|
|
101
118
|
limit,
|
|
102
119
|
sort,
|
|
103
|
-
where
|
|
120
|
+
where
|
|
104
121
|
});
|
|
105
122
|
return NextResponse.json(result);
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
123
|
+
} catch (error) {
|
|
108
124
|
if (onError) {
|
|
109
|
-
onError(error, {
|
|
125
|
+
onError(error, {
|
|
126
|
+
operation: 'list',
|
|
127
|
+
request
|
|
128
|
+
});
|
|
110
129
|
}
|
|
111
130
|
console.error('Error listing pages:', error);
|
|
112
|
-
return NextResponse.json({
|
|
131
|
+
return NextResponse.json({
|
|
132
|
+
error: 'Failed to list pages'
|
|
133
|
+
}, {
|
|
134
|
+
status: 500
|
|
135
|
+
});
|
|
113
136
|
}
|
|
114
137
|
}
|
|
115
138
|
/**
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
async function POST(request, _context) {
|
|
139
|
+
* POST /api/puck/pages
|
|
140
|
+
* Create a new page with Puck data
|
|
141
|
+
*
|
|
142
|
+
* Request Body:
|
|
143
|
+
* - title: string (required)
|
|
144
|
+
* - slug: string (required)
|
|
145
|
+
* - puckData?: PuckData (optional, uses default if not provided)
|
|
146
|
+
* - status?: 'draft' | 'published' (default: 'draft')
|
|
147
|
+
*/ async function POST(request, _context) {
|
|
126
148
|
try {
|
|
127
149
|
// Authenticate
|
|
128
150
|
const authResult = await auth.authenticate(request);
|
|
129
151
|
if (!authResult.authenticated || !authResult.user) {
|
|
130
|
-
return NextResponse.json({
|
|
152
|
+
return NextResponse.json({
|
|
153
|
+
error: authResult.error || 'Unauthorized'
|
|
154
|
+
}, {
|
|
155
|
+
status: 401
|
|
156
|
+
});
|
|
131
157
|
}
|
|
132
158
|
// Check create permission
|
|
133
159
|
if (auth.canCreate) {
|
|
134
160
|
const permission = await auth.canCreate(authResult.user);
|
|
135
161
|
if (!permission.allowed) {
|
|
136
|
-
return NextResponse.json({
|
|
162
|
+
return NextResponse.json({
|
|
163
|
+
error: permission.error || 'Forbidden'
|
|
164
|
+
}, {
|
|
165
|
+
status: 403
|
|
166
|
+
});
|
|
137
167
|
}
|
|
138
168
|
}
|
|
139
169
|
// Parse request body
|
|
140
|
-
const body =
|
|
170
|
+
const body = await request.json();
|
|
141
171
|
const { title, slug, puckData, status = 'draft' } = body;
|
|
142
172
|
// Validate required fields
|
|
143
173
|
if (!title || !slug) {
|
|
144
|
-
return NextResponse.json({
|
|
174
|
+
return NextResponse.json({
|
|
175
|
+
error: 'Title and slug are required'
|
|
176
|
+
}, {
|
|
177
|
+
status: 400
|
|
178
|
+
});
|
|
145
179
|
}
|
|
146
180
|
// Get Payload instance with provided config
|
|
147
181
|
const config = await payloadConfig;
|
|
148
|
-
const payload = await getPayload({
|
|
182
|
+
const payload = await getPayload({
|
|
183
|
+
config
|
|
184
|
+
});
|
|
149
185
|
// Check if slug already exists
|
|
150
186
|
const existing = await payload.find({
|
|
151
187
|
collection,
|
|
152
|
-
where: {
|
|
153
|
-
|
|
188
|
+
where: {
|
|
189
|
+
slug: {
|
|
190
|
+
equals: slug
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
limit: 1
|
|
154
194
|
});
|
|
155
195
|
if (existing.docs.length > 0) {
|
|
156
|
-
return NextResponse.json({
|
|
196
|
+
return NextResponse.json({
|
|
197
|
+
error: 'A page with this slug already exists'
|
|
198
|
+
}, {
|
|
199
|
+
status: 409
|
|
200
|
+
});
|
|
157
201
|
}
|
|
158
202
|
// Prepare initial Puck data with title in root.props
|
|
159
203
|
const initialPuckData = puckData || {
|
|
@@ -162,9 +206,9 @@ export function createPuckApiRoutes(routeConfig) {
|
|
|
162
206
|
...defaultPuckData.root,
|
|
163
207
|
props: {
|
|
164
208
|
...defaultPuckData.root?.props,
|
|
165
|
-
title
|
|
166
|
-
}
|
|
167
|
-
}
|
|
209
|
+
title
|
|
210
|
+
}
|
|
211
|
+
}
|
|
168
212
|
};
|
|
169
213
|
// Create the page
|
|
170
214
|
const newPage = await payload.create({
|
|
@@ -175,19 +219,33 @@ export function createPuckApiRoutes(routeConfig) {
|
|
|
175
219
|
slug,
|
|
176
220
|
editorVersion: 'puck',
|
|
177
221
|
puckData: initialPuckData,
|
|
178
|
-
_status: status
|
|
179
|
-
}
|
|
222
|
+
_status: status
|
|
223
|
+
}
|
|
180
224
|
});
|
|
181
|
-
return NextResponse.json({
|
|
182
|
-
|
|
183
|
-
|
|
225
|
+
return NextResponse.json({
|
|
226
|
+
doc: newPage
|
|
227
|
+
}, {
|
|
228
|
+
status: 201
|
|
229
|
+
});
|
|
230
|
+
} catch (error) {
|
|
184
231
|
if (onError) {
|
|
185
|
-
onError(error, {
|
|
232
|
+
onError(error, {
|
|
233
|
+
operation: 'create',
|
|
234
|
+
request
|
|
235
|
+
});
|
|
186
236
|
}
|
|
187
237
|
console.error('Error creating page:', error);
|
|
188
|
-
return NextResponse.json({
|
|
238
|
+
return NextResponse.json({
|
|
239
|
+
error: 'Failed to create page'
|
|
240
|
+
}, {
|
|
241
|
+
status: 500
|
|
242
|
+
});
|
|
189
243
|
}
|
|
190
244
|
}
|
|
191
|
-
return {
|
|
245
|
+
return {
|
|
246
|
+
GET,
|
|
247
|
+
POST
|
|
248
|
+
};
|
|
192
249
|
}
|
|
250
|
+
|
|
193
251
|
//# sourceMappingURL=createPuckApiRoutes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPuckApiRoutes.js","sourceRoot":"","sources":["../../src/api/createPuckApiRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,YAAY,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAUpC;;GAEG;AACH,MAAM,iBAAiB,GAAa;IAClC,IAAI,EAAE;QACJ,KAAK,EAAE;YACL,KAAK,EAAE,EAAE;SACiB;KAC7B;IACD,OAAO,EAAE,EAAE;IACX,KAAK,EAAE,EAAE;CACV,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,mBAAmB,CACjC,WAAgC;IAEhC,MAAM,EACJ,UAAU,GAAG,OAAO,EACpB,aAAa,EACb,IAAI,EACJ,eAAe,GAAG,iBAAiB,EACnC,YAAY,GAAG,IAAI,EACnB,OAAO,GACR,GAAG,WAAW,CAAA;IAEf;;;;;;;;;;;OAWG;IACH,KAAK,UAAU,GAAG,CAAC,OAAoB,EAAE,QAA6B;QACpE,IAAI,CAAC;YACH,eAAe;YACf,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;YACnD,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;gBAClD,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,cAAc,EAAE,EAC7C,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAA;YACH,CAAC;YAED,wBAAwB;YACxB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;gBACtD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;oBACxB,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,WAAW,EAAE,EAC1C,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAA;gBACH,CAAC;YACH,CAAC;YAED,yBAAyB;YACzB,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;YAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;YAC5E,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;YAC/C,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACzC,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;YACvD,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,YAAY,CAAA;YAErD,4CAA4C;YAC5C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAA;YAClC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;YAE5C,qBAAqB;YACrB,MAAM,UAAU,GAAY,EAAE,CAAA;YAE9B,IAAI,MAAM,EAAE,CAAC;gBACX,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;YAClD,CAAC;YAED,IAAI,MAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC/B,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;YAClD,CAAC;YAED,IAAI,aAAa,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;gBAC7C,UAAU,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,CAAA;YAC/D,CAAC;YAED,MAAM,KAAK,GACT,UAAU,CAAC,MAAM,GAAG,CAAC;gBACnB,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;oBACvB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;oBACf,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE;gBACvB,CAAC,CAAC,SAAS,CAAA;YAEf,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBAChC,UAAU;gBACV,IAAI;gBACJ,KAAK;gBACL,IAAI;gBACJ,KAAK;aACN,CAAC,CAAA;YAEF,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;YAChD,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAA;YAC5C,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,KAAK,EAAE,sBAAsB,EAAE,EACjC,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAA;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,UAAU,IAAI,CAAC,OAAoB,EAAE,QAA6B;QACrE,IAAI,CAAC;YACH,eAAe;YACf,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;YACnD,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;gBAClD,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,cAAc,EAAE,EAC7C,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAA;YACH,CAAC;YAED,0BAA0B;YAC1B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;gBACxD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;oBACxB,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,WAAW,EAAE,EAC1C,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAA;gBACH,CAAC;YACH,CAAC;YAED,qBAAqB;YACrB,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAmB,CAAA;YACrD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,GAAG,IAAI,CAAA;YAExD,2BAA2B;YAC3B,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBACpB,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,KAAK,EAAE,6BAA6B,EAAE,EACxC,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAA;YACH,CAAC;YAED,4CAA4C;YAC5C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAA;YAClC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;YAE5C,+BAA+B;YAC/B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBAClC,UAAU;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;gBACjC,KAAK,EAAE,CAAC;aACT,CAAC,CAAA;YAEF,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,KAAK,EAAE,sCAAsC,EAAE,EACjD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAA;YACH,CAAC;YAED,qDAAqD;YACrD,MAAM,eAAe,GAAG,QAAQ,IAAI;gBAClC,GAAG,eAAe;gBAClB,IAAI,EAAE;oBACJ,GAAG,eAAe,CAAC,IAAI;oBACvB,KAAK,EAAE;wBACL,GAAI,eAAe,CAAC,IAA4C,EAAE,KAAK;wBACvE,KAAK;qBACN;iBACF;aACF,CAAA;YAED,kBAAkB;YAClB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC;gBACnC,UAAU;gBACV,KAAK,EAAE,YAAY;gBACnB,IAAI,EAAE;oBACJ,KAAK;oBACL,IAAI;oBACJ,aAAa,EAAE,MAAM;oBACrB,QAAQ,EAAE,eAAe;oBACzB,OAAO,EAAE,MAAM;iBAChB;aACF,CAAC,CAAA;YAEF,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;YAClD,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAA;YAC5C,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAClC,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;AACtB,CAAC"}
|
|
1
|
+
{"version":3,"sources":["../../src/api/createPuckApiRoutes.ts"],"sourcesContent":["import { NextRequest, NextResponse } from 'next/server'\nimport { getPayload } from 'payload'\nimport type { Where } from 'payload'\nimport type { Data as PuckData } from '@puckeditor/core'\nimport type {\n PuckApiRoutesConfig,\n PuckApiRouteHandlers,\n CreatePageBody,\n RouteHandlerContext,\n} from './types.js'\n\n/**\n * Default Puck data for new pages\n */\nconst DEFAULT_PUCK_DATA: PuckData = {\n root: {\n props: {\n title: '',\n } as Record<string, unknown>,\n },\n content: [],\n zones: {},\n}\n\n/**\n * Create API route handlers for /api/puck/pages\n *\n * Provides GET (list pages) and POST (create page) handlers\n * with configurable authentication and authorization.\n *\n * @example\n * ```typescript\n * // src/app/api/puck/pages/route.ts\n * import { createPuckApiRoutes } from '@delmaredigital/payload-puck/api'\n * import config from '@payload-config'\n *\n * export const { GET, POST } = createPuckApiRoutes({\n * collection: 'pages',\n * payloadConfig: config,\n * auth: {\n * authenticate: async (request) => {\n * const session = await getSession(request)\n * if (!session?.user) return { authenticated: false }\n * return { authenticated: true, user: session.user }\n * },\n * canCreate: async (user) => {\n * return { allowed: user.role === 'admin' || user.role === 'editor' }\n * },\n * },\n * })\n * ```\n */\nexport function createPuckApiRoutes(\n routeConfig: PuckApiRoutesConfig\n): PuckApiRouteHandlers {\n const {\n collection = 'pages',\n payloadConfig,\n auth,\n defaultPuckData = DEFAULT_PUCK_DATA,\n enableDrafts = true,\n onError,\n } = routeConfig\n\n /**\n * GET /api/puck/pages\n * List all pages with optional filtering\n *\n * Query Parameters:\n * - page: Page number (default: 1)\n * - limit: Items per page (default: 10)\n * - search: Search in title field\n * - status: Filter by _status ('draft', 'published', 'all')\n * - editorVersion: Filter by editorVersion field\n * - sort: Sort field (default: '-updatedAt')\n */\n async function GET(request: NextRequest, _context: RouteHandlerContext): Promise<Response> {\n try {\n // Authenticate\n const authResult = await auth.authenticate(request)\n if (!authResult.authenticated || !authResult.user) {\n return NextResponse.json(\n { error: authResult.error || 'Unauthorized' },\n { status: 401 }\n )\n }\n\n // Check list permission\n if (auth.canList) {\n const permission = await auth.canList(authResult.user)\n if (!permission.allowed) {\n return NextResponse.json(\n { error: permission.error || 'Forbidden' },\n { status: 403 }\n )\n }\n }\n\n // Parse query parameters\n const { searchParams } = new URL(request.url)\n const page = parseInt(searchParams.get('page') || '1', 10)\n const limit = Math.min(parseInt(searchParams.get('limit') || '10', 10), 100)\n const search = searchParams.get('search') || ''\n const status = searchParams.get('status')\n const editorVersion = searchParams.get('editorVersion')\n const sort = searchParams.get('sort') || '-updatedAt'\n\n // Get Payload instance with provided config\n const config = await payloadConfig\n const payload = await getPayload({ config })\n\n // Build where clause\n const conditions: Where[] = []\n\n if (search) {\n conditions.push({ title: { contains: search } })\n }\n\n if (status && status !== 'all') {\n conditions.push({ _status: { equals: status } })\n }\n\n if (editorVersion && editorVersion !== 'all') {\n conditions.push({ editorVersion: { equals: editorVersion } })\n }\n\n const where: Where | undefined =\n conditions.length > 0\n ? conditions.length === 1\n ? conditions[0]\n : { and: conditions }\n : undefined\n\n const result = await payload.find({\n collection,\n page,\n limit,\n sort,\n where,\n })\n\n return NextResponse.json(result)\n } catch (error) {\n if (onError) {\n onError(error, { operation: 'list', request })\n }\n console.error('Error listing pages:', error)\n return NextResponse.json(\n { error: 'Failed to list pages' },\n { status: 500 }\n )\n }\n }\n\n /**\n * POST /api/puck/pages\n * Create a new page with Puck data\n *\n * Request Body:\n * - title: string (required)\n * - slug: string (required)\n * - puckData?: PuckData (optional, uses default if not provided)\n * - status?: 'draft' | 'published' (default: 'draft')\n */\n async function POST(request: NextRequest, _context: RouteHandlerContext): Promise<Response> {\n try {\n // Authenticate\n const authResult = await auth.authenticate(request)\n if (!authResult.authenticated || !authResult.user) {\n return NextResponse.json(\n { error: authResult.error || 'Unauthorized' },\n { status: 401 }\n )\n }\n\n // Check create permission\n if (auth.canCreate) {\n const permission = await auth.canCreate(authResult.user)\n if (!permission.allowed) {\n return NextResponse.json(\n { error: permission.error || 'Forbidden' },\n { status: 403 }\n )\n }\n }\n\n // Parse request body\n const body = (await request.json()) as CreatePageBody\n const { title, slug, puckData, status = 'draft' } = body\n\n // Validate required fields\n if (!title || !slug) {\n return NextResponse.json(\n { error: 'Title and slug are required' },\n { status: 400 }\n )\n }\n\n // Get Payload instance with provided config\n const config = await payloadConfig\n const payload = await getPayload({ config })\n\n // Check if slug already exists\n const existing = await payload.find({\n collection,\n where: { slug: { equals: slug } },\n limit: 1,\n })\n\n if (existing.docs.length > 0) {\n return NextResponse.json(\n { error: 'A page with this slug already exists' },\n { status: 409 }\n )\n }\n\n // Prepare initial Puck data with title in root.props\n const initialPuckData = puckData || {\n ...defaultPuckData,\n root: {\n ...defaultPuckData.root,\n props: {\n ...(defaultPuckData.root as { props?: Record<string, unknown> })?.props,\n title,\n },\n },\n }\n\n // Create the page\n const newPage = await payload.create({\n collection,\n draft: enableDrafts,\n data: {\n title,\n slug,\n editorVersion: 'puck',\n puckData: initialPuckData,\n _status: status,\n },\n })\n\n return NextResponse.json({ doc: newPage }, { status: 201 })\n } catch (error) {\n if (onError) {\n onError(error, { operation: 'create', request })\n }\n console.error('Error creating page:', error)\n return NextResponse.json(\n { error: 'Failed to create page' },\n { status: 500 }\n )\n }\n }\n\n return { GET, POST }\n}\n"],"names":["NextResponse","getPayload","DEFAULT_PUCK_DATA","root","props","title","content","zones","createPuckApiRoutes","routeConfig","collection","payloadConfig","auth","defaultPuckData","enableDrafts","onError","GET","request","_context","authResult","authenticate","authenticated","user","json","error","status","canList","permission","allowed","searchParams","URL","url","page","parseInt","get","limit","Math","min","search","editorVersion","sort","config","payload","conditions","push","contains","_status","equals","where","length","and","undefined","result","find","operation","console","POST","canCreate","body","slug","puckData","existing","docs","initialPuckData","newPage","create","draft","data","doc"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPuckApiRoutesVersions.d.ts","sourceRoot":"","sources":["../../src/api/createPuckApiRoutesVersions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,4BAA4B,EAE7B,MAAM,
|
|
1
|
+
{"version":3,"file":"createPuckApiRoutesVersions.d.ts","sourceRoot":"","sources":["../../src/api/createPuckApiRoutesVersions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,4BAA4B,EAE7B,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,mBAAmB,GAC/B,4BAA4B,CAyK9B"}
|