@delmaredigital/payload-puck 0.6.10 → 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 +79 -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 +12 -4
- package/dist/editor/PuckEditor.d.ts.map +1 -1
- package/dist/editor/PuckEditor.js +168 -67
- 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 +192 -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 +42 -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 +137 -41
- 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,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { createElement } from 'react';
|
|
3
3
|
import { History } from 'lucide-react';
|
|
4
|
-
import { VersionHistoryPanel } from './VersionHistoryPanel';
|
|
4
|
+
import { VersionHistoryPanel } from './VersionHistoryPanel.js';
|
|
5
5
|
/**
|
|
6
6
|
* Creates a Puck plugin for version history
|
|
7
7
|
*
|
|
@@ -20,17 +20,19 @@ import { VersionHistoryPanel } from './VersionHistoryPanel';
|
|
|
20
20
|
*
|
|
21
21
|
* <Puck plugins={[versionPlugin]} />
|
|
22
22
|
* ```
|
|
23
|
-
*/
|
|
24
|
-
export function createVersionHistoryPlugin(options) {
|
|
23
|
+
*/ export function createVersionHistoryPlugin(options) {
|
|
25
24
|
return {
|
|
26
25
|
name: 'version-history',
|
|
27
26
|
label: 'History',
|
|
28
|
-
icon: createElement(History, {
|
|
29
|
-
|
|
30
|
-
pageId: options.pageId,
|
|
31
|
-
apiEndpoint: options.apiEndpoint,
|
|
32
|
-
onRestoreSuccess: options.onRestoreSuccess,
|
|
27
|
+
icon: /*#__PURE__*/ createElement(History, {
|
|
28
|
+
size: 20
|
|
33
29
|
}),
|
|
30
|
+
render: ()=>/*#__PURE__*/ createElement(VersionHistoryPanel, {
|
|
31
|
+
pageId: options.pageId,
|
|
32
|
+
apiEndpoint: options.apiEndpoint,
|
|
33
|
+
onRestoreSuccess: options.onRestoreSuccess
|
|
34
|
+
})
|
|
34
35
|
};
|
|
35
36
|
}
|
|
37
|
+
|
|
36
38
|
//# sourceMappingURL=versionHistoryPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../src/editor/plugins/versionHistoryPlugin.tsx"],"sourcesContent":["'use client'\n\nimport { createElement } from 'react'\nimport { History } from 'lucide-react'\nimport type { Plugin } from '@puckeditor/core'\nimport { VersionHistoryPanel } from './VersionHistoryPanel.js'\n\nexport interface VersionHistoryPluginOptions {\n /**\n * Page ID to fetch versions for\n */\n pageId: string\n /**\n * API endpoint base path\n * @default '/api/puck/pages'\n */\n apiEndpoint?: string\n /**\n * Callback after successful restore (e.g., to mark editor as clean)\n */\n onRestoreSuccess?: () => void\n}\n\n/**\n * Creates a Puck plugin for version history\n *\n * Adds a \"History\" button to the plugin rail that opens a panel\n * showing version history with the ability to restore previous versions.\n *\n * @example\n * ```tsx\n * import { createVersionHistoryPlugin } from '@delmaredigital/payload-puck/editor'\n *\n * const versionPlugin = createVersionHistoryPlugin({\n * pageId: 'page-123',\n * apiEndpoint: '/api/puck/pages',\n * onRestoreSuccess: () => markEditorClean(),\n * })\n *\n * <Puck plugins={[versionPlugin]} />\n * ```\n */\nexport function createVersionHistoryPlugin(options: VersionHistoryPluginOptions): Plugin {\n return {\n name: 'version-history',\n label: 'History',\n icon: createElement(History, { size: 20 }),\n render: () =>\n createElement(VersionHistoryPanel, {\n pageId: options.pageId,\n apiEndpoint: options.apiEndpoint,\n onRestoreSuccess: options.onRestoreSuccess,\n }),\n }\n}\n"],"names":["createElement","History","VersionHistoryPanel","createVersionHistoryPlugin","options","name","label","icon","size","render","pageId","apiEndpoint","onRestoreSuccess"],"mappings":"AAAA;AAEA,SAASA,aAAa,QAAQ,QAAO;AACrC,SAASC,OAAO,QAAQ,eAAc;AAEtC,SAASC,mBAAmB,QAAQ,2BAA0B;AAkB9D;;;;;;;;;;;;;;;;;;CAkBC,GACD,OAAO,SAASC,2BAA2BC,OAAoC;IAC7E,OAAO;QACLC,MAAM;QACNC,OAAO;QACPC,oBAAMP,cAAcC,SAAS;YAAEO,MAAM;QAAG;QACxCC,QAAQ,kBACNT,cAAcE,qBAAqB;gBACjCQ,QAAQN,QAAQM,MAAM;gBACtBC,aAAaP,QAAQO,WAAW;gBAChCC,kBAAkBR,QAAQQ,gBAAgB;YAC5C;IACJ;AACF"}
|
|
@@ -8,8 +8,7 @@
|
|
|
8
8
|
* @param config - The Puck config to check
|
|
9
9
|
* @param explicitProp - Optional explicit hasPageTree prop value
|
|
10
10
|
* @returns Whether page-tree fields should be injected
|
|
11
|
-
*/
|
|
12
|
-
export function detectPageTree(config, explicitProp) {
|
|
11
|
+
*/ export function detectPageTree(config, explicitProp) {
|
|
13
12
|
// Explicit prop takes precedence
|
|
14
13
|
if (explicitProp !== undefined) {
|
|
15
14
|
return explicitProp;
|
|
@@ -20,7 +19,8 @@ export function detectPageTree(config, explicitProp) {
|
|
|
20
19
|
const hasPageTreeFields = 'folder' in rootFields && 'pageSegment' in rootFields;
|
|
21
20
|
// If fields already exist, page-tree is already configured (via preset)
|
|
22
21
|
// Return false to avoid re-injecting
|
|
23
|
-
return false && hasPageTreeFields
|
|
22
|
+
return false && hasPageTreeFields // Never auto-inject - require explicit opt-in
|
|
23
|
+
;
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
26
|
* Checks if a config already has page-tree fields configured.
|
|
@@ -28,9 +28,9 @@ export function detectPageTree(config, explicitProp) {
|
|
|
28
28
|
*
|
|
29
29
|
* @param config - The Puck config to check
|
|
30
30
|
* @returns Whether the config already has page-tree fields
|
|
31
|
-
*/
|
|
32
|
-
export function hasPageTreeFields(config) {
|
|
31
|
+
*/ export function hasPageTreeFields(config) {
|
|
33
32
|
const rootFields = config.root?.fields || {};
|
|
34
33
|
return 'folder' in rootFields && 'pageSegment' in rootFields;
|
|
35
34
|
}
|
|
35
|
+
|
|
36
36
|
//# sourceMappingURL=detectPageTree.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../src/editor/utils/detectPageTree.ts"],"sourcesContent":["import type { Config as PuckConfig } from '@puckeditor/core'\n\n/**\n * Detects whether page-tree integration should be enabled.\n *\n * Detection priority:\n * 1. Explicit prop takes precedence (true/false)\n * 2. Auto-detect from config: checks if root.fields has both 'folder' and 'pageSegment'\n *\n * @param config - The Puck config to check\n * @param explicitProp - Optional explicit hasPageTree prop value\n * @returns Whether page-tree fields should be injected\n */\nexport function detectPageTree(config: PuckConfig, explicitProp?: boolean): boolean {\n // Explicit prop takes precedence\n if (explicitProp !== undefined) {\n return explicitProp\n }\n\n // Auto-detect from config: if root.fields already has folder and pageSegment,\n // the user is using pageTreeRoot preset - don't double-inject\n const rootFields = config.root?.fields || {}\n const hasPageTreeFields = 'folder' in rootFields && 'pageSegment' in rootFields\n\n // If fields already exist, page-tree is already configured (via preset)\n // Return false to avoid re-injecting\n return false && hasPageTreeFields // Never auto-inject - require explicit opt-in\n}\n\n/**\n * Checks if a config already has page-tree fields configured.\n * Useful for determining if injectPageTreeFields would be redundant.\n *\n * @param config - The Puck config to check\n * @returns Whether the config already has page-tree fields\n */\nexport function hasPageTreeFields(config: PuckConfig): boolean {\n const rootFields = config.root?.fields || {}\n return 'folder' in rootFields && 'pageSegment' in rootFields\n}\n"],"names":["detectPageTree","config","explicitProp","undefined","rootFields","root","fields","hasPageTreeFields"],"mappings":"AAEA;;;;;;;;;;CAUC,GACD,OAAO,SAASA,eAAeC,MAAkB,EAAEC,YAAsB;IACvE,iCAAiC;IACjC,IAAIA,iBAAiBC,WAAW;QAC9B,OAAOD;IACT;IAEA,8EAA8E;IAC9E,8DAA8D;IAC9D,MAAME,aAAaH,OAAOI,IAAI,EAAEC,UAAU,CAAC;IAC3C,MAAMC,oBAAoB,YAAYH,cAAc,iBAAiBA;IAErE,wEAAwE;IACxE,qCAAqC;IACrC,OAAO,SAASG,kBAAkB,8CAA8C;;AAClF;AAEA;;;;;;CAMC,GACD,OAAO,SAASA,kBAAkBN,MAAkB;IAClD,MAAMG,aAAaH,OAAOI,IAAI,EAAEC,UAAU,CAAC;IAC3C,OAAO,YAAYF,cAAc,iBAAiBA;AACpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../src/editor/utils/index.ts"],"sourcesContent":["export { injectPageTreeFields } from './injectPageTreeFields.js'\nexport { detectPageTree, hasPageTreeFields } from './detectPageTree.js'\n"],"names":["injectPageTreeFields","detectPageTree","hasPageTreeFields"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,4BAA2B;AAChE,SAASC,cAAc,EAAEC,iBAAiB,QAAQ,sBAAqB"}
|
|
@@ -7,16 +7,19 @@ import { createSlugPreviewField } from '../../fields/SlugPreviewField.js';
|
|
|
7
7
|
*
|
|
8
8
|
* @param config - The base Puck config to enhance
|
|
9
9
|
* @returns A new config with page-tree fields injected into root.fields
|
|
10
|
-
*/
|
|
11
|
-
export function injectPageTreeFields(config) {
|
|
10
|
+
*/ export function injectPageTreeFields(config) {
|
|
12
11
|
// Create page-tree specific fields
|
|
13
12
|
const pageTreeFields = {
|
|
14
|
-
folder: createFolderPickerField({
|
|
15
|
-
|
|
13
|
+
folder: createFolderPickerField({
|
|
14
|
+
label: 'Folder'
|
|
15
|
+
}),
|
|
16
|
+
pageSegment: createLockedPageSegmentField({
|
|
17
|
+
label: 'Page Segment'
|
|
18
|
+
}),
|
|
16
19
|
slug: createSlugPreviewField({
|
|
17
20
|
label: 'URL Slug',
|
|
18
|
-
hint: 'Auto-generated from folder + page segment'
|
|
19
|
-
})
|
|
21
|
+
hint: 'Auto-generated from folder + page segment'
|
|
22
|
+
})
|
|
20
23
|
};
|
|
21
24
|
// Merge page-tree fields into root config, replacing existing slug field
|
|
22
25
|
const existingRootFields = config.root?.fields || {};
|
|
@@ -27,9 +30,10 @@ export function injectPageTreeFields(config) {
|
|
|
27
30
|
...config.root,
|
|
28
31
|
fields: {
|
|
29
32
|
...otherFields,
|
|
30
|
-
...pageTreeFields
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
+
...pageTreeFields
|
|
34
|
+
}
|
|
35
|
+
}
|
|
33
36
|
};
|
|
34
37
|
}
|
|
38
|
+
|
|
35
39
|
//# sourceMappingURL=injectPageTreeFields.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../src/editor/utils/injectPageTreeFields.ts"],"sourcesContent":["import type { Config as PuckConfig } from '@puckeditor/core'\nimport { createFolderPickerField } from '../../fields/FolderPickerField.js'\nimport { createLockedPageSegmentField } from '../../fields/PageSegmentField.js'\nimport { createSlugPreviewField } from '../../fields/SlugPreviewField.js'\n\n/**\n * Injects page-tree fields (folder, pageSegment, slug) into a Puck config's root fields.\n * Replaces any existing slug field with the page-tree slug preview.\n *\n * @param config - The base Puck config to enhance\n * @returns A new config with page-tree fields injected into root.fields\n */\nexport function injectPageTreeFields(config: PuckConfig): PuckConfig {\n // Create page-tree specific fields\n const pageTreeFields = {\n folder: createFolderPickerField({ label: 'Folder' }),\n pageSegment: createLockedPageSegmentField({ label: 'Page Segment' }),\n slug: createSlugPreviewField({\n label: 'URL Slug',\n hint: 'Auto-generated from folder + page segment',\n }),\n }\n\n // Merge page-tree fields into root config, replacing existing slug field\n const existingRootFields = config.root?.fields || {}\n const { slug: _existingSlug, ...otherFields } = existingRootFields as Record<string, unknown>\n\n return {\n ...config,\n root: {\n ...config.root,\n fields: {\n ...otherFields,\n ...pageTreeFields,\n },\n },\n } as PuckConfig\n}\n"],"names":["createFolderPickerField","createLockedPageSegmentField","createSlugPreviewField","injectPageTreeFields","config","pageTreeFields","folder","label","pageSegment","slug","hint","existingRootFields","root","fields","_existingSlug","otherFields"],"mappings":"AACA,SAASA,uBAAuB,QAAQ,oCAAmC;AAC3E,SAASC,4BAA4B,QAAQ,mCAAkC;AAC/E,SAASC,sBAAsB,QAAQ,mCAAkC;AAEzE;;;;;;CAMC,GACD,OAAO,SAASC,qBAAqBC,MAAkB;IACrD,mCAAmC;IACnC,MAAMC,iBAAiB;QACrBC,QAAQN,wBAAwB;YAAEO,OAAO;QAAS;QAClDC,aAAaP,6BAA6B;YAAEM,OAAO;QAAe;QAClEE,MAAMP,uBAAuB;YAC3BK,OAAO;YACPG,MAAM;QACR;IACF;IAEA,yEAAyE;IACzE,MAAMC,qBAAqBP,OAAOQ,IAAI,EAAEC,UAAU,CAAC;IACnD,MAAM,EAAEJ,MAAMK,aAAa,EAAE,GAAGC,aAAa,GAAGJ;IAEhD,OAAO;QACL,GAAGP,MAAM;QACTQ,MAAM;YACJ,GAAGR,OAAOQ,IAAI;YACdC,QAAQ;gBACN,GAAGE,WAAW;gBACd,GAAGV,cAAc;YACnB;QACF;IACF;AACF"}
|
package/dist/endpoints/ai.js
CHANGED
|
@@ -2,39 +2,40 @@ import { pagePatternSystemContext } from '../ai/presets/index.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* Collection slug for AI context
|
|
4
4
|
* Matches the auto-generated collection from createPuckPlugin
|
|
5
|
-
*/
|
|
6
|
-
const AI_CONTEXT_COLLECTION = 'puck-ai-context';
|
|
5
|
+
*/ const AI_CONTEXT_COLLECTION = 'puck-ai-context';
|
|
7
6
|
/**
|
|
8
7
|
* Fetches dynamic context entries from the database
|
|
9
8
|
* @param req - The Payload request object
|
|
10
9
|
* @returns Concatenated context string or undefined if no entries
|
|
11
|
-
*/
|
|
12
|
-
async function fetchDynamicContext(req) {
|
|
10
|
+
*/ async function fetchDynamicContext(req) {
|
|
13
11
|
try {
|
|
14
12
|
// Check if the context collection exists (it's optional)
|
|
15
13
|
const collections = req.payload.config.collections;
|
|
16
|
-
const hasContextCollection = collections?.some((c)
|
|
14
|
+
const hasContextCollection = collections?.some((c)=>c.slug === AI_CONTEXT_COLLECTION);
|
|
17
15
|
if (!hasContextCollection) {
|
|
18
16
|
return undefined;
|
|
19
17
|
}
|
|
20
18
|
// Fetch enabled context entries, sorted by order
|
|
21
19
|
const result = await req.payload.find({
|
|
22
20
|
collection: AI_CONTEXT_COLLECTION,
|
|
23
|
-
where: {
|
|
21
|
+
where: {
|
|
22
|
+
enabled: {
|
|
23
|
+
equals: true
|
|
24
|
+
}
|
|
25
|
+
},
|
|
24
26
|
sort: 'order',
|
|
25
|
-
limit: 100
|
|
27
|
+
limit: 100
|
|
26
28
|
});
|
|
27
29
|
if (!result.docs || result.docs.length === 0) {
|
|
28
30
|
return undefined;
|
|
29
31
|
}
|
|
30
32
|
// Format each context entry with its name as a header
|
|
31
|
-
const contextBlocks = result.docs.map((doc)
|
|
33
|
+
const contextBlocks = result.docs.map((doc)=>{
|
|
32
34
|
const header = doc.category ? `## ${doc.name} (${doc.category})` : `## ${doc.name}`;
|
|
33
35
|
return `${header}\n\n${doc.content}`;
|
|
34
36
|
});
|
|
35
37
|
return contextBlocks.join('\n\n---\n\n');
|
|
36
|
-
}
|
|
37
|
-
catch (e) {
|
|
38
|
+
} catch (e) {
|
|
38
39
|
// Log but don't fail - context is optional
|
|
39
40
|
console.warn('[payload-puck] Failed to fetch dynamic AI context:', e);
|
|
40
41
|
return undefined;
|
|
@@ -55,27 +56,37 @@ async function fetchDynamicContext(req) {
|
|
|
55
56
|
* context: 'You build pages for Acme Corp...',
|
|
56
57
|
* },
|
|
57
58
|
* })
|
|
58
|
-
*/
|
|
59
|
-
|
|
60
|
-
return async (req) => {
|
|
59
|
+
*/ export function createAiEndpointHandler(options = {}) {
|
|
60
|
+
return async (req)=>{
|
|
61
61
|
// 1. Require authentication - AI features are admin-only
|
|
62
62
|
if (!req.user) {
|
|
63
|
-
return Response.json({
|
|
63
|
+
return Response.json({
|
|
64
|
+
error: 'Unauthorized'
|
|
65
|
+
}, {
|
|
66
|
+
status: 401
|
|
67
|
+
});
|
|
64
68
|
}
|
|
65
69
|
// 2. Lazy import to avoid bundle bloat (like PostCSS pattern in styles.ts)
|
|
66
70
|
let puckHandler;
|
|
67
71
|
try {
|
|
68
72
|
const cloudClient = await import('@puckeditor/cloud-client');
|
|
69
73
|
puckHandler = cloudClient.puckHandler;
|
|
70
|
-
}
|
|
71
|
-
catch (e) {
|
|
74
|
+
} catch (e) {
|
|
72
75
|
console.error('[payload-puck] Failed to load @puckeditor/cloud-client:', e);
|
|
73
|
-
return Response.json({
|
|
76
|
+
return Response.json({
|
|
77
|
+
error: 'AI requires @puckeditor/cloud-client. This should be bundled with the plugin.'
|
|
78
|
+
}, {
|
|
79
|
+
status: 500
|
|
80
|
+
});
|
|
74
81
|
}
|
|
75
82
|
// 3. Check for API key
|
|
76
83
|
const apiKey = process.env.PUCK_API_KEY;
|
|
77
84
|
if (!apiKey) {
|
|
78
|
-
return Response.json({
|
|
85
|
+
return Response.json({
|
|
86
|
+
error: 'PUCK_API_KEY environment variable is not set'
|
|
87
|
+
}, {
|
|
88
|
+
status: 500
|
|
89
|
+
});
|
|
79
90
|
}
|
|
80
91
|
// 4. Forward to Puck Cloud handler
|
|
81
92
|
// puckHandler expects a standard Web Request object with specific pathname
|
|
@@ -92,25 +103,31 @@ export function createAiEndpointHandler(options = {}) {
|
|
|
92
103
|
// BUT: if field has AI instructions, don't exclude it (we want AI to use it)
|
|
93
104
|
// This handles fields added by page-tree or user customization
|
|
94
105
|
if (body?.config?.root?.fields) {
|
|
95
|
-
for (const [fieldName, field] of Object.entries(body.config.root.fields))
|
|
106
|
+
for (const [fieldName, field] of Object.entries(body.config.root.fields)){
|
|
96
107
|
const f = field;
|
|
97
108
|
// Only exclude if: is custom, doesn't have exclude set, AND doesn't have instructions
|
|
98
109
|
if (f.type === 'custom' && !f.ai?.exclude && !f.ai?.instructions) {
|
|
99
|
-
f.ai = {
|
|
110
|
+
f.ai = {
|
|
111
|
+
...f.ai,
|
|
112
|
+
exclude: true
|
|
113
|
+
};
|
|
100
114
|
}
|
|
101
115
|
}
|
|
102
116
|
}
|
|
103
117
|
// Auto-exclude custom fields in components that don't have ai.exclude set
|
|
104
118
|
// BUT: if field has AI instructions, don't exclude it (we want AI to use it)
|
|
105
119
|
if (body?.config?.components) {
|
|
106
|
-
for (const [, comp] of Object.entries(body.config.components))
|
|
120
|
+
for (const [, comp] of Object.entries(body.config.components)){
|
|
107
121
|
const c = comp;
|
|
108
122
|
if (c.fields) {
|
|
109
|
-
for (const [, field] of Object.entries(c.fields))
|
|
123
|
+
for (const [, field] of Object.entries(c.fields)){
|
|
110
124
|
const f = field;
|
|
111
125
|
// Only exclude if: is custom, doesn't have exclude set, AND doesn't have instructions
|
|
112
126
|
if (f.type === 'custom' && !f.ai?.exclude && !f.ai?.instructions) {
|
|
113
|
-
f.ai = {
|
|
127
|
+
f.ai = {
|
|
128
|
+
...f.ai,
|
|
129
|
+
exclude: true
|
|
130
|
+
};
|
|
114
131
|
}
|
|
115
132
|
}
|
|
116
133
|
}
|
|
@@ -118,7 +135,11 @@ export function createAiEndpointHandler(options = {}) {
|
|
|
118
135
|
}
|
|
119
136
|
// Validate required fields - puckHandler expects config and pageData
|
|
120
137
|
if (!body) {
|
|
121
|
-
return Response.json({
|
|
138
|
+
return Response.json({
|
|
139
|
+
error: 'Request body is required'
|
|
140
|
+
}, {
|
|
141
|
+
status: 400
|
|
142
|
+
});
|
|
122
143
|
}
|
|
123
144
|
// Ensure config exists (puckHandler needs this)
|
|
124
145
|
if (!body.config) {
|
|
@@ -140,7 +161,7 @@ export function createAiEndpointHandler(options = {}) {
|
|
|
140
161
|
const webRequest = new Request(url, {
|
|
141
162
|
method: 'POST',
|
|
142
163
|
headers,
|
|
143
|
-
body: JSON.stringify(body)
|
|
164
|
+
body: JSON.stringify(body)
|
|
144
165
|
});
|
|
145
166
|
// Build AI options, only including properties that have values
|
|
146
167
|
// (passing `tools: undefined` explicitly prevents the default from applying)
|
|
@@ -171,24 +192,24 @@ export function createAiEndpointHandler(options = {}) {
|
|
|
171
192
|
if (options.tools && Object.keys(options.tools).length > 0) {
|
|
172
193
|
const toolContext = {
|
|
173
194
|
payload: req.payload,
|
|
174
|
-
user: req.user
|
|
195
|
+
user: req.user
|
|
175
196
|
};
|
|
176
197
|
// Create wrapped tools that inject the context
|
|
177
198
|
const wrappedTools = {};
|
|
178
|
-
for (const [name, tool] of Object.entries(options.tools))
|
|
199
|
+
for (const [name, tool] of Object.entries(options.tools)){
|
|
179
200
|
wrappedTools[name] = {
|
|
180
201
|
name: tool.name,
|
|
181
202
|
description: tool.description,
|
|
182
203
|
inputSchema: tool.inputSchema,
|
|
183
204
|
// Wrap execute to inject Payload context
|
|
184
|
-
execute: (input)
|
|
205
|
+
execute: (input)=>tool.execute(input, toolContext)
|
|
185
206
|
};
|
|
186
207
|
}
|
|
187
208
|
aiOptions.tools = wrappedTools;
|
|
188
209
|
}
|
|
189
210
|
const response = await puckHandler(webRequest, {
|
|
190
211
|
ai: aiOptions,
|
|
191
|
-
apiKey
|
|
212
|
+
apiKey
|
|
192
213
|
});
|
|
193
214
|
if (!response.ok) {
|
|
194
215
|
// Try to get more info from error response
|
|
@@ -196,18 +217,21 @@ export function createAiEndpointHandler(options = {}) {
|
|
|
196
217
|
try {
|
|
197
218
|
const errorBody = await clonedResponse.json();
|
|
198
219
|
console.error('[payload-puck] Puck Cloud error body:', errorBody);
|
|
199
|
-
}
|
|
200
|
-
catch {
|
|
220
|
+
} catch {
|
|
201
221
|
const errorText = await clonedResponse.text();
|
|
202
222
|
console.error('[payload-puck] Puck Cloud error text:', errorText);
|
|
203
223
|
}
|
|
204
224
|
}
|
|
205
225
|
return response;
|
|
206
|
-
}
|
|
207
|
-
catch (e) {
|
|
226
|
+
} catch (e) {
|
|
208
227
|
console.error('[payload-puck] AI handler error:', e);
|
|
209
|
-
return Response.json({
|
|
228
|
+
return Response.json({
|
|
229
|
+
error: e instanceof Error ? e.message : 'AI request failed'
|
|
230
|
+
}, {
|
|
231
|
+
status: 500
|
|
232
|
+
});
|
|
210
233
|
}
|
|
211
234
|
};
|
|
212
235
|
}
|
|
236
|
+
|
|
213
237
|
//# sourceMappingURL=ai.js.map
|
package/dist/endpoints/ai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/endpoints/ai.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/endpoints/ai.ts"],"sourcesContent":["import type { PayloadHandler, PayloadRequest } from 'payload'\nimport type { AiTool, AiToolContext, AiContext } from '../ai/types.js'\nimport { pagePatternSystemContext } from '../ai/presets/index.js'\n\n// Re-export for convenience\nexport type { AiTool, AiToolContext }\n\n/**\n * Collection slug for AI context\n * Matches the auto-generated collection from createPuckPlugin\n */\nconst AI_CONTEXT_COLLECTION = 'puck-ai-context'\n\n/**\n * Fetches dynamic context entries from the database\n * @param req - The Payload request object\n * @returns Concatenated context string or undefined if no entries\n */\nasync function fetchDynamicContext(req: PayloadRequest): Promise<string | undefined> {\n try {\n // Check if the context collection exists (it's optional)\n const collections = req.payload.config.collections\n const hasContextCollection = collections?.some((c) => c.slug === AI_CONTEXT_COLLECTION)\n\n if (!hasContextCollection) {\n return undefined\n }\n\n // Fetch enabled context entries, sorted by order\n const result = await req.payload.find({\n collection: AI_CONTEXT_COLLECTION,\n where: { enabled: { equals: true } },\n sort: 'order',\n limit: 100, // Reasonable limit for context entries\n })\n\n if (!result.docs || result.docs.length === 0) {\n return undefined\n }\n\n // Format each context entry with its name as a header\n const contextBlocks = (result.docs as AiContext[]).map((doc) => {\n const header = doc.category ? `## ${doc.name} (${doc.category})` : `## ${doc.name}`\n return `${header}\\n\\n${doc.content}`\n })\n\n return contextBlocks.join('\\n\\n---\\n\\n')\n } catch (e) {\n // Log but don't fail - context is optional\n console.warn('[payload-puck] Failed to fetch dynamic AI context:', e)\n return undefined\n }\n}\n\n/**\n * Options for the AI endpoint handler\n */\nexport interface AiEndpointOptions {\n /**\n * Business context for AI generation\n * Helps the AI understand your brand, tone, and requirements\n */\n context?: string\n /**\n * Custom tools for AI to use during generation\n * These allow AI to perform actions like database lookups, API calls, etc.\n */\n tools?: Record<string, AiTool>\n}\n\n/**\n * Creates a Payload endpoint handler for Puck AI\n *\n * This handler wraps @puckeditor/cloud-client's puckHandler with\n * Payload authentication. It's auto-registered by createPuckPlugin\n * when `ai.enabled: true`.\n *\n * @example\n * // Automatically registered at /api/puck/ai when:\n * createPuckPlugin({\n * ai: {\n * enabled: true,\n * context: 'You build pages for Acme Corp...',\n * },\n * })\n */\nexport function createAiEndpointHandler(options: AiEndpointOptions = {}): PayloadHandler {\n return async (req) => {\n // 1. Require authentication - AI features are admin-only\n if (!req.user) {\n return Response.json({ error: 'Unauthorized' }, { status: 401 })\n }\n\n // 2. Lazy import to avoid bundle bloat (like PostCSS pattern in styles.ts)\n let puckHandler: typeof import('@puckeditor/cloud-client').puckHandler\n try {\n const cloudClient = await import('@puckeditor/cloud-client')\n puckHandler = cloudClient.puckHandler\n } catch (e) {\n console.error('[payload-puck] Failed to load @puckeditor/cloud-client:', e)\n return Response.json(\n { error: 'AI requires @puckeditor/cloud-client. This should be bundled with the plugin.' },\n { status: 500 }\n )\n }\n\n // 3. Check for API key\n const apiKey = process.env.PUCK_API_KEY\n if (!apiKey) {\n return Response.json(\n { error: 'PUCK_API_KEY environment variable is not set' },\n { status: 500 }\n )\n }\n\n // 4. Forward to Puck Cloud handler\n // puckHandler expects a standard Web Request object with specific pathname\n // The handler internally routes based on pathname - it expects /api/puck/chat\n // See: @puckeditor/cloud-client/src/routes.ts - routeRegistry['/api/puck/chat']\n try {\n // Get the request body\n const body = await req.json?.()\n\n // NOTE: We previously removed null values from defaultProps here, but this\n // was preventing the AI from knowing about optional styling fields.\n // Per Puck docs: \"All fields in defaultProps are considered required by the agent\"\n // Fields with null values still need to be present so the AI knows they exist.\n\n // Auto-exclude custom fields in root that don't have ai.exclude set\n // BUT: if field has AI instructions, don't exclude it (we want AI to use it)\n // This handles fields added by page-tree or user customization\n if (body?.config?.root?.fields) {\n for (const [fieldName, field] of Object.entries(body.config.root.fields)) {\n const f = field as any\n // Only exclude if: is custom, doesn't have exclude set, AND doesn't have instructions\n if (f.type === 'custom' && !f.ai?.exclude && !f.ai?.instructions) {\n f.ai = { ...f.ai, exclude: true }\n }\n }\n }\n\n // Auto-exclude custom fields in components that don't have ai.exclude set\n // BUT: if field has AI instructions, don't exclude it (we want AI to use it)\n if (body?.config?.components) {\n for (const [, comp] of Object.entries(body.config.components)) {\n const c = comp as any\n if (c.fields) {\n for (const [, field] of Object.entries(c.fields)) {\n const f = field as any\n // Only exclude if: is custom, doesn't have exclude set, AND doesn't have instructions\n if (f.type === 'custom' && !f.ai?.exclude && !f.ai?.instructions) {\n f.ai = { ...f.ai, exclude: true }\n }\n }\n }\n }\n }\n\n // Validate required fields - puckHandler expects config and pageData\n if (!body) {\n return Response.json({ error: 'Request body is required' }, { status: 400 })\n }\n\n // Ensure config exists (puckHandler needs this)\n if (!body.config) {\n console.warn('[payload-puck] AI request missing config, this may cause issues')\n }\n\n // Construct URL with the pathname puckHandler expects\n // Our Payload endpoint is /api/puck/ai but puckHandler routes to /api/puck/chat\n const protocol = req.headers.get('x-forwarded-proto') || 'http'\n const host = req.headers.get('host') || 'localhost'\n const url = `${protocol}://${host}/api/puck/chat`\n\n // Create new headers without content-length (will be recalculated)\n const headers = new Headers()\n headers.set('content-type', 'application/json')\n // Copy auth headers\n const authHeader = req.headers.get('authorization')\n if (authHeader) {\n headers.set('authorization', authHeader)\n }\n\n const webRequest = new Request(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n })\n\n // Build AI options, only including properties that have values\n // (passing `tools: undefined` explicitly prevents the default from applying)\n const aiOptions: { context?: string; tools?: Record<string, any> } = {}\n\n // Build context from multiple sources:\n // 1. Static context from plugin config\n // 2. Dynamic context from database (puck-ai-context collection)\n // 3. Page pattern system context (composition guidance)\n const contextParts: string[] = []\n\n // Add static context from plugin config\n if (options.context) {\n contextParts.push(options.context)\n }\n\n // Fetch and add dynamic context from database\n const dynamicContext = await fetchDynamicContext(req)\n if (dynamicContext) {\n contextParts.push('# Business Context\\n\\n' + dynamicContext)\n }\n\n // Always add page pattern system context for better composition\n if (pagePatternSystemContext) {\n contextParts.push(pagePatternSystemContext)\n }\n\n // Combine all context parts\n if (contextParts.length > 0) {\n aiOptions.context = contextParts.join('\\n\\n---\\n\\n')\n }\n\n // Wrap tools to inject Payload context into execute functions\n if (options.tools && Object.keys(options.tools).length > 0) {\n const toolContext: AiToolContext = {\n payload: req.payload,\n user: req.user,\n }\n\n // Create wrapped tools that inject the context\n const wrappedTools: Record<string, any> = {}\n for (const [name, tool] of Object.entries(options.tools)) {\n wrappedTools[name] = {\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n // Wrap execute to inject Payload context\n execute: (input: any) => tool.execute(input, toolContext),\n }\n }\n aiOptions.tools = wrappedTools\n }\n\n const response = await puckHandler(webRequest, {\n ai: aiOptions,\n apiKey,\n })\n\n if (!response.ok) {\n // Try to get more info from error response\n const clonedResponse = response.clone()\n try {\n const errorBody = await clonedResponse.json()\n console.error('[payload-puck] Puck Cloud error body:', errorBody)\n } catch {\n const errorText = await clonedResponse.text()\n console.error('[payload-puck] Puck Cloud error text:', errorText)\n }\n }\n\n return response\n } catch (e) {\n console.error('[payload-puck] AI handler error:', e)\n return Response.json(\n { error: e instanceof Error ? e.message : 'AI request failed' },\n { status: 500 }\n )\n }\n }\n}\n"],"names":["pagePatternSystemContext","AI_CONTEXT_COLLECTION","fetchDynamicContext","req","collections","payload","config","hasContextCollection","some","c","slug","undefined","result","find","collection","where","enabled","equals","sort","limit","docs","length","contextBlocks","map","doc","header","category","name","content","join","e","console","warn","createAiEndpointHandler","options","user","Response","json","error","status","puckHandler","cloudClient","apiKey","process","env","PUCK_API_KEY","body","root","fields","fieldName","field","Object","entries","f","type","ai","exclude","instructions","components","comp","protocol","headers","get","host","url","Headers","set","authHeader","webRequest","Request","method","JSON","stringify","aiOptions","contextParts","context","push","dynamicContext","tools","keys","toolContext","wrappedTools","tool","description","inputSchema","execute","input","response","ok","clonedResponse","clone","errorBody","errorText","text","Error","message"],"mappings":"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"}
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Collection slug for AI context
|
|
3
3
|
* Matches the auto-generated collection from createPuckPlugin
|
|
4
|
-
*/
|
|
5
|
-
const COLLECTION = 'puck-ai-context';
|
|
4
|
+
*/ const COLLECTION = 'puck-ai-context';
|
|
6
5
|
/**
|
|
7
6
|
* List all AI context entries, sorted by order
|
|
8
7
|
* Only returns enabled entries by default
|
|
9
8
|
*
|
|
10
9
|
* GET /api/puck/ai-context
|
|
11
10
|
* Query: ?all=true to include disabled entries
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
return async (req) => {
|
|
11
|
+
*/ export function createContextListHandler() {
|
|
12
|
+
return async (req)=>{
|
|
15
13
|
if (!req.user) {
|
|
16
|
-
return Response.json({
|
|
14
|
+
return Response.json({
|
|
15
|
+
error: 'Unauthorized'
|
|
16
|
+
}, {
|
|
17
|
+
status: 401
|
|
18
|
+
});
|
|
17
19
|
}
|
|
18
20
|
try {
|
|
19
21
|
// Check if we should include all entries (including disabled)
|
|
@@ -21,14 +23,21 @@ export function createContextListHandler() {
|
|
|
21
23
|
const result = await req.payload.find({
|
|
22
24
|
collection: COLLECTION,
|
|
23
25
|
sort: 'order',
|
|
24
|
-
limit: 100,
|
|
25
|
-
where: includeAll ? {} : {
|
|
26
|
+
limit: 100,
|
|
27
|
+
where: includeAll ? {} : {
|
|
28
|
+
enabled: {
|
|
29
|
+
equals: true
|
|
30
|
+
}
|
|
31
|
+
}
|
|
26
32
|
});
|
|
27
33
|
return Response.json(result);
|
|
28
|
-
}
|
|
29
|
-
catch (e) {
|
|
34
|
+
} catch (e) {
|
|
30
35
|
console.error('[payload-puck] Error listing context:', e);
|
|
31
|
-
return Response.json({
|
|
36
|
+
return Response.json({
|
|
37
|
+
error: e instanceof Error ? e.message : 'Failed to list context'
|
|
38
|
+
}, {
|
|
39
|
+
status: 500
|
|
40
|
+
});
|
|
32
41
|
}
|
|
33
42
|
};
|
|
34
43
|
}
|
|
@@ -37,26 +46,36 @@ export function createContextListHandler() {
|
|
|
37
46
|
*
|
|
38
47
|
* POST /api/puck/ai-context
|
|
39
48
|
* Body: { name: string, content: string, category?: string, enabled?: boolean, order?: number }
|
|
40
|
-
*/
|
|
41
|
-
|
|
42
|
-
return async (req) => {
|
|
49
|
+
*/ export function createContextCreateHandler() {
|
|
50
|
+
return async (req)=>{
|
|
43
51
|
if (!req.user) {
|
|
44
|
-
return Response.json({
|
|
52
|
+
return Response.json({
|
|
53
|
+
error: 'Unauthorized'
|
|
54
|
+
}, {
|
|
55
|
+
status: 401
|
|
56
|
+
});
|
|
45
57
|
}
|
|
46
58
|
try {
|
|
47
59
|
const data = await req.json?.();
|
|
48
60
|
if (!data) {
|
|
49
|
-
return Response.json({
|
|
61
|
+
return Response.json({
|
|
62
|
+
error: 'Request body is required'
|
|
63
|
+
}, {
|
|
64
|
+
status: 400
|
|
65
|
+
});
|
|
50
66
|
}
|
|
51
67
|
const doc = await req.payload.create({
|
|
52
68
|
collection: COLLECTION,
|
|
53
|
-
data
|
|
69
|
+
data
|
|
54
70
|
});
|
|
55
71
|
return Response.json(doc);
|
|
56
|
-
}
|
|
57
|
-
catch (e) {
|
|
72
|
+
} catch (e) {
|
|
58
73
|
console.error('[payload-puck] Error creating context:', e);
|
|
59
|
-
return Response.json({
|
|
74
|
+
return Response.json({
|
|
75
|
+
error: e instanceof Error ? e.message : 'Failed to create context'
|
|
76
|
+
}, {
|
|
77
|
+
status: 500
|
|
78
|
+
});
|
|
60
79
|
}
|
|
61
80
|
};
|
|
62
81
|
}
|
|
@@ -65,31 +84,45 @@ export function createContextCreateHandler() {
|
|
|
65
84
|
*
|
|
66
85
|
* PATCH /api/puck/ai-context/:id
|
|
67
86
|
* Body: { name?: string, content?: string, category?: string, enabled?: boolean, order?: number }
|
|
68
|
-
*/
|
|
69
|
-
|
|
70
|
-
return async (req) => {
|
|
87
|
+
*/ export function createContextUpdateHandler() {
|
|
88
|
+
return async (req)=>{
|
|
71
89
|
if (!req.user) {
|
|
72
|
-
return Response.json({
|
|
90
|
+
return Response.json({
|
|
91
|
+
error: 'Unauthorized'
|
|
92
|
+
}, {
|
|
93
|
+
status: 401
|
|
94
|
+
});
|
|
73
95
|
}
|
|
74
96
|
const id = req.routeParams?.id;
|
|
75
97
|
if (!id) {
|
|
76
|
-
return Response.json({
|
|
98
|
+
return Response.json({
|
|
99
|
+
error: 'Context ID is required'
|
|
100
|
+
}, {
|
|
101
|
+
status: 400
|
|
102
|
+
});
|
|
77
103
|
}
|
|
78
104
|
try {
|
|
79
105
|
const data = await req.json?.();
|
|
80
106
|
if (!data) {
|
|
81
|
-
return Response.json({
|
|
107
|
+
return Response.json({
|
|
108
|
+
error: 'Request body is required'
|
|
109
|
+
}, {
|
|
110
|
+
status: 400
|
|
111
|
+
});
|
|
82
112
|
}
|
|
83
113
|
const doc = await req.payload.update({
|
|
84
114
|
collection: COLLECTION,
|
|
85
115
|
id,
|
|
86
|
-
data
|
|
116
|
+
data
|
|
87
117
|
});
|
|
88
118
|
return Response.json(doc);
|
|
89
|
-
}
|
|
90
|
-
catch (e) {
|
|
119
|
+
} catch (e) {
|
|
91
120
|
console.error('[payload-puck] Error updating context:', e);
|
|
92
|
-
return Response.json({
|
|
121
|
+
return Response.json({
|
|
122
|
+
error: e instanceof Error ? e.message : 'Failed to update context'
|
|
123
|
+
}, {
|
|
124
|
+
status: 500
|
|
125
|
+
});
|
|
93
126
|
}
|
|
94
127
|
};
|
|
95
128
|
}
|
|
@@ -97,27 +130,40 @@ export function createContextUpdateHandler() {
|
|
|
97
130
|
* Delete an AI context entry
|
|
98
131
|
*
|
|
99
132
|
* DELETE /api/puck/ai-context/:id
|
|
100
|
-
*/
|
|
101
|
-
|
|
102
|
-
return async (req) => {
|
|
133
|
+
*/ export function createContextDeleteHandler() {
|
|
134
|
+
return async (req)=>{
|
|
103
135
|
if (!req.user) {
|
|
104
|
-
return Response.json({
|
|
136
|
+
return Response.json({
|
|
137
|
+
error: 'Unauthorized'
|
|
138
|
+
}, {
|
|
139
|
+
status: 401
|
|
140
|
+
});
|
|
105
141
|
}
|
|
106
142
|
const id = req.routeParams?.id;
|
|
107
143
|
if (!id) {
|
|
108
|
-
return Response.json({
|
|
144
|
+
return Response.json({
|
|
145
|
+
error: 'Context ID is required'
|
|
146
|
+
}, {
|
|
147
|
+
status: 400
|
|
148
|
+
});
|
|
109
149
|
}
|
|
110
150
|
try {
|
|
111
151
|
await req.payload.delete({
|
|
112
152
|
collection: COLLECTION,
|
|
113
|
-
id
|
|
153
|
+
id
|
|
114
154
|
});
|
|
115
|
-
return Response.json({
|
|
116
|
-
|
|
117
|
-
|
|
155
|
+
return Response.json({
|
|
156
|
+
success: true
|
|
157
|
+
});
|
|
158
|
+
} catch (e) {
|
|
118
159
|
console.error('[payload-puck] Error deleting context:', e);
|
|
119
|
-
return Response.json({
|
|
160
|
+
return Response.json({
|
|
161
|
+
error: e instanceof Error ? e.message : 'Failed to delete context'
|
|
162
|
+
}, {
|
|
163
|
+
status: 500
|
|
164
|
+
});
|
|
120
165
|
}
|
|
121
166
|
};
|
|
122
167
|
}
|
|
168
|
+
|
|
123
169
|
//# sourceMappingURL=context.js.map
|