@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PuckEditorView.js","sourceRoot":"","sources":["../../src/admin/PuckEditorView.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/admin/PuckEditorView.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useState } from 'react'\nimport { useParams, useSearchParams } from 'next/navigation'\nimport type { Config as PuckConfig, Data, Plugin as PuckPlugin } from '@puckeditor/core'\n\n/**\n * Props for the PuckEditorView component\n */\nexport interface PuckEditorViewProps {\n /**\n * Puck configuration with components and settings\n */\n config: PuckConfig\n /**\n * Collection slug for API endpoints\n * @default 'pages'\n */\n collectionSlug?: string\n /**\n * Base API path for Puck operations\n * @default '/api/puck'\n */\n apiBasePath?: string\n /**\n * URL to navigate to when back button is clicked\n * Falls back to /admin/collections/{collectionSlug}\n */\n backUrl?: string\n /**\n * Preview URL or function to generate preview URL from slug\n */\n previewUrl?: string | ((slug: string) => string)\n /**\n * Layout styles for theme-aware preview\n */\n layoutStyles?: Record<string, { background: string; isDark: boolean }>\n /**\n * Key in root.props to read layout value from\n * @default 'pageLayout'\n */\n layoutKey?: string\n /**\n * Additional Puck plugins to use.\n * The headingAnalyzer plugin is included by default.\n * Set to `false` to disable all default plugins.\n */\n plugins?: PuckPlugin[] | false\n /**\n * Callback on successful save\n */\n onSaveSuccess?: (data: Data) => void\n /**\n * Callback on save error\n */\n onSaveError?: (error: Error) => void\n}\n\ninterface PageData {\n id: string\n title: string\n slug: string\n puckData: Data | null\n _status?: 'draft' | 'published'\n}\n\n/**\n * Ready-to-use Puck editor page component\n *\n * Use this in your own editor page route (e.g., /pages/[id]/edit).\n * It auto-fetches page data from the API and renders the PuckEditor.\n *\n * @example\n * ```tsx\n * // src/app/pages/[id]/edit/page.tsx\n * 'use client'\n *\n * import { PuckEditorView } from '@delmaredigital/payload-puck/editor'\n * import { editorConfig } from '@/puck/config'\n *\n * export default function PageEditor() {\n * return (\n * <PuckEditorView\n * config={editorConfig}\n * collectionSlug=\"pages\"\n * apiBasePath=\"/api/puck\"\n * backUrl=\"/admin/collections/pages\"\n * previewUrl={(slug) => `/${slug}`}\n * />\n * )\n * }\n * ```\n */\nexport function PuckEditorView({\n config,\n collectionSlug = 'pages',\n apiBasePath = '/api/puck',\n backUrl,\n previewUrl,\n layoutStyles,\n layoutKey = 'pageLayout',\n plugins,\n onSaveSuccess,\n onSaveError,\n}: PuckEditorViewProps) {\n const params = useParams()\n const searchParams = useSearchParams()\n\n // Get page ID from route params or search params\n const pageId = (params?.id as string) || searchParams?.get('id') || ''\n\n const [page, setPage] = useState<PageData | null>(null)\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n const [PuckEditor, setPuckEditor] = useState<React.ComponentType<any> | null>(null)\n\n // Dynamically import PuckEditor to avoid SSR issues\n useEffect(() => {\n import('../editor/PuckEditor.js').then((mod) => {\n setPuckEditor(() => mod.PuckEditor)\n })\n }, [])\n\n useEffect(() => {\n async function fetchPage() {\n if (!pageId) {\n setError('No page ID provided')\n setLoading(false)\n return\n }\n\n try {\n setLoading(true)\n const response = await fetch(`${apiBasePath}/${collectionSlug}/${pageId}`)\n\n if (!response.ok) {\n const data = await response.json().catch(() => ({}))\n throw new Error(data.error || `Failed to fetch page: ${response.status}`)\n }\n\n const data = await response.json()\n setPage(data.doc)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'An error occurred')\n } finally {\n setLoading(false)\n }\n }\n\n fetchPage()\n }, [pageId, apiBasePath, collectionSlug])\n\n const computedBackUrl = backUrl || `/admin/collections/${collectionSlug}`\n\n if (loading || !PuckEditor) {\n return (\n <div style={{\n display: 'flex',\n height: '100vh',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#0f0f0f',\n color: '#fff',\n }}>\n <div style={{ textAlign: 'center' }}>\n <div style={{\n width: '32px',\n height: '32px',\n border: '3px solid #333',\n borderTopColor: '#fff',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n margin: '0 auto 16px',\n }} />\n <p style={{ color: '#888' }}>Loading editor...</p>\n <style>{`\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n </div>\n )\n }\n\n if (error) {\n return (\n <div style={{\n display: 'flex',\n height: '100vh',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#0f0f0f',\n color: '#fff',\n }}>\n <div style={{ textAlign: 'center' }}>\n <p style={{ color: '#f87171', marginBottom: '16px' }}>{error}</p>\n <a\n href={computedBackUrl}\n style={{\n color: '#60a5fa',\n textDecoration: 'underline',\n }}\n >\n Back to {collectionSlug}\n </a>\n </div>\n </div>\n )\n }\n\n if (!page) {\n return (\n <div style={{\n display: 'flex',\n height: '100vh',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#0f0f0f',\n color: '#fff',\n }}>\n <div style={{ textAlign: 'center' }}>\n <p style={{ color: '#888', marginBottom: '16px' }}>Page not found</p>\n <a\n href={computedBackUrl}\n style={{\n color: '#60a5fa',\n textDecoration: 'underline',\n }}\n >\n Back to {collectionSlug}\n </a>\n </div>\n </div>\n )\n }\n\n // Default puck data if none exists\n const initialData: Data = page.puckData || {\n root: {\n props: {\n title: page.title || 'New Page',\n },\n },\n content: [],\n zones: {},\n }\n\n return (\n <PuckEditor\n pageId={page.id}\n initialData={initialData}\n config={config}\n pageTitle={page.title}\n pageSlug={page.slug}\n apiEndpoint={`${apiBasePath}/${collectionSlug}`}\n backUrl={computedBackUrl}\n previewUrl={previewUrl}\n layoutStyles={layoutStyles}\n layoutKey={layoutKey}\n plugins={plugins}\n onSaveSuccess={onSaveSuccess}\n onSaveError={onSaveError}\n initialStatus={page._status}\n />\n )\n}\n\nexport default PuckEditorView\n"],"names":["useEffect","useState","useParams","useSearchParams","PuckEditorView","config","collectionSlug","apiBasePath","backUrl","previewUrl","layoutStyles","layoutKey","plugins","onSaveSuccess","onSaveError","params","searchParams","pageId","id","get","page","setPage","loading","setLoading","error","setError","PuckEditor","setPuckEditor","then","mod","fetchPage","response","fetch","ok","data","json","catch","Error","status","doc","err","message","computedBackUrl","div","style","display","height","alignItems","justifyContent","backgroundColor","color","textAlign","width","border","borderTopColor","borderRadius","animation","margin","p","marginBottom","a","href","textDecoration","initialData","puckData","root","props","title","content","zones","pageTitle","pageSlug","slug","apiEndpoint","initialStatus","_status"],"mappings":"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"}
|
package/dist/admin/client.d.ts
CHANGED
|
@@ -7,6 +7,6 @@
|
|
|
7
7
|
* NOTE: For PuckEditorView, import from '@delmaredigital/payload-puck/editor' instead.
|
|
8
8
|
* This separation is necessary to avoid RSC bundling issues with Puck.
|
|
9
9
|
*/
|
|
10
|
-
export { EditWithPuckButton, EditWithPuckLink, type EditWithPuckButtonProps, } from './EditWithPuckButton';
|
|
11
|
-
export { EditWithPuckCell, type EditWithPuckCellConfig } from './EditWithPuckCell';
|
|
10
|
+
export { EditWithPuckButton, EditWithPuckLink, type EditWithPuckButtonProps, } from './EditWithPuckButton.js';
|
|
11
|
+
export { EditWithPuckCell, type EditWithPuckCellConfig } from './EditWithPuckCell.js';
|
|
12
12
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/admin/client.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAGH,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,uBAAuB,GAC7B,MAAM,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/admin/client.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAGH,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,uBAAuB,GAC7B,MAAM,yBAAyB,CAAA;AAGhC,OAAO,EAAE,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAA"}
|
package/dist/admin/client.js
CHANGED
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
*
|
|
8
8
|
* NOTE: For PuckEditorView, import from '@delmaredigital/payload-puck/editor' instead.
|
|
9
9
|
* This separation is necessary to avoid RSC bundling issues with Puck.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
export { EditWithPuckButton, EditWithPuckLink, } from './EditWithPuckButton';
|
|
10
|
+
*/ // Button components for edit view
|
|
11
|
+
export { EditWithPuckButton, EditWithPuckLink } from './EditWithPuckButton.js';
|
|
13
12
|
// Cell component for list view
|
|
14
|
-
export { EditWithPuckCell } from './EditWithPuckCell';
|
|
13
|
+
export { EditWithPuckCell } from './EditWithPuckCell.js';
|
|
14
|
+
|
|
15
15
|
//# sourceMappingURL=client.js.map
|
package/dist/admin/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/admin/client.ts"],"sourcesContent":["'use client'\n\n/**\n * @delmaredigital/payload-puck/admin/client\n *\n * Client-side admin components for Payload CMS integration.\n * These are the Field/Cell components used by the plugin.\n *\n * NOTE: For PuckEditorView, import from '@delmaredigital/payload-puck/editor' instead.\n * This separation is necessary to avoid RSC bundling issues with Puck.\n */\n\n// Button components for edit view\nexport {\n EditWithPuckButton,\n EditWithPuckLink,\n type EditWithPuckButtonProps,\n} from './EditWithPuckButton.js'\n\n// Cell component for list view\nexport { EditWithPuckCell, type EditWithPuckCellConfig } from './EditWithPuckCell.js'\n"],"names":["EditWithPuckButton","EditWithPuckLink","EditWithPuckCell"],"mappings":"AAAA;AAEA;;;;;;;;CAQC,GAED,kCAAkC;AAClC,SACEA,kBAAkB,EAClBC,gBAAgB,QAEX,0BAAyB;AAEhC,+BAA+B;AAC/B,SAASC,gBAAgB,QAAqC,wBAAuB"}
|
|
@@ -19,9 +19,8 @@
|
|
|
19
19
|
* ],
|
|
20
20
|
* }
|
|
21
21
|
* ```
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
const { collectionSlug = 'pages', editorPathPattern = '/pages/{id}/edit', buttonLabel = 'Visual Editor', buttonPosition = 'sidebar', } = config;
|
|
22
|
+
*/ export function generatePuckEditField(config = {}) {
|
|
23
|
+
const { collectionSlug = 'pages', editorPathPattern = '/pages/{id}/edit', buttonLabel = 'Visual Editor', buttonPosition = 'sidebar' } = config;
|
|
25
24
|
return {
|
|
26
25
|
name: 'puckEdit',
|
|
27
26
|
type: 'ui',
|
|
@@ -29,14 +28,15 @@ export function generatePuckEditField(config = {}) {
|
|
|
29
28
|
position: buttonPosition,
|
|
30
29
|
components: {
|
|
31
30
|
Field: '@delmaredigital/payload-puck/admin/client#EditWithPuckButton',
|
|
32
|
-
Cell: '@delmaredigital/payload-puck/admin/client#EditWithPuckCell'
|
|
31
|
+
Cell: '@delmaredigital/payload-puck/admin/client#EditWithPuckCell'
|
|
33
32
|
},
|
|
34
33
|
custom: {
|
|
35
34
|
collectionSlug,
|
|
36
35
|
editorPathPattern,
|
|
37
|
-
label: buttonLabel
|
|
38
|
-
}
|
|
39
|
-
}
|
|
36
|
+
label: buttonLabel
|
|
37
|
+
}
|
|
38
|
+
}
|
|
40
39
|
};
|
|
41
40
|
}
|
|
41
|
+
|
|
42
42
|
//# sourceMappingURL=generateAdminComponents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/admin/generateAdminComponents.ts"],"sourcesContent":["import type { Field } from 'payload'\n\n/**\n * Configuration for generating the edit button field\n */\nexport interface AdminComponentsConfig {\n /**\n * Collection slug for the pages collection\n * @default 'pages'\n */\n collectionSlug?: string\n /**\n * URL pattern for the Puck editor page\n * Use {id} as placeholder for document ID\n * @default '/pages/{id}/edit'\n */\n editorPathPattern?: string\n /**\n * Button label text\n * @default 'Visual Editor'\n */\n buttonLabel?: string\n /**\n * Position of the edit button in admin\n * @default 'sidebar'\n */\n buttonPosition?: 'sidebar' | 'main'\n}\n\n/**\n * Generates the UI field configuration for the Edit with Puck button\n *\n * Use this if you want to manually add the edit button field to your\n * collection instead of using the plugin's auto-generation.\n *\n * @example\n * ```ts\n * import { generatePuckEditField } from '@delmaredigital/payload-puck/admin'\n *\n * const Pages: CollectionConfig = {\n * slug: 'pages',\n * fields: [\n * // ... other fields\n * generatePuckEditField({\n * editorPathPattern: '/pages/{id}/edit',\n * buttonLabel: 'Visual Editor',\n * }),\n * ],\n * }\n * ```\n */\nexport function generatePuckEditField(config: AdminComponentsConfig = {}): Field {\n const {\n collectionSlug = 'pages',\n editorPathPattern = '/pages/{id}/edit',\n buttonLabel = 'Visual Editor',\n buttonPosition = 'sidebar',\n } = config\n\n return {\n name: 'puckEdit',\n type: 'ui',\n admin: {\n position: buttonPosition,\n components: {\n Field: '@delmaredigital/payload-puck/admin/client#EditWithPuckButton',\n Cell: '@delmaredigital/payload-puck/admin/client#EditWithPuckCell',\n },\n custom: {\n collectionSlug,\n editorPathPattern,\n label: buttonLabel,\n },\n },\n }\n}\n"],"names":["generatePuckEditField","config","collectionSlug","editorPathPattern","buttonLabel","buttonPosition","name","type","admin","position","components","Field","Cell","custom","label"],"mappings":"AA6BA;;;;;;;;;;;;;;;;;;;;;CAqBC,GACD,OAAO,SAASA,sBAAsBC,SAAgC,CAAC,CAAC;IACtE,MAAM,EACJC,iBAAiB,OAAO,EACxBC,oBAAoB,kBAAkB,EACtCC,cAAc,eAAe,EAC7BC,iBAAiB,SAAS,EAC3B,GAAGJ;IAEJ,OAAO;QACLK,MAAM;QACNC,MAAM;QACNC,OAAO;YACLC,UAAUJ;YACVK,YAAY;gBACVC,OAAO;gBACPC,MAAM;YACR;YACAC,QAAQ;gBACNX;gBACAC;gBACAW,OAAOV;YACT;QACF;IACF;AACF"}
|
package/dist/admin/index.d.ts
CHANGED
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
* import { PuckEditorView } from '@delmaredigital/payload-puck/editor'
|
|
14
14
|
* ```
|
|
15
15
|
*/
|
|
16
|
-
export type { PuckEditorViewProps } from './PuckEditorView';
|
|
17
|
-
export type { EditWithPuckButtonProps } from './EditWithPuckButton';
|
|
18
|
-
export type { EditWithPuckCellConfig } from './EditWithPuckCell';
|
|
19
|
-
export type { AdminComponentsConfig } from './generateAdminComponents';
|
|
20
|
-
export { generatePuckEditField } from './generateAdminComponents';
|
|
16
|
+
export type { PuckEditorViewProps } from './PuckEditorView.js';
|
|
17
|
+
export type { EditWithPuckButtonProps } from './EditWithPuckButton.js';
|
|
18
|
+
export type { EditWithPuckCellConfig } from './EditWithPuckCell.js';
|
|
19
|
+
export type { AdminComponentsConfig } from './generateAdminComponents.js';
|
|
20
|
+
export { generatePuckEditField } from './generateAdminComponents.js';
|
|
21
21
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,YAAY,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AACtE,YAAY,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AACnE,YAAY,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AAGzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA"}
|
package/dist/admin/index.js
CHANGED
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
* ```ts
|
|
13
13
|
* import { PuckEditorView } from '@delmaredigital/payload-puck/editor'
|
|
14
14
|
* ```
|
|
15
|
-
*/
|
|
15
|
+
*/ // Re-export types only (safe for RSC)
|
|
16
16
|
// Helper for generating edit button field (safe for RSC)
|
|
17
|
-
export { generatePuckEditField } from './generateAdminComponents';
|
|
17
|
+
export { generatePuckEditField } from './generateAdminComponents.js';
|
|
18
|
+
|
|
18
19
|
//# sourceMappingURL=index.js.map
|
package/dist/admin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/admin/index.ts"],"sourcesContent":["/**\n * @delmaredigital/payload-puck/admin\n *\n * Admin utilities and types for Payload CMS integration.\n *\n * NOTE: For the edit button components, import from '/admin/client':\n * ```ts\n * import { EditWithPuckButton } from '@delmaredigital/payload-puck/admin/client'\n * ```\n *\n * For the PuckEditorView component, import from '/editor':\n * ```ts\n * import { PuckEditorView } from '@delmaredigital/payload-puck/editor'\n * ```\n */\n\n// Re-export types only (safe for RSC)\nexport type { PuckEditorViewProps } from './PuckEditorView.js'\nexport type { EditWithPuckButtonProps } from './EditWithPuckButton.js'\nexport type { EditWithPuckCellConfig } from './EditWithPuckCell.js'\nexport type { AdminComponentsConfig } from './generateAdminComponents.js'\n\n// Helper for generating edit button field (safe for RSC)\nexport { generatePuckEditField } from './generateAdminComponents.js'\n"],"names":["generatePuckEditField"],"mappings":"AAAA;;;;;;;;;;;;;;CAcC,GAED,sCAAsC;AAMtC,yDAAyD;AACzD,SAASA,qBAAqB,QAAQ,+BAA8B"}
|
|
@@ -10,26 +10,31 @@
|
|
|
10
10
|
* - "Tone of Voice" - How to communicate
|
|
11
11
|
* - "Product Information" - What you sell/offer
|
|
12
12
|
* - "Industry Context" - Your market and audience
|
|
13
|
-
*/
|
|
14
|
-
export const AiContextCollection = {
|
|
13
|
+
*/ export const AiContextCollection = {
|
|
15
14
|
slug: 'puck-ai-context',
|
|
16
15
|
labels: {
|
|
17
16
|
singular: 'AI Context',
|
|
18
|
-
plural: 'AI Contexts'
|
|
17
|
+
plural: 'AI Contexts'
|
|
19
18
|
},
|
|
20
19
|
admin: {
|
|
21
20
|
group: 'Puck',
|
|
22
21
|
useAsTitle: 'name',
|
|
23
|
-
defaultColumns: [
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
defaultColumns: [
|
|
23
|
+
'name',
|
|
24
|
+
'category',
|
|
25
|
+
'enabled',
|
|
26
|
+
'order',
|
|
27
|
+
'updatedAt'
|
|
28
|
+
],
|
|
29
|
+
hidden: false,
|
|
30
|
+
description: 'Business context for AI page generation. Add entries for brand guidelines, tone of voice, product info, etc.'
|
|
26
31
|
},
|
|
27
32
|
access: {
|
|
28
33
|
// Default: authenticated users can manage context
|
|
29
|
-
read: ({ req })
|
|
30
|
-
create: ({ req })
|
|
31
|
-
update: ({ req })
|
|
32
|
-
delete: ({ req })
|
|
34
|
+
read: ({ req })=>Boolean(req.user),
|
|
35
|
+
create: ({ req })=>Boolean(req.user),
|
|
36
|
+
update: ({ req })=>Boolean(req.user),
|
|
37
|
+
delete: ({ req })=>Boolean(req.user)
|
|
33
38
|
},
|
|
34
39
|
fields: [
|
|
35
40
|
{
|
|
@@ -37,8 +42,8 @@ export const AiContextCollection = {
|
|
|
37
42
|
type: 'text',
|
|
38
43
|
required: true,
|
|
39
44
|
admin: {
|
|
40
|
-
description: 'Name for this context block (e.g., "Brand Guidelines", "Tone of Voice")'
|
|
41
|
-
}
|
|
45
|
+
description: 'Name for this context block (e.g., "Brand Guidelines", "Tone of Voice")'
|
|
46
|
+
}
|
|
42
47
|
},
|
|
43
48
|
{
|
|
44
49
|
name: 'content',
|
|
@@ -46,42 +51,64 @@ export const AiContextCollection = {
|
|
|
46
51
|
required: true,
|
|
47
52
|
admin: {
|
|
48
53
|
description: 'The context content in markdown format. Use headers (##) to organize, lists for guidelines, etc.',
|
|
49
|
-
rows: 12
|
|
50
|
-
}
|
|
54
|
+
rows: 12
|
|
55
|
+
}
|
|
51
56
|
},
|
|
52
57
|
{
|
|
53
58
|
name: 'category',
|
|
54
59
|
type: 'select',
|
|
55
60
|
options: [
|
|
56
|
-
{
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
{
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
{
|
|
62
|
+
label: 'Brand Guidelines',
|
|
63
|
+
value: 'brand'
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
label: 'Tone of Voice',
|
|
67
|
+
value: 'tone'
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
label: 'Product Information',
|
|
71
|
+
value: 'product'
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
label: 'Industry Context',
|
|
75
|
+
value: 'industry'
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
label: 'Technical Requirements',
|
|
79
|
+
value: 'technical'
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
label: 'Page Patterns',
|
|
83
|
+
value: 'patterns'
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
label: 'Other',
|
|
87
|
+
value: 'other'
|
|
88
|
+
}
|
|
63
89
|
],
|
|
64
90
|
admin: {
|
|
65
|
-
description: 'Category for organizing context blocks'
|
|
66
|
-
}
|
|
91
|
+
description: 'Category for organizing context blocks'
|
|
92
|
+
}
|
|
67
93
|
},
|
|
68
94
|
{
|
|
69
95
|
name: 'enabled',
|
|
70
96
|
type: 'checkbox',
|
|
71
97
|
defaultValue: true,
|
|
72
98
|
admin: {
|
|
73
|
-
description: 'Include this context in AI prompts. Uncheck to temporarily disable.'
|
|
74
|
-
}
|
|
99
|
+
description: 'Include this context in AI prompts. Uncheck to temporarily disable.'
|
|
100
|
+
}
|
|
75
101
|
},
|
|
76
102
|
{
|
|
77
103
|
name: 'order',
|
|
78
104
|
type: 'number',
|
|
79
105
|
defaultValue: 0,
|
|
80
106
|
admin: {
|
|
81
|
-
description: 'Order in the context (lower numbers appear earlier in the prompt)'
|
|
82
|
-
}
|
|
83
|
-
}
|
|
107
|
+
description: 'Order in the context (lower numbers appear earlier in the prompt)'
|
|
108
|
+
}
|
|
109
|
+
}
|
|
84
110
|
],
|
|
85
|
-
timestamps: true
|
|
111
|
+
timestamps: true
|
|
86
112
|
};
|
|
113
|
+
|
|
87
114
|
//# sourceMappingURL=AiContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../src/ai/collections/AiContext.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\n/**\n * AI Context Collection\n *\n * Stores business context entries for the AI chat interface.\n * These context entries are concatenated and sent to the AI system prompt\n * to help it understand your brand, tone, and requirements.\n *\n * @example Creating context entries in Payload admin:\n * - \"Brand Guidelines\" - Colors, fonts, brand voice\n * - \"Tone of Voice\" - How to communicate\n * - \"Product Information\" - What you sell/offer\n * - \"Industry Context\" - Your market and audience\n */\nexport const AiContextCollection: CollectionConfig = {\n slug: 'puck-ai-context',\n labels: {\n singular: 'AI Context',\n plural: 'AI Contexts',\n },\n admin: {\n group: 'Puck',\n useAsTitle: 'name',\n defaultColumns: ['name', 'category', 'enabled', 'order', 'updatedAt'],\n hidden: false, // Visible in admin for context management\n description:\n 'Business context for AI page generation. Add entries for brand guidelines, tone of voice, product info, etc.',\n },\n access: {\n // Default: authenticated users can manage context\n read: ({ req }) => Boolean(req.user),\n create: ({ req }) => Boolean(req.user),\n update: ({ req }) => Boolean(req.user),\n delete: ({ req }) => Boolean(req.user),\n },\n fields: [\n {\n name: 'name',\n type: 'text',\n required: true,\n admin: {\n description: 'Name for this context block (e.g., \"Brand Guidelines\", \"Tone of Voice\")',\n },\n },\n {\n name: 'content',\n type: 'textarea',\n required: true,\n admin: {\n description:\n 'The context content in markdown format. Use headers (##) to organize, lists for guidelines, etc.',\n rows: 12,\n },\n },\n {\n name: 'category',\n type: 'select',\n options: [\n { label: 'Brand Guidelines', value: 'brand' },\n { label: 'Tone of Voice', value: 'tone' },\n { label: 'Product Information', value: 'product' },\n { label: 'Industry Context', value: 'industry' },\n { label: 'Technical Requirements', value: 'technical' },\n { label: 'Page Patterns', value: 'patterns' },\n { label: 'Other', value: 'other' },\n ],\n admin: {\n description: 'Category for organizing context blocks',\n },\n },\n {\n name: 'enabled',\n type: 'checkbox',\n defaultValue: true,\n admin: {\n description: 'Include this context in AI prompts. Uncheck to temporarily disable.',\n },\n },\n {\n name: 'order',\n type: 'number',\n defaultValue: 0,\n admin: {\n description: 'Order in the context (lower numbers appear earlier in the prompt)',\n },\n },\n ],\n timestamps: true,\n}\n"],"names":["AiContextCollection","slug","labels","singular","plural","admin","group","useAsTitle","defaultColumns","hidden","description","access","read","req","Boolean","user","create","update","delete","fields","name","type","required","rows","options","label","value","defaultValue","timestamps"],"mappings":"AAEA;;;;;;;;;;;;CAYC,GACD,OAAO,MAAMA,sBAAwC;IACnDC,MAAM;IACNC,QAAQ;QACNC,UAAU;QACVC,QAAQ;IACV;IACAC,OAAO;QACLC,OAAO;QACPC,YAAY;QACZC,gBAAgB;YAAC;YAAQ;YAAY;YAAW;YAAS;SAAY;QACrEC,QAAQ;QACRC,aACE;IACJ;IACAC,QAAQ;QACN,kDAAkD;QAClDC,MAAM,CAAC,EAAEC,GAAG,EAAE,GAAKC,QAAQD,IAAIE,IAAI;QACnCC,QAAQ,CAAC,EAAEH,GAAG,EAAE,GAAKC,QAAQD,IAAIE,IAAI;QACrCE,QAAQ,CAAC,EAAEJ,GAAG,EAAE,GAAKC,QAAQD,IAAIE,IAAI;QACrCG,QAAQ,CAAC,EAAEL,GAAG,EAAE,GAAKC,QAAQD,IAAIE,IAAI;IACvC;IACAI,QAAQ;QACN;YACEC,MAAM;YACNC,MAAM;YACNC,UAAU;YACVjB,OAAO;gBACLK,aAAa;YACf;QACF;QACA;YACEU,MAAM;YACNC,MAAM;YACNC,UAAU;YACVjB,OAAO;gBACLK,aACE;gBACFa,MAAM;YACR;QACF;QACA;YACEH,MAAM;YACNC,MAAM;YACNG,SAAS;gBACP;oBAAEC,OAAO;oBAAoBC,OAAO;gBAAQ;gBAC5C;oBAAED,OAAO;oBAAiBC,OAAO;gBAAO;gBACxC;oBAAED,OAAO;oBAAuBC,OAAO;gBAAU;gBACjD;oBAAED,OAAO;oBAAoBC,OAAO;gBAAW;gBAC/C;oBAAED,OAAO;oBAA0BC,OAAO;gBAAY;gBACtD;oBAAED,OAAO;oBAAiBC,OAAO;gBAAW;gBAC5C;oBAAED,OAAO;oBAASC,OAAO;gBAAQ;aAClC;YACDrB,OAAO;gBACLK,aAAa;YACf;QACF;QACA;YACEU,MAAM;YACNC,MAAM;YACNM,cAAc;YACdtB,OAAO;gBACLK,aAAa;YACf;QACF;QACA;YACEU,MAAM;YACNC,MAAM;YACNM,cAAc;YACdtB,OAAO;gBACLK,aAAa;YACf;QACF;KACD;IACDkB,YAAY;AACd,EAAC"}
|
|
@@ -4,25 +4,29 @@
|
|
|
4
4
|
* Stores example prompts for the AI chat interface.
|
|
5
5
|
* These prompts are displayed in the Puck editor for users to quickly
|
|
6
6
|
* start common AI generation tasks.
|
|
7
|
-
*/
|
|
8
|
-
export const AiPromptsCollection = {
|
|
7
|
+
*/ export const AiPromptsCollection = {
|
|
9
8
|
slug: 'puck-ai-prompts',
|
|
10
9
|
labels: {
|
|
11
10
|
singular: 'AI Prompt',
|
|
12
|
-
plural: 'AI Prompts'
|
|
11
|
+
plural: 'AI Prompts'
|
|
13
12
|
},
|
|
14
13
|
admin: {
|
|
15
14
|
group: 'Puck',
|
|
16
15
|
useAsTitle: 'label',
|
|
17
|
-
defaultColumns: [
|
|
18
|
-
|
|
16
|
+
defaultColumns: [
|
|
17
|
+
'label',
|
|
18
|
+
'category',
|
|
19
|
+
'order',
|
|
20
|
+
'updatedAt'
|
|
21
|
+
],
|
|
22
|
+
hidden: false
|
|
19
23
|
},
|
|
20
24
|
access: {
|
|
21
25
|
// Default: authenticated users can manage prompts
|
|
22
|
-
read: ({ req })
|
|
23
|
-
create: ({ req })
|
|
24
|
-
update: ({ req })
|
|
25
|
-
delete: ({ req })
|
|
26
|
+
read: ({ req })=>Boolean(req.user),
|
|
27
|
+
create: ({ req })=>Boolean(req.user),
|
|
28
|
+
update: ({ req })=>Boolean(req.user),
|
|
29
|
+
delete: ({ req })=>Boolean(req.user)
|
|
26
30
|
},
|
|
27
31
|
fields: [
|
|
28
32
|
{
|
|
@@ -30,8 +34,8 @@ export const AiPromptsCollection = {
|
|
|
30
34
|
type: 'text',
|
|
31
35
|
required: true,
|
|
32
36
|
admin: {
|
|
33
|
-
description: 'Display label for the prompt (e.g., "Landing page")'
|
|
34
|
-
}
|
|
37
|
+
description: 'Display label for the prompt (e.g., "Landing page")'
|
|
38
|
+
}
|
|
35
39
|
},
|
|
36
40
|
{
|
|
37
41
|
name: 'prompt',
|
|
@@ -39,25 +43,26 @@ export const AiPromptsCollection = {
|
|
|
39
43
|
required: true,
|
|
40
44
|
admin: {
|
|
41
45
|
description: 'The actual prompt text sent to the AI',
|
|
42
|
-
rows: 4
|
|
43
|
-
}
|
|
46
|
+
rows: 4
|
|
47
|
+
}
|
|
44
48
|
},
|
|
45
49
|
{
|
|
46
50
|
name: 'category',
|
|
47
51
|
type: 'text',
|
|
48
52
|
admin: {
|
|
49
|
-
description: 'Optional category for grouping prompts (e.g., "Marketing", "Product")'
|
|
50
|
-
}
|
|
53
|
+
description: 'Optional category for grouping prompts (e.g., "Marketing", "Product")'
|
|
54
|
+
}
|
|
51
55
|
},
|
|
52
56
|
{
|
|
53
57
|
name: 'order',
|
|
54
58
|
type: 'number',
|
|
55
59
|
defaultValue: 0,
|
|
56
60
|
admin: {
|
|
57
|
-
description: 'Display order (lower numbers appear first)'
|
|
58
|
-
}
|
|
59
|
-
}
|
|
61
|
+
description: 'Display order (lower numbers appear first)'
|
|
62
|
+
}
|
|
63
|
+
}
|
|
60
64
|
],
|
|
61
|
-
timestamps: true
|
|
65
|
+
timestamps: true
|
|
62
66
|
};
|
|
67
|
+
|
|
63
68
|
//# sourceMappingURL=AiPrompts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../src/ai/collections/AiPrompts.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\n/**\n * AI Prompts Collection\n *\n * Stores example prompts for the AI chat interface.\n * These prompts are displayed in the Puck editor for users to quickly\n * start common AI generation tasks.\n */\nexport const AiPromptsCollection: CollectionConfig = {\n slug: 'puck-ai-prompts',\n labels: {\n singular: 'AI Prompt',\n plural: 'AI Prompts',\n },\n admin: {\n group: 'Puck',\n useAsTitle: 'label',\n defaultColumns: ['label', 'category', 'order', 'updatedAt'],\n hidden: false, // Visible in admin for prompt management\n },\n access: {\n // Default: authenticated users can manage prompts\n read: ({ req }) => Boolean(req.user),\n create: ({ req }) => Boolean(req.user),\n update: ({ req }) => Boolean(req.user),\n delete: ({ req }) => Boolean(req.user),\n },\n fields: [\n {\n name: 'label',\n type: 'text',\n required: true,\n admin: {\n description: 'Display label for the prompt (e.g., \"Landing page\")',\n },\n },\n {\n name: 'prompt',\n type: 'textarea',\n required: true,\n admin: {\n description: 'The actual prompt text sent to the AI',\n rows: 4,\n },\n },\n {\n name: 'category',\n type: 'text',\n admin: {\n description: 'Optional category for grouping prompts (e.g., \"Marketing\", \"Product\")',\n },\n },\n {\n name: 'order',\n type: 'number',\n defaultValue: 0,\n admin: {\n description: 'Display order (lower numbers appear first)',\n },\n },\n ],\n timestamps: true,\n}\n"],"names":["AiPromptsCollection","slug","labels","singular","plural","admin","group","useAsTitle","defaultColumns","hidden","access","read","req","Boolean","user","create","update","delete","fields","name","type","required","description","rows","defaultValue","timestamps"],"mappings":"AAEA;;;;;;CAMC,GACD,OAAO,MAAMA,sBAAwC;IACnDC,MAAM;IACNC,QAAQ;QACNC,UAAU;QACVC,QAAQ;IACV;IACAC,OAAO;QACLC,OAAO;QACPC,YAAY;QACZC,gBAAgB;YAAC;YAAS;YAAY;YAAS;SAAY;QAC3DC,QAAQ;IACV;IACAC,QAAQ;QACN,kDAAkD;QAClDC,MAAM,CAAC,EAAEC,GAAG,EAAE,GAAKC,QAAQD,IAAIE,IAAI;QACnCC,QAAQ,CAAC,EAAEH,GAAG,EAAE,GAAKC,QAAQD,IAAIE,IAAI;QACrCE,QAAQ,CAAC,EAAEJ,GAAG,EAAE,GAAKC,QAAQD,IAAIE,IAAI;QACrCG,QAAQ,CAAC,EAAEL,GAAG,EAAE,GAAKC,QAAQD,IAAIE,IAAI;IACvC;IACAI,QAAQ;QACN;YACEC,MAAM;YACNC,MAAM;YACNC,UAAU;YACVhB,OAAO;gBACLiB,aAAa;YACf;QACF;QACA;YACEH,MAAM;YACNC,MAAM;YACNC,UAAU;YACVhB,OAAO;gBACLiB,aAAa;gBACbC,MAAM;YACR;QACF;QACA;YACEJ,MAAM;YACNC,MAAM;YACNf,OAAO;gBACLiB,aAAa;YACf;QACF;QACA;YACEH,MAAM;YACNC,MAAM;YACNI,cAAc;YACdnB,OAAO;gBACLiB,aAAa;YACf;QACF;KACD;IACDG,YAAY;AACd,EAAC"}
|
|
@@ -34,18 +34,21 @@
|
|
|
34
34
|
* },
|
|
35
35
|
* })
|
|
36
36
|
* ```
|
|
37
|
-
*/
|
|
38
|
-
export function createPuckAiApiRoutes(config) {
|
|
37
|
+
*/ export function createPuckAiApiRoutes(config) {
|
|
39
38
|
const { auth, ai, onError } = config;
|
|
40
39
|
return {
|
|
41
|
-
POST: async (request)
|
|
40
|
+
POST: async (request)=>{
|
|
42
41
|
try {
|
|
43
42
|
// 1. Authenticate the request
|
|
44
43
|
const authResult = await auth.authenticate(request);
|
|
45
44
|
if (!authResult.authenticated) {
|
|
46
|
-
return new Response(JSON.stringify({
|
|
45
|
+
return new Response(JSON.stringify({
|
|
46
|
+
error: authResult.error || 'Unauthorized'
|
|
47
|
+
}), {
|
|
47
48
|
status: 401,
|
|
48
|
-
headers: {
|
|
49
|
+
headers: {
|
|
50
|
+
'Content-Type': 'application/json'
|
|
51
|
+
}
|
|
49
52
|
});
|
|
50
53
|
}
|
|
51
54
|
// 2. Lazy import @puckeditor/cloud-client to avoid errors if not installed
|
|
@@ -55,24 +58,25 @@ export function createPuckAiApiRoutes(config) {
|
|
|
55
58
|
const cloudClient = await import('@puckeditor/cloud-client');
|
|
56
59
|
puckHandler = cloudClient.puckHandler;
|
|
57
60
|
tool = cloudClient.tool;
|
|
58
|
-
}
|
|
59
|
-
catch (e) {
|
|
61
|
+
} catch (e) {
|
|
60
62
|
return new Response(JSON.stringify({
|
|
61
|
-
error: 'AI features require @puckeditor/cloud-client. Please install it.'
|
|
63
|
+
error: 'AI features require @puckeditor/cloud-client. Please install it.'
|
|
62
64
|
}), {
|
|
63
65
|
status: 500,
|
|
64
|
-
headers: {
|
|
66
|
+
headers: {
|
|
67
|
+
'Content-Type': 'application/json'
|
|
68
|
+
}
|
|
65
69
|
});
|
|
66
70
|
}
|
|
67
71
|
// 3. Convert our tool format to Puck's tool format
|
|
68
72
|
const puckTools = {};
|
|
69
73
|
if (ai?.tools) {
|
|
70
|
-
for (const [name, toolDef] of Object.entries(ai.tools))
|
|
74
|
+
for (const [name, toolDef] of Object.entries(ai.tools)){
|
|
71
75
|
puckTools[name] = tool({
|
|
72
76
|
description: toolDef.description,
|
|
73
77
|
inputSchema: toolDef.inputSchema,
|
|
74
78
|
execute: toolDef.execute,
|
|
75
|
-
name: toolDef.name
|
|
79
|
+
name: toolDef.name
|
|
76
80
|
});
|
|
77
81
|
}
|
|
78
82
|
}
|
|
@@ -82,25 +86,30 @@ export function createPuckAiApiRoutes(config) {
|
|
|
82
86
|
host: ai?.host,
|
|
83
87
|
ai: {
|
|
84
88
|
context: ai?.context,
|
|
85
|
-
tools: Object.keys(puckTools).length > 0 ? puckTools : undefined
|
|
86
|
-
}
|
|
89
|
+
tools: Object.keys(puckTools).length > 0 ? puckTools : undefined
|
|
90
|
+
}
|
|
87
91
|
});
|
|
88
|
-
}
|
|
89
|
-
catch (error) {
|
|
92
|
+
} catch (error) {
|
|
90
93
|
// Call custom error handler if provided
|
|
91
94
|
if (onError) {
|
|
92
|
-
onError(error, {
|
|
95
|
+
onError(error, {
|
|
96
|
+
operation: 'ai-chat',
|
|
97
|
+
request
|
|
98
|
+
});
|
|
93
99
|
}
|
|
94
100
|
console.error('[Puck AI] Error handling request:', error);
|
|
95
101
|
return new Response(JSON.stringify({
|
|
96
102
|
error: 'Internal server error',
|
|
97
|
-
message: error instanceof Error ? error.message : 'Unknown error'
|
|
103
|
+
message: error instanceof Error ? error.message : 'Unknown error'
|
|
98
104
|
}), {
|
|
99
105
|
status: 500,
|
|
100
|
-
headers: {
|
|
106
|
+
headers: {
|
|
107
|
+
'Content-Type': 'application/json'
|
|
108
|
+
}
|
|
101
109
|
});
|
|
102
110
|
}
|
|
103
|
-
}
|
|
111
|
+
}
|
|
104
112
|
};
|
|
105
113
|
}
|
|
114
|
+
|
|
106
115
|
//# sourceMappingURL=createAiApiRoutes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/ai/createAiApiRoutes.ts"],"sourcesContent":["import type { NextRequest } from 'next/server'\nimport type { PuckAiRoutesConfig, PuckAiRouteHandlers } from './types.js'\n\n/**\n * Creates API route handlers for /api/puck/[...all]\n *\n * Wraps @puckeditor/cloud-client's puckHandler with authentication\n * and custom context/tools support.\n *\n * @example\n * ```typescript\n * // app/api/puck/[...all]/route.ts\n * import { createPuckAiApiRoutes } from '@delmaredigital/payload-puck/ai'\n * import config from '@payload-config'\n * import { z } from 'zod'\n *\n * export const POST = createPuckAiApiRoutes({\n * payloadConfig: config,\n * auth: {\n * authenticate: async (request) => {\n * const session = await auth.api.getSession({ headers: request.headers })\n * if (!session?.user) return { authenticated: false }\n * return { authenticated: true, user: session.user }\n * },\n * },\n * ai: {\n * context: 'We are Acme Corp. You build our landing pages.',\n * tools: {\n * getProducts: {\n * description: 'Get a list of products',\n * inputSchema: z.object({}),\n * execute: async () => {\n * return await payload.find({ collection: 'products' })\n * },\n * },\n * },\n * },\n * })\n * ```\n */\nexport function createPuckAiApiRoutes(config: PuckAiRoutesConfig): PuckAiRouteHandlers {\n const { auth, ai, onError } = config\n\n return {\n POST: async (request: NextRequest): Promise<Response> => {\n try {\n // 1. Authenticate the request\n const authResult = await auth.authenticate(request)\n\n if (!authResult.authenticated) {\n return new Response(\n JSON.stringify({ error: authResult.error || 'Unauthorized' }),\n {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n }\n )\n }\n\n // 2. Lazy import @puckeditor/cloud-client to avoid errors if not installed\n let puckHandler: typeof import('@puckeditor/cloud-client').puckHandler\n let tool: typeof import('@puckeditor/cloud-client').tool\n\n try {\n const cloudClient = await import('@puckeditor/cloud-client')\n puckHandler = cloudClient.puckHandler\n tool = cloudClient.tool\n } catch (e) {\n return new Response(\n JSON.stringify({\n error: 'AI features require @puckeditor/cloud-client. Please install it.',\n }),\n {\n status: 500,\n headers: { 'Content-Type': 'application/json' },\n }\n )\n }\n\n // 3. Convert our tool format to Puck's tool format\n const puckTools: Record<string, ReturnType<typeof tool>> = {}\n if (ai?.tools) {\n for (const [name, toolDef] of Object.entries(ai.tools)) {\n puckTools[name] = tool({\n description: toolDef.description,\n inputSchema: toolDef.inputSchema,\n execute: toolDef.execute,\n name: toolDef.name,\n })\n }\n }\n\n // 4. Call puckHandler with our configuration\n return puckHandler(request, {\n apiKey: ai?.apiKey,\n host: ai?.host,\n ai: {\n context: ai?.context,\n tools: Object.keys(puckTools).length > 0 ? puckTools : undefined,\n },\n })\n } catch (error) {\n // Call custom error handler if provided\n if (onError) {\n onError(error, { operation: 'ai-chat', request })\n }\n\n console.error('[Puck AI] Error handling request:', error)\n\n return new Response(\n JSON.stringify({\n error: 'Internal server error',\n message: error instanceof Error ? error.message : 'Unknown error',\n }),\n {\n status: 500,\n headers: { 'Content-Type': 'application/json' },\n }\n )\n }\n },\n }\n}\n"],"names":["createPuckAiApiRoutes","config","auth","ai","onError","POST","request","authResult","authenticate","authenticated","Response","JSON","stringify","error","status","headers","puckHandler","tool","cloudClient","e","puckTools","tools","name","toolDef","Object","entries","description","inputSchema","execute","apiKey","host","context","keys","length","undefined","operation","console","message","Error"],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCC,GACD,OAAO,SAASA,sBAAsBC,MAA0B;IAC9D,MAAM,EAAEC,IAAI,EAAEC,EAAE,EAAEC,OAAO,EAAE,GAAGH;IAE9B,OAAO;QACLI,MAAM,OAAOC;YACX,IAAI;gBACF,8BAA8B;gBAC9B,MAAMC,aAAa,MAAML,KAAKM,YAAY,CAACF;gBAE3C,IAAI,CAACC,WAAWE,aAAa,EAAE;oBAC7B,OAAO,IAAIC,SACTC,KAAKC,SAAS,CAAC;wBAAEC,OAAON,WAAWM,KAAK,IAAI;oBAAe,IAC3D;wBACEC,QAAQ;wBACRC,SAAS;4BAAE,gBAAgB;wBAAmB;oBAChD;gBAEJ;gBAEA,2EAA2E;gBAC3E,IAAIC;gBACJ,IAAIC;gBAEJ,IAAI;oBACF,MAAMC,cAAc,MAAM,MAAM,CAAC;oBACjCF,cAAcE,YAAYF,WAAW;oBACrCC,OAAOC,YAAYD,IAAI;gBACzB,EAAE,OAAOE,GAAG;oBACV,OAAO,IAAIT,SACTC,KAAKC,SAAS,CAAC;wBACbC,OAAO;oBACT,IACA;wBACEC,QAAQ;wBACRC,SAAS;4BAAE,gBAAgB;wBAAmB;oBAChD;gBAEJ;gBAEA,mDAAmD;gBACnD,MAAMK,YAAqD,CAAC;gBAC5D,IAAIjB,IAAIkB,OAAO;oBACb,KAAK,MAAM,CAACC,MAAMC,QAAQ,IAAIC,OAAOC,OAAO,CAACtB,GAAGkB,KAAK,EAAG;wBACtDD,SAAS,CAACE,KAAK,GAAGL,KAAK;4BACrBS,aAAaH,QAAQG,WAAW;4BAChCC,aAAaJ,QAAQI,WAAW;4BAChCC,SAASL,QAAQK,OAAO;4BACxBN,MAAMC,QAAQD,IAAI;wBACpB;oBACF;gBACF;gBAEA,6CAA6C;gBAC7C,OAAON,YAAYV,SAAS;oBAC1BuB,QAAQ1B,IAAI0B;oBACZC,MAAM3B,IAAI2B;oBACV3B,IAAI;wBACF4B,SAAS5B,IAAI4B;wBACbV,OAAOG,OAAOQ,IAAI,CAACZ,WAAWa,MAAM,GAAG,IAAIb,YAAYc;oBACzD;gBACF;YACF,EAAE,OAAOrB,OAAO;gBACd,wCAAwC;gBACxC,IAAIT,SAAS;oBACXA,QAAQS,OAAO;wBAAEsB,WAAW;wBAAW7B;oBAAQ;gBACjD;gBAEA8B,QAAQvB,KAAK,CAAC,qCAAqCA;gBAEnD,OAAO,IAAIH,SACTC,KAAKC,SAAS,CAAC;oBACbC,OAAO;oBACPwB,SAASxB,iBAAiByB,QAAQzB,MAAMwB,OAAO,GAAG;gBACpD,IACA;oBACEvB,QAAQ;oBACRC,SAAS;wBAAE,gBAAgB;oBAAmB;gBAChD;YAEJ;QACF;IACF;AACF"}
|
|
@@ -59,10 +59,9 @@
|
|
|
59
59
|
* data: { puckData: updatedData },
|
|
60
60
|
* })
|
|
61
61
|
* ```
|
|
62
|
-
*/
|
|
63
|
-
export function createAiGenerate(config) {
|
|
62
|
+
*/ export function createAiGenerate(config) {
|
|
64
63
|
const { ai } = config;
|
|
65
|
-
return async (options)
|
|
64
|
+
return async (options)=>{
|
|
66
65
|
const { prompt, puckConfig, pageData } = options;
|
|
67
66
|
// Lazy import @puckeditor/cloud-client
|
|
68
67
|
let generate;
|
|
@@ -71,19 +70,18 @@ export function createAiGenerate(config) {
|
|
|
71
70
|
const cloudClient = await import('@puckeditor/cloud-client');
|
|
72
71
|
generate = cloudClient.generate;
|
|
73
72
|
tool = cloudClient.tool;
|
|
74
|
-
}
|
|
75
|
-
catch (e) {
|
|
73
|
+
} catch (e) {
|
|
76
74
|
throw new Error('AI generation requires @puckeditor/cloud-client. Please install it with: pnpm add @puckeditor/cloud-client');
|
|
77
75
|
}
|
|
78
76
|
// Convert our tool format to Puck's tool format
|
|
79
77
|
const puckTools = {};
|
|
80
78
|
if (ai?.tools) {
|
|
81
|
-
for (const [name, toolDef] of Object.entries(ai.tools))
|
|
79
|
+
for (const [name, toolDef] of Object.entries(ai.tools)){
|
|
82
80
|
puckTools[name] = tool({
|
|
83
81
|
description: toolDef.description,
|
|
84
82
|
inputSchema: toolDef.inputSchema,
|
|
85
83
|
execute: toolDef.execute,
|
|
86
|
-
name: toolDef.name
|
|
84
|
+
name: toolDef.name
|
|
87
85
|
});
|
|
88
86
|
}
|
|
89
87
|
}
|
|
@@ -95,7 +93,7 @@ export function createAiGenerate(config) {
|
|
|
95
93
|
apiKey: ai?.apiKey,
|
|
96
94
|
host: ai?.host,
|
|
97
95
|
pageData,
|
|
98
|
-
tools: Object.keys(puckTools).length > 0 ? puckTools : undefined
|
|
96
|
+
tools: Object.keys(puckTools).length > 0 ? puckTools : undefined
|
|
99
97
|
});
|
|
100
98
|
if (!result) {
|
|
101
99
|
throw new Error('AI generation failed: no result returned');
|
|
@@ -103,4 +101,5 @@ export function createAiGenerate(config) {
|
|
|
103
101
|
return result;
|
|
104
102
|
};
|
|
105
103
|
}
|
|
104
|
+
|
|
106
105
|
//# sourceMappingURL=createAiGenerate.js.map
|