@delmaredigital/payload-puck 0.4.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +429 -17
- package/dist/admin/PuckEditorView.d.ts +1 -1
- package/dist/admin/PuckEditorView.d.ts.map +1 -1
- package/dist/ai/collections/AiContext.d.ts +16 -0
- package/dist/ai/collections/AiContext.d.ts.map +1 -0
- package/dist/ai/collections/AiContext.js +87 -0
- package/dist/ai/collections/AiContext.js.map +1 -0
- package/dist/ai/collections/AiPrompts.d.ts +10 -0
- package/dist/ai/collections/AiPrompts.d.ts.map +1 -0
- package/dist/ai/collections/AiPrompts.js +63 -0
- package/dist/ai/collections/AiPrompts.js.map +1 -0
- package/dist/ai/createAiApiRoutes.d.ts +40 -0
- package/dist/ai/createAiApiRoutes.d.ts.map +1 -0
- package/dist/ai/createAiApiRoutes.js +106 -0
- package/dist/ai/createAiApiRoutes.js.map +1 -0
- package/dist/ai/createAiGenerate.d.ts +65 -0
- package/dist/ai/createAiGenerate.d.ts.map +1 -0
- package/dist/ai/createAiGenerate.js +106 -0
- package/dist/ai/createAiGenerate.js.map +1 -0
- package/dist/ai/createAiPlugin.d.ts +39 -0
- package/dist/ai/createAiPlugin.d.ts.map +1 -0
- package/dist/ai/createAiPlugin.js +61 -0
- package/dist/ai/createAiPlugin.js.map +1 -0
- package/dist/ai/hooks/useAiContext.d.ts +63 -0
- package/dist/ai/hooks/useAiContext.d.ts.map +1 -0
- package/dist/ai/hooks/useAiContext.js +146 -0
- package/dist/ai/hooks/useAiContext.js.map +1 -0
- package/dist/ai/hooks/useAiPrompts.d.ts +25 -0
- package/dist/ai/hooks/useAiPrompts.d.ts.map +1 -0
- package/dist/ai/hooks/useAiPrompts.js +74 -0
- package/dist/ai/hooks/useAiPrompts.js.map +1 -0
- package/dist/ai/index.d.ts +51 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +69 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/plugins/ContextEditorPanel.d.ts +9 -0
- package/dist/ai/plugins/ContextEditorPanel.d.ts.map +1 -0
- package/dist/ai/plugins/ContextEditorPanel.js +399 -0
- package/dist/ai/plugins/ContextEditorPanel.js.map +1 -0
- package/dist/ai/plugins/PromptEditorPanel.d.ts +9 -0
- package/dist/ai/plugins/PromptEditorPanel.d.ts.map +1 -0
- package/dist/ai/plugins/PromptEditorPanel.js +270 -0
- package/dist/ai/plugins/PromptEditorPanel.js.map +1 -0
- package/dist/ai/plugins/contextEditorPlugin.d.ts +30 -0
- package/dist/ai/plugins/contextEditorPlugin.d.ts.map +1 -0
- package/dist/ai/plugins/contextEditorPlugin.js +40 -0
- package/dist/ai/plugins/contextEditorPlugin.js.map +1 -0
- package/dist/ai/plugins/promptApiRoutes.d.ts +68 -0
- package/dist/ai/plugins/promptApiRoutes.d.ts.map +1 -0
- package/dist/ai/plugins/promptApiRoutes.js +181 -0
- package/dist/ai/plugins/promptApiRoutes.js.map +1 -0
- package/dist/ai/plugins/promptEditorPlugin.d.ts +29 -0
- package/dist/ai/plugins/promptEditorPlugin.d.ts.map +1 -0
- package/dist/ai/plugins/promptEditorPlugin.js +39 -0
- package/dist/ai/plugins/promptEditorPlugin.js.map +1 -0
- package/dist/ai/presets/componentAiDefaults.d.ts +40 -0
- package/dist/ai/presets/componentAiDefaults.d.ts.map +1 -0
- package/dist/ai/presets/componentAiDefaults.js +239 -0
- package/dist/ai/presets/componentAiDefaults.js.map +1 -0
- package/dist/ai/presets/index.d.ts +94 -0
- package/dist/ai/presets/index.d.ts.map +1 -0
- package/dist/ai/presets/index.js +110 -0
- package/dist/ai/presets/index.js.map +1 -0
- package/dist/ai/presets/instructions/interactive.d.ts +15 -0
- package/dist/ai/presets/instructions/interactive.d.ts.map +1 -0
- package/dist/ai/presets/instructions/interactive.js +334 -0
- package/dist/ai/presets/instructions/interactive.js.map +1 -0
- package/dist/ai/presets/instructions/layout.d.ts +16 -0
- package/dist/ai/presets/instructions/layout.d.ts.map +1 -0
- package/dist/ai/presets/instructions/layout.js +486 -0
- package/dist/ai/presets/instructions/layout.js.map +1 -0
- package/dist/ai/presets/instructions/media.d.ts +15 -0
- package/dist/ai/presets/instructions/media.d.ts.map +1 -0
- package/dist/ai/presets/instructions/media.js +136 -0
- package/dist/ai/presets/instructions/media.js.map +1 -0
- package/dist/ai/presets/instructions/pagePatterns.d.ts +20 -0
- package/dist/ai/presets/instructions/pagePatterns.d.ts.map +1 -0
- package/dist/ai/presets/instructions/pagePatterns.js +290 -0
- package/dist/ai/presets/instructions/pagePatterns.js.map +1 -0
- package/dist/ai/presets/instructions/schemas.d.ts +1247 -0
- package/dist/ai/presets/instructions/schemas.d.ts.map +1 -0
- package/dist/ai/presets/instructions/schemas.js +240 -0
- package/dist/ai/presets/instructions/schemas.js.map +1 -0
- package/dist/ai/presets/instructions/typography.d.ts +16 -0
- package/dist/ai/presets/instructions/typography.d.ts.map +1 -0
- package/dist/ai/presets/instructions/typography.js +192 -0
- package/dist/ai/presets/instructions/typography.js.map +1 -0
- package/dist/ai/tools/index.d.ts +116 -0
- package/dist/ai/tools/index.d.ts.map +1 -0
- package/dist/ai/tools/index.js +214 -0
- package/dist/ai/tools/index.js.map +1 -0
- package/dist/ai/types.d.ts +507 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +2 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/ai/utils/injectAiConfig.d.ts +67 -0
- package/dist/ai/utils/injectAiConfig.d.ts.map +1 -0
- package/dist/ai/utils/injectAiConfig.js +216 -0
- package/dist/ai/utils/injectAiConfig.js.map +1 -0
- package/dist/api/createPuckApiRoutesWithId.d.ts.map +1 -1
- package/dist/api/createPuckApiRoutesWithId.js +12 -5
- package/dist/api/createPuckApiRoutesWithId.js.map +1 -1
- package/dist/api/index.d.ts +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +1 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/types.d.ts +1 -1
- package/dist/api/types.d.ts.map +1 -1
- package/dist/api/utils/mapRootProps.d.ts +19 -0
- package/dist/api/utils/mapRootProps.d.ts.map +1 -1
- package/dist/api/utils/mapRootProps.js +33 -0
- package/dist/api/utils/mapRootProps.js.map +1 -1
- package/dist/components/exports.d.ts +2 -1
- package/dist/components/exports.d.ts.map +1 -1
- package/dist/components/exports.js +5 -1
- package/dist/components/exports.js.map +1 -1
- package/dist/components/interactive/Accordion.d.ts +1 -1
- package/dist/components/interactive/Accordion.d.ts.map +1 -1
- package/dist/components/interactive/Accordion.js +4 -4
- package/dist/components/interactive/Accordion.js.map +1 -1
- package/dist/components/interactive/Accordion.server.d.ts +1 -1
- package/dist/components/interactive/Accordion.server.d.ts.map +1 -1
- package/dist/components/interactive/Button.d.ts +1 -1
- package/dist/components/interactive/Button.d.ts.map +1 -1
- package/dist/components/interactive/Button.server.d.ts +2 -3
- package/dist/components/interactive/Button.server.d.ts.map +1 -1
- package/dist/components/interactive/Button.server.js +1 -2
- package/dist/components/interactive/Button.server.js.map +1 -1
- package/dist/components/interactive/Card.d.ts +1 -1
- package/dist/components/interactive/Card.d.ts.map +1 -1
- package/dist/components/interactive/Card.server.d.ts +1 -1
- package/dist/components/interactive/Card.server.d.ts.map +1 -1
- package/dist/components/interactive/Divider.d.ts +1 -1
- package/dist/components/interactive/Divider.d.ts.map +1 -1
- package/dist/components/interactive/Divider.server.d.ts +1 -1
- package/dist/components/interactive/Divider.server.d.ts.map +1 -1
- package/dist/components/layout/Container.d.ts +3 -1
- package/dist/components/layout/Container.d.ts.map +1 -1
- package/dist/components/layout/Container.js +16 -2
- package/dist/components/layout/Container.js.map +1 -1
- package/dist/components/layout/Container.server.d.ts +3 -1
- package/dist/components/layout/Container.server.d.ts.map +1 -1
- package/dist/components/layout/Container.server.js +5 -2
- package/dist/components/layout/Container.server.js.map +1 -1
- package/dist/components/layout/Flex.d.ts +3 -1
- package/dist/components/layout/Flex.d.ts.map +1 -1
- package/dist/components/layout/Flex.js +18 -2
- package/dist/components/layout/Flex.js.map +1 -1
- package/dist/components/layout/Flex.server.d.ts +3 -1
- package/dist/components/layout/Flex.server.d.ts.map +1 -1
- package/dist/components/layout/Flex.server.js +5 -2
- package/dist/components/layout/Flex.server.js.map +1 -1
- package/dist/components/layout/Grid.d.ts +3 -1
- package/dist/components/layout/Grid.d.ts.map +1 -1
- package/dist/components/layout/Grid.js +15 -2
- package/dist/components/layout/Grid.js.map +1 -1
- package/dist/components/layout/Grid.server.d.ts +3 -1
- package/dist/components/layout/Grid.server.d.ts.map +1 -1
- package/dist/components/layout/Grid.server.js +5 -2
- package/dist/components/layout/Grid.server.js.map +1 -1
- package/dist/components/layout/Section.d.ts +3 -1
- package/dist/components/layout/Section.d.ts.map +1 -1
- package/dist/components/layout/Section.js +32 -5
- package/dist/components/layout/Section.js.map +1 -1
- package/dist/components/layout/Section.server.d.ts +3 -1
- package/dist/components/layout/Section.server.d.ts.map +1 -1
- package/dist/components/layout/Section.server.js +16 -4
- package/dist/components/layout/Section.server.js.map +1 -1
- package/dist/components/layout/Spacer.d.ts +1 -1
- package/dist/components/layout/Spacer.d.ts.map +1 -1
- package/dist/components/layout/Spacer.server.d.ts +1 -1
- package/dist/components/layout/Spacer.server.d.ts.map +1 -1
- package/dist/components/layout/Template.d.ts +1 -1
- package/dist/components/layout/Template.d.ts.map +1 -1
- package/dist/components/layout/Template.server.d.ts +1 -1
- package/dist/components/layout/Template.server.d.ts.map +1 -1
- package/dist/components/media/Image.d.ts +1 -1
- package/dist/components/media/Image.d.ts.map +1 -1
- package/dist/components/media/Image.server.d.ts +1 -1
- package/dist/components/media/Image.server.d.ts.map +1 -1
- package/dist/components/typography/Heading.d.ts +1 -1
- package/dist/components/typography/Heading.d.ts.map +1 -1
- package/dist/components/typography/Heading.server.d.ts +1 -1
- package/dist/components/typography/Heading.server.d.ts.map +1 -1
- package/dist/components/typography/RichText.editor.d.ts +15 -2
- package/dist/components/typography/RichText.editor.d.ts.map +1 -1
- package/dist/components/typography/RichText.editor.js +18 -11
- package/dist/components/typography/RichText.editor.js.map +1 -1
- package/dist/components/typography/RichText.server.d.ts +3 -2
- package/dist/components/typography/RichText.server.d.ts.map +1 -1
- package/dist/components/typography/RichText.server.js +10 -5
- package/dist/components/typography/RichText.server.js.map +1 -1
- package/dist/components/typography/Text.d.ts +1 -1
- package/dist/components/typography/Text.d.ts.map +1 -1
- package/dist/components/typography/Text.server.d.ts +1 -1
- package/dist/components/typography/Text.server.d.ts.map +1 -1
- package/dist/components/typography/index.d.ts +1 -1
- package/dist/components/typography/index.d.ts.map +1 -1
- package/dist/components/typography/index.js +1 -1
- package/dist/components/typography/index.js.map +1 -1
- package/dist/config/config.editor.d.ts +4 -4
- package/dist/config/config.editor.d.ts.map +1 -1
- package/dist/config/index.d.ts +2 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/merge.d.ts +1 -1
- package/dist/config/merge.d.ts.map +1 -1
- package/dist/config/presets.d.ts +15 -15
- package/dist/config/presets.d.ts.map +1 -1
- package/dist/config/presets.js +2 -2
- package/dist/config/presets.js.map +1 -1
- package/dist/config/types.d.ts +111 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +8 -0
- package/dist/config/types.js.map +1 -0
- package/dist/editor/PuckEditor.d.ts +88 -2
- package/dist/editor/PuckEditor.d.ts.map +1 -1
- package/dist/editor/PuckEditor.js +41 -13
- package/dist/editor/PuckEditor.js.map +1 -1
- package/dist/editor/PuckEditorImpl.client.d.ts +49 -4
- package/dist/editor/PuckEditorImpl.client.d.ts.map +1 -1
- package/dist/editor/PuckEditorImpl.client.js +191 -14
- package/dist/editor/PuckEditorImpl.client.js.map +1 -1
- package/dist/editor/ai-plugin-overrides.css +20 -0
- package/dist/editor/components/HeaderActions.d.ts +7 -2
- package/dist/editor/components/HeaderActions.d.ts.map +1 -1
- package/dist/editor/components/HeaderActions.js +16 -3
- package/dist/editor/components/HeaderActions.js.map +1 -1
- package/dist/editor/components/IframeWrapper.d.ts +13 -0
- package/dist/editor/components/IframeWrapper.d.ts.map +1 -1
- package/dist/editor/components/IframeWrapper.js +60 -4
- package/dist/editor/components/IframeWrapper.js.map +1 -1
- package/dist/editor/components/PreviewModal.d.ts +9 -1
- package/dist/editor/components/PreviewModal.d.ts.map +1 -1
- package/dist/editor/components/PreviewModal.js +36 -1
- package/dist/editor/components/PreviewModal.js.map +1 -1
- package/dist/editor/index.d.ts +4 -0
- package/dist/editor/index.d.ts.map +1 -1
- package/dist/editor/index.js +4 -0
- package/dist/editor/index.js.map +1 -1
- package/dist/editor/plugins/VersionHistoryPanel.d.ts +43 -0
- package/dist/editor/plugins/VersionHistoryPanel.d.ts.map +1 -0
- package/dist/editor/plugins/VersionHistoryPanel.js +303 -0
- package/dist/editor/plugins/VersionHistoryPanel.js.map +1 -0
- package/dist/editor/plugins/index.d.ts +6 -3
- package/dist/editor/plugins/index.d.ts.map +1 -1
- package/dist/editor/plugins/index.js +7 -3
- package/dist/editor/plugins/index.js.map +1 -1
- package/dist/editor/plugins/versionHistoryPlugin.d.ts +37 -0
- package/dist/editor/plugins/versionHistoryPlugin.d.ts.map +1 -0
- package/dist/editor/plugins/versionHistoryPlugin.js +36 -0
- package/dist/editor/plugins/versionHistoryPlugin.js.map +1 -0
- package/dist/editor/utils/detectPageTree.d.ts +1 -1
- package/dist/editor/utils/detectPageTree.d.ts.map +1 -1
- package/dist/editor/utils/injectPageTreeFields.d.ts +1 -1
- package/dist/editor/utils/injectPageTreeFields.d.ts.map +1 -1
- package/dist/editor/utils/injectPageTreeFields.js +2 -2
- package/dist/editor/utils/injectPageTreeFields.js.map +1 -1
- package/dist/endpoints/ai.d.ts +36 -0
- package/dist/endpoints/ai.d.ts.map +1 -0
- package/dist/endpoints/ai.js +315 -0
- package/dist/endpoints/ai.js.map +1 -0
- package/dist/endpoints/context.d.ts +30 -0
- package/dist/endpoints/context.d.ts.map +1 -0
- package/dist/endpoints/context.js +123 -0
- package/dist/endpoints/context.js.map +1 -0
- package/dist/endpoints/prompts.d.ts +28 -0
- package/dist/endpoints/prompts.d.ts.map +1 -0
- package/dist/endpoints/prompts.js +118 -0
- package/dist/endpoints/prompts.js.map +1 -0
- package/dist/endpoints/styles.d.ts +19 -0
- package/dist/endpoints/styles.d.ts.map +1 -0
- package/dist/endpoints/styles.js +116 -0
- package/dist/endpoints/styles.js.map +1 -0
- package/dist/fields/AlignmentField.d.ts +1 -1
- package/dist/fields/AlignmentField.d.ts.map +1 -1
- package/dist/fields/AlignmentField.js +1 -0
- package/dist/fields/AlignmentField.js.map +1 -1
- package/dist/fields/AnimationField.d.ts +1 -1
- package/dist/fields/AnimationField.d.ts.map +1 -1
- package/dist/fields/BackgroundField.d.ts +1 -1
- package/dist/fields/BackgroundField.d.ts.map +1 -1
- package/dist/fields/BackgroundField.js +9 -4
- package/dist/fields/BackgroundField.js.map +1 -1
- package/dist/fields/BorderField.d.ts +1 -1
- package/dist/fields/BorderField.d.ts.map +1 -1
- package/dist/fields/BorderField.js +1 -0
- package/dist/fields/BorderField.js.map +1 -1
- package/dist/fields/ColorPickerField.d.ts +1 -1
- package/dist/fields/ColorPickerField.d.ts.map +1 -1
- package/dist/fields/ColorPickerField.js +4 -2
- package/dist/fields/ColorPickerField.js.map +1 -1
- package/dist/fields/ContentAlignmentField.d.ts +66 -0
- package/dist/fields/ContentAlignmentField.d.ts.map +1 -0
- package/dist/fields/ContentAlignmentField.js +255 -0
- package/dist/fields/ContentAlignmentField.js.map +1 -0
- package/dist/fields/DimensionsField.d.ts +1 -1
- package/dist/fields/DimensionsField.d.ts.map +1 -1
- package/dist/fields/DimensionsField.js +8 -2
- package/dist/fields/DimensionsField.js.map +1 -1
- package/dist/fields/FlexAlignmentField.d.ts +1 -1
- package/dist/fields/FlexAlignmentField.d.ts.map +1 -1
- package/dist/fields/FolderPickerField.d.ts +1 -1
- package/dist/fields/FolderPickerField.d.ts.map +1 -1
- package/dist/fields/GradientEditor.d.ts.map +1 -1
- package/dist/fields/GradientEditor.js +3 -0
- package/dist/fields/GradientEditor.js.map +1 -1
- package/dist/fields/LockedField.d.ts +1 -1
- package/dist/fields/LockedField.d.ts.map +1 -1
- package/dist/fields/MarginField.d.ts +1 -1
- package/dist/fields/MarginField.d.ts.map +1 -1
- package/dist/fields/MediaField.d.ts +1 -1
- package/dist/fields/MediaField.d.ts.map +1 -1
- package/dist/fields/MediaField.js +3 -2
- package/dist/fields/MediaField.js.map +1 -1
- package/dist/fields/PaddingField.d.ts +1 -1
- package/dist/fields/PaddingField.d.ts.map +1 -1
- package/dist/fields/PageSegmentField.d.ts +18 -1
- package/dist/fields/PageSegmentField.d.ts.map +1 -1
- package/dist/fields/PageSegmentField.js +106 -1
- package/dist/fields/PageSegmentField.js.map +1 -1
- package/dist/fields/ResetField.d.ts +1 -1
- package/dist/fields/ResetField.d.ts.map +1 -1
- package/dist/fields/ResetField.js +1 -1
- package/dist/fields/ResetField.js.map +1 -1
- package/dist/fields/ResponsiveField.d.ts +1 -1
- package/dist/fields/ResponsiveField.d.ts.map +1 -1
- package/dist/fields/ResponsiveField.js +5 -2
- package/dist/fields/ResponsiveField.js.map +1 -1
- package/dist/fields/ResponsiveVisibilityField.d.ts +1 -1
- package/dist/fields/ResponsiveVisibilityField.d.ts.map +1 -1
- package/dist/fields/ResponsiveVisibilityField.js +4 -3
- package/dist/fields/ResponsiveVisibilityField.js.map +1 -1
- package/dist/fields/SizeField.d.ts +3 -25
- package/dist/fields/SizeField.d.ts.map +1 -1
- package/dist/fields/SizeField.js +8 -34
- package/dist/fields/SizeField.js.map +1 -1
- package/dist/fields/SlugPreviewField.d.ts +1 -1
- package/dist/fields/SlugPreviewField.d.ts.map +1 -1
- package/dist/fields/TemplateField.d.ts +1 -1
- package/dist/fields/TemplateField.d.ts.map +1 -1
- package/dist/fields/TemplateField.js +1 -1
- package/dist/fields/TemplateField.js.map +1 -1
- package/dist/fields/TransformField.d.ts +1 -1
- package/dist/fields/TransformField.d.ts.map +1 -1
- package/dist/fields/TransformField.js +2 -0
- package/dist/fields/TransformField.js.map +1 -1
- package/dist/fields/VerticalAlignmentField.d.ts +1 -1
- package/dist/fields/VerticalAlignmentField.d.ts.map +1 -1
- package/dist/fields/WidthField.d.ts +1 -1
- package/dist/fields/WidthField.d.ts.map +1 -1
- package/dist/fields/index.d.ts +9 -37
- package/dist/fields/index.d.ts.map +1 -1
- package/dist/fields/index.js +21 -79
- package/dist/fields/index.js.map +1 -1
- package/dist/fields/richtext/controls/ColorPickerControl.d.ts +16 -0
- package/dist/fields/richtext/controls/ColorPickerControl.d.ts.map +1 -0
- package/dist/fields/richtext/controls/ColorPickerControl.js +116 -0
- package/dist/fields/richtext/controls/ColorPickerControl.js.map +1 -0
- package/dist/fields/richtext/controls/DropdownPortal.d.ts +17 -0
- package/dist/fields/richtext/controls/DropdownPortal.d.ts.map +1 -0
- package/dist/fields/richtext/controls/DropdownPortal.js +90 -0
- package/dist/fields/richtext/controls/DropdownPortal.js.map +1 -0
- package/dist/fields/richtext/controls/FontSizeControl.d.ts +8 -0
- package/dist/fields/richtext/controls/FontSizeControl.d.ts.map +1 -0
- package/dist/fields/richtext/controls/FontSizeControl.js +62 -0
- package/dist/fields/richtext/controls/FontSizeControl.js.map +1 -0
- package/dist/fields/richtext/controls/HighlightControl.d.ts +9 -0
- package/dist/fields/richtext/controls/HighlightControl.d.ts.map +1 -0
- package/dist/fields/richtext/controls/HighlightControl.js +44 -0
- package/dist/fields/richtext/controls/HighlightControl.js.map +1 -0
- package/dist/fields/richtext/controls/index.d.ts +11 -0
- package/dist/fields/richtext/controls/index.d.ts.map +1 -0
- package/dist/fields/richtext/controls/index.js +16 -0
- package/dist/fields/richtext/controls/index.js.map +1 -0
- package/dist/fields/richtext/controls/shared.d.ts +97 -0
- package/dist/fields/richtext/controls/shared.d.ts.map +1 -0
- package/dist/fields/richtext/controls/shared.js +344 -0
- package/dist/fields/richtext/controls/shared.js.map +1 -0
- package/dist/fields/richtext/createRichTextField.d.ts +165 -0
- package/dist/fields/richtext/createRichTextField.d.ts.map +1 -0
- package/dist/fields/richtext/createRichTextField.js +139 -0
- package/dist/fields/richtext/createRichTextField.js.map +1 -0
- package/dist/fields/richtext/extensions/FontSize.d.ts +23 -0
- package/dist/fields/richtext/extensions/FontSize.d.ts.map +1 -0
- package/dist/fields/richtext/extensions/FontSize.js +47 -0
- package/dist/fields/richtext/extensions/FontSize.js.map +1 -0
- package/dist/fields/richtext/extensions/index.d.ts +5 -0
- package/dist/fields/richtext/extensions/index.d.ts.map +1 -0
- package/dist/fields/richtext/extensions/index.js +5 -0
- package/dist/fields/richtext/extensions/index.js.map +1 -0
- package/dist/fields/richtext/index.d.ts +14 -0
- package/dist/fields/richtext/index.d.ts.map +1 -0
- package/dist/fields/richtext/index.js +19 -0
- package/dist/fields/richtext/index.js.map +1 -0
- package/dist/fields/richtext/richtext-menu.css +50 -0
- package/dist/fields/shared.d.ts +27 -1
- package/dist/fields/shared.d.ts.map +1 -1
- package/dist/fields/shared.js +34 -0
- package/dist/fields/shared.js.map +1 -1
- package/dist/layouts/types.d.ts +30 -0
- package/dist/layouts/types.d.ts.map +1 -1
- package/dist/plugin/index.d.ts +1 -0
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +111 -1
- package/dist/plugin/index.js.map +1 -1
- package/dist/render/HybridPageRenderer.d.ts +47 -4
- package/dist/render/HybridPageRenderer.d.ts.map +1 -1
- package/dist/render/HybridPageRenderer.js +45 -0
- package/dist/render/HybridPageRenderer.js.map +1 -1
- package/dist/render/PageRenderer.d.ts +1 -1
- package/dist/render/PageRenderer.d.ts.map +1 -1
- package/dist/render/PageRenderer.js +1 -1
- package/dist/render/PageRenderer.js.map +1 -1
- package/dist/render/PuckEditor.client.d.ts +2 -2
- package/dist/render/PuckEditor.client.d.ts.map +1 -1
- package/dist/render/PuckEditor.client.js +2 -2
- package/dist/render/PuckEditor.client.js.map +1 -1
- package/dist/render/index.d.ts +2 -2
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +1 -1
- package/dist/render/index.js.map +1 -1
- package/dist/types/index.d.ts +36 -11
- package/dist/types/index.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/views/PuckConfigContext.d.ts +56 -2
- package/dist/views/PuckConfigContext.d.ts.map +1 -1
- package/dist/views/PuckConfigContext.js +6 -3
- package/dist/views/PuckConfigContext.js.map +1 -1
- package/dist/views/PuckEditorView.d.ts.map +1 -1
- package/dist/views/PuckEditorView.js +36 -8
- package/dist/views/PuckEditorView.js.map +1 -1
- package/package.json +34 -10
- package/dist/components/typography/RichText.d.ts +0 -20
- package/dist/components/typography/RichText.d.ts.map +0 -1
- package/dist/components/typography/RichText.js +0 -73
- package/dist/components/typography/RichText.js.map +0 -1
- package/dist/fields/TiptapField.d.ts +0 -40
- package/dist/fields/TiptapField.d.ts.map +0 -1
- package/dist/fields/TiptapField.js +0 -857
- package/dist/fields/TiptapField.js.map +0 -1
- package/dist/fields/TiptapModal.d.ts +0 -10
- package/dist/fields/TiptapModal.d.ts.map +0 -1
- package/dist/fields/TiptapModal.js +0 -114
- package/dist/fields/TiptapModal.js.map +0 -1
- package/dist/fields/TiptapModalField.d.ts +0 -23
- package/dist/fields/TiptapModalField.d.ts.map +0 -1
- package/dist/fields/TiptapModalField.js +0 -55
- package/dist/fields/TiptapModalField.js.map +0 -1
- package/dist/fields/richtext-output.css +0 -219
- package/dist/fields/tiptap-styles.css +0 -248
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Context Collection
|
|
3
|
+
*
|
|
4
|
+
* Stores business context entries for the AI chat interface.
|
|
5
|
+
* These context entries are concatenated and sent to the AI system prompt
|
|
6
|
+
* to help it understand your brand, tone, and requirements.
|
|
7
|
+
*
|
|
8
|
+
* @example Creating context entries in Payload admin:
|
|
9
|
+
* - "Brand Guidelines" - Colors, fonts, brand voice
|
|
10
|
+
* - "Tone of Voice" - How to communicate
|
|
11
|
+
* - "Product Information" - What you sell/offer
|
|
12
|
+
* - "Industry Context" - Your market and audience
|
|
13
|
+
*/
|
|
14
|
+
export const AiContextCollection = {
|
|
15
|
+
slug: 'puck-ai-context',
|
|
16
|
+
labels: {
|
|
17
|
+
singular: 'AI Context',
|
|
18
|
+
plural: 'AI Contexts',
|
|
19
|
+
},
|
|
20
|
+
admin: {
|
|
21
|
+
group: 'Puck',
|
|
22
|
+
useAsTitle: 'name',
|
|
23
|
+
defaultColumns: ['name', 'category', 'enabled', 'order', 'updatedAt'],
|
|
24
|
+
hidden: false, // Visible in admin for context management
|
|
25
|
+
description: 'Business context for AI page generation. Add entries for brand guidelines, tone of voice, product info, etc.',
|
|
26
|
+
},
|
|
27
|
+
access: {
|
|
28
|
+
// Default: authenticated users can manage context
|
|
29
|
+
read: ({ req }) => Boolean(req.user),
|
|
30
|
+
create: ({ req }) => Boolean(req.user),
|
|
31
|
+
update: ({ req }) => Boolean(req.user),
|
|
32
|
+
delete: ({ req }) => Boolean(req.user),
|
|
33
|
+
},
|
|
34
|
+
fields: [
|
|
35
|
+
{
|
|
36
|
+
name: 'name',
|
|
37
|
+
type: 'text',
|
|
38
|
+
required: true,
|
|
39
|
+
admin: {
|
|
40
|
+
description: 'Name for this context block (e.g., "Brand Guidelines", "Tone of Voice")',
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'content',
|
|
45
|
+
type: 'textarea',
|
|
46
|
+
required: true,
|
|
47
|
+
admin: {
|
|
48
|
+
description: 'The context content in markdown format. Use headers (##) to organize, lists for guidelines, etc.',
|
|
49
|
+
rows: 12,
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'category',
|
|
54
|
+
type: 'select',
|
|
55
|
+
options: [
|
|
56
|
+
{ label: 'Brand Guidelines', value: 'brand' },
|
|
57
|
+
{ label: 'Tone of Voice', value: 'tone' },
|
|
58
|
+
{ label: 'Product Information', value: 'product' },
|
|
59
|
+
{ label: 'Industry Context', value: 'industry' },
|
|
60
|
+
{ label: 'Technical Requirements', value: 'technical' },
|
|
61
|
+
{ label: 'Page Patterns', value: 'patterns' },
|
|
62
|
+
{ label: 'Other', value: 'other' },
|
|
63
|
+
],
|
|
64
|
+
admin: {
|
|
65
|
+
description: 'Category for organizing context blocks',
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'enabled',
|
|
70
|
+
type: 'checkbox',
|
|
71
|
+
defaultValue: true,
|
|
72
|
+
admin: {
|
|
73
|
+
description: 'Include this context in AI prompts. Uncheck to temporarily disable.',
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'order',
|
|
78
|
+
type: 'number',
|
|
79
|
+
defaultValue: 0,
|
|
80
|
+
admin: {
|
|
81
|
+
description: 'Order in the context (lower numbers appear earlier in the prompt)',
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
timestamps: true,
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=AiContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AiContext.js","sourceRoot":"","sources":["../../../src/ai/collections/AiContext.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAqB;IACnD,IAAI,EAAE,iBAAiB;IACvB,MAAM,EAAE;QACN,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE,aAAa;KACtB;IACD,KAAK,EAAE;QACL,KAAK,EAAE,MAAM;QACb,UAAU,EAAE,MAAM;QAClB,cAAc,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC;QACrE,MAAM,EAAE,KAAK,EAAE,0CAA0C;QACzD,WAAW,EACT,8GAA8G;KACjH;IACD,MAAM,EAAE;QACN,kDAAkD;QAClD,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACpC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACtC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACtC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;KACvC;IACD,MAAM,EAAE;QACN;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE;gBACL,WAAW,EAAE,yEAAyE;aACvF;SACF;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE;gBACL,WAAW,EACT,kGAAkG;gBACpG,IAAI,EAAE,EAAE;aACT;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE;gBAC7C,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE;gBACzC,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,SAAS,EAAE;gBAClD,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,UAAU,EAAE;gBAChD,EAAE,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,WAAW,EAAE;gBACvD,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE;gBAC7C,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;aACnC;YACD,KAAK,EAAE;gBACL,WAAW,EAAE,wCAAwC;aACtD;SACF;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE;gBACL,WAAW,EAAE,qEAAqE;aACnF;SACF;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,CAAC;YACf,KAAK,EAAE;gBACL,WAAW,EAAE,mEAAmE;aACjF;SACF;KACF;IACD,UAAU,EAAE,IAAI;CACjB,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CollectionConfig } from 'payload';
|
|
2
|
+
/**
|
|
3
|
+
* AI Prompts Collection
|
|
4
|
+
*
|
|
5
|
+
* Stores example prompts for the AI chat interface.
|
|
6
|
+
* These prompts are displayed in the Puck editor for users to quickly
|
|
7
|
+
* start common AI generation tasks.
|
|
8
|
+
*/
|
|
9
|
+
export declare const AiPromptsCollection: CollectionConfig;
|
|
10
|
+
//# sourceMappingURL=AiPrompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Prompts Collection
|
|
3
|
+
*
|
|
4
|
+
* Stores example prompts for the AI chat interface.
|
|
5
|
+
* These prompts are displayed in the Puck editor for users to quickly
|
|
6
|
+
* start common AI generation tasks.
|
|
7
|
+
*/
|
|
8
|
+
export const AiPromptsCollection = {
|
|
9
|
+
slug: 'puck-ai-prompts',
|
|
10
|
+
labels: {
|
|
11
|
+
singular: 'AI Prompt',
|
|
12
|
+
plural: 'AI Prompts',
|
|
13
|
+
},
|
|
14
|
+
admin: {
|
|
15
|
+
group: 'Puck',
|
|
16
|
+
useAsTitle: 'label',
|
|
17
|
+
defaultColumns: ['label', 'category', 'order', 'updatedAt'],
|
|
18
|
+
hidden: false, // Visible in admin for prompt management
|
|
19
|
+
},
|
|
20
|
+
access: {
|
|
21
|
+
// Default: authenticated users can manage prompts
|
|
22
|
+
read: ({ req }) => Boolean(req.user),
|
|
23
|
+
create: ({ req }) => Boolean(req.user),
|
|
24
|
+
update: ({ req }) => Boolean(req.user),
|
|
25
|
+
delete: ({ req }) => Boolean(req.user),
|
|
26
|
+
},
|
|
27
|
+
fields: [
|
|
28
|
+
{
|
|
29
|
+
name: 'label',
|
|
30
|
+
type: 'text',
|
|
31
|
+
required: true,
|
|
32
|
+
admin: {
|
|
33
|
+
description: 'Display label for the prompt (e.g., "Landing page")',
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'prompt',
|
|
38
|
+
type: 'textarea',
|
|
39
|
+
required: true,
|
|
40
|
+
admin: {
|
|
41
|
+
description: 'The actual prompt text sent to the AI',
|
|
42
|
+
rows: 4,
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'category',
|
|
47
|
+
type: 'text',
|
|
48
|
+
admin: {
|
|
49
|
+
description: 'Optional category for grouping prompts (e.g., "Marketing", "Product")',
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'order',
|
|
54
|
+
type: 'number',
|
|
55
|
+
defaultValue: 0,
|
|
56
|
+
admin: {
|
|
57
|
+
description: 'Display order (lower numbers appear first)',
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
timestamps: true,
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=AiPrompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AiPrompts.js","sourceRoot":"","sources":["../../../src/ai/collections/AiPrompts.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAqB;IACnD,IAAI,EAAE,iBAAiB;IACvB,MAAM,EAAE;QACN,QAAQ,EAAE,WAAW;QACrB,MAAM,EAAE,YAAY;KACrB;IACD,KAAK,EAAE;QACL,KAAK,EAAE,MAAM;QACb,UAAU,EAAE,OAAO;QACnB,cAAc,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC;QAC3D,MAAM,EAAE,KAAK,EAAE,yCAAyC;KACzD;IACD,MAAM,EAAE;QACN,kDAAkD;QAClD,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACpC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACtC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACtC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;KACvC;IACD,MAAM,EAAE;QACN;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE;gBACL,WAAW,EAAE,qDAAqD;aACnE;SACF;QACD;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE;gBACL,WAAW,EAAE,uCAAuC;gBACpD,IAAI,EAAE,CAAC;aACR;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE;gBACL,WAAW,EAAE,uEAAuE;aACrF;SACF;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,CAAC;YACf,KAAK,EAAE;gBACL,WAAW,EAAE,4CAA4C;aAC1D;SACF;KACF;IACD,UAAU,EAAE,IAAI;CACjB,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { PuckAiRoutesConfig, PuckAiRouteHandlers } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates API route handlers for /api/puck/[...all]
|
|
4
|
+
*
|
|
5
|
+
* Wraps @puckeditor/cloud-client's puckHandler with authentication
|
|
6
|
+
* and custom context/tools support.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* // app/api/puck/[...all]/route.ts
|
|
11
|
+
* import { createPuckAiApiRoutes } from '@delmaredigital/payload-puck/ai'
|
|
12
|
+
* import config from '@payload-config'
|
|
13
|
+
* import { z } from 'zod'
|
|
14
|
+
*
|
|
15
|
+
* export const POST = createPuckAiApiRoutes({
|
|
16
|
+
* payloadConfig: config,
|
|
17
|
+
* auth: {
|
|
18
|
+
* authenticate: async (request) => {
|
|
19
|
+
* const session = await auth.api.getSession({ headers: request.headers })
|
|
20
|
+
* if (!session?.user) return { authenticated: false }
|
|
21
|
+
* return { authenticated: true, user: session.user }
|
|
22
|
+
* },
|
|
23
|
+
* },
|
|
24
|
+
* ai: {
|
|
25
|
+
* context: 'We are Acme Corp. You build our landing pages.',
|
|
26
|
+
* tools: {
|
|
27
|
+
* getProducts: {
|
|
28
|
+
* description: 'Get a list of products',
|
|
29
|
+
* inputSchema: z.object({}),
|
|
30
|
+
* execute: async () => {
|
|
31
|
+
* return await payload.find({ collection: 'products' })
|
|
32
|
+
* },
|
|
33
|
+
* },
|
|
34
|
+
* },
|
|
35
|
+
* },
|
|
36
|
+
* })
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function createPuckAiApiRoutes(config: PuckAiRoutesConfig): PuckAiRouteHandlers;
|
|
40
|
+
//# sourceMappingURL=createAiApiRoutes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates API route handlers for /api/puck/[...all]
|
|
3
|
+
*
|
|
4
|
+
* Wraps @puckeditor/cloud-client's puckHandler with authentication
|
|
5
|
+
* and custom context/tools support.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // app/api/puck/[...all]/route.ts
|
|
10
|
+
* import { createPuckAiApiRoutes } from '@delmaredigital/payload-puck/ai'
|
|
11
|
+
* import config from '@payload-config'
|
|
12
|
+
* import { z } from 'zod'
|
|
13
|
+
*
|
|
14
|
+
* export const POST = createPuckAiApiRoutes({
|
|
15
|
+
* payloadConfig: config,
|
|
16
|
+
* auth: {
|
|
17
|
+
* authenticate: async (request) => {
|
|
18
|
+
* const session = await auth.api.getSession({ headers: request.headers })
|
|
19
|
+
* if (!session?.user) return { authenticated: false }
|
|
20
|
+
* return { authenticated: true, user: session.user }
|
|
21
|
+
* },
|
|
22
|
+
* },
|
|
23
|
+
* ai: {
|
|
24
|
+
* context: 'We are Acme Corp. You build our landing pages.',
|
|
25
|
+
* tools: {
|
|
26
|
+
* getProducts: {
|
|
27
|
+
* description: 'Get a list of products',
|
|
28
|
+
* inputSchema: z.object({}),
|
|
29
|
+
* execute: async () => {
|
|
30
|
+
* return await payload.find({ collection: 'products' })
|
|
31
|
+
* },
|
|
32
|
+
* },
|
|
33
|
+
* },
|
|
34
|
+
* },
|
|
35
|
+
* })
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export function createPuckAiApiRoutes(config) {
|
|
39
|
+
const { auth, ai, onError } = config;
|
|
40
|
+
return {
|
|
41
|
+
POST: async (request) => {
|
|
42
|
+
try {
|
|
43
|
+
// 1. Authenticate the request
|
|
44
|
+
const authResult = await auth.authenticate(request);
|
|
45
|
+
if (!authResult.authenticated) {
|
|
46
|
+
return new Response(JSON.stringify({ error: authResult.error || 'Unauthorized' }), {
|
|
47
|
+
status: 401,
|
|
48
|
+
headers: { 'Content-Type': 'application/json' },
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
// 2. Lazy import @puckeditor/cloud-client to avoid errors if not installed
|
|
52
|
+
let puckHandler;
|
|
53
|
+
let tool;
|
|
54
|
+
try {
|
|
55
|
+
const cloudClient = await import('@puckeditor/cloud-client');
|
|
56
|
+
puckHandler = cloudClient.puckHandler;
|
|
57
|
+
tool = cloudClient.tool;
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
return new Response(JSON.stringify({
|
|
61
|
+
error: 'AI features require @puckeditor/cloud-client. Please install it.',
|
|
62
|
+
}), {
|
|
63
|
+
status: 500,
|
|
64
|
+
headers: { 'Content-Type': 'application/json' },
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
// 3. Convert our tool format to Puck's tool format
|
|
68
|
+
const puckTools = {};
|
|
69
|
+
if (ai?.tools) {
|
|
70
|
+
for (const [name, toolDef] of Object.entries(ai.tools)) {
|
|
71
|
+
puckTools[name] = tool({
|
|
72
|
+
description: toolDef.description,
|
|
73
|
+
inputSchema: toolDef.inputSchema,
|
|
74
|
+
execute: toolDef.execute,
|
|
75
|
+
name: toolDef.name,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// 4. Call puckHandler with our configuration
|
|
80
|
+
return puckHandler(request, {
|
|
81
|
+
apiKey: ai?.apiKey,
|
|
82
|
+
host: ai?.host,
|
|
83
|
+
ai: {
|
|
84
|
+
context: ai?.context,
|
|
85
|
+
tools: Object.keys(puckTools).length > 0 ? puckTools : undefined,
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
// Call custom error handler if provided
|
|
91
|
+
if (onError) {
|
|
92
|
+
onError(error, { operation: 'ai-chat', request });
|
|
93
|
+
}
|
|
94
|
+
console.error('[Puck AI] Error handling request:', error);
|
|
95
|
+
return new Response(JSON.stringify({
|
|
96
|
+
error: 'Internal server error',
|
|
97
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
98
|
+
}), {
|
|
99
|
+
status: 500,
|
|
100
|
+
headers: { 'Content-Type': 'application/json' },
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=createAiApiRoutes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createAiApiRoutes.js","sourceRoot":"","sources":["../../src/ai/createAiApiRoutes.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAA0B;IAC9D,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAEpC,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,OAAoB,EAAqB,EAAE;YACtD,IAAI,CAAC;gBACH,8BAA8B;gBAC9B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;gBAEnD,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;oBAC9B,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,cAAc,EAAE,CAAC,EAC7D;wBACE,MAAM,EAAE,GAAG;wBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;qBAChD,CACF,CAAA;gBACH,CAAC;gBAED,2EAA2E;gBAC3E,IAAI,WAAkE,CAAA;gBACtE,IAAI,IAAoD,CAAA;gBAExD,IAAI,CAAC;oBACH,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAA;oBAC5D,WAAW,GAAG,WAAW,CAAC,WAAW,CAAA;oBACrC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAA;gBACzB,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,SAAS,CAAC;wBACb,KAAK,EAAE,kEAAkE;qBAC1E,CAAC,EACF;wBACE,MAAM,EAAE,GAAG;wBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;qBAChD,CACF,CAAA;gBACH,CAAC;gBAED,mDAAmD;gBACnD,MAAM,SAAS,GAA4C,EAAE,CAAA;gBAC7D,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC;oBACd,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;wBACvD,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;4BACrB,WAAW,EAAE,OAAO,CAAC,WAAW;4BAChC,WAAW,EAAE,OAAO,CAAC,WAAW;4BAChC,OAAO,EAAE,OAAO,CAAC,OAAO;4BACxB,IAAI,EAAE,OAAO,CAAC,IAAI;yBACnB,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;gBAED,6CAA6C;gBAC7C,OAAO,WAAW,CAAC,OAAO,EAAE;oBAC1B,MAAM,EAAE,EAAE,EAAE,MAAM;oBAClB,IAAI,EAAE,EAAE,EAAE,IAAI;oBACd,EAAE,EAAE;wBACF,OAAO,EAAE,EAAE,EAAE,OAAO;wBACpB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;qBACjE;iBACF,CAAC,CAAA;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,wCAAwC;gBACxC,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAA;gBACnD,CAAC;gBAED,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAA;gBAEzD,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,SAAS,CAAC;oBACb,KAAK,EAAE,uBAAuB;oBAC9B,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAClE,CAAC,EACF;oBACE,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAChD,CACF,CAAA;YACH,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { AiGenerateConfig, AiGenerateFunction } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a headless AI page generation function
|
|
4
|
+
*
|
|
5
|
+
* Use this to generate Puck pages programmatically without the editor UI.
|
|
6
|
+
* Useful for batch generation, automated workflows, or API-driven page creation.
|
|
7
|
+
*
|
|
8
|
+
* @example Basic generation
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { createAiGenerate } from '@delmaredigital/payload-puck/ai'
|
|
11
|
+
* import { editorConfig } from '@delmaredigital/payload-puck/config/editor'
|
|
12
|
+
* import config from '@payload-config'
|
|
13
|
+
*
|
|
14
|
+
* const generatePage = createAiGenerate({
|
|
15
|
+
* payloadConfig: config,
|
|
16
|
+
* auth: {
|
|
17
|
+
* authenticate: async (req) => {
|
|
18
|
+
* // Authenticate the request
|
|
19
|
+
* return { authenticated: true, user: { id: 'system' } }
|
|
20
|
+
* },
|
|
21
|
+
* },
|
|
22
|
+
* ai: {
|
|
23
|
+
* context: 'We are Acme Corp. You build our marketing pages.',
|
|
24
|
+
* },
|
|
25
|
+
* })
|
|
26
|
+
*
|
|
27
|
+
* // Generate a new page
|
|
28
|
+
* const pageData = await generatePage({
|
|
29
|
+
* prompt: 'Create a landing page for our new product launch',
|
|
30
|
+
* puckConfig: editorConfig,
|
|
31
|
+
* })
|
|
32
|
+
*
|
|
33
|
+
* // Save to Payload
|
|
34
|
+
* await payload.create({
|
|
35
|
+
* collection: 'pages',
|
|
36
|
+
* data: {
|
|
37
|
+
* title: 'New Product Launch',
|
|
38
|
+
* slug: 'new-product',
|
|
39
|
+
* puckData: pageData,
|
|
40
|
+
* },
|
|
41
|
+
* })
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* @example Updating an existing page
|
|
45
|
+
* ```typescript
|
|
46
|
+
* // Fetch existing page
|
|
47
|
+
* const page = await payload.findByID({ collection: 'pages', id: 'abc123' })
|
|
48
|
+
*
|
|
49
|
+
* // Update with AI
|
|
50
|
+
* const updatedData = await generatePage({
|
|
51
|
+
* prompt: 'Add a testimonials section after the hero',
|
|
52
|
+
* puckConfig: editorConfig,
|
|
53
|
+
* pageData: page.puckData, // Pass existing data
|
|
54
|
+
* })
|
|
55
|
+
*
|
|
56
|
+
* // Save the update
|
|
57
|
+
* await payload.update({
|
|
58
|
+
* collection: 'pages',
|
|
59
|
+
* id: 'abc123',
|
|
60
|
+
* data: { puckData: updatedData },
|
|
61
|
+
* })
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare function createAiGenerate(config: AiGenerateConfig): AiGenerateFunction;
|
|
65
|
+
//# sourceMappingURL=createAiGenerate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a headless AI page generation function
|
|
3
|
+
*
|
|
4
|
+
* Use this to generate Puck pages programmatically without the editor UI.
|
|
5
|
+
* Useful for batch generation, automated workflows, or API-driven page creation.
|
|
6
|
+
*
|
|
7
|
+
* @example Basic generation
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { createAiGenerate } from '@delmaredigital/payload-puck/ai'
|
|
10
|
+
* import { editorConfig } from '@delmaredigital/payload-puck/config/editor'
|
|
11
|
+
* import config from '@payload-config'
|
|
12
|
+
*
|
|
13
|
+
* const generatePage = createAiGenerate({
|
|
14
|
+
* payloadConfig: config,
|
|
15
|
+
* auth: {
|
|
16
|
+
* authenticate: async (req) => {
|
|
17
|
+
* // Authenticate the request
|
|
18
|
+
* return { authenticated: true, user: { id: 'system' } }
|
|
19
|
+
* },
|
|
20
|
+
* },
|
|
21
|
+
* ai: {
|
|
22
|
+
* context: 'We are Acme Corp. You build our marketing pages.',
|
|
23
|
+
* },
|
|
24
|
+
* })
|
|
25
|
+
*
|
|
26
|
+
* // Generate a new page
|
|
27
|
+
* const pageData = await generatePage({
|
|
28
|
+
* prompt: 'Create a landing page for our new product launch',
|
|
29
|
+
* puckConfig: editorConfig,
|
|
30
|
+
* })
|
|
31
|
+
*
|
|
32
|
+
* // Save to Payload
|
|
33
|
+
* await payload.create({
|
|
34
|
+
* collection: 'pages',
|
|
35
|
+
* data: {
|
|
36
|
+
* title: 'New Product Launch',
|
|
37
|
+
* slug: 'new-product',
|
|
38
|
+
* puckData: pageData,
|
|
39
|
+
* },
|
|
40
|
+
* })
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @example Updating an existing page
|
|
44
|
+
* ```typescript
|
|
45
|
+
* // Fetch existing page
|
|
46
|
+
* const page = await payload.findByID({ collection: 'pages', id: 'abc123' })
|
|
47
|
+
*
|
|
48
|
+
* // Update with AI
|
|
49
|
+
* const updatedData = await generatePage({
|
|
50
|
+
* prompt: 'Add a testimonials section after the hero',
|
|
51
|
+
* puckConfig: editorConfig,
|
|
52
|
+
* pageData: page.puckData, // Pass existing data
|
|
53
|
+
* })
|
|
54
|
+
*
|
|
55
|
+
* // Save the update
|
|
56
|
+
* await payload.update({
|
|
57
|
+
* collection: 'pages',
|
|
58
|
+
* id: 'abc123',
|
|
59
|
+
* data: { puckData: updatedData },
|
|
60
|
+
* })
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export function createAiGenerate(config) {
|
|
64
|
+
const { ai } = config;
|
|
65
|
+
return async (options) => {
|
|
66
|
+
const { prompt, puckConfig, pageData } = options;
|
|
67
|
+
// Lazy import @puckeditor/cloud-client
|
|
68
|
+
let generate;
|
|
69
|
+
let tool;
|
|
70
|
+
try {
|
|
71
|
+
const cloudClient = await import('@puckeditor/cloud-client');
|
|
72
|
+
generate = cloudClient.generate;
|
|
73
|
+
tool = cloudClient.tool;
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
throw new Error('AI generation requires @puckeditor/cloud-client. Please install it with: pnpm add @puckeditor/cloud-client');
|
|
77
|
+
}
|
|
78
|
+
// Convert our tool format to Puck's tool format
|
|
79
|
+
const puckTools = {};
|
|
80
|
+
if (ai?.tools) {
|
|
81
|
+
for (const [name, toolDef] of Object.entries(ai.tools)) {
|
|
82
|
+
puckTools[name] = tool({
|
|
83
|
+
description: toolDef.description,
|
|
84
|
+
inputSchema: toolDef.inputSchema,
|
|
85
|
+
execute: toolDef.execute,
|
|
86
|
+
name: toolDef.name,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Call the generate API
|
|
91
|
+
const result = await generate({
|
|
92
|
+
prompt,
|
|
93
|
+
config: puckConfig,
|
|
94
|
+
context: ai?.context,
|
|
95
|
+
apiKey: ai?.apiKey,
|
|
96
|
+
host: ai?.host,
|
|
97
|
+
pageData,
|
|
98
|
+
tools: Object.keys(puckTools).length > 0 ? puckTools : undefined,
|
|
99
|
+
});
|
|
100
|
+
if (!result) {
|
|
101
|
+
throw new Error('AI generation failed: no result returned');
|
|
102
|
+
}
|
|
103
|
+
return result;
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=createAiGenerate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createAiGenerate.js","sourceRoot":"","sources":["../../src/ai/createAiGenerate.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACvD,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,CAAA;IAErB,OAAO,KAAK,EAAE,OAA0B,EAAqB,EAAE;QAC7D,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;QAEhD,uCAAuC;QACvC,IAAI,QAA4D,CAAA;QAChE,IAAI,IAAoD,CAAA;QAExD,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAA;YAC5D,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAA;YAC/B,IAAI,GAAG,WAAW,CAAC,IAAI,CAAA;QACzB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,4GAA4G,CAC7G,CAAA;QACH,CAAC;QAED,gDAAgD;QAChD,MAAM,SAAS,GAA4C,EAAE,CAAA;QAC7D,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC;YACd,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvD,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;oBACrB,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;iBACnB,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;YAC5B,MAAM;YACN,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,EAAE,EAAE,OAAO;YACpB,MAAM,EAAE,EAAE,EAAE,MAAM;YAClB,IAAI,EAAE,EAAE,EAAE,IAAI;YACd,QAAQ;YACR,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;SACjE,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;QAC7D,CAAC;QAED,OAAO,MAAkB,CAAA;IAC3B,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Plugin as PuckPlugin } from '@puckeditor/core';
|
|
2
|
+
import type { AiPluginOptions } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Creates a Puck AI plugin for the editor
|
|
5
|
+
*
|
|
6
|
+
* Wraps @puckeditor/plugin-ai with sensible defaults for payload-puck.
|
|
7
|
+
* This factory allows for runtime-configurable prompts (from database, API, etc.).
|
|
8
|
+
*
|
|
9
|
+
* @example Basic usage
|
|
10
|
+
* ```tsx
|
|
11
|
+
* import { createAiPlugin } from '@delmaredigital/payload-puck/ai'
|
|
12
|
+
*
|
|
13
|
+
* const aiPlugin = createAiPlugin({
|
|
14
|
+
* host: '/api/puck',
|
|
15
|
+
* examplePrompts: [
|
|
16
|
+
* { label: 'Landing page', prompt: 'Create a landing page about our product' },
|
|
17
|
+
* ],
|
|
18
|
+
* })
|
|
19
|
+
*
|
|
20
|
+
* <PuckEditor plugins={[aiPlugin]} />
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @example With runtime prompts from database
|
|
24
|
+
* ```tsx
|
|
25
|
+
* // Fetch prompts from Payload
|
|
26
|
+
* const prompts = await payload.find({ collection: 'puck-ai-prompts' })
|
|
27
|
+
*
|
|
28
|
+
* const aiPlugin = createAiPlugin({
|
|
29
|
+
* examplePrompts: prompts.docs.map(p => ({
|
|
30
|
+
* label: p.label,
|
|
31
|
+
* prompt: p.prompt,
|
|
32
|
+
* })),
|
|
33
|
+
* })
|
|
34
|
+
*
|
|
35
|
+
* <PuckEditor plugins={[aiPlugin]} />
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare function createAiPlugin(options?: AiPluginOptions): PuckPlugin;
|
|
39
|
+
//# sourceMappingURL=createAiPlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a Puck AI plugin for the editor
|
|
4
|
+
*
|
|
5
|
+
* Wraps @puckeditor/plugin-ai with sensible defaults for payload-puck.
|
|
6
|
+
* This factory allows for runtime-configurable prompts (from database, API, etc.).
|
|
7
|
+
*
|
|
8
|
+
* @example Basic usage
|
|
9
|
+
* ```tsx
|
|
10
|
+
* import { createAiPlugin } from '@delmaredigital/payload-puck/ai'
|
|
11
|
+
*
|
|
12
|
+
* const aiPlugin = createAiPlugin({
|
|
13
|
+
* host: '/api/puck',
|
|
14
|
+
* examplePrompts: [
|
|
15
|
+
* { label: 'Landing page', prompt: 'Create a landing page about our product' },
|
|
16
|
+
* ],
|
|
17
|
+
* })
|
|
18
|
+
*
|
|
19
|
+
* <PuckEditor plugins={[aiPlugin]} />
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @example With runtime prompts from database
|
|
23
|
+
* ```tsx
|
|
24
|
+
* // Fetch prompts from Payload
|
|
25
|
+
* const prompts = await payload.find({ collection: 'puck-ai-prompts' })
|
|
26
|
+
*
|
|
27
|
+
* const aiPlugin = createAiPlugin({
|
|
28
|
+
* examplePrompts: prompts.docs.map(p => ({
|
|
29
|
+
* label: p.label,
|
|
30
|
+
* prompt: p.prompt,
|
|
31
|
+
* })),
|
|
32
|
+
* })
|
|
33
|
+
*
|
|
34
|
+
* <PuckEditor plugins={[aiPlugin]} />
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export function createAiPlugin(options = {}) {
|
|
38
|
+
const { host = '/api/puck', examplePrompts, onSubmit } = options;
|
|
39
|
+
// Dynamic import to avoid build errors if plugin-ai not installed
|
|
40
|
+
// Also allows for tree-shaking when AI is not used
|
|
41
|
+
try {
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
43
|
+
const { createAiPlugin: createPuckAiPlugin } = require('@puckeditor/plugin-ai');
|
|
44
|
+
return createPuckAiPlugin({
|
|
45
|
+
host,
|
|
46
|
+
chat: {
|
|
47
|
+
examplePrompts,
|
|
48
|
+
onSubmit,
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
// Return a placeholder plugin if @puckeditor/plugin-ai is not installed
|
|
54
|
+
console.warn('[payload-puck] AI plugin requested but @puckeditor/plugin-ai not installed. ' +
|
|
55
|
+
'Install it with: pnpm add @puckeditor/plugin-ai');
|
|
56
|
+
return {
|
|
57
|
+
name: 'ai-placeholder',
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=createAiPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createAiPlugin.js","sourceRoot":"","sources":["../../src/ai/createAiPlugin.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAKZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,cAAc,CAAC,UAA2B,EAAE;IAC1D,MAAM,EAAE,IAAI,GAAG,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAEhE,kEAAkE;IAClE,mDAAmD;IACnD,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;QAE/E,OAAO,kBAAkB,CAAC;YACxB,IAAI;YACJ,IAAI,EAAE;gBACJ,cAAc;gBACd,QAAQ;aACT;SACF,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,wEAAwE;QACxE,OAAO,CAAC,IAAI,CACV,8EAA8E;YAC5E,iDAAiD,CACpD,CAAA;QAED,OAAO;YACL,IAAI,EAAE,gBAAgB;SACvB,CAAA;IACH,CAAC;AACH,CAAC"}
|