@delmaredigital/payload-puck 0.6.12 → 0.6.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -1
- package/dist/admin/EditWithPuckButton.d.ts +1 -1
- package/dist/admin/EditWithPuckButton.d.ts.map +1 -1
- package/dist/admin/EditWithPuckButton.js +65 -25
- package/dist/admin/EditWithPuckButton.js.map +1 -1
- package/dist/admin/EditWithPuckCell.js +43 -13
- package/dist/admin/EditWithPuckCell.js.map +1 -1
- package/dist/admin/PuckEditorView.d.ts +1 -1
- package/dist/admin/PuckEditorView.d.ts.map +1 -1
- package/dist/admin/PuckEditorView.js +118 -32
- package/dist/admin/PuckEditorView.js.map +1 -1
- package/dist/admin/client.d.ts +2 -2
- package/dist/admin/client.d.ts.map +1 -1
- package/dist/admin/client.js +4 -4
- package/dist/admin/client.js.map +1 -1
- package/dist/admin/generateAdminComponents.js +7 -7
- package/dist/admin/generateAdminComponents.js.map +1 -1
- package/dist/admin/index.d.ts +5 -5
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +3 -2
- package/dist/admin/index.js.map +1 -1
- package/dist/ai/collections/AiContext.js +56 -29
- package/dist/ai/collections/AiContext.js.map +1 -1
- package/dist/ai/collections/AiPrompts.js +24 -19
- package/dist/ai/collections/AiPrompts.js.map +1 -1
- package/dist/ai/createAiApiRoutes.js +28 -19
- package/dist/ai/createAiApiRoutes.js.map +1 -1
- package/dist/ai/createAiGenerate.js +7 -8
- package/dist/ai/createAiGenerate.js.map +1 -1
- package/dist/ai/createAiPlugin.js +7 -9
- package/dist/ai/createAiPlugin.js.map +1 -1
- package/dist/ai/hooks/useAiContext.js +50 -39
- package/dist/ai/hooks/useAiContext.js.map +1 -1
- package/dist/ai/hooks/useAiPrompts.js +33 -25
- package/dist/ai/hooks/useAiPrompts.js.map +1 -1
- package/dist/ai/index.js +9 -10
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/plugins/ContextEditorPanel.d.ts +1 -1
- package/dist/ai/plugins/ContextEditorPanel.d.ts.map +1 -1
- package/dist/ai/plugins/ContextEditorPanel.js +399 -107
- package/dist/ai/plugins/ContextEditorPanel.js.map +1 -1
- package/dist/ai/plugins/PromptEditorPanel.d.ts +1 -1
- package/dist/ai/plugins/PromptEditorPanel.d.ts.map +1 -1
- package/dist/ai/plugins/PromptEditorPanel.js +237 -51
- package/dist/ai/plugins/PromptEditorPanel.js.map +1 -1
- package/dist/ai/plugins/contextEditorPlugin.js +12 -5
- package/dist/ai/plugins/contextEditorPlugin.js.map +1 -1
- package/dist/ai/plugins/promptApiRoutes.js +119 -50
- package/dist/ai/plugins/promptApiRoutes.js.map +1 -1
- package/dist/ai/plugins/promptEditorPlugin.js +12 -5
- package/dist/ai/plugins/promptEditorPlugin.js.map +1 -1
- package/dist/ai/presets/componentAiDefaults.js +108 -83
- package/dist/ai/presets/componentAiDefaults.js.map +1 -1
- package/dist/ai/presets/index.js +12 -18
- package/dist/ai/presets/index.js.map +1 -1
- package/dist/ai/presets/instructions/interactive.js +85 -75
- package/dist/ai/presets/instructions/interactive.js.map +1 -1
- package/dist/ai/presets/instructions/layout.js +122 -117
- package/dist/ai/presets/instructions/layout.js.map +1 -1
- package/dist/ai/presets/instructions/media.js +31 -29
- package/dist/ai/presets/instructions/media.js.map +1 -1
- package/dist/ai/presets/instructions/pagePatterns.js +4 -6
- package/dist/ai/presets/instructions/pagePatterns.js.map +1 -1
- package/dist/ai/presets/instructions/schemas.js +495 -137
- package/dist/ai/presets/instructions/schemas.js.map +1 -1
- package/dist/ai/presets/instructions/typography.js +38 -33
- package/dist/ai/presets/instructions/typography.js.map +1 -1
- package/dist/ai/tools/index.js +92 -55
- package/dist/ai/tools/index.js.map +1 -1
- package/dist/ai/types.js +7 -1
- package/dist/ai/types.js.map +1 -1
- package/dist/ai/utils/injectAiConfig.js +33 -40
- package/dist/ai/utils/injectAiConfig.js.map +1 -1
- package/dist/api/createPuckApiRoutes.d.ts +1 -1
- package/dist/api/createPuckApiRoutes.d.ts.map +1 -1
- package/dist/api/createPuckApiRoutes.js +123 -65
- package/dist/api/createPuckApiRoutes.js.map +1 -1
- package/dist/api/createPuckApiRoutesVersions.d.ts +1 -1
- package/dist/api/createPuckApiRoutesVersions.d.ts.map +1 -1
- package/dist/api/createPuckApiRoutesVersions.js +88 -37
- package/dist/api/createPuckApiRoutesVersions.js.map +1 -1
- package/dist/api/createPuckApiRoutesWithId.d.ts +1 -1
- package/dist/api/createPuckApiRoutesWithId.d.ts.map +1 -1
- package/dist/api/createPuckApiRoutesWithId.js +166 -72
- package/dist/api/createPuckApiRoutesWithId.js.map +1 -1
- package/dist/api/index.d.ts +5 -5
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +6 -6
- package/dist/api/index.js.map +1 -1
- package/dist/api/payload-config.d.js +15 -0
- package/dist/api/payload-config.d.js.map +1 -0
- package/dist/api/types.js +4 -1
- package/dist/api/types.js.map +1 -1
- package/dist/api/utils/mapRootProps.d.ts +1 -1
- package/dist/api/utils/mapRootProps.d.ts.map +1 -1
- package/dist/api/utils/mapRootProps.js +77 -44
- package/dist/api/utils/mapRootProps.js.map +1 -1
- package/dist/collections/Templates.js +24 -20
- package/dist/collections/Templates.js.map +1 -1
- package/dist/components/AccordionClient.d.ts +2 -2
- package/dist/components/AccordionClient.d.ts.map +1 -1
- package/dist/components/AccordionClient.js +81 -22
- package/dist/components/AccordionClient.js.map +1 -1
- package/dist/components/AnimatedWrapper.d.ts +2 -2
- package/dist/components/AnimatedWrapper.d.ts.map +1 -1
- package/dist/components/AnimatedWrapper.js +31 -16
- package/dist/components/AnimatedWrapper.js.map +1 -1
- package/dist/components/exports.js +2 -2
- package/dist/components/exports.js.map +1 -1
- package/dist/components/index.d.ts +5 -5
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +7 -7
- package/dist/components/index.js.map +1 -1
- package/dist/components/interactive/Accordion.d.ts +1 -1
- package/dist/components/interactive/Accordion.d.ts.map +1 -1
- package/dist/components/interactive/Accordion.js +149 -55
- package/dist/components/interactive/Accordion.js.map +1 -1
- package/dist/components/interactive/Accordion.server.d.ts +1 -1
- package/dist/components/interactive/Accordion.server.d.ts.map +1 -1
- package/dist/components/interactive/Accordion.server.js +25 -7
- package/dist/components/interactive/Accordion.server.js.map +1 -1
- package/dist/components/interactive/Button.d.ts +3 -3
- package/dist/components/interactive/Button.d.ts.map +1 -1
- package/dist/components/interactive/Button.js +89 -43
- package/dist/components/interactive/Button.js.map +1 -1
- package/dist/components/interactive/Button.server.d.ts +2 -2
- package/dist/components/interactive/Button.server.d.ts.map +1 -1
- package/dist/components/interactive/Button.server.js +40 -20
- package/dist/components/interactive/Button.server.js.map +1 -1
- package/dist/components/interactive/Card.d.ts +3 -3
- package/dist/components/interactive/Card.d.ts.map +1 -1
- package/dist/components/interactive/Card.js +131 -39
- package/dist/components/interactive/Card.js.map +1 -1
- package/dist/components/interactive/Card.server.d.ts +3 -3
- package/dist/components/interactive/Card.server.d.ts.map +1 -1
- package/dist/components/interactive/Card.server.js +72 -11
- package/dist/components/interactive/Card.server.js.map +1 -1
- package/dist/components/interactive/Divider.d.ts +1 -1
- package/dist/components/interactive/Divider.d.ts.map +1 -1
- package/dist/components/interactive/Divider.js +54 -26
- package/dist/components/interactive/Divider.js.map +1 -1
- package/dist/components/interactive/Divider.server.d.ts +1 -1
- package/dist/components/interactive/Divider.server.d.ts.map +1 -1
- package/dist/components/interactive/Divider.server.js +28 -12
- package/dist/components/interactive/Divider.server.js.map +1 -1
- package/dist/components/interactive/index.d.ts +4 -4
- package/dist/components/interactive/index.d.ts.map +1 -1
- package/dist/components/interactive/index.js +5 -5
- package/dist/components/interactive/index.js.map +1 -1
- package/dist/components/layout/Container.d.ts +1 -1
- package/dist/components/layout/Container.d.ts.map +1 -1
- package/dist/components/layout/Container.js +101 -47
- package/dist/components/layout/Container.js.map +1 -1
- package/dist/components/layout/Container.server.d.ts +1 -1
- package/dist/components/layout/Container.server.d.ts.map +1 -1
- package/dist/components/layout/Container.server.js +67 -19
- package/dist/components/layout/Container.server.js.map +1 -1
- package/dist/components/layout/Flex.d.ts +2 -2
- package/dist/components/layout/Flex.d.ts.map +1 -1
- package/dist/components/layout/Flex.js +124 -55
- package/dist/components/layout/Flex.js.map +1 -1
- package/dist/components/layout/Flex.server.d.ts +1 -1
- package/dist/components/layout/Flex.server.d.ts.map +1 -1
- package/dist/components/layout/Flex.server.js +50 -14
- package/dist/components/layout/Flex.server.js.map +1 -1
- package/dist/components/layout/Grid.d.ts +1 -1
- package/dist/components/layout/Grid.d.ts.map +1 -1
- package/dist/components/layout/Grid.js +93 -44
- package/dist/components/layout/Grid.js.map +1 -1
- package/dist/components/layout/Grid.server.d.ts +1 -1
- package/dist/components/layout/Grid.server.d.ts.map +1 -1
- package/dist/components/layout/Grid.server.js +56 -14
- package/dist/components/layout/Grid.server.js.map +1 -1
- package/dist/components/layout/Section.d.ts +1 -1
- package/dist/components/layout/Section.d.ts.map +1 -1
- package/dist/components/layout/Section.js +147 -64
- package/dist/components/layout/Section.js.map +1 -1
- package/dist/components/layout/Section.server.d.ts +1 -1
- package/dist/components/layout/Section.server.d.ts.map +1 -1
- package/dist/components/layout/Section.server.js +92 -28
- package/dist/components/layout/Section.server.js.map +1 -1
- package/dist/components/layout/Spacer.d.ts +1 -1
- package/dist/components/layout/Spacer.d.ts.map +1 -1
- package/dist/components/layout/Spacer.js +80 -30
- package/dist/components/layout/Spacer.js.map +1 -1
- package/dist/components/layout/Spacer.server.d.ts +1 -1
- package/dist/components/layout/Spacer.server.d.ts.map +1 -1
- package/dist/components/layout/Spacer.server.js +31 -9
- package/dist/components/layout/Spacer.server.js.map +1 -1
- package/dist/components/layout/Template.d.ts +1 -1
- package/dist/components/layout/Template.d.ts.map +1 -1
- package/dist/components/layout/Template.js +58 -30
- package/dist/components/layout/Template.js.map +1 -1
- package/dist/components/layout/Template.server.d.ts +1 -1
- package/dist/components/layout/Template.server.d.ts.map +1 -1
- package/dist/components/layout/Template.server.js +43 -11
- package/dist/components/layout/Template.server.js.map +1 -1
- package/dist/components/layout/index.d.ts +8 -8
- package/dist/components/layout/index.d.ts.map +1 -1
- package/dist/components/layout/index.js +8 -8
- package/dist/components/layout/index.js.map +1 -1
- package/dist/components/media/Image.d.ts +3 -3
- package/dist/components/media/Image.d.ts.map +1 -1
- package/dist/components/media/Image.js +122 -39
- package/dist/components/media/Image.js.map +1 -1
- package/dist/components/media/Image.server.d.ts +3 -3
- package/dist/components/media/Image.server.d.ts.map +1 -1
- package/dist/components/media/Image.server.js +76 -13
- package/dist/components/media/Image.server.js.map +1 -1
- package/dist/components/media/index.d.ts +1 -1
- package/dist/components/media/index.d.ts.map +1 -1
- package/dist/components/media/index.js +2 -2
- package/dist/components/media/index.js.map +1 -1
- package/dist/components/typography/Heading.d.ts +2 -2
- package/dist/components/typography/Heading.d.ts.map +1 -1
- package/dist/components/typography/Heading.js +45 -25
- package/dist/components/typography/Heading.js.map +1 -1
- package/dist/components/typography/Heading.server.d.ts +2 -2
- package/dist/components/typography/Heading.server.d.ts.map +1 -1
- package/dist/components/typography/Heading.server.js +16 -10
- package/dist/components/typography/Heading.server.js.map +1 -1
- package/dist/components/typography/RichText.editor.d.ts +1 -1
- package/dist/components/typography/RichText.editor.d.ts.map +1 -1
- package/dist/components/typography/RichText.editor.js +44 -19
- package/dist/components/typography/RichText.editor.js.map +1 -1
- package/dist/components/typography/RichText.server.d.ts +2 -2
- package/dist/components/typography/RichText.server.d.ts.map +1 -1
- package/dist/components/typography/RichText.server.js +33 -14
- package/dist/components/typography/RichText.server.js.map +1 -1
- package/dist/components/typography/Text.d.ts +2 -2
- package/dist/components/typography/Text.d.ts.map +1 -1
- package/dist/components/typography/Text.js +49 -23
- package/dist/components/typography/Text.js.map +1 -1
- package/dist/components/typography/Text.server.d.ts +2 -2
- package/dist/components/typography/Text.server.d.ts.map +1 -1
- package/dist/components/typography/Text.server.js +21 -8
- package/dist/components/typography/Text.server.js.map +1 -1
- package/dist/components/typography/index.d.ts +4 -4
- package/dist/components/typography/index.d.ts.map +1 -1
- package/dist/components/typography/index.js +5 -5
- package/dist/components/typography/index.js.map +1 -1
- package/dist/config/config.editor.d.ts +3 -3
- package/dist/config/config.editor.d.ts.map +1 -1
- package/dist/config/config.editor.js +119 -54
- package/dist/config/config.editor.js.map +1 -1
- package/dist/config/index.d.ts +4 -4
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +62 -35
- package/dist/config/index.js.map +1 -1
- package/dist/config/merge.d.ts +1 -1
- package/dist/config/merge.d.ts.map +1 -1
- package/dist/config/merge.js +23 -26
- package/dist/config/merge.js.map +1 -1
- package/dist/config/presets.d.ts +4 -4
- package/dist/config/presets.js +195 -75
- package/dist/config/presets.js.map +1 -1
- package/dist/config/types.js +6 -2
- package/dist/config/types.js.map +1 -1
- package/dist/editor/PuckEditor.d.ts +4 -4
- package/dist/editor/PuckEditor.d.ts.map +1 -1
- package/dist/editor/PuckEditor.js +162 -70
- package/dist/editor/PuckEditor.js.map +1 -1
- package/dist/editor/PuckEditorImpl.client.d.ts +4 -4
- package/dist/editor/PuckEditorImpl.client.d.ts.map +1 -1
- package/dist/editor/PuckEditorImpl.client.js +304 -152
- package/dist/editor/PuckEditorImpl.client.js.map +1 -1
- package/dist/editor/components/DarkModeStyles.js +11 -12
- package/dist/editor/components/DarkModeStyles.js.map +1 -1
- package/dist/editor/components/HeaderActions.js +308 -64
- package/dist/editor/components/HeaderActions.js.map +1 -1
- package/dist/editor/components/IframeWrapper.d.ts +1 -1
- package/dist/editor/components/IframeWrapper.d.ts.map +1 -1
- package/dist/editor/components/IframeWrapper.js +82 -58
- package/dist/editor/components/IframeWrapper.js.map +1 -1
- package/dist/editor/components/LoadingState.d.ts +1 -1
- package/dist/editor/components/LoadingState.d.ts.map +1 -1
- package/dist/editor/components/LoadingState.js +17 -3
- package/dist/editor/components/LoadingState.js.map +1 -1
- package/dist/editor/components/PreviewModal.js +234 -78
- package/dist/editor/components/PreviewModal.js.map +1 -1
- package/dist/editor/components/PreviewModeToggle.js +43 -15
- package/dist/editor/components/PreviewModeToggle.js.map +1 -1
- package/dist/editor/components/VersionHistory.js +219 -71
- package/dist/editor/components/VersionHistory.js.map +1 -1
- package/dist/editor/hooks/useDarkMode.js +36 -23
- package/dist/editor/hooks/useDarkMode.js.map +1 -1
- package/dist/editor/hooks/useUnsavedChanges.js +8 -8
- package/dist/editor/hooks/useUnsavedChanges.js.map +1 -1
- package/dist/editor/index.js +5 -6
- package/dist/editor/index.js.map +1 -1
- package/dist/editor/plugins/VersionHistoryPanel.js +236 -75
- package/dist/editor/plugins/VersionHistoryPanel.js.map +1 -1
- package/dist/editor/plugins/index.js +4 -4
- package/dist/editor/plugins/index.js.map +1 -1
- package/dist/editor/plugins/versionHistoryPlugin.js +10 -8
- package/dist/editor/plugins/versionHistoryPlugin.js.map +1 -1
- package/dist/editor/utils/detectPageTree.js +5 -5
- package/dist/editor/utils/detectPageTree.js.map +1 -1
- package/dist/editor/utils/index.js +1 -0
- package/dist/editor/utils/index.js.map +1 -1
- package/dist/editor/utils/injectPageTreeFields.js +13 -9
- package/dist/editor/utils/injectPageTreeFields.js.map +1 -1
- package/dist/endpoints/ai.js +58 -34
- package/dist/endpoints/ai.js.map +1 -1
- package/dist/endpoints/context.js +86 -40
- package/dist/endpoints/context.js.map +1 -1
- package/dist/endpoints/index.js +153 -76
- package/dist/endpoints/index.js.map +1 -1
- package/dist/endpoints/postcss.d.js +5 -0
- package/dist/endpoints/postcss.d.js.map +1 -0
- package/dist/endpoints/prompts.js +81 -39
- package/dist/endpoints/prompts.js.map +1 -1
- package/dist/endpoints/styles.js +34 -36
- package/dist/endpoints/styles.js.map +1 -1
- package/dist/exports/client.js +2 -2
- package/dist/exports/client.js.map +1 -1
- package/dist/exports/rsc.js +2 -2
- package/dist/exports/rsc.js.map +1 -1
- package/dist/fields/AlignmentField.d.ts +1 -1
- package/dist/fields/AlignmentField.d.ts.map +1 -1
- package/dist/fields/AlignmentField.js +93 -30
- package/dist/fields/AlignmentField.js.map +1 -1
- package/dist/fields/AnimationField.d.ts +2 -2
- package/dist/fields/AnimationField.d.ts.map +1 -1
- package/dist/fields/AnimationField.js +558 -84
- package/dist/fields/AnimationField.js.map +1 -1
- package/dist/fields/BackgroundField.d.ts +2 -2
- package/dist/fields/BackgroundField.d.ts.map +1 -1
- package/dist/fields/BackgroundField.js +754 -120
- package/dist/fields/BackgroundField.js.map +1 -1
- package/dist/fields/BorderField.d.ts +2 -2
- package/dist/fields/BorderField.d.ts.map +1 -1
- package/dist/fields/BorderField.js +275 -73
- package/dist/fields/BorderField.js.map +1 -1
- package/dist/fields/ColorPickerField.d.ts +2 -2
- package/dist/fields/ColorPickerField.d.ts.map +1 -1
- package/dist/fields/ColorPickerField.js +210 -68
- package/dist/fields/ColorPickerField.js.map +1 -1
- package/dist/fields/ContentAlignmentField.d.ts +1 -1
- package/dist/fields/ContentAlignmentField.d.ts.map +1 -1
- package/dist/fields/ContentAlignmentField.js +161 -75
- package/dist/fields/ContentAlignmentField.js.map +1 -1
- package/dist/fields/DimensionsField.d.ts +2 -2
- package/dist/fields/DimensionsField.d.ts.map +1 -1
- package/dist/fields/DimensionsField.js +575 -146
- package/dist/fields/DimensionsField.js.map +1 -1
- package/dist/fields/FlexAlignmentField.d.ts +2 -2
- package/dist/fields/FlexAlignmentField.d.ts.map +1 -1
- package/dist/fields/FlexAlignmentField.js +189 -51
- package/dist/fields/FlexAlignmentField.js.map +1 -1
- package/dist/fields/FolderPickerField.d.ts +8 -1
- package/dist/fields/FolderPickerField.d.ts.map +1 -1
- package/dist/fields/FolderPickerField.js +288 -75
- package/dist/fields/FolderPickerField.js.map +1 -1
- package/dist/fields/GradientEditor.d.ts +2 -2
- package/dist/fields/GradientEditor.d.ts.map +1 -1
- package/dist/fields/GradientEditor.js +462 -86
- package/dist/fields/GradientEditor.js.map +1 -1
- package/dist/fields/LockedField.d.ts +15 -2
- package/dist/fields/LockedField.d.ts.map +1 -1
- package/dist/fields/LockedField.js +180 -49
- package/dist/fields/LockedField.js.map +1 -1
- package/dist/fields/MarginField.d.ts +2 -2
- package/dist/fields/MarginField.d.ts.map +1 -1
- package/dist/fields/MarginField.js +144 -46
- package/dist/fields/MarginField.js.map +1 -1
- package/dist/fields/MediaField.d.ts +1 -1
- package/dist/fields/MediaField.d.ts.map +1 -1
- package/dist/fields/MediaField.js +688 -186
- package/dist/fields/MediaField.js.map +1 -1
- package/dist/fields/PaddingField.d.ts +2 -2
- package/dist/fields/PaddingField.d.ts.map +1 -1
- package/dist/fields/PaddingField.js +144 -46
- package/dist/fields/PaddingField.js.map +1 -1
- package/dist/fields/PageSegmentField.d.ts +15 -2
- package/dist/fields/PageSegmentField.d.ts.map +1 -1
- package/dist/fields/PageSegmentField.js +156 -54
- package/dist/fields/PageSegmentField.js.map +1 -1
- package/dist/fields/ResetField.d.ts +1 -1
- package/dist/fields/ResetField.d.ts.map +1 -1
- package/dist/fields/ResetField.js +59 -31
- package/dist/fields/ResetField.js.map +1 -1
- package/dist/fields/ResponsiveField.d.ts +1 -1
- package/dist/fields/ResponsiveField.d.ts.map +1 -1
- package/dist/fields/ResponsiveField.js +233 -90
- package/dist/fields/ResponsiveField.js.map +1 -1
- package/dist/fields/ResponsiveVisibilityField.d.ts +2 -2
- package/dist/fields/ResponsiveVisibilityField.d.ts.map +1 -1
- package/dist/fields/ResponsiveVisibilityField.js +119 -36
- package/dist/fields/ResponsiveVisibilityField.js.map +1 -1
- package/dist/fields/SizeField.d.ts +3 -3
- package/dist/fields/SizeField.d.ts.map +1 -1
- package/dist/fields/SizeField.js +226 -52
- package/dist/fields/SizeField.js.map +1 -1
- package/dist/fields/SlugPreviewField.d.ts +8 -1
- package/dist/fields/SlugPreviewField.d.ts.map +1 -1
- package/dist/fields/SlugPreviewField.js +65 -16
- package/dist/fields/SlugPreviewField.js.map +1 -1
- package/dist/fields/TemplateField.d.ts +1 -1
- package/dist/fields/TemplateField.d.ts.map +1 -1
- package/dist/fields/TemplateField.js +362 -120
- package/dist/fields/TemplateField.js.map +1 -1
- package/dist/fields/TransformField.d.ts +2 -2
- package/dist/fields/TransformField.d.ts.map +1 -1
- package/dist/fields/TransformField.js +517 -81
- package/dist/fields/TransformField.js.map +1 -1
- package/dist/fields/VerticalAlignmentField.d.ts +1 -1
- package/dist/fields/VerticalAlignmentField.d.ts.map +1 -1
- package/dist/fields/VerticalAlignmentField.js +93 -30
- package/dist/fields/VerticalAlignmentField.js.map +1 -1
- package/dist/fields/WidthField.d.ts +2 -2
- package/dist/fields/WidthField.d.ts.map +1 -1
- package/dist/fields/WidthField.js +278 -81
- package/dist/fields/WidthField.js.map +1 -1
- package/dist/fields/index.d.ts +41 -41
- package/dist/fields/index.d.ts.map +1 -1
- package/dist/fields/index.js +37 -43
- package/dist/fields/index.js.map +1 -1
- package/dist/fields/richtext/controls/ColorPickerControl.d.ts +13 -2
- package/dist/fields/richtext/controls/ColorPickerControl.d.ts.map +1 -1
- package/dist/fields/richtext/controls/ColorPickerControl.js +212 -47
- package/dist/fields/richtext/controls/ColorPickerControl.js.map +1 -1
- package/dist/fields/richtext/controls/DropdownPortal.d.ts +2 -2
- package/dist/fields/richtext/controls/DropdownPortal.d.ts.map +1 -1
- package/dist/fields/richtext/controls/DropdownPortal.js +36 -4
- package/dist/fields/richtext/controls/DropdownPortal.js.map +1 -1
- package/dist/fields/richtext/controls/FontSizeControl.d.ts +9 -1
- package/dist/fields/richtext/controls/FontSizeControl.d.ts.map +1 -1
- package/dist/fields/richtext/controls/FontSizeControl.js +109 -24
- package/dist/fields/richtext/controls/FontSizeControl.js.map +1 -1
- package/dist/fields/richtext/controls/HighlightControl.d.ts +12 -1
- package/dist/fields/richtext/controls/HighlightControl.d.ts.map +1 -1
- package/dist/fields/richtext/controls/HighlightControl.js +54 -17
- package/dist/fields/richtext/controls/HighlightControl.js.map +1 -1
- package/dist/fields/richtext/controls/index.d.ts +5 -5
- package/dist/fields/richtext/controls/index.d.ts.map +1 -1
- package/dist/fields/richtext/controls/index.js +8 -11
- package/dist/fields/richtext/controls/index.js.map +1 -1
- package/dist/fields/richtext/controls/shared.js +108 -63
- package/dist/fields/richtext/controls/shared.js.map +1 -1
- package/dist/fields/richtext/createRichTextField.d.ts +18 -4
- package/dist/fields/richtext/createRichTextField.d.ts.map +1 -1
- package/dist/fields/richtext/createRichTextField.js +113 -26
- package/dist/fields/richtext/createRichTextField.js.map +1 -1
- package/dist/fields/richtext/extensions/FontSize.js +26 -20
- package/dist/fields/richtext/extensions/FontSize.js.map +1 -1
- package/dist/fields/richtext/extensions/index.d.ts +1 -1
- package/dist/fields/richtext/extensions/index.d.ts.map +1 -1
- package/dist/fields/richtext/extensions/index.js +2 -2
- package/dist/fields/richtext/extensions/index.js.map +1 -1
- package/dist/fields/richtext/index.d.ts +6 -6
- package/dist/fields/richtext/index.d.ts.map +1 -1
- package/dist/fields/richtext/index.js +8 -8
- package/dist/fields/richtext/index.js.map +1 -1
- package/dist/fields/shared.d.ts +1 -1
- package/dist/fields/shared.d.ts.map +1 -1
- package/dist/fields/shared.js +915 -478
- package/dist/fields/shared.js.map +1 -1
- package/dist/hooks/index.d.ts +2 -2
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +3 -3
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useResponsiveStyles.d.ts +1 -1
- package/dist/hooks/useResponsiveStyles.d.ts.map +1 -1
- package/dist/hooks/useResponsiveStyles.js +36 -32
- package/dist/hooks/useResponsiveStyles.js.map +1 -1
- package/dist/hooks/useScrollAnimation.js +26 -24
- package/dist/hooks/useScrollAnimation.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/layouts/LayoutWrapper.d.ts +3 -3
- package/dist/layouts/LayoutWrapper.d.ts.map +1 -1
- package/dist/layouts/LayoutWrapper.js +115 -51
- package/dist/layouts/LayoutWrapper.js.map +1 -1
- package/dist/layouts/defaults.d.ts +1 -1
- package/dist/layouts/defaults.d.ts.map +1 -1
- package/dist/layouts/defaults.js +23 -31
- package/dist/layouts/defaults.js.map +1 -1
- package/dist/layouts/index.d.ts +4 -4
- package/dist/layouts/index.d.ts.map +1 -1
- package/dist/layouts/index.js +5 -4
- package/dist/layouts/index.js.map +1 -1
- package/dist/layouts/types.js +4 -2
- package/dist/layouts/types.js.map +1 -1
- package/dist/layouts/utils.d.ts +1 -1
- package/dist/layouts/utils.d.ts.map +1 -1
- package/dist/layouts/utils.js +32 -40
- package/dist/layouts/utils.js.map +1 -1
- package/dist/next/index.js +31 -34
- package/dist/next/index.js.map +1 -1
- package/dist/plugin/collections/Pages.d.ts +2 -2
- package/dist/plugin/collections/Pages.d.ts.map +1 -1
- package/dist/plugin/collections/Pages.js +46 -43
- package/dist/plugin/collections/Pages.js.map +1 -1
- package/dist/plugin/fields/index.d.ts +3 -3
- package/dist/plugin/fields/index.d.ts.map +1 -1
- package/dist/plugin/fields/index.js +100 -78
- package/dist/plugin/fields/index.js.map +1 -1
- package/dist/plugin/fields/types.d.ts +1 -1
- package/dist/plugin/fields/types.d.ts.map +1 -1
- package/dist/plugin/fields/types.js +26 -2
- package/dist/plugin/fields/types.js.map +1 -1
- package/dist/plugin/hooks/index.d.ts +1 -1
- package/dist/plugin/hooks/index.d.ts.map +1 -1
- package/dist/plugin/hooks/index.js +2 -2
- package/dist/plugin/hooks/index.js.map +1 -1
- package/dist/plugin/hooks/isHomepageUnique.js +28 -19
- package/dist/plugin/hooks/isHomepageUnique.js.map +1 -1
- package/dist/plugin/index.d.ts +8 -8
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +190 -188
- package/dist/plugin/index.js.map +1 -1
- package/dist/render/HybridPageRenderer.d.ts +2 -2
- package/dist/render/HybridPageRenderer.d.ts.map +1 -1
- package/dist/render/HybridPageRenderer.js +58 -10
- package/dist/render/HybridPageRenderer.js.map +1 -1
- package/dist/render/PageRenderer.d.ts +2 -2
- package/dist/render/PageRenderer.d.ts.map +1 -1
- package/dist/render/PageRenderer.js +31 -14
- package/dist/render/PageRenderer.js.map +1 -1
- package/dist/render/PuckEditor.client.d.ts +1 -1
- package/dist/render/PuckEditor.client.d.ts.map +1 -1
- package/dist/render/PuckEditor.client.js +33 -16
- package/dist/render/PuckEditor.client.js.map +1 -1
- package/dist/render/index.d.ts +5 -5
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +5 -6
- package/dist/render/index.js.map +1 -1
- package/dist/styles/puck-dark-mode.css +101 -0
- package/dist/theme/context.d.ts +2 -2
- package/dist/theme/context.d.ts.map +1 -1
- package/dist/theme/context.js +21 -18
- package/dist/theme/context.js.map +1 -1
- package/dist/theme/defaults.d.ts +1 -1
- package/dist/theme/defaults.d.ts.map +1 -1
- package/dist/theme/defaults.js +83 -37
- package/dist/theme/defaults.js.map +1 -1
- package/dist/theme/example.d.ts +1 -1
- package/dist/theme/example.d.ts.map +1 -1
- package/dist/theme/example.js +68 -30
- package/dist/theme/example.js.map +1 -1
- package/dist/theme/index.d.ts +5 -5
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +6 -5
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/types.js +6 -2
- package/dist/theme/types.js.map +1 -1
- package/dist/theme/utils.d.ts +1 -1
- package/dist/theme/utils.d.ts.map +1 -1
- package/dist/theme/utils.js +24 -25
- package/dist/theme/utils.js.map +1 -1
- package/dist/types/index.d.ts +6 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +13 -22
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/migration.d.ts +1 -1
- package/dist/utils/migration.d.ts.map +1 -1
- package/dist/utils/migration.js +43 -49
- package/dist/utils/migration.js.map +1 -1
- package/dist/utils/validation.d.ts +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +36 -43
- package/dist/utils/validation.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -1
- package/dist/version.js.map +1 -1
- package/dist/views/PuckConfigContext.d.ts +1 -1
- package/dist/views/PuckConfigContext.d.ts.map +1 -1
- package/dist/views/PuckConfigContext.js +25 -10
- package/dist/views/PuckConfigContext.js.map +1 -1
- package/dist/views/PuckEditorView.d.ts +1 -1
- package/dist/views/PuckEditorView.d.ts.map +1 -1
- package/dist/views/PuckEditorView.js +106 -38
- package/dist/views/PuckEditorView.js.map +1 -1
- package/dist/views/index.js +2 -2
- package/dist/views/index.js.map +1 -1
- package/package.json +62 -42
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GradientEditor.js","sourceRoot":"","sources":["../../src/fields/GradientEditor.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/fields/GradientEditor.tsx"],"sourcesContent":["'use client'\n\n/**\n * GradientEditor - Component for editing gradient values\n *\n * This component provides:\n * - Type selector (linear/radial toggle)\n * - Angle slider for linear gradients (0-360)\n * - Shape and position selectors for radial gradients\n * - Gradient stops list with color pickers and position sliders\n * - Add/remove stop buttons\n * - Visual gradient preview bar\n */\n\nimport React, { useCallback, memo, useState, type CSSProperties } from 'react'\nimport { Plus, Trash2 } from 'lucide-react'\nimport type { GradientValue, GradientStop, ColorValue } from './shared.js'\nimport { colorValueToCSS } from './shared.js'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface GradientEditorProps {\n value: GradientValue | null\n onChange: (value: GradientValue) => void\n readOnly?: boolean\n}\n\n// =============================================================================\n// Default Values\n// =============================================================================\n\nconst DEFAULT_GRADIENT: GradientValue = {\n type: 'linear',\n angle: 90,\n stops: [\n { color: { hex: '#000000', opacity: 100 }, position: 0 },\n { color: { hex: '#ffffff', opacity: 100 }, position: 100 },\n ],\n radialShape: 'circle',\n radialPosition: 'center',\n}\n\n// =============================================================================\n// Styles\n// =============================================================================\n\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n } as CSSProperties,\n preview: {\n height: '48px',\n borderRadius: '6px',\n border: '1px solid var(--theme-elevation-150)',\n } as CSSProperties,\n row: {\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n gap: '8px',\n } as CSSProperties,\n label: {\n fontSize: '12px',\n color: 'var(--theme-elevation-500)',\n width: '48px',\n flexShrink: 0,\n } as CSSProperties,\n buttonGroup: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: '4px',\n } as CSSProperties,\n button: {\n height: '28px',\n padding: '0 12px',\n fontSize: '12px',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: '4px',\n backgroundColor: 'var(--theme-bg)',\n color: 'var(--theme-elevation-700)',\n cursor: 'pointer',\n } as CSSProperties,\n buttonActive: {\n height: '28px',\n padding: '0 12px',\n fontSize: '12px',\n border: '1px solid var(--theme-elevation-800)',\n borderRadius: '4px',\n backgroundColor: 'var(--theme-elevation-800)',\n color: 'var(--theme-bg)',\n cursor: 'pointer',\n } as CSSProperties,\n slider: {\n flex: 1,\n height: '6px',\n accentColor: 'var(--theme-elevation-800)',\n cursor: 'pointer',\n } as CSSProperties,\n sliderValue: {\n fontSize: '12px',\n fontFamily: 'monospace',\n color: 'var(--theme-elevation-500)',\n width: '40px',\n textAlign: 'right',\n } as CSSProperties,\n select: {\n flex: 1,\n height: '32px',\n padding: '0 8px',\n fontSize: '12px',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: '4px',\n backgroundColor: 'var(--theme-input-bg)',\n color: 'var(--theme-elevation-800)',\n cursor: 'pointer',\n } as CSSProperties,\n stopsHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n } as CSSProperties,\n addButton: {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n height: '24px',\n padding: '0 8px',\n fontSize: '12px',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: '4px',\n backgroundColor: 'var(--theme-bg)',\n color: 'var(--theme-elevation-700)',\n cursor: 'pointer',\n } as CSSProperties,\n stopsList: {\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n } as CSSProperties,\n stopItem: {\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n padding: '8px',\n backgroundColor: 'var(--theme-elevation-50)',\n borderRadius: '6px',\n overflow: 'hidden',\n } as CSSProperties,\n stopRow: {\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n gap: '8px',\n } as CSSProperties,\n colorPicker: {\n width: '28px',\n height: '28px',\n padding: 0,\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: '4px',\n cursor: 'pointer',\n flexShrink: 0,\n } as CSSProperties,\n hexInput: {\n width: '80px',\n minWidth: 0,\n height: '28px',\n padding: '0 6px',\n fontSize: '12px',\n fontFamily: 'monospace',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: '4px',\n backgroundColor: 'var(--theme-input-bg)',\n color: 'var(--theme-elevation-800)',\n } as CSSProperties,\n swatch: {\n width: '28px',\n height: '28px',\n borderRadius: '4px',\n border: '1px solid var(--theme-elevation-150)',\n flexShrink: 0,\n position: 'relative',\n overflow: 'hidden',\n } as CSSProperties,\n checkerboard: {\n position: 'absolute',\n inset: 0,\n backgroundImage: 'linear-gradient(45deg, #e0e0e0 25%, transparent 25%), linear-gradient(-45deg, #e0e0e0 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #e0e0e0 75%), linear-gradient(-45deg, transparent 75%, #e0e0e0 75%)',\n backgroundSize: '8px 8px',\n backgroundPosition: '0 0, 0 4px, 4px -4px, -4px 0px',\n } as CSSProperties,\n colorOverlay: {\n position: 'absolute',\n inset: 0,\n } as CSSProperties,\n spacer: {\n flex: 1,\n minWidth: 0,\n } as CSSProperties,\n deleteButton: {\n padding: '4px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: 'var(--theme-elevation-500)',\n cursor: 'pointer',\n flexShrink: 0,\n } as CSSProperties,\n stopLabel: {\n fontSize: '12px',\n color: 'var(--theme-elevation-500)',\n width: '48px',\n flexShrink: 0,\n } as CSSProperties,\n rangeSlider: {\n flex: 1,\n height: '6px',\n minWidth: 0,\n accentColor: 'var(--theme-elevation-800)',\n cursor: 'pointer',\n } as CSSProperties,\n rangeValue: {\n fontSize: '12px',\n fontFamily: 'monospace',\n color: 'var(--theme-elevation-500)',\n width: '32px',\n textAlign: 'right',\n flexShrink: 0,\n } as CSSProperties,\n}\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Generates CSS gradient string for preview\n */\nfunction getGradientPreviewCSS(gradient: GradientValue): string {\n if (!gradient.stops || gradient.stops.length === 0) {\n return 'linear-gradient(90deg, #ccc 0%, #999 100%)'\n }\n\n const sortedStops = [...gradient.stops].sort((a, b) => a.position - b.position)\n const stopsCSS = sortedStops\n .map((stop) => {\n const color = colorValueToCSS(stop.color) || 'transparent'\n return `${color} ${stop.position}%`\n })\n .join(', ')\n\n if (gradient.type === 'radial') {\n const shape = gradient.radialShape || 'circle'\n const position = gradient.radialPosition || 'center'\n return `radial-gradient(${shape} at ${position}, ${stopsCSS})`\n }\n\n return `linear-gradient(${gradient.angle}deg, ${stopsCSS})`\n}\n\n// =============================================================================\n// GradientStopEditor Component\n// =============================================================================\n\ninterface GradientStopEditorProps {\n stop: GradientStop\n index: number\n canDelete: boolean\n onColorChange: (index: number, color: ColorValue) => void\n onPositionChange: (index: number, position: number) => void\n onDelete: (index: number) => void\n readOnly?: boolean\n}\n\nfunction GradientStopEditorInner({\n stop,\n index,\n canDelete,\n onColorChange,\n onPositionChange,\n onDelete,\n readOnly,\n}: GradientStopEditorProps) {\n const [hexInput, setHexInput] = useState(stop.color.hex)\n\n const handleColorPickerChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newHex = e.target.value\n setHexInput(newHex)\n onColorChange(index, { ...stop.color, hex: newHex })\n },\n [index, stop.color, onColorChange]\n )\n\n const handleHexInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target.value\n setHexInput(input)\n\n // Validate hex format\n const clean = input.replace(/^#/, '')\n if (/^[0-9A-Fa-f]{6}$/.test(clean)) {\n onColorChange(index, { ...stop.color, hex: `#${clean.toLowerCase()}` })\n }\n },\n [index, stop.color, onColorChange]\n )\n\n const handleOpacityChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newOpacity = parseInt(e.target.value, 10)\n onColorChange(index, { ...stop.color, opacity: newOpacity })\n },\n [index, stop.color, onColorChange]\n )\n\n const handlePositionChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newPosition = parseInt(e.target.value, 10)\n onPositionChange(index, Math.max(0, Math.min(100, newPosition)))\n },\n [index, onPositionChange]\n )\n\n const previewColor = colorValueToCSS(stop.color) || 'transparent'\n const opacity = stop.color.opacity ?? 100\n\n return (\n <div style={styles.stopItem as CSSProperties}>\n {/* Row 1: Color picker + hex input + preview swatch + delete */}\n <div style={styles.stopRow}>\n {/* Color picker */}\n <input\n type=\"color\"\n value={stop.color.hex}\n onChange={handleColorPickerChange}\n disabled={readOnly}\n style={styles.colorPicker}\n />\n\n {/* Hex input */}\n <input\n type=\"text\"\n value={hexInput}\n onChange={handleHexInputChange}\n placeholder=\"#000000\"\n disabled={readOnly}\n style={styles.hexInput}\n />\n\n {/* Preview swatch with checkerboard for transparency */}\n <div\n style={styles.swatch as CSSProperties}\n title={`${previewColor} at ${opacity}% opacity`}\n >\n <div style={styles.checkerboard as CSSProperties} />\n <div style={{ ...styles.colorOverlay as CSSProperties, backgroundColor: previewColor }} />\n </div>\n\n {/* Spacer */}\n <div style={styles.spacer} />\n\n {/* Delete button */}\n {canDelete && !readOnly && (\n <button\n type=\"button\"\n onClick={() => onDelete(index)}\n style={styles.deleteButton}\n title=\"Remove stop\"\n >\n <Trash2 style={{ width: '16px', height: '16px' }} />\n </button>\n )}\n </div>\n\n {/* Row 2: Position slider */}\n <div style={styles.stopRow}>\n <label style={styles.stopLabel}>Pos</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={stop.position}\n onChange={handlePositionChange}\n disabled={readOnly}\n style={styles.rangeSlider}\n />\n <span style={styles.rangeValue as CSSProperties}>\n {stop.position}%\n </span>\n </div>\n\n {/* Row 3: Opacity slider */}\n <div style={styles.stopRow}>\n <label style={styles.stopLabel}>Alpha</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={opacity}\n onChange={handleOpacityChange}\n disabled={readOnly}\n style={styles.rangeSlider}\n />\n <span style={styles.rangeValue as CSSProperties}>\n {opacity}%\n </span>\n </div>\n </div>\n )\n}\n\nconst GradientStopEditor = memo(GradientStopEditorInner)\n\n// =============================================================================\n// GradientEditor Component\n// =============================================================================\n\nfunction GradientEditorInner({ value, onChange, readOnly }: GradientEditorProps) {\n const currentValue = value || DEFAULT_GRADIENT\n\n // Handle gradient type change\n const handleTypeChange = useCallback(\n (type: 'linear' | 'radial') => {\n onChange({ ...currentValue, type })\n },\n [currentValue, onChange]\n )\n\n // Handle angle change\n const handleAngleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const angle = parseInt(e.target.value, 10)\n onChange({ ...currentValue, angle })\n },\n [currentValue, onChange]\n )\n\n // Handle radial shape change\n const handleRadialShapeChange = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => {\n onChange({ ...currentValue, radialShape: e.target.value as 'circle' | 'ellipse' })\n },\n [currentValue, onChange]\n )\n\n // Handle radial position change\n const handleRadialPositionChange = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => {\n onChange({ ...currentValue, radialPosition: e.target.value as GradientValue['radialPosition'] })\n },\n [currentValue, onChange]\n )\n\n // Handle stop color change\n const handleStopColorChange = useCallback(\n (index: number, color: ColorValue) => {\n const newStops = [...currentValue.stops]\n newStops[index] = { ...newStops[index], color }\n onChange({ ...currentValue, stops: newStops })\n },\n [currentValue, onChange]\n )\n\n // Handle stop position change\n const handleStopPositionChange = useCallback(\n (index: number, position: number) => {\n const newStops = [...currentValue.stops]\n newStops[index] = { ...newStops[index], position }\n onChange({ ...currentValue, stops: newStops })\n },\n [currentValue, onChange]\n )\n\n // Handle add stop\n const handleAddStop = useCallback(() => {\n const newPosition = currentValue.stops.length > 0 ? 50 : 0\n const newStop: GradientStop = {\n color: { hex: '#888888', opacity: 100 },\n position: newPosition,\n }\n onChange({ ...currentValue, stops: [...currentValue.stops, newStop] })\n }, [currentValue, onChange])\n\n // Handle delete stop\n const handleDeleteStop = useCallback(\n (index: number) => {\n const newStops = currentValue.stops.filter((_, i) => i !== index)\n onChange({ ...currentValue, stops: newStops })\n },\n [currentValue, onChange]\n )\n\n const previewCSS = getGradientPreviewCSS(currentValue)\n const canDeleteStops = currentValue.stops.length > 2\n\n return (\n <div style={styles.container as CSSProperties}>\n {/* Gradient Preview */}\n <div style={{ ...styles.preview, background: previewCSS }} />\n\n {/* Type Selector */}\n <div style={styles.row}>\n <label style={styles.label}>Type</label>\n <div style={styles.buttonGroup}>\n <button\n type=\"button\"\n onClick={() => handleTypeChange('linear')}\n disabled={readOnly}\n style={currentValue.type === 'linear' ? styles.buttonActive : styles.button}\n >\n Linear\n </button>\n <button\n type=\"button\"\n onClick={() => handleTypeChange('radial')}\n disabled={readOnly}\n style={currentValue.type === 'radial' ? styles.buttonActive : styles.button}\n >\n Radial\n </button>\n </div>\n </div>\n\n {/* Linear Options: Angle */}\n {currentValue.type === 'linear' && (\n <div style={styles.row}>\n <label style={styles.label}>Angle</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"360\"\n value={currentValue.angle}\n onChange={handleAngleChange}\n disabled={readOnly}\n style={styles.slider}\n />\n <span style={styles.sliderValue as CSSProperties}>\n {currentValue.angle}deg\n </span>\n </div>\n )}\n\n {/* Radial Options: Shape & Position */}\n {currentValue.type === 'radial' && (\n <>\n <div style={styles.row}>\n <label style={styles.label}>Shape</label>\n <select\n value={currentValue.radialShape || 'circle'}\n onChange={handleRadialShapeChange}\n disabled={readOnly}\n style={styles.select}\n >\n <option value=\"circle\">Circle</option>\n <option value=\"ellipse\">Ellipse</option>\n </select>\n </div>\n <div style={styles.row}>\n <label style={styles.label}>Position</label>\n <select\n value={currentValue.radialPosition || 'center'}\n onChange={handleRadialPositionChange}\n disabled={readOnly}\n style={styles.select}\n >\n <option value=\"center\">Center</option>\n <option value=\"top\">Top</option>\n <option value=\"bottom\">Bottom</option>\n <option value=\"left\">Left</option>\n <option value=\"right\">Right</option>\n </select>\n </div>\n </>\n )}\n\n {/* Color Stops */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <div style={styles.stopsHeader}>\n <label style={styles.label}>Color Stops</label>\n {!readOnly && (\n <button\n type=\"button\"\n onClick={handleAddStop}\n style={styles.addButton}\n >\n <Plus style={{ width: '12px', height: '12px' }} />\n Add Stop\n </button>\n )}\n </div>\n <div style={styles.stopsList as CSSProperties}>\n {currentValue.stops.map((stop, index) => (\n <GradientStopEditor\n key={index}\n stop={stop}\n index={index}\n canDelete={canDeleteStops}\n onColorChange={handleStopColorChange}\n onPositionChange={handleStopPositionChange}\n onDelete={handleDeleteStop}\n readOnly={readOnly}\n />\n ))}\n </div>\n </div>\n </div>\n )\n}\n\nexport const GradientEditor = memo(GradientEditorInner)\n"],"names":["React","useCallback","memo","useState","Plus","Trash2","colorValueToCSS","DEFAULT_GRADIENT","type","angle","stops","color","hex","opacity","position","radialShape","radialPosition","styles","container","display","flexDirection","gap","preview","height","borderRadius","border","row","alignItems","flexWrap","label","fontSize","width","flexShrink","buttonGroup","button","padding","backgroundColor","cursor","buttonActive","slider","flex","accentColor","sliderValue","fontFamily","textAlign","select","stopsHeader","justifyContent","addButton","stopsList","stopItem","overflow","stopRow","colorPicker","hexInput","minWidth","swatch","checkerboard","inset","backgroundImage","backgroundSize","backgroundPosition","colorOverlay","spacer","deleteButton","stopLabel","rangeSlider","rangeValue","getGradientPreviewCSS","gradient","length","sortedStops","sort","a","b","stopsCSS","map","stop","join","shape","GradientStopEditorInner","index","canDelete","onColorChange","onPositionChange","onDelete","readOnly","setHexInput","handleColorPickerChange","e","newHex","target","value","handleHexInputChange","input","clean","replace","test","toLowerCase","handleOpacityChange","newOpacity","parseInt","handlePositionChange","newPosition","Math","max","min","previewColor","div","style","onChange","disabled","placeholder","title","onClick","span","GradientStopEditor","GradientEditorInner","currentValue","handleTypeChange","handleAngleChange","handleRadialShapeChange","handleRadialPositionChange","handleStopColorChange","newStops","handleStopPositionChange","handleAddStop","newStop","handleDeleteStop","filter","_","i","previewCSS","canDeleteStops","background","option","GradientEditor"],"mappings":"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"}
|
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LockedField - Custom Puck field wrapper that prevents accidental edits
|
|
3
|
+
*
|
|
4
|
+
* Wraps a field with a lock/unlock toggle. When locked, the field is read-only.
|
|
5
|
+
* Click the lock icon to toggle editing.
|
|
6
|
+
*
|
|
7
|
+
* Exports:
|
|
8
|
+
* - LockedTextField: A text input with lock/unlock functionality
|
|
9
|
+
* - LockedRadioField: A radio button group with lock/unlock functionality
|
|
10
|
+
* - createLockedTextField: Factory for Puck field configuration
|
|
11
|
+
* - createLockedRadioField: Factory for Puck field configuration
|
|
12
|
+
*/
|
|
13
|
+
import React from 'react';
|
|
1
14
|
import type { CustomField } from '@puckeditor/core';
|
|
2
15
|
interface LockedTextFieldProps {
|
|
3
16
|
value: string;
|
|
@@ -16,8 +29,8 @@ interface LockedRadioFieldProps {
|
|
|
16
29
|
}[];
|
|
17
30
|
warningMessage?: string;
|
|
18
31
|
}
|
|
19
|
-
export declare function LockedTextField({ value, onChange, label, placeholder, warningMessage, }: LockedTextFieldProps):
|
|
20
|
-
export declare function LockedRadioField({ value, onChange, label, options, warningMessage, }: LockedRadioFieldProps):
|
|
32
|
+
export declare function LockedTextField({ value, onChange, label, placeholder, warningMessage, }: LockedTextFieldProps): React.JSX.Element;
|
|
33
|
+
export declare function LockedRadioField({ value, onChange, label, options, warningMessage, }: LockedRadioFieldProps): React.JSX.Element;
|
|
21
34
|
/**
|
|
22
35
|
* Creates a Puck field configuration for a locked text input
|
|
23
36
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LockedField.d.ts","sourceRoot":"","sources":["../../src/fields/LockedField.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LockedField.d.ts","sourceRoot":"","sources":["../../src/fields/LockedField.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAmB,MAAM,OAAO,CAAA;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAOnD,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,UAAU,qBAAqB;IAC7B,KAAK,EAAE,OAAO,CAAA;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,EAAE,CAAA;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAMD,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,KAAK,EACL,WAAW,EACX,cAAc,GACf,EAAE,oBAAoB,qBAuFtB;AAMD,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,QAAQ,EACR,KAAK,EACL,OAAO,EACP,cAAc,GACf,EAAE,qBAAqB,qBA0FvB;AAMD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,GAAG,WAAW,CAAC,MAAM,CAAC,CActB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,EAAE,CAAA;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,GAAG,WAAW,CAAC,OAAO,CAAC,CAcvB;AAMD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAI9C,CAAA;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,OAAO,CAOnD,CAAA"}
|
|
@@ -11,15 +11,37 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
11
11
|
* - LockedRadioField: A radio button group with lock/unlock functionality
|
|
12
12
|
* - createLockedTextField: Factory for Puck field configuration
|
|
13
13
|
* - createLockedRadioField: Factory for Puck field configuration
|
|
14
|
-
*/
|
|
15
|
-
import { useState } from 'react';
|
|
14
|
+
*/ import React, { useState } from 'react';
|
|
16
15
|
import { Lock, Unlock } from 'lucide-react';
|
|
17
16
|
// =============================================================================
|
|
18
17
|
// LockedTextField Component
|
|
19
18
|
// =============================================================================
|
|
20
|
-
export function LockedTextField({ value, onChange, label, placeholder, warningMessage
|
|
19
|
+
export function LockedTextField({ value, onChange, label, placeholder, warningMessage }) {
|
|
21
20
|
const [isLocked, setIsLocked] = useState(true);
|
|
22
|
-
return
|
|
21
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
22
|
+
className: "puck-field",
|
|
23
|
+
children: [
|
|
24
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
25
|
+
className: "puck-field-header",
|
|
26
|
+
style: {
|
|
27
|
+
display: 'flex',
|
|
28
|
+
alignItems: 'center',
|
|
29
|
+
justifyContent: 'space-between',
|
|
30
|
+
marginBottom: '8px'
|
|
31
|
+
},
|
|
32
|
+
children: [
|
|
33
|
+
label && /*#__PURE__*/ _jsx("label", {
|
|
34
|
+
style: {
|
|
35
|
+
fontSize: '14px',
|
|
36
|
+
fontWeight: 500,
|
|
37
|
+
color: 'var(--puck-color-grey-04)'
|
|
38
|
+
},
|
|
39
|
+
children: label
|
|
40
|
+
}),
|
|
41
|
+
/*#__PURE__*/ _jsx("button", {
|
|
42
|
+
type: "button",
|
|
43
|
+
onClick: ()=>setIsLocked(!isLocked),
|
|
44
|
+
style: {
|
|
23
45
|
background: 'none',
|
|
24
46
|
border: 'none',
|
|
25
47
|
padding: '4px',
|
|
@@ -29,8 +51,29 @@ export function LockedTextField({ value, onChange, label, placeholder, warningMe
|
|
|
29
51
|
alignItems: 'center',
|
|
30
52
|
justifyContent: 'center',
|
|
31
53
|
borderRadius: '4px',
|
|
32
|
-
transition: 'all 0.15s ease'
|
|
33
|
-
},
|
|
54
|
+
transition: 'all 0.15s ease'
|
|
55
|
+
},
|
|
56
|
+
title: isLocked ? 'Click to unlock' : 'Click to lock',
|
|
57
|
+
children: isLocked ? /*#__PURE__*/ _jsx(Lock, {
|
|
58
|
+
size: 14
|
|
59
|
+
}) : /*#__PURE__*/ _jsx(Unlock, {
|
|
60
|
+
size: 14
|
|
61
|
+
})
|
|
62
|
+
})
|
|
63
|
+
]
|
|
64
|
+
}),
|
|
65
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
66
|
+
style: {
|
|
67
|
+
position: 'relative'
|
|
68
|
+
},
|
|
69
|
+
children: [
|
|
70
|
+
/*#__PURE__*/ _jsx("input", {
|
|
71
|
+
type: "text",
|
|
72
|
+
value: value || '',
|
|
73
|
+
onChange: (e)=>onChange(e.target.value),
|
|
74
|
+
disabled: isLocked,
|
|
75
|
+
placeholder: placeholder,
|
|
76
|
+
style: {
|
|
34
77
|
width: '100%',
|
|
35
78
|
padding: '8px 12px',
|
|
36
79
|
paddingRight: isLocked ? '32px' : '12px',
|
|
@@ -41,28 +84,72 @@ export function LockedTextField({ value, onChange, label, placeholder, warningMe
|
|
|
41
84
|
color: isLocked ? 'var(--puck-color-grey-05)' : 'var(--puck-color-grey-04)',
|
|
42
85
|
cursor: isLocked ? 'not-allowed' : 'text',
|
|
43
86
|
outline: 'none',
|
|
44
|
-
transition: 'all 0.15s ease'
|
|
45
|
-
}
|
|
87
|
+
transition: 'all 0.15s ease'
|
|
88
|
+
}
|
|
89
|
+
}),
|
|
90
|
+
isLocked && /*#__PURE__*/ _jsx(Lock, {
|
|
91
|
+
size: 14,
|
|
92
|
+
style: {
|
|
46
93
|
position: 'absolute',
|
|
47
94
|
right: '10px',
|
|
48
95
|
top: '50%',
|
|
49
96
|
transform: 'translateY(-50%)',
|
|
50
|
-
color: 'var(--puck-color-grey-07)'
|
|
51
|
-
}
|
|
97
|
+
color: 'var(--puck-color-grey-07)'
|
|
98
|
+
}
|
|
99
|
+
})
|
|
100
|
+
]
|
|
101
|
+
}),
|
|
102
|
+
!isLocked && warningMessage && /*#__PURE__*/ _jsxs("p", {
|
|
103
|
+
style: {
|
|
52
104
|
marginTop: '6px',
|
|
53
105
|
fontSize: '12px',
|
|
54
106
|
color: 'var(--puck-color-grey-05)',
|
|
55
107
|
display: 'flex',
|
|
56
108
|
alignItems: 'center',
|
|
57
|
-
gap: '4px'
|
|
58
|
-
},
|
|
109
|
+
gap: '4px'
|
|
110
|
+
},
|
|
111
|
+
children: [
|
|
112
|
+
/*#__PURE__*/ _jsx("span", {
|
|
113
|
+
style: {
|
|
114
|
+
color: 'var(--puck-color-rose-07)'
|
|
115
|
+
},
|
|
116
|
+
children: "⚠"
|
|
117
|
+
}),
|
|
118
|
+
warningMessage
|
|
119
|
+
]
|
|
120
|
+
})
|
|
121
|
+
]
|
|
122
|
+
});
|
|
59
123
|
}
|
|
60
124
|
// =============================================================================
|
|
61
125
|
// LockedRadioField Component
|
|
62
126
|
// =============================================================================
|
|
63
|
-
export function LockedRadioField({ value, onChange, label, options, warningMessage
|
|
127
|
+
export function LockedRadioField({ value, onChange, label, options, warningMessage }) {
|
|
64
128
|
const [isLocked, setIsLocked] = useState(true);
|
|
65
|
-
return
|
|
129
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
130
|
+
className: "puck-field",
|
|
131
|
+
children: [
|
|
132
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
133
|
+
className: "puck-field-header",
|
|
134
|
+
style: {
|
|
135
|
+
display: 'flex',
|
|
136
|
+
alignItems: 'center',
|
|
137
|
+
justifyContent: 'space-between',
|
|
138
|
+
marginBottom: '8px'
|
|
139
|
+
},
|
|
140
|
+
children: [
|
|
141
|
+
label && /*#__PURE__*/ _jsx("label", {
|
|
142
|
+
style: {
|
|
143
|
+
fontSize: '14px',
|
|
144
|
+
fontWeight: 500,
|
|
145
|
+
color: 'var(--puck-color-grey-04)'
|
|
146
|
+
},
|
|
147
|
+
children: label
|
|
148
|
+
}),
|
|
149
|
+
/*#__PURE__*/ _jsx("button", {
|
|
150
|
+
type: "button",
|
|
151
|
+
onClick: ()=>setIsLocked(!isLocked),
|
|
152
|
+
style: {
|
|
66
153
|
background: 'none',
|
|
67
154
|
border: 'none',
|
|
68
155
|
padding: '4px',
|
|
@@ -72,59 +159,98 @@ export function LockedRadioField({ value, onChange, label, options, warningMessa
|
|
|
72
159
|
alignItems: 'center',
|
|
73
160
|
justifyContent: 'center',
|
|
74
161
|
borderRadius: '4px',
|
|
75
|
-
transition: 'all 0.15s ease'
|
|
76
|
-
},
|
|
162
|
+
transition: 'all 0.15s ease'
|
|
163
|
+
},
|
|
164
|
+
title: isLocked ? 'Click to unlock' : 'Click to lock',
|
|
165
|
+
children: isLocked ? /*#__PURE__*/ _jsx(Lock, {
|
|
166
|
+
size: 14
|
|
167
|
+
}) : /*#__PURE__*/ _jsx(Unlock, {
|
|
168
|
+
size: 14
|
|
169
|
+
})
|
|
170
|
+
})
|
|
171
|
+
]
|
|
172
|
+
}),
|
|
173
|
+
/*#__PURE__*/ _jsx("div", {
|
|
174
|
+
style: {
|
|
77
175
|
display: 'flex',
|
|
78
176
|
border: '1px solid var(--puck-color-grey-09)',
|
|
79
177
|
borderRadius: '6px',
|
|
80
178
|
overflow: 'hidden',
|
|
81
179
|
opacity: isLocked ? 0.6 : 1,
|
|
82
|
-
pointerEvents: isLocked ? 'none' : 'auto'
|
|
83
|
-
},
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
:
|
|
93
|
-
|
|
94
|
-
? 'var(--puck-color-
|
|
95
|
-
: 'var(--puck-color-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
180
|
+
pointerEvents: isLocked ? 'none' : 'auto'
|
|
181
|
+
},
|
|
182
|
+
children: options.map((option, index)=>/*#__PURE__*/ _jsx("button", {
|
|
183
|
+
type: "button",
|
|
184
|
+
onClick: ()=>onChange(option.value),
|
|
185
|
+
disabled: isLocked,
|
|
186
|
+
style: {
|
|
187
|
+
flex: 1,
|
|
188
|
+
padding: '8px 16px',
|
|
189
|
+
fontSize: '14px',
|
|
190
|
+
fontWeight: 500,
|
|
191
|
+
border: 'none',
|
|
192
|
+
borderRight: index < options.length - 1 ? '1px solid var(--puck-color-grey-09)' : 'none',
|
|
193
|
+
background: value === option.value ? 'var(--puck-color-azure-12)' : 'var(--puck-color-white)',
|
|
194
|
+
color: value === option.value ? 'var(--puck-color-azure-04)' : 'var(--puck-color-grey-05)',
|
|
195
|
+
cursor: isLocked ? 'not-allowed' : 'pointer',
|
|
196
|
+
transition: 'all 0.15s ease'
|
|
197
|
+
},
|
|
198
|
+
children: option.label
|
|
199
|
+
}, String(option.value)))
|
|
200
|
+
}),
|
|
201
|
+
!isLocked && warningMessage && /*#__PURE__*/ _jsxs("p", {
|
|
202
|
+
style: {
|
|
99
203
|
marginTop: '6px',
|
|
100
204
|
fontSize: '12px',
|
|
101
205
|
color: 'var(--puck-color-grey-05)',
|
|
102
206
|
display: 'flex',
|
|
103
207
|
alignItems: 'center',
|
|
104
|
-
gap: '4px'
|
|
105
|
-
},
|
|
208
|
+
gap: '4px'
|
|
209
|
+
},
|
|
210
|
+
children: [
|
|
211
|
+
/*#__PURE__*/ _jsx("span", {
|
|
212
|
+
style: {
|
|
213
|
+
color: 'var(--puck-color-rose-07)'
|
|
214
|
+
},
|
|
215
|
+
children: "⚠"
|
|
216
|
+
}),
|
|
217
|
+
warningMessage
|
|
218
|
+
]
|
|
219
|
+
})
|
|
220
|
+
]
|
|
221
|
+
});
|
|
106
222
|
}
|
|
107
223
|
// =============================================================================
|
|
108
224
|
// Field Configuration Factories
|
|
109
225
|
// =============================================================================
|
|
110
226
|
/**
|
|
111
227
|
* Creates a Puck field configuration for a locked text input
|
|
112
|
-
*/
|
|
113
|
-
export function createLockedTextField(config) {
|
|
228
|
+
*/ export function createLockedTextField(config) {
|
|
114
229
|
return {
|
|
115
230
|
type: 'custom',
|
|
116
231
|
label: config.label,
|
|
117
|
-
render: ({ value, onChange })
|
|
232
|
+
render: ({ value, onChange })=>/*#__PURE__*/ _jsx(LockedTextField, {
|
|
233
|
+
value: value,
|
|
234
|
+
onChange: onChange,
|
|
235
|
+
label: config.label,
|
|
236
|
+
placeholder: config.placeholder,
|
|
237
|
+
warningMessage: config.warningMessage
|
|
238
|
+
})
|
|
118
239
|
};
|
|
119
240
|
}
|
|
120
241
|
/**
|
|
121
242
|
* Creates a Puck field configuration for a locked radio button group
|
|
122
|
-
*/
|
|
123
|
-
export function createLockedRadioField(config) {
|
|
243
|
+
*/ export function createLockedRadioField(config) {
|
|
124
244
|
return {
|
|
125
245
|
type: 'custom',
|
|
126
246
|
label: config.label,
|
|
127
|
-
render: ({ value, onChange })
|
|
247
|
+
render: ({ value, onChange })=>/*#__PURE__*/ _jsx(LockedRadioField, {
|
|
248
|
+
value: value,
|
|
249
|
+
onChange: onChange,
|
|
250
|
+
label: config.label,
|
|
251
|
+
options: config.options,
|
|
252
|
+
warningMessage: config.warningMessage
|
|
253
|
+
})
|
|
128
254
|
};
|
|
129
255
|
}
|
|
130
256
|
// =============================================================================
|
|
@@ -141,11 +267,10 @@ export function createLockedRadioField(config) {
|
|
|
141
267
|
* }
|
|
142
268
|
* }
|
|
143
269
|
* ```
|
|
144
|
-
*/
|
|
145
|
-
export const lockedSlugField = createLockedTextField({
|
|
270
|
+
*/ export const lockedSlugField = createLockedTextField({
|
|
146
271
|
label: 'Slug',
|
|
147
272
|
placeholder: 'page-slug',
|
|
148
|
-
warningMessage: 'Changing may break existing links'
|
|
273
|
+
warningMessage: 'Changing may break existing links'
|
|
149
274
|
});
|
|
150
275
|
/**
|
|
151
276
|
* Pre-built locked isHomepage field - prevents accidental homepage changes
|
|
@@ -158,13 +283,19 @@ export const lockedSlugField = createLockedTextField({
|
|
|
158
283
|
* }
|
|
159
284
|
* }
|
|
160
285
|
* ```
|
|
161
|
-
*/
|
|
162
|
-
export const lockedHomepageField = createLockedRadioField({
|
|
286
|
+
*/ export const lockedHomepageField = createLockedRadioField({
|
|
163
287
|
label: 'Homepage',
|
|
164
288
|
options: [
|
|
165
|
-
{
|
|
166
|
-
|
|
289
|
+
{
|
|
290
|
+
label: 'No',
|
|
291
|
+
value: false
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
label: 'Yes',
|
|
295
|
+
value: true
|
|
296
|
+
}
|
|
167
297
|
],
|
|
168
|
-
warningMessage: 'Only one page can be the homepage'
|
|
298
|
+
warningMessage: 'Only one page can be the homepage'
|
|
169
299
|
});
|
|
300
|
+
|
|
170
301
|
//# sourceMappingURL=LockedField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LockedField.js","sourceRoot":"","sources":["../../src/fields/LockedField.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/fields/LockedField.tsx"],"sourcesContent":["'use client'\n\n/**\n * LockedField - Custom Puck field wrapper that prevents accidental edits\n *\n * Wraps a field with a lock/unlock toggle. When locked, the field is read-only.\n * Click the lock icon to toggle editing.\n *\n * Exports:\n * - LockedTextField: A text input with lock/unlock functionality\n * - LockedRadioField: A radio button group with lock/unlock functionality\n * - createLockedTextField: Factory for Puck field configuration\n * - createLockedRadioField: Factory for Puck field configuration\n */\n\nimport React, { useState } from 'react'\nimport type { CustomField } from '@puckeditor/core'\nimport { Lock, Unlock } from 'lucide-react'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface LockedTextFieldProps {\n value: string\n onChange: (value: string) => void\n label?: string\n placeholder?: string\n warningMessage?: string\n}\n\ninterface LockedRadioFieldProps {\n value: boolean\n onChange: (value: boolean) => void\n label?: string\n options: { label: string; value: boolean }[]\n warningMessage?: string\n}\n\n// =============================================================================\n// LockedTextField Component\n// =============================================================================\n\nexport function LockedTextField({\n value,\n onChange,\n label,\n placeholder,\n warningMessage,\n}: LockedTextFieldProps) {\n const [isLocked, setIsLocked] = useState(true)\n\n return (\n <div className=\"puck-field\">\n {/* Field header with label and lock toggle */}\n <div className=\"puck-field-header\" style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: '8px' }}>\n {label && (\n <label style={{ fontSize: '14px', fontWeight: 500, color: 'var(--puck-color-grey-04)' }}>{label}</label>\n )}\n <button\n type=\"button\"\n onClick={() => setIsLocked(!isLocked)}\n style={{\n background: 'none',\n border: 'none',\n padding: '4px',\n cursor: 'pointer',\n color: isLocked ? 'var(--puck-color-grey-05)' : 'var(--puck-color-azure-04)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '4px',\n transition: 'all 0.15s ease',\n }}\n title={isLocked ? 'Click to unlock' : 'Click to lock'}\n >\n {isLocked ? (\n <Lock size={14} />\n ) : (\n <Unlock size={14} />\n )}\n </button>\n </div>\n\n {/* Input field - matches Puck's text input style */}\n <div style={{ position: 'relative' }}>\n <input\n type=\"text\"\n value={value || ''}\n onChange={(e) => onChange(e.target.value)}\n disabled={isLocked}\n placeholder={placeholder}\n style={{\n width: '100%',\n padding: '8px 12px',\n paddingRight: isLocked ? '32px' : '12px',\n fontSize: '14px',\n border: '1px solid var(--puck-color-grey-09)',\n borderRadius: '6px',\n background: isLocked ? 'var(--puck-color-grey-11)' : 'var(--puck-color-white)',\n color: isLocked ? 'var(--puck-color-grey-05)' : 'var(--puck-color-grey-04)',\n cursor: isLocked ? 'not-allowed' : 'text',\n outline: 'none',\n transition: 'all 0.15s ease',\n }}\n />\n {isLocked && (\n <Lock\n size={14}\n style={{\n position: 'absolute',\n right: '10px',\n top: '50%',\n transform: 'translateY(-50%)',\n color: 'var(--puck-color-grey-07)',\n }}\n />\n )}\n </div>\n\n {/* Warning message when unlocked */}\n {!isLocked && warningMessage && (\n <p style={{\n marginTop: '6px',\n fontSize: '12px',\n color: 'var(--puck-color-grey-05)',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}>\n <span style={{ color: 'var(--puck-color-rose-07)' }}>⚠</span>\n {warningMessage}\n </p>\n )}\n </div>\n )\n}\n\n// =============================================================================\n// LockedRadioField Component\n// =============================================================================\n\nexport function LockedRadioField({\n value,\n onChange,\n label,\n options,\n warningMessage,\n}: LockedRadioFieldProps) {\n const [isLocked, setIsLocked] = useState(true)\n\n return (\n <div className=\"puck-field\">\n {/* Field header with label and lock toggle */}\n <div className=\"puck-field-header\" style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: '8px' }}>\n {label && (\n <label style={{ fontSize: '14px', fontWeight: 500, color: 'var(--puck-color-grey-04)' }}>{label}</label>\n )}\n <button\n type=\"button\"\n onClick={() => setIsLocked(!isLocked)}\n style={{\n background: 'none',\n border: 'none',\n padding: '4px',\n cursor: 'pointer',\n color: isLocked ? 'var(--puck-color-grey-05)' : 'var(--puck-color-azure-04)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '4px',\n transition: 'all 0.15s ease',\n }}\n title={isLocked ? 'Click to unlock' : 'Click to lock'}\n >\n {isLocked ? (\n <Lock size={14} />\n ) : (\n <Unlock size={14} />\n )}\n </button>\n </div>\n\n {/* Segmented button group - matches Puck's radio style */}\n <div\n style={{\n display: 'flex',\n border: '1px solid var(--puck-color-grey-09)',\n borderRadius: '6px',\n overflow: 'hidden',\n opacity: isLocked ? 0.6 : 1,\n pointerEvents: isLocked ? 'none' : 'auto',\n }}\n >\n {options.map((option, index) => (\n <button\n key={String(option.value)}\n type=\"button\"\n onClick={() => onChange(option.value)}\n disabled={isLocked}\n style={{\n flex: 1,\n padding: '8px 16px',\n fontSize: '14px',\n fontWeight: 500,\n border: 'none',\n borderRight: index < options.length - 1 ? '1px solid var(--puck-color-grey-09)' : 'none',\n background: value === option.value\n ? 'var(--puck-color-azure-12)'\n : 'var(--puck-color-white)',\n color: value === option.value\n ? 'var(--puck-color-azure-04)'\n : 'var(--puck-color-grey-05)',\n cursor: isLocked ? 'not-allowed' : 'pointer',\n transition: 'all 0.15s ease',\n }}\n >\n {option.label}\n </button>\n ))}\n </div>\n\n {/* Warning message when unlocked */}\n {!isLocked && warningMessage && (\n <p style={{\n marginTop: '6px',\n fontSize: '12px',\n color: 'var(--puck-color-grey-05)',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}>\n <span style={{ color: 'var(--puck-color-rose-07)' }}>⚠</span>\n {warningMessage}\n </p>\n )}\n </div>\n )\n}\n\n// =============================================================================\n// Field Configuration Factories\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for a locked text input\n */\nexport function createLockedTextField(config: {\n label?: string\n placeholder?: string\n warningMessage?: string\n}): CustomField<string> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange }) => (\n <LockedTextField\n value={value}\n onChange={onChange}\n label={config.label}\n placeholder={config.placeholder}\n warningMessage={config.warningMessage}\n />\n ),\n }\n}\n\n/**\n * Creates a Puck field configuration for a locked radio button group\n */\nexport function createLockedRadioField(config: {\n label?: string\n options: { label: string; value: boolean }[]\n warningMessage?: string\n}): CustomField<boolean> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange }) => (\n <LockedRadioField\n value={value}\n onChange={onChange}\n label={config.label}\n options={config.options}\n warningMessage={config.warningMessage}\n />\n ),\n }\n}\n\n// =============================================================================\n// Pre-built Field Definitions\n// =============================================================================\n\n/**\n * Pre-built locked slug field - prevents accidental URL changes\n *\n * Use in Puck root config:\n * ```tsx\n * root: {\n * fields: {\n * slug: lockedSlugField,\n * }\n * }\n * ```\n */\nexport const lockedSlugField: CustomField<string> = createLockedTextField({\n label: 'Slug',\n placeholder: 'page-slug',\n warningMessage: 'Changing may break existing links',\n})\n\n/**\n * Pre-built locked isHomepage field - prevents accidental homepage changes\n *\n * Use in Puck root config:\n * ```tsx\n * root: {\n * fields: {\n * isHomepage: lockedHomepageField,\n * }\n * }\n * ```\n */\nexport const lockedHomepageField: CustomField<boolean> = createLockedRadioField({\n label: 'Homepage',\n options: [\n { label: 'No', value: false },\n { label: 'Yes', value: true },\n ],\n warningMessage: 'Only one page can be the homepage',\n})\n"],"names":["React","useState","Lock","Unlock","LockedTextField","value","onChange","label","placeholder","warningMessage","isLocked","setIsLocked","div","className","style","display","alignItems","justifyContent","marginBottom","fontSize","fontWeight","color","button","type","onClick","background","border","padding","cursor","borderRadius","transition","title","size","position","input","e","target","disabled","width","paddingRight","outline","right","top","transform","p","marginTop","gap","span","LockedRadioField","options","overflow","opacity","pointerEvents","map","option","index","flex","borderRight","length","String","createLockedTextField","config","render","createLockedRadioField","lockedSlugField","lockedHomepageField"],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import React from 'react';
|
|
11
11
|
import type { CustomField } from '@puckeditor/core';
|
|
12
|
-
import type { PaddingValue } from './shared';
|
|
12
|
+
import type { PaddingValue } from './shared.js';
|
|
13
13
|
export type MarginValue = PaddingValue;
|
|
14
14
|
interface MarginFieldProps {
|
|
15
15
|
value: MarginValue | null;
|
|
@@ -18,7 +18,7 @@ interface MarginFieldProps {
|
|
|
18
18
|
readOnly?: boolean;
|
|
19
19
|
showUnits?: boolean;
|
|
20
20
|
}
|
|
21
|
-
declare function MarginFieldInner({ value, onChange, label, readOnly, showUnits, }: MarginFieldProps):
|
|
21
|
+
declare function MarginFieldInner({ value, onChange, label, readOnly, showUnits, }: MarginFieldProps): React.JSX.Element;
|
|
22
22
|
export declare const MarginField: React.MemoExoticComponent<typeof MarginFieldInner>;
|
|
23
23
|
/**
|
|
24
24
|
* Creates a Puck field configuration for margin/spacing
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarginField.d.ts","sourceRoot":"","sources":["../../src/fields/MarginField.tsx"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAgD,MAAM,OAAO,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"MarginField.d.ts","sourceRoot":"","sources":["../../src/fields/MarginField.tsx"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAgD,MAAM,OAAO,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG/C,MAAM,MAAM,WAAW,GAAG,YAAY,CAAA;AAQtC,UAAU,gBAAgB;IACxB,KAAK,EAAE,WAAW,GAAG,IAAI,CAAA;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAA;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAoJD,iBAAS,gBAAgB,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,SAAgB,GACjB,EAAE,gBAAgB,qBAmJlB;AAED,eAAO,MAAM,WAAW,oDAAyB,CAAA;AAMjD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,GAAG,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,CAclC"}
|