@delmaredigital/payload-puck 0.6.12 → 0.6.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -1
- package/dist/admin/EditWithPuckButton.d.ts +1 -2
- package/dist/admin/EditWithPuckButton.js +64 -26
- package/dist/admin/EditWithPuckCell.d.ts +0 -1
- package/dist/admin/EditWithPuckCell.js +42 -14
- package/dist/admin/PuckEditorView.d.ts +1 -2
- package/dist/admin/PuckEditorView.js +117 -33
- package/dist/admin/client.d.ts +2 -3
- package/dist/admin/client.js +3 -5
- package/dist/admin/generateAdminComponents.d.ts +0 -1
- package/dist/admin/generateAdminComponents.js +6 -8
- package/dist/admin/index.d.ts +5 -6
- package/dist/admin/index.js +2 -3
- package/dist/ai/collections/AiContext.d.ts +0 -1
- package/dist/ai/collections/AiContext.js +55 -30
- package/dist/ai/collections/AiPrompts.d.ts +0 -1
- package/dist/ai/collections/AiPrompts.js +23 -20
- package/dist/ai/createAiApiRoutes.d.ts +0 -1
- package/dist/ai/createAiApiRoutes.js +27 -20
- package/dist/ai/createAiGenerate.d.ts +0 -1
- package/dist/ai/createAiGenerate.js +6 -9
- package/dist/ai/createAiPlugin.d.ts +0 -1
- package/dist/ai/createAiPlugin.js +6 -10
- package/dist/ai/hooks/useAiContext.d.ts +0 -1
- package/dist/ai/hooks/useAiContext.js +49 -40
- package/dist/ai/hooks/useAiPrompts.d.ts +0 -1
- package/dist/ai/hooks/useAiPrompts.js +32 -26
- package/dist/ai/index.d.ts +0 -1
- package/dist/ai/index.js +8 -11
- package/dist/ai/plugins/ContextEditorPanel.d.ts +1 -2
- package/dist/ai/plugins/ContextEditorPanel.js +398 -108
- package/dist/ai/plugins/PromptEditorPanel.d.ts +1 -2
- package/dist/ai/plugins/PromptEditorPanel.js +236 -52
- package/dist/ai/plugins/contextEditorPlugin.d.ts +0 -1
- package/dist/ai/plugins/contextEditorPlugin.js +11 -6
- package/dist/ai/plugins/promptApiRoutes.d.ts +0 -1
- package/dist/ai/plugins/promptApiRoutes.js +118 -51
- package/dist/ai/plugins/promptEditorPlugin.d.ts +0 -1
- package/dist/ai/plugins/promptEditorPlugin.js +11 -6
- package/dist/ai/presets/componentAiDefaults.d.ts +0 -1
- package/dist/ai/presets/componentAiDefaults.js +107 -84
- package/dist/ai/presets/index.d.ts +0 -1
- package/dist/ai/presets/index.js +11 -19
- package/dist/ai/presets/instructions/interactive.d.ts +0 -1
- package/dist/ai/presets/instructions/interactive.js +84 -76
- package/dist/ai/presets/instructions/layout.d.ts +0 -1
- package/dist/ai/presets/instructions/layout.js +121 -118
- package/dist/ai/presets/instructions/media.d.ts +0 -1
- package/dist/ai/presets/instructions/media.js +30 -30
- package/dist/ai/presets/instructions/pagePatterns.d.ts +0 -1
- package/dist/ai/presets/instructions/pagePatterns.js +3 -7
- package/dist/ai/presets/instructions/schemas.d.ts +0 -1
- package/dist/ai/presets/instructions/schemas.js +494 -138
- package/dist/ai/presets/instructions/typography.d.ts +0 -1
- package/dist/ai/presets/instructions/typography.js +37 -34
- package/dist/ai/tools/index.d.ts +0 -1
- package/dist/ai/tools/index.js +91 -56
- package/dist/ai/types.d.ts +0 -1
- package/dist/ai/types.js +6 -2
- package/dist/ai/utils/injectAiConfig.d.ts +0 -1
- package/dist/ai/utils/injectAiConfig.js +32 -41
- package/dist/api/createPuckApiRoutes.d.ts +1 -2
- package/dist/api/createPuckApiRoutes.js +122 -66
- package/dist/api/createPuckApiRoutesVersions.d.ts +1 -2
- package/dist/api/createPuckApiRoutesVersions.js +87 -38
- package/dist/api/createPuckApiRoutesWithId.d.ts +1 -2
- package/dist/api/createPuckApiRoutesWithId.js +165 -73
- package/dist/api/index.d.ts +5 -6
- package/dist/api/index.js +5 -7
- package/dist/api/payload-config.d.js +14 -0
- package/dist/api/types.d.ts +0 -1
- package/dist/api/types.js +3 -2
- package/dist/api/utils/mapRootProps.d.ts +1 -2
- package/dist/api/utils/mapRootProps.js +76 -45
- package/dist/collections/Templates.d.ts +0 -1
- package/dist/collections/Templates.js +23 -21
- package/dist/components/AccordionClient.d.ts +2 -3
- package/dist/components/AccordionClient.js +80 -23
- package/dist/components/AnimatedWrapper.d.ts +2 -3
- package/dist/components/AnimatedWrapper.js +30 -17
- package/dist/components/exports.d.ts +0 -1
- package/dist/components/exports.js +1 -3
- package/dist/components/index.d.ts +5 -6
- package/dist/components/index.js +6 -8
- package/dist/components/interactive/Accordion.d.ts +1 -2
- package/dist/components/interactive/Accordion.js +148 -56
- package/dist/components/interactive/Accordion.server.d.ts +1 -2
- package/dist/components/interactive/Accordion.server.js +24 -8
- package/dist/components/interactive/Button.d.ts +3 -4
- package/dist/components/interactive/Button.js +88 -44
- package/dist/components/interactive/Button.server.d.ts +2 -3
- package/dist/components/interactive/Button.server.js +39 -21
- package/dist/components/interactive/Card.d.ts +3 -4
- package/dist/components/interactive/Card.js +130 -40
- package/dist/components/interactive/Card.server.d.ts +3 -4
- package/dist/components/interactive/Card.server.js +71 -12
- package/dist/components/interactive/Divider.d.ts +1 -2
- package/dist/components/interactive/Divider.js +53 -27
- package/dist/components/interactive/Divider.server.d.ts +1 -2
- package/dist/components/interactive/Divider.server.js +27 -13
- package/dist/components/interactive/index.d.ts +4 -5
- package/dist/components/interactive/index.js +4 -6
- package/dist/components/layout/Container.d.ts +1 -2
- package/dist/components/layout/Container.js +100 -48
- package/dist/components/layout/Container.server.d.ts +1 -2
- package/dist/components/layout/Container.server.js +66 -20
- package/dist/components/layout/Flex.d.ts +2 -3
- package/dist/components/layout/Flex.js +123 -56
- package/dist/components/layout/Flex.server.d.ts +1 -2
- package/dist/components/layout/Flex.server.js +49 -15
- package/dist/components/layout/Grid.d.ts +1 -2
- package/dist/components/layout/Grid.js +92 -45
- package/dist/components/layout/Grid.server.d.ts +1 -2
- package/dist/components/layout/Grid.server.js +55 -15
- package/dist/components/layout/Section.d.ts +1 -2
- package/dist/components/layout/Section.js +146 -65
- package/dist/components/layout/Section.server.d.ts +1 -2
- package/dist/components/layout/Section.server.js +91 -29
- package/dist/components/layout/Spacer.d.ts +1 -2
- package/dist/components/layout/Spacer.js +79 -31
- package/dist/components/layout/Spacer.server.d.ts +1 -2
- package/dist/components/layout/Spacer.server.js +30 -10
- package/dist/components/layout/Template.d.ts +1 -2
- package/dist/components/layout/Template.js +57 -31
- package/dist/components/layout/Template.server.d.ts +1 -2
- package/dist/components/layout/Template.server.js +42 -12
- package/dist/components/layout/index.d.ts +8 -9
- package/dist/components/layout/index.js +7 -9
- package/dist/components/media/Image.d.ts +3 -4
- package/dist/components/media/Image.js +121 -40
- package/dist/components/media/Image.server.d.ts +3 -4
- package/dist/components/media/Image.server.js +75 -14
- package/dist/components/media/index.d.ts +1 -2
- package/dist/components/media/index.js +1 -3
- package/dist/components/typography/Heading.d.ts +2 -3
- package/dist/components/typography/Heading.js +44 -26
- package/dist/components/typography/Heading.server.d.ts +2 -3
- package/dist/components/typography/Heading.server.js +15 -11
- package/dist/components/typography/RichText.editor.d.ts +1 -2
- package/dist/components/typography/RichText.editor.js +43 -20
- package/dist/components/typography/RichText.server.d.ts +2 -3
- package/dist/components/typography/RichText.server.js +32 -15
- package/dist/components/typography/Text.d.ts +2 -3
- package/dist/components/typography/Text.js +48 -24
- package/dist/components/typography/Text.server.d.ts +2 -3
- package/dist/components/typography/Text.server.js +20 -9
- package/dist/components/typography/index.d.ts +4 -5
- package/dist/components/typography/index.js +4 -6
- package/dist/config/config.editor.d.ts +3 -4
- package/dist/config/config.editor.js +118 -55
- package/dist/config/index.d.ts +4 -5
- package/dist/config/index.js +61 -36
- package/dist/config/merge.d.ts +1 -2
- package/dist/config/merge.js +22 -27
- package/dist/config/presets.d.ts +4 -5
- package/dist/config/presets.js +194 -76
- package/dist/config/types.d.ts +0 -1
- package/dist/config/types.js +5 -3
- package/dist/editor/PuckEditor.d.ts +4 -5
- package/dist/editor/PuckEditor.js +161 -71
- package/dist/editor/PuckEditorImpl.client.d.ts +4 -5
- package/dist/editor/PuckEditorImpl.client.js +303 -153
- package/dist/editor/components/DarkModeStyles.d.ts +0 -1
- package/dist/editor/components/DarkModeStyles.js +10 -13
- package/dist/editor/components/HeaderActions.d.ts +0 -1
- package/dist/editor/components/HeaderActions.js +307 -65
- package/dist/editor/components/IframeWrapper.d.ts +1 -2
- package/dist/editor/components/IframeWrapper.js +81 -59
- package/dist/editor/components/LoadingState.d.ts +1 -2
- package/dist/editor/components/LoadingState.js +16 -4
- package/dist/editor/components/PreviewModal.d.ts +0 -1
- package/dist/editor/components/PreviewModal.js +233 -79
- package/dist/editor/components/PreviewModeToggle.d.ts +0 -1
- package/dist/editor/components/PreviewModeToggle.js +42 -16
- package/dist/editor/components/VersionHistory.d.ts +0 -1
- package/dist/editor/components/VersionHistory.js +218 -72
- package/dist/editor/hooks/useDarkMode.d.ts +0 -1
- package/dist/editor/hooks/useDarkMode.js +35 -24
- package/dist/editor/hooks/useUnsavedChanges.d.ts +0 -1
- package/dist/editor/hooks/useUnsavedChanges.js +7 -9
- package/dist/editor/index.d.ts +0 -1
- package/dist/editor/index.js +4 -7
- package/dist/editor/plugins/VersionHistoryPanel.d.ts +0 -1
- package/dist/editor/plugins/VersionHistoryPanel.js +235 -76
- package/dist/editor/plugins/index.d.ts +0 -1
- package/dist/editor/plugins/index.js +3 -5
- package/dist/editor/plugins/versionHistoryPlugin.d.ts +0 -1
- package/dist/editor/plugins/versionHistoryPlugin.js +9 -9
- package/dist/editor/utils/detectPageTree.d.ts +0 -1
- package/dist/editor/utils/detectPageTree.js +4 -6
- package/dist/editor/utils/index.d.ts +0 -1
- package/dist/editor/utils/index.js +0 -1
- package/dist/editor/utils/injectPageTreeFields.d.ts +0 -1
- package/dist/editor/utils/injectPageTreeFields.js +12 -10
- package/dist/endpoints/ai.d.ts +0 -1
- package/dist/endpoints/ai.js +57 -35
- package/dist/endpoints/context.d.ts +0 -1
- package/dist/endpoints/context.js +85 -41
- package/dist/endpoints/index.d.ts +0 -1
- package/dist/endpoints/index.js +152 -77
- package/dist/endpoints/postcss.d.js +4 -0
- package/dist/endpoints/prompts.d.ts +0 -1
- package/dist/endpoints/prompts.js +80 -40
- package/dist/endpoints/styles.d.ts +0 -1
- package/dist/endpoints/styles.js +33 -37
- package/dist/exports/client.d.ts +0 -1
- package/dist/exports/client.js +1 -3
- package/dist/exports/rsc.d.ts +0 -1
- package/dist/exports/rsc.js +1 -3
- package/dist/fields/AlignmentField.d.ts +1 -2
- package/dist/fields/AlignmentField.js +92 -31
- package/dist/fields/AnimationField.d.ts +2 -3
- package/dist/fields/AnimationField.js +557 -85
- package/dist/fields/BackgroundField.d.ts +2 -3
- package/dist/fields/BackgroundField.js +753 -121
- package/dist/fields/BorderField.d.ts +2 -3
- package/dist/fields/BorderField.js +274 -74
- package/dist/fields/ColorPickerField.d.ts +2 -3
- package/dist/fields/ColorPickerField.js +209 -69
- package/dist/fields/ContentAlignmentField.d.ts +1 -2
- package/dist/fields/ContentAlignmentField.js +160 -76
- package/dist/fields/DimensionsField.d.ts +2 -3
- package/dist/fields/DimensionsField.js +574 -147
- package/dist/fields/FlexAlignmentField.d.ts +2 -3
- package/dist/fields/FlexAlignmentField.js +188 -52
- package/dist/fields/FolderPickerField.d.ts +8 -2
- package/dist/fields/FolderPickerField.js +287 -76
- package/dist/fields/GradientEditor.d.ts +2 -3
- package/dist/fields/GradientEditor.js +461 -87
- package/dist/fields/LockedField.d.ts +15 -3
- package/dist/fields/LockedField.js +179 -50
- package/dist/fields/MarginField.d.ts +2 -3
- package/dist/fields/MarginField.js +143 -47
- package/dist/fields/MediaField.d.ts +1 -2
- package/dist/fields/MediaField.js +687 -187
- package/dist/fields/PaddingField.d.ts +2 -3
- package/dist/fields/PaddingField.js +143 -47
- package/dist/fields/PageSegmentField.d.ts +15 -3
- package/dist/fields/PageSegmentField.js +155 -55
- package/dist/fields/ResetField.d.ts +1 -2
- package/dist/fields/ResetField.js +58 -32
- package/dist/fields/ResponsiveField.d.ts +1 -2
- package/dist/fields/ResponsiveField.js +232 -91
- package/dist/fields/ResponsiveVisibilityField.d.ts +2 -3
- package/dist/fields/ResponsiveVisibilityField.js +118 -37
- package/dist/fields/SizeField.d.ts +3 -4
- package/dist/fields/SizeField.js +225 -53
- package/dist/fields/SlugPreviewField.d.ts +8 -2
- package/dist/fields/SlugPreviewField.js +64 -17
- package/dist/fields/TemplateField.d.ts +1 -2
- package/dist/fields/TemplateField.js +361 -121
- package/dist/fields/TransformField.d.ts +2 -3
- package/dist/fields/TransformField.js +516 -82
- package/dist/fields/VerticalAlignmentField.d.ts +1 -2
- package/dist/fields/VerticalAlignmentField.js +92 -31
- package/dist/fields/WidthField.d.ts +2 -3
- package/dist/fields/WidthField.js +277 -82
- package/dist/fields/index.d.ts +41 -42
- package/dist/fields/index.js +36 -44
- package/dist/fields/richtext/controls/ColorPickerControl.d.ts +13 -3
- package/dist/fields/richtext/controls/ColorPickerControl.js +211 -48
- package/dist/fields/richtext/controls/DropdownPortal.d.ts +2 -3
- package/dist/fields/richtext/controls/DropdownPortal.js +35 -5
- package/dist/fields/richtext/controls/FontSizeControl.d.ts +9 -2
- package/dist/fields/richtext/controls/FontSizeControl.js +108 -25
- package/dist/fields/richtext/controls/HighlightControl.d.ts +12 -2
- package/dist/fields/richtext/controls/HighlightControl.js +53 -18
- package/dist/fields/richtext/controls/index.d.ts +5 -6
- package/dist/fields/richtext/controls/index.js +7 -12
- package/dist/fields/richtext/controls/shared.d.ts +0 -1
- package/dist/fields/richtext/controls/shared.js +107 -64
- package/dist/fields/richtext/createRichTextField.d.ts +18 -5
- package/dist/fields/richtext/createRichTextField.js +112 -27
- package/dist/fields/richtext/extensions/FontSize.d.ts +0 -1
- package/dist/fields/richtext/extensions/FontSize.js +25 -21
- package/dist/fields/richtext/extensions/index.d.ts +1 -2
- package/dist/fields/richtext/extensions/index.js +1 -3
- package/dist/fields/richtext/index.d.ts +6 -7
- package/dist/fields/richtext/index.js +7 -9
- package/dist/fields/shared.d.ts +1 -2
- package/dist/fields/shared.js +914 -479
- package/dist/hooks/index.d.ts +2 -3
- package/dist/hooks/index.js +2 -4
- package/dist/hooks/useResponsiveStyles.d.ts +1 -2
- package/dist/hooks/useResponsiveStyles.js +35 -33
- package/dist/hooks/useScrollAnimation.d.ts +0 -1
- package/dist/hooks/useScrollAnimation.js +25 -25
- package/dist/index.d.ts +4 -5
- package/dist/index.js +4 -6
- package/dist/layouts/LayoutWrapper.d.ts +3 -4
- package/dist/layouts/LayoutWrapper.js +114 -52
- package/dist/layouts/defaults.d.ts +1 -2
- package/dist/layouts/defaults.js +22 -32
- package/dist/layouts/index.d.ts +4 -5
- package/dist/layouts/index.js +4 -5
- package/dist/layouts/types.d.ts +0 -1
- package/dist/layouts/types.js +3 -3
- package/dist/layouts/utils.d.ts +1 -2
- package/dist/layouts/utils.js +31 -41
- package/dist/next/index.d.ts +0 -1
- package/dist/next/index.js +30 -35
- package/dist/plugin/collections/Pages.d.ts +2 -3
- package/dist/plugin/collections/Pages.js +45 -44
- package/dist/plugin/fields/index.d.ts +3 -4
- package/dist/plugin/fields/index.js +99 -79
- package/dist/plugin/fields/types.d.ts +1 -2
- package/dist/plugin/fields/types.js +25 -3
- package/dist/plugin/hooks/index.d.ts +1 -2
- package/dist/plugin/hooks/index.js +1 -3
- package/dist/plugin/hooks/isHomepageUnique.d.ts +0 -1
- package/dist/plugin/hooks/isHomepageUnique.js +27 -20
- package/dist/plugin/index.d.ts +8 -9
- package/dist/plugin/index.js +189 -189
- package/dist/render/HybridPageRenderer.d.ts +2 -3
- package/dist/render/HybridPageRenderer.js +57 -11
- package/dist/render/PageRenderer.d.ts +2 -3
- package/dist/render/PageRenderer.js +30 -15
- package/dist/render/PuckEditor.client.d.ts +1 -2
- package/dist/render/PuckEditor.client.js +32 -17
- package/dist/render/index.d.ts +5 -6
- package/dist/render/index.js +4 -7
- package/dist/styles/puck-dark-mode.css +101 -0
- package/dist/theme/context.d.ts +2 -3
- package/dist/theme/context.js +20 -19
- package/dist/theme/defaults.d.ts +1 -2
- package/dist/theme/defaults.js +82 -38
- package/dist/theme/example.d.ts +1 -2
- package/dist/theme/example.js +67 -31
- package/dist/theme/index.d.ts +5 -6
- package/dist/theme/index.js +5 -6
- package/dist/theme/types.d.ts +0 -1
- package/dist/theme/types.js +5 -3
- package/dist/theme/utils.d.ts +1 -2
- package/dist/theme/utils.js +23 -26
- package/dist/types/index.d.ts +6 -7
- package/dist/types/index.js +2 -2
- package/dist/utils/index.d.ts +2 -3
- package/dist/utils/index.js +12 -23
- package/dist/utils/migration.d.ts +1 -2
- package/dist/utils/migration.js +42 -50
- package/dist/utils/validation.d.ts +1 -2
- package/dist/utils/validation.js +35 -44
- package/dist/version.d.ts +1 -2
- package/dist/version.js +1 -2
- package/dist/views/PuckConfigContext.d.ts +1 -2
- package/dist/views/PuckConfigContext.js +24 -11
- package/dist/views/PuckEditorView.d.ts +1 -2
- package/dist/views/PuckEditorView.js +105 -39
- package/dist/views/index.d.ts +0 -1
- package/dist/views/index.js +1 -3
- package/package.json +62 -42
- package/dist/admin/EditWithPuckButton.d.ts.map +0 -1
- package/dist/admin/EditWithPuckButton.js.map +0 -1
- package/dist/admin/EditWithPuckCell.d.ts.map +0 -1
- package/dist/admin/EditWithPuckCell.js.map +0 -1
- package/dist/admin/PuckEditorView.d.ts.map +0 -1
- package/dist/admin/PuckEditorView.js.map +0 -1
- package/dist/admin/client.d.ts.map +0 -1
- package/dist/admin/client.js.map +0 -1
- package/dist/admin/generateAdminComponents.d.ts.map +0 -1
- package/dist/admin/generateAdminComponents.js.map +0 -1
- package/dist/admin/index.d.ts.map +0 -1
- package/dist/admin/index.js.map +0 -1
- package/dist/ai/collections/AiContext.d.ts.map +0 -1
- package/dist/ai/collections/AiContext.js.map +0 -1
- package/dist/ai/collections/AiPrompts.d.ts.map +0 -1
- package/dist/ai/collections/AiPrompts.js.map +0 -1
- package/dist/ai/createAiApiRoutes.d.ts.map +0 -1
- package/dist/ai/createAiApiRoutes.js.map +0 -1
- package/dist/ai/createAiGenerate.d.ts.map +0 -1
- package/dist/ai/createAiGenerate.js.map +0 -1
- package/dist/ai/createAiPlugin.d.ts.map +0 -1
- package/dist/ai/createAiPlugin.js.map +0 -1
- package/dist/ai/hooks/useAiContext.d.ts.map +0 -1
- package/dist/ai/hooks/useAiContext.js.map +0 -1
- package/dist/ai/hooks/useAiPrompts.d.ts.map +0 -1
- package/dist/ai/hooks/useAiPrompts.js.map +0 -1
- package/dist/ai/index.d.ts.map +0 -1
- package/dist/ai/index.js.map +0 -1
- package/dist/ai/plugins/ContextEditorPanel.d.ts.map +0 -1
- package/dist/ai/plugins/ContextEditorPanel.js.map +0 -1
- package/dist/ai/plugins/PromptEditorPanel.d.ts.map +0 -1
- package/dist/ai/plugins/PromptEditorPanel.js.map +0 -1
- package/dist/ai/plugins/contextEditorPlugin.d.ts.map +0 -1
- package/dist/ai/plugins/contextEditorPlugin.js.map +0 -1
- package/dist/ai/plugins/promptApiRoutes.d.ts.map +0 -1
- package/dist/ai/plugins/promptApiRoutes.js.map +0 -1
- package/dist/ai/plugins/promptEditorPlugin.d.ts.map +0 -1
- package/dist/ai/plugins/promptEditorPlugin.js.map +0 -1
- package/dist/ai/presets/componentAiDefaults.d.ts.map +0 -1
- package/dist/ai/presets/componentAiDefaults.js.map +0 -1
- package/dist/ai/presets/index.d.ts.map +0 -1
- package/dist/ai/presets/index.js.map +0 -1
- package/dist/ai/presets/instructions/interactive.d.ts.map +0 -1
- package/dist/ai/presets/instructions/interactive.js.map +0 -1
- package/dist/ai/presets/instructions/layout.d.ts.map +0 -1
- package/dist/ai/presets/instructions/layout.js.map +0 -1
- package/dist/ai/presets/instructions/media.d.ts.map +0 -1
- package/dist/ai/presets/instructions/media.js.map +0 -1
- package/dist/ai/presets/instructions/pagePatterns.d.ts.map +0 -1
- package/dist/ai/presets/instructions/pagePatterns.js.map +0 -1
- package/dist/ai/presets/instructions/schemas.d.ts.map +0 -1
- package/dist/ai/presets/instructions/schemas.js.map +0 -1
- package/dist/ai/presets/instructions/typography.d.ts.map +0 -1
- package/dist/ai/presets/instructions/typography.js.map +0 -1
- package/dist/ai/tools/index.d.ts.map +0 -1
- package/dist/ai/tools/index.js.map +0 -1
- package/dist/ai/types.d.ts.map +0 -1
- package/dist/ai/types.js.map +0 -1
- package/dist/ai/utils/injectAiConfig.d.ts.map +0 -1
- package/dist/ai/utils/injectAiConfig.js.map +0 -1
- package/dist/api/createPuckApiRoutes.d.ts.map +0 -1
- package/dist/api/createPuckApiRoutes.js.map +0 -1
- package/dist/api/createPuckApiRoutesVersions.d.ts.map +0 -1
- package/dist/api/createPuckApiRoutesVersions.js.map +0 -1
- package/dist/api/createPuckApiRoutesWithId.d.ts.map +0 -1
- package/dist/api/createPuckApiRoutesWithId.js.map +0 -1
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/index.js.map +0 -1
- package/dist/api/types.d.ts.map +0 -1
- package/dist/api/types.js.map +0 -1
- package/dist/api/utils/mapRootProps.d.ts.map +0 -1
- package/dist/api/utils/mapRootProps.js.map +0 -1
- package/dist/collections/Templates.d.ts.map +0 -1
- package/dist/collections/Templates.js.map +0 -1
- package/dist/components/AccordionClient.d.ts.map +0 -1
- package/dist/components/AccordionClient.js.map +0 -1
- package/dist/components/AnimatedWrapper.d.ts.map +0 -1
- package/dist/components/AnimatedWrapper.js.map +0 -1
- package/dist/components/exports.d.ts.map +0 -1
- package/dist/components/exports.js.map +0 -1
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/components/interactive/Accordion.d.ts.map +0 -1
- package/dist/components/interactive/Accordion.js.map +0 -1
- package/dist/components/interactive/Accordion.server.d.ts.map +0 -1
- package/dist/components/interactive/Accordion.server.js.map +0 -1
- package/dist/components/interactive/Button.d.ts.map +0 -1
- package/dist/components/interactive/Button.js.map +0 -1
- package/dist/components/interactive/Button.server.d.ts.map +0 -1
- package/dist/components/interactive/Button.server.js.map +0 -1
- package/dist/components/interactive/Card.d.ts.map +0 -1
- package/dist/components/interactive/Card.js.map +0 -1
- package/dist/components/interactive/Card.server.d.ts.map +0 -1
- package/dist/components/interactive/Card.server.js.map +0 -1
- package/dist/components/interactive/Divider.d.ts.map +0 -1
- package/dist/components/interactive/Divider.js.map +0 -1
- package/dist/components/interactive/Divider.server.d.ts.map +0 -1
- package/dist/components/interactive/Divider.server.js.map +0 -1
- package/dist/components/interactive/index.d.ts.map +0 -1
- package/dist/components/interactive/index.js.map +0 -1
- package/dist/components/layout/Container.d.ts.map +0 -1
- package/dist/components/layout/Container.js.map +0 -1
- package/dist/components/layout/Container.server.d.ts.map +0 -1
- package/dist/components/layout/Container.server.js.map +0 -1
- package/dist/components/layout/Flex.d.ts.map +0 -1
- package/dist/components/layout/Flex.js.map +0 -1
- package/dist/components/layout/Flex.server.d.ts.map +0 -1
- package/dist/components/layout/Flex.server.js.map +0 -1
- package/dist/components/layout/Grid.d.ts.map +0 -1
- package/dist/components/layout/Grid.js.map +0 -1
- package/dist/components/layout/Grid.server.d.ts.map +0 -1
- package/dist/components/layout/Grid.server.js.map +0 -1
- package/dist/components/layout/Section.d.ts.map +0 -1
- package/dist/components/layout/Section.js.map +0 -1
- package/dist/components/layout/Section.server.d.ts.map +0 -1
- package/dist/components/layout/Section.server.js.map +0 -1
- package/dist/components/layout/Spacer.d.ts.map +0 -1
- package/dist/components/layout/Spacer.js.map +0 -1
- package/dist/components/layout/Spacer.server.d.ts.map +0 -1
- package/dist/components/layout/Spacer.server.js.map +0 -1
- package/dist/components/layout/Template.d.ts.map +0 -1
- package/dist/components/layout/Template.js.map +0 -1
- package/dist/components/layout/Template.server.d.ts.map +0 -1
- package/dist/components/layout/Template.server.js.map +0 -1
- package/dist/components/layout/index.d.ts.map +0 -1
- package/dist/components/layout/index.js.map +0 -1
- package/dist/components/media/Image.d.ts.map +0 -1
- package/dist/components/media/Image.js.map +0 -1
- package/dist/components/media/Image.server.d.ts.map +0 -1
- package/dist/components/media/Image.server.js.map +0 -1
- package/dist/components/media/index.d.ts.map +0 -1
- package/dist/components/media/index.js.map +0 -1
- package/dist/components/typography/Heading.d.ts.map +0 -1
- package/dist/components/typography/Heading.js.map +0 -1
- package/dist/components/typography/Heading.server.d.ts.map +0 -1
- package/dist/components/typography/Heading.server.js.map +0 -1
- package/dist/components/typography/RichText.editor.d.ts.map +0 -1
- package/dist/components/typography/RichText.editor.js.map +0 -1
- package/dist/components/typography/RichText.server.d.ts.map +0 -1
- package/dist/components/typography/RichText.server.js.map +0 -1
- package/dist/components/typography/Text.d.ts.map +0 -1
- package/dist/components/typography/Text.js.map +0 -1
- package/dist/components/typography/Text.server.d.ts.map +0 -1
- package/dist/components/typography/Text.server.js.map +0 -1
- package/dist/components/typography/index.d.ts.map +0 -1
- package/dist/components/typography/index.js.map +0 -1
- package/dist/config/config.editor.d.ts.map +0 -1
- package/dist/config/config.editor.js.map +0 -1
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js.map +0 -1
- package/dist/config/merge.d.ts.map +0 -1
- package/dist/config/merge.js.map +0 -1
- package/dist/config/presets.d.ts.map +0 -1
- package/dist/config/presets.js.map +0 -1
- package/dist/config/types.d.ts.map +0 -1
- package/dist/config/types.js.map +0 -1
- package/dist/editor/PuckEditor.d.ts.map +0 -1
- package/dist/editor/PuckEditor.js.map +0 -1
- package/dist/editor/PuckEditorImpl.client.d.ts.map +0 -1
- package/dist/editor/PuckEditorImpl.client.js.map +0 -1
- package/dist/editor/components/DarkModeStyles.d.ts.map +0 -1
- package/dist/editor/components/DarkModeStyles.js.map +0 -1
- package/dist/editor/components/HeaderActions.d.ts.map +0 -1
- package/dist/editor/components/HeaderActions.js.map +0 -1
- package/dist/editor/components/IframeWrapper.d.ts.map +0 -1
- package/dist/editor/components/IframeWrapper.js.map +0 -1
- package/dist/editor/components/LoadingState.d.ts.map +0 -1
- package/dist/editor/components/LoadingState.js.map +0 -1
- package/dist/editor/components/PreviewModal.d.ts.map +0 -1
- package/dist/editor/components/PreviewModal.js.map +0 -1
- package/dist/editor/components/PreviewModeToggle.d.ts.map +0 -1
- package/dist/editor/components/PreviewModeToggle.js.map +0 -1
- package/dist/editor/components/VersionHistory.d.ts.map +0 -1
- package/dist/editor/components/VersionHistory.js.map +0 -1
- package/dist/editor/hooks/useDarkMode.d.ts.map +0 -1
- package/dist/editor/hooks/useDarkMode.js.map +0 -1
- package/dist/editor/hooks/useUnsavedChanges.d.ts.map +0 -1
- package/dist/editor/hooks/useUnsavedChanges.js.map +0 -1
- package/dist/editor/index.d.ts.map +0 -1
- package/dist/editor/index.js.map +0 -1
- package/dist/editor/plugins/VersionHistoryPanel.d.ts.map +0 -1
- package/dist/editor/plugins/VersionHistoryPanel.js.map +0 -1
- package/dist/editor/plugins/index.d.ts.map +0 -1
- package/dist/editor/plugins/index.js.map +0 -1
- package/dist/editor/plugins/versionHistoryPlugin.d.ts.map +0 -1
- package/dist/editor/plugins/versionHistoryPlugin.js.map +0 -1
- package/dist/editor/utils/detectPageTree.d.ts.map +0 -1
- package/dist/editor/utils/detectPageTree.js.map +0 -1
- package/dist/editor/utils/index.d.ts.map +0 -1
- package/dist/editor/utils/index.js.map +0 -1
- package/dist/editor/utils/injectPageTreeFields.d.ts.map +0 -1
- package/dist/editor/utils/injectPageTreeFields.js.map +0 -1
- package/dist/endpoints/ai.d.ts.map +0 -1
- package/dist/endpoints/ai.js.map +0 -1
- package/dist/endpoints/context.d.ts.map +0 -1
- package/dist/endpoints/context.js.map +0 -1
- package/dist/endpoints/index.d.ts.map +0 -1
- package/dist/endpoints/index.js.map +0 -1
- package/dist/endpoints/prompts.d.ts.map +0 -1
- package/dist/endpoints/prompts.js.map +0 -1
- package/dist/endpoints/styles.d.ts.map +0 -1
- package/dist/endpoints/styles.js.map +0 -1
- package/dist/exports/client.d.ts.map +0 -1
- package/dist/exports/client.js.map +0 -1
- package/dist/exports/rsc.d.ts.map +0 -1
- package/dist/exports/rsc.js.map +0 -1
- package/dist/fields/AlignmentField.d.ts.map +0 -1
- package/dist/fields/AlignmentField.js.map +0 -1
- package/dist/fields/AnimationField.d.ts.map +0 -1
- package/dist/fields/AnimationField.js.map +0 -1
- package/dist/fields/BackgroundField.d.ts.map +0 -1
- package/dist/fields/BackgroundField.js.map +0 -1
- package/dist/fields/BorderField.d.ts.map +0 -1
- package/dist/fields/BorderField.js.map +0 -1
- package/dist/fields/ColorPickerField.d.ts.map +0 -1
- package/dist/fields/ColorPickerField.js.map +0 -1
- package/dist/fields/ContentAlignmentField.d.ts.map +0 -1
- package/dist/fields/ContentAlignmentField.js.map +0 -1
- package/dist/fields/DimensionsField.d.ts.map +0 -1
- package/dist/fields/DimensionsField.js.map +0 -1
- package/dist/fields/FlexAlignmentField.d.ts.map +0 -1
- package/dist/fields/FlexAlignmentField.js.map +0 -1
- package/dist/fields/FolderPickerField.d.ts.map +0 -1
- package/dist/fields/FolderPickerField.js.map +0 -1
- package/dist/fields/GradientEditor.d.ts.map +0 -1
- package/dist/fields/GradientEditor.js.map +0 -1
- package/dist/fields/LockedField.d.ts.map +0 -1
- package/dist/fields/LockedField.js.map +0 -1
- package/dist/fields/MarginField.d.ts.map +0 -1
- package/dist/fields/MarginField.js.map +0 -1
- package/dist/fields/MediaField.d.ts.map +0 -1
- package/dist/fields/MediaField.js.map +0 -1
- package/dist/fields/PaddingField.d.ts.map +0 -1
- package/dist/fields/PaddingField.js.map +0 -1
- package/dist/fields/PageSegmentField.d.ts.map +0 -1
- package/dist/fields/PageSegmentField.js.map +0 -1
- package/dist/fields/ResetField.d.ts.map +0 -1
- package/dist/fields/ResetField.js.map +0 -1
- package/dist/fields/ResponsiveField.d.ts.map +0 -1
- package/dist/fields/ResponsiveField.js.map +0 -1
- package/dist/fields/ResponsiveVisibilityField.d.ts.map +0 -1
- package/dist/fields/ResponsiveVisibilityField.js.map +0 -1
- package/dist/fields/SizeField.d.ts.map +0 -1
- package/dist/fields/SizeField.js.map +0 -1
- package/dist/fields/SlugPreviewField.d.ts.map +0 -1
- package/dist/fields/SlugPreviewField.js.map +0 -1
- package/dist/fields/TemplateField.d.ts.map +0 -1
- package/dist/fields/TemplateField.js.map +0 -1
- package/dist/fields/TransformField.d.ts.map +0 -1
- package/dist/fields/TransformField.js.map +0 -1
- package/dist/fields/VerticalAlignmentField.d.ts.map +0 -1
- package/dist/fields/VerticalAlignmentField.js.map +0 -1
- package/dist/fields/WidthField.d.ts.map +0 -1
- package/dist/fields/WidthField.js.map +0 -1
- package/dist/fields/index.d.ts.map +0 -1
- package/dist/fields/index.js.map +0 -1
- package/dist/fields/richtext/controls/ColorPickerControl.d.ts.map +0 -1
- package/dist/fields/richtext/controls/ColorPickerControl.js.map +0 -1
- package/dist/fields/richtext/controls/DropdownPortal.d.ts.map +0 -1
- package/dist/fields/richtext/controls/DropdownPortal.js.map +0 -1
- package/dist/fields/richtext/controls/FontSizeControl.d.ts.map +0 -1
- package/dist/fields/richtext/controls/FontSizeControl.js.map +0 -1
- package/dist/fields/richtext/controls/HighlightControl.d.ts.map +0 -1
- package/dist/fields/richtext/controls/HighlightControl.js.map +0 -1
- package/dist/fields/richtext/controls/index.d.ts.map +0 -1
- package/dist/fields/richtext/controls/index.js.map +0 -1
- package/dist/fields/richtext/controls/shared.d.ts.map +0 -1
- package/dist/fields/richtext/controls/shared.js.map +0 -1
- package/dist/fields/richtext/createRichTextField.d.ts.map +0 -1
- package/dist/fields/richtext/createRichTextField.js.map +0 -1
- package/dist/fields/richtext/extensions/FontSize.d.ts.map +0 -1
- package/dist/fields/richtext/extensions/FontSize.js.map +0 -1
- package/dist/fields/richtext/extensions/index.d.ts.map +0 -1
- package/dist/fields/richtext/extensions/index.js.map +0 -1
- package/dist/fields/richtext/index.d.ts.map +0 -1
- package/dist/fields/richtext/index.js.map +0 -1
- package/dist/fields/shared.d.ts.map +0 -1
- package/dist/fields/shared.js.map +0 -1
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/useResponsiveStyles.d.ts.map +0 -1
- package/dist/hooks/useResponsiveStyles.js.map +0 -1
- package/dist/hooks/useScrollAnimation.d.ts.map +0 -1
- package/dist/hooks/useScrollAnimation.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/layouts/LayoutWrapper.d.ts.map +0 -1
- package/dist/layouts/LayoutWrapper.js.map +0 -1
- package/dist/layouts/defaults.d.ts.map +0 -1
- package/dist/layouts/defaults.js.map +0 -1
- package/dist/layouts/index.d.ts.map +0 -1
- package/dist/layouts/index.js.map +0 -1
- package/dist/layouts/types.d.ts.map +0 -1
- package/dist/layouts/types.js.map +0 -1
- package/dist/layouts/utils.d.ts.map +0 -1
- package/dist/layouts/utils.js.map +0 -1
- package/dist/next/index.d.ts.map +0 -1
- package/dist/next/index.js.map +0 -1
- package/dist/plugin/collections/Pages.d.ts.map +0 -1
- package/dist/plugin/collections/Pages.js.map +0 -1
- package/dist/plugin/fields/index.d.ts.map +0 -1
- package/dist/plugin/fields/index.js.map +0 -1
- package/dist/plugin/fields/types.d.ts.map +0 -1
- package/dist/plugin/fields/types.js.map +0 -1
- package/dist/plugin/hooks/index.d.ts.map +0 -1
- package/dist/plugin/hooks/index.js.map +0 -1
- package/dist/plugin/hooks/isHomepageUnique.d.ts.map +0 -1
- package/dist/plugin/hooks/isHomepageUnique.js.map +0 -1
- package/dist/plugin/index.d.ts.map +0 -1
- package/dist/plugin/index.js.map +0 -1
- package/dist/render/HybridPageRenderer.d.ts.map +0 -1
- package/dist/render/HybridPageRenderer.js.map +0 -1
- package/dist/render/PageRenderer.d.ts.map +0 -1
- package/dist/render/PageRenderer.js.map +0 -1
- package/dist/render/PuckEditor.client.d.ts.map +0 -1
- package/dist/render/PuckEditor.client.js.map +0 -1
- package/dist/render/index.d.ts.map +0 -1
- package/dist/render/index.js.map +0 -1
- package/dist/theme/context.d.ts.map +0 -1
- package/dist/theme/context.js.map +0 -1
- package/dist/theme/defaults.d.ts.map +0 -1
- package/dist/theme/defaults.js.map +0 -1
- package/dist/theme/example.d.ts.map +0 -1
- package/dist/theme/example.js.map +0 -1
- package/dist/theme/index.d.ts.map +0 -1
- package/dist/theme/index.js.map +0 -1
- package/dist/theme/types.d.ts.map +0 -1
- package/dist/theme/types.js.map +0 -1
- package/dist/theme/utils.d.ts.map +0 -1
- package/dist/theme/utils.js.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/migration.d.ts.map +0 -1
- package/dist/utils/migration.js.map +0 -1
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js.map +0 -1
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js.map +0 -1
- package/dist/views/PuckConfigContext.d.ts.map +0 -1
- package/dist/views/PuckConfigContext.js.map +0 -1
- package/dist/views/PuckEditorView.d.ts.map +0 -1
- package/dist/views/PuckEditorView.js.map +0 -1
- package/dist/views/index.d.ts.map +0 -1
- package/dist/views/index.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx,
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import { useState, useCallback, useMemo, useRef, createElement } from 'react';
|
|
4
4
|
import { useRouter } from 'next/navigation';
|
|
5
5
|
import { Puck } from '@puckeditor/core';
|
|
@@ -10,43 +10,44 @@ import { createAiPlugin } from '@puckeditor/plugin-ai';
|
|
|
10
10
|
import '@puckeditor/plugin-ai/styles.css';
|
|
11
11
|
import './ai-plugin-overrides.css';
|
|
12
12
|
import { Maximize2 } from 'lucide-react';
|
|
13
|
-
import { HeaderActions } from './components/HeaderActions';
|
|
14
|
-
import { IframeWrapper } from './components/IframeWrapper';
|
|
15
|
-
import { PreviewModal } from './components/PreviewModal';
|
|
16
|
-
import { DarkModeStyles } from './components/DarkModeStyles';
|
|
17
|
-
import { useUnsavedChanges } from './hooks/useUnsavedChanges';
|
|
18
|
-
import { createVersionHistoryPlugin } from './plugins/versionHistoryPlugin';
|
|
19
|
-
import { ThemeProvider } from '../theme';
|
|
20
|
-
import { usePuckConfig } from '../views/PuckConfigContext';
|
|
13
|
+
import { HeaderActions } from './components/HeaderActions.js';
|
|
14
|
+
import { IframeWrapper } from './components/IframeWrapper.js';
|
|
15
|
+
import { PreviewModal } from './components/PreviewModal.js';
|
|
16
|
+
import { DarkModeStyles } from './components/DarkModeStyles.js';
|
|
17
|
+
import { useUnsavedChanges } from './hooks/useUnsavedChanges.js';
|
|
18
|
+
import { createVersionHistoryPlugin } from './plugins/versionHistoryPlugin.js';
|
|
19
|
+
import { ThemeProvider } from '../theme/index.js';
|
|
20
|
+
import { usePuckConfig } from '../views/PuckConfigContext.js';
|
|
21
21
|
import { useAiPrompts } from '../ai/hooks/useAiPrompts.js';
|
|
22
22
|
/**
|
|
23
23
|
* Default viewports for responsive preview
|
|
24
|
-
*/
|
|
25
|
-
const DEFAULT_VIEWPORTS = [
|
|
24
|
+
*/ const DEFAULT_VIEWPORTS = [
|
|
26
25
|
{
|
|
27
26
|
width: 360,
|
|
28
27
|
height: 'auto',
|
|
29
28
|
label: 'Mobile',
|
|
30
|
-
icon: 'Smartphone'
|
|
29
|
+
icon: 'Smartphone'
|
|
31
30
|
},
|
|
32
31
|
{
|
|
33
32
|
width: 768,
|
|
34
33
|
height: 'auto',
|
|
35
34
|
label: 'Tablet',
|
|
36
|
-
icon: 'Tablet'
|
|
35
|
+
icon: 'Tablet'
|
|
37
36
|
},
|
|
38
37
|
{
|
|
39
38
|
width: 1280,
|
|
40
39
|
height: 'auto',
|
|
41
40
|
label: 'Desktop',
|
|
42
|
-
icon: 'Monitor'
|
|
41
|
+
icon: 'Monitor'
|
|
43
42
|
},
|
|
44
43
|
{
|
|
45
44
|
width: '100%',
|
|
46
45
|
height: 'auto',
|
|
47
46
|
label: 'Full Width',
|
|
48
|
-
icon: createElement(Maximize2, {
|
|
49
|
-
|
|
47
|
+
icon: /*#__PURE__*/ createElement(Maximize2, {
|
|
48
|
+
size: 16
|
|
49
|
+
})
|
|
50
|
+
}
|
|
50
51
|
];
|
|
51
52
|
/**
|
|
52
53
|
* Full-featured Puck editor implementation
|
|
@@ -61,8 +62,7 @@ const DEFAULT_VIEWPORTS = [
|
|
|
61
62
|
*
|
|
62
63
|
* Internal implementation component - use PuckEditor instead.
|
|
63
64
|
* @internal
|
|
64
|
-
*/
|
|
65
|
-
export function PuckEditorImpl({ pageId, initialData, config, pageTitle, pageSlug, apiEndpoint = '/api/puck/pages', backUrl, previewUrl, enableViewports = true, plugins, layouts, layoutStyles, layoutKey = 'pageLayout', headerActionsStart, headerActionsEnd, overrides: customOverrides, onSaveSuccess, onSaveError, onChange: onChangeProp, initialStatus, theme, editorStylesheets: editorStylesheetsProp, editorCss: editorCssProp, enableAi = false, aiOptions, hasPromptsCollection = false, hasContextCollection = false, experimentalFullScreenCanvas = false, autoDetectDarkMode = true, showPreviewDarkModeToggle = true, initialPreviewDarkMode = false, }) {
|
|
65
|
+
*/ export function PuckEditorImpl({ pageId, initialData, config, pageTitle, pageSlug, apiEndpoint = '/api/puck/pages', backUrl, previewUrl, enableViewports = true, plugins, layouts, layoutStyles, layoutKey = 'pageLayout', headerActionsStart, headerActionsEnd, overrides: customOverrides, onSaveSuccess, onSaveError, onChange: onChangeProp, initialStatus, theme, editorStylesheets: editorStylesheetsProp, editorCss: editorCssProp, enableAi = false, aiOptions, hasPromptsCollection = false, hasContextCollection = false, experimentalFullScreenCanvas = false, autoDetectDarkMode = true, showPreviewDarkModeToggle = true, initialPreviewDarkMode = false }) {
|
|
66
66
|
const router = useRouter();
|
|
67
67
|
const [isSaving, setIsSaving] = useState(false);
|
|
68
68
|
const [lastSaved, setLastSaved] = useState(null);
|
|
@@ -76,7 +76,7 @@ export function PuckEditorImpl({ pageId, initialData, config, pageTitle, pageSlu
|
|
|
76
76
|
// Preview dark mode state (for toggling dark/light in preview iframe)
|
|
77
77
|
const [previewDarkMode, setPreviewDarkMode] = useState(initialPreviewDarkMode);
|
|
78
78
|
// Inject slug into initial data if not present
|
|
79
|
-
const dataWithSlug = useMemo(()
|
|
79
|
+
const dataWithSlug = useMemo(()=>{
|
|
80
80
|
const data = initialData;
|
|
81
81
|
return {
|
|
82
82
|
...data,
|
|
@@ -84,11 +84,14 @@ export function PuckEditorImpl({ pageId, initialData, config, pageTitle, pageSlu
|
|
|
84
84
|
...data.root,
|
|
85
85
|
props: {
|
|
86
86
|
...data.root?.props,
|
|
87
|
-
slug: data.root?.props?.slug || pageSlug
|
|
88
|
-
}
|
|
89
|
-
}
|
|
87
|
+
slug: data.root?.props?.slug || pageSlug
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
90
|
};
|
|
91
|
-
}, [
|
|
91
|
+
}, [
|
|
92
|
+
initialData,
|
|
93
|
+
pageSlug
|
|
94
|
+
]);
|
|
92
95
|
// Use a ref to track latest data without causing re-renders
|
|
93
96
|
const latestDataRef = useRef(dataWithSlug);
|
|
94
97
|
// Get editor stylesheets from PuckConfigProvider context (as fallback)
|
|
@@ -98,26 +101,43 @@ export function PuckEditorImpl({ pageId, initialData, config, pageTitle, pageSlu
|
|
|
98
101
|
const baseCss = editorCssProp || contextCss;
|
|
99
102
|
// Get current layout to merge layout-specific stylesheets
|
|
100
103
|
const currentLayoutValue = dataWithSlug.root?.props?.pageLayout || 'default';
|
|
101
|
-
const currentLayout = useMemo(()
|
|
102
|
-
return layouts?.find((l)
|
|
103
|
-
}, [
|
|
104
|
+
const currentLayout = useMemo(()=>{
|
|
105
|
+
return layouts?.find((l)=>l.value === currentLayoutValue);
|
|
106
|
+
}, [
|
|
107
|
+
layouts,
|
|
108
|
+
currentLayoutValue
|
|
109
|
+
]);
|
|
104
110
|
// Merge base stylesheets (props/context) + layout-specific settings
|
|
105
|
-
const mergedEditorStylesheets = useMemo(()
|
|
111
|
+
const mergedEditorStylesheets = useMemo(()=>{
|
|
106
112
|
const fromBase = baseStylesheets || [];
|
|
107
113
|
const fromLayout = currentLayout?.editorStylesheets || [];
|
|
108
|
-
return [
|
|
109
|
-
|
|
114
|
+
return [
|
|
115
|
+
...fromBase,
|
|
116
|
+
...fromLayout
|
|
117
|
+
];
|
|
118
|
+
}, [
|
|
119
|
+
baseStylesheets,
|
|
120
|
+
currentLayout?.editorStylesheets
|
|
121
|
+
]);
|
|
110
122
|
// Merge base CSS (props/context) + layout-specific settings
|
|
111
|
-
const mergedEditorCss = useMemo(()
|
|
112
|
-
const parts = [
|
|
123
|
+
const mergedEditorCss = useMemo(()=>{
|
|
124
|
+
const parts = [
|
|
125
|
+
baseCss,
|
|
126
|
+
currentLayout?.editorCss
|
|
127
|
+
].filter(Boolean);
|
|
113
128
|
return parts.length > 0 ? parts.join('\n') : undefined;
|
|
114
|
-
}, [
|
|
129
|
+
}, [
|
|
130
|
+
baseCss,
|
|
131
|
+
currentLayout?.editorCss
|
|
132
|
+
]);
|
|
115
133
|
// Helper to make save request with optional homepage swap
|
|
116
|
-
const makeSaveRequest = useCallback(async (data, options = {})
|
|
134
|
+
const makeSaveRequest = useCallback(async (data, options = {})=>{
|
|
117
135
|
const typedData = data;
|
|
118
136
|
return fetch(`${apiEndpoint}/${pageId}`, {
|
|
119
137
|
method: 'PATCH',
|
|
120
|
-
headers: {
|
|
138
|
+
headers: {
|
|
139
|
+
'Content-Type': 'application/json'
|
|
140
|
+
},
|
|
121
141
|
body: JSON.stringify({
|
|
122
142
|
puckData: data,
|
|
123
143
|
title: typedData.root?.props?.title || pageTitle,
|
|
@@ -127,30 +147,46 @@ export function PuckEditorImpl({ pageId, initialData, config, pageTitle, pageSlu
|
|
|
127
147
|
// Page-tree integration: include folder and pageSegment if present
|
|
128
148
|
folder: typedData.root?.props?.folder,
|
|
129
149
|
pageSegment: typedData.root?.props?.pageSegment,
|
|
130
|
-
...
|
|
131
|
-
|
|
150
|
+
...options.publish ? {
|
|
151
|
+
_status: 'published'
|
|
152
|
+
} : {
|
|
153
|
+
draft: true
|
|
154
|
+
}
|
|
155
|
+
})
|
|
132
156
|
});
|
|
133
|
-
}, [
|
|
157
|
+
}, [
|
|
158
|
+
apiEndpoint,
|
|
159
|
+
pageId,
|
|
160
|
+
pageTitle,
|
|
161
|
+
pageSlug
|
|
162
|
+
]);
|
|
134
163
|
// Handle homepage conflict - prompt user to swap
|
|
135
|
-
const handleHomepageConflict = useCallback(async (existingHomepage, data, publish)
|
|
164
|
+
const handleHomepageConflict = useCallback(async (existingHomepage, data, publish)=>{
|
|
136
165
|
const confirmed = confirm(`"${existingHomepage.title}" (/${existingHomepage.slug}) is currently set as the homepage.\n\nDo you want to make this page the homepage instead?`);
|
|
137
166
|
if (!confirmed) {
|
|
138
167
|
return false;
|
|
139
168
|
}
|
|
140
169
|
// Retry with swapHomepage flag
|
|
141
|
-
const response = await makeSaveRequest(data, {
|
|
170
|
+
const response = await makeSaveRequest(data, {
|
|
171
|
+
publish,
|
|
172
|
+
swapHomepage: true
|
|
173
|
+
});
|
|
142
174
|
if (!response.ok) {
|
|
143
175
|
const errorData = await response.json();
|
|
144
176
|
throw new Error(errorData.error || errorData.message || 'Failed to swap homepage');
|
|
145
177
|
}
|
|
146
178
|
return true;
|
|
147
|
-
}, [
|
|
179
|
+
}, [
|
|
180
|
+
makeSaveRequest
|
|
181
|
+
]);
|
|
148
182
|
// Handle save (as draft)
|
|
149
|
-
const handleSave = useCallback(async (data)
|
|
183
|
+
const handleSave = useCallback(async (data)=>{
|
|
150
184
|
setIsSaving(true);
|
|
151
185
|
const typedData = data;
|
|
152
186
|
try {
|
|
153
|
-
const response = await makeSaveRequest(data, {
|
|
187
|
+
const response = await makeSaveRequest(data, {
|
|
188
|
+
publish: false
|
|
189
|
+
});
|
|
154
190
|
if (!response.ok) {
|
|
155
191
|
const errorData = await response.json();
|
|
156
192
|
// Check for homepage conflict error
|
|
@@ -161,9 +197,8 @@ export function PuckEditorImpl({ pageId, initialData, config, pageTitle, pageSlu
|
|
|
161
197
|
setIsSaving(false);
|
|
162
198
|
return;
|
|
163
199
|
}
|
|
164
|
-
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
200
|
+
// Successfully swapped - continue to success handling below
|
|
201
|
+
} else {
|
|
167
202
|
const errorMessage = errorData.error || errorData.message || 'Failed to save page';
|
|
168
203
|
const err = new Error(errorMessage);
|
|
169
204
|
err.field = errorData.field;
|
|
@@ -177,22 +212,28 @@ export function PuckEditorImpl({ pageId, initialData, config, pageTitle, pageSlu
|
|
|
177
212
|
setDocumentStatus('draft');
|
|
178
213
|
markClean();
|
|
179
214
|
onSaveSuccess?.(data);
|
|
180
|
-
}
|
|
181
|
-
catch (error) {
|
|
215
|
+
} catch (error) {
|
|
182
216
|
console.error('Error saving page:', error);
|
|
183
217
|
setSaveError(error instanceof Error ? error.message : 'Unknown error');
|
|
184
218
|
onSaveError?.(error instanceof Error ? error : new Error('Unknown error'));
|
|
185
|
-
}
|
|
186
|
-
finally {
|
|
219
|
+
} finally{
|
|
187
220
|
setIsSaving(false);
|
|
188
221
|
}
|
|
189
|
-
}, [
|
|
222
|
+
}, [
|
|
223
|
+
makeSaveRequest,
|
|
224
|
+
handleHomepageConflict,
|
|
225
|
+
markClean,
|
|
226
|
+
onSaveSuccess,
|
|
227
|
+
onSaveError
|
|
228
|
+
]);
|
|
190
229
|
// Handle publish
|
|
191
|
-
const handlePublish = useCallback(async (data)
|
|
230
|
+
const handlePublish = useCallback(async (data)=>{
|
|
192
231
|
setIsSaving(true);
|
|
193
232
|
const typedData = data;
|
|
194
233
|
try {
|
|
195
|
-
const response = await makeSaveRequest(data, {
|
|
234
|
+
const response = await makeSaveRequest(data, {
|
|
235
|
+
publish: true
|
|
236
|
+
});
|
|
196
237
|
if (!response.ok) {
|
|
197
238
|
const errorData = await response.json();
|
|
198
239
|
// Check for homepage conflict error
|
|
@@ -203,9 +244,8 @@ export function PuckEditorImpl({ pageId, initialData, config, pageTitle, pageSlu
|
|
|
203
244
|
setIsSaving(false);
|
|
204
245
|
return;
|
|
205
246
|
}
|
|
206
|
-
|
|
207
|
-
}
|
|
208
|
-
else {
|
|
247
|
+
// Successfully swapped - continue to success handling below
|
|
248
|
+
} else {
|
|
209
249
|
const errorMessage = errorData.error || errorData.message || 'Failed to publish page';
|
|
210
250
|
const err = new Error(errorMessage);
|
|
211
251
|
err.field = errorData.field;
|
|
@@ -219,18 +259,22 @@ export function PuckEditorImpl({ pageId, initialData, config, pageTitle, pageSlu
|
|
|
219
259
|
setWasPublished(true); // Mark as having been published
|
|
220
260
|
markClean();
|
|
221
261
|
onSaveSuccess?.(data);
|
|
222
|
-
}
|
|
223
|
-
catch (error) {
|
|
262
|
+
} catch (error) {
|
|
224
263
|
console.error('Error publishing page:', error);
|
|
225
264
|
setSaveError(error instanceof Error ? error.message : 'Unknown error');
|
|
226
265
|
onSaveError?.(error instanceof Error ? error : new Error('Unknown error'));
|
|
227
|
-
}
|
|
228
|
-
finally {
|
|
266
|
+
} finally{
|
|
229
267
|
setIsSaving(false);
|
|
230
268
|
}
|
|
231
|
-
}, [
|
|
269
|
+
}, [
|
|
270
|
+
makeSaveRequest,
|
|
271
|
+
handleHomepageConflict,
|
|
272
|
+
markClean,
|
|
273
|
+
onSaveSuccess,
|
|
274
|
+
onSaveError
|
|
275
|
+
]);
|
|
232
276
|
// Handle unpublish (revert to draft)
|
|
233
|
-
const handleUnpublish = useCallback(async ()
|
|
277
|
+
const handleUnpublish = useCallback(async ()=>{
|
|
234
278
|
if (!confirm('This will unpublish the page and return it to draft status. Continue?')) {
|
|
235
279
|
return;
|
|
236
280
|
}
|
|
@@ -238,10 +282,12 @@ export function PuckEditorImpl({ pageId, initialData, config, pageTitle, pageSlu
|
|
|
238
282
|
try {
|
|
239
283
|
const response = await fetch(`${apiEndpoint}/${pageId}`, {
|
|
240
284
|
method: 'PATCH',
|
|
241
|
-
headers: {
|
|
285
|
+
headers: {
|
|
286
|
+
'Content-Type': 'application/json'
|
|
287
|
+
},
|
|
242
288
|
body: JSON.stringify({
|
|
243
|
-
_status: 'draft'
|
|
244
|
-
})
|
|
289
|
+
_status: 'draft'
|
|
290
|
+
})
|
|
245
291
|
});
|
|
246
292
|
if (!response.ok) {
|
|
247
293
|
const errorData = await response.json();
|
|
@@ -251,23 +297,27 @@ export function PuckEditorImpl({ pageId, initialData, config, pageTitle, pageSlu
|
|
|
251
297
|
setLastSaved(new Date());
|
|
252
298
|
setSaveError(null);
|
|
253
299
|
setDocumentStatus('draft');
|
|
254
|
-
}
|
|
255
|
-
catch (error) {
|
|
300
|
+
} catch (error) {
|
|
256
301
|
console.error('Error unpublishing page:', error);
|
|
257
302
|
setSaveError(error instanceof Error ? error.message : 'Unknown error');
|
|
258
|
-
}
|
|
259
|
-
finally {
|
|
303
|
+
} finally{
|
|
260
304
|
setIsSaving(false);
|
|
261
305
|
}
|
|
262
|
-
}, [
|
|
306
|
+
}, [
|
|
307
|
+
apiEndpoint,
|
|
308
|
+
pageId
|
|
309
|
+
]);
|
|
263
310
|
// Handle data change
|
|
264
|
-
const handleChange = useCallback((data)
|
|
311
|
+
const handleChange = useCallback((data)=>{
|
|
265
312
|
latestDataRef.current = data;
|
|
266
313
|
markDirty();
|
|
267
314
|
onChangeProp?.(data);
|
|
268
|
-
}, [
|
|
315
|
+
}, [
|
|
316
|
+
markDirty,
|
|
317
|
+
onChangeProp
|
|
318
|
+
]);
|
|
269
319
|
// Handle back navigation
|
|
270
|
-
const handleBack = useCallback(()
|
|
320
|
+
const handleBack = useCallback(()=>{
|
|
271
321
|
if (hasUnsavedChanges) {
|
|
272
322
|
if (!confirm('You have unsaved changes. Are you sure you want to leave?')) {
|
|
273
323
|
return;
|
|
@@ -275,13 +325,16 @@ export function PuckEditorImpl({ pageId, initialData, config, pageTitle, pageSlu
|
|
|
275
325
|
}
|
|
276
326
|
if (backUrl) {
|
|
277
327
|
router.push(backUrl);
|
|
278
|
-
}
|
|
279
|
-
else {
|
|
328
|
+
} else {
|
|
280
329
|
router.back();
|
|
281
330
|
}
|
|
282
|
-
}, [
|
|
331
|
+
}, [
|
|
332
|
+
hasUnsavedChanges,
|
|
333
|
+
router,
|
|
334
|
+
backUrl
|
|
335
|
+
]);
|
|
283
336
|
// Handle preview (opens in new tab)
|
|
284
|
-
const handlePreview = useCallback(()
|
|
337
|
+
const handlePreview = useCallback(()=>{
|
|
285
338
|
const rootProps = latestDataRef.current?.root?.props;
|
|
286
339
|
const currentSlug = rootProps?.slug || pageSlug;
|
|
287
340
|
const isHomepage = rootProps?.isHomepage === true;
|
|
@@ -289,28 +342,31 @@ export function PuckEditorImpl({ pageId, initialData, config, pageTitle, pageSlu
|
|
|
289
342
|
if (typeof previewUrl === 'function') {
|
|
290
343
|
// If homepage, pass '/' to the function, otherwise pass the slug
|
|
291
344
|
url = previewUrl(isHomepage ? '' : currentSlug);
|
|
292
|
-
}
|
|
293
|
-
else if (previewUrl) {
|
|
345
|
+
} else if (previewUrl) {
|
|
294
346
|
url = previewUrl;
|
|
295
|
-
}
|
|
296
|
-
else {
|
|
347
|
+
} else {
|
|
297
348
|
// If homepage, navigate to root, otherwise use slug
|
|
298
349
|
url = isHomepage ? '/' : `/${currentSlug}`;
|
|
299
350
|
}
|
|
300
351
|
window.open(url, '_blank');
|
|
301
|
-
}, [
|
|
352
|
+
}, [
|
|
353
|
+
pageSlug,
|
|
354
|
+
previewUrl
|
|
355
|
+
]);
|
|
302
356
|
// Handle opening preview modal
|
|
303
|
-
const handleOpenPreview = useCallback(()
|
|
357
|
+
const handleOpenPreview = useCallback(()=>{
|
|
304
358
|
setIsPreviewOpen(true);
|
|
305
359
|
}, []);
|
|
306
360
|
// Handle save from preview modal (returns Promise for navigation flow)
|
|
307
|
-
const handleSaveFromPreview = useCallback(async ()
|
|
361
|
+
const handleSaveFromPreview = useCallback(async ()=>{
|
|
308
362
|
const data = latestDataRef.current;
|
|
309
363
|
setIsSaving(true);
|
|
310
364
|
try {
|
|
311
365
|
const response = await fetch(`${apiEndpoint}/${pageId}`, {
|
|
312
366
|
method: 'PATCH',
|
|
313
|
-
headers: {
|
|
367
|
+
headers: {
|
|
368
|
+
'Content-Type': 'application/json'
|
|
369
|
+
},
|
|
314
370
|
body: JSON.stringify({
|
|
315
371
|
puckData: data,
|
|
316
372
|
title: data?.root?.props?.title || pageTitle,
|
|
@@ -318,8 +374,8 @@ export function PuckEditorImpl({ pageId, initialData, config, pageTitle, pageSlu
|
|
|
318
374
|
// Page-tree integration: include folder and pageSegment if present
|
|
319
375
|
folder: data?.root?.props?.folder,
|
|
320
376
|
pageSegment: data?.root?.props?.pageSegment,
|
|
321
|
-
draft: true
|
|
322
|
-
})
|
|
377
|
+
draft: true
|
|
378
|
+
})
|
|
323
379
|
});
|
|
324
380
|
if (!response.ok) {
|
|
325
381
|
const errorData = await response.json();
|
|
@@ -331,25 +387,64 @@ export function PuckEditorImpl({ pageId, initialData, config, pageTitle, pageSlu
|
|
|
331
387
|
setDocumentStatus('draft');
|
|
332
388
|
markClean();
|
|
333
389
|
onSaveSuccess?.(data);
|
|
334
|
-
}
|
|
335
|
-
catch (error) {
|
|
390
|
+
} catch (error) {
|
|
336
391
|
console.error('Error saving page:', error);
|
|
337
392
|
setSaveError(error instanceof Error ? error.message : 'Unknown error');
|
|
338
393
|
onSaveError?.(error instanceof Error ? error : new Error('Unknown error'));
|
|
339
|
-
throw error
|
|
340
|
-
|
|
341
|
-
finally
|
|
394
|
+
throw error // Re-throw so preview modal knows save failed
|
|
395
|
+
;
|
|
396
|
+
} finally{
|
|
342
397
|
setIsSaving(false);
|
|
343
398
|
}
|
|
344
|
-
}, [
|
|
399
|
+
}, [
|
|
400
|
+
apiEndpoint,
|
|
401
|
+
pageId,
|
|
402
|
+
pageTitle,
|
|
403
|
+
pageSlug,
|
|
404
|
+
markClean,
|
|
405
|
+
onSaveSuccess,
|
|
406
|
+
onSaveError
|
|
407
|
+
]);
|
|
345
408
|
// Memoized overrides
|
|
346
|
-
const overrides = useMemo(()
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
409
|
+
const overrides = useMemo(()=>({
|
|
410
|
+
headerActions: ({ children })=>/*#__PURE__*/ _jsx(HeaderActions, {
|
|
411
|
+
onBack: handleBack,
|
|
412
|
+
onPreview: handlePreview,
|
|
413
|
+
onSave: handleSave,
|
|
414
|
+
onPublish: handlePublish,
|
|
415
|
+
onUnpublish: handleUnpublish,
|
|
416
|
+
onOpenPreview: handleOpenPreview,
|
|
417
|
+
isSaving: isSaving,
|
|
418
|
+
hasUnsavedChanges: hasUnsavedChanges,
|
|
419
|
+
lastSaved: lastSaved,
|
|
420
|
+
documentStatus: documentStatus,
|
|
421
|
+
wasPublished: wasPublished,
|
|
422
|
+
actionsStart: headerActionsStart,
|
|
423
|
+
actionsEnd: headerActionsEnd,
|
|
424
|
+
pageId: pageId,
|
|
425
|
+
apiEndpoint: apiEndpoint,
|
|
426
|
+
saveError: saveError,
|
|
427
|
+
onDismissError: ()=>setSaveError(null),
|
|
428
|
+
showVersionHistory: false,
|
|
429
|
+
showPreviewDarkModeToggle: showPreviewDarkModeToggle,
|
|
430
|
+
previewDarkMode: previewDarkMode,
|
|
431
|
+
onPreviewDarkModeChange: setPreviewDarkMode,
|
|
432
|
+
children: children
|
|
433
|
+
}),
|
|
434
|
+
// Always wrap iframe for richtext styles injection and theme-aware background
|
|
435
|
+
iframe: ({ children, document })=>/*#__PURE__*/ _jsx(IframeWrapper, {
|
|
436
|
+
document: document,
|
|
437
|
+
layouts: layouts,
|
|
438
|
+
layoutStyles: layoutStyles,
|
|
439
|
+
layoutKey: layoutKey,
|
|
440
|
+
editorStylesheets: mergedEditorStylesheets,
|
|
441
|
+
editorCss: mergedEditorCss,
|
|
442
|
+
previewDarkModeOverride: showPreviewDarkModeToggle ? previewDarkMode : undefined,
|
|
443
|
+
children: children
|
|
444
|
+
}),
|
|
445
|
+
// Merge custom overrides
|
|
446
|
+
...customOverrides
|
|
447
|
+
}), [
|
|
353
448
|
handleBack,
|
|
354
449
|
handlePreview,
|
|
355
450
|
handleSave,
|
|
@@ -374,20 +469,25 @@ export function PuckEditorImpl({ pageId, initialData, config, pageTitle, pageSlu
|
|
|
374
469
|
mergedEditorCss,
|
|
375
470
|
showPreviewDarkModeToggle,
|
|
376
471
|
previewDarkMode,
|
|
377
|
-
setPreviewDarkMode
|
|
472
|
+
setPreviewDarkMode
|
|
378
473
|
]);
|
|
379
474
|
// Default plugins - headingAnalyzer is always included unless plugins is explicitly false
|
|
380
|
-
const defaultPlugins = [
|
|
475
|
+
const defaultPlugins = [
|
|
476
|
+
headingAnalyzer
|
|
477
|
+
];
|
|
381
478
|
// Version history plugin for the plugin rail
|
|
382
|
-
const versionHistoryPlugin = useMemo(()
|
|
383
|
-
if (!pageId)
|
|
384
|
-
return null;
|
|
479
|
+
const versionHistoryPlugin = useMemo(()=>{
|
|
480
|
+
if (!pageId) return null;
|
|
385
481
|
return createVersionHistoryPlugin({
|
|
386
482
|
pageId,
|
|
387
483
|
apiEndpoint,
|
|
388
|
-
onRestoreSuccess: markClean
|
|
484
|
+
onRestoreSuccess: markClean
|
|
389
485
|
});
|
|
390
|
-
}, [
|
|
486
|
+
}, [
|
|
487
|
+
pageId,
|
|
488
|
+
apiEndpoint,
|
|
489
|
+
markClean
|
|
490
|
+
]);
|
|
391
491
|
// Fetch AI prompts client-side when prompts collection is enabled
|
|
392
492
|
// This allows prompts to update in real-time when edited via the prompt editor panel
|
|
393
493
|
const { prompts: clientPrompts, loading: promptsLoading } = useAiPrompts('/api/puck/ai-prompts', enableAi && hasPromptsCollection);
|
|
@@ -400,82 +500,89 @@ export function PuckEditorImpl({ pageId, initialData, config, pageTitle, pageSlu
|
|
|
400
500
|
// AI plugin - statically imported, only instantiated when enabled
|
|
401
501
|
// IMPORTANT: We intentionally exclude clientPrompts and aiOptions.examplePrompts from deps
|
|
402
502
|
// to prevent plugin recreation. The onClick handlers use refs to access current prompts.
|
|
403
|
-
const aiPlugin = useMemo(()
|
|
404
|
-
if (!enableAi)
|
|
405
|
-
return null;
|
|
503
|
+
const aiPlugin = useMemo(()=>{
|
|
504
|
+
if (!enableAi) return null;
|
|
406
505
|
// Don't create plugin until prompts are loaded (when using prompts collection)
|
|
407
|
-
if (hasPromptsCollection && promptsLoading)
|
|
408
|
-
return null;
|
|
506
|
+
if (hasPromptsCollection && promptsLoading) return null;
|
|
409
507
|
// Use client-fetched prompts when prompts collection is enabled,
|
|
410
508
|
// otherwise fall back to static props from config
|
|
411
509
|
// NOTE: We read from refs in onClick to get current values without causing re-renders
|
|
412
|
-
const getPrompts = ()
|
|
413
|
-
? (clientPromptsRef.current || [])
|
|
414
|
-
: (staticPromptsRef.current || []);
|
|
510
|
+
const getPrompts = ()=>hasPromptsCollection ? clientPromptsRef.current || [] : staticPromptsRef.current || [];
|
|
415
511
|
// Get initial prompts for labels (labels are stable, only prompts text might change)
|
|
416
512
|
const initialPrompts = getPrompts();
|
|
417
513
|
// Convert our { label, prompt } format to plugin's { label, onClick } format
|
|
418
514
|
// The plugin expects onClick to send the message via window.__PUCK_AI.sendMessage
|
|
419
|
-
const convertedPrompts = initialPrompts.map((item, index)
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
515
|
+
const convertedPrompts = initialPrompts.map((item, index)=>({
|
|
516
|
+
label: item.label,
|
|
517
|
+
onClick: ()=>{
|
|
518
|
+
// Access current prompts via ref to get latest values
|
|
519
|
+
const currentPrompts = getPrompts();
|
|
520
|
+
const currentPrompt = currentPrompts[index]?.prompt || item.prompt;
|
|
521
|
+
// Use Puck AI's global API to send the prompt as a user message
|
|
522
|
+
// sendMessage accepts { text: string } as a simpler format
|
|
523
|
+
if (typeof window !== 'undefined' && window.__PUCK_AI?.sendMessage) {
|
|
524
|
+
;
|
|
525
|
+
window.__PUCK_AI.sendMessage({
|
|
526
|
+
text: currentPrompt
|
|
527
|
+
});
|
|
528
|
+
}
|
|
430
529
|
}
|
|
431
|
-
}
|
|
432
|
-
}));
|
|
530
|
+
}));
|
|
433
531
|
return createAiPlugin({
|
|
434
532
|
host: aiOptions?.host || '/api/puck/ai',
|
|
435
533
|
chat: {
|
|
436
|
-
examplePrompts: convertedPrompts.length > 0 ? convertedPrompts : undefined
|
|
437
|
-
}
|
|
534
|
+
examplePrompts: convertedPrompts.length > 0 ? convertedPrompts : undefined
|
|
535
|
+
}
|
|
438
536
|
});
|
|
439
|
-
|
|
440
|
-
}, [
|
|
537
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- intentionally omit prompt arrays to prevent recreation
|
|
538
|
+
}, [
|
|
539
|
+
enableAi,
|
|
540
|
+
hasPromptsCollection,
|
|
541
|
+
promptsLoading,
|
|
542
|
+
aiOptions?.host
|
|
543
|
+
]);
|
|
441
544
|
// Prompt editor plugin - for managing AI prompts in the plugin rail
|
|
442
|
-
const promptEditorPlugin = useMemo(()
|
|
443
|
-
if (!enableAi || !hasPromptsCollection)
|
|
444
|
-
return null;
|
|
545
|
+
const promptEditorPlugin = useMemo(()=>{
|
|
546
|
+
if (!enableAi || !hasPromptsCollection) return null;
|
|
445
547
|
try {
|
|
446
548
|
// Dynamic require to avoid errors if module not available
|
|
447
549
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
448
550
|
const { createPromptEditorPlugin } = require('../ai/plugins/promptEditorPlugin');
|
|
449
551
|
return createPromptEditorPlugin({
|
|
450
|
-
apiEndpoint: '/api/puck/ai-prompts'
|
|
552
|
+
apiEndpoint: '/api/puck/ai-prompts'
|
|
451
553
|
});
|
|
452
|
-
}
|
|
453
|
-
catch (e) {
|
|
554
|
+
} catch (e) {
|
|
454
555
|
console.warn('[PuckEditor] Failed to load prompt editor plugin:', e);
|
|
455
556
|
return null;
|
|
456
557
|
}
|
|
457
|
-
}, [
|
|
558
|
+
}, [
|
|
559
|
+
enableAi,
|
|
560
|
+
hasPromptsCollection
|
|
561
|
+
]);
|
|
458
562
|
// Context editor plugin - for managing AI context in the plugin rail
|
|
459
|
-
const contextEditorPlugin = useMemo(()
|
|
460
|
-
if (!enableAi || !hasContextCollection)
|
|
461
|
-
return null;
|
|
563
|
+
const contextEditorPlugin = useMemo(()=>{
|
|
564
|
+
if (!enableAi || !hasContextCollection) return null;
|
|
462
565
|
try {
|
|
463
566
|
// Dynamic require to avoid errors if module not available
|
|
464
567
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
465
568
|
const { createContextEditorPlugin } = require('../ai/plugins/contextEditorPlugin');
|
|
466
569
|
return createContextEditorPlugin({
|
|
467
|
-
apiEndpoint: '/api/puck/ai-context'
|
|
570
|
+
apiEndpoint: '/api/puck/ai-context'
|
|
468
571
|
});
|
|
469
|
-
}
|
|
470
|
-
catch (e) {
|
|
572
|
+
} catch (e) {
|
|
471
573
|
console.warn('[PuckEditor] Failed to load context editor plugin:', e);
|
|
472
574
|
return null;
|
|
473
575
|
}
|
|
474
|
-
}, [
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
576
|
+
}, [
|
|
577
|
+
enableAi,
|
|
578
|
+
hasContextCollection
|
|
579
|
+
]);
|
|
580
|
+
const resolvedPlugins = useMemo(()=>{
|
|
581
|
+
if (plugins === false) return undefined;
|
|
582
|
+
const base = !plugins || plugins.length === 0 ? defaultPlugins : [
|
|
583
|
+
...defaultPlugins,
|
|
584
|
+
...plugins
|
|
585
|
+
];
|
|
479
586
|
// Add version history plugin if available
|
|
480
587
|
if (versionHistoryPlugin) {
|
|
481
588
|
base.push(versionHistoryPlugin);
|
|
@@ -493,12 +600,55 @@ export function PuckEditorImpl({ pageId, initialData, config, pageTitle, pageSlu
|
|
|
493
600
|
base.push(contextEditorPlugin);
|
|
494
601
|
}
|
|
495
602
|
return base;
|
|
496
|
-
}, [
|
|
497
|
-
|
|
603
|
+
}, [
|
|
604
|
+
plugins,
|
|
605
|
+
versionHistoryPlugin,
|
|
606
|
+
aiPlugin,
|
|
607
|
+
promptEditorPlugin,
|
|
608
|
+
contextEditorPlugin
|
|
609
|
+
]);
|
|
610
|
+
const editorContent = /*#__PURE__*/ _jsxs(_Fragment, {
|
|
611
|
+
children: [
|
|
612
|
+
autoDetectDarkMode && /*#__PURE__*/ _jsx(DarkModeStyles, {}),
|
|
613
|
+
/*#__PURE__*/ _jsx("div", {
|
|
614
|
+
className: "h-screen",
|
|
615
|
+
children: /*#__PURE__*/ _jsx(Puck, {
|
|
616
|
+
config: config,
|
|
617
|
+
data: dataWithSlug,
|
|
618
|
+
onChange: handleChange,
|
|
619
|
+
onPublish: handlePublish,
|
|
620
|
+
headerTitle: `${pageTitle} /${pageSlug}`,
|
|
621
|
+
plugins: resolvedPlugins,
|
|
622
|
+
viewports: enableViewports ? DEFAULT_VIEWPORTS : undefined,
|
|
623
|
+
overrides: overrides,
|
|
624
|
+
iframe: {
|
|
625
|
+
waitForStyles: true
|
|
626
|
+
},
|
|
627
|
+
_experimentalFullScreenCanvas: experimentalFullScreenCanvas
|
|
628
|
+
})
|
|
629
|
+
}),
|
|
630
|
+
/*#__PURE__*/ _jsx(PreviewModal, {
|
|
631
|
+
isOpen: isPreviewOpen,
|
|
632
|
+
onClose: ()=>setIsPreviewOpen(false),
|
|
633
|
+
data: latestDataRef.current,
|
|
634
|
+
pageTitle: pageTitle,
|
|
635
|
+
onOpenInNewTab: handlePreview,
|
|
636
|
+
layouts: layouts,
|
|
637
|
+
hasUnsavedChanges: hasUnsavedChanges,
|
|
638
|
+
onSave: handleSaveFromPreview,
|
|
639
|
+
isSaving: isSaving,
|
|
640
|
+
editorStylesheets: mergedEditorStylesheets,
|
|
641
|
+
editorCss: mergedEditorCss,
|
|
642
|
+
config: config
|
|
643
|
+
})
|
|
644
|
+
]
|
|
645
|
+
});
|
|
498
646
|
// Wrap with ThemeProvider if theme is provided
|
|
499
647
|
if (theme) {
|
|
500
|
-
return _jsx(ThemeProvider, {
|
|
648
|
+
return /*#__PURE__*/ _jsx(ThemeProvider, {
|
|
649
|
+
theme: theme,
|
|
650
|
+
children: editorContent
|
|
651
|
+
});
|
|
501
652
|
}
|
|
502
653
|
return editorContent;
|
|
503
654
|
}
|
|
504
|
-
//# sourceMappingURL=PuckEditorImpl.client.js.map
|