@delmaredigital/payload-puck 0.6.13 → 0.6.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/EditWithPuckButton.d.ts +0 -1
- package/dist/admin/EditWithPuckButton.js +0 -2
- package/dist/admin/EditWithPuckCell.d.ts +0 -1
- package/dist/admin/EditWithPuckCell.js +0 -2
- package/dist/admin/PuckEditorView.d.ts +0 -1
- package/dist/admin/PuckEditorView.js +0 -2
- package/dist/admin/client.d.ts +0 -1
- package/dist/admin/client.js +0 -2
- package/dist/admin/generateAdminComponents.d.ts +0 -1
- package/dist/admin/generateAdminComponents.js +0 -2
- package/dist/admin/index.d.ts +0 -1
- package/dist/admin/index.js +0 -2
- package/dist/ai/collections/AiContext.d.ts +0 -1
- package/dist/ai/collections/AiContext.js +0 -2
- package/dist/ai/collections/AiPrompts.d.ts +0 -1
- package/dist/ai/collections/AiPrompts.js +0 -2
- package/dist/ai/createAiApiRoutes.d.ts +0 -1
- package/dist/ai/createAiApiRoutes.js +0 -2
- package/dist/ai/createAiGenerate.d.ts +0 -1
- package/dist/ai/createAiGenerate.js +0 -2
- package/dist/ai/createAiPlugin.d.ts +0 -1
- package/dist/ai/createAiPlugin.js +0 -2
- package/dist/ai/hooks/useAiContext.d.ts +0 -1
- package/dist/ai/hooks/useAiContext.js +0 -2
- package/dist/ai/hooks/useAiPrompts.d.ts +0 -1
- package/dist/ai/hooks/useAiPrompts.js +0 -2
- package/dist/ai/index.d.ts +0 -1
- package/dist/ai/index.js +0 -2
- package/dist/ai/plugins/ContextEditorPanel.d.ts +0 -1
- package/dist/ai/plugins/ContextEditorPanel.js +0 -2
- package/dist/ai/plugins/PromptEditorPanel.d.ts +0 -1
- package/dist/ai/plugins/PromptEditorPanel.js +0 -2
- package/dist/ai/plugins/contextEditorPlugin.d.ts +0 -1
- package/dist/ai/plugins/contextEditorPlugin.js +0 -2
- package/dist/ai/plugins/promptApiRoutes.d.ts +0 -1
- package/dist/ai/plugins/promptApiRoutes.js +0 -2
- package/dist/ai/plugins/promptEditorPlugin.d.ts +0 -1
- package/dist/ai/plugins/promptEditorPlugin.js +0 -2
- package/dist/ai/presets/componentAiDefaults.d.ts +0 -1
- package/dist/ai/presets/componentAiDefaults.js +0 -2
- package/dist/ai/presets/index.d.ts +0 -1
- package/dist/ai/presets/index.js +0 -2
- package/dist/ai/presets/instructions/interactive.d.ts +0 -1
- package/dist/ai/presets/instructions/interactive.js +0 -2
- package/dist/ai/presets/instructions/layout.d.ts +0 -1
- package/dist/ai/presets/instructions/layout.js +0 -2
- package/dist/ai/presets/instructions/media.d.ts +0 -1
- package/dist/ai/presets/instructions/media.js +0 -2
- package/dist/ai/presets/instructions/pagePatterns.d.ts +0 -1
- package/dist/ai/presets/instructions/pagePatterns.js +0 -2
- package/dist/ai/presets/instructions/schemas.d.ts +0 -1
- package/dist/ai/presets/instructions/schemas.js +0 -2
- package/dist/ai/presets/instructions/typography.d.ts +0 -1
- package/dist/ai/presets/instructions/typography.js +0 -2
- package/dist/ai/tools/index.d.ts +0 -1
- package/dist/ai/tools/index.js +0 -2
- package/dist/ai/types.d.ts +0 -1
- package/dist/ai/types.js +0 -2
- package/dist/ai/utils/injectAiConfig.d.ts +0 -1
- package/dist/ai/utils/injectAiConfig.js +0 -2
- package/dist/api/createPuckApiRoutes.d.ts +0 -1
- package/dist/api/createPuckApiRoutes.js +0 -2
- package/dist/api/createPuckApiRoutesVersions.d.ts +0 -1
- package/dist/api/createPuckApiRoutesVersions.js +0 -2
- package/dist/api/createPuckApiRoutesWithId.d.ts +0 -1
- package/dist/api/createPuckApiRoutesWithId.js +0 -2
- package/dist/api/index.d.ts +0 -1
- package/dist/api/index.js +0 -2
- package/dist/api/payload-config.d.js +1 -2
- package/dist/api/types.d.ts +0 -1
- package/dist/api/types.js +0 -2
- package/dist/api/utils/mapRootProps.d.ts +0 -1
- package/dist/api/utils/mapRootProps.js +0 -2
- package/dist/collections/Templates.d.ts +0 -1
- package/dist/collections/Templates.js +0 -2
- package/dist/components/AccordionClient.d.ts +0 -1
- package/dist/components/AccordionClient.js +0 -2
- package/dist/components/AnimatedWrapper.d.ts +0 -1
- package/dist/components/AnimatedWrapper.js +0 -2
- package/dist/components/exports.d.ts +0 -1
- package/dist/components/exports.js +0 -2
- package/dist/components/index.d.ts +0 -1
- package/dist/components/index.js +0 -2
- package/dist/components/interactive/Accordion.d.ts +0 -1
- package/dist/components/interactive/Accordion.js +0 -2
- package/dist/components/interactive/Accordion.server.d.ts +0 -1
- package/dist/components/interactive/Accordion.server.js +0 -2
- package/dist/components/interactive/Button.d.ts +0 -1
- package/dist/components/interactive/Button.js +0 -2
- package/dist/components/interactive/Button.server.d.ts +0 -1
- package/dist/components/interactive/Button.server.js +0 -2
- package/dist/components/interactive/Card.d.ts +0 -1
- package/dist/components/interactive/Card.js +0 -2
- package/dist/components/interactive/Card.server.d.ts +0 -1
- package/dist/components/interactive/Card.server.js +0 -2
- package/dist/components/interactive/Divider.d.ts +0 -1
- package/dist/components/interactive/Divider.js +0 -2
- package/dist/components/interactive/Divider.server.d.ts +0 -1
- package/dist/components/interactive/Divider.server.js +0 -2
- package/dist/components/interactive/index.d.ts +0 -1
- package/dist/components/interactive/index.js +0 -2
- package/dist/components/layout/Container.d.ts +0 -1
- package/dist/components/layout/Container.js +0 -2
- package/dist/components/layout/Container.server.d.ts +0 -1
- package/dist/components/layout/Container.server.js +0 -2
- package/dist/components/layout/Flex.d.ts +0 -1
- package/dist/components/layout/Flex.js +0 -2
- package/dist/components/layout/Flex.server.d.ts +0 -1
- package/dist/components/layout/Flex.server.js +0 -2
- package/dist/components/layout/Grid.d.ts +0 -1
- package/dist/components/layout/Grid.js +0 -2
- package/dist/components/layout/Grid.server.d.ts +0 -1
- package/dist/components/layout/Grid.server.js +0 -2
- package/dist/components/layout/Section.d.ts +0 -1
- package/dist/components/layout/Section.js +0 -2
- package/dist/components/layout/Section.server.d.ts +0 -1
- package/dist/components/layout/Section.server.js +0 -2
- package/dist/components/layout/Spacer.d.ts +0 -1
- package/dist/components/layout/Spacer.js +0 -2
- package/dist/components/layout/Spacer.server.d.ts +0 -1
- package/dist/components/layout/Spacer.server.js +0 -2
- package/dist/components/layout/Template.d.ts +0 -1
- package/dist/components/layout/Template.js +0 -2
- package/dist/components/layout/Template.server.d.ts +0 -1
- package/dist/components/layout/Template.server.js +0 -2
- package/dist/components/layout/index.d.ts +0 -1
- package/dist/components/layout/index.js +0 -2
- package/dist/components/media/Image.d.ts +0 -1
- package/dist/components/media/Image.js +0 -2
- package/dist/components/media/Image.server.d.ts +0 -1
- package/dist/components/media/Image.server.js +0 -2
- package/dist/components/media/index.d.ts +0 -1
- package/dist/components/media/index.js +0 -2
- package/dist/components/typography/Heading.d.ts +0 -1
- package/dist/components/typography/Heading.js +0 -2
- package/dist/components/typography/Heading.server.d.ts +0 -1
- package/dist/components/typography/Heading.server.js +0 -2
- package/dist/components/typography/RichText.editor.d.ts +0 -1
- package/dist/components/typography/RichText.editor.js +0 -2
- package/dist/components/typography/RichText.server.d.ts +0 -1
- package/dist/components/typography/RichText.server.js +0 -2
- package/dist/components/typography/Text.d.ts +0 -1
- package/dist/components/typography/Text.js +0 -2
- package/dist/components/typography/Text.server.d.ts +0 -1
- package/dist/components/typography/Text.server.js +0 -2
- package/dist/components/typography/index.d.ts +0 -1
- package/dist/components/typography/index.js +0 -2
- package/dist/config/config.editor.d.ts +0 -1
- package/dist/config/config.editor.js +0 -2
- package/dist/config/index.d.ts +0 -1
- package/dist/config/index.js +0 -2
- package/dist/config/merge.d.ts +0 -1
- package/dist/config/merge.js +0 -2
- package/dist/config/presets.d.ts +0 -1
- package/dist/config/presets.js +0 -2
- package/dist/config/types.d.ts +0 -1
- package/dist/config/types.js +0 -2
- package/dist/editor/PuckEditor.d.ts +0 -1
- package/dist/editor/PuckEditor.js +0 -2
- package/dist/editor/PuckEditorImpl.client.d.ts +0 -1
- package/dist/editor/PuckEditorImpl.client.js +0 -2
- package/dist/editor/components/DarkModeStyles.d.ts +0 -1
- package/dist/editor/components/DarkModeStyles.js +0 -2
- package/dist/editor/components/HeaderActions.d.ts +0 -1
- package/dist/editor/components/HeaderActions.js +0 -2
- package/dist/editor/components/IframeWrapper.d.ts +0 -1
- package/dist/editor/components/IframeWrapper.js +0 -2
- package/dist/editor/components/LoadingState.d.ts +0 -1
- package/dist/editor/components/LoadingState.js +0 -2
- package/dist/editor/components/PreviewModal.d.ts +0 -1
- package/dist/editor/components/PreviewModal.js +0 -2
- package/dist/editor/components/PreviewModeToggle.d.ts +0 -1
- package/dist/editor/components/PreviewModeToggle.js +0 -2
- package/dist/editor/components/VersionHistory.d.ts +0 -1
- package/dist/editor/components/VersionHistory.js +0 -2
- package/dist/editor/hooks/useDarkMode.d.ts +0 -1
- package/dist/editor/hooks/useDarkMode.js +0 -2
- package/dist/editor/hooks/useUnsavedChanges.d.ts +0 -1
- package/dist/editor/hooks/useUnsavedChanges.js +0 -2
- package/dist/editor/index.d.ts +0 -1
- package/dist/editor/index.js +0 -2
- package/dist/editor/plugins/VersionHistoryPanel.d.ts +0 -1
- package/dist/editor/plugins/VersionHistoryPanel.js +0 -2
- package/dist/editor/plugins/index.d.ts +0 -1
- package/dist/editor/plugins/index.js +0 -2
- package/dist/editor/plugins/versionHistoryPlugin.d.ts +0 -1
- package/dist/editor/plugins/versionHistoryPlugin.js +0 -2
- package/dist/editor/utils/detectPageTree.d.ts +0 -1
- package/dist/editor/utils/detectPageTree.js +0 -2
- package/dist/editor/utils/index.d.ts +0 -1
- package/dist/editor/utils/index.js +0 -2
- package/dist/editor/utils/injectPageTreeFields.d.ts +0 -1
- package/dist/editor/utils/injectPageTreeFields.js +0 -2
- package/dist/endpoints/ai.d.ts +0 -1
- package/dist/endpoints/ai.js +0 -2
- package/dist/endpoints/context.d.ts +0 -1
- package/dist/endpoints/context.js +0 -2
- package/dist/endpoints/index.d.ts +0 -1
- package/dist/endpoints/index.js +0 -2
- package/dist/endpoints/postcss.d.js +1 -2
- package/dist/endpoints/prompts.d.ts +0 -1
- package/dist/endpoints/prompts.js +0 -2
- package/dist/endpoints/styles.d.ts +0 -1
- package/dist/endpoints/styles.js +0 -2
- package/dist/exports/client.d.ts +0 -1
- package/dist/exports/client.js +0 -2
- package/dist/exports/rsc.d.ts +0 -1
- package/dist/exports/rsc.js +0 -2
- package/dist/fields/AlignmentField.d.ts +0 -1
- package/dist/fields/AlignmentField.js +0 -2
- package/dist/fields/AnimationField.d.ts +0 -1
- package/dist/fields/AnimationField.js +0 -2
- package/dist/fields/BackgroundField.d.ts +0 -1
- package/dist/fields/BackgroundField.js +0 -2
- package/dist/fields/BorderField.d.ts +0 -1
- package/dist/fields/BorderField.js +0 -2
- package/dist/fields/ColorPickerField.d.ts +0 -1
- package/dist/fields/ColorPickerField.js +0 -2
- package/dist/fields/ContentAlignmentField.d.ts +0 -1
- package/dist/fields/ContentAlignmentField.js +0 -2
- package/dist/fields/DimensionsField.d.ts +0 -1
- package/dist/fields/DimensionsField.js +0 -2
- package/dist/fields/FlexAlignmentField.d.ts +0 -1
- package/dist/fields/FlexAlignmentField.js +0 -2
- package/dist/fields/FolderPickerField.d.ts +0 -1
- package/dist/fields/FolderPickerField.js +0 -2
- package/dist/fields/GradientEditor.d.ts +0 -1
- package/dist/fields/GradientEditor.js +0 -2
- package/dist/fields/LockedField.d.ts +0 -1
- package/dist/fields/LockedField.js +0 -2
- package/dist/fields/MarginField.d.ts +0 -1
- package/dist/fields/MarginField.js +0 -2
- package/dist/fields/MediaField.d.ts +0 -1
- package/dist/fields/MediaField.js +0 -2
- package/dist/fields/PaddingField.d.ts +0 -1
- package/dist/fields/PaddingField.js +0 -2
- package/dist/fields/PageSegmentField.d.ts +0 -1
- package/dist/fields/PageSegmentField.js +0 -2
- package/dist/fields/ResetField.d.ts +0 -1
- package/dist/fields/ResetField.js +0 -2
- package/dist/fields/ResponsiveField.d.ts +0 -1
- package/dist/fields/ResponsiveField.js +0 -2
- package/dist/fields/ResponsiveVisibilityField.d.ts +0 -1
- package/dist/fields/ResponsiveVisibilityField.js +0 -2
- package/dist/fields/SizeField.d.ts +0 -1
- package/dist/fields/SizeField.js +0 -2
- package/dist/fields/SlugPreviewField.d.ts +0 -1
- package/dist/fields/SlugPreviewField.js +0 -2
- package/dist/fields/TemplateField.d.ts +0 -1
- package/dist/fields/TemplateField.js +0 -2
- package/dist/fields/TransformField.d.ts +0 -1
- package/dist/fields/TransformField.js +0 -2
- package/dist/fields/VerticalAlignmentField.d.ts +0 -1
- package/dist/fields/VerticalAlignmentField.js +0 -2
- package/dist/fields/WidthField.d.ts +0 -1
- package/dist/fields/WidthField.js +0 -2
- package/dist/fields/index.d.ts +0 -1
- package/dist/fields/index.js +0 -2
- package/dist/fields/richtext/controls/ColorPickerControl.d.ts +0 -1
- package/dist/fields/richtext/controls/ColorPickerControl.js +0 -2
- package/dist/fields/richtext/controls/DropdownPortal.d.ts +0 -1
- package/dist/fields/richtext/controls/DropdownPortal.js +0 -2
- package/dist/fields/richtext/controls/FontSizeControl.d.ts +0 -1
- package/dist/fields/richtext/controls/FontSizeControl.js +0 -2
- package/dist/fields/richtext/controls/HighlightControl.d.ts +0 -1
- package/dist/fields/richtext/controls/HighlightControl.js +0 -2
- package/dist/fields/richtext/controls/index.d.ts +0 -1
- package/dist/fields/richtext/controls/index.js +0 -2
- package/dist/fields/richtext/controls/shared.d.ts +0 -1
- package/dist/fields/richtext/controls/shared.js +0 -2
- package/dist/fields/richtext/createRichTextField.d.ts +0 -1
- package/dist/fields/richtext/createRichTextField.js +0 -2
- package/dist/fields/richtext/extensions/FontSize.d.ts +0 -1
- package/dist/fields/richtext/extensions/FontSize.js +0 -2
- package/dist/fields/richtext/extensions/index.d.ts +0 -1
- package/dist/fields/richtext/extensions/index.js +0 -2
- package/dist/fields/richtext/index.d.ts +0 -1
- package/dist/fields/richtext/index.js +0 -2
- package/dist/fields/shared.d.ts +0 -1
- package/dist/fields/shared.js +0 -2
- package/dist/hooks/index.d.ts +0 -1
- package/dist/hooks/index.js +0 -2
- package/dist/hooks/useResponsiveStyles.d.ts +0 -1
- package/dist/hooks/useResponsiveStyles.js +0 -2
- package/dist/hooks/useScrollAnimation.d.ts +0 -1
- package/dist/hooks/useScrollAnimation.js +0 -2
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -2
- package/dist/layouts/LayoutWrapper.d.ts +0 -1
- package/dist/layouts/LayoutWrapper.js +0 -2
- package/dist/layouts/defaults.d.ts +0 -1
- package/dist/layouts/defaults.js +0 -2
- package/dist/layouts/index.d.ts +0 -1
- package/dist/layouts/index.js +0 -2
- package/dist/layouts/types.d.ts +0 -1
- package/dist/layouts/types.js +0 -2
- package/dist/layouts/utils.d.ts +0 -1
- package/dist/layouts/utils.js +0 -2
- package/dist/next/index.d.ts +0 -1
- package/dist/next/index.js +0 -2
- package/dist/plugin/collections/Pages.d.ts +0 -1
- package/dist/plugin/collections/Pages.js +0 -2
- package/dist/plugin/fields/index.d.ts +0 -1
- package/dist/plugin/fields/index.js +0 -2
- package/dist/plugin/fields/types.d.ts +0 -1
- package/dist/plugin/fields/types.js +0 -2
- package/dist/plugin/hooks/index.d.ts +0 -1
- package/dist/plugin/hooks/index.js +0 -2
- package/dist/plugin/hooks/isHomepageUnique.d.ts +0 -1
- package/dist/plugin/hooks/isHomepageUnique.js +0 -2
- package/dist/plugin/index.d.ts +0 -1
- package/dist/plugin/index.js +0 -2
- package/dist/render/HybridPageRenderer.d.ts +0 -1
- package/dist/render/HybridPageRenderer.js +0 -2
- package/dist/render/PageRenderer.d.ts +0 -1
- package/dist/render/PageRenderer.js +0 -2
- package/dist/render/PuckEditor.client.d.ts +0 -1
- package/dist/render/PuckEditor.client.js +0 -2
- package/dist/render/index.d.ts +0 -1
- package/dist/render/index.js +0 -2
- package/dist/theme/context.d.ts +0 -1
- package/dist/theme/context.js +0 -2
- package/dist/theme/defaults.d.ts +0 -1
- package/dist/theme/defaults.js +0 -2
- package/dist/theme/example.d.ts +0 -1
- package/dist/theme/example.js +0 -2
- package/dist/theme/index.d.ts +0 -1
- package/dist/theme/index.js +0 -2
- package/dist/theme/types.d.ts +0 -1
- package/dist/theme/types.js +0 -2
- package/dist/theme/utils.d.ts +0 -1
- package/dist/theme/utils.js +0 -2
- package/dist/types/index.d.ts +0 -1
- package/dist/types/index.js +0 -2
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.js +0 -2
- package/dist/utils/migration.d.ts +0 -1
- package/dist/utils/migration.js +0 -2
- package/dist/utils/validation.d.ts +0 -1
- package/dist/utils/validation.js +0 -2
- package/dist/version.d.ts +1 -2
- package/dist/version.js +1 -3
- package/dist/views/PuckConfigContext.d.ts +0 -1
- package/dist/views/PuckConfigContext.js +0 -2
- package/dist/views/PuckEditorView.d.ts +0 -1
- package/dist/views/PuckEditorView.js +0 -2
- package/dist/views/index.d.ts +0 -1
- package/dist/views/index.js +0 -2
- package/package.json +1 -1
- package/dist/admin/EditWithPuckButton.d.ts.map +0 -1
- package/dist/admin/EditWithPuckButton.js.map +0 -1
- package/dist/admin/EditWithPuckCell.d.ts.map +0 -1
- package/dist/admin/EditWithPuckCell.js.map +0 -1
- package/dist/admin/PuckEditorView.d.ts.map +0 -1
- package/dist/admin/PuckEditorView.js.map +0 -1
- package/dist/admin/client.d.ts.map +0 -1
- package/dist/admin/client.js.map +0 -1
- package/dist/admin/generateAdminComponents.d.ts.map +0 -1
- package/dist/admin/generateAdminComponents.js.map +0 -1
- package/dist/admin/index.d.ts.map +0 -1
- package/dist/admin/index.js.map +0 -1
- package/dist/ai/collections/AiContext.d.ts.map +0 -1
- package/dist/ai/collections/AiContext.js.map +0 -1
- package/dist/ai/collections/AiPrompts.d.ts.map +0 -1
- package/dist/ai/collections/AiPrompts.js.map +0 -1
- package/dist/ai/createAiApiRoutes.d.ts.map +0 -1
- package/dist/ai/createAiApiRoutes.js.map +0 -1
- package/dist/ai/createAiGenerate.d.ts.map +0 -1
- package/dist/ai/createAiGenerate.js.map +0 -1
- package/dist/ai/createAiPlugin.d.ts.map +0 -1
- package/dist/ai/createAiPlugin.js.map +0 -1
- package/dist/ai/hooks/useAiContext.d.ts.map +0 -1
- package/dist/ai/hooks/useAiContext.js.map +0 -1
- package/dist/ai/hooks/useAiPrompts.d.ts.map +0 -1
- package/dist/ai/hooks/useAiPrompts.js.map +0 -1
- package/dist/ai/index.d.ts.map +0 -1
- package/dist/ai/index.js.map +0 -1
- package/dist/ai/plugins/ContextEditorPanel.d.ts.map +0 -1
- package/dist/ai/plugins/ContextEditorPanel.js.map +0 -1
- package/dist/ai/plugins/PromptEditorPanel.d.ts.map +0 -1
- package/dist/ai/plugins/PromptEditorPanel.js.map +0 -1
- package/dist/ai/plugins/contextEditorPlugin.d.ts.map +0 -1
- package/dist/ai/plugins/contextEditorPlugin.js.map +0 -1
- package/dist/ai/plugins/promptApiRoutes.d.ts.map +0 -1
- package/dist/ai/plugins/promptApiRoutes.js.map +0 -1
- package/dist/ai/plugins/promptEditorPlugin.d.ts.map +0 -1
- package/dist/ai/plugins/promptEditorPlugin.js.map +0 -1
- package/dist/ai/presets/componentAiDefaults.d.ts.map +0 -1
- package/dist/ai/presets/componentAiDefaults.js.map +0 -1
- package/dist/ai/presets/index.d.ts.map +0 -1
- package/dist/ai/presets/index.js.map +0 -1
- package/dist/ai/presets/instructions/interactive.d.ts.map +0 -1
- package/dist/ai/presets/instructions/interactive.js.map +0 -1
- package/dist/ai/presets/instructions/layout.d.ts.map +0 -1
- package/dist/ai/presets/instructions/layout.js.map +0 -1
- package/dist/ai/presets/instructions/media.d.ts.map +0 -1
- package/dist/ai/presets/instructions/media.js.map +0 -1
- package/dist/ai/presets/instructions/pagePatterns.d.ts.map +0 -1
- package/dist/ai/presets/instructions/pagePatterns.js.map +0 -1
- package/dist/ai/presets/instructions/schemas.d.ts.map +0 -1
- package/dist/ai/presets/instructions/schemas.js.map +0 -1
- package/dist/ai/presets/instructions/typography.d.ts.map +0 -1
- package/dist/ai/presets/instructions/typography.js.map +0 -1
- package/dist/ai/tools/index.d.ts.map +0 -1
- package/dist/ai/tools/index.js.map +0 -1
- package/dist/ai/types.d.ts.map +0 -1
- package/dist/ai/types.js.map +0 -1
- package/dist/ai/utils/injectAiConfig.d.ts.map +0 -1
- package/dist/ai/utils/injectAiConfig.js.map +0 -1
- package/dist/api/createPuckApiRoutes.d.ts.map +0 -1
- package/dist/api/createPuckApiRoutes.js.map +0 -1
- package/dist/api/createPuckApiRoutesVersions.d.ts.map +0 -1
- package/dist/api/createPuckApiRoutesVersions.js.map +0 -1
- package/dist/api/createPuckApiRoutesWithId.d.ts.map +0 -1
- package/dist/api/createPuckApiRoutesWithId.js.map +0 -1
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/index.js.map +0 -1
- package/dist/api/payload-config.d.js.map +0 -1
- package/dist/api/types.d.ts.map +0 -1
- package/dist/api/types.js.map +0 -1
- package/dist/api/utils/mapRootProps.d.ts.map +0 -1
- package/dist/api/utils/mapRootProps.js.map +0 -1
- package/dist/collections/Templates.d.ts.map +0 -1
- package/dist/collections/Templates.js.map +0 -1
- package/dist/components/AccordionClient.d.ts.map +0 -1
- package/dist/components/AccordionClient.js.map +0 -1
- package/dist/components/AnimatedWrapper.d.ts.map +0 -1
- package/dist/components/AnimatedWrapper.js.map +0 -1
- package/dist/components/exports.d.ts.map +0 -1
- package/dist/components/exports.js.map +0 -1
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/components/interactive/Accordion.d.ts.map +0 -1
- package/dist/components/interactive/Accordion.js.map +0 -1
- package/dist/components/interactive/Accordion.server.d.ts.map +0 -1
- package/dist/components/interactive/Accordion.server.js.map +0 -1
- package/dist/components/interactive/Button.d.ts.map +0 -1
- package/dist/components/interactive/Button.js.map +0 -1
- package/dist/components/interactive/Button.server.d.ts.map +0 -1
- package/dist/components/interactive/Button.server.js.map +0 -1
- package/dist/components/interactive/Card.d.ts.map +0 -1
- package/dist/components/interactive/Card.js.map +0 -1
- package/dist/components/interactive/Card.server.d.ts.map +0 -1
- package/dist/components/interactive/Card.server.js.map +0 -1
- package/dist/components/interactive/Divider.d.ts.map +0 -1
- package/dist/components/interactive/Divider.js.map +0 -1
- package/dist/components/interactive/Divider.server.d.ts.map +0 -1
- package/dist/components/interactive/Divider.server.js.map +0 -1
- package/dist/components/interactive/index.d.ts.map +0 -1
- package/dist/components/interactive/index.js.map +0 -1
- package/dist/components/layout/Container.d.ts.map +0 -1
- package/dist/components/layout/Container.js.map +0 -1
- package/dist/components/layout/Container.server.d.ts.map +0 -1
- package/dist/components/layout/Container.server.js.map +0 -1
- package/dist/components/layout/Flex.d.ts.map +0 -1
- package/dist/components/layout/Flex.js.map +0 -1
- package/dist/components/layout/Flex.server.d.ts.map +0 -1
- package/dist/components/layout/Flex.server.js.map +0 -1
- package/dist/components/layout/Grid.d.ts.map +0 -1
- package/dist/components/layout/Grid.js.map +0 -1
- package/dist/components/layout/Grid.server.d.ts.map +0 -1
- package/dist/components/layout/Grid.server.js.map +0 -1
- package/dist/components/layout/Section.d.ts.map +0 -1
- package/dist/components/layout/Section.js.map +0 -1
- package/dist/components/layout/Section.server.d.ts.map +0 -1
- package/dist/components/layout/Section.server.js.map +0 -1
- package/dist/components/layout/Spacer.d.ts.map +0 -1
- package/dist/components/layout/Spacer.js.map +0 -1
- package/dist/components/layout/Spacer.server.d.ts.map +0 -1
- package/dist/components/layout/Spacer.server.js.map +0 -1
- package/dist/components/layout/Template.d.ts.map +0 -1
- package/dist/components/layout/Template.js.map +0 -1
- package/dist/components/layout/Template.server.d.ts.map +0 -1
- package/dist/components/layout/Template.server.js.map +0 -1
- package/dist/components/layout/index.d.ts.map +0 -1
- package/dist/components/layout/index.js.map +0 -1
- package/dist/components/media/Image.d.ts.map +0 -1
- package/dist/components/media/Image.js.map +0 -1
- package/dist/components/media/Image.server.d.ts.map +0 -1
- package/dist/components/media/Image.server.js.map +0 -1
- package/dist/components/media/index.d.ts.map +0 -1
- package/dist/components/media/index.js.map +0 -1
- package/dist/components/typography/Heading.d.ts.map +0 -1
- package/dist/components/typography/Heading.js.map +0 -1
- package/dist/components/typography/Heading.server.d.ts.map +0 -1
- package/dist/components/typography/Heading.server.js.map +0 -1
- package/dist/components/typography/RichText.editor.d.ts.map +0 -1
- package/dist/components/typography/RichText.editor.js.map +0 -1
- package/dist/components/typography/RichText.server.d.ts.map +0 -1
- package/dist/components/typography/RichText.server.js.map +0 -1
- package/dist/components/typography/Text.d.ts.map +0 -1
- package/dist/components/typography/Text.js.map +0 -1
- package/dist/components/typography/Text.server.d.ts.map +0 -1
- package/dist/components/typography/Text.server.js.map +0 -1
- package/dist/components/typography/index.d.ts.map +0 -1
- package/dist/components/typography/index.js.map +0 -1
- package/dist/config/config.editor.d.ts.map +0 -1
- package/dist/config/config.editor.js.map +0 -1
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js.map +0 -1
- package/dist/config/merge.d.ts.map +0 -1
- package/dist/config/merge.js.map +0 -1
- package/dist/config/presets.d.ts.map +0 -1
- package/dist/config/presets.js.map +0 -1
- package/dist/config/types.d.ts.map +0 -1
- package/dist/config/types.js.map +0 -1
- package/dist/editor/PuckEditor.d.ts.map +0 -1
- package/dist/editor/PuckEditor.js.map +0 -1
- package/dist/editor/PuckEditorImpl.client.d.ts.map +0 -1
- package/dist/editor/PuckEditorImpl.client.js.map +0 -1
- package/dist/editor/components/DarkModeStyles.d.ts.map +0 -1
- package/dist/editor/components/DarkModeStyles.js.map +0 -1
- package/dist/editor/components/HeaderActions.d.ts.map +0 -1
- package/dist/editor/components/HeaderActions.js.map +0 -1
- package/dist/editor/components/IframeWrapper.d.ts.map +0 -1
- package/dist/editor/components/IframeWrapper.js.map +0 -1
- package/dist/editor/components/LoadingState.d.ts.map +0 -1
- package/dist/editor/components/LoadingState.js.map +0 -1
- package/dist/editor/components/PreviewModal.d.ts.map +0 -1
- package/dist/editor/components/PreviewModal.js.map +0 -1
- package/dist/editor/components/PreviewModeToggle.d.ts.map +0 -1
- package/dist/editor/components/PreviewModeToggle.js.map +0 -1
- package/dist/editor/components/VersionHistory.d.ts.map +0 -1
- package/dist/editor/components/VersionHistory.js.map +0 -1
- package/dist/editor/hooks/useDarkMode.d.ts.map +0 -1
- package/dist/editor/hooks/useDarkMode.js.map +0 -1
- package/dist/editor/hooks/useUnsavedChanges.d.ts.map +0 -1
- package/dist/editor/hooks/useUnsavedChanges.js.map +0 -1
- package/dist/editor/index.d.ts.map +0 -1
- package/dist/editor/index.js.map +0 -1
- package/dist/editor/plugins/VersionHistoryPanel.d.ts.map +0 -1
- package/dist/editor/plugins/VersionHistoryPanel.js.map +0 -1
- package/dist/editor/plugins/index.d.ts.map +0 -1
- package/dist/editor/plugins/index.js.map +0 -1
- package/dist/editor/plugins/versionHistoryPlugin.d.ts.map +0 -1
- package/dist/editor/plugins/versionHistoryPlugin.js.map +0 -1
- package/dist/editor/utils/detectPageTree.d.ts.map +0 -1
- package/dist/editor/utils/detectPageTree.js.map +0 -1
- package/dist/editor/utils/index.d.ts.map +0 -1
- package/dist/editor/utils/index.js.map +0 -1
- package/dist/editor/utils/injectPageTreeFields.d.ts.map +0 -1
- package/dist/editor/utils/injectPageTreeFields.js.map +0 -1
- package/dist/endpoints/ai.d.ts.map +0 -1
- package/dist/endpoints/ai.js.map +0 -1
- package/dist/endpoints/context.d.ts.map +0 -1
- package/dist/endpoints/context.js.map +0 -1
- package/dist/endpoints/index.d.ts.map +0 -1
- package/dist/endpoints/index.js.map +0 -1
- package/dist/endpoints/postcss.d.js.map +0 -1
- package/dist/endpoints/prompts.d.ts.map +0 -1
- package/dist/endpoints/prompts.js.map +0 -1
- package/dist/endpoints/styles.d.ts.map +0 -1
- package/dist/endpoints/styles.js.map +0 -1
- package/dist/exports/client.d.ts.map +0 -1
- package/dist/exports/client.js.map +0 -1
- package/dist/exports/rsc.d.ts.map +0 -1
- package/dist/exports/rsc.js.map +0 -1
- package/dist/fields/AlignmentField.d.ts.map +0 -1
- package/dist/fields/AlignmentField.js.map +0 -1
- package/dist/fields/AnimationField.d.ts.map +0 -1
- package/dist/fields/AnimationField.js.map +0 -1
- package/dist/fields/BackgroundField.d.ts.map +0 -1
- package/dist/fields/BackgroundField.js.map +0 -1
- package/dist/fields/BorderField.d.ts.map +0 -1
- package/dist/fields/BorderField.js.map +0 -1
- package/dist/fields/ColorPickerField.d.ts.map +0 -1
- package/dist/fields/ColorPickerField.js.map +0 -1
- package/dist/fields/ContentAlignmentField.d.ts.map +0 -1
- package/dist/fields/ContentAlignmentField.js.map +0 -1
- package/dist/fields/DimensionsField.d.ts.map +0 -1
- package/dist/fields/DimensionsField.js.map +0 -1
- package/dist/fields/FlexAlignmentField.d.ts.map +0 -1
- package/dist/fields/FlexAlignmentField.js.map +0 -1
- package/dist/fields/FolderPickerField.d.ts.map +0 -1
- package/dist/fields/FolderPickerField.js.map +0 -1
- package/dist/fields/GradientEditor.d.ts.map +0 -1
- package/dist/fields/GradientEditor.js.map +0 -1
- package/dist/fields/LockedField.d.ts.map +0 -1
- package/dist/fields/LockedField.js.map +0 -1
- package/dist/fields/MarginField.d.ts.map +0 -1
- package/dist/fields/MarginField.js.map +0 -1
- package/dist/fields/MediaField.d.ts.map +0 -1
- package/dist/fields/MediaField.js.map +0 -1
- package/dist/fields/PaddingField.d.ts.map +0 -1
- package/dist/fields/PaddingField.js.map +0 -1
- package/dist/fields/PageSegmentField.d.ts.map +0 -1
- package/dist/fields/PageSegmentField.js.map +0 -1
- package/dist/fields/ResetField.d.ts.map +0 -1
- package/dist/fields/ResetField.js.map +0 -1
- package/dist/fields/ResponsiveField.d.ts.map +0 -1
- package/dist/fields/ResponsiveField.js.map +0 -1
- package/dist/fields/ResponsiveVisibilityField.d.ts.map +0 -1
- package/dist/fields/ResponsiveVisibilityField.js.map +0 -1
- package/dist/fields/SizeField.d.ts.map +0 -1
- package/dist/fields/SizeField.js.map +0 -1
- package/dist/fields/SlugPreviewField.d.ts.map +0 -1
- package/dist/fields/SlugPreviewField.js.map +0 -1
- package/dist/fields/TemplateField.d.ts.map +0 -1
- package/dist/fields/TemplateField.js.map +0 -1
- package/dist/fields/TransformField.d.ts.map +0 -1
- package/dist/fields/TransformField.js.map +0 -1
- package/dist/fields/VerticalAlignmentField.d.ts.map +0 -1
- package/dist/fields/VerticalAlignmentField.js.map +0 -1
- package/dist/fields/WidthField.d.ts.map +0 -1
- package/dist/fields/WidthField.js.map +0 -1
- package/dist/fields/index.d.ts.map +0 -1
- package/dist/fields/index.js.map +0 -1
- package/dist/fields/richtext/controls/ColorPickerControl.d.ts.map +0 -1
- package/dist/fields/richtext/controls/ColorPickerControl.js.map +0 -1
- package/dist/fields/richtext/controls/DropdownPortal.d.ts.map +0 -1
- package/dist/fields/richtext/controls/DropdownPortal.js.map +0 -1
- package/dist/fields/richtext/controls/FontSizeControl.d.ts.map +0 -1
- package/dist/fields/richtext/controls/FontSizeControl.js.map +0 -1
- package/dist/fields/richtext/controls/HighlightControl.d.ts.map +0 -1
- package/dist/fields/richtext/controls/HighlightControl.js.map +0 -1
- package/dist/fields/richtext/controls/index.d.ts.map +0 -1
- package/dist/fields/richtext/controls/index.js.map +0 -1
- package/dist/fields/richtext/controls/shared.d.ts.map +0 -1
- package/dist/fields/richtext/controls/shared.js.map +0 -1
- package/dist/fields/richtext/createRichTextField.d.ts.map +0 -1
- package/dist/fields/richtext/createRichTextField.js.map +0 -1
- package/dist/fields/richtext/extensions/FontSize.d.ts.map +0 -1
- package/dist/fields/richtext/extensions/FontSize.js.map +0 -1
- package/dist/fields/richtext/extensions/index.d.ts.map +0 -1
- package/dist/fields/richtext/extensions/index.js.map +0 -1
- package/dist/fields/richtext/index.d.ts.map +0 -1
- package/dist/fields/richtext/index.js.map +0 -1
- package/dist/fields/shared.d.ts.map +0 -1
- package/dist/fields/shared.js.map +0 -1
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/useResponsiveStyles.d.ts.map +0 -1
- package/dist/hooks/useResponsiveStyles.js.map +0 -1
- package/dist/hooks/useScrollAnimation.d.ts.map +0 -1
- package/dist/hooks/useScrollAnimation.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/layouts/LayoutWrapper.d.ts.map +0 -1
- package/dist/layouts/LayoutWrapper.js.map +0 -1
- package/dist/layouts/defaults.d.ts.map +0 -1
- package/dist/layouts/defaults.js.map +0 -1
- package/dist/layouts/index.d.ts.map +0 -1
- package/dist/layouts/index.js.map +0 -1
- package/dist/layouts/types.d.ts.map +0 -1
- package/dist/layouts/types.js.map +0 -1
- package/dist/layouts/utils.d.ts.map +0 -1
- package/dist/layouts/utils.js.map +0 -1
- package/dist/next/index.d.ts.map +0 -1
- package/dist/next/index.js.map +0 -1
- package/dist/plugin/collections/Pages.d.ts.map +0 -1
- package/dist/plugin/collections/Pages.js.map +0 -1
- package/dist/plugin/fields/index.d.ts.map +0 -1
- package/dist/plugin/fields/index.js.map +0 -1
- package/dist/plugin/fields/types.d.ts.map +0 -1
- package/dist/plugin/fields/types.js.map +0 -1
- package/dist/plugin/hooks/index.d.ts.map +0 -1
- package/dist/plugin/hooks/index.js.map +0 -1
- package/dist/plugin/hooks/isHomepageUnique.d.ts.map +0 -1
- package/dist/plugin/hooks/isHomepageUnique.js.map +0 -1
- package/dist/plugin/index.d.ts.map +0 -1
- package/dist/plugin/index.js.map +0 -1
- package/dist/render/HybridPageRenderer.d.ts.map +0 -1
- package/dist/render/HybridPageRenderer.js.map +0 -1
- package/dist/render/PageRenderer.d.ts.map +0 -1
- package/dist/render/PageRenderer.js.map +0 -1
- package/dist/render/PuckEditor.client.d.ts.map +0 -1
- package/dist/render/PuckEditor.client.js.map +0 -1
- package/dist/render/index.d.ts.map +0 -1
- package/dist/render/index.js.map +0 -1
- package/dist/theme/context.d.ts.map +0 -1
- package/dist/theme/context.js.map +0 -1
- package/dist/theme/defaults.d.ts.map +0 -1
- package/dist/theme/defaults.js.map +0 -1
- package/dist/theme/example.d.ts.map +0 -1
- package/dist/theme/example.js.map +0 -1
- package/dist/theme/index.d.ts.map +0 -1
- package/dist/theme/index.js.map +0 -1
- package/dist/theme/types.d.ts.map +0 -1
- package/dist/theme/types.js.map +0 -1
- package/dist/theme/utils.d.ts.map +0 -1
- package/dist/theme/utils.js.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/migration.d.ts.map +0 -1
- package/dist/utils/migration.js.map +0 -1
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js.map +0 -1
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js.map +0 -1
- package/dist/views/PuckConfigContext.d.ts.map +0 -1
- package/dist/views/PuckConfigContext.js.map +0 -1
- package/dist/views/PuckEditorView.d.ts.map +0 -1
- package/dist/views/PuckEditorView.js.map +0 -1
- package/dist/views/index.d.ts.map +0 -1
- package/dist/views/index.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fields/SizeField.tsx"],"sourcesContent":["'use client'\n\n/**\n * SizeField - Custom Puck field for button/element sizing\n *\n * Provides preset size options (sm, default, lg) with a \"custom\" mode\n * that reveals detailed controls for height, padding, and font size.\n */\n\nimport React, { useCallback, memo, type CSSProperties } from 'react'\nimport type { CustomField } from '@puckeditor/core'\nimport { X } from 'lucide-react'\n\n// Re-export types and utilities from shared.ts for backward compatibility\n// These are defined in shared.ts to be server-safe\nexport {\n type SizeMode,\n type SizeUnit,\n type SizeValue,\n sizeValueToCSS,\n getSizeClasses,\n} from './shared.js'\n\nimport type { SizeValue, SizeMode, SizeUnit } from './shared.js'\n\ninterface SizeFieldProps {\n value: SizeValue | null\n onChange: (value: SizeValue | null) => void\n label?: string\n readOnly?: boolean\n /** Show height input (default: true) */\n showHeight?: boolean\n /** Show font size input (default: true) */\n showFontSize?: boolean\n}\n\n// =============================================================================\n// Default Values\n// =============================================================================\n\nconst DEFAULT_VALUE: SizeValue = {\n mode: 'default',\n}\n\nconst CUSTOM_DEFAULTS: Required<Omit<SizeValue, 'mode'>> = {\n height: 40,\n paddingX: 16,\n paddingY: 8,\n fontSize: 14,\n unit: 'px',\n}\n\n// =============================================================================\n// Styles\n// =============================================================================\n\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n } as CSSProperties,\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n } as CSSProperties,\n label: {\n fontSize: '14px',\n fontWeight: 500,\n color: 'var(--theme-elevation-800)',\n } as CSSProperties,\n clearButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '24px',\n height: '24px',\n padding: 0,\n border: 'none',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: 'var(--theme-elevation-500)',\n cursor: 'pointer',\n } as CSSProperties,\n buttonGroup: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: '4px',\n } as CSSProperties,\n button: {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '4px 12px',\n fontSize: '12px',\n fontWeight: 500,\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 display: 'inline-flex',\n alignItems: 'center',\n padding: '4px 12px',\n fontSize: '12px',\n fontWeight: 500,\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 customPanel: {\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n padding: '12px',\n backgroundColor: 'var(--theme-elevation-50)',\n borderRadius: '6px',\n overflow: 'hidden',\n } as CSSProperties,\n unitRow: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n } as CSSProperties,\n unitLabel: {\n fontSize: '10px',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n color: 'var(--theme-elevation-500)',\n flexShrink: 0,\n } as CSSProperties,\n unitButtons: {\n display: 'flex',\n gap: '4px',\n } as CSSProperties,\n unitButton: {\n height: '28px',\n padding: '0 8px',\n fontSize: '12px',\n fontFamily: 'monospace',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: '4px',\n backgroundColor: 'var(--theme-bg)',\n color: 'var(--theme-elevation-500)',\n cursor: 'pointer',\n } as CSSProperties,\n unitButtonActive: {\n height: '28px',\n padding: '0 8px',\n fontSize: '12px',\n fontFamily: 'monospace',\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 inputGrid: {\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n gap: '8px',\n } as CSSProperties,\n inputGroup: {\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n minWidth: 0,\n } as CSSProperties,\n inputLabel: {\n fontSize: '10px',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n color: 'var(--theme-elevation-500)',\n } as CSSProperties,\n input: {\n width: '100%',\n minWidth: 0,\n height: '32px',\n padding: '0 8px',\n fontSize: '14px',\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 boxSizing: 'border-box',\n } as CSSProperties,\n summary: {\n fontSize: '12px',\n color: 'var(--theme-elevation-500)',\n fontFamily: 'monospace',\n paddingTop: '4px',\n borderTop: '1px solid var(--theme-elevation-100)',\n } as CSSProperties,\n}\n\n// =============================================================================\n// SizeField Component\n// =============================================================================\n\nfunction SizeFieldInner({\n value,\n onChange,\n label = 'Size',\n readOnly,\n showHeight = true,\n showFontSize = true,\n}: SizeFieldProps) {\n const currentValue = value || DEFAULT_VALUE\n\n const handleModeChange = useCallback((mode: SizeMode) => {\n if (mode === 'custom') {\n onChange({\n mode,\n ...CUSTOM_DEFAULTS,\n })\n } else {\n onChange({ mode })\n }\n }, [onChange])\n\n const handleValueChange = useCallback((\n field: 'height' | 'paddingX' | 'paddingY' | 'fontSize',\n val: number\n ) => {\n onChange({\n ...currentValue,\n [field]: val,\n })\n }, [currentValue, onChange])\n\n const handleUnitChange = useCallback((unit: SizeUnit) => {\n onChange({\n ...currentValue,\n unit,\n })\n }, [currentValue, onChange])\n\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const presets = [\n { mode: 'sm' as SizeMode, label: 'SM' },\n { mode: 'default' as SizeMode, label: 'Default' },\n { mode: 'lg' as SizeMode, label: 'LG' },\n { mode: 'custom' as SizeMode, label: 'Custom' },\n ]\n\n return (\n <div className=\"puck-field\" style={styles.container}>\n {/* Header with label and clear */}\n <div style={styles.header}>\n <label style={styles.label}>{label}</label>\n {value && !readOnly && (\n <button\n type=\"button\"\n onClick={handleClear}\n style={styles.clearButton}\n title=\"Reset to default\"\n >\n <X style={{ width: '16px', height: '16px' }} />\n </button>\n )}\n </div>\n\n {/* Size mode selector */}\n <div style={styles.buttonGroup}>\n {presets.map(({ mode, label: modeLabel }) => {\n const isActive = currentValue.mode === mode\n return (\n <button\n key={mode}\n type=\"button\"\n onClick={() => handleModeChange(mode)}\n disabled={readOnly}\n style={isActive ? styles.buttonActive : styles.button}\n >\n {modeLabel}\n </button>\n )\n })}\n </div>\n\n {/* Custom size controls */}\n {currentValue.mode === 'custom' && (\n <div style={styles.customPanel as CSSProperties}>\n {/* Unit selector */}\n <div style={styles.unitRow}>\n <label style={styles.unitLabel as CSSProperties}>Unit:</label>\n <div style={styles.unitButtons}>\n {(['px', 'rem'] as SizeUnit[]).map((unit) => {\n const isActive = (currentValue.unit || 'px') === unit\n return (\n <button\n key={unit}\n type=\"button\"\n onClick={() => handleUnitChange(unit)}\n disabled={readOnly}\n style={isActive ? styles.unitButtonActive : styles.unitButton}\n >\n {unit}\n </button>\n )\n })}\n </div>\n </div>\n\n {/* Numeric inputs */}\n <div style={styles.inputGrid}>\n {showHeight && (\n <div style={styles.inputGroup as CSSProperties}>\n <label style={styles.inputLabel as CSSProperties}>Height</label>\n <input\n type=\"number\"\n min={0}\n value={currentValue.height ?? CUSTOM_DEFAULTS.height}\n onChange={(e) => handleValueChange('height', parseInt(e.target.value, 10) || 0)}\n disabled={readOnly}\n style={styles.input}\n />\n </div>\n )}\n\n {showFontSize && (\n <div style={styles.inputGroup as CSSProperties}>\n <label style={styles.inputLabel as CSSProperties}>Font Size</label>\n <input\n type=\"number\"\n min={0}\n value={currentValue.fontSize ?? CUSTOM_DEFAULTS.fontSize}\n onChange={(e) => handleValueChange('fontSize', parseInt(e.target.value, 10) || 0)}\n disabled={readOnly}\n style={styles.input}\n />\n </div>\n )}\n\n <div style={styles.inputGroup as CSSProperties}>\n <label style={styles.inputLabel as CSSProperties}>Padding X</label>\n <input\n type=\"number\"\n min={0}\n value={currentValue.paddingX ?? CUSTOM_DEFAULTS.paddingX}\n onChange={(e) => handleValueChange('paddingX', parseInt(e.target.value, 10) || 0)}\n disabled={readOnly}\n style={styles.input}\n />\n </div>\n\n <div style={styles.inputGroup as CSSProperties}>\n <label style={styles.inputLabel as CSSProperties}>Padding Y</label>\n <input\n type=\"number\"\n min={0}\n value={currentValue.paddingY ?? CUSTOM_DEFAULTS.paddingY}\n onChange={(e) => handleValueChange('paddingY', parseInt(e.target.value, 10) || 0)}\n disabled={readOnly}\n style={styles.input}\n />\n </div>\n </div>\n\n {/* Preview summary */}\n <div style={styles.summary}>\n {showHeight && `h: ${currentValue.height ?? CUSTOM_DEFAULTS.height}${currentValue.unit || 'px'}`}\n {showHeight && ' | '}\n {`p: ${currentValue.paddingY ?? CUSTOM_DEFAULTS.paddingY}${currentValue.unit || 'px'} ${currentValue.paddingX ?? CUSTOM_DEFAULTS.paddingX}${currentValue.unit || 'px'}`}\n {showFontSize && ` | font: ${currentValue.fontSize ?? CUSTOM_DEFAULTS.fontSize}${currentValue.unit || 'px'}`}\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport const SizeField = memo(SizeFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\ninterface CreateSizeFieldConfig {\n label?: string\n showHeight?: boolean\n showFontSize?: boolean\n}\n\n/**\n * Creates a Puck field configuration for size control\n */\nexport function createSizeField(\n config: CreateSizeFieldConfig = {}\n): CustomField<SizeValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <SizeField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n showHeight={config.showHeight}\n showFontSize={config.showFontSize}\n />\n ),\n }\n}\n"],"names":["React","useCallback","memo","X","sizeValueToCSS","getSizeClasses","DEFAULT_VALUE","mode","CUSTOM_DEFAULTS","height","paddingX","paddingY","fontSize","unit","styles","container","display","flexDirection","gap","header","alignItems","justifyContent","label","fontWeight","color","clearButton","width","padding","border","borderRadius","backgroundColor","cursor","buttonGroup","flexWrap","button","buttonActive","customPanel","overflow","unitRow","unitLabel","textTransform","letterSpacing","flexShrink","unitButtons","unitButton","fontFamily","unitButtonActive","inputGrid","gridTemplateColumns","inputGroup","minWidth","inputLabel","input","boxSizing","summary","paddingTop","borderTop","SizeFieldInner","value","onChange","readOnly","showHeight","showFontSize","currentValue","handleModeChange","handleValueChange","field","val","handleUnitChange","handleClear","presets","div","className","style","type","onClick","title","map","modeLabel","isActive","disabled","min","e","parseInt","target","SizeField","createSizeField","config","render"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SlugPreviewField.d.ts","sourceRoot":"","sources":["../../src/fields/SlugPreviewField.tsx"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAOnD,UAAU,qBAAqB;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAMD,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,KAAkB,EAClB,IAAkD,GACnD,EAAE,qBAAqB,qBA8DvB;AAMD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,GAAG,WAAW,CAAC,MAAM,CAAC,CAYtB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fields/SlugPreviewField.tsx"],"sourcesContent":["'use client'\n\n/**\n * SlugPreviewField - Custom Puck field for displaying the computed slug\n *\n * Read-only field that shows the auto-generated URL slug.\n * When page-tree is enabled, slug = folderPath + '/' + pageSegment\n */\n\nimport React from 'react'\nimport type { CustomField } from '@puckeditor/core'\nimport { Link, Lock } from 'lucide-react'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface SlugPreviewFieldProps {\n value: string\n label?: string\n hint?: string\n}\n\n// =============================================================================\n// SlugPreviewField Component\n// =============================================================================\n\nexport function SlugPreviewField({\n value,\n label = 'URL Slug',\n hint = 'Auto-generated from folder + page segment',\n}: SlugPreviewFieldProps) {\n const displayValue = value ? (value.startsWith('/') ? value : `/${value}`) : '/'\n\n return (\n <div className=\"puck-field\">\n {/* Label with lock indicator */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '8px',\n }}\n >\n <label\n style={{\n fontSize: '14px',\n fontWeight: 500,\n color: 'var(--puck-color-grey-04)',\n }}\n >\n {label}\n </label>\n <Lock size={14} style={{ color: 'var(--puck-color-grey-06)' }} />\n </div>\n\n {/* Read-only slug display */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n padding: '8px 12px',\n backgroundColor: 'var(--puck-color-grey-11)',\n border: '1px solid var(--puck-color-grey-09)',\n borderRadius: '6px',\n }}\n >\n <Link size={14} style={{ marginRight: '8px', color: 'var(--puck-color-grey-06)' }} />\n <span\n style={{\n fontSize: '14px',\n color: 'var(--puck-color-grey-05)',\n fontFamily: 'var(--font-mono, monospace)',\n wordBreak: 'break-all',\n }}\n >\n {displayValue}\n </span>\n </div>\n\n {/* Hint text */}\n <p\n style={{\n marginTop: '6px',\n fontSize: '12px',\n color: 'var(--puck-color-grey-06)',\n }}\n >\n {hint}\n </p>\n </div>\n )\n}\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for slug preview\n */\nexport function createSlugPreviewField(config?: {\n label?: string\n hint?: string\n}): CustomField<string> {\n return {\n type: 'custom',\n label: config?.label ?? 'URL Slug',\n render: ({ value }) => (\n <SlugPreviewField\n value={value || ''}\n label={config?.label}\n hint={config?.hint}\n />\n ),\n }\n}\n"],"names":["React","Link","Lock","SlugPreviewField","value","label","hint","displayValue","startsWith","div","className","style","display","alignItems","justifyContent","marginBottom","fontSize","fontWeight","color","size","padding","backgroundColor","border","borderRadius","marginRight","span","fontFamily","wordBreak","p","marginTop","createSlugPreviewField","config","type","render"],"mappings":"AAAA;;AAEA;;;;;CAKC,GAED,OAAOA,WAAW,QAAO;AAEzB,SAASC,IAAI,EAAEC,IAAI,QAAQ,eAAc;AAYzC,gFAAgF;AAChF,6BAA6B;AAC7B,gFAAgF;AAEhF,OAAO,SAASC,iBAAiB,EAC/BC,KAAK,EACLC,QAAQ,UAAU,EAClBC,OAAO,2CAA2C,EAC5B;IACtB,MAAMC,eAAeH,QAASA,MAAMI,UAAU,CAAC,OAAOJ,QAAQ,CAAC,CAAC,EAAEA,OAAO,GAAI;IAE7E,qBACE,MAACK;QAAIC,WAAU;;0BAEb,MAACD;gBACCE,OAAO;oBACLC,SAAS;oBACTC,YAAY;oBACZC,gBAAgB;oBAChBC,cAAc;gBAChB;;kCAEA,KAACV;wBACCM,OAAO;4BACLK,UAAU;4BACVC,YAAY;4BACZC,OAAO;wBACT;kCAECb;;kCAEH,KAACH;wBAAKiB,MAAM;wBAAIR,OAAO;4BAAEO,OAAO;wBAA4B;;;;0BAI9D,MAACT;gBACCE,OAAO;oBACLC,SAAS;oBACTC,YAAY;oBACZO,SAAS;oBACTC,iBAAiB;oBACjBC,QAAQ;oBACRC,cAAc;gBAChB;;kCAEA,KAACtB;wBAAKkB,MAAM;wBAAIR,OAAO;4BAAEa,aAAa;4BAAON,OAAO;wBAA4B;;kCAChF,KAACO;wBACCd,OAAO;4BACLK,UAAU;4BACVE,OAAO;4BACPQ,YAAY;4BACZC,WAAW;wBACb;kCAECpB;;;;0BAKL,KAACqB;gBACCjB,OAAO;oBACLkB,WAAW;oBACXb,UAAU;oBACVE,OAAO;gBACT;0BAECZ;;;;AAIT;AAEA,gFAAgF;AAChF,8BAA8B;AAC9B,gFAAgF;AAEhF;;CAEC,GACD,OAAO,SAASwB,uBAAuBC,MAGtC;IACC,OAAO;QACLC,MAAM;QACN3B,OAAO0B,QAAQ1B,SAAS;QACxB4B,QAAQ,CAAC,EAAE7B,KAAK,EAAE,iBAChB,KAACD;gBACCC,OAAOA,SAAS;gBAChBC,OAAO0B,QAAQ1B;gBACfC,MAAMyB,QAAQzB;;IAGpB;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateField.d.ts","sourceRoot":"","sources":["../../src/fields/TemplateField.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH,OAAO,KAAqE,MAAM,OAAO,CAAA;AACzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AA6BnD,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IACxC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAqMD,iBAAS,kBAAkB,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,KAAkB,EAClB,QAAQ,EACR,WAAmC,GACpC,EAAE,kBAAkB,qBA4YpB;AAGD,eAAO,MAAM,aAAa,sDAA2B,CAAA;AAMrD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,GAAG,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,CAc7B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fields/TemplateField.tsx"],"sourcesContent":["'use client'\n\n/**\n * TemplateField - Custom Puck field for saving/loading template content\n *\n * This component provides a template picker that:\n * - Fetches templates from the puck-templates Payload collection\n * - Shows a dropdown to select a template\n * - Has a \"Save as template\" button to save current slot content\n * - When a template is selected, loads the saved components into the slot\n *\n * Uses Puck's usePuck hook to access and modify component slot data.\n */\n\nimport React, { useState, useEffect, useCallback, memo, type CSSProperties } from 'react'\nimport type { CustomField } from '@puckeditor/core'\nimport { createUsePuck } from '@puckeditor/core'\nimport type { Data } from '@puckeditor/core'\nimport {\n Loader2,\n Save,\n Download,\n AlertCircle,\n ChevronDown,\n ChevronUp,\n X,\n} from 'lucide-react'\n\n// Create usePuck hook for accessing editor state\nconst usePuck = createUsePuck()\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface TemplateItem {\n id: string\n name: string\n description?: string\n category?: string\n content: unknown[]\n updatedAt?: string\n}\n\ninterface TemplateFieldProps {\n value: string | null\n onChange: (value: string | null) => void\n label?: string\n readOnly?: boolean\n apiEndpoint?: string\n}\n\ninterface SaveFormState {\n expanded: boolean\n name: string\n description: string\n category: string\n saving: boolean\n error: string | null\n}\n\n// =============================================================================\n// Styles\n// =============================================================================\n\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n } as CSSProperties,\n label: {\n display: 'block',\n fontSize: '14px',\n fontWeight: 500,\n color: 'var(--theme-elevation-800)',\n } as CSSProperties,\n selectRow: {\n display: 'flex',\n gap: '8px',\n } as CSSProperties,\n select: {\n flex: 1,\n height: '36px',\n padding: '0 12px',\n fontSize: '14px',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: '6px',\n backgroundColor: 'var(--theme-input-bg)',\n color: 'var(--theme-elevation-800)',\n cursor: 'pointer',\n } as CSSProperties,\n clearButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '36px',\n height: '36px',\n padding: 0,\n border: 'none',\n borderRadius: '6px',\n backgroundColor: 'transparent',\n color: 'var(--theme-elevation-500)',\n cursor: 'pointer',\n } as CSSProperties,\n buttonRow: {\n display: 'flex',\n gap: '8px',\n } as CSSProperties,\n button: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n flex: 1,\n height: '32px',\n padding: '0 12px',\n fontSize: '14px',\n fontWeight: 500,\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 buttonDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n } as CSSProperties,\n saveForm: {\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n padding: '12px',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: '6px',\n backgroundColor: 'var(--theme-elevation-50)',\n } as CSSProperties,\n inputGroup: {\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n } as CSSProperties,\n inputLabel: {\n fontSize: '12px',\n color: 'var(--theme-elevation-700)',\n } as CSSProperties,\n input: {\n height: '32px',\n padding: '0 8px',\n fontSize: '14px',\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 errorBox: {\n display: 'flex',\n alignItems: 'flex-start',\n gap: '8px',\n padding: '8px',\n backgroundColor: 'rgba(239, 68, 68, 0.1)',\n border: '1px solid rgba(239, 68, 68, 0.3)',\n borderRadius: '6px',\n color: 'var(--theme-error-500)',\n fontSize: '12px',\n } as CSSProperties,\n submitButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n width: '100%',\n height: '32px',\n padding: '0 12px',\n fontSize: '14px',\n fontWeight: 500,\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}\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Find and update a component's props in the Puck data tree.\n */\nfunction updateComponentInData(\n data: Data,\n componentId: string,\n propsToMerge: Record<string, unknown>\n): Data {\n const updateInArray = (\n items: Array<{ type: string; props: Record<string, unknown> }>\n ): Array<{ type: string; props: Record<string, unknown> }> => {\n return items.map((item) => {\n if (item.props?.id === componentId) {\n return {\n ...item,\n props: {\n ...item.props,\n ...propsToMerge,\n },\n }\n }\n if (item.props?.content && Array.isArray(item.props.content)) {\n return {\n ...item,\n props: {\n ...item.props,\n content: updateInArray(item.props.content as Array<{ type: string; props: Record<string, unknown> }>),\n },\n }\n }\n return item\n })\n }\n\n const updatedContent = data.content\n ? updateInArray(data.content as Array<{ type: string; props: Record<string, unknown> }>)\n : []\n\n const updatedZones: Record<string, Array<{ type: string; props: Record<string, unknown> }>> = {}\n if (data.zones) {\n for (const [zoneName, zoneContent] of Object.entries(data.zones)) {\n updatedZones[zoneName] = updateInArray(\n zoneContent as Array<{ type: string; props: Record<string, unknown> }>\n )\n }\n }\n\n return {\n ...data,\n content: updatedContent,\n zones: updatedZones,\n }\n}\n\n// =============================================================================\n// TemplateField Component\n// =============================================================================\n\nfunction TemplateFieldInner({\n value,\n onChange,\n label = 'Template',\n readOnly,\n apiEndpoint = '/api/puck-templates',\n}: TemplateFieldProps) {\n const [templates, setTemplates] = useState<TemplateItem[]>([])\n const [loading, setLoading] = useState(false)\n const [loadingTemplate, setLoadingTemplate] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [saveForm, setSaveForm] = useState<SaveFormState>({\n expanded: false,\n name: '',\n description: '',\n category: '',\n saving: false,\n error: null,\n })\n\n // Puck state access\n const appState = usePuck((s) => s.appState)\n const dispatch = usePuck((s) => s.dispatch)\n const selectedItem = usePuck((s) => s.selectedItem)\n const getSelectorForId = usePuck((s) => s.getSelectorForId)\n const getItemById = usePuck((s) => s.getItemById)\n\n // Get current component ID\n const componentId = selectedItem?.props?.id as string | undefined\n\n // Fetch templates from Payload API\n const fetchTemplates = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const params = new URLSearchParams({\n limit: '100',\n sort: '-updatedAt',\n })\n\n const response = await fetch(`${apiEndpoint}?${params}`)\n if (!response.ok) throw new Error('Failed to fetch templates')\n\n const data = await response.json()\n const items: TemplateItem[] = (data.docs || []).map(\n (doc: Record<string, unknown>) => ({\n id: doc.id as string,\n name: doc.name as string,\n description: doc.description as string | undefined,\n category: doc.category as string | undefined,\n content: doc.content as unknown[],\n updatedAt: doc.updatedAt as string | undefined,\n })\n )\n\n setTemplates(items)\n } catch (err) {\n console.error('Error fetching templates:', err)\n setError('Failed to load templates')\n } finally {\n setLoading(false)\n }\n }, [apiEndpoint])\n\n // Load templates on mount\n useEffect(() => {\n fetchTemplates()\n }, [fetchTemplates])\n\n // Handle template selection\n const handleTemplateSelect = useCallback(\n async (templateId: string) => {\n if (!componentId || !selectedItem) return\n\n const template = templates.find((t) => String(t.id) === String(templateId))\n if (!template) return\n\n setLoadingTemplate(true)\n try {\n const selector = getSelectorForId(componentId)\n\n if (selector) {\n dispatch({\n type: 'replace',\n destinationIndex: selector.index,\n destinationZone: selector.zone,\n data: {\n type: selectedItem.type,\n props: {\n ...selectedItem.props,\n content: template.content,\n templateId: templateId,\n },\n },\n })\n } else {\n const updatedData = updateComponentInData(\n appState.data,\n componentId,\n { content: template.content, templateId: templateId }\n )\n dispatch({\n type: 'setData',\n data: updatedData,\n })\n }\n\n onChange(templateId)\n } catch (err) {\n console.error('Error loading template:', err)\n setError('Failed to load template')\n } finally {\n setLoadingTemplate(false)\n }\n },\n [componentId, selectedItem, templates, getSelectorForId, appState.data, dispatch, onChange]\n )\n\n // Handle clearing template selection\n const handleClearTemplate = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n // Toggle save form\n const handleToggleSaveForm = useCallback(() => {\n setSaveForm((prev) => ({\n ...prev,\n expanded: !prev.expanded,\n error: null,\n }))\n }, [])\n\n // Close save form\n const handleCloseSaveForm = useCallback(() => {\n setSaveForm({\n expanded: false,\n name: '',\n description: '',\n category: '',\n saving: false,\n error: null,\n })\n }, [])\n\n // Save current slot content as a new template\n const handleSaveTemplate = useCallback(async () => {\n if (!componentId) return\n\n const name = saveForm.name.trim()\n if (!name) {\n setSaveForm((prev) => ({\n ...prev,\n error: 'Please enter a template name',\n }))\n return\n }\n\n setSaveForm((prev) => ({ ...prev, saving: true, error: null }))\n\n try {\n // Use Puck's official getItemById API instead of manual tree traversal\n const component = getItemById(componentId)\n const content = (component?.props?.content as unknown[]) || []\n\n if (content.length === 0) {\n throw new Error('No content to save. Add components to the template first.')\n }\n\n const response = await fetch(apiEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n name,\n description: saveForm.description.trim() || undefined,\n category: saveForm.category.trim() || undefined,\n content,\n }),\n })\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}))\n throw new Error(\n errorData.message || errorData.errors?.[0]?.message || 'Failed to save template'\n )\n }\n\n const data = await response.json()\n const doc = data.doc || data\n\n const newTemplate: TemplateItem = {\n id: doc.id as string,\n name: doc.name as string,\n description: doc.description as string | undefined,\n category: doc.category as string | undefined,\n content: doc.content as unknown[],\n updatedAt: doc.updatedAt as string | undefined,\n }\n\n setTemplates((prev) => [newTemplate, ...prev])\n handleCloseSaveForm()\n\n setTimeout(() => {\n onChange(newTemplate.id)\n }, 50)\n } catch (err) {\n console.error('Error saving template:', err)\n setSaveForm((prev) => ({\n ...prev,\n saving: false,\n error: err instanceof Error ? err.message : 'Failed to save template',\n }))\n }\n }, [componentId, getItemById, apiEndpoint, saveForm, onChange, handleCloseSaveForm])\n\n // Group templates by category\n const categorizedTemplates = templates.reduce<Record<string, TemplateItem[]>>(\n (acc, template) => {\n const category = template.category || 'Uncategorized'\n if (!acc[category]) {\n acc[category] = []\n }\n acc[category].push(template)\n return acc\n },\n {}\n )\n\n return (\n <div className=\"puck-field\" style={styles.container}>\n {label && (\n <label style={styles.label}>{label}</label>\n )}\n\n {/* Template Selector */}\n <div style={styles.selectRow}>\n <select\n value={value || ''}\n onChange={(e) => e.target.value && handleTemplateSelect(e.target.value)}\n disabled={readOnly || loading || loadingTemplate}\n style={styles.select}\n >\n <option value=\"\">\n {loading ? 'Loading...' : loadingTemplate ? 'Loading template...' : 'Select a template'}\n </option>\n {Object.entries(categorizedTemplates).map(([category, items]) => (\n <optgroup key={category} label={category}>\n {items.map((template) => (\n <option key={template.id} value={template.id}>\n {template.name}\n </option>\n ))}\n </optgroup>\n ))}\n </select>\n\n {value && !readOnly && (\n <button\n type=\"button\"\n onClick={handleClearTemplate}\n style={styles.clearButton}\n title=\"Clear selection\"\n >\n <X style={{ width: '16px', height: '16px' }} />\n </button>\n )}\n </div>\n\n {/* Action Buttons */}\n {!readOnly && (\n <div style={styles.buttonRow}>\n <button\n type=\"button\"\n onClick={handleToggleSaveForm}\n disabled={loading || saveForm.saving}\n style={{\n ...styles.button,\n ...(loading || saveForm.saving ? styles.buttonDisabled : {}),\n }}\n >\n {saveForm.expanded ? (\n <ChevronUp style={{ width: '16px', height: '16px' }} />\n ) : (\n <Save style={{ width: '16px', height: '16px' }} />\n )}\n {saveForm.expanded ? 'Cancel' : 'Save as Template'}\n </button>\n\n {value && (\n <button\n type=\"button\"\n onClick={() => handleTemplateSelect(value)}\n disabled={loadingTemplate}\n style={{\n ...styles.button,\n flex: 'none',\n ...(loadingTemplate ? styles.buttonDisabled : {}),\n }}\n >\n {loadingTemplate ? (\n <Loader2 style={{ width: '16px', height: '16px', animation: 'spin 1s linear infinite' }} />\n ) : (\n <Download style={{ width: '16px', height: '16px' }} />\n )}\n Reload\n </button>\n )}\n </div>\n )}\n\n {/* Inline Save Form */}\n {saveForm.expanded && (\n <div style={styles.saveForm as CSSProperties}>\n <div style={styles.inputGroup as CSSProperties}>\n <label htmlFor=\"template-name\" style={styles.inputLabel}>\n Template Name *\n </label>\n <input\n id=\"template-name\"\n placeholder=\"e.g., Hero Section with CTA\"\n value={saveForm.name}\n onChange={(e) =>\n setSaveForm((prev) => ({ ...prev, name: e.target.value }))\n }\n disabled={saveForm.saving}\n style={styles.input}\n />\n </div>\n\n <div style={styles.inputGroup as CSSProperties}>\n <label htmlFor=\"template-description\" style={styles.inputLabel}>\n Description\n </label>\n <input\n id=\"template-description\"\n placeholder=\"Optional description...\"\n value={saveForm.description}\n onChange={(e) =>\n setSaveForm((prev) => ({ ...prev, description: e.target.value }))\n }\n disabled={saveForm.saving}\n style={styles.input}\n />\n </div>\n\n <div style={styles.inputGroup as CSSProperties}>\n <label htmlFor=\"template-category\" style={styles.inputLabel}>\n Category\n </label>\n <input\n id=\"template-category\"\n placeholder=\"e.g., Hero, Footer, CTA\"\n value={saveForm.category}\n onChange={(e) =>\n setSaveForm((prev) => ({ ...prev, category: e.target.value }))\n }\n disabled={saveForm.saving}\n style={styles.input}\n />\n </div>\n\n {saveForm.error && (\n <div style={styles.errorBox}>\n <AlertCircle style={{ width: '14px', height: '14px', flexShrink: 0, marginTop: '2px' }} />\n <span>{saveForm.error}</span>\n </div>\n )}\n\n <button\n type=\"button\"\n onClick={handleSaveTemplate}\n disabled={saveForm.saving}\n style={{\n ...styles.submitButton,\n ...(saveForm.saving ? styles.buttonDisabled : {}),\n }}\n >\n {saveForm.saving ? (\n <>\n <Loader2 style={{ width: '16px', height: '16px', animation: 'spin 1s linear infinite' }} />\n Saving...\n </>\n ) : (\n <>\n <Save style={{ width: '16px', height: '16px' }} />\n Save Template\n </>\n )}\n </button>\n </div>\n )}\n\n {/* Error Display */}\n {error && (\n <div style={styles.errorBox}>\n <AlertCircle style={{ width: '16px', height: '16px', flexShrink: 0, marginTop: '2px' }} />\n <span>{error}</span>\n </div>\n )}\n </div>\n )\n}\n\n// Memoize to prevent unnecessary re-renders\nexport const TemplateField = memo(TemplateFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for template selection\n */\nexport function createTemplateField(config: {\n label?: string\n apiEndpoint?: string\n}): CustomField<string | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <TemplateField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n apiEndpoint={config.apiEndpoint}\n />\n ),\n }\n}\n"],"names":["React","useState","useEffect","useCallback","memo","createUsePuck","Loader2","Save","Download","AlertCircle","ChevronUp","X","usePuck","styles","container","display","flexDirection","gap","label","fontSize","fontWeight","color","selectRow","select","flex","height","padding","border","borderRadius","backgroundColor","cursor","clearButton","alignItems","justifyContent","width","buttonRow","button","buttonDisabled","opacity","saveForm","inputGroup","inputLabel","input","errorBox","submitButton","updateComponentInData","data","componentId","propsToMerge","updateInArray","items","map","item","props","id","content","Array","isArray","updatedContent","updatedZones","zones","zoneName","zoneContent","Object","entries","TemplateFieldInner","value","onChange","readOnly","apiEndpoint","templates","setTemplates","loading","setLoading","loadingTemplate","setLoadingTemplate","error","setError","setSaveForm","expanded","name","description","category","saving","appState","s","dispatch","selectedItem","getSelectorForId","getItemById","fetchTemplates","params","URLSearchParams","limit","sort","response","fetch","ok","Error","json","docs","doc","updatedAt","err","console","handleTemplateSelect","templateId","template","find","t","String","selector","type","destinationIndex","index","destinationZone","zone","updatedData","handleClearTemplate","handleToggleSaveForm","prev","handleCloseSaveForm","handleSaveTemplate","trim","component","length","method","headers","body","JSON","stringify","undefined","errorData","catch","message","errors","newTemplate","setTimeout","categorizedTemplates","reduce","acc","push","div","className","style","e","target","disabled","option","optgroup","onClick","title","animation","htmlFor","placeholder","flexShrink","marginTop","span","TemplateField","createTemplateField","config","render"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TransformField.d.ts","sourceRoot":"","sources":["../../src/fields/TransformField.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,OAAO,KAA0D,MAAM,OAAO,CAAA;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAWnD,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,aAAa,CAAA;AAOlE,UAAU,mBAAmB;IAC3B,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;IAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAA;IAChD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAoXD,iBAAS,mBAAmB,CAAC,EAC3B,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,GACT,EAAE,mBAAmB,qBAkUrB;AAED,eAAO,MAAM,cAAc,uDAA4B,CAAA;AAMvD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,CAarC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fields/TransformField.tsx"],"sourcesContent":["'use client'\n\n/**\n * TransformField - Custom Puck field for CSS transforms\n *\n * This component provides:\n * - Live preview of transform effect\n * - Rotate slider (-360 to 360)\n * - Scale X/Y with link/unlink toggle\n * - Skew X/Y sliders\n * - Translate X/Y inputs with unit selector\n * - Transform origin 3x3 grid selector\n * - Collapsible 3D section (perspective, rotateX, rotateY)\n */\n\nimport React, { useCallback, memo, useState, type CSSProperties } from 'react'\nimport type { CustomField } from '@puckeditor/core'\nimport {\n Link,\n Unlink,\n RotateCw,\n Maximize2,\n X,\n ChevronDown,\n ChevronRight,\n Box,\n} from 'lucide-react'\nimport type { TransformValue, TransformOrigin } from './shared.js'\nimport { DEFAULT_TRANSFORM, transformValueToCSS } from './shared.js'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface TransformFieldProps {\n value: TransformValue | null\n onChange: (value: TransformValue | null) => void\n label?: string\n readOnly?: boolean\n}\n\ntype TranslateUnit = 'px' | 'rem' | '%'\n\n// =============================================================================\n// Styles\n// =============================================================================\n\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n } as CSSProperties,\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n } as CSSProperties,\n label: {\n fontSize: '14px',\n fontWeight: 500,\n color: 'var(--theme-elevation-800)',\n } as CSSProperties,\n clearButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '24px',\n height: '24px',\n padding: 0,\n border: 'none',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: 'var(--theme-elevation-500)',\n cursor: 'pointer',\n } as CSSProperties,\n preview: {\n height: '96px',\n backgroundColor: 'var(--theme-elevation-50)',\n borderRadius: '6px',\n border: '1px solid var(--theme-elevation-150)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n } as CSSProperties,\n previewBox: {\n width: '48px',\n height: '48px',\n backgroundColor: 'var(--theme-elevation-800)',\n borderRadius: '6px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--theme-bg)',\n fontSize: '12px',\n fontWeight: 500,\n transition: 'transform 0.2s',\n } as CSSProperties,\n section: {\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n padding: '12px',\n backgroundColor: 'var(--theme-elevation-50)',\n borderRadius: '6px',\n } as CSSProperties,\n sectionHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n } as CSSProperties,\n sectionTitle: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n } as CSSProperties,\n sectionLabel: {\n fontSize: '12px',\n fontWeight: 500,\n color: 'var(--theme-elevation-700)',\n } as CSSProperties,\n linkButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '24px',\n height: '24px',\n padding: 0,\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 linkButtonActive: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '24px',\n height: '24px',\n padding: 0,\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 grid: {\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n gap: '12px',\n } as CSSProperties,\n sliderGroup: {\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n } as CSSProperties,\n sliderHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n } as CSSProperties,\n sliderLabel: {\n fontSize: '10px',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n color: 'var(--theme-elevation-500)',\n } as CSSProperties,\n sliderValue: {\n fontSize: '12px',\n fontFamily: 'monospace',\n color: 'var(--theme-elevation-500)',\n } as CSSProperties,\n slider: {\n width: '100%',\n height: '6px',\n accentColor: 'var(--theme-elevation-800)',\n cursor: 'pointer',\n } as CSSProperties,\n translateRow: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n flexWrap: 'wrap',\n gap: '8px',\n } as CSSProperties,\n select: {\n height: '28px',\n width: '64px',\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 inputGroup: {\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n } as CSSProperties,\n inputLabel: {\n fontSize: '10px',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n color: 'var(--theme-elevation-500)',\n } as CSSProperties,\n input: {\n height: '32px',\n padding: '0 8px',\n fontSize: '14px',\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 originGrid: {\n display: 'grid',\n gridTemplateColumns: 'repeat(3, 1fr)',\n gap: '4px',\n width: 'fit-content',\n } as CSSProperties,\n originButton: {\n width: '24px',\n height: '24px',\n padding: 0,\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: '4px',\n backgroundColor: 'var(--theme-elevation-50)',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n } as CSSProperties,\n originButtonActive: {\n width: '24px',\n height: '24px',\n padding: 0,\n border: '1px solid var(--theme-elevation-800)',\n borderRadius: '4px',\n backgroundColor: 'var(--theme-elevation-800)',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n } as CSSProperties,\n originDot: {\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: 'var(--theme-elevation-400)',\n } as CSSProperties,\n originDotActive: {\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: 'var(--theme-bg)',\n } as CSSProperties,\n originRow: {\n display: 'flex',\n alignItems: 'center',\n gap: '16px',\n } as CSSProperties,\n originLabel: {\n fontSize: '12px',\n color: 'var(--theme-elevation-500)',\n textTransform: 'capitalize',\n } as CSSProperties,\n collapsible: {\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: '6px',\n overflow: 'hidden',\n } as CSSProperties,\n collapsibleHeader: {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '12px',\n border: 'none',\n backgroundColor: 'var(--theme-elevation-50)',\n cursor: 'pointer',\n } as CSSProperties,\n collapsibleTitle: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n } as CSSProperties,\n collapsibleContent: {\n padding: '12px',\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n borderTop: '1px solid var(--theme-elevation-150)',\n } as CSSProperties,\n checkboxRow: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n } as CSSProperties,\n checkbox: {\n width: '16px',\n height: '16px',\n accentColor: 'var(--theme-elevation-800)',\n cursor: 'pointer',\n } as CSSProperties,\n checkboxLabel: {\n fontSize: '12px',\n color: 'var(--theme-elevation-500)',\n cursor: 'pointer',\n } as CSSProperties,\n}\n\n// =============================================================================\n// Origin Grid Component\n// =============================================================================\n\ninterface OriginGridProps {\n value: TransformOrigin\n onChange: (origin: TransformOrigin) => void\n disabled?: boolean\n}\n\nconst ORIGIN_POSITIONS: TransformOrigin[] = [\n 'top-left', 'top', 'top-right',\n 'left', 'center', 'right',\n 'bottom-left', 'bottom', 'bottom-right',\n]\n\nfunction OriginGrid({ value, onChange, disabled }: OriginGridProps) {\n return (\n <div style={styles.originGrid}>\n {ORIGIN_POSITIONS.map((origin) => {\n const isActive = value === origin\n return (\n <button\n key={origin}\n type=\"button\"\n onClick={() => onChange(origin)}\n disabled={disabled}\n style={{\n ...(isActive ? styles.originButtonActive : styles.originButton),\n ...(disabled ? { opacity: 0.5, cursor: 'not-allowed' } : {}),\n }}\n title={origin.replace('-', ' ')}\n >\n <span style={isActive ? styles.originDotActive : styles.originDot} />\n </button>\n )\n })}\n </div>\n )\n}\n\n// =============================================================================\n// Slider Input Component\n// =============================================================================\n\ninterface SliderInputProps {\n value: number\n onChange: (value: number) => void\n min: number\n max: number\n step?: number\n disabled?: boolean\n label?: string\n unit?: string\n}\n\nfunction SliderInput({\n value,\n onChange,\n min,\n max,\n step = 1,\n disabled,\n label,\n unit = '',\n}: SliderInputProps) {\n return (\n <div style={styles.sliderGroup as CSSProperties}>\n {label && (\n <div style={styles.sliderHeader}>\n <label style={styles.sliderLabel as CSSProperties}>{label}</label>\n <span style={styles.sliderValue}>{value}{unit}</span>\n </div>\n )}\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={(e) => onChange(Number(e.target.value))}\n disabled={disabled}\n style={{\n ...styles.slider,\n ...(disabled ? { opacity: 0.5, cursor: 'not-allowed' } : {}),\n }}\n />\n </div>\n )\n}\n\n// =============================================================================\n// TransformField Component\n// =============================================================================\n\nfunction TransformFieldInner({\n value,\n onChange,\n label,\n readOnly,\n}: TransformFieldProps) {\n const [show3D, setShow3D] = useState(value?.enable3D ?? false)\n\n // Use default if no value\n const currentValue = value || DEFAULT_TRANSFORM\n\n // Handle individual value changes\n const handleChange = useCallback(\n <K extends keyof TransformValue>(key: K, newValue: TransformValue[K]) => {\n onChange({\n ...currentValue,\n [key]: newValue,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle scale change with locking\n const handleScaleChange = useCallback(\n (axis: 'scaleX' | 'scaleY', newValue: number) => {\n if (currentValue.scaleLocked) {\n onChange({\n ...currentValue,\n scaleX: newValue,\n scaleY: newValue,\n })\n } else {\n onChange({\n ...currentValue,\n [axis]: newValue,\n })\n }\n },\n [currentValue, onChange]\n )\n\n // Handle scale lock toggle\n const handleScaleLockToggle = useCallback(() => {\n if (!currentValue.scaleLocked) {\n // When locking, sync both to X value\n onChange({\n ...currentValue,\n scaleLocked: true,\n scaleY: currentValue.scaleX,\n })\n } else {\n onChange({\n ...currentValue,\n scaleLocked: false,\n })\n }\n }, [currentValue, onChange])\n\n // Handle 3D toggle\n const handle3DToggle = useCallback(\n (enabled: boolean) => {\n setShow3D(enabled)\n onChange({\n ...currentValue,\n enable3D: enabled,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle clear\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n // Get preview styles\n const previewStyles = transformValueToCSS(currentValue) || {}\n\n return (\n <div className=\"puck-field\" style={styles.container}>\n {/* Header */}\n <div style={styles.header}>\n {label && (\n <label style={styles.label}>{label}</label>\n )}\n {value && !readOnly && (\n <button\n type=\"button\"\n onClick={handleClear}\n style={styles.clearButton}\n title=\"Reset transform\"\n >\n <X style={{ width: '16px', height: '16px' }} />\n </button>\n )}\n </div>\n\n {/* Live Preview */}\n <div style={styles.preview}>\n <div style={{ ...styles.previewBox, ...previewStyles }}>\n Aa\n </div>\n </div>\n\n {/* Rotate */}\n <div style={styles.section as CSSProperties}>\n <div style={styles.sectionTitle}>\n <RotateCw style={{ width: '16px', height: '16px', color: 'var(--theme-elevation-500)' }} />\n <label style={styles.sectionLabel}>Rotate</label>\n </div>\n <SliderInput\n value={currentValue.rotate}\n onChange={(v) => handleChange('rotate', v)}\n min={-360}\n max={360}\n disabled={readOnly}\n unit=\"deg\"\n />\n </div>\n\n {/* Scale */}\n <div style={styles.section as CSSProperties}>\n <div style={styles.sectionHeader}>\n <div style={styles.sectionTitle}>\n <Maximize2 style={{ width: '16px', height: '16px', color: 'var(--theme-elevation-500)' }} />\n <label style={styles.sectionLabel}>Scale</label>\n </div>\n {!readOnly && (\n <button\n type=\"button\"\n onClick={handleScaleLockToggle}\n style={currentValue.scaleLocked ? styles.linkButtonActive : styles.linkButton}\n title={currentValue.scaleLocked ? 'Click to unlink X and Y scale' : 'Click to link X and Y scale'}\n >\n {currentValue.scaleLocked ? (\n <Link style={{ width: '12px', height: '12px' }} />\n ) : (\n <Unlink style={{ width: '12px', height: '12px' }} />\n )}\n </button>\n )}\n </div>\n\n <div style={currentValue.scaleLocked ? {} : styles.grid}>\n <SliderInput\n label={currentValue.scaleLocked ? 'Scale' : 'Scale X'}\n value={currentValue.scaleX}\n onChange={(v) => handleScaleChange('scaleX', v)}\n min={0.1}\n max={3}\n step={0.1}\n disabled={readOnly}\n />\n {!currentValue.scaleLocked && (\n <SliderInput\n label=\"Scale Y\"\n value={currentValue.scaleY}\n onChange={(v) => handleScaleChange('scaleY', v)}\n min={0.1}\n max={3}\n step={0.1}\n disabled={readOnly}\n />\n )}\n </div>\n </div>\n\n {/* Skew */}\n <div style={styles.section as CSSProperties}>\n <label style={styles.sectionLabel}>Skew</label>\n <div style={styles.grid}>\n <SliderInput\n label=\"Skew X\"\n value={currentValue.skewX}\n onChange={(v) => handleChange('skewX', v)}\n min={-45}\n max={45}\n disabled={readOnly}\n unit=\"deg\"\n />\n <SliderInput\n label=\"Skew Y\"\n value={currentValue.skewY}\n onChange={(v) => handleChange('skewY', v)}\n min={-45}\n max={45}\n disabled={readOnly}\n unit=\"deg\"\n />\n </div>\n </div>\n\n {/* Translate */}\n <div style={styles.section as CSSProperties}>\n <div style={styles.translateRow}>\n <label style={styles.sectionLabel}>Translate</label>\n <select\n value={currentValue.translateUnit}\n onChange={(e) => handleChange('translateUnit', e.target.value as TranslateUnit)}\n disabled={readOnly}\n style={styles.select}\n >\n <option value=\"px\">px</option>\n <option value=\"rem\">rem</option>\n <option value=\"%\">%</option>\n </select>\n </div>\n <div style={styles.grid}>\n <div style={styles.inputGroup as CSSProperties}>\n <label style={styles.inputLabel as CSSProperties}>X</label>\n <input\n type=\"number\"\n value={currentValue.translateX}\n onChange={(e) => handleChange('translateX', parseFloat(e.target.value) || 0)}\n disabled={readOnly}\n style={styles.input}\n />\n </div>\n <div style={styles.inputGroup as CSSProperties}>\n <label style={styles.inputLabel as CSSProperties}>Y</label>\n <input\n type=\"number\"\n value={currentValue.translateY}\n onChange={(e) => handleChange('translateY', parseFloat(e.target.value) || 0)}\n disabled={readOnly}\n style={styles.input}\n />\n </div>\n </div>\n </div>\n\n {/* Transform Origin */}\n <div style={styles.section as CSSProperties}>\n <label style={styles.sectionLabel}>Transform Origin</label>\n <div style={styles.originRow}>\n <OriginGrid\n value={currentValue.origin}\n onChange={(v) => handleChange('origin', v)}\n disabled={readOnly}\n />\n <span style={styles.originLabel}>\n {currentValue.origin.replace('-', ' ')}\n </span>\n </div>\n </div>\n\n {/* 3D Section (Collapsible) */}\n <div style={styles.collapsible}>\n <button\n type=\"button\"\n onClick={() => setShow3D(!show3D)}\n style={styles.collapsibleHeader}\n >\n <div style={styles.collapsibleTitle}>\n <Box style={{ width: '16px', height: '16px', color: 'var(--theme-elevation-500)' }} />\n <label style={styles.sectionLabel}>3D Transforms</label>\n </div>\n {show3D ? (\n <ChevronDown style={{ width: '16px', height: '16px', color: 'var(--theme-elevation-500)' }} />\n ) : (\n <ChevronRight style={{ width: '16px', height: '16px', color: 'var(--theme-elevation-500)' }} />\n )}\n </button>\n\n {show3D && (\n <div style={styles.collapsibleContent as CSSProperties}>\n {/* Enable 3D checkbox */}\n <div style={styles.checkboxRow}>\n <input\n type=\"checkbox\"\n id=\"enable3d\"\n checked={currentValue.enable3D}\n onChange={(e) => handle3DToggle(e.target.checked)}\n disabled={readOnly}\n style={styles.checkbox}\n />\n <label htmlFor=\"enable3d\" style={styles.checkboxLabel}>\n Enable 3D Transforms\n </label>\n </div>\n\n {currentValue.enable3D && (\n <>\n {/* Perspective */}\n <div style={styles.inputGroup as CSSProperties}>\n <label style={styles.inputLabel as CSSProperties}>\n Perspective (px)\n </label>\n <input\n type=\"number\"\n min={100}\n max={2000}\n value={currentValue.perspective ?? 1000}\n onChange={(e) => handleChange('perspective', parseInt(e.target.value, 10) || 1000)}\n disabled={readOnly}\n style={styles.input}\n />\n </div>\n\n {/* Rotate X/Y */}\n <div style={styles.grid}>\n <SliderInput\n label=\"Rotate X\"\n value={currentValue.rotateX ?? 0}\n onChange={(v) => handleChange('rotateX', v)}\n min={-180}\n max={180}\n disabled={readOnly}\n unit=\"deg\"\n />\n <SliderInput\n label=\"Rotate Y\"\n value={currentValue.rotateY ?? 0}\n onChange={(v) => handleChange('rotateY', v)}\n min={-180}\n max={180}\n disabled={readOnly}\n unit=\"deg\"\n />\n </div>\n </>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n\nexport const TransformField = memo(TransformFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for CSS transforms\n */\nexport function createTransformField(config: {\n label?: string\n}): CustomField<TransformValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <TransformField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n />\n ),\n }\n}\n"],"names":["React","useCallback","memo","useState","Link","Unlink","RotateCw","Maximize2","X","ChevronDown","ChevronRight","Box","DEFAULT_TRANSFORM","transformValueToCSS","styles","container","display","flexDirection","gap","header","alignItems","justifyContent","label","fontSize","fontWeight","color","clearButton","width","height","padding","border","borderRadius","backgroundColor","cursor","preview","overflow","previewBox","transition","section","sectionHeader","sectionTitle","sectionLabel","linkButton","linkButtonActive","grid","gridTemplateColumns","sliderGroup","sliderHeader","sliderLabel","textTransform","letterSpacing","sliderValue","fontFamily","slider","accentColor","translateRow","flexWrap","select","inputGroup","inputLabel","input","originGrid","originButton","originButtonActive","originDot","originDotActive","originRow","originLabel","collapsible","collapsibleHeader","collapsibleTitle","collapsibleContent","borderTop","checkboxRow","checkbox","checkboxLabel","ORIGIN_POSITIONS","OriginGrid","value","onChange","disabled","div","style","map","origin","isActive","button","type","onClick","opacity","title","replace","span","SliderInput","min","max","step","unit","e","Number","target","TransformFieldInner","readOnly","show3D","setShow3D","enable3D","currentValue","handleChange","key","newValue","handleScaleChange","axis","scaleLocked","scaleX","scaleY","handleScaleLockToggle","handle3DToggle","enabled","handleClear","previewStyles","className","rotate","v","skewX","skewY","translateUnit","option","translateX","parseFloat","translateY","id","checked","htmlFor","perspective","parseInt","rotateX","rotateY","TransformField","createTransformField","config","render"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VerticalAlignmentField.d.ts","sourceRoot":"","sources":["../../src/fields/VerticalAlignmentField.tsx"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAgD,MAAM,OAAO,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAYnD,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAA;AAEpE,UAAU,2BAA2B;IACnC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAAA;IACnD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,YAAY,CAAC,EAAE,iBAAiB,CAAA;CACjC;AA2ED,iBAAS,2BAA2B,CAAC,EACnC,KAAK,EACL,QAAQ,EACR,KAA4B,EAC5B,QAAQ,EACR,YAAuB,GACxB,EAAE,2BAA2B,qBAyD7B;AAED,eAAO,MAAM,sBAAsB,+DAAoC,CAAA;AAMvE,UAAU,kCAAkC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,iBAAiB,CAAA;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,GAAE,kCAAuC,GAC9C,WAAW,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAcvC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fields/VerticalAlignmentField.tsx"],"sourcesContent":["'use client'\n\n/**\n * VerticalAlignmentField - Icon toggle buttons for vertical/self alignment\n *\n * Used for grid item self-alignment (e.g., in TextImageSplit)\n * Controls how an item aligns itself within its grid/flex cell.\n */\n\nimport React, { useCallback, memo, type CSSProperties } from 'react'\nimport type { CustomField } from '@puckeditor/core'\nimport {\n AlignStartVertical,\n AlignCenterVertical,\n AlignEndVertical,\n X,\n} from 'lucide-react'\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type VerticalAlignment = 'flex-start' | 'center' | 'flex-end'\n\ninterface VerticalAlignmentFieldProps {\n value: VerticalAlignment | null\n onChange: (value: VerticalAlignment | null) => void\n label?: string\n readOnly?: boolean\n defaultValue?: VerticalAlignment\n}\n\n// =============================================================================\n// Styles\n// =============================================================================\n\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n } as CSSProperties,\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n } as CSSProperties,\n label: {\n fontSize: '14px',\n fontWeight: 500,\n color: 'var(--theme-elevation-800)',\n } as CSSProperties,\n clearButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '24px',\n height: '24px',\n padding: 0,\n border: 'none',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: 'var(--theme-elevation-500)',\n cursor: 'pointer',\n } as CSSProperties,\n buttonGroup: {\n display: 'flex',\n gap: '4px',\n } as CSSProperties,\n button: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n padding: 0,\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 display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n padding: 0,\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 buttonDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n } as CSSProperties,\n}\n\n// =============================================================================\n// VerticalAlignmentField Component\n// =============================================================================\n\nfunction VerticalAlignmentFieldInner({\n value,\n onChange,\n label = 'Vertical Alignment',\n readOnly,\n defaultValue = 'center',\n}: VerticalAlignmentFieldProps) {\n const currentValue = value ?? defaultValue\n\n const handleChange = useCallback((alignment: VerticalAlignment) => {\n onChange(alignment)\n }, [onChange])\n\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const options = [\n { value: 'flex-start' as VerticalAlignment, icon: AlignStartVertical, title: 'Top' },\n { value: 'center' as VerticalAlignment, icon: AlignCenterVertical, title: 'Center' },\n { value: 'flex-end' as VerticalAlignment, icon: AlignEndVertical, title: 'Bottom' },\n ]\n\n return (\n <div className=\"puck-field\" style={styles.container}>\n <div style={styles.header}>\n <label style={styles.label}>\n {label}\n </label>\n {value && !readOnly && (\n <button\n type=\"button\"\n onClick={handleClear}\n style={styles.clearButton}\n title=\"Reset to default\"\n >\n <X style={{ width: '16px', height: '16px' }} />\n </button>\n )}\n </div>\n\n <div style={styles.buttonGroup}>\n {options.map(({ value: optionValue, icon: Icon, title }) => {\n const isActive = currentValue === optionValue\n return (\n <button\n key={optionValue}\n type=\"button\"\n onClick={() => handleChange(optionValue)}\n disabled={readOnly}\n style={{\n ...(isActive ? styles.buttonActive : styles.button),\n ...(readOnly ? styles.buttonDisabled : {}),\n }}\n title={title}\n >\n <Icon style={{ width: '16px', height: '16px' }} />\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n\nexport const VerticalAlignmentField = memo(VerticalAlignmentFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\ninterface CreateVerticalAlignmentFieldConfig {\n label?: string\n defaultValue?: VerticalAlignment\n}\n\n/**\n * Creates a Puck field configuration for vertical/self alignment control\n *\n * @example\n * ```ts\n * fields: {\n * verticalAlignment: createVerticalAlignmentField({ label: 'Vertical Alignment' }),\n * }\n * ```\n */\nexport function createVerticalAlignmentField(\n config: CreateVerticalAlignmentFieldConfig = {}\n): CustomField<VerticalAlignment | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <VerticalAlignmentField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n defaultValue={config.defaultValue}\n />\n ),\n }\n}\n"],"names":["React","useCallback","memo","AlignStartVertical","AlignCenterVertical","AlignEndVertical","X","styles","container","display","flexDirection","gap","header","alignItems","justifyContent","label","fontSize","fontWeight","color","clearButton","width","height","padding","border","borderRadius","backgroundColor","cursor","buttonGroup","button","buttonActive","buttonDisabled","opacity","VerticalAlignmentFieldInner","value","onChange","readOnly","defaultValue","currentValue","handleChange","alignment","handleClear","options","icon","title","div","className","style","type","onClick","map","optionValue","Icon","isActive","disabled","VerticalAlignmentField","createVerticalAlignmentField","config","render"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WidthField.d.ts","sourceRoot":"","sources":["../../src/fields/WidthField.tsx"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAgD,MAAM,OAAO,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAUnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAU7C,UAAU,eAAe;IACvB,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAA;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAoPD,iBAAS,eAAe,CAAC,EACvB,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,GACT,EAAE,eAAe,qBAoMjB;AAED,eAAO,MAAM,UAAU,mDAAwB,CAAA;AAM/C;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,CAajC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fields/WidthField.tsx"],"sourcesContent":["'use client'\n\n/**\n * WidthField - Custom Puck field for flexible width control\n *\n * This component provides:\n * - Width mode selector (Full, Contained, Custom)\n * - Custom max-width input with unit selector (px, %, rem, vw)\n * - Content alignment (left, center, right)\n * - Preset quick-select buttons for common widths\n */\n\nimport React, { useCallback, memo, type CSSProperties } from 'react'\nimport type { CustomField } from '@puckeditor/core'\nimport {\n X,\n AlignLeft,\n AlignCenter,\n AlignRight,\n MoveHorizontal,\n Container,\n SlidersHorizontal,\n} from 'lucide-react'\nimport type { WidthValue } from './shared.js'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype WidthUnit = 'px' | 'rem' | '%' | 'vw'\ntype WidthMode = 'full' | 'contained' | 'custom'\ntype ContentAlignment = 'left' | 'center' | 'right'\n\ninterface WidthFieldProps {\n value: WidthValue | null\n onChange: (value: WidthValue | null) => void\n label?: string\n readOnly?: boolean\n}\n\n// =============================================================================\n// Default Value\n// =============================================================================\n\nconst DEFAULT_VALUE: WidthValue = {\n mode: 'contained',\n maxWidth: 1200,\n unit: 'px',\n alignment: 'center',\n}\n\n// =============================================================================\n// Preset Widths\n// =============================================================================\n\nconst WIDTH_PRESETS = [\n { label: 'Narrow', value: 680 },\n { label: 'Medium', value: 960 },\n { label: 'Wide', value: 1200 },\n { label: 'XL', value: 1440 },\n]\n\n// =============================================================================\n// Styles\n// =============================================================================\n\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n } as CSSProperties,\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n } as CSSProperties,\n label: {\n fontSize: '14px',\n fontWeight: 500,\n color: 'var(--theme-elevation-800)',\n } as CSSProperties,\n clearButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '24px',\n height: '24px',\n padding: 0,\n border: 'none',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: 'var(--theme-elevation-500)',\n cursor: 'pointer',\n } as CSSProperties,\n modeGroup: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: '4px',\n } as CSSProperties,\n modeButton: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding: '4px 12px',\n fontSize: '12px',\n fontWeight: 500,\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 modeButtonActive: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding: '4px 12px',\n fontSize: '12px',\n fontWeight: 500,\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 controlsPanel: {\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n padding: '12px',\n backgroundColor: 'var(--theme-elevation-50)',\n borderRadius: '6px',\n } as CSSProperties,\n sectionLabel: {\n fontSize: '10px',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n color: 'var(--theme-elevation-500)',\n } as CSSProperties,\n presetGroup: {\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n } as CSSProperties,\n presetButtons: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: '4px',\n } as CSSProperties,\n presetButton: {\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 presetButtonActive: {\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 inputGroup: {\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n } as CSSProperties,\n inputRow: {\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n gap: '8px',\n } as CSSProperties,\n input: {\n flex: 1,\n minWidth: '80px',\n height: '32px',\n padding: '0 8px',\n fontSize: '14px',\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 unitGroup: {\n display: 'flex',\n flexShrink: 0,\n gap: '4px',\n } as CSSProperties,\n unitButton: {\n height: '32px',\n padding: '0 8px',\n fontSize: '12px',\n fontFamily: 'monospace',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: '4px',\n backgroundColor: 'var(--theme-bg)',\n color: 'var(--theme-elevation-500)',\n cursor: 'pointer',\n } as CSSProperties,\n unitButtonActive: {\n height: '32px',\n padding: '0 8px',\n fontSize: '12px',\n fontFamily: 'monospace',\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 footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n flexWrap: 'wrap',\n gap: '8px',\n } as CSSProperties,\n alignGroup: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n } as CSSProperties,\n alignLabel: {\n fontSize: '12px',\n color: 'var(--theme-elevation-500)',\n flexShrink: 0,\n } as CSSProperties,\n alignButtons: {\n display: 'flex',\n gap: '4px',\n } as CSSProperties,\n alignButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n padding: 0,\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 alignButtonActive: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n padding: 0,\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 alignButtonDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n } as CSSProperties,\n summary: {\n fontSize: '12px',\n color: 'var(--theme-elevation-500)',\n fontFamily: 'monospace',\n } as CSSProperties,\n}\n\n// =============================================================================\n// WidthField Component\n// =============================================================================\n\nfunction WidthFieldInner({\n value,\n onChange,\n label,\n readOnly,\n}: WidthFieldProps) {\n const currentValue = value || DEFAULT_VALUE\n\n const handleModeChange = useCallback((mode: WidthMode) => {\n if (mode === 'full') {\n onChange({\n ...currentValue,\n mode,\n alignment: 'center',\n })\n } else {\n onChange({\n ...currentValue,\n mode,\n })\n }\n }, [currentValue, onChange])\n\n const handleMaxWidthChange = useCallback((maxWidth: number) => {\n onChange({\n ...currentValue,\n maxWidth,\n })\n }, [currentValue, onChange])\n\n const handleUnitChange = useCallback((unit: WidthUnit) => {\n onChange({\n ...currentValue,\n unit,\n })\n }, [currentValue, onChange])\n\n const handleAlignmentChange = useCallback((alignment: ContentAlignment) => {\n onChange({\n ...currentValue,\n alignment,\n })\n }, [currentValue, onChange])\n\n const handlePresetSelect = useCallback((presetValue: number) => {\n onChange({\n ...currentValue,\n mode: 'contained',\n maxWidth: presetValue,\n unit: 'px',\n })\n }, [currentValue, onChange])\n\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const modeConfig = [\n { mode: 'full' as WidthMode, icon: MoveHorizontal, label: 'Full', title: 'Full width (100%)' },\n { mode: 'contained' as WidthMode, icon: Container, label: 'Contain', title: 'Contained (centered with max-width)' },\n { mode: 'custom' as WidthMode, icon: SlidersHorizontal, label: 'Custom', title: 'Custom width settings' },\n ]\n\n const alignmentConfig = [\n { alignment: 'left' as ContentAlignment, icon: AlignLeft, title: 'Align left' },\n { alignment: 'center' as ContentAlignment, icon: AlignCenter, title: 'Align center' },\n { alignment: 'right' as ContentAlignment, icon: AlignRight, title: 'Align right' },\n ]\n\n return (\n <div className=\"puck-field\" style={styles.container}>\n {/* Header with label and clear */}\n <div style={styles.header}>\n {label && (\n <label style={styles.label}>{label}</label>\n )}\n {value && !readOnly && (\n <button\n type=\"button\"\n onClick={handleClear}\n style={styles.clearButton}\n title=\"Reset to default\"\n >\n <X style={{ width: '16px', height: '16px' }} />\n </button>\n )}\n </div>\n\n {/* Width Mode Selector */}\n <div style={styles.modeGroup}>\n {modeConfig.map(({ mode, icon: Icon, label: modeLabel, title }) => {\n const isActive = currentValue.mode === mode\n return (\n <button\n key={mode}\n type=\"button\"\n onClick={() => handleModeChange(mode)}\n disabled={readOnly}\n style={isActive ? styles.modeButtonActive : styles.modeButton}\n title={title}\n >\n <Icon style={{ width: '14px', height: '14px' }} />\n {modeLabel}\n </button>\n )\n })}\n </div>\n\n {/* Max Width Controls */}\n {currentValue.mode !== 'full' && (\n <div style={styles.controlsPanel as CSSProperties}>\n {/* Preset Quick Selects */}\n <div style={styles.presetGroup as CSSProperties}>\n <label style={styles.sectionLabel as CSSProperties}>Presets</label>\n <div style={styles.presetButtons}>\n {WIDTH_PRESETS.map((preset) => {\n const isActive = currentValue.maxWidth === preset.value && currentValue.unit === 'px'\n return (\n <button\n key={preset.value}\n type=\"button\"\n onClick={() => handlePresetSelect(preset.value)}\n disabled={readOnly}\n style={isActive ? styles.presetButtonActive : styles.presetButton}\n >\n {preset.label}\n </button>\n )\n })}\n </div>\n </div>\n\n {/* Custom Width Input */}\n <div style={styles.inputGroup as CSSProperties}>\n <label style={styles.sectionLabel as CSSProperties}>Max Width</label>\n <div style={styles.inputRow}>\n <input\n type=\"number\"\n min={0}\n value={currentValue.maxWidth}\n onChange={(e) => handleMaxWidthChange(parseInt(e.target.value, 10) || 0)}\n disabled={readOnly}\n style={styles.input}\n />\n <div style={styles.unitGroup}>\n {(['px', '%', 'rem', 'vw'] as WidthUnit[]).map((unit) => {\n const isActive = currentValue.unit === unit\n return (\n <button\n key={unit}\n type=\"button\"\n onClick={() => handleUnitChange(unit)}\n disabled={readOnly}\n style={isActive ? styles.unitButtonActive : styles.unitButton}\n >\n {unit}\n </button>\n )\n })}\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Alignment Controls */}\n <div style={styles.footer}>\n <div style={styles.alignGroup}>\n <label style={styles.alignLabel}>Align:</label>\n <div style={styles.alignButtons}>\n {alignmentConfig.map(({ alignment, icon: Icon, title }) => {\n const isActive = currentValue.alignment === alignment\n const isDisabled = readOnly || currentValue.mode === 'full'\n return (\n <button\n key={alignment}\n type=\"button\"\n onClick={() => handleAlignmentChange(alignment)}\n disabled={isDisabled}\n style={{\n ...(isActive ? styles.alignButtonActive : styles.alignButton),\n ...(isDisabled ? styles.alignButtonDisabled : {}),\n }}\n title={title}\n >\n <Icon style={{ width: '14px', height: '14px' }} />\n </button>\n )\n })}\n </div>\n </div>\n {/* Current value summary */}\n <span style={styles.summary}>\n {currentValue.mode === 'full'\n ? '100%'\n : `${currentValue.maxWidth}${currentValue.unit}`\n }\n </span>\n </div>\n </div>\n )\n}\n\nexport const WidthField = memo(WidthFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for width control\n */\nexport function createWidthField(config: {\n label?: string\n}): CustomField<WidthValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <WidthField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n />\n ),\n }\n}\n"],"names":["React","useCallback","memo","X","AlignLeft","AlignCenter","AlignRight","MoveHorizontal","Container","SlidersHorizontal","DEFAULT_VALUE","mode","maxWidth","unit","alignment","WIDTH_PRESETS","label","value","styles","container","display","flexDirection","gap","header","alignItems","justifyContent","fontSize","fontWeight","color","clearButton","width","height","padding","border","borderRadius","backgroundColor","cursor","modeGroup","flexWrap","modeButton","modeButtonActive","controlsPanel","sectionLabel","textTransform","letterSpacing","presetGroup","presetButtons","presetButton","presetButtonActive","inputGroup","inputRow","input","flex","minWidth","fontFamily","unitGroup","flexShrink","unitButton","unitButtonActive","footer","alignGroup","alignLabel","alignButtons","alignButton","alignButtonActive","alignButtonDisabled","opacity","summary","WidthFieldInner","onChange","readOnly","currentValue","handleModeChange","handleMaxWidthChange","handleUnitChange","handleAlignmentChange","handlePresetSelect","presetValue","handleClear","modeConfig","icon","title","alignmentConfig","div","className","style","button","type","onClick","map","Icon","modeLabel","isActive","disabled","preset","min","e","parseInt","target","isDisabled","span","WidthField","createWidthField","config","render"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fields/index.ts"],"names":[],"mappings":"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"}
|
package/dist/fields/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fields/index.ts"],"sourcesContent":["/**\n * Custom Puck fields for the visual editor\n *\n * These fields provide enhanced editing experiences for specific content types.\n */\n\n// Shared field definitions\nexport * from './shared.js'\n\n// Custom field components\nexport { MediaField, createMediaField } from './MediaField.js'\nexport type { MediaReference } from './MediaField.js'\n\nexport { ColorPickerField, createColorPickerField, colorToRgba } from './ColorPickerField.js'\n\n// =============================================================================\n// RichText Field\n// Uses Puck's native richtext with custom TipTap extensions for colors, sizes, etc.\n// =============================================================================\nexport {\n createRichTextField,\n fullRichTextField,\n minimalRichTextField,\n sidebarRichTextField,\n type CreateRichTextFieldOptions,\n // Extensions for advanced customization\n FontSize,\n // Controls for custom menu building\n ColorPickerControl,\n ColorPickerPanel,\n FontSizeControl,\n HighlightControl,\n // Utilities\n normalizeHex,\n hexToRgba,\n parseColor,\n FONT_SIZES,\n FONT_SIZE_UNITS,\n controlStyles,\n type FontSizeUnit,\n} from './richtext/index.js'\n\nexport { PaddingField, createPaddingField } from './PaddingField.js'\n\nexport { MarginField, createMarginField } from './MarginField.js'\nexport type { MarginValue } from './MarginField.js'\n\nexport { BorderField, createBorderField } from './BorderField.js'\n\nexport { WidthField, createWidthField } from './WidthField.js'\n\nexport { DimensionsField, createDimensionsField } from './DimensionsField.js'\nexport {\n dimensionsValueToCSS,\n getDimensionsSummary,\n isLegacyWidthValue,\n migrateWidthValue,\n} from './shared.js'\nexport type {\n DimensionsValue,\n DimensionConstraint,\n DimensionsUnit,\n DimensionsMode,\n ContentAlignment,\n} from './shared.js'\n\nexport {\n LockedTextField,\n LockedRadioField,\n createLockedTextField,\n createLockedRadioField,\n lockedSlugField,\n lockedHomepageField,\n} from './LockedField.js'\n\nexport { AlignmentField, createAlignmentField } from './AlignmentField.js'\nexport type { Alignment } from './AlignmentField.js'\n\nexport {\n JustifyContentField,\n AlignItemsField,\n createJustifyContentField,\n createAlignItemsField,\n} from './FlexAlignmentField.js'\nexport type { JustifyContent, AlignItems } from './FlexAlignmentField.js'\n\nexport { VerticalAlignmentField, createVerticalAlignmentField } from './VerticalAlignmentField.js'\nexport type { VerticalAlignment } from './VerticalAlignmentField.js'\n\nexport {\n ContentAlignmentField,\n createContentAlignmentField,\n alignmentToFlexCSS,\n alignmentToGridCSS,\n alignmentToPlaceSelfCSS,\n alignmentToTailwind,\n} from './ContentAlignmentField.js'\nexport type {\n ContentAlignmentValue,\n HorizontalAlign,\n VerticalAlign,\n PositionLabel,\n} from './ContentAlignmentField.js'\n\nexport { SizeField, createSizeField, sizeValueToCSS, getSizeClasses } from './SizeField.js'\nexport type { SizeValue, SizeMode, SizeUnit } from './SizeField.js'\n\nexport { GradientEditor } from './GradientEditor.js'\n\nexport { BackgroundField, createBackgroundField } from './BackgroundField.js'\nexport type {\n BackgroundValue,\n BackgroundImageValue,\n BackgroundOverlay,\n GradientValue,\n GradientStop,\n GradientMask,\n} from './shared.js'\nexport { backgroundValueToCSS, gradientValueToCSS, getBackgroundImageOpacity } from './shared.js'\n\nexport { ResponsiveField, createResponsiveField } from './ResponsiveField.js'\nexport type { Breakpoint, ResponsiveValue, VisibilityValue, ResponsiveCSSResult } from './shared.js'\nexport {\n BREAKPOINTS,\n isResponsiveValue,\n responsiveValueToCSS,\n cssPropertiesToString,\n visibilityValueToCSS,\n DEFAULT_VISIBILITY,\n} from './shared.js'\n\nexport {\n ResponsiveVisibilityField,\n createResponsiveVisibilityField,\n} from './ResponsiveVisibilityField.js'\n\nexport { AnimationField, createAnimationField } from './AnimationField.js'\nexport type {\n AnimationValue,\n EasingFunction,\n AdvancedEasingFunction,\n EntranceAnimation,\n AnimationOrigin,\n AnimationCategory,\n StaggerConfig,\n StaggerDirection,\n} from './shared.js'\nexport {\n animationValueToCSS,\n getEntranceAnimationStyles,\n getAnimationCSSVariables,\n getDefaultEasingForAnimation,\n getRelevantIntensityControls,\n getStaggerDelay,\n generateStaggerStyles,\n EASING_CSS_MAP,\n ANIMATION_CATEGORIES,\n DEFAULT_ANIMATION,\n} from './shared.js'\n\nexport { TransformField, createTransformField } from './TransformField.js'\nexport type { TransformValue, TransformOrigin } from './shared.js'\nexport { transformValueToCSS, DEFAULT_TRANSFORM } from './shared.js'\n\n// =============================================================================\n// Legacy CSS Utilities (Deprecated)\n// =============================================================================\n\n/**\n * @deprecated No longer needed. RichText component now uses Tailwind Typography's\n * `prose` class for styling. Install @tailwindcss/typography instead.\n */\nexport const RICHTEXT_OUTPUT_CSS = ''\n\n/**\n * @deprecated No longer needed. RichText component now uses Tailwind Typography's\n * `prose` class for styling. Install @tailwindcss/typography instead.\n */\nexport function injectRichtextStyles() {\n console.warn(\n 'injectRichtextStyles() is deprecated. RichText now uses Tailwind Typography. ' +\n 'Install @tailwindcss/typography and use the `prose` class instead.'\n )\n}\n\n// =============================================================================\n// Page-Tree Integration Fields\n// =============================================================================\n\nexport { FolderPickerField, createFolderPickerField } from './FolderPickerField.js'\nexport {\n PageSegmentField,\n createPageSegmentField,\n LockedPageSegmentField,\n createLockedPageSegmentField,\n} from './PageSegmentField.js'\nexport { SlugPreviewField, createSlugPreviewField } from './SlugPreviewField.js'\n"],"names":["MediaField","createMediaField","ColorPickerField","createColorPickerField","colorToRgba","createRichTextField","fullRichTextField","minimalRichTextField","sidebarRichTextField","FontSize","ColorPickerControl","ColorPickerPanel","FontSizeControl","HighlightControl","normalizeHex","hexToRgba","parseColor","FONT_SIZES","FONT_SIZE_UNITS","controlStyles","PaddingField","createPaddingField","MarginField","createMarginField","BorderField","createBorderField","WidthField","createWidthField","DimensionsField","createDimensionsField","dimensionsValueToCSS","getDimensionsSummary","isLegacyWidthValue","migrateWidthValue","LockedTextField","LockedRadioField","createLockedTextField","createLockedRadioField","lockedSlugField","lockedHomepageField","AlignmentField","createAlignmentField","JustifyContentField","AlignItemsField","createJustifyContentField","createAlignItemsField","VerticalAlignmentField","createVerticalAlignmentField","ContentAlignmentField","createContentAlignmentField","alignmentToFlexCSS","alignmentToGridCSS","alignmentToPlaceSelfCSS","alignmentToTailwind","SizeField","createSizeField","sizeValueToCSS","getSizeClasses","GradientEditor","BackgroundField","createBackgroundField","backgroundValueToCSS","gradientValueToCSS","getBackgroundImageOpacity","ResponsiveField","createResponsiveField","BREAKPOINTS","isResponsiveValue","responsiveValueToCSS","cssPropertiesToString","visibilityValueToCSS","DEFAULT_VISIBILITY","ResponsiveVisibilityField","createResponsiveVisibilityField","AnimationField","createAnimationField","animationValueToCSS","getEntranceAnimationStyles","getAnimationCSSVariables","getDefaultEasingForAnimation","getRelevantIntensityControls","getStaggerDelay","generateStaggerStyles","EASING_CSS_MAP","ANIMATION_CATEGORIES","DEFAULT_ANIMATION","TransformField","createTransformField","transformValueToCSS","DEFAULT_TRANSFORM","RICHTEXT_OUTPUT_CSS","injectRichtextStyles","console","warn","FolderPickerField","createFolderPickerField","PageSegmentField","createPageSegmentField","LockedPageSegmentField","createLockedPageSegmentField","SlugPreviewField","createSlugPreviewField"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ColorPickerControl.d.ts","sourceRoot":"","sources":["../../../../src/fields/richtext/controls/ColorPickerControl.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,KAAoD,MAAM,OAAO,CAAA;AAKxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAE3C,UAAU,uBAAuB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;CACjC;AAED,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,uBAAuB,qBA2DnF;AAMD,UAAU,qBAAqB;IAC7B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAC7C,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,YAAY,EACZ,aAAa,EACb,OAAO,EACP,IAAI,EACJ,WAAkB,GACnB,EAAE,qBAAqB,qBAqLvB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/fields/richtext/controls/ColorPickerControl.tsx"],"sourcesContent":["'use client'\n\n/**\n * ColorPickerControl - Text color control for Puck RichText toolbar\n *\n * A dropdown color picker with:\n * - Native color input\n * - Hex input with validation\n * - Opacity slider (RGBA support)\n * - Theme color presets\n * - \"Theme Color (Auto)\" option for dark/light mode adaptation\n */\n\nimport React, { useState, useCallback, type CSSProperties } from 'react'\nimport { Palette, ChevronDown } from 'lucide-react'\nimport { useTheme } from '../../../theme/index.js'\nimport { parseColor, normalizeHex, hexToRgba, controlStyles } from './shared.js'\nimport { Dropdown } from './DropdownPortal.js'\nimport type { Editor } from '@tiptap/react'\n\ninterface ColorPickerControlProps {\n editor: Editor\n currentColor: string | undefined\n}\n\nexport function ColorPickerControl({ editor, currentColor }: ColorPickerControlProps) {\n const [isOpen, setIsOpen] = useState(false)\n\n const handleColorChange = useCallback(\n (color: string | null) => {\n if (color) {\n editor.chain().focus().setColor(color).run()\n } else {\n editor.chain().focus().unsetColor().run()\n }\n },\n [editor]\n )\n\n const close = useCallback(() => setIsOpen(false), [])\n\n const hasColor = Boolean(currentColor)\n\n const trigger = (\n <button\n type=\"button\"\n title=\"Text Color\"\n style={{\n ...controlStyles.dropdownTrigger,\n ...(hasColor ? controlStyles.dropdownTriggerActive : {}),\n }}\n >\n <Palette style={controlStyles.icon} />\n <ChevronDown style={{ width: '12px', height: '12px' }} />\n {/* Color indicator */}\n {currentColor && (\n <span\n style={{\n position: 'absolute',\n bottom: '2px',\n left: '50%',\n transform: 'translateX(-50%)',\n width: '12px',\n height: '3px',\n borderRadius: '1px',\n backgroundColor: currentColor,\n }}\n />\n )}\n </button>\n )\n\n return (\n <div style={{ position: 'relative' }}>\n <Dropdown isOpen={isOpen} onOpenChange={setIsOpen} trigger={trigger} minWidth={260}>\n <ColorPickerPanel\n currentColor={currentColor}\n onColorChange={handleColorChange}\n onClose={close}\n mode=\"text\"\n />\n </Dropdown>\n </div>\n )\n}\n\n// =============================================================================\n// Color Picker Panel (shared between text and highlight)\n// =============================================================================\n\ninterface ColorPickerPanelProps {\n currentColor: string | undefined\n onColorChange: (color: string | null) => void\n onClose: () => void\n mode: 'text' | 'highlight'\n showOpacity?: boolean\n}\n\nexport function ColorPickerPanel({\n currentColor,\n onColorChange,\n onClose,\n mode,\n showOpacity = true,\n}: ColorPickerPanelProps) {\n const theme = useTheme()\n const presets = theme.colorPresets\n const parsed = parseColor(currentColor)\n\n const [hex, setHex] = useState(parsed.hex)\n const [hexInput, setHexInput] = useState(parsed.hex)\n const [opacity, setOpacity] = useState(parsed.opacity)\n const [hoverTheme, setHoverTheme] = useState(false)\n\n // Apply color (converts to rgba if opacity < 100)\n const applyColor = useCallback(\n (h: string, o: number) => {\n if (o < 100) {\n onColorChange(hexToRgba(h, o))\n } else {\n onColorChange(h)\n }\n },\n [onColorChange]\n )\n\n const handleColorInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newHex = e.target.value\n setHex(newHex)\n setHexInput(newHex)\n applyColor(newHex, opacity)\n },\n [opacity, applyColor]\n )\n\n const handleHexInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target.value\n setHexInput(input)\n const normalized = normalizeHex(input)\n if (normalized) {\n setHex(normalized)\n applyColor(normalized, opacity)\n }\n },\n [opacity, applyColor]\n )\n\n const handleHexInputBlur = useCallback(() => {\n setHexInput(hex)\n }, [hex])\n\n const handleOpacityChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newOpacity = parseInt(e.target.value, 10)\n setOpacity(newOpacity)\n applyColor(hex, newOpacity)\n },\n [hex, applyColor]\n )\n\n const handlePresetClick = useCallback(\n (preset: { hex: string; label: string }) => {\n setHex(preset.hex)\n setHexInput(preset.hex)\n setOpacity(100)\n applyColor(preset.hex, 100)\n onClose()\n },\n [applyColor, onClose]\n )\n\n const handleClearColor = useCallback(() => {\n onColorChange(null)\n onClose()\n }, [onColorChange, onClose])\n\n const previewColor = hexToRgba(hex, opacity)\n\n return (\n <div style={controlStyles.colorPickerContainer as CSSProperties}>\n {/* Theme/Auto color option */}\n <button\n type=\"button\"\n onClick={handleClearColor}\n onMouseEnter={() => setHoverTheme(true)}\n onMouseLeave={() => setHoverTheme(false)}\n style={{\n ...controlStyles.colorPickerThemeButton,\n ...(hoverTheme ? { backgroundColor: 'var(--puck-color-grey-01)' } : {}),\n }}\n >\n <span style={controlStyles.colorPickerThemeSwatch} />\n {mode === 'text' ? 'Theme Color (Auto)' : 'Remove Highlight'}\n </button>\n\n {/* Color picker row: native picker + hex input + preview */}\n <div style={controlStyles.colorPickerRow}>\n <input\n type=\"color\"\n value={hex}\n onChange={handleColorInputChange}\n style={controlStyles.colorPickerInput}\n title=\"Pick a color\"\n />\n <input\n type=\"text\"\n value={hexInput}\n onChange={handleHexInputChange}\n onBlur={handleHexInputBlur}\n placeholder=\"#000000\"\n style={controlStyles.colorPickerHexInput}\n />\n <div\n style={controlStyles.colorPickerPreview as CSSProperties}\n title={`${hex} at ${opacity}% opacity`}\n >\n <div style={controlStyles.colorPickerCheckerboard as CSSProperties} />\n <div\n style={{ ...(controlStyles.colorPickerOverlay as CSSProperties), backgroundColor: previewColor }}\n />\n </div>\n </div>\n\n {/* Opacity slider */}\n {showOpacity && (\n <div style={controlStyles.colorPickerOpacitySection as CSSProperties}>\n <div style={controlStyles.colorPickerOpacityHeader}>\n <label style={controlStyles.colorPickerOpacityLabel}>Opacity</label>\n <span style={controlStyles.colorPickerOpacityValue}>{opacity}%</span>\n </div>\n <div style={controlStyles.colorPickerOpacitySlider as CSSProperties}>\n <div style={controlStyles.colorPickerCheckerboard as CSSProperties} />\n <div\n style={{\n ...(controlStyles.colorPickerOverlay as CSSProperties),\n background: `linear-gradient(to right, transparent 0%, ${hex} 100%)`,\n }}\n />\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={opacity}\n onChange={handleOpacityChange}\n style={controlStyles.colorPickerOpacityInputRange as CSSProperties}\n />\n <div\n style={{\n ...(controlStyles.colorPickerOpacityThumb as CSSProperties),\n left: `calc(${opacity}% - 2px)`,\n }}\n />\n </div>\n </div>\n )}\n\n {/* Preset swatches */}\n {presets.length > 0 && (\n <div>\n <div style={controlStyles.colorPickerPresetsLabel}>Presets</div>\n <div style={controlStyles.colorPickerPresetsGrid as CSSProperties}>\n {presets.map((preset) => {\n const isSelected = hex.toLowerCase() === preset.hex.toLowerCase()\n return (\n <button\n key={preset.hex}\n type=\"button\"\n onClick={() => handlePresetClick(preset)}\n style={{\n ...(isSelected\n ? controlStyles.colorPickerPresetButtonSelected\n : controlStyles.colorPickerPresetButton),\n backgroundColor: preset.hex,\n }}\n title={preset.label}\n />\n )\n })}\n </div>\n </div>\n )}\n </div>\n )\n}\n"],"names":["React","useState","useCallback","Palette","ChevronDown","useTheme","parseColor","normalizeHex","hexToRgba","controlStyles","Dropdown","ColorPickerControl","editor","currentColor","isOpen","setIsOpen","handleColorChange","color","chain","focus","setColor","run","unsetColor","close","hasColor","Boolean","trigger","button","type","title","style","dropdownTrigger","dropdownTriggerActive","icon","width","height","span","position","bottom","left","transform","borderRadius","backgroundColor","div","onOpenChange","minWidth","ColorPickerPanel","onColorChange","onClose","mode","showOpacity","theme","presets","colorPresets","parsed","hex","setHex","hexInput","setHexInput","opacity","setOpacity","hoverTheme","setHoverTheme","applyColor","h","o","handleColorInputChange","e","newHex","target","value","handleHexInputChange","input","normalized","handleHexInputBlur","handleOpacityChange","newOpacity","parseInt","handlePresetClick","preset","handleClearColor","previewColor","colorPickerContainer","onClick","onMouseEnter","onMouseLeave","colorPickerThemeButton","colorPickerThemeSwatch","colorPickerRow","onChange","colorPickerInput","onBlur","placeholder","colorPickerHexInput","colorPickerPreview","colorPickerCheckerboard","colorPickerOverlay","colorPickerOpacitySection","colorPickerOpacityHeader","label","colorPickerOpacityLabel","colorPickerOpacityValue","colorPickerOpacitySlider","background","min","max","colorPickerOpacityInputRange","colorPickerOpacityThumb","length","colorPickerPresetsLabel","colorPickerPresetsGrid","map","isSelected","toLowerCase","colorPickerPresetButtonSelected","colorPickerPresetButton"],"mappings":"AAAA;;AAEA;;;;;;;;;CASC,GAED,OAAOA,SAASC,QAAQ,EAAEC,WAAW,QAA4B,QAAO;AACxE,SAASC,OAAO,EAAEC,WAAW,QAAQ,eAAc;AACnD,SAASC,QAAQ,QAAQ,0BAAyB;AAClD,SAASC,UAAU,EAAEC,YAAY,EAAEC,SAAS,EAAEC,aAAa,QAAQ,cAAa;AAChF,SAASC,QAAQ,QAAQ,sBAAqB;AAQ9C,OAAO,SAASC,mBAAmB,EAAEC,MAAM,EAAEC,YAAY,EAA2B;IAClF,MAAM,CAACC,QAAQC,UAAU,GAAGd,SAAS;IAErC,MAAMe,oBAAoBd,YACxB,CAACe;QACC,IAAIA,OAAO;YACTL,OAAOM,KAAK,GAAGC,KAAK,GAAGC,QAAQ,CAACH,OAAOI,GAAG;QAC5C,OAAO;YACLT,OAAOM,KAAK,GAAGC,KAAK,GAAGG,UAAU,GAAGD,GAAG;QACzC;IACF,GACA;QAACT;KAAO;IAGV,MAAMW,QAAQrB,YAAY,IAAMa,UAAU,QAAQ,EAAE;IAEpD,MAAMS,WAAWC,QAAQZ;IAEzB,MAAMa,wBACJ,MAACC;QACCC,MAAK;QACLC,OAAM;QACNC,OAAO;YACL,GAAGrB,cAAcsB,eAAe;YAChC,GAAIP,WAAWf,cAAcuB,qBAAqB,GAAG,CAAC,CAAC;QACzD;;0BAEA,KAAC7B;gBAAQ2B,OAAOrB,cAAcwB,IAAI;;0BAClC,KAAC7B;gBAAY0B,OAAO;oBAAEI,OAAO;oBAAQC,QAAQ;gBAAO;;YAEnDtB,8BACC,KAACuB;gBACCN,OAAO;oBACLO,UAAU;oBACVC,QAAQ;oBACRC,MAAM;oBACNC,WAAW;oBACXN,OAAO;oBACPC,QAAQ;oBACRM,cAAc;oBACdC,iBAAiB7B;gBACnB;;;;IAMR,qBACE,KAAC8B;QAAIb,OAAO;YAAEO,UAAU;QAAW;kBACjC,cAAA,KAAC3B;YAASI,QAAQA;YAAQ8B,cAAc7B;YAAWW,SAASA;YAASmB,UAAU;sBAC7E,cAAA,KAACC;gBACCjC,cAAcA;gBACdkC,eAAe/B;gBACfgC,SAASzB;gBACT0B,MAAK;;;;AAKf;AAcA,OAAO,SAASH,iBAAiB,EAC/BjC,YAAY,EACZkC,aAAa,EACbC,OAAO,EACPC,IAAI,EACJC,cAAc,IAAI,EACI;IACtB,MAAMC,QAAQ9C;IACd,MAAM+C,UAAUD,MAAME,YAAY;IAClC,MAAMC,SAAShD,WAAWO;IAE1B,MAAM,CAAC0C,KAAKC,OAAO,GAAGvD,SAASqD,OAAOC,GAAG;IACzC,MAAM,CAACE,UAAUC,YAAY,GAAGzD,SAASqD,OAAOC,GAAG;IACnD,MAAM,CAACI,SAASC,WAAW,GAAG3D,SAASqD,OAAOK,OAAO;IACrD,MAAM,CAACE,YAAYC,cAAc,GAAG7D,SAAS;IAE7C,kDAAkD;IAClD,MAAM8D,aAAa7D,YACjB,CAAC8D,GAAWC;QACV,IAAIA,IAAI,KAAK;YACXlB,cAAcvC,UAAUwD,GAAGC;QAC7B,OAAO;YACLlB,cAAciB;QAChB;IACF,GACA;QAACjB;KAAc;IAGjB,MAAMmB,yBAAyBhE,YAC7B,CAACiE;QACC,MAAMC,SAASD,EAAEE,MAAM,CAACC,KAAK;QAC7Bd,OAAOY;QACPV,YAAYU;QACZL,WAAWK,QAAQT;IACrB,GACA;QAACA;QAASI;KAAW;IAGvB,MAAMQ,uBAAuBrE,YAC3B,CAACiE;QACC,MAAMK,QAAQL,EAAEE,MAAM,CAACC,KAAK;QAC5BZ,YAAYc;QACZ,MAAMC,aAAalE,aAAaiE;QAChC,IAAIC,YAAY;YACdjB,OAAOiB;YACPV,WAAWU,YAAYd;QACzB;IACF,GACA;QAACA;QAASI;KAAW;IAGvB,MAAMW,qBAAqBxE,YAAY;QACrCwD,YAAYH;IACd,GAAG;QAACA;KAAI;IAER,MAAMoB,sBAAsBzE,YAC1B,CAACiE;QACC,MAAMS,aAAaC,SAASV,EAAEE,MAAM,CAACC,KAAK,EAAE;QAC5CV,WAAWgB;QACXb,WAAWR,KAAKqB;IAClB,GACA;QAACrB;QAAKQ;KAAW;IAGnB,MAAMe,oBAAoB5E,YACxB,CAAC6E;QACCvB,OAAOuB,OAAOxB,GAAG;QACjBG,YAAYqB,OAAOxB,GAAG;QACtBK,WAAW;QACXG,WAAWgB,OAAOxB,GAAG,EAAE;QACvBP;IACF,GACA;QAACe;QAAYf;KAAQ;IAGvB,MAAMgC,mBAAmB9E,YAAY;QACnC6C,cAAc;QACdC;IACF,GAAG;QAACD;QAAeC;KAAQ;IAE3B,MAAMiC,eAAezE,UAAU+C,KAAKI;IAEpC,qBACE,MAAChB;QAAIb,OAAOrB,cAAcyE,oBAAoB;;0BAE5C,MAACvD;gBACCC,MAAK;gBACLuD,SAASH;gBACTI,cAAc,IAAMtB,cAAc;gBAClCuB,cAAc,IAAMvB,cAAc;gBAClChC,OAAO;oBACL,GAAGrB,cAAc6E,sBAAsB;oBACvC,GAAIzB,aAAa;wBAAEnB,iBAAiB;oBAA4B,IAAI,CAAC,CAAC;gBACxE;;kCAEA,KAACN;wBAAKN,OAAOrB,cAAc8E,sBAAsB;;oBAChDtC,SAAS,SAAS,uBAAuB;;;0BAI5C,MAACN;gBAAIb,OAAOrB,cAAc+E,cAAc;;kCACtC,KAAChB;wBACC5C,MAAK;wBACL0C,OAAOf;wBACPkC,UAAUvB;wBACVpC,OAAOrB,cAAciF,gBAAgB;wBACrC7D,OAAM;;kCAER,KAAC2C;wBACC5C,MAAK;wBACL0C,OAAOb;wBACPgC,UAAUlB;wBACVoB,QAAQjB;wBACRkB,aAAY;wBACZ9D,OAAOrB,cAAcoF,mBAAmB;;kCAE1C,MAAClD;wBACCb,OAAOrB,cAAcqF,kBAAkB;wBACvCjE,OAAO,GAAG0B,IAAI,IAAI,EAAEI,QAAQ,SAAS,CAAC;;0CAEtC,KAAChB;gCAAIb,OAAOrB,cAAcsF,uBAAuB;;0CACjD,KAACpD;gCACCb,OAAO;oCAAE,GAAIrB,cAAcuF,kBAAkB;oCAAoBtD,iBAAiBuC;gCAAa;;;;;;YAMpG/B,6BACC,MAACP;gBAAIb,OAAOrB,cAAcwF,yBAAyB;;kCACjD,MAACtD;wBAAIb,OAAOrB,cAAcyF,wBAAwB;;0CAChD,KAACC;gCAAMrE,OAAOrB,cAAc2F,uBAAuB;0CAAE;;0CACrD,MAAChE;gCAAKN,OAAOrB,cAAc4F,uBAAuB;;oCAAG1C;oCAAQ;;;;;kCAE/D,MAAChB;wBAAIb,OAAOrB,cAAc6F,wBAAwB;;0CAChD,KAAC3D;gCAAIb,OAAOrB,cAAcsF,uBAAuB;;0CACjD,KAACpD;gCACCb,OAAO;oCACL,GAAIrB,cAAcuF,kBAAkB;oCACpCO,YAAY,CAAC,0CAA0C,EAAEhD,IAAI,MAAM,CAAC;gCACtE;;0CAEF,KAACiB;gCACC5C,MAAK;gCACL4E,KAAI;gCACJC,KAAI;gCACJnC,OAAOX;gCACP8B,UAAUd;gCACV7C,OAAOrB,cAAciG,4BAA4B;;0CAEnD,KAAC/D;gCACCb,OAAO;oCACL,GAAIrB,cAAckG,uBAAuB;oCACzCpE,MAAM,CAAC,KAAK,EAAEoB,QAAQ,QAAQ,CAAC;gCACjC;;;;;;YAOPP,QAAQwD,MAAM,GAAG,mBAChB,MAACjE;;kCACC,KAACA;wBAAIb,OAAOrB,cAAcoG,uBAAuB;kCAAE;;kCACnD,KAAClE;wBAAIb,OAAOrB,cAAcqG,sBAAsB;kCAC7C1D,QAAQ2D,GAAG,CAAC,CAAChC;4BACZ,MAAMiC,aAAazD,IAAI0D,WAAW,OAAOlC,OAAOxB,GAAG,CAAC0D,WAAW;4BAC/D,qBACE,KAACtF;gCAECC,MAAK;gCACLuD,SAAS,IAAML,kBAAkBC;gCACjCjD,OAAO;oCACL,GAAIkF,aACAvG,cAAcyG,+BAA+B,GAC7CzG,cAAc0G,uBAAuB;oCACzCzE,iBAAiBqC,OAAOxB,GAAG;gCAC7B;gCACA1B,OAAOkD,OAAOoB,KAAK;+BATdpB,OAAOxB,GAAG;wBAYrB;;;;;;AAMZ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownPortal.d.ts","sourceRoot":"","sources":["../../../../src/fields/richtext/controls/DropdownPortal.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAQ7C,UAAU,aAAa;IACrB,MAAM,EAAE,OAAO,CAAA;IACf,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,OAAO,EAAE,SAAS,CAAA;IAClB,QAAQ,EAAE,SAAS,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAc,EAAE,EAAE,aAAa,qBAuBlG;AAGD,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/fields/richtext/controls/DropdownPortal.tsx"],"sourcesContent":["'use client'\n\n/**\n * Dropdown - Renders dropdown content using Radix Popover for proper focus management\n *\n * Uses @radix-ui/react-popover which provides:\n * - Proper focus management that integrates with Puck's dirty state tracking\n * - Automatic close on escape and click outside\n * - Focus restoration to trigger element on close\n *\n * IMPORTANT: Uses data-puck-rte-menu attribute so Puck's blur handler recognizes\n * this dropdown as part of the rich text menu. Without this, clicking the dropdown\n * causes the editor to blur, clearing currentRichText state and breaking all menu\n * controls (including native Puck ones like HeadingSelect).\n */\n\nimport React, { type ReactNode } from 'react'\nimport {\n Root as PopoverRoot,\n Trigger as PopoverTrigger,\n Portal as PopoverPortal,\n Content as PopoverContent,\n} from '@radix-ui/react-popover'\n\ninterface DropdownProps {\n isOpen: boolean\n onOpenChange: (open: boolean) => void\n trigger: ReactNode\n children: ReactNode\n minWidth?: number\n}\n\nexport function Dropdown({ isOpen, onOpenChange, trigger, children, minWidth = 160 }: DropdownProps) {\n return (\n <PopoverRoot open={isOpen} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>{trigger}</PopoverTrigger>\n <PopoverPortal>\n <PopoverContent\n align=\"start\"\n sideOffset={4}\n style={{\n backgroundColor: 'var(--puck-color-white)',\n border: '1px solid var(--puck-color-grey-09)',\n borderRadius: '8px',\n boxShadow: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n zIndex: 99999,\n minWidth,\n }}\n data-puck-rte-menu\n >\n {children}\n </PopoverContent>\n </PopoverPortal>\n </PopoverRoot>\n )\n}\n\n// Keep the old export name for backwards compatibility during migration\nexport { Dropdown as DropdownPortal }\n"],"names":["React","Root","PopoverRoot","Trigger","PopoverTrigger","Portal","PopoverPortal","Content","PopoverContent","Dropdown","isOpen","onOpenChange","trigger","children","minWidth","open","asChild","align","sideOffset","style","backgroundColor","border","borderRadius","boxShadow","zIndex","data-puck-rte-menu","DropdownPortal"],"mappings":"AAAA;;AAEA;;;;;;;;;;;;CAYC,GAED,OAAOA,WAA+B,QAAO;AAC7C,SACEC,QAAQC,WAAW,EACnBC,WAAWC,cAAc,EACzBC,UAAUC,aAAa,EACvBC,WAAWC,cAAc,QACpB,0BAAyB;AAUhC,OAAO,SAASC,SAAS,EAAEC,MAAM,EAAEC,YAAY,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,WAAW,GAAG,EAAiB;IACjG,qBACE,MAACZ;QAAYa,MAAML;QAAQC,cAAcA;;0BACvC,KAACP;gBAAeY,OAAO;0BAAEJ;;0BACzB,KAACN;0BACC,cAAA,KAACE;oBACCS,OAAM;oBACNC,YAAY;oBACZC,OAAO;wBACLC,iBAAiB;wBACjBC,QAAQ;wBACRC,cAAc;wBACdC,WAAW;wBACXC,QAAQ;wBACRV;oBACF;oBACAW,oBAAkB;8BAEjBZ;;;;;AAKX;AAEA,wEAAwE;AACxE,SAASJ,YAAYiB,cAAc,GAAE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FontSizeControl.d.ts","sourceRoot":"","sources":["../../../../src/fields/richtext/controls/FontSizeControl.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,OAAO,KAAoD,MAAM,OAAO,CAAA;AAIxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAE3C,UAAU,oBAAoB;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;CAChC;AAED,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,oBAAoB,qBA6H5E"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/fields/richtext/controls/FontSizeControl.tsx"],"sourcesContent":["'use client'\n\n/**\n * FontSizeControl - Font size control for Puck RichText toolbar\n *\n * A dropdown with:\n * - 9 preset sizes (XS to 4XL)\n * - Custom size input with px/rem/em unit selection\n */\n\nimport React, { useState, useCallback, type CSSProperties } from 'react'\nimport { ALargeSmall, ChevronDown } from 'lucide-react'\nimport { FONT_SIZES, FONT_SIZE_UNITS, controlStyles } from './shared.js'\nimport { Dropdown } from './DropdownPortal.js'\nimport type { Editor } from '@tiptap/react'\n\ninterface FontSizeControlProps {\n editor: Editor\n currentSize: string | undefined\n}\n\nexport function FontSizeControl({ editor, currentSize }: FontSizeControlProps) {\n const [isOpen, setIsOpen] = useState(false)\n const [customValue, setCustomValue] = useState('')\n const [customUnit, setCustomUnit] = useState<'px' | 'rem' | 'em'>('px')\n\n const handlePresetClick = useCallback(\n (value: string | null) => {\n if (value) {\n editor.chain().focus().setFontSize(value).run()\n } else {\n editor.chain().focus().unsetFontSize().run()\n }\n setIsOpen(false)\n },\n [editor]\n )\n\n const handleCustomApply = useCallback(() => {\n if (customValue) {\n const size = `${customValue}${customUnit}`\n editor.chain().focus().setFontSize(size).run()\n setIsOpen(false)\n setCustomValue('')\n }\n }, [editor, customValue, customUnit])\n\n const handleCustomKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n handleCustomApply()\n }\n },\n [handleCustomApply]\n )\n\n // Find current preset label if any\n const currentPreset = FONT_SIZES.find((s) => s.value === currentSize)\n const hasCustomSize = currentSize && !currentPreset\n\n const trigger = (\n <button\n type=\"button\"\n title=\"Font Size\"\n style={{\n ...controlStyles.dropdownTrigger,\n ...(currentSize ? controlStyles.dropdownTriggerActive : {}),\n }}\n >\n <ALargeSmall style={controlStyles.icon} />\n <ChevronDown style={{ width: '12px', height: '12px' }} />\n </button>\n )\n\n return (\n <div style={{ position: 'relative' }}>\n <Dropdown isOpen={isOpen} onOpenChange={setIsOpen} trigger={trigger} minWidth={200}>\n {/* Preset label */}\n <div style={controlStyles.dropdownLabel}>Presets</div>\n\n {/* Preset grid */}\n <div style={controlStyles.fontSizeGrid as CSSProperties}>\n {FONT_SIZES.map((size) => {\n const isActive = size.value === currentSize || (!size.value && !currentSize)\n return (\n <button\n key={size.label}\n type=\"button\"\n onClick={() => handlePresetClick(size.value)}\n title={size.px}\n style={{\n ...controlStyles.fontSizeButton,\n ...(isActive ? controlStyles.fontSizeButtonActive : {}),\n }}\n >\n {size.label}\n </button>\n )\n })}\n </div>\n\n {/* Custom size input */}\n <div style={controlStyles.customSizeRow as CSSProperties}>\n <input\n type=\"number\"\n placeholder=\"16\"\n min=\"8\"\n max=\"200\"\n value={customValue}\n onChange={(e) => setCustomValue(e.target.value)}\n onKeyDown={handleCustomKeyDown}\n style={controlStyles.customSizeInput}\n />\n <select\n value={customUnit}\n onChange={(e) => setCustomUnit(e.target.value as 'px' | 'rem' | 'em')}\n style={controlStyles.customSizeSelect}\n >\n {FONT_SIZE_UNITS.map((unit) => (\n <option key={unit} value={unit}>\n {unit}\n </option>\n ))}\n </select>\n <button type=\"button\" onClick={handleCustomApply} style={controlStyles.customSizeApply}>\n Apply\n </button>\n </div>\n\n {/* Show current custom size if any */}\n {hasCustomSize && (\n <div\n style={{\n padding: '8px 12px',\n fontSize: '12px',\n color: 'var(--puck-color-grey-05)',\n borderTop: '1px solid var(--puck-color-grey-03)',\n }}\n >\n Current: {currentSize}\n </div>\n )}\n </Dropdown>\n </div>\n )\n}\n"],"names":["React","useState","useCallback","ALargeSmall","ChevronDown","FONT_SIZES","FONT_SIZE_UNITS","controlStyles","Dropdown","FontSizeControl","editor","currentSize","isOpen","setIsOpen","customValue","setCustomValue","customUnit","setCustomUnit","handlePresetClick","value","chain","focus","setFontSize","run","unsetFontSize","handleCustomApply","size","handleCustomKeyDown","e","key","preventDefault","currentPreset","find","s","hasCustomSize","trigger","button","type","title","style","dropdownTrigger","dropdownTriggerActive","icon","width","height","div","position","onOpenChange","minWidth","dropdownLabel","fontSizeGrid","map","isActive","onClick","px","fontSizeButton","fontSizeButtonActive","label","customSizeRow","input","placeholder","min","max","onChange","target","onKeyDown","customSizeInput","select","customSizeSelect","unit","option","customSizeApply","padding","fontSize","color","borderTop"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HighlightControl.d.ts","sourceRoot":"","sources":["../../../../src/fields/richtext/controls/HighlightControl.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,KAAgC,MAAM,OAAO,CAAA;AAKpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAE3C,UAAU,qBAAqB;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,qBAAqB,qBAyDzF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/fields/richtext/controls/HighlightControl.tsx"],"sourcesContent":["'use client'\n\n/**\n * HighlightControl - Text highlight control for Puck RichText toolbar\n *\n * A dropdown color picker for text highlighting with:\n * - Native color input\n * - Hex input with validation\n * - Opacity slider (RGBA support)\n * - Theme color presets\n * - Remove highlight option\n */\n\nimport React, { useState, useCallback } from 'react'\nimport { Highlighter, ChevronDown } from 'lucide-react'\nimport { controlStyles } from './shared.js'\nimport { ColorPickerPanel } from './ColorPickerControl.js'\nimport { Dropdown } from './DropdownPortal.js'\nimport type { Editor } from '@tiptap/react'\n\ninterface HighlightControlProps {\n editor: Editor\n currentColor: string | undefined\n isActive: boolean\n}\n\nexport function HighlightControl({ editor, currentColor, isActive }: HighlightControlProps) {\n const [isOpen, setIsOpen] = useState(false)\n\n const handleColorChange = useCallback(\n (color: string | null) => {\n if (color) {\n editor.chain().focus().setHighlight({ color }).run()\n } else {\n editor.chain().focus().unsetHighlight().run()\n }\n },\n [editor]\n )\n\n const close = useCallback(() => setIsOpen(false), [])\n\n const trigger = (\n <button\n type=\"button\"\n title=\"Highlight\"\n style={{\n ...controlStyles.dropdownTrigger,\n ...(isActive ? controlStyles.dropdownTriggerActive : {}),\n }}\n >\n <Highlighter style={controlStyles.icon} />\n <ChevronDown style={{ width: '12px', height: '12px' }} />\n {/* Highlight color indicator */}\n {currentColor && (\n <span\n style={{\n position: 'absolute',\n bottom: '2px',\n left: '50%',\n transform: 'translateX(-50%)',\n width: '12px',\n height: '3px',\n borderRadius: '1px',\n backgroundColor: currentColor,\n }}\n />\n )}\n </button>\n )\n\n return (\n <div style={{ position: 'relative' }}>\n <Dropdown isOpen={isOpen} onOpenChange={setIsOpen} trigger={trigger} minWidth={260}>\n <ColorPickerPanel\n currentColor={currentColor}\n onColorChange={handleColorChange}\n onClose={close}\n mode=\"highlight\"\n />\n </Dropdown>\n </div>\n )\n}\n"],"names":["React","useState","useCallback","Highlighter","ChevronDown","controlStyles","ColorPickerPanel","Dropdown","HighlightControl","editor","currentColor","isActive","isOpen","setIsOpen","handleColorChange","color","chain","focus","setHighlight","run","unsetHighlight","close","trigger","button","type","title","style","dropdownTrigger","dropdownTriggerActive","icon","width","height","span","position","bottom","left","transform","borderRadius","backgroundColor","div","onOpenChange","minWidth","onColorChange","onClose","mode"],"mappings":"AAAA;;AAEA;;;;;;;;;CASC,GAED,OAAOA,SAASC,QAAQ,EAAEC,WAAW,QAAQ,QAAO;AACpD,SAASC,WAAW,EAAEC,WAAW,QAAQ,eAAc;AACvD,SAASC,aAAa,QAAQ,cAAa;AAC3C,SAASC,gBAAgB,QAAQ,0BAAyB;AAC1D,SAASC,QAAQ,QAAQ,sBAAqB;AAS9C,OAAO,SAASC,iBAAiB,EAAEC,MAAM,EAAEC,YAAY,EAAEC,QAAQ,EAAyB;IACxF,MAAM,CAACC,QAAQC,UAAU,GAAGZ,SAAS;IAErC,MAAMa,oBAAoBZ,YACxB,CAACa;QACC,IAAIA,OAAO;YACTN,OAAOO,KAAK,GAAGC,KAAK,GAAGC,YAAY,CAAC;gBAAEH;YAAM,GAAGI,GAAG;QACpD,OAAO;YACLV,OAAOO,KAAK,GAAGC,KAAK,GAAGG,cAAc,GAAGD,GAAG;QAC7C;IACF,GACA;QAACV;KAAO;IAGV,MAAMY,QAAQnB,YAAY,IAAMW,UAAU,QAAQ,EAAE;IAEpD,MAAMS,wBACJ,MAACC;QACCC,MAAK;QACLC,OAAM;QACNC,OAAO;YACL,GAAGrB,cAAcsB,eAAe;YAChC,GAAIhB,WAAWN,cAAcuB,qBAAqB,GAAG,CAAC,CAAC;QACzD;;0BAEA,KAACzB;gBAAYuB,OAAOrB,cAAcwB,IAAI;;0BACtC,KAACzB;gBAAYsB,OAAO;oBAAEI,OAAO;oBAAQC,QAAQ;gBAAO;;YAEnDrB,8BACC,KAACsB;gBACCN,OAAO;oBACLO,UAAU;oBACVC,QAAQ;oBACRC,MAAM;oBACNC,WAAW;oBACXN,OAAO;oBACPC,QAAQ;oBACRM,cAAc;oBACdC,iBAAiB5B;gBACnB;;;;IAMR,qBACE,KAAC6B;QAAIb,OAAO;YAAEO,UAAU;QAAW;kBACjC,cAAA,KAAC1B;YAASK,QAAQA;YAAQ4B,cAAc3B;YAAWS,SAASA;YAASmB,UAAU;sBAC7E,cAAA,KAACnC;gBACCI,cAAcA;gBACdgC,eAAe5B;gBACf6B,SAAStB;gBACTuB,MAAK;;;;AAKf"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fields/richtext/controls/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,EAEL,YAAY,EACZ,SAAS,EACT,UAAU,EAEV,UAAU,EACV,eAAe,EAEf,aAAa,GACd,MAAM,aAAa,CAAA;AAEpB,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/fields/richtext/controls/index.ts"],"sourcesContent":["/**\n * RichText toolbar controls\n *\n * Custom controls for Puck's native richtext field.\n */\n\nexport { ColorPickerControl, ColorPickerPanel } from './ColorPickerControl.js'\nexport { FontSizeControl } from './FontSizeControl.js'\nexport { HighlightControl } from './HighlightControl.js'\n\nexport {\n // Color utilities\n normalizeHex,\n hexToRgba,\n parseColor,\n // Font size presets\n FONT_SIZES,\n FONT_SIZE_UNITS,\n // Shared styles\n controlStyles,\n} from './shared.js'\n\nexport type { FontSizeUnit } from './shared.js'\n"],"names":["ColorPickerControl","ColorPickerPanel","FontSizeControl","HighlightControl","normalizeHex","hexToRgba","parseColor","FONT_SIZES","FONT_SIZE_UNITS","controlStyles"],"mappings":"AAAA;;;;CAIC,GAED,SAASA,kBAAkB,EAAEC,gBAAgB,QAAQ,0BAAyB;AAC9E,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,gBAAgB,QAAQ,wBAAuB;AAExD,SACE,kBAAkB;AAClBC,YAAY,EACZC,SAAS,EACTC,UAAU,EACV,oBAAoB;AACpBC,UAAU,EACVC,eAAe,EACf,gBAAgB;AAChBC,aAAa,QACR,cAAa"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/fields/richtext/controls/shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAM1C,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUb,CAAA;AAEV,eAAO,MAAM,eAAe,8BAA+B,CAAA;AAE3D,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAM3D;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAYhD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAqBtF;AAMD,eAAO,MAAM,aAAa;UAInB,aAAa;qBAcb,aAAa;2BAIb,aAAa;cAab,aAAa;kBAab,aAAa;mBASb,aAAa;uBAMb,aAAa;0BASb,aAAa;oBAMb,aAAa;sBAUb,aAAa;yBAab,aAAa;wBAUb,aAAa;6BAUb,aAAa;wBAKb,aAAa;+BAMb,aAAa;8BAMb,aAAa;6BAKb,aAAa;6BAMb,aAAa;8BAQb,aAAa;kCAUb,aAAa;6BAYb,aAAa;6BAMb,aAAa;4BAMb,aAAa;6BAWb,aAAa;qCAWb,aAAa;4BAeb,aAAa;4BASb,aAAa;kBAQb,aAAa;oBAYb,aAAa;0BAOb,aAAa;mBAQb,aAAa;qBAWb,aAAa;sBAUb,aAAa;qBAWb,aAAa;CACnB,CAAA"}
|