@delmaredigital/payload-puck 0.6.13 → 0.6.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/EditWithPuckButton.d.ts +0 -1
- package/dist/admin/EditWithPuckButton.js +0 -2
- package/dist/admin/EditWithPuckCell.d.ts +0 -1
- package/dist/admin/EditWithPuckCell.js +0 -2
- package/dist/admin/PuckEditorView.d.ts +0 -1
- package/dist/admin/PuckEditorView.js +0 -2
- package/dist/admin/client.d.ts +0 -1
- package/dist/admin/client.js +0 -2
- package/dist/admin/generateAdminComponents.d.ts +0 -1
- package/dist/admin/generateAdminComponents.js +0 -2
- package/dist/admin/index.d.ts +0 -1
- package/dist/admin/index.js +0 -2
- package/dist/ai/collections/AiContext.d.ts +0 -1
- package/dist/ai/collections/AiContext.js +0 -2
- package/dist/ai/collections/AiPrompts.d.ts +0 -1
- package/dist/ai/collections/AiPrompts.js +0 -2
- package/dist/ai/createAiApiRoutes.d.ts +0 -1
- package/dist/ai/createAiApiRoutes.js +0 -2
- package/dist/ai/createAiGenerate.d.ts +0 -1
- package/dist/ai/createAiGenerate.js +0 -2
- package/dist/ai/createAiPlugin.d.ts +0 -1
- package/dist/ai/createAiPlugin.js +0 -2
- package/dist/ai/hooks/useAiContext.d.ts +0 -1
- package/dist/ai/hooks/useAiContext.js +0 -2
- package/dist/ai/hooks/useAiPrompts.d.ts +0 -1
- package/dist/ai/hooks/useAiPrompts.js +0 -2
- package/dist/ai/index.d.ts +0 -1
- package/dist/ai/index.js +0 -2
- package/dist/ai/plugins/ContextEditorPanel.d.ts +0 -1
- package/dist/ai/plugins/ContextEditorPanel.js +0 -2
- package/dist/ai/plugins/PromptEditorPanel.d.ts +0 -1
- package/dist/ai/plugins/PromptEditorPanel.js +0 -2
- package/dist/ai/plugins/contextEditorPlugin.d.ts +0 -1
- package/dist/ai/plugins/contextEditorPlugin.js +0 -2
- package/dist/ai/plugins/promptApiRoutes.d.ts +0 -1
- package/dist/ai/plugins/promptApiRoutes.js +0 -2
- package/dist/ai/plugins/promptEditorPlugin.d.ts +0 -1
- package/dist/ai/plugins/promptEditorPlugin.js +0 -2
- package/dist/ai/presets/componentAiDefaults.d.ts +0 -1
- package/dist/ai/presets/componentAiDefaults.js +0 -2
- package/dist/ai/presets/index.d.ts +0 -1
- package/dist/ai/presets/index.js +0 -2
- package/dist/ai/presets/instructions/interactive.d.ts +0 -1
- package/dist/ai/presets/instructions/interactive.js +0 -2
- package/dist/ai/presets/instructions/layout.d.ts +0 -1
- package/dist/ai/presets/instructions/layout.js +0 -2
- package/dist/ai/presets/instructions/media.d.ts +0 -1
- package/dist/ai/presets/instructions/media.js +0 -2
- package/dist/ai/presets/instructions/pagePatterns.d.ts +0 -1
- package/dist/ai/presets/instructions/pagePatterns.js +0 -2
- package/dist/ai/presets/instructions/schemas.d.ts +0 -1
- package/dist/ai/presets/instructions/schemas.js +0 -2
- package/dist/ai/presets/instructions/typography.d.ts +0 -1
- package/dist/ai/presets/instructions/typography.js +0 -2
- package/dist/ai/tools/index.d.ts +0 -1
- package/dist/ai/tools/index.js +0 -2
- package/dist/ai/types.d.ts +0 -1
- package/dist/ai/types.js +0 -2
- package/dist/ai/utils/injectAiConfig.d.ts +0 -1
- package/dist/ai/utils/injectAiConfig.js +0 -2
- package/dist/api/createPuckApiRoutes.d.ts +0 -1
- package/dist/api/createPuckApiRoutes.js +0 -2
- package/dist/api/createPuckApiRoutesVersions.d.ts +0 -1
- package/dist/api/createPuckApiRoutesVersions.js +0 -2
- package/dist/api/createPuckApiRoutesWithId.d.ts +0 -1
- package/dist/api/createPuckApiRoutesWithId.js +0 -2
- package/dist/api/index.d.ts +0 -1
- package/dist/api/index.js +0 -2
- package/dist/api/payload-config.d.js +1 -2
- package/dist/api/types.d.ts +0 -1
- package/dist/api/types.js +0 -2
- package/dist/api/utils/mapRootProps.d.ts +0 -1
- package/dist/api/utils/mapRootProps.js +0 -2
- package/dist/collections/Templates.d.ts +0 -1
- package/dist/collections/Templates.js +0 -2
- package/dist/components/AccordionClient.d.ts +0 -1
- package/dist/components/AccordionClient.js +0 -2
- package/dist/components/AnimatedWrapper.d.ts +0 -1
- package/dist/components/AnimatedWrapper.js +0 -2
- package/dist/components/exports.d.ts +0 -1
- package/dist/components/exports.js +0 -2
- package/dist/components/index.d.ts +0 -1
- package/dist/components/index.js +0 -2
- package/dist/components/interactive/Accordion.d.ts +0 -1
- package/dist/components/interactive/Accordion.js +0 -2
- package/dist/components/interactive/Accordion.server.d.ts +0 -1
- package/dist/components/interactive/Accordion.server.js +0 -2
- package/dist/components/interactive/Button.d.ts +0 -1
- package/dist/components/interactive/Button.js +0 -2
- package/dist/components/interactive/Button.server.d.ts +0 -1
- package/dist/components/interactive/Button.server.js +0 -2
- package/dist/components/interactive/Card.d.ts +0 -1
- package/dist/components/interactive/Card.js +0 -2
- package/dist/components/interactive/Card.server.d.ts +0 -1
- package/dist/components/interactive/Card.server.js +0 -2
- package/dist/components/interactive/Divider.d.ts +0 -1
- package/dist/components/interactive/Divider.js +0 -2
- package/dist/components/interactive/Divider.server.d.ts +0 -1
- package/dist/components/interactive/Divider.server.js +0 -2
- package/dist/components/interactive/index.d.ts +0 -1
- package/dist/components/interactive/index.js +0 -2
- package/dist/components/layout/Container.d.ts +0 -1
- package/dist/components/layout/Container.js +0 -2
- package/dist/components/layout/Container.server.d.ts +0 -1
- package/dist/components/layout/Container.server.js +0 -2
- package/dist/components/layout/Flex.d.ts +0 -1
- package/dist/components/layout/Flex.js +0 -2
- package/dist/components/layout/Flex.server.d.ts +0 -1
- package/dist/components/layout/Flex.server.js +0 -2
- package/dist/components/layout/Grid.d.ts +0 -1
- package/dist/components/layout/Grid.js +0 -2
- package/dist/components/layout/Grid.server.d.ts +0 -1
- package/dist/components/layout/Grid.server.js +0 -2
- package/dist/components/layout/Section.d.ts +0 -1
- package/dist/components/layout/Section.js +0 -2
- package/dist/components/layout/Section.server.d.ts +0 -1
- package/dist/components/layout/Section.server.js +0 -2
- package/dist/components/layout/Spacer.d.ts +0 -1
- package/dist/components/layout/Spacer.js +0 -2
- package/dist/components/layout/Spacer.server.d.ts +0 -1
- package/dist/components/layout/Spacer.server.js +0 -2
- package/dist/components/layout/Template.d.ts +0 -1
- package/dist/components/layout/Template.js +0 -2
- package/dist/components/layout/Template.server.d.ts +0 -1
- package/dist/components/layout/Template.server.js +0 -2
- package/dist/components/layout/index.d.ts +0 -1
- package/dist/components/layout/index.js +0 -2
- package/dist/components/media/Image.d.ts +0 -1
- package/dist/components/media/Image.js +0 -2
- package/dist/components/media/Image.server.d.ts +0 -1
- package/dist/components/media/Image.server.js +0 -2
- package/dist/components/media/index.d.ts +0 -1
- package/dist/components/media/index.js +0 -2
- package/dist/components/typography/Heading.d.ts +0 -1
- package/dist/components/typography/Heading.js +0 -2
- package/dist/components/typography/Heading.server.d.ts +0 -1
- package/dist/components/typography/Heading.server.js +0 -2
- package/dist/components/typography/RichText.editor.d.ts +0 -1
- package/dist/components/typography/RichText.editor.js +0 -2
- package/dist/components/typography/RichText.server.d.ts +0 -1
- package/dist/components/typography/RichText.server.js +0 -2
- package/dist/components/typography/Text.d.ts +0 -1
- package/dist/components/typography/Text.js +0 -2
- package/dist/components/typography/Text.server.d.ts +0 -1
- package/dist/components/typography/Text.server.js +0 -2
- package/dist/components/typography/index.d.ts +0 -1
- package/dist/components/typography/index.js +0 -2
- package/dist/config/config.editor.d.ts +0 -1
- package/dist/config/config.editor.js +0 -2
- package/dist/config/index.d.ts +0 -1
- package/dist/config/index.js +0 -2
- package/dist/config/merge.d.ts +0 -1
- package/dist/config/merge.js +0 -2
- package/dist/config/presets.d.ts +0 -1
- package/dist/config/presets.js +0 -2
- package/dist/config/types.d.ts +0 -1
- package/dist/config/types.js +0 -2
- package/dist/editor/PuckEditor.d.ts +0 -1
- package/dist/editor/PuckEditor.js +0 -2
- package/dist/editor/PuckEditorImpl.client.d.ts +0 -1
- package/dist/editor/PuckEditorImpl.client.js +0 -2
- package/dist/editor/components/DarkModeStyles.d.ts +0 -1
- package/dist/editor/components/DarkModeStyles.js +0 -2
- package/dist/editor/components/HeaderActions.d.ts +0 -1
- package/dist/editor/components/HeaderActions.js +0 -2
- package/dist/editor/components/IframeWrapper.d.ts +0 -1
- package/dist/editor/components/IframeWrapper.js +0 -2
- package/dist/editor/components/LoadingState.d.ts +0 -1
- package/dist/editor/components/LoadingState.js +0 -2
- package/dist/editor/components/PreviewModal.d.ts +0 -1
- package/dist/editor/components/PreviewModal.js +0 -2
- package/dist/editor/components/PreviewModeToggle.d.ts +0 -1
- package/dist/editor/components/PreviewModeToggle.js +0 -2
- package/dist/editor/components/VersionHistory.d.ts +0 -1
- package/dist/editor/components/VersionHistory.js +0 -2
- package/dist/editor/hooks/useDarkMode.d.ts +0 -1
- package/dist/editor/hooks/useDarkMode.js +0 -2
- package/dist/editor/hooks/useUnsavedChanges.d.ts +0 -1
- package/dist/editor/hooks/useUnsavedChanges.js +0 -2
- package/dist/editor/index.d.ts +0 -1
- package/dist/editor/index.js +0 -2
- package/dist/editor/plugins/VersionHistoryPanel.d.ts +0 -1
- package/dist/editor/plugins/VersionHistoryPanel.js +0 -2
- package/dist/editor/plugins/index.d.ts +0 -1
- package/dist/editor/plugins/index.js +0 -2
- package/dist/editor/plugins/versionHistoryPlugin.d.ts +0 -1
- package/dist/editor/plugins/versionHistoryPlugin.js +0 -2
- package/dist/editor/utils/detectPageTree.d.ts +0 -1
- package/dist/editor/utils/detectPageTree.js +0 -2
- package/dist/editor/utils/index.d.ts +0 -1
- package/dist/editor/utils/index.js +0 -2
- package/dist/editor/utils/injectPageTreeFields.d.ts +0 -1
- package/dist/editor/utils/injectPageTreeFields.js +0 -2
- package/dist/endpoints/ai.d.ts +0 -1
- package/dist/endpoints/ai.js +0 -2
- package/dist/endpoints/context.d.ts +0 -1
- package/dist/endpoints/context.js +0 -2
- package/dist/endpoints/index.d.ts +0 -1
- package/dist/endpoints/index.js +0 -2
- package/dist/endpoints/postcss.d.js +1 -2
- package/dist/endpoints/prompts.d.ts +0 -1
- package/dist/endpoints/prompts.js +0 -2
- package/dist/endpoints/styles.d.ts +0 -1
- package/dist/endpoints/styles.js +0 -2
- package/dist/exports/client.d.ts +0 -1
- package/dist/exports/client.js +0 -2
- package/dist/exports/rsc.d.ts +0 -1
- package/dist/exports/rsc.js +0 -2
- package/dist/fields/AlignmentField.d.ts +0 -1
- package/dist/fields/AlignmentField.js +0 -2
- package/dist/fields/AnimationField.d.ts +0 -1
- package/dist/fields/AnimationField.js +0 -2
- package/dist/fields/BackgroundField.d.ts +0 -1
- package/dist/fields/BackgroundField.js +0 -2
- package/dist/fields/BorderField.d.ts +0 -1
- package/dist/fields/BorderField.js +0 -2
- package/dist/fields/ColorPickerField.d.ts +0 -1
- package/dist/fields/ColorPickerField.js +0 -2
- package/dist/fields/ContentAlignmentField.d.ts +0 -1
- package/dist/fields/ContentAlignmentField.js +0 -2
- package/dist/fields/DimensionsField.d.ts +0 -1
- package/dist/fields/DimensionsField.js +0 -2
- package/dist/fields/FlexAlignmentField.d.ts +0 -1
- package/dist/fields/FlexAlignmentField.js +0 -2
- package/dist/fields/FolderPickerField.d.ts +0 -1
- package/dist/fields/FolderPickerField.js +0 -2
- package/dist/fields/GradientEditor.d.ts +0 -1
- package/dist/fields/GradientEditor.js +0 -2
- package/dist/fields/LockedField.d.ts +0 -1
- package/dist/fields/LockedField.js +0 -2
- package/dist/fields/MarginField.d.ts +0 -1
- package/dist/fields/MarginField.js +0 -2
- package/dist/fields/MediaField.d.ts +0 -1
- package/dist/fields/MediaField.js +0 -2
- package/dist/fields/PaddingField.d.ts +0 -1
- package/dist/fields/PaddingField.js +0 -2
- package/dist/fields/PageSegmentField.d.ts +0 -1
- package/dist/fields/PageSegmentField.js +0 -2
- package/dist/fields/ResetField.d.ts +0 -1
- package/dist/fields/ResetField.js +0 -2
- package/dist/fields/ResponsiveField.d.ts +0 -1
- package/dist/fields/ResponsiveField.js +0 -2
- package/dist/fields/ResponsiveVisibilityField.d.ts +0 -1
- package/dist/fields/ResponsiveVisibilityField.js +0 -2
- package/dist/fields/SizeField.d.ts +0 -1
- package/dist/fields/SizeField.js +0 -2
- package/dist/fields/SlugPreviewField.d.ts +0 -1
- package/dist/fields/SlugPreviewField.js +0 -2
- package/dist/fields/TemplateField.d.ts +0 -1
- package/dist/fields/TemplateField.js +0 -2
- package/dist/fields/TransformField.d.ts +0 -1
- package/dist/fields/TransformField.js +0 -2
- package/dist/fields/VerticalAlignmentField.d.ts +0 -1
- package/dist/fields/VerticalAlignmentField.js +0 -2
- package/dist/fields/WidthField.d.ts +0 -1
- package/dist/fields/WidthField.js +0 -2
- package/dist/fields/index.d.ts +0 -1
- package/dist/fields/index.js +0 -2
- package/dist/fields/richtext/controls/ColorPickerControl.d.ts +0 -1
- package/dist/fields/richtext/controls/ColorPickerControl.js +0 -2
- package/dist/fields/richtext/controls/DropdownPortal.d.ts +0 -1
- package/dist/fields/richtext/controls/DropdownPortal.js +0 -2
- package/dist/fields/richtext/controls/FontSizeControl.d.ts +0 -1
- package/dist/fields/richtext/controls/FontSizeControl.js +0 -2
- package/dist/fields/richtext/controls/HighlightControl.d.ts +0 -1
- package/dist/fields/richtext/controls/HighlightControl.js +0 -2
- package/dist/fields/richtext/controls/index.d.ts +0 -1
- package/dist/fields/richtext/controls/index.js +0 -2
- package/dist/fields/richtext/controls/shared.d.ts +0 -1
- package/dist/fields/richtext/controls/shared.js +0 -2
- package/dist/fields/richtext/createRichTextField.d.ts +0 -1
- package/dist/fields/richtext/createRichTextField.js +0 -2
- package/dist/fields/richtext/extensions/FontSize.d.ts +0 -1
- package/dist/fields/richtext/extensions/FontSize.js +0 -2
- package/dist/fields/richtext/extensions/index.d.ts +0 -1
- package/dist/fields/richtext/extensions/index.js +0 -2
- package/dist/fields/richtext/index.d.ts +0 -1
- package/dist/fields/richtext/index.js +0 -2
- package/dist/fields/shared.d.ts +0 -1
- package/dist/fields/shared.js +0 -2
- package/dist/hooks/index.d.ts +0 -1
- package/dist/hooks/index.js +0 -2
- package/dist/hooks/useResponsiveStyles.d.ts +0 -1
- package/dist/hooks/useResponsiveStyles.js +0 -2
- package/dist/hooks/useScrollAnimation.d.ts +0 -1
- package/dist/hooks/useScrollAnimation.js +0 -2
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -2
- package/dist/layouts/LayoutWrapper.d.ts +0 -1
- package/dist/layouts/LayoutWrapper.js +0 -2
- package/dist/layouts/defaults.d.ts +0 -1
- package/dist/layouts/defaults.js +0 -2
- package/dist/layouts/index.d.ts +0 -1
- package/dist/layouts/index.js +0 -2
- package/dist/layouts/types.d.ts +0 -1
- package/dist/layouts/types.js +0 -2
- package/dist/layouts/utils.d.ts +0 -1
- package/dist/layouts/utils.js +0 -2
- package/dist/next/index.d.ts +0 -1
- package/dist/next/index.js +0 -2
- package/dist/plugin/collections/Pages.d.ts +0 -1
- package/dist/plugin/collections/Pages.js +0 -2
- package/dist/plugin/fields/index.d.ts +0 -1
- package/dist/plugin/fields/index.js +0 -2
- package/dist/plugin/fields/types.d.ts +0 -1
- package/dist/plugin/fields/types.js +0 -2
- package/dist/plugin/hooks/index.d.ts +0 -1
- package/dist/plugin/hooks/index.js +0 -2
- package/dist/plugin/hooks/isHomepageUnique.d.ts +0 -1
- package/dist/plugin/hooks/isHomepageUnique.js +0 -2
- package/dist/plugin/index.d.ts +0 -1
- package/dist/plugin/index.js +0 -2
- package/dist/render/HybridPageRenderer.d.ts +0 -1
- package/dist/render/HybridPageRenderer.js +0 -2
- package/dist/render/PageRenderer.d.ts +0 -1
- package/dist/render/PageRenderer.js +0 -2
- package/dist/render/PuckEditor.client.d.ts +0 -1
- package/dist/render/PuckEditor.client.js +0 -2
- package/dist/render/index.d.ts +0 -1
- package/dist/render/index.js +0 -2
- package/dist/theme/context.d.ts +0 -1
- package/dist/theme/context.js +0 -2
- package/dist/theme/defaults.d.ts +0 -1
- package/dist/theme/defaults.js +0 -2
- package/dist/theme/example.d.ts +0 -1
- package/dist/theme/example.js +0 -2
- package/dist/theme/index.d.ts +0 -1
- package/dist/theme/index.js +0 -2
- package/dist/theme/types.d.ts +0 -1
- package/dist/theme/types.js +0 -2
- package/dist/theme/utils.d.ts +0 -1
- package/dist/theme/utils.js +0 -2
- package/dist/types/index.d.ts +0 -1
- package/dist/types/index.js +0 -2
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.js +0 -2
- package/dist/utils/migration.d.ts +0 -1
- package/dist/utils/migration.js +0 -2
- package/dist/utils/validation.d.ts +0 -1
- package/dist/utils/validation.js +0 -2
- package/dist/version.d.ts +1 -2
- package/dist/version.js +1 -3
- package/dist/views/PuckConfigContext.d.ts +0 -1
- package/dist/views/PuckConfigContext.js +0 -2
- package/dist/views/PuckEditorView.d.ts +0 -1
- package/dist/views/PuckEditorView.js +0 -2
- package/dist/views/index.d.ts +0 -1
- package/dist/views/index.js +0 -2
- package/package.json +1 -1
- package/dist/admin/EditWithPuckButton.d.ts.map +0 -1
- package/dist/admin/EditWithPuckButton.js.map +0 -1
- package/dist/admin/EditWithPuckCell.d.ts.map +0 -1
- package/dist/admin/EditWithPuckCell.js.map +0 -1
- package/dist/admin/PuckEditorView.d.ts.map +0 -1
- package/dist/admin/PuckEditorView.js.map +0 -1
- package/dist/admin/client.d.ts.map +0 -1
- package/dist/admin/client.js.map +0 -1
- package/dist/admin/generateAdminComponents.d.ts.map +0 -1
- package/dist/admin/generateAdminComponents.js.map +0 -1
- package/dist/admin/index.d.ts.map +0 -1
- package/dist/admin/index.js.map +0 -1
- package/dist/ai/collections/AiContext.d.ts.map +0 -1
- package/dist/ai/collections/AiContext.js.map +0 -1
- package/dist/ai/collections/AiPrompts.d.ts.map +0 -1
- package/dist/ai/collections/AiPrompts.js.map +0 -1
- package/dist/ai/createAiApiRoutes.d.ts.map +0 -1
- package/dist/ai/createAiApiRoutes.js.map +0 -1
- package/dist/ai/createAiGenerate.d.ts.map +0 -1
- package/dist/ai/createAiGenerate.js.map +0 -1
- package/dist/ai/createAiPlugin.d.ts.map +0 -1
- package/dist/ai/createAiPlugin.js.map +0 -1
- package/dist/ai/hooks/useAiContext.d.ts.map +0 -1
- package/dist/ai/hooks/useAiContext.js.map +0 -1
- package/dist/ai/hooks/useAiPrompts.d.ts.map +0 -1
- package/dist/ai/hooks/useAiPrompts.js.map +0 -1
- package/dist/ai/index.d.ts.map +0 -1
- package/dist/ai/index.js.map +0 -1
- package/dist/ai/plugins/ContextEditorPanel.d.ts.map +0 -1
- package/dist/ai/plugins/ContextEditorPanel.js.map +0 -1
- package/dist/ai/plugins/PromptEditorPanel.d.ts.map +0 -1
- package/dist/ai/plugins/PromptEditorPanel.js.map +0 -1
- package/dist/ai/plugins/contextEditorPlugin.d.ts.map +0 -1
- package/dist/ai/plugins/contextEditorPlugin.js.map +0 -1
- package/dist/ai/plugins/promptApiRoutes.d.ts.map +0 -1
- package/dist/ai/plugins/promptApiRoutes.js.map +0 -1
- package/dist/ai/plugins/promptEditorPlugin.d.ts.map +0 -1
- package/dist/ai/plugins/promptEditorPlugin.js.map +0 -1
- package/dist/ai/presets/componentAiDefaults.d.ts.map +0 -1
- package/dist/ai/presets/componentAiDefaults.js.map +0 -1
- package/dist/ai/presets/index.d.ts.map +0 -1
- package/dist/ai/presets/index.js.map +0 -1
- package/dist/ai/presets/instructions/interactive.d.ts.map +0 -1
- package/dist/ai/presets/instructions/interactive.js.map +0 -1
- package/dist/ai/presets/instructions/layout.d.ts.map +0 -1
- package/dist/ai/presets/instructions/layout.js.map +0 -1
- package/dist/ai/presets/instructions/media.d.ts.map +0 -1
- package/dist/ai/presets/instructions/media.js.map +0 -1
- package/dist/ai/presets/instructions/pagePatterns.d.ts.map +0 -1
- package/dist/ai/presets/instructions/pagePatterns.js.map +0 -1
- package/dist/ai/presets/instructions/schemas.d.ts.map +0 -1
- package/dist/ai/presets/instructions/schemas.js.map +0 -1
- package/dist/ai/presets/instructions/typography.d.ts.map +0 -1
- package/dist/ai/presets/instructions/typography.js.map +0 -1
- package/dist/ai/tools/index.d.ts.map +0 -1
- package/dist/ai/tools/index.js.map +0 -1
- package/dist/ai/types.d.ts.map +0 -1
- package/dist/ai/types.js.map +0 -1
- package/dist/ai/utils/injectAiConfig.d.ts.map +0 -1
- package/dist/ai/utils/injectAiConfig.js.map +0 -1
- package/dist/api/createPuckApiRoutes.d.ts.map +0 -1
- package/dist/api/createPuckApiRoutes.js.map +0 -1
- package/dist/api/createPuckApiRoutesVersions.d.ts.map +0 -1
- package/dist/api/createPuckApiRoutesVersions.js.map +0 -1
- package/dist/api/createPuckApiRoutesWithId.d.ts.map +0 -1
- package/dist/api/createPuckApiRoutesWithId.js.map +0 -1
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/index.js.map +0 -1
- package/dist/api/payload-config.d.js.map +0 -1
- package/dist/api/types.d.ts.map +0 -1
- package/dist/api/types.js.map +0 -1
- package/dist/api/utils/mapRootProps.d.ts.map +0 -1
- package/dist/api/utils/mapRootProps.js.map +0 -1
- package/dist/collections/Templates.d.ts.map +0 -1
- package/dist/collections/Templates.js.map +0 -1
- package/dist/components/AccordionClient.d.ts.map +0 -1
- package/dist/components/AccordionClient.js.map +0 -1
- package/dist/components/AnimatedWrapper.d.ts.map +0 -1
- package/dist/components/AnimatedWrapper.js.map +0 -1
- package/dist/components/exports.d.ts.map +0 -1
- package/dist/components/exports.js.map +0 -1
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/components/interactive/Accordion.d.ts.map +0 -1
- package/dist/components/interactive/Accordion.js.map +0 -1
- package/dist/components/interactive/Accordion.server.d.ts.map +0 -1
- package/dist/components/interactive/Accordion.server.js.map +0 -1
- package/dist/components/interactive/Button.d.ts.map +0 -1
- package/dist/components/interactive/Button.js.map +0 -1
- package/dist/components/interactive/Button.server.d.ts.map +0 -1
- package/dist/components/interactive/Button.server.js.map +0 -1
- package/dist/components/interactive/Card.d.ts.map +0 -1
- package/dist/components/interactive/Card.js.map +0 -1
- package/dist/components/interactive/Card.server.d.ts.map +0 -1
- package/dist/components/interactive/Card.server.js.map +0 -1
- package/dist/components/interactive/Divider.d.ts.map +0 -1
- package/dist/components/interactive/Divider.js.map +0 -1
- package/dist/components/interactive/Divider.server.d.ts.map +0 -1
- package/dist/components/interactive/Divider.server.js.map +0 -1
- package/dist/components/interactive/index.d.ts.map +0 -1
- package/dist/components/interactive/index.js.map +0 -1
- package/dist/components/layout/Container.d.ts.map +0 -1
- package/dist/components/layout/Container.js.map +0 -1
- package/dist/components/layout/Container.server.d.ts.map +0 -1
- package/dist/components/layout/Container.server.js.map +0 -1
- package/dist/components/layout/Flex.d.ts.map +0 -1
- package/dist/components/layout/Flex.js.map +0 -1
- package/dist/components/layout/Flex.server.d.ts.map +0 -1
- package/dist/components/layout/Flex.server.js.map +0 -1
- package/dist/components/layout/Grid.d.ts.map +0 -1
- package/dist/components/layout/Grid.js.map +0 -1
- package/dist/components/layout/Grid.server.d.ts.map +0 -1
- package/dist/components/layout/Grid.server.js.map +0 -1
- package/dist/components/layout/Section.d.ts.map +0 -1
- package/dist/components/layout/Section.js.map +0 -1
- package/dist/components/layout/Section.server.d.ts.map +0 -1
- package/dist/components/layout/Section.server.js.map +0 -1
- package/dist/components/layout/Spacer.d.ts.map +0 -1
- package/dist/components/layout/Spacer.js.map +0 -1
- package/dist/components/layout/Spacer.server.d.ts.map +0 -1
- package/dist/components/layout/Spacer.server.js.map +0 -1
- package/dist/components/layout/Template.d.ts.map +0 -1
- package/dist/components/layout/Template.js.map +0 -1
- package/dist/components/layout/Template.server.d.ts.map +0 -1
- package/dist/components/layout/Template.server.js.map +0 -1
- package/dist/components/layout/index.d.ts.map +0 -1
- package/dist/components/layout/index.js.map +0 -1
- package/dist/components/media/Image.d.ts.map +0 -1
- package/dist/components/media/Image.js.map +0 -1
- package/dist/components/media/Image.server.d.ts.map +0 -1
- package/dist/components/media/Image.server.js.map +0 -1
- package/dist/components/media/index.d.ts.map +0 -1
- package/dist/components/media/index.js.map +0 -1
- package/dist/components/typography/Heading.d.ts.map +0 -1
- package/dist/components/typography/Heading.js.map +0 -1
- package/dist/components/typography/Heading.server.d.ts.map +0 -1
- package/dist/components/typography/Heading.server.js.map +0 -1
- package/dist/components/typography/RichText.editor.d.ts.map +0 -1
- package/dist/components/typography/RichText.editor.js.map +0 -1
- package/dist/components/typography/RichText.server.d.ts.map +0 -1
- package/dist/components/typography/RichText.server.js.map +0 -1
- package/dist/components/typography/Text.d.ts.map +0 -1
- package/dist/components/typography/Text.js.map +0 -1
- package/dist/components/typography/Text.server.d.ts.map +0 -1
- package/dist/components/typography/Text.server.js.map +0 -1
- package/dist/components/typography/index.d.ts.map +0 -1
- package/dist/components/typography/index.js.map +0 -1
- package/dist/config/config.editor.d.ts.map +0 -1
- package/dist/config/config.editor.js.map +0 -1
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js.map +0 -1
- package/dist/config/merge.d.ts.map +0 -1
- package/dist/config/merge.js.map +0 -1
- package/dist/config/presets.d.ts.map +0 -1
- package/dist/config/presets.js.map +0 -1
- package/dist/config/types.d.ts.map +0 -1
- package/dist/config/types.js.map +0 -1
- package/dist/editor/PuckEditor.d.ts.map +0 -1
- package/dist/editor/PuckEditor.js.map +0 -1
- package/dist/editor/PuckEditorImpl.client.d.ts.map +0 -1
- package/dist/editor/PuckEditorImpl.client.js.map +0 -1
- package/dist/editor/components/DarkModeStyles.d.ts.map +0 -1
- package/dist/editor/components/DarkModeStyles.js.map +0 -1
- package/dist/editor/components/HeaderActions.d.ts.map +0 -1
- package/dist/editor/components/HeaderActions.js.map +0 -1
- package/dist/editor/components/IframeWrapper.d.ts.map +0 -1
- package/dist/editor/components/IframeWrapper.js.map +0 -1
- package/dist/editor/components/LoadingState.d.ts.map +0 -1
- package/dist/editor/components/LoadingState.js.map +0 -1
- package/dist/editor/components/PreviewModal.d.ts.map +0 -1
- package/dist/editor/components/PreviewModal.js.map +0 -1
- package/dist/editor/components/PreviewModeToggle.d.ts.map +0 -1
- package/dist/editor/components/PreviewModeToggle.js.map +0 -1
- package/dist/editor/components/VersionHistory.d.ts.map +0 -1
- package/dist/editor/components/VersionHistory.js.map +0 -1
- package/dist/editor/hooks/useDarkMode.d.ts.map +0 -1
- package/dist/editor/hooks/useDarkMode.js.map +0 -1
- package/dist/editor/hooks/useUnsavedChanges.d.ts.map +0 -1
- package/dist/editor/hooks/useUnsavedChanges.js.map +0 -1
- package/dist/editor/index.d.ts.map +0 -1
- package/dist/editor/index.js.map +0 -1
- package/dist/editor/plugins/VersionHistoryPanel.d.ts.map +0 -1
- package/dist/editor/plugins/VersionHistoryPanel.js.map +0 -1
- package/dist/editor/plugins/index.d.ts.map +0 -1
- package/dist/editor/plugins/index.js.map +0 -1
- package/dist/editor/plugins/versionHistoryPlugin.d.ts.map +0 -1
- package/dist/editor/plugins/versionHistoryPlugin.js.map +0 -1
- package/dist/editor/utils/detectPageTree.d.ts.map +0 -1
- package/dist/editor/utils/detectPageTree.js.map +0 -1
- package/dist/editor/utils/index.d.ts.map +0 -1
- package/dist/editor/utils/index.js.map +0 -1
- package/dist/editor/utils/injectPageTreeFields.d.ts.map +0 -1
- package/dist/editor/utils/injectPageTreeFields.js.map +0 -1
- package/dist/endpoints/ai.d.ts.map +0 -1
- package/dist/endpoints/ai.js.map +0 -1
- package/dist/endpoints/context.d.ts.map +0 -1
- package/dist/endpoints/context.js.map +0 -1
- package/dist/endpoints/index.d.ts.map +0 -1
- package/dist/endpoints/index.js.map +0 -1
- package/dist/endpoints/postcss.d.js.map +0 -1
- package/dist/endpoints/prompts.d.ts.map +0 -1
- package/dist/endpoints/prompts.js.map +0 -1
- package/dist/endpoints/styles.d.ts.map +0 -1
- package/dist/endpoints/styles.js.map +0 -1
- package/dist/exports/client.d.ts.map +0 -1
- package/dist/exports/client.js.map +0 -1
- package/dist/exports/rsc.d.ts.map +0 -1
- package/dist/exports/rsc.js.map +0 -1
- package/dist/fields/AlignmentField.d.ts.map +0 -1
- package/dist/fields/AlignmentField.js.map +0 -1
- package/dist/fields/AnimationField.d.ts.map +0 -1
- package/dist/fields/AnimationField.js.map +0 -1
- package/dist/fields/BackgroundField.d.ts.map +0 -1
- package/dist/fields/BackgroundField.js.map +0 -1
- package/dist/fields/BorderField.d.ts.map +0 -1
- package/dist/fields/BorderField.js.map +0 -1
- package/dist/fields/ColorPickerField.d.ts.map +0 -1
- package/dist/fields/ColorPickerField.js.map +0 -1
- package/dist/fields/ContentAlignmentField.d.ts.map +0 -1
- package/dist/fields/ContentAlignmentField.js.map +0 -1
- package/dist/fields/DimensionsField.d.ts.map +0 -1
- package/dist/fields/DimensionsField.js.map +0 -1
- package/dist/fields/FlexAlignmentField.d.ts.map +0 -1
- package/dist/fields/FlexAlignmentField.js.map +0 -1
- package/dist/fields/FolderPickerField.d.ts.map +0 -1
- package/dist/fields/FolderPickerField.js.map +0 -1
- package/dist/fields/GradientEditor.d.ts.map +0 -1
- package/dist/fields/GradientEditor.js.map +0 -1
- package/dist/fields/LockedField.d.ts.map +0 -1
- package/dist/fields/LockedField.js.map +0 -1
- package/dist/fields/MarginField.d.ts.map +0 -1
- package/dist/fields/MarginField.js.map +0 -1
- package/dist/fields/MediaField.d.ts.map +0 -1
- package/dist/fields/MediaField.js.map +0 -1
- package/dist/fields/PaddingField.d.ts.map +0 -1
- package/dist/fields/PaddingField.js.map +0 -1
- package/dist/fields/PageSegmentField.d.ts.map +0 -1
- package/dist/fields/PageSegmentField.js.map +0 -1
- package/dist/fields/ResetField.d.ts.map +0 -1
- package/dist/fields/ResetField.js.map +0 -1
- package/dist/fields/ResponsiveField.d.ts.map +0 -1
- package/dist/fields/ResponsiveField.js.map +0 -1
- package/dist/fields/ResponsiveVisibilityField.d.ts.map +0 -1
- package/dist/fields/ResponsiveVisibilityField.js.map +0 -1
- package/dist/fields/SizeField.d.ts.map +0 -1
- package/dist/fields/SizeField.js.map +0 -1
- package/dist/fields/SlugPreviewField.d.ts.map +0 -1
- package/dist/fields/SlugPreviewField.js.map +0 -1
- package/dist/fields/TemplateField.d.ts.map +0 -1
- package/dist/fields/TemplateField.js.map +0 -1
- package/dist/fields/TransformField.d.ts.map +0 -1
- package/dist/fields/TransformField.js.map +0 -1
- package/dist/fields/VerticalAlignmentField.d.ts.map +0 -1
- package/dist/fields/VerticalAlignmentField.js.map +0 -1
- package/dist/fields/WidthField.d.ts.map +0 -1
- package/dist/fields/WidthField.js.map +0 -1
- package/dist/fields/index.d.ts.map +0 -1
- package/dist/fields/index.js.map +0 -1
- package/dist/fields/richtext/controls/ColorPickerControl.d.ts.map +0 -1
- package/dist/fields/richtext/controls/ColorPickerControl.js.map +0 -1
- package/dist/fields/richtext/controls/DropdownPortal.d.ts.map +0 -1
- package/dist/fields/richtext/controls/DropdownPortal.js.map +0 -1
- package/dist/fields/richtext/controls/FontSizeControl.d.ts.map +0 -1
- package/dist/fields/richtext/controls/FontSizeControl.js.map +0 -1
- package/dist/fields/richtext/controls/HighlightControl.d.ts.map +0 -1
- package/dist/fields/richtext/controls/HighlightControl.js.map +0 -1
- package/dist/fields/richtext/controls/index.d.ts.map +0 -1
- package/dist/fields/richtext/controls/index.js.map +0 -1
- package/dist/fields/richtext/controls/shared.d.ts.map +0 -1
- package/dist/fields/richtext/controls/shared.js.map +0 -1
- package/dist/fields/richtext/createRichTextField.d.ts.map +0 -1
- package/dist/fields/richtext/createRichTextField.js.map +0 -1
- package/dist/fields/richtext/extensions/FontSize.d.ts.map +0 -1
- package/dist/fields/richtext/extensions/FontSize.js.map +0 -1
- package/dist/fields/richtext/extensions/index.d.ts.map +0 -1
- package/dist/fields/richtext/extensions/index.js.map +0 -1
- package/dist/fields/richtext/index.d.ts.map +0 -1
- package/dist/fields/richtext/index.js.map +0 -1
- package/dist/fields/shared.d.ts.map +0 -1
- package/dist/fields/shared.js.map +0 -1
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/useResponsiveStyles.d.ts.map +0 -1
- package/dist/hooks/useResponsiveStyles.js.map +0 -1
- package/dist/hooks/useScrollAnimation.d.ts.map +0 -1
- package/dist/hooks/useScrollAnimation.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/layouts/LayoutWrapper.d.ts.map +0 -1
- package/dist/layouts/LayoutWrapper.js.map +0 -1
- package/dist/layouts/defaults.d.ts.map +0 -1
- package/dist/layouts/defaults.js.map +0 -1
- package/dist/layouts/index.d.ts.map +0 -1
- package/dist/layouts/index.js.map +0 -1
- package/dist/layouts/types.d.ts.map +0 -1
- package/dist/layouts/types.js.map +0 -1
- package/dist/layouts/utils.d.ts.map +0 -1
- package/dist/layouts/utils.js.map +0 -1
- package/dist/next/index.d.ts.map +0 -1
- package/dist/next/index.js.map +0 -1
- package/dist/plugin/collections/Pages.d.ts.map +0 -1
- package/dist/plugin/collections/Pages.js.map +0 -1
- package/dist/plugin/fields/index.d.ts.map +0 -1
- package/dist/plugin/fields/index.js.map +0 -1
- package/dist/plugin/fields/types.d.ts.map +0 -1
- package/dist/plugin/fields/types.js.map +0 -1
- package/dist/plugin/hooks/index.d.ts.map +0 -1
- package/dist/plugin/hooks/index.js.map +0 -1
- package/dist/plugin/hooks/isHomepageUnique.d.ts.map +0 -1
- package/dist/plugin/hooks/isHomepageUnique.js.map +0 -1
- package/dist/plugin/index.d.ts.map +0 -1
- package/dist/plugin/index.js.map +0 -1
- package/dist/render/HybridPageRenderer.d.ts.map +0 -1
- package/dist/render/HybridPageRenderer.js.map +0 -1
- package/dist/render/PageRenderer.d.ts.map +0 -1
- package/dist/render/PageRenderer.js.map +0 -1
- package/dist/render/PuckEditor.client.d.ts.map +0 -1
- package/dist/render/PuckEditor.client.js.map +0 -1
- package/dist/render/index.d.ts.map +0 -1
- package/dist/render/index.js.map +0 -1
- package/dist/theme/context.d.ts.map +0 -1
- package/dist/theme/context.js.map +0 -1
- package/dist/theme/defaults.d.ts.map +0 -1
- package/dist/theme/defaults.js.map +0 -1
- package/dist/theme/example.d.ts.map +0 -1
- package/dist/theme/example.js.map +0 -1
- package/dist/theme/index.d.ts.map +0 -1
- package/dist/theme/index.js.map +0 -1
- package/dist/theme/types.d.ts.map +0 -1
- package/dist/theme/types.js.map +0 -1
- package/dist/theme/utils.d.ts.map +0 -1
- package/dist/theme/utils.js.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/migration.d.ts.map +0 -1
- package/dist/utils/migration.js.map +0 -1
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js.map +0 -1
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js.map +0 -1
- package/dist/views/PuckConfigContext.d.ts.map +0 -1
- package/dist/views/PuckConfigContext.js.map +0 -1
- package/dist/views/PuckEditorView.d.ts.map +0 -1
- package/dist/views/PuckEditorView.js.map +0 -1
- package/dist/views/index.d.ts.map +0 -1
- package/dist/views/index.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
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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"}
|
|
@@ -1 +0,0 @@
|
|
|
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.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generateAdminComponents.d.ts","sourceRoot":"","sources":["../../src/admin/generateAdminComponents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,cAAc,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;CACpC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,GAAE,qBAA0B,GAAG,KAAK,CAwB/E"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
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.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AiContext.d.ts","sourceRoot":"","sources":["../../../src/ai/collections/AiContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,EAAE,gBA0EjC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AiPrompts.d.ts","sourceRoot":"","sources":["../../../src/ai/collections/AiPrompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,gBAsDjC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createAiApiRoutes.d.ts","sourceRoot":"","sources":["../../src/ai/createAiApiRoutes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,kBAAkB,GAAG,mBAAmB,CAkFrF"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createAiGenerate.d.ts","sourceRoot":"","sources":["../../src/ai/createAiGenerate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAqB,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEzF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,kBAAkB,CAkD7E"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ai/createAiGenerate.ts"],"sourcesContent":["import type { Data as PuckData } from '@puckeditor/core'\nimport type { AiGenerateConfig, AiGenerateOptions, AiGenerateFunction } from './types.js'\n\n/**\n * Creates a headless AI page generation function\n *\n * Use this to generate Puck pages programmatically without the editor UI.\n * Useful for batch generation, automated workflows, or API-driven page creation.\n *\n * @example Basic generation\n * ```typescript\n * import { createAiGenerate } from '@delmaredigital/payload-puck/ai'\n * import { editorConfig } from '@delmaredigital/payload-puck/config/editor'\n * import config from '@payload-config'\n *\n * const generatePage = createAiGenerate({\n * payloadConfig: config,\n * auth: {\n * authenticate: async (req) => {\n * // Authenticate the request\n * return { authenticated: true, user: { id: 'system' } }\n * },\n * },\n * ai: {\n * context: 'We are Acme Corp. You build our marketing pages.',\n * },\n * })\n *\n * // Generate a new page\n * const pageData = await generatePage({\n * prompt: 'Create a landing page for our new product launch',\n * puckConfig: editorConfig,\n * })\n *\n * // Save to Payload\n * await payload.create({\n * collection: 'pages',\n * data: {\n * title: 'New Product Launch',\n * slug: 'new-product',\n * puckData: pageData,\n * },\n * })\n * ```\n *\n * @example Updating an existing page\n * ```typescript\n * // Fetch existing page\n * const page = await payload.findByID({ collection: 'pages', id: 'abc123' })\n *\n * // Update with AI\n * const updatedData = await generatePage({\n * prompt: 'Add a testimonials section after the hero',\n * puckConfig: editorConfig,\n * pageData: page.puckData, // Pass existing data\n * })\n *\n * // Save the update\n * await payload.update({\n * collection: 'pages',\n * id: 'abc123',\n * data: { puckData: updatedData },\n * })\n * ```\n */\nexport function createAiGenerate(config: AiGenerateConfig): AiGenerateFunction {\n const { ai } = config\n\n return async (options: AiGenerateOptions): Promise<PuckData> => {\n const { prompt, puckConfig, pageData } = options\n\n // Lazy import @puckeditor/cloud-client\n let generate: typeof import('@puckeditor/cloud-client').generate\n let tool: typeof import('@puckeditor/cloud-client').tool\n\n try {\n const cloudClient = await import('@puckeditor/cloud-client')\n generate = cloudClient.generate\n tool = cloudClient.tool\n } catch (e) {\n throw new Error(\n 'AI generation requires @puckeditor/cloud-client. Please install it with: pnpm add @puckeditor/cloud-client'\n )\n }\n\n // 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 // Call the generate API\n const result = await generate({\n prompt,\n config: puckConfig,\n context: ai?.context,\n apiKey: ai?.apiKey,\n host: ai?.host,\n pageData,\n tools: Object.keys(puckTools).length > 0 ? puckTools : undefined,\n })\n\n if (!result) {\n throw new Error('AI generation failed: no result returned')\n }\n\n return result as PuckData\n }\n}\n"],"names":["createAiGenerate","config","ai","options","prompt","puckConfig","pageData","generate","tool","cloudClient","e","Error","puckTools","tools","name","toolDef","Object","entries","description","inputSchema","execute","result","context","apiKey","host","keys","length","undefined"],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DC,GACD,OAAO,SAASA,iBAAiBC,MAAwB;IACvD,MAAM,EAAEC,EAAE,EAAE,GAAGD;IAEf,OAAO,OAAOE;QACZ,MAAM,EAAEC,MAAM,EAAEC,UAAU,EAAEC,QAAQ,EAAE,GAAGH;QAEzC,uCAAuC;QACvC,IAAII;QACJ,IAAIC;QAEJ,IAAI;YACF,MAAMC,cAAc,MAAM,MAAM,CAAC;YACjCF,WAAWE,YAAYF,QAAQ;YAC/BC,OAAOC,YAAYD,IAAI;QACzB,EAAE,OAAOE,GAAG;YACV,MAAM,IAAIC,MACR;QAEJ;QAEA,gDAAgD;QAChD,MAAMC,YAAqD,CAAC;QAC5D,IAAIV,IAAIW,OAAO;YACb,KAAK,MAAM,CAACC,MAAMC,QAAQ,IAAIC,OAAOC,OAAO,CAACf,GAAGW,KAAK,EAAG;gBACtDD,SAAS,CAACE,KAAK,GAAGN,KAAK;oBACrBU,aAAaH,QAAQG,WAAW;oBAChCC,aAAaJ,QAAQI,WAAW;oBAChCC,SAASL,QAAQK,OAAO;oBACxBN,MAAMC,QAAQD,IAAI;gBACpB;YACF;QACF;QAEA,wBAAwB;QACxB,MAAMO,SAAS,MAAMd,SAAS;YAC5BH;YACAH,QAAQI;YACRiB,SAASpB,IAAIoB;YACbC,QAAQrB,IAAIqB;YACZC,MAAMtB,IAAIsB;YACVlB;YACAO,OAAOG,OAAOS,IAAI,CAACb,WAAWc,MAAM,GAAG,IAAId,YAAYe;QACzD;QAEA,IAAI,CAACN,QAAQ;YACX,MAAM,IAAIV,MAAM;QAClB;QAEA,OAAOU;IACT;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createAiPlugin.d.ts","sourceRoot":"","sources":["../../src/ai/createAiPlugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,eAAoB,GAAG,UAAU,CA2BxE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ai/createAiPlugin.ts"],"sourcesContent":["'use client'\n\nimport type { Plugin as PuckPlugin } from '@puckeditor/core'\nimport type { AiPluginOptions } from './types.js'\n\n/**\n * Creates a Puck AI plugin for the editor\n *\n * Wraps @puckeditor/plugin-ai with sensible defaults for payload-puck.\n * This factory allows for runtime-configurable prompts (from database, API, etc.).\n *\n * @example Basic usage\n * ```tsx\n * import { createAiPlugin } from '@delmaredigital/payload-puck/ai'\n *\n * const aiPlugin = createAiPlugin({\n * host: '/api/puck',\n * examplePrompts: [\n * { label: 'Landing page', prompt: 'Create a landing page about our product' },\n * ],\n * })\n *\n * <PuckEditor plugins={[aiPlugin]} />\n * ```\n *\n * @example With runtime prompts from database\n * ```tsx\n * // Fetch prompts from Payload\n * const prompts = await payload.find({ collection: 'puck-ai-prompts' })\n *\n * const aiPlugin = createAiPlugin({\n * examplePrompts: prompts.docs.map(p => ({\n * label: p.label,\n * prompt: p.prompt,\n * })),\n * })\n *\n * <PuckEditor plugins={[aiPlugin]} />\n * ```\n */\nexport function createAiPlugin(options: AiPluginOptions = {}): PuckPlugin {\n const { host = '/api/puck', examplePrompts, onSubmit } = options\n\n // Dynamic import to avoid build errors if plugin-ai not installed\n // Also allows for tree-shaking when AI is not used\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { createAiPlugin: createPuckAiPlugin } = require('@puckeditor/plugin-ai')\n\n return createPuckAiPlugin({\n host,\n chat: {\n examplePrompts,\n onSubmit,\n },\n })\n } catch (e) {\n // Return a placeholder plugin if @puckeditor/plugin-ai is not installed\n console.warn(\n '[payload-puck] AI plugin requested but @puckeditor/plugin-ai not installed. ' +\n 'Install it with: pnpm add @puckeditor/plugin-ai'\n )\n\n return {\n name: 'ai-placeholder',\n }\n }\n}\n"],"names":["createAiPlugin","options","host","examplePrompts","onSubmit","createPuckAiPlugin","require","chat","e","console","warn","name"],"mappings":"AAAA;AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCC,GACD,OAAO,SAASA,eAAeC,UAA2B,CAAC,CAAC;IAC1D,MAAM,EAAEC,OAAO,WAAW,EAAEC,cAAc,EAAEC,QAAQ,EAAE,GAAGH;IAEzD,kEAAkE;IAClE,mDAAmD;IACnD,IAAI;QACF,iEAAiE;QACjE,MAAM,EAAED,gBAAgBK,kBAAkB,EAAE,GAAGC,QAAQ;QAEvD,OAAOD,mBAAmB;YACxBH;YACAK,MAAM;gBACJJ;gBACAC;YACF;QACF;IACF,EAAE,OAAOI,GAAG;QACV,wEAAwE;QACxEC,QAAQC,IAAI,CACV,iFACE;QAGJ,OAAO;YACLC,MAAM;QACR;IACF;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useAiContext.d.ts","sourceRoot":"","sources":["../../../src/ai/hooks/useAiContext.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,qCAAqC;AACrC,eAAO,MAAM,wBAAwB,4BAA4B,CAAA;AAEjE;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAI7C;AAED,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,+BAA+B;IAC/B,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,oBAAoB;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,iCAAiC;IACjC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;IAC9F,uCAAuC;IACvC,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;IAC3E,6BAA6B;IAC7B,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACzC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,kBAAkB,CA4IlF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/ai/hooks/useAiContext.ts"],"sourcesContent":["'use client'\n\nimport { useState, useEffect, useCallback } from 'react'\nimport type { AiContext } from '../types.js'\n\n/** Event name for context updates */\nexport const AI_CONTEXT_UPDATED_EVENT = 'puck:ai-context-updated'\n\n/**\n * Dispatches an event to notify that AI context has been updated\n * Call this after creating, editing, or deleting a context entry\n */\nexport function dispatchContextUpdated(): void {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent(AI_CONTEXT_UPDATED_EVENT))\n }\n}\n\nexport interface UseAiContextOptions {\n /**\n * API endpoint to fetch context from\n * @default '/api/puck/ai-context'\n */\n apiEndpoint?: string\n /**\n * Whether to enable fetching\n * @default true\n */\n enabled?: boolean\n /**\n * Whether to include disabled entries\n * @default false\n */\n includeDisabled?: boolean\n}\n\nexport interface UseAiContextReturn {\n /** Array of context entries */\n context: AiContext[]\n /** Loading state */\n loading: boolean\n /** Error message if any */\n error: string | null\n /** Refetch context entries */\n refetch: () => Promise<void>\n /** Create a new context entry */\n create: (data: Omit<AiContext, 'id' | 'createdAt' | 'updatedAt'>) => Promise<AiContext | null>\n /** Update an existing context entry */\n update: (id: string, data: Partial<AiContext>) => Promise<AiContext | null>\n /** Delete a context entry */\n remove: (id: string) => Promise<boolean>\n}\n\n/**\n * Hook to fetch and manage AI context entries client-side\n *\n * When context is updated via the context editor panel, this hook will\n * automatically refetch to stay in sync.\n *\n * @example\n * ```tsx\n * const { context, loading, create, update, remove } = useAiContext()\n *\n * // Create a new context entry\n * await create({ name: 'Brand Guidelines', content: '...', enabled: true })\n *\n * // Update an entry\n * await update(context[0].id, { content: 'Updated content' })\n *\n * // Delete an entry\n * await remove(context[0].id)\n * ```\n */\nexport function useAiContext(options: UseAiContextOptions = {}): UseAiContextReturn {\n const {\n apiEndpoint = '/api/puck/ai-context',\n enabled = true,\n includeDisabled = false,\n } = options\n\n const [context, setContext] = useState<AiContext[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n\n const fetchContext = useCallback(async () => {\n if (!enabled) {\n setLoading(false)\n return\n }\n\n try {\n setLoading(true)\n setError(null)\n\n const url = includeDisabled ? `${apiEndpoint}?all=true` : apiEndpoint\n const response = await fetch(url)\n\n if (!response.ok) {\n throw new Error('Failed to fetch context')\n }\n\n const data = await response.json()\n setContext(data.docs || [])\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load context')\n setContext([])\n } finally {\n setLoading(false)\n }\n }, [apiEndpoint, enabled, includeDisabled])\n\n // Create a new context entry\n const create = useCallback(\n async (\n data: Omit<AiContext, 'id' | 'createdAt' | 'updatedAt'>\n ): Promise<AiContext | null> => {\n try {\n const response = await fetch(apiEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(data),\n })\n\n if (!response.ok) {\n throw new Error('Failed to create context entry')\n }\n\n const newEntry = await response.json()\n dispatchContextUpdated()\n return newEntry\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to create context entry')\n return null\n }\n },\n [apiEndpoint]\n )\n\n // Update an existing context entry\n const update = useCallback(\n async (id: string, data: Partial<AiContext>): Promise<AiContext | null> => {\n try {\n const response = await fetch(`${apiEndpoint}/${id}`, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(data),\n })\n\n if (!response.ok) {\n throw new Error('Failed to update context entry')\n }\n\n const updatedEntry = await response.json()\n dispatchContextUpdated()\n return updatedEntry\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to update context entry')\n return null\n }\n },\n [apiEndpoint]\n )\n\n // Delete a context entry\n const remove = useCallback(\n async (id: string): Promise<boolean> => {\n try {\n const response = await fetch(`${apiEndpoint}/${id}`, {\n method: 'DELETE',\n })\n\n if (!response.ok) {\n throw new Error('Failed to delete context entry')\n }\n\n dispatchContextUpdated()\n return true\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to delete context entry')\n return false\n }\n },\n [apiEndpoint]\n )\n\n // Initial fetch\n useEffect(() => {\n fetchContext()\n }, [fetchContext])\n\n // Listen for context updates\n useEffect(() => {\n if (!enabled) return\n\n const handleUpdate = () => {\n fetchContext()\n }\n\n window.addEventListener(AI_CONTEXT_UPDATED_EVENT, handleUpdate)\n return () => {\n window.removeEventListener(AI_CONTEXT_UPDATED_EVENT, handleUpdate)\n }\n }, [enabled, fetchContext])\n\n return {\n context,\n loading,\n error,\n refetch: fetchContext,\n create,\n update,\n remove,\n }\n}\n"],"names":["useState","useEffect","useCallback","AI_CONTEXT_UPDATED_EVENT","dispatchContextUpdated","window","dispatchEvent","CustomEvent","useAiContext","options","apiEndpoint","enabled","includeDisabled","context","setContext","loading","setLoading","error","setError","fetchContext","url","response","fetch","ok","Error","data","json","docs","err","message","create","method","headers","body","JSON","stringify","newEntry","update","id","updatedEntry","remove","handleUpdate","addEventListener","removeEventListener","refetch"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useAiPrompts.d.ts","sourceRoot":"","sources":["../../../src/ai/hooks/useAiPrompts.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,oCAAoC;AACpC,eAAO,MAAM,wBAAwB,4BAA4B,CAAA;AAEjE;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAI7C;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,WAAW,GAAE,MAA+B,EAC5C,OAAO,GAAE,OAAc,GACtB;IACD,OAAO,EAAE,eAAe,EAAE,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7B,CA0DA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/ai/hooks/useAiPrompts.ts"],"sourcesContent":["'use client'\n\nimport { useState, useEffect, useCallback } from 'react'\nimport type { AiExamplePrompt } from '../types.js'\n\n/** Event name for prompt updates */\nexport const AI_PROMPTS_UPDATED_EVENT = 'puck:ai-prompts-updated'\n\n/**\n * Dispatches an event to notify that AI prompts have been updated\n * Call this after creating, editing, or deleting a prompt\n */\nexport function dispatchPromptsUpdated(): void {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent(AI_PROMPTS_UPDATED_EVENT))\n }\n}\n\n/**\n * Hook to fetch AI prompts client-side with auto-refresh support\n *\n * When prompts are updated via the prompt editor panel, this hook will\n * automatically refetch to stay in sync.\n *\n * @param apiEndpoint - API endpoint to fetch prompts from\n * @param enabled - Whether to enable fetching (default: true)\n * @returns Object with prompts array and loading state\n */\nexport function useAiPrompts(\n apiEndpoint: string = '/api/puck/ai-prompts',\n enabled: boolean = true\n): {\n prompts: AiExamplePrompt[]\n loading: boolean\n error: string | null\n refetch: () => Promise<void>\n} {\n const [prompts, setPrompts] = useState<AiExamplePrompt[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n\n const fetchPrompts = useCallback(async () => {\n if (!enabled) {\n setLoading(false)\n return\n }\n\n try {\n setLoading(true)\n setError(null)\n\n const response = await fetch(apiEndpoint)\n\n if (!response.ok) {\n throw new Error('Failed to fetch prompts')\n }\n\n const data = await response.json()\n // Transform API response to AiExamplePrompt format\n const fetchedPrompts: AiExamplePrompt[] = (data.docs || []).map(\n (doc: { label: string; prompt: string }) => ({\n label: doc.label,\n prompt: doc.prompt,\n })\n )\n setPrompts(fetchedPrompts)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load prompts')\n setPrompts([])\n } finally {\n setLoading(false)\n }\n }, [apiEndpoint, enabled])\n\n // Initial fetch\n useEffect(() => {\n fetchPrompts()\n }, [fetchPrompts])\n\n // Listen for prompt updates\n useEffect(() => {\n if (!enabled) return\n\n const handleUpdate = () => {\n fetchPrompts()\n }\n\n window.addEventListener(AI_PROMPTS_UPDATED_EVENT, handleUpdate)\n return () => {\n window.removeEventListener(AI_PROMPTS_UPDATED_EVENT, handleUpdate)\n }\n }, [enabled, fetchPrompts])\n\n return { prompts, loading, error, refetch: fetchPrompts }\n}\n"],"names":["useState","useEffect","useCallback","AI_PROMPTS_UPDATED_EVENT","dispatchPromptsUpdated","window","dispatchEvent","CustomEvent","useAiPrompts","apiEndpoint","enabled","prompts","setPrompts","loading","setLoading","error","setError","fetchPrompts","response","fetch","ok","Error","data","json","fetchedPrompts","docs","map","doc","label","prompt","err","message","handleUpdate","addEventListener","removeEventListener","refetch"],"mappings":"AAAA;AAEA,SAASA,QAAQ,EAAEC,SAAS,EAAEC,WAAW,QAAQ,QAAO;AAGxD,kCAAkC,GAClC,OAAO,MAAMC,2BAA2B,0BAAyB;AAEjE;;;CAGC,GACD,OAAO,SAASC;IACd,IAAI,OAAOC,WAAW,aAAa;QACjCA,OAAOC,aAAa,CAAC,IAAIC,YAAYJ;IACvC;AACF;AAEA;;;;;;;;;CASC,GACD,OAAO,SAASK,aACdC,cAAsB,sBAAsB,EAC5CC,UAAmB,IAAI;IAOvB,MAAM,CAACC,SAASC,WAAW,GAAGZ,SAA4B,EAAE;IAC5D,MAAM,CAACa,SAASC,WAAW,GAAGd,SAAS;IACvC,MAAM,CAACe,OAAOC,SAAS,GAAGhB,SAAwB;IAElD,MAAMiB,eAAef,YAAY;QAC/B,IAAI,CAACQ,SAAS;YACZI,WAAW;YACX;QACF;QAEA,IAAI;YACFA,WAAW;YACXE,SAAS;YAET,MAAME,WAAW,MAAMC,MAAMV;YAE7B,IAAI,CAACS,SAASE,EAAE,EAAE;gBAChB,MAAM,IAAIC,MAAM;YAClB;YAEA,MAAMC,OAAO,MAAMJ,SAASK,IAAI;YAChC,mDAAmD;YACnD,MAAMC,iBAAoC,AAACF,CAAAA,KAAKG,IAAI,IAAI,EAAE,AAAD,EAAGC,GAAG,CAC7D,CAACC,MAA4C,CAAA;oBAC3CC,OAAOD,IAAIC,KAAK;oBAChBC,QAAQF,IAAIE,MAAM;gBACpB,CAAA;YAEFjB,WAAWY;QACb,EAAE,OAAOM,KAAK;YACZd,SAASc,eAAeT,QAAQS,IAAIC,OAAO,GAAG;YAC9CnB,WAAW,EAAE;QACf,SAAU;YACRE,WAAW;QACb;IACF,GAAG;QAACL;QAAaC;KAAQ;IAEzB,gBAAgB;IAChBT,UAAU;QACRgB;IACF,GAAG;QAACA;KAAa;IAEjB,4BAA4B;IAC5BhB,UAAU;QACR,IAAI,CAACS,SAAS;QAEd,MAAMsB,eAAe;YACnBf;QACF;QAEAZ,OAAO4B,gBAAgB,CAAC9B,0BAA0B6B;QAClD,OAAO;YACL3B,OAAO6B,mBAAmB,CAAC/B,0BAA0B6B;QACvD;IACF,GAAG;QAACtB;QAASO;KAAa;IAE1B,OAAO;QAAEN;QAASE;QAASE;QAAOoB,SAASlB;IAAa;AAC1D"}
|
package/dist/ai/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAMH,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,8BAA8B,CAAA;AAMrC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAA;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AAMpE,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,yBAAyB,CAAA;AAMhC,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,KAAK,kBAAkB,GACxB,MAAM,kBAAkB,CAAA;AAMzB,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAGvE,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,kCAAkC,CAAA;AAGzC,OAAO,EACL,8BAA8B,EAC9B,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,EACvB,aAAa,EACb,cAAc,EAEd,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,oBAAoB,CAAA;AAM3B,YAAY,EAEV,MAAM,EACN,aAAa,EAEb,SAAS,EACT,aAAa,EACb,iBAAiB,EAEjB,kBAAkB,EAClB,mBAAmB,EAEnB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAElB,eAAe,EACf,eAAe,EACf,yBAAyB,EAEzB,oBAAoB,EAEpB,QAAQ,EAER,SAAS,EACT,0BAA0B,EAE1B,kBAAkB,GACnB,MAAM,YAAY,CAAA"}
|
package/dist/ai/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ai/index.ts"],"sourcesContent":["/**\n * @delmaredigital/payload-puck/ai\n *\n * AI integration for the Puck visual editor.\n *\n * This module provides:\n * - Server-side API route handlers for Puck AI chat\n * - Headless page generation for programmatic workflows\n * - Client-side AI plugin factory\n * - Prompt editor plugin for managing prompts in the editor\n * - Utilities for adding AI metadata to component configs\n *\n * @example Quick Start\n * ```typescript\n * // 1. Create API route for AI chat\n * // app/api/puck/[...all]/route.ts\n * import { createPuckAiApiRoutes } from '@delmaredigital/payload-puck/ai'\n *\n * export const POST = createPuckAiApiRoutes({\n * payloadConfig: config,\n * auth: { authenticate: async (req) => ... },\n * ai: { context: 'We are Acme Corp...' },\n * })\n *\n * // 2. Enable AI in the editor\n * <PuckEditor enableAi={true} />\n *\n * // Or use the factory for custom prompts\n * import { createAiPlugin } from '@delmaredigital/payload-puck/ai'\n * const aiPlugin = createAiPlugin({ examplePrompts: [...] })\n * <PuckEditor plugins={[aiPlugin]} />\n * ```\n *\n * @packageDocumentation\n */\n\n// =============================================================================\n// Server-side exports (API route factories)\n// =============================================================================\n\nexport { createPuckAiApiRoutes } from './createAiApiRoutes.js'\nexport { createAiGenerate } from './createAiGenerate.js'\nexport {\n createPromptApiRoutes,\n createPromptApiRoutesWithId,\n type PromptApiRoutesConfig,\n} from './plugins/promptApiRoutes.js'\n\n// =============================================================================\n// Client-side exports (plugins)\n// =============================================================================\n\nexport { createAiPlugin } from './createAiPlugin.js'\nexport { createPromptEditorPlugin } from './plugins/promptEditorPlugin.js'\nexport { PromptEditorPanel } from './plugins/PromptEditorPanel.js'\nexport { createContextEditorPlugin } from './plugins/contextEditorPlugin.js'\nexport { ContextEditorPanel } from './plugins/ContextEditorPanel.js'\n\n// =============================================================================\n// Client-side exports (hooks)\n// =============================================================================\n\nexport {\n useAiPrompts,\n dispatchPromptsUpdated,\n AI_PROMPTS_UPDATED_EVENT,\n} from './hooks/useAiPrompts.js'\n\nexport {\n useAiContext,\n dispatchContextUpdated,\n AI_CONTEXT_UPDATED_EVENT,\n type UseAiContextOptions,\n type UseAiContextReturn,\n} from './hooks/useAiContext.js'\n\n// =============================================================================\n// AI Tools\n// =============================================================================\n\nexport {\n createPayloadTools,\n createTool,\n type PayloadToolsConfig,\n} from './tools/index.js'\n\n// =============================================================================\n// Configuration utilities\n// =============================================================================\n\nexport { injectAiConfig, hasAiConfig } from './utils/injectAiConfig.js'\n\n// Legacy exports for backward compatibility\nexport {\n defaultComponentAiConfig,\n minimalComponentAiConfig,\n} from './presets/componentAiDefaults.js'\n\n// New comprehensive AI config exports\nexport {\n comprehensiveComponentAiConfig,\n pagePatternSystemContext,\n pagePatternContext,\n componentFieldReference,\n allComponents,\n componentNames,\n // Individual instruction modules for advanced usage\n typographyInstructions,\n layoutInstructions,\n interactiveInstructions,\n mediaInstructions,\n} from './presets/index.js'\n\n// =============================================================================\n// Type exports\n// =============================================================================\n\nexport type {\n // Tool types\n AiTool,\n AiToolContext,\n // Configuration types\n AiOptions,\n AiFieldConfig,\n AiComponentConfig,\n // API route types\n PuckAiRoutesConfig,\n PuckAiRouteHandlers,\n // Generation types\n AiGenerateConfig,\n AiGenerateOptions,\n AiGenerateFunction,\n // Plugin types\n AiPluginOptions,\n AiExamplePrompt,\n PromptEditorPluginOptions,\n // Config injection types\n ComponentAiOverrides,\n // Prompt types\n AiPrompt,\n // Context types\n AiContext,\n ContextEditorPluginOptions,\n // Plugin system types\n PuckPluginAiConfig,\n} from './types.js'\n"],"names":["createPuckAiApiRoutes","createAiGenerate","createPromptApiRoutes","createPromptApiRoutesWithId","createAiPlugin","createPromptEditorPlugin","PromptEditorPanel","createContextEditorPlugin","ContextEditorPanel","useAiPrompts","dispatchPromptsUpdated","AI_PROMPTS_UPDATED_EVENT","useAiContext","dispatchContextUpdated","AI_CONTEXT_UPDATED_EVENT","createPayloadTools","createTool","injectAiConfig","hasAiConfig","defaultComponentAiConfig","minimalComponentAiConfig","comprehensiveComponentAiConfig","pagePatternSystemContext","pagePatternContext","componentFieldReference","allComponents","componentNames","typographyInstructions","layoutInstructions","interactiveInstructions","mediaInstructions"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCC,GAED,gFAAgF;AAChF,4CAA4C;AAC5C,gFAAgF;AAEhF,SAASA,qBAAqB,QAAQ,yBAAwB;AAC9D,SAASC,gBAAgB,QAAQ,wBAAuB;AACxD,SACEC,qBAAqB,EACrBC,2BAA2B,QAEtB,+BAA8B;AAErC,gFAAgF;AAChF,gCAAgC;AAChC,gFAAgF;AAEhF,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,wBAAwB,QAAQ,kCAAiC;AAC1E,SAASC,iBAAiB,QAAQ,iCAAgC;AAClE,SAASC,yBAAyB,QAAQ,mCAAkC;AAC5E,SAASC,kBAAkB,QAAQ,kCAAiC;AAEpE,gFAAgF;AAChF,8BAA8B;AAC9B,gFAAgF;AAEhF,SACEC,YAAY,EACZC,sBAAsB,EACtBC,wBAAwB,QACnB,0BAAyB;AAEhC,SACEC,YAAY,EACZC,sBAAsB,EACtBC,wBAAwB,QAGnB,0BAAyB;AAEhC,gFAAgF;AAChF,WAAW;AACX,gFAAgF;AAEhF,SACEC,kBAAkB,EAClBC,UAAU,QAEL,mBAAkB;AAEzB,gFAAgF;AAChF,0BAA0B;AAC1B,gFAAgF;AAEhF,SAASC,cAAc,EAAEC,WAAW,QAAQ,4BAA2B;AAEvE,4CAA4C;AAC5C,SACEC,wBAAwB,EACxBC,wBAAwB,QACnB,mCAAkC;AAEzC,sCAAsC;AACtC,SACEC,8BAA8B,EAC9BC,wBAAwB,EACxBC,kBAAkB,EAClBC,uBAAuB,EACvBC,aAAa,EACbC,cAAc,EACd,oDAAoD;AACpDC,sBAAsB,EACtBC,kBAAkB,EAClBC,uBAAuB,EACvBC,iBAAiB,QACZ,qBAAoB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ContextEditorPanel.d.ts","sourceRoot":"","sources":["../../../src/ai/plugins/ContextEditorPanel.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAa,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAGxE,UAAU,uBAAwB,SAAQ,0BAA0B;CAAG;AAYvE;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,WAAoC,EACpC,OAAc,EACd,SAAgB,EAChB,SAAgB,GACjB,EAAE,uBAAuB,+BA0kBzB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/ai/plugins/ContextEditorPanel.tsx"],"sourcesContent":["'use client'\n\nimport { useState, useEffect, useCallback } from 'react'\nimport { Plus, Pencil, Trash2, ChevronUp, ChevronDown, Save, X, Eye, EyeOff } from 'lucide-react'\nimport type { AiContext, ContextEditorPluginOptions } from '../types.js'\nimport { dispatchContextUpdated } from '../hooks/useAiContext.js'\n\ninterface ContextEditorPanelProps extends ContextEditorPluginOptions {}\n\nconst CATEGORY_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\n/**\n * Panel component for managing AI context in the Puck editor sidebar\n */\nexport function ContextEditorPanel({\n apiEndpoint = '/api/puck/ai-context',\n canEdit = true,\n canCreate = true,\n canDelete = true,\n}: ContextEditorPanelProps) {\n const [context, setContext] = useState<AiContext[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n const [editingContext, setEditingContext] = useState<Partial<AiContext> | null>(null)\n const [saving, setSaving] = useState(false)\n\n // Fetch context on mount (include all, both enabled and disabled)\n const fetchContext = useCallback(async () => {\n try {\n setLoading(true)\n setError(null)\n const response = await fetch(`${apiEndpoint}?all=true`)\n\n if (!response.ok) {\n throw new Error('Failed to fetch context')\n }\n\n const data = await response.json()\n setContext(data.docs || [])\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load context')\n } finally {\n setLoading(false)\n }\n }, [apiEndpoint])\n\n useEffect(() => {\n fetchContext()\n }, [fetchContext])\n\n // Save context (create or update)\n const handleSave = async () => {\n if (!editingContext) return\n\n try {\n setSaving(true)\n setError(null)\n\n const isNew = !editingContext.id\n const url = isNew ? apiEndpoint : `${apiEndpoint}/${editingContext.id}`\n const method = isNew ? 'POST' : 'PATCH'\n\n const response = await fetch(url, {\n method,\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n name: editingContext.name,\n content: editingContext.content,\n category: editingContext.category,\n enabled: editingContext.enabled ?? true,\n order: editingContext.order ?? 0,\n }),\n })\n\n if (!response.ok) {\n throw new Error('Failed to save context')\n }\n\n setEditingContext(null)\n await fetchContext()\n dispatchContextUpdated()\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to save context')\n } finally {\n setSaving(false)\n }\n }\n\n // Toggle enabled state\n const handleToggleEnabled = async (entry: AiContext) => {\n try {\n setError(null)\n const response = await fetch(`${apiEndpoint}/${entry.id}`, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ enabled: !entry.enabled }),\n })\n\n if (!response.ok) {\n throw new Error('Failed to update context')\n }\n\n await fetchContext()\n dispatchContextUpdated()\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to update context')\n }\n }\n\n // Delete context\n const handleDelete = async (id: string) => {\n if (!confirm('Are you sure you want to delete this context entry?')) return\n\n try {\n setError(null)\n const response = await fetch(`${apiEndpoint}/${id}`, {\n method: 'DELETE',\n })\n\n if (!response.ok) {\n throw new Error('Failed to delete context')\n }\n\n await fetchContext()\n dispatchContextUpdated()\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to delete context')\n }\n }\n\n // Move context entry up (swap order with previous entry)\n const handleMoveUp = async (entry: AiContext, index: number) => {\n if (index === 0) return // Already at top\n\n try {\n setError(null)\n const prevEntry = context[index - 1]\n\n // Swap order values\n await Promise.all([\n fetch(`${apiEndpoint}/${entry.id}`, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ order: prevEntry.order }),\n }),\n fetch(`${apiEndpoint}/${prevEntry.id}`, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ order: entry.order }),\n }),\n ])\n\n await fetchContext()\n dispatchContextUpdated()\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to reorder context')\n }\n }\n\n // Move context entry down (swap order with next entry)\n const handleMoveDown = async (entry: AiContext, index: number) => {\n if (index >= context.length - 1) return // Already at bottom\n\n try {\n setError(null)\n const nextEntry = context[index + 1]\n\n // Swap order values\n await Promise.all([\n fetch(`${apiEndpoint}/${entry.id}`, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ order: nextEntry.order }),\n }),\n fetch(`${apiEndpoint}/${nextEntry.id}`, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ order: entry.order }),\n }),\n ])\n\n await fetchContext()\n dispatchContextUpdated()\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to reorder context')\n }\n }\n\n // Styles (matching PromptEditorPanel)\n const styles = {\n container: {\n padding: '16px',\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '12px',\n height: '100%',\n overflowY: 'auto' as const,\n },\n header: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '8px',\n },\n title: {\n fontSize: '14px',\n fontWeight: 600,\n color: 'var(--puck-color-grey-01)',\n margin: 0,\n },\n addButton: {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '6px 12px',\n fontSize: '13px',\n fontWeight: 500,\n color: 'var(--puck-color-azure-04)',\n backgroundColor: 'var(--puck-color-azure-12)',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n },\n contextItem: {\n display: 'flex',\n alignItems: 'flex-start',\n gap: '8px',\n padding: '12px',\n backgroundColor: 'var(--puck-color-grey-12)',\n borderRadius: '6px',\n border: '1px solid var(--puck-color-grey-09)',\n },\n contextItemDisabled: {\n opacity: 0.6,\n },\n contextContent: {\n flex: 1,\n minWidth: 0,\n },\n contextName: {\n fontSize: '13px',\n fontWeight: 500,\n color: 'var(--puck-color-grey-02)',\n marginBottom: '2px',\n },\n contextCategory: {\n fontSize: '11px',\n color: 'var(--puck-color-grey-05)',\n marginBottom: '4px',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.5px',\n },\n contextPreview: {\n fontSize: '12px',\n color: 'var(--puck-color-grey-04)',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n },\n contextActions: {\n display: 'flex',\n gap: '4px',\n },\n iconButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n padding: 0,\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n color: 'var(--puck-color-grey-05)',\n },\n form: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '12px',\n padding: '16px',\n backgroundColor: 'var(--puck-color-grey-11)',\n borderRadius: '6px',\n border: '1px solid var(--puck-color-grey-08)',\n },\n formField: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '4px',\n },\n formLabel: {\n fontSize: '12px',\n fontWeight: 500,\n color: 'var(--puck-color-grey-03)',\n },\n formInput: {\n padding: '8px 12px',\n fontSize: '13px',\n backgroundColor: 'var(--puck-color-white)',\n border: '1px solid var(--puck-color-grey-08)',\n borderRadius: '4px',\n color: 'var(--puck-color-grey-02)',\n },\n formSelect: {\n padding: '8px 12px',\n fontSize: '13px',\n backgroundColor: 'var(--puck-color-white)',\n border: '1px solid var(--puck-color-grey-08)',\n borderRadius: '4px',\n color: 'var(--puck-color-grey-02)',\n },\n formTextarea: {\n padding: '8px 12px',\n fontSize: '13px',\n backgroundColor: 'var(--puck-color-white)',\n border: '1px solid var(--puck-color-grey-08)',\n borderRadius: '4px',\n color: 'var(--puck-color-grey-02)',\n resize: 'vertical' as const,\n minHeight: '120px',\n fontFamily: 'monospace',\n },\n formCheckbox: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n },\n formActions: {\n display: 'flex',\n gap: '8px',\n justifyContent: 'flex-end',\n },\n saveButton: {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '8px 16px',\n fontSize: '13px',\n fontWeight: 500,\n color: 'white',\n backgroundColor: 'var(--puck-color-azure-04)',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n },\n cancelButton: {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '8px 16px',\n fontSize: '13px',\n fontWeight: 500,\n color: 'var(--puck-color-grey-04)',\n backgroundColor: 'var(--puck-color-grey-10)',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n },\n errorMessage: {\n padding: '12px',\n backgroundColor: 'var(--puck-color-red-11)',\n border: '1px solid var(--puck-color-red-08)',\n borderRadius: '4px',\n color: 'var(--puck-color-red-04)',\n fontSize: '13px',\n },\n emptyState: {\n textAlign: 'center' as const,\n padding: '24px',\n color: 'var(--puck-color-grey-05)',\n fontSize: '13px',\n },\n loading: {\n textAlign: 'center' as const,\n padding: '24px',\n color: 'var(--puck-color-grey-05)',\n fontSize: '13px',\n },\n helpText: {\n fontSize: '11px',\n color: 'var(--puck-color-grey-05)',\n marginTop: '2px',\n },\n }\n\n // Render loading state\n if (loading) {\n return (\n <div style={styles.container}>\n <div style={styles.loading}>Loading context...</div>\n </div>\n )\n }\n\n // Render edit form\n if (editingContext) {\n return (\n <div style={styles.container}>\n <div style={styles.form}>\n <div style={styles.formField}>\n <label style={styles.formLabel}>Name</label>\n <input\n type=\"text\"\n style={styles.formInput}\n value={editingContext.name || ''}\n onChange={(e) =>\n setEditingContext({ ...editingContext, name: e.target.value })\n }\n placeholder=\"e.g., Brand Guidelines\"\n />\n </div>\n\n <div style={styles.formField}>\n <label style={styles.formLabel}>Category</label>\n <select\n style={styles.formSelect}\n value={editingContext.category || ''}\n onChange={(e) =>\n setEditingContext({\n ...editingContext,\n category: e.target.value as AiContext['category'],\n })\n }\n >\n <option value=\"\">Select a category...</option>\n {CATEGORY_OPTIONS.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n\n <div style={styles.formField}>\n <label style={styles.formLabel}>Content</label>\n <textarea\n style={styles.formTextarea}\n value={editingContext.content || ''}\n onChange={(e) =>\n setEditingContext({ ...editingContext, content: e.target.value })\n }\n placeholder=\"Enter markdown content for the AI to use...\"\n />\n <div style={styles.helpText}>\n Use markdown formatting. This content will be included in AI prompts.\n </div>\n </div>\n\n <div style={styles.formField}>\n <label style={styles.formCheckbox}>\n <input\n type=\"checkbox\"\n checked={editingContext.enabled ?? true}\n onChange={(e) =>\n setEditingContext({ ...editingContext, enabled: e.target.checked })\n }\n />\n <span style={styles.formLabel}>Enabled</span>\n </label>\n </div>\n\n {error && <div style={styles.errorMessage}>{error}</div>}\n\n <div style={styles.formActions}>\n <button\n type=\"button\"\n style={styles.cancelButton}\n onClick={() => setEditingContext(null)}\n disabled={saving}\n >\n <X size={14} />\n Cancel\n </button>\n <button\n type=\"button\"\n style={styles.saveButton}\n onClick={handleSave}\n disabled={saving || !editingContext.name || !editingContext.content}\n >\n <Save size={14} />\n {saving ? 'Saving...' : 'Save'}\n </button>\n </div>\n </div>\n </div>\n )\n }\n\n // Render context list\n return (\n <div style={styles.container}>\n <div style={styles.header}>\n <h3 style={styles.title}>AI Context</h3>\n {canCreate && (\n <button\n type=\"button\"\n style={styles.addButton}\n onClick={() =>\n setEditingContext({ name: '', content: '', enabled: true, order: 0 })\n }\n >\n <Plus size={14} />\n Add\n </button>\n )}\n </div>\n\n {error && <div style={styles.errorMessage}>{error}</div>}\n\n {context.length === 0 ? (\n <div style={styles.emptyState}>\n No context entries yet.\n {canCreate && ' Click \"Add\" to create one.'}\n </div>\n ) : (\n context.map((entry, index) => (\n <div\n key={entry.id}\n style={{\n ...styles.contextItem,\n ...(entry.enabled ? {} : styles.contextItemDisabled),\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: '2px' }}>\n <button\n type=\"button\"\n style={{\n ...styles.iconButton,\n width: '20px',\n height: '20px',\n opacity: index === 0 ? 0.3 : 1,\n cursor: index === 0 ? 'default' : 'pointer',\n }}\n onClick={() => handleMoveUp(entry, index)}\n disabled={index === 0}\n title=\"Move up\"\n >\n <ChevronUp size={14} />\n </button>\n <button\n type=\"button\"\n style={{\n ...styles.iconButton,\n width: '20px',\n height: '20px',\n opacity: index >= context.length - 1 ? 0.3 : 1,\n cursor: index >= context.length - 1 ? 'default' : 'pointer',\n }}\n onClick={() => handleMoveDown(entry, index)}\n disabled={index >= context.length - 1}\n title=\"Move down\"\n >\n <ChevronDown size={14} />\n </button>\n </div>\n <div style={styles.contextContent}>\n <div style={styles.contextName}>{entry.name}</div>\n {entry.category && (\n <div style={styles.contextCategory}>\n {CATEGORY_OPTIONS.find((o) => o.value === entry.category)?.label ||\n entry.category}\n </div>\n )}\n <div style={styles.contextPreview}>\n {entry.content.slice(0, 100)}\n {entry.content.length > 100 ? '...' : ''}\n </div>\n </div>\n <div style={styles.contextActions}>\n {canEdit && (\n <button\n type=\"button\"\n style={styles.iconButton}\n onClick={() => handleToggleEnabled(entry)}\n title={entry.enabled ? 'Disable context' : 'Enable context'}\n >\n {entry.enabled ? <Eye size={14} /> : <EyeOff size={14} />}\n </button>\n )}\n {canEdit && (\n <button\n type=\"button\"\n style={styles.iconButton}\n onClick={() => setEditingContext(entry)}\n title=\"Edit context\"\n >\n <Pencil size={14} />\n </button>\n )}\n {canDelete && (\n <button\n type=\"button\"\n style={styles.iconButton}\n onClick={() => handleDelete(entry.id)}\n title=\"Delete context\"\n >\n <Trash2 size={14} />\n </button>\n )}\n </div>\n </div>\n ))\n )}\n </div>\n )\n}\n"],"names":["useState","useEffect","useCallback","Plus","Pencil","Trash2","ChevronUp","ChevronDown","Save","X","Eye","EyeOff","dispatchContextUpdated","CATEGORY_OPTIONS","label","value","ContextEditorPanel","apiEndpoint","canEdit","canCreate","canDelete","context","setContext","loading","setLoading","error","setError","editingContext","setEditingContext","saving","setSaving","fetchContext","response","fetch","ok","Error","data","json","docs","err","message","handleSave","isNew","id","url","method","headers","body","JSON","stringify","name","content","category","enabled","order","handleToggleEnabled","entry","handleDelete","confirm","handleMoveUp","index","prevEntry","Promise","all","handleMoveDown","length","nextEntry","styles","container","padding","display","flexDirection","gap","height","overflowY","header","justifyContent","alignItems","marginBottom","title","fontSize","fontWeight","color","margin","addButton","backgroundColor","border","borderRadius","cursor","contextItem","contextItemDisabled","opacity","contextContent","flex","minWidth","contextName","contextCategory","textTransform","letterSpacing","contextPreview","overflow","textOverflow","whiteSpace","contextActions","iconButton","width","form","formField","formLabel","formInput","formSelect","formTextarea","resize","minHeight","fontFamily","formCheckbox","formActions","saveButton","cancelButton","errorMessage","emptyState","textAlign","helpText","marginTop","div","style","input","type","onChange","e","target","placeholder","select","option","map","opt","textarea","checked","span","button","onClick","disabled","size","h3","find","o","slice"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PromptEditorPanel.d.ts","sourceRoot":"","sources":["../../../src/ai/plugins/PromptEditorPanel.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAY,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAGtE,UAAU,sBAAuB,SAAQ,yBAAyB;CAAG;AAErE;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,WAAoC,EACpC,OAAc,EACd,SAAgB,EAChB,SAAgB,GACjB,EAAE,sBAAsB,+BA8YxB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/ai/plugins/PromptEditorPanel.tsx"],"sourcesContent":["'use client'\n\nimport { useState, useEffect, useCallback } from 'react'\nimport { Plus, Pencil, Trash2, GripVertical, Save, X } from 'lucide-react'\nimport type { AiPrompt, PromptEditorPluginOptions } from '../types.js'\nimport { dispatchPromptsUpdated } from '../hooks/useAiPrompts.js'\n\ninterface PromptEditorPanelProps extends PromptEditorPluginOptions {}\n\n/**\n * Panel component for managing AI prompts in the Puck editor sidebar\n */\nexport function PromptEditorPanel({\n apiEndpoint = '/api/puck/ai-prompts',\n canEdit = true,\n canCreate = true,\n canDelete = true,\n}: PromptEditorPanelProps) {\n const [prompts, setPrompts] = useState<AiPrompt[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n const [editingPrompt, setEditingPrompt] = useState<Partial<AiPrompt> | null>(null)\n const [saving, setSaving] = useState(false)\n\n // Fetch prompts on mount\n const fetchPrompts = useCallback(async () => {\n try {\n setLoading(true)\n setError(null)\n const response = await fetch(apiEndpoint)\n\n if (!response.ok) {\n throw new Error('Failed to fetch prompts')\n }\n\n const data = await response.json()\n setPrompts(data.docs || [])\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load prompts')\n } finally {\n setLoading(false)\n }\n }, [apiEndpoint])\n\n useEffect(() => {\n fetchPrompts()\n }, [fetchPrompts])\n\n // Save prompt (create or update)\n const handleSave = async () => {\n if (!editingPrompt) return\n\n try {\n setSaving(true)\n setError(null)\n\n const isNew = !editingPrompt.id\n const url = isNew ? apiEndpoint : `${apiEndpoint}/${editingPrompt.id}`\n const method = isNew ? 'POST' : 'PATCH'\n\n const response = await fetch(url, {\n method,\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n label: editingPrompt.label,\n prompt: editingPrompt.prompt,\n category: editingPrompt.category,\n order: editingPrompt.order,\n }),\n })\n\n if (!response.ok) {\n throw new Error('Failed to save prompt')\n }\n\n setEditingPrompt(null)\n await fetchPrompts()\n // Notify AI plugin to refresh its prompts\n dispatchPromptsUpdated()\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to save prompt')\n } finally {\n setSaving(false)\n }\n }\n\n // Delete prompt\n const handleDelete = async (id: string) => {\n if (!confirm('Are you sure you want to delete this prompt?')) return\n\n try {\n setError(null)\n const response = await fetch(`${apiEndpoint}/${id}`, {\n method: 'DELETE',\n })\n\n if (!response.ok) {\n throw new Error('Failed to delete prompt')\n }\n\n await fetchPrompts()\n // Notify AI plugin to refresh its prompts\n dispatchPromptsUpdated()\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to delete prompt')\n }\n }\n\n // Styles\n const styles = {\n container: {\n padding: '16px',\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '12px',\n height: '100%',\n overflowY: 'auto' as const,\n },\n header: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '8px',\n },\n title: {\n fontSize: '14px',\n fontWeight: 600,\n color: 'var(--puck-color-grey-01)',\n margin: 0,\n },\n addButton: {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '6px 12px',\n fontSize: '13px',\n fontWeight: 500,\n color: 'var(--puck-color-azure-04)',\n backgroundColor: 'var(--puck-color-azure-12)',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n },\n promptItem: {\n display: 'flex',\n alignItems: 'flex-start',\n gap: '8px',\n padding: '12px',\n backgroundColor: 'var(--puck-color-grey-12)',\n borderRadius: '6px',\n border: '1px solid var(--puck-color-grey-09)',\n },\n promptContent: {\n flex: 1,\n minWidth: 0,\n },\n promptLabel: {\n fontSize: '13px',\n fontWeight: 500,\n color: 'var(--puck-color-grey-02)',\n marginBottom: '4px',\n },\n promptText: {\n fontSize: '12px',\n color: 'var(--puck-color-grey-04)',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n },\n promptActions: {\n display: 'flex',\n gap: '4px',\n },\n iconButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n padding: 0,\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n color: 'var(--puck-color-grey-05)',\n },\n form: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '12px',\n padding: '16px',\n backgroundColor: 'var(--puck-color-grey-11)',\n borderRadius: '6px',\n border: '1px solid var(--puck-color-grey-08)',\n },\n formField: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '4px',\n },\n formLabel: {\n fontSize: '12px',\n fontWeight: 500,\n color: 'var(--puck-color-grey-03)',\n },\n formInput: {\n padding: '8px 12px',\n fontSize: '13px',\n backgroundColor: 'var(--puck-color-white)',\n border: '1px solid var(--puck-color-grey-08)',\n borderRadius: '4px',\n color: 'var(--puck-color-grey-02)',\n },\n formTextarea: {\n padding: '8px 12px',\n fontSize: '13px',\n backgroundColor: 'var(--puck-color-white)',\n border: '1px solid var(--puck-color-grey-08)',\n borderRadius: '4px',\n color: 'var(--puck-color-grey-02)',\n resize: 'vertical' as const,\n minHeight: '80px',\n },\n formActions: {\n display: 'flex',\n gap: '8px',\n justifyContent: 'flex-end',\n },\n saveButton: {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '8px 16px',\n fontSize: '13px',\n fontWeight: 500,\n color: 'white',\n backgroundColor: 'var(--puck-color-azure-04)',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n },\n cancelButton: {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '8px 16px',\n fontSize: '13px',\n fontWeight: 500,\n color: 'var(--puck-color-grey-04)',\n backgroundColor: 'var(--puck-color-grey-10)',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n },\n errorMessage: {\n padding: '12px',\n backgroundColor: 'var(--puck-color-red-11)',\n border: '1px solid var(--puck-color-red-08)',\n borderRadius: '4px',\n color: 'var(--puck-color-red-04)',\n fontSize: '13px',\n },\n emptyState: {\n textAlign: 'center' as const,\n padding: '24px',\n color: 'var(--puck-color-grey-05)',\n fontSize: '13px',\n },\n loading: {\n textAlign: 'center' as const,\n padding: '24px',\n color: 'var(--puck-color-grey-05)',\n fontSize: '13px',\n },\n }\n\n // Render loading state\n if (loading) {\n return (\n <div style={styles.container}>\n <div style={styles.loading}>Loading prompts...</div>\n </div>\n )\n }\n\n // Render edit form\n if (editingPrompt) {\n return (\n <div style={styles.container}>\n <div style={styles.form}>\n <div style={styles.formField}>\n <label style={styles.formLabel}>Label</label>\n <input\n type=\"text\"\n style={styles.formInput}\n value={editingPrompt.label || ''}\n onChange={(e) =>\n setEditingPrompt({ ...editingPrompt, label: e.target.value })\n }\n placeholder=\"e.g., Landing page\"\n />\n </div>\n <div style={styles.formField}>\n <label style={styles.formLabel}>Prompt</label>\n <textarea\n style={styles.formTextarea}\n value={editingPrompt.prompt || ''}\n onChange={(e) =>\n setEditingPrompt({ ...editingPrompt, prompt: e.target.value })\n }\n placeholder=\"e.g., Create a landing page about our product...\"\n />\n </div>\n <div style={styles.formField}>\n <label style={styles.formLabel}>Category (optional)</label>\n <input\n type=\"text\"\n style={styles.formInput}\n value={editingPrompt.category || ''}\n onChange={(e) =>\n setEditingPrompt({ ...editingPrompt, category: e.target.value })\n }\n placeholder=\"e.g., Marketing\"\n />\n </div>\n\n {error && <div style={styles.errorMessage}>{error}</div>}\n\n <div style={styles.formActions}>\n <button\n type=\"button\"\n style={styles.cancelButton}\n onClick={() => setEditingPrompt(null)}\n disabled={saving}\n >\n <X size={14} />\n Cancel\n </button>\n <button\n type=\"button\"\n style={styles.saveButton}\n onClick={handleSave}\n disabled={saving || !editingPrompt.label || !editingPrompt.prompt}\n >\n <Save size={14} />\n {saving ? 'Saving...' : 'Save'}\n </button>\n </div>\n </div>\n </div>\n )\n }\n\n // Render prompt list\n return (\n <div style={styles.container}>\n <div style={styles.header}>\n <h3 style={styles.title}>Example Prompts</h3>\n {canCreate && (\n <button\n type=\"button\"\n style={styles.addButton}\n onClick={() => setEditingPrompt({ label: '', prompt: '' })}\n >\n <Plus size={14} />\n Add\n </button>\n )}\n </div>\n\n {error && <div style={styles.errorMessage}>{error}</div>}\n\n {prompts.length === 0 ? (\n <div style={styles.emptyState}>\n No prompts yet.\n {canCreate && ' Click \"Add\" to create one.'}\n </div>\n ) : (\n prompts.map((prompt) => (\n <div key={prompt.id} style={styles.promptItem}>\n <GripVertical\n size={16}\n style={{ color: 'var(--puck-color-grey-07)', cursor: 'grab' }}\n />\n <div style={styles.promptContent}>\n <div style={styles.promptLabel}>{prompt.label}</div>\n <div style={styles.promptText}>{prompt.prompt}</div>\n </div>\n <div style={styles.promptActions}>\n {canEdit && (\n <button\n type=\"button\"\n style={styles.iconButton}\n onClick={() => setEditingPrompt(prompt)}\n title=\"Edit prompt\"\n >\n <Pencil size={14} />\n </button>\n )}\n {canDelete && (\n <button\n type=\"button\"\n style={styles.iconButton}\n onClick={() => handleDelete(prompt.id)}\n title=\"Delete prompt\"\n >\n <Trash2 size={14} />\n </button>\n )}\n </div>\n </div>\n ))\n )}\n </div>\n )\n}\n"],"names":["useState","useEffect","useCallback","Plus","Pencil","Trash2","GripVertical","Save","X","dispatchPromptsUpdated","PromptEditorPanel","apiEndpoint","canEdit","canCreate","canDelete","prompts","setPrompts","loading","setLoading","error","setError","editingPrompt","setEditingPrompt","saving","setSaving","fetchPrompts","response","fetch","ok","Error","data","json","docs","err","message","handleSave","isNew","id","url","method","headers","body","JSON","stringify","label","prompt","category","order","handleDelete","confirm","styles","container","padding","display","flexDirection","gap","height","overflowY","header","justifyContent","alignItems","marginBottom","title","fontSize","fontWeight","color","margin","addButton","backgroundColor","border","borderRadius","cursor","promptItem","promptContent","flex","minWidth","promptLabel","promptText","overflow","textOverflow","whiteSpace","promptActions","iconButton","width","form","formField","formLabel","formInput","formTextarea","resize","minHeight","formActions","saveButton","cancelButton","errorMessage","emptyState","textAlign","div","style","input","type","value","onChange","e","target","placeholder","textarea","button","onClick","disabled","size","h3","length","map"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contextEditorPlugin.d.ts","sourceRoot":"","sources":["../../../src/ai/plugins/contextEditorPlugin.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE5D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAG7D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,GAAE,0BAA+B,GACvC,UAAU,CAqBZ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/ai/plugins/contextEditorPlugin.tsx"],"sourcesContent":["'use client'\n\nimport type { Plugin as PuckPlugin } from '@puckeditor/core'\nimport { FileText } from 'lucide-react'\nimport type { ContextEditorPluginOptions } from '../types.js'\nimport { ContextEditorPanel } from './ContextEditorPanel.js'\n\n/**\n * Creates a Puck plugin for managing AI context in the editor\n *\n * This plugin adds an \"AI Context\" panel to the Puck plugin rail where users\n * can view, create, edit, and delete business context entries without writing code.\n * Context entries are used by the AI to understand your brand, tone, and requirements.\n *\n * @example Basic usage\n * ```tsx\n * import { createContextEditorPlugin } from '@delmaredigital/payload-puck/ai'\n *\n * const contextEditorPlugin = createContextEditorPlugin()\n *\n * <PuckEditor plugins={[aiPlugin, contextEditorPlugin]} />\n * ```\n *\n * @example With custom options\n * ```tsx\n * const contextEditorPlugin = createContextEditorPlugin({\n * apiEndpoint: '/api/puck/ai-context',\n * canEdit: true,\n * canCreate: true,\n * canDelete: false, // Disable delete for non-admins\n * })\n * ```\n */\nexport function createContextEditorPlugin(\n options: ContextEditorPluginOptions = {}\n): PuckPlugin {\n const {\n apiEndpoint = '/api/puck/ai-context',\n canEdit = true,\n canCreate = true,\n canDelete = true,\n } = options\n\n return {\n name: 'context-editor',\n label: 'AI Context',\n icon: <FileText size={16} />,\n render: () => (\n <ContextEditorPanel\n apiEndpoint={apiEndpoint}\n canEdit={canEdit}\n canCreate={canCreate}\n canDelete={canDelete}\n />\n ),\n }\n}\n"],"names":["FileText","ContextEditorPanel","createContextEditorPlugin","options","apiEndpoint","canEdit","canCreate","canDelete","name","label","icon","size","render"],"mappings":"AAAA;;AAGA,SAASA,QAAQ,QAAQ,eAAc;AAEvC,SAASC,kBAAkB,QAAQ,0BAAyB;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;CAyBC,GACD,OAAO,SAASC,0BACdC,UAAsC,CAAC,CAAC;IAExC,MAAM,EACJC,cAAc,sBAAsB,EACpCC,UAAU,IAAI,EACdC,YAAY,IAAI,EAChBC,YAAY,IAAI,EACjB,GAAGJ;IAEJ,OAAO;QACLK,MAAM;QACNC,OAAO;QACPC,oBAAM,KAACV;YAASW,MAAM;;QACtBC,QAAQ,kBACN,KAACX;gBACCG,aAAaA;gBACbC,SAASA;gBACTC,WAAWA;gBACXC,WAAWA;;IAGjB;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"promptApiRoutes.d.ts","sourceRoot":"","sources":["../../../src/ai/plugins/promptApiRoutes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAE5F;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IACvC;;OAEG;IACH,IAAI,EAAE,gBAAgB,CAAA;IACtB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG;IACpE,GAAG,EAAE,YAAY,CAAA;IACjB,IAAI,EAAE,YAAY,CAAA;CACnB,CA+EA;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,qBAAqB,GAAG;IAC1E,KAAK,EAAE,kBAAkB,CAAA;IACzB,MAAM,EAAE,kBAAkB,CAAA;CAC3B,CAuFA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/ai/plugins/promptApiRoutes.ts"],"sourcesContent":["import type { NextRequest } from 'next/server'\nimport { getPayload } from 'payload'\nimport type { SanitizedConfig } from 'payload'\nimport type { PuckApiAuthHooks, RouteHandler, RouteHandlerWithId } from '../../api/types.js'\n\n/**\n * Configuration for AI prompts API routes\n */\nexport interface PromptApiRoutesConfig {\n /**\n * Payload configuration - import from @payload-config\n */\n payloadConfig: Promise<SanitizedConfig>\n /**\n * Authentication hooks\n */\n auth: PuckApiAuthHooks\n /**\n * Collection slug for prompts\n * @default 'puck-ai-prompts'\n */\n collection?: string\n}\n\n/**\n * Creates API route handlers for /api/puck/ai-prompts\n *\n * Provides CRUD operations for AI prompts stored in Payload.\n *\n * @example\n * ```typescript\n * // app/api/puck/ai-prompts/route.ts\n * import { createPromptApiRoutes } from '@delmaredigital/payload-puck/ai'\n * import config from '@payload-config'\n *\n * const handlers = createPromptApiRoutes({\n * payloadConfig: config,\n * auth: {\n * authenticate: async (request) => { ... },\n * },\n * })\n *\n * export const GET = handlers.GET\n * export const POST = handlers.POST\n * ```\n *\n * @example\n * ```typescript\n * // app/api/puck/ai-prompts/[id]/route.ts\n * import { createPromptApiRoutesWithId } from '@delmaredigital/payload-puck/ai'\n *\n * const handlers = createPromptApiRoutesWithId({\n * payloadConfig: config,\n * auth: { ... },\n * })\n *\n * export const PATCH = handlers.PATCH\n * export const DELETE = handlers.DELETE\n * ```\n */\nexport function createPromptApiRoutes(config: PromptApiRoutesConfig): {\n GET: RouteHandler\n POST: RouteHandler\n} {\n const { payloadConfig, auth, collection = 'puck-ai-prompts' } = config\n\n return {\n GET: async (request: NextRequest): Promise<Response> => {\n try {\n // Authenticate\n const authResult = await auth.authenticate(request)\n if (!authResult.authenticated) {\n return new Response(JSON.stringify({ error: 'Unauthorized' }), {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n // Get Payload instance\n const payload = await getPayload({ config: await payloadConfig })\n\n // Fetch prompts\n const result = await payload.find({\n collection,\n sort: 'order',\n limit: 100,\n })\n\n return new Response(JSON.stringify(result), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n })\n } catch (error) {\n console.error('[AI Prompts] Error fetching prompts:', error)\n return new Response(\n JSON.stringify({ error: 'Failed to fetch prompts' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n )\n }\n },\n\n POST: async (request: NextRequest): Promise<Response> => {\n try {\n // Authenticate\n const authResult = await auth.authenticate(request)\n if (!authResult.authenticated) {\n return new Response(JSON.stringify({ error: 'Unauthorized' }), {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n // Get Payload instance\n const payload = await getPayload({ config: await payloadConfig })\n\n // Parse body\n const body = await request.json()\n\n // Create prompt\n const result = await payload.create({\n collection,\n data: {\n label: body.label,\n prompt: body.prompt,\n category: body.category,\n order: body.order ?? 0,\n },\n })\n\n return new Response(JSON.stringify({ doc: result }), {\n status: 201,\n headers: { 'Content-Type': 'application/json' },\n })\n } catch (error) {\n console.error('[AI Prompts] Error creating prompt:', error)\n return new Response(\n JSON.stringify({ error: 'Failed to create prompt' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n )\n }\n },\n }\n}\n\n/**\n * Creates API route handlers for /api/puck/ai-prompts/[id]\n */\nexport function createPromptApiRoutesWithId(config: PromptApiRoutesConfig): {\n PATCH: RouteHandlerWithId\n DELETE: RouteHandlerWithId\n} {\n const { payloadConfig, auth, collection = 'puck-ai-prompts' } = config\n\n return {\n PATCH: async (request: NextRequest, context): Promise<Response> => {\n try {\n // Authenticate\n const authResult = await auth.authenticate(request)\n if (!authResult.authenticated) {\n return new Response(JSON.stringify({ error: 'Unauthorized' }), {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n // Get ID from params\n const params = await context.params\n const id = params.id\n\n // Get Payload instance\n const payload = await getPayload({ config: await payloadConfig })\n\n // Parse body\n const body = await request.json()\n\n // Update prompt\n const result = await payload.update({\n collection,\n id,\n data: {\n ...(body.label !== undefined && { label: body.label }),\n ...(body.prompt !== undefined && { prompt: body.prompt }),\n ...(body.category !== undefined && { category: body.category }),\n ...(body.order !== undefined && { order: body.order }),\n },\n })\n\n return new Response(JSON.stringify({ doc: result }), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n })\n } catch (error) {\n console.error('[AI Prompts] Error updating prompt:', error)\n return new Response(\n JSON.stringify({ error: 'Failed to update prompt' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n )\n }\n },\n\n DELETE: async (request: NextRequest, context): Promise<Response> => {\n try {\n // Authenticate\n const authResult = await auth.authenticate(request)\n if (!authResult.authenticated) {\n return new Response(JSON.stringify({ error: 'Unauthorized' }), {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n // Get ID from params\n const params = await context.params\n const id = params.id\n\n // Get Payload instance\n const payload = await getPayload({ config: await payloadConfig })\n\n // Delete prompt\n await payload.delete({\n collection,\n id,\n })\n\n return new Response(JSON.stringify({ success: true }), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n })\n } catch (error) {\n console.error('[AI Prompts] Error deleting prompt:', error)\n return new Response(\n JSON.stringify({ error: 'Failed to delete prompt' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n )\n }\n },\n }\n}\n"],"names":["getPayload","createPromptApiRoutes","config","payloadConfig","auth","collection","GET","request","authResult","authenticate","authenticated","Response","JSON","stringify","error","status","headers","payload","result","find","sort","limit","console","POST","body","json","create","data","label","prompt","category","order","doc","createPromptApiRoutesWithId","PATCH","context","params","id","update","undefined","DELETE","delete","success"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"promptEditorPlugin.d.ts","sourceRoot":"","sources":["../../../src/ai/plugins/promptEditorPlugin.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAG5D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,yBAA8B,GACtC,UAAU,CAqBZ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/ai/plugins/promptEditorPlugin.tsx"],"sourcesContent":["'use client'\n\nimport type { Plugin as PuckPlugin } from '@puckeditor/core'\nimport { Sparkles } from 'lucide-react'\nimport type { PromptEditorPluginOptions } from '../types.js'\nimport { PromptEditorPanel } from './PromptEditorPanel.js'\n\n/**\n * Creates a Puck plugin for managing AI prompts in the editor\n *\n * This plugin adds an \"AI Prompts\" panel to the Puck plugin rail where users\n * can view, create, edit, and delete example prompts without writing code.\n *\n * @example Basic usage\n * ```tsx\n * import { createPromptEditorPlugin } from '@delmaredigital/payload-puck/ai'\n *\n * const promptEditorPlugin = createPromptEditorPlugin()\n *\n * <PuckEditor plugins={[aiPlugin, promptEditorPlugin]} />\n * ```\n *\n * @example With custom options\n * ```tsx\n * const promptEditorPlugin = createPromptEditorPlugin({\n * apiEndpoint: '/api/puck/ai-prompts',\n * canEdit: true,\n * canCreate: true,\n * canDelete: false, // Disable delete for non-admins\n * })\n * ```\n */\nexport function createPromptEditorPlugin(\n options: PromptEditorPluginOptions = {}\n): PuckPlugin {\n const {\n apiEndpoint = '/api/puck/ai-prompts',\n canEdit = true,\n canCreate = true,\n canDelete = true,\n } = options\n\n return {\n name: 'prompt-editor',\n label: 'AI Prompts',\n icon: <Sparkles size={16} />,\n render: () => (\n <PromptEditorPanel\n apiEndpoint={apiEndpoint}\n canEdit={canEdit}\n canCreate={canCreate}\n canDelete={canDelete}\n />\n ),\n }\n}\n"],"names":["Sparkles","PromptEditorPanel","createPromptEditorPlugin","options","apiEndpoint","canEdit","canCreate","canDelete","name","label","icon","size","render"],"mappings":"AAAA;;AAGA,SAASA,QAAQ,QAAQ,eAAc;AAEvC,SAASC,iBAAiB,QAAQ,yBAAwB;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;CAwBC,GACD,OAAO,SAASC,yBACdC,UAAqC,CAAC,CAAC;IAEvC,MAAM,EACJC,cAAc,sBAAsB,EACpCC,UAAU,IAAI,EACdC,YAAY,IAAI,EAChBC,YAAY,IAAI,EACjB,GAAGJ;IAEJ,OAAO;QACLK,MAAM;QACNC,OAAO;QACPC,oBAAM,KAACV;YAASW,MAAM;;QACtBC,QAAQ,kBACN,KAACX;gBACCG,aAAaA;gBACbC,SAASA;gBACTC,WAAWA;gBACXC,WAAWA;;IAGjB;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"componentAiDefaults.d.ts","sourceRoot":"","sources":["../../../src/ai/presets/componentAiDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,wBAAwB,EAAE,oBA2MtC,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,oBA2BtC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/ai/presets/componentAiDefaults.ts"],"sourcesContent":["import type { ComponentAiOverrides } from '../types.js'\n\n/**\n * Default AI configurations for built-in payload-puck components\n *\n * These provide sensible defaults that help the AI understand how to use\n * each component effectively. Users can override or extend these.\n *\n * NOTE: Custom fields (type: 'custom') are automatically excluded by injectAiConfig.\n * This includes: _reset, visibility, background, media, animation, padding, margin,\n * border, dimensions, transform, alignment fields, etc.\n *\n * @example Using defaults\n * ```typescript\n * import { injectAiConfig, defaultComponentAiConfig } from '@delmaredigital/payload-puck/ai'\n *\n * const aiEnabledConfig = injectAiConfig(editorConfig, defaultComponentAiConfig)\n * ```\n *\n * @example Extending defaults\n * ```typescript\n * const customAiConfig = {\n * ...defaultComponentAiConfig,\n * Heading: {\n * ...defaultComponentAiConfig.Heading,\n * ai: {\n * instructions: 'Use our brand voice',\n * },\n * },\n * }\n * ```\n */\nexport const defaultComponentAiConfig: ComponentAiOverrides = {\n // Typography Components\n Heading: {\n ai: {\n instructions:\n 'Use for section headings and titles. Choose appropriate heading level (h1-h6) based on document structure.',\n },\n fields: {\n text: {\n ai: { required: true },\n },\n level: {\n ai: {\n instructions:\n 'Use h1 only once per page for the main title. Use h2 for main sections, h3 for subsections.',\n },\n },\n },\n },\n\n Text: {\n ai: {\n instructions: 'Use for body text and single paragraphs.',\n },\n fields: {\n content: {\n ai: { required: true },\n },\n },\n },\n\n RichText: {\n ai: {\n instructions:\n 'Use for formatted text content with multiple paragraphs, lists, links, or other rich formatting.',\n },\n fields: {\n content: {\n ai: {\n required: true,\n // TipTap content is complex, provide schema hint\n schema: { type: 'string' },\n instructions: 'Provide HTML content for the rich text editor.',\n },\n },\n },\n },\n\n // Interactive Components\n Button: {\n ai: {\n instructions:\n 'Use for call-to-action buttons. Always provide meaningful, action-oriented button text.',\n },\n fields: {\n label: {\n ai: {\n required: true,\n instructions:\n 'Use action-oriented text like \"Get Started\", \"Learn More\", \"Sign Up\", \"Contact Us\".',\n },\n },\n href: {\n ai: {\n required: true,\n instructions: 'Use # as placeholder if the actual URL is unknown.',\n },\n },\n variant: {\n ai: {\n instructions:\n 'Use \"primary\" for main CTAs, \"secondary\" for less prominent actions, \"outline\" for subtle actions.',\n },\n },\n },\n },\n\n // Media Components\n Image: {\n ai: {\n instructions:\n 'Use for displaying images. Note: AI cannot select actual images from the media library.',\n },\n fields: {\n alt: {\n ai: {\n instructions:\n 'Provide descriptive alt text for accessibility. Describe what the image shows.',\n },\n },\n },\n },\n\n // Layout Components\n Section: {\n ai: {\n instructions:\n 'Use to group related content into a section. Sections can have background colors and padding.',\n },\n },\n\n Container: {\n ai: {\n instructions:\n 'Use to constrain content width and center it on the page. Good for text-heavy sections.',\n },\n },\n\n Flex: {\n ai: {\n instructions:\n 'Use for horizontal or vertical layouts with flexible spacing between items.',\n },\n fields: {\n direction: {\n ai: {\n instructions: 'Use \"row\" for horizontal layout, \"column\" for vertical stacking.',\n },\n },\n gap: {\n ai: {\n instructions: 'Set spacing between items. Common values: 8, 16, 24, 32.',\n },\n },\n },\n },\n\n Grid: {\n ai: {\n instructions: 'Use for multi-column layouts. Specify the number of columns.',\n },\n fields: {\n columns: {\n ai: {\n instructions:\n 'Use 2-4 columns for most layouts. 12-column grid for advanced layouts.',\n },\n },\n },\n },\n\n // Content Components\n Card: {\n ai: {\n instructions:\n 'Use for content cards with optional image, title, and description. Good for feature lists, team members, products.',\n },\n fields: {\n title: {\n ai: { required: true },\n },\n description: {\n ai: {\n instructions: 'Keep descriptions concise, 1-2 sentences.',\n },\n },\n },\n },\n\n Accordion: {\n ai: {\n instructions:\n 'Use for FAQ sections or collapsible content. Each item has a title and expandable content.',\n },\n fields: {\n items: {\n ai: {\n required: true,\n instructions: 'Provide an array of items with title and content properties.',\n },\n },\n },\n },\n\n // Utility Components\n Spacer: {\n ai: {\n instructions:\n 'Use to add vertical spacing between elements. Specify height in pixels.',\n },\n fields: {\n height: {\n ai: {\n instructions: 'Common values: 16, 24, 32, 48, 64. Use larger values for section breaks.',\n },\n },\n },\n },\n\n Divider: {\n ai: {\n instructions:\n 'Use to visually separate sections of content with a horizontal line.',\n },\n },\n\n // Template Component\n Template: {\n ai: {\n instructions:\n 'Use to insert a saved page template. Note: AI cannot select actual templates.',\n },\n },\n}\n\n/**\n * Minimal AI configuration for components\n *\n * Use this for a lighter-weight configuration that only marks\n * required fields. Custom fields are still auto-excluded by injectAiConfig.\n */\nexport const minimalComponentAiConfig: ComponentAiOverrides = {\n Heading: {\n fields: {\n text: { ai: { required: true } },\n },\n },\n Text: {\n fields: {\n content: { ai: { required: true } },\n },\n },\n RichText: {\n fields: {\n content: {\n ai: {\n required: true,\n schema: { type: 'string' },\n },\n },\n },\n },\n Button: {\n fields: {\n label: { ai: { required: true } },\n href: { ai: { required: true } },\n },\n },\n}\n"],"names":["defaultComponentAiConfig","Heading","ai","instructions","fields","text","required","level","Text","content","RichText","schema","type","Button","label","href","variant","Image","alt","Section","Container","Flex","direction","gap","Grid","columns","Card","title","description","Accordion","items","Spacer","height","Divider","Template","minimalComponentAiConfig"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai/presets/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAOvD,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AAG5F,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,0BAA0B,CAAA;AAEjC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,8BAA8B,EAAE,oBAK5C,CAAA;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,wBAAwB,g9QAAwD,CAAA;AAE7F;;;GAGG;AACH,OAAO,EAAE,kBAAkB,EAAE,CAAA;AAE7B;;;GAGG;AACH,OAAO,EAAE,uBAAuB,EAAE,CAAA;AAElC;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;CAKhB,CAAA;AAEV;;GAEG;AACH,eAAO,MAAM,cAAc,2JAKjB,CAAA;AAGV,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/ai/presets/index.ts"],"sourcesContent":["/**\n * AI Preset Configurations\n *\n * This module exports comprehensive AI instructions for Puck components\n * and page composition patterns.\n *\n * @example Using comprehensive config (recommended)\n * ```typescript\n * import { comprehensiveComponentAiConfig } from '@delmaredigital/payload-puck/ai'\n * import { injectAiConfig } from '@delmaredigital/payload-puck/ai'\n *\n * const aiEnabledConfig = injectAiConfig(editorConfig, comprehensiveComponentAiConfig)\n * ```\n *\n * @example Adding page pattern context to AI system prompt\n * ```typescript\n * import { pagePatternSystemContext } from '@delmaredigital/payload-puck/ai'\n *\n * createPuckAiApiRoutes({\n * ai: {\n * context: `${yourBusinessContext}\\n\\n${pagePatternSystemContext}`,\n * },\n * })\n * ```\n */\n\nimport type { ComponentAiOverrides } from '../types.js'\n\n// Import instruction modules\nimport { typographyInstructions, typographyComponents } from './instructions/typography.js'\nimport { layoutInstructions, layoutComponents } from './instructions/layout.js'\nimport { interactiveInstructions, interactiveComponents } from './instructions/interactive.js'\nimport { mediaInstructions, mediaComponents } from './instructions/media.js'\nimport { pagePatternContext, componentFieldReference } from './instructions/pagePatterns.js'\n\n// Re-export legacy config for backward compatibility\nexport {\n defaultComponentAiConfig,\n minimalComponentAiConfig,\n} from './componentAiDefaults.js'\n\n/**\n * Comprehensive AI configuration for all built-in components\n *\n * Combines detailed instructions from all component categories:\n * - Typography: Heading, Text, RichText\n * - Layout: Section, Container, Flex, Grid, Spacer\n * - Interactive: Button, Card, Accordion, Divider\n * - Media: Image, Template\n *\n * Each component includes:\n * - Purpose and usage guidelines\n * - Correct field names and recommended values\n * - Composition patterns with other components\n * - Common mistakes to avoid\n */\nexport const comprehensiveComponentAiConfig: ComponentAiOverrides = {\n ...typographyInstructions,\n ...layoutInstructions,\n ...interactiveInstructions,\n ...mediaInstructions,\n}\n\n/**\n * System context string for AI page generation\n *\n * Contains comprehensive guidance on:\n * - Page structure patterns (hero, features, testimonials, FAQ, CTA)\n * - Page type templates (landing, about, services, contact)\n * - Typography hierarchy rules\n * - Spacing and color guidelines\n * - Responsive considerations\n *\n * Add this to your AI context for better page generation:\n *\n * @example\n * ```typescript\n * createPuckAiApiRoutes({\n * ai: {\n * context: `${yourBusinessContext}\\n\\n${pagePatternSystemContext}`,\n * },\n * })\n * ```\n */\nexport const pagePatternSystemContext = `${pagePatternContext}\\n\\n${componentFieldReference}`\n\n/**\n * Just the page pattern context (without field reference)\n * Use if you only need the composition patterns\n */\nexport { pagePatternContext }\n\n/**\n * Just the field reference (without patterns)\n * Use if you only need a quick field name reference\n */\nexport { componentFieldReference }\n\n/**\n * List of all component names by category\n */\nexport const allComponents = {\n typography: typographyComponents,\n layout: layoutComponents,\n interactive: interactiveComponents,\n media: mediaComponents,\n} as const\n\n/**\n * Flat list of all component names\n */\nexport const componentNames = [\n ...typographyComponents,\n ...layoutComponents,\n ...interactiveComponents,\n ...mediaComponents,\n] as const\n\n// Re-export instruction modules for advanced usage\nexport { typographyInstructions } from './instructions/typography.js'\nexport { layoutInstructions } from './instructions/layout.js'\nexport { interactiveInstructions } from './instructions/interactive.js'\nexport { mediaInstructions } from './instructions/media.js'\n"],"names":["typographyInstructions","typographyComponents","layoutInstructions","layoutComponents","interactiveInstructions","interactiveComponents","mediaInstructions","mediaComponents","pagePatternContext","componentFieldReference","defaultComponentAiConfig","minimalComponentAiConfig","comprehensiveComponentAiConfig","pagePatternSystemContext","allComponents","typography","layout","interactive","media","componentNames"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;CAwBC,GAID,6BAA6B;AAC7B,SAASA,sBAAsB,EAAEC,oBAAoB,QAAQ,+BAA8B;AAC3F,SAASC,kBAAkB,EAAEC,gBAAgB,QAAQ,2BAA0B;AAC/E,SAASC,uBAAuB,EAAEC,qBAAqB,QAAQ,gCAA+B;AAC9F,SAASC,iBAAiB,EAAEC,eAAe,QAAQ,0BAAyB;AAC5E,SAASC,kBAAkB,EAAEC,uBAAuB,QAAQ,iCAAgC;AAE5F,qDAAqD;AACrD,SACEC,wBAAwB,EACxBC,wBAAwB,QACnB,2BAA0B;AAEjC;;;;;;;;;;;;;;CAcC,GACD,OAAO,MAAMC,iCAAuD;IAClE,GAAGZ,sBAAsB;IACzB,GAAGE,kBAAkB;IACrB,GAAGE,uBAAuB;IAC1B,GAAGE,iBAAiB;AACtB,EAAC;AAED;;;;;;;;;;;;;;;;;;;;CAoBC,GACD,OAAO,MAAMO,2BAA2B,GAAGL,mBAAmB,IAAI,EAAEC,yBAAyB,CAAA;AAE7F;;;CAGC,GACD,SAASD,kBAAkB,GAAE;AAE7B;;;CAGC,GACD,SAASC,uBAAuB,GAAE;AAElC;;CAEC,GACD,OAAO,MAAMK,gBAAgB;IAC3BC,YAAYd;IACZe,QAAQb;IACRc,aAAaZ;IACba,OAAOX;AACT,EAAU;AAEV;;CAEC,GACD,OAAO,MAAMY,iBAAiB;OACzBlB;OACAE;OACAE;OACAE;CACJ,CAAS;AAEV,mDAAmD;AACnD,SAASP,sBAAsB,QAAQ,+BAA8B;AACrE,SAASE,kBAAkB,QAAQ,2BAA0B;AAC7D,SAASE,uBAAuB,QAAQ,gCAA+B;AACvE,SAASE,iBAAiB,QAAQ,0BAAyB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../../../src/ai/presets/instructions/interactive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAU1D;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,EAAE,oBA4UrC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,qDAAsD,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/ai/presets/instructions/interactive.ts"],"sourcesContent":["import type { ComponentAiOverrides } from '../../types.js'\nimport {\n colorSchema,\n alignmentSchema,\n sizeSchema,\n transformSchema,\n backgroundSchema,\n borderSchema,\n} from './schemas.js'\n\n/**\n * Comprehensive AI instructions for interactive components\n *\n * These instructions teach the AI:\n * - Button, Card, Accordion, and Divider usage\n * - Correct field names and recommended values\n * - Common patterns and compositions\n */\nexport const interactiveInstructions: ComponentAiOverrides = {\n Button: {\n ai: {\n instructions: `Button component for calls-to-action and links.\n\nPURPOSE:\n- Primary and secondary call-to-action buttons\n- Navigation links styled as buttons\n- Form submission triggers (visual only - actual forms need implementation)\n\nUSAGE GUIDELINES:\n- Use action-oriented text: \"Get Started\", \"Learn More\", \"Contact Us\", \"Sign Up\"\n- Avoid generic text like \"Click Here\" or \"Submit\"\n- Primary variant for main CTA, secondary/outline for supporting actions\n\nVARIANTS:\n- 'default': Primary button with filled background (use for main CTAs)\n- 'secondary': Secondary styling (use for less important actions)\n- 'outline': Bordered with transparent background (use for subtle actions)\n\nSIZES:\n- 'sm': Small, compact buttons\n- 'default': Standard size (recommended for most uses)\n- 'lg': Large, prominent buttons (hero CTAs)\n\nCOMMON PATTERNS:\n- Hero CTA: Two buttons in Flex(row) - primary \"Get Started\" + outline \"Learn More\"\n- Card CTA: Single button at bottom of card\n- Section CTA: Centered button below section content\n- Navigation: Multiple outline buttons in a row\n\nCOMPOSITION:\n- Flex (row, gap: 16) > Button (default) + Button (outline) for button pairs\n- Section > Flex (column, center) > Content + Button for section CTAs`,\n },\n fields: {\n text: {\n ai: {\n required: true,\n instructions:\n 'Button text. Use action verbs: \"Get Started\", \"Learn More\", \"Contact Us\", \"Sign Up\", \"Download Now\".',\n },\n },\n link: {\n ai: {\n required: true,\n instructions:\n 'URL the button links to. Use \"#\" as placeholder if URL is unknown. Use \"/\" for home, \"/contact\" for contact page, etc.',\n },\n },\n variant: {\n ai: {\n instructions:\n \"'default' (primary, filled), 'secondary' (alternate style), 'outline' (bordered, transparent). Use 'default' for main CTAs.\",\n },\n },\n size: {\n ai: {\n instructions: `Button size preset. Use 'lg' for hero buttons, 'default' elsewhere.\nExample: { mode: 'lg' } or { mode: 'default' }`,\n schema: sizeSchema,\n },\n },\n openInNewTab: {\n ai: {\n instructions:\n \"'yes' or 'no'. Use 'yes' for external links, 'no' for internal navigation.\",\n },\n },\n alignment: {\n ai: {\n instructions:\n \"'left', 'center', or 'right'. Typically 'center' for standalone buttons, 'left' in content areas.\",\n schema: alignmentSchema,\n },\n },\n customBackgroundColor: {\n ai: {\n instructions: `Custom background color (overrides variant). Use sparingly.\nExample: { hex: '#3b82f6', opacity: 100 }`,\n schema: colorSchema,\n },\n },\n customTextColor: {\n ai: {\n instructions: `Custom text color (overrides variant). Use sparingly.\nExample: { hex: '#ffffff', opacity: 100 }`,\n schema: colorSchema,\n },\n },\n transform: {\n ai: {\n instructions: `CSS transforms for rotation, scale, etc. Usually leave unset.\nExample: { rotate: 0, scaleX: 1, scaleY: 1, origin: 'center' }`,\n schema: transformSchema,\n },\n },\n },\n },\n\n Card: {\n ai: {\n instructions: `Card component for featured content blocks.\n\nPURPOSE:\n- Feature cards with image, title, and description\n- Team member profiles\n- Product or service highlights\n- Testimonial cards\n- Blog post previews\n\nUSAGE GUIDELINES:\n- Always include a heading - it's the card's title\n- Text is optional but recommended for context\n- Image is optional but adds visual appeal\n- Link makes the entire card clickable\n\nCOMMON PATTERNS:\n- Feature Card: heading + text (no image for icon-style features)\n- Team Card: image (avatar) + heading (name) + text (role/bio)\n- Product Card: image + heading (product name) + text (description) + link\n- Testimonial Card: text (quote) + heading (person name)\n- Blog Card: image + heading (title) + text (excerpt) + link\n\nSTYLING:\n- shadow: 'none', 'sm', 'md', 'lg', 'xl' - use 'md' for subtle elevation\n- border: Optional border for flat design\n- background: Optional custom background color\n\nCOMPOSITION:\n- Grid (3 columns) > Card + Card + Card (feature grid)\n- Grid (4 columns) > Card + Card + Card + Card (team grid)\n- Flex (row) > Card + Card + Card (scrollable row)`,\n },\n fields: {\n heading: {\n ai: {\n required: true,\n instructions:\n 'Card title. Keep concise - 2-5 words typically. For features: \"Fast Performance\". For team: \"Jane Smith\".',\n },\n },\n text: {\n ai: {\n instructions:\n 'Card description. 1-3 sentences. For features: explain the benefit. For team: job title and brief bio.',\n },\n },\n image: {\n ai: {\n exclude: true,\n instructions: 'AI cannot select images from media library. Leave unset or provide alt text.',\n },\n },\n link: {\n ai: {\n instructions:\n 'Optional URL to make card clickable. Use for blog posts, products, or \"learn more\" functionality.',\n },\n },\n openInNewTab: {\n ai: {\n instructions: \"'yes' or 'no'. Use 'no' for internal links.\",\n },\n },\n shadow: {\n ai: {\n instructions:\n \"'none', 'sm', 'md', 'lg', 'xl'. Use 'md' for subtle elevation, 'lg' for prominent cards.\",\n },\n },\n alignment: {\n ai: {\n instructions: \"'left', 'center', or 'right'. Usually 'left' for cards.\",\n schema: alignmentSchema,\n },\n },\n background: {\n ai: {\n instructions: `Custom background color for the card.\nExample: { type: 'solid', solid: { hex: '#f8fafc' } }`,\n schema: backgroundSchema,\n },\n },\n border: {\n ai: {\n instructions: `Border styling for the card.\nExample: { style: 'solid', width: 1, color: { hex: '#e5e7eb' }, radius: 12, sides: { top: true, right: true, bottom: true, left: true } }`,\n schema: borderSchema,\n },\n },\n transform: {\n ai: {\n instructions: `CSS transforms for rotation, scale, etc. Usually leave unset.\nExample: { rotate: 0, scaleX: 1, scaleY: 1, origin: 'center' }`,\n schema: transformSchema,\n },\n },\n },\n },\n\n Accordion: {\n ai: {\n instructions: `Accordion component for collapsible content sections.\n\nPURPOSE:\n- FAQ (Frequently Asked Questions) sections\n- Expandable feature lists\n- Terms and conditions sections\n- Step-by-step guides\n- Collapsible documentation\n\nUSAGE GUIDELINES:\n- Each item needs a title (question/header) and content (answer/body)\n- Set defaultOpen: true for items that should be expanded initially\n- Use allowMultiple: false for FAQ style (one open at a time)\n- Use allowMultiple: true for reference/docs style (multiple can be open)\n\nCOMMON PATTERNS:\n- FAQ Section: 5-10 items, allowMultiple: false\n- Feature Details: 3-5 items explaining features in depth\n- Pricing FAQ: Common billing/pricing questions\n- Support/Help: Troubleshooting steps\n\nITEM STRUCTURE:\nEach item in the items array needs:\n- title: The clickable header (e.g., \"How do I reset my password?\")\n- content: The expandable content (can be multiple paragraphs)\n- defaultOpen: Boolean, whether expanded by default\n\nCOMPOSITION:\n- Section > Container > Heading (h2 \"FAQ\") + Accordion\n- Section > Flex (column) > Heading + Text + Accordion`,\n },\n fields: {\n items: {\n ai: {\n required: true,\n instructions: `Array of accordion items. Each item needs:\n- title (string): The clickable header text\n- content (string): The expandable body content\n- defaultOpen (boolean): Whether to show expanded initially\n\nExample: [\n { title: \"What is your return policy?\", content: \"We offer 30-day returns...\", defaultOpen: false },\n { title: \"How do I contact support?\", content: \"Email us at support@...\", defaultOpen: false }\n]`,\n schema: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n title: { type: 'string' },\n content: { type: 'string' },\n defaultOpen: { type: 'boolean' },\n },\n },\n },\n },\n },\n allowMultiple: {\n ai: {\n instructions:\n \"'yes' to allow multiple items open simultaneously, 'no' for FAQ-style (one at a time). Default: no.\",\n },\n },\n textColor: {\n ai: {\n instructions: `Optional text color for accordion headers and content.\nExample: { hex: '#1f2937', opacity: 100 }`,\n schema: colorSchema,\n },\n },\n transform: {\n ai: {\n instructions: `CSS transforms. Usually leave unset for accordions.`,\n schema: transformSchema,\n },\n },\n },\n },\n\n Divider: {\n ai: {\n instructions: `Divider component for horizontal line separators.\n\nPURPOSE:\n- Visual separation between content sections\n- Breaking up long content areas\n- Subtle section boundaries\n\nUSAGE GUIDELINES:\n- Use sparingly - whitespace often works better\n- Good for separating distinct content within a Section\n- Not needed between Sections (use Section backgrounds instead)\n\nSTYLES:\n- 'solid': Standard line (default)\n- 'dashed': Dashed line (subtle, informal)\n- 'dotted': Dotted line (decorative)\n\nWHEN TO USE:\n- Between paragraphs of distinct topics\n- Above or below a quote/callout\n- In footer to separate sections\n\nWHEN NOT TO USE:\n- Between page sections (use Section component backgrounds)\n- Above every heading (use spacing instead)\n- As decoration without purpose`,\n },\n fields: {\n style: {\n ai: {\n instructions: \"'solid' (default), 'dashed', or 'dotted'.\",\n },\n },\n color: {\n ai: {\n instructions: `Optional color for the divider line.\nExample: { hex: '#e5e7eb', opacity: 100 }`,\n schema: colorSchema,\n },\n },\n transform: {\n ai: {\n instructions: `CSS transforms. Usually leave unset for dividers.`,\n schema: transformSchema,\n },\n },\n },\n },\n}\n\n/**\n * Interactive component names for reference\n */\nexport const interactiveComponents = ['Button', 'Card', 'Accordion', 'Divider'] as const\n"],"names":["colorSchema","alignmentSchema","sizeSchema","transformSchema","backgroundSchema","borderSchema","interactiveInstructions","Button","ai","instructions","fields","text","required","link","variant","size","schema","openInNewTab","alignment","customBackgroundColor","customTextColor","transform","Card","heading","image","exclude","shadow","background","border","Accordion","items","type","properties","title","content","defaultOpen","allowMultiple","textColor","Divider","style","color","interactiveComponents"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../src/ai/presets/instructions/layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAY1D;;;;;;;;GAQG;AAEH,eAAO,MAAM,kBAAkB,EAAE,oBAiehC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,6DAA8D,CAAA"}
|