@delmaredigital/payload-puck 0.4.0 → 0.6.0
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 +331 -16
- 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/types.d.ts +1 -1
- package/dist/api/types.d.ts.map +1 -1
- package/dist/components/exports.d.ts +1 -1
- package/dist/components/exports.d.ts.map +1 -1
- package/dist/components/exports.js +1 -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 +1 -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/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/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 +1 -1
- package/dist/fields/PageSegmentField.d.ts.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 +8 -36
- package/dist/fields/index.d.ts.map +1 -1
- package/dist/fields/index.js +20 -78
- 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 +1 -1
- package/dist/render/HybridPageRenderer.d.ts.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/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 +23 -1
- 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 @@
|
|
|
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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { AiContext } from '../types.js';
|
|
2
|
+
/** Event name for context updates */
|
|
3
|
+
export declare const AI_CONTEXT_UPDATED_EVENT = "puck:ai-context-updated";
|
|
4
|
+
/**
|
|
5
|
+
* Dispatches an event to notify that AI context has been updated
|
|
6
|
+
* Call this after creating, editing, or deleting a context entry
|
|
7
|
+
*/
|
|
8
|
+
export declare function dispatchContextUpdated(): void;
|
|
9
|
+
export interface UseAiContextOptions {
|
|
10
|
+
/**
|
|
11
|
+
* API endpoint to fetch context from
|
|
12
|
+
* @default '/api/puck/ai-context'
|
|
13
|
+
*/
|
|
14
|
+
apiEndpoint?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Whether to enable fetching
|
|
17
|
+
* @default true
|
|
18
|
+
*/
|
|
19
|
+
enabled?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Whether to include disabled entries
|
|
22
|
+
* @default false
|
|
23
|
+
*/
|
|
24
|
+
includeDisabled?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface UseAiContextReturn {
|
|
27
|
+
/** Array of context entries */
|
|
28
|
+
context: AiContext[];
|
|
29
|
+
/** Loading state */
|
|
30
|
+
loading: boolean;
|
|
31
|
+
/** Error message if any */
|
|
32
|
+
error: string | null;
|
|
33
|
+
/** Refetch context entries */
|
|
34
|
+
refetch: () => Promise<void>;
|
|
35
|
+
/** Create a new context entry */
|
|
36
|
+
create: (data: Omit<AiContext, 'id' | 'createdAt' | 'updatedAt'>) => Promise<AiContext | null>;
|
|
37
|
+
/** Update an existing context entry */
|
|
38
|
+
update: (id: string, data: Partial<AiContext>) => Promise<AiContext | null>;
|
|
39
|
+
/** Delete a context entry */
|
|
40
|
+
remove: (id: string) => Promise<boolean>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Hook to fetch and manage AI context entries client-side
|
|
44
|
+
*
|
|
45
|
+
* When context is updated via the context editor panel, this hook will
|
|
46
|
+
* automatically refetch to stay in sync.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```tsx
|
|
50
|
+
* const { context, loading, create, update, remove } = useAiContext()
|
|
51
|
+
*
|
|
52
|
+
* // Create a new context entry
|
|
53
|
+
* await create({ name: 'Brand Guidelines', content: '...', enabled: true })
|
|
54
|
+
*
|
|
55
|
+
* // Update an entry
|
|
56
|
+
* await update(context[0].id, { content: 'Updated content' })
|
|
57
|
+
*
|
|
58
|
+
* // Delete an entry
|
|
59
|
+
* await remove(context[0].id)
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare function useAiContext(options?: UseAiContextOptions): UseAiContextReturn;
|
|
63
|
+
//# sourceMappingURL=useAiContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
3
|
+
/** Event name for context updates */
|
|
4
|
+
export const AI_CONTEXT_UPDATED_EVENT = 'puck:ai-context-updated';
|
|
5
|
+
/**
|
|
6
|
+
* Dispatches an event to notify that AI context has been updated
|
|
7
|
+
* Call this after creating, editing, or deleting a context entry
|
|
8
|
+
*/
|
|
9
|
+
export function dispatchContextUpdated() {
|
|
10
|
+
if (typeof window !== 'undefined') {
|
|
11
|
+
window.dispatchEvent(new CustomEvent(AI_CONTEXT_UPDATED_EVENT));
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Hook to fetch and manage AI context entries client-side
|
|
16
|
+
*
|
|
17
|
+
* When context is updated via the context editor panel, this hook will
|
|
18
|
+
* automatically refetch to stay in sync.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```tsx
|
|
22
|
+
* const { context, loading, create, update, remove } = useAiContext()
|
|
23
|
+
*
|
|
24
|
+
* // Create a new context entry
|
|
25
|
+
* await create({ name: 'Brand Guidelines', content: '...', enabled: true })
|
|
26
|
+
*
|
|
27
|
+
* // Update an entry
|
|
28
|
+
* await update(context[0].id, { content: 'Updated content' })
|
|
29
|
+
*
|
|
30
|
+
* // Delete an entry
|
|
31
|
+
* await remove(context[0].id)
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export function useAiContext(options = {}) {
|
|
35
|
+
const { apiEndpoint = '/api/puck/ai-context', enabled = true, includeDisabled = false, } = options;
|
|
36
|
+
const [context, setContext] = useState([]);
|
|
37
|
+
const [loading, setLoading] = useState(true);
|
|
38
|
+
const [error, setError] = useState(null);
|
|
39
|
+
const fetchContext = useCallback(async () => {
|
|
40
|
+
if (!enabled) {
|
|
41
|
+
setLoading(false);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
setLoading(true);
|
|
46
|
+
setError(null);
|
|
47
|
+
const url = includeDisabled ? `${apiEndpoint}?all=true` : apiEndpoint;
|
|
48
|
+
const response = await fetch(url);
|
|
49
|
+
if (!response.ok) {
|
|
50
|
+
throw new Error('Failed to fetch context');
|
|
51
|
+
}
|
|
52
|
+
const data = await response.json();
|
|
53
|
+
setContext(data.docs || []);
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
setError(err instanceof Error ? err.message : 'Failed to load context');
|
|
57
|
+
setContext([]);
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
setLoading(false);
|
|
61
|
+
}
|
|
62
|
+
}, [apiEndpoint, enabled, includeDisabled]);
|
|
63
|
+
// Create a new context entry
|
|
64
|
+
const create = useCallback(async (data) => {
|
|
65
|
+
try {
|
|
66
|
+
const response = await fetch(apiEndpoint, {
|
|
67
|
+
method: 'POST',
|
|
68
|
+
headers: { 'Content-Type': 'application/json' },
|
|
69
|
+
body: JSON.stringify(data),
|
|
70
|
+
});
|
|
71
|
+
if (!response.ok) {
|
|
72
|
+
throw new Error('Failed to create context entry');
|
|
73
|
+
}
|
|
74
|
+
const newEntry = await response.json();
|
|
75
|
+
dispatchContextUpdated();
|
|
76
|
+
return newEntry;
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
setError(err instanceof Error ? err.message : 'Failed to create context entry');
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
}, [apiEndpoint]);
|
|
83
|
+
// Update an existing context entry
|
|
84
|
+
const update = useCallback(async (id, data) => {
|
|
85
|
+
try {
|
|
86
|
+
const response = await fetch(`${apiEndpoint}/${id}`, {
|
|
87
|
+
method: 'PATCH',
|
|
88
|
+
headers: { 'Content-Type': 'application/json' },
|
|
89
|
+
body: JSON.stringify(data),
|
|
90
|
+
});
|
|
91
|
+
if (!response.ok) {
|
|
92
|
+
throw new Error('Failed to update context entry');
|
|
93
|
+
}
|
|
94
|
+
const updatedEntry = await response.json();
|
|
95
|
+
dispatchContextUpdated();
|
|
96
|
+
return updatedEntry;
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
setError(err instanceof Error ? err.message : 'Failed to update context entry');
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}, [apiEndpoint]);
|
|
103
|
+
// Delete a context entry
|
|
104
|
+
const remove = useCallback(async (id) => {
|
|
105
|
+
try {
|
|
106
|
+
const response = await fetch(`${apiEndpoint}/${id}`, {
|
|
107
|
+
method: 'DELETE',
|
|
108
|
+
});
|
|
109
|
+
if (!response.ok) {
|
|
110
|
+
throw new Error('Failed to delete context entry');
|
|
111
|
+
}
|
|
112
|
+
dispatchContextUpdated();
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
setError(err instanceof Error ? err.message : 'Failed to delete context entry');
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
}, [apiEndpoint]);
|
|
120
|
+
// Initial fetch
|
|
121
|
+
useEffect(() => {
|
|
122
|
+
fetchContext();
|
|
123
|
+
}, [fetchContext]);
|
|
124
|
+
// Listen for context updates
|
|
125
|
+
useEffect(() => {
|
|
126
|
+
if (!enabled)
|
|
127
|
+
return;
|
|
128
|
+
const handleUpdate = () => {
|
|
129
|
+
fetchContext();
|
|
130
|
+
};
|
|
131
|
+
window.addEventListener(AI_CONTEXT_UPDATED_EVENT, handleUpdate);
|
|
132
|
+
return () => {
|
|
133
|
+
window.removeEventListener(AI_CONTEXT_UPDATED_EVENT, handleUpdate);
|
|
134
|
+
};
|
|
135
|
+
}, [enabled, fetchContext]);
|
|
136
|
+
return {
|
|
137
|
+
context,
|
|
138
|
+
loading,
|
|
139
|
+
error,
|
|
140
|
+
refetch: fetchContext,
|
|
141
|
+
create,
|
|
142
|
+
update,
|
|
143
|
+
remove,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=useAiContext.js.map
|